LogoLogo
  • Welcome
    • About ENI
  • Getting Started
    • Quickstart
      • Account Structure
      • Token Standards
      • Gas
    • Divergence from Ethereum
    • Transactions
      • Creating Transaction
    • Governance
      • Proposals
    • Oracles
  • Build
    • Setup and Installation
    • Smart Contracts
      • EVM (General)
      • EVM (CLI)
      • Querying State
    • Frontend Development
      • Overview
      • How to Deploy Your First dApp
    • Ecosystem
      • Tools and Resources
      • Resources
  • Node
    • Getting Started
    • Node Operators Guide
    • Validator Operations Guide
    • Advanced Configuration & Monitoring
    • Technical Reference
  • Reference
    • Overview
    • enid
    • CLI
      • enid add-genesis-account
      • enid blocktest
      • enid collect-gentxs
      • enid compact
      • enid config
      • enid debug
      • enid export
      • enid gentx
      • enid help
      • enid init
      • enid keys
        • enid keys delete
        • enid keys add
        • enid keys export
        • enid keys import
        • enid keys list
        • enid keys mnemonic
        • enid keys parse
        • enid keys show
      • enid latest_version
      • enid migrate
      • enid prune
      • enid query
        • enid query accesscontrol
        • enid query upgrade
        • enid query account
        • enid query auth
        • enid query bank
        • enid query block
        • enid query authz
        • enid query distribution
        • enid query epoch
        • enid query evidence
        • enid query evm
        • enid query feegrant
        • enid query ibc-transfer
        • enid query gov
        • enid query ibc
        • enid query mint
        • enid query oracle
        • enid query params
        • enid query slashing
        • enid query staking
        • enid query tendermint-validator-set
        • enid query tokenfactory
        • enid query tx
        • enid query txs
      • enid rollback
      • enid start
      • enid status
      • enid tendermint
      • enid tools
      • enid tx
      • enid validate-genesis
      • enid version
Powered by GitBook
On this page
  • EVM Differences
  • Opcode Differences
  • PREVRANDAO
  • COINBASE
  • State Root
  • Block Hash
  • Base Fee and Tips
  • Block Limits
  • Finality
  • Pending State
  1. Getting Started

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:

enid q params subspace evm KeyTargetGasUsedPerBlock

key: KeyTargetGasUsedPerBlock
subspace: evm
value: '"850000"'
root@server:/home/ubuntu # enid q params subspace evm KeyMaxDynamicBaseFeeUpwardAdjustment
key: KeyMaxDynamicBaseFeeUpwardAdjustment
subspace: evm
value: '"0.007500000000000000"'

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.

PreviousGasNextTransactions

Last updated 2 months ago