Cosmos Hub 停摆 25 小时:一次停链如何暴露公链共识边界

Cosmos Hub 停摆 25 小时:一次停链如何暴露公链共识边界

N
News Editor
2026-10-01 23:33:54
9 月 22 日,Cosmos Hub 在区块高度 33,086,740 停止出块,约 25 小时后恢复。文章指出,直接遭攻击的是 Neutron,攻击者借治理提案取得链级权限并转移部分资产,其中约 170 万枚 ATOM 流入 Cosmos Hub。随后部分验证人停机,超过三分之一 voting power 退出共识,网络失去继续出块能力。恢复阶段,验证人接受 Gaia v28.3.0 补丁,在指定高度将攻击者地址中 1,227,121 ATOM 转入 4-of-6 多签地址。

9 月 22 日晚,一名用户发出了一笔 ATOM 转账。一夜过去,这笔交易仍停留在「等待确认」。私钥没有丢,钱包签名也没有异常。第二天再看,多个公开 RPC 都显示 Cosmos Hub 停在区块高度 33,086,740,没有新区块产生,这笔转账自然也无法被打包。直到大约一天后,Cosmos Hub 恢复出块,这笔 ATOM 转账才最终完成。

这次停摆把一条公链在共识层的运行方式,直接摆到了普通用户面前。通常人们会说,没有任何中心机构可以关掉一条公链;但现实并不只是有没有一个「关机按钮」这么简单。即便没有某家公司能直接暂停网络,一条足够去中心化的公链仍可能停止运行。

Neutron 事件如何把 Cosmos Hub 卷入停链

文中指出,这次被直接攻击的并不是 Cosmos Hub,而是 Neutron。

9 月 22 日,一项名为「AIATO: AI Agent Takeover」的 Neutron 治理提案获得通过。攻击者利用链级治理权限的空子,借助 wasmd 框架原生提供的特权指令,把 Astroport、Drop 等应用的合约管理员改成了攻击者控制的地址。

这不是通常意义上的代码漏洞或协议缺陷。按文中的比喻,应用本身有自己的「门锁」,但 Neutron 的链级治理手里还握着一把权限更高的「总钥匙」。一旦攻击者控制治理结果,就等于拿到了这把钥匙,可以重新指定管理员、迁移合约,并继续转移其中资产。

真正让 Cosmos Hub 被卷入的,是后续的跨链资金转移。根据 Cosmos Labs 的复盘,在 Neutron 停止运行前,攻击者已把部分资产转向多个网络,其中大约 170 万枚 ATOM 被转入 Cosmos Hub,并开始通过跨链流动性进行兑换。

这意味着,Cosmos Hub 本身没有遭到直接攻击,普通 Hub 用户资金也不是因为 Neutron 的问题被直接盗走。但攻击所得的 ATOM 已经进入 Hub。为了阻止剩余 ATOM 继续流出,一部分 Cosmos Hub 验证人开始停止节点运行。

到 9 月 22 日 19:18 左右(SGT),停止运行的验证人已代表超过三分之一的总 voting power。Cosmos Hub 因此无法继续形成新区块,最终停在 33,086,740。

这里的关键在于,Cosmos Hub 并不存在某家公司可以直接点击的「Pause」按钮,也没有先经过一次链上治理投票。真正让网络停下来的,是足够多的验证人不再参与形成共识。

网络如何恢复:补丁、状态修改与多签托管

停链大约 4 个小时后,验证者收到了一份完整的恢复方案:针对停链高度执行一次性的状态修改,把攻击者地址中剩余的 ATOM 转入由社区验证者共同管理的多签地址。

随后,Cosmos Labs 根据验证者已经达成的方案制作 Gaia v28.3.0 补丁,完成测试后分发给验证者。这版 Gaia 会在指定恢复高度执行一次性的状态变化,把攻击者地址中的 1,227,121 ATOM 转入一个 4-of-6 多签地址。该多签由 Nansen、Keplr、Enigma、Silknodes、Kiln 和 Polkachu 六方组成。

到 9 月 23 日凌晨,确认安装 v28.3.0 的验证者已超过总 voting power 的 67%。因此在当天 12:00 UTC,Cosmos Hub 协调重启。约 6 分钟后,这次一次性状态修改在区块高度 33,086,741 执行,网络恢复正常出块。

从停止出块到恢复运行,整个过程可以概括为:验证者先让网络失去 Liveness,再由超过三分之二 voting power 接受一套新的状态转换规则,最终让这套规则成为恢复后的 canonical state。

