联盟链的区块出块和定序方法、节点及区块链网络系统与流程

文档序号:23655638发布日期:2021-01-15 13:52阅读:258来源:国知局
联盟链的区块出块和定序方法、节点及区块链网络系统与流程

本申请涉及区块链技术领域,特别是涉及联盟链的区块出块和定序方法、节点及区块链网络系统。



背景技术:

目前较多的区块链网络系统(如联盟链)都采用基于拜占庭容错(bft)协议的共识机制。多个节点中有一个作为领导者的节点负责区块的产生和提出,而其它非领导者的节点对该区块进行共识的投票。经过各节点间的多轮的通信,最终共识确认这个区块。

上述过程在区块链网络系统中不断重复进行,以不断产生新的区块。区块按照序号递增的方向排序,形成区块链。

从上述过程可见,出块的过程与区块定序的过程紧密耦合,使区块链网络系统吞吐率受到bft共识延迟的严重影响,很难达到吞吐率和延迟的最优平衡。并且,现有bft共识机制,限制只能由领导者节点出块,使得区块链网络系统无法很好的利用多节点的网络并发性,容易使单节点(即领导者节点)的网络性能成为区块链网络系统性能瓶颈。



技术实现要素:

鉴于以上所述现有技术的缺点,本申请的主要目的在于提供联盟链的区块出块和定序方法、节点及区块链网络系统,以解决现有技术中拜占庭容错共识机制导致的区块链网路系统性能瓶颈问题。

为实现上述目的及其它相关目的,本申请第一方面提供一种联盟链的区块出块和定序方法,应用于包括多个节点的区块链网络系统,所述多个节点中的至少一个作为领导者节点,而其余作为从属者节点;所述联盟链的区块出块和定序方法包括:区块出块流程、区块身份选举流程、及区块定序流程;其中,所述联盟链的出块流程同所述区块身份选举流程和区块定序流程间并行进行;所述区块出块流程包括:步骤s11:每个所述节点分别进行出块并与其余节点共识;其中,每一个所述区块附属有序号;所述区块身份选举流程包括:步骤s21:所述领导者节点及各从属者节点间相互通信来执行拜占庭容错共识机制,将各个已有区块根据引用关系链接为树图结构,包括:从区块链中各已有区块中选举各枢轴链区块;各所述枢轴链区块链接构成枢轴链,以枢轴链以外所的区块为非枢轴链区块;所述区块定序流程包括:步骤s31:根据所述枢轴链区块的时序排列将各已有区块划分为区块集合;其中,每一个所述枢轴链区块对应归属于一个时段,每一个所述非枢轴链区块归属于它之后的首个所述枢轴链区块所在的时段;步骤s32:对每一个所述区块集合内的各区块按照其引用关系上的拓扑排序进行时序排序,以得到每一个所述区块集合内的各区块的排序结果;步骤s33:按照所述枢轴链区块定义的时段顺序,得到各个所述区块集合的排序结果;步骤s34:按照各个所述区块集合的排序结果为主线顺序,加上每一个所述区块集合内的各区块的排序结果为辅助顺序,得到各所述已有区块的全局排序结果;其中,每一个所述区块附属的序号按所述全局排序结果所在的位置重新排序。

在本申请第一方面的实施例中,所述拜占庭容错共识机制是基于原始拜占庭容错共识算法、实用拜占庭容错共识算法(pbft)、代理始拜占庭容错共识算法(dbft)、或快速始拜占庭容错共识算法(fbft)的。

在本申请第一方面的实施例中,下一枢轴链区块为引用上一枢轴链区块或作为枢轴链的创始区块的满足拥有最多、高于预设数量、及预设数量的子区块中一种条件或多种条件组合的区块;或者,下一枢轴链区块为在引用上一枢轴链区块的各区块中位于最长子链上的区块。

在本申请第一方面的实施例中,包括:根据更新的区块链更新对应的树图结构。

为实现上述目的及其它相关目的,本申请第二方面提供一种用于区块链网络系统的节点,包括:一或多个网络通信器,用于与外部网络通信;一或多个存储器,用于存储至少一计算机程序;一或多个处理器,耦合于所述一或多个网络通信器、及所述一或多个处理器,用于运行所述至少一计算机程序,以令所述节点作为如第一方面所述的区块出块和定序方法中的领导者节点或从属者节点。

