IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 论文阅读笔记:Scaling Nakamoto Consensus to Thousands of Transactions per Second / arXiv 2018 -> 正文阅读

[区块链]论文阅读笔记:Scaling Nakamoto Consensus to Thousands of Transactions per Second / arXiv 2018


原文链接: Scaling Nakamoto Consensus to Thousands of Transactions per Second

很多参考了别的文章,链接附在下面了,若有错误之处还请批评指正。后面可能会继续完善

概要

这篇论文主要介绍DAG结构的区块链:不丢弃任何分叉的区块的对交易进行排序。和串行化区块链不同的是,DAG结构的偏序特性和网络拓扑结构可以为区块链处理并发交易带来比较好的解决方法。本篇论文的主旨就是根据DAG结构,乐观处理并发交易,对并发的交易或区块延迟排序,并且给出了交易冲突的解决策略。

作者是根据Ghost协议和inclusive blockchain 协议进行的改进,采用最重权重子树来选取主链,在DAG的架构中是属于基于主链的DAG共识。

背景及介绍

比特币使用中本共识协议。该协议通常将事务组织成一个有序的列表,每个区块包含多个事务和一个父区块的链接。为了抵御女巫攻击,每个人需要一定的工作量证明来竞争生成下一个块的权利。为了防止攻击者恢复以前的事务,每个人都同意将最长链作为正确的事务历史记录。每个新生成的块将被附加在最长链的末端,以使链更长,因此更难恢复。
然而,性能瓶颈仍然是当前区块链中最关键的挑战之一。在标准的中本共识中,性能瓶颈为:1)只有一个参与者可以赢得竞争并为区块链做出贡献,即并发块作为分叉被丢弃,2)较慢的生成速度对于防御对手至关重要。例如,比特币每10分钟生成一个1MB的块,因此每秒只能处理7个事务。此外,为了获得对比特币中交易是不可逆转的高度可信,用户通常必须等待某个数量的块后才能被确认。这将导致在确认交易前需要等待数小时。吞吐量不足和确认延迟较长,严重限制了区块链技术的发展,导致用户体验差,网络拥塞,交易费用疯涨。
以往的研究集中在减少共识的参与,以在不影响区块链安全性的情况下提高性能。例如,Bitcoin-NG定期选择一个领导者,并允许领导者在一段时间内指定事务总排序。它提高了事务的吞吐量,但没有提高其确认时间。另一些提议是选择一小部分参与者作为一个委员会来运行拜占庭容错(BFT)来确定交易的顺序。此类解决方案可能会危及区块链的去中心化。

conflux

conflux,一个快速、可扩展和去中心化的区块链系统,可以每秒处理数千个事务,同时在几分钟内确认每个事务。conflux的核心是其共识协议,允许多个参与者同时为conflux区块链做出贡献,同时仍然被证明是安全的。该协议支持显著更快的块生成,进而支持更高的吞吐量和更快的确认。事实上,conflux 吞吐量不再受共识协议的限制,而是受每个节点的处理能力的限制
标准的中本共识协议在生成每个块时先发制人地定义了一个限制性的事务总顺序。这种策略引入了许多错误的依赖关系,从而导致不必要的分叉。我们的方法的关键是推迟事务的总排序,并乐观地处理并发事务和块。鉴于链中的事务很少发生冲突(特别是在加密货币中),conflux首先乐观地假设并发块中的事务在默认情况下不会相互冲突,因此只考虑显式的因为出块者而出现的happens-before关系。这使得conflux能够以更少的约束运行,并有效地能在总序方面达成共识。然后,conflux中的每个参与者从约定的顺序中确定地推导出事务总顺序,丢弃冲突的和/或重复的事务。这种延迟排序为用户提供了相同的外部接口。
为了安全地收敛网络,Conflux中的区块之间由多条边组成,这些边分成两类:父连接,以及引用连接。在确定主链的基础上,新生成的区块必须使用父连接连接到主链的最后一个区块上,这些父连接使conflux能够在其分类账上实现一致的不可逆共识。除了主链外,还存在其他一些非主链的路径,新生成的区块必须使用“引用连接”连接这些非主链的最后一个区块,引用连接表示对这些块是在新块之前产生的,引用连接可以使得使得系统能够连接所有的块,更好的实现合并。这样的网络就形成了DAG结构,所有的区块都被包含在账本中,没有形成分叉。
conflux面临的一个挑战是如何就包含并发块的DAG的不可逆块达成一致的全序。conflux提出了新的排序算法解决了这一挑战。给定一个从创世块开始的主链,排序算法使用主链将DAG中的所有块划分为epoch,在每个epoch将区块进行拓扑排序,并将所有epoch的排序结果连接到最终的全序排列中去。该算法保证,如果主链稳定(即链上的块除最后几个块外是不可逆的),那么产生的块总顺序将稳定(即总顺序的块是不可逆的,除了最近几个epoch的块是不可逆的)。通过其排序算法,conflux将在DAG的全排序共识问题简化为在主链上实现全排序共识的问题。

