Skip to main content

Differences between Monad and Ethereum

This list assembles notable behavioral differences between Monad and Ethereum from the perspective of a smart contract developer.

Virtual Machine

  1. Max contract size is 128kb (up from 24.5kb in Ethereum).

  2. Several opcodes are repriced, to reweight relative scarcities of resources due to Monad optimizations. Additionally, there is a larger refund for zeroing a storage slot. See Opcode Pricing and Refunds.

  3. The secp256r1 (P256) verification precompile in RIP-7212 is supported. See Precompiles.

Transactions

  1. Transactions are charged based on gas limit rather than gas usage, i.e. total tokens deducted from the sender's balance is value + gas_bid * gas_limit. As discussed in Gas in Monad, this is a DOS-prevention measure for asynchronous execution.

  2. Consensus and execution utilize the Reserve Balance mechanism to ensure that all transactions included in consensus can be paid for. This mechanism places light restrictions on transaction inclusion at consensus time, and defines select conditions under which a transaction will revert at execution time.

  3. Due to the Reserve Balance mechanism, you may see transactions in the blockchain which ultimately fail due to trying to spend too much MON relative to account balance. These transactions still pay for gas and are valid transactions whose result is execution reversion. This isn't a protocol difference, as many reverting Ethereum transactions are included in the chain, but it may be different from expectation. Longer discussion.

  4. Transaction type 3 (EIP-4844 type aka blob transactions) is not supported.

  5. There is no global mempool. For efficiency, transactions are forwarded to the next few leadersas described in Local Mempool.

Historical Data

  1. Due to Monad's high throughput, full nodes do not provide access to arbitrary historic state, as this would require too much storage. See Historical Data for a fuller discussion.

RPC

See: RPC Differences