为实现上述目的及其它相关目的,本申请第三方面提供一种用于实现联盟链的区块链网络系统,包括:所述多个节点之间相互通信,以执行区块出块流程、区块身份选举流程、及区块定序流程;其中,所述联盟链的出块流程同所述区块身份选举流程和区块定序流程间并行进行;其中,所述区块出块流程包括:步骤s11:每个所述节点分别进行出块并与其余节点共识;其中,每一个所述区块附属有序号;所述区块身份选举流程包括:所述多个节点中的至少一个作为领导者节点,而其余作为从属者节点;步骤s21:所述领导者节点及各从属者节点间相互通信来执行拜占庭容错共识机制,将各个已有区块根据引用关系链接为树图结构,包括:从区块链中各已有区块中选举各枢轴链区块;各所述枢轴链区块链接构成枢轴链,以枢轴链以外所的区块为非枢轴链区块;所述区块定序流程包括:步骤s31:根据所述枢轴链区块的时序排列将各已有区块划分为区块集合;其中,每一个所述枢轴链区块对应归属于一个时段,每一个所述非枢轴链区块归属于它之后的首个所述枢轴链区块所在的时段;步骤s32:对每一个所述区块集合内的各区块按照其引用关系上的拓扑排序进行时序排序,以得到每一个所述区块集合内的各区块的排序结果;步骤s33:按照所述枢轴链区块定义的时段顺序,得到各个所述区块集合的排序结果;步骤s34:按照各个所述区块集合的排序结果为主线顺序,加上每一个所述区块集合内的各区块的排序结果为辅助顺序,得到各所述已有区块的全局排序结果;其中,每一个所述区块附属的序号按所述全局排序结果所在的位置重新排序。

在本申请第三方面的实施例中,所述拜占庭容错共识机制是基于原始拜占庭容错共识算法、实用拜占庭容错共识算法(pbft)、代理始拜占庭容错共识算法(dbft)、或快速始拜占庭容错共识算法(fbft)的。

在本申请第三方面的实施例中,下一枢轴链区块为引用上一枢轴链区块或作为枢轴链的创始区块的满足拥有最多、高于预设数量、及预设数量的子区块中一种条件或多种条件组合的区块;或者,下一枢轴链区块为在引用上一枢轴链区块的各区块中位于最长子链上的区块。

在本申请第三方面的实施例中,包括:根据更新的区块链更新对应的树图结构。

如上所述,本申请的联盟链的区块出块和定序方法、节点及区块链网络系统,通过节点之间基于拜占庭容错共识机制确定每个时段的枢轴链区块,各枢轴链区块链接构成枢轴链,每个节点通过区块定序规则以将每个枢轴链区块之前的非枢轴链区块进行相应时段的归属,并结合时段顺序和所归属区块间的拓扑排序来完成区块定序流程并得到全局排序结果。由此,通过本申请的方案实现了区块定序过程与区块出块过程在逻辑上解耦合,使得系统吞吐率不再受到bft共识延迟的影响;另外,在本申请的方案中,区块定序过程与区块出块过程在逻辑上解耦合,使得多个节点都能同时出块,有效提升区块链网络系统的运行性能。

附图说明

图1显示为区块及区块链的结构示意图。

图2显示为区块链网络系统的结构示意图。

图3显示为基于pbft算法的共识机制的流程示意图。

图4显示为本申请实施例中的区块定序的原理示意图。

图5a至5d显示为拓扑排序过程的原理示意图。

图6显示为本申请实施例中区块链网络系统进行区块身份选举流程的示意图。

图7显示为本申请实施例中区块链网络系统进行区块定序流程的示意图。

图8显示为本申请一实施例中计算机装置的电路结构示意图。

具体实施方式

以下由特定的具体实施例说明本申请的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本申请的其它优点及功效。

在下述描述中,参考附图,附图描述了本申请的若干实施例。应当理解,还可使用其它实施例,并且可以在不背离本公开的精神和范围的情况下进行模块或单元组成、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,并且本申请的实施例的范围仅由公布的专利的权利要求所限定。这里使用的术语仅是为了描述特定实施例,而并非旨在限制本申请。

虽然在一些实例中术语第一、第二等在本文中用来描述各种元件、信息或参数,但是这些元件或参数不应当被这些术语限制。这些术语仅用来将一个元件或参数与另一个元件或参数进行区分。例如,第一元件可以被称作第二元件,并且类似地,第二元件可以被称作第一元件,而不脱离各种所描述的实施例的范围。第一元件和第二元件均是在描述一个元件,但是除非上下文以其它方式明确指出,否则它们不是同一个元件。取决于语境,比如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”。

再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其它特征、步骤、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“a、b或c”或者“a、b和/或c”意味着“以下任一个:a;b;c;a和b;a和c;b和c;a、b和c”。仅当元件、功能、步骤或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

区块链是一种分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。已知的区块链类型有公有链(publicblockchain)、私有链(privateblockchain)及联盟链(consortiumblockchain)。

公有链是指任何人都可以随时进入系统中读取数据、发送可确认交易、竞争记账的区块链。因为没有任何人或机构可以控制或篡改其中数据的读写,公有链通常被认为是完全去中心化的。比特币、以太坊都是典型的公有链。常见公有链有eth以太坊、eos柚子、thundercorett链、qtum量子、ont本体、tron波场等。

私有链指的是对单独的个人或实体(如企业)开放的区块链。例如某家企业内部成员参与的区块链。

联盟链的账本的公开程度,介于公有链和私有链之间。联盟链是指多个机构共同管理维护的区块链,参与区块链的节点是事先选定的。联盟链也只对联盟内部成员开放全部或部分功能,链上信息的读取、写入以及记账规则都按照联盟共识来设定。示例性地,在实际应用中,所述多个机构例如为某行业的多个企业,例如银行等,故联盟链在此场景下也被称为“行业链”。私有链和联盟链之间的设计隐私权限会有不同,联盟链中的权限设计要求往往更为复杂。

