{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "ethereum-transaction-simulation",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/ethereum-transaction-simulation/",
  "collection": "ethereum",
  "title": "Transaction simulation: useful rehearsal with an uncertain future",
  "description": "Use Ethereum simulation to inspect likely execution at a chosen state while understanding why a successful preview cannot guarantee a later transaction outcome.",
  "aliases": [],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T18:12:41.505Z",
    "dataAsOf": "2026-10-02"
  },
  "authorship": {
    "publisher": "Degrees of Satoshi editorial project",
    "process": "AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied."
  },
  "quickAnswer": {
    "text": "Ethereum transaction simulation executes a proposed call against a selected state without publishing its effects to the chain. It can expose reverts, return values and, with tracing, likely asset changes. The result depends on the simulated sender, inputs, state and environment; later execution can differ.",
    "claimId": "ethereum-transaction-simulation-quick-answer",
    "sourceIds": [
      "eth-jsonrpc",
      "geth-tracing"
    ]
  },
  "keyFacts": [
    {
      "label": "No publication",
      "value": "eth_call executes without creating a blockchain transaction.",
      "sourceIds": [
        "eth-jsonrpc"
      ],
      "id": "no-publication",
      "claimId": "ethereum-transaction-simulation-fact-no-publication"
    },
    {
      "label": "State",
      "value": "The block parameter selects the state context for the call.",
      "sourceIds": [
        "eth-jsonrpc"
      ],
      "id": "state",
      "claimId": "ethereum-transaction-simulation-fact-state"
    },
    {
      "label": "Estimate",
      "value": "eth_estimateGas is an estimate, not a reserved execution allowance.",
      "sourceIds": [
        "eth-jsonrpc"
      ],
      "id": "estimate",
      "claimId": "ethereum-transaction-simulation-fact-estimate"
    }
  ],
  "prerequisites": [
    "ethereum-calldata"
  ],
  "sections": [
    {
      "id": "inputs",
      "heading": "Simulate the transaction you actually intend to sign",
      "sourceIds": [
        "eth-jsonrpc"
      ],
      "paragraphs": [
        "The destination, sender, value, calldata and gas context can change the result. A simulation using a different sender can miss an authorization failure or model a different balance.",
        "Record the chain and block reference alongside the result. “Simulation succeeded” without its inputs or state is hard to reproduce."
      ]
    },
    {
      "id": "changes",
      "heading": "A trace can reveal more than a return value",
      "sourceIds": [
        "geth-tracing"
      ],
      "paragraphs": [
        "Tracing can show nested calls, errors and state differences depending on the tracer used. These details help explain approvals, token movements and interactions hidden behind a short method label.",
        "A decoder still needs the correct contract and asset context. A simulated event with a familiar name is not proof that its emitter is a genuine token."
      ]
    },
    {
      "id": "limits",
      "heading": "The next block may have different conditions",
      "sourceIds": [
        "eth-jsonrpc",
        "eip1559"
      ],
      "paragraphs": [
        "Balances, allowances, prices, contract configuration and transaction ordering can change between simulation and inclusion. A pending-state simulation also depends on the node’s available pending transactions.",
        "Use enforced limits such as minimum output and deadlines where the application supports them. A preview is evidence about a modeled execution, not a replacement for on-chain conditions."
      ]
    }
  ],
  "faq": [
    {
      "question": "Does simulation spend gas from my wallet?",
      "answer": "An eth_call does not publish a transaction or debit an on-chain gas fee. The eventual signed transaction, if included, has its own execution and fee outcome.",
      "sourceIds": [
        "eth-jsonrpc"
      ]
    }
  ],
  "claims": [
    {
      "id": "ethereum-transaction-simulation-quick-answer",
      "articleSlug": "ethereum-transaction-simulation",
      "statement": "Ethereum transaction simulation executes a proposed call against a selected state without publishing its effects to the chain. It can expose reverts, return values and, with tracing, likely asset changes. The result depends on the simulated sender, inputs, state and environment; later execution can differ.",
      "sourceIds": [
        "source-a5154b4118a3d15f",
        "source-269c0acf9654acdf"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-a5154b4118a3d15f",
          "locator": "eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter"
        },
        {
          "sourceId": "source-269c0acf9654acdf",
          "locator": "callTracer; prestateTracer"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read eth_call inputs/state-tag behavior and eth_estimateGas limits. Geth traceCall/callTracer/prestate diff support qualified nested-call and state-change inspection.",
          "Input/state/environment dependence and later ordering/configuration changes are scoped as simulation limitations; no broadcast, fee debit, future inclusion or success guarantee is claimed."
        ]
      }
    },
    {
      "id": "ethereum-transaction-simulation-fact-no-publication",
      "articleSlug": "ethereum-transaction-simulation",
      "statement": "No publication: eth_call executes without creating a blockchain transaction.",
      "sourceIds": [
        "source-a5154b4118a3d15f"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-a5154b4118a3d15f",
          "locator": "eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read eth_call inputs/state-tag behavior and eth_estimateGas limits. Geth traceCall/callTracer/prestate diff support qualified nested-call and state-change inspection.",
          "Input/state/environment dependence and later ordering/configuration changes are scoped as simulation limitations; no broadcast, fee debit, future inclusion or success guarantee is claimed."
        ]
      }
    },
    {
      "id": "ethereum-transaction-simulation-fact-state",
      "articleSlug": "ethereum-transaction-simulation",
      "statement": "State: The block parameter selects the state context for the call.",
      "sourceIds": [
        "source-a5154b4118a3d15f"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-a5154b4118a3d15f",
          "locator": "eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read eth_call inputs/state-tag behavior and eth_estimateGas limits. Geth traceCall/callTracer/prestate diff support qualified nested-call and state-change inspection.",
          "Input/state/environment dependence and later ordering/configuration changes are scoped as simulation limitations; no broadcast, fee debit, future inclusion or success guarantee is claimed."
        ]
      }
    },
    {
      "id": "ethereum-transaction-simulation-fact-estimate",
      "articleSlug": "ethereum-transaction-simulation",
      "statement": "Estimate: eth_estimateGas is an estimate, not a reserved execution allowance.",
      "sourceIds": [
        "source-a5154b4118a3d15f"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-a5154b4118a3d15f",
          "locator": "eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read eth_call inputs/state-tag behavior and eth_estimateGas limits. Geth traceCall/callTracer/prestate diff support qualified nested-call and state-change inspection.",
          "Input/state/environment dependence and later ordering/configuration changes are scoped as simulation limitations; no broadcast, fee debit, future inclusion or success guarantee is claimed."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "eth-jsonrpc",
      "label": "Ethereum JSON-RPC",
      "publisher": "ethereum.org contributors",
      "url": "https://ethereum.org/en/developers/docs/apis/json-rpc/",
      "locator": "eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter",
      "note": "RPC response fields, transaction receipts, call simulation and log filtering.",
      "version": null,
      "checkedAt": "2026-10-02T17:03:42.060Z",
      "contentSha256": "ed13997ec4f415dff80883add0730d4e64bcc8c17b95dd4f6c27aed0241a4073",
      "recordId": "source-a5154b4118a3d15f"
    },
    {
      "id": "geth-tracing",
      "label": "Geth built-in tracers",
      "publisher": "Go Ethereum",
      "url": "https://geth.ethereum.org/docs/developers/evm-tracing/built-in-tracers",
      "locator": "callTracer; prestateTracer",
      "note": "Nested EVM call traces and the distinction between tracing and top-level transactions.",
      "version": null,
      "checkedAt": "2026-10-02T17:25:58.908Z",
      "contentSha256": "0528d605bfb3fb8f0e38525282805a88734c04f9f3763e7a05dff9b3934b11a3",
      "recordId": "source-269c0acf9654acdf"
    },
    {
      "id": "eip1559",
      "label": "Fee market change for ETH 1.0 chain",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://eips.ethereum.org/EIPS/eip-1559",
      "locator": "Specification",
      "note": "Base fees, fee caps, priority fees and effective transaction gas price.",
      "version": "EIP/ERC-1559; retrieved document hash recorded",
      "checkedAt": "2026-10-02T17:03:42.151Z",
      "contentSha256": "453b293845f8faac282a468be0c01594f0a785dde3af34947ee676c085e011b7",
      "recordId": "source-2be2a692f09f4d89"
    }
  ],
  "related": {
    "articles": [
      "ethereum-reverted-transactions",
      "ethereum-wallet-requests",
      "slippage-and-price-impact"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and independent automated verification."
    }
  ],
  "citation": "Degrees of Satoshi editorial project. “Transaction simulation: useful rehearsal with an uncertain future.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/ethereum-transaction-simulation/"
}
