RPC·6 min de lectura

trace_ frente a debug_: a qué namespace de trazado recurrir

Si alguna vez has necesitado saber exactamente qué hizo una transacción —cada llamada interna, cada cambio de estado— te has topado con los dos namespaces de trazado del EVM. Se solapan lo suficiente para confundir y difieren lo suficiente para importar. Este es un mapa práctico.

El namespace debug_

debug_traceTransaction y debug_traceCall son nativos de geth. Ejecutan un tracer configurable (el struct logger por defecto, o incorporados como callTracer y prestateTracer) y devuelven detalle a nivel de opcode o a nivel de llamada. callTracer es el caballo de batalla: devuelve el árbol completo de llamadas internas con valores, gas y motivos de revert, que es lo que la mayoría de los desarrolladores de aplicaciones realmente quieren.

El namespace trace_

trace_transaction, trace_block y trace_filter tienen su origen en OpenEthereum/Erigon. trace_filter es el que destaca: te permite consultar llamadas internas a lo largo de un rango de bloques por dirección from/to sin reproducir las transacciones tú mismo, algo invaluable para seguir el flujo de valor o reconstruir la actividad de una dirección. No hay un equivalente limpio en debug_ para ese patrón de filtrado por rango.

Cómo elegir entre ellos

Recurre a debug_ callTracer cuando tengas un hash de transacción concreto y quieras su árbol de llamadas. Recurre a trace_filter cuando tengas una dirección o un rango de bloques y quieras cada llamada interna que lo toque. Para el perfilado de gas a nivel de opcode, usa debug_ con el struct logger. Todos estos requieren estado de archivo para ejecutarse contra bloques históricos: un nodo completo solo traza historia reciente.

1st Node Engineering

Preguntas frecuentes

¿Ambos namespaces están disponibles en todas las cadenas?

No. La disponibilidad depende del cliente. Los nodos basados en Erigon exponen tanto trace_ como debug_; algunos clientes op-stack y otros exponen debug_ pero no el conjunto completo de trace_. Consulta la referencia de métodos de la cadena concreta.

¿Por qué el trazado es mucho más caro que una llamada normal?

El trazado reproduce la transacción a través del EVM con instrumentación, y el trazado histórico necesita el estado de archivo en ese bloque. Tanto el cómputo como el almacenamiento son más pesados que una simple lectura del estado actual.

Relacionado

Recarga, obtén tu clave y publica.

Autoservicio. Paga en cripto o con tarjeta. Medido por créditos: las primitivas pesadas cuestan más, las simples son baratas.

Obtener clave API