协议演进 / 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 投票方式
- 初始区块大小上限为 1MB。
- 矿工每出一块,可投票把区块大小上限提高或降低,最多为当前上限的 10%。
- 选票写在区块 coinbase 交易的 scriptSig 中:按 BIP-34,scriptSig 以压入区块高度开头,紧接着的下一次压入是一个小端序数字,表示该矿工偏好的区块大小(单位为字节)。原文给的例子是 2MB 与 10MB 的编码写法。
- 投当前大小,即表示投“不变”。
4.2 增票要付难度代价
- 若矿工投票提高上限,该区块的哈希必须达到一个按其所投增幅比例放大的难度目标——投得越大,难度要求越高。
- 若投票降低上限,则不需要达到更高的难度目标;反对增大的算力可以零成本投降票。
- 区块哈希若未达到其选票所要求的难度目标,该区块无效、将被拒绝。
设计理由是:给“增大”定价,矿工群体就只会在确有必要时才合谋增容;用难度作惩罚,比用固定比特币金额作成本更不可预测。
4.3 每 2016 块重定一次
- 每 2016 个区块,用过去 2016 个区块中全部选票的中位数重新计算区块大小上限,作为接下来 2016 个区块的上限。
- 超过计算出的基础上限的区块无效、将被拒绝。
- 基础上限不得低于 1MB,也不得高于 8MB。原文同时注明:上限的具体数字(8MB)还需要进一步讨论。
4.4 全节点保留最终控制
原文强调,协议层必须设硬顶,是为了让全节点保留对共识的控制——全节点正是约束矿工诚实运行的机制,不能让矿工对区块大小有完全控制权。
五、谁必须动
普通持币人:无直接操作。若此方案激活,变化体现在网络能打包的区块大小上,钱包地址与交易格式不变。
钱包开发者:原文未要求钱包作专门适配;影响主要在节点与矿工一侧。
全节点与矿工:这是硬分叉级的共识改动。全节点须按新规则计算每 2016 块的上限并拒绝超限区块、校验选票对应的难度目标;矿工须按新格式在 coinbase 中写入选票,并为增票承担更高难度。
共识层:区块大小上限由固定常数变为由投票中位数周期性重定的变量,并新增“选票—难度”挂钩的区块有效性条件。不升级的节点会与新规则链分叉。
六、现在算不算数,以及一个常见误读
状态为 Closed(已关闭)。它没有在比特币主网激活,1MB 上限后来也不是靠这套机制改变的。读它是为了理解 2015 年扩容争论中的一条思路:不信任免费表态,只信任付出了工作量证明代价的表态。
常见误读:
“BIP-105 是矿工投票决定区块大小,和 BIP-100 一样。”
不完全对。两者都用矿工投票,但 BIP-105 恰恰是为反对 BIP-100 的免费投票而写:增票必须达到按增幅放大的难度目标,降票则免费;最后取的也不是多数票,而是 2016 块选票的中位数,且结果被锁在 1MB–8MB 区间内。
七、延伸
- 阅读版:https://bips.dev/105
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0105.mediawiki
- 相关:BIP-34 coinbase 高度、BIP-100 矿工投票动态上限、BIP-101 提高区块大小上限、BIP-106 动态调控上限、BIP-107 动态区块大小上限
- 仓库总目录:https://github.com/bitcoin/bips
