协议演进 / BIP/比特币改进提案 / BIP-91

BIP-91 降低阈值的 Segwit MASF

不动 SegWit 本身的 BIP9 部署,而是再套一层低门槛部署:简单多数矿工先协调一致、孤立不发 SegWit 信号的区块,把既有部署顶过 95% 线。本 BIP 目前处于已激活状态。

一、档案卡

档案卡
编号BIP-91
标题Reduced threshold Segwit MASF
作者James Hilliard <[email protected]>
指定日期2017-05-22
层级Consensus (soft fork)(共识(软分叉))
类型Specification(规范类)
状态Deployed(已激活)
阅读版https://bips.dev/91
官方原文https://github.com/bitcoin/bips/blob/master/bip-0091.mediawiki

二、放在哪一族

SegWit 激活之争中的矿工激活软分叉(MASF)一族。它操作的对象是既有部署:

BIP-9:version bits 部署框架——原 SegWit 部署与本 BIP 的 segsignal 部署都跑在它上面

BIP-141、BIP-143、BIP-147:SegWit 本体三件套——本 BIP 要激活的正是它们共用的那个 bit 1 部署(2016-11-15 至 2017-11-15)

同期的其他激活方案还有:BIP-148(用户激活、强制要求信号)、BIP-149(原部署过期后的第二次部署方案)。BIP-91 的特点是只动员矿工、且不另起新部署,这使它与需要全网配合的 BIP-148 形成互补而非替代关系。更早的历史先例是 BIP-16(P2SH)的旗日激活与 IsSuperMajority 时代的强制信号做法。

三、它要解决什么

SegWit 的好处原文列得很直白:扩大区块容量、修复交易可锻性、让脚本更易升级,外加一系列其他收益。但它原本的 BIP-9 部署要求 95% 算力发信号才锁定,迟迟达不到。

能不能干脆重新部署一次?原文说在原部署过期之前很难:0.13.1 及以后的版本里,SegWit 相关的部件已经大量就位——P2P 组件、新的网络服务标志、见证交易与见证区块消息、紧凑区块 v2、优先对等连接等都在按原部署运行。重新部署意味着把这些全部重新定义,在原部署还活着时做,测试复杂度会急剧上升。

于是 BIP-91 换思路:不改部署本身,只降低“凑齐 95%”的难度——让简单多数(majority)矿工先协调起来,用孤立不合规区块的方式,把信号比例人为顶过原部署的门槛。

四、规则本身

4.1 核心规则:强制为 SegWit 发信号

本 BIP 生效期间,所有区块的 nVersion 头部高 3 位必须置为 001,并同时按既有 SegWit 部署设置 bit 1。不按此发信号的区块将被拒绝(参考实现中错误名为 bad-no-segwit)。

这正是历史上 IsSuperMajority 式部署用过的手法:软分叉激活后用强制信号确保矿工知晓新规则。此处把它反过来用——在原部署尚处于已启动(STARTED)状态时先强制信号,从而使原部署的信号统计越过其 95% 阈值而锁定,无需发布任何新部署。

参考实现中的判定条件是两个状态同时成立:segsignal 部署处于 ACTIVE,且 SegWit 部署处于 STARTED;此时每个新区块都必须带 SegWit 信号,否则连接区块时直接报错。

4.2 segsignal 部署参数

本 BIP 自身用 BIP-9 的 version bits 部署,名为 “segsignal”,占用 bit 4:

336/269 这组小窗口、低门槛参数,是“降低阈值”的具体落点:原部署需要 95%,本部署只要约八成信号、在两天多的窗口内即可转入强制阶段。

4.3 生命周期

当 SegWit(BIP-141)本身被锁定、激活或宣告失败时,本 BIP 即停止生效——它的使命只是把原部署送过线,送到即退场。

4.4 向后兼容

本部署与既有的 bit 1 SegWit 部署(2016-11-15 至 2017-11-15)完全兼容,不改动其任何参数。代价在矿工一侧:矿工必须升级到支持 segsignal 的节点,否则可能在无效区块之上继续挖矿。用户一侧,原文提醒:在本 BIP 生效期间,应升级到 segsignal,或在收款时等待更多确认。

五、谁必须动

普通持币人:无须为 SegWit 本身再做什么;但在本 BIP 生效期间收款,按原文建议,要么使用支持 segsignal 的软件,要么多等几个确认。

钱包开发者:无新格式要实现;SegWit 地址与交易的支持来自 BIP-141 等本体规范,不在本 BIP 范围内。

全节点与矿工:矿工是本 BIP 的主角——需升级节点支持 segsignal,进入强制阶段后必须按规定发 SegWit 信号,否则所挖区块会被支持本 BIP 的节点拒绝、面临被孤立的风险。

共识层:本 BIP 本身是一次软分叉式的协调机制:它新增的“区块必须发信号”是一条更严的接受规则,但只服务于激活既有部署,且随 SegWit 部署落定而自动失效;SegWit 的共识规则内容全部来自 BIP-141/143/147,本 BIP 一字未改。

六、现在算不算数,以及一个常见误读

仓库中本 BIP 的 preamble 状态为 Deployed;本站中文状态记为已激活,指其部署已实际执行并完成了推动 SegWit 锁定的历史任务。如今它与 segsignal 部署都已随 SegWit 激活而退出舞台,只剩档案意义:它是读懂 2017 年激活僵局如何被打破的关键一环。

常见误读:“BIP-91 把 SegWit 的激活门槛从 95% 改成了 80%。”

不准确。95% 那个门槛从未被修改,原部署仍是按 95% 统计信号锁定的。BIP-91 做的是在原部署外面再套一层 80% 门槛的小部署:小部署激活后强制所有区块发 SegWit 信号,信号比例被推高,原部署这才按它自己的 95% 规则锁定。改的是“怎么凑齐信号”,不是“门槛定多少”。

七、延伸

本页内容整理自 bitcoin/bips 仓库与 bips.dev,事实已与仓库核对;解读仅供学习参考。