El método debug_traceTransaction
recrea el estado exacto de ejecución de una transacción histórica, proporcionando información detallada de trazado a nivel de opcode. Reproduce el estado original en el bloque específico donde se ejecutó la transacción, permitiendo un análisis completo del flujo de ejecución de la transacción, operaciones de pila, cambios de memoria, modificaciones de almacenamiento y consumo de gas.
A diferencia de otros métodos de recuperación de transacciones que solo proporcionan datos básicos, debug_traceTransaction
ofrece introspección en la ejecución interna de la EVM durante el procesamiento de la transacción.
Este método traza la transacción identificada por su hash, proporcionando detalles de ejecución a nivel de opcode.
Hash de la transacción a trazar
Opciones de trazado
Configurar como true desactiva la captura de almacenamiento
Configurar como true desactiva la captura de memoria
Configurar como true desactiva la captura de pila
Usar un trazador personalizado (disponibles: callTracer, prestateTracer, etc.)
Anula el tiempo de espera predeterminado de 5 segundos para el trazado basado en JavaScript
El resultado del trazado con detalles de ejecución
Gas utilizado por la transacción
Si la transacción falló
El valor de retorno de la transacción
Array de registros estructurados de operaciones EVM
Posición del contador de programa
El opcode ejecutado
Gas restante
Costo de gas para esta operación
Profundidad de llamada
Contenido de memoria EVM (si no está desactivado)
Contenido de pila EVM (si no está desactivado)
Cambios de almacenamiento (si no está desactivado)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"gas": 21000,
"failed": false,
"returnValue": "",
"structLogs": [
{
"pc": 0,
"op": "PUSH1",
"gas": 4677951,
"gasCost": 3,
"depth": 1,
"stack": [],
"memory": [],
"storage": {}
},
{
"pc": 2,
"op": "MSTORE",
"gas": 4677948,
"gasCost": 12,
"depth": 1,
"stack": ["0x60", "0x40"],
"memory": [
"0000000000000000000000000000000000000000000000000000000000000000",
"0000000000000000000000000000000000000000000000000000000000000000"
],
"storage": {}
}
// Muchos más registros de opcode...
]
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"from": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3",
"gas": "0x2d48c",
"gasUsed": "0x594c",
"to": "0x55d398326f99059ff775485246999027b3197955",
"input": "0xa9059cbb000000000000000000000000b5cfcb4b073ebcda22f57097dbd0e0be5731ca5c00000000000000000000000000000000000000000000000011c37937e08000",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
"calls": [
{
"type": "CALL",
"from": "0x55d398326f99059ff775485246999027b3197955",
"to": "0xb5cfcb4b073ebcda22f57097dbd0e0be5731ca5c",
"gas": "0x1e25b",
"gasUsed": "0x30b",
"input": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"output": "0x"
}
],
"value": "0x0"
}
}
Puedes ajustar el rendimiento y la salida configurando estas opciones:
--http.api=debug
)debug_traceTransaction
proporciona información más detallada que trace_transaction
BLOCKHASH
tienen sus resultados de la ejecución original en caché y se reutilizan