假设和保证:conflux采用与比特币和许多其他货币类似的假设。诚实节点在网络直径为d的网络中合理同步(即诚实节点发送的消息发送的最大延迟为d)。所有诚实的节点比攻击者的算力多。在这些假设下,conflux共识协议保证了确定的全排序以极高的概率不可逆。

本文主要关注共识协议的设计和实施,其激励机制超出了本文的范围。因此,在本文中,我们将“诚实节点”称为运行忠实实现conflux的无错误程序的节点。

实验结果

实验环境:800台8核Amazon EC2虚拟机,每台模拟25个全节点,共运行2w个节点。

影响吞吐量的三个影响因素:

  • 区块大小限制
  • 区块生成速率
  • 区块利用率

实验结果表明:
在每个完整节点的20Mbps带宽限制下(即与Algorand相同的实验环境)下,conflux每5秒可以处理4MB大小的块,从而达到2.88GB/h的事务吞吐量;吞吐量是比特币和Ghost吞吐量的11.62倍,是Algorand的3.84倍。
在40Mbps的带宽限制下,通通量可以每2.5秒处理一个4MB的块,从而实现更高的5.76GB/h的事务吞吐量。
conflux的吞吐量相当于经典比特币每秒交易6400次。事实上,我们的研究结果表明,当运行conflux时,共识协议不再是吞吐量的瓶颈,而是单个节点的处理能力(例如,硬件带宽限制)。
实验还表明,通过使用更快的生成率,conflux允许块更快地建立,从而实现快速确认。通量在4MB/2.5s和40Mbps设置下4.5-7.4分钟内确认交易,在4MB/5s和20Mbps设置下7.6-13.8分钟内确认交易。

贡献

(1)共识协议:提出了一个快速的、可扩展的基于DAG结构的NC共识协议。Conflux能有效地处理并发的区块,同时惰性地协调交易的总顺序。
(2)Conflux实现:作者提出了基于Bitcoin核心代码库的Conflux原型实现。Conflux是第一个基于DAG结构的NC共识协议的区块链系统。它可以实现每秒处理数千笔交易。
(3)实现结果:对Conflux进行系统性的大规模评估。当运行2w个全节点时,Conflux达到的交易吞吐量为2.88 ~ 5.76GB/h,确认时间为4.5 ~ 7.4分钟,交易速度是Bitcoin的11.62倍。

conflux框架

与比特币类似,conflux交易是由支付人签名的支付消息,将货币从支付人转移到收款人。可以有特殊的铸币交易来铸造新的货币。每个事务还有一个由加密摘要函数生成的唯一id,以确保其完整性。一个块由一个事务列表组成(例如图中的B块中有4个事务)和到以前的块的引用链接(例如,在图中的DAG状态下,B链接到以前的两个块)。每个块还带有一个由摘要函数生成的唯一id,以确保数据的完整性。在一开始,conflux从一个预定义的创世块开始来确定区块链的初始状态。
conflux和传统区块链的一个关键区别是块和边形成的是 DAG而不是线性链。当这些块进入网络时,每个节点可能会由于网络延迟而观察到不同的DAG。conflux的目标是维护每个单独节点的本地DAG账本,以便最终所有的节点都能在全序上达成一致。
注意,在conflux中的全序可以支持智能合约,智能合约的执行需要图灵完备的程序来更新与帐户相关的状态。为了便于说明,本文假设一个具有简单支付交易的平衡模型。如果一个交易在之前相关的交易之后执行,付款人没有足够的余额来执行交易,则一个交易与之前的交易冲突。
conflux总体架构图

