协议演进 / 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 块,与难度重定目标同节拍。算法照原文:

即:每期变动需 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 的框架看,它把硬分叉的激活做成了逐期投票,这正是它在同组提案中最受争议的一点。

七、延伸

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