大区块相关的提案包办了近两年比特币的最大争议。从 Segwit2x 到 BCH,再到 BCH ABC 和 SV,都有自己的路径偏好。那么,大区块实验未来会走向何处?它会一统江湖?还是共存共荣?还是 layer2 胜出?每个人都有自己的答案,不同的道路都有自己的铁粉,有自己的坚信,有自己的社区,最终来说,所有胜利的喜悦或失败的苦涩都来自于当初自己的选择,来自自己的认知,以及伴随而来的,曾经坚信的那个东西。也许不用太多年,就可以看出端倪。这是一个争议极大的问题,大家怎么看呢?

作者:Lucas Nuzzi
翻译:Leo

在比特币十年的历史中,提升区块大小的相关提议有很多。即使这些提议都没被采纳,关于区块大小的辩论依然是最具争议、最具分裂性、最让人心累的问题之一。如今,BCH 创建一年多,还有围绕 ABC/SV 的分叉冲突,权衡利弊也日益清楚。

本文会提供增加区块大小的历史背景。随着时间的推移,它有显著支持者,此外这个持续的问题引发两次分叉。之后,我通过分析 BCH 的历史及它采用的技术来对这些提案提出不同意见。最后,我提出这个论点:在没有区块奖励之时,有限的区块空间对维持比特币安全模型和奥派经济学的货币基础至关重要。下面先简单介绍历史背景:

第一次区块大战

产生区块大小争议的一个促成因素是在比特币的第一次迭代中,区块没有明确限制。中本聪通过一系列的隐藏提交,于 2010 年 9 月增加了比特币 1MB 的上限,该隐藏提交引入 MAX_BLOCK_SIZE 变量。

在此之前,区块在技术上有大约 500-750kb 的软顶限制。鉴于当时交易量小且其他功能优先级更高,区块大小并不是比特币早期历史上的争议话题。然而,随着越来越多的开发者加入,同时开始考虑比特币大规模采用面临的技术挑战,从这时起,关于扩展性的讨论不时出现。

在中本聪推出 1MB 区块大小限制不到一个月,第一个增加区块大小的提议出现了。2010 年 10 月,比特币最早期的开发者之一 Jeff Garzik 提出把区块大小增加 7 倍(7MB)的建议。大多数早期技术实施提案在成为正式的比特币改进提案(BIP)之前,一般会先在 BitcoinTalk.org 上发帖。

在这个帖子上,Garzik 认为「比特币应该至少能达到 Paypal 的平均交易率」,并把它作为建议提出的理由。中本聪是最早回复该帖子的人之一,他警告 Garzik 不要实施该扩容提案,因为「它会让你跟网络不相容,对你无益。」

后来的讨论显示,中本聪并不完全反对扩容。然而,当提及潜在实施时,他暗示这种变化必须逐步推出。在一篇短文中,他表示,当旧的比特币客户端在网络中成为少数时,区块扩容可看作是「未来版本」,从而阻止分叉。

两个月后,中本聪在 BitcoinTalk.org 上发表最后一篇帖子后消失。鉴于客户端层面要完成的工作量,开发者们在接下来的几年主要把精力放在安全性和可靠性,大区块的潜在实施并不是当时的优先要务。

三年后,也即是在 2013 年,当丝绸之路和 Satoshi Dice 等服务让链上交易增加时,可扩展性的话题再次浮出水面。正当关于可扩展方案的辩论被重新点燃时,丝绸之路的关闭以及紧接着门头沟事件的爆发让大区块提议没有进入正式提案。

比特币价格崩溃,2014 一整年都处于熊市。尽管如此,链上交易的数量还是几乎翻了一倍,这导致交易费用的增加。到 2015 年初,交易量达到当时的历史最高水平,区块大小的争议再次成为人们关注的焦点。然而,这次并没有像之前一样「昙花一现」,它在接下来的三年一直都是焦点。

2015 年 7 月,Jeff Garzik 提出 BIP100 的提案,提出由矿工投票的动态最大区块大小的方案,这是第一个关于大区块的比特币改进提案。除了增加区块大小之外,正如 Garzik 在 2010 年初的提议,BIP 提出可调整的区块大小,范围从 1MB 到 32MB 之间,由矿工投票动态确定。

