Skip to content

运行追踪节点

Debug & Trace Moonbeam Banner

概览

Geth的debugtxpool API以及OpenEthereum的trace模块提供一个非标准RPC方法以获得交易处理的深度信息。作为Moonbeam为开发者提供无缝以太坊开发体验目标的其中一部分,Moonbeam支持部分非标准RPC方法。支持这些RPC方法是个重要的里程碑,因为如The GraphBlockscout等项目仰赖这些方法检索区块链数据。

想要使用支持的RPC方法,您需要运行一个追踪节点。与运行一个全节点略有不同,追踪节点使用一个不同的Docker镜像,名为purestake/moonbeam-tracing,运用其来实现追踪功能。同时,也需使用额外的标志来告诉节点需要支持哪个非标准功能。

本教程将介绍如何使用debugtxpool以及tracing标志在Moonbeam上运行一个追踪节点。

查看先决条件

与运行常规节点相似,您可以使用Docker或Systemd启动追踪节点。如果您选择使用Docker,您必须先安装Docker。撰写本教程时,使用的Docker版本为19.03.6。

追踪节点标志

运行一个debugtxpooltracing节点类似于运行一个全节点。另外,您可以根据您启用的特定追踪功能使用以下标志:

  • --ethapi=debug —— 选择性标志,启用debug_traceTransactiondebug_traceBlockByNumberdebug_traceBlockByHash
  • --ethapi=trace —— 选择性标志,启用trace_filter
  • --ethapi=txpool —— 选择性标志,启用txpool_contenttxpool_inspecttxpool_status
  • --wasm-runtime-overrides=<path/to/overrides> —— 必备标志,用于追踪指定存储本地WASM runtime路径。如果您使用的是Docker,路径则为/moonbeam/<network>-substitutes-tracing。接受网络作为参数: moonbeammoonrivermoonbase(用于开发节点和 Moonbase Alpha)
  • --runtime-cache-size 64 —— 必备标志,将内存缓存中保留的不同runtime版本的数量配置为64
  • --execution=wasm —— 将所有执行上下文应该使用的执行策略设置为wasm。换句话说,这可以使用存储在链上的Wasm二进制文件
  • --ethapi-trace-max-count <uint> —— 设定节点返回最大追踪条目数。trace_filter的单个请求返回的默认最大追踪条目数为500
  • -ethapi-trace-cache-duration <uint> —— 设置持续时间(以秒为单位),在此之后给定块的trace_filter缓存被丢弃。区块存储在缓存中的默认时间为300

使用Docker运行一个追踪节点

如果您之前未运行过标准的完整Moonbeam节点,您将需要设置一个目录来存储链数据:

mkdir /var/lib/moonbeam-data
mkdir /var/lib/moonriver-data
mkdir /var/lib/alphanet-data

在开始操作之前,您将需要为指定或目前的用户设置必要的权限(将DOCKER_USER替换为要运行docker命令的实际用户):

# chown to a specific user
chown DOCKER_USER /var/lib/moonbeam-data

# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/moonbeam-data
# chown to a specific user
chown DOCKER_USER /var/lib/moonriver-data

# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/moonriver-data
# chown to a specific user
chown DOCKER_USER /var/lib/alphanet-data

# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/alphanet-data

您将需要使用purestake/moonbeam-tracing图像替代purestake/moonbeam docker图像。您可在Docker Hub的moonbeam-tracing图像中找到最新的支持版本。

运行一个追踪节点的完整命令如下所示:

注意事项

确保您将<50% RAM in MB>替换成服务器实际RAM的50%。举例而言,对于32 GB RAM,数值必须设置为16000。最低值为2000,但这低于推荐的规格

docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:sha-8369da6d-1605-fd19 \
--base-path=/data \
--chain moonbeam \
--name="Moonbeam-Tutorial" \
--pruning archive \
--state-cache-size 0 \
--db-cache <50% RAM in MB> \
--ethapi=debug,trace,txpool \
--wasm-runtime-overrides=/moonbeam/moonbeam-substitutes-tracing \
--runtime-cache-size 64 \
-- \
--execution wasm \
--pruning 1000 \
--name="Moonbeam-Tutorial (Embedded Relay)"
docker run --network="host" -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.25.0-1701-e8cc \
--base-path=/data \
--chain moonriver \
--name="Moonbeam-Tutorial" \
--pruning archive \
--state-cache-size 0 \
--db-cache <50% RAM in MB> \
--ethapi=debug,trace,txpool \
--wasm-runtime-overrides=/moonbeam/moonriver-substitutes-tracing \
--runtime-cache-size 64 \
-- \
--execution wasm \
--pruning 1000 \
--name="Moonbeam-Tutorial (Embedded Relay)"
docker run --network="host" -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.25.0-1701-e8cc \
--base-path=/data \
--chain alphanet \
--name="Moonbeam-Tutorial" \
--pruning archive \
--state-cache-size 0 \
--db-cache <50% RAM in MB> \
--ethapi=debug,trace,txpool \
--wasm-runtime-overrides=/moonbeam/moonbase-substitutes-tracing \
--runtime-cache-size 64 \
-- \
--execution wasm \
--pruning 1000 \
--name="Moonbeam-Tutorial (Embedded Relay)"
docker run --network="host" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.25.0-1701-e8cc \
--name="Moonbeam-Tutorial" \
--ethapi=debug,trace,txpool \
--wasm-runtime-overrides=/moonbeam/moonbase-substitutes-tracing \
--runtime-cache-size 64 \
--dev