如图,Conflux框架中主要包含了三个实体,Gossip Network、Transaction Pool和Block Generator。
Gossip Network:conflux中所有参与节点都通过gossip网络连接,如图1的顶部所示。每当一个节点启动一个事务时,它将通过gossip网络将该事务广播到所有其他节点(例如,图1中的Tx9)。每当一个节点生成一个新的块时,它也会通过gossip网络将该块广播给所有其他节点(例如,图1中的块B)。conflux目前是基于比特币核心代码修改的gossip网络。
Pending Transaction Pool:每个节点维护一个挂起的事务池,如图1的右下角所示。该池包含节点已收到但尚未打包到任何块中的所有事务。每当一个节点从gossip网络接收到一个新的事务时,该节点就会将该事务添加到其挂起的交易池中(例如,在图1中的事务池中添加Tx9)。每当一个节点发现一个新块(通过生成块或从其他节点接收块)时,该节点将从其挂起的事务池中删除新块中的所有事务。例如,在图1中,节点在生成块B后从其池中删除Tx1、Tx2、Tx3和Tx5。在通流中,由于网络延迟和恶意节点,并发块可能包含重复或冲突的事务。这些交易将通过共识协议来解决。
Block Generator:conflux中的每个节点都运行一个块生成器,以生成有效的打包挂起的事务的新块,如图1的底部所示。conflux采用工作证明(PoW)机制运行,因此块生成器试图找到针对PoW问题的解决方案来生成块。有效的块头必须包含一个PoW解决方案。一旦生成了这样一个有效的块头,它将从池中选择挂起的事务来填充新的块。与比特币类似,PoW机制通过动态调整PoW问题的难度来保持稳定的网络块生成速率。请注意,除了PoW之外,conflux还可以与任何其他可以保持稳定的块生成速率的机制一起工作,如股权证明(PoS)
Local DAG State:每个节点维护一个包含该节点所知道的所有块的本地状态。因为在conflux中,每个块可能包含以前多个块的链接引用,而不仅仅是一个,结果状态是一个有向无环图(DAG),如图1中心所示。每当节点发现一个新的块(通过生成或接收它)时,该节点就会相应地更新其本地DAG状态

如果需要将一笔交易上传至网络的具体运行过程为:
(1)将交易广播至gossip网络中,其他节点接收后,将其存储在自身的transaction pool中。
(2)节点可通过block generator打包交易,并生成区块。
(3)生成区块后,更新本地的DAG状态,并从transaction pool中删除该区块中的交易。(注意,transaction pool中的交易是无顺序的)
(4)通过gossip network把区块广播给其他节点,如此往复。
因此,可以看出Conflux的目标主要是维护每个节点的本地DAG,以便使得所有节点最终对区块和交易的总顺序达成一致。

共识协议

conflux共识协议针对每个单独节点的本地DAG状态进行运行。该协议的目标是就所有节点之间生成的块的总顺序达成共识。对于冲突或重复的事务,conflux只处理第一个事务,并丢弃其余的事务。
在这里插入图片描述

  • DAG and Edges:
    图2显示了conflux中一个节点的本地DAG状态的运行示例。我们将在本节的其余部分中使用这个示例来说明conflux共识协议的高级思想。图2中DAG中的每个顶点都对应于一个块。Genesis是“创世纪”块,也就是第一个块。父连接用“实心”箭头表示,引用连接用“虚线”箭头表示。区块C使用“父连接”连接到A,使用“引用连接”连接到B。新生成的区块(New Block)使用“父连接”连接到H,使用“引用连接”连接到K。只有创世块、A、B和G与交易相关。父连接对应于一个投票关系,即子区块会给父区块中的交易投票。引用连接是块之间关系先后的概括。例如,从E到D有一个引用。它表示D是在E之前生成的。

  • 主链(Pivot Chain)确定算法
    要确定区块的顺序关系(Block Total Order),必须先确定主链。主链的选择使用“GHOST”规则。“GHOST”的基本思想是选择子节点数多的节点。Conflux的DAG结构用如下的四元组表示:G = <B,g,P,E>,B代表DAG中的所有区块,g是创世纪块,P是映射函数(每个区块可以通过P函数获取父区块),E是所有区块的“父连接”和“引用连接”的集合。图上的主链为:创世节点、A、C、E、H。(最重权重而不是最长链)

  • 生成新区块:节点计算出本地DAG图的主链,新区块指向主链最后一个区块,作为父边。(例如,new block指向主链最后一个区块H)

  • Epoch:引用连接、父连接和主链一起使得DAg重所有的块被划分成一个epoch。主链每个区块负责一个epoch,每个epoch包含所有从该主链上的区块发出的父连接和引用连接可以到达且没有被包含在之前epoch中的区块。(比如J可以从H出发到达,但是不能从之前的E到达)