在该系统下,矿工使用区块头在预定时间间隔内对区块大小的增减进行投票。75% 的绝大多数矿工投票才能扩容,并且每次扩容不能超过前一区块的 5% 大小。在接下来的几个月,BIP100 受到社区内重要成员的高度重视,他们认为,考虑到区块大小的范围很大,交易费用的波动会导致比特币价格的更大波动,甚至会出现网络攻击的可能性,原因是频繁的哈希率流入和流出。

BIP 提案的评论者中有一位是 Gavin Andresen,中本聪精心挑选的继任者,他希望区块变化是可预测的,他反对给予矿工更大的权力。他也提出了自己的提案 BIP101,该提案希望通过算法把区块增加至 8MB,计划每两年增加一倍。随着各种竞争提案的权衡变得清晰,比特币社区陷入严重分歧。

由此产生了三种相互竞争的利益集团,直至今日依然存在。1)矿工极端主义者,他们希望矿工能够根据需要增加区块大小 2)业务极端主义者,他们关心技术的扩展性 3)硬分叉最小主义者,他们反对任何货币政策的改变。

不出所料,当时大部分哈希率表示支持 Garzik 的 BIP100,而大多数比特币业务公司支持 Andresen 的 BIP101。两个派别之间还有用户和开发者社区,他们中的大多数认为硬分叉不是一个好主意。一些开发者开始强调,增加区块大小只是临时解决方案,其他解决方案是大规模采用的方法,比如支付通道和侧链。比特币有单线程特性,即所有交易必须由所有节点进行规范验证,这种情况下不可避免地出现延迟,尤其是作为大规模交换媒介的情况,即使出现千兆字节的区块也如此。

社区反对硬分叉。Gavin Andresen 与另外一位知名的比特币开发者 Mike Hearn 对 Bitcoin Core 开发者们反对 BIP101 感到沮丧。两人都在开发 Bitcoin Core 客户端的可替代客户端,叫 Bitcoin XT,Bitcoin XT 客户端已经激活了 BIP101。

局势变得紧张,很明显,硬分叉的可能性已经出现,两个竞争性网络随时都会成为选择。2015 年 11 月,当 Mike Hearn 指责 Blockstream 时,紧张局势进一步升级。Blockstream 由不少 Bitcoin Core 开发者们创建,它意在反对区块扩容,推出自己的侧链解决方案。

对 BIP101 的反对历经了几个月,到 2015 年底,该提案几乎无法实施。尽管如此,Andresen 和 Hearn 依然在推动 Bitcoin XT 客户端的采用,Bitcoin XT 带有 BIP101。2015 年 12 月,在 XT 客户端发布后几个月,它的网络遭受了大规模 DDoS 攻击,可能是 BIP 的对手设计实施。这种无休止的攻击阻碍了 XT 节点长达数周的通信,这有效地杀死了网络。

2016 年 1 月,Hearn 发布了「比特币实验解决方案」一文,并宣称比特币已经死亡,因为它没能接受大区块。本文的标题名称有模仿 Hearn 的这篇文章,因为我坚信采用更大的区块(通过 BIP101 或其他方法),可能会破坏比特币的长期价值主张。

第二次区块大战

具有讽刺意味的是,在距离 Hearn 离职和 Bitcoin XT 解散一年还不到,让人心累的区块大小争议又重新出现。这次出来的是隔离见证方案,它可以在不增加区块大小情况下实现效率提升,同时它还可以作为 Layer 2 解决方案的必需路径,因为它还可解决交易延展性的问题。然而,它的方案激活面临阻力,这是来自于上一次区块大战中被遗忘的派别:支持 BIP100 的矿工们。

这些矿工试图跟 Bitcoin Core 开发者们达成妥协,并在 2016 年 2 月举行会议。在会上,矿工们表示如果区块大小增加到 2MB,他们才会激活 Segwit。该协议后来被称为「香港协议」。这次会谈被记录为「比特币圆桌会议共识」,这是在 2016 全年都广受讨论的话题。风暴正在酝酿,困扰比特币开发近三年的基础争议又回来了。不幸的是,这个争论再次分裂社区,让人们远离比特币。

