首页 / 专利库 / 资料储存系统 / 分布式账本 / 区块链 / 区块头 / 一种多层分片架构的区块链共识方法及系统

一种多层分片架构的链共识方法及系统

阅读:752发布:2020-05-15

专利汇可以提供一种多层分片架构的链共识方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 属于计算机技术领域,具体是一种多层分片架构的 区 块 链 共识方法及系统。所述多层分片架构的区块链共识方法包含两类区块,分别为大区块和小区块,所述大区块是主干区块,按出现先后顺序、逐一地向前引用前一个大区块;每个所述小区块均唯一归属于一个大区块,并在产生时引用所述大区块的大 区块头 。所述大区块包含多个所述小区块。所述小区块对交易进行打包。所述多层分片架构的区块链共识系统是采用所述的多层分片架构的区块链共识方法对 节点 进行组织及共识架构的系统。,下面是一种多层分片架构的链共识方法及系统专利的具体信息内容。

1.一种多层分片架构的链共识方法,其特征在于:
包含两类区块,分别为大区块和小区块;
所述大区块是主干区块,按出现先后顺序、逐一地向前引用前一个大区块;
所述大区块包括:大区块头和大区块体;
所述小区块用来打包交易;不同节点可以同时打包不同的小区块以形成分片效应;
所述小区块包括:小区块头和小区块体;
所述大区块包含多个所述小区块,形成多层结构;
所述大区块和所述小区块基于共识方法产生并构成区块链。
2.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:所述大区块头和所述小区块的产生需经过PoW计算;产生所述大区块头和所述小区块的PoW计算基于不同的内容和难度;每个所述小区块均唯一归属于一个大区块,并在产生时引用所述大区块的大区块头。
3.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:所述共识方法包括以下阶段:
Leader竞争阶段:在该阶段中,节点通过PoW计算生成大区块头,在所述大区块头生成后将其在网络中扩散,并将自身身份变化为Leader;
小区块打包阶段:当节点收到来自其他节点产生的大区块头并验证其合法后,所述节点进入到小区块打包阶段;在该阶段中,当满足预设小区块打包条件后,节点将所收到但未打包的交易构造为交易树,并与所收到的所述大区块头一起进行PoW计算,计算成功后,将所生成的小区块在网络中进行扩散。
4.根据权利要求3所述的多层分片架构的区块链共识方法,其特征在于:所述预设小区块打包条件包括以下条件中的一项或几项的组合:
1)当所收到的交易的总交易金额达到一个阈值时;
2)当所收到的交易的总的手续费用达到一个阈值时;
3)当所收到的交易数量达到一个预设的数量时;
4)当将产生的小区块的数据包大小达到了一个阈值。
5.根据权利要求3所述的多层分片架构的区块链共识方法,其特征在于:所述对来自其他节点所产生的大区块头进行合法性验证的过程包括:
1)检查大区块头的高度、时间戳、其引用前一个大区块的哈希值的正确性;
2)检查结算信息的正确性:基于前一个大区块中所包含的交易信息对状态树进行更新,将更新结果与所收到大区块头内包含的状态树根进行比较,仅当状态树根一致时,确认该区块头结算条目正确;
完成上述验证无误后,节点生成对该区块头的引用,然后进入小区块打包过程。
6.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:所述共识方法还包括大区块打包阶段:
节点在成为Leader后,接收网络中所传输的包含了自身所产生的大区块头的小区块,并在验证所述小区块的PoW结果和其中所有交易的签名后将其存进本地小区块缓存池,当接收到的所述小区块满足一定条件后,节点从小区块缓存池中取出所有小区块,构造小区块树,并进行大区块打包;打包完成后,节点对所产生的大区块进行签名,签名完成后将大区块在网络中扩散。
7.根据权利要求6所述的多层分片架构的区块链共识方法,其特征在于:所述大区块打包阶段中,当Leader节点满足以下条件中的一项或多项时,Leader节点开始进行大区块打包:
1)已收到预定数量的小区块;
2)已收到的所有小区块中包含了预定数量的交易;
3)已收到的所有小区块中所包含的总交易金额达到预定数值;
4)已收到的所有小区块中所包含的交易的手续费总金额达到预定数值;
5)自节点成为Leader后的等待时间达到了预定时间;
6)预计将产生的大区块的数据包大小达到了预定数值;
其中,上述预定数值和时间可以是静态设置的,也可以是伴随区块链长度的增加而相应动态提高的;
当采用5)作为启动打包判定条件时,Leader所接收到的小区块数量可能超过大区块预设的最大容量N,此时由Leader对小区块进行选择,优选地,作为一种选择方案:Leader在所有小区块中选择可以使内含合法且非重叠的交易的总数量或总金额或总手续费达到最大的N个小区块进行打包。
8.根据权利要求6所述的多层分片架构的区块链共识方法,其特征在于:在所述大区块打包过程中,Leader节点a必须在其预设的任期T(a)内完成打包;一个普通节点b,当其已接收到所述节点a的大块头并接受所述节点a为Leader后,将至多等待E个时间长度,如果仍未收到由所述Leader节点a所产生的大区块,则重新进入Leader竞争阶段;
所述E的计算方法为:E=T(a)-[Tb(a)-Tts(a)]+δ,其中,T(a)是所述Leader节点a的任期长度,T(a)根据当前大区块头的PoW产生难度可由节点在本地计算得出的;Tb(a)是所述节点b收到的来自所述节点a的所述大区块头的时刻;Tts(a)是所述大块头在所述节点a产生时刻的时间戳,并由该所述大块头携带;δ是当前网络规模下数据包传输延迟的期望值。
9.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:所述大区块头的产生过程还包括:对所引用的前一个大区块所涉及的交易进行结算并更新状态树;
所述交易结算过程包括:
1)遍历所引用的前一个大区块中的小区块树及所述小区块树中所包含小区块中的所有交易,将合法且与排在其之前位置的其他交易不存在冲突的交易所涉及的金额进行结算并更新至状态树,并将交易涉及的手续费用作为报酬分配给相应的小区块打包节点;
2)将前一大区块生成节点所获得的挖矿收入分配给所述前一大区块生成节点;
状态树更新后,计算状态树根,添加至当前拟生成的大区块头内。
10.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:在所述大区块向前引用前一大区块时发现链存在分支时,根据以下方法选择一支分支并引用其末端大区块:当所述不同分支上的大区块数量不一致时,选择大区块数量多的分支;当所述大区块数量一致时,选择所含小区块中非重叠交易数量多、或所含小区块中非重叠交易总金额多、或所含小区块中非重叠交易手续费多的分支。
11.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:在大区块头选择引用前一大区块时发现在相同高度且具有相同前序内容的不同大区块时,根据以下原则中的一项或多项组合来选择一个大区块进行引用:
1)选择内含生效交易数量最大的大区块进行引用;
2)选择内含生效交易总金额最大的大区块进行引用;
3)选择内含生效交易总手续费最多的大区块进行引用。
12.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:
所述大区块头包括:引用前一个大区块的哈希、本大区块头所采用的PoW难度值、状态树根、当前大区块头的生成节点地址、完成最终PoW计算所使用的随机数;
所述大区块体包括:属于当前大区块的完整的小区块树及树根哈希、Leader对大区块的签名;
所述小区块头包括:所引用大区块头的哈希、本小区块内的交易树根、本小区块采用的PoW难度值、完成最终PoW计算所使用的随机数;
所述小区块体包括:本小区块内所存储的完整的交易树。
13.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:Leader节点打包大区块成功后可获得大区块打包奖励;所述奖励为在全网代币总和之上的新增代币;
小区块打包节点在所打包小区块被包含在最终生成的大区块内后,可赚取内含所有生效交易的一部分手续费用;此外,Leader节点将额外获得一部分手续费用,这些费用来自于其生成的大区块内所包含的所有生效交易所涉及的手续费的一部分。
14.根据权利要求1所述的多层分片架构的区块链共识方法,其特征在于:为降低所述不同节点同时打包不同小区块时所打包交易出现重叠的概率,对用于广播交易的数据包的传播范围进行限制,设置数据包TTL为H,H小于网络半径的跳数值。
15.一种多层分片架构的区块链共识方法及系统,其特征在于,包括:在该系统中的节点可以选择性担任以下三种色,并可通过变更参数设置进行角色切换:
1)全节点角色:节点参与所有任务,包括大区块打包、小区块打包、交易提交;这一流程可以表述为:节点首先参与大区块头的计算和Leader竞争,此时:
如果完成Macro PoW计算并生成合法的大区块头后,成为Leader,接收小区块并对其进行打包,直至本轮打包结束;
如果未能及时计算出合法的大区块头并收到了来自于其他节点的大区块头,则节点开始接收交易并将交易打包,执行Mini PoW生成小区块后发送给当前的Leader节点;
2)单一打包节点角色:节点仅参与大区块打包或小区块打包中的一项,包括以下两种情况:
仅参与大区块打包:只进行Macro PoW计算;如果竞选Leader成功则成为Leader并接收小区块,最终产生大区块;如果没有竞选Leader成功,则等待下一轮竞争;称之为宏块打包节点;
仅参与小区块打包:只进行Mini PoW计算过程;等待Leader竞选成功通知,获得该轮次大区块头后,开始打包小区块,并传输给本轮的Leader;称之为微块打包节点;
3)轻节点角色:节点只进行交易提交,不参与打包行为。