区块全排序:先对epoch排序,再对epoch内的区块进行排序,若没有顺序的区块则根据hash值大小排序。(例如,E的epoch包含了区块D、E、F三个区块,而由E指向D、F的引用边可知,E排在D、F的后面,再比较D、F的hash值谁小,谁就放前面,所以最后的排序为D、F、E)

  • 交易排序:最后剔除冲突或双花的交易,生成交易顺序。(例如,Tx2与Tx3是双花交易,则只保留先前一笔交易,而Tx4(区块B中的)和Tx4(区块G中的)是冲突交易,也只保留前一笔,后一笔交易剔除掉,则最后的顺序为Tx0、Tx1、Tx2、Tx4(区块B))

安全性分析

接下来,我们将讨论潜在的攻击策略,并解释为什么conflux对这些攻击是安全的。

现在,假设攻击者希望回滚图2中方块B中的事务Tx4。为此,攻击者需要回滚已经排好顺序的块来使得攻击者可以在B之前插入攻击块,并且攻击块包含与Tx4冲突的事务。一种攻击策略是将攻击的块与很早的epoch的块联系起来,例如把创世区块作为父区块。但是,由于攻击块是新的,没有子区块,因此它不会成为主链块。根据我们的epoch定义,攻击块必须等待未来主链块的引用。这个块仍然将属于一个未来的epoch,尽管它把创世区块作为它的父结点。因此,该块不会在B之前出现。
因此,要回滚块中的事务,攻击者必须回滚在这个块之前所有epoch的块。由于epoch 是基于主链确定性定义的,因此攻击者必须回滚主链上相应的块。如果攻击者试图回滚主链,那么情况就类似于基于链的中本共识协议中的双重支付攻击。在这种情况下,conflux的安全性依赖于这样一个事实,即所有诚实的节点都将继续在主链上工作,以使主链更长、更重。由于诚实节点在一起比攻击者有更多的块生成能力,随着时间的推移,主链上的早期块对攻击者来说越来越不可逆转。
- 交易确认
用户可以使用以下策略确认其交易。用户定位包含事务的块的第一个epoch。用户标识该epoch对应的主链块。然后,用户根据攻击者的块生成率的估计来决定可以容忍多大风险。用户最终使用第3.3节中的公式来估计回滚主链块的风险,以决定是否确认该交易。

conflux 共识算法

在本节中,我们提出了conflux共识算法,并讨论了其安全性和活性。

1. 共识算法

Conflux的DAG结构用如下的四元组表示:G = <B,g,P,E>,B代表DAG中的所有区块,g是创世纪块,P是映射函数(每个区块可以通过P函数获取父区块),E是所有区块的“父连接”和“引用连接”的集合。e=<b,b’>,等价于b’=P(b),即b’是b的父结点。P(g)为空。每个块都通过hash函数有一个独特的id。
在这里插入图片描述

  • 程序函数和符号定义:

    • Chain():返回创世区块到给定区块只有父连接的链
    • Child():返回给定块的子区块集合
    • Sibling():返回给定块的兄弟集合
    • Subtree():返回树中给定块的子树
    • Before():返回在给定块之前立即生成的一组块(有链接指向的一组,无论是父连接还是引用连接)
    • Past():返回在给定块之前生成的块集(包括块本身,所有)
      在这里插入图片描述
  • GHOST规则的计算过程如下:(怎么选出主链上的区块)
    在这里插入图片描述
    给定一个DAG的状态G,Pivot(G,g)返回从创世区块g到最后一个区块的主链。该算法递归地推进到相应子树的块数量最多的子块(子区块个数),即确定下一个区块是根据子区块个数,如果在子区块个数相等的情况下根据区块Hash值,值小就是下一个区块。注意,子区块个数的计算不包括“引用连接”。

  • conflux主要循环
    在这里插入图片描述
    图上给出了一个节点运行共识算法中主要的循环。它会处理两种事件。

    • 第一种事件是通过底层gossip网络从其他节点接收DAG来更新信息。该节点相应地更新其本地状态(第2-3行),并通过gossip网络(第4-6行)转发本地状态。注意,在这里,我们假设底层的gossip网络已经验证了接收到的信息的完整性(即块中的加密签名)。
    • 第二类事件对应于本地块生成器成功生成一个新的块b。在这种情况下,节点将b添加到其本地DAG 的G中,并更新G。它首先将其本地DAG中的主链的最后一个块设置为b的父块(第8行和第10行)。该节点还可以在本地DAG中查找没有被包含的所有的块,并创建从b到每个这些块的引用连接(第9行)。该节点最终通过gossip网络将更新后的G广播到其他节点。请注意,第10行的P[b→a]表示b最终映射到a(P中的其他映射没有变化)。
      为了简单起见,图5中的伪代码将整个图广播到网络。在conflux实现中只广播和中继每个单独的块,以避免不必要的网络传输。
  • 区块顺序

