一种区块链节点共识方法、装置、电子设备及存储介质与流程

文档序号:21886098发布日期:2020-08-18 17:17阅读:127来源:国知局
一种区块链节点共识方法、装置、电子设备及存储介质与流程

本发明涉及计算机技术领域,具体涉及一种区块链节点共识方法、装置、电子设备及存储介质。



背景技术:

区块链技术被认为是继蒸汽机、电力、互联网之后的颠覆性创新。如果说蒸汽机和电力解放了生产力,互联网改变了信息传递的方式,那么区块链作为构造信任的机器,将可能改变价值传递方式。

区块链从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任“基础,创造了可靠的“合作”机制,具有广阔的运用前景。从科技层面来看,区块链涉及数学、密码学、互联网和计算机编程等很多科学技术问题。从应用视角来看,简单来说,区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。而区块链丰富的应用场景,基本上都基于区块链能够解决信息不对称问题,实现多个主体之间的协作信任与一致行动。

对于区块链各节点来说,保持各节点数据一致性是非常重要的。raft协议是为了使服务器节点数据保持一致性的一种共识算法,raft协议主要使用了两种策略。一是将在raft体系中,有一个强leader,由它全权负责接收客户端的请求命令,并将命令作为日志条目赋值给其他服务器,在确认安全的时候,将日志命令提交执行。二是当leader故障时,会选举产生一个新的leader。在强leader的帮助下,raft将一致性问题分解为了三个子问题:

1、leader选举:当已有的leader故障时必须选出一个新的leader。

2、日志复制:leader接受来自客户端的命令,记录为日志,并复制给集群中的其他服务器,并强制其他节点的日志与leader保持一致。

3、安全safety措施:通过一些措施确保系统的安全性,如确保所有状态机按照相同顺序执行相同命令的措施。

在传统的raft算法中,节点一种有三种状态:leader(领导)、candidate(候选人)、follower(群众)。节点都是从群众状态开始的,如果收到了来自领导的心跳信息,那它就保持群众状态,避免争抢成为候选人。领导会发送心跳信号来确立自己的地位,如果群众一段时间没有收到心跳,它就会认为领导不在了,发起新的一轮选举。

在选举leader节点过程中,算法必须要解决的一个问题是:需要防止数据不完整、不准确的节点当选为新的领导节点。然而,目前的raft算法并不能够很好地解决这个问题。例如,目前的raft算法在选举leader节点过程中,无法保证选取出的新的领导节点是网络中数据完备无偏差的节点。



技术实现要素:

由于现有方法存在上述问题,本发明实施例提出一种区块链节点共识方法、装置、电子设备及存储介质。

第一方面,本发明实施例提供了一种区块链节点共识方法,包括:

为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定;

根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。

进一步地,所述为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定,具体包括:

在区块链底层为每个区块建立区块数据结构,所述区块数据结构包括:区块编号、数据值、前一区块编号、区块校验值和时间戳;其中,区块编号从统一的创世区块开始,创世编号为0,后面出现的区块编号顺序增加;数据值为外界传入的具体数据;前一区块编号为前一个区块的编号,与本区块编号相差整数1,时间戳为领导节点存储区块的具体时间;所述区块校验值的计算方式为:将前一区块的所有值进行序列化,得到前一区块序列化值,将前一区块序列化值叠加本区块的数据值,得到原始数值,应用国密sm3哈希散列加密算法,对所述原始数值进行哈希计算,得到本区块的区块校验值。

进一步地,所述根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性,具体包括:

在预设时间内未收到领导节点的心跳时,各群众节点将自身节点转换成候选节点,并向除自身节点以外的其他各节点发送投票请求;所述投票请求中包括:本节点最大区块编号和最大区块编号对应的区块校验值;其中,所述最大区块编号的具体确定方法为:自身节点根据区块校验值就是前一个区块所有值加本区块数据值,然后取哈希这一逻辑,对自身区块链做自检,在不能满足这个条件时,则自身节点的最大区块编号为首次不能满足的区块编号减去1;