说明书全文

一种多层分片架构的链共识方法及系统

技术领域

[0001] 本发明涉及计算机技术领域,具体是一种多层分片架构的区块链共识方法及系统。

背景技术

[0002] 区块链技术(又称分布式账本技术)具有中心化、公开透明、不可篡改、可信任等优点,在智能合约证券交易、电子商务、物联网、社交通讯、文件存储、存在性证明、身份验证、股权众筹等众多领域有望得到广泛应用。在区块链中,节点会产生交易(Transaction),节点首先将多个交易打包到一个称之为区块(Block)的结构中,不同时间所形成的区块按时间先后首尾相连形成链,称之为区块链(Blockchain)。不同节点以分布式的决策机制来判断如何产生和新增一个区块至区块链上。而网络中所有不同的节点必须各自维护区块链的副本,并使各自所维护的区块链副本保持一致,即使因为网络延迟和丢包等问题出现短暂的分歧,但其必须最终形成确定的、唯一的结果,实现这一目的的技术过程,称为节点共识。现有共识技术一般包括工作量证明(PoW)、权益证明(PoS)、实践拜占庭容错(PBFT)和委托权益证明(DPoS)几类,然而均存在性能瓶颈,即使在互联网的环境下,仍然存在处理效率低的问题。此外,在很多物联网环境下,受限于节点算能量的不均一性、及不同的网络接入制式、带宽、速率、可靠性及节点移动性等,效率问题更加突出,亟需一种能够提高节点共识效率和公平性的方案,提升区块链的综合效率,形成一种通用的高效组织架构,以分布式的方式管理包括海量物联网设备在内的设备与随之产生的海量交易。

发明内容

