我们将变更分类为
- 协议变更(通常需要新的 Revision)
- 通常标记为 [EVM]、[Consensus] 或 [Network params]
- RPC/SDK 行为变更(通常标记为 [RPC])
- 性能变更
- 根据变更的性质标记为 [EVM]、[Consensus] 或 [RPC]
- 内部/节点运维变更(通常标记为 [Node ops])
v0.16.2
标签或哈希:
monad-bft(共识):标签v0.16.2(4374d389e)monad(执行):标签v0.16.2+1(aae93c535)
亮点
- Raptorcast v1 发布 —— 节点现在在主路径和次路径上均以 v1 raptorcast 线路格式发布提案。
- JSON-RPC 错误码修正,覆盖
eth_call、eth_estimateGas、eth_simulateV1、debug_*与txpool_*。 - 在多目标负载下,Raptorcast 吞吐量提升约 16.7%。
值得注意的协议变更
- [Consensus] Raptorcast 推进到
accept_both_publish_v1阶段;节点在主路径和次路径上均以 v1 线路格式发布提案。 - [Consensus]
AdvanceRound通过广播而非 secondary raptorcast 发送给全节点,避免在 v1 下与提案承诺发生碰撞。
值得注意的 RPC/SDK 变更
- [RPC] 修正 call、simulate、debug、txpool 与 websocket 处理器返回的 JSON-RPC 错误码与消息。
- [RPC] 修正零费率
eth_call——maxFeePerGas为零时不再被抬升至 base fee,与 geth 和 reth 保持一致。 - [RPC] 修正
BlockTagOrHash的 EIP-1898 兼容性。 - [RPC]
eth_createAccessList现在接受 state overrides。
值得注意的健壮性变更
- [Consensus] 验证者只向其全节点发布首次接受的提案,因此不再转发发生等价冲突的提案。
- [RPC] 为
eth_feeHistory增加并发限制器,限制大区块范围下的内存占用。 - [EVM] 修正当节点重置为起始区块号时的 runloop 处理。
值得注意的性能变更
- [Consensus] Raptorcast 在鉴权发送路径中避免了冗余的 wire-auth 查询 —— 由 15,796 提升至 18,427 chunks/s。
值得注意的内部变更
- [Node ops] 节点可选择不再响应 statesync 请求。
node.toml中的可选设置,默认值不变。 - [Node ops] 将
opensslcrate 升级至 0.10.81,关闭七个安全公告。仅在配置了 MongoDB 归档后端的monad-rpc路径上触及;monad-node不链接该库。 - [EVM] 每个进程为
Address、bytes32和StorageKey的哈希设置种子,使得针对节点本地映射的碰撞键无法被预先计算。 - [EVM] 使用系统 libsecp256k1 上内置的
monad_recover_address替换 silkpre 的 ECRECOVER 预编译。在已发布的 Docker 镜像之外新增了libsecp256k1-dev构建依赖。 - [EVM] 允许
runloop_monad_ethblocks中进行双数据库提交,其中secondary_db为可选。- 参考:从
staging-v0.16.1cherry-pick(df14e67bb)
- 参考:从
- [EVM] 使用
for_each_db统一双数据库镜像。- 参考:从
staging-v0.16.1cherry-pick(d836afc18)
- 参考:从
v0.16.1
标签或哈希:
monad-bft(共识):标签v0.16.1(12b7017d6)monad(执行):标签v0.16.1(7279dfc7b)
亮点
- 主网 MONAD_TEN 激活 —— MIP-8(页编码存储)在主网上于时间戳
1788359400(2026-09-02 14:30 UTC)激活。这是 v0.16.0 中随测试网激活一起发布的主网对应版本。 - 主网现要求页编码时间线 —— 主网节点必须提供页编码的主时间线(阶段 C)或活跃的次要时间线(阶段 A/B dual-db),否则将无法启动。
- 在 ethblocks runloop 中支持 dual-db 提交,允许仍处于阶段 A/B 的节点向两条时间线提交。
协议方面的显著变更
- [EVM] 设置主网的 MONAD_TEN 激活时间戳 ——
1788359400(2026-09-02 14:30 UTC)。在该时间戳之前,MONAD_NINE 规则继续生效。 - [EVM] 在主网上强制执行页编码时间线断言 —— 此前仅测试网。尚未完成阶段 A(dual-db 激活)的节点将无法启动。参见 MIP-8 激活与页存储迁移。
稳健性方面的显著变更
- [共识] monad-dataplane:当 io_uring buffer ring 设置失败时优雅降级,而不是导致节点启动失败。
- [EVM] 允许在
runloop_monad_ethblocks中进行 dual-db 提交,其中次要数据库为可选,使得阶段 A/B 的节点可向两条时间线提交。
内部方面的显著变更
- [EVM] 将 dual-db 镜像统一到
for_each_db后面,替换 runloop 中重复的提交路径。 - [共识] 通过移除一个陈旧的 metrics 参数修复 buffer-ring 降级构建。
v0.16.0
标签或哈希:
monad-bft(consensus): tagv0.16.0(c616743d1)monad(execution): tagv0.16.0(e81ffe31c)
亮点
- MONAD_TEN 激活 — MIP-8(page-encoded storage)在测试网时间戳
1786545000(2026-08-12 14:30 UTC)激活。主网激活尚未设定(分阶段推出)。 - 协议层面的变更,要求从 v0.15.x 提升到 v0.16.0。
- 在 v0.15.2 基础上的健壮性修复、性能改进和内部重构。
主要协议变更
- [EVM] 激活 MONAD_TEN — MIP-8(page-encoded storage)在测试网激活(2026-08-12 14:30 UTC)。要求 dual-db 模式;未完成 Phase A 的节点将无法启动。
主要健壮性变更
- [EVM] 在测试网强制执行 page-encoded 时间线断言 — 未完成 Phase A(dual-db 激活)的节点将无法启动。参见 MIP-8 激活与 Page Storage 迁移。 Ref: monad (execution) PR #2475
- [Consensus] 拒绝超过 32 字节的存储 key。 Ref: monad-bft PR #3160
- [Consensus] Raptorcast:强化 secondary raptorcast 客户端。 Ref: monad-bft PR #3157
- [EVM] 在超过最大代码大小时抛出;通过
MONAD_THROW派发MONAD_ASSERT_THROW。 Ref: monad (execution) PR #2415 - [EVM] mpt:将 promote target
primary_ring_idx限制为有效的 ring selector。 Ref: monad (execution) PR #2421
主要性能变更
- [EVM] 调整运行时
signextend以获得更好的代码生成。 Ref: monad (execution) PR #1527
主要内部变更
- [Node ops] 默认启用 metrics 端点。 Ref: monad-bft PR #3167
- [EVM] 重构 ECDSA 签名恢复(包括
EcdsaSignature重命名)。 Ref: monad (execution) PR #2402 - [EVM] 跨
TrieDb与TrieRODb去重存储读取路径。 Ref: monad (execution) PR #2436 - [EVM] 在
StoragePageSlots后去重 page→slot 扇出。 Ref: monad (execution) PR #2434 - [EVM] 内置 blake2b compression,替换 silkpre 的 BLAKE2F 预编译。 Ref: monad (execution) PR #2418
- [EVM] snapshot:提高 fd 限制、快速失败、在 dump 时报告 open 错误。 Ref: monad (execution) PR #2419
- [EVM] 在
StateTracer中添加is_code_tracer。 Ref: monad (execution) PR #2448 - [EVM] Runloop 作为 C 库。 Ref: monad (execution) PR #2021
v0.15.2
标签或哈希:
monad-bft(consensus):staging-v0.15.2(6373056bf)monad(execution):staging-v0.15.2(2422a8592)
亮点
- MIP-8 gas 表 — 添加基于 page 的存储 gas 表;
eth_createAccessList按 page 对存储 key 去重(将在未来版本中激活) - MIP-12 后续:区块奖励验证 — 现在会验证最大区块奖励;超过上限的区块将被拒绝
- EIP-7843:交易上下文中的共识轮次 — Monad 共识轮次编号通过
BlockHeader::slot_number传入evmc_tx_context - 双时间线 DB 支持 — MPT 数据库支持辅助的 page-encoded 时间线;statesync 支持 slot-encoded 和 page-encoded 两种数据库
主要共识/协议变更
- [Consensus] Raptorcast:推出 deterministic stage 1 — 将所有节点纳入 “accept both publish v0”。 Ref: monad-bft PR #3143
- [Execution] MIP-8:基于 page 的存储 gas 表 — 添加基于 page 的 gas 表(将在未来版本中激活)。 Ref: monad (execution) PR #2268, monad-bft PR #3150
- [Execution] MIP-12 后续:验证最大区块奖励 — 现在会拒绝超过上限的区块。 Ref: monad (execution) PR #2365
- [Execution] EIP-7843:通过
BlockHeader::slot_number将 Monad 共识轮次传入evmc_tx_context。 Ref: monad (execution) PR #2324 - [Execution] AMSTERDAM EVM revision — 面向 Amsterdam 硬分叉的新 EVM revision。 Ref: monad (execution) PR #2368
主要 RPC/SDK 变更
- [RPC] 在 MIP-8 下,
eth_createAccessList现按 page 对存储 key 去重。 Ref: monad (execution) PR #2253 - [RPC] 修复
eth_getStorageAt在 page-encoded 节点上返回 0 的问题。 Ref: monad-bft PR #3153, monad (execution) PR #2393 - [RPC]
eth_call执行 revert 错误码从-32603改为3— 与标准 EVM 行为对齐。 Ref: monad-bft PR #2683
主要健壮性变更
- [Consensus] Raptorcast:拒绝 round 跨度不合理的 group 邀请。 Ref: monad-bft PR #3145
- [Consensus] Wireauth:在响应方 key 被验证之前移除不安全的可变操作。 Ref: monad-bft PR #3140
- [Consensus] Raptorcast:限制
RoundInfoCache的内存使用。 Ref: monad-bft PR #3132 - [Consensus]
monad-state:限制每条消息转发的交易数。 Ref: monad-bft PR #3015 - [Execution] 用于执行状态读取的内存受限 LRU 缓存。 Ref: monad (execution) PR #2376
- [Execution] Statesync:拒绝带有尾部字节的消息。 Ref: monad (execution) PR #2370
- [Execution] 在动态历史长度调整中同步修剪两条时间线。 Ref: monad (execution) PR #2431
- [Execution] 通过 FFI 暴露 dual-DB 迁移阶段。 Ref: monad (execution) PR #2433
- [Execution] 修复
monad-mpt --activate-secondary在先前运行过--upgrade的节点上损坏 DB 元数据的问题;添加monad-mpt --repair以恢复受影响的 pool。 Ref: monad (execution) PR #2403 - [Execution] DbCache 直读缓存 — 读取在 miss 时会被缓存,减少 page-encoded 提交期间的冗余磁盘读取。 Ref: monad (execution) PR #2414
主要内部变更
- [Consensus] Prometheus 配置移至
node.toml—prometheus_addr和相关选项现在位于[prometheus]节;CLI flag 已移除。 Ref: monad-bft PR #3141 - [Consensus] 将 triedb 迁移阶段作为 Prometheus 指标暴露。 Ref: monad-bft PR #3169
- [Execution] Dual-timeline:MPT 数据库支持辅助时间线。 Ref: monad (execution) PR #2228, PR #2302
- [Execution] Page storage:TrieDb 和 runloop 支持 page-encoding;statesync 支持 page-encoded 数据库。 Ref: monad (execution) PR #2354, PR #2383, PR #2385, PR #2386
- [Execution]
monad-cli --version现接受latest_finalized。 Ref: monad (execution) PR #2364 - [Execution] 支持在 secondary timeline 和 page-encoded DB 上的二进制 snapshot dump/load。 Ref: monad (execution) PR #2366
v0.15.1
标签或哈希:
monad-bft(consensus): tagv0.15.1(fb3328c2e)monad(execution): tagv0.15.1(817a09f64) — unchanged from v0.15.0
变更
- [Consensus] MIP-12:填入主网区块奖励激活 — 将投票节奏变更和区块奖励更新(25 → 18 MON)的主网激活轮次设置为 Round 89,758,000。 Ref: monad-bft PR #3168
v0.15.0
v0.14.6 和 v0.14.7 未部署给外部节点运营者。其变更已包含在本次发布中。
标签或哈希:
monad-bft(consensus): tagv0.15.0(8facc4fae)monad(execution): tagv0.15.0(817a09f64)
亮点
- MIP-12:降低出块时间 — 出块时间从 400 ms 降低到 300 ms;每区块奖励按比例降低
eth_simulateV1— 新的 RPC 端点,用于在多个区块中模拟多笔交易,支持状态和区块覆盖;节点运营者可通过添加--enable-eth-simulate-v1启用(默认:关闭)- 节点运营者:需要一次性 DB 元数据迁移(
monad-mpt --upgrade;参见 v0.15.0 升级说明) — 将 DB schema 从 MONAD007 升级到 MONAD008,为即将到来的双时间线支持初始化辅助时间线元数据 - RPC 批处理并发限制 — 新的服务端并发批处理请求上限,以防御资源耗尽
- Raptorcast 饥饿修复 — 防御 raptorcast 中可能出现的网络消息饥饿
- Prometheus 指标迁移 — 节点指标现由 prometheus crate 支持,以获得更好的可观测性
主要共识/协议变更
- [Consensus] MIP-12:将投票节奏从 400 ms 调整为 300 ms;将区块奖励按比例从 25 MON/区块调整为 18 MON/区块
- [Network params] MIP-12:将区块 gas 上限从 200M 降低到 150M,在出块时间从 400 ms 降至 300 ms 的同时保持 gas 吞吐量为 500 Mgas/s
- 每区块交易上限相应地从 5000 降至 3750(区块 gas 上限 ÷ 40k)
- 每笔交易 gas 上限保持 30M 不变
- 参考:monad-bft PR #3120
主要 RPC/SDK 变更
- [RPC]
eth_simulateV1实现 — 在多个区块中模拟多笔交易,支持状态/区块覆盖、追踪转账以及调用限制- 参考:monad-bft PR #2779, monad (execution) PR #2060, monad (execution) PR #2335 (graceful state override error handling), monad (execution) PR #2355 (mixed TX envelope decoding)
- [RPC] 将
eth_simulateV1置于--enable-eth-simulate-v1CLI flag 之后(默认:关闭) — 除非设置该 flag,否则返回 “Method not supported” - [RPC] 添加批处理并发限制 — 对并发 RPC 批处理请求的服务端上限
- [RPC] 从 RPC 移除解压缩支持 — 不再接受压缩的请求体
- [RPC] 修复索引 log 流中的 tx index 排序边界情况
- [RPC] 修复
debug_traceCall参数必需性
主要健壮性变更
- [Consensus] 修复 raptorcast 中的网络消息饥饿问题
- [Consensus] 修复非专用 full node 冷启动
- [Consensus] 丢弃未来的 NoEndorsements
- [Consensus] 启动时发出 UpdateCurrentRound
- [Execution] 将用户可见的
MONAD_ASSERT转换为MONAD_ASSERT_THROW— 防止在畸形 RPC 输入上 panic - [Execution] 在缺失 TX result 时抛出 — 在
execute_block_transactions中将MONAD_ASSERT转换为MONAD_ASSERT_THROW,使 RPC 进程优雅失败而不是崩溃 - [Execution] 强制 staking syscall 排序 — 验证现在会拒绝乱序提交的 staking syscall
- [Execution] 修复事件 payload 溢出检查 — 在对齐检查前向上取整,以防止在大 payload 上出现断言失败
- [Execution] 修复具有 ≥15.8 TB 磁盘的节点上的 MONAD007→MONAD008 迁移数据损坏 — 防止
monad-mpt --upgrade期间的 db_offsets 溢出和 root-offsets ring 边界违规 - [Execution] 修复
monad-mpt --upgrade在遗留数据库上的崩溃 — 修复整数下溢,该问题在num_cnv_chunks被添加到 storage pool footer 之前创建的数据库节点上导致Assertion 'r != MAP_FAILED'
主要内部变更
- [Consensus] 切换到 prometheus 支持的指标 — 所有 executor 指标已迁移到 prometheus registry
- [Consensus] Raptorcast:每轮 proposer 验证 — raptorcast 现在拥有
ProposerSchedule类型用于每轮 proposer 验证,与 MonadState 解耦 - [Consensus] 将 chunk 分配与 partition 解耦
- [Consensus] 使用整数算术的 stake partition 算法
- [Consensus] 允许 peer discovery 中的仅认证 name records
- [Consensus] 分离 bootstrap 入口地址的各部分
- [Consensus] 拆分 peer entry 端口
- [Node ops]
monad-sign-name-record:用独立的--ip、--tcp-port和--udp-portflag 替换--address ip:port - [Execution] Dual-timeline:添加辅助时间线元数据和
monad-mpt --upgradeDB 迁移工具 - [Execution] MPT 内存序修复:通过 acquire accessor 路由
version_lower_bound_读取,以修复 reader 路径上的数据竞争 - [Execution] 修复从
monad_eth_revision到evmc_revision缺失的转换 - [Execution] 在
cmd/monad中添加--disable-sq-thread-cpuflag - [Execution] 移除对 Petersburg 和 Constantinople fork 的支持(仅 Ethereum replay)
- [Execution] 在 Ethereum 主网 replay 上激活 Prague
- [Execution] 引入树内的
monad_eth_revision类型,替换evmc_revision - [Execution] 将
intrinsic_gas重构为可加性 feature gate(+ 潜在的 EIP-7702 gas bug 修复) - [Node ops]
monad-mpt状态输出格式已变更 — 之前显示MPT database has N history, earliest is X latest is Y的行现在显示MPT database has been configured to retain no more than Z versions.,区块高度位于下方的Latest finalized is <block>行。monad-status已更新以支持新格式。使用自定义脚本解析monad-mpt输出的运营者应更新为读取Latest finalized is,而不是旧的latest is模式。 - [RPC] 简化 calltree 重组
- [RPC] 清理 debug handler
v0.14.5
标签或哈希:
monad-bft(consensus): tagv0.14.5(25672d619)monad(execution): tagv0.14.5(ffefb81a0)
亮点
eth_sendRawTransactionSync现为事件驱动 — 现在订阅来自执行事件的区块更新,响应时间最多改善 100ms。此方法现在仅在启用执行事件时受支持。启用 websockets 运行 RPC 的运营者不会有变化;没有执行事件的节点将返回 “method not supported”createAccessListrevert 修复 — 即使调用被 revert,eth_createAccessList现在也会正确返回访问列表- 历史区块查询最多加速 2 倍 — 对历史区块的
eth_getBlockByHash和eth_getBlockTransactionCountByHash性能得到改善 - WAL 改进 — 使用滚动分块限制 WAL 大小,在专用线程上持久化事件,仅追踪日志
主要 RPC/SDK 变更
- [RPC] 修复:在
createAccessListrevert 时返回访问列表 - [RPC] 修复 OpenRPC 可选参数标志
- [RPC] 为 TriedbDataSource 实现 HistoricalDataSource
- [RPC]
eth_sendRawTransactionSync现在订阅来自执行事件的区块更新,响应时间最多改善 100ms。此方法现在仅在启用执行事件时受支持。启用 websockets 运行 RPC 的运营者不会有变化;没有执行事件的节点将返回 “method not supported” - [RPC] 将 RPC 事件缓冲区分离为 write 和 view
- [RPC] 在 RPC websocket 实现中使用事件别名
主要性能变更
- [RPC] 历史区块查询最多加速 2 倍 —
eth_getBlockByHash和eth_getBlockTransactionCountByHash通过 HistoricalDataSource 重构得到改善
主要健壮性变更
- [Consensus] 在启动时拒绝
fullnode_raptorcast.max_group_size> 500 — 防止配置错误 - [Execution] 拒绝非规范的 RLP 编码字符串/列表
- [Execution] 防止在奇数输入长度上迭代器越界
- [Execution] 为 revert 的调用帧保留访问列表
主要内部变更
- [Consensus] Deterministic raptorcast:主协议推出
- 参考:monad-bft PR #2811 (4 commits: rollout, commitment, rebroadcast, packet parsing)
- [Consensus] Deterministic raptorcast:secondary 编码与路由基础
- 参考:monad-bft PR #2998 (5 commits: encoder, routing, broadcast mode, receive gating)
- [Consensus] MIP-9:将验证者集合上限提高到 300(仅共识侧 — 执行侧待定)
- [Consensus] WAL:使用滚动分块限制 WAL 大小
- [Consensus] WAL:在 waltrace 线程上持久化事件
- [Consensus] WAL:仅追踪 wal-logged 事件
- [Consensus] 在可能时省略 timeout.last_rc 验证
- [Consensus] 明确 forkpoint 持久化时不进行 fsync
- [Execution] 移除 intx 库,以自定义 uint128_t/uint256_t 类型替换
- [Execution] 将 DbCache 设为 TrieDb 的成员
v0.14.4
标签或哈希:
monad-bft(consensus): tagv0.14.4(06ed5828)monad(execution): tagv0.14.4(6c75a8851)
亮点
eth_fillTransactiongas 估算修复 — 将 gas 估算行为与eth_estimateGas对齐,使调用者在两个端点上获得一致的估算结果
主要 RPC/SDK 变更
- [RPC] 修复
eth_fillTransaction的 gas 估算- 参考:monad-bft PR #3006
- 之前,调用外部合约只转发 63/64 gas,导致内部帧 gas 耗尽并返回
ExecutionError。现在与eth_estimateGas行为一致。
主要健壮性变更
- [Consensus] statesync:在重复响应索引时不 panic
- [RPC] 在
eth_gasPrice中使用饱和算术以防止溢出 - [Execution] 限制预编译输入分配,以防止慢区块向量
主要内部变更
- [Consensus] Raptorcast chunk 分配清理:secondary raptorcast 现在使用 Fisher-Yates 洗牌 + 轮询分配(之前为旋转);降低延迟并为 deterministic raptorcast 做准备
- [Consensus] 对 secondary raptorcast group 采取更严格的 round 查找 — 在 deterministic raptorcast 切换之前防止未来的隐患
- [Consensus] 从 fair queue / UDP 层移除动态上限
- [RPC] 在 RPC 中使用 TxHash 和 BlockHash 类型别名(内部重构,无行为变化)
- [Execution] zkVM:添加 partial trie DB — 用于 zkVM 客户程序(RISC-V)的新 partial MPT 实现,包括 RLP 编码的执行 witness 解码器
v0.14.3
标签或哈希:
monad-bft(consensus): tagv0.14.3(f2a2092b)monad(execution): tagv0.14.3(7fcd693f7)
亮点
- 认证 UDP 强制启用 — Raptorcast 现要求线路认证的 UDP 套接字;先前为可选,现对所有节点强制启用
主要健壮性变更
- [Consensus] Raptorcast:要求认证 UDP 套接字
- 参考:monad-bft PR #2956
- 强制执行认证 UDP 套接字设置;先前为可选
- [Execution] 修复读取比最新已 finalized 区块更旧的 finalized 状态时
DbCache断言失败- 参考:monad (execution) PR #2190
- 用显式检查替换断言;修复在链上向后越过最新已 finalized 区块时错误的
truncated值传播
- [Execution] 将
MIN_HISTORY_LENGTH下限从 257 提高到 300- 参考:monad (execution) PR #2217
- 在磁盘压力下,history 可能缩小至 block hash 缓冲区所需的 256 区块最小值以下,重启后强制执行完整 statesync;新的下限提供约 44 区块的余量
- [Execution] 修复
evm-as中 pre-Shanghai 目标在 offset 0 处的 PushLabel 编码- 参考:monad (execution) PR #2213
- 修复 EVM 汇编器中 pre-Shanghai 代码路径的错误
PUSH0编码
主要性能变更
- [Execution] 将 trie span 优化扩展到 fnext、child_off 和 SharedPtr 数组
- [Execution] 从 rwdb find 路径中移除 inflight 读取合并
- [Execution] 在
State::is_touched中省略 DB 抓取 - [RPC] 在 log 检索路径上跳过冗余的 receipt 转换
- 参考:monad-bft PR #2839
- 在处理 log 查询时避免构建完整的
TransactionReceipt;直接从(TxEnvelope, Receipt)转换到ReceiptEnvelope,减少eth_getLogs及相关调用的开销
主要内部变更
- [Consensus] Peer discovery:在 name records 中要求认证 UDP
- 参考:monad-bft PR #2955
- 对认证 UDP 强制执行非零端口策略;端口 0 在 RLP 编码的 peer entry 中被用作空值,现在会被拒绝
- [Consensus] 添加 full node 消息类型以及用于 peer 声誉评分的处理逻辑
- 参考:monad-bft PR #2914, PR #2915
- 引入新的消息类型,供 full node 向 publisher 发送 peer 参与数据以用于声誉评分
- [Consensus] Peer discovery:丢弃 V1 wire name records
- 参考:monad-bft PR #2952
- 移除对 V1 peer wire 格式的向后兼容性;所有 peer 必须使用 V2 name records
- [Consensus] 在 archive 中暴露按 hash 检索的 block number
- 参考:monad-bft PR #2980
- Archive 节点现在支持按 block hash 查找 block number
- [Consensus] Raptorcast:stake 比例的 chunk 分配器的轮询模式
- 参考:monad-bft PR #2970
- 为 deterministic Raptorcast 中使用的 stake 比例 chunk 分配器添加轮询分配
v0.14.2
标签或哈希:
monad-bft(consensus): tagv0.14.2(6307011c)monad(execution): tagv0.14.2(169e5c45b)
亮点
debug_*改进 — 追踪日志上新增index字段;eth_call返回明确的reserve balance violation错误- 压缩热路径 8-9 倍加速 — trie 节点数组优化减少了冗余的指针重新计算
- txpool 中转发入站的公平队列 — 改善验证者之间的交易转发公平性
主要 RPC/SDK 变更
- [RPC] 将 callframe 检索方法移至 ChainState
- 参考:monad-bft PR #2936, PR #2937
- 涵盖 block 和 transaction callframe;在 debug trace handler 中对调用帧解码去重
- [RPC] 在 debug trace 输出中包含 log 索引;在
eth_call中暴露 reserve balance 错误- 参考:monad-bft PR #2658
- 在 debug call tracer 中为每个被追踪的 log 添加
index字段,反映交易中跨所有嵌套调用帧的全局 log 顺序;当交易超过发送方的 reserve balance 时,eth_call现在返回明确的reserve balance violation错误,而不是通用失败
- [RPC] 将 eth call gas 上限配置移至 EthCallHandler
- [RPC]
debug_*方法现在计入 eth call 速率限制- 参考:monad-bft PR #2868
debug_traceCall、debug_traceTransaction和相关方法现在会更新 eth call 统计跟踪器;先前它们绕过了该跟踪器
- [RPC] 为 debug RPC 方法更早地强制执行最大响应大小
- [RPC] 降低 RPC 批处理请求上限以匹配 Geth 的默认值
主要健壮性变更
- [Consensus] ConfirmGroup 消息修复
- 参考:monad-bft PR #2652
- 防止 full node 拒绝过大的 ConfirmGroup 消息;当 group 达到最大大小时引入 NoConfirm 响应
- [Consensus] 修复 leanudp identity usage map 中的泄漏
- [Consensus] 在 leanudp 中强制执行陈旧消息超时
- [RPC] 修复 RPC 中 eth call 统计跟踪的内存泄漏
- [Consensus] 放宽针对陈旧 DoneSync 边界情况的 statesync 断言
- [Execution] 修复未对齐读取中可能的未定义行为
- [Execution] 修复 DB 重置后 auto_expire_version 初始化不正确
- [Execution] 修复 statesync 期间 compaction 进度重置
- 参考:monad (execution) PR #2133
- 修复 statesync 期间 compaction head 被错误地重置为 0,导致 compaction 从头重新开始
- [Consensus] 精确解码转发的交易
- 参考:monad-bft PR #2810
- 确保转发的交易在解码时不带尾部字节
主要性能变更
- [Consensus] 将成本低的共识验证检查前置
- [Consensus] 在 txpool 客户端中对转发的入站进行公平队列处理
- [Consensus] 将转发的交易节奏控制移入 executor,简化入站批处理
- [Consensus] 在证书验证之前丢弃已过时的共识消息
- [Execution] 优化 trie 节点数组访问(压缩热路径 8-9 倍加速)
- 参考:monad (execution) PR #2163
- 提升 packed node 数组的基指针;减少 compaction、expiration 和 version tracking 循环中的冗余指针重新计算
主要内部变更
- [Consensus] Raptorcast:直接 UDP 传输
- 参考:monad-bft PR #2898, PR #2900
- 为点对点流量添加专用的直接 UDP 套接字,绕过 Raptorcast 擦除编码。消除 Raptorcast 在单播发送时固有的约 2.5 倍带宽放大。对不支持的 peer 优雅回退到 Raptorcast 路径。
- **注意:**仍在测试中 — 本次发布中不建议在生产环境使用。
- [Consensus] Wireauth:降低每实例的默认值
- [Execution] 将系统 boost fiber 替换为子模块(boost-1.83.0)
- [Execution] 将预编译 gas 成本计算与运行时实现分离
- 参考:monad (execution) PR #2099, PR #2098
- zkVM 编译的准备工作
- [Execution] 移除对 EVMC_FRONTIER 的支持
- [Execution] 为 Ethereum 和 Monad replay 添加块级事件记录
- 参考:monad (execution) PR #2006
- 在 replay 期间发出 BLOCK_START/BLOCK_END 事件,使 replay 事件流可用于工具
- [Consensus] 为 txpool 和 raptorcast 配置共享 peer 评分
- [Consensus] Raptorcast:在 build target 中对 BroadcastGroup 强制执行类型级安全
- 参考:monad-bft PR #2843
- 将 build target 限制为已建立的 group,消除 packet builder epoch/round 追踪的失步风险
v0.14.1
标签或哈希:
monad-bft(consensus): tagv0.14.1(4ed79392)monad(execution): tagv0.14.1(54e132cfa) — same commit as v0.14.0
**注意:**基于 v0.14.0 的补丁发布。执行层无变化。
主要 RPC/SDK 变更
- [RPC] 修复
eth_fillTransactiongas 估算和 reserve balance 处理- 参考:monad-bft PR #2949
- 将 reserve-balance 失败映射到专用结果,而不是折叠为通用错误;通过在填充估算期间使用无上限余额的状态覆盖,使省略 gas 的填充估算更宽松
- **注意:**余额不足的
eth_fillTransaction现在返回reserve balance violation(此前为insufficient balance)。按精确错误字符串匹配的调用方应相应更新。
v0.14.0
标签或哈希:
monad-bft(consensus): tagv0.14.0(2d487de0)monad(execution): tagv0.14.0(54e132cfa)
亮点
- RPC:receipt 查询快约 400ms — receipt 现在在 chainstate 缓冲中跟踪,并在 Proposed 时可用,消除了 v0.13.0 中增加约 400ms 的 trie 查找。
- RPC:
eth_fillTransaction— 新端点,用于获取完全填充的交易(gas、nonce 等)而无需签名。适用于钱包和准备交易的 dapp。 - RPC:proposed 区块上的 Websocket 通知 —
newHeads和logs订阅现在在 proposed 区块上触发,而不是 voted,降低实时应用的通知延迟。
主要 RPC/SDK 变更
- [RPC]
eth_fillTransactionRPC 端点- 参考:monad-bft PR #2662, PR #2932
- PR #2932 修复了多项不一致:在足够时保留用户提供的
maxFeePerGas,将0x0gas/fee 视为缺失,允许对失败交易进行 gas 填充,拒绝 blob 样式请求,正确处理 EIP-2930 legacy-fee
- [RPC] 在 websocket 通知中使用 proposed 区块
- [RPC] 交易 receipt 存入 chainstate 缓冲区(receipt 查询快约 400ms)
- [RPC] 将 triedb 使用统一到 ChainState
- [RPC] 在 RPC log 中使用 ChainStateBuffer
- [Execution] 添加带有路径解析和描述符信息的执行事件 Rust SDK
主要健壮性变更
- [Execution] 移除依赖于 reserve balance 记账次优性的 ASSERT
- [Consensus] RLP 清理和更严格的解码强制
- [Consensus] 修复 triedb sync read FFI 中的零长度分配泄漏
- [Consensus] 修复 dataplane ban 到期 TOCTOU 下溢
- [Archive] 修复持续故障后 S3 客户端卡住
- [Archive] 放宽针对 AWS 参数的 checker replica 匹配
- 参考:monad-bft PR #2943
- 处理存储的 replica 配置中缺失的可选 AWS 字段;避免从跟踪状态中丢弃 replica
- [Execution] 修复 nblocks=1 时 runloop_monad 的差一错误
- [Execution] 修复 RangedGetMachine 跳过超出 min prefix 的 key
- [Execution] 修复 node writer 重入导致的非连续写入
- [Execution] 修复空输入下 RLP 编码中的未定义行为
- [Consensus] 修复 OpenRPC schema 的不稳定排序
- [Consensus] 修复 ledger-tail:从持久化的 peer 中读取 author_address
主要性能变更
- [Consensus] 缓存所有成功的 Raptorcast 解码结果
- [Consensus] 用于交易接收的加权公平队列
- [Consensus] 基于 gas 的 peer 评分
- [Consensus] 以 AVX2 分块进行 XOR 解码器缓冲区
- [Consensus] BLS 签名的惰性解码器
- [Execution] 通过滞后改善 fast list compaction 偏移量计算
主要内部变更
- [Consensus] ⚠️ 将
node.toml中的 auth UDP 字段设为必需 - [Consensus] 将
raptor10_fullnode_redundancy_factor最大值从 7 降低到 3 - [Node ops] ⚠️
monad-ledger-tail:将--node-config-path重命名为--peers-path- 参考:monad-bft PR #2916
- 如果您手动运行
monad-ledger-tail或在自定义 systemd unit 中运行,请更新 flag 名称
- [Node ops] 将 systemd 服务从
Restart=no改为Restart=always - [Consensus] 轻量级 UDP 帧协议(leanudp)
- [Consensus] 在 peer discovery 中支持直接 UDP 端口
- [Consensus] 具有编解码器抽象、直接点对点路由的认证套接字
- [Consensus] Raptorcast:移除遗留的 packet parser
- [Archive] 支持带隔离的 per-source AWS profile(archiver source/sink/fallback 的
--profileflag,从.aws/credentials和.aws/config读取) - [Execution] 重构 chain:移除
static_validate_header和validate_transaction虚方法
v0.13.1
标签或哈希:
monad-bft(consensus): tagv0.13.1(7db6cea2)monad(execution): tagv0.13.1(722cbf5b5)
**注意:**这是基于 v0.13.0 的补丁发布,用于修复 State Archive 节点的 RPC 问题。monad(执行)标签指向与 v0.13.0 相同的提交。
主要健壮性变更
- [RPC] 使用 latest voted 作为 last_proposed 的回退
- 参考:monad-bft PR #2857
- 修复当
last_proposed不可用时 State Archive 节点 RPC 返回陈旧区块数据的问题
v0.13.0 (MONAD_NINE)
标签或哈希:
monad-bft(consensus): tagv0.13.0monad(execution): tagv0.13.0+1
**注意:**规范发布版本是v0.13.0。monad 执行标签上的+1构建元数据表示这是包含 reserve balance 预编译回退成本修复(PR #2109)的发布后重建。
亮点
- RPC:
latest区块标签:Finalized->Proposed— 使用latest区块标签的查询现在返回最新 proposed 区块的数据,降低了eth_getBalance、eth_call和其他状态查询的查询延迟。 - RPC:
eth_sendRawTransactionSync:Voted->Proposed— 使用eth_sendRawTransactionSync方法时可更早获得 receipt。 - Websocket:
newHeads/logs:Finalized->Voted— 订阅newHeads或logs的 websocket 订阅者可更早收到通知。
主要协议变更
以下所有更新均由MONAD_NINE revision 控制
- [EVM] MIP-3:线性内存实现
- [Execution] MIP-4:Reserve balance 预编译
- 参考:monad PR #2040 (scaffolding)
- 参考:monad PR #2065 (cached/incremental checks)
- 参考:monad PR #2086 (add dippedIntoReserve)
- 参考:monad PR #2106 (dippedIntoReserve argument length error)
- 参考:monad PR #2109 (fallback cost fix for clean spec)
- 参考:monad PR #2037 (skip reserve checks for init-selfdestruct)
- [EVM] MIP-5:激活 Osaka fork EIP
- Modexp 输入界限与 gas 提升(EIP-7823/EIP-7883)
CLZ操作码(EIP-7939)- 参考:monad PR #2024
**硬分叉:**本次发布在时间戳1773153000(测试网)/1773930600(主网)激活 MONAD_NINE。节点必须在激活前完成升级。
主要 RPC/SDK 变更
- [RPC] Latest 区块标签使用 proposed 区块
- [RPC] 在 websocket 通知中使用 voted 区块
- [RPC] 为 RPC doc 宏添加实验性 flag
- [RPC] 重构 RPC 中间件以改善请求处理
- [RPC] 为 RPC 添加解压缩防护
主要健壮性变更
- [Consensus] 为 Raptorcast 添加签名验证器
- [Consensus] 修复 r10 解码器中的 reactivate 逻辑
- [Execution] 修复 C->Rust 日志中的缓冲区溢出
- [Consensus] 为 wireauth 添加全局连接速率限制
- [Consensus] 在 peer discovery 中根据 name record 验证 ping/pong 源地址
- [Consensus] 在 ledger 中持久化 voted_head
- [Consensus] 为 dataplane 添加双 UDP 报文发送器
- [Execution] 通过在线程退出前 join bootstrap fiber 修复 ThreadSanitizer 竞态
- [Execution] 在 selfdestruct tracer 帧中包含账户余额
- [Consensus] 确保 proposed head 位于规范链上
- [Execution] 修复 compact virtual chunk offset 中的哨兵冲突
- [Execution] 修复 execute_block_transactions 中潜在的竞态条件
主要内部变更
- [Consensus] 在 secondary raptorcast 被禁用时移除不需要的 channel
- [Consensus] 将 alloy 升级到稳定版本
- [Execution] 为 VM 工具添加
evm-as语法糖 - [Consensus] 参数化 wireauth 指标以获得更好的可观测性
- [Consensus] 清理 block persist 实现
- [Consensus] 修复 block-persist 中的 wip 扩展名
- [Consensus] 移除遗留的
do_local_insert - [Consensus] 为 raptorcast 反序列化失败添加指标
- [RPC] 减小 RPC 事件服务器广播 channel 大小
- [Consensus] Pre-TFM base fee 清理
- [Consensus] 移除 pre-TFM reserve balance 逻辑
- [RPC] 简化 RPC 中的 hex 编码/解码
- [Archive] 为 kvstore 添加 exists(key)
v0.12.7
标签或哈希:
monad-bft: tagv0.12.7monad: tagv0.12.7
主要 RPC/SDK 变更
- [RPC] 允许在
eth_estimateGas中使用 block hash 作为区块标识符 - [RPC] 对 RPC id 使用
RawValue以保留原始 JSON 类型- 降低使用请求 ID 中大型 JSON 数组/字典的 DoS 攻击的有效性
- 参考:monad-bft PR #2455
主要健壮性变更
- [EVM] 修复 modexp 预编译中的未定义行为
- [Consensus] 移除连续序列号断言
- [Consensus] 使用来自 timeout 消息的 TC 推进 round 时改善活性
- [Consensus] 禁止创建空的验证者集合
主要内部变更
- [Consensus] 为
secp256k1添加安全性测试- 添加 Wycheproof 测试、可塑性测试和安全性单元测试
- 参考:monad-bft PR #2706
- [Node ops] 更新
rkyv及其他依赖 - [Consensus] 在 dataplane 中同步返回绑定的套接字地址
- [Consensus] 为清晰起见重命名 state backend 缓存
v0.12.6
标签或哈希:
monad-bft: tagv0.12.6monad: tagv0.12.6
主要 RPC/SDK 变更
- [RPC] 修复 selfdestruct 调用帧中的深度 bug
- [RPC] Prestate tracer 一致性修复
主要健壮性变更
- [Consensus] 添加签名验证速率限制,已认证 peer 可绕过
- [Consensus] 在更新 peer 之前验证 confirm group 消息
- [Consensus] 直接使用 Tai64N 进行 wireauth 时间戳比较
- [Consensus] 改善 RaptorCast 解码缓存驱逐
- [Consensus] 修复缓存水合时 blocksync in-flight 请求跟踪
- [Execution] 在执行提案之前更新 triedb voted 元数据
- 解决通过 websocket 的 Voted 更新与相应 JSON-RPC 调用之间的竞态条件
- 参考:monad PR #1964
- [Node ops] 定期持久化 peer 以增强发现的弹性
主要性能变更
- [Consensus] 通过环形缓冲区实现提升 dataplane 吞吐量
- [Execution]
MLOAD、MSTORE、MSTORE8、CALLDATALOAD操作码的原生实现 - [Execution] 改善 snapshot 写入性能
- [Execution] 使用二分查找优化数据库 history 长度调整
- [Execution] 在 AsyncIO 中统一单缓冲区和分散读取处理
主要内部变更
- [Node ops] 针对预构建镜像的 Docker 单节点容器更新
- 对本地 Docker 安装的修复
- 参考:monad-bft PR #2674
- [Consensus] 添加对通用 txpool sidecar 的支持
- 启用 IPC 交易优先级和转发控制
- 参考:monad-bft PR #2557
- [EVM] Osaka fork 准备
- Modexp gas 变化和上限(EIP-7823/EIP-7883)
- 实现
CLZ操作码
- [Node ops] 在 CLI 中接受
--hyphen-style长选项 - [Node ops / Archive] Archive 流水线改进
- 为
KVStore添加WritePolicy用于条件写入保护(NoClobber) - 添加 BFT 上传统计日志
- 参考:monad-bft PR #2649, monad-bft PR #2661
- 为
- [Node ops] 简化 RPC txpool 状态跟踪
- [Node ops]
monad_cli中的 snapshot 工具改进- 添加
--dump_concurrency_limit参数 - 为分布式 snapshot 创建添加分片支持
- 参考:monad PR #1967, monad PR #1965
- 添加
- [Node ops] 添加 RaptorCast 解码缓存指标
- [Execution] 为执行数据库添加
CommitBuilderAPI - [Execution] 移除遗留的
using_chunks_for_root_offsets元数据字段 - [Node ops / Txgen] 添加 ERC-4337 + EIP-7702 生成器(
erc4337_7702_bundled) - [Node ops] 为
blockcapd和执行事件 archiver 添加 systemd 服务脚本 - [SDK] 添加
monad_event_resolve_ring_fileAPI - [Execution] 在 VM 外启用 VM 主机异常处理
v0.12.5
标签或哈希:
monad-bft: tagv0.12.5monad: tagv0.12.5
主要网络变更
- [Network reset]
testnet从 genesis 重置 starting fromMONAD_EIGHT- 将总供应量增加到 1000 亿,与
mainnet保持一致 - 为消除死代码(早期
testnet所需的 revision)清理路径 - 参考:monad PR #1983, monad-bft PR #2673
- 将总供应量增加到 1000 亿,与
v0.12.4
标签或哈希:
monad-bft: tagv0.12.4monad: tagv0.12.4(unchanged from v0.12.3)
主要内部变更
- [Node ops] 修复构造 self name record 时的 peer discovery 端口配置
- 在构造 self name record 时使用来自 peer discovery 配置的端口,而不是绑定套接字的端口。此 bug 影响使用 NAT 的节点运营者。
- 参考:monad-bft PR #2655
v0.12.3
标签或哈希:
monad-bft: tagv0.12.3monad: tagv0.12.3
主要 RPC/SDK 变更
- [RPC] 支持 EIP-7966(
eth_sendRawTransactionSync) - [RPC] 为 staking 预编译 syscall 的 trace 填充
value字段(在0.12.3-rpc-hotfix2中添加)
主要健壮性变更
- [Consensus] UDP 的线路认证协议
- 添加认证 UDP 通信以改善网络安全
- 包含 replay window 调整以改善可靠性
- 参考:monad-bft PR #2417, monad-bft PR #2544, monad-bft PR #2626, monad-bft PR #2091
- [Execution] 改善
statesync关闭并修复协议损坏- 修改
statesync_server_recv()以保证完整读取 - 参考:monad PR #1930
- 修改
- [RPC] 防止 RPC 中的 reserve balance 崩溃
- 在调用帧中添加 reserve balance violation 错误消息
- 参考:monad PR #1932, monad-bft PR #2629
- 此项已在
v0.12.2-rpc-hotfix中发布过
- [Consensus] 为
txpoolIPC 流添加超时- 防止交易池通信中的连接挂起
- 参考:monad-bft PR #2619
- [Consensus] 拒绝签名者为空的 timeout certificate
- 添加验证以防止畸形 timeout certificate
- 参考:monad-bft PR #2630
- [Consensus] 验证 RaptorCast chunk 长度非零
- 添加验证以防止畸形 RaptorCast chunk
- 参考:monad-bft PR #2638
- [Execution] 修复未能保留
version_lower_bound的 MPT 恢复 bug - [Execution] 修复移动 trie 版本向前的 bug
- 在向前移动到更新版本之前,擦除超出 history 范围的版本
- 参考:monad PR #1957
- [Execution] 修复指向 intercode 的悬空指针
- 解决
get_code和read_code函数的内存安全问题 - 参考:monad PR #1941
- 解决
- [Execution] 为
runloop_monad_ethblocks添加重试
主要性能变更
- [RPC] 改善
eth_getLogs性能- 减少内存拷贝并统一 receipt-to-logs 处理
- 参考:monad-bft PR #2588, monad-bft PR #2591, monad-bft PR #2631
- [Execution] Fiber:添加对 move-only 仿函数的支持
- 通过支持 move 语义提升执行效率
- 参考:monad PR #1936
主要内部变更
- [RPC / Node ops] 允许 RPC 在无
monad-bft情况下运行- 启用独立 RPC 运行以改善部署灵活性
- 参考:monad-bft PR #2613
- [Node ops] 为
monad-mpt添加--root-offsets-chunk-countflag 以配置为 root offsets 分配的 chunk 数量- 每个 chunk 可容纳约 1650 万个区块。此前,所有节点都硬编码为使用 2 个 chunk(TrieDB 最大容量约 3300 万区块)
- 新默认值:16,必须是 2 的幂
- 请注意,默认值 16 对应约 2.68 亿区块 ~ 1240 天。大多数情况下限制因素是磁盘容量,在填满至 80% 时会自动压缩
- 参考:monad PR #1937
- [Node ops] Peer discovery 改进
- Full node 定期拉取验证者 name record 以进行动态验证者发现
- 为 name record 添加认证 UDP 端口
- 参考:monad-bft PR #2607, monad-bft PR #2538
- [Node ops / Archive] Archive 基础设施改进
- 通过
--max-blocks-per-iter配置重构monad-block-writer以提高可靠性 - 异步回填,支持仅追踪的 archive
- 添加
require-tracesarchiver flag 和 indexer 回退源 - 支持历史执行事件归档以及通用目录归档
- 可能破坏兼容性:从
monad-archiversystemd 服务中移除--start-block;运营者必须使用命令式 CLI 来设置起始区块- 示例:
monad-archiver set-start-block --block 1000000 --archive-sink s3://bucket-name/path - 使用
--async-backfillflag 设置 async-backfill 标记,而不是 primary 标记
- 示例:
- 参考:monad-bft PR #2610, monad-bft PR #2606, monad-bft PR #2598, monad-bft PR #2514, monad-bft PR #2612, monad-bft PR #2569, monad-bft PR #2623
- 通过
- [Node ops] 网络配置更新
- 使用默认 MTU 1500
- 在
monad-executor和monad-raptorcast中添加 HDR histogram 用于广播延迟跟踪 - 参考:monad-bft PR #2576, monad-bft PR #2602
- [Consensus] RaptorCast 改进
- 每 30 秒清空 histogram 并仅保留 p99 以获得更好的延迟跟踪
- 修复接收到控制消息后的 timer 更新,以确保正确的 keepalive
- 参考:monad-bft PR #2627, monad-bft PR #2637
- [Consensus] Dataplane:重构以使用 socket handle
- 为 dataplane 未来使用认证套接字进行扩展做准备
- 参考:monad-bft PR #2458
- [Execution] Replay monad:始终基于最新 finalized 状态执行首个区块
- [Node ops] Txgen 改进:README 和指南、nonce gap 和 legacy tx 选项、ERC20 池、Uniswap v3 模式、NFT 出售模式、websocket 和 RPC 请求生成
v0.12.2
标签或哈希:
monad-bft: tagv0.12.2-rcmonad: tagv0.12.2-rc
主要协议变更
以下所有更新均由MONAD_EIGHT revision 控制
- [Execution] Reserve balance 检查现在使用最终状态代码哈希。这使得检查
略微宽松(在执行期间不太可能 revert 交易),并使实现
更接近
Coq 模型
该模型已在一些假设下被证明是正确的。
- 这改变了以下边界情况的行为:
- 在交易 1 中,账户 X 收到少量 MON(例如 5 MON)
- 然后(很久之后)在交易 2 中,有人在账户 X 上部署智能合约钱包,并从该智能合约中发送 MON。
- 之前,交易 2 的执行会将账户 X 视为 EOA 并对其应用 reserve balance 检查,从而 revert 交易,因为它会是一次未经共识预授权的 dipping 交易。
- 变更之后,账户 X 将被视为智能合约账户,并将 从 reserve balance 检查中省略。
- 请注意,智能合约地址是确定性的,这实际上使得 接收代码部署的地址不可能同时是 EOA(即对应于 私钥)。
- 参考:monad PR #1916, monad PR #1917
- 这改变了以下边界情况的行为:
- [EVM] 将 staking 预编译反向映射的分页从 100 减少到 50
- 适用于
precompile_get_delegations()和precompile_get_delegators() - 参考:monad PR #1920
- 适用于
主要部署变更
- [SDK] 执行事件不再需要特殊的 “preview” 版本来启用所有 EVM 通知(不再有
--exec-events特殊版本) - [SDK] 修复 event ring 创建中的竞态条件
主要健壮性变更
- [RPC] 修复
eth_feeHistory - [Consensus] 更新交易分类逻辑,在 delegation 之前先 emptying
- 改善
try_apply_block_fees中的 delegation 顺序 - 参考:monad-bft PR #2561
- 改善
- [Execution] 奖励系统交易的故障保护性合理性检查
- [RPC] 在
eth_call中检查 reserve balance- 防止模拟交易违反 reserve balance
- 在
eth_call实现中调用revert_transaction - 参考:monad PR #1912
- [Node ops] 修复远程拉取的
forkpoint.toml写入格式- 确保从远程源拉取时以正确格式写入 forkpoint 文件
- 参考:monad-bft PR #2554
- [Node ops] 修复
monad-keystorekey 损坏问题to_bls和to_secp现在消费 secret 以防止损坏的 keystore 文件- 为命令行 keystore 应用添加测试,以验证所有 flag 组合都能正常工作
- 参考:monad-bft PR #2553
- [Execution] 修复
storage_pool的try_trim_contents()中当 TRIM 起始字节不是磁盘 page 大小的倍数时的错误写入偏移 - [RPC] 使用 txpool bridge channel 大小进行速率限制
- 通过使用 channel 容量来对
eth_sendRawTransaction进行速率限制,防止try_send方法失败 - 参考:monad-bft PR #2506
- 通过使用 channel 容量来对
- [Consensus] 改善 RaptorCast 消息验证
- 为消息解析中的
chunk_id范围添加合理性检查 - 在 merkle proof 构造中拒绝溢出的
merkle_leaf_idx - 更新解码器中
encoded_symbol_capacity的计算 - 参考:monad-bft PR #2541
- 为消息解析中的
- [Consensus] 改善 RaptorCast group 邀请响应检查
- 添加合理性检查,防止在同一 full node reject 后处理其 group 邀请 accept
- 参考:monad-bft PR #2574
- [Consensus] 更新 txpool 插入策略 - 使余额检查更严格
主要性能变更
- [Consensus] 在优先级队列越限时添加 dataplane 警告
- 将每个优先级队列的总容量设置为 100MB(总计最大 200MB)
- 若超过容量,消息将被丢弃并记录警告
- 参考:monad-bft PR #2559
- [Execution / Node ops] 移除只读数据库的
io_uringSQ poll 线程- 重要:使用
monad-executionsystemctl override 的运营者应进行适当的修改以移除--ro_sq_thread_cpu参数,如 monad-bft PR #2558 所示。在启用--trace_calls运行 RPC 或 archive 节点时通常会设置 override。 - 减少 statesync 期间的线程争用,提高区块执行性能
- 将
ro_sq_thread_cpu参数设为可选,从默认配置中移除 - 参考:monad PR #1911, monad-bft PR #2558
- 重要:使用
- [RPC] 将
eth_call的 recover authority 逻辑移入提交的 lambda 内- 避免从 rust 线程调用时在 fiber promise 上阻塞,防止性能问题
- 由于
eth_call交易只有单个 authority,以单次调用recover_authority()替换并行化 - 参考:monad PR #1827
- [Execution] 移除
iopoll支持
主要内部变更
- [Node ops] 添加
monad-versioncrate,用于在二进制文件中提供 git 版本信息 - [Node ops] 添加 CLI 参数以指定 trace 交易执行池中的 fiber 数量(默认:100)
- [Node ops] 更新主网区块奖励
- [Node ops] 添加用于测试和调试的 block writer 二进制文件
- [Node ops] 使 cruft timer 保留可配置
- 为 artifact 保留时间添加环境变量支持(在
/home/monad/.env中 override) - 参考:monad-bft PR #2548
- 为 artifact 保留时间添加环境变量支持(在
- [Node ops] 在需要从 snapshot(硬重置)恢复时添加警告
- 当本地 tip 落后
STATESYNC_BLOCK_THRESHOLD时提示节点运营者 - 参考:monad-bft PR #2581
- 当本地 tip 落后
- [Node ops] 将
monad-cruft权限更新为 monad 用户 - [Node ops] 修复交易替换的 txpool 指标记录
- [RPC] 运营者可以配置 RPC worker 线程
- [Archive] 添加 TOML 配置文件支持,取代仅 CLI 配置
- 允许
monad-archiver二进制使用--configflag 进行配置 - CLI 参数继续有效,且优先级高于配置文件值
- 参考:monad-bft PR #2570
- 允许
- [Node ops] 为
txgen添加随机变异以改进测试 - [Node ops] 添加 reserve balance 一致性测试
- [SDK] 记录执行事件
- 包括状态访问和系统交易
- 参考:monad PR #1906, monad PR #1907, monad PR #1913
- [SDK] 显式清除不适用于某些事件类型的 flow 信息
- 防止编写不佳的事件客户端读取无效数据
- 参考:monad PR #1919
- [Execution] 通过
MONAD_ASSERT_PRINTF改进断言消息 - [Node ops] 添加 statesync 服务器指标
- 添加
SyncDone指标以跟踪成功和失败 - 为 statesync 服务器添加请求耗时指标
- 参考:monad-bft PR #2555
- 添加
- [Node ops] 消除 triedb 错误日志的歧义
- 通过使每个日志调用唯一以改善错误消息清晰度
- 参考:monad-bft PR #2579
- [Node ops] 更新 devnet 链配置
- 将默认 devnet epoch 长度从 50,000 区块缩短到 10,000 区块,epoch 起始延迟从 5,000 round 缩短到 1,000 round
- 参考:monad-bft PR #2578
- [Node ops] 更新测试基础设施
- 将
test_state和precompiles_test测试切换为TraitsTest - 为 CLI 添加
runloop_monad_ethblocks,用于 Monad EVM 区块 replay - 参考:monad PR #1905, monad PR #1894
- 将
- [Execution] 移除未使用的跨线程管道消息基础设施
- [Node ops] 在 node 状态中保持 manytrace agent 存活
- [Node ops] 更新 keystore 文档
- [Node ops] 为区块验证错误添加更多日志
- [Node ops] 处理 certificate 时记录 round leader
v0.12.1
标签或哈希:
monad-bft: tagv0.12.1monad: tagv0.12.1
主要 RPC/SDK 变更
- [RPC] 为以下 RPC 端点支持 prestate 和 statediff tracing:
debug_traceTransactiondebug_traceBlockByNumberdebug_traceBlockByHash- 参考:monad PR #1753, monad-bft PR #2403
- [RPC] 新端点
eth_createAccessList - [RPC] 修复历史 trace 中
to地址的序列化- 承接在
v0.12.0中实现的 monad-bft PR #2516(在历史上下文中) - 参考:monad-bft PR #2523, monad PR #1861
- 承接在
- [RPC] 为
eth_call和 RPC 查询移除人为的区块高度下限- 之前使用
latest和safe区块标签的查询被限制在finalized + 1,现在使用真实的最新 voted 区块 - 参考:monad-bft PR #2148
- 之前使用
- [RPC] 修复请求包含 self-destruct 交易的调用帧的 trace 时的 RPC 错误
- [RPC] 修复在 RPC 调用中使用状态覆盖时报告结果不一致
- [RPC] 修复通过覆盖 staking 合约中的余额对 RPC 节点发起的可能拒绝服务攻击
主要健壮性变更
- [Node ops/Consensus] 验证者将 statesync 服务限制在验证者和白名单 full node
- Full node 服务所有请求
- 参考:monad-bft PR #2524
- [Consensus] 更智能的 txpool 驱逐逻辑
- [Consensus] 启动时开始 vote 节奏计时器
- [Consensus] 修复历史日志的
selfdestruct问题 - [Consensus] 优雅处理 gas 上限检查
- [Consensus] 移除 0-stake 验证者支持
- 验证者集合中对 0-stake 验证者的支持过去被用作 full-node 支持缺失的变通方案,现在不应再被支持
- 参考:monad-bft PR #2545
主要性能变更
- [Consensus] 使 statesync 请求偏向响应性的 peer
- 支持动态 peer 扩展/收缩
- 若所有 peer 都被剪枝(例如未被任何 init peer 白名单),节点不再 panic
- 参考:monad-bft PR #2536
- [Consensus] 丢弃在缓存水合后(启动后约 7 分钟)命中磁盘的 blocksync 请求
- [Consensus] Dataplane:用 sleep 替换 interval
- [Execution] 替换
VersionStack代码中的数据结构,以改善压入和弹出 EVM 调用帧时的性能。
主要内部变更
- [Node ops] 在启动时尝试拉取远程
forkpoint.toml和validators.toml- 重要:节点现在在启动时自动尝试从远程位置下载配置文件,无需 “软重置”。此远程拉取受可配置的远程阈值约束
- 必须设置以下环境变量以启用此行为:
REMOTE_FORKPOINT_URLREMOTE_VALIDATORS_URL
- 参考:monad-bft PR #2484, monad-bft PR #2534
- [Node ops] 以 TOML 和 RLP 两种格式序列化 forkpoint,以 RLP 为真相源;清理
get_latest_config分支 - [Node ops/Consensus] 动态扩展 statesync 上游 peer
- 始终初始化为
statesync.init_peers(不再默认为 bootstrap peer) - 若启用
expand_to_group,则扩展到验证者集合(对验证者)和/或 secondary raptorcast peer(对公共/优先级 full node) - 参考:monad-bft PR #2535
- 始终初始化为
- [Node ops/Consensus] Full node 不再默认从验证者集合进行 blocksync
- 专用 full node 必须将上游指定为 blocksync override
- 重要:优先级/公共 full node 只能在加入 secondary raptorcast group 之后 进行 blocksync。建议将
refresh_period和invite_lookahead降低到 20 秒 - 参考:monad-bft PR #2532
- [Consensus] 使用 epoch 字段为 secondary raptorcast 编码 round 号
- 修复正在同步的 full node 收到来自已过期 group 的未请求 chunk 的问题
- 参考:monad-bft PR #2442
- [Consensus] 添加 statesync 服务器 pending 请求指标(更好的负载可见性)
- [Node ops] 导入
monad-executionAPI 变更
v0.12.0
标签或哈希:
monad-bft: tagv0.12.0monad: tagv0.12.0
主要协议变更
- [EVM/Network params] Opcode/precompile repricing
- 操作码定价:提高冷存储访问的成本
- 预编译定价:使少数定价过低的预编译 gas 成本更好地与相关硬件/延迟成本对齐
- Ref: monad PR #1600 (for most of the repricings) and monad PR #1700 (for
CREATE/CREATE2repricing), monad PR #1830 (for reduced v2 scope), monad PR #1871 (activation forMONAD_SEVEN) - 由
MONAD_SEVENrevision 控制
- [Consensus/Network params] [Staking] 将
BLOCK_REWARD_MON从 1 MON 提高到 25 MON- 请注意,这不由
MONAD_SEVEN(执行硬分叉)控制,而是由testnet的特定 epoch 起点控制 - 参考:monad-bft PR #2511
- 请注意,这不由
主要健壮性变更
- [Consensus] dataplane 中的共识消息优先级
- UDP 流量的优先级队列确保共识消息优先于其他流量交付
- 所有发送给验证者的共识消息都以高优先级发布和重播
- 参考:monad-bft PR #2352, monad-bft PR #2354
- [Consensus] DoS 防护:拒绝重复的无效共识消息
- 防止恶意验证者通过反复发送无效 BLS 签名消耗 CPU 时间
- 参考:monad-bft PR #2445
- [Consensus] Leader 同步改进
- 将 AdvanceRound 消息转发给当前 leader,以防止因消息审查导致的过时视图
- 参考:monad-bft PR #2485
- [Consensus] 验证 group 消息发送者的真实性
主要 RPC/SDK 变更
- [RPC] 修复
eth_syncing序列化 - [RPC] 更新
debug_getRawReceiptsRLP 编码 - [RPC] 失败的合约创建应向地址返回 null
主要性能变更
- [Consensus] Dataplane:UDP 发送的 io_uring 批处理
- 用 io_uring 批处理替换 GSO,以在拆分 payload 的同时保持 64KB 突发大小
- 将多个 UDP 发送批量为单次 io_uring 提交
- 参考:monad-bft PR #2317
- [Consensus] Dataplane:恢复完整 1500 字节 MTU
- [Consensus] RaptorCast:模块化 packet 组装和轮询排序
- [Consensus] Txpool 优化
- 添加可配置限制,移除 pending 池,重构最后提交状态跟踪
- 参考:monad-bft PR #2487, monad-bft PR #2363, monad-bft PR #2475
- [Archive] 将 indexer 回读移至异步任务
- [RPC] 移除请求提交路径中不必要的锁
主要内部变更
- [Node ops] 本地 Monad 安装的 Docker 支持
- 可选的
--use-prebuiltflag 以避免编译 - 参考:monad-bft PR #2456, monad-bft PR #2489
- 可选的
- [Node ops] ledger-tail:新的 CLI 配置选项
- 支持 ledger、forkpoint、节点配置和验证者文件的自定义路径
- 修复默认的
validators.toml路径 - 参考:monad-bft PR #2439
- [Node ops] wal2json:带时间戳过滤的多文件支持
- 跨多个文件的快速时间戳查找/过滤(例如,
wal2json -a"3:30pm EDT" -b"4:00pm EDT" wal*) - 通过并行处理和减少锁改进性能
- 参考:monad-bft PR #2496, monad-bft PR #2493
- 跨多个文件的快速时间戳查找/过滤(例如,
v0.11.6-tn1
引入 RevisionMONAD_FIVE 和 MONAD_SIX。重新定义 Revision MONAD_NEXT。
testnet 部署的标签或哈希(无协议差异):
monad-bft: tagv0.11.6-tn1monad: tagv0.11.6-tn1
主要协议变更 - MONAD_NEXT
- [EVM/Network params] 操作码重新定价
- 参考:monad PR #1600(涵盖大部分
重新定价)以及 monad PR #1700(针对
通过
SSTORE删除存储 slot - 提高
CREATE和CREATE2的成本 - 注意,相对于
v0.11.3,这减少了MONAD_NEXT上的操作码定价集合。
- 参考:monad PR #1600(涵盖大部分
重新定价)以及 monad PR #1700(针对
通过
主要协议变更 - MONAD_SIX
- [EVM] EIP-2935 bug 修复
主要协议变更 - MONAD_FIVE
- [Consensus/EVM] [Staking] 将
ACTIVE_VALIDATOR_STAKE从 25,000,000 MON 降低到 10,000,000 MON - [EVM] [Staking] 添加
getProposerValId()方法,返回最近区块 proposer 的val_id
主要 RPC/SDK 变更
- [RPC] 修复区块号查询中的竞态条件
- 在 ChainState 中返回 triedb 区块号,以防止当
eth_getBlockNumber返回在 triedb 中尚不可用的区块时出错 - 修复了钱包工作流中常见的问题:连续调用
eth_getBlockNumber和eth_getBalance - 参考:monad-bft PR #2393
- 在 ChainState 中返回 triedb 区块号,以防止当
- [SDK] 为执行事件添加 call frame 记录
- 参考:monad PR #1541
- 除非在执行时传入
--trace_calls命令行参数,否则不会记录这些信息
- [RPC] 添加
monad_eth_call_executor_get_state()API,以便更好地观察eth_call请求- 参考:monad PR #1764
- 返回当前正在执行/排队的请求数量,以及错误计数
主要健壮性变更
- [Consensus] 确定性的 timeout certificate 打破平局机制
- 当 TC 包含多个具有相同 round 的 tip 时,按 tip.qc 进行平局打破以保持一致性
- 参考:monad-bft PR #2460
- [Consensus] 交易 nonce 溢出验证
- [Consensus] 在区块 proposer 和 validator 之间对
EpochChange进行更一致的检查- 这解决了在
testnet-2中观察到的链停机问题 - 参考:monad-bft PR #2494
- 这解决了在
主要性能变更
- [EVM] 在 StateDelta map 中使用 komihash
- [EVM] JIT 编译器:仅为包含间接跳转的合约生成 jump table
- [RPC] 使用原子序列号改善 eth call 并发性
主要内部变更
- [Node ops] Fuzzer 重构(新增
--focusflag) - [Node ops] 构建带有 debug symbol 的镜像
v0.11.3-tn1
引入 RevisionMONAD_FOUR 和 MONAD_NEXT。
testnet 部署的标签或哈希(无协议差异):
monad-bft: tagv0.11.3-tn1monad: hash3e17265
主要协议变更 - MONAD_NEXT
- [EVM/Network params] 操作码重新定价)
- 参考:monad PR #1600(涵盖大部分
重新定价)以及 monad PR #1700(针对
CREATE/CREATE2重新定价) - 按照 Monad Initial Spec Proposal 中的讨论对操作码重新定价
- 提高冷存储访问成本
- Precompile:使少数定价过低的 precompile gas 成本更好地与相关 硬件/延迟成本对齐
- 注意:本次发布还包含 MISP v1.0.2 中的一些操作码重新定价,后来这些被移除:
- 提高通过
SSTORE创建存储 slot 的成本,并提高通过SSTORE删除存储 slot 时返还的 gas 百分比 - 提高
CREATE和CREATE2的成本
- 参考:monad PR #1600(涵盖大部分
重新定价)以及 monad PR #1700(针对
- [EVM] 在执行 delegated code 时禁用 CREATE 和 CREATE2
主要协议变更 - MONAD_FOUR
- [Consensus/EVM] Staking 上线
- (涉及多个 PR;参见 staking)
- 活跃验证者集合现在由 staking precompile 的链上状态决定
- 从指定的
staking_activationepoch 开始生效 - 注意:staking 奖励要到
staking_rewards_activationepoch 才会激活 (未来的某个时间点) - External rewards - 允许向验证者池进行外部(非区块奖励)存款,参见 monad PR #1625
- 还在 monad PR #1742 中为 staking precompile 增加了额外事件
- 新增
ValidatorRewarded、EpochChanged、ClaimRewards事件
- [Consensus/EVM] Reserve balance 逻辑上线
- 参考:monad-bft PR #2160 和 monad PR #1537
- 由于异步执行,共识层在交易打包逻辑中没有最新状态可用。Reserve balance 是一个缓冲区, 使账户的账务计算更简单,以降低在该延迟窗口内超额消费的可能性。
- 每个 EOA 的 reserve balance 设为
10 MON
- [Consensus/EVM] EIP-7702 上线
- [Network params] 设置每笔交易的 gas 上限为 30M gas
- 参考:monad-bft PR #2246
- 按照 Monad Initial Spec Proposal 中的讨论
- [Network params] 将区块 gas 上限从 150M gas (375 Mgas/s) 提高到 200M gas (500 Mgas/s)
- [Network params] 实现动态 base fee
- 参考:monad-bft PR #2207
- 按照 Monad Initial Spec Proposal 中的规范
- 目标 gas 为区块的 80%
- 将最低 base fee 从 50 MON-gwei 提高到 100 MON-gwei
- [EVM] 启用 EIP-2935 + blockhash buffer
- [EVM] 启用 EIP-7951(P256VERIFY precompile 支持)
- [EVM] 启用 EIP-2537(BLS12-381 precompile)
- [EVM] 将
CREATE/CREATE2的最大合约大小提升到 128 kb- 参考:monad PR #1440
- 这使
CREATE/CREATE2与顶层合约创建交易保持一致,后者的上限已在MONAD_TWO中提升。 - 此前由于一个 bug,它们无意中被限制为以太坊的最大 initcode 大小(49.152 kb)
主要 RPC/SDK 变更
- [SDK] 新增对执行事件(Execution Events) 的支持
- [RPC] 通过
debug_traceCall扩展eth_call对 preStateTracer 和 stateDiffTracer 的支持 - [RPC] 在
callTracer中支持withLog参数- 参考:monad-bft PR #2400
- 当
withLog设为 true 时,callTracer在 trace 输出中包含事件日志
主要性能变更
- [EVM] 数据库读写的内核缓存
- 参考:monad PR #1559
- 利用可用的主机内存缓存近期的 DB 操作 —— 该缓存 可提升执行和 RPC 的性能
- [RPC] 改进 RPC Db Node Cache 并对其进行内存限制
- 参考:monad PR #1581
- 注意 RPC CLI flag 的重命名:
--eth-call-executor-node-lru-size改为--eth-call-executor-node-lru-max-mem,同时新增 flag--triedb-node-lru-max-mem, 两者默认均为 100MB。
主要内部变更
- [Node ops] 移除
bft-fullnode二进制;现在只有bft二进制- 参考:monad-bft PR #2072
- 在
v0.11中已从deb包中移除bft-fullnode
- [Node ops] PeerDiscovery:引入对 peer self name 地址的预检查
- [Consensus] Blocksync:仅从已连接的节点中选择 blocksync peer
- [Consensus] Raptorcast:对解码状态缓存的 DoS 防护
- [Node ops] Secondary raptorcast 配置变更
- 参考:monad-bft PR #2378
- 用
enable_publisher和enable_client替代含义模糊的 secondary raptorcastmode参数
- [Node ops] 动态重新加载优先 full node
- [Node ops] 修复 wal2json
- [Node ops/RPC] 支持 RPC CLI 参数
ws-sub-per-conn-limit- 参考:monad-bft PR #2161
- 设置每个连接的最大 websocket 订阅数(默认 100)
- [Node ops/RPC] 为高 eth-call 池添加配置选项
v0.11.1
注意:v0.11.1 是仅在 testnet-2(一个于 2025-10-27 弃用的临时网络)上部署的版本,部署时间约为 2025-09-16 至 2025-10-08;然而,它将某些特性以不同方式映射到 revision MONAD_FOUR,这些映射不再保留在代码库中。testnet-2 在部署 v0.11.3 之前已重置。
在所有实际意义上,可以忽略此版本。本变更日志将 v0.11.3 与 v0.10.4 进行比较。
标签或哈希:
monad-bft: tagv0.11.1monad: hash7746980
v0.10.4
标签或哈希:
monad-bft: tagv0.10.4monad: hash39c42e6
主要 RPC/SDK 变更
- [RPC] 移除 RPC 响应中与 EIP-4844 相关的字段。
- RPC 返回的区块 header 将不再包含
blobGasUsed、excessBlobGas和parentBeaconBlockRoot。
- RPC 返回的区块 header 将不再包含
主要性能变更
- [Consensus] Vote 现在发送给当前 round 的 leader。这是一项共识优化, 可减少 round 超时导致的有效延迟
- [Consensus] 缓存最近已验证的 quorum certificate
- [Node ops] trace call 的启用现在通过
monad(execution)命令行参数--trace_calls控制。- 为保留旧行为,
--trace_calls目前在 debian 包中默认启用。将来 我们建议为验证者禁用,为 RPC 与 archive 节点启用。 - 这使投票验证者可以选择不计算 trace,因为它们仅在 RPC 节点上需要。
- 为保留旧行为,
主要内部变更
- [Consensus] 将 TC 转发给优先和公开(非 dedicated)full node
- 参考:monad-bft PR #2149
- 在
v0.10.4之前,所有 full node 在超时时都会落后于验证者, 因为由 TC 导致的 round 推进没有被转发(现在对 dedicated full node 仍然如此)。 - 因此,在超时后,full node 常常会基于过时状态将交易转发给 接下来的三个 leader。这会导致这些交易经常错过打包,后续区块也 相对为空。
- [Node ops] 修复影响 Publisher 模式验证者的 secondary raptorcast(round gap crash)bug
- [Node ops]
ledger-tail改进- 减少启动时的内存占用
author_dns字段更名为author_address,以反映 v10 地址的变更- 跟踪并记录超时和 finalization
- [Consensus] Txpool 账户预加载 bug 修复
v0.10.3
引入MONAD_THREE revision。
主要协议变更 - MONAD_THREE
- [Consensus] 共识机制从 Fast-HotStuff
升级到 MonadBFT
- 这是一次重大升级,新增了 (i) 对 tail forking 的弹性 以及 (ii) 1-slot 推测性 finality
- [Network params] 区块时间从 500 ms 减少到 400 ms
主要 RPC/SDK 变更
- [RPC] 通过 WebSocket 和共享内存队列访问,新增对
实时数据的支持(文档即将发布):
- Geth 实时事件(通过 WebSocket)
- 带 Monad 扩展的 Geth 实时事件(通过 WebSocket)
- 通过共享内存队列的实时数据,供 full node 主机上使用执行事件 SDK 的程序使用
主要性能变更
- [Execution] 切换到 JIT EVM。昂贵或频繁执行的合约字节码会 直接编译为本机代码以加快执行速度
- [Execution] 切换到使用基于文件指针的 IPC 来执行区块。此前客户端 使用 write-ahead log (WAL),没有利用可用的共识信息,可能导致本可避免的执行
主要内部变更
- [Node ops] 新增 peer discovery
- [Node ops] 新增 full node RaptorCast,使 full node 网络具备可扩展性
v0.9.3
主要 RPC/SDK 变更
- [RPC]
eth_call和eth_estimateGas上限- RPC 提供方现在可以为
eth_call和eth_estimateGas设置每笔交易的独立 最大 gas 上限- 此前该上限始终为区块 gas 上限(150M),现在 RPC 提供方可自行 选择(默认:30M)
- 通过
--eth-call-provider-gas-limit和--eth-estimate-gas-provider-gas-limit控制
- 为执行
eth_call和eth_estimateGas时的排队添加最大超时时间- 通过
--eth_call_executor_queuing_timeout控制
- 通过
- RPC 提供方现在可以为
主要性能变更
- [RPC] 通过为轻量与昂贵的
eth_call操作维护独立的队列,提升整体eth_call性能, 从而使轻量的eth_call操作不必排在昂贵操作之后。- 这引入了两个新的 RPC 错误字符串:
failure to submit eth_call to thread pool: queue size exceededfailure to execute eth_call: queuing time exceeded timeout threshold
- 这引入了两个新的 RPC 错误字符串:
- [RPC] 为
eth_getLogs添加 archive 索引,以支持带地址和/或 topic 过滤的 查询- 这使得可以高效查询更大的区块范围,工作量与匹配日志数成正比, 而不是与区间内的区块数成正比
- [Execution] 更好地限定 TrieDB 遍历范围
主要内部变更
- [Node ops] 针对缓慢 statesync 客户端 upsert 的性能改进
- [Node ops] 修复由过早软重置导致的执行延迟和 history 长度骤降 bug
- [Node ops]
keystore使用体验改进- 支持从十六进制字符串格式的私钥导入(此前需要先转换为 json 文件)
- 通过
--help命令提供更完善的文档
testnet-1 活跃集合扩展
2025-05-02,testnet-1 经历了一次活跃集合扩展
主要内部变更
- [Network params] 测试网验证者集合从 72 个节点扩展到 99 个节点
v0.9.2
主要性能变更
- [RPC] 更新
eth_call执行实现 —— 使用更少的线程达到与v0.9.1相同的 并发度
主要内部变更
- [Node ops] 支持更快的 statesync 机制
- [RPC] 节点进行 statesync 时,RPC 不再接受请求
- [Node ops] 对节点间 statesync 流量传输方式的一些可靠性和效率改进
- [Node ops] 修复执行崩溃 bug(
monad::mpt::deserialize_node_from_buffer、'Resource temporarily unavailable)
- [Node ops] 修复导致节点 OOM 失败的无界 blocksync 请求 bug
- [Node ops] 移除启动时的 DNS 解析 panic
v0.9.1
主要内部变更
- [Node ops] 修复 blocksync 错误
- [Node ops] statesync 的可靠性和效率改进
v0.9.0
引入 RevisionMONAD_TWO。
主要协议变更 - MONAD_TWO
- [EVM] 最大合约大小从 24kb 提升到 128kb
主要 RPC/SDK 变更
- [RPC]
debug_traceTransaction修复- 修复了在一笔交易中只 trace 前 100 次调用的 bug
- 在响应数据中新增
error和revertReason字段
主要性能变更
- [Consensus] Dataplane v2 —— 更简单、更高效的实现;广播时间有小幅 性能提升
- [RPC] 对
eth_call的 RPC 性能改进
- [RPC] 移除对通过 RPC 收到的原始交易的冗余 sender_recovery 操作
主要内部变更
- [Node ops] Statesync 改进,以减轻对上游验证者节点的负面性能影响
- [RPC] 在 RPC 交易验证中新增 EIP-2 签名校验
- [Node ops] 各项 tracing、logging 和 metrics 补充
- [Consensus] 在处理无效 symbol 时的 RaptorCast 性能改进
v0.8.1
引入 RevisionMONAD_ONE。
主要协议变更 - MONAD_ONE
- [Network params] 区块时间从 1s 减少到 500 ms
- [Network params] 区块 gas 上限从 300M 降低到 150M(以保持 gas 限制一致)
- [EVM] 交易按 gas limit 收费, 而不是按实际消耗的 gas 收费
主要 RPC/SDK 变更
- [RPC] 交易状态的用户体验改进。RPC 节点会跟踪提交到其上的交易状态,以便向用户提供更新。

