Block Size War 指围绕比特币容量与规则变更的一系列争论。2017年的三个重要结果是 SegWit 激活、Bitcoin Cash 分离,以及原定 SegWit2x 分叉被暂停。三者的原因和技术过程各不相同。
设想两种日常需求。安娜想发送比特币,不愿等很久,也不愿付很高的手续费。帕维尔运行着一个全节点,也就是自行检查区块和交易的计算机。他希望不用昂贵设备也能验证自己的钱。两种需求都有道理,但每个区块装入更多数据,也意味着要传输和验证更多数据。Block Size War 争论的正是这个平衡。 区块是一批交易,网络将它们加入共同的付款历史记录。 安娜和帕维尔是说明问题的虚构人物。2015年至2017年的实际讨论涉及开发者、矿业运营者、交易所、钱包服务商和用户。分歧不仅在容量,也在于怎样安全实施变更。比特币没有一位能选定方案、命令所有人切换的总经理。 [1] [11] [13]
SegWit 之前,规则把区块大小限制为 1 MB,即 1 000 000 字节。这不是固定的付款笔数,因为不同交易占用的空间不同。新区块平均大约每十分钟出现一次。当空间需求超过容量时,矿工通常优先选择手续费率较高的交易,其他交易继续等待。 大区块支持者希望直接扩充基础网络,让付款保持便宜。反对者则担心网络连接、计算机性能和区块快速传播的要求。如果能自行验证的人变少,更多用户就得信任外部服务。提高上限本身不会加快出块,也不保证手续费永远低廉;需求和空间的实际使用情况同样重要。 [1] [2] [13]
开发者可以编写新软件,矿工可以按它生成区块。但 Full Node 的运营者自行选择节点要检查的规则。即便掌握大多数算力,也不能迫使未修改的节点接受违反其规则的区块。算力帮助节点在有效链之间选择,并不能把无效区块变成有效区块。 这不等于每个节点在全球投票中各有一票,也不意味着一个人能阻止其他人离开。企业决定接受什么,矿工决定挖什么,用户决定认可什么价值。互不兼容的规则可能产生两个网络。因此,行业协议能推动变更,却不能自动改写所有人的软件和决定。 [11] [12]
各项提案以 BIP(Bitcoin Improvement Proposal,比特币改进提案)的形式记录。BIP 用来说明提案,供他人审查和讨论。获得编号并不代表网络已经采纳。 Gavin Andresen 在 BIP 101 中提议把上限提高到 8 MB,此后按预定时间表增长。方案规定了大约每两年翻倍的安排和激活条件。Mike Hearn 与 Andresen 推动 Bitcoin XT,这款替代软件提供了这一方向。不过,发布程序并不等于整个网络已经改变规则。 旧节点会拒绝超过原有限制的区块。这属于 Hard Fork:扩大允许的区块集合,接收者需要采用不同规则。争论因而不再只是增加多少空间,还包括谁会切换、怎样协调,以及相当一部分参与者不同意时怎么办。 [1] [18] [13]
Eric Lombrozo、Johnson Lau 和 Pieter Wuille 在 BIP 141 中描述了另一条路径。SegWit 重新组织交易数据,引入区块权重,上限为 4 000 000 weight units。名为 witness 的部分主要包含验证支出授权所需的数据。这些数据没有消失,也没有停止验证,只是在权重计算中受到不同处理。实际容量取决于交易构成,并非简单允许普通的四兆字节区块。 权重规定了数据如何计入区块上限:每字节基础数据计为 4 个单位,每字节额外的 witness 相关数据计为 1 个单位。因此,字节大小相同的交易也可能占用不同的权重。网络容量还取决于人们使用哪类交易。 对于适用的交易,SegWit 还消除了通过改变签名数据来改变交易标识符的可能性,方便了 Lightning Network 所依赖的支付通道。它被设计为 Soft Fork:新规则下的有效区块仍符合旧规则,但旧节点不会检查所有新限制。Bitcoin Core 0.13.1 带来了激活机制;软件发布本身并没有开启 SegWit。 [2] [3]
2017年5月23日,Digital Currency Group 公布了企业与矿工之间的 New York Agreement。协议把支持 SegWit 与六个月内实施 2 MB Hard Fork 的承诺结合起来。第二步被称为 SegWit2x,由 btc1 项目实现。部分参与者认为这是可以接受的折中:双方各自得到部分诉求。 另一些人反对第二项变更,也反对这种推动方式。企业表态不自动代表所有客户同意。Bitcoin Core 后来明确指出,btc1 不是其软件的强制更新,支持 SegWit 也不代表支持 SegWit2x。阅读当年的报道时,要记住同一协议里的两项变更仍然是两项不同的规则变更。 [6] [7] [11]
化名 Shaolin Fry 的作者提出 BIP 148,一种 UASF,即由用户激活的 Soft Fork。按 Median Time Past,从2017年8月1日起,执行该规则的节点将拒绝不发出 SegWit 支持信号的区块,除非 SegWit 已锁定激活或已经生效。如果挖矿与区块接收出现分歧,网络可能分裂。这不是所有用户一起操作的无风险开关。 Median Time Past 是将最近 11 个区块的时间戳排序后,位于中间的值,并非每位用户时钟显示的时间。这里的信号是区块头中的标记,用来表达矿工对该部署的支持;标记本身不会启用新规则。 James Hilliard 在 BIP 91 中描述了门槛较低的矿工协调:336个区块中达到269个,约80%。机制生效后,参与者将拒绝没有为原有 SegWit 部署发出信号的区块。7月的协调降低了8月期限附近发生冲突的危险,但并不意味着 SegWit 本身已在7月锁定或激活。它仍须经过自己的 BIP 9 机制。 [4] [5] [9] [19]
Bitcoin Cash 于2017年8月1日分离。Bitcoin ABC 软件在这一分支支持更大的区块,当时默认上限为 8 MB。分离之后,两个网络有不同的规则和各自的币。分离前共享历史,并不意味着后来的付款可以在 BTC 与 BCH 之间自由转移。 Bitcoin Cash 不是 SegWit2x,Bitcoin ABC 也不是 btc1。混淆名称,会把8月的分离和后来暂停的另一项计划混为一谈。它们在 replay protection 上也有区别,即如何防止交易在另一条链上被重复执行。对用户而言,这意味着在一个分支操作不应意外花掉另一个分支的资金。把共用私钥输入任何声称能领取新币的工具,也并不安全。 [8] [15] [11]
2017年8月9日,SegWit 从区块 479 808 起进入 LOCKED_IN 状态。这表示决策周期已完成,但执行新规则前还要等待一个周期。它在8月24日从区块 481 824 起激活。两个高度相差 2 016 个区块。因此,7月的 BIP 91 协调、8月的锁定和实际激活不是同一个事件。 剩下的是 SegWit2x 承诺的第二步,计划高度为 494 784。11月8日,以 Mike Belshe 为首的组织者宣布暂停,理由是未能形成足以顺利过渡的共识。这既没有撤销已经激活的 SegWit,也没有让独立的 Bitcoin Cash 消失。终止的是这次试图把企业和矿工的支持转化为比特币容量上限变更的具体计划。 [9] [10] [12] [14] [16] [17]
这场争论表明,比特币可以改变,但编写代码、收集企业签名和让规则被接受,是不同的事情。它没有证明开发者毫无影响、矿工无关紧要,也没有证明以后的决定都会得到相同结果。容量、可负担的验证和参与者共识,不能靠给更新换个名字就解决。 看到新提案时,先问它具体改变什么、哪些节点会因此产生分歧、如何激活。再区分提案文本、已发布的软件和真正生效的规则。当时的 BIP 与代码可以说明机制,各方声明可以说明其立场。任何参与者的一份声明,本身都不等于整段历史的中立叙述。 [1] [6] [11] [12]
要获得更完整的理解,请将本词条与以下词条结合阅读: SegWit, Soft Fork, Hard Fork, Full Node, Bitcoin, 共识规则. 反向关联还来自: Soft Fork, Hard Fork, Block Weight, Jeff Garzik.