[0003] 针对现有区块链共识技术在完成共识记账时所存在的低效、不公平等缺陷与不足,本发明提出一种多层分片架构的区块链共识方法及系统。
[0004] 本说明书中一个或多个实施例提供的一种多层分片架构的区块链共识方法及系统,其特征在于:包含两类区块,分别为大区块和小区块;所述大区块是主干区块,按出现先后顺序、逐一地向前引用前一个大区块;所述大区块包括:大区块头和大区块体;所述小区块用来打包交易;不同节点可以同时打包不同的小区块以形成分片效应;所述小区块包括:小区块头和小区块体;所述大区块包含多个所述小区块,形成多层结构;所述大区块和所述小区块基于共识方法产生并构成区块链。
[0005] 具体地,多层分片架构的区块链共识方法分成4个部分阐述,分别为区块链结构、网络共识流程、代币分配机制、网络容错处理。
[0006] 1.区块链结构
[0007] 本发明采用分层的区块链结构,区块链中包含两种区块,分别为Macroblock和Miniblock,如附图1所示。其中Macroblock也称为大区块,Miniblock也称为小区块。大区块是区块链的主干区块,按出现顺序逐一的向前引用。大区块将多个小区块打包在一起。小区块用来封装交易信息,可以在物理空间上实现分片效应,每个小区块引用唯一的大区块头,且彼此之间不存在相互引用。
[0008] 优选地,作为一种实施例,在本发明中,所述区块包括区块头、和区块体两部分,其中:
[0009] 大区块包括:
[0010] 大区块头(Macroblock Head),具体包括:当前大区块的高度,引用前一个大区块的哈希、本大区块头所采用的PoW难度值、状态树根、当前大区块头的生成节点(下文中也称为Leader)地址、收据树根、收据树的布隆过滤器、时间戳、完成最终PoW计算所使用的随机数。
[0011] 大区块体,具体包括:属于当前大区块的完整的小区块树及树根哈希、Leader对大区块的签名等。
[0012] 小区块包括:
[0013] 小区块头(Miniblock Head),具体包括:所引用大区块头的哈希、本小区块内的交易树根、本小区块采用PoW难度值、时间戳、区块高度、每个区块的手续费限制、本区块所用的总手续费、完成最终PoW计算所使用的随机数。
[0014] 小区块体,具体包括:本小区块内所存储的完整的交易树。
[0015] 网络中的交易信息是在不同账户之间的代币转移记录,分为外部账户和合约账户两种。交易信息由节点产生后,在网络中以Gossip或P2P传输的方式扩散。网络中的所有节点在接收到新的交易信息后会将该交易信息暂存在节点本地缓冲区中,所属缓冲区也称为节点上的交易池。
[0016] 状态树用来记录网络中总的账户状态,存放在节点本地数据库中,不放入区块。
[0017] 2.网络共识流程
[0018] 在这一结构中,大区块(头)的生成节点被称为Leader,小区块的打包节点被称为Miber。在理想网络条件下,在任一时刻,网络中仅有唯一的Leader,但可以同时存在多个Miber。所属理想网络条件为无带宽限制、网络传播无延时、无丢包的网络环境。在存在延迟的非理想网络下,可能会出现多个Leader,此时会有选举竞争的行为,最后决出唯一Leader。
[0019] 整个共识过程可细分为6个阶段:
[0020] 1)Leader竞争阶段
[0021] 2)大区块头(Macroblock Head)传播阶段
[0022] 3)小区块(Miniblock)打包阶段
[0023] 4)小区块(Miniblock)传播阶段
[0024] 5)大区块(Macroblock)生成与广播阶段
[0025] 6)主链更新阶段
[0026] 以下将详细介绍每一阶段的流程内容:
[0027] (1)Leader竞争阶段
[0028] Leader节点是Macroblock和Macroblock Head的生成节点,由网络中的节点通过竞选轮流承担,即所有网络节点均有机会通过PoW计算竞争成为Leader。
[0029] 根据当前网络Leader的不同,时间轴被划分为若干相邻但不重叠的轮次。本发明将每一轮次开始阶段,网络节点竞争成为Leader的过程称为Leader的生成过程。为竞争成为下一轮次中新一任Leader节点,网络节点必须引用现有的已成功确认的前一个Macroblock的全部内容并执行PoW运算。本发明将竞争Leader的PoW过程成为Macro PoW。
[0030] 在Macro PoW过程开始前,网络节点需要填写大区块头部的一些关键信息,包括:对所引用的前一个大区块所涉及的交易进行结算并更新状态树和收据树;
[0031] 所述交易结算过程包括:
[0032] 1)遍历所引用的前一个大区块中的小区块树及所述小区块树中所包含小区块中的所有交易,将合法且与排在其之前位置的其他交易不存在冲突的交易所涉及的金额进行结算并更新至状态树和收据树,并将交易涉及的手续费用作为报酬分配给相应的小区块打包节点;
[0033] 2)将前一大区块生成节点所获得的挖矿收入分配给所述前一大区块生成节点;
[0034] 所述状态树和收据树更新过程包括:
[0035] 1)状态树更新后,计算状态树根,添加至当前拟生成大区块头内;
[0036] 2)根据实际认可发生的交易来计算收据,并更新收据树根,添加至当前拟生成大区块头内。
[0037] 想要竞选Leader的节点A在选择前一个大区块时必须遵循统一的原则,在大区块头选择引用前一大区块时发现存在分支时,选择权重最高的分支的最末端大区块进行引用;优选地,分支选择的确定方法为:当大区块数量不一致时,选择大区块数量多者,当大区块数量一致时,选择小区块中非重叠交易数量多者、或小区块中非重叠交易总金额多者、或小区块中非重叠交易手续费多者。
[0038] 在大区块头选择引用前一大区块时发现在相同高度且具有相同前序内容的不同大区块时,根据以下原则中的一项或多项组合来选择一个大区块进行引用:
[0039] 1)选择内含生效交易数量最大的大区块进行引用;
[0040] 2)选择内含生效交易总金额最大的大区块进行引用;
[0041] 3)选择内含生效交易总手续费最多的大区块进行引用。
[0042] Macro  PoW过程采用穷举方式计算哈希。运行PoW的节点将该节点引用的Macroblock内容结合Nonce随机数,输入约定的哈希算法计算哈希结果,仅当哈希结果满足一定预设条件时,如小于给定PoW难度值时,该节点竞争Leader成功。每一次竞争失败的节点可以通过改变Nonce再次计算哈希,直到该节点竞争成功或接收到网络中当前轮次竞争成功的节点的通告信息,作为本轮Leader生成完毕的信号。所述预设条件可以是但不限于预先定义的值域。
[0043] (2)大区块头传播阶段
[0044] 任何节点在竞争成为Leader后,均需要在网络中及时的通告自己的Leader身份,以停止本轮次的Leader生成过程。Leader节点通过在网络中扩散Macroblock Head消息达到上述目的。
[0045] 当网络中的任何节点收到Macroblock Head,会检查该Macroblock Head中包含信息的有效性,包括验算哈希、检查签名、验算其结算的状态树的真实性等,如确认信息无误,则将该Macroblock Head作为当前轮次Miniblock的引用指向,然后进入到Miniblock打包阶段。
[0046] (3)小区块打包阶段
[0047] 网络中节点在接收到大区块头信息后,会逐一的检查该区块头包含信息的正确性。
[0048] 对来自其他节点所产生的大区块头进行合法性验证的过程包括:
[0049] 1)检查大区块头的高度、时间戳、其引用前一个大区块的哈希值的正确性;
[0050] 2)检查结算信息的正确性:基于前一个大区块中所包含的交易信息对状态树进行更新,将更新结果与所收到大区块头内包含的状态树根进行比较,仅当状态树根一致时,确认该区块头结算条目正确;
[0051] 完成上述验证无误后,节点生成对该区块头的引用,确认当前轮次的Leader为该区块头的所属节点,然后进入小区块打包过程。
[0052] 小区块的打包过程是将网络中的交易封装为区块的过程。为减少不同节点所打包小区块交易的重复程度,对用于交易广播的数据包的传播范围进行限制。
[0053] 当进入小区块打包过程,节点会从交易池选择部分或全部的交易,将其封装进小区块的交易部分。
[0054] 当以下条件中的一项或几项的组合满足时,节点开始打包小区块:
[0055] 1)当所收到的交易的总交易金额达到一个阈值时;
[0056] 2)当所收到的交易的总的手续费用达到一个阈值时;
[0057] 3)当所收到的交易数量达到一个预设的数量时;
[0058] 4)当将产生的小区块的数据包大小达到了一个阈值。
[0059] 在选定待打包的交易后,节点将基于选定的交易构造交易树。交易树的构造方法可以采用但不限于Merkle树。交易树的叶子节点存放交易内容,中间节点存放孩子节点内容的哈希描述,这样全部的交易内容描述都会按多层哈希的方式被包含在根节点中。当交易树构造完成,节点将交易树根信息加入小区块的区块头中,同时填写区块头中的其他内容。
[0060] 在填写完小区块的关键信息后,节点开始PoW计算,以争取成为小区块打包节点,即Miber节点。为区分Leader生成过程中的PoW,本发明将对Miniblock打包的PoW过程称为Mini PoW。
[0061] 和Leader生成过程的Macro PoW不同,Mini PoW需要在哈希计算过程中包含本区块的所有交易信息。节点将记载交易的Merkle树根内容、当前引用的Macroblock Head的内容或哈希、Nonce随机数三部分内容连接在一起进行哈希运算,当且仅当运算结果处于指定值域范围内时,则该节点完成一个Miniblock的打包。所述哈希计算结果的目标值域范围是一个按时间调整的变量,也称作PoW的难度值。与负责打包Macroblock的Leader节点不同,网络中可能同时存在多个Miniblock打包节点。此外,Mini PoW的目标值域范围不同于Leader生成过程中Macro PoW哈希运算的目标值域范围。节点可以通过更换Nonce随机数,或更换打包的交易条目以重新生成交易树根,以获得不同的哈希计算结果。
[0062] (4)小区块确认阶段
[0063] 节点小区块打包完成以后,会将该小区块发送到网络中。小区块的发送过程采用Gossip或P2P传输的方式。在小区块的传播过程中,所有接收到该区块的中继网络节点都会暂时将其存入本地的小区块缓存池中,当接收到来自Leader产生的大区块并确认该小区块已被收录无误后,才从缓存池中删除与当前轮次对应的所有小区块。
[0064] (5)大区块生成并广播阶段
[0065] Leader节点不断的从网络中接受到新的小区块,将其存进小区块池,然后逐一验证、检查小区块中的交易条目。
[0066] 在接收小区块的过程中,当满足一定条件后,Leader节点从小区块缓存池中取出所有小区块,构造小区块树。作为一种优选方案,大区块对小区块的保存也采用树结构,例如Merkle树。继而,Leader对所产生的完整的大区块进行签名,签名完成后即完成大区块打包,然后将大区块在全网扩散。
[0067] 这里,优选地,在接收小区块的过程中,当满足一定条件中的“满足一定条件”是指,在以下条件中任一或多个的组合得到满足:
[0068] 1)已收到预定数量的小区块;
[0069] 2)已收到的所有小区块中包含了预定数量的交易;
[0070] 3)已收到的所有小区块中所包含的交易涉及金额达到预定数值;
[0071] 4)已收到的所有小区块中所包含的交易涉及的手续费金额达到预定数值;
[0072] 5)自节点成为Leader后的时间达到了预定时间;
[0073] 6)预计将产生的大区块的数据包大小达到了预定数值;
[0074] 其中,上述预定数值和时间可以是静态设置的,也可以是伴随区块链长度的增加而相应动态提高的。
[0075] (6)主链更新
[0076] 网络中的节点在接收到新一轮打包完毕的大区块以后,需要进行多个验证,包括:
[0077] 验证大区块头中对于状态树的更新,是否与所述大区块头所引用的前一个大区块中所包含的有效、合法交易的最终造成的账户状态相符;
[0078] 判断大区块头和大区块是否是同一个用户签名,并且验证其签名的真实性;
[0079] 验证大区块中的大区块头和所有小区块所进行的PoW计算是合法正确的;
[0080] 当上述条目检查无误后,将该区块添加到区块链尾部,然后引用所述该大区块的哈希开始进行下一轮次的Leader生成过程。
[0081] 3.代币产出与分配机制
[0082] 共识算法的代币(token)产生和分配机制是共识系统的运转激励。
[0083] 在本发明的共识体系中,区块链上的网络节点能够通过验证交易、打包交易、促成共识的行为赚取代币,以驱动共识体系正常运转。代币的来源主要包括两类:区块打包费和交易手续费。区块打包费作为将交易最终添加到区块链,形成分布式账本的报酬,交易手续费来自于记录在账本中的每一笔交易的支出所花费的手续费。
[0084] 在上述共识流程中,Leader节点打包大区块,获得区块打包费奖励。区块奖励为在网络代币总和之上的新增代币。Miber节点在打包得到小区块以后,能够赚取内含交易的手续费用。交易手续费来自于每一笔成功计入账本的交易,为交易支出账户支付。此外,为了使Leader在打包时尽量少地打包交易重叠的小区块,Leader将也获得一部分成功入账交易的手续费,即非重叠交易或非冲突交易所涉及手续费的一部分。每一个大区块所涉及到的代币分配,如Leader生成过程中所述,在引用该大区块的后续大区块头的生成过程中进行结算。
[0085] 4.容错处理
[0086] 在实际的网络条件下,网络中可能因为传输延迟、数据包丢失等原因出现节点状态冲突或状态错误,针对可能出现的问题,本发明提出部分容错处理措施。
[0087] (1)每个节点为当前所采纳的Leader维护一个Macroblock定时器。如果定时器溢出时没有能够收到来自当前Leader的合法的Macroblock,则直接引用前序的Macroblock并启动Leader生成过程。之前曾经产生过合法大区块头(Macroblock Head)可以直接将之前产生的大区块头在网络中广播。
[0088] (2)当由于网络原因,节点没有接收到当前轮次的Macroblock Head信息,该节点仍然会不断的竞争Leader。在这种情况下,当该节点在接收到由其他节点传输的小区块时,会检查其引用的Macroblock Head,如果检查无误是当前节点已知的Macroblock Head的后续,则会基于该Macroblock Head打包小区块;如果该节点在接收到Macroblock Head消息之前接收到Macroblock,则会直接跳过小区块打包阶段,进入主链更新阶段。
[0089] 基于上述结构和机制,可实现一种面向多层分片架构的区块链共识方法的系统。在该系统中,节点可以选择担任以下三种色:
[0090] (1)节点参与所有任务,包括:Macroblock打包、Miniblock打包、交易提交。这类节点称为全节点。这一流程可以表述为:节点首先参与Macroblock Head的计算和Leader竞争,此时:
[0091] 1)如果完成Macro PoW计算并生成合法的Macroblock Head后,成为Leader,接收Miniblock并对其进行打包,直至本轮打包结束;
[0092] 2)如果未能及时计算出合法的Macroblock Head并收到了来自于其他节点的Macroblock Head,则节点开始接收交易并将交易打包,执行Mini PoW生成Miniblock后发送给当前的Leader节点;
[0093] (2)节点不参与Macroblock打包或Miniblock打包中的一项,而仅参与其中一种的竞争,包括以下两种情况:
[0094] 1)仅参与Macroblock打包,也就是只进行Macro PoW计算过程。如果竞选Leader成功则成为Leader并接收Miniblock,最终产生Macroblock。而如果没有竞选Leader成功,则等待下一次参与。这种节点称之为宏块打包节点。
[0095] 2)仅参与Miniblock打包,也就是只进行Mini PoW计算过程。等待Leader竞选成功通知,获得该轮次Macroblock Head后,开始对交易进行打包为Miniblock的行为,并提交给本轮Leader。这种节点称之为微块打包节点。
[0096] (3)节点只进行交易提交,不参与任何轮次的打包行为。这种节点称之为轻节点。
[0097] 在本系统中,节点可以在上述身份角色中,通过变更参数设置进行角色切换。

