CN110708171B - 区块链共识投票方法、装置、设备以及存储介质 - Google Patents
区块链共识投票方法、装置、设备以及存储介质 Download PDFInfo
- Publication number
- CN110708171B CN110708171B CN201911284399.XA CN201911284399A CN110708171B CN 110708171 B CN110708171 B CN 110708171B CN 201911284399 A CN201911284399 A CN 201911284399A CN 110708171 B CN110708171 B CN 110708171B
- Authority
- CN
- China
- Prior art keywords
- block
- identified
- consensus
- target
- block chain
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Abstract
本申请实施例提供了一种区块链共识投票方法、装置、设备以及存储介质,该方法包括:获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;若第一待共识区块通过本地验证,且第一待共识区块为待共识缓存区的目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块的哈希值,与待上链数据生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区;将第二待共识区块在区块链网络中进行广播;对每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。采用本申请实施例,可以提高区块链的共识效率。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种区块链共识投票方法、装置、设备以及存储介质。
背景技术
区块链是一种去中心化的分布式账本系统,具有数据不可篡改、去中心化、开放性的特点。共识机制作为区块链技术中的核心,可以保证最新区块被准确添加至区块链,以及节点存储的区块链信息一致不分叉甚至可以抵御恶意攻击。
现有的共识过程中,区块链网络中的共识节点通过对生成的新区块进行轮询验证,且每个共识节点在完成对新区块的验证后,均需要将验证结果广播给区块链网络中的其他共识节点,进而可以基于每个共识节点的验证结果确定新区块是否有效。然而,当区块链网络中存在较多共识节点时,每个共识节点对验证结果进行广播均需要发起多条消息,进而导致新区块的共识效率过低。
发明内容
本申请实施例提供一种区块链共识投票方法、装置、设备以及存储介质,可以提高区块链的共识效率。
本申请实施例一方面提供了一种区块链共识投票方法,应用于共识节点,包括:
获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;待共识缓存区包括目标待共识区块链,目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
若至少一个待共识区块中的第一待共识区块通过本地验证,且第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区;
将第二待共识区块在区块链网络中进行广播,以使区块链网络中除生成第二待共识区块的共识节点之外的其余共识节点,将第二待共识区块分别缓存至所属的缓存区;
对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
其中,该方法还包括:
若目标待共识区块链中存在未通过本地验证的待共识区块,且第一待共识区块为目标待共识区块链中通过本地验证的待共识区块中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块;
将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链,将新的待共识区块链和目标待共识区块链确定为更新后的待共识缓存区。
其中,上述根据待上链数据和哈希值生成第二待共识区块,包括:
获取待上链数据所携带的数字签名,获取提交节点对应的公钥;
基于公钥对数字签名进行解密,得到数字签名对应的第一摘要信息;
基于哈希算法对待上链数据进行哈希运算,得到待上链数据对应的第二摘要信息;
若第一摘要信息与第二摘要信息相同,则待上链数据验签通过,基于验签通过的待上链数据生成区块体;
根据哈希值生成区块头,根据区块头和区块体生成第二待共识区块。
其中,上述对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,包括:
获取更新后的待共识缓存区中所包含的待共识区块的数量,确定更新后的待共识缓存区中每个待共识区块分别对应的共识节点,并获取与共识节点相匹配的投票权值;
基于更新后的待共识缓存区中所包含的待共识区块的数量和投票权值,对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新;
将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,将处于共识通过状态的待共识区块添加至目标区块链;目标区块链用于存储通过共识的所有待共识区块。
其中,上述将处于共识通过状态的待共识区块添加至目标区块链,包括:
获取处于共识通过状态的待共识区块对应的当前区块高度;
若当前区块高度与目标区块链中的最高区块对应的区块高度之间为相邻高度关系,则将处于共识通过状态的待共识区块添加至目标区块链;
若当前区块高度与目标区块链中的最高区块对应的区块高度之间为非相邻高度关系,则对处于共识通过状态的待共识区块进行区块高度更新,将更新后的处于共识通过状态的待共识区块添加至目标区块链。
其中,上述待共识缓存区包括多个待共识区块链,多个待共识区块链包括目标待共识区块链;
上述对待共识缓存区所存储的待共识区块进行本地验证,包括:
从待共识缓存区中获取多个待共识区块链,获取多个待共识区块链分别对应的初始区块数量;
基于初始区块数量对多个待共识区块链进行排序,基于每个待共识区块链的排序顺序,依次对每个待共识区块链所包含的待共识区块进行本地验证。
其中,上述若至少一个待共识区块中的第一待共识区块通过本地验证,且第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区,包括:
若多个待共识区块链中存在待共识区块均通过本地验证的目标待共识区块链,则将目标待共识区块链中具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,将更新后的目标待共识区块链与剩余待共识区块链确定为更新后的待共识缓存区;剩余待共识区块链为待共识缓存区中除目标待共识区块链之外的待共识区块链。
其中,该方法还包括:
若多个待共识区块链中均存在未通过本地验证的待共识区块,则分别统计每个待共识区块链中通过本地验证的待共识区块的目标数量,将具有最大的目标数量的待共识区块链确定为目标待共识区块链;
从目标待共识区块链所包含的通过本地验证的待共识区块中,获取具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
根据待上链数据和哈希值生成第二待共识区块,将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链;
将新的待共识区块链和多个待共识区块链确定为更新后的待共识缓存区。
其中,上述对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,包括:
从更新后的待共识缓存区中,获取更新后的目标待共识区块链和剩余待共识区块链分别对应的区块数量,并分别统计每个待共识区块在更新后的目标待共识区块链和剩余待共识区块链中的出现频次;
基于区块数量与出现频次,重新统计更新后的待共识缓存区中每个待共识区块分别对应的共识投票值。
本申请实施例一方面提供了一种区块链共识投票装置,应用于共识节点,包括:
验证模块,用于获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;待共识缓存区包括目标待共识区块链,目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
第一区块生成模块,用于若至少一个待共识区块中的第一待共识区块通过本地验证,且第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区;
区块广播模块,用于将第二待共识区块在区块链网络中进行广播,以使区块链网络中除生成第二待共识区块的共识节点之外的其余共识节点,将第二待共识区块分别缓存至所属的缓存区;
投票值统计模块,用于对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
其中,该装置还包括:
第二区块生成模块,用于若目标待共识区块链中存在未通过本地验证的待共识区块,且第一待共识区块为目标待共识区块链中通过本地验证的待共识区块中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块;
第一区块链构建模块,用于将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链,将新的待共识区块链和目标待共识区块链确定为更新后的待共识缓存区。
其中,第一区块生成模块具体用于:
获取待上链数据所携带的数字签名,获取提交节点对应的公钥;
基于公钥对数字签名进行解密,得到数字签名对应的第一摘要信息;
基于哈希算法对待上链数据进行哈希运算,得到待上链数据对应的第二摘要信息;
若第一摘要信息与第二摘要信息相同,则待上链数据验签通过,基于验签通过的待上链数据生成区块体;
根据哈希值生成区块头,根据区块头和区块体生成第二待共识区块。
其中,投票值统计模块包括:
投票权值获取单元,用于获取更新后的待共识缓存区中所包含的待共识区块的数量,确定更新后的待共识缓存区中每个待共识区块分别对应的共识节点,并获取与共识节点相匹配的投票权值;
第一投票值更新单元,用于基于更新后的待共识缓存区中所包含的待共识区块的数量和投票权值,对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新;
共识状态确定单元,用于将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,将处于共识通过状态的待共识区块添加至目标区块链;目标区块链用于存储通过共识的所有待共识区块。
其中,共识状态确定单元包括:
高度获取子单元,用于获取处于共识通过状态的待共识区块对应的当前区块高度;
高度关系确定子单元,用于若当前区块高度与目标区块链中的最高区块对应的区块高度之间为相邻高度关系,则将处于共识通过状态的待共识区块添加至目标区块链;
上述高度关系确定子单元,还用于若当前区块高度与目标区块链中的最高区块对应的区块高度之间为非相邻高度关系,则对处于共识通过状态的待共识区块进行区块高度更新,将更新后的处于共识通过状态的待共识区块添加至目标区块链。
其中,待共识缓存区包括多个待共识区块链,多个待共识区块链包括目标待共识区块链;
验证模块包括:
数量获取单元,用于从待共识缓存区中获取多个待共识区块链,获取多个待共识区块链分别对应的初始区块数量;
排序单元,用于基于初始区块数量对多个待共识区块链进行排序,基于每个待共识区块链的排序顺序,依次对每个待共识区块链所包含的待共识区块进行本地验证。
其中,第一区块生成模块包括:
区块确定单元,用于若多个待共识区块链中存在待共识区块均通过本地验证的目标待共识区块链,则将目标待共识区块链中具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
缓存区更新单元,用于根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,将更新后的目标待共识区块链与剩余待共识区块链确定为更新后的待共识缓存区;剩余待共识区块链为待共识缓存区中除目标待共识区块链之外的待共识区块链。
其中,该装置还包括:
区块链选择模块,用于若多个待共识区块链中均存在未通过本地验证的待共识区块,则分别统计每个待共识区块链中通过本地验证的待共识区块的目标数量,将具有最大的目标数量的待共识区块链确定为目标待共识区块链;
区块选择模块,用于从目标待共识区块链所包含的通过本地验证的待共识区块中,获取具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
第二区块链构建模块,用于根据待上链数据和哈希值生成第二待共识区块,将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链;
更新模块,用于将新的待共识区块链和多个待共识区块链确定为更新后的待共识缓存区。
其中,投票值统计模块包括:
频次统计单元,用于从更新后的待共识缓存区中,获取更新后的目标待共识区块链和剩余待共识区块链分别对应的区块数量,并分别统计每个待共识区块在更新后的目标待共识区块链和剩余待共识区块链中的出现频次;
第二投票值更新单元,用于基于区块数量与出现频次,重新统计更新后的待共识缓存区中每个待共识区块分别对应的共识投票值。
本申请实施例一方面提供了一种节点设备,包括存储器和处理器,该存储器存储有计算机程序,该计算机程序被该处理器执行时,使得该处理器执行本申请实施例中一方面中该方法的步骤。
本申请实施例一方面提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时,执行如本申请实施例中一方面中所述方法的步骤。
在本申请实施例中,共识节点可以在获取到提交节点上传的待上链数据后,对待共识缓存区所存储的待共识区块进行本地验证,待共识缓存区包括目标待共识区块链,若目标区块链中所包含的至少一个待共识区块均通过本地验证,则从目标待共识区块链中获取具有最大区块高度的待共识区域作为第一待共识区块,并获取第一待共识区块对应的哈希值,根据哈希值和待上链数据生成第二待共识区块,并将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区,对更新后的待共识缓存区中的每个待共识区块分别对应的共识投票值进行更新,更新后的共识投票值大于投票阈值的待共识区块即为共识通过状态。可见,对于区块链网络中的每个共识节点,可以将生成的区块广播给区块链网络中的其他共识节点进行缓存,下一个共识节点在接收到待上链数据后,可以对本地缓存的区块进行验证,并基于通过验证的最新缓存区块的哈希值和接收到的待上链数据生成新的区块,即若共识节点可以生成新的区块,则表明该共识节点认为本地缓存的区块都是合法的,基于缓存的区块数量确定区块的共识投票值,可以避免共识节点对区块验证结果进行广播,进而降低广播共识结果的消息条数,从而提高共识效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种网络架构图;
图2是本申请实施例提供的一种区块链共识投票场景示意图;
图3是本申请实施例提供的一种区块链共识投票方法的流程示意图;
图4a和图4b是本申请实施例提供的一种区块链共识投票的示意图;
图5是本申请实施例提供的另一种区块链共识投票方法的流程示意图;
图6是本申请实施例提供的另一种区块链共识投票场景示意图;
图7是本申请实施例提供的一种区块链共识投票装置的结构示意图;
图8是本申请实施例提供的一种节点设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
区块链(Blockchain)是一种分布式数据存储、点对点传输(P2P传输)、共识机制、加密算法等计算机技术的新型应用模式,其本质上是一个去中心化的数据库;区块链可由多个借由密码学串接并保护内容的串连交易记录(又称区块)构成,用区块链所串接的分布式账本能让多方有效记录交易,且可永久查验此交易(不可篡改)。其中,共识机制是指区块链网络中实现不同节点之间建立信任、获取权益的数学算法;换言之,共识机制是区块链各网络节点共同认可的一种数学算法。
请参见图1,是本申请实施例提供的一种网络架构图。如图1所示,该网络架构可以包括多个节点服务器(如图1所示,具体可以包括节点服务器10a、节点服务器10b、节点服务器10c以及节点服务器10d)和终端设备10e。其中,节点服务器10a、节点服务器10b、节点服务器10c以及节点服务器10d均表示为区块链网络中的共识节点,终端设备10e可以是指用户终端,该终端设备10e可以将需要上链的数据(如新产生的交易数据)上传至区块链网络中的一个或多个节点服务器,并向区块链网络请求将上传的数据打包写入区块链中。当终端设备10e向区块链网络上传数据后,区块链网络中的节点服务器10a可以对终端设备10e上传的数据进行验签,验签的主要目的在于检验数据在传输过程中是否被恶意篡改;若检测到终端设备10e上传的数据没有被篡改,则节点服务器10a可以根据终端设备10e上传的数据生成新区块。由于区块链网络中生成的区块均需要进行共识,只有共识通过后的区块才可以添加至区块链,即区块在得到区块链网络中大部分共识节点的一致性投票后(共识节点的具体投票数量与采用的共识算法相关,如区块链网络中超过51%的共识节点投票通过,则表明该新区块共识通过),才能确认该新区块是合法区块,可以添加至区块链。因此,节点服务器10a在生成新区块后,需要将新区块广播给区块链网络中的其余共识节点,如节点服务器10a将新区块广播给节点服务器10b、节点服务器10c以及节点服务器10d,以使各共识节点可以对新区块进行验证。
其中,终端设备10e可以包括手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备(例如智能手表、智能手环等)等。
请一并参见图2,是本申请实施例提供的一种区块链共识投票场景示意图。区块链网络中的共识节点拥有同一个账本(即区块链),该账本中包含多个区块,区块链网络中的每个共识节点均可以读取该账本中记录的所有数据。当然,区块链网络中的每个共识节点还可以基于新产生的数据生成新的区块,当新的区块在所有共识节点中达到一致性投票通过时,可以将新的区块提交到区块链中。下面对新区块的共识过程进行阐述:如图2所示,区块链网络中的共识节点拥有一个由10个区块构成的区块链,区块链中除初始区块之外的每个区块均可以包含前一个区块的哈希值,由此构成区块之间的链式数据结构。当节点服务器10a接收到客户端所上传的新的数据1后,节点服务器10a可以将数据1打包成一个新的区块11,该区块11由区块头和区块体组成,区块头中可以包括区块链中的最高区块(即区块链中的第10个区块)对应的哈希值,区块体主要用于存储所接收到的数据1。节点服务器10a在生成区块11后,可以将区块11广播给区块链网络中的其余共识节点(如图2所示的节点服务器10b和节点服务器10c等),并将区块11存储在节点服务器10a对应的本地缓存区中。
由于节点服务器10a在区块链网络中对区块11进行了广播,因此节点服务器10b和节点服务器10c对应的本地缓存区中均存储有区块11。当节点服务器10b在接收到新的数据2后,节点服务器10b在将数据2打包成区块12之前,还需要对本地缓存区中存储的区块11进行验证,如检测区块11中所存储的数据1是否为有效数据,区块头中所存储的哈希值是否合法等。在区块11通过验证后,节点服务器10b可以获取区块11对应的哈希值,并基于区块11对应的哈希值和数据2生成区块12,同样地,节点服务器10b可以将区块12广播给区块链网络中的其余共识节点(如图2所示的节点服务器10a和节点服务器10c等),并将区块12存储在本地缓存区中。换言之,区块12的区块头中包含区块11对应的哈希值,表明节点服务器10b对区块11的验证结果为:验证通过,即节点服务器10b认可区块11是合理的,此时,在区块链网络中,区块11已经获得了节点服务器10a和节点服务器10b两个节点的认可(区块11由节点服务器10a生成,因此节点服务器10a必定是确认区块11是合法的)。
在节点服务器10b对区块12进行全网广播后,节点服务器10c对应的本地存储区20a中已经存储有节点服务器10a所生成的区块11和节点服务器10b所生成的区块12。若账号为bb的用户1想从账号为aa的用户2处购买游戏币,则用户1可以和用户2达成交易意向。用户2可以通过终端设备10e创建交易数据(即数据3),并将数据3上传至区块链网络中,即将数据3发送至节点服务器10c,数据3中可以包括发起方(即创建数据3的终端设备10e所对应的用户2的账号信息)、接收方(即购买游戏币的用户1的账号信息)以及交易内容(如从aa的账户中转移10个游戏币到bb的账户中),数据3用于指示区块链网络将10个游戏币从用户2的账户转移至用户1的账户。节点服务器10c在将终端设备10e上传的数据3打包成区块13之前,同样需要对本地缓存区20a中存储的区块11和区块12进行验证,例如,数据1和数据2均为交易数据,则节点服务器10c可以分别检测数据1和数据2中发起方与接收方的账号信息是否正确,交易内容是否已经过期(如交易内容过期可以是指该交易内容已经完成上链过程,或者该交易内容已经超过了交易的时间期限等),检测发起方的账户余额是否可以支持当前的交易等。当节点服务器10c检测到区块中的账号信息均正确,且交易内容未过期,且发起方的账户余额充足时,可以得到该区块的验证结果为:验证通过。
对于区块11和区块12,节点服务器10c的验证结果可以包括以下情况:当区块11和区块12均通过验证时,节点服务器10c可以基于区块12对应的哈希值和所接收的数据3生成区块13。换言之,区块13的区块头中包含区块12的哈希值时,表明节点服务器10c认可了区块12和区块11(由于区块12的区块头中包含了区块11对应的哈希值)。此时,区块11已经通过了3个共识节点(即节点服务器10a、节点服务器10b以及节点服务器10c)的认可,投票数为3;区块12通过了2个共识节点(即节点服务器10b和节点服务器10c)的认可,投票数为2;区块13通过了1个共识节点(即节点服务器10c)的认可,投票数为1。
可选的,当区块11通过验证,区块12未通过验证时,节点服务器10c可以基于区块11对应的哈希值和所接收的数据3生成区块13。换言之,区块13的区块头中包含区块11的哈希值时,表明节点服务器10c仅认可了区块11。此时,区块11已经通过了3个共识节点(即节点服务器10a、节点服务器10b以及节点服务器10c)的认可,投票数为3;区块12通过了1个共识节点(即节点服务器10b)的认可,投票数为1;区块13通过了1个共识节点(即节点服务器10c)的认可,投票数为1。
可选的,当区块11和区块12均未通过验证时,节点服务器10c可以基于区块10对应的哈希值和所接收的数据3生成区块13。此时,区块11已经通过了2个共识节点(即节点服务器10a和节点服务器10b)的认可,投票数为2;区块12通过了1个共识节点(即节点服务器10b)的认可,投票数为1;区块13通过了1个共识节点(即节点服务器10c)的认可,投票数为1。
节点服务器10c在生成区块13后,同样地,节点服务器10c可以将区块13广播给区块链网络中的其余共识节点(如图2所示的节点服务器10a和节点服务器10b等),并将区块13存储在本地缓存区中,此时的区块11、区块12以及区块13均暂时未正式上链,后续以此类推,可以得到每个新生成区块的投票数,当某区块的投票数达到投票阈值时,即可将该区块进行正式上链,例如,区块链网络中共有5个共识节点,投票阈值为51%,当区块11通过3个共识节点的认可时,可以将区块11正式上链,并在各共识节点的本地缓存区中将正式上链的区块11进行删除。在上述共识过程中,每个共识节点只需要把各自生成的区块广播给其余节点,可以避免验证结果的广播过程,进而可以提高共识效率。
请参见图3,是本申请实施例提供的一种区块链共识投票方法的流程示意图。如图3所示,该方法可以包括以下步骤:
步骤S101,获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;待共识缓存区包括目标待共识区块链,目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
具体的,当提交节点(如图2所对应实施例中的终端设备10e)向区块链网络上传待上链数据后,区块链网络中的共识节点(如图2所对应实施例中的节点服务器10c)可以获取该提交节点上传的待上链数据。在将待上链数据打包成区块之前,共识节点可以对待共识缓存区(如图2所对应实施例中的本地缓存区20a)所存储的所有待共识区块(如图2所对应实施例中的区块11和区块12)进行本地验证。其中,待共识缓存区是用于存储区块链网络中暂时还未正式上链的区块,即还未通过共识的区块,待共识缓存区可以包括目标待共识区块链,目标待共识区块链中可以包括至少一个待共识区块,在目标待共识区块链中,不同的待共识区块分别由不同的共识节点生成,且后一个待共识区块的区块头中包含前一个待共识区块对应的哈希值,第一个待共识区块的区块头中包含目标区块链(共识通过的区块所构成的区块链)中最大区块对应的哈希值。应当理解,待共识缓存区中第一个待共识区块的区块高度比目标区块链中最大区块对应的区块高度大1,第二个待共识区块的区块高度比第一个待共识区块的区块高度大1。换言之,在本申请实施例中,待共识缓存区中的待共识区块的区块高度是基于目标区块链的最高区块高度开始的,且待共识区块的区块高度与对应待共识区块的生成顺序相关联。如图2所对应的实施例中,由于区块12的区块头中包含区块11对应的哈希值,因此本地缓存区20a所包含的目标待共识区块链为:区块11-区块12,当目标区块链中的最高区块高度为a时,区块11对应的区块高度为a+1,区块12对应的区块高度为a+2。
其中,区块链网络中的共识节点可以基于共识机制对待共识缓存区中存储的待共识区块进行验证,共识机制包括但不限于:工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、工作量证明与权益证明混合(PoW+ PoS)、股份授权证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错算法(Practical Byzantine FaultTolerance,PBFT)、瑞波共识协议(Ripple Consensus Protocol,RCP)。需要说明的是,本地验证是指当前共识节点对待共识缓存区中所存储的待共识区块的验证过程。
可以理解地,获取待上链数据和对待共识区块进行本地验证这两个方法步骤的执行顺序不受表达顺序的限制,例如这两个方法步骤可以互换地执行。
应当理解,提交节点向区块链网络上传待上链数据后,区块链网络内部可以根据预先设定的节点排序顺序,以及生成上一个区块的共识节点,确定出将上述待上链数据打包成新区块的共识节点,此处的上一个区块与新区块均为待共识区块。例如,区块链网络中共包括5个共识节点,这5个共识节点的排序顺序为:共识节点A-共识节点B-共识节点C-共识节点D-共识节点E;当区块链网络接收到提交节点上传的待上链数据后,可以根据生成上一个区块的共识节点在上述排列顺序中的位置,确定生成新区块(新区块即为存储上述待上链数据的区块)的共识节点,若生成上一个区块的共识节点为:共识节点A,则可以由共识节点B将上述待上链数据打包成新区块;若生成上一个区块的共识节点为:共识节点B,则可以由共识节点C将上述待上链数据打包成新区块;依次类推,若生成上一个区块的共识节点为:共识节点E,则可以由共识节点A将上述待上链数据打包成新区块。换言之,可以采用轮询的方式按照节点排序顺序选取共识节点来生成新区块。节点排序顺序可以基于每个共识节点为区块链网络所做出的贡献来确定,并基于贡献量对共识节点进行排序,当接收到新的待上链数据时,可以按照排序顺序选择共识节点。举例来说,若共识节点A所生成的历史区块数量均为10个,且共识节点A所生成的10个历史区块均通过了区块链网络的一致性认可,最终完成了正式上链;共识节点B所生成的历史区块数量同样为10个,但只有5个历史区块通过了区块链网络的一致性认可,完成了正式上链,则表示共识节点A为区块链网络所做出的贡献比共识节点B为区块链网络所做出的贡献要大,因此共识节点A应该排在共识节点B的前面。
步骤S102,若至少一个待共识区块中的第一待共识区块通过本地验证,且第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区;
具体的,共识节点可以基于待共识缓存区中每个待共识区块的区块高度,依次对每个待共识区块进行本地验证。若目标待共识区块链中的第一待共识区块通过本地验证,且该第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则可以获取第一待共识区块对应的哈希值,并将该哈希值作为区块头的输入数据,待上链数据作为区块体数据生成第二待共识区块,并将第二待共识区块添加至目标待共识区块链中,将新生成的第二待共识区块缓存在待共识缓存区中,得到更新后的待共识缓存区。换言之,若目标待共识区块链中所包含的待共识区块均通过本地验证,则把目标待共识区块链中具有最大区块高度的待共识区块称为第一待共识区块,基于第一待共识区块对应的哈希值与提交节点上传的待上链数据,生成第二待共识区块,得到更新后的目标待共识区块链,并将第二待共识区块存储在待共识缓存区中。可以理解的是,第一待共识区块和第二待共识区块同属于目标待共识区块链,并在目标待共识区块链中第一待共识区块与第二待共识区块为相邻区块,即第二待共识区块的区块高度为第一待共识区块的区块高度加1。
例如,目标待共识区块链为:待共识区块1-待共识区块2-待共识区块3-待共识区块4,共识节点通过依次对待共识区块1、待共识区块2、待共识区块3以及待共识区块4进行本地验证,若待共识区块1、待共识区块2、待共识区块3以及待共识区块4均通过本地验证,则可以获取待共识区块4对应的哈希值(此时的待共识区块4即为上述第一待共识区块),基于待共识区块4对应的哈希值与待上链数据生成待共识区块5(即第二待共识区块),得到更新后的目标待共识区块链为:待共识区块1-待共识区块2-待共识区块3-待共识区块4-待共识区块5,待共识区块5可以添加至待共识缓存区进行存储,得到更新后的待共识缓存区。
可选的,若目标待共识区块链中存在未通过本地验证的待共识区块,且第一待共识区块为目标待共识区块链中通过本地验证的待共识区块中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和该哈希值生成第二待共识区块;将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链,将新的待共识区块链和目标待共识区块链确定为更新后的待共识缓存区。换言之,若对目标待共识区块链中所包含的待共识区块进行验证时,存在待共识区块未通过验证,则可以停止对待共识区块链中剩余待共识区块的验证过程,并把目标待共识区块链中通过本地验证的待共识区块中具有最大区块高度的待共识区块称为第一待共识区块,基于第一待共识区块与提交节点上传的待上链数据生成第二待共识区块。基于目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,可以构建一条新的待共识区块链,将第二待共识区块添加至待共识缓存区中,以得到更新后的待共识缓存区,更新后的待共识缓存区中,除了已经存在的目标待共识区块链之外,还包括上述所构建的新的待共识区块链。
如前述举例,目标待共识区块链为:待共识区块1-待共识区块2-待共识区块3-待共识区块4,共识节点对待共识区块1进行本地验证,待共识区块1通过验证后对待共识区块2进行本地验证,在待共识区块2通过验证后对待共识区块3进行验证,若待共识区块3未通过验证,则可以停止对待共识区块4的本地验证过程(待共识区块4的区块头中包含待共识区块3对应的哈希值,当待共识区块3未通过本地验证时,待共识区块4也不会通过本地验证,反之,当待共识区块4通过本地验证时,待共识区块3也同样通过了本地验证),获取待共识区块2对应的哈希值(此时的待共识区块2即为上述第一待共识区块),基于待共识区块2对应的哈希值与待上链数据生成待共识区块5(即第二待共识区块)。基于待共识区块1、待共识区块2以及待共识区块5,可以构建一条新的待共识区块链,新的待共识区块链为:待共识区块1-待共识区块2-待共识区块5;待共识区块5可以添加至待共识缓存区中,得到更新后的待共识缓存区。
可选的,在基于第一待共识区块对应的哈希值与待上链数据生成第二待共识区块之前,共识节点还可以对接收的待上链数据进行验签,将验签通过的待上链数据与上述哈希值打包成第二待共识区块。具体的验签过程为:共识节点可以获取待上链数据所携带的数字签名,获取提交节点对应的公钥;基于公钥对数字签名进行解密,得到数字签名对应的第一摘要信息;基于哈希算法对待上链数据进行哈希运算,得到待上链数据对应的第二摘要信息;若第一摘要信息与第二摘要信息相同,则待上链数据验签通过,基于验签通过的待上链数据生成区块体;根据第一待共识区块对应的哈希值生成区块头,根据区块头和区块体生成第二待共识区块。换言之,为了防止待上链数据在传输过程中被恶意篡改,提交节点可以生成密钥对(包括私钥和公钥,私钥由提交节点自己管理,公钥可以通知给区块链网络中的所有共识节点),提交节点可以采用哈希算法对待上链数据进行哈希运算,生成待上链数据对应的第一摘要信息,并采用生成的私钥对第一摘要信息进行加密,加密之后的第一摘要信息即为待上链数据对应的数字签名。提交节点将携带数字签名的待上链数据上传至区块链网络,区块链网络中的共识节点在接收到提交节点上传的携带数字签名的待上链数据后,可以获取提交节点对应的公钥,基于公钥对数字签名进行解密,得到数字签名对应的第一摘要信息,进而根据哈希算法(即提交节点生成数字签名所采用的哈希算法)对共识节点接收到的待上链数据进行哈希运算,得到接收到的待上链数据对应的第二摘要信息,若第一摘要信息与第二摘要信息相同,则表示待上链数据在上传过程中没有被篡改,验签通过;若第一摘要信息与第二摘要信息不相同,则表示待上链数据在上传过程中可能存在篡改,验签不通过。
应当理解的是,提交节点在上传待上链数据之前,已经将公钥与生成数字签名所使用的哈希算法通知给区块链网络中的共识节点,若待上链数据在上传过程中被篡改,共识节点接收到的数字签名并不是提交节点原本生成的数字签名,则共识节点采用提交节点对应的公钥对数字签名进行解密时,无法进行求解。其中,哈希算法可以包括但不限于SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。
当待上链数据验签通过后,共识节点可以将第一待共识区块对应的哈希值和待上链数据打包成第二待共识区块,第二待共识区块的区块头可以包括第一待共识区块对应的哈希值,第二待共识区块的区块体中可以用于记录待上链数据。
步骤S103,将第二待共识区块在区块链网络中进行广播,以使区块链网络中除生成第二待共识区块的共识节点之外的其余共识节点,将第二待共识区块分别缓存至所属的缓存区;
具体的,共识节点在生成第二待共识区块后,可以将第二待共识区块在区块链网络中进行广播,即将第二待共识区块发送给区块链网络中的其余共识节点,以使区块链网络中除生成第二待共识区块的共识节点之外的其余共识节点,对第二待共识区块分别进行缓存,将第二待共识区块缓存到各自所属的缓存区中。换言之,在区块链网络中,不论是哪个共识节点所生成的待共识区块,均需要在区块链网络中进行广播。可以理解地,区块链网络中其余共识节点所对应的缓存区与当前共识节点对应的待共识缓存区的作用相同,均可以用于存储所有共识节点生成的待共识区块。
步骤S104,对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
具体的,共识节点在将生成的第二待共识节点添加至待共识缓存区后,可以得到更新后的待共识缓存区。共识节点可以获取更新后的待共识缓存区中所包含的待共识区块的数量,进而统计每个待共识节点当前时刻的共识投票值,将当前共识投票值大于投票阈值的待共识区块确定为共识通过状态,并将处于共识通过状态的待共识区块添加至目标区块链,即将共识通过的待共识区块正式上链,投票阈值与区块链中所采用的共识机制有关,不同的共识机制可以具有不同的投票阈值,本申请实施例对采用的共识机制不作具体限制。举例来说,更新后的待共识缓存区中包括更新后的目标待共识区块链:待共识区块1-待共识区块2-待共识区块3-待共识区块4-待共识区块5,由于每个待共识区块均由不同的共识节点所生成,因此可以统计得到待共识区块1对应的共识投票值为:5票;待共识区块2对应的共识投票值为:4票;待共识区块3对应的共识投票值为:3票;待共识区块4对应的共识投票值为:2票;待共识区块5对应的共识投票值为:1票。假设区块链网络中共包括9个共识节点,投票阈值为51%的共识节点数,则表示待共识区块1对应的投票值已经超过了投票阈值,即待共识区块1共识通过,可以将待共识区块1添加至目标区块链进行正式上链。
可选的,更新后的待共识缓存区中包括目标待共识区块链:待共识区块1-待共识区块2-待共识区块3-待共识区块4,以及新的待共识区块链:待共识区块1-待共识区块2-待共识区块5,可以统计得到待共识区块1对应的共识投票值为:5票;待共识区块2对应的共识投票值为:4票;待共识区块3对应的共识投票值为:2票;待共识区块4对应的共识投票值为:1票;待共识区块5对应的共识投票值为:1票。假设区块链网络中共包括9个共识节点,投票阈值为51%的共识节点数,则表示待共识区块1对应的投票值已经超过了投票阈值,即待共识区块1共识通过,可以将待共识区块1添加至目标区块链进行正式上链。
可选的,在区块链网络中,还可以基于每个共识节点的历史验证记录,为每个共识节点分配投票权值,当某共识节点在一段时间内对区块的验证结果与该区块在区块链网络中的最终验证结果一致时(即区块在区块链网络中共识通过时,该共识节点对区块的验证结果为:验证通过),该共识节点的投票权值可以设置得高一些,如投票权值为1.2;当某共识节点在一段时间内存在大部分区块的验证结果与区块在区块链网络中的最终验证结果不一致时(即区块在区块链网络中共识通过时,该共识节点对区块的验证结果为:验证未通过,或者区块在区块链网络中共识未通过时,该共识节点对区块的验证结果为:验证通过),该共识节点的投票权值可以设置得低一些,如投票权值为0.8,等等。当每个共识节点均设置了对应的投票权值后,节点服务器可以获取更新后的待共识缓存区中所包含的待共识区块的数量,确定更新后的待共识缓存区中每个待共识区块分别对应的共识节点,并获取与共识节点相匹配的投票权值;基于更新后的待共识缓存区中所包含的待共识区块的数量和投票权值,对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新;将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,将处于共识通过状态的待共识区块添加至目标区块链;目标区块链用于存储通过共识的所有待共识区块。换言之,当每个共识节点均设置了对应的投票权值后,待共识区块对应的共识投票值不仅与确认待共识区块合法的共识节点的数量有关,还与确认待共识区块合法的共识节点的投票权值有关。例如,更新后的待共识缓存区中包括目标待共识区块链:待共识区块1-待共识区块2-待共识区块3;待共识区块1由共识节点A生成,共识节点A对应的投票权值为1.2;待共识区块2由共识节点B生成,共识节点B对应的投票权值为1.0;待共识区块3由共识节点C生成,共识节点C对应的投票权值为0.8;可以统计得到待共识区块1当前的共识投票值为:1.2*1+1.0*1+0.8*1=3票。
共识节点在将共识通过的待共识区块添加至目标区块链进行正式上链时,共识节点可以获取处于共识通过状态的待共识区块对应的当前区块高度;若当前区块高度与目标区块链中的最高区块对应的区块高度之间为相邻高度关系,则将处于共识通过状态的待共识区块添加至目标区块链;若当前区块高度与目标区块链中的最高区块对应的区块高度之间为非相邻高度关系,则对处于共识通过状态的待共识区块进行区块高度更新,将更新后的处于共识通过状态的待共识区块添加至目标区块链。在共识过程中,可能存在待共识区块未能达成共识,如待共识区块1在区块链网络中未能达成节点之间的一致性,而待共识区块2在区块链网络中达成了共识(默认生成待共识区块2的时间晚于生成待共识区块1的时间),因此可以将待共识区块2进行正式上链。若待共识区块2的区块头中包含目标区块链中最高区块对应的哈希值,则可以直接将待共识区块2添加至目标区块链进行正式上链;若待共识区块2的区块头中不包含目标区块链中最高区块对应的哈希值(如包含待共识区块1对应的哈希值),则需要对待共识区块2进行区块高度更新,即将待共识区块2的区块头中的原始哈希值更新为目标区块链中最高区块对应的哈希值,并将更新后的待共识区块2添加至目标区块链进行正式上链。在待共识区块2完成正式上链过程后,可以从各共识节点的待共识缓存区中进行删除。
应当理解,区块链网络中的其余共识节点在接收到当前共识节点所广播的第二待共识区块,并将第二待共识区块缓存至所属的缓存区后,其余共识节点可以对第二待共识区块进行验证,根据验证结果生成新的待共识区块,并统计缓存区中每个待共识区块分别对应的共识投票值。以下一个共识节点为例,若下一个共识节点通过了第二待共识区块的验证,则可以根据第二待共识区块的哈希值与所接收的数据生成第三待共识区块;若下一个共识节点未通过第二待共识区块的验证,则可以根据通过验证的最大待共识区块(即通过验证的待共识区块中具有最大区块高度的待共识区块)对应的哈希值与所接收到的数据,生成第三待共识区块;进而可以根据第三待共识区块得到更新后的缓存区,并统计更新后的缓存区中每个待共识区块分别对应的共识投票值,其实现过程与上述步骤S101-步骤S104相同。
请参见图4a和图4b,是本申请实施例提供的一种区块链共识投票的示意图。如图4a所示,区块链网络中包括7个共识节点,每个共识节点拥有相同的一条区块链,即目标区块链30a,目标区块链30a中所包含的所有区块(如区块1、区块2以及区块3,区块3为目标区块链30a中具有最大区块高度的区块)均为共识通过的区块,每个区块中所记录的数据均是不一样的。在区块链网络中,每个共识节点生成的区块,都需要在全网进行广播,即每个共识节点的缓存区中均可以存储所有共识节点所生成的待共识区块(暂未通过共识的区块),在共识过程中可以按照从共识节点1-共识节点7的顺序对生成的待共识区块进行验证。如共识节点4对应的待共识缓存区30c中可以包括:共识节点1生成的区块4、共识节点2生成的区块5以及共识节点3生成的区块6(区块4、区块5以及区块6均为暂未通过共识的区块),由于区块5的区块头中包含区块4对应的哈希值,区块6的区块头中包含区块5对应的哈希值,因此可以将区块4、区块5以及区块6看成是一条区块链,可以称为目标待共识区块链30b。当共识节点4接收到提交节点1上传的数据7时,共识节点4可以依次对目标待共识区块链30b中所包含的待共识区块进行验证,若区块4、区块5以及区块6均通过验证,即目标待共识区块链30b所包含的所有待共识区块均通过验证,则可以将区块6对应的哈希值和提交节点1上传的数据7,打包成区块7,并将区块7添加至待共识缓存区30c中,此时的目标待共识区块链30b更新为:区块4-区块5-区块6-区块7。共识节点4可以基于更新后的目标待共识区块链30b,统计每个待共识区块分别对应的共识投票值,统计结果如下:区块4对应的共识投票值为4票,区块5对应的共识投票值为3票,区块6对应的共识投票值为2票,区块7对应的共识投票值为1票。若区块链网络中超过51%的共识节点认可了某待共识区块,则表示为该待共识区块通过了共识,因此可以确定区块4通过了共识,进而可以将区块4添加至目标区块链30a进行正式上链,且区块4的区块头中包含区块3对应的哈希值。
其中,应当理解,当共识节点所生成的待共识区块的区块头中包含另一个待共识区块对应的哈希值,则表明该共识节点验证通过了上述另一个待共识区块中所记录的所有数据。
可选的,如图4b所示,若共识节点4在对目标待共识区块链30b中所包含的待共识区块进行验证时,只有区块4通过了验证,区块5和区块6均未通过验证,则可以将区块4对应的哈希值和提交节点1上传的数据7,打包成区块7,并将区块7添加至待共识缓存区30c中,此时的待共识缓存区30c中不仅可以包含原目标待共识区块链30b:区块4-区块5-区块6-区块7,还可以包含一条新的待共识区块链30d:区块4-区块7。共识节点4可以基于目标待共识区块链30b和新的待共识区块链30d,统计每个待共识区块分别对应的共识投票值,统计结果如下:区块4对应的共识投票值为4票,区块5对应的共识投票值为2票,区块6对应的共识投票值为3票,区块7对应的共识投票值为1票。因此,可以确定区块4通过了共识,进而可以将区块4添加至目标区块链30a进行正式上链,且区块4的区块头中包含区块3对应的哈希值。
在本申请实施例中,对于区块链网络中的每个共识节点,可以将生成的待共识区块广播给区块链网络中的其他共识节点进行缓存,下一个共识节点在接收到待上链数据后,可以对本地缓存的所有待共识区块进行验证,并从通过验证的所有待共识区块中,选择具有最大区块高度的待共识区块作为第一待共识区块,基于第一待共识区块所对应的哈希值和接收到的待上链数据生成新的区块(第二待共识区块),即可以基于共识节点新生成的区块中所包含的哈希值,确定该共识节点验证通过的区块,如共识节点生成的新区块包含区块3的哈希值,可以确定该共识节点验证通过了区块3,以及区块3所包含的哈希值对应的区块等;基于缓存的待共识区块数量以及每个待共识区块所包含的哈希值,确定每个待共识区块分别对应的共识投票值,可以避免共识节点对区块验证结果进行广播,进而降低广播共识结果的消息条数,从而提高共识效率。
请参见图5,是本申请实施例提供的另一种区块链共识投票方法的流程示意图。如图5所示,该方法可以包括以下步骤:
步骤S201,获取提交节点上传的待上链数据,从待共识缓存区中获取多个待共识区块链,获取多个待共识区块链分别对应的初始区块数量;
具体的,共识节点在接收到提交节点上传的待上链数据后,可以获取待共识缓存区中存储的所有待共识区块,基于每个待共识区块的区块头中所包含的哈希值,确定所有待共识区块之间的链式关系,即确定待共识缓存区中存在多少个待共识区块链,以及每个待共识区块链中所包含的区块数量,也可以称为每个待共识区块链对应的初始区块数量。其中,不同的待共识区块链中一定存在不同的待共识区块,但可以包含相同的待共识区块,如待共识区块链1可以为:待共识区块1-待共识区块2-待共识区块3,待共识区块链2可以为:待共识区块1-待共识区块2-待共识区块4-待共识区块5。
步骤S202,基于初始区块数量对多个待共识区块链进行排序,基于每个待共识区块链的排序顺序,依次对每个待共识区块链所包含的待共识区块进行本地验证;
具体的,共识节点可以根据每个待共识区块链对应的初始区块数量,对待共识缓存区中所包含的所有待共识区块链进行排序,即按照初始区块数量从大到小的顺序,对所有待共识区块链进行排序,共识节点可以基于排序顺序依次对每个待共识区块链所包含的待共识区块进行本地验证。换言之,共识节点可以优先对初始区块数量最多的待共识区块链进行本地验证,若初始区块数量最多的待共识区块链中的所有待共识区块均通过本地验证,则该共识节点可以停止对剩余待共识区块链的验证操作;若初始区块数量最多的待共识区块链中存在待共识区块未通过本地验证,则继续对排在后面的待共识区块链进行本地验证,以此类推,可以完成对待共识缓存区中的待共识区块的本地验证过程。
其中,需要说明的是,待共识区块链对应的初始区块数量越多,表明区块链网络中认可该待共识区块链的共识节点越多,该待共识区块链通过本地验证的可能性越大,因此共识节点可以优先对初始区块数量最多的待共识区块链进行验证,可以减少区块验证的时间,并节省资源。对于待共识缓存区中的多个待共识区块链,共识节点若验证通过了某待共识区块链(即验证通过了待共识区块链中所包含的所有待共识区块),则该共识节点对于其余待共识区块链的验证结果必然是验证不通过(即其余每条待共识区块链中必然存在验证未通过的待共识区块)。因此,当初始区块数量最多的待共识区块链通过本地验证时,可以停止对剩余待共识区块链的验证操作。
步骤S203,若多个待共识区块链中存在待共识区块均通过本地验证的目标待共识区块链,则将目标待共识区块链中具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值。
具体的,共识节点对待共识缓存区中存储的待共识区块进行本地验证后,若多个待共识区块链中存在所有待共识区块均通过验证的待共识区块链,则可以将该待共识区块链称为目标待共识区块链,进而可以将目标待共识区块链中具有最大区块高度的待共识区块作为第一待共识区块,并获取第一待共识区块对应的哈希值。例如,待共识缓存区中包括3个待共识区块链,分别为待共识区块链1(区块1-区块2-区块3)、待共识区块链2(区块1-区块2-区块5)以及待共识区块链3(区块1-区块4),若待共识区块链1中所包含的区块1、区块2以及区块3均通过本地验证,则可以将待共识区块链1称为目标待共识区块链,并获取待共识区块链1中区块3对应的哈希值。
步骤S204,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,将更新后的目标待共识区块链与剩余待共识区块链确定为更新后的待共识缓存区;
具体的,共识节点在获取到第一待共识区块对应的哈希值后,可以基于提交节点上传的待上链数据和上述哈希值,生成第二待共识区块,上述哈希值可以作为第二待共识区块的区块头的输入数据,待上链数据即为第二待共识区块的区块体所记录的数据。将第二待共识区块添加至待共识缓存区进行存储,即将第二待共识区块添加至目标待共识区块链,得到更新后的目标待共识区块链。如前述举例,基于待上链数据和区块3对应的哈希值可以生成区块6(即第二待共识区块),并将区块6添加至待共识缓存区进行存储,此时待共识缓存区中包含更新后的待共识区块链1(区块1-区块2-区块3-区块6)、保持不变的待共识区块链2(区块1-区块2-区块5)以及待共识区块链3(区块1-区块4)。其中,共识节点在接收到提交节点上传的待上链数据后,可以对待上链数据进行验签,验签通过后,可以将验签通过的待上链数据与区块3对应的哈希值打包成区块6,具体的验签过程可以参见上述图3所对应实施例中对步骤S102的描述,这里不再进行赘述,共识节点还需要将生成的第二待共识区块在区块链网络中进行广播,即将第二待共识区块发送给区块链网络中的其余共识节点,以使其余共识节点可以对第二待共识区块进行缓存。
步骤S205,若多个待共识区块链中均存在未通过本地验证的待共识区块,则分别统计每个待共识区块链中通过本地验证的待共识区块的目标数量,将具有最大的目标数量的待共识区块链确定为目标待共识区块链;
具体的,若待共识缓存区中的所有待共识区块链中均存在未通过本地验证的待共识区块,即所有待共识区块链均未通过本地验证,则可以分别统计每个待共识区块链中通过本地验证的待共识区块的目标数量,将目标数量最大的待共识区块链确定为目标待共识区块链。例如,待共识缓存区中的3个待共识区块链分别为:待共识区块链1包括4个待共识区块,通过本地验证的待共识区块的目标数量为3;待共识区块链2包括4个待共识区块,通过本地验证的待共识区块的目标数量为2;待共识区块链3包括2个待共识区块,通过本地验证的待共识区块的目标数量为0。共识节点可以将待共识区块链1确定为目标待共识区块链。
当存在多条待共识区块链中通过本地验证的待共识区块的目标数量相等时,表明目标数量相等的多条待共识区块链中通过本地验证的待共识区块是相同的,可以从目标数量相等的多条待共识区块链中随机选择一条待共识区块链作为目标待共识区块链。
步骤S206,从目标待共识区块链所包含的通过本地验证的待共识区块中,获取具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
具体的,共识节点可以从目标待共识区块链的所有通过本地验证的待共识区块中,选择具有最大区块高度的待共识区块链作为第一待共识区块,并获取第一待共识区块对应的哈希值。例如,目标待共识区块链为:区块A-区块B-区块C-区块D-区块E,若目标待共识区块链中通过本地验证的待共识区块为:区块A、区块B以及区块C,则可以将区块C作为第一待共识区块,并获取区块C对应的哈希值。
步骤S207,根据待上链数据和哈希值生成第二待共识区块,将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链;
具体的,共识节点可以将第一待共识区块对应的哈希值以及提交节点上传的待上链数据,打包成第二待共识区块,将目标待共识区块链中通过本地验证的待共识区块与上述生成的第二待共识区块,构成新的待共识区块链。如前述举例,目标待共识区块链中通过本地验证的待共识区块为:区块A、区块B以及区块C,第二待共识区块的区块头中包含区块C对应的哈希值,因此可以将区块A、区块B、区块C以及第二待共识区块,构成新的待共识区块链:区块A-区块B-区块C-第二待共识区块。其中,共识节点可以对接收到的待上链数据后,进行验签,验签通过后,将验签通过的待上链数据与区块C对应的哈希值打包成第二待共识区块,具体的验签过程可以参见上述图3所对应实施例中对步骤S102的描述,这里不再赘述。共识节点需要将生成的第二待共识区块在区块链网络中进行广播,即将第二待共识区块发送给区块链网络中的其余共识节点,以使其余共识节点可以对第二待共识区块进行缓存。
步骤S208,将新的待共识区块链和多个待共识区块链确定为更新后的待共识缓存区;
具体的,共识节点可以将新生成的第二待共识区块添加至待共识缓存区进行缓存,此时的待共识缓存区中除了包含之前的多个待共识区块链外,还包括上述构建的新的待共识区块链。换言之,将第二待共识区块添加至待共识缓存区,可以得到更新后的待共识缓存区。
步骤S209,对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
具体的,若第二待共识区块添加至目标待共识区块链,得到了更新后的目标待共识区块链,则可以从更新后的待共识缓存区中,获取更新后的目标待共识区块链和剩余待共识区块链分别对应的区块数量,并分别统计每个待共识区块在更新后的目标待共识区块链和剩余待共识区块链中的出现频次;基于区块数量与出现频次,重新统计更新后的待共识缓存区中每个待共识区块分别对应的共识投票值,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,并将处于共识通过状态的待共识区块添加至目标区块链。例如,更新后的目标待共识区块链为:区块1-区块2-区块3-区块6、剩余的待共识区块链分别为:区块1-区块2-区块5,区块1-区块4;各区块对应的共识投票值与各区块在待共识区块链中的区块高度以及所属待共识区块链的区块数量有关,如区块1存在于3个待共识区块链中(即区块1在各待共识区块链中的出现频次为3次,),且区块1在上述3个待共识区块链中均为第一个待共识区块,则区块1对应的共识投票值为:3个待共识区块链的区块数量之和,减去重复的区块数量,即4+3+2-2-1=6 ;区块2存在于2个待共识区块链中(即区块2在各待共识区块链中的出现频次为2次),且区块2在2个待共识区块链中均不是第一个区块,则区块2对应的共识投票值为:2个待共识区块链中区块高度大于或等于区块2的区块数量,减去重复的区块数量,即3+2-1=4。
可选的,若第二待共识区块与目标待共识区块链中通过本地验证的待共识区块构成新的待共识区块链,则基于原始的多个待共识区块链与新的待共识区块链,重新统计待共识缓存区中每个待共识区块对应的共识投票值,具体统计方式如上述描述。
共识节点可以将当前统计得到的共识投票值与投票阈值相比较,若存在共识投票值大于投票阈值,则将共识投票值大于投票阈值的待共识区块确定为共识通过状态,并将处于共识通过状态的待共识区块添加至目标区块链。当然,在将处于共识通过状态的待共识区块添加至目标区块链之前,还需要判断该处于共识通过状态的待共识区块的区块高度是否与目标区块链中的最高区块对应的区块高度为相邻高度关系,若是相邻高度关系,则直接添加至目标区块链进行正式上链;若不是相邻高度关系,则对处于共识通过状态的待共识区块的区块高度进行更新,将更新后的处于共识通过状态的待共识区块添加至目标区块链。
请一并参见图6,是本申请实施例提供的另一种区块链共识投票场景示意图。如图6所示,区块链网络中包括7个共识节点,每个共识节点拥有相同的一条区块链,即目标区块链40a,目标区块链40a中所包含的所有区块(如区块1、区块2以及区块3,区块3为目标区块链40a中具有最大区块高度的区块)均为共识通过的区块,每个区块中所记录的数据均是不一样的。在区块链网络中,每个共识节点生成的区块,都需要在全网进行广播,即每个共识节点的缓存区中均可以存储所有共识节点所生成的待共识区块(暂未通过共识的区块),在共识过程中可以按照从共识节点1-共识节点7的顺序对生成的待共识区块进行验证。
如共识节点6对应的待共识缓存区40b中可以包括:共识节点1生成的区块4、共识节点2生成的区块5、共识节点3生成的区块6、共识节点4生成的区块7以及共识节点5生成的区块8(区块4至区块8均为暂未通过共识的区块),由于区块6的区块头中包含区块4对应的哈希值,因此可以将区块4和区块6看成是一条区块链,称为待共识区块链40c;区块7的区块头中包含区块5对应的哈希值,区块8的区块头中包含区块7对应的哈希值,可以将区块5、区块7以及区块8看成是一条区块链,称为待共识区块链40d。
当共识节点6接收到提交节点2上传的数据9时,共识节点6可以对待共识缓存区40b中存储的待共识区块进行验证,具体可以通过待共识区块链的区块数量来决定待共识区块链的验证顺序,即共识节点6可以优先对待共识区块链40d中的待共识区块进行验证。若区块5、区块7以及区块8均通过验证,即待共识区块链40d所包含的所有待共识区块均通过验证,则不需要再对待共识区块链40c中所包含的待共识区块进行验证,直接将区块8对应的哈希值和提交节点2上传的数据9,打包成区块9,并将区块9添加至待共识缓存区40b中,此时的待共识区块链40d更新为:区块5-区块7-区块8-区块9,而待共识区块链40c保持不变。共识节点6可以基于更新后的待共识区块链40d和待共识区块链40c,统计每个待共识区块分别对应的共识投票值,统计结果如下:区块4对应的共识投票值为2票,区块5对应的共识投票值为4票,区块6对应的共识投票值为1票,区块7对应的共识投票值为3票,区块8对应的共识投票值为2票,区块9对应的共识投票值为1票。
若区块链网络中超过51%的共识节点认可了某待共识区块,则表示为该待共识区块通过了共识,因此可以确定区块5通过了共识,进而可以将区块5添加至目标区块链40a进行正式上链,且区块5的区块头中应包含区块3对应的哈希值。当然,此时还可以确定区块4在区块链网络中的共识结果为:共识未通过(即使后续共识节点7对区块4的本地验证结果为通过,区块4的共识投票值仍然不能超过51%,因此可以确定区块4的共识结果为未通过),共识节点6可以将区块4中所记录的数据4进行清空,或者从待共识缓存区40b中删除区块4,这里不做限定。
其中,应当理解,当共识节点所生成的待共识区块的区块头中包含另一个待共识区块对应的哈希值,则表明该共识节点验证通过了上述另一个待共识区块中所记录的所有数据。
可选的,若待共识区块链40d未通过共识节点6的验证(即待共识区块链40d中存在未通过验证的待共识区块),则共识节点6可以对待共识区块链40c进行验证,当待共识区块链40c通过验证时,则可以将区块6对应的哈希值和提交节点2上传的数据9,打包成区块9,并将区块9添加至待共识缓存区40b中,此时的待共识区块链40c更新为:区块4-区块6-区块9,而待共识区块链40d保持不变。基于上述同样的统计方式,统计更新后的待共识缓存区40b中每个待共识区块对应的共识投票值。当然,若待共识区块链40d和待共识区块链40c均未通过共识节点6的验证,则可以构建一条新的待共识区块链,具体构建过程可以参见上述图5所对应实施例中的步骤S205-步骤S208,这里不再赘述。
在本申请实施例中,对于区块链网络中的每个共识节点,可以将生成的待共识区块广播给区块链网络中的其他共识节点进行缓存,下一个共识节点在接收到待上链数据后,可以对本地缓存的所有待共识区块进行验证,并从通过验证的所有待共识区块中,选择具有最大区块高度的待共识区块作为第一待共识区块,基于第一待共识区块所对应的哈希值和接收到的待上链数据生成新的区块(第二待共识区块),即可以基于共识节点新生成的区块中所包含的哈希值,确定该共识节点验证通过的区块,如共识节点生成的新区块包含区块3的哈希值,可以确定该共识节点验证通过了区块3,以及区块3所包含的哈希值对应的区块等;基于缓存的待共识区块数量以及每个待共识区块所包含的哈希值,确定每个待共识区块分别对应的共识投票值,可以避免共识节点对区块验证结果进行广播,进而降低广播共识结果的消息条数,从而提高共识效率。
请参见图7,是本申请实施例提供的一种区块链共识投票装置的结构示意图,该区块链共识投票装置1可以应用于共识节点。如图7所示,该区块链共识投票装置1可以包括:验证模块10,第一区块生成模块11,区块广播模块12,投票值统计模块13;
验证模块10,用于获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;待共识缓存区包括目标待共识区块链,目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
第一区块生成模块11,用于若至少一个待共识区块中的第一待共识区块通过本地验证,且第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区;
区块广播模块12,用于将第二待共识区块在区块链网络中进行广播,以使区块链网络中除生成第二待共识区块的共识节点之外的其余共识节点,将第二待共识区块分别缓存至所属的缓存区;
投票值统计模块13,用于对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
其中,在生成第二待共识区块时,第一区块生成模块11具体用于:
获取待上链数据所携带的数字签名,获取提交节点对应的公钥;
基于公钥对数字签名进行解密,得到数字签名对应的第一摘要信息;
基于哈希算法对待上链数据进行哈希运算,得到待上链数据对应的第二摘要信息;
若第一摘要信息与第二摘要信息相同,则待上链数据验签通过,基于验签通过的待上链数据生成区块体;
根据哈希值生成区块头,根据区块头和区块体生成第二待共识区块。
其中,验证模块10,第一区块生成模块11,区块广播模块12,投票值统计模块13的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101-步骤S104,这里不再进行赘述。
请一并参见图7,区块链共识投票装置1还可以包括:第二区块生成模块14,第一区块链构建模块15;
第二区块生成模块14,用于若目标待共识区块链中存在未通过本地验证的待共识区块,且第一待共识区块为目标待共识区块链中通过本地验证的待共识区块中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块;
第一区块链构建模块15,用于将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链,将新的待共识区块链和目标待共识区块链确定为更新后的待共识缓存区。
其中,第二区块生成模块14,第一区块链构建模块15的具体功能实现方式可以参见上述图3所对应实施例中的步骤S102,这里不再进行赘述。
请一并参见图7,投票值统计模块13可以包括:投票权值获取单元131,第一投票值更新单元132,共识状态确定单元133;
投票权值获取单元131,用于获取更新后的待共识缓存区中所包含的待共识区块的数量,确定更新后的待共识缓存区中每个待共识区块分别对应的共识节点,并获取与共识节点相匹配的投票权值;
第一投票值更新单元132,用于基于更新后的待共识缓存区中所包含的待共识区块的数量和投票权值,对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新;
共识状态确定单元133,用于将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,将处于共识通过状态的待共识区块添加至目标区块链;目标区块链用于存储通过共识的所有待共识区块。
其中,投票权值获取单元131,第一投票值更新单元132,共识状态确定单元133的具体功能实现方式可以参见上述图3所对应实施例中的步骤S104,这里不再进行赘述。
请一并参见图7,共识状态确定单元133可以包括:高度获取子单元1331,高度关系确定子单元1332;
高度获取子单元1331,用于获取处于共识通过状态的待共识区块对应的当前区块高度;
高度关系确定子单元1332,用于若当前区块高度与目标区块链中的最高区块对应的区块高度之间为相邻高度关系,则将处于共识通过状态的待共识区块添加至目标区块链;
高度关系确定子单元1332,还用于若当前区块高度与目标区块链中的最高区块对应的区块高度之间为非相邻高度关系,则对处于共识通过状态的待共识区块进行区块高度更新,将更新后的处于共识通过状态的待共识区块添加至目标区块链。
其中,高度获取子单元1331,高度关系确定子单元1332的具体功能实现方式可以参见上述图3所对应实施例中的步骤S104,这里不再进行赘述。
其中,待共识缓存区包括多个待共识区块链,多个待共识区块链包括目标待共识区块链;
请一并参见图7,验证模块10可以包括:数量获取单元101,排序单元102;
数量获取单元101,用于从待共识缓存区中获取多个待共识区块链,获取多个待共识区块链分别对应的初始区块数量;
排序单元102,用于基于初始区块数量对多个待共识区块链进行排序,基于每个待共识区块链的排序顺序,依次对每个待共识区块链所包含的待共识区块进行本地验证。
其中,数量获取单元101,排序单元102的具体功能实现方式可以参见上述图5所对应实施例中的步骤S201-步骤S202,这里不再进行赘述。
请一并参见图7,第一区块生成模块11包括:区块确定单元111,缓存区更新单元112;
区块确定单元111,用于若多个待共识区块链中存在待共识区块均通过本地验证的目标待共识区块链,则将目标待共识区块链中具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
缓存区更新单元112,用于根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,将更新后的目标待共识区块链与剩余待共识区块链确定为更新后的待共识缓存区;剩余待共识区块链为待共识缓存区中除目标待共识区块链之外的待共识区块链。
其中,区块确定单元111,缓存区更新单元112的具体功能实现方式可以参见上述图5所对应实施例中的步骤S203-步骤S204,这里不再进行赘述。
请一并参见图7,区块链共识投票装置1还可以包括:区块链选择模块16,区块选择模块17,第二区块链构建模块18,更新模块19;
区块链选择模块16,用于若多个待共识区块链中均存在未通过本地验证的待共识区块,则分别统计每个待共识区块链中通过本地验证的待共识区块的目标数量,将具有最大的目标数量的待共识区块链确定为目标待共识区块链;
区块选择模块17,用于从目标待共识区块链所包含的通过本地验证的待共识区块中,获取具有最大区块高度的待共识区块作为第一待共识区块,获取第一待共识区块对应的哈希值;
第二区块链构建模块18,用于根据待上链数据和哈希值生成第二待共识区块,将目标待共识区块链中通过本地验证的所有待共识区块,以及第二待共识区块,构成新的待共识区块链;
更新模块19,用于将新的待共识区块链和多个待共识区块链确定为更新后的待共识缓存区。
其中,区块链选择模块16,区块选择模块17,第二区块链构建模块18,更新模块19的具体功能实现方式可以参见上述图5所对应实施例中的步骤S205-步骤S208,这里不再进行赘述。
请一并参见图7,投票值统计模13可以包括:频次统计单元134,第二投票值更新单元135;
频次统计单元134,用于从更新后的待共识缓存区中,获取更新后的目标待共识区块链和剩余待共识区块链分别对应的区块数量,并分别统计每个待共识区块在更新后的目标待共识区块链和剩余待共识区块链中的出现频次;
第二投票值更新单元135,用于基于区块数量与出现频次,重新统计更新后的待共识缓存区中每个待共识区块分别对应的共识投票值。
其中,频次统计单元134,第二投票值更新单元135的具体功能实现方式可以参见上述图5所对应实施例中的步骤S209,这里不再进行赘述。
在本申请实施例中,对于区块链网络中的每个共识节点,可以将生成的待共识区块广播给区块链网络中的其他共识节点进行缓存,下一个共识节点在接收到待上链数据后,可以对本地缓存的所有待共识区块进行验证,并从通过验证的所有待共识区块中,选择具有最大区块高度的待共识区块作为第一待共识区块,基于第一待共识区块所对应的哈希值和接收到的待上链数据生成新的区块(第二待共识区块),即可以基于共识节点新生成的区块中所包含的哈希值,确定该共识节点验证通过的区块,如共识节点生成的新区块包含区块3的哈希值,可以确定该共识节点验证通过了区块3,以及区块3所包含的哈希值对应的区块等;基于缓存的待共识区块数量以及每个待共识区块所包含的哈希值,确定每个待共识区块分别对应的共识投票值,可以避免共识节点对区块验证结果进行广播,进而降低广播共识结果的消息条数,从而提高共识效率。
请参见图8,是本申请实施例提供的一种节点设备的结构示意图。如图8所示,该节点设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述节点设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1004可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图8所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在如图8所示的节点设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;待共识缓存区包括目标待共识区块链,目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
若至少一个待共识区块中的第一待共识区块通过本地验证,且第一待共识区块为目标待共识区块链中具有最大区块高度的待共识区块,则获取第一待共识区块对应的哈希值,根据待上链数据和哈希值生成第二待共识区块,将第二待共识区块添加至目标待共识区块链,得到更新后的待共识缓存区;
将第二待共识区块在区块链网络中进行广播,以使区块链网络中除生成第二待共识区块的共识节点之外的其余共识节点,将第二待共识区块分别缓存至所属的缓存区;
对更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
应当理解,本申请实施例中所描述的节点设备1000可执行前文图3、图5任一个所对应实施例中对区块链共识投票方法的描述,也可执行前文图7所对应实施例中对区块链共识投票装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的区块链共识投票装置1所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图3、图5任一个所对应实施例中对区块链共识投票方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储存储器(Read-Only Memory,ROM)或随机存储存储器(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (12)
1.一种区块链共识投票方法,应用于共识节点,其特征在于,包括:
获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;所述待共识缓存区包括目标待共识区块链,所述目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
若所述至少一个待共识区块中的第一待共识区块通过本地验证,且所述第一待共识区块为所述目标待共识区块链中具有最大区块高度的待共识区块,则获取所述第一待共识区块对应的哈希值,根据所述待上链数据和所述哈希值生成第二待共识区块,将所述第二待共识区块添加至所述目标待共识区块链,得到更新后的待共识缓存区;
将所述第二待共识区块在区块链网络中进行广播,以使所述区块链网络中除生成所述第二待共识区块的共识节点之外的其余共识节点,将所述第二待共识区块分别缓存至所属的缓存区;
对所述更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
2.根据权利要求1所述的方法,其特征在于,还包括:
若所述目标待共识区块链中存在未通过本地验证的待共识区块,且所述第一待共识区块为所述目标待共识区块链中通过本地验证的待共识区块中具有最大区块高度的待共识区块,则获取所述第一待共识区块对应的哈希值,根据所述待上链数据和所述哈希值生成第二待共识区块;
将所述目标待共识区块链中通过本地验证的所有待共识区块,以及所述第二待共识区块,构成新的待共识区块链,将所述新的待共识区块链和所述目标待共识区块链确定为更新后的待共识缓存区。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述待上链数据和所述哈希值生成第二待共识区块,包括:
获取所述待上链数据所携带的数字签名,获取所述提交节点对应的公钥;
基于所述公钥对所述数字签名进行解密,得到所述数字签名对应的第一摘要信息;
基于哈希算法对所述待上链数据进行哈希运算,得到所述待上链数据对应的第二摘要信息;
若所述第一摘要信息与所述第二摘要信息相同,则所述待上链数据验签通过,基于验签通过的待上链数据生成区块体;
根据所述哈希值生成区块头,根据所述区块头和所述区块体生成第二待共识区块。
4.根据权利要求1或2所述的方法,其特征在于,所述对所述更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,包括:
获取所述更新后的待共识缓存区中所包含的待共识区块的数量,确定所述更新后的待共识缓存区中每个待共识区块分别对应的共识节点,并获取与所述共识节点相匹配的投票权值;
基于所述更新后的待共识缓存区中所包含的待共识区块的数量和所述投票权值,对所述更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新;
将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态,将处于共识通过状态的待共识区块添加至目标区块链;所述目标区块链用于存储通过共识的所有待共识区块。
5.根据权利要求4所述的方法,其特征在于,所述将处于共识通过状态的待共识区块添加至目标区块链,包括:
获取处于共识通过状态的待共识区块对应的当前区块高度;
若所述当前区块高度与所述目标区块链中的最高区块对应的区块高度之间为相邻高度关系,则将所述处于共识通过状态的待共识区块添加至所述目标区块链;
若所述当前区块高度与所述目标区块链中的最高区块对应的区块高度之间为非相邻高度关系,则对所述处于共识通过状态的待共识区块进行区块高度更新,将更新后的处于共识通过状态的待共识区块添加至所述目标区块链。
6.根据权利要求1所述的方法,其特征在于,所述待共识缓存区包括多个待共识区块链,所述多个待共识区块链包括所述目标待共识区块链;
所述对待共识缓存区所存储的待共识区块进行本地验证,包括:
从所述待共识缓存区中获取所述多个待共识区块链,获取所述多个待共识区块链分别对应的初始区块数量;
基于所述初始区块数量对所述多个待共识区块链进行排序,基于每个待共识区块链的排序顺序,依次对所述每个待共识区块链所包含的待共识区块进行本地验证。
7.根据权利要求6所述的方法,其特征在于,所述若所述至少一个待共识区块中的第一待共识区块通过本地验证,且所述第一待共识区块为所述目标待共识区块链中具有最大区块高度的待共识区块,则获取所述第一待共识区块对应的哈希值,根据所述待上链数据和所述哈希值生成第二待共识区块,将所述第二待共识区块添加至所述目标待共识区块链,得到更新后的待共识缓存区,包括:
若所述多个待共识区块链中存在待共识区块均通过本地验证的目标待共识区块链,则将所述目标待共识区块链中具有最大区块高度的待共识区块作为所述第一待共识区块,获取所述第一待共识区块对应的哈希值;
根据所述待上链数据和所述哈希值生成第二待共识区块,将所述第二待共识区块添加至所述目标待共识区块链,将更新后的目标待共识区块链与剩余待共识区块链确定为更新后的待共识缓存区;所述剩余待共识区块链为所述待共识缓存区中除所述目标待共识区块链之外的待共识区块链。
8.根据权利要求6所述的方法,其特征在于,还包括:
若所述多个待共识区块链中均存在未通过本地验证的待共识区块,则分别统计每个待共识区块链中通过本地验证的待共识区块的目标数量,将具有最大的目标数量的待共识区块链确定为所述目标待共识区块链;
从所述目标待共识区块链所包含的通过本地验证的待共识区块中,获取具有最大区块高度的待共识区块作为所述第一待共识区块,获取所述第一待共识区块对应的哈希值;
根据所述待上链数据和所述哈希值生成第二待共识区块,将所述目标待共识区块链中通过本地验证的所有待共识区块,以及所述第二待共识区块,构成新的待共识区块链;
将所述新的待共识区块链和所述多个待共识区块链确定为更新后的待共识缓存区。
9.根据权利要求7所述的方法,其特征在于,所述对所述更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,包括:
从所述更新后的待共识缓存区中,获取所述更新后的目标待共识区块链和所述剩余待共识区块链分别对应的区块数量,并分别统计每个待共识区块在所述更新后的目标待共识区块链和所述剩余待共识区块链中的出现频次;
基于所述区块数量与所述出现频次,重新统计所述更新后的待共识缓存区中每个待共识区块分别对应的共识投票值。
10.一种区块链共识投票装置,应用于共识节点,其特征在于,包括:
验证模块,用于获取提交节点上传的待上链数据,对待共识缓存区所存储的待共识区块进行本地验证;所述待共识缓存区包括目标待共识区块链,所述目标待共识区块链包括至少一个待共识区块,不同的待共识区块分别由不同的共识节点生成;
区块生成模块,用于若所述至少一个待共识区块中的第一待共识区块通过本地验证,且所述第一待共识区块为所述目标待共识区块链中具有最大区块高度的待共识区块,则获取所述第一待共识区块对应的哈希值,根据所述待上链数据和所述哈希值生成第二待共识区块,将所述第二待共识区块添加至所述目标待共识区块链,得到更新后的待共识缓存区;
区块广播模块,用于将所述第二待共识区块在区块链网络中进行广播,以使所述区块链网络中除生成所述第二待共识区块的共识节点之外的其余共识节点,将所述第二待共识区块分别缓存至所属的缓存区;
投票值统计模块,用于对所述更新后的待共识缓存区中每个待共识区块分别对应的共识投票值进行更新,将更新后的共识投票值大于投票阈值的待共识区块确定为共识通过状态。
11.一种节点设备,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至9中任一项所述方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1至9中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911284399.XA CN110708171B (zh) | 2019-12-13 | 2019-12-13 | 区块链共识投票方法、装置、设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911284399.XA CN110708171B (zh) | 2019-12-13 | 2019-12-13 | 区块链共识投票方法、装置、设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110708171A CN110708171A (zh) | 2020-01-17 |
CN110708171B true CN110708171B (zh) | 2020-06-12 |
Family
ID=69208088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911284399.XA Active CN110708171B (zh) | 2019-12-13 | 2019-12-13 | 区块链共识投票方法、装置、设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110708171B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111371769B (zh) * | 2020-02-27 | 2022-03-08 | 北京链化未来科技有限公司 | 共识处理方法、共识节点、电子设备和可读存储介质 |
CN111405027B (zh) * | 2020-03-12 | 2023-06-23 | 金蝶软件(中国)有限公司 | 区块链共识结果筛选方法、装置、计算机设备和存储介质 |
CN111444210B (zh) * | 2020-03-26 | 2021-11-05 | 腾讯科技(深圳)有限公司 | 区块链共识节点管理方法、装置、设备以及存储介质 |
CN111427957B (zh) * | 2020-03-26 | 2021-05-11 | 财付通支付科技有限公司 | 区块链投票信息校验方法、装置、设备以及存储介质 |
CN111382456B (zh) * | 2020-06-01 | 2020-10-23 | 腾讯科技(深圳)有限公司 | 提案消息处理方法、装置、设备以及存储介质 |
CN111523901B (zh) * | 2020-07-03 | 2020-12-04 | 支付宝(杭州)信息技术有限公司 | 基于拜占庭容错算法的区块链的共识方法、装置及系统 |
CN111861464B (zh) * | 2020-07-18 | 2021-04-27 | 西安纸贵互联网科技有限公司 | 区块链的节点共识方法及系统 |
CN112200680B (zh) * | 2020-12-03 | 2021-03-05 | 腾讯科技(深圳)有限公司 | 区块链节点管理方法、装置、计算机以及可读存储介质 |
CN112202933B (zh) | 2020-12-08 | 2021-03-05 | 腾讯科技(深圳)有限公司 | 区块链网络的信息处理方法、装置及节点设备 |
CN112541825A (zh) * | 2020-12-09 | 2021-03-23 | 网易(杭州)网络有限公司 | 基于区块链的交易处理方法及装置、电子设备 |
TWI759028B (zh) * | 2020-12-23 | 2022-03-21 | 鴻海精密工業股份有限公司 | 基於區塊鏈交易的區塊打包方法、裝置及電子設備 |
US20220366088A1 (en) * | 2021-01-11 | 2022-11-17 | Micro Focus Llc | Blockchain auditing system and method |
CN112380149B (zh) * | 2021-01-18 | 2021-04-06 | 腾讯科技(深圳)有限公司 | 基于节点内存的数据处理方法、装置、设备以及介质 |
CN113794576B (zh) * | 2021-08-12 | 2022-07-19 | 山东区块链研究院 | 一种可再投票的二元共识方法及装置 |
CN113783935B (zh) * | 2021-08-12 | 2022-04-01 | 清华大学 | 一种拜占庭容错方法及装置 |
CN115396504B (zh) * | 2022-08-23 | 2024-01-16 | 浪潮工业互联网股份有限公司 | 一种区块链投票数据缓存方法、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10355869B2 (en) * | 2017-01-12 | 2019-07-16 | International Business Machines Corporation | Private blockchain transaction management and termination |
CN110517141A (zh) * | 2019-08-27 | 2019-11-29 | 深圳前海微众银行股份有限公司 | 一种基于区块链系统的共识方法及装置 |
CN110517139A (zh) * | 2019-08-23 | 2019-11-29 | 电子科技大学 | 一种基于投票机制的联盟区块链分权共识方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10819722B2 (en) * | 2018-03-21 | 2020-10-27 | Honeywell International Inc. | Blockchain for securing distributed IIoT or edge device data at rest |
CN109951534B (zh) * | 2019-02-28 | 2021-09-07 | 北京柏链基石科技有限公司 | 一种共识方法、装置和系统 |
CN109949157B (zh) * | 2019-03-08 | 2022-03-18 | 矩阵元技术(深圳)有限公司 | 一种业务数据的上链方法、装置及系统 |
-
2019
- 2019-12-13 CN CN201911284399.XA patent/CN110708171B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10355869B2 (en) * | 2017-01-12 | 2019-07-16 | International Business Machines Corporation | Private blockchain transaction management and termination |
CN110517139A (zh) * | 2019-08-23 | 2019-11-29 | 电子科技大学 | 一种基于投票机制的联盟区块链分权共识方法 |
CN110517141A (zh) * | 2019-08-27 | 2019-11-29 | 深圳前海微众银行股份有限公司 | 一种基于区块链系统的共识方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110708171A (zh) | 2020-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110708171B (zh) | 区块链共识投票方法、装置、设备以及存储介质 | |
US10747721B2 (en) | File management/search system and file management/search method based on block chain | |
EP3449450B1 (en) | Implementing logic gate functionality using a blockchain | |
CN111445333B (zh) | 区块生成方法、装置、计算机设备以及存储介质 | |
CN111427957B (zh) | 区块链投票信息校验方法、装置、设备以及存储介质 | |
EP3605944A1 (en) | Documenting timestamps within a blockchain | |
CN110892674A (zh) | 区块链的交易生成方法和区块链的块验证方法 | |
CN111523890A (zh) | 基于区块链的数据处理方法、装置、存储介质及设备 | |
CN111476573B (zh) | 一种账户数据处理方法、装置、设备及存储介质 | |
CN113326516A (zh) | 区块链共识方法、区块链系统及计算机设备 | |
CN110599136A (zh) | 区块链交易池流量管控方法以及装置 | |
CN110264172B (zh) | 基于区块链的交易处理方法及装置 | |
CN112907375B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN115840787B (zh) | 基于区块链的供应链数据共享方法、装置、设备及介质 | |
CN111367923A (zh) | 数据处理方法、装置、节点设备及存储介质 | |
CN113822675A (zh) | 基于区块链的报文处理方法、装置、设备及存储介质 | |
CN114884697B (zh) | 基于国密算法的数据加解密方法及相关设备 | |
CN110941672A (zh) | 户籍管理方法、装置、设备以及存储介质 | |
CN107332833A (zh) | 校验方法及装置 | |
WO2021233109A1 (zh) | 基于区块链的消息处理方法、装置、设备以及存储介质 | |
CN113901520A (zh) | 基于区块链的数据处理方法、装置、设备及介质 | |
CN112165383A (zh) | 基于共享根密钥的加密方法、装置、设备及介质 | |
CN116910816A (zh) | 一种提高隐私保护下的多方资产协同管理方法及装置 | |
CN112583908B (zh) | 应用于出块节点的区块链共识方法、系统、设备及介质 | |
CN113901519A (zh) | 基于区块链的数据处理方法、装置、设备及介质 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40020859 Country of ref document: HK |