此前发布了DAG区块链项目SPECTRE的区块链初创企业DAG Labs在2月份正式公布了其最新扩容协议PHANTOM的技术细节,透露其将兼容智能合约,并实现了在链上区块的线性排列。据雷锋网AI金融评论了解,在由伯克利区块链主办的特币技术交流大会上,DAG Labs的首席科学家、GHOST协议的共同作者Yonatan Sompolinsky为在场听众详细介绍了DAG应用区块链网络遇到的具体技术挑战,并讲解了SPRECTRE项目针对区块链交易的扩展性、安全性的解决方案和基础参数调整。
首先需要明白,区块链是新生的事物。如果你有一个系统,要改善扩展区块链的性能,在SPECTRE项目上应用DAG(Directed Acyclic Graph,有向无环图)能很好地实现这一点。
如图片所示,首先引出两个问题。首先,目前区块链中的交易是怎么样的?大家可以想象在银行排队办理业务的情景,用户们一个接着一个按序列排好等待,只有当上一个用户完成交易后下一个用户才能开始行动,通过这样的方式来保证整个区块链的一致性和贯彻性。当有过多需要办理业务的用户挤进银行后,交易堵塞的情况就会变得越来越严重。
出于加快交易处理速率的考虑,节省用户在等待交易时耗费的时间,DAG的设计能实现这样性能的优化。对于这批涌进银行等待交易的用户,无论他们手持现金还是办理银行卡业务,DAG网络不再进行分类,使他们分成一行行排队等待,而是加速去为他们办理业务。如果发生交易冲突,DAG网络会先记录在案,在处理完所有用户的交易后再对出现的冲突进行处置,从整体上加快整批用户的交易速率。DAG网络通过这样的安排来取代传统排序方式的区块链,由此推广为DAG应用区块链的日常。
通常从技术层面来说,在一个分布式的系统里,开发人员都遵循着“CAP”定理来进行开发和维护,它们分别是上述提到的一致性、可用性和隔离性。在以往的区块链中,首先需要注意的因素即为一致性,分布式账本需要一致,上链后的交易信息要保持一致,创建以区块,它里面包含的信息必须要和以往的历史信息保持一致,整个系统都要设计为尽力维持这个特性。这就是为什么会出现之前图中看到的,在银行排队等待信息同步的情况。DAG区块链网络则更为注重可用性,保证每个用户都能在这个网络上面完成交易。
DAG应用区块链的技术挑战:区块混乱生成导致交易冲突
在现在,比特币的交易速度约为3-7笔每秒,那么什么时候才能到达每秒过千笔的交易速度呢?要实现这样的交易性能,需要对现有的区块链系统做出什么改造?我们需要先对区块链的技术局限有所了解。首先,让我们来看看在一个包含十个区块的区块链系统简化图,每秒的交易流程是什么样的。如图所示,在每个区块里储存的信息都会被导向下一个生成的连接着的区块,每个分支都导向最初的创世区块,使得信息可追溯,从而形成一条条“树杈”。
而在DAG应用区块链的网络中,每一个区块都有相邻的区块可参照,关注其中一个区块,可以发现其能与其他区块相连打通,体现了高度的可用性,但与此同时,区块之间打通之后,挖矿行为将由于发生频繁有可能导致更多的硬分叉,一致性将遭到挑战。同时更为严重的是:区块不再遵循序列来排列之后,在各区块里的交易冲突事件将会大幅提升,比如双花问题(double spending)。
特别地,针对这些问题,在DAG网络中的挖矿协议里形成了两条共识原则:规则1,每个新增的区块的诞生,都必须以过往的全部区块作为参照;规则2,所有区块生成的交易信息都必须在第一时间公布。
这样一套DAG结合区块链的系统,暴露出来的最大缺点在哪?交易的监管是一个大问题。如图所示,比如用户在某一个区块里发生交易之后,有矿工想进行挖矿时,其交易信息很快就会被公布到整个区块链,许多矿工都会很快求得挖矿结果,冲突累积得非常之快。所以最主要的挑战在于,在这样的DAG网络曲线图里,通过参考之前的区块生成区块之后,如何保证新生成的区块包含信息的一致性,及随之而来在交易中产生的大量冲突?
如何分辨抓住针对这个区块链网络发起的攻击也是一个难题,比如前面提到的双花问题。当交易发生后,两个矿工同时挖出结果的几率很大,谁获得交易费用的奖励?还有,如何计算不同矿工的工作量证明?另外存储问题也突出的非常严重,如果实现了每秒过千笔交易,产生的交易信息数据量将会巨大。还有许多其他随之而产生的问题,但其中最为重要需要解决的首要问题还是一致性。
如何针对这些问题研发解决方案?根据前面描述的DAG结合区块链网络应用的困境,证明了其只是一个应用模型,它本身是一个数据结构框架,而非现成的解决方案,具体DAG应用区块链网络的案例有好有坏。那么该如何制作一个性能优异的DAG应用区块链网络的协议?首先在一个复杂的区块链环境中,区块呈链条、分支状结构排列,很难找到隐藏其中属于攻击者的区块,但它会干扰生成正确的区块,并会拖慢整个区块链环境的速度。所以一个好的DAG应用区块链的协议,首先需要做到易于分辨找到这些攻击区块。
建立一个DAG应用区块链的协议,第一原则是命令每个区块按照给定次序排列,以此来得到一致性。如前面显示的这些区块,只有给出排列次序后,用户才会明白哪个是创世区块,哪个接在上个区块之后,哪个区块的交易是优先处理,才能实现追溯和保持数据的一致性。
由此我们从DAG应用区块链的模型进入到具体的解决方案案例分析。在SPECTRE协议背后,有一个信息投票机制的考量设计。试想象一下,在一条区块链上为许多杰出运动员投票,选出最佳,这就意味着用户需要选出一个优胜者,舍弃其他所有剩下的。这就像是在一个社区里面,投票的人互相告知自己最喜爱的运动员是哪个,要为哪位运动员投票。我们称之为“单一赢家投票模式系统”(single winner vote system)。
但在这套系统里面,只是凭借最为多数的投票量选出唯一一个优胜者,而无法对所有候选的运动员做出排名。在一个多胜者投票系统(multi-winner voting system)里,用户可以对所有候选运动员进行投票,分出名次。由此系统可以整合用户对所有投票对象的偏好信息,扩展补充了这些信息量。
回到甄别攻击区块的问题上,如图中所示,我们可以将区块与区块之间看成是彼此竞争的存在,但针对红色的这条独立于主链的链条,区块之间共享所有的信息后也无法得知这条独立链条的存在,所以这条隐藏的孤链有小概率的可能在生成区块的过程中变成较长的一条,从而夺得对整个区块链网络的控制。
SPECTRE投票机制辨别攻击
为了防止这种情况,在SPECTRE的DAG区块链网络协议中,我们采用了全体用户投票的机制,来形成整个网络的架构。具体到每个区块的生成次序,用户可以在Z区块上决定X区块和Y区块的生成次序,矿工没有投票权,只需遵循这样的顺序进行挖掘,去按照算法推导计算Y区块在X区块之后生成的逻辑过程,防止其出于牟利而主导控制整片区块链网络的生成。当指定了具体的投票机制生成区块后,在每个区块上的投票汇集成大多数用户的意见,由此来决定整个区块链网络的生成次序。
图中新生产的区块,它来源于X区块群和Y区块群共同投票的结果,根据多数原则,新的区块紧跟在X区块链后生成。蓝色的Z区块群只承载了X区块的信息,没有参考Y区块链,这意味着,对于蓝色Z区块而言,Y区块链属于隐藏状态,没有办法得知它的存在。
这是一个主观的观点,同样的,对于连接在Y区块链之后的红色Z区块群,由于没有参考X区块的信息,也没办法知道X区块群的存在。所以,图中这个黄色区块生成的时候,通过参考相邻的区块可以得知,它是一个属于X的区块。依次类推下去,根据投票机制最终推导出全部区块的归属,从而确定整个区块链网络的架构。可以看到,Y区块链没有参考任何可信的区块节点,实现针对这个区块链网络的双花攻击辨别。
所以我们可以总结出来,和一开始提到的其他DAG应用区块链网络相比,SPECTRE的网络架构设计安全性有了很大的提升,原因在于在这样的机制下,正常用户生成区块之后,攻击者的区块不可能占大多数的区块来发起攻击,可信的区块永远优于有问题的可疑区块,杜绝了51%攻击的可能性,同时实现了整个网络极高的可用性。这样的设计保证了,在一秒生成十个甚至过百个区块的前提下,在网络上包括的可信区块在内的所有区块,不会缺乏排序指令而互相散乱连接,从而导致开始提到的种种引起混乱的安全性问题。
用户在链上,什么时候应该公布他们的交易?在区块里,公布交易到整个网络的速度会有数百秒的延迟,然后快速广播到公网上,如果发生了由于双花现象引起的交易冲突,在投票机制下会发生无限延迟的情况。X区块群之所以优于Y区块群能成为主链,在于全体用户投票生成区块的机制,而如果X和Y同时公布交易,系统可能将无法即时判断作出决定。但这样只会伤害到攻击者本身,无法对系统造成损失。作为一个可信区块,其根据序列承载上个区块信息生成,不会与相邻区块发生连接,故不会出现双花问题。
区块带宽调整保证交易性能
在保证安全性的基础上,整个区块链网络展现出高扩展性。那么,在这个网络上实现每秒过千笔交易的性能,会遇到哪些限制?首要的局限性体现在带宽上。如果每秒不限制地生成过百个区块,太多的区块生成累积将会超出承载,没有办法解决任何问题。而是需要根据不同的目标交易量的设置,来确定不同类型区块的最小带宽。举个例子,为了实现一万TPS的交易性能,SPECTRE调整每秒五MB的带宽,每秒生成十个零点五MB规模的区块。
区块的带宽限制和交易频率存在着扩展性和追求去中心化的取舍关系:降低区块的带宽能允许更多的用户参与,有利于去中心化的趋势发展,但却会使交易频率受影响,如何在它们之间保持平衡是需要重点考虑的问题。试着想象,假如将区块的最低带宽调整到两MB每秒,那么每秒能处理的交易额远远达不到一万笔,系统可能会被拥堵的交易淹没。所以在设计区块链网络时,不能出于单纯提高更多用户的参与度的考虑,任意改变区块的带宽和基础参数的设置,这会影响到整个区块链网络的运营和目标交易性能。
另一个限制是数据储存的问题。如果以每秒产生一MB的信息计算,每天将会生成八十六GB的数据量。在SPECTRE区块链网络上,不可能将所有的数据都储存上链,这样才是合理的选择。因此,我们提出了一个名为“检查点运转”(rolling checkpoints)的数据储存解决方案。在每天的挖矿工作结束后,面对数百个生成的全新区块,SPECTRE会将此前发生的交易数据信息储存在一个固定的中心化节点,供整个区块链网络定期检查更新。
这需要用户对系统提交信任,相信此前其储存的信息没有遗漏错误,或者篡改的情况。在这种情况下,储存数据的中心节点需要验证演示储存数据的真实性以保证无误。同样,在去中心化的数据储存和系统性能之间,我们必须找到不停寻找更好的办法来达到平衡。
DAG网络中的分层框架:应用层和数据层的相互隔离
从当前来看,在分层结构的区块链网络治理中,矿工是非常重要的因素,可以影响协议更新、激励机制,还能觉得交易的有效性。假设现在需要购买集装箱的储存服务,只能通过经济激励的手段来号召工人来提供货物的搬运储存服务。与其相类似,在区块链数据层上的矿工服从于工作量证明的共识机制,在验证支付的奖励是正确的之后,才会继续进行下一项挖矿工作。没有完善的激励和奖惩机制,矿工将有可能随意处置用户的交易信息,可能会在公网广播公布,也可能会将正确发生的交易处理为无效交易。
在SPECTRE的分层结构中,应用层和数据层相互隔离。在数据层上,矿工只负责收集交易数据,确保这些数据代表了有效发生的交易,来形成一个可追溯的不可篡改的共享数据库。而在应用层上,需要生成分布式账本来体现数据,解释每一笔交易的来龙去脉,由于不同的应用遵循着不同的交易逻辑,在DAG网络中还要接入智能合约等不同的交易系统来实现执行,并最终生成交易数据以验证矿工的工作结果。
原文发布时间为:2018-02-11
本文作者:吴阳煜
本文来源:雷锋网,如需转载请联系原作者。