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

2023-03-08 15:03:25

前言

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

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

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

1 比特币的工作原理和性能

比特币作为区块链技术的开山鼻祖,其性能早已不能满足现在的交易需求,故而时常发生拥堵。我们先来看看下图比特币的记账过程:


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

图1 比特币的记账流程图

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

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

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

比特币采用 PoW 共识(工作量证明),其中主要有两个步骤耗费比较多的时间。

一是做工作量证明(Time1),即算出符合要求的区块哈希值。二是全网广播(Time2),等待其他矿工确认这个区块的过程。

在设计时,比特币的出块时间设定为10分钟(即需要10分钟的工作量证明),每个区块的大小约1MB,一个块可以打包2500-3000条交易数据。尽管单个区块可以包含千条交易信息,但由于至少需要10分钟才能完成一次出块,这导致平均单位时间内记录的交易信息低,即 TPS 低。

TPS( transection per second )是常用的描述区块链性能的指标,指每秒处理业务的数量,是衡量一个系统吞吐量的重要参数

由于出块慢导致比特币的 TPS 只有7左右。因此比特币的拥堵常被归咎于其所用的 PoW 共识机制。有人会说可以通过增大区块的容量或是提高出块速度的方式来增加 TPS,这样就不会拥堵了。这个想法很美好,但是实际上不能这么简单地增加交易吞吐量。增大区块容量会导致 Time2 的增加(广播时间变长),因为单个区块包含的字节变多了,所需要的传输时间也就相应变长;尽管提高出块速度会使 Time1 变小,但当出块速度太快而广播速度跟不上时,一个区块在被全网矿工确认之前,新的区块又被挖出来了,这样会出现分叉。分叉会降低网络的安全性。请参考下图:


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

图2 比特币的网络分叉图

本来不分叉时作恶的成本是不少于全网51%的算力。现在分叉以后假设A链分到60%的算力,B链40%的算力。如果想要作恶把A链回滚改到B链,只需要全网11%的算力就可以了。所以分叉降低了作恶的成本,使网络变得不安全。因此,10分钟的出块时间是比特币在安全与效率之间做的妥协。

所以在 PoW 下不可以随意的加大区块容量或提高出块速度。这会增大分叉的可能,降低网络的安全性。

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

总结上述过程我们可以知道比特币的底层账本结构是一条单链。


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

图3 比特币单链结构图

而共识机制可以分成两个部分:

1、出块共识,即如何分配打包权。比特币是通过 PoW(工作量证明),除此以外常见的还有 PoS(权益证明),DPoS 等。

2、账本共识,即各节点通过这一共识确认一个有效账本,这个账本里不能包含相互冲突的交易。这套共识要能够有效的排除恶意攻击的交易,防止出现“双花”问题。

中本聪在论文《比特币:一种点对点网络中的电子现金》中曾介绍,比特币工作量证明机制的本质是一CPU一票,而最长链包含了最大的工作量,所以“大多数人”的决定就可以表达为最长链。

仔细来讲就是,比特币区块是依靠矿工们不断进行数学运算而产生的,每一个区块都必须引用其上一个区块,因此最长的链也是最难以推翻和篡改的,所以节点永远认为最长链才是有效的区块链,在一般情况下,比特币把累计了最多难度的区块链,也是包含最多区块的那个链称为主链。比特币每一个(挖矿)节点总是选择并尝试延长主链。只有在最长链上挖矿的矿工才能够获得奖励,这就是我们常说的比特币最长链原则。比特币的账本共识是“最长链共识”。

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

以太坊的运行原理跟比特币没有太大的不同,所以这里就不详解了。以太坊底层账本结构从链变为树。对应树这种结构的账本共识为“最重子树共识”(GHOST协议:The Greedy Heaviest-Observed Sub-Tree)。

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


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

图片4 最重子树共识下的区块树

如图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。

一、以太坊出块共识(权益证明机制)

权益证明机制是针对工作量证明机制存在的不足而设计出来的一种改进型共识机制,其英文全称 Proof of Stake ,简称PoS ,也称股权证明机制。顾名思义,是根据投资者手上持币的币龄(币龄=矿工质押的代币总金额*代币持有时间)来决定挖矿成功的打包概率的共识机制。

可简单理解,一个 PoS 代币经济生态就好比一家同股不同权的上市公司,PoS 挖矿就像一家上市公司的股利支付决策,每一位矿工(持币者)都是上市公司的股东。矿工争夺的记账权就像股票表决权一样,矿工获得记账权的概率与股东表决权的份额(即矿工的表决权占总体表决权的比例)相似。矿工质押代币的数量就是股东持股的数量。根据质押代币份额的大小不同,一些矿工是大股东,一些矿工是"小股东"或"少数股东"。PoS 挖矿也就像将质押的代币存放在银行一样,银行根据时间长短和存款金额支付利息。

二、权益证明机制工作原理

