Skip to content

eth_simulateV1 fails when simulating more than 1 tx #8412

Open
@mralj

Description

@mralj

Description

I'm unsure if I'm doing anything wrong here, but if I try to call eth_simulateV1 with more than one transaction AND validation:true, it fails.

Steps to Reproduce

mainnet NMC

This fails:

curl http://localhost:8545/ \         
    -X POST \         
    -H "Content-Type: application/json" \        
    --data  '{
  "jsonrpc": "2.0",
  "method": "eth_simulateV1",
  "params": [
    {
      "blockStateCalls": [
        {
          "stateOverrides": {
            "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045": {
              "balance": "0x4a817c420"
            }
          },
          "calls": [
            {
              "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
              "to": "0x014d023e954bAae7F21E56ed8a5d81b12902684D",
              "maxFeePerGas": "0xf",
              "value": "0x1"
            },
            {
              "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
              "to": "0x014d023e954bAae7F21E56ed8a5d81b12902684D",
              "maxFeePerGas": "0xf",
              "value": "0x1"
            }
          ]
        }
      ],
      "validation": true,
      "traceTransfers": true
    },
    "latest"
  ],
  "id": 1
}'

With error:
{"jsonrpc":"2.0","error":{"code":-38014,"message":"invalid transaction index: 0 at block number: 22124266, Reason: Transaction cost (17235585614296141) is higher than sender balance (19999999008)","data":[]},"id":1}

Which is OK, because balance is not enough to cover the tx. However, if I set the balance to a much higher value (e.g., 100ETH), I get this error:

{"jsonrpc":"2.0","error":{"code":-32602,"message":"Nethermind.Blockchain.InvalidBlockException: Transaction 0x130fac2ced0a43256bcd1141eb4889f6d848d963f189dc1d7c58fac76b35a928 at index 1 failed with error Block gas limit exceeded\n   at Nethermind.Consensus.Processing.BlockProcessor.BlockValidationTransactionsExecutor.ProcessTransaction(BlockExecutionContext& blkCtx, Transaction currentTx, Int32 index, BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) in /root/nethermind/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs:line 52\n   at Nethermind.Facade.Simulate.SimulateBlockValidationTransactionsExecutor.ProcessTransaction(BlockExecutionContext& blkCtx, Transaction currentTx, Int32 index, BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) in /root/nethermind/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs:line 42\n   at Nethermind.Consensus.Processing.BlockProcessor.BlockValidationTransactionsExecutor.ProcessTransactions(Block block, ProcessingOptions processingOptions, BlockReceiptsTracer receiptsTracer, IReleaseSpec spec) in /root/nethermind/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs:line 42\n   at Nethermind.Consensus.Processing.BlockProcessor.ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) in /root/nethermind/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs:line 319\n   at Nethermind.Consensus.Processing.BlockProcessor.ProcessOne(Block suggestedBlock, ProcessingOptions options, IBlockTracer blockTracer) in /root/nethermind/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs:line 282\n   at Nethermind.Consensus.Processing.BlockProcessor.Process(Hash256 newBranchStateRoot, IReadOnlyList`1 suggestedBlocks, ProcessingOptions options, IBlockTracer blockTracer) in /root/nethermind/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs:line 148\n   at Nethermind.Facade.Simulate.SimulateBridgeHelper.TrySimulate[TTrace](BlockHeader parent, SimulatePayload`1 payload, IBlockTracer`1 tracer, SimulateReadOnlyBlocksProcessingEnv env, List`1 output, CancellationToken cancellationToken, String& error) in /root/nethermind/src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs:line 134\n   at Nethermind.Facade.Simulate.SimulateBridgeHelper.TrySimulate[TTrace](BlockHeader parent, SimulatePayload`1 payload, IBlockTracer`1 tracer, SimulateReadOnlyBlocksProcessingEnv env, CancellationToken cancellationToken) in /root/nethermind/src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs:line 76","data":[]},"id":1}

The main error being: at index 1 failed with error Block gas limit exceeded. If I send just one TX, it will work.
Tested on mainnet NMC, built from the latest master (as of opening the issue)

op-nmc

This fails on op-nmc

 curl node.dev/\
                -X POST \
                -H "Content-Type: application/json" \
                --data  '{
    "jsonrpc": "2.0",
    "method": "eth_simulateV1",
    "params": [
      {
        "blockStateCalls": [
          {
            "stateOverrides": {
              "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045": {
                "balance": "0x56BC75E2D63100000"
              }
            },
            "calls": [
              {
                "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
                "to": "0x014d023e954bAae7F21E56ed8a5d81b12902684D",
                "maxFeePerGas": "0x258",
                "value": "0x1"
              },
              {
                "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
                "to": "0x014d023e954bAae7F21E56ed8a5d81b12902684D",
                "maxFeePerGas": "0x258",
                "value": "0x1"
              }
            ]
          }
        ],
        "validation": true,
        "traceTransfers": true
      },
      "latest"
    ],
    "id": 1
  }'

Return value