在 2017 年 5 月共识大会期间,举行了一次闭门会议,会议权衡比特币矿工和商用企业对 SegWit 的立场。跟 2016 年香港协议一样,他们要求激活 SegWit 并把区块大小增加到 2MB,即所谓的「纽约协议」。截止到 2017 年 5 月底,只有不到 20% 的矿工表示他们会在不增加区块大小情况下接受 Segwit。2MB 版本的 SegWit 后来以「SegWit2x」而著称,它的区块高度受到绝大多数比特币商业企业和 80% 以上的网络哈希率支持。

与此同时,一些大区块支持者开始活动以拒绝 SegWit。他们的非官方领袖是 Bitcoin.com 的 CEO Roger Ver,他能够吸引一些 SegWit2x 的重要支持者,如 Bitmain,以支持完全拒绝 SegWit 的硬分叉。为此,Ver 支持比特币的替代客户端 Bitcoin ABC (可调整区块大小上限),同时宣布硬分叉,他们称之为 Bitcoin Cash。其他替代的实施,比如 Bitcoin Unlimited,紧随其后,硬分叉迫在眉睫。同年,Bitcoin XT 也复活,并激活对更大区块的支持。

比特币现金(BCH)的诞生

2017 年 8 月 1 日,Bitcoin Cash 分叉了比特币。它的实施有一个变化是难度重新调整,导致分叉后的哈希率下降。它的算法被称为 EDA (紧急难度调整),顾名思义,它在分叉后立即调整比特币现金的挖矿难度。考虑到分叉后只有少数矿工分配哈希算力到 BCH,同时依然是每隔 10 分钟左右出块,所以这种调整是非常有必要的。不出所料,EDA 成功地重新调整了难度,第一个 BCH 区块由 ViaBCT 在比特币区块 478558 后 6 个小时挖出。

在 8 月份,像 Antpool、F2Pool 以及 BTC.COM 开始支持 BCH。在此期间,BCH 的价格和它的哈希率波动都很大,分叉后只有很少的交易所立即上市了 BCH 交易。跟 Gavin Andresen 的 BIP101 一样,BCH 最初的区块大小上限为 8MB,但它从来未达到上限。分叉后不久,Roger Ver 恢复了他的活动,以削弱比特币技术,比如闪电网络和 Blockstream 的 Liquid。

与此同时,SegWit2X 再次分裂了网络。2X 分叉计划于 2017 年 11 月 16 日进行,但在 11 月 8 日,有消息说它已被暂停。在 Mike Belshe (BitGo 首席执行官)的一封电子邮件中,他代表 Wences Casares (Xapo),Jihan Wu (Bitmain),Jeff Garzik (Bloq),Peter Smith (Blockchain.com)和 Erik Voorhees (Shapeshift.io)宣布「我们目前尚未就区块大小升级建立起足够的共识。继续走当前道路可能会分裂社区并对比特币增长造成挫折。这绝不是 SegWit2x 的目标。」

随着 2x 的消亡,价格显示了一些预期,即 2x 的支持者们可能接受了 BCH,但事实并非如此。2017 年第四季度是加密资产全面反弹时期,所以,有这么一个时候,比特币和比特币现金共存,没有出现大的争议。矿工支持 BCH,然而大多数网络依然留在比特币上,两个网络都有大量资金流入。这种过程在某种程度上改变了社区对分叉的看法,这与 BCH 的链分叉有关。

其他硬分叉

鉴于 BTC 和 BCH 在硬分叉之后经历的价格波动,BCH 的哈希率缺乏足够的稳定性。跟其他使用 SHA-256 的加密货币一样,BCH 经历了大量的哈希算力的流入和流出。虽然其网络中的交易规模不大,但 BCH 出块不稳定且确认时间长。事实证明,EDA 对它也有反作用。当比特币价格飙升时,矿工把算力从 BCH 转入比特币,反过来也一样,不断引发算力调整。

