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

BIP-105 基于共识的区块大小重定目标算法

让矿工在 coinbase 中投票调整区块大小上限,投增票须付出更高难度代价,每 2016 个区块按票数中位数重定上限,且不得低于 1MB、高于 8MB。本 BIP 目前处于已关闭状态。

一、档案卡

档案卡
编号BIP-105
标题Consensus based block size retargeting algorithm
作者BtcDrak <[email protected]>
指定日期2015-08-21
层级Consensus (hard fork)(共识(硬分叉))
类型Specification(规范类)
状态Closed(已关闭)
阅读版https://bips.dev/105
官方原文https://github.com/bitcoin/bips/blob/master/bip-0105.mediawiki

二、放在哪一族

2015 年区块大小之争中的“动态上限”一族。它和同期几份提案回答同一个问题——1MB 上限要不要动、由谁动:

BIP-100:由矿工投票决定动态区块上限——BIP-105 正是针对这类“免费投票”写出的修正方案

BIP-101:按预定时间表直接提高上限

BIP-106:按上一周期的实际块大小(与手续费)自动调控上限

BIP-107:先按时间表扩容、再转入按交易量动态上调

BIP-105 的特色是把投票做成“有代价的投票”:想把上限投大,先要多做工作量证明。它借用的记账位置来自 BIP-34(coinbase 中先压入区块高度)。

同族后来的 BIP-109 则放弃动态机制,回到一次性改数字。这一族最终都没有成为主网共识规则。

三、它要解决什么

3.1 固定时间表预测不了未来

原文担心:一旦比特币突然走红,交易量暴增,而协调一次硬分叉耗时很长,网络来不及响应会损害比特币的可信度。

反过来,预先排定的扩容表同样有问题——它在预测未来。若步子迈得太大,可能在区块补贴大幅下降的接下来九年里妨碍手续费市场形成、引入或放大矿工攻击向量,或以未知方式影响网络;而固定改动一旦部署又难以收回,损害可能很大。

3.2 免费投票可以被操纵

原文直接批评 BIP-100 式的自由投票:矿工可以在带外(off-band)出售选票而毫无风险,提案的发起方也能借此操纵区块大小;大矿池还能零成本地投票,用操纵上限的方式打压或攻击小矿池。

动态调整本身也有被算力大者操纵(gamed)的风险。BIP-105 要解决的核心,就是怎样让“调大”这件事变得有成本、难合谋乱投。

四、规则本身

4.1 投票方式

4.2 增票要付难度代价

设计理由是:给“增大”定价,矿工群体就只会在确有必要时才合谋增容;用难度作惩罚,比用固定比特币金额作成本更不可预测。

4.3 每 2016 块重定一次

4.4 全节点保留最终控制

原文强调,协议层必须设硬顶,是为了让全节点保留对共识的控制——全节点正是约束矿工诚实运行的机制,不能让矿工对区块大小有完全控制权。

五、谁必须动

普通持币人:无直接操作。若此方案激活,变化体现在网络能打包的区块大小上,钱包地址与交易格式不变。

钱包开发者:原文未要求钱包作专门适配;影响主要在节点与矿工一侧。

全节点与矿工:这是硬分叉级的共识改动。全节点须按新规则计算每 2016 块的上限并拒绝超限区块、校验选票对应的难度目标;矿工须按新格式在 coinbase 中写入选票,并为增票承担更高难度。

共识层:区块大小上限由固定常数变为由投票中位数周期性重定的变量,并新增“选票—难度”挂钩的区块有效性条件。不升级的节点会与新规则链分叉。

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

状态为 Closed(已关闭)。它没有在比特币主网激活,1MB 上限后来也不是靠这套机制改变的。读它是为了理解 2015 年扩容争论中的一条思路:不信任免费表态,只信任付出了工作量证明代价的表态。

常见误读:

“BIP-105 是矿工投票决定区块大小,和 BIP-100 一样。”

不完全对。两者都用矿工投票,但 BIP-105 恰恰是为反对 BIP-100 的免费投票而写:增票必须达到按增幅放大的难度目标,降票则免费;最后取的也不是多数票,而是 2016 块选票的中位数,且结果被锁在 1MB–8MB 区间内。

七、延伸

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