Skip to main content
本页面记录每个值得注意的发布版本。部分发布仅面向特定网络。
我们将变更分类为
  • 协议变更(通常需要新的 Revision)
    • 通常标记为 [EVM][Consensus][Network params]
  • RPC/SDK 行为变更(通常标记为 [RPC])
  • 性能变更
    • 根据变更的性质标记为 [EVM][Consensus][RPC]
  • 内部/节点运维变更(通常标记为 [Node ops])

v0.16.2

标签或哈希:

亮点

  • Raptorcast v1 发布 —— 节点现在在主路径和次路径上均以 v1 raptorcast 线路格式发布提案。
  • JSON-RPC 错误码修正,覆盖 eth_calleth_estimateGaseth_simulateV1debug_*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]openssl crate 升级至 0.10.81,关闭七个安全公告。仅在配置了 MongoDB 归档后端的 monad-rpc 路径上触及;monad-node 不链接该库。
  • [EVM] 每个进程为 Addressbytes32StorageKey 的哈希设置种子,使得针对节点本地映射的碰撞键无法被预先计算。
  • [EVM] 使用系统 libsecp256k1 上内置的 monad_recover_address 替换 silkpre 的 ECRECOVER 预编译。在已发布的 Docker 镜像之外新增了 libsecp256k1-dev 构建依赖。
  • [EVM] 允许 runloop_monad_ethblocks 中进行双数据库提交,其中 secondary_db 为可选。
    • 参考:从 staging-v0.16.1 cherry-pick(df14e67bb)
  • [EVM] 使用 for_each_db 统一双数据库镜像。
    • 参考:从 staging-v0.16.1 cherry-pick(d836afc18)

v0.16.1

标签或哈希:

亮点

  • 主网 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_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 的节点将无法启动。

主要健壮性变更

主要性能变更

主要内部变更

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 两种数据库

主要共识/协议变更

主要 RPC/SDK 变更

主要健壮性变更

主要内部变更

v0.15.1

标签或哈希:
  • monad-bft (consensus): tag v0.15.1 (fb3328c2e)
  • monad (execution): tag v0.15.1 (817a09f64) — unchanged from v0.15.0
v0.15.1 是基于 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 未部署给外部节点运营者。其变更已包含在本次发布中。
标签或哈希:

亮点

  • 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 变更

