分叉不用换链重启:Tezos 修正案的四段投票与 80% 法定人数 图 1
分叉不用换链重启:Tezos 修正案的四段投票与 80% 法定人数 · 图 1

换协议而不是换链

大多数公链升级协议要经历硬分叉协调:客户端作者定版、社区说服节点操作员换二进制、在某个高度切换规则。Tezos 把这件事做成了协议的内建功能:按节点文档的表述,共识协议可以被”修正案”(amendment)替换——一组实现合法协议接口的实现文件整体换掉旧协议,链不重启、历史不断。引导这场替换的是一套链上投票程序,委托者按质押权重参与(文档口径:一票等于一个轮、即一份质押权益)。

四个阶段

修正程序由四类周期串成,文档明确每段为 32768 个区块、约三周,一轮完整流程大约三个月。

提案期:委托者用 proposals 操作提交协议修正案,每人最多可提交 20 条(允许重复计数)。期满时,获得最多支持的一条提案出线,进入测试投票期;如果没有提案或出现平票,重新再来一个提案期。

测试投票期:委托者用 ballot 操作对”要不要测试这条提案”投一票。期满时若参与率达到法定人数、且赞成形成超级多数,进入测试期;否则整个流程退回提案期。

测试期:协议把当前链分叉出一条测试链,运行 48 小时,验证上下文迁移(context migration)是否正确——这一步检验的不是新规则好不好用,而是旧状态搬进新协议会不会搬坏。测试结束自动进入升级投票期。

升级投票期:委托者再对”是否正式启用”投一次 ballot。参与率达标且超级多数赞成,新协议被激活为链上协议;否则同样回到提案期重来。

提案、测试投票、48小时测试链、升级投票四段周期的时间线示意

两个细节直接影响投票结果:每个周期开始时重新计算各委托者的质押权益,投票期内换票、换委托都不会改变计票基数;测试链只对”迁移正确性”负责,通过测试不等于保证新协议没有逻辑缺陷,这正是还需要第二次投票的原因。

数一下门槛

投票通过要同时满足两个数字。超级多数(super-majority):赞成票须超过(赞成+反对)的十分之八,即八成就行——弃权的票不计入分母。法定人数(quorum):参与率(含弃权票的参与度按全部应投票权益折算)必须达到当前门槛。门槛本身是个会衰减的变量:文档给出公式——新门槛等于旧门槛的五分之四加实际参与率的五分之一,初始值为 80%。设计意图很清楚:持续冷场的投票会把门槛逐级压低,防止链因委托者不投票而永久卡在旧协议上;但衰减是渐进的,想靠拖延战术放行提案,需要连续多轮低参与把数字磨下来,这段历史本身在链上可查。

这套设计换来什么、放弃什么

换来的第一是无停机:升级高度由协议自己激活,节点操作员按提示更新客户端即可,不需要全网约定分叉时刻的集体行动。第二是可预期失败:投票不达标记退回提案期,链继续正常出块,升级僵局不会变成停链事故。

放弃的一面也要看清。其一,治理权力按质押权重分配,委托集中度决定议程——委托市场里少数大委托行事实上握有出线与过会的闸门;投票参与长期偏低时,压低的法定人数门槛也会被少数活跃票通过,这是门槛衰减公式的另一面。其二,修正案由客户端实现决定,投票选择的是”实现给出的候选”,候选之外没有 ballot 选项,代码审计与形式化验证仍在链下完成。其三,48 小时测试链能验证状态迁移,验证不了真实负载下的全部行为,协议上线后仍需靠节点升级与社区监督兜底。流程参数以协议仓库文档为准。本文不构成任何投资建议。