本申请的方案优选应用在联盟链中。

如图1所示,区块链是由区块连接构成的链条,而各个区块记录了经共识确认的交易信息的哈希值。通过验证的可信交易记录将被盖上时间戳(timestamp)并存储到区块链上一个区块上。每一个区块上都包括前一个区块的哈希值(hash),区块n-1为区块n的前一区块,区块n为区块n+1的前一区块,以此链接成区块链;而在每一个区块内部,所有交易记录则以如默克尔树(merkletree)的结构存储,图中简单表示为hashtree。

如前所述,区块链是一种分布式的共享账本和数据库,由区块链网络系统中的各个节点在共识确认的机制下出块、更新。如图2所示,展示一实施例中区块链网络系统200的结构示意图,其中包含了多个节点201。各个节点201可以是服务器、服务器组、平板电脑、手机、个人计算机(personalcomputer,pc)、笔记本电脑等设备实现,或这些设备中的多种构成的分布式处理系统实现,节点201间通过点对点网络通信连接以相互信息收发。

在现实场景中,联盟链系统都采用基于拜占庭容错(bft)协议的共识机制。拜占庭容错(bft)起源于拜占庭将军问题,是能够抵抗拜占庭将军问题导致的一系列失利的系统特点。这意味着即使某些节点201出现故障或恶意行为,只要符合预定条件,例如拜占庭节点201(如故障或恶意节点201数量)必须小于网络系统里节点201总数的1/3等,则区块链网络系统200也能容许这些错误而继续运转。

在现有采用bft的共识机制的区块链网络系统中,多个节点中有一个领导者身份的节点(简称领导者节点)负责区块的产生和提出,其他非领导者的从属者身份的节点(可简称从属者节点)对该区块进行投票。经过多轮的通信,最终确认这个区块。这个过程不断重复进行,以不断产生新的区块,每个区块会有一个附属的序号(number)。每产生一个区块,领导者节点会将该区块广播给其他非领导节点。非领导者节点对该区块进行投票,并将投票结果返回给领导者节点。为了能够处理拜占庭故障以及当机或丢包故障,这样的过程会进行多次迭代以最后确认该区块。不同的bft协议会有不同的迭代次数,但大致的过程相似。最终区块按照序号递增的方向排序,形成区块链。

在一些示例中,有的bft协议是基于实用拜占庭容错算法pbft(practicalbyzantinefaulttolerance)的,该算法解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由节点数的指数级降低到节点数的平方级,使得拜占庭容错算法在实际系统应用中变得可行。

pbft算法的设计旨在让系统中大部分的诚实节点来覆盖恶意节点或无效节点的行为。pbft算法的节点数量是固定的,节点身份提前确定,无法动态添加或删除,适用于节点数目固定的联盟链或私有链场景中。

如图3所示,展示基于pbft算法的共识机制的流程示意图。其中,c表示客户端,0、1、2、3分别表示4个节点;在此视域(view)中,0为领导者节点,1,2,3为从属者节点;假设3为故障节点。结合上图,说明整个共识机制的流程:

请求(request)阶段:客户端c发送请求到领导者节点0;

预准备(pre-prepare)阶段:节点0对c的请求进行广播,扩散至从属者节点1、2、3;

准备(prepare)阶段:节点1、2、3收到后记录并再次广播,节点1发给节点0、2、3,节点2发给节点0、1、3,3因为故障无法广播。

确认(commit)阶段:节点0、1、2、3在prepare阶段,若收到超过一定数量(2f,实际使用中,f为可以容忍的拜占庭节点个数)的相同请求,则进入commit阶段,广播commit请求;

回复(reply)阶段:节点0、1、2、3在commit阶段,若其中有一个收到超过一定数量(2f+1)的相同请求,则对c进行反馈;

根据上述流程,在n≥3f+1的情況下一致性是可以正常运行的,n为总节点数量,f为拜占庭节点总数,即拜占庭节点数量不能超过总数的1/3。

再以上述原理举一个pbft(实用拜占庭容错算法)的例子更直观解释。假设n=4,f=1,即有四个节点,其中有一个节点是拜占庭节点,即依然假设上述节点3为故障节点。

客户端c发送请求到0节点,假设这里请求内容为“1”;节点0收到c的请求后进行广播,将请求内容“1”扩散至节点1、2、3;节点1、2、3收到后内容“1”后,再次广播,节点1发给节点0、2、3,节点2发给节点0、1、3,节点3因为故障无法广播;节点0、1、2会在上一阶段分别收到三个请求内容“1”,均超过了2个,于是节点0、1、2会分别广播请求内容“1”;此时如果一个节点(0,1,2中任意一个)收到3(即2*1+1)条commit消息,即对c进行反馈。

