协议演进 / BIP/比特币改进提案 / BIP-91
BIP-91
不动 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:
- 开始时间:2017 年 6 月 1 日午夜(epoch 1496275200);
- 超时时间:2017 年 11 月 15 日午夜(epoch 1510704000,与原 SegWit 部署同日到期);
- 确认窗口被覆盖为 336 个区块(约 2.33 天);
- 激活阈值被覆盖为 269 个区块,即窗口的 80%(原文注:该比例可按意愿调整)。
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% 规则锁定。改的是“怎么凑齐信号”,不是“门槛定多少”。