注意事项

如果您希望运行一个RPC端点以连接polkadot.js.org或是运行自己的应用,请使用--unsafe-rpc-external和/或--unsafe-ws-external标志以运行一个能够外部访问RPC端口的完整节点。更多细节可以通过运行moonbeam --help命令获得。

如果您已经成功运行Moonbase Alpha追踪节点,您应当会见到如下图所示的终端日志:

Debug API

使用Systemd运行一个追踪节点

当您使用Systemd运行一个节点时,您需要先设置Moonbeam二进制文件。您可遵循使用Systemd在Moonbeam上运行一个节点的操作说明进行操作。一般来说,您将需要:

  1. 通过已发布的二进制文件说明设置Moonbeam二进制文件。您也可以遵循编译二进制文件的说明自行编译二进制文件

  2. 遵循设置服务器的说明进行操作

当您完成操作说明中的特定部分,您可以继续执行以下操作。

设置Wasm Overrides

您将需要为Wasm runtime overrides创建一个目录,并从GitHub上的Moonbeam Runtime Overrides repository中获取。

您可以将代码库复制到本地计算机上的任何位置。简单来说,您可以使用存储链上数据的目录。要设置Wasm override文件,您可以执行以下步骤:

  1. 复制Moonbeam Runtime Overrides repository

    git clone https://github.com/PureStake/moonbeam-runtime-overrides.git
    
  2. 将Wasm overrides移到链上数据目录:

    mv moonbeam-runtime-overrides/wasm /var/lib/moonbeam-data
    
    mv moonbeam-runtime-overrides/wasm /var/lib/moonriver-data
    
    mv moonbeam-runtime-overrides/wasm /var/lib/alphanet-data
    
  3. 您可以为未运行网络删除override文件

    rm /var/lib/moonbeam-data/wasm/moonriver-runtime-* &&  rm /var/lib/moonbeam-data/wasm/moonbase-runtime-*
    
    rm /var/lib/moonriver-data/wasm/moonbeam-runtime-* &&  rm /var/lib/moonriver-data/wasm/moonbase-runtime-*
    
    rm /var/lib/alphanet-data/wasm/moonbeam-runtime-* &&  rm /var/lib/alphanet-data/wasm/moonriver-runtime-*
    
  4. 为overrides设置用户权限:

    chmod +x /var/lib/moonbeam-data/wasm/*
    chown moonbeam_service /var/lib/moonbeam-data/wasm/*
    
    chmod +x /var/lib/moonriver-data/wasm/*
    chown moonriver_service /var/lib/moonriver-data/wasm/*
    
    chmod +x /var/lib/alphanet-data/wasm/*
    chown moonbase_service /var/lib/alphanet-data/wasm/*
    

创建配置文件

接下来是创建systemd配置文件,您将需要:

  • 在两个不同的地方替换YOUR-NODE-NAME
  • <50% RAM in MB>替换成服务器实际RAM的50%。举例而言,对于32 GB RAM,数值必须设置为16000。最低值为2000,但这低于推荐的规格
  • 再次确认二进制文件在正确的路径,如下所述 (ExecStart)
  • 如果您使用的是不同的目录,请再次确认基本路径
  • 将文件命名为/etc/systemd/system/moonbeam.service
[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/moonbeam-data \
     --ethapi=debug,trace,txpool \
     --wasm-runtime-overrides=/var/lib/moonbeam-data/wasm \
     --runtime-cache-size 64 \
     --chain moonbeam \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/moonriver-data \
     --ethapi=debug,trace,txpool \
     --wasm-runtime-overrides=/var/lib/moonriver-data/wasm \
     --runtime-cache-size 64 \
     --chain moonriver \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/alphanet-data \
     --ethapi=debug,trace,txpool \
     --wasm-runtime-overrides=/var/lib/alphanet-data/wasm \
     --runtime-cache-size 64 \
     --chain alphanet \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

注意事项

如果您希望运行一个RPC端点以连接polkadot.js.org或是运行自有应用,请使用--unsafe-rpc-external和/或--unsafe-ws-external标志以运行一个能够外部访问RPC端口的完整节点。更多细节可以通过运行moonbeam --help命令获得。

运行服务器

注册并启动服务:

systemctl enable moonbeam.service
systemctl start moonbeam.service

最后,验证服务是否正在运行:

systemctl status moonbeam.service

Service Status

您也可以运行以下命令查看启用的追踪节点的日志:

journalctl -f -u moonbeam.service

您的终端将会显示如下图所示的日志:

Service logs of wasm rutime overrides being processed

使用一个追踪节点

想要了解其他在Moonbeam上的可用非标准RPC方法,以及如何通过追踪节点使用这些方法,请查看Debug & Trace教程。