在又一示例中,考虑到pbft算法存在的扩容性问题,有后来者采用了一种代理拜占庭容错算法——dbft(delegatedbyzantinefaulttolerant)。它与权益证明算法(eos)的委任权益证明算法(dpos)共识机制一样,由权益持有者投票选举产生代理记账人,由代理记账人人验证和生成区块,以此大幅度降低共识过程中的节点数量,解决了bft算法固有的扩容性问题。

为了提升区块链系统的效率,dbft将pbft中的c/s(客户端/服务端)架构的请求响应模式,改进为适合p2p网络的对等节点模式,并将静态的共识参与节点改进为可动态进入、退出的动态共识参与节点,使其适用于区块链的开放节点环境。

dbft的算法中,参与记账的是超级节点,普通节点可以看到共识过程,并同步账本信息,但不参与记账。总共n个超级节点分为一个议长和n-1个议员,议长会轮流当选。每次记账时,先有议长发起区块提案(拟记账的区块内容),一旦有至少(2n+1)/3个记账节点(议长加议员)同意了这个提案,那么这个提案就成为最终发布的区块。

在另外的示例中,还有快速拜占庭容错算法(fbft)。由于pbft已经是bft家族当中最实用的协议,但是如果当节点达到一定数量(例如几百)时,节点间会有大量的广播消息;且由于节点在每次收到消息时,都需要签名验证,会导致巨大的计算量。fbft便是一个使用聚合签名以提升效率的bft家族协议,使用pos进行节点身份确认优化pbft共识创造效率更高的fbft共识。

在fbft算法中,从属者节点不用广播他们的投票,只需通过数字签名的方式把投票发给领导者节点即可,领导者节点把收到的数字签名合成为一个数据量位o(1)的多重签名,再广播出去,这使得整个共识过程的消息复杂度从o(n*n)骤降到o(n)。

可能还有其它变种的bft算法,此处不作一一描述。现有技术中,基于拜占庭容错(bft)协议的区块链系统中,在领导者节点出块时,即需要进行对应的区块通过bft共识机制确认并附属序号(number),从而才能根据序号来确定区块顺序,由每个区块和出块、和它的定序都是一一对应地执行的,即出块和定序之间紧密耦合;可见,出块的共识过程中一旦具有延迟,那么就会造成区块链网络系统的运行延迟,效率低下。

区块顺序的确定也是非常重要的。由于区块中存有各条交易记录,区块之间的顺序亦表示了不同区块的交易记录之间的时间戳顺序,有了准确的时间戳顺序,才能准确地执行某些应用,例如在撮合交易时,辨别不同交易记录等。

鉴于此,通过本申请实施例中的方案可以将基于bft共识机制的区块链网络系统的区块出块和区块定序流程相互解耦,以达到相互并行而提升系统效率的目的。需特别说明的是,本申请实施例中所涉及的bft共识机制,不限制采用的拜占庭算法,可以例如为原始bft算法、上述pbft算法、dbft算法、fbft算法等皆可。本申请方案中的区块链系统能良好适配于实现主要采用bft共识机制的联盟链,且区块出块和区块定序解耦,能实现大吞吐量的联盟链。

如图4所示,展示本申请实施例中的区块定序的原理示意图。

如图所示,例示性地展示了一种区块链的拓扑结构,如果按照现有技术的“出块-定序”的方式,则图示中的每个区块都要经历这样的过程,图中例示性地展示的19个区块,就需要执行19次这样的“出块-定序”过程。

对此本申请进行了改进,将树图思想应用到区块链的区块结构中,从而达成高效的与出块并行的区块排序过程。

具体的,在图4中,上半部分表示根据区块链所链接(即转化)而成的树图结构,从中可以找到一条枢轴链a,所述枢轴链上的每个区块可称为“枢轴链区块”,相邻的枢轴链区块之间具有引用关系,即如图中加粗箭头所示;每个枢轴链区块是通过区块链系统中各节点依循bft共识机制来选择的,如图中下半部的“bft”部分所表示;示例性地,所述bft共识机制可以是基于原始bft算法、pbft算法、dbft算法或其它bft算法等等,皆可通用地运行本申请的方案,不作限定;图中的“bft”部分的绘图方式也只是示例性地展示,并非限定所采用的bft算法的类型。

在一些实现方式中,每个枢轴链区块可以是引用上一枢轴链区块的符合预设条件的区块。可选的,所述预设条件可以是相关于子区块数量的,例如拥有最多数量子区块、拥有高于预设数量的子区块(例如具有大于n个数量的子区块)、或者具备预设数量的子区块(例如具有n个数量的子区块)中的一种条件或多种条件组合;再或者,所述预设条件又可以设置成:下一枢轴链区块为在引用上一枢轴链区块的各区块中位于最长子链上的区块,例如区块链中引用上一枢轴链区块a的子区块有b、c、d,其中b位于区块链中一条具有9个区块链接而成的子链,而c、d分别位于8个、7个区块链接而成的子链,故可选择b作为下一枢轴链区块。

较佳的,所述预设条件可以设置为具有最多数量子区块的区块,则枢轴链为主链。可选的,当同时存在引用上一枢轴链区块的多个区块时,且该多个区块拥有相同数量的子区块时,可以根据这些区块的哈希id进行排序以确认下一枢轴链区块。

