在过去的几年中,‘共识’这个术语的理解已经让人感到非常混乱。这个术语既可以指中本聪所写的比特币白皮书中的共识机制,也可以是指比特币网络的共识原则。这种混乱已经导致人们对共识网络的局限性产生大量的误解——包括硬分叉的本质和风险。
中本聪共识机制
中本聪在白皮书中描述了使用通过网络节点的工作量计算来达成共识——或者‘总协定’——决定哪条有效区块链积累的工作量最多,这条链就是具有权威的区块链:
“当某个节点找到一个工作量时,就会将这个区块广播给所有节点…节点只有交易在该区块内是有效的并且还未支出时才会接受这个区块…当节点继续创建下一个区块时,这就表明节点接受了这个区块…节点总是将最长的链当作是真正的区块链,并继续扩展这条链。”
克里斯蒂安•德克尔(Christian Decker)和罗杰•瓦唐霍弗(Roger Wattenhofer)描述了最佳区块链之争所导致的所有后果:
“最终某个区块链分支将会比其他分支都要长,没有采用该分支的分区将切换到该分支。在这时候,这个区块链分叉的问题就会被解决了,同时账本副本也与区块链头(head)一致。被抛弃的区块被称为孤块(orphan block)。”
所以,当区块遵守比特币协议规定时,网络在最佳区块链的构成方面达成共识,基本上通过处理能力来决定的。矿工对于孤块的经济激励保持理性,这些区块不可能会被包含到最佳区块链中。如果某个矿工挖掘这些区块,那么他们未来的挖矿奖励将被网络接受的可能性将减少。通过这种方式,网络节点能够在哪条链是具有权威性的达成全面一致。
节点如何处理不符合协议规则的区块?假如某个矿工挖掘了一个重复支付输出的区块或者增加了区块大小,会怎么样呢?中本聪对于这个问题回答的相当明确:拒绝无效区块,拒绝使用它们。
换句话说,中本聪的共识机制明确地拒绝无效区块。任何无法遵守协议规定的区块都是无效的。任何包含这种无效区块的区块链都不能参与比特币网络,同时,也无法参与最佳区块链的竞争。
无论矿工告诉你什么,无效区块链的难度和算力与比特币网络不相干。矿工在协议共识规则方面没有任何权力——这些规则由每一个网络节点强制实施。矿工拥有的唯一权力就是按照这些规则将交易整理到区块中。
网络共识规则的基础
听一听最近的硬分叉争论,其中很容易忽略一种事实:共识来源于根源赞同(root consent)。换言之,当你选择使用比特币网络,你就是从根源上赞同该网络的协议规定。用户通过节点参与,节点负责执行这些共识规则。因此个人用户的赞同是网络上实施的共识规则的基础。
这对硬分叉具有重要的哲学意义。硬分叉不仅仅是一种软件方面的更改;它意味着每一个用户都迁移到一个新的网络。硬分叉从本质上来讲就是生成一个新的系统,具有新的规定,并且与原来的网络完全不兼容。因此,根据定义,硬分叉违反了用户赞同,而这是一个共识网络(如比特币)的基础。
对于比特币网络,不存在‘对于硬分叉达成了共识’。也绝不会存在这些情况。不存在一种机制让所有比特币软件用户能够同意进行网络迁移。从本质上说,用户不会同意进行硬分叉——所谓的‘同意’只存在于事后,即分叉发生后(当一些用户决定选择新的网络时)。任何不同意迁移网络的人都不会赞同对协议规定进行更改。
换句话说,硬分叉之前的任何“多数票赞同”(例如,通过算力分布或者币持有量投票)仅仅是一种不准确的民意调查,不能替代通过选择网络所获得的用户同意。硬分叉违反了分布式共识网络底层的基本哲学原则,因此硬分叉是区块链完整性的一个现实的威胁。
网络共识vs.‘社会共识’
比特币和以太坊的硬分叉支持者试图寻求使用‘社会共识’代替共识的定义——‘社会共识’是指如果大多数用户同意某一特定的计划,那么即使这个计划会打破共识规则也可以实施。其底层逻辑就是如果大多数人同意进行硬分叉,那么现有共识可以被颠覆,而这种占据多数的统治者能从经济上强迫少数人违背自己的意愿来迁移网络。
总体而言,这种情况低估了争议性硬分叉所具有的风险,因为它错误地假定了只有一条区块链会幸存下来。值得注意的是,选择被分叉的协议并不会撤销你对原始协议规定的赞同,个体用户可能会通过将他们的代币放在两条链上寻求将代币价值最大化。
在硬分叉之后,以太坊用户如今认识到了单纯地假设占据少数的分叉区块链会灭亡,这种假设是非常危险的。如果用户继续使用原始网络——市场展现出对新创建出来的代币存在需求——原有区块链就值得进行合理的挖掘。在这种情况下,一种具有争议性的硬分叉就会导致出现多条区块链。正如ETH/ETC展示的那样,投机者能够通过为原有链代币建立需求而进一步挑战硬分叉,通过激励矿工保卫原始区块链网络来使网络分裂。
也许更重要的是,这种管理方法与比特币(或者任何其他类似的分布式共识网络)基本的安全承诺直接相矛盾。即使我们接受了这种实际的论点,即担心挖矿/在少数链上进行交易会造成经济损失,这也足以迫使少数人迁移到进行硬分叉的网络,这种想法与区块链的哲学基础相反。当你选择这种网络时,你和所有其他参与者就需要执行这种共识规定,这就需要你去拒绝那些无效的区块——不要放弃共识规定,即使51%(或者75%)旷工告诉你这样做。这种破坏共识的尝试是对参与共识网络的想法的攻击。如果一种占据大多数的矿工能够强迫网络放弃这些由所有用户达成的规定,并且只是因为其拥有算力优势,那么尼克•萨博(Nick Szabo)将硬分叉称为‘技术上等同于51%攻击’的说法就是正确的。
我们能够从The DAO分叉学到什么?
The DAO分叉是研究争议性硬分叉的一个理想案例。The DAO是一个建立在以太坊协议之上的众筹应用。
今年6月份,不明身份的攻击者利用The DAO代码漏洞将资金转移走。这导致投资者损失了千万ETH。一部分以太坊社区决定实施硬分叉来扭转这起盗窃案件,将ETH还给最初的所有者。
尽管对社区进行了民意调查,但是大多数以太坊用户(根据以太币持有量)和矿工(根据算力)根本就未参与投票。但是即便如此仍旧进行了硬分叉。果不出所料,一些用户仍旧使用原链,这次硬分叉导致在相互分离且不兼容的网络上出现两条区块链:以太坊(分叉)和以太坊(原链)。
为什么The DAO分叉具有争议性?
这个问题的症结在于那些被利用的代码所处的位置:应用层(而不是协议层)。当协议存在缺陷时,所有的网络参与者都会受到负面影响;因此,所有用户都会被激励去修复这个问题。尽管不太可能获得硬分叉共识来解决这种缺陷,但是根据理性的用户激励分析,这时候的硬分叉会获得更加广泛的支持。
最贴近的例子就是比特币于2010年发生的价值溢出错误以及随后的软分叉。注意:当时的解决方案是进行软分叉,所以打破共识规则不会成为一个问题。比特币从未进行硬分叉。
比特币当初的价值溢出错误(代币供应量意外超过了协议所规定的数量限制)破坏了比特币有限供应限制的基本价值前提。这个协议缺陷给所有比特币用户造成了负面影响,冲淡了他们在所有挖掘出来的比特币中的份额(溢出造成比特币供应量扩大了大约45000倍)。缺陷出现几个小时之后,比特币网络就对违规的区块实施了软分叉,拒绝所有输出价值溢出的交易,以及所有支付超过2100万BTC的交易。在区块高度74691处,进行软分叉的链超过了那条违规的链,并对这条违规链进行孤立。
The DAO分叉明显与比特币的情况不同,它是一种硬分叉,需要解决一个应用层上的缺陷——而不是协议层上。因为协议并未出现问题,所以没有理由认为这种硬分叉会得到广泛的支持。
然而,以太坊基金会却继续描述以太坊(分叉)是一个‘不可阻挡应用’的平台,‘完全按照编写的那样运行,没有任何停机时间,审查,欺诈或第三方干扰的可能性。The DAO创建者之一Stephan Tual还声称‘代码即法律。’
以太坊社区是基于‘不可阻挡应用’和‘无第三方机构干涉’的原则之上的,所以假设整个用户群能够被激励去分叉他们的协议,以此来救助一个第三方应用,这种假设是不合理的。因为The DAO只是一个应用,只有少数以太坊用户参与了The DAO众售。当The DAO盗窃发生之后,只有少数以太坊用户受到影响。不出所料,只有少数ETH持有者和矿工支持硬分叉。
尽管根据分叉后的矿工分配,99%的矿工支持以太坊(分叉),但是剩下1%的用户也足够用于确保以太坊(原链)的不可更改性和共识。因此,两条以太坊区块链都有价值——很明显,对于矿工来说,两条链都有挖掘的价值,因此以太坊一分为二。
对比特币的影响
这对于比特币意味着什么?答案是双重的。
首先,比特币可能会启动一个不具争议的硬分叉吗?基本的问题是:去除共识规则一般涉及安全性和哲学的折中。以区块大小争论为例,一方是由去中心化主义者组成,这些人指出节点和算力的去中心化和手续费市场的必要性是在没有扩容机制的情况下提升吞吐量的不可抗拒的原因。另一方则认为保持低手续费和扩大比特币使用对于所有p2p去中心化和安全性问题至关重要。当双方所要优先保证的方面不兼容的时候,我们又如何能够期待他们能够达成不具争议的硬分叉?
Vitalik Buterin指出了很重要的一点,他若有所思地说:
“当有人试图回答‘我认为A比B好’和‘为什么不同时做呢,我提议我们使用‘折中拒绝主义’这个术语。”
你能想象100%的比特币人愿意牺牲安全性来换取一个能够扩大比特币使用的机会吗?任何时候需要进行折中的时候,都不可避免会有争议存在。
多年以来,许多比特币用户都抱怨缺乏能够推动比特币使用成为主流的‘杀手APP’。与此相反,比特币‘杀手APP’在其创世之初就已经推出了:一种去中心化通胀可控的账本上的以数学为基础,防审查的货币。这是比特币的主要使用案例;这驱动了比特币的需求,是比特币价值的基础。争议性硬分叉导致网络分裂的风险对于这种使用案例和全球性账本这种想法来说是一种严重的威胁。 Pieter Wuille阐述说:
“无论你如何确定切换日期,根本无法知道什么时候(或者是否)每一个人都变更了他们的全节点(或者其他软件)。并且即使算力投票率非常高,也无法阻止之后会出现分叉。最好的情况下,人们会无法保证自己的交易验证是有意义的(因为有时很明显另一个人的验证获得了采纳,而他们自己则需要进行切换)。最糟糕的情况下,会存在一个分叉链,出现两个社区,而你在分叉之前持有的币在这时候可以同时在这两条链上存在,你可以重复使用这些币,即重复支付。而这损坏了比特币的主要设计目的:防止重复支付。”
其次,硬分叉就是对比特币的基本安全前提和基本理念的攻击。根本没有软件机制可以用来判断用户是否同意删除共识规则。比特币社区存在着一种普遍的误解,即硬分叉可以通过算力来强制实施。这种想法错误地将硬分叉的本质与软分叉的本质混淆在了一起。 Eric Voskuil解释说:
“对于硬分叉,新的交易即使没有遵守原来的规则也可能会是有效的。而对于软分叉,新的交易只有遵守原来的规则才会是有效的。换句话说,某种货币的持有者不同意进行硬分叉,但是本质上接受了软分叉…软分叉只要在拥有大多数算力的情况下就能够被实施。换句话说,实际上,软分叉并不会更改人们之间的共识,它只是那些控制大多数算力的人所进行的一种更改…最初的白皮书并未清楚地区分这些规则,而大意地将两种情况都当成了共识。然而,将软分叉规则称为‘共识规则’是错误的。”
所以,拥有大多数算力确实能够通过软分叉来实施新的规则。然而,如果说算力与软件共识规则之间存在什么关系,这是不准确的。矿工绝对无法决定用户同意(如,共识规则)——除非他们运行自己的节点。当一些有名的开发者,行业主管和中心化矿池推动‘由矿工投票来决定共识更改’这种想法时,这就相当于直接对比特币进行攻击——这就是对你的资金进行直接攻击。Pieter Wuille指出:
“比特币不是一种民主。这种全节点安全模式是设计用来最小化系统各方所需要的信任。而这是通过按照共识规则尽可能多地进行验证来实现的。特别是,不存在所谓的能够推翻其他东西的‘大多数选票’(这与一些人所认为的那样相反,这不是‘最长链获胜,占有多数的矿工具有决策权’;即使拥有大多数矿工的支持也不能偷走你的币或者生成比所允许的更多的补贴,除非他们说服所有其他人改变他们的软件)。”
硬分叉应该因风险和哲学问题而受到反对
从实践和哲学的角度来讲,很明显任何试图分叉比特币协议的尝试都应该受到明确的反对。比特币社区应该坚决反对这种想法——用户团体(如矿池)能够通过投票来决定更改共识规则。重要的是要认识到——打破共识将威胁削弱所有对比特币能够执行基本规则的信任。如果你相信共识规则能够通过民主投票来删除,那么你还会相信比特币的2100万供应限制是可行的吗?为什么?因为未来任何的投票都可能消除这种供应限制,只要获得大多数的同意就能稀释早期比特币使用者的财富。共识规则就是你抵御这种‘盗窃’的唯一方式。尝试移除共识规则那么就等于打开了潘多拉魔盒。
读者应该问一下自己:你认为矿工应该拥有改变这些由我们和用户所同意的规则的能力吗?如果答案是肯定的,那么你就相当于承认矿工拥有类似于中央银行的权力。非挖矿节点运营方与矿工的利益并不相同;非挖矿节点充当了一种对矿工权力的核查。拒绝信任矿工并单独执行协议的规则是个体防止矿工之间(矿工与其他人)勾结对抗自己的唯一方式。如果没有去中心化节点验证,矿工和中央银行之间就没有有效的区别;就不存在他们必须遵守的规定。如果你赋予矿工凌驾于共识规则之上的权力,那么你就牺牲了全节点安全模式提供给你的基本安全性——你的资金将不再安全。使用矿工分布来作为一种投票机制确实非常诱人,但是这根本就与用户是否赞同没有关系,因此,应该与共识规则没有关系。
正如我们在前面讨论的2010年比特币价值溢出事件,仅有一种情况下我们才能进行硬分叉:一个对所有用户都造成负面影响的真正协议缺陷。确实,这种硬分叉会违反用户赞同。然而,如果我们知道协议漏洞影响到每一个用户——这是协议缺陷的本质——那么显而易见,修补这个漏洞符合用户激励和期待。任何理性的用户都会在这些情况下支持硬分叉。
需要明确的是,保持不变的共识以及赞成对协议限制实施软分叉解决方案并不意味着进步和开发必须停滞。相反,对于区块大小争论,软分叉将可以为带宽和非带宽扩展带来难以置信的改进,并且不会像硬分叉那样会造成风险。不同于仅仅通过提升区块大小来提升交易吞吐量,我们可以通过像Schnorr签名这样的机制来大幅度地优化交易规模,以此提高容量。一旦延展性修复完成到位,大门将向智能合约开放:闪电网络可以带来没有保管风险的无需信任的合约,这将直接减轻主链的吞吐量。MAST可以进一步优化复杂智能合同的规模。挖矿预验证(弱区块)可以大幅降低临界带宽,这样就可以快速传播/缓解延迟和‘减少’交易验证,解决在提高吞吐量的情况下的挖矿中心化问题。像批量验证和档案节点这样的改进可以进一步降低节点的资源需求,缓解随着吞吐量的增加而增加的中心化压力。
美好的扩容解决方案就在我们眼前——这些解决方案将直接提升区块容量,同时减轻因提升吞吐量而带来的外部效应。为什么我们要仅仅为了提高区块容量而打破共识?这种想法简直荒谬。
对以太坊(原链)(ETC)的影响
自ETH开发者硬着头皮实施了硬分叉之后,以太坊(原链)社区出现了。那些重视共识规则完整性和区块链不可更改性的以太坊用户已经开始支持ETC。
不幸的是,ETH核心开发者一意孤行的后果并未局限于The DAO分叉。ETH核心开发者通过编写这种‘难度炸弹’有效地破坏了以太坊协议。Vitalik Buterin对这些影响描述说:
“在350万区块(从现在起一年后),10万区块的平均区块生成时间为25秒(总共时间大约1个月);之后10万多区块的时间为35秒(大约1.4个月);再之后10万区块平均大约55秒,总共需要2.2个月;再之后大约95秒,共需3.8个月,以此下去直到区块时间大约655秒时,10万区块需要时间26个月(情况比比特币略差),只有在该协议因为99/2048向下调整限制而中断后,这最后的区块在2021年之前不会发生(尽管到2017年下半年情况肯定会变得很糟糕)。”
事实上,区块被挖出来的时间间隔会越来越长,直到最后‘最终命运’到来,将不会再有新区块被挖出。应当注意的是,为了强行破坏共识而故意破坏以太坊协议,显示出ETH核心开发者对以太坊用户群难以置信的不屑。不过,这是ETC所处理的问题。
幸运的是,ETC社区拥有手段和道德权威来打破共识,以此来克服这种破坏。这个‘难度炸弹’是一种存在协议缺陷。所有的用户都被激励去修复这个缺陷——他们也必须这样做,否则他们的协议注定会不在活跃,实际上将不再是一条活动的区块链。
这时候,唯一的出路就是硬分叉——这种方法对协议的唯一更改就是将延迟的区块时间回复到一般水平。我们防止在具有争议性的情况下进行硬分叉的唯一机会就是限制这种协议缺陷的共识改变。
许多比特币领域的人已经开始支持ETC社区,其中一些人表示渴望分叉ETC协议来限制ETC未来的供应量和永久性通货膨胀。这种想法是错误的,这可能会陷入争议性硬分叉的危险中。ETC通胀率具体来讲是一种安全性激励,确保了诚实挖矿——除去它需要明显的安全性折中,每个用户对此的看法都不相同。为了防止网络分裂,重点应该放在调整共识更改与全球用户激励和期待相一致。在解决协议缺陷的狭窄范围外的任何更改都可能导致争议。
总结
无论你对硬分叉的哲学观点是什么,重要的是要记住,比特币不仅仅是货币;它也是一种软件开发项目,致力于确保这种货币的安全。在工程方面,尤其具有相当大的风险价值,为最坏的情况做好打算非常重要。我们不能简单地假设用户会盲目地跟随矿工并更改他们的软件——特别是因为他们不应该。即使矿工在算力方面表现的非常理性,这并不意味着矿工支持硬分叉的决议的假设是正确的。硬分叉的风险无法保证它能够作为一种共识账本底层的软件更新机制。
比特币和其他基于代币的共识网络都是经济体。不幸的是,宏观经济学中的因果关系是并且可能会继续是一个谜。正如大卫·休谟(David Hume)所说,
“没有可以展示出来的论点来证明这些情况。”
我们永远无法预先知道如何解决一个能够分裂网络的硬分叉。
我们必须采取风险导向的方法,避免硬分叉可能会带来的最坏情况。特别是,如果出现多个比特币网络,并且能够进行跨网络重复支付的情况,那么这对于比特币的重复支付保护来说将是一个毁灭性的失败。另外,还会导致比特币网络执行基本规则的能力永远受到质疑,例如比特币的受限制的供应量。