Go-Ethereum
是否可以從 nodejs 呼叫 debug_traceTransaction?
以下答案(https://ethereum.stackexchange.com/a/9437/4575)
$$ 1 $$指導我們
debug_trace
通過使用geth
:如debug.traceTransaction(…)中所述,您只能使用 geth JavaScript 控制台或 JSON-RPC API 訪問此 API 呼叫。我知道沒有 web3 API。有一些非官方的擴展 web3 API,但我不知道這些是否支持 debug.traceTransaction。看起來你必須使用 JSON-RPC 來訪問這些數據。
但我想知道是否可以在
debug_Transaction
裡面打電話nodejs
?我嘗試了https://ethereum.stackexchange.com/a/9462/4575上的步驟
$$ 2 $$但這似乎對我不起作用,而且這個答案似乎與我之前提到的答案相矛盾$$ 1 $$.
var web3 = new Web3(); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); web3.currentProvider.sendAsync({ method: "debug_traceTransaction", params: ['<transaction_id>', {}], jsonrpc: "2.0", id: "2" }, function (err, result) { console.log( result ); });
輸出結果:
{ jsonrpc: '2.0', id: '2', error: { code: -32601, message: 'The method debug_traceTransaction does not exist/is not available' } }
感謝您寶貴的時間和幫助。
(這與我在上面提到的問題中添加的答案相同)
如果我開始
geth
使用以下命令行:Iota:~ user$ geth --rpc console
我嘗試執行以下
curl
命令:Iota:~ user$ curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"debug_traceTransaction", "params":["0x3684f071b34da1116282ee88a106a8f2a266d273ef7d8964957f65128fb58d77", {}], "id":1}'
我得到以下結果:
{"jsonrpc":"2.0","id":1,"error":{"code":-32601,"message":"The method debug_traceTransaction does not exist/is not available"}}
相反,我從
geth
以下命令開始:Iota:~ user$ geth --rpc --rpcapi "eth,net,web3,debug" console
我執行相同的
curl
命令,我得到如下所示的事務跟踪:{"jsonrpc":"2.0","id":1,"result":{"gas":45480,"returnValue":"0000000000000000000000000000000000000000000000000000000000000001","structLogs":[{"pc":0,"op":"PUSH1","gas":76741,"gasCost":3,"depth":1,"error":null,"stack":[],"memory":null,"storage":{}},{"pc":2,"op":"PUSH1","gas":76738,"gasCost":3,"depth":1,"error":null,"stack":["0000000000000000000000000000000000000000000000000000000000000060"],"memory":null,"storage":{}},{ ...
另請注意,您無法從已同步
debug_traceTransaction
的區塊鏈部分獲取資訊。--fast
因此,您只需要添加
--rpcapi "eth,net,web3,debug"
命令行選項。更新回應下面的評論
@Avatar,請查看https://github.com/tjade273/web3_ipc/blob/master/index.js#L328-L335。另請參閱為什麼我無法通過 IPC 連接?並通過 IPC 連接到節點,因為它們使用相同的庫。