根据 Sui 基金会发布的事后分析报告,在 1.72 版本更新后,网络暴露出在 gas 费用收取和验证节点重启逻辑方面的极端案例,导致 Sui 主网在 5 月 28 日至 29 日期间经历了三次独立的中断。基金会表示,相关问题已经解决,网络活动已恢复,并且“用户资金没有风险”。
事件始于 5 月 28 日星期四,Sui 主网在太平洋时间上午 7 点左右中断,直到大约下午 1:30 才恢复。第二次中断发生在周五早上,从太平洋时间约凌晨 5 点开始,到上午 8:30 左右结束。第三次中断始于周五下午约 1:30 PT,并在太平洋时间晚上 7:20 左右得到解决。
据基金会称,前两次中断源于涉及 gas 费用收取逻辑与 Sui 1.72 升级之间交互的崩溃漏洞,该升级引入了地址余额功能。第三次中断是独立的,发生在一次预定的 epoch 更换期间,验证节点的重启暴露了在如何保存随机数状态方面的一个潜在漏洞。
“在中断期间,用户资金没有风险,网络恢复时也未回滚任何已确认的交易,” Sui 基金会表示。“截至目前,验证节点已完全解决了由最初的 gas 费用收取漏洞和随机数状态漏洞所引起的已知问题,网络活动已恢复。”
Sui Gas 费用收取漏洞引发初始中断
第一个问题集中在 Sui 的新地址余额功能上,该功能允许用户存储资金并支付 gas 费用,而无需仅依赖代币对象。Sui 上的交易可以通过地址余额、代币对象或两者结合的混合结构来支付 gas 费用。
极端案例出现在那条混合 gas 支付路径中。当一笔交易试图从一个地址余额中支出,但该余额不足以支付竞争交易时,调度器会正确地以 InsufficientFundsForWithdraw 错误将其取消。但随后,在 gas 合并过程中(即把输入代币合并成一个用于支付 gas 的单一代币),同一笔预留资金可能仍然会尝试再次扣款。
根据基金会的解释,崩溃并非直接发生在 gas 合并期间,而是发生在结算时,即一笔系统交易在处理余额变动时。将负的变动应用于零余额导致了数据下溢。
立即的修复在概念上很直接:当一个交易因 InsufficientFundsForWithdraw 被取消时,避免进行 gas 合并。验证节点在周四采用了该修复措施,使网络重新上线。但基金会承认,这个补丁只是一个临时措施,是为了恢复网络而选择的,同时工程师们正在开发更完整的解决方案。
“更改 gas 费用逻辑是一项精细的操作,”基金会写道。“如上所述,地址余额和代币之间存在复杂的交互作用。除了修复漏洞外,gas 逻辑的更改必须保留所有先前行为,或使用适当的版本门控。”
这个临时补丁包含一个已知的弱点。如果一个交易有多个取消原因,另一个错误可能会掩盖 InsufficientFundsForWithdraw 条件。当这种情况在周五早上发生时,原始的导致下溢的路径仍然可能被触发,从而造成第二次中断。
Epoch 更换暴露随机数状态漏洞
第三次中断发生在周五上午网络恢复正常运行之后。在下一个预定的 epoch 更换时,验证节点未能完成切换,原因是一个与 Sui 的分布式密钥生成协议相关的漏洞,该协议为依赖于链上随机数的交易提供初始随机数。
在之前的重启周期中,参与度不足以进行下一个 epoch 的 DKG 过程,因此按照设计,随机数功能被禁用。问题在于,这次失败的结论没有被写入磁盘。当验证节点再次重启时,它们恢复后没有记住 DKG 已经失败。
“由于验证节点不再记得 DKG 已经失败,两者都无法发生,暂停的队列不断增长,而必须在关闭前清空该队列的 epoch 结束逻辑,就只能一直等待那个永远不会到来的 DKG,” 基金会说。
修复分为两部分:将 DKG 状态在重启之间持久化,并增加一种机制,允许验证节点在协调一致的时间点强制关闭卡住的 epoch。该机制曾被使用一次,关闭了受影响的 epoch,之后网络进入了下一个 epoch,随机数功能得以恢复。
这份事后分析报告将此次中断视为 Sui 面临的一个更广泛的工程教训。基金会表示,epoch 结束时的网络恢复能力需要进一步投入,特别是在优雅降级和操作性强制关闭机制方面。它还表示,考虑到 gas 费用收取与结算、守恒性检查和调度器的交互作用,它应该得到与 Move VM 或 Mysticeti 共识机制同等程度的严谨对待。
截至发稿时,SUI 的交易价格为 0.8798 美元。








