Можно ли вызвать debug_traceTransaction из nodejs?

Следующий ответ ( https://ethereum.stackexchange.com/a/9437/4575 ) [1] поможет нам позвонить debug_traceс помощью geth:

Как описано в debug.traceTransaction(...) , вы можете получить доступ к этому вызову API только с помощью консоли JavaScript geth или API JSON-RPC. Я не знаю никакого веб-API. Есть некоторые неофициальные API расширений web3, но я не знаю, поддерживается ли ими 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' } }

Спасибо за ваше драгоценное время и помощь.

Ответы (1)

(Вот тот же ответ, что и тот, который я добавил к вопросу, указанному выше)

Если я начну 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"командной строки.



Обновление в ответ на комментарий ниже

@Аватар, пожалуйста, загляните на https://github.com/tjade273/web3_ipc/blob/master/index.js#L328-L335 . См. также Почему я не могу подключиться через IPC? и подключиться к узлу через IPC , так как они используют одну и ту же библиотеку.

Я одобряю ваш ответ, и он работает с использованием geth, и я ценю ваш ответ. Мой вопрос касается (я просто хотел перепроверить), означает ли ваш ответ, что мне нужно использовать, gethпоскольку невозможно звонить debug_traceTransactionчерез nodejsили другие приложения? Причина, по которой мне нужно позвонить debug_traceTransaction, связана с вашим ответом на проверку статуса транзакции. [ эфириум.stackexchange.com/a/6011/4575]
Из вашего результата nodejs, который соответствует моему результату JSON-RPC, когда у меня нет --rpcapi ...debugопции, кажется, что ваш вызов nodejs поступает debug_traceTransactionчерез gethJSON-RPC geth, но возвращает сообщение о том, что debug_traceTransactionвызов недоступен. Так что теоретически вы должны иметь доступ debug_traceTransactionчерез nodejs. Я пропустил что-то еще?
Как примечание, в фоновом режиме gethработает, как вы рекомендовали, и работает, что gethвозвращает мне debug_traceTransactionинформацию. Таким образом, проблема может быть связана с тем, как я звоню debug_traceTransactionвнутри nodejs, где nodejsне могу найти/вызвать debug_traceTransactionфункцию.
Обновленный ответ с web3_ipc, который включает вызов debug_traceTransaction.
Я попытался привести пример, связанный с примером соединения RPC на github.com/tjade273/web3_ipc/blob/master/README.md : я столкнулся сError: The method admin_datadir does not exist/is not available.
Вы добавили adminв --rpcapiопцию?