今日推荐 | 比特币大区块的实验之路
前言:大区块相关的提案包办了近两年比特币的最大争议。从Segwit2x到BCH,再到BCH ABC 和SV,都有自己的路径偏好。那么,大区块实现未来会走向何处?它会一统江湖?还是共存共荣?还是layer2胜出?每个人都有自己的答案,不同的道路都有自己的铁粉,有自己的坚信,有自己的社区,最终来说,所有胜利的喜悦或失败的苦涩都来自于当初自己的选择,来自自己的认知,以及伴随而来的,曾经坚信的那个东西。也许不用太多年,就可以看出端倪。这是一个争议极大的问题,大家怎么看呢?本文作者Lucas Nuzzi也有自己明确的偏好,大家自行做好判断。本文来源于medium.com,由蓝狐笔记公众号社群“Leo”翻译。
在比特币十年的历史中,提升区块大小的相关提议有很多。即使这些提议都没被采纳,关于区块大小的辩论依然是最具争议、最具分裂性、最让人心累的问题之一。如今,BCH创建一年多,还有围绕ABC/SV的分叉冲突,权衡利弊也日益清楚。
本文会提供增加区块大小的历史背景。随着时间的推移,它有显著支持者,此外这个持续的问题引发两次分叉。之后,我通过分析BCH的历史及它采用的技术来对这些提案提出不同意见。最后,我提出这个论点:在没有区块奖励之时,有限的区块空间对维持比特币安全模型和奥派经济学的货币基础至关重要。下面先简单介绍历史背景:
01
第一次区块大战
产生区块大小争议的一个促成因素是在比特币的第一次迭代中,区块没有明确限制。中本聪通过一系列的隐藏提交,于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并把区块大小增加到2 MB,即所谓的“纽约协议”。截止到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也复活,并激活对更大区块的支持。
02
比特币现金(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的链分叉有关。
03
其他硬分叉
鉴于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年比特币现金背后的主要人物之一。
04
哈希战争的前奏
这也让CSW有机会对BCH的发展道路提出更多积极的建议,而当新功能被提出时,CSW明确表示他完全反对引入更多操作码。不出所料,当Bitcoin ABC的开发人员无视他的建议时,事情开始有了争议。根据CSW的建议,ABC开发人员推动增加的功能从来不是原始规范的一部分,称为OP_CHECKDATASIGVERIFY或OP_DSV的操作码。此外,他们还建议在协议中添加规范的交易排序,这是2014年由Gavin Andresen 提出的建议,目的是优化区块传播以及其他一些小的改动。
在宣布要增加操作码之后,CSW在推特上表示反对,特别是DSV,他表示:
“OP_CHECKDATASIGVERIFY 没有发生——如果某个ABC开发人员希望推动它,那么,我们将只为替代者提供资金——相信我——还有其他人。”——CSW
他所指的开发者是Andrew Stone,他一直在研究如何为BCH智能合约改进脚本。
05
为什么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的硬分叉。
06
更大区块不是好主意
尽管区块扩容可能暂时缓解网络交易的拥堵,但它不是一个有意义的长期解决方案。假设比特币持续增长和被广为接受,区块最终会填满。然而,区块大小之争会持续很长时间,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侧链上,那么,只有大额的交易才会在链上发生,这是一个让费用市场更可行的模型。(译注:这里缺乏足够详细的说明)
07
BCH分叉标志着大区块实验的解决方案
我怀疑SegWit2x是获得大规模采用的最后一个大区块提案。正如BCH短暂的历史所展示的,社区购买更大区块的代币往往是基于个性魅力而不是事实。不可避免,当这些个性人物存在争议时,硬分叉给不同看法的人提供一个解决之路:那就硬分叉来解决吧。这是唯一的死亡螺旋,破坏“正确货币”价值的死亡螺旋。(译注:这里的说法可能会有较大争议。)
如果货币的历史告诉我们什么,那就是当一个社会可以选择扩大其货币基础,那么,最终会在某个时点采用这种选择。在比特币中,硬分叉提供了这个选择,这也是评估其不可篡改特性的另外一个原因。闪电网络在2018年证明了可扩展性是可能的,它不需要具有长期负面影响的浮躁决策。