为什么超过三分之一验证权就能让链停下来

文章认为,答案就在「共识」本身。区块链最容易被误解的一点,是把「去中心化」和「永不宕机」画上等号。实际上,共识机制要解决的问题,是在没有中央记账人的情况下,让许多节点对交易顺序和账本状态达成一致。

不同公链实现这一点的方法并不相同。

Bitcoin:概率最终性而非明确终局

Bitcoin 最经典的是 PoW,也就是工作量证明。矿工依靠算力竞争出块;当网络短时间出现两条合法分支时,节点按照累计工作量选择其中一条继续构建。

因此,Bitcoin 并不存在一个明确的「67% 投票后这个区块永远 Finalized」时刻,它更接近概率最终性。后续区块越多,想重新组织前面的交易,就需要付出越高的算力成本。这也是为什么一笔 Bitcoin 交易通常被建议等待 6 个区块确认。

文中也提到,这并不意味着 Bitcoin 的状态在任何情况下都绝对无法修改。理论上,如果整个生态接受一套新的客户端和新的共识规则,通过 Hard Fork,同样可以让过去规则下无效的状态变化变成有效。

但问题在于,谁有能力让足够多的矿工、Full Node、交易平台、钱包和用户一起接受这样一套新规则。文中给出的判断是,几乎没有。开发团队不能替整个 Bitcoin 网络决定共识规则,矿工和交易平台也很难做到这一点。文章还提到,当初币安被盗 7000 枚 BTC 时,曾有人建议 CZ 联系大矿工操作,最终不了了之。

Ethereum:Finality 与 inactivity leak

以太坊在转向 PoS 后,使用 Casper FFG 与 LMD-GHOST 共同组成的 Gasper 共识。按文中的解释,一部分机制负责判断当前应该跟随哪条链,另一部分则负责让区块获得真正意义上的 Finality。

当代表至少三分之二质押 ETH 的验证者对相应 checkpoint 达成一致,区块才能进一步走向最终确定。反过来,如果超过三分之一的 stake 长时间不参与正确投票,网络就可能暂时无法形成 Finality。不过,Ethereum 还设计了 inactivity leak,在长时间无法 finalizing 时逐步降低离线验证者的有效权重,让网络最终有机会重新恢复 Finality。

文中认为,想真正改变这种结果,同样需要改变协议规则和客户端。2016 年 The DAO 事件就是典型案例。以太坊社区最终通过 Hard Fork,在区块 1,920,000 执行了一次 Ethereum Foundation 当时直接称为 irregular state change 的特殊状态修改,把相关 ETH 转入恢复合约。

但拒绝升级、继续维护原有状态的一部分矿工和社区,最终形成了 Ethereum Classic(ETC)。ETH 与 ETC 的分叉说明,并不是所有人都接受同一套规则。

Cosmos Hub:BFT 共识下的 Safety 与 Liveness

Cosmos Hub 使用 CometBFT,更接近典型的 BFT 共识。一个区块要真正提交,需要获得超过三分之二 voting power 的 Commit。

它的优势是 Finality 非常明确。一旦区块经过足够验证权投票提交,就不需要像 PoW 那样继续等待更多区块,用概率换取安全感。另一面也同样直接:如果三分之一或以上 voting power 不再提供形成 Commit 所需的投票,剩余验证人无论怎样努力,也无法凑出超过三分之二。

在这种情况下,网络最安全的选择,就是像这次一样暂停出块。按文中的说法,从分布式系统角度看,这次 Cosmos Hub 的短暂停摆并不神秘:一群掌握足够 voting power 的验证人停止参与后,共识协议会按照自己的规则,宁愿失去可用性,也不在缺乏足够共识的情况下确认新区块。

这背后对应的是两个常被混在一起的概念:

  • Safety:不能让不同节点同时确认两个彼此冲突的最终状态;
  • Liveness:网络还能不能持续向前运行、处理新的交易。

对于 BFT 系统来说,当参与共识的节点不足时,暂停有时正是维护 Safety 所付出的代价。换句话说,这本去中心化账本宁可先停在那里,也不能让剩下的人各记各的。

从 Bitcoin、Ethereum 到 Solana:不同事故背后的同一问题

文章随后把这次 Cosmos 事件放回更长的公链历史中比较。

2013 年,Bitcoin 曾发生一次经典链分叉事故。Bitcoin 0.8 把底层数据库从 Berkeley DB 切换到 LevelDB。随后,一个包含大量交易输入的区块出现,新版节点能够正常处理,但部分旧版节点由于 Berkeley DB 锁数量限制,将该区块判断为无效。