其他各节点在接收到投票请求后,判断是否满足下述条件,并在确定满足下述条件后为候选节点投票:条件1:候选节点的最大区块编号不低于最近收到的来源于领导节点的最大区块编号和自身的最大区块编号;条件2:候选节点的最大区块编号对应的区块校验值和最近收到的来源于领导节点的最大区块编号对应的区块校验值以及自己节点的最大区块编号对应的区块校验值一致;条件3:选举节点也处于心跳超时状态;

在确定候选节点收到的投票数量满足预设条件后,将候选节点转变成领导节点,并在成为领导节点的第一时间向除自身节点以外的其他节点发送心跳,所述其他节点在收到心跳后,第一时间把自身节点设置成为群众节点,并开始新一轮的心跳计时。

进一步地,所述区块链节点共识方法,还包括:

当任何一个节点在收到上链数据请求时,把所述上链数据请求转发给当前时刻的领导节点,由领导节点首先在本节点增加数据。

进一步地,所述区块链节点共识方法,还包括:

各群众节点在收到领导节点心跳时,把本节点最大区块编号对应的区块校验值发送给领导节点,领导节点根据各群众节点最大区块编号对应的区块校验值检查各群众节点是否与领导节点完整一致,若否,则将需要增加的节点数据发送给相应的群众节点,以保持整个系统数据的一致性。

进一步地,所述区块链节点共识方法,还包括:

为每一个节点设置客户端,客户端具备http调用接口,用于接受外来请求和回复请求;其中,http调用接口包括以下几种:

一般存证:客户端接到明文存证请求后,查询此刻领导节点网络地址,转发给领导节点,领导节点统一编号,计算区块校验值,把数据保存到区块链,然后通过心跳机制,在整个节点网络中传播;

密文存证:客户端接收到密文存证请求后,调用本地秘钥,对数据加密,然后接入所述一般存证的处理过程中;

哈希存证:客户端接收到哈希存证请求后,调用国密sm3算法,对数据取哈希,然后接入所述一般存证的处理过程中;

签名存证:客户端接收到签名存证请求后,调用本地国密sm2秘钥,对数据签名,然后把数据、签名、公钥值接入所述一般存证的处理过程中。

进一步地,所述区块链节点共识方法采用rust语言进行代码实现。

第二方面,本发明实施例提供了一种区块链节点共识装置,包括:

设置模块,用于为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定;

处理模块,用于根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。

第三方面,本发明实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的区块链节点共识方法。

第四方面,本发明实施例提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述的区块链节点共识方法。

由上述技术方案可知,本发明实施例提供的区块链节点共识方法、装置、电子设备及存储介质,根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。需要说明的是,本发明实施例针对区块链数据结构特点,为每个区块均设置一个区块校验值,由前一个区块全部内容合并本区块值,然后再做哈希形成,如此相互衔接,因此,只要根据各节点最大区块编号和最大区块编号对应的区块校验值即可确定出网络中数据完备无偏差的区块链领导节点,此外,类似地,由于区块校验值由前一个区块全部内容合并本区块值,然后再做哈希形成,如此相互衔接,因此只要核对区块链最高位的区块校验值以及最大区块编号一致,就可以保证整个区块链数据的一致性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。

图1是本发明一实施例提供的区块链节点共识方法的流程图;

图2是本发明一实施例提供的区块链节点共识装置的结构示意图;

图3是本发明一实施例提供的电子设备的结构示意图。

具体实施方式

下面结合附图,对本发明的具体实施方式作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

对于区块链各节点来说,保持各节点数据一致性是非常重要的。raft协议是为了使服务器节点数据保持一致性的一种共识算法,raft协议主要使用了两种策略。一是将在raft体系中,有一个强leader,由它全权负责接收客户端的请求命令,并将命令作为日志条目赋值给其他服务器,在确认安全的时候,将日志命令提交执行。二是当leader故障时,会选举产生一个新的leader。在强leader的帮助下,raft将一致性问题分解为了三个子问题:

1、leader选举:当已有的leader故障时必须选出一个新的leader。