主要健壮性变更

  • [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-port flag 替换 --address ip:port
  • [Execution] Dual-timeline:添加辅助时间线元数据和 monad-mpt --upgrade DB 迁移工具
  • [Execution] MPT 内存序修复:通过 acquire accessor 路由 version_lower_bound_ 读取,以修复 reader 路径上的数据竞争
  • [Execution] 修复从 monad_eth_revisionevmc_revision 缺失的转换
  • [Execution]cmd/monad 中添加 --disable-sq-thread-cpu flag
  • [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

标签或哈希:

亮点

  • eth_sendRawTransactionSync 现为事件驱动 — 现在订阅来自执行事件的区块更新,响应时间最多改善 100ms。此方法现在仅在启用执行事件时受支持。启用 websockets 运行 RPC 的运营者不会有变化;没有执行事件的节点将返回 “method not supported”
  • createAccessList revert 修复 — 即使调用被 revert,eth_createAccessList 现在也会正确返回访问列表
  • 历史区块查询最多加速 2 倍 — 对历史区块的 eth_getBlockByHasheth_getBlockTransactionCountByHash 性能得到改善
  • WAL 改进 — 使用滚动分块限制 WAL 大小,在专用线程上持久化事件,仅追踪日志

主要 RPC/SDK 变更

  • [RPC] 修复:在 createAccessList revert 时返回访问列表
  • [RPC] 修复 OpenRPC 可选参数标志
  • [RPC] 为 TriedbDataSource 实现 HistoricalDataSource
  • [RPC] eth_sendRawTransactionSync 现在订阅来自执行事件的区块更新,响应时间最多改善 100ms。此方法现在仅在启用执行事件时受支持。启用 websockets 运行 RPC 的运营者不会有变化;没有执行事件的节点将返回 “method not supported”
  • [RPC] 将 RPC 事件缓冲区分离为 write 和 view
  • [RPC] 在 RPC websocket 实现中使用事件别名

主要性能变更

  • [RPC] 历史区块查询最多加速 2 倍 — eth_getBlockByHasheth_getBlockTransactionCountByHash 通过 HistoricalDataSource 重构得到改善

主要健壮性变更

主要内部变更

  • [Consensus] Deterministic raptorcast:主协议推出
  • [Consensus] Deterministic raptorcast:secondary 编码与路由基础
  • [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

标签或哈希:

亮点

  • eth_fillTransaction gas 估算修复 — 将 gas 估算行为与 eth_estimateGas 对齐,使调用者在两个端点上获得一致的估算结果

主要 RPC/SDK 变更

  • [RPC] 修复 eth_fillTransaction 的 gas 估算
    • 参考:monad-bft PR #3006
    • 之前,调用外部合约只转发 63/64 gas,导致内部帧 gas 耗尽并返回 ExecutionError。现在与 eth_estimateGas 行为一致。

主要健壮性变更

主要内部变更

  • [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

标签或哈希:

亮点

  • 认证 UDP 强制启用 — Raptorcast 现要求线路认证的 UDP 套接字;先前为可选,现对所有节点强制启用

主要健壮性变更

  • [Consensus] Raptorcast:要求认证 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 编码

主要性能变更

  • [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
  • [Consensus] Raptorcast:stake 比例的 chunk 分配器的轮询模式
    • 参考:monad-bft PR #2970
    • 为 deterministic Raptorcast 中使用的 stake 比例 chunk 分配器添加轮询分配

v0.14.2

标签或哈希:

亮点

  • debug_* 改进 — 追踪日志上新增 index 字段;eth_call 返回明确的 reserve balance violation 错误
  • 压缩热路径 8-9 倍加速 — trie 节点数组优化减少了冗余的指针重新计算
  • txpool 中转发入站的公平队列 — 改善验证者之间的交易转发公平性

主要 RPC/SDK 变更

  • [RPC] 将 callframe 检索方法移至 ChainState
  • [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_traceCalldebug_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] 精确解码转发的交易

主要性能变更

  • [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 成本计算与运行时实现分离
  • [Execution] 移除对 EVMC_FRONTIER 的支持
  • [Execution] 为 Ethereum 和 Monad 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): tag v0.14.1 (4ed79392)
  • monad (execution): tag v0.14.1 (54e132cfa) — same commit as v0.14.0
**注意:**基于 v0.14.0 的补丁发布。执行层无变化。

主要 RPC/SDK 变更

  • [RPC] 修复 eth_fillTransaction gas 估算和 reserve balance 处理
    • 参考:monad-bft PR #2949
    • 将 reserve-balance 失败映射到专用结果,而不是折叠为通用错误;通过在填充估算期间使用无上限余额的状态覆盖,使省略 gas 的填充估算更宽松
    • **注意:**余额不足的 eth_fillTransaction 现在返回 reserve balance violation(此前为 insufficient balance)。按精确错误字符串匹配的调用方应相应更新。

v0.14.0

标签或哈希:

亮点

  • RPC:receipt 查询快约 400ms — receipt 现在在 chainstate 缓冲中跟踪,并在 Proposed 时可用,消除了 v0.13.0 中增加约 400ms 的 trie 查找。
  • RPC:eth_fillTransaction — 新端点,用于获取完全填充的交易(gas、nonce 等)而无需签名。适用于钱包和准备交易的 dapp。
  • RPC:proposed 区块上的 Websocket 通知newHeadslogs 订阅现在在 proposed 区块上触发,而不是 voted,降低实时应用的通知延迟。

主要 RPC/SDK 变更

  • [RPC] eth_fillTransaction RPC 端点
    • 参考:monad-bft PR #2662, PR #2932
    • PR #2932 修复了多项不一致:在足够时保留用户提供的 maxFeePerGas,将 0x0 gas/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

主要健壮性变更

主要性能变更

主要内部变更

  • [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 的 --profile flag,从 .aws/credentials.aws/config 读取)
  • [Execution] 重构 chain:移除 static_validate_headervalidate_transaction 虚方法

v0.13.1

标签或哈希:
**注意:**这是基于 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)

标签或哈希:
**注意:**规范发布版本是 v0.13.0。monad 执行标签上的 +1 构建元数据表示这是包含 reserve balance 预编译回退成本修复(PR #2109)的发布后重建。

亮点

  • RPC:latest 区块标签:Finalized -> Proposed — 使用 latest 区块标签的查询现在返回最新 proposed 区块的数据,降低了 eth_getBalanceeth_call 和其他状态查询的查询延迟。
  • RPC:eth_sendRawTransactionSync:Voted -> Proposed — 使用 eth_sendRawTransactionSync 方法时可更早获得 receipt。
  • Websocket:newHeads/logs:Finalized -> Voted — 订阅 newHeadslogs 的 websocket 订阅者可更早收到通知。

主要协议变更

以下所有更新均由 MONAD_NINE revision 控制
**硬分叉:**本次发布在时间戳 1773153000(测试网)/ 1773930600(主网)激活 MONAD_NINE。节点必须在激活前完成升级。

主要 RPC/SDK 变更

主要健壮性变更

  • [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 中潜在的竞态条件

主要内部变更

v0.12.7

标签或哈希:

主要 RPC/SDK 变更

  • [RPC] 允许在 eth_estimateGas 中使用 block hash 作为区块标识符
  • [RPC] 对 RPC id 使用 RawValue 以保留原始 JSON 类型
    • 降低使用请求 ID 中大型 JSON 数组/字典的 DoS 攻击的有效性
    • 参考:monad-bft PR #2455

主要健壮性变更

主要内部变更

  • [Consensus]secp256k1 添加安全性测试
    • 添加 Wycheproof 测试、可塑性测试和安全性单元测试
    • 参考:monad-bft PR #2706
  • [Node ops] 更新 rkyv 及其他依赖
  • [Consensus] 在 dataplane 中同步返回绑定的套接字地址
  • [Consensus] 为清晰起见重命名 state backend 缓存

v0.12.6

标签或哈希:

主要 RPC/SDK 变更

主要健壮性变更

  • [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] MLOADMSTOREMSTORE8CALLDATALOAD 操作码的原生实现
  • [Execution] 改善 snapshot 写入性能
  • [Execution] 使用二分查找优化数据库 history 长度调整
  • [Execution] 在 AsyncIO 中统一单缓冲区和分散读取处理

主要内部变更

  • [Node ops] 针对预构建镜像的 Docker 单节点容器更新
  • [Consensus] 添加对通用 txpool sidecar 的支持
  • [EVM] Osaka fork 准备
  • [Node ops] 在 CLI 中接受 --hyphen-style 长选项
  • [Node ops / Archive] Archive 流水线改进
  • [Node ops] 简化 RPC txpool 状态跟踪
  • [Node ops] monad_cli 中的 snapshot 工具改进
  • [Node ops] 添加 RaptorCast 解码缓存指标
  • [Execution] 为执行数据库添加 CommitBuilder API
  • [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_file API
  • [Execution] 在 VM 外启用 VM 主机异常处理

v0.12.5

标签或哈希:

主要网络变更

  • [Network reset] testnet 从 genesis 重置 starting from MONAD_EIGHT
    • 将总供应量增加到 1000 亿,与 mainnet 保持一致
    • 为消除死代码(早期 testnet 所需的 revision)清理路径
    • 参考:monad PR #1983, monad-bft PR #2673

v0.12.4

标签或哈希:

主要内部变更

  • [Node ops] 修复构造 self name record 时的 peer discovery 端口配置
    • 在构造 self name record 时使用来自 peer discovery 配置的端口,而不是绑定套接字的端口。此 bug 影响使用 NAT 的节点运营者。
    • 参考:monad-bft PR #2655

v0.12.3

标签或哈希:

主要 RPC/SDK 变更

主要健壮性变更

  • [Consensus] UDP 的线路认证协议
  • [Execution] 改善 statesync 关闭并修复协议损坏
    • 修改 statesync_server_recv() 以保证完整读取
    • 参考:monad PR #1930
  • [RPC] 防止 RPC 中的 reserve balance 崩溃
  • [Consensus]txpool IPC 流添加超时
  • [Consensus] 拒绝签名者为空的 timeout certificate
  • [Consensus] 验证 RaptorCast chunk 长度非零
  • [Execution] 修复未能保留 version_lower_bound 的 MPT 恢复 bug
  • [Execution] 修复移动 trie 版本向前的 bug
    • 在向前移动到更新版本之前,擦除超出 history 范围的版本
    • 参考:monad PR #1957
  • [Execution] 修复指向 intercode 的悬空指针
    • 解决 get_coderead_code 函数的内存安全问题
    • 参考:monad PR #1941
  • [Execution]runloop_monad_ethblocks 添加重试

主要性能变更

主要内部变更

  • [RPC / Node ops] 允许 RPC 在无 monad-bft 情况下运行
  • [Node ops]monad-mpt 添加 --root-offsets-chunk-count flag 以配置为 root offsets 分配的 chunk 数量
    • 每个 chunk 可容纳约 1650 万个区块。此前,所有节点都硬编码为使用 2 个 chunk(TrieDB 最大容量约 3300 万区块)
    • 新默认值:16,必须是 2 的幂
    • 请注意,默认值 16 对应约 2.68 亿区块 ~ 1240 天。大多数情况下限制因素是磁盘容量,在填满至 80% 时会自动压缩
    • 参考:monad PR #1937
  • [Node ops] Peer discovery 改进
  • [Node ops / Archive] Archive 基础设施改进
    • 通过 --max-blocks-per-iter 配置重构 monad-block-writer 以提高可靠性
    • 异步回填,支持仅追踪的 archive
    • 添加 require-traces archiver flag 和 indexer 回退源
    • 支持历史执行事件归档以及通用目录归档
    • 可能破坏兼容性:从 monad-archiver systemd 服务中移除 --start-block;运营者必须使用命令式 CLI 来设置起始区块
      • 示例:monad-archiver set-start-block --block 1000000 --archive-sink s3://bucket-name/path
      • 使用 --async-backfill flag 设置 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] 网络配置更新
  • [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_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
  • [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-keystore key 损坏问题
    • to_blsto_secp 现在消费 secret 以防止损坏的 keystore 文件
    • 为命令行 keystore 应用添加测试,以验证所有 flag 组合都能正常工作
    • 参考:monad-bft PR #2553
  • [Execution] 修复 storage_pooltry_trim_contents() 中当 TRIM 起始字节不是磁盘 page 大小的倍数时的错误写入偏移
  • [RPC] 使用 txpool bridge channel 大小进行速率限制
    • 通过使用 channel 容量来对 eth_sendRawTransaction 进行速率限制,防止 try_send 方法失败
    • 参考:monad-bft PR #2506
  • [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_uring SQ poll 线程
    • 重要:使用 monad-execution systemctl 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-version crate,用于在二进制文件中提供 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
  • [Node ops] 在需要从 snapshot(硬重置)恢复时添加警告
    • 当本地 tip 落后 STATESYNC_BLOCK_THRESHOLD 时提示节点运营者
    • 参考:monad-bft PR #2581
  • [Node ops]monad-cruft 权限更新为 monad 用户
  • [Node ops] 修复交易替换的 txpool 指标记录
  • [RPC] 运营者可以配置 RPC worker 线程
  • [Archive] 添加 TOML 配置文件支持,取代仅 CLI 配置
    • 允许 monad-archiver 二进制使用 --config flag 进行配置
    • CLI 参数继续有效,且优先级高于配置文件值
    • 参考:monad-bft PR #2570
  • [Node ops]txgen 添加随机变异以改进测试
  • [Node ops] 添加 reserve balance 一致性测试
  • [SDK] 记录执行事件
  • [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_stateprecompiles_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

标签或哈希:

主要 RPC/SDK 变更

  • [RPC] 为以下 RPC 端点支持 prestate 和 statediff tracing:
  • [RPC] 新端点 eth_createAccessList
  • [RPC] 修复历史 trace 中 to 地址的序列化
  • [RPC]eth_call 和 RPC 查询移除人为的区块高度下限
    • 之前使用 latestsafe 区块标签的查询被限制在 finalized + 1,现在使用真实的最新 voted 区块
    • 参考:monad-bft PR #2148
  • [RPC] 修复请求包含 self-destruct 交易的调用帧的 trace 时的 RPC 错误
  • [RPC] 修复在 RPC 调用中使用状态覆盖时报告结果不一致
  • [RPC] 修复通过覆盖 staking 合约中的余额对 RPC 节点发起的可能拒绝服务攻击

主要健壮性变更

  • [Node ops/Consensus] 验证者将 statesync 服务限制在验证者和白名单 full node
  • [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.tomlvalidators.toml
    • 重要:节点现在在启动时自动尝试从远程位置下载配置文件,无需 “软重置”。此远程拉取受可配置的远程阈值约束
    • 必须设置以下环境变量以启用此行为:
      • REMOTE_FORKPOINT_URL
      • REMOTE_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_periodinvite_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-execution API 变更

v0.12.0

标签或哈希:

主要协议变更

  • [EVM/Network params] Opcode/precompile repricing
    • 操作码定价:提高冷存储访问的成本
    • 预编译定价:使少数定价过低的预编译 gas 成本更好地与相关硬件/延迟成本对齐
    • Ref: monad PR #1600 (for most of the repricings) and monad PR #1700 (for CREATE/CREATE2 repricing), monad PR #1830 (for reduced v2 scope), monad PR #1871 (activation for MONAD_SEVEN)
    • MONAD_SEVEN revision 控制
  • [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 变更

主要性能变更

主要内部变更

  • [Node ops] 本地 Monad 安装的 Docker 支持
  • [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

引入 Revision MONAD_FIVEMONAD_SIX。重新定义 Revision MONAD_NEXT testnet 部署的标签或哈希(无协议差异):

主要协议变更 - MONAD_NEXT

  • [EVM/Network params] 操作码重新定价
    • 参考:monad PR #1600(涵盖大部分 重新定价)以及 monad PR #1700(针对 通过 SSTORE 删除存储 slot
    • 提高 CREATECREATE2 的成本
    • 注意,相对于 v0.11.3,这减少了 MONAD_NEXT 上的操作码定价集合。

主要协议变更 - MONAD_SIX

主要协议变更 - 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_getBlockNumbereth_getBalance
    • 参考:monad-bft PR #2393
  • [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 进行更一致的检查

主要性能变更

  • [EVM] 在 StateDelta map 中使用 komihash
  • [EVM] JIT 编译器:仅为包含间接跳转的合约生成 jump table
  • [RPC] 使用原子序列号改善 eth call 并发性

主要内部变更

v0.11.3-tn1

引入 Revision MONAD_FOURMONAD_NEXT testnet 部署的标签或哈希(无协议差异):

主要协议变更 - 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 百分比
    • 提高 CREATECREATE2 的成本
  • [EVM] 在执行 delegated code 时禁用 CREATE 和 CREATE2

主要协议变更 - MONAD_FOUR

  • [Consensus/EVM] Staking 上线
    • (涉及多个 PR;参见 staking)
    • 活跃验证者集合现在由 staking precompile 的链上状态决定
    • 从指定的 staking_activation epoch 开始生效
    • 注意:staking 奖励要到 staking_rewards_activation epoch 才会激活 (未来的某个时间点)
    • External rewards - 允许向验证者池进行外部(非区块奖励)存款,参见 monad PR #1625
    • 还在 monad PR #1742 中为 staking precompile 增加了额外事件
    • 新增 ValidatorRewardedEpochChangedClaimRewards 事件
  • [Consensus/EVM] Reserve balance 逻辑上线
    • 参考:monad-bft PR #2160monad PR #1537
    • 由于异步执行,共识层在交易打包逻辑中没有最新状态可用。Reserve balance 是一个缓冲区, 使账户的账务计算更简单,以降低在该延迟窗口内超额消费的可能性。
    • 每个 EOA 的 reserve balance 设为 10 MON
  • [Consensus/EVM] EIP-7702 上线
  • [Network params] 设置每笔交易的 gas 上限为 30M gas
  • [Network params] 将区块 gas 上限从 150M gas (375 Mgas/s) 提高到 200M gas (500 Mgas/s)
  • [Network params] 实现动态 base fee
  • [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 变更

主要性能变更

  • [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 二进制
  • [Node ops] PeerDiscovery:引入对 peer self name 地址的预检查
  • [Consensus] Blocksync:仅从已连接的节点中选择 blocksync peer
  • [Consensus] Raptorcast:对解码状态缓存的 DoS 防护
  • [Node ops] Secondary raptorcast 配置变更
    • 参考:monad-bft PR #2378
    • enable_publisherenable_client 替代含义模糊的 secondary raptorcast mode 参数
  • [Node ops] 动态重新加载优先 full node
  • [Node ops] 修复 wal2json
  • [Node ops/RPC] 支持 RPC CLI 参数 ws-sub-per-conn-limit
  • [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.3v0.10.4 进行比较。 标签或哈希:

v0.10.4

标签或哈希:

主要 RPC/SDK 变更

  • [RPC] 移除 RPC 响应中与 EIP-4844 相关的字段。
    • RPC 返回的区块 header 将不再包含 blobGasUsedexcessBlobGasparentBeaconBlockRoot

主要性能变更

  • [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

主要 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_calleth_estimateGas 上限
    • RPC 提供方现在可以为 eth_calleth_estimateGas 设置每笔交易的独立 最大 gas 上限
      • 此前该上限始终为区块 gas 上限(150M),现在 RPC 提供方可自行 选择(默认:30M)
      • 通过 --eth-call-provider-gas-limit--eth-estimate-gas-provider-gas-limit 控制
    • 为执行 eth_calleth_estimateGas 时的排队添加最大超时时间
      • 通过 --eth_call_executor_queuing_timeout 控制

主要性能变更

  • [RPC] 通过为轻量与昂贵的 eth_call 操作维护独立的队列,提升整体 eth_call 性能, 从而使轻量的 eth_call 操作不必排在昂贵操作之后。
    • 这引入了两个新的 RPC 错误字符串:
      • failure to submit eth_call to thread pool: queue size exceeded
      • failure to execute eth_call: queuing time exceeded timeout threshold
  • [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

引入 Revision MONAD_TWO

主要协议变更 - MONAD_TWO

  • [EVM] 最大合约大小从 24kb 提升到 128kb

主要 RPC/SDK 变更

  • [RPC] debug_traceTransaction 修复
    • 修复了在一笔交易中只 trace 前 100 次调用的 bug
    • 在响应数据中新增 errorrevertReason 字段

主要性能变更

  • [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

引入 Revision MONAD_ONE

主要协议变更 - MONAD_ONE

  • [Network params] 区块时间从 1s 减少到 500 ms
  • [Network params] 区块 gas 上限从 300M 降低到 150M(以保持 gas 限制一致)
  • [EVM] 交易按 gas limit 收费, 而不是按实际消耗的 gas 收费

主要 RPC/SDK 变更

  • [RPC] 交易状态的用户体验改进。RPC 节点会跟踪提交到其上的交易状态,以便向用户提供更新。