结果是,运行的都是 Bitcoin,但新旧客户端开始对「这个区块是否合法」给出不同答案,网络分裂成两条链。而且新版 0.8 一侧一度拥有大约 60% 的算力,无法依靠正常的算力竞争快速自行收敛。最终,大型矿池经过协调切回旧版本,在旧规则一侧重新获得更多算力,网络才重新收敛。Bitcoin 后来也以 BIP 50 对这次事故进行了复盘。

2016 年,以太坊的 The DAO 事件又把问题推进了一步。正如前文所述,以太坊社区通过 Hard Fork,在区块 1,920,000 执行了一次被 Ethereum Foundation 明确称作 irregular state change 的特殊状态修改,把相关 ETH 转入恢复合约。

但并不是所有人都认同这种处置。拒绝接受状态修改的一部分矿工和社区继续维护原来的规则,后来形成了长期存在的 Ethereum Classic(ETC)。这次 DAO Fork 说明,当极端事件发生时,代码共识之外还存在社会共识;如果无法形成足够一致的意见,一条链确实可能分成两条。

2021 年的 Solana,则展示了另一种故障路径。文中提到,当年 9 月,大量机器人交易涌入网络,引发验证节点内存耗尽,大量节点崩溃,最终整个网络无法对当前状态形成一致意见,停止确认新区块约 17 个小时,随后验证人共同协调恢复网络。

把这些事故放在一起看,文章给出的区分是:

  • Bitcoin 2013 年的问题,是不同客户端开始执行不同的有效性规则;
  • Solana 2021 年的问题,是大量验证节点无法继续正常参与共识,网络失去 Liveness;
  • Ethereum DAO 面对的,更接近社区是否应该通过新的协议规则主动修改状态;
  • 而这一次 Cosmos Hub,则是网络先通过验证人协调主动失去 Liveness,阻止攻击资产继续移动,之后再由足够高比例的验证权共同接受新的软件与恢复状态,让网络重新形成一致。

因此,文章认为,与其把这些事件简单归结为「区块链原来也能关机」或「去中心化都是假的」,不如承认一个更直接的事实:共识机制不是一台不会坏的机器,它提供的是一套去中心化规则。

这些规则决定了:发生分歧时谁来决定正确的链;多少参与者才能让一个状态获得最终性;出现故障时网络选择继续运行还是停止;以及在极端情况下,什么样的集体行动能够改变接下来的运行规则。

私钥控制权,不等于底层共识控制权

文章最后把讨论落回到用户最熟悉的一句话:not your keys, not your coins。

这句话依旧成立,但它强调的是资产控制权。只要私钥在自己手里,钱包、交易平台或其他第三方不能替你正常签署一笔转账。前提是,你所在的区块链在当时有能力处理这笔签名。

Cosmos Hub 停止出块的那一天,用户依然持有自己的私钥,资产也没有因此凭空消失。只是即便你正确签署了一笔交易,也没有新的区块可以接受它。

恢复过程又说明,如果足够多的共识参与者接受一套新的状态规则,特定账户的链上状态也可能在没有原地址私钥签名的情况下发生变化。文中认为,这并不会让「Not your keys, not your coins」失效,但它提醒人们,私钥自主权和底层共识权,从来不是同一件事情。

对于钱包也是一样。钱包可以确保私钥和签名权掌握在用户自己手中,可以尽快识别链级异常、准确展示交易状态、建立 RPC 与节点冗余,并在网络恢复后重新确认交易最终结果。

但钱包不能替一条公链恢复共识,也无法保证底层网络永远不会中断,更无法保证链上的规则和状态永远不会发生共识层面的变化。

文章最后提出,一个成熟的去中心化系统真正需要追求的,可能不是「任何东西绝对不能改」,而是尽可能把边界说清楚:谁能够让共识暂停,需要多大的权重,什么情况下允许紧急干预。因为真正重要的,不是系统永远不出事故,而是在事故发生时,外界仍然知道是谁、依据什么规则、以多大的共识,决定这本账接下来该怎么记。

本文最初由 Bit.Fan 发布。 欲了解更多加密货币新闻与市场洞察,请访问 www.bit.fan.
200

免责声明:

本平台展示的市场信息、项目资料与第三方内容仅用于行业信息分享,不构成任何形式的投资建议或收益承诺。

加密资产交易具有较高风险,用户应充分评估自身风险承受能力并独立作出决策,相关盈亏及法律责任由用户自行承担。