从区块链到DAG(一)--区块链的账本结构和共识机制

DAG全称Directed Acyclic Graph, 中文译作“有向无环图”。它原本是计算机领域里一种数据结构,为了解决比特币交易速度慢的问题,它作为一种底层账本结构被重新提了出来。在大部分的介绍中都把DAG和区块链作为两种独立的底层账本结构区别对待,更有甚者仅仅把DAG看做一种共识机制。笔者认为这两种观点都过于片面了,都是因为缺乏对DAG的正确认知。

要认识DAG首先需要明确两个概念:账本结构共识机制。DAG作为一种底层账本结构有适合自己结构的共识机制。区块链也是一种底层账本结构,但它其实是一种特殊的、简化的DAG,其对应的共识机制也是DAG共识的简化版。

本篇文章作为系列的第一篇将着通过梳理我们熟知的比特币和以太坊的工作原理提炼出账本结构共识机制这两个概念,来帮助我们后续系统的理解DAG。

 1  比特币的工作原理

比特币的记账过程:矿工节点把交易打包在区块里,通过对区块做POW(工作量证明)使这个区块成为候选区块(出块过程);候选区块被全网广播等待其他矿工确认,该候选区块通过确认后会被添加到最长的链上。

在理想状态下要等前一个区块被全网确认加到链上以后,下一个区块才能被打包成候选区块广播。如果出块速度太快,广播的速度跟不上出块速度;将会导致一个区块在被全网确认以前新的区块又被挖出来广播了,这就是分叉。分叉会降低网络的安全性(具体分析可以参看《公链性能由什么决定——被误解的TPS》)。为了保证网络安全,比特币的出块时间被设定为10分钟。而这一设定也限制了比特币处理交易的能力,它的TPS只有7左右。

随着参与记账的节点的增多,比特币还是会分叉。就算排除故意作恶的节点,正常情况下难免会出现两个节点几乎同时出块的情况。这个时候比特币根据“最长链共识”来确定主链,即分叉后节点会基于其中的一个区块继续挖矿,然后选择更长的那个链作为主链,不属于主链的分叉区块会被全部抛弃。由于网络延迟等偶然因素,分叉总是时有发生,但连续6次以上发生分叉的概率微乎其微,所以一个区块在等待6个区块确认以后就可以保证这个块在“最长链”上,不会被篡改。

 2  比特币的账本结构和共识机制

总结上述过程我们可以看出比特币的底层账本结构是一条单链。而共识机制可以分成两个部分:1)出块共识,即如何分配打包权。比特币是通过POW(工作量证明),除此以外常见的还有POS(权益证明),DPOS等。2)账本共识,即各节点通过这一共识确认一个有效账本,这个账本里不能包含相互冲突的交易。这套共识要能够有效的排除恶意攻击的交易,防止出现“双花”问题。比特币的账本共识是“最长链共识”。

 3  以太坊的账本结构和共识机制

以太坊的记账过程和比特币基本差不多,就不再赘述。其底层账本结构从链变为树,出块共识同样为POW(在升级为ETH2.0后会改为POS);对应树这种结构的账本共识为“最重子树共识”(GHOST协议:The Greedy Heaviest-Observed Sub-Tree)。

 

由于比特币采用“最长链共识”,所以只要有分叉就会降低链的安全,分叉越多安全性越低。这导致所有用于分叉区块的算力全都浪费掉了。以太坊的GHOST协议是当出现分叉时,含有子树最多的那条链就是主链。这样哪怕出现分叉安全性也不会降低;而且分叉的区块(又称为“叔区块”)也会参到与账本共识中,帮助决定主链,使这部分算力不至于被完全浪费掉。

图片1 在最长链共识和最重子树共识下的区块树

来源:Yonatan Sompolinsky and Aviv Zohar, 《Secure High-Rate Transaction Processing in Bitcoin(full version)》

如图1所示,整个链在区块0之后出现分叉。如果只考虑诚实节点的出块,按照比特币的最长链原则主链会是0->1B->2D->3F->4C->5B。当有节点作恶时,攻击者提供一个长链0->1A->2A->3A->4A->5A->6A,在最长链共识下,攻击会成功。

当考虑最终子树共识时:子树的区块1B包含了12个区块,而攻击链的区块1A只包含6个区块,最重子树共识会选择1B作为主链的区块,然后进一步评估1B之后的分叉。以此类推,最终的主链会是0->1B->2C->3D->4B。原本在最长链共识下作废的叔区块会被考虑成“权重”添加到主链的计算中,最终权重最重的链成为主链。叔区块必须含有一个有效的区块头,但是它里面记录的交易不需要得到确认,甚至都不要求叔区块是一个有效的区块。所以最重子树共识仅仅把叔区块的个数作为计数,而里面的交易信息不会添加到主链上,用于计算这部分交易信息的算力还是被浪费掉了。

以太坊的出块时间大概是15秒,与比特币的10分钟相比这样短的出块时间增加了分叉的可能,而采用最重子树共识有效的保证了主网的安全。也使以太坊的TPS大大高于比特币,大概为30到40。

 4  总结

从比特币和以太坊的例子可以看出,底层账本的结构与共识机制,尤其是其中的账本共识密切相关。账本结构从单一的链拓展到树大大提高了区块链的性能。但总的来说,区块链这一结构还是局限于一种单线程的处理模式,无法做到像DAG那样的多线程异步的并行计算。在后面的文章里我们将会一点点揭开DAG的神秘面纱。

参考文献:

[1] Yonatan Sompolinsky and Aviv Zohar, 《Secure High-Rate Transaction Processing in Bitcoin(full version)》

[2] Vitalik Buterin, 《Ethereum Whitepaper》

[3] 公链性能由什么决定——被误解的TPS, https://t.1yb.co/6cX

[4] 以太坊Ghost协议和叔块,https://www.jianshu.com/p/050f92925411

[5] GHOST,DAG,SPECTRE,PHANTOM和CONFLUX技术原理,https://www.jianshu.com/p/8734e06d558f

————  e n d ————

历史文章

希望大家可以关注微信公众号更加方便交流。公众号的文章也会率先更新~

猜你喜欢

转载自blog.csdn.net/NewBlockChain/article/details/106787092