再者,可以预先设定区块定序规则,其可包含在区块链网络系统的各个节点的协议中而被各个节点遵照执行。该区块定序规则确定了根据枢轴链进行区块归属的方式,当枢轴链区块被共识确认后,可以按照所述区块定序规则的将该枢轴链区块之前与其在拓扑结构上相关的区块归属到该枢轴链区块所在的时段,且可被各个节点间进行共识确认。

在图4中,各个节点对应每个时段来运行一轮bft共识机制来确认一个时段的枢轴链区块,每轮共识可称为一个round,即例如图中的round0~round4。

示例性地,该区块定序规则包括:枢轴链区块以外的每个非枢轴链区块归属于之后的首个枢轴链区块所在的时段。可以理解的是,所述之后指的可以是根据出块时间来进行判断。

以图4举例来说,图4中g代表首个枢轴链区块(例如创世区块),之后的枢轴链区块依次为h、i、j、k、l、m,这些枢轴链区块之间依次引用,例如h是g的子区块,i为h的子区块等;将非枢轴链区块1~12向其之后的首个枢轴链区块所在时段进行分配epoch0中仅有g,epoch1中仅有i;在i之前的非枢轴链区块1、2归属于epoch2;在j之前的非枢轴链区块3、4、5归属于epoch3;在k之前的非枢轴链区块6、7归属于epoch4;在l之前的非枢轴链区块8、9、10归属于epoch5;在m之前的非枢轴链区块11、12归属于epoch6。

示例性地,每个epoch可按时间顺序进行排序,即例如epoch1、epoch2....epoch6;具体的,每个epoch可分配有epochid,epochid可与epoch的时间特征关联,从而通过epochid即可对各个epoch进行排序。

示例性地,在每个epoch中,各个区块(包括枢轴链区块和各非枢轴链区块)间可根据相互的引用关系进行拓扑排序(topologicalorder),该引用关系即如图1中在出块时确定,而同一epoch中枢轴链区块比各个非枢轴链区块靠后;因此,在枢轴链区块确认后,其之前的各非枢轴链区块的引用关系都已确定,所以枢轴链区块的选举不会影响之前区块的出块;由此,区块出块流程同枢轴链区块的选举流程、及区块定序流程之间并行运行,以此提升区块链网络系统的运行效率。

在一示例中,具体说明拓扑排序(topologicalorder)的原理。对一个有向无环图(directedacyclicgraph简称dag)g进行拓扑排序,是将g中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈e(g),则u在线性序列中出现在v之前。

通常,这样的线性序列称为满足拓扑排序(topologicalorder)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

示例性地,拓扑排序(topologicalorder)的步骤,包括:

a、从dga图中找到一个没有前驱的顶点输出,该寻找过程可以是遍历节点、也可以用优先队列维护;

b、删除以这个顶点为起点的边;删除顶点指向的边,为了找到下个没有前驱的顶点。

重复上述a、b,直到最后一个顶点被找到;在此过程中可进行是否存在顶点的判断,如果还有顶点未被输出,则说明有环存在。

通过图5a至5c进行举例,在5a中,展示了一张初始的拓扑结构图。通过上述拓扑排序(topologicalorder)的步骤,会在5a中找到没有前驱的顶点1、2,接下来可以按先处理顶点1后处理顶点2、或先处理顶点2后处理1的顺序依次输出,并删除以它们为起点的边,得到图5b所示的拓扑结构图。所述输出指的是例如依序记录顶点处理的顺序到一排序序列中;假设按照顶点1、2顺序进行处理,则该排序序列中会存在“1,2”。

再重复上述a、b步骤,在图5b中找到顶点3、4,将它们依次输出,并分别删除以它们为起点的边,形成图5c;假设按照顶点4、3的顺序进行处理,则该排序序列中存在“1,2,4,3”。

在图5c中,重复上述a、b步骤可以找到顶点5,6;假设先处理顶点5,再处理顶点6,则该排序序列中存在“1,2,4,3,5,6”。

在图5c中删除5,6为起点的边之后,得到图5d,其中仅有顶点7,故重复上述步骤可以得到最终的排序序列“1,2,4,3,5,6,7,8”。

需特别说明的是,在实际的区块排序过程中,可能存在如图5a~5d的拓扑结构中1和2的地位相当,3和4的地位相当的情况;但是两个地位相当的区块,在排序时可以简单地如上述举例任意选择某个在先,另一个在后,但是由于区块和其中的交易记录都是有时间戳的,故对于地位相当的多个区块,可以根据它们出现时间(如出块时间等)先后进行顺序确定,也可以根据表示它们先后的区块id(可以是哈希表示)来确定。

例如,在某个epoch中,在进行拓扑排序的寻找顶点的步骤时找到a、b两个区块,它们地位相当,而a区块的出现时间在b区块之后,那么在区块排序时候会将b排在a的前面。

