debug_traceBlockByNumber
方法返回由区块号标识的特定区块中所有交易执行的所有操作码的完整跟踪。此方法提供详细的底层执行信息,对于调试和分析交易行为非常有用。
此方法在操作码级别跟踪区块中所有交易的执行,通过区块号识别区块。
区块号(十六进制格式)或字符串标签:latest, earliest, 或 pending
跟踪选项
设置为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": 68232,
"gasCost": 3,
"depth": 1,
"stack": [],
"memory": [],
"storage": {}
},
{
"pc": 2,
"op": "MSTORE",
"gas": 68229,
"gasCost": 12,
"depth": 1,
"stack": ["0x60", "0x40"],
"memory": [
"0000000000000000000000000000000000000000000000000000000000000000",
"0000000000000000000000000000000000000000000000000000000000000000"
],
"storage": {}
}
// 更多操作码日志...
]
}
// 额外的交易跟踪...
]
}
当使用callTracer
选项时,响应会格式化为调用图:
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"type": "CALL",
"from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"value": "0x0",
"gas": "0x13458",
"gasUsed": "0x8fc",
"input": "0xa9059cbb0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000000000000000000000000002b5e3af16b1880000",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
"calls": []
}
// 额外的调用跟踪...
]
}
blockNumber
参数接受几个特殊标签:
latest
:网络确认的最新区块earliest
:创世区块(区块0)pending
:带有内存池中交易的待处理区块(尚未被挖出)debug_traceBlockByNumber方法支持几种内置跟踪器: