Trazas de transacciones: debug_traceTransaction y los endpoints de trazas de la Data API
Reconstruye los árboles de llamadas de una transacción: el método JSON-RPC debug_traceTransaction con sus trazadores y controles permitidos, y los endpoints getTransactionTrace y getBlockTraces de la Data API con sus límites de cobertura.
Dos formas de reconstruir un árbol de llamadas
Una traza de transacción es el árbol de llamadas reconstruido de una ejecución: qué contrato se llamó, con qué entrada, cuánto gas consumió y qué subllamadas realizó. BlockVectra lo ofrece mediante dos interfaces:
- Métodos JSON-RPC
debug_trace(comodebug_traceTransaction) — se ejecutan contra el nodo de la cadena mediante el endpoint JSON-RPC, por lo que pueden trazar el estado reciente que el nodo aún conserva. - Trazas de la Data API —
GET /{chain}/transactions/{hash}/traceyGET /{chain}/blocks/{number}/tracesdevuelven árboles de llamadas almacenados e indexados mediante REST.
Ambas usan la misma API key y se miden en CU según el peso del método (consulta los pesos más abajo). La elección depende de si necesitas una transacción o un bloque completo, de lo reciente que sea el objetivo y de si quieres recorrer un bloque completo sin paginación.
Límites aplicables a los métodos debug_trace
Las solicitudes debug_trace solo se aceptan para los métodos y trazadores que permite la política de métodos de la cadena:
- Trazadores permitidos: el parámetro
tracersolo acepta los trazadores nativos integrados —callTracer,flatCallTracer,prestateTracer,4byteTracer,noopTracer, o puede omitirse para usar el registro estructurado predeterminado. Cualquier otro valor se rechaza con el error JSON-RPC-32602 tracer not allowed(sin facturación). - Tiempo máximo de trazado: el parámetro
timeoutdebe ser una duración válida de como máximo 30s; de lo contrario, la solicitud se rechaza con-32602 trace timeout not allowed(sin facturación). - Control de sincronización del nodo: mientras el nodo de una cadena no esté sincronizado, todos los métodos excepto
eth_chainId—incluidos los métodosdebug_trace— devuelven-32010(sin facturación). - Ventana de estado:
debug_traceCall,debug_traceBlockByNumber,debug_traceTransactionydebug_traceBlockByHashapuntan a un bloque que debe estar dentro de la ventana de estado de la cadena. Un objetivo anterior a la ventana, o que use la etiquetasafe,finalizedoearliest, devuelve-32011(sin facturación). - Consultas de hash y bloque: un hash mal formado o desconocido devuelve
-32000 transaction not found/block not found; un fallo temporal devuelve-32603 upstream unavailable(se puede reintentar). Sin facturación. - Política de métodos por cadena: los métodos
debug_traceque permite cada cadena se publican en la respuesta pública deGET /v1/chains. Léela en tiempo de ejecución en lugar de fijar una lista de métodos; las cadenas aparecen en cadenas compatibles y la referencia de métodos está en la página de métodos JSON-RPC.
Solicitar debug_traceTransaction con callTracer
La siguiente llamada añade el parámetro tracer para solicitar un árbol de llamadas:
export BLOCKVECTRA_API_KEY=rgw_your_api_key
# Add "tracer" to request a call tree with one of the allowed native tracers.
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
-H 'Content-Type: application/json' \
-H "x-api-key: $BLOCKVECTRA_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "debug_traceTransaction",
"params": [
"0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
{ "tracer": "callTracer" }
]
}'Qué ofrecen los endpoints de trazas de la Data API
La Data API devuelve árboles de llamadas almacenados para dos ámbitos. Ninguno usa paginación: next_cursor nunca está presente.
GET /{chain}/transactions/{hash}/trace— el marco de llamada de una transacción, consultado por su hash.GET /{chain}/blocks/{number}/traces— un árbol de llamadas por transacción de un bloque, en orden detx_index. Un bloque sin transacciones devuelvedata: [].
La estructura de la respuesta es:
TxTraceEnvelope:dataes directamente unCallFrame, másmeta.BlockTracesEnvelope:dataes una matriz deBlockTraceItem, cada uno contxHashyresultde tipoCallFrame, másmeta.
Ambos endpoints de trazas devuelven el formato estándar Ethereum callTracer. Esto es una excepción a la codificación de seguridad numérica para importes de la Data API: en otros endpoints, un valor que puede superar 2^53 se serializa como cadena decimal; en estos dos endpoints, value, gas y gasUsed son cantidades hexadecimales con prefijo 0x, no cadenas decimales. Cada CallFrame contiene type, from, gas, gasUsed e input; type es uno de CALL, DELEGATECALL, STATICCALL, CREATE, CREATE2 o SELFDESTRUCT. to no está presente para el destino de un marco CREATE/CREATE2, y value no está presente en un marco STATICCALL. Los miembros opcionales son output (ausente cuando la llamada no devolvió datos), error (ausente en caso de éxito), revertReason (presente solo para una reversión Error(string)) y calls (subllamadas anidadas en orden de llamada). Se conservan los miembros adicionales del marco.
Para concretar la estructura, este es el esquema de campos de CallFrame:
{
"type": "CALL | DELEGATECALL | STATICCALL | CREATE | CREATE2 | SELFDESTRUCT",
"from": "0x…", // 20-byte address
"to": "0x…", // absent for a CREATE/CREATE2 target
"value": "0x…", // 0x-prefixed hex quantity; absent for STATICCALL
"gas": "0x…", // 0x-prefixed hex quantity
"gasUsed": "0x…", // 0x-prefixed hex quantity
"input": "0x…",
"output": "0x…", // absent when the call returned no data
"error": "…", // absent on success
"revertReason": "…", // absent unless the call reverted with Error(string)
"calls": [] // nested sub-calls in call order; absent for a leaf frame
}Parámetros
{chain}(parámetro de ruta, obligatorio): identificador de cadena, el valorchainde una entrada enGET /chains. La coincidencia es exacta y distingue mayúsculas de minúsculas; no se aceptan alias ni Chain IDs numéricos.{hash}(parámetro de ruta, obligatorio para la traza de transacción): hash de transacción de 32 bytes, con prefijo0xopcional y dígitos en mayúsculas o minúsculas.{number}(parámetro de ruta, obligatorio para las trazas del bloque): altura de bloque no negativa.
Cobertura y finalidad
- Ambos endpoints pertenecen a la capacidad
traces. Una cadena que no la tenga devuelve422 no_coverage. Las cadenas que ofrecen este conjunto de datos se indican en la página de cadenas compatibles y en el directorio de conjuntos de datos. - Los datos de trazas pueden comenzar después que el resto del historial indexado de una cadena.
GET /chainsindica el límite encoverage.traces_from_block; una solicitud anterior a él, o dentro de un rango que no pudo trazarse, devuelve422 no_coverage. - Para trazas de transacciones: si no se encuentra el hash, devuelve
404 not_found(para una transacción recién enviada o minada, reintenta tras unos segundos antes de tratarlo como permanente); si el hash corresponde a un bloque superior aas_of_block, devuelve409 not_indexed_yeten su lugar. - El endpoint de trazas de bloques recibe un número de bloque. Un
{number}superior aas_of_blockdevuelve409 not_indexed_yetconindexed_through; un{number}igual o inferior aas_of_blockse sirve inmediatamente. - Un bloque reciente con transacciones pero sin datos de trazas todavía devuelve
503 unavailablecon una cabeceraRetry-After.
Solicitar una traza a la Data API
export BLOCKVECTRA_API_KEY=rgw_your_api_key
# One transaction's call frame.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/transactions/0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd/trace" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"
# One call tree per transaction in a block.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/79900000/traces" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"Cuál usar
| Tarea habitual | Opción más adecuada | Motivo |
|---|---|---|
| Reconstruir una transacción justo después de su inclusión | debug_traceTransaction | Se ejecuta contra el estado actual del nodo; su disponibilidad depende de la política de métodos de la cadena. |
| Leer el árbol de llamadas almacenado de una transacción | GET /{chain}/transactions/{hash}/trace | Devuelve directamente el CallFrame de la transacción mediante REST; se sirve hasta as_of_block. |
| Leer todos los árboles de llamadas de un bloque en una solicitud | GET /{chain}/blocks/{number}/traces | Devuelve el bloque completo sin paginación, en orden de tx_index; se sirve hasta as_of_block. |
| Trazar un estado que el nodo aún conserva pero que el conjunto de datos todavía no ha almacenado | Métodos debug_trace | La Data API sirve datos almacenados hasta as_of_block; el nodo puede responder para bloques aún no escritos. |
CU por llamada
Cada método se factura según su peso en CU. Los siguientes pesos se leen de la API de planes de la plataforma:
Peso en CU por llamada
| Método | CU por llamada |
|---|---|
debug_traceBlockByHash | 100 |
debug_traceBlockByNumber | 100 |
debug_traceCall | 100 |
debug_traceTransaction | 100 |
trace_block | 100 |
trace_call | 100 |
trace_get | 100 |
trace_replayTransaction | 100 |
trace_transaction | 100 |
data.block_traces | 200 |
data.transaction_trace | 200 |
Las solicitudes rechazadas no se facturan. Consulta las reglas de facturación completas en qué no se factura: códigos de error y reglas de facturación.
Próximos pasos
- Consulta el Plan gratuito y los precios para comprobar qué incluye tu cuenta.
- Inicia sesión en la consola para crear una API key.
Última actualización:
Acciones tokenizadas
Consulte tablas de clasificación diaria y métricas históricas de acciones tokenizadas con la Data API, cubriendo campos, convenciones de codificación, paginación y estimaciones de uso.
Página de activos de billetera
Cree una página de activos de billetera con saldos de tokens ERC-20 distintos de cero, historial de transferencias y metadatos por lotes. Compruebe la cobertura por cadena, pagine resultados y ajuste importes enteros según los decimales.