{"jsonrpc":"2.0","error":{"code":-32602,"message":"Nethermind.Blockchain.InvalidBlockException: Transaction 0x7f420dd1f2959785f626107ca446a493df0b1d41e5d2f68d32e8c31de0c0bcbf at index 1 failed with error Block gas limit exceeded\n   at Nethermind.Facade.Simulate.SimulateBlockValidationTransactionsExecutor.ProcessTransaction(BlockExecutionContext& blkCtx, Transaction currentTx, Int32 index, BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) in /src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs:line 42\n   at Nethermind.Consensus.Processing.BlockProcessor.BlockValidationTransactionsExecutor.ProcessTransactions(Block block, ProcessingOptions processingOptions, BlockReceiptsTracer receiptsTracer, IReleaseSpec spec) in /src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs:line 42\n   at Nethermind.Consensus.Processing.BlockProcessor.ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) in /src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs:line 319\n   at Nethermind.Consensus.Processing.BlockProcessor.ProcessOne(Block suggestedBlock, ProcessingOptions options, IBlockTracer blockTracer) in /src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs:line 286\n   at Nethermind.Consensus.Processing.BlockProcessor.Process(Hash256 newBranchStateRoot, List`1 suggestedBlocks, ProcessingOptions options, IBlockTracer blockTracer) in /src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs:line 148\n   at Nethermind.Facade.Simulate.SimulateBridgeHelper.TrySimulate(BlockHeader parent, SimulatePayload`1 payload, SimulateBlockTracer simulateOutputTracer, IBlockTracer tracer, SimulateReadOnlyBlocksProcessingEnv env, String& error) in /src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs:line 76\n   at Nethermind.Facade.Simulate.SimulateBridgeHelper.TrySimulate(BlockHeader parent, SimulatePayload`1 payload, SimulateBlockTracer simulateOutputTracer, IBlockTracer tracer, String& error) in /src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs:line 65\n   at Nethermind.Facade.BlockchainBridge.Simulate(BlockHeader header, SimulatePayload`1 payload, CancellationToken cancellationToken) in /src/Nethermind/Nethermind.Facade/BlockchainBridge.cs:line 176","data":[]},"id":1}⏎

The main error being: at index 1 failed with error Block gas limit exceeded
Tested on the node running this branch

Expected value

{"jsonrpc":"2.0","id":1,"result":[{"baseFeePerGas":"0x15b","blobGasUsed":"0x0","calls":[{"returnData":"0x","logs":[{"address":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045","0x000000000000000000000000014d023e954baae7f21e56ed8a5d81b12902684d"],"data":"0x0000000000000000000000000000000000000000000000000000000000000001","blockNumber":"0x167a8fb","transactionHash":"0x73dfcd74d92aaac213b5b25fb27328afb3259c97d297e7c4c044ceaa601c195c","transactionIndex":"0x0","blockHash":"0x724a86e49ec16e436035d9f3d0a086243851ac1d88ccbac8f48e88a6e3d20d55","logIndex":"0x0","removed":false}],"gasUsed":"0x5208","status":"0x1"},{"returnData":"0x","logs":[{"address":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045","0x000000000000000000000000014d023e954baae7f21e56ed8a5d81b12902684d"],"data":"0x0000000000000000000000000000000000000000000000000000000000000001","blockNumber":"0x167a8fb","transactionHash":"0xd8f77a4649504769f56f3d93e091ba22a40e3b2258f2f8e5232b9383c11e2abc","transactionIndex":"0x1","blockHash":"0x724a86e49ec16e436035d9f3d0a086243851ac1d88ccbac8f48e88a6e3d20d55","logIndex":"0x1","removed":false}],"gasUsed":"0x5208","status":"0x1"}],"difficulty":"0x0","excessBlobGas":"0x0","extraData":"0x","gasLimit":"0x3938700","gasUsed":"0xa410","hash":"0x724a86e49ec16e436035d9f3d0a086243851ac1d88ccbac8f48e88a6e3d20d55","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x4200000000000000000000000000000000000011","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","number":"0x167a8fb","parentBeaconBlockRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","parentHash":"0x5f624910f3a2bbb51e56a389be322f91eee428c539886585f4c54a43d063cc77","receiptsRoot":"0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x2a4","stateRoot":"0x6f3a9cf2cb95482398946a5d8a8cba76707615d4ed48aac532dc1f9830d03856","timestamp":"0x67e2b0e0","transactions":["0x73dfcd74d92aaac213b5b25fb27328afb3259c97d297e7c4c044ceaa601c195c","0xd8f77a4649504769f56f3d93e091ba22a40e3b2258f2f8e5232b9383c11e2abc"],"transactionsRoot":"0x8a314b74fcc327e8a12b07f1c7431b91052a2bf7a1cbf8de8d727d41bb673918","uncles":[],"withdrawals":[],"withdrawalsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"}]}

This is result I get calling QuikNode running op-geth: Geth/v1.101503.1-stable-fbc739c3/linux-amd64/go1.24.1

The errors I get on mainnet-NMC and op-NMC are the same, and the same call works on Geth, which leads me to conclude that we have issue in our implementation.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions