第四节 发展进化
比特币从2009年诞生到今天已经经历了9年的发展历程,于是许多人提出了比特币2.0的概念,这一节就让我们来了解一下三个针对比特币2.0的比较典型的发展预测。
一、侧链
由于比特币的区块链协议是建立在工作量证明的共识机制上的,因此它的目标相对简单:它是一个支持单一原生数字资产传输的区块链,不能与其他任何资产相兑换。这可以简化很多具体环节,不过这样的简化正面临着现实世界关于创新需求的挑战。目前的创新主要围绕在以下几个方面。
(1)在可扩展性和去中心化之间的取舍。例如,更大的区块可以支持更高的交易速率,而代价是加大了验证方的工作量——中心化的风险。
同样,在安全性和成本之间也存在取舍。比特币历史记录中用同等级别的不可逆性来存储每一笔交易。这种方式的维护代价很高,对低价值和低风险的交易来说也未必合适(例如,当所有参与方已经商定了一个由共同的第三方法律机构来处理欺诈的行为时)。
由于不同交易的价值和风险状况有很大的不同,这样的取舍应当针对每笔交易来应用,然而比特币系统的构建仅支持以同一个标准来应对所有问题。
(2)在区块链的功能上存在更多的取舍。例如,是让比特币的脚本变得更强大,来支持简明和有用的合约,还是减少功能以便于审计。
(3)一些非货币的资产也可以在区块链上交易,例如欠条、其他合约和智能财产。
(4)“鸡蛋放在同一个篮子里”:比特币系统由许多密码学组件构成,其中的任何一个组件出现问题,都会导致整体价值的损失。如果有可能,不要用同一套算法来保护每个比特币。
(5)新技术可能会带来比特币系统在创建初期未曾料到的新功能。例如,用密码累积池、环签名或Chaumian盲签名来增强隐私保护和抗审查性。即使有这样做的迫切需求,但没有安全升级比特币系统的途径,这意味着任何更改都需要所有参与者协同执行才能生效。比特币的开发者们达成了一个共识:对比特币系统的变更必须缓慢、谨慎,并且仅当整个社区都明确同意时才能进行。
实际上,由于比特币的区块链功能必须被广泛认可后才能采纳,这限制了参与者的个人自由和对其钱币的自主性。小的团体无法实现诸如专用脚本扩展这样的功能,因为他们缺少广泛的共识。
早期针对比特币系统中这些问题的解决方案是可替代的区块链的开发,又称竞争链(Altchains),除针对上述关注点进行适当修改外,还共用了比特币系统的代码库。然而,靠创建一个独立的但本质类似的系统来实现技术变更仍然存在问题。
问题之一:基础架构碎片化。由于每个竞争链都使用自己的技术堆叠,经常会有重复性或被遗漏的工作。因此,由于竞争链可能并未扫除比特币系统中安全领域的知识障碍,安全问题常常跨竞争链被复制,而难以被一次性修复。因此要解决安全问题必须消耗大量资源并且进行谨慎评审,从而彻底建立一个新的分布式加密系统。如果没有这样做,安全隐患常常无法被察觉,直至漏洞被利用。而当前的情形是,我们看到了一个“无序”的发展环境,大部分显现出来的项目可能在技术上是最不健全的。打个比方,想象一下在互联网上,每个网站都使用自己的TCP架构,实现将自定义的检验和数据包拼接算法后“广播”给最终用户。这不会是一个可持续的环境,也不是竞争链能生存的环境。
问题之二:这样的竞争链和比特币系统一样,通常有自己的带有浮动价格的原生加密货币,或称竞争币。为了使用竞争链,用户需要通过市场来获取这种货币,这将会让他们直接去面对新货币带来的高风险。此外,因为有独立解决初始分配和估值问题的需求,与此同时还要在不良的网络效应与拥挤的市场中竞争,这既阻碍了技术创新,又助长了市场的博弈。这危及的不仅是这些系统的直接参与者,还危及整个加密货币行业。如果这一领域被公众认为风险过高,加密货币被认可的进程可能会受阻,或者有可能完全被遗弃(自愿或通过立法)。这表明我们希望有一个环境能让可互操作的竞争链易于创建和使用,但不要产生不必要的市场和开发碎片。侧链可以使这些看似矛盾的目标有可能同时实现。核心考察点是“Bitcoin”这一区块链在概念上是独立于“Bitcoin”这一资产的:如果我们能在技术上支持区块链间资产的移动,就可以通过简单地复用现有“Bitcoin”区块链概念的方式,开发出可能会被用户采纳的新系统。
这种可互操作的区块链被称为“楔入式侧链”。以下为“楔入式侧链”所需具备的属性。
(1)在侧链间移动的资产应当能够被当前持有者移回,但除此之外的任何人则不行(包括前持有者)。
(2)资产的移动应当无交易对手风险。也就是说,不诚实的一方无法阻止转移的发生。
(3)资产转移应当是元操作(原子操作),即要么完全完成,要么根本不发生。不应存在会导致资产损失或允许欺诈产生的失败模式。
(4)侧链应当设有防火墙:一个会使某条链发生资产铸造或偷盗的bug,不应导致任何其他链出现资产的铸造或偷盗。
(5)区块链重组时应当处理干净,即使在资产转移的期间也要如此;任何破坏应当只发生在它所处的侧链上。在理想情况下,侧链应当完全独立,来自其他链上的全部所需数据由用户提供。侧链的验证者应当只有在侧链本身的显式共识规则有要求时,才需要跟踪其他链。
(6)不应要求用户去跟踪他们未主动使用的侧链。
早期“转移”货币的解决方案是用一个可公开识别的方式来销毁比特币,让新的区块链能检测到,以允许铸造新币。这解决了部分上面提到的问题,但由于这种方法只允许单向转移,因此还不足以满足双向转移的目的。
侧链概念中所提出的方案是由资产转移的交易本身提供所有者证明来转移资产的,避免让节点有跟踪发送方链的需求。从上层实现角度,当资产从一个区块链向另一个链移动时,我们在第一个区块链上创建交易、锁定资产,然后在第二个区块链上创建一笔交易,该交易的输入中包含一个已正确完成锁定的密码学证明。这些输入用某种资产类型来标记,比如创生出资产的区块链的创世哈希(Genesis Hash)。
第一个区块链我们称为父链,第二个则称为侧链。在某些模型中,两条链可对称地来处理,因此这一术语应当看成是相对的。从概念上讲,我们打算将资产从(初始)父链转移到一条侧链,可能会再转移到别的侧链,最终还能转回至父链,并保全初始资产。一般我们把父链看成是比特币系统,侧链是其他区块链中的某一个。当然,侧链的币(Coin)也可以在侧链间传递,并非只能与比特币系统进行往来。不过,由于任何一个最初从比特币系统移动的币都可以移回去,所以不管变成什么样,它仍是个比特币。由于侧链是从父链中转移现有资产而不是另铸新资产,侧链不会引起未经授权的铸币,维护资产的安全和稀缺性依靠父链来实现。
更进一步说,参与者不必再担心他们的持有物会被一个实验性竞争链锁往,因为侧链币能够用等额的父链币来赎回。这提供了一个退出机制,减少因软件无人维护而造成的损失。
另外,由于侧链还是一个独立于比特币系统的区块链,它们可以自由地尝试新的交易设计、信任模型、经济模型、资产发行语义和加密特性。
这一基础架构的额外好处是对比特币系统本身进行改变的需求变得不再那么迫切:与其策划一个需要各方均达成一致并一起实施的分叉,不如用侧链来创建一个新的“改变了的比特币系统”。从中期看,如果广泛认可新系统有进步,最终会明显看到,相对于比特币父链,更多的人会使用这个新系统。由于父链的规则没有任何修改,任何人都可以根据自己的时间去切换,不会有任何因共识失败所带来的风险。从长期看,如果父链被认为或当父链需要改变时,侧链的成功经验将为父链的更改提供所需的信心。
通过楔入式侧链实现比特币和其他账簿资产在多个区块链间的转移,这使用户能用他们已有的资产来使用新的和创新的加密货币系统。通过复用比特币系统的货币,这些新系统相互之间的交互操作以及与比特币之间的交互操作,可以更容易地进行,避免出现与新货币相关的流动性短缺和市场波动。由于侧链是独立的系统,其技术和其他方面的创新不会被其他因素妨碍。尽管比特币系统和楔入式侧链间有双向转移的能力,但它们是隔离的:即使出现侧链中的加密被破解(或被恶意设计)的情况,所有的损害都只限于侧链本身。
关于侧链的更多技术细节可以参照Adam Back, Mat Corallo以及Luke Dashir等著写的Enabling Blockchain Innovations with Pegged Sidechains一文。
二、扩容
比特币区块的容量大小决定了单个区块内同时可能被处理的交易数量。但由于比特币区块链的设计是冗余的分布式的存储,因此区块的大小设计就需要考虑计算资源的承受能力,包括了网络带宽、存储空间和处理器的速度。如果区块容积过大就有可能会使资源瘫痪;另外,如果区块被限得太小,交易处理过慢,则会浪费网络资源。起初,每个区块可以存储高达36 MB的数据,但之后为了平衡计算资源并且减少垃圾访问与DoS攻击的威胁,区块容积在2010年被降至1 MB。
然而,TradeBlock提供的数据显示,2015年5月平均单个区块存储的交易数据就已超过400 KB了。若数据持续上涨,交易的处理时间将被进一步延长,若用户希望自己的交易被更快处理,则需要付出更高的交易费用。当存储交易数据超过1 MB上限时,整个块的交易都可能面临被拒绝的风险,因此就提出了区块扩容的提案。
最初,区块扩容的意见是由加文·安德烈森提出的,他建议将区块扩容至20 MB,但目前仍存在较大争议。占有全球过半算力的中国矿场提出,由于中国的数据带宽还无法达到欧美的水平,因此过大的区块会导致区块孤立率大幅上升。于是比特大陆、火币、比特币中国等中国矿场公司联合声明,建议下次将区块扩容调整至8 MB而不是20 MB。
区块的扩容受到了全世界大多数比特币从业者的支持,但也存在着质疑。其中就包括了扩容后导致的交易费用下降,会使得矿工们丧失处理交易的积极性,最终仍然无法解决小区块中交易时间过长的问题。
除此之外,由于扩容之后的区块链将会提高节点对计算资源的占用,更高的带宽和CPU占用率将使更多的用户转向轻量化节点的SPV(简化支付验证),最终保持完全节点的仅剩下矿池公司。由于矿池开发的资源集中性,也最终促使比特币区块链网络向中心化发展。
2016年2月21日,来自比特币业界及开发社区的代表终于就扩容的问题首次达成以下共识。
(1)同意隔离见证会继续以软分叉的方式积极地进行开发。
(2)继续和整个比特币开发社区一同公开开发一个基于隔离见证改善之上的安全硬分叉。出席比特币圆桌会议的Bitcoin Core贡献者同意:在隔离见证发布后3个月之内,会去实现一个这样的硬分叉,作为建议提交给Bitcoin Core。
(3)这个硬分叉应该会包括一些正在技术社区讨论中的功能,包括:增加非见证数据至2 MB左右,而总体积不超过4 MB。该硬分叉只会在得到整个比特币社区广泛支持的情况下才会实行。
(4)Bitcoin Core在发布了一个包含上述硬分叉代码的版本之后,矿工们才会在生产环境中运行隔离见证。
(5)在可见的将来,矿工们只会运行和Bitcoin Core共识协议兼容的系统,这个系统未来最终会包括隔离见证和上述硬分叉。
比特币社区一直致力于开发出能够更有效地运用区块空间的扩展技术,例如Schnorr多重签名等。
基于以上内容,圆桌会议也给出了预计进程的时间节点:
2016年4月,隔离见证发布;
2016年7月,硬分叉的代码开发完成,可供使用;
2017年7月,如果能够得到社区的广泛支持,硬分叉生效。
此次共识的达成体现出了矿工与比特币核心开发者的合作态度,事实上也体现出矿工在比特币发展中的话语权逐步增加的过程。确实,比起单方面的主张,经过比特币社区各方博弈所形成的共识才符合比特币所传承的精神。
然而,从长远来看,比特币区块的扩容似乎仍然无法永久性解决问题,因此也有人提出新的区块链架构,诸如认为前文提到的侧链技术才是真正解决比特币发展的关键。下一部分内容我们将更深入地探讨比特币的核心——区块链技术。
三、闪电网络
1.初始动机
要向某人发送比特币,你就要创建一笔交易,对它进行加密签名(证明你是创建者),并通过比特币网络广播这笔交易。网络上的节点被称为“矿工”,它确认你的交易,把它打包成块,并在剩余的比特币网络上进行广播,从而确认和完成你的交易。矿工在此过程中可获得比特币作为奖励。部分奖励是来自你发起交易时需要支付的小额手续费。小额手续费和区块奖励是保证网络安全运行的经济动力。
随着比特币被逐渐接受,区块链记录的交易数也随之增长。目前,一个区块最多可容纳1 MB的交易,在理想情况下比特币可以支持每秒约10笔的交易。但实际是每秒5~7笔,而目前网络的平均负载大概是每秒3笔交易(其实上限就是实际上的平均值,因为区块创建是有概率的,它更多的是遵循泊松分布,而不是刚性的10分钟的间隔,根据所选比特币的时间间隔可以预测能够支持的更高交易数)。
如果增加区块大小,每秒的交易数上限就会提高(这要么修改比特币核心版本,要么采用XT版本),但区块扩容是有限度的。Visa在2013年时每秒峰值达47000笔交易,远超过比特币。Visa之所以能做到这一点,因为它是中心化的系统。去中心化或许是赋予比特币优势和变革潜力的属性之一,但也令它难以处理大规模的交易。
除了规模化交易有阻碍外,还有小额支付的问题。由于交易成本的存在,在以往进行小额支付是不可能的。这就是信用卡存在最低消费金额的原因。你不能使用Visa发送一分钱给别人,单独一分钱的花费是不被支持的。而小额支付具有很大的潜力,很多人都认为比特币可以发挥这方面的潜能。但问题是,根据目前的价格,比特币的交易手续费是2~3美分,远远低于现有金融系统的费用,但仍然没低到可以实现小额支付(比特币交易手续费是基于交易笔数的,而不是转账金额,这从根本上不同于现有的金融系统)。
比特币要面临的最后一个问题是零确认(或即时支付)的问题。比特币交易在数秒内传至整个全球网络,但它们只有在打包进块后才能获得确认。由于区块创建和矿工确认的随机性,这个过程有时需要花一小时左右(但通常平均约10分钟)。
解决零确认问题并非必需,比如使用信用卡完成了一笔交易,在数月后仍可被撤销,而且交易运营商有办法迅速地检测出极为罕见的双花尝试。但即使这不是必要的,若能解决则仍有价值。小额支付也并不是必须被解决的问题,因为还没有其他系统能安全地把小额支付变成现实,所以这里没有相互竞争的必要。但是实现小额支付将能开辟许多新的市场并创造价值,所以解决这个问题又是有好处的。然而规模化交易问题是必须要解决的,如果比特币无法做到这点,那么它就是失败且毫无用处的。
2.比特币和支付渠道的概述
支付渠道是解决比特币的可扩展性、小额支付和零确认问题的一种可行途径。让参与者之间直接进行交易,不通过区块链来发送交易和使用它来加密以确保信息安全,只在需要结算机制时才使用区块链。现在已经有极少数关于建立支付渠道的想法,最广为人知的就是闪电网络。
关于比特币闪电网络的设想是受目前电子金融系统运作原理的启发,目的是借鉴一切先进理念,并将其有意义的部分应用到比特币中。如图1.67所示。
图1.67
一笔比特币交易涵盖几个部分,我们做简要介绍。
· 指向先前某人向你发送的一笔比特币交易(你拥有对应私钥的地址)。
· 你发送到的比特币地址(实际上是锁定脚本)。
· 加密签名证明你“拥有”已被花费的比特币和你创建了交易。
直接向接受者发送这笔签名交易,而不是对它进行广播,这就和(传统)支付本身一样便捷。唯一的问题是,只要交易不是发生在区块链上,你就可以选择把这些比特币发送给别人。
比特币交易是极其灵活的。两个人可以决定各自把一些比特币整合成一笔进行单独交易,只有他们同时进行加密签名,这笔交易才能对外发送。这就是所谓的多重签名或Pay-to-Script-Hash,也是建立支付渠道的依据,如图1.68所示。
图1.68
如Alice和Bob希望在他们之间建立支付渠道,他们中的一人或两人要把比特币整合到一笔特殊的多重签名交易,并在网络中进行广播。然后,他们创建和签署一笔新交易,但原始的资金会最后回到他们手上,而且直至之后的某天才能使用(如30天后)。当他们彼此需要发送资金时,各自的资金余额会随之更新,同时会缩短交易可花费的时间(29天,28天……),最后,最新的交易变化会被广播到网络。
因为这些信息只会在Alice和Bob之间传送,这有助于减少发生在区块链上的交易数,从而让区块链能大规模处理交易。这也可视为即时支付,同时解决零确认问题,因为没有任何手续费,他们可进行任意面额的小额支付。唯一要考虑的是交易被广播到网络的时间,这取决于Alice和Bob什么时候关闭渠道,或者如果他们当中的一个要停止交易,如图1.69所示(此时其他人会等待最新的可被花费的交易被广播到网络,然后再向他们发送合适的比特币数额)。
图1.69
但这只是发生在两者之间。真正让支付渠道有用武之地的是比特币能将它们链接在一起。如果Alice和Bob有渠道,Bob和Carol也有渠道,然后Alice可通过Bob支付给Carol。Bob或许收取小额手续费,但这比区块链的手续费要少得多。这里我们不再详述,但在不必信任Bob的情况下可以实现这一切,只需添加一些规则就可确保完成交易,如图1.70所示。这些新规则在比特币里尚不存在,但比特币有一天可能会用到。
图1.70
如果有些参与者是渠道的“中转站”,他们和其他人建立了渠道(如银行等),那么我们会看到一个完整的支付网络,它允许某人通过此网络支付资金给任何人,而不必每次都要广播交易或者要在交易者间建立新渠道,如图1.71所示。
图1.71
3.区块链解决方案:可审查、防欺诈
系统把比特币区块链转变为定义金融关系规则的机制,然后作为程序化的审查和最终解决方案,最终减少对人为机构的依赖。区块链开始成为程序化的社会契约,在非常低的成本下维持双方之间的信任和金融互动。
支付渠道并不适合所有交易。对于大型的、一次性的交易,例如买房子或买汽车,使用正常的比特币交易就可以了。但对于来回频繁转移资金的实体,如银行等金融机构,支付渠道就可展现其魅力。当你通过多渠道允许支付时,可让消费者与银行建立支付渠道,而不再需要银行账户,给商家的支付也是通过多渠道和直接的信息传送的,这样的系统一旦建成,就会像我们今天的金融体系。现有的金融系统依赖于信任,它必须受到严格监管,以保障消费者的合法权益(今天我们的系统非常糟糕,想象一下如果没有监管,那将会怎样)。但依靠比特币的支付渠道,监管职责可以转移到区块链上,这将会是一个更加完善和透明的审查和防欺诈系统。