¿Es posible llamar a debug_traceTransaction desde nodejs?

La siguiente respuesta ( https://ethereum.stackexchange.com/a/9437/4575 ) [ 1 ] nos guía para llamar debug_traceusando geth:

Como se documenta en debug.traceTransaction(...) , solo puede acceder a esta llamada de API mediante la consola de JavaScript geth o la API de JSON-RPC. No hay API web3 que yo sepa. Hay algunas API web3 de extensión no oficiales, pero no sé si debug.traceTransaction es compatible con estas. Parece que tiene que usar JSON-RPC para acceder a estos datos.

pero me preguntaba si es posible llamar al debug_Transactioninterior nodejs.

Probé los pasos en https://ethereum.stackexchange.com/a/9462/4575 [2] pero parece que no funciona para mí y esta respuesta parece contradecir la respuesta anterior que he alineado en [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 );
    });

Resultado de salida:

{ jsonrpc: '2.0',
  id: '2',
  error:
   { code: -32601,
     message: 'The method debug_traceTransaction does not exist/is not available' } }

Gracias por su valioso tiempo y ayuda.

Respuestas (1)

(Aquí está la misma respuesta que la que agregué a la pregunta mencionada anteriormente)

Si empiezo a gethusar la siguiente línea de comando:

Iota:~ user$ geth --rpc console

Y trato de ejecutar el siguiente curlcomando:

Iota:~ user$ curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"debug_traceTransaction", "params":["0x3684f071b34da1116282ee88a106a8f2a266d273ef7d8964957f65128fb58d77", {}], "id":1}'

Obtengo el siguiente resultado:

{"jsonrpc":"2.0","id":1,"error":{"code":-32601,"message":"The method debug_traceTransaction does not exist/is not available"}}

Si en cambio empiezo gethcon el siguiente comando:

Iota:~ user$  geth --rpc --rpcapi "eth,net,web3,debug" console

Y ejecuto el mismo curlcomando, obtengo el seguimiento de la transacción como se muestra a continuación:

{"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":{}},{ ...

También tenga en cuenta que no puede obtener la debug_traceTransactioninformación de la sección de la cadena de bloques que ha --fastsincronizado.

Entonces, solo necesita agregar la --rpcapi "eth,net,web3,debug"opción de línea de comando.



Actualizar respondiendo al comentario a continuación

@Avatar, consulte https://github.com/tjade273/web3_ipc/blob/master/index.js#L328-L335 . Ver también ¿Por qué no puedo conectarme por IPC? y Conéctese al nodo a través de IPC , ya que utilizan la misma biblioteca.

Apruebo su respuesta y funciona mediante el uso geth, y aprecié su respuesta. Mi pregunta es sobre (solo quería verificar dos veces), ¿su respuesta significa que debo usar gethya que no es posible llamar a debug_traceTransactiontravés nodejsde otras aplicaciones? La razón por la que necesito llamar debug_traceTransactionestá relacionada con su respuesta para verificar el estado de la transacción. [ etereum.stackexchange.com/a/6011/4575]
Desde el resultado de su nodejs, que coincide con mi resultado de JSON-RPC cuando no tengo la --rpcapi ...debugopción, parece que su llamada de nodejs debug_traceTransactionestá llegando a gethtravés de JSON-RPC pero gethdevuelve el mensaje de que la debug_traceTransactionllamada no está disponible. Entonces, en teoría, debería poder acceder a debug_traceTransactiontravés de nodejs. ¿Me estoy perdiendo algo más?
Solo como nota, en el fondo gethfunciona como me recomendaste y funciona que gethme devuelve la debug_traceTransactioninformación. Entonces, el problema podría estar relacionado con la forma en que estoy llamando debug_traceTransactionadentro nodejs, donde nodejsno puedo encontrar/llamar a debug_traceTransactionla función.
Respuesta actualizada con web3_ipc que incluye la llamada a debug_traceTransaction.
He intentado un ejemplo relacionado con Ejemplo de conexión RPC en github.com/tjade273/web3_ipc/blob/master/README.md : me enfrento conError: The method admin_datadir does not exist/is not available.
¿Has añadido admina la --rpcapiopción?