API संदर्भ
इथेरियम API
Core API
गाइड
Ethereum/Trace API/trace_block

trace_block

trace_block विधि एक निर्दिष्ट ब्लॉक में शामिल सभी लेनदेनों के लिए निष्पादन ट्रेस लौटाती है। यह एक ही ब्लॉक के भीतर होने वाले सभी कॉन्ट्रैक्ट इंटरैक्शन में व्यापक अंतर्दृष्टि प्रदान करता है।

उपयोग के मामले

  • एक विशिष्ट ब्लॉक के भीतर सभी कॉन्ट्रैक्ट इंटरैक्शन का विश्लेषण करें
  • निष्पादन प्रवाह की जांच करके जटिल लेनदेनों को डीबग करें
  • मानक लेनदेन लॉग में न दिखने वाले आंतरिक लेनदेनों को निकालें
  • सुरक्षा विश्लेषण के लिए ब्लॉक-स्तरीय निष्पादन पैटर्न का ऑडिट करें
  • कई कॉन्ट्रैक्ट्स में लेनदेन निष्पादन प्रवाह की निगरानी और विज़ुअलाइज़ करें
  • MEV (माइनर एक्सट्रैक्टेबल वैल्यू) गतिविधियों को ट्रैक और विश्लेषण करें
  • ब्लॉकचेन इतिहास के विशिष्ट बिंदुओं पर प्रोटोकॉल इंटरैक्शन का अनुसंधान करें
  • एक ब्लॉक के भीतर कई कॉन्ट्रैक्ट्स में मूल्य प्रवाह का ट्रेस करें
  • एक ब्लॉक में लेनदेनों के समानांतर निष्पादन का विश्लेषण करें
  • व्यापक ब्लॉक एक्सप्लोरर कार्यक्षमता बनाएं

विधि विवरण

यह विधि निर्दिष्ट ब्लॉक में सभी लेनदेनों के लिए ट्रेस की एक सरणी लौटाती है।

पैरामीटर:

ब्लॉक संख्या (हेक्स ब्लॉक संख्या या "latest", "earliest", "pending")

रिटर्न:

ब्लॉक में सभी लेनदेनों के लिए ट्रेस ऑब्जेक्ट्स की सरणी

की गई कार्रवाई के बारे में जानकारी

कॉल प्रकार (जैसे, "call", "delegatecall", "staticcall")

प्रेषक का पता

इस कार्रवाई के लिए प्रदान किया गया गैस

इनपुट डेटा

प्राप्तकर्ता का पता

भेजा गया मूल्य (wei में)

कॉन्ट्रैक्ट प्रारंभीकरण कोड (create ट्रेस के लिए)

ब्लॉक का हैश

ब्लॉक संख्या

कॉल का परिणाम

उपयोग किया गया गैस की मात्रा

आउटपुट डेटा

बनाए गए कॉन्ट्रैक्ट का पता (create ट्रेस के लिए)

कॉन्ट्रैक्ट कोड (create ट्रेस के लिए)

सबट्रेस की संख्या

निष्पादन ट्रेस के भीतर पता पथ

लेनदेन का हैश

ब्लॉक में लेनदेन की अनुक्रमिक स्थिति

ट्रेस प्रकार (जैसे, "call", "create", "suicide")

त्रुटि संदेश (यदि लेनदेन विफल हुआ)

ट्रेस प्रतिक्रिया को समझना

प्रतिक्रिया में ब्लॉक के सभी लेनदेनों के लिए ट्रेस शामिल होते हैं, प्रत्येक लेनदेन में संभावित रूप से कई ट्रेस होते हैं। ट्रेस एक पदानुक्रमित संरचना बनाते हैं:

  • शीर्ष स्तर के ट्रेस (traceAddress: []) प्रारंभिक लेनदेन का प्रतिनिधित्व करते हैं
  • प्रत्येक सबट्रेस में एक traceAddress सरणी होती है जो कॉल ट्री में इसकी स्थिति को दर्शाती है
  • subtraces फील्ड दिखाता है कि एक ट्रेस में कितने प्रत्यक्ष बच्चे हैं

यहां ट्रेस की संरचना का एक सरलीकृत दृश्य प्रतिनिधित्व है:

Transaction 1
├── Call to Contract A [traceAddress: []]
│   ├── Call from A to B [traceAddress: [0]]
│   └── Call from A to C [traceAddress: [1]]
│       └── Call from C to D [traceAddress: [1, 0]]
└── Call to Contract E [traceAddress: []]

Transaction 2
└── ... (समान संरचना)

ट्रेस प्रकार

विधि विभिन्न प्रकार के ट्रेस लौटाती है जिन्हें type फील्ड द्वारा इंगित किया जाता है:

  • call: एक पते पर संदेश कॉल
  • create: एक कॉन्ट्रैक्ट निर्माण
  • suicide: कॉन्ट्रैक्ट सेल्फ-डिस्ट्रक्ट ऑपरेशन (SELFDESTRUCT भी कहा जाता है)

कॉल प्रकार

type: "call" वाले ट्रेस के लिए, callType फील्ड कॉल के प्रकार को इंगित करता है:

  • call: पतों के बीच मानक कॉल (सबसे आम)
  • delegatecall: विशेष कॉल जो प्रेषक के संदर्भ को संरक्षित करता है
  • staticcall: रीड-ओनली कॉल जो स्टेट को संशोधित नहीं कर सकता (बिजेंटियम में पेश किया गया)
  • callcode: लीगेसी कॉल प्रकार (बहिष्कृत)

त्रुटि प्रबंधन