2、日志复制:leader接受来自客户端的命令,记录为日志,并复制给集群中的其他服务器,并强制其他节点的日志与leader保持一致。

3、安全safety措施:通过一些措施确保系统的安全性,如确保所有状态机按照相同顺序执行相同命令的措施。

在raft算法中,节点一种有三种状态:leader(领导)、candidate(候选人)、follower(群众)。节点都是从群众状态开始的,如果收到了来自领导的心跳信息,那它就保持群众状态,避免争抢成为候选人。领导会发送心跳信号来确立自己的地位,如果群众一段时间没有收到心跳,它就会认为领导不在了,发起新的一轮选举。

在选举leader节点过程中,算法必须要解决的一个问题是:需要防止数据不完整、不准确的节点当选为新的领导节点。然而,目前的raft算法并不能够很好地解决这个问题。例如,目前的raft算法在选举leader节点过程中,无法保证选取出的新的领导节点是网络中数据完备无偏差的节点。举例来说,目前的raft算法在选举leader节点过程中,有时候通过比较时间戳的方法来选举leader节点。例如,如果一个节点最后一个区块的时间戳更晚,说明他的区块更完整,但是这种方法无法校验内容准确。为校验内容的准确性,也有一部分方案在时间戳的基础上增加了校验值,比如比特币就把前一个区块的内容做哈希放在后一个区块中,如此首尾相连接,但是这种方式依然无法保证选取出的新的领导节点是网络中数据完备无偏差的节点,原因是:对于这种方式来说,当中间某些区块数据丢失,也即中间的链条中断时(例如对于12345678910这个区块链条来说,当中间丢失区块2和3时,最后得到的区块链条是145678910),这种情况并不会影响领导节点的选取,因此在这种情况下会出现将数据不完整、不准确的节点当选为新的领导节点的现象。

针对现有技术中存在的问题,本实施例提供了一种区块链节点共识方法,本实施例的创新之处在于,在区块链底层为每个区块建立了新的区块数据结构,同时借助国密sm3技术手段,补充细化了投票请求的内容、赞同的条件,以保证选举出来的领导节点是网络中数据完备无偏差的节点之一。下面将通过具体实施例对本发明提供的区块链节点共识方法进行详细说明。

图1示出了本发明一实施例提供的区块链节点共识方法的流程图,如图1所示,本发明实施例提供的区块链节点共识方法,应用于服务器,具体包括如下内容:

步骤101:为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定;

步骤102:根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。

在本实施例中,需要说明的是,本实施例提供了一种基于raft协议和国密sm3的区块链节点共识工作方法,针对区块链数据结构特点,创世区块编号为0,以后的区块顺序增加,形成连续不间断的整数序列,同时每个区块均保留一个区块校验值,由前一个区块全部内容合并本区块值,然后再通过国密sm3哈希加密形成,如此相互衔接,只要核对区块链最高位的核对值和最大区块编号一致,就可以保证整个区块链数据一致。基于此,当领导节点心跳超时,发起选举的节点,将自己的最大区块编号(称之为区块编号)和最大区块校验值发送给其他节点,其他节点在本节点编号不高于接收的区块编号,本节点最大区块编号对应的区块校验值和接收的区块校验值一致的情况下,投赞成票,进而选举出领导节点。其他节点在收到领导节点心跳时,也需要把本节点最大区块编号对应的区块校验值发送给领导节点,领导节点据此可以测算数据是否一致。当节点的区块不能满足首尾相接的要求时,本节点区块链最大编号自动降低到能够满足的节点处。

