测试网第一阶段回顾:我们在主网之前发现的漏洞

以太维的第一个测试网 ethwei-testnet-1 运行了大约五周——从 2026 年 6 月 29 日到 8 月 4 日——最终高度达到 621,526 个区块,出块时间约为 5 秒,全程没有出现任何计划外的停机。最终供应量收于 6,999,827,484 ETE。
这个正常运行时间的数字其实并不是这篇文章的重点。任何人都可以让一条链运行五周而不崩溃。更有意义的问题是:当你真正按照预期方式去使用它时,究竟会暴露出什么问题——以及你是选择现在、在测试网上发现这些问题,还是等到以后、在主网上、在真金白银押上的时候才发现。
我们发现了四个真实存在的问题。这四个问题都已修复。以下是详情。
已被验证的内容
在讲述具体暴露了哪些问题之前,有必要先说清楚这次测试网实际验证了什么:
- 固定发行的权益证明经济模型在五周内持续运行且没有出现偏差,测试的是第一阶段的代币经济学:70 亿创世供应量、100 亿硬顶、每年固定发行 1 亿枚 ETE(约每区块 15.84 枚),排期为 30 年,社区税率为 0%——所有质押奖励全部归质押者所有,没有任何截留。
- 多验证人共识——第二个验证人 CyphCube-2 从第 0 个区块起加入这条正在运行的链,同步了约 138,000 个区块,随后被安全地下线并移除。
- 端到端治理——共提交了 6 项提案,全部 6 项均通过,相应的参数变更均在链上自动执行,无需任何人工干预。
- 惩罚(slashing)、监禁(jailing)与代币销毁都得到了实证验证,而不仅仅是纸面上的推演(详见下文)。
- 完整的公开技术栈均正常运行——HTTPS RPC/API、品牌化的区块浏览器、Keplr 钱包集成。
- 基础设施的分离是刻意为之的——验证人机器只运行节点本身。浏览器、文档,以及本站,全部单独托管。
以上是基线情况。以下才是真正重要的部分。
一、治理绕过漏洞(高严重性)
以太维测试网最初强制执行两条自定义治理规则:只有验证人可以提交提案,且"强烈反对(NoWithVeto)“投票选项被禁用。
一次安全审查发现,这两条限制都可以被完全绕过——分别通过 Cosmos 的旧版治理 API 和加权投票(weighted votes)实现,二者都不受该自定义规则约束。这并非纸上谈兵,而是在实际运行的测试网上被确认可利用,随后被修复。
在经过实战检验的框架上强行叠加自定义规则,正是那种表面看起来没问题、直到有人真正检查接缝处才会发现漏洞的东西。
二、随之而来的决定
修复方式并非打补丁。以太维彻底移除了其自定义治理代码,回归到未经修改的、标准的 Cosmos 治理机制——垃圾提案的遏制方式也改为标准做法:通过提案押金(proposal deposit)实现经济层面的威慑,而不是自定义权限检查。
自定义治理的攻击面从"两条可被绕过的规则"直接归零,因为已经没有任何自定义逻辑可供绕过。永远打补丁、维护一套脆弱的自定义规则,是更"聪明"的选项;彻底移除它,则是更简单的选项。我们选择了更简单的那个。
三、供应上限本可能被突破(高严重性)
发行模块使用一个内部计数器来追踪已铸造的数量。而这个计数器在创世状态导出/导入(genesis export/import)过程中并未被保留——而这正是许多链升级所依赖的机制。
一次升级本可能悄无声息地重置该计数器,并从零开始重新铸造整个质押储备,从而在没有任何一笔交易看起来"异常"的情况下,突破 100 亿枚的硬顶。修复方式是不再信任这个计数器:现在的上限是针对链上实际供应量强制执行的,因此无论内部计数器认为发生了什么,上限都能保持有效。
四、惩罚事故(最值得讲述的故事)
当 CyphCube-2 被下线时,它离线了——仅仅约 4 分钟的离线时间后,就被监禁并被惩罚了 1%——即 10,020,000 枚 ETE,按比例影响了该验证人名下的每一位委托人。
调查发现,这背后的原因比一个"漏洞"更简单:以太维当时运行的是 Cosmos SDK 的原始默认惩罚参数——100 个区块的签名窗口(约 4 分钟的宽限期),配合 1% 的离线惩罚。在主网环境下,这样的配置意味着一次例行的服务器重启,或一次缓慢的软件升级——并非攻击,只是正常运维操作——就会导致该验证人名下的每一位委托人都被惩罚。
修复分为两部分。首先,签名窗口从 100 个区块扩大到 10,000 个区块,离线惩罚从 1% 降至 0.01%。随后,经过进一步审查,这一策略再次被放宽,向 Cosmos Hub 自身的设置看齐——窗口内只需 5% 的区块被签名即可——宽限期从约 4 分钟延长到约 13 小时。
双重签名(double-sign)的惩罚比例保持 5% 不变。离线是意外,双重签名是攻击。二者不应受到相同的惩罚,现在也确实不会了。
一个附带验证供应量真实性的时刻
那次惩罚事件,同时也让我们得以验证一件说起来容易、证明起来却更难的事情:被销毁的 ETE 确实是被摧毁了,而不是被重新分配给了任何人。
总供应量恰好减少了 10,020,000 枚 ETE——与这次惩罚数额精确对应,分毫不差。正因如此,这次测试网结束时的 ETE 存量,实际上比开始时更少:在这五周内,累计销毁量超过了发行所铸造的全部数量。没有任何人从惩罚中获利,价值只是单纯地离开了系统。
得到验证的设计选择
在这五周的使用过程中,还有几项架构决策经受住了考验:
- 不接入 IBC,不使用跨链桥。 这是刻意为之的独立性选择,也少了一类需要担心的攻击面。
- 十六个精简模块,从标准模块集中移除了五个(
nft、group、authz、feegrant、mint)——出于同样的理由,减少攻击面。 - 发行参数被硬编码,而非可由治理调整,因此无论治理投票的结果如何,都无法使供应量超出代码中已固定的数值。
- 社区税率为 0%。 所有质押奖励,全部归质押者所有,没有例外。
坦诚面对这次测试网的局限
这是一次受控的测试网运行,而非一次压力测试,有必要坦诚地说明二者的区别。它并不包括外部第三方验证人、真实用户或真实价值的押注、大规模的对抗性环境,也没有经过独立的专业安全审计。这些仍然是主网上线前的必要前提——这篇回顾文章无法替代其中任何一项。
接下来:第二阶段
第二阶段将在一个全新的测试网上运行,采用经过修订的代币经济学,围绕"公平启动"这一原则构建,而非大规模预挖。
创世供应量将从最大供应量的 70% 降至 10%——即 10 亿枚 ETE——其余 90%(90 亿枚 ETE)将由参与者通过质押、在 30 年内以固定的每年 3 亿枚 ETE 的速度逐步赚取。最大供应量仍保持 100 亿枚不变。
理由很直接:无论围绕代币经济学如何包装,将总供应量的 70% 预先铸造到单一地址,都是一个薄弱的"公平启动"叙事。让 90% 的供应量通过参与来赚取,而不是在其他人尚未加入之前就预先分配完毕,更贴近以太维真正立足的原则。
无聊而简单的区块链,才是好的区块链——但无聊不代表未经测试。它意味着足够充分、足够提前地进行测试,以至于在真正重要的时刻,不会发生任何"有趣"的事情。
