组件
Monad 节点使用systemd 运行以下服务:
monad-bft- 共识客户端monad-execution- 执行客户端monad-rpc- RPC 服务器monad-mpt- 用于初始化 TrieDB 磁盘的一次性执行服务monad-cruft- 每小时运行一次的清理服务otelcol- 用于指标收集的 OTEL 采集器服务
monad 服务用户身份运行。
配置与数据结构如下:
/home/monad/.env- 包含用于配置 monad 服务的环境变量/home/monad/monad-bft/config/node.toml- 包含可配置的共识参数,其中最值得注意的是节点名称(通常为"<PROVIDER_NAME>-1")和一个上游验证者列表(由 secp 公钥和 DNS 标识),这些验证者被配置为将区块转发到您的全节点。/home/monad/monad-bft/config/forkpoint/- 包含 forkpoint,即用于在启动时引导节点的共识状态快照/home/monad/monad-bft/config/validators/- 包含在边界区块处生成的验证者集合。新生成的文件包含当前 epoch 和即将到来的 epoch 的共识验证者集合。最新的验证者集合可在validators.toml找到。/home/monad/monad-bft/ledger/- 包含共识(BFT)区块头和区块体,包括交易/dev/triedb- TrieDB 数据库设备,包含区块链的状态
前置条件
在继续之前,请先参阅硬件要求。- 裸金属服务器
- Ubuntu 24.04+ 操作系统
- 通过 BIOS 设置禁用超线程(HT)或同时多线程(SMT)。这些特性会降低 Monad 节点的性能。
准备节点
以下说明假定命令以
root 用户身份执行。更新系统
更新系统。Pending kernel upgrade!。
安装其他依赖。
安装 monad 软件包
配置 APT 仓库。
- 主网
- 测试网
安装
monad 软件包。创建 monad 用户
创建一个名为 monad 的非特权用户,带主目录并使用 Bash shell。
/home/monad 下创建配置目录结构。
配置 TrieDB 设备
创建设备
设置将用于 TrieDB 设备的 NVMe 驱动器(例如/dev/nvme1n1),创建一个新的分区表,并创建一个覆盖整个驱动器的分区。该驱动器所在磁盘应未挂载任何文件系统,也未配置 RAID。
验证 LBA 配置
验证 LBA 配置,并在尚未启用时启用 512 字节 LBA。 检查TRIEDB_DRIVE 上是否启用了 512 字节 LBA:
Data Size 应设置为 512 bytes 并标记为 (in use)。如果不是这样,您需要使用以下命令将 TRIEDB_DRIVE 设置为使用 512 字节 LBA。格式化分区
通过执行monad-mpt 一次性服务来格式化 TrieDB 分区。
配置防火墙规则
配置以下防火墙规则:- 阻止所有传入流量并允许所有传出流量(默认)
- 允许 SSH 传入连接(远程访问)
- 允许对端口 8000 的 TCP/UDP 双向流量(共识客户端 P2P 流量)
iptables-persistent)来持久化 iptables 规则。
若要验证 TCP 端口 8000 的出站连通性,可测试与远程主机的连接:请查阅
node.toml 文件,以使用远程引导对等节点进行测试。配置 OTEL 采集器
monad 包支持 OTEL 采集器。通过它,您可以在http://0.0.0.0:8889/metrics 查看所有相关的 Monad 特定指标。
配置节点
获取配置文件
- 主网
- 测试网
全节点的配置文件:验证者的配置文件:
定义密钥库密码
为KEYSTORE_PASSWORD 设置您自己独有且强壮的密码。此密码用于加密与解密您的密钥库。它必须用单引号包围(例如 'password')。
假设 /home/monad/.env 文件中的 KEYSTORE_PASSWORD 尚未设置,生成一个安全的随机密码。
生成密钥库
使用monad-keystore 二进制文件生成加密的 BLS 和 SECP 密钥。
/home/monad/pubkey-secp-bls。
更新 node.toml
全节点可以直接从将其列入白名单的验证者接收区块提案,或通过 raptorcast 组接收。这些不同的配置在此处进行了描述。以下说明适用于公共全节点配置,在这种模式下,全节点通过连接到参与次要 raptorcast 的可用上游验证者来加入网络。以这种模式加入是无需许可的。
-
使用文本编辑器编辑
/home/monad/monad-bft/config/node.toml(例如nano /home/monad/monad-bft/config/node.toml)。 -
beneficiary字段应包含应接收区块奖励的地址。
对于全节点,此字段可设置为销毁地址。对于验证者,请使用受益人钱包地址。该地址应以0x为前缀。 -
更新
node_name字段以包含您的提供者名称。请注意,如果您运营多个节点,节点名称必须唯一。 -
确保
[fullnode_raptorcast]下的enable_client = true。 -
确保
[statesync]下的expand_to_group = true。 -
对于公共全节点,
[blocksync_override]中的对等节点应保持为空。
节点签名记录
节点名称记录是一条经过加密签名的记录,包含节点的网络地址信息,用于 monad-bft 系统中的对等发现和网络拓扑管理。 使用已创建的密钥对,全节点需要使用 SECP 密钥签名其名称记录,才能参与对等发现。 记录中的序列号(seq)使各节点能够判定对等节点地址信息的最新版本,支持节点变更网络位置的场景。 生成节点记录签名:node.toml 中的 peer_discovery 部分,示例如下。node.toml 仍然期望使用单个 self_address 字段:
- 若要构造
self_address,请将self_ip与self_tcp_port拼接为"<self_ip>:<self_tcp_port>" self_udp_port可以忽略
远程配置获取(v0.12.1+)
节点可以在启动时自动从远程位置获取forkpoint.toml 和 validators.toml。
该功能通过 /home/monad/.env 中以下环境变量进行配置:
- 主网
- 测试网
调用跟踪(可选)
对于用于归档或 RPC 工作流的全节点,建议启用--trace_calls。这将保留调用跟踪(例如 debug_traceTransaction)所需的详细错误信息。如需进行此覆盖,请运行 systemctl edit monad-execution,并将 --trace_calls CLI 参数添加到 ExecStart 定义中(可能需要行延续符 \):
Monad Cruft 服务
安装monad Debian 软件包会启用 monad-cruft 定时器,该定时器每小时运行一次以清理旧的产物(/opt/monad/scripts/clear-old-artifacts.sh)。这是必要的,可以防止产物(例如 forkpoint.toml 和账本文件)不断累积导致 inode 耗尽。
从 v0.12.2 开始,您可以通过在 /home/monad/.env 中设置环境变量来配置产物的保留时间。以下变量控制产物在被删除前的保留时长(所有数值以分钟为单位):
RETENTION_LEDGER- 账本文件(区块头和区块体,默认:600 = 10 小时)RETENTION_WAL- WAL 文件(默认:300 = 5 小时)RETENTION_FORKPOINT- Forkpoint 文件(默认:300 = 5 小时)RETENTION_VALIDATORS- Validators 文件(默认:43200 = 30 天)
/home/monad/.env 中添加或修改这些变量。例如,若要将账本文件保留 20 小时:
monad-cruft 定时器下一次每小时运行时自动生效。
启动节点
设置文件系统权限:保持更新
若要及时了解新版本发布:- 加入 Monad Node Announcements telegram 群组,或
- 加入 Monad Developer Discord,并关注
#mainnet-fullnode-announcements频道