由上述技术方案可知,本发明实施例提供的区块链节点共识方法,根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。需要说明的是,本发明实施例针对区块链数据结构特点,为每个区块均设置一个区块校验值,该区块校验值由前一个区块全部内容合并本区块值,然后再做哈希形成,也即由前一个区块全部内容合并本区块值后做哈希计算得到本区块的区块校验值,如此累加衔接,使得各节点最大区块编号对应的区块校验值就能够代表整个区块链条的整体信息,因此,只要根据各节点最大区块编号和最大区块编号对应的区块校验值即可确定出网络中数据完备无偏差的区块链领导节点,例如,选举节点当且仅当以下条件全部满足,方可投赞成票:条件1:候选节点的最大区块编号不低于最近收到的来源于领导节点的最大区块编号和自身的最大区块编号;条件2:候选节点的最大区块编号对应的区块校验值和最近收到的来源于领导节点的最大区块编号对应的区块校验值以及自己节点的最大区块编号对应的区块校验值一致;条件3:选举节点也处于心跳超时状态。此外,类似地,由于每个区块校验值由前一个区块全部内容合并本区块值,然后再做哈希形成,如此相互衔接,因此只要核对区块链最高位的区块校验值以及最大区块编号一致,就可以保证整个区块链数据的一致性。

基于上述实施例的内容,在本实施例中,所述为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定,具体包括:在区块链底层为每个区块建立区块数据结构,所述区块数据结构包括:区块编号、数据值、前一区块编号、区块校验值和时间戳;其中,区块编号从统一的创世区块开始,创世编号为0,后面出现的区块编号顺序增加;数据值为外界传入的具体数据;前一区块编号为前一个区块的编号,与本区块编号相差整数1,时间戳为领导节点存储区块的具体时间;所述区块校验值的计算方式为:将前一区块的所有值进行序列化,得到前一区块序列化值,将前一区块序列化值叠加本区块的数据值,得到原始数值,应用国密sm3哈希散列加密算法,对所述原始数值进行哈希计算,得到本区块的区块校验值。

相应地,所述根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性,具体包括:

在预设时间内未收到领导节点的心跳时,各群众节点将自身节点转换成候选节点,并向除自身节点以外的其他各节点发送投票请求;所述投票请求中包括:本节点最大区块编号和最大区块编号对应的区块校验值;其中,所述最大区块编号的具体确定方法为:自身节点根据区块校验值就是前一个区块所有值加本区块数据值,然后取哈希这一逻辑,对自身区块链做自检,在不能满足这个条件时,则自身节点的最大区块编号为首次不能满足的区块编号减去1;

其他各节点在接收到投票请求后,判断是否满足下述条件,并在确定满足下述条件后为候选节点投票:条件1:候选节点的最大区块编号不低于最近收到的来源于领导节点的最大区块编号和自身的最大区块编号;条件2:候选节点的最大区块编号对应的区块校验值和最近收到的来源于领导节点的最大区块编号对应的区块校验值以及自己节点的最大区块编号对应的区块校验值一致;条件3:选举节点也处于心跳超时状态;

在确定候选节点收到的投票数量满足预设条件后,将候选节点转变成领导节点,并在成为领导节点的第一时间向除自身节点以外的其他节点发送心跳,所述其他节点在收到心跳后,第一时间把自身节点设置成为群众节点,并开始新一轮的心跳计时。

在本实施例中,结合区块链底层存储和国密sm3技术,对leader选举细节的完善和优化。

需要说明的是,国密即国家密码局认定的国产密码算法,能够实现商用密码算法的加密、解密和认证等功能的技术。主要有sm1,sm2,sm3,sm4。sm1为对称加密,sm2为非对称加密,sm3消息摘要加密,sm4无线局域网标准的分组数据算法。本实施例使用sm3摘要加密,又称为哈希加密、散列加密。摘要的目的是为了校验信息的完整性,保证信息在传输过程中不被篡改。输入相同时,输出一致;输入不同时,输出不同。同时,输出结果长度固定。通过输出,不能计算出输入对输入的任何细微修改,都会导致完全不同的输出。

raft协议是为了使服务器节点数据保持一致性的一种共识算法,raft协议主要使用了两种策略。一是将在raft体系中,有一个强leader,由它全权负责接收客户端的请求命令,并将命令作为日志条目赋值给其他服务器,在确认安全的时候,将日志命令提交执行。二是当leader故障时,会选举产生一个新的leader。在强leader的帮助下,raft将一致性问题分解为了三个子问题:

1leader选举:当已有的leader故障时必须选出一个新的leader。

