Skip to main content
Use Foundry v1.8.0 or later with the Monad execution network enabled so your local development environment follows Monad’s onchain behavior.
This list assembles notable behavioral differences between Monad and Ethereum from the perspective of a smart contract developer.

Virtual Machine

  1. The maximum contract code size limit is 128 KB (up from 24 KB in Ethereum). Consequently, the max init code size limit is 256 KB (up from 48 KB in Ethereum).
  2. A few opcodes and precompiles are repriced, to reweight relative scarcities of resources due to Monad optimizations. See Opcode Pricing.
  3. Memory expansion is priced linearly rather than quadratically, and a transaction can use at most 8 MB of memory. See Memory expansion.
  4. The secp256r1 (P256) verification precompile at 0x0100 per EIP-7951 is supported, enabling on-chain verification of WebAuthn/passkey signatures. See Precompiles.

Storage

Storage slots are grouped into pages of 128 consecutive slots. Access is warmed per page rather than per slot: the first SLOAD or SSTORE to a page pays the cold cost, and every other slot of that page is warm for the rest of the transaction. Storage layouts that Solidity already produces benefit without changes, since state variables, struct fields, and array elements occupy consecutive slots. Layouts that scatter slots across pages are not penalized; each page pays its own cold cost. See Storage pages for the gas schedule, and MIP-8 for the specification.

Transactions

  1. Transactions are charged based on gas limit rather than gas usage, i.e. total gas 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 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.

EIP-7702 Delegation

  1. If an EOA is EIP-7702-delegated, its balance cannot be lowered below 10 MON due to the Reserve Balance rules. If the delegation is removed, dipping below 10 MON is allowed. Discussion.
  2. If an EOA is EIP-7702-delegated, when it is called as a smart contract, the CREATE and CREATE2 opcodes are banned. Discussion.

Historical Data

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