Go-Ethereum

是否可以從 nodejs 呼叫 debug_traceTransaction?

  • December 19, 2016

以下答案(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 連接到節點,因為它們使用相同的庫。

引用自:https://ethereum.stackexchange.com/questions/10753