再请参阅图4,根据epoch0~6的顺序作为主线顺序,再将每个epoch0中归属的区块间的拓扑排序结果作为支线顺序,两者结合就得到了整个区块链的区块排序结果,也可称为“区块全序”(即全局区块排序结果)。

在实际场景中,g~m的枢轴链区块身份的共识确认可以是按时间顺序逐步得到的,且在时间顺序的进程中,节点g~m,1~12也都是逐个共识确认而添加到区块链中的,故需理解的是,本申请实施例中的区块链网络系统是在实时地进行出块以及区块定序的。

上述枢轴链区块选择所采用的拜占庭容错共识机制,可以是基于原始bft算法、pbft算法、dbft算法、或ffbt算法等等,并不限制;根据之前实施例中对拜占庭容错共识机制的介绍可知,需要领导者节点提出,由与其身份相对的从属者节点投票完成。

在本申请实施例中,区块链网络系统所包含的多个节点间相互通信,以实现区块出块流程、区块身份选举流程、及区块定序流程;其中,所述联盟链的出块流程同所述区块身份选举流程和区块定序流程间并行进行。以下逐一说明各个流程。

在一些示例中,区块链网络系统的区块出块流程包括:每个所述节点分别进行出块并与其余节点共识;具体的,出块的节点可以将所出的块广播给其余节点记录投票,当超过一定数量(例如50%以上、2/3以上等等,视不同的共识机制而定)节点选中一所出的块,则将块加入到区块链中;其中,每一个所述区块附属有序号(例如m个区块,分别具有id1~idm)。需特别说明的是,所述区块身份选举流程、及区块定序流程中采用了图4实施例中根据树图枢轴链定序的原理,则区块链网络系统中的每个节点皆可以独立、并行、同时地出块,从而大大增加整个区块链网络系统的吞吐量,提升工作效率。

可选的,出块时各个区块的id可以只是按初始顺序排列,在之后执行了例如图7所示的区块定序流程之后得到了全局排序结果后,再根据全局排序结果重新确定各个区块的序号。

如图6所示,展示本申请实施例中区块链网络系统进行区块身份选举流程的示意图。

区块链网络系统中的多个节点还基于拜占庭容错共识机制进行共识,即各个节点还并行地运行bft协议以用于进行枢轴链区块的选举流程;遵循bft共识机制,所述多个节点中的至少一个作为领导者节点,而其余作为从属者节点,即相互间可以依循预先设计的bft协议进行共识,bft协议所基于的算法可以是原始bft算法、pbft算法、dbft算法、或ffbt算法等等,并不加以限制。

如图6所展示的,在某个视域中,各个节点中有一个领导者节点601,其它为从属者节点602。以下说明区块出块和定序方法的流程:

在执行bft共识机制时,由领导者节点601向各从属者节点602发出消息以触发各从属者节点602的参与投票;在之后,领导者节点或每个从属者节点602接收其余节点发来的消息,并发出相应的响应消息至其余节点,以依循bft协议投票来共识确认区块链中下一枢轴链区块。

示例性地,需要进行归属时段的非枢轴链区块都是在该时段中的枢轴链区块之前存在的,每个节点记录了根据区块链得到的树图结构,也就记录了已出块的各个区块间的引用关系;每个节点根据所记录的树图结构可以判断出自己所认为的每个枢轴链区块,从而按bft共识机制进行选举枢轴链区块的投票,在达成bft共识机制要求的共识条件后,即选举出每个枢轴链区块。

从区块链系统全局角度来讲,区块身份选举流程具体如下所示,包括:

步骤s21:所述领导者节点及各从属者节点间相互通信来执行拜占庭容错共识机制,将各个已有区块根据引用关系链接为树图结构(dag,有向无环图),包括:从区块链中各已有区块中选举各枢轴链区块;各所述枢轴链区块链接构成枢轴链,以枢轴链以外所的区块为非枢轴链区块。

具体来讲,在区块身份选举流程中,领导者节点可以向各个从属者节点提名下一个枢轴链区块,而各个从属者节点对该提名进行投票,以在达成满足bft协议的共识条件时选出枢轴链区块。

可以理解的是,此bft协议可以参考前述实施例中的举例,例如图3的pbft算法,dbft、fbft或者其它变种的bft算法等等,此处不作展开一一描述。

在pbft的场景中,所述领导者节点,也可以根据客户端发送的对下一枢轴链区块的共识请求的消息来同各个从属者节点间进行依循bft协议的消息交互;进而可参考图3,经历多轮通信后,各节点向客户端返回响应消息,以根据这些消息中的投票得到对下一枢轴链区块的共识结果。

在一些变种的bft算法(例如dbft,fbft等)场景中,也可以不需要客户端,而由选出的领导者节点来向各个从属者节点发出共识请求的消息,进而经过多轮通信后,领导者节点收到各个从属者节点的响应消息的投票来得到对下一枢轴链区块的共识结果。

如图7所示,展示本申请实施例中区块链网络系统进行区块定序流程的示意图。所述区块链网络系统中的每个节点皆可依据所记录的树图结构和确定该的区块定序规则来执行这一区块定序流程得到各自的全局区块排序结果,所有节点中超过预定数量的节点所具有的相同的全局区块排序结果作为共识确认的全局区块排序结果。

