Comprehensive guide to all differences between Cosmos EVM and Ethereum mainnet that affect developers, infrastructure operators, and users
Aspect | Cosmos EVM | Standard EVM | Impact |
---|---|---|---|
Transaction Ordering | Fee priority and nonce with mempool | Gas price and nonce | Similar ordering with two-tier system |
Transactions per Block | Multiple per account | Multiple per account | Full Ethereum compatibility |
Mempool | Two-tiered mempool | Traditional mempool | Supports nonce gaps and batching |
Block Rewards | Native token inflation to validators | Block rewards + tips | Different economic model |
Consensus | Tendermint BFT | Proof of Work/Stake | 1-2 second vs 12+ second blocks |
Finality | Immediate (single block) | Probabilistic (12+ confirmations) | No waiting period vs 12-15 minute finality |
Chain Reorganizations | Not possible | Possible | Event handling simplified |
Address Formats | Dual (0x… and cosmos1…) | Ethereum only (0x…) | Cross-format compatibility |
Gas Token | Native chain token | ETH/derivatives | Chain-specific economics |
Base Fee | Configurable (can be 0 or dynamic) | Dynamic based on demand | Chain-specific configuration |
Block Time | 1-2 seconds | 12-15 seconds (varies by L2) | Faster transaction confirmation |
Cross-chain | Native IBC | Bridge protocols | Built-in interoperability |
NoBaseFee
parameter (returns 0 for block.basefee
)min-gas-price
configurationModule | Address | Purpose |
---|---|---|
Staking | 0x0000000000000000000000000000000000000800 | Delegate, undelegate, redelegate tokens |
Distribution | 0x0000000000000000000000000000000000000801 | Claim rewards, manage withdrawals |
IBC Transfer | 0x0000000000000000000000000000000000000802 | Cross-chain token transfers |
Governance | 0x0000000000000000000000000000000000000805 | Submit/vote on proposals |
Bank | 0x0000000000000000000000000000000000000804 | ERC20-style access to native tokens |
Slashing | 0x0000000000000000000000000000000000000806 | Validator slashing and jail management |
Bech32 | 0x0000000000000000000000000000000000000400 | Address format conversion |
P256 | 0x0000000000000000000000000000000000000100 | P-256 elliptic curve operations |
ERC20 | Dynamic per token | Standard ERC20 for native Cosmos tokens |
WERC20 | Dynamic per token | Wrapped native token functionality |
Address | Function | Available on Cosmos EVM |
---|---|---|
0x01 | ecrecover | Yes |
0x02 | sha256 | Yes |
0x03 | ripemd160 | Yes |
0x04 | identity | Yes |
0x05 | modexp | Yes |
0x06 | ecadd | Yes |
0x07 | ecmul | Yes |
0x08 | ecpairing | Yes |
0x09 | blake2f | Yes |
Method Category | Examples | Notes |
---|---|---|
Core Methods | eth_getBalance , eth_call , eth_sendTransaction , eth_getTransactionReceipt | Full compatibility |
Gas Methods | eth_gasPrice , eth_estimateGas , eth_maxPriorityFeePerGas , eth_feeHistory | Full EIP-1559 support |
Block Methods | eth_blockNumber , eth_getBlockByHash , eth_getBlockByNumber | Immediate finality |
Mining Stub Methods | eth_coinbase , eth_mining (always false), eth_hashrate (always 0) | Returns static values for compatibility |
Uncle Methods | eth_getUncleCount* (always 0), eth_getUncleBy* (always null) | Returns expected values for no uncles |
Filter Methods | eth_newFilter , eth_newBlockFilter , eth_getFilterChanges , eth_getFilterLogs | Full filter support with block range limits |
Transaction Methods | eth_resend , eth_sendRawTransaction , eth_getTransactionByHash | Full transaction management |
Personal Methods | personal_sign , personal_newAccount , personal_importRawKey , personal_sendTransaction , personal_ecRecover , personal_lockAccount , personal_unlockAccount | Full implementation |
Debug Methods | debug_traceTransaction , debug_traceBlockByNumber , debug_traceCall , debug_memStats , debug_freeOSMemory , etc. | Full implementation |
Admin Methods | admin_peers , admin_nodeInfo , admin_datadir , admin_startHTTP , admin_stopHTTP , admin_startWS , admin_stopWS | Full implementation |
Method | Purpose |
---|---|
eth_getTransactionLogs | Retrieve logs for a specific transaction |
eth_getBlockReceipts | Get all receipts for a given block |
debug_freeOSMemory | Force garbage collection |
debug_setGCPercent | Configure garbage collector |
debug_memStats | Return detailed memory statistics |
debug_setBlockProfileRate | Set block profiling rate |
debug_writeBlockProfile | Write block profile to file |
debug_writeMemProfile | Write memory profile to file |
debug_writeMutexProfile | Write mutex profile to file |
Method | Category | Reason |
---|---|---|
All trace_* methods | Trace | Parity/OpenEthereum trace methods not implemented |
eth_subscribe syncing | WebSocket | Only newHeads, logs, and newPendingTransactions events supported |
Namespace | Purpose | Why Not Relevant |
---|---|---|
les_* | Light Ethereum Subprotocol | Cosmos uses full nodes with Tendermint consensus, no light client protocol |
clique_* | Clique PoA consensus | Cosmos uses Tendermint BFT consensus instead of Proof of Authority |
engine_* | Engine API for PoS | Used for Ethereum’s execution/consensus client separation, not applicable with Tendermint |
trace_* | Parity/OpenEthereum tracing | Different tracing implementation, limited debug_* methods available instead |
miner_* | Mining operations | No mining in Tendermint BFT consensus, but stub methods respond for compatibility |
parity_* | Parity-specific methods | Client-specific methods not implemented |
bor_* | Polygon Bor consensus | Chain-specific consensus methods not applicable |
eth_*
, web3_*
, net_*
, txpool_*
, personal_*
, debug_*
, and admin_*
namespaces that are essential for Ethereum compatibility and developer tooling.
0x0000000000000000000000000000000000000400
for conversion.
NoBaseFee
parametermin-gas-price
eth_createAccessList
method implemented