比特币不太容易受到流出的影响,因为它的哈希率要高出几个数量级,但比特币现金则不同,它每次算力的流出,都会引发 EDA 和出块不稳定。结果是,在创造比特币现金的硬分叉后不到三个月,Bitcoin ABC 背后的开发人员决定于 11 月 13 日再次分叉,以取消激活 EDA,同时用更具响应性的算法取而代之。新算法设计为每 600 秒重新调整一次难度,它是基于分配给之前 144 个区块的哈希率来进行,而它跟当初的 EDA 所实施的不同,当初的调整是每 12 个小时进行一次。

11 月 13 日的硬分叉引入了新的难度调整算法,这也标志着硬分叉计划的开始,以实现根据需要的添加和删除功能。BCH 开发者社区保证每六个月对协议进行一次硬分叉,以不断为协议添加功能。尽管其网络中的交易规模不大,但比特币现金依然在 2018 年 5 月再次硬分叉,以支持 32MB 区块。这次硬分叉还重新激活了一组操作码,该组操作码曾出现在比特币第一个版本中,后来基于安全考虑,它们在 2013 年被停用。操作码是比特币网络支持的机器级操作,例如 OP_ADD 和 OP_MUL。

结合起来,比特币支持的所有操作码都可用于设计算法并构成比特币的本地脚本语言。这种语言通常称为脚本。脚本基于 Forth;基于堆栈的命令式编程语言允许简单但综合的计算机程序。例如,可以创建程序,以便如果 (OP_IF) 某个语句为真,则触发一个函数。相反,如果其他内容为真 (OP_ELSE),则可以触发其他函数。由此,虽然比特币没有图灵完备,但依然可以使用该语言创建基本智能合约。

不幸的是,脚本功能也伴随着严重的利弊权衡。在比特币第一次迭代中已停用的 OP_CODES 被添加到 BCH,它证明是不必要的攻击向量,如果被利用,可能会导致整个网络崩溃。例如,OP_CAT, 它最初的设想是能支持开发人员连接两个字符串以及链接数据点,如签名。

但是,OP_CAT 也可被用来通过溢出交易创建大规模 DoS 攻击。攻击者可使用 OP_CAT 连接两个随机字符串,然后,使用 OP_DUP(复制) 来无限复制该字符串。下面展示了漏洞被利用情况:

比特币大区块实验之路:残酷战争、短暂历史和死亡螺旋

每轮 OP_DUP 与 OP_CAT 相结合,导致堆栈大小翻倍。如果被利用,这些操作的组合将导致指数级的内存使用,并且网络中的所有节点会在计算交易时崩溃。当这个漏洞于 2013 年被曝光后,它的重要性开始得到更好理解,核心开发者决定停用一些可能导致这类攻击的操作码。

由于没有简单方法来解决指数级内存使用的漏洞,即使简单的操作码如 OP_MUL 也被停用。在 BCH 硬分叉后,它的支持者们,尤其是 Roger Ver,则对此有不同看法。他认为功能之所以被限制,是因为 Blockstream 有自己的议程,是为了推它的侧链计划,以提供它的智能合约服务。在为重新激活这些操作码游说之后,Bitcoin ABC 于 2018 年 5 月把这些操作码添加进入客户端。

除了重新激活这些有争议的操作码之外,ABC 和 Bitcoin Unlimited 的开发人员也开始探索创建更多的操作码,以实现更多的功能。这在社区引发很大争议,并引起 CSW 的严厉批评。在 BCH 硬分叉之前,CSW 已经赞扬 ABC 的措施,这些措施要降低费用,而实际上网络中的交易规模还不大,这更多是缺少交易而不是大区块的结果。

然而,他当时参与有限。但在 2017 年 9 月,CSW 在香港会议上与 Jihan Wu (Bitmain CEO),Roger Ver (Bitcoin.com CEO)以及 Haipo Yang (ViaBTC CEO)建立联系,并声称支持比特币现金。Ver 和其他支持者抓住这次机会,并让 CSW 成为 2018 年比特币现金背后的主要人物之一。

哈希战争的前奏