यदि कोई लेनदेन या सबट्रेस विफल हुआ:

  • error फील्ड में कारण शामिल होगा (जैसे, "out of gas", "reverted")
  • result फील्ड null या अधूरा हो सकता है
  • त्रुटि बिंदु तक के ट्रेस अभी भी शामिल हैं

प्रतिक्रिया उदाहरण

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": [
    {
      "action": {
        "callType": "call",
        "from": "0x8bb73bcb5d553b5a556358d27625323fd781d37",
        "gas": "0x576e",
        "input": "0x370158ea000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "to": "0x6090a6e47849629b7245dfa1ca21d94cd15878ef",
        "value": "0x0"
      },
      "blockHash": "0x8512d367492371edf44ebcbbbd935bc434946dddc2b126cb558df5906012186c",
      "blockNumber": 1059416,
      "result": {
        "gasUsed": "0x14a0",
        "output": "0x0000000000000000000000000000000000000000000000000000000000000001"
      },
      "subtraces": 0,
      "traceAddress": [],
      "transactionHash": "0x4c253746e8d0ab1d135df9711532c41a85ab33f069f1c733ceb0a6bf3e304503",
      "transactionPosition": 0,
      "type": "call"
    },
    {
      "action": {
        "callType": "call",
        "from": "0x431957dbd818eaab7c5ed352430d1bf44dccd837",
        "gas": "0x3d090",
        "input": "0x4c37a69b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001",
        "to": "0x6090a6e47849629b7245dfa1ca21d94cd15878ef",
        "value": "0x0"
      },
      "blockHash": "0x8512d367492371edf44ebcbbbd935bc434946dddc2b126cb558df5906012186c",
      "blockNumber": 1059416,
      "result": {
        "gasUsed": "0x2b43",
        "output": "0x0000000000000000000000000000000000000000000000000000000000000001"
      },
      "subtraces": 0,
      "traceAddress": [],
      "transactionHash": "0x1eb099b3e9396b9d188b1c313261f6a13c7e13cb5c1afd3884847cc2c61289c0",
      "transactionPosition": 1,
      "type": "call"
    }
  ]
}

प्रदर्शन विचार

  • पूरे ब्लॉक्स को ट्रेस करना संसाधन-गहन है, विशेष रूप से कई लेनदेन वाले ब्लॉक्स के लिए
  • जटिल लेनदेनों वाले ब्लॉक्स के लिए प्रतिक्रिया आकार बहुत बड़ा हो सकता है
  • उच्च थ्रूपुट वाली चेन या चेन कंजेशन के दौरान, ब्लॉक्स में दर्जनों या सैकड़ों लेनदेन हो सकते हैं
  • यदि आपको पूरे ब्लॉक की आवश्यकता नहीं है, तो विशिष्ट लेनदेनों के लिए trace_transaction का उपयोग करें
  • ब्लॉक ट्रेस को संसाधित करते समय अपने एप्लिकेशन में सीमाएँ और पेजिनेशन सेट करने की सिफारिश की जाती है

महत्वपूर्ण नोट्स

  • इस विधि के लिए Ethereum नोड पर ट्रेस API सक्षम होने की आवश्यकता है
  • सभी Ethereum क्लाइंट ट्रेसिंग का समर्थन नहीं करते हैं (मुख्य रूप से Geth --gcmode=archive के साथ और OpenEthereum/Nethermind)
  • पब्लिक RPC प्रदाता उनकी संसाधन तीव्रता के कारण ट्रेस विधियों को सीमित या अक्षम कर सकते हैं
  • परिणामों पर केवल अंतिम ब्लॉक्स के लिए विश्वास किया जा सकता है (सर्वोत्तम है "latest", "pending" से बचें)
  • प्रतिक्रिया संरचना विभिन्न Ethereum क्लाइंट कार्यान्वयन के बीच थोड़ी भिन्न हो सकती है
  • गैर-आर्काइव नोड पर हाल के ब्लॉक्स के लिए, परिणाम उपलब्ध हो सकते हैं लेकिन पुराने ब्लॉक्स के लिए नहीं
  • प्रतिक्रिया में विफल लेनदेनों के साथ विफलता बिंदु तक उनके ट्रेस शामिल हैं
  • ट्रेस डेटा में ऐसी क्रियाएँ शामिल हैं जो मुख्य चेन पर दिखाई नहीं देती हैं (जैसे, आंतरिक लेनदेन)
  • कई जटिल लेनदेनों वाले ब्लॉक्स के लिए, प्रतिक्रियाओं में हजारों ट्रेस हो सकते हैं
  • यह API एंडपॉइंट मानक JSON-RPC कॉल की तुलना में एक Ethereum नोड पर काफी अधिक लोड डालता है
  • उत्पादन में इसका उपयोग करते समय, सर्वोत्तम अभ्यास ट्रेसिंग सक्षम के साथ अपना स्वयं का आर्काइव नोड चलाना है

यह भी देखें

  • trace_transaction - एक ही लेनदेन के लिए ट्रेस प्राप्त करें
  • trace_filter - कई ब्लॉक्स में ट्रेस खोजें
  • trace_call - बिना लेनदेन बनाए कॉल को निष्पादित करें और ट्रेस करें
  • eth_getTransactionReceipt - बुनियादी लेनदेन जानकारी के लिए लेनदेन रसीद प्राप्त करें
  • eth_getBlockByNumber - विस्तृत ट्रेस के बिना ब्लॉक जानकारी प्राप्त करें
हमें बेहतर बनाने में मदद करें!
इस पृष्ठ को साझा करें और हमें आपके लिए और भी बेहतर उत्पाद बनाने में मदद करें।