Cosmos Hub 停摆 25 小时背后:一条公链为何会停止出块

Cosmos Hub 停摆 25 小时背后:一条公链为何会停止出块

N
News Editor
2026-09-29 12:30:00
Cosmos Hub 在 9 月 22 日因超过三分之一 voting power 的验证人停止运行而停在区块高度 33,086,740,约 25 小时后恢复。事件起点并非 Hub 本身,而是 Neutron 治理提案被攻击者利用,部分资产随后流入 Hub。Cosmos Labs 此后协调验证人安装 Gaia v28.3.0,在区块 33,086,741 执行一次性状态修改,将攻击者地址中剩余的 1,227,121 ATOM 转入 4-of-6 多签地址。整起事件把 BFT 共识中的 Safety、Liveness 与链上治理、社会协调之间的边界直接摆到了台前。

9 月 22 日晚,一名用户发出了一笔 ATOM 转账。

Cosmos Hub 停摆 25 小时背后:一条公链为何会停止出块 2

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

对普通用户来说,这次事件把一个平时藏在底层的问题直接摆到了眼前:公链没有一个中心化的「关机按钮」,不代表它不会停。

一条足够去中心化的区块链,通常确实不存在某家公司在机房里按下开关就能让网络停摆的场景。但它仍可能因为共识参与者无法继续形成一致,而停止向前运行。Cosmos Hub 这次暂停,正好把这套机制完整暴露了出来。

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 停摆 25 小时背后:一条公链为何会停止出块 3

这一步很关键。它说明 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。

问题也随之出现:既然是一条去中心化公链,为什么超过三分之一的验证权就能让它停下来,而恢复网络又需要足够多验证人共同接受并运行同一套软件?答案就在「共识」本身。

共识不是「永远不会停」

区块链最容易被误解的一点,是把「去中心化」直接等同于「永不宕机」。

共识机制真正解决的问题,是在没有中央记账人的情况下,许多节点如何对交易顺序和账本状态达成一致。不同公链采用的方法并不相同。

Cosmos Hub 停摆 25 小时背后:一条公链为何会停止出块 4

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

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

但这也不意味着 Bitcoin 的状态在任何情况下都绝对无法修改。理论上,如果整个生态接受一套新的客户端和新的共识规则,通过 Hard Fork,同样可以让过去规则下无效的状态变化变成有效。问题在于,谁能让足够多的矿工、Full Node、交易平台、钱包和用户一起接受这套新规则。这个门槛极高。开发团队不能替整个 Bitcoin 网络决定共识规则,矿工和交易平台也很难做到。当初币安被盗 7000 枚 BTC 时,就有人建议 CZ 联系大矿工操作,最后并未成行。

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

当代表至少三分之二质押 ETH 的验证者对相应 checkpoint 达成一致,区块才能进一步走向最终确定。反过来,如果超过三分之一的 stake 长时间不参与正确投票,网络就可能暂时无法形成 Finality。不过,以太坊还设计了 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 使用的则是 CometBFT,更接近典型的 BFT 共识。一个区块要真正提交,需要获得超过三分之二 voting power 的 Commit。它的好处是 Finality 很明确,一旦区块经过足够验证权投票提交,就不需要像 PoW 那样继续等待更多区块,用概率换取安全感。

但另一面也很直接:如果三分之一或以上的 voting power 不再提供形成 Commit 所需的投票,剩余验证人无论如何也凑不出超过三分之二。这时,网络最安全的选择就是暂停出块。换句话说,一群掌握足够 voting power 的验证人停止参与之后,共识协议会按照自己的规则,宁可失去可用性,也不在缺乏足够共识的情况下确认新区块。

这背后对应的是分布式系统里两个经常被混在一起的概念:

Cosmos Hub 停摆 25 小时背后:一条公链为何会停止出块 5

  • 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 执行特殊状态修改,把相关 ETH 转入恢复合约。但并不是所有人都认同这种处置。拒绝接受状态修改的一部分矿工和社区继续维护原来的规则,后来形成了长期存在的 Ethereum Classic(ETC)。这件事说明,极端事件发生时,代码共识之外还存在社会共识;如果无法形成足够一致的意见,一条链确实可能分成两条。

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

把这些事故放在一起看,它们并不是同一回事:

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

与其把这些事件简单归结为「区块链原来也能关机」或「去中心化都是假的」,不如承认一个更接近现实的事实:共识机制从来不是一台不会坏的机器。它提供的是一套去中心化规则,用来回答分歧出现时谁来决定正确的链、多少参与者才能让一个状态获得最终性、故障发生时网络是继续运行还是停止,以及在极端情况下,什么样的集体行动能够改变接下来的运行规则。

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

这次 Cosmos 事件留下的,不只是「该不该停链」的争论。

Cosmos Hub 停摆 25 小时背后:一条公链为何会停止出块 6

我们经常说,not your keys, not your coins。这句话依旧成立,但它强调的是资产控制权:只要私钥在自己手里,钱包、交易平台或其他第三方不能替你正常签署一笔转账。

前提是,你所在的区块链在那个时刻有能力处理这笔签名。

Cosmos Hub 停止出块的那一天,用户依然持有自己的私钥,资产也没有因此凭空消失。只是,即便你正确签署了一笔交易,也没有新的区块可以接收它。恢复过程又说明,如果足够多的共识参与者接受一套新的状态规则,特定账户的链上状态也可能在没有原地址私钥签名的情况下发生变化。

这不会让「Not your keys, not your coins」失效,但它提醒用户,私钥自主权和底层共识权,从来不是同一件事。

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

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

一个成熟的去中心化系统真正需要说明白的,可能从来不是「任何东西绝对不能改」,而是这些边界本身:谁能够让共识暂停,需要多大的权重,什么情况下允许紧急干预。

真正的去中心化,不是保证系统永远不会遇到事故,而是在事故发生时,外界仍然能看清是谁、依据什么规则、以多大的共识,决定这本账接下来该怎么记。

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

免责声明:

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

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