协议演进 / BIP/比特币改进提案 / BIP-104
BIP-104
仿难度调整:每 2016 块按前一周期区块平均满载率重算上限,目标把区块维持在 75% 满,让上限自动随交易量涨落。本 BIP 目前处于已关闭状态。
一、档案卡
| 编号 | BIP-104 |
|---|---|
| 标题 | 'Block75' - Max block size like difficulty |
| 作者 | t.khan <[email protected]> |
| 指定日期 | 2017-01-13 |
| 层级 | Consensus (hard fork)(共识(硬分叉)) |
| 类型 | Specification(规范类) |
| 状态 | Closed(已关闭) |
| 阅读版 | https://bips.dev/104 |
| 官方原文 | https://github.com/bitcoin/bips/blob/master/bip-0104.mediawiki |
二、放在哪一族
2015 年区块大小之争的硬分叉提案组,分类背景见 BIP-99;本篇定稿最晚(2017 年 1 月),是对这场争论的一个收尾式回答。它与同组的关系,正好构成“上限由谁决定”的完整光谱:BIP-100 交给矿工在 coinbase 里投票;BIP-101 交给预先写定的日历曲线;BIP-102 只给一个一次性数字;BIP-103 交给假定的技术增速。 BIP-104 的答案是:谁都不交——仿照难度调整,让上限成为对链上实际用量的自动响应。它在“考虑过的其他方案”里逐一点名否决了写死数字(2MB、8MB 等迟早重蹈覆辙)与矿工投票(复杂、政治化、人为介入使响应迟缓、权力集中于少数人),与 BIP-100 构成组内最直接的一组对照。
三、它要解决什么
原文 Motivation:区块已经太满,无法支撑交易量的进一步增长;SegWit 与 Lightning 等链下方案有帮助,但解决不了这个问题。比特币需要一种合理有效、可预知的上限管理办法:允许适度增长、让上限尽量小、并防止交易费的大起大落。论证的支点是难度调整——约每两周一次、全自动的难度重定目标已被证明合理有效且可预知,原因恰在于无人参与(除最初定下十分钟一个块的目标外),因而不政治、不惹争议,只是对网络资源变化的响应。原文由此推出结论:人同样不应参与最大块大小的决定;Block75 的目标,就是把上限管理做成与难度同构的永久性自动机制,目标值是让区块平均保持 75% 满。
四、规则本身
4.1 重算公式
上限每 2016 块(与难度同一节拍)重算一次,公式照原文:
new max block size = x + (x * (AVERAGE_CAPACITY - TARGET_CAPACITY))
其中:TARGET_CAPACITY = 0.75(目标满载率);AVERAGE_CAPACITY 为前 2016 块的平均满载百分比(以小数表示);x 为现行最大块大小。举例说,若上一周期平均满载 100%,新上限即放大 25%;平均只有 50%,则收缩 25%。所有生成、校验区块或引用现行硬编码上限的代码,都须改为支持 Block75 的动态值。
4.2 参数依据
为何选 75%,原文给四条:它位于“太挤”(平均 100% 满)与“太大”(平均 50% 满)之间;可吸收最多 33% 的短期交易量尖峰;使每期上限增幅被限制在 25% 以内;能把平均交易费维持在与 2016 年 5/6 月相近的稳定水平。为何选 2016 块周期,原文给三条:难度调整已证明该周期对网络资源变化的适应性良好;频繁而渐进的调整便于矿工与节点运营者预判,未预见的后果能提前显现;且任一恶意方操纵上限的空间被最小化。原文还强调,该算法对 SegWit、Lightning 带来的交易量变化同样响应,从而稳定平均交易费、给矿工与商家以收支确定性。
4.3 激活
原文 Activation:为降低硬分叉风险并防止单个较小矿池阻挠采用,激活发生在下一个难度调整点,前提是此前最近 1,000 块中有 900 块信号支持,且此后经过 4,032 块(约一个月)的宽限期。
五、谁必须动
普通持币人:这是硬分叉且不向后兼容,原文写明:任何全量校验区块的代码都须在激活前升级,否则将拒绝超过现行 1MB 上限的块。自跑节点者无一例外。
钱包开发者:钱包若引用现行硬编码的块上限(如估算、构造逻辑中写死 1MB),须改为读取动态上限;引用上限的代码面比一次性扩容更大,这是原文特别点出的一条。
全节点与矿工:节点每个难度周期都要按前 2016 块的平均满载率重算并执行新上限;矿工还须在信号期出块表态(1,000 块中 900 块)以触发激活时间表。
共识层:上限从常量变为链上数据的函数,且可涨可跌——块变小同样不需要任何人批准。这是组内唯一“按需求自动双向调节”的设计,也是它与 BIP-103 只按时间单向爬坡的根本区别。
六、现在算不算数,以及一个常见误读
状态为 Closed(已关闭):提案未获采用、已经关闭。它的 900/1,000 信号加 4,032 块宽限的激活流程从未在主网走完;至此,2015 年这组五份区块大小硬分叉提案(BIP-100 至 BIP-104)全部以关闭告终,主网最终走的是 SegWit 的软分叉路线。
常见误读:“Block75 是矿工投票决定块大小的又一版本。”恰恰相反。它是组内对矿工投票最明确的反对者:原文把投票方案列入“考虑过并否决”,理由是复杂、政治化、集权且使手续费不可预知;Block75 要的是连投票环节也一并自动化,用平均满载率这一个链上可观测量替代一切人为裁量。用 BIP-99 的框架看,它试图把最具争议的硬分叉议题,改造成难度调整式的无争议自动机制——这一思路本身,比它的具体公式更值得记住。
七、延伸
- 阅读版:https://bips.dev/104
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0104.mediawiki
- 相关:BIP-99 分叉分类、BIP-100 矿工投票、BIP-101 定时增长、BIP-102 一次性 2MB、BIP-103 随技术增长
- 仓库总目录:https://github.com/bitcoin/bips
