区块链DAG架构设计
1. 概述
最早的GHOST协议作为比特币的交易处理能力扩容解决方案;Vitalik在以太坊紫皮书描述的POS共识协议Casper,也是基于GHOST POW协议的POS变种。后来有人提出用DAG的拓扑结构来存储区块,改变区块的链式存储结构,变成DAG的网状拓扑可以并发写入。在区块打包时间不变的情况下,网络中可以并行打包N个区块,网络中的交易就可以容纳N倍。
两种同步策略
1. 同步持久化策略
2. 异步持久化策略:一致性不可控
2. IOTA
Tangle是一种革命性的新型无区块分布式分类帐,在IOTA体系中转账无需手续费,交易速度快。但是由于异步通信以及链结构的问题, 一些交易可能迟迟得不到验证,并且随着网络的增大可用性会降低。IOTA体系中没有区块的概念,交易的验证都是通过网络其他交易发起者进行验证的。IOTA网络中想要发起交易必须为网络贡献交易验证从而使网络能够持续运行。
IOTA区块拓扑图发起交易基本上需要三步:
1. 构建交易集和输入签名
2. 找到两个没有确认过的交易,验证其有效性
3. 为交易集中的每笔交易做少量的PoW(抵御女巫攻击和批量交易攻击)
在IOTA系统中,网络中的每位参与者都能进行交易并且积极参与共识。更具体点说,你直接定位了两笔交易(主交易和分支交易),且间接在子tangle中定位其它交易。通过这种方式,验证就能同步进行,网络能够保持完全去中心化,不需要矿工传递信任,也不需要支付交易手续费。
IOTA通过引入中心化的Validation对交易进行最终确认,只有Validation确认过的交易才算确认成功。Validation代码没有开源,没有具体细节。一些人认为Validation如果撤销,仅靠IOTA本身的共识很难保证安全。
3. byteball
Byteball中没有区块的概念,也没有区块容量的问题。相反,每一个新的交易都通过包含和签名它们的哈希来参考更早(父母交易)的一个或几个交易。交易中的链接形成了一个DAG(有向无环图)
Byteball区块拓扑图Byteball引入(12个)见证人和主链来达成共识,从而对交易进行排序。凡是被超过一半见证人直接或间接确认的单元视为合法单元。主链是沿着子-父链接到一个单链,可以把所有单元都关联到一起。从如何一个顶点开始都可以构造一个主链,以相同规则在两个不同的顶点选择主链,两条主链一旦相交会在之后完全重合,重合部分称为稳定主链。所有单元要么在稳定主链上,要不从稳定主链沿着DAG通过少量跳跃可以到达。
给每个直接位于主链上的单元做索引,沿着主链序号递增。对于不在主链的单元,赋值为第一个直接或者间接引用该单元的主链单元。拥有较小的编号的单元被认为是更早生成的,发生冲突时较小的单元有效。
当获得新单元时,每个节点会持续追踪自身的主链(MC),由于网络延迟,每个节点的主链可能会不一样。但是MC中足够老的部分会保持不变,未来回溯时会回溯到某个单元,这个单元及其之前的所有MC单元都是稳定的,随着新单元的不断加入,稳定点的扩展方式一致,所有节点达成共识(Byteball用数学证明了这个结论)。稳定点扩展的本质是在当前稳定点的某一条子链的路径上出现了超过一半的见证人(最优父单元选择算法),就可以确定稳定点能够朝着当前子链扩展。
4、HashGraph
HashGraph 则是有向无环图(DAG)的一种,采用柱状的交易事件排序机制。HashGraph共识的目的就是在各个节点的本地将这样一个有向无环图中各个顶点进行排序。
HashGraph区块拓扑图Gossip about Gossip:本质上意味着向本次传播附加一些额外的信息,即两者之间互相通信传播内容的两个哈希。通过使用这些信息,就可以创建Hashgraph。例如上图最下方,E收到B的消息之后,创建新的event E2,然后将E1和E2(E所知道的且C没有的所有数据)同时发送给随机选择的C,此时C生成一个新的event C2。随着时间的推移就会生成上图的形状。
Virtual Voting:节点并不需要发送实际投票。每个节点本地存有一张Hashgraph。如果两个节点的Hashgraph相同,就能用同样的方法计算出所有event的排序。随着时间的推移,时间较老的event就会达成一致。Hashgraph节约了带宽并且无需工作量证明即可实现共识。
具体细节概念不展开。
5、Conflux
Conflux共识机制以及实验数据是在比特币源代码框架下实现,沿用比特币的POW机制。Conflux 的理念设计是可以容许不同区块同时生成,并运用基于DAG概念的排序算法来避免分叉的问题。利用GHOST协议不通过最长链来选main chain,而是选拥有子树区块最多的那条链。不同于之前先确定交易顺序,再确定区块顺序的设计思路,conflux是先把区块顺序算出来,再决定要保留哪些交易。
Conflux区块拓扑图1)乐观地处理并发块
2)将块组织成有向无环图(DAG)
3)首先同意所有块的所有交易(假设交易不会相互冲突)
4)然后从约定的块顺序派生交易订单(懒惰地解决交易冲突)
具体细节概念不展开。
6、需要注意的问题:
1. 同步通信/异步通信
异步通信导致的交易时长不可控。
2. 节点一致性
异步通信导致节点间账本的不一致性。
3. 女巫攻击和影子链
DAG允许并行交易的特性导致攻击者可能暗中生成影子链进行攻击。交易免手续费容易导致女巫攻击。
4. 智能合约
不存在全局排序机制,导致系统支持的操作类型受限,难以实现图灵完备的智能合约体系。需要一个机构确保智能合约的运行,主链和Coordinator实现类似的效果。
DAG异步通信在运行智能合约时,节点间可能会出现偏差。
5. 网络传输数据量
DAG结构在全网N个节点时,每一个消息都需要在设备间进行点对点通信,共需要N*N次数据发送。大量节点接入后,网络传输数据量会出现大幅增长