Divergence from Ethereum
Despite ENI's full EVM compatibility, there are still some differences between ENI's EVM and Ethereum's EVM.
EVM Differences
Unlike Ethereum's mainnet, which uses the Cancun version on the execution layer, ENI uses the Shanghai version of EVM. This means that ENI does not support features like blob transactions.
Opcode Differences
PREVRANDAO
Since ENI does not rely on the same pseudo-randomness method as Ethereum's Proof of Stake (PoS) to determine the next validator, it does not have a RANDOM pseudo-random value that can be set as the return value for PREVRANDAO. In ENI, PREVRANDAO is set to return the hash of the current block time.
For contract logic that requires strong guarantees of randomness, it is recommended to use externally verifiable oracles (as is also recommended on Ethereum).
COINBASE
The Coinbase address in ENI is always set to the EVM address of the global fee collector.
State Root
Since ENI uses AVL trees instead of Merkle Patricia Tries (MPT) for data storage, ENI does not have a state root for each account. The global state root is the root of the AVL tree, which is also different from Ethereum's overall state root (which is the MPT root).
Block Hash
The block hash on ENI is calculated based on the Tendermint data format of the block header, so it is different from Ethereum's block hash.
Base Fee and Tips
ENI supports all types of transactions. However, for traditional (non-EIP-1559) transactions, you must specify a base fee of 1 gwei. In addition, any "gas demand/gas limit" that exceeds the actual "gas used" may not be refunded in full or in part.
The current EIP-1559 parameters can be obtained through the enid SDK tool:
Block Limits
ENI's gas limit on the mainnet is 10M, while Ethereum's gas limit is 30M. Additionally, ENI has a 21MB byte size limit, whereas Ethereum does not have a byte-based limit.
Finality
ENI has instant finality, meaning that commitment levels such as "safe," "latest," "justified," and "finalized" on Ethereum are all the same on ENI.
Pending State
On Ethereum, the block proposer executes the proposed block first (updating its local state) before broadcasting the proposal to other nodes. This updated state remains pending until it is accepted by other nodes.
However, on ENI, the block proposer broadcasts the proposal first, and it is only executed once accepted. Since each node executes the block almost simultaneously, ENI does not have a “pending state” window.
Last updated