协议演进 / BIP/比特币改进提案 / BIP-100
BIP-100
废除固定的 1MB 上限,改由矿工在 coinbase 里投票、每 2016 块按 75% 超多数重算硬上限,每期涨跌不超过 5%。本 BIP 目前处于已关闭状态。
一、档案卡
| 编号 | BIP-100 |
|---|---|
| 标题 | Dynamic maximum block size by miner vote |
| 作者 | Jeff Garzik <[email protected]>、Tom Harding <[email protected]>、Dagur Valberg Johannsson <[email protected]> |
| 指定日期 | 2015-06-11 |
| 层级 | Consensus (hard fork)(共识(硬分叉)) |
| 类型 | Specification(规范类) |
| 状态 | Closed(已关闭) |
| 阅读版 | https://bips.dev/100 |
| 官方原文 | https://github.com/bitcoin/bips/blob/master/bip-0100.mediawiki |
二、放在哪一族
2015 年区块大小之争的硬分叉提案组,共五份,BIP-99 是它们的分类学序言,本篇居组首。同组分工:BIP-101(Gavin Andresen)主张按时间表自动增长——8MB 起步、每两年翻倍;BIP-102(同为 Jeff Garzik)退到最简的一次性 2MB;BIP-103(Pieter Wuille)按技术进步速率缓慢爬坡,年增 17.7%;BIP-104(Block75)按区块平均满载率自动调节。BIP-100 的独特性在于“谁决定”:它不预设任何增长曲线,把上限的决定权交给矿工逐期投票,其余四份则都把决定权交给事先写死的公式或一次性数字。BIP-101 原文也点名回应了本提案,指其实现更复杂、且“矿工直接控制上限”是优点还是缺点见仁见智。
三、它要解决什么
固定的 1,000,000 字节硬上限是静态的:链上生态长大,它不会跟着长;要改,只能再打一场硬分叉之争。原文 Motivation 的立论是:矿工直接承受上限变化的正负两面——块越大,链上生态越能生长;块越小,全网资源负担越轻——且矿工靠出块收入与整个生态相连,可充当其余参与者的高效代理(proxy)。因此与其由开发者定一个数,不如建一套确定性的投票系统,让上限随矿工的集体判断逐期演化,且在所有采用节点之间对上限的取值永不产生分歧。它与 emergent consensus(涌现共识)的区别也被点明:后者允许矿工接受任意大小的块,BIP-100 的矿工则受 75% 超多数规则与 5% 变动上限约束,并把涌现共识信号的数值也纳入计算。
四、规则本身
4.1 投票的编码
hardLimit(硬上限)初值为 1,000,000 字节。投票写在区块 coinbase 的 scriptSig 里,格式为 /BIP100/B[0-9]+/,数字单位为兆字节,例如 /BIP100/B8/ 表示主张上限 8,000,000 字节。细节照原文:coinbase 开头若按 BIP-34 编码了区块高度,忽略之;一串里只取第一个 BIP100 匹配;若无 BIP100 匹配,则取第一个涌现共识格式 /EB[0-9]+/ 作为票值。
4.2 每 2016 块重算一次
新的 hardLimit 在每个难度调整周期(2016 块)结束后计算、适用于下一个 2016 块,与难度重定目标同节拍。算法照原文:
- 缺席或零值票,一律计为投现行
hardLimit; - 把上一周期 2016 张票按兆字节值排序;
- 求涨:取第 1512 高的那张票(即 75% 分位)换算为字节,得
raise value;若它超过现行上限 ×1.05(向下取整),则钳到该值;若结果大于现行上限,它即成为新上限,重算结束; - 求降:对称地取第 1512 低的票得
lower value,若低于现行上限 ÷1.05(向下取整)则钳到该值;若小于现行上限,它即成为新上限; - 两者都不成立,上限不变。
即:每期变动需 75% 超多数支持,且幅度被锁在 ±5% 以内。
4.3 配套限制
每块签名哈希操作(sigop)上限按实际块大小缩放:以块大小向上取整到整兆字节后除以 50 计;单笔交易的序列化大小上限为 1,000,000 字节。原文另建议矿工在 coinbase 里同时公布所执行的 hardLimit(以 EB 值形式,如 /BIP100/B8/EB2.123456/ 表示投 8M、执行 2.123456M),方便外界观察。
4.4 部署
原文 Deployment 写明:推定在主网高度 449568 由实现节点部署激活;但在观察到不同于 1M 的涨值之前它不产生效果,而这需要 2016 块中至少 1512 块投出不同于 1M 的票。实现见于 Bitcoin XT 与 Bitcoin Unlimited 的相关拉取请求。
五、谁必须动
普通持币人:这是硬分叉。第一个超过 1MB 的块出现时,未升级的旧节点会拒绝它、与新网络分区(原文 Backward compatibility 原话)。持币人若自跑全节点,必须升级到支持 BIP-100 的软件才能留在新链上。
钱包开发者:SPV 类软件不直接校验块大小,但依赖的全节点若未升级,将停在旧链视图,钱包须确保所连节点已升级。
全节点与矿工:矿工须在 coinbase 中按格式投票并执行重算出的上限;节点须实现完整的计票与重算逻辑,并执行缩放后的 sigop 上限与单交易 1MB 上限。
共识层:1MB 常量被逐期计算的 hardLimit 取代,是不折不扣的共识规则变更,且上限演化路径自此取决于投票而非代码常量。
六、现在算不算数,以及一个常见误读
状态为 Closed(已关闭):提案未获采用、已经关闭。主网从未按 BIP-100 运行,1MB 上限后来是经隔离见证(SegWit)以区块权重的方式被绕开,而非由矿工投票改写。
常见误读:“BIP-100 是‘矿工想把块做多大就多大’。”不对。它恰恰给矿工套了两道确定性约束:单期变动要 75% 超多数、幅度不超过 5%,个别矿工的意愿无法直接变成上限;其设计自述与涌现共识的分界正在于此。用 BIP-99 的框架看,它把硬分叉的激活做成了逐期投票,这正是它在同组提案中最受争议的一点。
七、延伸
- 阅读版:https://bips.dev/100
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0100.mediawiki
- 相关:BIP-99 分叉分类、BIP-101 定时增长、BIP-102 一次性 2MB、BIP-103 随技术增长、BIP-104 Block75
- 仓库总目录:https://github.com/bitcoin/bips
