下一代共识机制探究——基于DAG的BFT共识

在区块链的语义里,BFT 共识是试图让 N 个验证节点(其中最多存在 f 个拜占庭节点)就一个无限增长的提案(区块或者交易集合)序列达成一致的机制。

众所周知,经典的基于 BFT 的共识算法,无论是 PBFT 还是改进的 HotStuff 通信复杂度都比较高,可扩展性差,且在网络不稳定的情况下延迟很高。

最近几年,随着 DAG 技术在区块链上的广泛应用,一种基于 DAG 的 BFT 共识被提出并不断完善,利用 DAG 的高效实现和其天然的异步通信机制在提升共识的可扩展性、缩短确认时间和提高交易吞吐量方面优势明显。但 DAG 作为异步操作,它不存在一个全局的排序机制,这就很可能出现节点间所存储的数据在运行一段时间以后出现偏差,在这种偏差下,如何就序列最终达成一致是 DAG 共识的关键。

本文将先介绍基础理论:基于 DAG 的 BFT 共识和基于轮的 BFT 共识,然后详细解读 DAGRider 、Tusk 以及 Bullshark 协议。

基于DAG的BFT共识

DAG,英文全称 Directed Acyclic Graph,中文意为有向无环图。

图(graph)由两部分组成:点(vertex)和边(edge),所谓有向无环图,其实就是:有方向的边,这些边在一个图中不会构成一个闭合的环路。
在这里插入图片描述

上面是有向树、DAG 图和有向图的示意图,从中可以看出三者之间的区别:

  • 有向树:每个顶点只能指向一个之前的顶点,整个数据有个明显流动方
  • 向 DAG 图:每个顶点可以指向多个之前的顶点,整个数据流也有一个明显的方向
  • 有向图:与 DAG 不同的是有向图允许有数据回流,整个结构的数据流向不明显

DAG在共识中的应用

在基于 DAG 的共识中,每个共识消息都包含一个提案(一个区块或者一组交易集合)和一组对以前消息的引用,这里的引用可以理解为:每一条新消息都必须明确地指向若干之前的消息,引用某一条消息即表明对该消息的认可和投票。

对应在 DAG 图中,一个消息是一个顶点,它的引用是一条边,因此,所有共识消息一起形成了一个不断增长的 DAG 图。

基于 DAG 的共识可分为两层:

  • 网络通信层:负责可靠地传播和接收提案、投票消息,并将消息绘制成 DAG 图
  • 零通信开销的定序层:各验证节点在不发送额外消息的前提下,仅通过解析其本地的 DAG副本独立提取提案的公共顺序,并能保证所有验证节点就提案的串行提交顺序最终达成一致

从消息的产生到消息的最终提交,由于网络的异步特性,不同验证节点上的 DAG 视图在任何时候都可能略有不同,所以如何保证所有验证节点就提交顺序最终达成一致是所有基于 DAG 共识算法的关键和难点。

与传统BFT的比较

经典的基于 BFT 的共识算法,无论是 PBFT 还是改进的 HotStuff 都需要一个 Leader 节点收集交易生成区块,广播并接收来自其他节点的投票,经过三个阶段的交互后(pre-prepare、prepare、commit)最终对区块提交达成一致性共识,协议比较依赖各节点间共识消息的可靠传递。

而基于 DAG 的共识,利用 DAG 图抽象出网络通信层,将消息传播与共识逻辑(提案定序)分离。这种分离带来的好处是,每个节点都可以异步地计算共识状态与提交序列,从而降低延迟与减少通信过程中的网络开销,再加上 DAG 的高效实现,使得基于 DAG 的共识拥有较好的可扩展性和高吞吐量。

<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值