前言
DAG概念,当做继比特币,以太坊后新的一代区块链技术(区块链3.0),那么DAG区块链是什么?DAG的由来是什么?它的技术理念是怎么样的?运行在DAG区块链上的协议有哪些?
要想解释DAG,离不开Yonatan Sompolinsky 和 Aviv Zohar两位以色列人,他们是DAG区块链这一概念的提出者。在DAG之前,Aviv Zohar提出了一个GHOST协议(以太坊初期就采用了GHOST协议),该协议解决的是链分叉带来的安全性问题,而分叉的区块链 在GHOST协议下数据结构就从一条链变成了一个树(Tree),而之后Aviv Zohar进一步提出了一个inclusive协议,在inclusive协议规则下,区块的结构就变成了有向无环图(DAG)。
接下来本文将:
1.介绍GHOST协议,DAG由来背后的设计原理
2.介绍三种针对DAG型区块链设计的协议,SPECTRE、PHANTOM和CONFLUX。
GHOST协议
GHOST协议是为了解决分叉导致链安全性降低的一个协议。
下边将通过解释什么是分叉,为什么分叉会降低链的安全性,链上扩容为什么会导致更多分叉来详细介绍GHOST协议。
区块链一定会产生分叉
一笔比特币交易为什么要等6个区块的交易时长呢?
等待不是为了防范51%攻击的。落后6个区块,如果拥有超过51%的算力,只要足够长的时间,一定能够产生更长的链完成攻击。它是为了防止分叉带来的风险。
比特币在理想情况下,不同节点之间有相同的一条区块链,全部节点都是基于同一个区块进行挖矿,但当两个挖矿节点几乎同时挖到一个新的区块,当它们接收到对方产生的区块时,不同的节点将选择基于其中一个区块挖矿,分叉产生了。之后节点会根据哪条分叉更长,选择哪条是主链进行挖矿,而不是主链的分叉区块全部被抛弃。
比特币每天都会发生二分叉,但出现连续的六次分叉几乎不可能,于是要等待6个区块的确认时间。(这种分叉不是来自恶意攻击,是偶然性以及网络延迟导致的。
比特币安全性低于51%
分叉将‘攻击不超过51%算力,比特币就是安全的’这一理论推翻。
在比特币中,当链有分叉时,将选择分叉最长的链作为主链,恶意攻击就是产生一条比主链更长的链代替主链。
下图中蓝色区块代表诚实区块,红色代表攻击区块。2号、3号蓝色区块产生分叉,此时攻击节点产生5个攻击区块(红色)就能产生一条更长的链完成攻击。虽然蓝色区块总数更多(有6个),但分叉的区块没有增加链的长度,这种情况下,红色攻击方在算力(假设每个区块代表算力相同)没有超过51%的情况下攻击成功。
比特币当前安全的原因在于10分钟的区块时间降低了分叉可能性,但其实际安全算力仍低于51%,也就是说,不需要51%的算力也能攻击成功。
链上扩容会带来更多分叉
采用大区块以及小的产出时间将导致链有很多分叉。
比特币当前处理交易量很低,改进这个缺陷一个可行方法就是增大区块的大小和减小区块的产出时间。大区块需要更多的网络传输时间、单位时间更多的区块数都会导致更多的分叉。
链上扩容的方案对比特币处理交易能力提升是巨大的,假如每个区块大小变为原来的八倍(8M),出块时间缩短为原来的五分之一(2分钟),理想情况下,比特币的处理交易量将变为原来的40倍,实际情况会产生分叉,交易量不会有这么高。
GHOST核心规则
主链选择中,采用计算最大子树来代替比特币中的最长链规则。
比特币的最长链规则在有分叉情况下,将降低链的安全性,分叉越多,安全性越低。链上扩容将导致更多分叉,导致链不安全。
Yonatan Sompolinsky提出GHOST规则,当有分叉时,通过计算最大子树,也就是每条分叉拥有的所有区块数来决定哪条链是主链。图0中,链在区块0后分叉了,上边分叉总计有6个蓝色区块,下边分叉有5个红色区块,蓝色区块1是主链,所以红色攻击失败。
在有大量分叉的情况下,GHOST规则将链安全性直接提到了51%,分叉对采用GHOST协议的链安全性没有影响。
根据GHOST规则,上图中虽然诚实节点产生了12个区块,但加入主链的只有4个区块,大量区块被丢弃,假定比特币每个区块大小变为原来的八倍(8M),出块时间缩短为原来的十分之一(1分钟),分叉率为0.33(产生的区块加入主链的概率),比特币的处理交易能力将变为原来的26.6倍。
GHOST协议解决了链上扩容导致分叉带来的安全性问题。
区块的结构类型就从一条链变为树
在GHOST的提出后,Yonatan Sompolinsky提出一种新的设想,新产生的区块指向所有已知的分叉末端区块,即一个区块有多个父亲,此时区块链就从一条链变为多条分叉链共同组成的的结构,这样的链结构就被叫做DAG(有向无环图)。
Yonatan Sompolinsky进而提出了在DAG上运行的inclusive协议,原理如下:
- 用比特币的最长链原则或GHOST原则找到一个DAG的主链
- 根据后序遍历算法对DAG排序,结合主链的排序,最终形成一个所有区块的线性排序
- 根据排序结果,依次提取区块交易信息,产生无冲突交易集
遗憾的是,Yonatan Sompolinsky之后并没有详细介绍补充该协议,而是提出了一种新思路的DAG协议——SPECTRE。
看完上边内容之后,你会发现,最长链规则下,分叉的区块对比特币安全性和交易量没有任何贡献,白白的浪费了算力,而GHOST通过计算分叉区块个数来提升链的安全性,但分叉区块除了纳入区块计数外,区块内包含的交易信息却全部被丢弃。
这种新的区块结构带来了新的特性,当然,比特币的最长链规则也可以在DAG上实施,只不过安全性和处理交易能力不佳,而GHOST协议可以提高安全性和处理交易能力,为了最大化利用DAG区块链特性,社区提出了不同的协议,接下来介绍Yonatan Sompolinsky 提出的SPECTRE协议,以及PHANTOM协议,以及国内某社区提出的CONFLUX协议。
SPECTRE协议
丢弃主链概念,所有产生的区块共同构成账本,不丢弃任何一个区块
只要是产生的区块就不会被丢弃,所有的区块都是有效的,所有区块共同组成账本,这样进一步提高了区块链的处理交易能力,该设计的关键在于设计算法来保证区块链不会被恶意攻击成功。
SPECTRE协议较为复杂,下边将从其如何产生区块、如何处理冲突交易以及产生可信交易集三个方面进行描述。
SPECTRE——挖矿
SPECTRE协议中,当产生区块时,要指向之前所有分叉的末端区块。
下图中,左边为比特币产生区块时,当有分叉出现,新区块将选择基于其中一个产生新的区块,而SPECTRE中,将基于所有分叉末端区块产生新的区块。同时,当有新区块产生时,节点要立刻将新区块(包含基于哪些区块产生这一信息)发送给与自己相连接的节点。
仔细观察,GHOST协议中虽然有分叉,但每个区块都只基于前边某一个区块产生,而SPECTRE协议中要基于当前节点知道的所有末端区块产生下一个区块。
SPECTRE协议将矿工维持交易不冲突的要求剥除
比特币就像一本权威的账本,只要是里边记录的,就一定是真的(不考虑分叉和恶意攻击),而SPECTRE产生的DAG就像一本不权威账本,里边的交易信息可能冲突(上边图1中两个1区块中可能包含冲突交易信息)。
该协议下,挖矿节点只负责迅速挖区块(能够达到1秒一个区块),而对分叉中可能包含的冲突交易在挖矿阶段并不做任何处理,将记录交易速度最大化,让DAG这种区块链有着恐怖的处理交易能力。
SPECTRE——冲突解决
是时候解决挖矿不解决的冲突交易问题了,SPECTRE的思路是设计一个计算投票的算法,让诚实区块会投票给诚实的区块,后边的诚实区块会给前边的堆叠算力,从而让恶意攻击失败,其安全算力也是51%。
拿双花举例,下图中,X和Y区块中包含着两条冲突交易会导致双花,此时DAG中的区块会对X和Y进行投票,决定哪一个交易有效。
投票规则如下,投X的标蓝,投Y的标红,X<Y代表X先于Y:
- X后边的,只能到X的投X,图中6、7、8投X,同理9、10、11投Y。
- X后边的,能到X也能到Y,根据上一次(图中虚线圈内)的投票结果投,12投X。
- 不在X、Y后边的,根据自己后边所有的区块投哪个票多的投,1-5区块投X
- X、Y投自己
根据投票结果,X中的那条交易信息有效,Y中对应的那条交易信息无效。 Yonatan Sompolinsky也对不指向前边区块以及产生区块不发给邻居节点的恶意攻击有进行分析,在投票规则中,低于50%算力的攻击者会失败。
投票听起来像是一个主动地中心化行为,实际上不是,程序根据当前DAG区块所处的状态自发完成这一区块投票计算过程,就相当于,给定一个DAG数据,输入为两条冲突信息,运行该规则算法,将得出一对冲突交易的哪一个为有效。
SPECTRE——产生可信交易集
SPECTRE可信交易集就相当于超过当前6个区块的比特币链里组成的交易集合。 区块链从数字加密货币的角度来说,就是一个账本,从账本上的交易信息中得出每个账户所拥有的货币,所以,得出确定的、不可能更改的交易信息就至关重要,SPECTRE可信交易集产生过程如下:
- 遍历区块,依次提取交易信息,无冲突交易加入无冲突交易集。
- 将导致账户余额不足的冲突交易加入冲突交易集。
- 根据上边的投票算法,依次对冲突交易进行投票,产生冲突区块顺序集,决定哪一条交易有效。
- 将投票有效的交易加入无冲突交易集。
- 将无冲突交易集中超过一定时间的交易组建可信交易集,即该交易池交易信息基本不可能被篡改。
SPECTRE并不会对所有区块进行排序,所有区块没有一个完整的线形顺序,有的只是决定冲突信息先后的区块顺序对。
比特币中的高度代表的就是线形顺序,高度低的区块中交易信息先于高度高的区块里的信息,高度高的区块就不能包含和高度低的区块冲突的交易,而SPECTRE有大量的分叉,区块高度不能代表线形顺序,前边的区块交易信息不一定先于后边的分叉区块交易信息,交易信息的有效性要由投票算法来决定,区块投票算法很快,再加上它将所有分叉区块都包含进来,也就没有了比特币所面临的分叉风险(等待6个区块),交易确认时间可以达到10秒。
至此,和比特币相比,SPECTRE对应的DAG区块链有三个特点:
- 恐怖的交易处理能力
- 极短的交易确认时间
- 实际的51%安全算力
SPECTRE协议非常适合DAG型数字加密货币,但当它用于智能合约时,它的缺陷就出来了,智能合约需要一个严格的线性顺序,对此Yonatan Sompolinsky新设计了PHANTOM协议来对DAG区块形成一个线性顺序,下边将详细介绍PHANTOM协议。
SPECTRE和PHANTOM是两个完整的独立的协议,不是一个对另一个的补充。
PHANTOM协议
PHANTOM的挖矿机制和SPECTRE一样,会产生同样类型的DAG,不同的是PHANTOM通过对区块连通度分析,判定区块诚实还是恶意,按照分类对区块排序,对DAG区块产生一个严格的线性顺序,通过线性顺序来判断冲突交易有效性。
区块连通度
DAG中,攻击者有两种攻击手段,一产生的区块不基于已知的末端区块,二不立即发布自己产生的区块,前者会让自己区块指向的区块变少,后者让其他节点产生的区块不会指向自己的区块,这两种情况都会导致这些恶意区块的与其它区块的连接度低。
诚实区块在考虑网络最大延迟下,经过一定时间一定会传遍整个网络,一定会被后边的区块所指向,诚实节点在产生新区块时也一定会指向自己所知道的末端区块。
通过对区块指出去的边和指向该区块的边进行分析,也就是区块的连通度,当考虑最大的网络延迟,连通度会有一个极限值K,低于该值的区块可以被认定为恶意区块,在排序中要处于劣势。
区块判定
接下来,进行区块诚实和恶意判定,判定分两步,第一步最重要,实现复杂也耗费时间,主要为通过对区块连通度的判定,将强连通度的区块标为蓝色视为诚实区块,弱的标为红色视为恶意区块。
第二步先对蓝色区块集排序,拓扑排序,然后对红色区块集排序。红色区块的顺序要处于弱势,例如上图中C,它处于A和I之间,那么它的顺序会排在I的前一个区块,而D、H都会排在C前。注意通过考虑最大延迟时间设定连通度的值,几乎所有正常诚实节点产生的区块都会被标记为蓝色
至此,PHANTOM协议实现了对DAG的线性排序,通过线性顺序就可以提取无冲突交易集,进而提取可信交易集,虽然耗时较长,满足智能合约的要求。
PHANTOM + SPECTRE彩蛋
Yonatan Sompolinsky在PHANTOM协议论文结尾,提出一种将PHANTOM + SPECTRE结合起来的可能协议,没有详细展开介绍。下图是几种协议的对比:
至此,介绍了Yonatan Sompolinsky一开始从分叉导致不安全提出的GHOST,到后来将DAG引入区块链,设计了SPECTRE协议,以及为智能合约考虑的PHANTOM协议。接下来,介绍国内某社区提出的CONFLUX协议。
CONFLUX
GHOST有主链但丢弃分叉区块;SPECTRE没有主链,包含所有分叉,但没有线性顺序;PHANTOM没有主链,包含分叉且有线性顺序,而CONFLUX即有主链,又是DAG,利用主链让DAG产生线性排序,下面将从挖矿机制和区块排序两方面来说明CONFLUX协议。
CONFLUX——挖矿
CONFLUX协议定义了根源边和参考边。新区块是基于前一个主链区块产生的,新区块用根源边(实线)指向前一区块,用参考边(虚线)指向分叉的其他区块末端,如下图最后一个新区块实线指向H,虚线指向分叉末端区块K。 根源边用于代表区块基于哪个区块产生,给哪个区块堆叠算力,参考边用于表示分叉的其它区块产生在该区块之前。
挖矿过程如下:
- 给定一个DAG,抽出由根源边组成的DAG,使用GHOST规则找到主链。
- 将新区块的根源边指向主链末尾。
- 将参考边指向其余非主链分叉末端区块。
根源边只能有一条,参考边可多条(视情况而定)
CONFLUX——区块排序
以主链区块为分割点,将DAG分段,段间段内设计简单排序算法
CONFLUX协议下产生的区块链如上(图2),接下来对其进行线性排序,排序算法如下:
- 将DAG中的所有根源边抽出来组成根源DAG,就是去除DAG里所有虚线,保留实线。
- 对根源DAG使用GHOST规则找到主链。
- 主链上的每一个区块就是一个时间段节点,从上个主链区块到该区块产生之前的时间内产生的所有区块都属于该时间段,然后将整个DAG切割成一段一段的。
- 段内的区块顺序根据段内是否有顺序(H段中,J先于I)或者比较区块的哈希id大小(如D,F)
通过上述排序,DAG有了一个线性顺序,上图DAG区块顺序为Genesis, A, B, C, D, F, E, G, J, I, H, and K。接下来对该线性顺序的区块里的交易信息进行交易排序,单一区块里可能包含的冲突交易将直接按照该区块内交易信息排列先后顺序决定。
至此,CONFLUX对DAG所有区块产生一个线性顺序,进而可以对区块内交易信息排序,产生无冲突交易集,超过一定时间的无冲突交易组成可信交易集。 主链只是排序的标尺,作为分割时段的标准,CONFLUX包含所有分叉区块。
说明
上述提的Yonatan Sompolinsky,实际是由 Yonatan Sompolinsky和 Aviv Zohar 等人共同完成,为了方便,只写了Yonatan Sompolinsky,Aviv Zohar是前者的老师,他对DAG相关的介绍更加通俗易懂。
-
GHOST,SPECTRE,PHANTOM都有幽灵,鬼怪的意思。
参考资料
GHOST论文
Inclusive论文
SPECTRE论文
PHANTOM论文
CONFLUX论文
DAGlabs 相关讲解视频合集