比特币的软分叉怎么”投票”?现行答案是 BIP9:区块头 nVersion 里划出一批信号比特,过去 2016 块里有 95% 的块点亮某位,就锁定进入宽限期,到期自动生效。这套机器在隔离见证时代立过功,也把缺点暴露得很彻底:95% 是写死的,所有部署共用一个窗口与节奏,想表达”争议大的升级该有更高的门槛”没有余地,少数派还能靠不齐点亮把流程拖到超时。BIP-135(署名 Sancho Panza,2017 年 3 月立项,Informational 类型,状态 Closed)是对这套机器的泛化改写:每个比特自己带门槛、自己带窗口、自己带宽限期,还能同时为软分叉与硬分叉服务。
结构上它保留了 BIP9 的全部骨架:五态状态机——DEFINED、STARTED、LOCKED_IN、ACTIVE、FAILED;用中位时间 past 判断 starttime 和 timeout;信号位沿用 BIP9 的同一区间——nVersion 的低 29 位(0 到 28),块版本高 3 位必须固定为 001(即版本值落在 0x20000000 到 0x3FFFFFFF 区间),否则全部信号位按零处理。改动集中在一组按链、按部署配置的参数上。name 与 bit 照旧;starttime、timeout 照旧;新增四件——windowsize 替代固定的 2016,声明计票窗口长度;threshold 给出锁定所需的块数(1 到 windowsize 之间),把”比率”翻译成”绝对数”,高门槛低门槛随策略而定;minlockedblocks 与 minlockedtime 定义锁定后的最短宽限期,两者都满足才进 ACTIVE。测票节奏从”难度调整点”改为”高度能被 windowsize 整除的点”,节奏与算力波动解耦。
动机部分把政治含义写得比技术还多。固定 95% 的潜台词是”近乎全体一致”,在共识极化的议题上等于给缺席者一票否决,提案原话是”小规模少数派可以否决提案,导致不健康的停滞”;泛化 threshold 就是想拉开一条”争议度光谱”——无争议的小改进可以 80% 快车道,动利益格局的大改可以 90% 以上配长宽限期。信息分叉(informational fork,只加规则不废规则)也被纳入同一个状态机,这解释了 Type 标 Informational 的用意:它不是某个升级的激活参数表,而是升级激活参数的语法书。
它为什么 Closed?时机是主因。2017-2018 年扩容论战的创伤让”把投票规则改得更能容纳硬分叉”显得格外敏感,社区主流共识反而收紧:软分叉继续用 BIP9,重大变更宁可走”信号都不打、直接协调激活”(Taproot 后期实践即是如此)。后来真正的机制演化发生在另一侧:BIP8 给条件激活加了”到点自动锁定/自动失败”的开关,BIP90 把早已激活的部署埋成高度常数——都是在”少动员、少悬念”方向上加零件,而不是重设投票参数。今天 BIP-135 的价值退居两处:读它当 BIP9 的对照实验报告,理解窗口、阈值、宽限期三者的正交关系;以及在别的链设计激活机制时,它仍是被引用最多的模板之一。
常见误区有三。其一,以为 BIP-135 已在比特币主网使用:从未,主网激活史里只有 BIP9 与 BIP8 类参数。其二,以为 threshold 是百分比:它是块数,配 windowsize 用,写 95% 要换算成窗口内块数。其三,以为提高门槛就能逼矿工就范:门槛改的是锁定条件,改变不了矿上抵制与分叉风险,机制参数不是治理良方。
快速问答。问:一个区块能同时给几个部署投票?答:只要用的比特不同,一个版本字段可以同时点亮多个位,互不干扰。问:谁改这些参数?答:客户端实现内置各部署的参数表,参数变更本身是一次协调的社会决定,不是链上投票。
把参数表翻译成使用场景会更直观。设想一次只收紧脚本规则的小修正:windowsize 照旧 2016、threshold 照旧写 1916,行为与 BIP9 完全重合——这正是”向后兼容通过参数配置实现”的含义,把老参数代进新机器,输出老结果。设想一次希望慢启动的观察型部署:把 starttime 拉远、windowsize 放大、threshold 设得比九成高一点,锁定前会出现好几个计票周期供社区观察信号曲线。设想一次需要给反对者留退路的争议部署:minlockedtime 给足几十天,锁定不等于生效,交易所和钱包有时间挂维护公告。四格参数像调音台推子,同一首曲子可以调出快车道或慢动作——但音准本身(升级值不值得做)不在调音台上,这也是读懂这份提案后最该带走的一句提醒。
风险提示:本文是升级机制科普,不构成投资建议;任何升级争议期注意区分协议规则与短期市场噪音。

发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。