开始竞争出块记账前,拥有权益的节点将自己的权益放入 PoS 机制中,同时身份变为验证者,PoS 机制根据验证者下注的多少,采用随机的方式选出一个记账者进行出块记账。这个随机并不是真正的随机,一般跟下注的权益成正比,谁的权益多,谁获取记账权的概率就越大。如果选出的记账者在一段时间内没有记账,PoS 机制重新选择记账节点,当出块完成,开始进入下一轮的记账。

在 PoS 共识中,节点争夺记账权依靠的不是算力而是权益(代币)。PoS 同样需要计算哈希值,但与 PoW 不同的是,不需要持续暴力计算寻找 nonce 值,具体流程如下:


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

图5 pos记账流程

每个节点在每一轮共识中只需要计算一次 Hash,当拥有的权益越多,满足 Hash 目标的机会越大,获得记账权的机会越大。可以说,PoS 是一个资源节省的共识协议。权益除了与代币数量有关,也与代币的持有时间有关,因此持有的代币数量越多,时间越长,获得记账权的机会越大。

整个流程简单总结起来就是:持币人将代币抵押,获得出块的机会,然后 PoS 共识中会通过选举算法,按照持币量比例,从中选出出块矿工。矿工在指定高度完成打包交易,生成新区块,并广播区块,广播的区块经过验证人验证交易,通过验证后,区块得到确认。这样一轮 PoS 的共识过程就完成了。

三、PoS 机制与 PoW 机制的不同点

工作量证明机制产生区块时依赖于算力,致使每一个比特币的创建至少需要10万度电( 2022 年数据 ),相当于 6600 加仑的汽油。权益证明机制产生区块时不采用算力作为资源,而是节点创建区块必须提供证明,让全网认同它在创建这个区块之前拥有一定数量的。将数字货币的拥有权视作稀缺资源来产生共识。


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

只有持有数字货币的人才能进行铸币,而且不需要大量的算力就可以挖到货币,避免了比特币网络中出现的“算力集中”趋势,回归到区块链“去中心化”的本质要求。

4 Qitmeer 的账本结构和共识机制

一、BlockDAG 账本结构

Qitmeer 底层账本结构是 BlockDAG(区块图),完整的说是基于有向无环图结构的区块网络系统。从以太坊的树链状结构变成多维的有向无环图结构,它是区块链系统的升级和扩展,充分释放了区块链的性能。BlockDAG 是基于最重链规则,能达到跟比特币相当的 51% 容错性,同时区块图结构实现网络并发数据传输,大大提高了传输性能,能达到远超过比特币、以太坊的系统吞吐量,在带宽和传播延迟理想状态下 TPS 可以达到 4000+,随着 Meer Labs 在高速子网方面的研究的突破,整个系统吞吐量会得到更大提升。


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

图6 MeerDAG账本结构

BlockDAG 的协作模型比区块链的竞争模型提供了更多的公平性。并发的区块只要合法都可被确认。不管它拥有多少算力,每个节点根据其贡献获得奖励。钱包发起交易时不需要等待自己之前有多少交易,只需要经历局部校验、全网广播、其他局部校验,相当于是把交易确认分散化,每一个节点都在做类似于拼图的工作,把自己的和别人确认的交易拼接起来。从而使得区块链系统的交易吞吐能力得到扩展,从根本上提高区块链网络的性能。

二、Qitmeer出块共识及奖励机制

2.1出块共识和奖励机制

Qitmeer Network 是一条高性能区块链网络,使用工作量证明( PoW )共识机制,采用了独创的 Meer Keccak 256 工作量证明算法,该算法主要用于寻找大型伪随机图中的某些子图, 需要高强度内存运算。以分布式的节点网络提升区块链的去中心化及安全性。

Qitmeer 关注所有节点之间的公平性,而不管一个节点拥有多少算力。对于算力强的矿工,他们可能会争取区块奖励,区块奖励比较丰富,但竞争比较激烈;对于那些算力较小的矿工,他们仍然有机会分享交易费用,先到先得。

Qitmeer Network 自研的新一代 BlockDAG 混合协议,MeerDAG 协议。用蓝色表示诚实块,用红色表示不诚实块。Qitmeer Network 只给蓝色的方块奖励。鼓励矿工积极工作。只基于蓝色集策略可以在很大程度上增强安全性,但同时也会给那算力较弱或网络连接较差的矿工带来歧视。也许他们也是诚实的矿工,但由于共识协议的限制,他们仍然被认为是“不诚实的”。因此,我们可以利用交易费来补偿这些诚实的矿工。

网络是依靠矿工们努力工作来巩固安全的。BlockDAG 模式的竞争不像区块链那么激烈,因此需要鼓励矿工积极工作,以更好地维护网络的算力安全。由于消极地工作被认定为“红块”的概率较高,矿工将努力避免这种情况。

2.2挖矿协议

挖矿流程

Qitmeer 支持 getblocktemplate 挖矿协议。它让矿工决定将哪些交易放到块中。矿工通过 getblocktemplate RPC 向 Qitmeer 全节点发送请求。

