मुख्य सामग्री पर जाएं
eth_simulateV1 Ethereum execution APIs विनिर्देश का standard multi-block simulation मेथड है। यह एक base block के ऊपर blocks के अनुक्रम को simulate करता है, जिनमें से प्रत्येक में calls का एक batch होता है, बिना कुछ भी on chain भेजे। एक block के भीतर calls क्रमिक रूप से निष्पादित होती हैं और state साझा करती हैं, और प्रत्येक simulated block पिछले block पर आधारित होता है। यह मेथड Node RPC और Virtual Environments पर चलता है; प्रत्येक मेथड और नेटवर्क के लिए पूर्ण JSON-RPC reference देखें। नेटवर्क का एक छोटा समूह इसे समर्थन नहीं करता; नेटवर्क उपलब्धता देखें। जब आपको portable, spec-standard simulation की आवश्यकता हो जो block के आकार के परिणाम लौटाती है, तब eth_simulateV1 का उपयोग करें। डिकोडेड logs, call traces, और asset और balance changes के लिए, एक ही transaction के लिए tenderly_simulateTransaction या transactions के अनुक्रम के लिए tenderly_simulateBundle का उपयोग करें।

eth_simulateV1

दिए गए base block के ऊपर blocks के अनुक्रम को simulate करता है। प्रत्येक block में calls का एक batch होता है: call N को call N-1 के state changes दिखाई देते हैं, और पहले के बाद का प्रत्येक block अपने से पिछले block पर आधारित होता है। Params
  1. Simulation payload OBJECT
    • blockStateCalls ARRAY of Block state call OBJECT: simulate किए जाने वाले blocks का अनुक्रम, क्रम में
      • blockOverrides (optional) OBJECT: इस block में override करने के लिए header fields का सेट
        • number (optional) STRING: hex, block number को override करता है
        • difficulty (optional) STRING: hex, block difficulty को override करता है
        • time (optional) STRING: hex, block timestamp को override करता है
        • gasLimit (optional) STRING: hex, gas limit को override करता है
        • coinbase (optional) STRING: hex, block miner को override करता है
        • random (optional) STRING: hex, उस value को override करता है जो PREVRANDAO opcode में फ़ीड होता है
        • baseFee (optional) STRING: hex, block base fee को override करता है
        • excessBlobGas (optional) STRING: hex, excess blob gas को override करता है
        • blobGasUsed (optional) STRING: hex, उपयोग की गई blob gas को override करता है
      • stateOverrides (optional) MAP: एक अकाउंट (address) से override विनिर्देश तक मैपिंग। State overrides को पहली block entry पर सेट करें; Tenderly-विशिष्ट व्यवहार देखें
        • key STRING: वह अकाउंट जिस पर यह override लागू होता है
        • value OBJECT: override विनिर्देश
          • balance (optional) STRING: अकाउंट के लिए hex encoded balance override wei में
          • nonce (optional) STRING: अकाउंट के लिए hex encoded nonce override
          • code (optional) STRING: अकाउंट के लिए code override का डेटा
          • stateDiff (optional) MAP: storage key की storage value override में मैपिंग
            • key STRING: storage key
            • value STRING: दिए गए storage key के लिए value override
      • calls ARRAY of Transaction call OBJECT: क्रम में निष्पादित; प्रत्येक call को अपने से पहले की calls के state changes दिखाई देते हैं
        • from (optional) STRING: hex encoded address; डिफ़ॉल्ट रूप से zero address
        • to (optional) STRING: hex encoded address
        • gas (optional) STRING: call के लिए hex encoded gas limit
        • gasPrice (optional) STRING: hex, gas मूल्य जो प्रेषक द्वारा भुगतान किया जाना है wei में
        • maxFeePerGas (optional) STRING: hex, प्रति gas अधिकतम कुल शुल्क जो प्रेषक भुगतान करने को तैयार है (नेटवर्क / base fee और miner / priority fee शामिल है) wei में
        • maxPriorityFeePerGas (optional) STRING: hex, प्रति gas अधिकतम शुल्क जो प्रेषक miners को भुगतान करने को तैयार है wei में
        • value (optional) STRING: hex encoded value wei में; डिफ़ॉल्ट रूप से 0x0
        • input (optional) STRING: hex encoded call data; data को deprecated alias के रूप में स्वीकार किया जाता है, और दोनों सेट होने पर input को प्राथमिकता मिलती है
        • nonce (optional) STRING: hex encoded nonce
        • type (optional) STRING: hex encoded transaction प्रकार
        • 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, प्रति blob gas अधिकतम शुल्क wei में
        • blobVersionedHashes (optional) ARRAY of STRING: 32 byte hex encoded blob versioned hashes
        • authorizationList (optional) ARRAY: EIP-7702 authorization tuples
    • returnFullTransactions (optional) BOOLEAN: जब true हो, तो result blocks में transaction hashes के बजाय पूर्ण transaction objects होते हैं
  2. Base block number (optional) वह block जिसके ऊपर simulation चलता है। डिफ़ॉल्ट रूप से latest। या तो:
    • STRING Block number
    • ENUM of Block tag earliest|finalized|safe|latest|pending
