Technology

Klaytn v1.8.0 릴리즈 노트

인간의 1년은 강아지의 7년이라고들 하죠. 크립토와 전통 산업 간에도 비슷한 비율이 적용되는데요, 그런 의미에서 무려 5개월 만에 v.1.8.0로 새로워진 클레이튼을 선보이게 되어 너무 설레입니다. 새로운 기능과 개선사항들을 소개해드릴게요.

Klaytn v1.8.0은 프로토콜 업그레이드(하드포크)를 포함하고 있습니다. 이더리움의 하드포크처럼 과거 버전과 호환되지 않는 변경이기 때문에 모든 노드들은 정해진 블록번호 이전에 반드시 v1.8.0 이상 버전으로 업데이트를 해야합니다.

하드포크 일정은 다음과 같습니다.

Baobab Testnet (Baobab 블록번호 86513895, 예상 일정 3월 24일)

  • EthTxType hard fork: #86513895(Baobab에는 이미 IstanbulEVM 과 LondonEVM 하드포크가 적용되었음)

Cypress Mainnet (Cypress 블록번호 86816005, 예상 일정 3월 31일)

  • IstanbulEVM hard fork: #86816005
  • LondonEVM hard fork: #86816005
  • EthTxType hard fork: #86816005

주의: Istanbul EVM 하드포크에는 EVM 명령코드의 가스 코스트 변경 및 API 사용법의 변화가 포함되어 있습니다. 이 변경으로 인하여 기존에 동작하던 컨트랙트가 동작하지 않을 수 있으니 문서 하단의 “하드포크에 따른 주의사항” 부분을 꼭 확인해주시길 바랍니다.

