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.
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