RPC·6 min de leitura

trace_ vs debug_: qual namespace de tracing usar

Se você já precisou saber exatamente o que uma transação fez — cada chamada interna, cada mudança de estado — você esbarrou nos dois namespaces de tracing do EVM. Eles se sobrepõem o suficiente para confundir e diferem o suficiente para importar. Este é um mapa prático.

O namespace debug_

debug_traceTransaction e debug_traceCall são nativos do geth. Eles rodam um tracer configurável (o struct logger padrão, ou embutidos como callTracer e prestateTracer) e retornam detalhe em nível de opcode ou de chamada. O callTracer é o cavalo de batalha: ele retorna a árvore completa de chamadas internas com valores, gas e motivos de revert, que é o que a maioria dos desenvolvedores de aplicação de fato quer.

O namespace trace_

trace_transaction, trace_block e trace_filter têm origem no OpenEthereum/Erigon. O trace_filter é o destaque: ele permite consultar chamadas internas ao longo de um intervalo de blocos por endereço from/to sem você mesmo reproduzir transações — inestimável para seguir o fluxo de valor ou reconstruir a atividade de um endereço. Não há um equivalente debug_ limpo para esse padrão de filtro por intervalo.

Escolhendo entre eles

Use o debug_ callTracer quando você tem um hash de transação específico e quer a árvore de chamadas dela. Use trace_filter quando você tem um endereço ou intervalo de blocos e quer cada chamada interna que o toca. Para profiling de gas em nível de opcode, use debug_ com o struct logger. Todos eles exigem estado archive para rodar contra blocos históricos — um full node só faz trace de histórico recente.

1st Node Engineering

Perguntas frequentes

Os dois namespaces estão disponíveis em toda chain?

Não. A disponibilidade depende do client. Nós baseados em Erigon expõem tanto trace_ quanto debug_; alguns clients op-stack e outros expõem debug_ mas não o conjunto completo trace_. Confira a referência de métodos da chain específica.

Por que tracing é tão mais caro que uma chamada normal?

Tracing reproduz a transação pelo EVM com instrumentação, e o tracing histórico precisa do estado archive naquele bloco. Tanto a computação quanto o armazenamento são mais pesados que uma simples leitura de estado atual.

Relacionados

Recarregue, pegue a chave e publique.

Autoatendimento. Pague em cripto ou cartão. Medido por créditos: primitivas pesadas custam mais, as simples são baratas.

Obter chave de API