iotex-core
This proposal introduces upgrades to the iotex-core blockchain protocol, including upgrading to EVM London and changing the first nonce from 1 to 0 for a new address.
The IoTeX blockchain uses the Ethereum Virtual Machine (EVM) to process Solidity smart contracts. Currently, the iotex-core 2 blockchain protocol utilizes the Berlin release of the EVM. The latest production release of EVM is London, which added 5 Ethereum Improvement Proposals (EIPs) to the Berlin release. Three of these EIPs are relevant to the IoTeX blockchain:
Additionally, for historical reasons, the first transaction sent from an IoTeX address uses nonce = 1, while on Ethereum the first transaction has nonce = 0.
We propose upgrading the iotex-core 2 protocol’s EVM to the London release, as well as updating IoTeX blockchain’s nonce format from nonce = 1 to nonce = 0 for new wallets to align with Ethereum.
Upgrading the EVM version will align IoTeX with the latest production version on Ethereum where smart contracts can now access use the BASEFEE value for a block. In addition, it will fix the gas refund amounts to prevent some attacks and will prohibit the deployment of contracts whose bytecode starts by the 0xEF byte to ensure any conract deployed on IoTeX can still be deployed on Ethereum as is.
For the nonce behavior upgrade, while it is generally only a nuance and not an issue, we should correct the behavior so that the first transaction from a new address created after Mainnet v1.9 will use the same first nonce = 0 format as is the case for Ethereum. This further enhances IoTeX blockchain’s Ethereum compatibility and paves the way for open integration with more projects, such as Gnosis Safe 1.
This proposal, if passed, will be activated as part of the Mainnet v1.9 code release. If approved by the community, Mainnet v1.9 will be activated via hard-fork in mid- to late-September 2022.
Discussion history: https://community.iotex.io/t/idea-mainnet-v1-9-release-evm-london-upgrade-nonce-update/9312