具体的区块定序流程如下所示:

步骤s31:根据所述枢轴链区块的时序排列将各已有区块划分为区块集合;其中,每一个所述枢轴链区块对应归属于一个时段,每一个所述非枢轴链区块归属于它之后的首个所述枢轴链区块所在的时段。

步骤s32:对每一个所述区块集合内的各区块按照其引用关系上的拓扑排序进行时序排序,以得到每一个所述区块集合内的各区块的排序结果;

步骤s33:按照所述枢轴链区块定义的时段顺序,得到各个所述区块集合的排序结果;

步骤s34:按照各个所述区块集合的排序结果为主线顺序,加上每一个所述区块集合内的各区块的排序结果为辅助顺序,得到各所述已有区块的全局排序结果;其中,每一个所述区块附属的序号按所述全局排序结果所在的位置重新排序。

举例来说,可以根据区块排序结果对各个区块预先附属的序号(例如m个区块,分别具有id1~idm)进行重新排序,例如之前一区块排在a位置,对应的id为b;在区块定序之后,其位置发生了变化,对应的id重新分配为f。

其中,每个区块集合即为归属于一时段(epoch)的枢轴链区块和各非枢轴链区块的集合;区块集合的排序结果可以例如为按图4中epoch0~epoch6的时间顺序进行排序的结果;区块集合中各区块的排序结果可以是,例如将图4中某个epoch中的各个区块按其引用关系依照图5a~5d实施例所揭示的拓扑排序方式进行排序,而得到的结果。两种排序结果的结合,即可得到所有区块的全局排序结果。

可以理解的,在具体实现中,需要进行归属时段的非枢轴链区块都是在该时段中的枢轴链区块之前存在的。每个节点记录了根据区块链得到的树图结构,且其中的各枢轴链区块得到了共识确认,则每个节点可以根据共识确认的各枢轴链区块以及树图结构中各区块之间的引用关系,按照区块定序规则将各区块归属到对应时段,而得到所述区块集合的排序结果、和区块集合中各区块的排序结果,以得到本节点所认为的全局排序结果,在超过预定数量的节点共识了某个全局排序结果时,即得到了共识确认的全局排序结果。

在一些示例中,各个节点可以定期根据当时的区块链(可能有新出块的区块而更新)进行所维护的对应的树图结构的更新,并根据更新的树图结构地执行所述区块定序流程,以在每次得到更新的区块链的全局排序结果。

在一些示例中,图6实施例中的区块身份选举流程可以与图7实施例中的区块定序流程组合为一个流程,而在一个时机连续执行。

举例来说,当在某个时机需要进行区块定序时,区块链网络系统可以先执行图6实施例中的区块身份选举流程以确认枢轴链上各枢轴链区块;之后再执行图7实施例中的区块定序方法,根据所确定的各所述枢轴链区块和区块定序规则配合得到全局排序结果。

在又一些示例中,图6实施例中的区块身份选举流程可以与图7实施例中的区块定序流程分别先后间断执行。

举例来说,在某个第一时机,区块链网络系统可以先执行图6实施例中的区块身份选举流程以确认枢轴链上各枢轴链区块;之后,当在某个第二时机需要进行区块定序时,区块链网络系统实施图7实施例中的区块定序流程,根据各节点已共识确认的各枢轴链区块和区块定序规则配合得到区块排序结果。

如图8所示,展示本申请一实施例中计算机装置的电路结构示意图。

所述计算机装置可以实现于服务器、服务器组、平板电脑、手机、个人计算机(personalcomputer,pc)、笔记本电脑等设备,以用于实现为前述实施例中区块链网络系统中的节点。

本实施例中的计算机装置800,包括:

一或多个网络通信器801,用于。示例性地,所述网络通信器501包括有线或无线通信电路;所述有线通信电路包括:有线网卡等;所述无线通信电路包括例如wifi、2g/3g/4g/5g通信模块等。

一或多个存储器802,用于存储至少一计算机程序。示例性地,所述一或多个存储器802可包括高速随机存取存储器,和/或包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其它非易失性固态存储设备。在某些实施例中,存储器还可以包括与一个或多个处理器分处于不同设备中但相连接的存储器,例如经由rf电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网、广域网、存储局域网等,或其适当组合。存储器控制器可控制设备的诸如cpu和外设接口之类的其它组件对存储器的访问。

一或多个处理器803,耦合于所述一或多个网络通信器801、及所述一或多个处理器802,用于运行所述至少一计算机程序,以实现例如图6、或图7中节点的功能。

通过运行所述至少一计算机程序,所述计算机装置所实现的节点既可以用于所述区块出块流程中的出块或投票,也可以用于参与基于bft共识机制的所述区块身份选举流程以作为领导者节点或从属者节点,还可以用于执行所述区块定序流程。

