trace_call
方法允许您执行新的消息调用并获取其执行的详细追踪,而不将交易添加到区块链。这类似于 eth_call
,但提供了详细的逐步执行追踪。
此方法模拟交易并返回其执行的详细追踪。
交易调用对象
交易发送地址
交易接收地址
为交易提供的燃料(十六进制)
燃料价格(以 wei 为单位,十六进制)
转移的价值(以 wei 为单位,十六进制)
合约方法调用数据
响应中包含的追踪类型数组
整数区块号,或 'latest'、'earliest'、'pending'(可选)
带有执行详情的追踪结果对象
调用返回的数据
调用导致的状态变化(如果请求)
追踪对象数组
关于调用操作的详情
调用类型(call, delegatecall 等)
发送者地址
为调用提供的燃料
调用的输入数据
接收者地址
转移的价值(以 wei 为单位)
调用结果
使用的燃料量
调用的输出数据
子追踪数量
调用树中追踪位置的地址路径
追踪类型
如果调用失败的错误消息
虚拟机执行追踪(如果请求)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"output": "0x",
"stateDiff": null,
"trace": [
{
"action": {
"callType": "call",
"from": "0x6f1fb6efdf50f34bfa3f2bc0e5576edd71631638",
"gas": "0x1dcd11f8",
"input": "0xa67a6a45000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000",
"to": "0x1e0447b19bb6ecfdae1e4ae1694b0c3659614e4e",
"value": "0x0"
},
"error": "Reverted",
"subtraces": 0,
"traceAddress": [],
"type": "call"
}
],
"vmTrace": null
}
}
追踪操作中的 callType
字段表示调用类型:
追踪中的 type
字段表示操作类型:
traceAddress
字段表示在调用树中的位置:
[]
)表示顶级调用以下是 trace_call
的示例响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
"stateDiff": { /* 状态变化 */ },
"trace": [
{
"action": {
"callType": "call",
"from": "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
"gas": "0x1dcd12f8",
"input": "0xa9059cbb0000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a",
"to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"value": "0x0"
},
"result": {
"gasUsed": "0x765",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"subtraces": 1,
"traceAddress": [],
"type": "call"
},
{
"action": {
"callType": "call",
"from": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"gas": "0x1dcd0393",
"input": "0x",
"to": "0x2710000000000000000000000000000000000000",
"value": "0xa"
},
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [0],
"type": "call"
}
],
"vmTrace": { /* 详细的虚拟机执行信息 */ }
}
}
虽然 trace_call
和 eth_call
都执行模拟调用:
trace_call
提供 eth_call
中不可用的详细执行追踪trace_call
可以返回几种类型的追踪(操作、VM 步骤、状态变化)trace_call
提供更多用于调试和分析的信息eth_call
在所有以太坊客户端中更轻量和标准trace_call
支持历史区块状态模拟--gcmode=archive
的 Geth 和 OpenEthereum/Nethermind)stateDiff
响应可能非常大