附图说明

[0098] 构成本申请一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0099] 图1为一种区块链结构
[0100] 图2为一种网络共识协议流程示例
[0101] 图3为一种Miniblock传输机制示例

具体实施方式

[0102] 下面结合附图及实施例对本发明作进一步的说明。
[0103] 为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0104] 本发明的特征在于:包含两类区块,分别为大区块和小区块;所述大区块是主干区块,按出现先后顺序、逐一地向前引用前一个大区块;所述大区块包括:大区块头和大区块体;所述小区块用来打包交易;不同节点可以同时打包不同的小区块以形成分片效应;所述小区块包括:小区块头和小区块体;所述大区块包含多个所述小区块,形成多层结构;所述大区块和所述小区块基于共识方法产生并构成区块链。以下详细介绍各个组件或机制的设计:
[0105] 1.区块链结构
[0106] 本发明采用分层的区块链结构,区块链中包含两种区块,分别为Macroblock和Miniblock,如附图1所示。其中Macrobloek也称为大区块,Miniblock也称为小区块。大区块是区块链的主干区块,按出现顺序逐一的向前引用。大区块将多个小区块打包在一起。小区块用来封装交易信息,每个小区块引用唯一的大区块头,且彼此之间不存在相互引用。
[0107] 优选地,作为一种实施例,在本发明中,所述区块包括区块头、和区块体两部分,其中:
[0108] 大区块包括:
[0109] 大区块头(Macroblock Head),具体包括:当前大区块的高度,引用前一个大区块的哈希、本大区块头所采用的PoW难度值、状态树根、当前大区块头的生成节点(下文中也称为Leader)地址、收据树根、收据树的布隆过滤器、时间戳、完成最终PoW计算所使用的随机数。
[0110] 大区块体,具体包括:属于当前大区块的完整的小区块树及树根哈希、Leader对大区块的签名等。
[0111] 小区块包括:
[0112] 小区块头(Miniblock Head),具体包括:所引用大区块头的哈希、本小区块内的交易树根、本小区块采用PoW难度值、时间戳、区块高度、每个区块的手续费限制、本区块所用的总手续费、完成最终PoW计算所使用的随机数。
[0113] 小区块体,具体包括:本小区块内所存储的完整的交易树。
[0114] 网络中的交易信息是在不同账户之间的代币转移记录,分为外部账户和合约账户两种。交易信息由节点产生后,在网络中以Gossip或P2P传输的方式扩散。网络中的所有节点在接收到新的交易信息后会将该交易信息暂存在节点本地缓冲区中,所属缓冲区也称为节点上的交易池。
[0115] 状态树用来记录网络中总的账户状态,存放在节点本地数据库中,不放入区块。
[0116] 2.网络共识流程
[0117] 在这一结构中,大区块(头)的生成节点被称为Leader,小区块的打包节点被称为Miber。在理想网络条件下,在任一时刻,网络中仅有唯一的Leader,但可以同时存在多个Miber。所属理想网络条件为无带宽限制、网络传播无延时、无丢包的网络环境。在存在延迟的非理想网络下,可能会出现多个Leader,此时会有选举竞争的行为,最后决出唯一Leader。
[0118] 整个共识过程分为6个阶段:
[0119] 1)Leader竞争阶段
[0120] 2)大区块头(Macroblock Head)传播阶段
[0121] 3)小区块(Miniblock)打包阶段
[0122] 4)小区块(Miniblock)传播阶段
[0123] 5)大区块(Macroblock)生成与广播阶段
[0124] 6)主链更新阶段
[0125] 以下将详细介绍每一阶段的流程内容:
[0126] (1)Leader竞争阶段
[0127] Leader节点是Macroblock和Macroblock Head的生成节点,由网络中的节点竞选担任,即所有网络节点均有机会通过PoW计算竞选成为Leader。
[0128] 根据当前网络Leader的不同,时间轴被划分为若干相邻但不重叠的轮次。本发明将每一轮次开始阶段,网络节点竞争成为Leader的过程称为Leader的生成过程。为竞争成为下一轮次中新一任Leader节点,网络节点必须引用现有的已成功确认的前一个Macroblock的全部内容并执行PoW运算。
[0129] 在引用Macroblock时,如果遇到具有同样高度的不同的Macroblock,优选地,可以根据以下原则中的一项或组合来选择一个Macroblock:
[0130] 1)选择内含交易数量最大的Macroblock进行引用;
[0131] 2)或,选择内含交易总金额最大的Macroblock进行引用;
[0132] 在Macro PoW过程开始前,网络节点需要填写大区块头部的一些关键信息,包括:对所引用的前一个大区块所涉及的交易进行结算并更新状态树和收据树;
[0133] 所述交易结算过程包括:
[0134] 1)遍历所引用的前一个大区块中的小区块树及所述小区块树中所包含小区块中的所有交易,将合法且与排在其之前位置的其他交易不存在冲突的交易所涉及的金额进行结算并更新至状态树和收据树,并将交易涉及的手续费用作为报酬分配给相应的小区块打包节点;
[0135] 2)将前一大区块生成节点所获得的挖矿收入分配给所述前一大区块生成节点;
[0136] 所述状态树和收据树更新过程包括:
[0137] 1)状态树更新后,计算状态树根,添加至当前拟生成大区块头内;
[0138] 2)根据实际认可发生的交易来计算收据,并更新收据树根,添加至当前拟生成大区块头内。
[0139] 想要竞选Leader的节点A在选择前一个大区块时必须遵循统一的原则,在大区块头选择引用前一大区块时发现链存在分支时,根据以下方法选择一支分支并引用其末端大区块:当所述不同分支上的大区块数量不一致时,选择大区块数量多的分支;当所述大区块数量一致时,选择所含小区块中非重叠交易数量多、或所含小区块中非重叠交易总金额多、或所含小区块中非重叠交易手续费多的分支。
[0140] 在大区块头选择引用前一大区块时发现在相同高度且具有相同前序内容的不同大区块时,根据以下原则中的一项或多项组合来选择一个大区块进行引用:
[0141] 1)选择内含生效交易数量最大的大区块进行引用;
[0142] 2)选择内含生效交易总金额最大的大区块进行引用;
[0143] 3)选择内含生效交易总手续费最多的大区块进行引用。
[0144] Macro  PoW过程采用穷举方式计算哈希。运行PoW的节点将该节点引用的Macroblock内容结合Nonce随机数,输入约定的哈希算法计算哈希结果,仅当哈希结果满足一定预设条件时,如小于给定PoW难度值时,该节点竞争Leader成功。每一次竞争失败的节点可以通过改变Nonce再次计算哈希,直到该节点竞争成功或接收到网络中当前轮次竞争成功的节点的通告信息,作为本轮Leader生成完毕的信号。所述预设条件可以是但不限于预先定义的值域。
[0145] (2)大区块头传播阶段
[0146] 任何节点在竞争成为Leader后,均需要在网络中及时的通告自己的Leader身份,以停止本轮次的Leader生成过程。Leader节点通过在网络中扩散Macroblock Head消息达到上述目的。
[0147] 当网络中的其他节点收到Macroblock Head,会检查该Macroblock Head中包含信息的有效性,包括验算哈希、验算其结算的状态树的真实性等,如确认信息无误,则将该Macroblock Head作为当前轮次Miniblock的引用指向,然后进入到Miniblock打包阶段。
[0148] (3)小区块打包阶段
[0149] 网络中节点在接收到大区块头信息后,会逐一的检查该区块头包含信息的正确性。
[0150] 对来自其他节点所产生的大区块头进行合法性验证的过程包括:
[0151] 1)检查大区块头的高度、时间戳、其引用前一个大区块的哈希值的正确性;
[0152] 2)检查结算信息的正确性:基于前一个大区块中所包含的交易信息对状态树进行更新,将更新结果与所收到大区块头内包含的状态树根进行比较,仅当状态树根一致时,确认该区块头结算条目正确;
[0153] 完成上述验证无误后,节点生成对该区块头的引用,确认当前轮次的Leader为该区块头的所属节点,然后进入小区块打包过程。
[0154] 小区块的打包过程是将网络中的交易封装为区块的过程。当进入小区块打包过程,节点会从交易池选择部分或全部的交易,将其封装进小区块的交易部分。这里,为降低不同节点同时打包不同小区块时所打包交易出现重叠的概率,对用于广播交易的数据包的传播范围进行限制,设置数据包TTL为H,H小于网络半径的跳数值。
[0155] 为了最大化自己的收益,小区块打包节点也可以自己确定如何选择交易进行打包。
[0156] 节点选择打包小区块的方法可以采用但不限于以下原则:
[0157] 1)当所收到的交易的总交易金额达到一个阈值时;
[0158] 2)当所收到的交易的总的手续费用达到一个阈值时;
[0159] 3)当所收到的交易数量达到一个预设的数量时;
[0160] 4)当将产生的小区块的数据包大小达到了一个阈值。
[0161] 在选定待打包的交易后,节点将基于选定的交易构造交易树。交易树的构造方法可以采用但不限于Merkle树。交易树的叶子节点存放交易内容,中间节点存放孩子节点内容的哈希描述,这样全部的交易内容描述都会按多层哈希的方式被包含在根节点中。当交易树构造完成,节点将交易树根信息加入小区块的区块头中,同时填写区块头中的其他内容。
[0162] 在填写完小区块的关键信息后,节点开始PoW计算,以争取完成小区块的打包。为区分Leader生成过程中的PoW,本发明将对Miniblock打包的PoW过程称为Mini PoW。
[0163] 与Macro PoW不同,Mini PoW需要在哈希计算过程中包含本区块的所有交易信息。节点将记载交易的Merkle树根内容、当前引用的Macroblock Head的原始内容或哈希、Nonce随机数三部分内容连接在一起进行哈希运算,当且仅当运算结果处于指定值域范围内时,则该节点完成一个Miniblock的打包。所述哈希计算结果的目标值域范围是一个按时间调整的变量,也称作PoW的难度值。与负责打包Macroblock的Leader节点不同,网络中可能同时存在多个Miniblock打包节点。此外,Mini PoW的难度范围不同于Leader生成过程中Macro PoW哈希运算的目标范围,优选地,作为一种实施方案,Mini PoW的计算难度低于Macro PoW。节点可以通过更换Nonce随机数,或更换打包的交易条目以重新生成交易树根,以获得不同的哈希计算结果。
[0164] (4)小区块确认阶段
[0165] 节点小区块打包完成以后,会将该小区块发送到网络中。小区块的发送过程可以采用但不限于Gossip或P2P传输的方式。在小区块的传播过程中,所有接收到该区块的中继网络节点都会暂时将其存入本地的小区块缓存池中,当接收到来自Leader产生的大区块并确认该小区块已被收录无误后,才从缓存池中删除与当前轮次对应的所有小区块。
[0166] (5)大区块生成并广播阶段
[0167] Leader节点不断的从网络中接受到新的小区块,将其存进小区块池,然后逐一验证其PoW结果的真实性、并检查小区块中的交易条目。
[0168] 在接收小区块的过程中,当满足一定条件后,Leader节点从小区块缓存池中取出所有小区块,构造小区块树。作为一种优选方案,大区块对小区块的保存也采用树结构,例如Merkle树。继而,Leader对所产生的完整的大区块进行签名,签名完成后即完成大区块打包,然后将大区块在全网扩散。
[0169] 大区块打包阶段中,当Leader节点满足以下条件中的一项或多项时,Leader节点开始进行大区块打包:
[0170] 1)已收到预定数量的小区块;
[0171] 2)已收到的所有小区块中包含了预定数量的交易;
[0172] 3)已收到的所有小区块中所包含的总交易金额达到预定数值;
[0173] 4)已收到的所有小区块中所包含的交易的总手续费金额达到预定数值;
[0174] 5)自节点成为Leader后的等待时间达到了预定时间;
[0175] 6)预计将产生的大区块的数据包大小达到了预定数值;
[0176] 其中,上述预定数值和时间可以是静态设置的,也可以是伴随区块链长度的增加而相应动态提高的。作为一种更加细化的举例:可设置为上述6个条件的全部,并针对每个条件设置其预设数值和时间,该数值与区块高度相关并动态变化。
[0177] 当采用5)作为启动打包判定条件时,Leader所接收到的小区块数量可能超过了大区块预设的最大容量N,此时由Leader对小区块进行选择,优选地,作为一种选择方案:Leader在所有小区块中选择可以使内含合法且非重叠的交易的总数量或总金额或总手续费达到最大的N个小区块进行打包。
[0178] (6)主链更新
[0179] 网络中的节点在接收到新一轮打包完毕的大区块以后,需要进行多个验证,包括:
[0180] 验证大区块头中对于状态树的更新,是否与所述大区块头所引用的前一个大区块中所包含的有效、合法交易的最终造成的账户状态相符;
[0181] 判断大区块头和大区块是否是同一个用户签名,并且验证其签名的真实性;
[0182] 验证大区块中的大区块头和所有小区块所进行的PoW计算是合法正确的;
[0183] 当上述条目检查无误后,将该区块添加到区块链尾部,然后引用所述该大区块的哈希开始进行下一轮次的Leader生成过程。
[0184] 3.代币产出与分配机制
[0185] 共识算法的代币(token)产生和分配机制是共识系统的运转激励。
[0186] 在本发明的共识体系中,区块链上的网络节点能够通过验证交易、打包交易、促成共识的行为赚取代币,以驱动共识体系正常运转。代币的来源主要包括两类:区块打包费和交易手续费。区块打包费作为将交易最终添加到区块链,形成分布式账本的报酬,交易手续费来自于记录在账本中的每一笔交易的支出所花费的手续费。
[0187] 作为一种优选的实施方案:在上述共识流程中,Leader节点打包大区块成功后可获得大区块打包奖励;所述奖励为在全网代币总和之上的新增代币;小区块打包节点在所打包小区块被包含在最终生成的大区块内后,可赚取内含所有生效交易(即非重复合法交易)的一部分手续费用;此外,Leader节点将额外获得一部分手续费用,这些费用来自于其生成的大区块内所包含的所有生效交易所涉及的手续费的一部分。每一个大区块所涉及到的代币分配,如Leader生成过程中所述,在引用该大区块的后续大区块头的生成过程中进行结算。
[0188] 4.容错处理
[0189] 在实际的网络条件下,网络中可能因为传输延迟、数据包丢失等原因出现节点状态冲突或状态错误,针对可能出现的问题,本发明提出部分容错处理措施。
[0190] (1)每个节点为当前所采纳的Leader维护一个Macroblock定时器。如果定时器溢出时没有能够收到来自当前Leader的合法的Macroblock,则直接引用前序的Macroblock并启动Leader生成过程。之前曾经产生过合法大区块头(Macroblock Head)可以直接将之前产生的大区块头在网络中广播。定时器的设置方法是:节点的最大等待时间E=T(a)-[Tb(a)-Tts(a)]+δ,其中,T(a)是所述Leader节点a的任期长度,T(a)根据当前大区块头的PoW产生难度可由节点在本地计算得出的;Tb(a)是所述节点b收到的来自所述节点a的所述大区块头的时刻;Tts(a)是所述大块头在所述节点a产生时刻的时间戳,并由该所述大块头携带;δ是当前网络规模下数据包传输延迟的期望值。
[0191] (2)当由于网络原因,节点没有接收到当前轮次的Macroblock Head信息,该节点仍然会不断的竞争Leader。在这种情况下,当该节点在接收到由其他节点传输的小区块时,会检查其引用的Macroblock Head,如果检查无误是当前节点已知的Macroblock Head的后续,则会基于该Macroblock Head打包小区块;如果该节点在接收到Macroblock Head消息之前接收到Macroblock,则会直接跳过小区块打包阶段,进入主链更新阶段。
[0192] 基于上述结构和机制,可实现一种面向多层分片架构的区块链共识方法的系统。在该系统中,节点可以选择担任以下三种角色:
[0193] (1)节点参与所有任务,包括:Macroblock打包、Miniblock打包、交易提交。这类节点称为全节点。这一流程可以表述为:节点首先参与Macroblock Head的计算和Leader竞争,此时:
[0194] 1)如果完成Macro PoW计算并生成合法的Macroblock Head后,成为Leader,接收Miniblock并对其进行打包,直至本轮打包结束;
[0195] 2)如果未能及时计算出合法的Macroblock Head并收到了来自于其他节点的Macroblock Head,则节点开始接收交易并将交易打包,执行Mini PoW生成Miniblock后发送给当前的Leader节点;
[0196] (2)节点不参与Macroblock打包或Miniblock打包中的一项,而仅参与其中一种的竞争,包括以下两种情况:
[0197] 1)仅参与Macroblock打包,也就是只进行Macro PoW计算过程。如果竞选Leader成功则成为Leader并接收Miniblock,最终产生Macroblock。而如果没有竞选Leader成功,则等待下一次参与。这种节点称之为宏块打包节点。
[0198] 2)仅参与Miniblock打包,也就是只进行Mini PoW计算过程。等待Leader竞选成功通知,获得该轮次Macroblock Head后,开始对交易进行打包为Miniblock的行为,并提交给本轮Leader。这种节点称之为微块打包节点。
[0199] (3)节点只进行交易提交,不参与任何轮次的打包行为。这种节点称之为轻节点。
[0200] 在本系统中,节点可以在上述身份角色中,通过变更参数设置进行角色切换。
[0201] 在本系统中,由于存在网络延迟的影响等。当节点本地持有的链有差异时,选择的确定方法为:当不同链的大区块数量不一致时,选择大区块数量多者,当大区块数量一致时,选择小区块中非重叠交易数量多者、或小区块中非重叠交易总金额多者、或小区块中非重叠交易手续费多者。
[0202] 以下结合附图,对本申请中各实施例及整体方案进行进一步解释和说明,不构成对本发明的不当限定。
[0203] 1.网络交易打包实施例
[0204] 附图2所示为从交易产生到形成大区块的过程示例。图中存在三类节点,分别是普通用户、Miniblock打包节点(Miber)、Leader节点。整个工作流程分成三阶段:交易传递、小区块打包、大区块打包与传递。
[0205] 1)在交易传递阶段,网络中的普通用户将生成的交易信息在网络中按Gossip或P2P方式扩散,在这一过程中,所有节点不断的从网络中收到交易信息,将其存入本地交易池。在示例中,节点C接收到来自于普通节点A的交易1,来自于普通用户B的交易2,以及来自于子网A的交易3;节点D接收到来自于普通节点B的消息2,以及来自于子网B的交易4、5、6。
[0206] 2)假设Miniblock的打包规则已满足:这时C基于消息1、2、3计算PoW成功,D基于交易2、4、5计算PoW成功,于是,节点C将交易1、2、3包含在Miniblock 1中,节点D将交易2、4、5包含在Miniblock 2中,均通过在网络中Gossip或P2P来传播所生成的小区块。
[0207] 3)假设节点E是当前轮次生成的Leader节点,E首先将收到的小区块存入缓存池,在所收到全部小区块中所包含的合法有效交易额达到阈值后,将全部小区块打包为大区块Macroblock。Macroblock合成后会按照图2中黑色剪头所示方向向网络中扩散Macroblock。网络中的其他节点在收到Macroblock后都会检查该区块包含交易信息的正确性与合法性,当确认区块无误后将该Macroblock作为新的区块添加到区块链的末尾。
[0208] 2.基于gossip的Miniblock传输实施例
[0209] 附图3所示为示例网络拓扑,网络中有A、B、C、D、E、F、G共7个节点,其中C、E、G节点为Miber节点,分别持有小区块Miniblock 1、Miniblock 2、Miniblock 3,A为Leader节点,负责收集小区块。Miniblock的收集由节点A发起,完整的gossip过程如下:
[0210] 1)节点A向节点B发送持有的Miniblock列表,表示为MIB_A={},此时为空集合;
[0211] 2)节点B检查本地Miniblock缓冲池,仍然为空集,继续将MIB_B={}发往节点C和节点D;
[0212] 3)节点C和D分别检查本地Miniblock缓冲池,其中节点C持有Miniblock 1,不被包含在MIB_B的集合内,则将Miniblock 1发送给B,同时向节点F和节点E转发此处的 表示Miniblock 1的区块标识,可以为区块编号。节点D的Miniblock缓冲池为空,向E发送MIB_D={}。
[0213] 4)节点B收到C发来的Miniblock 1,将该小区块保存在本地缓存中。E节点分别收到来自节点C和节点D持有的小区块标识,同时查看本地Miniblock缓冲池,发现C和D都没有缓存Miniblock 2小区块,因此将Miniblock 2发送给上述这两个节点。F则仅将MIB_F={}发送给节点G。
[0214] 5)节点G查看F的小区块缓存标识,然后将Miniblock 3发送给节点F。
[0215] 6)此时,网络中的所有节点第一轮gossip完毕。
[0216] 节点A在经过一段设定时间t后开始第二轮查询,查询处理逻辑同第一轮。最终在本示例中,A节点经过4轮查询,可以得到所有的Miniblock区块。
[0217] 在具体实现中,Leader节点查询终止条件为获得足够构造Macroblock的Miniblock。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