Skip to content

Debug API与Trace模块

概览

Geth的 debug 与 txpool API,以及OpenEthereum的 trace 模块均提供非标准的RPC方法,用于获取更多关于交易处理的详细信息。作为Moonbeam为开发者提供无缝以太坊开发体验目标的其中一部分,Moonbeam支持部分非标准RPC方法。支持这些RPC方法是个重要的里程碑,因为如The Graph等项目仰赖这些方法检索区块链数据。

要查看追踪RPC提供者,请查看网络端点页面。

本教程将介绍Moonbeam上支持的RPC方法,以及如何通过使用curl命令对本地Moonbase Alpha追踪节点来调用这些方法。

支持的RPC方法

可用的RPC方法如下:

Debug API

有关debug RPC的具体执行操作,请参考Geth的debug API教程

此外,还可提供以下可选参数:

  • disableStorage(boolean) ——(默认:false)。若设置为true,则内存捕获功能将关闭
  • disableMemory(boolean) ——(默认:false)。若设置为true,则存储捕获功能将关闭
  • disableStack(boolean) ——(默认:false)。若设置为true,则堆栈捕获功能将关闭

Txpool API

有关txpool RPC的具体执行操作,请参考Geth的txpool API教程

Trace模块

有关trace_filter RPC的具体执行操作,请参考OpenEthereum的Trace模块教程

  • fromBlock(uint blockNumber) —— 输入区块编号(hex), 创世区块earliest ,或可用最佳区块latest (默认)。追踪第一个区块
  • toBlock(uint blockNumber) —— 输入区块编号(hex),创世区块earliest ,或可用最佳区块latest (默认)。追踪最后一个区块
  • fromAddress(array addresses) —— 仅过滤这些地址发出的交易。如果输入的为空阵列,将不会进行过滤
  • toAddress(array addresses) —— 仅过滤这些地址接收的交易。如果输入的为空阵列,将不会进行过滤
  • after(uint offset) —— 默认为0。追踪偏移号或起始号
  • count(uint numberOfTraces) —— 追踪次数将以一连串的数字显示

您需注意以下一些默认值:

  • trace_filter的单个请求允许返回的最大追踪条目数为500。超过此限制的请求将返回错误
  • 请求处理的区块会暂时存储在缓存中300秒,之后将被删除

如需更改默认值,您可以在启动追踪节点时添加附加标识

查看先决条件

本教程假设您有一个Moonbase Alpha追踪节点的本地运行实例,并启用debugtxpooltracing命令行标识。对于Moonbeam和Moonriver,你也可以相应调整说明。

如果您尚未运行追踪节点,您可以按照运行追踪节点上的指南进行操作。RPC HTTP终端为http://127.0.0.1:9944

如果您已有运行的节点,也会看到相似的终端日志:

Debug API

使用Debug API

运行跟踪节点后,您可以在终端中开启另一个窗口,在其中运行curl命令并调用任何可用的JSON-RPC方法。例如,调用debug_traceTransaction后,您可在自己的终端发起以下JSON-RPC请求(在本示例中,交易哈希值为0x04978f83e778d715eb074352091b2159c0689b5ae2da2554e8fe8e609ab463bf):

curl http://127.0.0.1:9944 -H "Content-Type:application/json;charset=utf-8" -d \
  '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"debug_traceTransaction",
    "params": ["0x04978f83e778d715eb074352091b2159c0689b5ae2da2554e8fe8e609ab463bf"]
  }'

节点将返回交易从始至终的每一个步骤信息(因篇幅过长,此处返回内容有所删减):

Trace Debug Node Running

如果您使用的是 debug_traceBlockByNumberdebug_traceBlockByHash 方法,您需要在"params"中添加{"tracer": "callTracer"}callTracer 会返回交易及其下属调用。否则tracer将会尝试使用raw为预设值,目前这个模式并不被支持因为它会占用太多资源。举例来说,使用debug_traceBlockByHash方法时,您可以在terminal使用以下JSON-RPC请求(例子中使用的区块哈希值为0x2633b66050c99d80f65fe96de6485fd407b87f0f59b485c33ab8f119e2c6f255):

curl http://127.0.0.1:9944 -H "Content-Type:application/json;charset=utf-8" -d \
  '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"debug_traceBlockByHash",
    "params": ["0x2633b66050c99d80f65fe96de6485fd407b87f0f59b485c33ab8f119e2c6f255", {"tracer": "callTracer"}]
  }'

使用追踪模块

调用trace_filter后,您可在自己的终端发起以下JSON-RPC请求(在本示例中,过滤范围从区块20000到25000,且接收地址为0x4E0078423a39EfBC1F8B5104540aC2650a756577,初始值为零偏移,并提供前20条追踪结果):

curl http://127.0.0.1:9944 -H "Content-Type:application/json;charset=utf-8" -d \
  '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"trace_filter", "params":[{"fromBlock":"0x4E20","toBlock":"0x5014","toAddress":["0x4E0078423a39EfBC1F8B5104540aC2650a756577"],"after":0,"count":20}]
  }'

节点将返回过滤后的追踪信息结果(因篇幅过长,此处返回内容有所删减)。

Trace Filter Node Running

使用Txpool API

由于目前支持的txpool方法都不需要参数,因此您可以通过更改任何txpool方法以适配以下curl命令:

curl http://127.0.0.1:9944 -H "Content-Type:application/json;charset=utf-8" -d \
  '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"txpool_status", "params":[]
  }'

在本示例中,txpool_status方法将返回当前待定或排队的交易数。

Txpool Request and Response

Last update: January 25, 2024
| Created: April 28, 2021