Skip to main content
创世重放(Genesis replay)会重新执行历史区块,以便在任意时间点获得额外的状态副本。以往,区块以静态归档格式存储。该流程会下载这些区块并通过 EVM 重放它们以重建完整状态。

前置条件

  • monad 版本 0.12.3 或更高
  • 用于从您所选的归档来源(AWS、R2、MongoDB、MinIO 等)读取的凭证与配置。这些凭证与 monad-archiver 所使用的相同;详情请参阅运行归档服务器

设置

1. 准备区块数据库目录

选择一个目录用于存储 EVM 格式的历史区块。本指南将其称为 block-db

2. 初始化 triedb

创建一个空的 triedb:

3. 启动区块写入器

tmux 中运行或创建一个 systemd 服务以持续下载区块:
来源字符串使用与 monad-archiver 相同的格式,例如 "aws mainnet-deu-009-0""mongodb ..." 区块写入器将:
  1. 从数据源下载所有区块
  2. 将其转换为 EVM 格式
  3. 使用 Brotli 压缩数据
  4. 将区块写入形如 block-db/XM/<block_number> 的子目录,其中 X = block_number / 1_000_000(每个目录一百万个区块)
恢复行为: 写入器会在 block-db 目录下保存一个 latest 文件。如果进程停止,下次启动时会读取 latest 并与 --block-data-source 中可用的最新区块进行比较,然后从该处继续。
如果您只需要特定范围的区块,请运行 monad-block-writer stream --help 查看范围选项。

4. 配置重放服务

monad-block-writer 运行的同时,在另一个终端中为 monad-execution 添加以下 systemd 覆盖配置:
请确保 $CHAIN 已在环境中定义。有效选项:
  • ethereum_mainnet
  • monad_devnet
  • monad_testnet
  • monad_mainnet
--block-db-timeout 设置重放服务等待新区块出现在区块数据库中的秒数。如果超时后仍无新区块,重放服务将崩溃并由 systemd 重启。如果发生这种情况,请检查第 3 步中的区块写入器是否仍在运行并向磁盘写入区块。将其设为 0 可禁用重试。

5. 重新加载并启动

在重放主机上运行 RPC

如果您希望在此主机上运行 monad-rpc,则必须从 monad-rpc 的 systemd 配置中移除 --ipc-path 标志。