debug_traceTransaction
方法重建历史交易的精确执行状态,提供详细的操作码级跟踪信息。它在交易执行的特定区块上重现原始状态,允许对交易执行流程、堆栈操作、内存变化、存储修改和燃气消耗进行完整分析。
与只提供基本交易数据的其他交易检索方法不同,debug_traceTransaction
提供了交易处理过程中EVM内部执行的内省能力。
此方法通过交易哈希跟踪交易,提供操作码级别的执行详情。
要跟踪的交易哈希
跟踪选项
设置为true禁用存储捕获
设置为true禁用内存捕获
设置为true禁用堆栈捕获
使用自定义跟踪器(可用:callTracer、prestateTracer等)
覆盖基于JavaScript跟踪的默认5秒超时
包含执行详情的跟踪结果
交易使用的燃气
交易是否失败
交易的返回值
结构化的EVM操作日志数组
程序计数器位置
执行的操作码
剩余燃气
此操作的燃气成本
调用深度
EVM内存内容(如果未禁用)
EVM堆栈内容(如果未禁用)
存储变更(如果未禁用)
{
"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": {}
}
// 更多的操作码日志...
]
}
}
{
"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"
}
}
您可以通过配置以下选项来调整性能和输出:
--http.api=debug
标志)debug_traceTransaction
提供比trace_transaction
更详细的信息BLOCKHASH
的结果从原始执行中缓存并重用