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
- Simulation payload
OBJECT- blockStateCalls
ARRAYof Block state callOBJECT: 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
- number (optional)
- 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
- key
- balance (optional)
- key
- calls
ARRAYof Transaction callOBJECT: 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 to0x0 - input (optional)
STRING: hex encoded call data;datais accepted as a deprecated alias, andinputtakes precedence when both are set - nonce (optional)
STRING: hex encoded nonce - type (optional)
STRING: hex encoded transaction type - accessList (optional)
ARRAYof Access list entryOBJECT- address
STRING: hex encoded address - storageKeys
ARRAYofSTRING: representation of 32 byte hex encoded storage keys
- address
- maxFeePerBlobGas (optional)
STRING: hex, the maximum fee per blob gas in wei - blobVersionedHashes (optional)
ARRAYofSTRING: 32 byte hex encoded blob versioned hashes - authorizationList (optional)
ARRAY: EIP-7702 authorization tuples
- from (optional)
- blockOverrides (optional)
- returnFullTransactions (optional)
BOOLEAN: whentrue, result blocks contain full transaction objects instead of transaction hashes
- blockStateCalls
- Base block number (optional) The block on top of which the simulation runs. Defaults to
latest. Either:STRINGBlock numberENUMof Block tagearliest|finalized|safe|latest|pending
- Request
- Shell
- JavaScript
- Response
example.json
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 whenreturnFullTransactionsistrue - calls
ARRAYof Call resultOBJECT, one per call, in order:- returnData
STRING: hex encoded return data of the call - logs
ARRAYof LogOBJECT: 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:0x1for success,0x0for failure - error
OBJECT: present only when the call fails- code
NUMBER: error code - message
STRING: error message, including the revert reason when available
- code
- returnData
Tenderly-specific behavior
The Tenderly implementation deviates from the reference execution-apis specification in the following ways:validationis not supported. Settingvalidation: truereturns the errorvalidation flag is not supported. Simulation always runs in non-validating mode: nonce, balance, and fee requirements are not enforced on the calls.traceTransfersis not supported. SettingtraceTransfers: truereturns the errortraceTransfers flag is not supported. No synthetic ETH transfer logs are produced.stateoverrides are not supported. Thestatefield (full storage replacement) in a state override returns anot supportederror. UsestateDiffto override individual storage slots.- State overrides apply from the first block. Set
stateOverrideson the firstblockStateCallsentry;stateOverrideson subsequent entries are not applied. - Per-call
gasis clamped. Agasvalue 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
blockStateCallsentries 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 + 1and aparentHashchained to the previous result, with the base fee and gas limit recomputed. The auto-generated timestamp is the node’s wall-clock time, so setblockOverrides.timeexplicitly when timestamps matter. Overridden block numbers and timestamps are applied verbatim; monotonicity is not validated. When the first block entry suppliesblockOverrideswithoutnumber, 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
- Moonbase Alpha
- Moonbeam
- Moonriver
- Scroll Mainnet
- Scroll Sepolia
- Sonic
- Sonic Testnet
- Stable
- Stable Testnet
- ZKsync
- ZKsync Sepolia