Example यह request दो blocks को simulate करता है। पहला block state override के साथ एक प्रेषक को fund करता है, फिर ETH भेजता है और 1 ETH को WETH में wrap करता है; दूसरा block एक कस्टम timestamp सेट करता है और पहले block में mint किए गए WETH को transfer करता है।
example.json
{
  "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"
  ]
}
Result ARRAY of Block result OBJECT, प्रत्येक blockStateCalls entry के लिए एक, क्रम में। प्रत्येक block result में eth_getBlockByNumber द्वारा लौटाए जाने वाले standard block header fields (number, hash, parentHash, timestamp, gasLimit, gasUsed, baseFeePerGas, logsBloom, miner, इत्यादि) के साथ ये भी होते हैं:
  • transactions ARRAY: simulated calls के transaction hashes, या returnFullTransactions के true होने पर पूर्ण transaction objects
  • calls ARRAY of Call result OBJECT, प्रत्येक call के लिए एक, क्रम में:
    • returnData STRING: call का hex encoded return data
    • logs ARRAY of Log OBJECT: call द्वारा उत्सर्जित events (address, topics, data, blockNumber, transactionHash, transactionIndex, blockHash, logIndex, removed); revert हुई calls के लिए खाली
    • gasUsed STRING: call द्वारा उपभोग की गई gas की hex encoded मात्रा
    • status STRING: सफलता के लिए 0x1, विफलता के लिए 0x0
    • error OBJECT: केवल तब मौजूद जब call विफल होती है
      • code NUMBER: error code
      • message STRING: error message, उपलब्ध होने पर revert reason सहित

Tenderly-विशिष्ट व्यवहार

Tenderly का कार्यान्वयन reference execution-apis विनिर्देश से निम्नलिखित तरीकों से भिन्न है:
  • validation समर्थित नहीं है। validation: true सेट करने पर error validation flag is not supported लौटता है। Simulation हमेशा non-validating mode में चलता है: calls पर nonce, balance, और fee आवश्यकताएँ लागू नहीं की जातीं।
  • traceTransfers समर्थित नहीं है। traceTransfers: true सेट करने पर error traceTransfers flag is not supported लौटता है। कोई synthetic ETH transfer logs उत्पन्न नहीं होते।
  • state overrides समर्थित नहीं हैं। State override में state field (पूर्ण storage प्रतिस्थापन) not supported error लौटाता है। व्यक्तिगत storage slots को override करने के लिए stateDiff का उपयोग करें।
  • State overrides पहले block से लागू होते हैं। stateOverrides को पहली blockStateCalls entry पर सेट करें; बाद की entries पर stateOverrides लागू नहीं किए जाते।
  • प्रति-call gas clamp किया जाता है। Block gas limit और 600,000,000 के योग से अधिक gas value अस्वीकार किए जाने के बजाय उस अधिकतम सीमा तक clamp कर दी जाती है।
  • Block या call संख्या की कोई सीमा नहीं। blockStateCalls entries की संख्या या प्रति block calls की संख्या पर कोई लागू अधिकतम सीमा नहीं है।
  • Transaction hashes synthetic हैं। Result blocks में hashes simulated calls की पहचान करते हैं लेकिन signed transactions के hashes नहीं हैं।
  • Block progression. पहले के बाद के प्रत्येक simulated block को number = previous + 1 और पिछले result से chained parentHash मिलता है, और base fee तथा gas limit की पुनर्गणना होती है। Auto-generated timestamp node का wall-clock समय होता है, इसलिए जब timestamps महत्वपूर्ण हों तो blockOverrides.time स्पष्ट रूप से सेट करें। Override किए गए block numbers और timestamps ज्यों के त्यों लागू किए जाते हैं; monotonicity validate नहीं की जाती। जब पहली block entry number के बिना blockOverrides देती है, तो block number डिफ़ॉल्ट रूप से base block plus 1 होता है।

नेटवर्क उपलब्धता

eth_simulateV1 Node RPC नेटवर्क और Virtual Environments पर उपलब्ध है, निम्नलिखित नेटवर्क को छोड़कर, जहाँ अंतर्निहित network nodes इस मेथड को समर्थन नहीं करते:
  • 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