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

# Simulate Blocks with eth_simulateV1

> Simulate a sequence of blocks with batched calls, state overrides, and block overrides using the standard eth_simulateV1 JSON-RPC method.

`eth_simulateV1` is the standard multi-block simulation method from the [Ethereum execution APIs](https://github.com/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](/node-rpc/overview) and [Virtual Environments](/virtual-environments/overview); see the full [JSON-RPC reference](/node-rpc/rpc-reference) for every method and network. A small set of networks does not support it; see [Network availability](#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`](/node-rpc/guides/simulate-json-rpc) for a single transaction or [`tenderly_simulateBundle`](/node-rpc/guides/simulate-bundle-json-rpc) 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](#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.

<Tabs>
  <Tab title="Request">
    ```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    {
      "id": 0,
      "jsonrpc": "2.0",
      "method": "eth_simulateV1",
      "params": [
        {
          "blockStateCalls": [
            {
              "stateOverrides": {
                "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2": {
                  "balance": "0x3635c9adc5dea00000"
                }
              },
              "calls": [
                {
                  "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
                  "to": "0x1111111111111111111111111111111111111111",
                  "value": "0x1bc16d674ec80000"
                },
                {
                  "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
                  "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                  "value": "0xde0b6b3a7640000",
                  "input": "0xd0e30db0"
                }
              ]
            },
            {
              "blockOverrides": { "time": "0x6ae00000" },
              "calls": [
                {
                  "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
                  "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                  "input": "0xa9059cbb00000000000000000000000011111111111111111111111111111111111111110000000000000000000000000000000000000000000000000de0b6b3a7640000"
                }
              ]
            }
          ]
        },
        "latest"
      ]
    }
    ```
  </Tab>

  <Tab title="Shell">
    ```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    curl https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY \
    -X POST \
    -H "Content-Type: application/json" \
    -d \
    '{
    "id": 0,
    "jsonrpc": "2.0",
    "method": "eth_simulateV1",
    "params": [
    {
    "blockStateCalls": [
      {
        "stateOverrides": {
          "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2": {
            "balance": "0x3635c9adc5dea00000"
          }
        },
        "calls": [
          {
            "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
            "to": "0x1111111111111111111111111111111111111111",
            "value": "0x1bc16d674ec80000"
          },
          {
            "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
            "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
            "value": "0xde0b6b3a7640000",
            "input": "0xd0e30db0"
          }
        ]
      },
      {
        "blockOverrides": { "time": "0x6ae00000" },
        "calls": [
          {
            "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
            "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
            "input": "0xa9059cbb00000000000000000000000011111111111111111111111111111111111111110000000000000000000000000000000000000000000000000de0b6b3a7640000"
          }
        ]
      }
    ]
    },
    "latest"
    ]
    }'
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    // Installation Instructions: https://docs.ethers.io/v5/getting-started/#installing
    const { ethers } = require('ethers');

    async function runSimulateV1() {
    // Initialize an ethers instance
    const provider = new ethers.providers.JsonRpcProvider(
    'https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY',
    );

    // Execute method
    const result = await provider.send('eth_simulateV1', [
    {
    blockStateCalls: [
      {
        stateOverrides: {
          '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2': {
            balance: '0x3635c9adc5dea00000',
          },
        },
        calls: [
          {
            from: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
            to: '0x1111111111111111111111111111111111111111',
            value: '0x1bc16d674ec80000',
          },
          {
            from: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
            to: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
            value: '0xde0b6b3a7640000',
            input: '0xd0e30db0',
          },
        ],
      },
      {
        blockOverrides: { time: '0x6ae00000' },
        calls: [
          {
            from: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
            to: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
            input: '0xa9059cbb00000000000000000000000011111111111111111111111111111111111111110000000000000000000000000000000000000000000000000de0b6b3a7640000',
          },
        ],
      },
    ],
    },
    'latest',
    ]);

    // Print the output to console
    console.log(result);
    }

    (async () => {
    runSimulateV1();
    })();
    ```
  </Tab>

  <Tab title="Response">
    ```json title="response.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    {
      "id": 0,
      "jsonrpc": "2.0",
      "result": [
        {
          "number": "0x184b35b",
          "hash": "0x2b33857d4b0380d7b92a258c77d9357c9515701f914684789e959ae84d73347a",
          "parentHash": "0x1fe7faf7d5b3a57fe52192bcf634b62bda8cfd39a5509d5541a2fb30d5438463",
          "nonce": "0x88425305eb52b6f7",
          "mixHash": "0x5bf018c82ca9e0e3805b00475afe61be2b1077eff79abb6cb4617af8548aa514",
          "sha3Uncles": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
          "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "miner": "0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97",
          "difficulty": "0x0",
          "extraData": "0x546974616e2028746974616e6275696c6465722e78797a29",
          "size": "0x0",
          "gasLimit": "0x3938700",
          "gasUsed": "0x3938700",
          "timestamp": "0x6a4bb197",
          "transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "baseFeePerGas": "0x18d7ee41",
          "blobGasUsed": "0x60000",
          "excessBlobGas": "0xba42085",
          "uncles": [],
          "transactions": [
            "0xbb42f5dcbfa507c52b64642c9b9e2a95fc4e2542cbd06b180239367d45f35e30",
            "0xcb06f645c2962f5dfff047efb2a000d05d0a58a619c63c97ec3e12cf48d02033"
          ],
          "calls": [
            {
              "returnData": "0x",
              "logs": [],
              "gasUsed": "0x5208",
              "status": "0x1"
            },
            {
              "returnData": "0x",
              "logs": [
                {
                  "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                  "topics": [
                    "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c",
                    "0x000000000000000000000000e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2"
                  ],
                  "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000",
                  "blockNumber": "0x184b35b",
                  "transactionHash": "0xcb06f645c2962f5dfff047efb2a000d05d0a58a619c63c97ec3e12cf48d02033",
                  "transactionIndex": "0x1",
                  "blockHash": "0x2b33857d4b0380d7b92a258c77d9357c9515701f914684789e959ae84d73347a",
                  "logIndex": "0x0",
                  "removed": false
                }
              ],
              "gasUsed": "0xafee",
              "status": "0x1"
            }
          ]
        },
        {
          "number": "0x184b35c",
          "hash": "0xddb8a8a01c753b30acea4c8a12e36f3157dfa854ad0134b1dbb1e6227a9838cd",
          "parentHash": "0x2b33857d4b0380d7b92a258c77d9357c9515701f914684789e959ae84d73347a",
          "nonce": "0x0000000000000000",
          "mixHash": "0x5bf018c82ca9e0e3805b00475afe61be2b1077eff79abb6cb4617af8548aa514",
          "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
          "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
          "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "miner": "0x0000000000000000000000000000000000000000",
          "difficulty": "0x0",
          "extraData": "0x546974616e2028746974616e6275696c6465722e78797a29",
          "size": "0x18e",
          "gasLimit": "0x3938700",
          "gasUsed": "0x0",
          "timestamp": "0x6ae00000",
          "transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
          "baseFeePerGas": "0x1bf2ec09",
          "excessBlobGas": "0xba62085",
          "uncles": [],
          "transactions": [
            "0x21ac69b18844a9f1345c2b29292852477672178b0d338092f20dcb850d261604"
          ],
          "calls": [
            {
              "returnData": "0x0000000000000000000000000000000000000000000000000000000000000001",
              "logs": [
                {
                  "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                  "topics": [
                    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                    "0x000000000000000000000000e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
                    "0x0000000000000000000000001111111111111111111111111111111111111111"
                  ],
                  "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000",
                  "blockNumber": "0x184b35b",
                  "transactionHash": "0x21ac69b18844a9f1345c2b29292852477672178b0d338092f20dcb850d261604",
                  "transactionIndex": "0x0",
                  "blockHash": "0x2b33857d4b0380d7b92a258c77d9357c9515701f914684789e959ae84d73347a",
                  "logIndex": "0x1",
                  "removed": false
                }
              ],
              "gasUsed": "0x73fe",
              "status": "0x1"
            }
          ]
        }
      ]
    }
    ```
  </Tab>
</Tabs>

**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](https://github.com/ethereum/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
* Moonbase Alpha
* Moonbeam
* Moonriver
* Scroll Mainnet
* Scroll Sepolia
* Sonic
* Sonic Testnet
* Stable
* Stable Testnet
* ZKsync
* ZKsync Sepolia