프로토콜 업그레이드 기능

  • 새 트랜잭션 타입을 지원하는 EthTxType 하드포크를 적용하여 다음 이더리움 트랜잭션 타입을 사용할 수 있습니다: TxTypeEthereumAccessListTxTypeEthereumDynamicFee (#1142 #1158)

신규 기능

  • EthereumTxTypeEnvelope 정의 (#1171)
  • 새로운 트랜잭션 타입에 사용될 EIP-2930 signer와 London signer를 구현했습니다 (#1142 #1158)
  • 이더리움 API 포맷을 지원하기 위해 eth 네임스페이스 API를 추가했습니다 (#1076 #1077 #1083 #1088 #1093 #1095 #1121 #1123 #1124 #1127 #1129 #1130 #1134 #1172)
  • 새로운 klay 네임스페이스 API도 추가되었습니다: klay_maxPriorityFeePerGasklay_createAccessList, and klay_feeHistory (#1156)
  • 이더리움 API 포맷 호환성을 비활성화시키는 rpc.eth.noncompatible 플래그도 도입했습니다 (#1072)
  • 블록헤더 API 반환값에 baseFeePerGas 필드를 추가했습니다 (#1183)
  • State Snapshot을 구현했습니다 (#1112 #1116 #1152 #1154 #1155 #1173 #1174)
  • Process crash tolerance를 위해 auto-restart daemon을 구현했습니다 (#1101)

개선사항

  • 노드가 시작될 때 계정 관리자 account manager unlock 타이밍을 조절 했습니다 (#1141)
  • 한번의 투표를 통해 여러 validators 들을 추가/제거 할 수 있게되었습니다 (#1110)
  • governance 투표 API에 사용되는 검증로직을 강화하였습니다. (#1109)
  • blockchain.go에서 사용하는 뮤텍스 락들을 하나로 통합하였습니다 (#1099)

수정

  • governance 캐시 초기화 과정에서의 버그를 수정했습니다 (#1168)
  • klay_gasPrice API가 정확한 가스 가격을 출력하도록 수정했습니다 (#1211)
  • 트랜잭션 필드 업데이트 과정에서 발생할 수 있는 race 이슈를 수정했습니다 (#1091)
  • call tracer의 리턴 오브젝트의 깊이가 깊어질 때 발생할 수 있는 패닉현상을 수정했습니다 (#1203)

기타

  • Cypress 네트워크의 하드포크 블록번호를 다음과 같이 설정하였습니다 (#1230)
  • IstanbulEVM hard fork: 86816005
  • LondonEVM hard fork: 86816005
  • EthTxType hard fork: 86816005
  • Baobab 네트워크의 하드포크 블록번호를 다음과 같이 설정하였습니다 (#1230)
  • EthTxType hard fork: 86513895

하드포크에 따른 주의사항

이번 버전은 기존의 서비스 중인 Klaytn DApp에도 많은 영향을 미치므로 서비스 운영자 및 개발자들은 아래 내용과 함께 사전 공유된 Toward Ethereum Equivalence #1 #2 #3 #4 를 읽어보시길 권장드립니다.

DApp 서비스 제공자들을 위한 내용

기존에 동작하던 Smart Contract에서 Out of Gas 에러가 발생할 수 있습니다.

IstanbulEVM 하드포크에는 EVM 명령코드의 가스 코스트 변경내역(Klaytn v1.7.0 Release Note의 Protocol Upgrade Features 참조)이 포함되어 있습니다. fallback 함수와 같이 제한된 가스 코스트로 동작될 수 있는 함수에 많은 동작을 수행하고 있었다면, 가스 코스트의 변화로 인해 Out of Gas가 발생할 수 있습니다. 현재 확인된 바로는 OpenZeppelin의 BaseAdminUpgradeabilityProxy.sol, BaseUpgradeabilityProxy.sol을 상속받은 Upgradable contract가 Proxy.sol 과 동일한 fallback 함수를 구현하고 있을 때 문제가 될 수 있습니다. 유사하게 구현된 경우 확인 바라며, Gas Cost의 변화는 앞으로도 발생할 수 있으니 fallback 함수 등에는 가능한 로그 출력 외의 무거운 동작 사용을 자제해주시길 바랍니다(관련내용 참조).

일부 Precompiled Contract 주소가 변경됩니다.

이더리움 Precopmiled Contract 와의 호환성을 위해 vmLog(0x09)feePayer(0x0a)validateSender(0x0b)의 주소가 이전됩니다. 하드포크 이전에 이미 배포된 컨트랙트는 하드포크 이후에도 동작변화 없이 기존과 동일하게 사용가능하며, 하드포크 이후 배포된 컨트랙트에만 적용됩니다. 이와 관련한 상세내용은 Toward Ethereum Equivalence #2 — Precompiled Contract 주소 변경을 참조해 주시기 바랍니다.

새롭게 도입되는 트랜잭션 타입을 지원하기 위해서는 caver 버전을 v1.8.0 이상으로 업데이트해야합니다.

EthTxType 하드포크부터는 새로운 트랜잭션 타입의 사용이 가능해집니다. 블록 익스플로어와 같이 타인의 트랜잭션도 조회해야하는 서비스에서 신규 타입 지원이 필요하다면 caver 버전을 v1.8.0 (jsjava) 이상으로 업데이트해주시길 바랍니다. 신규 타입에 대한 상세내용은 Toward Ethereum Equivalence #4 — Ethereum 트랜잭션 타입 지원에서 확인할 수 있습니다.

EN 운영자들을 위한 내용

v1.8.0 부터 eth와 klay API 의 리턴 형식이 달라집니다.

기존에는 eth namespace를 이용하여 API를 요청하여도 klay를 사용하는 것과 동일하게 동작하였습니다. 그러나 v1.8.0 부터는 eth를 사용하는 경우 이더리움의 API 리턴 형식을 따르도록 변경되었습니다. 이 변경과 관련된 상세내역은 Toward Ethereum Equivalence #3 — Ethereum API 형식 지원에서 확인하실 수 있습니다. 만약, 이전 버전처럼 eth를 klay처럼 사용하고 싶으시다면 — rpc.eth.noncompatible 실행 옵션을 추가해주시면 됩니다.

EN의 기본으로 허용하는 API 리스트에 eth를 추가하는 것을 권장드립니다.

eth namespace API를 지원하게 되며, EN의 기본 허용 API에 eth가 추가되었습니다. 기존에 사용하시던 EN도 kend.conf 파일의 RPC_API 와 WS_API 설정에 eth를 추가하여야 ethAPI를 사용하실 수 있습니다. 또한, hardhat과 같은 이더리움 도구에서 사용하는 net, web3 API도 기본 허용 리스트에 추가되게 됩니다. v1.8.0의 기본 허용 API 목록: RPC_API=”klay,net,eth,web3″, WS_API=”klay,net,eth,web3″

v1.8.1 릴리즈 노트 (3월 18일 추가)

이 버전에서는 EN의 MetaMask 호환성을 위한 패치가 추가되었습니다. eth_getHeader 관련 API를 사용하는 EN들은 이 버전으로 업데이트하길 권장드립니다.- EthTxType 하드포크 이후에만 블록 헤더 API에서 baseFeePerGas 필드가 출력되도록 변경되었습니다 (#1247)

v1.8.2 릴리즈 노트 (3월 23일 추가)

  • eth_getTransactionReceipt 사용 시 이더리움과 동일한 receipt status를 반환하도록 수정
  • raw 트랜잭션 API 반환값에서 EthereumTxTypeEnvelope 제거
  • eth 네임스페이스 API를 사용하는 존재하지 않는 블록에 대해 nil 반환하도록 수정