2日志复制:leader接受来自客户端的命令,记录为日志,并复制给集群中的其他服务器,并强制其他节点的日志与leader保持一致。

3安全safety措施:通过一些措施确保系统的安全性,如确保所有状态机按照相同顺序执行相同命令的措施。

在传统的raft协议中,节点一种有三种状态:leader(领导)、candidate(候选人)、follower(群众)。节点都是从群众状态开始的,如果收到了来自领导的心跳信息,那它就保持群众状态,避免争抢成为候选人。领导会发送心跳信号来确立自己的地位,如果群众一段时间没有收到心跳,它就会认为领导不在了,发起新的一轮选举。

选举发起后,节点会把自己的角色转变成候选节点,它会首先投自己一票,然后向其他所有节点并行发起投票请求,本实施例的创新之处在于,结合区块链的数据结构特点,借助国密sm3技术手段,补充细化了投票请求的内容、赞同的条件,保证选举出来的领导节点是网络中数据完备无偏差的节点之一。具体做法如下:

a、在区块链底层建立区块数据结构,代码实例用rust语言编写。每一个区块都必须具备编号(id)、数据值(value)、pre_id(前一个区块编号)、pre_hash(块校验值)和时间戳(timestamp)。其中:区块链编号必须从统一的创世区块开始,创世编号0,以后的每一个区块编号顺序增加。数据值是外界希望传入的具体数据。前一个区块编号为前一个区块的id,和本区块id相差整数1,时间戳为领导节点存储区块的具体时间。

本区块的区块校验值分为如下步骤计算:

step1把前一个区块序列化成json数据格式;

step2原始数值=前一个区块序列化值(step1)+本区块数据值(value)

step3应用国密sm3哈希散列加密算法,对step2的结果取哈希,即为本区块的区块校验值(pre)。

b、为每个节点设置等待时间,如果在此时间内收到来源于领导的心跳,则保持等待,如果超时则发起选举。发起选举时刻,首先把本节点存储的领导节点id或者网络地址置空,把本节点的角色从群众改成候选人,必须把本节点最大编号区块序列化后发送给选举节点。最大编号区块的具体确定方法是:节点根据校验值就是前一个区块所有值加本区块数据值,然后取哈希这一规律,对自身区块链做自检,在不能满足这个条件时,则本节点的区块链最大编号为首次不能满足区块的编号减去1。也即当节点的区块不能满足首尾相接的要求时,本节点区块链最大编号自动降低到能够满足的节点处。

c、选举节点当且仅当以下条件全部满足,方可投赞成票:

条件1:候选节点的最大区块编号不低于最近收到的来源于领导节点的最大区块编号和自身的最大区块编号;

条件2:候选节点的最大区块编号对应的区块校验值和最近收到的来源于领导节点的最大区块编号对应的区块校验值以及自己节点的最大区块编号对应的区块校验值一致;

条件3:选举节点也处于心跳超时状态。

d、计算投票,举例来说,如果候选节点收到了过半数的选票,将会从候选角色转变成领导角色,必须在成为领导角色的第一时间发送心跳确立自己的地位,其他节点在收到心跳后,第一时间把自身角色设置成为群众,并开始新一轮的心跳计时。

e、当任何一个节点在收到上链数据请求时,应当首先把该请求转发给此时刻的领导节点,由领导节点首先在本节点增加数据。

f、群众节点在收到领导节点心跳后,需要把本节点最大区块序列化发送给领导节点,领导节点根据来源于群众节点的最大区块,检查群众节点是否和领导节点完整一致,如果不能完整一致,需要发送增加节点数据的命令,把需要增加的节点数据发送给相应的群众节点,从而保持整个系统数据一致。

基于本实施例提供的区块链结构,在具体应用时,需要为每一个节点设置客户端,客户端具备http接口,接受外来请求以及回复相应的请求。本实施例目前具备以下5种基本调用接口:

一般存证:客户端接到明文存证请求后,查询此刻领导节点网络地址,转发给领导节点,领导节点统一编号,计算校验值,把数据保存到区块链,然后通过心跳机制,在整个节点网络中迅速传播。