然后矿工使用来自 getblocktemplate RPC 的数据启动 PoW。如果它得到正确的“答案”, 通过 submitblock RPC 提交潜在的块。具体流程如下图所示。


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

图7 挖矿流程

Miner 功能Qitmeer 挖矿工具( Qitmeer - Miner )支持独立采矿和矿池采矿。

独立模式 (Solo)如果矿工决定在不加入池的情况下挖 meer(qitmeer原生货币),他将启动独立挖矿模式。Solo 矿工连接一个全节点,调用 RPC 服务来挖块。Solo 矿工推荐使用 NOYCE N57 集成电路算力机器实现,以获得更高的效率。

矿池模式 (Pool)Qitmeer 矿池与大多数 PoW 矿池一样支持 stratum挖矿协议。目前支持 Qitmeer 的矿池有 F2pool、火币矿池、Hashpool、Meerpool 等主流矿池。


      从区块链到 DAG(一)账本结构和共识机制图8 挖矿节点分布图

三、Qitmeer 账本共识

MeerDAG 共识协议是一种将 GHOSTDAG + SPECTRE 的特性完美融合的创新性 BlockDAG 混合协议,GHOSTDAG 作为基础协议,实现高吞吐量的线性排序服务,并采用 SPECTRE 协议作为辅助协议保证交易快速确认。后文将详细阐述其工作原理。

5 总结

从比特币、以太坊和 Qitmeer 等公有区块链的介绍可以发现,底层账本的结构与共识机制密切相关。

由于协议约束,比特币不可伸缩。根据中本聪共识,即最长链规则,1MB块大小和10分钟块率限制比特币只能达到每秒7笔交易的理论吞吐量,无论多么大的带宽和多么快的传播延迟。提高可伸缩性最直观的方法是缩短块时间或增大块大小。中本聪没有采用的原因是这样会带来分叉,同时会分散主链的算力,从而造成安全漏洞。

以太坊的 GHOST 协议在不牺牲安全性的前提下,引入了最重树共识来保留分叉。注意,这里区块链已经转换为块树。由于最大的子树集中了大多数算力,安全性与比特币一样高。主链是指从起源到子代数量最多的叶子上的区块链,其他区块为链下区块。只有主链块贡献吞吐量,而链下区块有助于增强安全性。由于更高的出块速率,区块树极大地提高了吞吐量。

但是,仍然存在对链下块中交易的浪费,而这些交易也应该有助于提高吞吐量。Qitmeer 所采用的 BlockDAG 协议提出了一种新的账本数据结构,即每一个区块确认每一个未确认的区块,将块树结构升级为区块图。

从区块链到 BlockDAG 的发展历史可以看出,区块链是BlockDAG 在低吞吐量情况下的一个特例,这意味着两者在本质上是相同的。因此,它是最接近比特币网络的可伸缩性解决方案。BlockDAG 是稳定的,因为它继承了所有被长期证明是比特币稳定的的特性,并且它在协议层面可以无限地扩展,只有物理上的限制,如带宽和传播延时。

进一步扩展公有区块链性能的基础是高效稳定的共识协议,因此 BlockDAG 成为 Qitmeer 首选扩展解决方案。

参考文献:[1] 公众号《区块链新观》:从区块链到DAG

[2] CSDN博主「子叶_」:https://blog.csdn.net/u014264140/article/details/114006887

[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

[6] Qitmeer Team ——《Qitmeer中文白皮书》

郑重声明:本文版权归原作者所有,转载文章仅为传播信息之目的,不构成任何投资建议,如有侵权行为,请第一时间联络我们修改或删除,多谢。

推荐文章

btc日内再次下跌 短线应当如何处理?

尽管以太坊现货ETF获批是个好消息,但市场反应却不如预期。在消息公布后,以太坊价格出现了小幅下跌,...

加密莲
926 1年前

7月23日、BTC(合约)ETH(合约)行情分析及操作策略

昨日收益还是不错的,日内给出的现价空单分别止盈我们目标点位,恭喜跟上的朋友吃肉。时间一晃到月底了,...

倪老师
915 1年前

币圈院士:血与泪的教训!交易者为何总是撞死在同一棵树上?

币圈院士谈。交易市场中的几种“死法” 在币圈市场鳞次栉比的海洋,风起云涌,时常让人感到惊手不及。在...

币圈院士
904 1年前

7月23:Mt. Gox 比特币钱包在市场紧缩的情况下转移了价值 28.2 亿美元的 BTC

7月23:Mt. Gox 比特币钱包在市场紧缩的情况下转移了价值 28.2 亿美元的 BTC一个引...

168超神
884 1年前

悦盈:比特币68000的空完美落地反弹继续看跌 以太坊破前高看回撤

一个人的自律中,藏着无限的可能性,你自律的程度,决定着你人生的高度。 人生没有近路可走,但你走的每...

我是周悦盈
883 1年前

btc完美盈利 晚间波动较大注意

昨日btc空单完美给到,最大化走出一千七百点空间~ btc: 日内开盘下跌继续测试66000一线,...

加密莲
867 1年前