每个主链上的区块组成一个时代(Epoch)。被该区块“连接”到的区块,且没有被之前区块“连接”的区块属于这个区块时代。区块排序的算法如下:
在这里插入图片描述
给定局部排序状态G和主链上的一个块a,ConfluxOrder()返回在a的epoch之前出现的块的顺序列表。使用该函数可以将局部状态G被细化成全排序TotalOrder(G)。

Past(G,a)获取DAG图G中的主链中一个区块a之前的所有区块(包括区块a),也就是区块a之前的区块以及区块a能连接到的区块。很显然,伪代码的第5行:Past(G,a)- Past(G,a’)计算的是区块a所处时代中的所有区块,包括区块a。区块a时代的区块单独组成一个图的话,按照两个规则进行排序:

1)有没有连接关系 2)区块Hash大小。

同样以第2部分介绍的DAG为例,每个时代包含的区块用虚线分开。区块的排序为:Genesis,(A),(B,C),(D,F,E),(G,J,I,H),(K,New Block)。区块D只被区块E连接,所以属于区块E的时代。

2. 假设和参数

  • 区块生成率假设
    网络总的区块生成率为λ
    则有
    在这里插入图片描述
    λa 表示攻击节点的区块生成率,λh表示诚实节点的区块生成率,这是比较合理的假设

  • d-同步
    假设网络为所有节点提供d-同步通信。即在时间t内,诚实节点通过广播一个区块或交易,则在t+d之前,所有诚实节点都会收到这个区块,并将其添加到自身的本地状态。

  • 敌手模型
    假设攻击者的能力有两个限制,即

    • 攻击者不具备反向密码函数的能力(即,反向推出hash函数的输入),诚实节点可以在攻击者在场的情况下可靠地验证区块的完整性。
    • 所有的诚实节点加在一起比攻击者具有更强的区块生成能力。

    可以从上面的比例关系看出,始终λh > λa
    当攻击者生成一个新块时,攻击者不遵循现有协议而创建父连接和从新块到任意现有块的引用连接。由于所有块都受到加密函数的保护,即使该块是由攻击者自己生成的块,攻击者也不能修改与已经生成的块关联的边。攻击者还可以在广播该块之前暂时保留此新块一段时间。因为conflux实现了一种类似于比特币的陈旧的块检测机制,攻击者不能永远保留块(但它可以保留数小时)。如果攻击者根据d同步假设决定向任意诚实节点发送块,所有诚实节点将在一段时间后看到该块。

3. 正确性

  • 安全性
    conflux的安全性和ghost的安全性一样,只要攻击者的块生成率不到一半,就不太能够回滚由所有诚实节点一起维护的旧的主链。因为所有诚实的节点都将对主块的子树做出贡献,所以在等待足够长的时间后,攻击者如果没有大于主链块的子链块,就不可能创建子树。
    选主的算法是确定的,一旦主链的一个前面的区块在所有节点中变得稳定(即攻击者无法恢复),该算法将为所有节点产生相同的块顺序前缀。因此,由于主链的不可逆性,这个总顺序前缀是不可逆的。
  • 活性(持续性)
    conflux中块全序前缀的共识取决于主链前缀的共识。具有与ghost协议相同的活动属性,即最终新的块将被附加到主链的公共前缀中。
  • 确认性
    对于DAG中的任意区块b’,假设b’属于b的epoch,b是主链块。只要b在主链上边的不可逆,我们就可以确认b’中的事务。我们可以等待足够长的时间使攻击者回滚b的风险降低,但风险总是大于0的。我们用以下定理和引理来约束在主链上确认b的风险:假设b是在时间[t-d,t]所有诚实节点的主链上的一个块,P(b)是b的父区块,在象形时间段为0时产生。b被其中一个兄弟块a踢出枢轴链的几率不大于:在这里插入图片描述

上式中,n为时间t?d之前的b的子树中的块数,m为由诚实节点生成的a的子树中的块数,左边累加里面的式子是[26]里面定理10的应用。它为我们提供了一种方法来估计主链上每个单独的块的稳定性。
注意,主链前缀的稳定性是由前缀中的最不稳定的块决定的,假设b是所有诚实节点的主链的时间[t-d,t]上的一个块。b从主链上下来的几率不大于:
在这里插入图片描述
(不得不说,这里的式子不太明白,后面会再看一下)

