CN110298754B - 一种应用于区块链的共识方法 - Google Patents
一种应用于区块链的共识方法 Download PDFInfo
- Publication number
- CN110298754B CN110298754B CN201910543017.4A CN201910543017A CN110298754B CN 110298754 B CN110298754 B CN 110298754B CN 201910543017 A CN201910543017 A CN 201910543017A CN 110298754 B CN110298754 B CN 110298754B
- Authority
- CN
- China
- Prior art keywords
- block
- witness
- chain
- main chain
- blocks
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Engineering & Computer Science (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种应用于区块链的共识方法,结合DPOS和BFT这两种常用的共识方法,并对这两种共识方法作出修改,设计了上一个不可回滚的区块方案,实现了区块链不可回滚,保证区块链共识的一致以及达成共识后不可篡改。本发明提供的方案让共识具备快速终局性,减少了恶意篡改将会引起的网络故障问题,因此,为了保证诚实的见证人节点即运行社区的程序的节点能保持一致,本发明设计了一种具有快速终局性的共识方法,缩短了交易确认的时间。
Description
技术领域
本发明属于区块链技术领域,具体涉及一种应用于区块链的共识方法。
技术背景
区块链是一种底层开源技术,包括的计算机技术为分布式数据存储、点对点传输、共识机制、加密算法等新型应用模式的集合,具有去中心化、规则应用去信任、安全保护去垄断等特点。区块链通过无数区块组成的链条,以更加透明安全的链接方式组成性能远超过个体简单相加的整体,节约了大量的时间和成本。在大数据时代,区块链技术愈发显得重要起来,除了数据的采集、分析等环节,数据的交换与共享也变得很重要。社会各行各业甚至同一行业不同单位保存在区块链中的数据库一般都是针对自身的业务需求进行定制,这使得系统环境、数据平台等存在巨大差异,在互相不信任的前提下,需要对区块链的有效性形成一致的共识。
目前,有众多常用的区块链共识方法中,例如POW、POS、BFT、Paxos、Raft等,这些常用的共识算法存在性能低,耗能大的问题,例如工作量证明(PoW)算法消耗大量计算资源及性能低下、延时高,容错是矿力的1/2。权益证明(PoS),即每个节点挖到区块的概率与它持有的币的比例成正比,即建立在账户股份多少的基础上的机制,是不公平的,再就是由于它的代价很小,受到的网络攻击也多,其容错是代币金额的1/2。授权权益证明(DPoS),是在最小化网络成本和安全费用的同时,赋予每个持股人一定的投票权,由他们产生“挖矿”代表,是一种更加高效和安全的共识算法,比PoS快,奖励归属见证人,无容错。拜占庭容错算法(BFT),解决分布式系统中一致性问题的经典算法,通过加密和多轮消息通信,可以使整个系统对外保持一致性,容错是参与节点的1/3。此外还有Paxos和Raft算法及其他变种,Paxos算法是1990年提出的一种基于消息传递且具有高度容错特性的一致性算法,Raft算法是Paxos算法的简化版。传统的Paxos算法、Raft算法及其变种大部分没有考虑拜占庭容错问题。面对特定行业和受众时,大部分使用的还是以PBFT为代表的共识算法,实用拜占庭容错系统(PBFT)降低了拜占庭协议的运行复杂度,使拜占庭协议在分布式系统中应用成为可能,一般适合于对强一致性有要求的私有链和联盟链场景。
由上述对各自共识方法的介绍可知,单一的共识算法均存在各种问题,这就引发了对各种各样新的共识方法的探究和尝试,复合型共识算法逐渐得到越来越多的关注。
发明内容
本发明基于上述背景和现有技术所存在的问题,拟设计一种结合了DPoS和BFT两种共识算法的区块链共识方法,这种共识方法运用了上一个不可回滚的区块(LIB)方案,加快了交易速度,保证区块链的一致性以及不可篡改性,实现交易吞吐量高、快速终局性,减少恶意节点对区块链网络的破坏,保证了区块链网络正常安全的运行。
为了说明方便,本发明假设A、B、C、D为四个见证人节点,见证人A可以产生区块a,见证人B可以产生区块b,见证人C可以产生区块c,约定最早产生的区块前一个区块为区块z。
一种应用于区块链的共识方法,包括步骤如下:
(1)首先利用DPoS方法产生区块和广播区块;
(2)利用BFT方法对产生的区块进行验证和投票,通过BFT验证和投票的区块,可以写入到区块链;
(3))投票后分析在写入区块的过程中遇到的临时分叉情况,根据区块高度对相应主链进行选择,将选择的主链上的区块进行同步并广播给其余连接的节点,达成共识;;
(4)对同步或广播来的区块进行验证,验证通过后,达成共识,并执行区块写入。
所述步骤(1)的具体实现过程如下:
1.1通过制定投票合约,然后任何拥有代币账号的用户都调用投票合约,进行投票,由区块链网络中根据选票选取(3f+1)个见证人,其中f为能够容忍的最大恶意节点数量;
1.2通过见证人产生区块,所有见证人按照轮次依次在各自所属期间段内产生区块,并记录产生区块的轮次;
1.3将产生的区块广播出去并将系统更新至下一轮次的期间段。
进一步地,所述投票合约还包含有质押机制,即账号参与投票前需缴纳一定数额的质押金,用以保证整个投票安全公正。
所述步骤(2)利用BFT方法对产生的区块进行验证和投票的具体实现过程如下:
2.1所有见证人节点对刚产生的新区块进行验证;
2.2新区块通过验证后进行BFT投票,即除见证人节点外职位相同的其余节点对主链上的区块进行BFT投票,并增加父区块是当前主链的最后一个区块的验证;
2.3任何收到(2f+1)个BFT投票的见证人节点,证明区块通过了BFT判断,将区块写入区块链,并设置新区块的父区块为LIB模式;
2.4判断是否达到BFT要求,达到要求则完成投票验证和投票,没有则进行下一轮次的写入区块过程。
进一步地,BFT确认时,见证人节点只对自己所在链的区块进行投票,即只对父区块是当前主链区块的区块进行投票,因为LIB(上一个不可回滚的区块)及之前的区块无法被回滚,所以收到包含BFT过程的完整区块要验证时,LIB高度和此高度之前的区块无需写入,可以不验证LIB高度和此高度之前的区块,待验证区块是可回滚高度的区块。在编程中将BFT过程调用验证区块头的函数的函数名改为VerifyBlockForBft。
进一步地,收到包含BFT验证通知的完整区块要验证时,因为LIB及之前的区块无法被回滚,所以待验证区块是可回滚的区块,即不验证LIB高度和此高度之前的区块。
所述步骤(3)的具体实现过程分为四种情况。例如:见证人A产生区块a,并广播出去,所有拥有a的父区块的诚实的见证人节点会为区块a投票,投票数达到(2f+1)时,可以将区块写入到区块链,见证人A的父区块将成为LIB,区块a之前的区块都将不可回滚,区块a的父区块中的交易都可被确认,实现终局性。见证人A产生区块a,广播出去,由于网络突然变差,可能导致少于f的节点收到(2f+1)个投票,造成只有少量节点写入了区块a,在下一个轮次见证人B产生了区块b,区块b也广播出去,并且收到了(2f+1)的投票,并且这些节点写入了区块b,恰好网络恢复,所有见证人节点发现有同高度的a和b两个区块,区块a和b后面都没有区块,所以区块a和b都是不是LIB,都是可以被回滚的,诚实的见证人节点会选择产生轮次更早的区块a作为主链区块。每种情况对应不同的主链选择情况,总结起来这四种情况表述如下:
3.1在网络正常的情况下,区块产生后选择主链,同步广播达成共识并写入区块链;
3.2网络发生故障的情况下,所述3.1中产生的区块出现某些临时分叉的场景,见证人节点A、B、C、D存在同时产生多个区块的情况,此时见证人节点A、B、C、D分别对所属区块进行验证,导致区块无法正常产生及写入区块,如下对3.1具体说明中的步骤2和步骤3的内容发生了变化;
3.3在出现所述3.2的情况后,如果网络故障没有及时恢复,拥有区块b的(2f+1)个节点,根本不知道合法区块a的存在,他们会以区块b所在的链为主链,继续进行共识,生成下一个区块;
3.4在出现所述3.2情况后,在产生区块c时,此时还未完成区块c的BFT确认过程,网络故障恢复,见证人节点B、C、D收到区块a的哈希值,获取区块a和区块c的BFT确认过程同时进行,让区块c的高度比区块a高,区块c所在的链成为主链。
进一步地,所述步骤3.1的主链选择流程如下:
步骤1:见证人A产生区块a并广播区块a给所有见证人节点,区块a的父区块是z;
步骤2:见证人A、B、C、D验证本链上的区块a;
步骤3:区块a通过验证,对区块a投票,广播投票信息给所有见证人节点;
步骤4:收到(2f+1)个投票信息的节点,将区块a写入区块链,区块a的父区块z成为LIB,区块a为主链头区块,完成主链选择;
步骤5:最后将区块a的哈希值广播给所有连接peer,广播给全网。
进一步地,所述正常流程3.1不变,在如网络故障等的复杂因素的情况下。见证人A和见证人B、C、D的通信变差了,在3.1的步骤4中,收到2f+1个投票消息的节点太少,它们在3.1的步骤5中只有见证人A广播区块a的哈希值消息,但收到该消息的见证人节点很少,见证人B、C、D没有收到区块a的哈希值消息,只有见证人D收到了区块a的哈希值消息,但需要时间下载区块a,所以现在见证人B、C、D没有区块a。所述3.2的流程为:
步骤1:见证人B是见证人A后下一个生产区块的节点,并且见证人B没有区块a,在区块z之后产生区块b,把区块b广播给所有见证人节点;
步骤2:见证人A已经有区块a,区块b不在它的主链上,不对区块b进行投票。见证人B、C、D都没有区块a,所以会对区块b进行验证;
步骤3:区块b通过见证人B、C、D的验证,对区块b进行投票,广播验证消息给所有见证人节点;
步骤4:收到(2f+1)个投票信息的节点,将区块b写入区块链;
步骤5:同时网络故障恢复时,见证人B、C收到了a的哈希值消息,下载区块a;
步骤6:见证人B、C将区块b写入区块链,此时区块z成为LIB;
步骤7:见证人D已经写入了区块a,写入区块b时,发现区块b的产生轮次晚于区块a,丢弃区块b,区块z成为LIB,完成主链选择;
步骤8:见证人B、C下载好区块a,发现区块a和区块b同高度,但区块a比区块b产生的轮次要早,区块b被回滚,将区块a写入区块链,并且设置区块a为主链头区块,设置区块z为LIB,完成主链选择。
经过以上的流程,见证人A、B、C、D最后都拥有了区块a,并且区块z为LIB。
进一步地,在所述步骤3.3的情况下区块b所在的链是主链。主链在持续产生区块,比区块a所在的临时分叉的链更长,当网络故障恢复后,拥有高度较高的分叉链的落后节点A比持续产生区块的见证人节点落后,会收到新区块的广播,落后的节点A会切换到真正的主链。
进一步地,对所述3.4更加具体的描述为假设区块a先写入成为了主链,完成区块c的BFT确认过程后,写入区块c,发现区块c的高度比区块a高,所有有用区块c的节点(至少(2f+1)个,不然完成不了区块c的验证和投票,另外网络故障恢复,必然多于(2f+1)个节点有区块c的区块),都会将区块c写入区块链,设置区块c所在的链成为主链。
进一步地,选LIB区块之后最长的链作为主链。适合网络分区后,若干轮次后网络故障才恢复。
进一步地,如果两个临时区块同高度,选择先产生区块的链为主链即选拥有轮次更早区块的链为主链。这种主链选择方式适合短暂的网络故障立马恢复的情况。
所述步骤(4)的具体实现过程如下:
4.1获取完整的区块;
4.2验证获取到的区块是否是LIB之后的区块,如果是LIB之后的区块,准备写入区块;
4.3判断待写入区块是否与当前主链在同一链上,不再同一条链上则重新进行主链选择;
4.4完成以上验证后,将区块写入区块链。如果选择的主链不是当前所要选择的主链,则执行主链切换;
4.5完成将主链区块写入区块链。
进一步地,所述步骤4.1对完整的区块链的验证中,丢弃区块高度小于等于LIB高度的区块要,LIB下一个高度的区块的父区块必须是LIB。
进一步地,所述步骤4.3中进行主链选择,选择的链与不是当前的主链时,需要加入和LIB相关的判断,写入的区块必须是LIB之后的,然后根据长度和时间进行选择。所述中修改reorg函数需要增加限制,即使LIB之前的区块不可回滚。
进一步地,所述步骤4.4中的区块写入规则:能通过验证的区块,说明是还处于可回滚状态,都可以写入。在编程中,如果需要切换主链,需要执行reorg函数,使不得回滚LIB及之前的区块。
进一步地,已经写入的区块,无需再次写入,可以跳过此区块的写入。
进一步地,只写入LIB之后的区块。LIB及之前的区块都已不可回滚,无需写入之前的区块。
基于上述技术方案,本发明提供了新的共识方法,利用LIB方案实现了快速终局性,使交易确认时间缩短了,通过见证人的选举缩小进行共识出块的节点范围,减少共识耗能,并通过进一步验证确认区块,让所有区块链节点在某个区块高度上,生成并选择出唯一的、一致的区块,避免区块分叉,减少恶意节点对区块链网络的破坏,保证了区块链网络正常安全的运行。
附图说明
图1为本发明基于区块链快速终局的共识机制流程图;
图2为BFT进行投票和验证的原理图;
图3为主链选择流程图;
图4为网络正常情况下的主链选择原理图;
图5为网络故障时的主链选择原理图;
图6为网络故障立刻恢复时的主链选择原理图;
图7为网络故障未立刻恢复时主链选择原理图;
图8为区块写入的整体流程图。
具体实施方式
为了清晰地阐述本发明,下面用附图结合具体实施方式对本发明的技术加以详细说明。
(1)图1为本发明基于区块链快速终局的共识机制流程图,其体现的步骤为:
第1步:首先利用DPoS共识算法产生区块并广播出去;
第2步:利用BFT方法对产生的区块进行验证和投票,通过BFT验证和投票的区块,可以写入到区块链;
第3步:投票后分析在写入区块的过程中遇到的临时分叉情况,根据区块高度对相应主链进行选择,将选择的主链上的区块进行同步并广播给其余连接的节点,达成共识;
第4步:对同步或广播来的区块进行验证,验证通过后,达成共识,并执行区块写入。
上述步骤第1步利用DPoS共识算法产生区块并广播出去包括的步骤有:
第1步:通过制定投票合约,然后任何拥有代币账号的用户都可调用投票合约,进行投票,由区块链网络中根据选票选取(3f+1)个见证人,其中f为能够容忍的最大恶意节点数量;
第2步:通过见证人产生区块。所有见证人按照轮次依次在各自所属期间段内产生区块,并记录产生区块的轮次;
第3步:将产生的区块广播出去并将系统更新至下一轮次的期间段。
产生区块并广播区块后,接下来需完成BFT进行投票验证区块,图2为BFT进行验证的原理图。图中说明了新区块的产生是父区块的至少被(2f+1)见证人节点所拥有的证明,这个证明跨越了轮次切换(每2s都是一个轮次切换,会切换到新的见证人产生区块),保证了区块链中的共识的最终一致性。在PBFT中commit消息的作用是为了发生视图切换后,至少(2f+1)个节点仍能保持一致性,新区块的产生能够证明至少(2f+1)个见证人节点在新区块的父区块上保持一致性,因此可以把commit消息去掉,只保留PBFT的Pre-prepare和prepare消息,这样仍然可以容错f个拜占庭节点,达到最终一致性。其在整个共识算法中利用BFT方法对产生的区块进行验证和投票的步骤有:
第1步:所有见证人节点对刚产生的新区块进行验证;
第2步:新区块通过验证后进行BFT投票,即除产生本区块的见证人节点外的其余见证人节点对主链上的区块进行BFT投票,并增加父区块是当前主链的最后一个区块的验证;
第3步:任何收到(2f+1)个BFT投票的见证人节点,将区块写入区块链,并设置新区块的父区块为LIB模式;
第4步:判断是否达到BFT验证和投票的要求,达到要求则完成投票验证和投票。
图3为主链选择流程图,完成主链选择具体实现过程分为四种情况。分别为在正常网络下的情况、网络发生故障的情况下以及网络发生故障的情况下会出现的两种状况的情况:一种是网络故障立刻恢复的情况,还有一种是网络故障没有立刻恢复的情况。
举例说明,见证人A产生区块a,广播出去,所有拥有a的父区块的诚实的见证人节点会为区块a投票,投票数达到(2f+1)时,可以将区块写入到区块链,见证人A的父区块将成为LIB,区块a之前的区块都将不可回滚,区块a的父区块中的交易都可被确认,实现终局性。见证人A产权区块a,广播出去,由于网络突然发生故障,导致少于f的节点收到(2f+1)个投票,所以只有少于节点写入了区块a,在下一个轮次见证人B产生了区块b,区块b也广播出去,并且收到了(2f+1)的投票,并且这些节点写入了区块b,网络故障恢复,所有超级节点发现有a和b两个区块,区块a和b都不是LIB,都是可以被回滚的,诚实的见证人节点会选择产生轮次更早的区块a作为主链区块。每种情况对应不同的主链选择情况。
总结起来这四种情况表述如下:
3.1在网络正常的情况下,区块产生后选择主链,同步广播达成共识并写入区块链;
3.2网络发生故障的情况下,所述3.1的情况会出现临时分叉的现象,导致3.1的第2步和第3步的内容发生变化,见证人节点A、B、C、D同时产生多个区块,此时见证人节点A、B、C、D分别对所属区块进行验证,导致区块无法正常产生及写入区块;
3.3在出现所述3.2的情况后,如果网络故障没有及时恢复,拥有区块b的(2f+1)个节点,不知道合法区块a的存在,他们会以区块b所在的链为主链,继续进行共识,生成下一个区块;
3.4在出现所述3.2情况后,如果出现网络在产生区块c时,此时还未完成区块c的BFT确认过程,网络故障恢复,见证人节点B、C、D收到区块a的哈希值,获取区块a和区块c的BFT确认过程同时进行,让区块c的高度比区块a高,区块c所在的链成为主链。
根据所述四种情况,分别完成主链选择。再根据LIB设置规则,LIB区块之后的区块可以回滚,LIB及之前的区块无法回滚,判断区块是否是LIB之后的区块,如果是进行区块写入区块链,如果不是则进行丢弃。
(2)如图3所示为主链选择流程图,其中,如图4为网络正常情况下的主链选择原理图,其所述的步骤3.1的主链选择流程如下:
第1步:见证人A产生区块a并广播区块a给所有见证人节点,区块a的父区块是区块z;
第2步:见证人A、B、C、D验证本链上的区块a;
第3步:区块a通过验证,对区块a投票,广播投票信息给所有见证人节点;
第4步:收到(2f+1)个投票信息的节点,将区块a写入区块链,区块a的父区块z成为LIB,区块a为主链头区块,完成主链选择;
第5步:最后将区块a的哈希值广播给所有连接peer,广播给全网。
其中,如图5为网络故障时的主链选择原理图所示,正常流程3.1不变,在网络故障等复杂因素的情况下,见证人A和见证人B、C、D的通信变差了,在网络正常时的第3步中,收到(2f+1)投票消息的节点太少,不足f个,比如只有见证人A,它们在第4步只有见证人A广播区块a的哈希值消息,但收到该消息的见证人节点很少见证人B、C、D没有收到区块a的哈希值消息,只有见证人D收到了区块a的哈希值消息,收到哈希值消息的见证人需要时间下载区块a。所述步骤3.2的流程为:
第1步:见证人B是见证人A后下一个生产区块的节点,并且见证人B没有区块a,在区块z之后产生区块b,把区块b广播给所有见证人节点;
第2步:见证人A已经有区块a,区块b不在它的主链上,不对区块b进行投票。见证人B、C、D都没有区块a,所以会对区块b进行验证;
第3步:区块b通过见证人B、C、D的验证,对区块b进行投票,广播验证消息给所有见证人节点;
第4步:收到(2f+1)个投票信息的节点,将区块b写入区块链;
第5步:同时网络故障恢复时,见证人BC收到了a的哈希值,下载区块a;
第6步:见证人B、C将区块b写入区块链,并且区块z成为LIB;
第7步:见证人D已经写入了区块a,写入区块b时,发现区块b的产生轮次晚于区块a,丢弃区块b,区块z成为LIB,完成主链选择;
第8步:见证人B、C下载好区块a,发现区块a和区块b同高度,但区块a比区块b产生的轮次要早,区块b被回滚,将区块a写入区块链,并且设置区块a为主链头区块,设置区块z保存为LIB,完成主链选择。
经过以上的流程,见证人A、B、C、D最后都拥有了区块a,并且区块z是LIB。
其中,如图6为网络故障立刻恢复时的主链选择原理图所示,当在所述步骤3.3的情况下区块b所在的链是主链,把区块b所在的链标记为灰色。主链在持续的产生区块,比区块a所在的临时分叉链更长,当网络故障恢复,拥有区块a所在的分叉链的落后节点A,比持续产生区块的见证人节点落后,会收到新区块的广播,落后的节点A会切换到真正的主链。
其中,如图7为网络故障未立刻恢复时主链选择原理图所示,对所述3.4更加具体的描述为假设区块a先写入成为了主链。完成区块c的BFT确认过程后,写入区块c,发现区块c的高度比区块a高,所有拥有区块c的节点(至少(2f+1)个,否则完成不了区块c的验证,另外网络故障恢复时,必然多于(2f+1)个节点有区块c),都会将区块c写入区块链,设置区块c所在的链成为主链。选LIB区块之后最长的链作为主链。适合网络分区后,若干轮次后才网络故障才恢复。另外,当2个临时区块同高度时,选拥有轮次更早的区块,适合短暂的网络故障立马恢复的情况。
(3)如图8为区块写入的整体流程图,对同步或广播来的区块进行验证,验证通过后,达成共识,并执行区块写入。区块写入区块链的规则和步骤如下:
第1步:获取完整区块;
第2步:验证获取到的区块是否是LIB之后的区块,当是LIB之后的区块时,准备写入区块链;
第3步:判断待写入区块是否与当前主链在同一链上,不在同一链上则重新进行主链选择;
第4步:完成以上验证后,将区块写入区块链。当主链选择的主链非当前主链时,则执行主链切换;
第5步:完成将主链区块写入区块链。
其中需要注意到的地方有:上述(3)第1步对完整的区块链的验证中如果区块高度小于等于LIB区块高度的区块要被丢弃,LIB下一个高度的区块的父区块必须是LIB的区块。所述(3)第3步中进行主链选择,如果选择的链与不是当前的主链,需要加入和LIB相关的判断,写入的区块必须是LIB之后的区块,然后根据长度和时间进行选择。所述(3)第3步中在编程中修改reorg函数需要增加限制,使LIB之前的区块不可回滚。在编程中如果需要切换主链,需要执行reorg函数,因为reorg函数使得形成区块的链上不得回滚LIB及之前的区块;所述(3)第4步中的区块写入规则:能通过验证的区块,说明是还处于可回滚状态,都可以写入。已经写入的区块,无需再次写入,可以跳过此区块的写入。只写入LIB之后的区块。LIB及之前的区块都已不可回滚,无需写入之前的区块。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。
Claims (15)
1.一种应用于区块链的共识方法,其特征在于,基于上一个不可回滚的区块LIB方案,结合DPoS和BFT两种共识算法,包括步骤如下:
(1)首先利用DPoS方法产生区块和广播区块;
(2)利用BFT方法对产生的区块进行验证和投票,通过BFT确认的区块,可以写入到区块链,同时设置区块的LIB模式;
(3)投票后分析在写入区块的过程中遇到的临时分叉情况,根据区块高度对相应主链进行选择,将选择的主链上的区块进行同步并广播给其余连接的节点,达成共识;
(4)对同步或广播来的区块进行验证,验证通过后,达成共识,并执行区块写入。
2.根据权利要求1所述应用于区块链的共识方法,其特征在于,所述步骤(1)的具体实现过程如下:
1.1通过制定投票合约,然后任一拥有代币账号的用户调用投票合约,进行投票,由区块链网络根据选票选取(3f+1)个见证人,其中f为能够容忍的最大恶意节点数量;
1.2通过见证人产生区块,所有见证人按照轮次依次在各自所属期间段内产生区块,并记录产生区块的轮次;
1.3将产生的区块广播出去并将系统更新至下一轮次的期间段。
3.根据权利要求2所述应用于区块链的共识方法,其特征在于,所述投票合约还包含有质押机制,即账号参与投票前需缴纳一定数额的质押金,用以保证整个投票安全公正。
4.根据权利要求1所述应用于区块链的共识方法,其特征在于,所述步骤(2)的具体实现过程如下:
2.1所有见证人节点对产生的新区块进行验证;
2.2新区块通过验证后进行BFT投票,即除产生本区块的见证人节点外的其余见证人节点对主链上的区块进行BFT投票,并增加父区块是当前主链的最后一个区块的验证;
2.3任何收到(2f+1)个BFT投票的见证人节点,将区块写入区块链。。
5.根据权利要求4所述所述应用于区块链的共识方法,其特征在于,利用BFT方法对产生的区块进行验证和投票的步骤中,BFT确认时,见证人节点仅对自己所在链的区块进行投票,即只对父区块是当前主链区块的区块进行投票。
6.根据权利要求1或 4所述应用于区块链的共识方法,其特征在于,所述步骤(3)中A、B、C、D为四个见证人节点,见证人A产生区块a,见证人B产生区块b,见证人C产生区块c,约定最早产生的区块前一个区块为区块z,所述投票后分析区块分叉情况,对相应主链进行选择,选择高度最高的区块所在链作为主链,包括如下:
3.1在网络正常的情况下,区块产生后选择主链,同步广播达成共识并写入区块链;
3.2网络发生故障的情况下,所述3.1中产生的区块出现临时分叉现象时,见证人节点A、B、C、D同时产生多个区块,此时见证人节点A、B、C、D分别对所属区块进行验证,导致区块无法正常产生及写入区块;
3.3出现所述3.2的情况后,网络故障没有及时恢复,拥有区块b的(2f+1)个节点继续进行共识,生成下一个区块;
3.4在出现所述3.2情况后,在产生区块c时,此时还未完成区块c的BFT确认过程,网络故障恢复,见证人节点B、C、D都收到区块a的哈希值,获取区块a和区块c的BFT确认过程同时进行,区块c的高度比区块a高,区块c所在的链成为主链。
7.根据权利要求6所述应用于区块链的共识方法,其特征在于,所述3.1中主链选择流程如下:
1)见证人A产生区块a并广播区块a给所有见证人节点,区块a的父区块是z;
2)见证人A、B、C、D验证本链上的区块a;
3)区块a通过验证,对区块a投票,广播投票信息给所有见证人节点;
4)收到(2f+1)个投票信息的节点,将区块a写入区块链,区块a的父区块z成为上一个不可回滚的区块LIB,区块a为主链头区块,完成主链选择;
5)最后将区块a的哈希值广播给所有连接peer,广播给全网。
8.根据权利要求6所述的应用于区块链的共识方法,其特征在于,所述步骤3.2的流程为:
1)见证人B是见证人A后下一个生产区块的节点,并且见证人B没有区块a,在区块z之后产生区块b,把区块b广播给所有见证人节点;
2)见证人A已经有区块a,区块b不在它的主链上,不对区块b进行投票;见证人B、C、D都没有区块a,所以会对区块b进行验证;
3)区块b通过见证人B、C、D的验证,对区块b进行投票,广播验证消息给所有见证人节点;
4)收到(2f+1)个投票信息的节点,将区块b写入区块链;
5)同时当网络故障恢复时,见证人B、C收到了a的哈希值消息,下载区块a;
6)见证人B、C将区块b写入区块链,并且区块z成为LIB;
7)见证人D已经写入了区块a,写入区块b时,发现区块b的产生轮次晚于区块a,丢弃区块b,区块z成为LIB,完成主链选择;
8)见证人B、C下载好区块a,发现区块a和区块b同高度,但区块a比区块b产生的轮次要早,区块b被回滚,将区块a写入区块链,并且设置区块a为主链头区块,设置区块z为LIB,完成主链选择。
9.根据权利要求6所述应用于区块链的共识方法,正常流程3.1 不变,在网络故障等的复杂因素的情况下进行主链选择,其特征在于,经过以上流程3.1的流程,见证人A、B、C、D最后都拥有了区块a,并且区块z是LIB。
10.根据权利要求6所述应用于区块链的共识方法,其特征在于,在步骤3.3中,区块b所在的链是主链,见证人节点A落后,成为落后节点A;主链在持续产生区块,比区块a所在的临时分叉链更长,当网络故障恢复后,落后节点A收到新区块的广播,落后的节点A切换到真正的主链。
11.根据权利要求6所述应用于区块链的共识方法,其特征在于,所述3.4进一步解释为:当区块a先写入成为了主链,完成区块c的BFT确认过程后,写入区块c,发现区块c的高度比区块a高,所有拥有区块c的节点,都会将区块c写入区块链,设置区块c所在链为主链。
12.根据权利要求10所述应用于区块链的共识方法,其特征在于,选LIB区块之后最长的链作为主链,适合网络分区后,若干轮次后网络故障才恢复, 出现同高度时,选先产生的区块,用于解决短暂的网络中断立马恢复的情况。
13.根据权利要求1所述应用于区块链的共识方法,其特征在于,所述步骤(4)的具体实现过程如下:
4.1获取完整区块;
4.2验证获取到的区块是否是LIB之后的区块,如果是LIB之后的区块,准备写入区块;
4.3判断待写入区块是否与当前主链在同一链上,不在同一条链上则重新进行主链选择;
4.4完成以上验证后,将区块写入区块链, 当选择的主链不是当前所要选择的主链时,则执行主链切换。
14.根据权利要求13所述应用于区块链的共识方法,其特征在于,所述步骤(4)中还包括:
1)步骤4.1对完整的区块链的验证中,丢弃区块高度小于等于LIB区块高度的区块,LIB下一个高度的区块的父区块必须是LIB;
2)步骤4.3中进行主链选择,当选择的链与不是当前的主链时,需要加入和LIB相关的判断,写入的区块必须是LIB,然后根据长度和时间进行选择;
3)步骤4.4中区块写入规则:能通过验证的区块,说明是还处于可回滚状态,都可以写入。
15.根据权利要求14所述应用于区块链的共识方法,其特征在于,已经写入的区块,无需再次写入,可以跳过此区块的写入;只写入LIB之后的区块;LIB及之前的区块都已不可回滚,无需写入之前的区块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910543017.4A CN110298754B (zh) | 2019-06-21 | 2019-06-21 | 一种应用于区块链的共识方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910543017.4A CN110298754B (zh) | 2019-06-21 | 2019-06-21 | 一种应用于区块链的共识方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110298754A CN110298754A (zh) | 2019-10-01 |
CN110298754B true CN110298754B (zh) | 2021-10-01 |
Family
ID=68028423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910543017.4A Active CN110298754B (zh) | 2019-06-21 | 2019-06-21 | 一种应用于区块链的共识方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110298754B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111355608A (zh) * | 2020-02-18 | 2020-06-30 | 杭州复杂美科技有限公司 | 一种区块链回滚异常识别方法和系统、设备及存储介质 |
CN111311414B (zh) * | 2020-02-27 | 2023-12-08 | 杭州云象网络技术有限公司 | 一种基于一致性哈希算法的区块链多方共识方法 |
CN111679936B (zh) * | 2020-05-26 | 2023-09-05 | 中国工商银行股份有限公司 | 一种区块链网络分叉自动恢复方法、装置及系统 |
CN112714177B (zh) * | 2020-12-24 | 2022-11-29 | 天津科技大学 | 一种具有线性消息复杂度的pbft改进算法 |
CN112988896B (zh) * | 2021-03-29 | 2023-02-28 | 湖北央中巨石信息技术有限公司 | 一种基于区块链的同步共识方法及系统及装置及介质 |
CN113722545B (zh) * | 2021-06-30 | 2023-04-28 | 电子科技大学 | 一种许可链环境下的数据编校方法 |
CN114090693B (zh) * | 2022-01-18 | 2022-05-17 | 安徽中科晶格技术有限公司 | 基于拜占庭容错的区块链见证共识方法、系统、设备及存储介质 |
CN116032940B (zh) * | 2023-02-20 | 2023-06-06 | 安徽中科晶格技术有限公司 | 基于宕机容忍的区块链见证共识方法、装置、设备及介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878071A (zh) * | 2017-01-25 | 2017-06-20 | 上海钜真金融信息服务有限公司 | 一种基于Raft算法的区块链共识机制 |
CN107341660A (zh) * | 2017-05-27 | 2017-11-10 | 唐盛(北京)物联技术有限公司 | 一种区块链底层共识机制以及基于该共识机制的区块链系统 |
CN108377206A (zh) * | 2018-03-12 | 2018-08-07 | 众安信息技术服务有限公司 | 用于配置共识算法的方法、装置及计算机可读存储介质 |
CN109039713A (zh) * | 2018-07-16 | 2018-12-18 | 夸克链科技(深圳)有限公司 | 一种区块链共识装置与算法 |
CN109523260A (zh) * | 2018-11-28 | 2019-03-26 | 段红 | 一种动态节点选举的高并发共识机制 |
CN109670954A (zh) * | 2018-12-18 | 2019-04-23 | 陕西医链区块链集团有限公司 | 基于区块链的交易处理方法 |
-
2019
- 2019-06-21 CN CN201910543017.4A patent/CN110298754B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878071A (zh) * | 2017-01-25 | 2017-06-20 | 上海钜真金融信息服务有限公司 | 一种基于Raft算法的区块链共识机制 |
CN107341660A (zh) * | 2017-05-27 | 2017-11-10 | 唐盛(北京)物联技术有限公司 | 一种区块链底层共识机制以及基于该共识机制的区块链系统 |
CN108377206A (zh) * | 2018-03-12 | 2018-08-07 | 众安信息技术服务有限公司 | 用于配置共识算法的方法、装置及计算机可读存储介质 |
CN109039713A (zh) * | 2018-07-16 | 2018-12-18 | 夸克链科技(深圳)有限公司 | 一种区块链共识装置与算法 |
CN109523260A (zh) * | 2018-11-28 | 2019-03-26 | 段红 | 一种动态节点选举的高并发共识机制 |
CN109670954A (zh) * | 2018-12-18 | 2019-04-23 | 陕西医链区块链集团有限公司 | 基于区块链的交易处理方法 |
Non-Patent Citations (1)
Title |
---|
基于语义嵌入模型与交易信息的智能合约自动分类系统;黄步添 等;《自动化学报》;20170930;第43卷(第9期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110298754A (zh) | 2019-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110298754B (zh) | 一种应用于区块链的共识方法 | |
CN110784346B (zh) | 一种基于信誉值的pbft共识系统及方法 | |
CN111311414B (zh) | 一种基于一致性哈希算法的区块链多方共识方法 | |
CN109462587B (zh) | 区块链分层共识方法、区块链网络系统及区块链节点 | |
US10944624B2 (en) | Changing a master node in a blockchain system | |
CN109447795B (zh) | 一种支持快速达成最终确认性的拜占庭共识方法 | |
CN111131209B (zh) | 一种改进的高效共识方法、系统、计算机设备及存储介质 | |
CN111314067B (zh) | 区块存储方法、装置、计算机设备及存储介质 | |
CN111598566A (zh) | 基于混合跨链的网络支付系统 | |
CN111092896B (zh) | 基于优化paxos的食品溯源分布式数据同步方法 | |
Li et al. | An extensible consensus algorithm based on PBFT | |
CN109840767B (zh) | 基于区块链技术的多方公平合约存证方法和系统 | |
Chen et al. | An improved algorithm for practical byzantine fault tolerance to large-scale consortium chain | |
CN115633035B (zh) | 一种基于改进的pbft物联网区块链共识算法 | |
CN111798234B (zh) | 一种轻量级区块链系统及构造方法 | |
He et al. | An improvement of consensus fault tolerant algorithm applied to alliance chain | |
CN112232619A (zh) | 联盟链的区块出块和定序方法、节点及区块链网络系统 | |
CN115037472B (zh) | 基于双层dag共识机制的交易处理方法及系统、服务设备 | |
CN116827957B (zh) | 基于多区块链的信息处理方法、装置、设备以及介质 | |
CN111970370B (zh) | 基于面向通信设备体系的多层区块链协议拓展系统及方法 | |
Al-Mamun et al. | Dean: A lightweight and resource-efficient blockchain protocol for reliable edge computing | |
CN116170155A (zh) | 基于pbft改进的联盟区块链共识方法 | |
Al-Mamun et al. | Trustworthy edge computing through blockchains | |
CN114928446A (zh) | 一种大规模节点高效共识方法 | |
CN111917826A (zh) | 一种基于区块链知识产权保护的pbft共识算法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |