Skip to main content
eth_simulateV1 is the standard multi-block simulation method from the Ethereum execution APIs specification. It simulates a sequence of blocks, each containing a batch of calls, on top of a base block, without sending anything on chain. Calls within a block execute sequentially and share state, and each simulated block builds on the previous one. The method runs on Node RPC and Virtual Environments; see the full JSON-RPC reference for every method and network. A small set of networks does not support it; see Network availability. Use eth_simulateV1 when you need a portable, spec-standard simulation that returns block-shaped results. For decoded logs, call traces, and asset and balance changes, use tenderly_simulateTransaction for a single transaction or tenderly_simulateBundle for a sequence of transactions.

eth_simulateV1

Simulates a sequence of blocks on top of the given base block. Each block contains a batch of calls: call N sees the state changes of call N-1, and every block after the first builds on the block before it. Params
  1. Simulation payload OBJECT
    • blockStateCalls ARRAY of Block state call OBJECT: the sequence of blocks to simulate, in order
      • blockOverrides (optional) OBJECT: the set of header fields to override in this block
        • number (optional) STRING: hex, overrides the block number
        • difficulty (optional) STRING: hex, overrides the block difficulty
        • time (optional) STRING: hex, overrides the block timestamp
        • gasLimit (optional) STRING: hex, overrides the gas limit
        • coinbase (optional) STRING: hex, overrides the block miner
        • random (optional) STRING: hex, overrides the value that feeds into the PREVRANDAO opcode
        • baseFee (optional) STRING: hex, overrides the block base fee
        • excessBlobGas (optional) STRING: hex, overrides the excess blob gas
        • blobGasUsed (optional) STRING: hex, overrides the blob gas used
      • stateOverrides (optional) MAP: mapping from an account (address) to override specification. Set state overrides on the first block entry; see Tenderly-specific behavior
        • key STRING: the account this override applies to
        • value OBJECT: the override specification
          • balance (optional) STRING: hex encoded balance override for the account in wei
          • nonce (optional) STRING: hex encoded nonce override for the account
          • code (optional) STRING: data of the code override for the account
          • stateDiff (optional) MAP: mapping of storage key to storage value override
            • key STRING: the storage key
            • value STRING: the value override for the given storage key
      • calls ARRAY of Transaction call OBJECT: executed in order; each call observes the state changes of the calls before it
        • from (optional) STRING: hex encoded address; defaults to the zero address
        • to (optional) STRING: hex encoded address
        • gas (optional) STRING: hex encoded gas limit for the call
        • gasPrice (optional) STRING: hex, the gas price willing to be paid by the sender in wei
        • maxFeePerGas (optional) STRING: hex, the maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei
        • maxPriorityFeePerGas (optional) STRING: hex, the maximum fee per gas the sender is willing to pay to miners in wei
        • value (optional) STRING: hex encoded value in wei; defaults to 0x0
        • input (optional) STRING: hex encoded call data; data is accepted as a deprecated alias, and input takes precedence when both are set
        • nonce (optional) STRING: hex encoded nonce
        • type (optional) STRING: hex encoded transaction type
        • accessList (optional) ARRAY of Access list entry OBJECT
          • address STRING: hex encoded address
          • storageKeys ARRAY of STRING: representation of 32 byte hex encoded storage keys
        • maxFeePerBlobGas (optional) STRING: hex, the maximum fee per blob gas in wei
        • blobVersionedHashes (optional) ARRAY of STRING: 32 byte hex encoded blob versioned hashes
        • authorizationList (optional) ARRAY: EIP-7702 authorization tuples
    • returnFullTransactions (optional) BOOLEAN: when true, result blocks contain full transaction objects instead of transaction hashes
  2. Base block number (optional) The block on top of which the simulation runs. Defaults to latest. Either:
    • STRING Block number
    • ENUM of Block tag earliest|finalized|safe|latest|pending
Example The request simulates two blocks. The first block funds a sender with a state override, then sends ETH and wraps 1 ETH into WETH; the second block sets a custom timestamp and transfers the WETH minted in the first block.
example.json
Result ARRAY of Block result OBJECT, one per blockStateCalls entry, in order. Each block result carries the standard block header fields returned by eth_getBlockByNumber (number, hash, parentHash, timestamp, gasLimit, gasUsed, baseFeePerGas, logsBloom, miner, and so on) plus:
  • transactions ARRAY: transaction hashes of the simulated calls, or full transaction objects when returnFullTransactions is true
  • calls ARRAY of Call result OBJECT, one per call, in order:
    • returnData STRING: hex encoded return data of the call
    • logs ARRAY of Log OBJECT: events emitted by the call (address, topics, data, blockNumber, transactionHash, transactionIndex, blockHash, logIndex, removed); empty for reverted calls
    • gasUsed STRING: hex encoded amount of gas consumed by the call
    • status STRING: 0x1 for success, 0x0 for failure
    • error OBJECT: present only when the call fails
      • code NUMBER: error code
      • message STRING: error message, including the revert reason when available

Tenderly-specific behavior

The Tenderly implementation deviates from the reference execution-apis specification in the following ways:
  • validation is not supported. Setting validation: true returns the error validation flag is not supported. Simulation always runs in non-validating mode: nonce, balance, and fee requirements are not enforced on the calls.
  • traceTransfers is not supported. Setting traceTransfers: true returns the error traceTransfers flag is not supported. No synthetic ETH transfer logs are produced.
  • state overrides are not supported. The state field (full storage replacement) in a state override returns a not supported error. Use stateDiff to override individual storage slots.
  • State overrides apply from the first block. Set stateOverrides on the first blockStateCalls entry; stateOverrides on subsequent entries are not applied.
  • Per-call gas is clamped. A gas value above the block gas limit plus 600,000,000 is clamped to that ceiling instead of being rejected.
  • No block or call count limits. There is no enforced maximum on the number of blockStateCalls entries or on the number of calls per block.
  • Transaction hashes are synthetic. The hashes in result blocks identify the simulated calls but are not hashes of signed transactions.
  • Block progression. Each simulated block after the first gets number = previous + 1 and a parentHash chained to the previous result, with the base fee and gas limit recomputed. The auto-generated timestamp is the node’s wall-clock time, so set blockOverrides.time explicitly when timestamps matter. Overridden block numbers and timestamps are applied verbatim; monotonicity is not validated. When the first block entry supplies blockOverrides without number, the block number defaults to the base block plus 1.

Network availability

eth_simulateV1 is available on Node RPC networks and Virtual Environments, except on the following networks, where the underlying network nodes do not support the method:
  • ApeChain
  • Avalanche C-Chain
  • Avalanche C-Chain Fuji
  • Blast
  • Curtis
  • Flare
  • Immutable
  • Immutable Testnet
  • Lens
  • Lens Testnet
  • Metis Andromeda
  • Metis Sepolia
  • Monad
  • Monad Testnet
  • Scroll Mainnet
  • Sonic
  • Sonic Testnet
  • Stable
  • Stable Testnet
  • ZKsync
  • ZKsync Sepolia