实现

块头

conflux中的引用连接的实现修改了比特币中的块头结构,为其每个传出的引用连接包含32字节的块头哈希。实验结果表明,这引入的每个块小于960字节的开销可以忽略不计。

Gossip Network

conflux和ghost都需要维护块的树/DAG的完整结构,而比特币核心只在已识别的最长链中传播块。故修改了比特币核心的网络层,以广播和中继所有块。为了确保当块传递到共识层时,其所有过去的块已经交付,conflux保持每个块的有效性。每当conflux接收到一个块时,它将使用广度优先搜索(BFS)遍历DAG结构,并更新每个块的有效性。当且仅当conflux接收到过去的所有块(即通过父连接和引用连接访问的块)时,块才有效。然后,conflux将所有新验证的块传递到共识层。

旧块检测

比特币核心有以下机制来检测陈旧的块(例如,由攻击者生成和保留的块)。每个节点定期与其对等节点同步,以保持一个网络调整后的时间,即其对等节点返回的时间戳的中位数。比特币核心中的每个块也带有时间戳。如果新块的时间戳早于前11个块的中位数时间戳,或者新块的时间戳比网络调整后的时间晚两小时,则新块将被标记为无效。
conflux在比特币核心中使用了相同的机制,并进行了以下修改。首先,根据我们在实验中使用的块生成率成比例地修改规则。例如,如果系统每20秒生成一个块(即比比特币快30倍),那么如果一个块的时间戳早于以前330个块的中位时间戳,则被视为无效。其次,conflux不会删除具有无效时间戳的块。当计算子树中选择主链的块数时,它只是忽略了这个无效的块。其基本原理是,只要无效的块不再影响已经稳定的epoch的分区方案,就可以安全地将该块纳入未来的epoch,即处理块内的事务。

引导节点

当节点启动时,它将与每个对等节点进行握手,并运行引导单向同步进程以更新其本地状态。对于ghost和Conflux,节点需要从其他节点下载树/DAG中的所有块,而不仅仅是选定的链。为了实现这种单向同步,我们使用四种额外的消息类型增强了比特币核心代码库:gettips, tips, getchains and chains。为了简单起见,考虑一个节点A尝试从另一个节点B下载块的情况。首先向B发送一个gettips消息,请求提示列表,即(父)树中的叶块(用其32字节散列表示)。tips是用来响应gettips去检索tips B所感知的所有区块哈希。对于每个B的tip,A检查这是否为未知块,并将所有回答打包在getchares消息中。在收到这个getchares消息后,对于每个到A的新tip,B计算从发生块到这个tip的最后一个已知块,并发送一个包含在最后一个已知块之后开始的块列表的链消息。

7)实验结果

Conflux在云服务器(Amazon EC2)上部署模拟节点,得出如下结论:

a)区块使用率,不论是区块大小变化,还是区块生成时间变化,都是100%。也就是只要生成的区块,都能利用上,增加了区块交易的吞吐量。比特币同一时间,只有一个区块胜出,其他区块都会被浪费。

b)确认时间,不论是区块变大,或者区块生成时间变长,只有稍微变长。比特币的话,在区块变大,或者区块生成时间变长,分叉的可能性就变大,确认时间显著增大。

c)Conflux具有很好的扩展性。带宽变大,区块生成的速度变快。节点变多,生成区块也会变多。两种方式都能带来吞吐量的提升。

总结:Conflux共识机制,借鉴了2015年论文中的GHOST规则,使用DAG数据结构组织区块。论文逻辑清晰,比较容易阅读。Conflux共识机制,在DAG区块中,先使用GHOST规则确定主链,再确定区块顺序,交易顺序。发生冲突的交易,只保留第一个交易,其他冲突交易作废。论文论证了Conflux共识机制,保证了区块的安全性和可靠性,又能极大地提升交易吞吐量。实验数据表明:Conflux共识机制的吞吐量能达到5.78GB/s,确认时间4.5-7.4分钟,交易速度6000TPS。

题外:Conflux共识机制的设计,结构上和以太坊中的叔块设计感觉有点相似。以太坊中的叔块也是考虑到减少分叉,将在一定时间内生成的合法区块,“引用”连接到主链的区块中。

参考:
[1] https://www.jianshu.com/p/1952217010d1
[2] https://blog.csdn.net/A33280000f/article/details/115502387

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:03:08  更:2021-09-05 11:04:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 0:59:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码