这也让 CSW 有机会对 BCH 的发展道路提出更多积极的建议,而当新功能被提出时,CSW 明确表示他完全反对引入更多操作码。不出所料,当 Bitcoin ABC 的开发人员无视他的建议时,事情开始有了争议。根据 CSW 的建议,ABC 开发人员推动增加的功能从来不是原始规范的一部分,称为 OP_CHECKDATASIGVERIFY 或 OP_DSV 的操作码。此外,他们还建议在协议中添加规范的交易排序,这是 2014 年由 Gavin Andresen 提出的建议,目的是优化区块传播以及其他一些小的改动。

在宣布要增加操作码之后,CSW 在推特上表示反对,特别是 DSV,他表示:

OP_CHECKDATASIGVERIFY 没有发生——如果某个 ABC 开发人员希望推动它,那么,我们将只为替代者提供资金——相信我——还有其他人。——CSW

他所指的开发者是 Andrew Stone,他一直在研究如何为 BCH 智能合约改进脚本。

为什么 OP_DSV 有争议?

DSV 允许网络验证任意数据字符串的有效性,从而使 BCH 智能合约可以验证外部来源的数据。正如比特币使用 OP_CHECKSIG 一样,它验证了数字签名的有效性,DSV 也使用 ECC (椭圆曲线加密)来验证表示为签名的信息。该信息可以作为发生在另外网络的交易证明,或者是通过外部预言机报告的事件结果。

虽然 DSV 所要求的 ECC 在理论上可以通过使用比特币现有的操作码集来实现,但操作所需的脚本会在区块链上占用大量空间,每个验证轮可达 1MB。DSV 通过在协议本地的单个操作码中执行所有的底层操作来解决这个问题。单个操作码大大地降低了执行成本以及需要存储在链中的信息量。

表面上看,Bitcoin ABC 决定将所有 OP_DSV 的底层操作表示为单个操作码,这导致 SV 派别的产生,他们把 OP_DSV 视为「补贴」。

如果它是使用比特币本地脚本实现,则 DSV 需要大量计算,对一些矿工来说,这让更少空间需求的单个操作「会变得不公平」(根据 SV 联盟的说法)。作为单个操作码,使用 DSV 的合约将支付简单操作(如 OP_MUL)相同的费用,虽然它有更高的计算要求。问题的实质是,跟以太坊不同,BCH 并不采用染色 gas 的概念,由此操作成本在理论上与计算它的时间成正比。

相反,BCH 中的智能合约和脚本遵循相同的基本价格:每交易字节 1 聪。这实际上意味着 DSV 的底层操作执行单一操作码的成本更低,而使用比特币的脚本实现则成本更高。考虑一下,如果通过脚本实现,整个 DSV 脚本可能会需要 1MB (或 1M 聪),按当前价格,要花费大约 2.89 美元的交易费。相反,OP_DSV 的定价是 1 聪,只需几分钱。虽然比特币 ABC 认为这是改进,而比特币 SV 则把 2.89 美元视为补贴,它会直接影响矿工的盈利能力。

如果我们退一步看,这个问题实质是通过单一操作码来补偿计算成本,这个操作码链外计算所有底层 DSV 操作(仅在链上保存结果),而不是通过多个操作码,多个操作码则用脚本实现 DSV,并将所有操作和结果存储在链上。然而,将 DSV 视为补贴的问题在于,它意味着会给矿工带来成本,而不仅是机会,因为不得不将 DSV 作为单个操作码来计算。然而,实际上,这些成本不仅可以忽略不计,与 1MB 脚本的负外部性相比,它们显得苍白无力。(译注:外部性的概念由经济学家马歇尔和庇古于 20 世纪初提出,主要指一个经济主体 (生产者或消费者) 在自己的活动中对其他主体的福利产生了一种有利影响或不利影响,部分类似于溢出效应。如工厂排放污染物是负外部性,会有社会治理的成本,对周围人健康有危害等。教育是正外部性,为社会培养系统人才。)

DSV 所需的 ECC 可以在 TI-84 上计算,它的要求并不会以有意义方式给矿工造成负担。由此,除了 CoinGeek 联盟之外,其他多数矿工都支持 ABC 的硬分叉。

更大区块不是好主意

尽管区块扩容可能暂时缓解网络交易的拥堵,但它不是一个有意义的长期解决方案。假设比特币持续增长和被广为接受,区块最终会填满。然而,区块大小之争会持续很长时间,BCH 是值得关注的有趣实验。

