一种基于谣言传播协议的拜占庭容错区块链生成方法与流程

文档序号:16672579发布日期:2019-01-18 23:41阅读:376来源:国知局
一种基于谣言传播协议的拜占庭容错区块链生成方法与流程
本发明涉及区块链共识算法领域,具体涉及一种基于谣言传播协议的拜占庭容错区块链生成方法。
背景技术
:谣言传播协议(gossipprotocol)是一种利用随机的方式自由地选择相邻节点并和它们交换信息的通信方式,主要分为push、pull和push&pull三种方式。push:拥有状态新信息的节点随机选择相邻节点并向其发送自己得到信息;pull:发起信息交换的节点随机选择相邻节点并从对方获取信息;push-pull混合模式:发起信息交换的节点向选择的节点发送信息。区块链是一种加密货币的技术,2008年首次由中本聪提出,它具有去中心化、透明性、开放性、自治性、信息不可篡改性和匿名性等特点。区块链是近年来金融、互联网及其他众多领域研究的热点,随着以太坊、超级账本等系统的兴起,区块链技术受到越来越多的关注。区块链技术也被认为是继大型计算机、个人计算机、互联网、移动社交之后的第5次颠覆式计算范式,为金融、科技、文化、政治等领域带来深刻的变革。区块链是多种技术的产物,共识方法则是区块链中非常重要的一环,区块链系统的效率直接受制于共识方法的好坏。共识方法是指在一个节点或多个节点提出一个值后,整个分布式系统对这个值达成一致的算法。目前,主流的区块链共识方法有工作量证明(pow)、权益证明(pos)、权威证明(poa)等。pow的优势是算法简单,节点可以自由进入,去中心化程度高,更安全;缺点是会消耗大量的资源,不环保,如果有人能控制51%的算力,就会有被攻击的风险。pos相对于pow的优点是更加节约资源,系统效率更高;缺点是算法复杂,容易产生安全漏洞。poa的优点是适用于私有链,验证速度快,缺点是去中心化程度低。不同的共识方法具有不同的优劣,适用于不同的环境和场景,本发明主要介绍了一种基于谣言传播协议的拜占庭容错区块链生成方法,具有更高的容错特性,更好的可扩展性和动态负载均衡的性能。技术实现要素:本发明的目的是提供一种基于谣言传播协议的拜占庭容错区块链生成方法,使区块链系统具有更高的容错性,具有更好的可扩展性和具有动态负载均衡性能的目的。为了达到上述目的,本发明提供了一种基于谣言传播协议的拜占庭容错区块链生成方法,包含以下步骤:s1、共识网络根据规则选取议长节点;s2、议长节点根据谣言传播协议向相邻议员节点广播提案;s3、当议员节点验证议长节点和提案均为正确时,继续执行步骤s4;s4、节点间计算自身的本地数据;s5、节点间计算全局数据向量;s6、节点间计算共识数据;s7、当节点间验证节点交易数据达成共识时,继续执行步骤s8;s8、各节点生成区块并加入区块链中;s9、输出新的完整区块链。优选地,所述步骤s3中,若验证议员节点验证议长节点和提案中一个或者两个均不正确时,则跳转至步骤s1进行新一轮共识,循环进行直至验证正确。、优选地,所述步骤s7中,当节点间验证节点交易数据未达成共识时,则跳转至步骤s1进行新一轮共识,循环进行直至节点间验证节点交易数据达成共识。优选地,所述步骤s1中,进一步包含:基于谣言传播协议的拜占庭容错区块链生成方法的议长节点是由参与共识的所有节点轮流提出,每一个参与共识的节点都被分配一个编号,从0开始,最后一个节点的编号是n-1;共识网络选取节点的方法为:p=(l-r)modn式中,p是指议长节点的编号,l是指当前共识区块链的长度,r是指当前区块链长度下共识过程的轮数,n是指参与共识的总结点数;其中,每一轮共识都需要一个议长节点,其他节点则为议员节点,当新的区块产生并加入到区块链中时,立即开始新一轮的共识,r也被重置为0。优选地,所述步骤s2中,所述谣言传播协议是利用随机的方式将信息广播到整个网络中,包含push-gossip和pull-gossip两种方式;其中,push-gossip方式包含以下过程:1)网络中某个主节点随机的选择任意个相邻节点作为传输对象;2)该节点向其选中的节点传输相应的信息;3)接收到信息的被动节点重复完成相同的工作;pull-gossip方式包含以下过程:1)某个主节点随机的选择任意相邻节点询问有没有最新的信息;2)收到请求的被动节点回复主节点其最近收到的信息的情况。优选地,所述步骤s3中,进一步包含:议员节点对议长广播的提案的验证包含以下过程:1)判断提案的内容是否满足系统的规则,若满足,则认为合法;2)判断提案中的交易是否存在于区块链中,若不存在,则认为合法;3)判断提案中的交易是否存在双重支付,若不存在,则认为合法;4)判断提案中的交易的所有合约脚本是否都正确执行,若是,则认为合法;5)若满足以上4点合法判定,则认为提案是正确,并接受提案。优选地,所述步骤s4中,所述本地数据是节点自身含有的数据属性值。优选地,所述步骤s5中,进一步包含:全局数据包含n个节点的本地数据值组成的一维向量,计算全局数据向量按照以下定义:定义1:设向量gdi和gdj分别是节点i和节点j的全局数据;若gdi[x]≠gdj[x]且设置gdi[x]=gdj[x],则gdi中的第x个元素得到更新;若gdj[x]≠gdi[x]且设置gdj[x]=gdi[x],则gdj中的第x个元素得到更新;所述步骤s6中,进一步包含:定义2:共识数据指节点的全局数据向量中超过一半的一致元素,共识数据为最终的一致值;其中,计算共识数据的方法按照谣言传播协议的种类可分为主动传播和被动传播;所述主动传播方法包含以下步骤:s61、计算节点自身的本地数据,赋值给全局数据向量中对应的元素;s62、若传播方式为push-gossip,则将自身全局数据向量推送给目标节点;若传播方式为pull-gossip,则接收目标节点发送的全局数据向量,根据定义1更新自身全局数据向量;s63、重复步骤s62,直至全局数据向量中无空值;s64、根据定义2计算共识数据;s65、输出共识数据,结束;所述被动传播方法包含以下步骤:p61、计算节点自身的本地数据,赋值给全局数据向量中对应的元素;p62、节点考察自身是否被选作目标节点。若被选为目标节点,且传播方式为pull-gossip,则将自身全局数据向量推送给对方;若传播方式为push-gossip,则接收对方发送的全局数据向量,根据定义1更新自身全局数据向量;p63、重复步骤p62,直至通信结束;p64、根据定义2计算共识数据;p65、输出共识数据,结束。优选地,所述步骤s7中,进一步包含:判断节点间验证拥有共识数据的节点是否占节点总数的一半以上,若不是,则进入新一轮的共识,重新选择议长节点进行提案;若是,则生成区块并加入到区块链中。优选地,所述步骤s8中,进一步包含:输出的区块链可视为帐本,每个区块相当于账本中的一页,记载了区块头、交易详情、交易计数器、时间戳、随机数、难度目标、区块大小数据中的一种或多种;其中,所述区块头是每个数据块的前80个字节包括上一区块头哈希值,用于保证区块按顺序串联;所述时间戳用于记录区块的生成时间;所述随机数为算术题答案;所述难度目标为算术题的难度系数打分;所述交易详情记录每笔交易的转出方、收入方、金额及转出方的数字签名;所述交易计数器表述每个区块中包含交易的数量;所述区块大小表示每个区块数据的大小。与现有技术相比,本发明的有益效果为:1)具有更高的容错特性,传统的拜占庭方法只能容忍不超过1/3的错误节点,本方法可以容忍将近1/2的节点为拜占庭节点;2)具有更好的可扩展性,和传统的拜占庭方法相比,本方法可以保证即使是系统规模扩大,节点间交换信息的效率不会降低;3)具有动态负载均衡的性能,系统中随着区块链长度变化,议长节点也会随之转移,不会因为节点变更降低系统性能。同时系统中所有节点都是对等的,解决了单点故障问题。附图说明图1本发明基于谣言传播协议的拜占庭容错区块链生成方法的流程图。具体实施方式本发明公开了一种基于谣言传播协议的拜占庭容错区块链生成方法,为了使本发明更加明显易懂,以下结合附图和具体实施方式对本发明做进一步阐述。如图1所示,本发明基于谣言传播协议的拜占庭容错区块链生成方法,包含如下步骤:s1、共识网络根据规则选取议长节点;s2、议长节点根据谣言传播协议向相邻议员节点广播提案;s3、议员节点验证议长节点和提案是否都正确,若是,则继续执行步骤s4,若否,则转向步骤s1进行新一轮共识,循环进行,直至验证正确;s4、节点间计算自身的本地数据ld(localdata);s5、节点间计算全局数据gd(globaldata)向量;s6、节点间计算共识数据cd(commondata);s7、节点间验证节点交易数据是否达成共识,若是,则继续执行步骤s8,若否,则转向步骤s1进行新一轮共识,循环进行直至节点间验证节点交易数据达成共识;s8、各节点生成区块并加入区块链中;s9、输出新的完整区块链。所述步骤s1中,具体包括:和其他共识方法有所不同,本发明的基于谣言传播协议的拜占庭容错区块链生成方法的议长节点是由参与共识的所有节点轮流提出,每一个参与共识的节点都被分配一个编号,从0开始,最后一个节点的编号是n-1。共识网络选取节点的方法如下:p=(l-r)modn其中,p是指议长节点的编号,l是指当前共识区块链的长度,r是指当前区块链长度下共识过程的轮数,n是指参与共识的总结点数。每一轮共识都需要一个议长节点,其他节点则为议员节点,当新的区块产生并加入到区块链中时,立即开始新一轮的共识,r也被重置为0。所述步骤s2中,具体包括:谣言传播协议是利用一种随机的方式将信息广播到整个网络中,主要有push-based(基于“推”的谣言传播协议,也可称push-gossip)和pull-based(基于“拉”的谣言传播协议,也可称pull-gossip)两种。push-gossip:1)网络中某个主节点随机的选择任意个相邻节点作为传输对象;2)该节点向其选中的节点传输相应的信息;3)接收到信息的被动节点重复完成相同的工作。pull-gossip:1)某个主节点随机的选择任意相邻节点询问有没有最新的信息;2)收到请求的被动节点回复主节点其最近收到的信息的情况。为了提高谣言传播协议的性能,还有基于push-pull的混合协议,例如,对于两个节点(a,b),如:push-pull(a,b):是a询问b有没有数据更新,有的话,b将数据推给a,a自我更新,a再将更新的数据推给b,b自我更新。所述步骤s3中,具体包括:议员节点对议长广播的提案的验证包含以下几点:1)提案的内容是否满足系统的规则,如果满足,则认为合法,;2)提案中的交易是否存在于区块链中,如果不存在,则认为合法;3)提案中的交易是否存在双重支付,如果不存在,则认为合法;4)提案中的交易的所有合约脚本是否都正确执行,如果是,则认为合法;5)如果满足以上4点合法判定,则认为提案是正确,并接受提案。所述步骤s4中,具体包括:步骤s4中的本地数据ld就是节点自身含有的数据属性值。所述步骤s5中,具体包括:全局数据gd是由n个节点的ld值组成的一维向量,计算gd向量按照以下定义;定义1:设向量gdi和gdj分别是节点i和节点j的全局数据。若gdi[x]≠gdj[x]且置gdi[x]=gdj[x],即gdi中的第x个元素得到更新;若gdj[x]≠gdi[x]且置gdj[x]=gdi[x],即gdj中的第x个元素得到更新。所述步骤s6中,具体包括:定义2:共识数据cd是指节点的gd向量中超过一半的一致元素,cd为最终的一致值。计算cd的方法按照谣言传播协议的种类可分为主动传播和被动传播。其中,主动传播的方法为:步骤s61、计算节点自身的ld,赋值给gd向量中对应的元素;步骤s62、若传播方式为push-gossip,则将自身gd向量推送给目标节点;若传播方式为pull-gossip,则接收目标节点发送的gd向量,根据定义1更新自身gd向量;步骤s63、重复步骤2,直至gd向量中无空值;步骤s64、根据定义2计算共识数据cd;步骤s65、输出共识数据cd,结束。被动传播的方法为:步骤p61、计算节点自身的ld,赋值给gd向量中对应的元素;步骤p62、节点考察自身是否被选作目标节点。若被选为目标节点,且传播方式为pull-gossip,则将自身gd向量推送给对方;若传播方式为push-gossip,则接收对方发送的gd向量,根据定义1更新自身gd向量;步骤p63、重复步骤2,直至通信结束;步骤p64、根据定义2计算共识数据cd;步骤p65、输出共识数据cd,结束。所述步骤s7中,具体包括:节点间验证拥有共识数据cd的节点是否占节点总数的一半以上,如果否,那么进入新一轮的共识,重新选择议长节点进行提案;如果是,则生成区块并加入到区块链中。所述步骤s9中,具体包括:输出的区块链可以看做是大帐本,而每个区块相当于账本中的一页,主要记载了区块头、交易详情、时间戳、随机数、难度目标、交易计数器和区块大小等数据。区块头是每个数据块的前80个字节,主要包括上一区块头哈希值,用于保证区块按顺序串联;时间戳,记录该区块的生成时间;随机数,即全网旷工一起pk的算术题答案;难度目标,该算术题的难度系数打分;交易详情,详细的记录了每笔交易的转出方、收入方、金额及转出方的数字签名,是每个区块内的主要内容;交易计数器,表述每个区块中包含交易的数量;区块大小,表示每个区块数据的大小,当前每个区块限定在1mb以内,不排除以后有扩大的可能。下面用一个实例来阐述本发明所述的方法:假设共识网络中有a、b、c、d、e五个节点,每个节点有2个邻节点,其中节点c和节点e是拜占庭节点,节点a、节点b和节点d为正确节点,节点关系满足n≥2b+1,n为总结点数,b为拜占庭节点数。假设当前区块链长度为2,正确节点计算的ld为s,根据p=(l-r)modn,第一轮应由a节点充当议长节点并广播提案。系统初始值如表1。表1算法实例系统初始值nodeadjacentnodeldbftab、dsnobc、esnoca、eanyyesdb、esnoea、banyyesnode表示节点,adjacentnode表示相邻节点,ld表示本地数据,bft表示是否为拜占庭节点(错误节点)。节点间利用谣言传播协议的push-pull方式进行通信,第一轮通信结果如表2,序号1表示议长节点a将相邻节点b选作目标节点,互相将自己的gd向量发送给对方,得到一致结果[s,s,-,-,-],并更新自己的gd向量。序号2至序号5也类似。需要注意的是节点c和节点e为拜占庭节点,自身的ld可以为任意值。表2第一轮通信结果number表示序号,node表示节点,initialgd表示初始全局数据,outputgd节点间通信完之后输出的全局数据。第一轮通信完成后,由于节点的gd向量有空值,因此进行第二轮的通信,结果如表3所示。表3中,序号1表示在通信完成后,节点a和节点d可以判断节点c和节点e为拜占庭节点;序号2和序号5表示在通信完成后,节点b可以判断节点e为拜占庭节点;序号4表示在通信完成后,节点d可以判断节点e为拜占庭节点。该实例说明,通过两轮通信,所有节点的gd向量都不含空值,并且gd向量中有超过一半的一致元素s,同时正确节点可以识别出拜占庭节点。也就是说,在系统拜占庭节点小于总数一半的情况下,正确节点可以对提案达成共识,实现了拜占庭容错的目的。表3第二轮通信结果尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1