> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Differences between Monad and Ethereum

<Tip>
  To take into account these differences, there is a custom [Monad Foundry](/tooling-and-infra/toolkits/monad-foundry)
  to ensure that your local development environment matches Monad's onchain behavior.
</Tip>

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](/developer-essentials/opcode-pricing).

3. The `secp256r1` (P256) verification precompile at `0x0100` per
   [EIP-7951](https://eips.ethereum.org/EIPS/eip-7951) is supported, enabling on-chain
   verification of WebAuthn/passkey signatures.
   See [Precompiles](/developer-essentials/precompiles#p256-signature-verification).

## 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](/developer-essentials/gas-pricing), this is a DoS-prevention measure for
   asynchronous execution.

2. Consensus and execution utilize the [Reserve Balance](/developer-essentials/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](/developer-essentials/reserve-balance#transactions-that-are-included-but-revert).

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](/monad-arch/consensus/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](/developer-essentials/reserve-balance) rules. If the delegation is removed, dipping below 10 MON
   is allowed. [Discussion](/developer-essentials/eip-7702#delegated-eoas-cant-dip-below-10-mon).

2. If an EOA is EIP-7702-delegated, when it is called as a smart contract, the
   `CREATE` and `CREATE2` opcodes are banned. [Discussion](/developer-essentials/eip-7702#delegated-contract-code-cannot-call-createcreate2).

## 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](/developer-essentials/historical-data) for a fuller
discussion.

## RPC

See: [RPC Differences](/reference/rpc-differences)
