运行追踪节点¶
概览¶
Geth的debug
和txpool
API以及OpenEthereum的trace
模块提供一个非标准RPC方法以获得交易处理的深度信息。作为Moonbeam为开发者提供无缝以太坊开发体验目标的其中一部分,Moonbeam支持部分非标准RPC方法。支持这些RPC方法是个重要的里程碑,因为如The Graph或Blockscout等项目仰赖这些方法检索区块链数据。
想要使用支持的RPC方法,您需要运行一个追踪节点。与运行一个全节点略有不同,追踪节点使用一个不同的Docker镜像,名为purestake/moonbeam-tracing
,运用其来实现追踪功能。同时,也需使用额外的标志来告诉节点需要支持哪个非标准功能。
本教程将介绍如何使用debug
、txpool
以及tracing
标志在Moonbeam上运行一个追踪节点。
查看先决条件¶
与运行常规节点相似,您可以使用Docker或Systemd启动追踪节点。如果您选择使用Docker,您必须先安装Docker。撰写本教程时,使用的Docker版本为19.03.6。
追踪节点标志¶
运行一个debug
、txpool
和tracing
节点类似于运行一个全节点。另外,您可以根据您启用的特定追踪功能使用以下标志:
--ethapi=debug
—— 选择性标志,启用debug_traceTransaction
、debug_traceBlockByNumber
和debug_traceBlockByHash
--ethapi=trace
—— 选择性标志,启用trace_filter
--ethapi=txpool
—— 选择性标志,启用txpool_content
、txpool_inspect
和txpool_status
--wasm-runtime-overrides=<path/to/overrides>
—— 必备标志,用于追踪指定存储本地WASM runtime路径。如果您使用的是Docker,路径则为/moonbeam/<network>-substitutes-tracing
。接受网络作为参数:moonbeam
、moonriver
或moonbase
(用于开发节点和 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
秒
注意事项
如果您希望运行一个RPC端点以连接Polkadot.js Apps或是运行自有应用,请使用--unsafe-rpc-external
和/或--unsafe-ws-external
标志以运行一个能够外部访问RPC端口的完整节点。更多细节可以通过运行moonbeam --help
命令获得。
使用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
图像中找到最新的支持版本。
下一步,执行Docker运行的命令。注意,您需要替换:
- 在两处替换
YOUR-NODE-NAME
- 用服务器实际RAM的50%替换
<50% RAM in MB>
。例如服务器有32 GB RAM,这里则应配置为16000
. 内存配置最低值为2000
,但这将低于推荐配置
注意事项
对于v0.27.0之前的客户端版本,--state-pruning
标志被命名为--pruning
。
对于v0.30.0之前的客户端版本,--rpc-port
用于指定HTTP连接的端口,--ws-port
用于指定WS连接的端口。从客户端版本v0.30.0开始,--rpc-port
已被弃用,--ws-port
命令行标志同时适用于HTTP连接和WS连接。类似地,--rpc-max-connections
命令行标志已被弃用,现在被硬编码为100。您可以使用--ws-max-connections
来调整HTTP和WS连接的总限制。
运行一个追踪节点的完整命令如下所示:
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.31.1-2302-latest \
--base-path=/data \
--chain moonbeam \
--name="YOUR-NODE-NAME" \
--state-pruning archive \
--trie-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 \
--name="YOUR-NODE-NAME (Embedded Relay)"
docker run --network="host" -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.31.1-2302-latest \
--base-path=/data \
--chain moonriver \
--name="YOUR-NODE-NAME" \
--state-pruning archive \
--trie-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 \
--name="YOUR-NODE-NAME (Embedded Relay)"
docker run --network="host" -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.31.1-2302-latest \
--base-path=/data \
--chain alphanet \
--name="YOUR-NODE-NAME" \
--state-pruning archive \
--trie-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 \
--name="YOUR-NODE-NAME (Embedded Relay)"
docker run --network="host" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam-tracing:v0.31.1-2302-latest \
--name="YOUR-NODE-NAME" \
--ethapi=debug,trace,txpool \
--wasm-runtime-overrides=/moonbeam/moonbase-substitutes-tracing \
--runtime-cache-size 64 \
--dev
如果您已经成功运行Moonbase Alpha追踪节点,您应当会见到如下图所示的终端日志:
使用Systemd运行一个追踪节点¶
当您使用Systemd运行一个节点时,您需要先设置Moonbeam二进制文件。您可遵循使用Systemd在Moonbeam上运行一个节点的操作说明进行操作。一般来说,您将需要:
当您完成操作说明中的特定部分,您可以继续执行以下操作。
设置Wasm Overrides¶
您将需要为Wasm runtime overrides创建一个目录,并从GitHub上的Moonbeam Runtime Overrides repository中获取。
您可以将代码库复制到本地计算机上的任何位置。简单来说,您可以使用存储链上数据的目录。要设置Wasm override文件,您可以执行以下步骤:
-
复制Moonbeam Runtime Overrides repository
git clone https://github.com/PureStake/moonbeam-runtime-overrides.git
-
将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
-
您可以为未运行网络删除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-*
-
为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
注意事项
对于v0.27.0之前的客户端版本,--state-pruning
标志被命名为--pruning
。
对于v0.30.0之前的客户端版本,--rpc-port
用于指定HTTP连接的端口,--ws-port
用于指定WS连接的端口。从客户端版本v0.30.0开始,--rpc-port
已被弃用,--ws-port
命令行标志同时适用于HTTP连接和WS连接。类似地,--rpc-max-connections
命令行标志已被弃用,现在被硬编码为100。您可以使用--ws-max-connections
来调整HTTP和WS连接的总限制。
[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 \
--execution wasm \
--state-pruning=archive \
--trie-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" \
-- \
--execution wasm \
--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 \
--execution wasm \
--state-pruning=archive \
--trie-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" \
-- \
--execution wasm \
--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 \
--execution wasm \
--state-pruning=archive \
--trie-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" \
-- \
--execution wasm \
--name="YOUR-NODE-NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
运行服务器¶
注册并启动服务:
systemctl enable moonbeam.service
systemctl start moonbeam.service
最后,验证服务是否正在运行:
systemctl status moonbeam.service
您也可以运行以下命令查看启用的追踪节点的日志:
journalctl -f -u moonbeam.service
您的终端将会显示如下图所示的日志:
使用一个追踪节点¶
想要了解其他在Moonbeam上的可用非标准RPC方法,以及如何通过追踪节点使用这些方法,请查看Debug & Trace教程。
| Created: November 3, 2021