Следующий ответ ( 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' } }
Спасибо за ваше драгоценное время и помощь.
(Вот тот же ответ, что и тот, который я добавил к вопросу, указанному выше)
Если я начну 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]конфиденциальностьisahumanright.eth
--rpcapi ...debug
опции, кажется, что ваш вызов nodejs поступаетdebug_traceTransaction
черезgeth
JSON-RPCgeth
, но возвращает сообщение о том, чтоdebug_traceTransaction
вызов недоступен. Так что теоретически вы должны иметь доступdebug_traceTransaction
через nodejs. Я пропустил что-то еще?альпер
geth
работает, как вы рекомендовали, и работает, чтоgeth
возвращает мнеdebug_traceTransaction
информацию. Таким образом, проблема может быть связана с тем, как я звонюdebug_traceTransaction
внутриnodejs
, гдеnodejs
не могу найти/вызватьdebug_traceTransaction
функцию.конфиденциальностьisahumanright.eth
debug_traceTransaction
.альпер
Error: The method admin_datadir does not exist/is not available.
конфиденциальностьisahumanright.eth
admin
в--rpcapi
опцию?