Technology

Klaytn v1.8.0 Release Notes

They say one human-year is equivalent to seven dog-years, and a similar ratio goes for crypto and the traditional industries. That being said, we are so thrilled to finally release Klaytn v.1.8.0 after five months since our last big update. We will explain what has changed, and what the changes mean for you.

Klaytn v1.8.0 contains a protocol upgrade which results in backwards incompatible changes, like the Ethereum hard forks. All nodes would thus have to be upgraded to v1.8.0 or higher before the target block number.

The planned hard fork schedule is as follows:

Baobab Testnet (Baobab block number 86513895, planned date: March 24)

  • EthTxType hard fork: #86513895
    (IstanbulEVM and LondonEVM hard fork already applied on Baobab)

Cypress Mainnet: Block number 86816005, estimated time is 12:30 ~ 13:30 (UTC+9), 31st March 2022.

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

Note: Istanbul EVM hard fork includes changes in the gas cost for the EVM opcode as well as in using the APIs. The existing contracts may not function as expected due to these changes, so please refer to the [Cautions on the Protocol Update] section of this article.

Protocol Upgrade Features

– Introduced EthTxType hard fork that enables new transaction types to support Ethereum transaction formats: TxTypeEthereumAccessList and TxTypeEthereumDynamicFee (#1142 #1158)

What’s New in v1.8.0

– EthereumTxTypeEnvelope has been defined (#1171)

– You can use the EIP-2930 signer and London signer for the new transaction types (#1142 #1158)

– eth namespace APIs are now available to support Ethereum API format (#1076 #1077 #1083 #1088 #1093 #1095 #1121 #1123 #1124 #1127 #1129 #1130 #1134 #1172)

– Added new klay namespace APIs: klay_maxPriorityFeePerGasklay_createAccessList, and klay_feeHistory (#1156)

– With the rpc.eth.noncompatible flag, you can disable Ethereum API format compatibility (#1072)

– Added baseFeePerGas field in the block header API return values (#1183)

– Implemented State Snapshot (#1112 #1116 #1152 #1154 #1155 #1173 #1174)

– Implemented auto-restart daemon for crash tolerance (#1101)

Improvements

– Adjusted account manager unlock timing when a node starts (#1141)

– Allowed add/remove multiple validators in a single vote (#1110)

– Enhanced the validation logic of governance voting API (#1109)

– Unified mutexes in blockchain.go (#1099)

Fixes

– Fixed a governance cache initializing bug (#1168)

– Fixed klay_gasPrice API to return proper gas price values (#1211)

– Fixed race condition issues triggered by transaction fields update (#1091)

– Fixed call tracer panic caused by deep return objects (#1203)

ETC

– Set hard fork block numbers for Cypress network (#1230)

– IstanbulEVM hard fork: 86816005

– LondonEVM hard fork: 86816005

– EthTxType hard fork: 86816005

– Set a hard fork block number for Baobab network (#1230)

– EthTxType hard fork: 86513895

Cautions regarding the hard fork

The new version is going to affect Klaytn DApps currently in service, so if you are a service operator or a developer, we recommend you also read the series Toward Ethereum Equivalence #1 #2 #3 #4 along with the instructions below.

For DApp Services Providers

You may experience Out of Gas errors with old smart contracts.

The IstanbulEVM hard fork EVM includes changes in the gas cost for the opcode (Please refer to “Protocol Upgrade Features” in the Klaytn v1.7.0 Release Notes). If your contract had a lot of functions that require limited gas cost like fallback, the change in gas cost may cause an Out of Gas error. So far we have determined these cases for upgradeable contracts that inherited OpenZeppelin’s BaseAdminUpgradeabilityProxy.sol and BaseUpgradeabilityProxy.sol implementing a fallback function identical to Proxy.sol. Please check if your functions are implemented in a similar way. Also keep in mind that gas costs are subject to constant change, so please refrain from using actions with heavy loads in the fallback except for printing logs (reference).

Some Precompiled Contract addresses will be changed.

The addresses vmLog(0x09)feePayer(0x0a)validateSender(0x0b) will be transferred to ensure compatibility with Ethereum’s precompiled contracts. It only applies to contracts deployed after the hard fork; contracts deployed before that will remain usable. For more details, please refer to Toward Ethereum Equivalence #2 — Changes in Precompiled Contract Addresses.

Update your caver to v1.8.0 or higher to support the new transaction types

You will be able to use the new transaction types with the EthTxType hard fork. If you need the new transaction formats for services that require accessing the transactions of other accounts, make sure to update your caver to v1.8.0 (jsjava) or higher. For more details on the new types, please refer to Toward Ethereum Equivalence #4 — Ethereum transaction types.

For EN Operators

New return values for eth and klay APIs

Before, you could make an API call using the eth namespace and it worked the same as klay namespace. But starting with v1.8.0, the eth namespace APIs will adopt Ethereum API return formats. You can find out more in Toward Ethereum Equivalence #3 — Supporting Ethereum API formats. If you want to stick to the behaviors of the old version and use eth like klay, just add the — rpc.eth.noncompatible init option.

Add eth in the EN’s default allowed API list.

eth namespace APIs are supported for ENs, and eth has been added to the default allowed list. You need to add eth to the configurations of RPC_API and WS_API in the kend.conf file in order to use eth APIs. netweb3 APIs used with Ethereum tools like hardhat have also been added to the list. To sum up, the default API white list in v1.8.0 includes: RPC_API=”klay,net,eth,web3″, WS_API=”klay,net,eth,web3″

v1.8.1 Release Notes (Added March 18)

This version contains a fix that enhances MetaMask compatibility. It affects the return format of block header APIs. So, it is recommended that you update the ENs using the eth_getHeader-related APIs to this version.

  • Block header API returns baseFeePerGas field only after the EthTxType hard fork (#1247)

v1.8.2 Release Notes (Added March 23)

  • Fixed to return the same receipt status with Ethereum when serving eth_getTransactionReceipt
  • Removed EthereumTxTypeEnvelope from raw transaction API returns
  • Fixed to return nil for non-existing block using eth namespace APIs