trace_call
विधि आपको ब्लॉकचेन में लेनदेन जोड़े बिना एक नया संदेश कॉल निष्पादित करने और उसके निष्पादन का विस्तृत ट्रेस प्राप्त करने की अनुमति देती है। यह eth_call
जैसा है लेकिन विस्तृत चरण-दर-चरण निष्पादन ट्रेस के साथ।
यह विधि एक लेनदेन का सिमुलेशन करती है और उसके निष्पादन के विस्तृत ट्रेस लौटाती है।
लेनदेन कॉल ऑब्जेक्ट
जिस पते से लेनदेन भेजा जाता है
जिस पते पर लेनदेन निर्देशित है
लेनदेन के लिए प्रदान की गई गैस (हेक्स)
wei में गैस मूल्य (हेक्स)
wei में स्थानांतरित मूल्य (हेक्स)
कॉन्ट्रैक्ट मेथड कॉल डेटा
प्रतिक्रिया में शामिल करने के लिए ट्रेस प्रकारों की सरणी
पूर्णांक ब्लॉक नंबर, या 'latest', 'earliest', 'pending' (वैकल्पिक)
निष्पादन विवरण के साथ ट्रेस परिणाम ऑब्जेक्ट
कॉल से रिटर्न डेटा
कॉल के कारण स्थिति परिवर्तन (यदि अनुरोधित हो)
ट्रेस ऑब्जेक्ट्स की सरणी
कॉल एक्शन के बारे में विवरण
कॉल का प्रकार (call, delegatecall, आदि)
प्रेषक पता
कॉल के लिए प्रदान की गई गैस
कॉल के लिए इनपुट डेटा
प्राप्तकर्ता पता
wei में स्थानांतरित मूल्य
कॉल का परिणाम
उपयोग की गई गैस की मात्रा
कॉल से आउटपुट डेटा
सबट्रेस की संख्या
कॉल ट्री में ट्रेस स्थान का पता पथ
ट्रेस का प्रकार
यदि कॉल विफल हो गया तो त्रुटि संदेश
वर्चुअल मशीन निष्पादन ट्रेस (यदि अनुरोधित हो)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"output": "0x",
"stateDiff": null,
"trace": [
{
"action": {
"callType": "call",
"from": "0x6f1fb6efdf50f34bfa3f2bc0e5576edd71631638",
"gas": "0x1dcd11f8",
"input": "0xa67a6a45000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000",
"to": "0x1e0447b19bb6ecfdae1e4ae1694b0c3659614e4e",
"value": "0x0"
},
"error": "Reverted",
"subtraces": 0,
"traceAddress": [],
"type": "call"
}
],
"vmTrace": null
}
}
ट्रेस एक्शन में callType
फ़ील्ड कॉल के प्रकार को इंगित करता है:
ट्रेस में type
फ़ील्ड ऑपरेशन के प्रकार को इंगित करता है:
traceAddress
फ़ील्ड कॉल ट्री में स्थिति को इंगित करता है:
[]
)यहां trace_call
से प्रतिक्रिया का एक उदाहरण है:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
"stateDiff": { /* state changes */ },
"trace": [
{
"action": {
"callType": "call",
"from": "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
"gas": "0x1dcd12f8",
"input": "0xa9059cbb0000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a",
"to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"value": "0x0"
},
"result": {
"gasUsed": "0x765",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"subtraces": 1,
"traceAddress": [],
"type": "call"
},
{
"action": {
"callType": "call",
"from": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"gas": "0x1dcd0393",
"input": "0x",
"to": "0x2710000000000000000000000000000000000000",
"value": "0xa"
},
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [0],
"type": "call"
}
],
"vmTrace": { /* detailed VM execution information */ }
}
}
जबकि trace_call
और eth_call
दोनों सिमुलेटेड कॉल करते हैं:
trace_call
विस्तृत निष्पादन ट्रेस प्रदान करता है जो eth_call
में उपलब्ध नहीं हैंtrace_call
कई प्रकार के ट्रेस (ऑपरेशन, VM स्टेप्स, स्टेट चेंजेस) लौटा सकता हैtrace_call
डीबगिंग और विश्लेषण के लिए अधिक जानकारी देता हैeth_call
अधिक हल्का है और सभी Ethereum क्लाइंट्स में मानक हैtrace_call
ऐतिहासिक ब्लॉक स्टेट सिमुलेशन का समर्थन करता है--gcmode=archive
के साथ Geth और OpenEthereum/Nethermind)stateDiff
प्रतिक्रिया उन लेनदेन के लिए बहुत बड़ी हो सकती है जो कई स्टोरेज स्लॉट्स को संशोधित करते हैं