可以理解的是,本申请实施例中还可以提供区块链网络系统,包括:所述多个节点之间相互通信,以执行区块出块流程、区块身份选举流程、及区块定序流程;其中,所述联盟链的出块流程同所述区块身份选举流程和区块定序流程间并行进行;其中,所述区块出块流程包括:步骤s11:每个所述节点分别进行出块并与其余节点共识;其中,每一个所述区块附属有序号;所述区块身份选举流程包括:所述多个节点中的至少一个作为领导者节点,而其余作为从属者节点;步骤s21:所述领导者节点及各从属者节点间相互通信来执行拜占庭容错共识机制,将各个已有区块根据引用关系链接为树图结构,包括:从区块链中各已有区块中选举各枢轴链区块;各所述枢轴链区块链接构成枢轴链,以枢轴链以外所的区块为非枢轴链区块;所述区块定序流程包括:步骤s31:根据所述枢轴链区块的时序排列将各已有区块划分为区块集合;其中,每一个所述枢轴链区块对应归属于一个时段,每一个所述非枢轴链区块归属于它之后的首个所述枢轴链区块所在的时段;步骤s32:对每一个所述区块集合内的各区块按照其引用关系上的拓扑排序进行时序排序,以得到每一个所述区块集合内的各区块的排序结果;步骤s33:按照所述枢轴链区块定义的时段顺序,得到各个所述区块集合的排序结果;步骤s34:按照各个所述区块集合的排序结果为主线顺序,加上每一个所述区块集合内的各区块的排序结果为辅助顺序,得到各所述已有区块的全局排序结果;其中,每一个所述区块附属的序号按所述全局排序结果所在的位置重新排序。

可选的,所述拜占庭容错共识机制是基于原始拜占庭容错共识算法、实用拜占庭容错共识算法(pbft)、代理始拜占庭容错共识算法(dbft)、或快速始拜占庭容错共识算法(fbft)的。

可选的,下一枢轴链区块为引用上一枢轴链区块或作为枢轴链的创始区块的满足拥有最多、高于预设数量、及预设数量的子区块中一种条件或多种条件组合的区块;或者,下一枢轴链区块为在引用上一枢轴链区块的各区块中位于最长子链上的区块。

可选的,区块链网络系统中的节点根据更新的区块链更新对应的树图结构。

所述区块链网络系统的网络结构可以例示性地为图2中的网络结构。

前述实施例中所实现的各种功能,涉及计算机软件产品;该计算机软件产品存储在存储介质中,用于在被运行时使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤,例如之前实施例中节点所参与执行的各个流程(即区块出块流程、区块身份选举流程、区块定序流程等)中各个步骤所涉及的程序代码可分别存储在计算机存储介质。

于本申请提供的实施例中,所述计算机存储介质可以包括只读存储器、随机存取存储器、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁存储设备、闪存、u盘、移动硬盘、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。另外,任何连接都可以适当地称为计算机可读介质。例如,如果指令是使用同轴电缆、光纤光缆、双绞线、数字订户线(dsl)或者诸如红外线、无线电和微波之类的无线技术,从网站、服务器或其它远程源发送的,则所述同轴电缆、光纤光缆、双绞线、dsl或者诸如红外线、无线电和微波之类的无线技术包括在所述介质的定义中。然而,应当理解的是,计算机存储介质和数据存储介质不包括连接、载波、信号或者其它暂时性介质,而是旨在针对于非暂时性、有形的存储介质。如申请中所使用的磁盘和光盘包括压缩光盘(cd)、激光光盘、光盘、数字多功能光盘(dvd)、软盘和蓝光光盘,其中,磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。

在一个或多个示例性方面,本申请方法流程中涉及的计算机程序所描述的功能可以用硬件、软件、固件或者其任意组合的方式来实现。当用软件实现时,可以将这些功能作为一个或多个指令或代码存储或传送到计算机可读介质上。本申请所公开的方法或算法的步骤可以用处理器可执行软件模块来体现,其中处理器可执行软件模块可以位于有形、非临时性计算机存储介质上。有形、非临时性计算机存储介质可以是计算机能够存取的任何可用介质。

本申请上述的附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这根据所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以通过执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以通过专用硬件与计算机指令的组合来实现。

综上所述,本申请的联盟链的区块出块和定序方法、节点及区块链网络系统,通过节点之间基于拜占庭容错共识机制确定每个时段的枢轴链区块,各枢轴链区块链接构成枢轴链,每个节点通过区块定序规则以将每个枢轴链区块之前的非枢轴链区块进行相应时段的归属,并结合时段顺序和所归属区块间的拓扑排序来完成区块定序流程并得到全局排序结果。由此,通过本申请的方案实现了区块定序过程与区块出块过程在逻辑上解耦合,使得系统吞吐率不再受到bft共识延迟的影响;另外,在本申请的方案中,区块定序过程与区块出块过程在逻辑上解耦合,使得多个节点都能同时出块,有效提升区块链网络系统的运行性能。

上述实施例仅例示性说明本申请的原理及其功效,而非用于限制本申请。任何熟悉此技术的人士皆可在不违背本申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本申请的权利要求所涵盖。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1