【技术解读】提速——区块链的横向扩展(2)


      接上篇《提速——区块链的横向扩展(1)》


    【有向无环图】

      DAG 是有向无环图(Directed Acyclic Graph)的缩写,这是一种有顶点和边的图结构。它可以保证从一个顶点沿着若干边前进(有向),但永远不能回到原点(无环)。在IOTA这个项目中,提到的Tangle(缠结)就属于DAG的一种数据结构,真正意义上讲,IOTA已不属于“区块链”,你可以理解为如果比特币、以太坊使用的是底层数据结构是BlockChain,而IOTA的底层数据结构则是DAG,但它依然属于“去中心化”的范畴。

      让我们回顾一下这张图:




       有向无环图(Tangle)在 IOTA 里发起一笔交易的流程如下:你需要先找到网络里的两笔交易,验证它们的合法性,然后做微量的POW计算,把自己的交易与它们绑定,再广播到网络。你的交易会被后来的交易以相同的方式验证。如果验证你交易的其他交易越多,则你的交易的确定性越高。当达到一个临界值时,就认为这个交易被确定了,这和比特币6个区块确定交易状态的思想一致。简单来说,IOTA是把算力作为交易的一部分。只要你想加入这个网络,那必须先成为Mini版矿工,做出微量的POW贡献,也因此它是去中心化的。DAG的优势可以做到高并发,理论上是无限多的并发,意味着它可以大幅提升交易速度。


      有向无环图(Direct Acyclic Graph或DAG)是近些年来区块链项目的技术热点之一。许多业内人士认为,这项技术有可能在根本上解决区块链的扩容问题,因此相关的项目都有较高的热度。然而,由于其更高的技术门槛和开发难度,采用这项技术的区块链项目仍为少数,在国内更是凤毛麟角。


      传统的线性架构的区块链,在维持良好的多中心化与安全性的前提下,在底层上的吞吐容量有根本的瓶颈问题。因此这些区块链项目的扩容方案,一种是以牺牲多中心化的记账方式来换取整个链的吞吐容量,一种是依赖侧链、分片等第二层(Layer 2)技术来处理小额交易。要根本性地获得更好的底层链效率,需要采取与完全不同的架构。DAG就是较被看好的潜在挑战者。DAG相对于传统线性区块链的优势是非常明显的,主要在于可延展性和交易吞吐量上。


      可延展性:由于采取DAG的数据结构的话,每个节点不需要再等其它节点的数据达到统一就可以处理新的交易,避免了因网络延迟和数据同步造成的时间浪费。因此,参与DAG记账的节点很容易大幅延展。因此,DAG非常适合IoT一类设备非常多且网络状况往往不稳定的应用。相比之下,在线性区块链系统中,节点一旦碰到通信延迟而数据不统一,就无法参与下一次区块的生成,甚至在极端情况下有网络分叉的危险。


      交易吞吐量:此外,DAG的尾端可以平行增加任意多的新数据,因此天生具有很强的交易吞吐量。这一点更是完胜线性区块链线性区块链每次只能增加一个区块大小的数据量,所以可以处理的交易量是很难改变的。


      DAG的主要安全问题有:


      双花:DAG异步处理数据的特征导致攻击者可能利用节点间的信息差进行双花。具体来说,如果两个顶点间没有明确的父子关系,攻击者可以分别在只看到这两个顶点中的一个的不同节点处,对同一笔存款进行双花。这种双花只有在同时看到两个区块的节点处才能被检测到,并且只有在两个顶点重新汇合到一个新顶点时才能最终判定哪一笔是双花。为了防止这种双花的发生,需要额外通过制定更周密的双花检测规则。


      影子链攻击:DAG允许多重并行交易的特征,导致攻击者可能暗中生成一条影子链,并且时不时地将影子链跟主链进行对接以逃避检测算法。极端情况下,这条影子链有可能代替主链成为全网的共识。


      虽然DAG的缺点明显,但由于DAG高并发、异步的特征,非常适合IoT类应用,许多IoT类项目都会偏爱DAG架构。IOTA就是以处理机器间小额高频交易为应用场景。另一方面,IoT设备一般不具备PoW挖矿所需的算力,因此PoS/DPoS+DAG或者BFT+DAG更有可能成为未来DAG项目的共识机制。

 

    【多链】

      多链,即抛弃了“一链治所有”的传统方案,采用“多链分而治之”的新方案重新设计了一个保障每个合约都能正常运行的公链。这一创新极大程度上简化了架构,降低了数据处理压力,确保一条链上流量激增不会影响到另一条链的效率,在链上进行的任何业务都不会收到其他业务干扰,有效实现了资源隔离。


      区块链的互操作性本身就是一些应用的基础需求。想象一个理财应用,用户可以用某项资产交换不同机构的理财产品,不同的资产就需要在多条链上做转移、交换。还有一些ORACLE应用同样需要多链间的跨链喂入交互,譬如汇率牌价、天气、股价、特定指标等等。区块链的某些应用在单链上无法完整实现,需要在多链架构下的可扩展性、隔离性、高性能、互操作等特性的帮助下实现。


      在EKT中Token链是一个并行多链的结构,多链多共识,共享用户基础。EKT的token是链上的一个属性,就像使用了utxo模型的链utxo有其他token一样,我们的转账事件也是内置的。

      EKT的中心思想是设计一个社区的机制,让开发者可以轻易的开发一个DAPP,其他的交给EKT来处理, EKT 的“一链一主币,多链多共识”的机制为后来的区块链项目开发提供了很大的便利,可以使用于任何区块链适用的应用场景。 EKT 提供了一套底层的区块链机制,其他的区块链项目可以很容易的基于 EKT 的主链代码部署一套自己的主链。在EKT上编写的区块链项目将无需过于担心安全性问题,因为每一个接口都是非常简单并且在许多条并行主链上部署和运行的。部署主链时可以灵活的发行自己主链的代币以及选择共识算法。新部署的主链也可以加入到 EKT 通用积分的整个生态,共享 EKT 生态的用户资源,代币也可以和EKT 主币以及其他主链的代币进行交换和流通。


      在EKT中,我们使用公私钥加密和路由策略的机制实现拜占庭容错,EKT主链上每个DPoS节点的公钥都是公开的。这是一种兼顾效率、安全和去中心化的解决方案。Token现在一般被定义成一个智能合约,但如果把它变成一个预先定义好事件的“对象”,这个“对象”可以有自己的参数(比如总量、共识机制等等),则会带来更好的安全体验。接受token的地址可以有两种:普通的用户地址和合约地址,合约地址收到token之后可以执行非图灵完备的合约语言,进行简单的状态计算和token转移。EKT把Token链和DApp链分开,将来在很大程度上能规避之前说到的分片,和offchain遇到的困境。


      以上就是我对区块链共识机制的一些思考,和一些在设计EKT的多链多共识时对横向扩展的考虑。欢迎大家提出疑问,共同探讨。


 

    【结语】

      以上就是关于可扩展性相关技术的一些简单概括和介绍,实际应用的技术细节和命名方式可能会有很多,但从目前来看,大体都脱离不了off-chain、sharding、DAG、multi-chain四类的范畴。从目前来看,无论何种技术的解决方式都是在从“更高的效率”和“去中心化”二者之间寻找一个平衡,想要效率就要中心化,想要安全就要去中心化,也因此,现有解决方案也都在引发一些“不是去中心化”的质疑声。


      其中争论最激烈的就是比特币Core派和BCH派之间,Core派的解决方案是侧链,BCH就抨击侧链最终会沦为中心化的银行。BCH的解决方案是大区块,Core派就抨击BCH本身就是以矿霸为核心的中心化代表。有争论才有突破,意味着问题本身就还没有唯一的答案。这反而证明了我们正处于一个区块链刚刚起步发展的黄金时代,也是区块链现阶段的魅力所在,百家争鸣、各抒己见……投身此间,我倍感庆幸。


      公链是区块链发展的前提基础,也是区块链行业未来发展的核心保障。而目前区块链的发展现状是,底层公链的性能尚未发展起来,在其上构建的各类DAPP严重受限于性能,各种共识算法都有不完美之处。无论是O(N^2)的BFT算法还是O(N)的改进算法(包括POW和POS和一些牺牲一定条件的改进BFT算法,scalability都总是存在一个瓶颈上限。我相信,虽然scale-out的off-chain、sharding、DAG、multi-chain都还远说不上完美,但这应该是区块链无限扩展性能的正确方向。

 

参考阅读:

20161019 论比特币系统的共识规则

20170119 区块链 - 比特币的决共识机制

20170223 区块链共识机制浅谈

20170723 拜占庭容错(BFT)算法介绍

20170821 Is there any link between Bitcoin's PoW and BFT?

20171213 到底什么是分片技术?

20180327 分片技术(sharding)——区块链扩容问题的良方

20180414详解“多链多共识”机制

《BTC whitepaper》

《Ethereum whitepaper》

《EKT whitepaper》

《EOS whitepaper》



END


今天关于区块链提速2的文章就这里

如果有任何技术上的问题想与我讨论

欢迎加入EKT公链开发QQ群:699726921

项目交流QQ群:173806202

欢迎关注微信公众号:EKT通用积分



猜你喜欢

转载自blog.csdn.net/weixin_42120252/article/details/80818198