密文存证:客户端接收到密文存证请求后,调用本地秘钥,对数据加密,然后接入一般存证描述的过程中。

哈希存证:客户端接收到哈希存证请求后,调用国密sm3算法,对数据取哈希,然后接入一般存证描述的过程中。

签名存证:客户端接收到签名存证请求后,调用本地国密sm2秘钥,对数据签名,然后把数据、签名、公钥值接入一般存证描述的过程中。

智能合约存证:客户端接收到智能合约存证请求后,调用本地和对应节点的智能合约计算结果,然后把计算结果接入到一般存证的过程中。

在本实施例中,需要说明的是,本实施例使得数据一致性得到充分保障,本实施例在强化“leader”同步日志和选举算法的同时,针对区块链数据结构特点,为每个区块均保留一个区块校验值,由前一个区块全部内容合并本区块值,然后再做哈希形成,如此相互衔接,只要核对区块链最高位的数值一致,就可以保证整个区块一致。此外,本实施例很好地兼顾了内存安全和速度,全部系统采用rust开发,在编译阶段就解决了内存泄漏、悬空指针等运行时可能存在的问题。rust强调并秉持零开销抽象的理念,在提供诸多高级语言特性的同时,没有引入额外的开销,性能可以媲美c++。

综合本实施例的描述,需要说明的是,本发明的主要改进点在于:结合区块链底层存储和国密sm3技术,对leader选举细节的完善和优化,保证选举出来的领导节点是网络中数据完备无偏差的节点之一,进而在此基础上,也同时保证了整个区块链数据的一致性。

由此可见,本发明提供了一种基于raft协议和国密sm3的区块链节点共识工作方法,针对区块链数据结构特点,创世区块编号为0,以后的区块顺序增加,形成连续不间断的整数序列,同时每个区块均保留一个区块校验值,由前一个区块全部内容合并本区块值,然后再通过国密sm3哈希加密形成,如此相互衔接,只要核对区块链最高位的区块校验值和最大区块编号一致,就可以保证整个区块链数据一致。基于此,当领导节点心跳超时,发起选举的节点,将自己的最大区块编号(称之为区块高度)和最大区块编号对应的区块校验值发送给其他节点,其他节点必须在本节点编号不高于接收的区块高度,本节点最大区块编号对应的区块校验值和接收的区块校验值一致的情况下,才可以投赞成票。其他节点在收到领导节点心跳时,也需要把本节点最大区块编号对应的区块校验值发送给领导节点,领导节点据此可以测算数据是否一致。当节点的区块不能满足首尾相接的要求时,本节点区块链最大编号自动降低到能够满足的节点处。

图2示出了本发明一实施例提供的区块链节点共识装置的结构示意图,如图2所示,本发明实施例提供的区块链节点共识装置,包括:设置模块21和处理模块22,其中:

设置模块21,用于为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定;

处理模块22,用于根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。

由于本实施例提供的区块链节点共识装置可以用于执行上述实施例提供的区块链节点共识方法,其工作原理和有益效果类似,此处不再详述。

基于相同的发明构思,本发明又一实施例提供了一种电子设备,参见图3,所述电子设备具体包括如下内容:处理器301、存储器302、通信接口303和通信总线304;

其中,所述处理器301、存储器302、通信接口303通过所述通信总线304完成相互间的通信;所述通信接口303用于实现各设备之间的信息传输;

所述处理器301用于调用所述存储器302中的计算机程序,所述处理器执行所述计算机程序时实现上述区块链节点共识方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定;根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。

基于相同的发明构思,本发明又一实施例提供了一种非暂态计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述区块链节点共识方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:为每个区块增加区块校验值,所述区块校验值由前一个区块的全部内容合并当前区块的数据并进行哈希计算后确定;根据各节点最大区块编号和最大区块编号对应的区块校验值确定区块链的领导节点,以及,根据各节点最大区块编号对应的区块校验值检查各节点数据的一致性。

此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的区块链节点共识方法。

此外,在本发明中,诸如“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

此外,在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

此外,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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