经过四年的争论,关于更大区块的利弊权衡,大家有了更清晰的认识。一方面,更大区块允许在链上处理更多交易。但另外一方面,它们是临时解决方案,从长远看,这会极大地影响网络。通过硬分叉增加区块大小会影响很多不同方面,下面的四个原因让我们相信它不是可行的长期解决方案:

1、它们是临时解决方案

区块大小增加被视为是垂直可伸缩性的解决方案,因为它们没有规避所有节点规范地处理所有交易的要求。如果加密资产要进入大规模主流人群,吞吐量势必要求水平扩展方案,这才可以持续增加交易容量。这包括使用已经部署的技术,例如闪电网络支付通道和 Liquid 侧链,它们允许并行处理。仅仅增加区块上限会有限度,只是临时解决方案。

比特币大区块实验之路:残酷战争、短暂历史和死亡螺旋无论你增加多少个车道,车流量都会赶上来

2、更大的区块很难传播

在比特币基本线路协议(基于 TCP/IP)下,更大的区块显然更难传播。在十分钟的区块窗口下,32MB 区块会花费很长时间才能从中国矿工传播到美国的一个节点。128MB 区块传播到其他节点会非常繁重,即便使用更有效率的传播技术,如石墨烯,这进一步把中心化引入系统。

结果是,矿工会产生更高比率的孤块,有效区块没能添加到链上,因为没有及时快速广播出去。因此,链必须更加频繁地进行重组,这开启了双花攻击的可能性。

3、节点数减少降低了网络安全性

每十分钟有 128MB 区块,这样每天将产生 18.4G 的数据,每周 129,每月 0.5TB。运行全节点比特币客户端的用户需要存储区块链的完整副本,并承担运行软件的存储成本。有了 128MB 的区块,高级用户将无法运行全节点,甚至对于公司来说,使用云计算来运行也是非常贵的。

比特币区块链的当前目录大小是 190GB,这让大多数个人计算机能够运行。但是,如果区块大小翻倍,比特币目录大小将成比例增长,而从增加用户存储成本。因此,更少用户能够运行全节点,从而加剧矿工的中心化,这与比特币的分布式理念是相矛盾的。

4、如果没有 Coinbase 会发生什么?

比特币的 PoW 是一种有效的安全机制,它有 10 年的历史,它为比特币 99.99% 服务正常运行做出了贡献。矿工集体投入算力来解决计算密集型难题,这个过程让民族国家这样的实体攻击网络变得困难。在 PoW 中,网络安全维持通过区块奖励得到补贴,这会激励矿工一直挖矿,即使网络上没有交易。奖励数量每四年减半,到 2140 年会变成 0。

到那时,网络有足够高的交易费用,可以让矿工继续贡献算力。否则,比特币挖矿将无利可图,哈希率会下降,这会带来很大的安全漏洞。更大的区块会减少费用,增加区块空间供应,这会让费用市场更难发展。(译注:更大的区块会减少费用?)

另外一方面,如果我们假定大多数交易都发生在闪电网络支付通道或 Liquid 侧链上,那么,只有大额的交易才会在链上发生,这是一个让费用市场更可行的模型。(译注:这里缺乏足够详细的说明)

BCH 分叉标志着大区块实验的解决方案

我怀疑 SegWit2x 是获得大规模采用的最后一个大区块提案。正如 BCH 短暂的历史所展示的,社区购买更大区块的代币往往是基于个性魅力而不是事实。不可避免,当这些个性人物存在争议时,硬分叉给不同看法的人提供一个解决之路:那就硬分叉来解决吧。这是唯一的死亡螺旋,破坏「正确货币」价值的死亡螺旋。(译注:这里的说法可能会有较大争议。)

如果货币的历史告诉我们什么,那就是当一个社会可以选择扩大其货币基础,那么,最终会在某个时点采用这种选择。在比特币中,硬分叉提供了这个选择,这也是评估其不可篡改特性的另外一个原因。闪电网络在 2018 年证明了可扩展性是可能的,它不需要具有长期负面影响的浮躁决策。