区块有效性的验证方法及装置与流程

文档序号:22750574发布日期:2020-10-31 09:44阅读:195来源:国知局
区块有效性的验证方法及装置与流程

本发明涉及区块链领域,具体而言,涉及一种区块有效性的验证方法及装置。



背景技术:

区块链系统中常见的多签名共识算法为了保持共识算法容错性,通常会设定共识节点门限个数,从而会导致共识节点达到了共识门限个数但收到的签名数据却不一致的问题,进而无法在当前区块中描述当前共识的合法性。例如,选举算法的每个验证节点收到超过一半的节点签名数据就能通过共识提案,节点{a,b,c,d}共识完成时单个节点可能出现{a,b,c}、{b,c,d}、{a,c,d}、{a,b,d}或者{a,b,d}、{b,c,d}、{c,b,d}、{d,b,c}等不同的签名结果集。虽然每个节点都能依据算法出块共识,但不能保证每个节点达到门限时收到的签名数据是一致的,造成无法确认当前区块生成的签名数据,也就暂时无法确定区块的合法性。

目前一些算法,如bls签名聚合算法,虽然能解决上述问题,但计算过程高复杂度,存在效率低和安全性低的问题。



技术实现要素:

鉴于此,本发明提出了一种区块有效性的验证方法及装置,旨在解决多签名场景下区块合法性和签名统一的问题。

第一方面,本发明实施例提供了一种区块有效性的验证方法,包括:在第n+1轮共识过程中,获取当前待生成区块bn+1的共识数据consensusn+1、所述当前待生成区块bn+1的前一个区块bn的共识证明数据proofn,其中,n为自然数,所述共识数据consensusn+1包括:区块序号seq、区块哈希值hash、前一区块的哈希值previous_hash、验证节点的哈希值validators_hash;判断所述区块bn+1的区块序号seq是否加1,同时判断所述区块bn+1的前一区块的哈希值previous_hash与本地保存的所述区块bn的哈希值是否一致;若是,则获取所述区块bn+1的本地保存的验证节点集合validatorset,根据所述区块bn+1的本地保存的验证节点集合validatorset验证所述验证节点的哈希值validators_hash是否正确;若是,则获取所述区块bn的本地共识证明数据proofn’,根据所述区块bn的本地共识证明数据proofn’验证所述共识证明数据proofn是否正确,其中,所述本地共识证明数据proofn’为第n轮共识过程中保存在本地的bn的共识证明数据;若是,则所述区块bn有效。

进一步地,所述根据所述区块bn的本地共识证明数据proofn’验证所述共识证明数据proofn是否正确,包括:分别提取所述本地共识证明数据proofn’中的本地共识验证节点集合setl和所述共识证明数据proofn中的已签名的验证节点集合commitsn;判断所述已签名的验证节点集合commitsn是否为所述本地共识验证节点集合setl的子集;若是,则判断所述已签名的验证节点合集commitsn的个数是否大于或等于共识要求达到的验证节点个数quorumsize;若是,则判断所述共识证明数据proofn中的value_digest是否与第n轮共识保存在本地的共识结果的哈希值local_previous_hash相等;若是,则校验所述本地共识验证节点集合setl中的各个节点对所述共识证明数据proofn中的签名数据是否正确。

进一步地,所述根据所述区块bn+1的本地保存的验证节点集合validatorset验证所述验证节点的哈希值validators_hash是否正确,包括:对所述区块bn+1的本地保存的验证节点集合validatorset进行序列化操作生成本地验证节点哈希值local_validator_hash;判断所述验证节点的哈希值validators_hash与所述本地验证节点哈希值local_validator_hash是否一致。

第二方面,本发明实施例还提供了一种区块验证装置,包括:数据获取单元,用于在第n+1轮共识过程中,获取当前待生成区块bn+1的共识数据consensusn+1、所述当前待生成区块bn+1的前一个区块bn的共识证明数据proofn,其中,n为自然数,所述共识数据consensusn+1包括:区块序号seq、区块哈希值hash、前一区块的哈希值previous_hash、验证节点的哈希值validators_hashn;第一判断单元,用于判断所述区块bn+1的区块序号seq是否加1,同时判断所述区块bn+1的前一区块的哈希值previous_hash与本地保存的所述区块bn的哈希值是否一致;第一验证单元,用于当所述第一判断单元判断所述区块序号seq和所述前一区块的哈希值previous_hash正确时,则获取所述区块bn+1的本地保存的验证节点集合validatorset,根据所述区块bn+1的本地保存的验证节点集合validatorset验证所述验证节点的哈希值validators_hash是否正确;第二验证单元,用于当所述第一验证单元验证所述验证节点的哈希值validators_hash正确时,则获取所述区块bn的本地共识证明数据proofn’,根据所述区块bn的本地共识证明数据proofn’验证所述共识证明数据proofn是否正确,其中,所述本地共识证明数据proofn’为第n轮共识过程中保存在本地的bn的共识证明数据,若是,则所述区块bn有效。

进一步地,所述第二验证单元,还用于:分别提取所述本地共识证明数据proofn’中的本地共识验证节点集合setl和所述共识证明数据proofn中的已签名的验证节点集合commitsn;判断所述已签名的验证节点集合commitsn是否为所述本地共识验证节点集合setl的子集;若是,则判断所述已签名的验证节点合集commitsn的个数是否大于或等于共识要求达到的验证节点个数quorumsize;若是,则判断所述共识证明数据proofn中的value_digest是否与第n轮共识保存在本地的共识结果的哈希值local_previous_hash相等;若是,则校验所述本地共识验证节点集合setl中的各个节点对所述共识证明数据proofn中的签名数据是否正确。

进一步地,所述第一验证单元,还用于:对所述区块bn+1的本地保存的验证节点集合validatorset进行序列化操作生成本地验证节点哈希值local_validator_hash;判断所述验证节点的哈希值validators_hash与所述本地验证节点哈希值local_validator_hash是否一致。

第三方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行实现本发明各实施例提供的区块有效性的验证方法。

本发明实施例提供的区块有效性的验证方法及装置,通过每一次共识过程对前一次共识的共识证明数据进行校验,根据前一次共识过程的本地共识证明数据验证本次共识过程中的前一个区块验证节点签名等数据的合法性,即前一个区块的合法性由后一个区块确认。通过本发明实施例提供的区块有效性的验证方法及装置,可以将区块校验形成链条穿起来,有效解决了多签名场景下区块合法性和签名统一的问题,并且相比现有技术,计算过程简单,从而效率和安全性都大大提高。

附图说明

图1示出了根据本发明实施例的区块有效性的验证方法的示例性流程图;

图2为图1所示方法的一种优选实施方式的示例性流程图;

图3示出了根据本发明实施例的区块有效性的验证装置的结构示意图。

具体实施方式

现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。

除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。

图1示出了根据本发明实施例的区块有效性的验证方法的示例性流程图。

如图1所示,该方法包括:

步骤s101:在第n+1轮共识过程中,获取当前待生成区块bn+1的共识数据consensusn+1、当前待生成区块bn+1的前一个区块bn的共识证明数据proofn,其中,n为自然数,共识数据consensusn+1包括:区块序号seq、区块哈希值hash、前一区块的哈希值previous_hash、验证节点的哈希值validators_hash;

步骤s102:判断区块bn+1的区块序号seq是否加1,同时判断区块bn+1的前一区块的哈希值previous_hash与本地保存的区块bn的哈希值是否一致;

步骤s103:若是,则获取区块bn+1的本地保存的验证节点集合validatorset,根据区块bn+1的本地保存的验证节点集合validatorset验证该验证节点的哈希值validators_hash是否正确;

步骤s104:若是,则获取区块bn的本地共识证明数据proofn’,根据区块bn的本地共识证明数据proofn’验证共识证明数据proofn是否正确,其中,本地共识证明数据proofn’为第n轮共识过程中保存在本地的bn的共识证明数据;

步骤s105:若是,则区块bn有效。

本发明实施例中,获取区块bn+1的本地保存的验证节点集合validatorset和获取区块bn的本地共识证明数据proofn’,可以分别在步骤s103和步骤s104中执行,也可以同时在步骤s101中执行。步骤s102、步骤103为对区块bn+1的共识数据consensusn+1合法性的验证;步骤s104为对区块bn的共识证明数据proofn合法性的验证。

上述实施例中,通过每一次共识过程对前一次共识的共识证明数据进行校验,根据前一次共识过程的本地共识证明数据验证本次共识过程中的前一个区块验证节点签名等数据的合法性,即前一个区块的合法性由后一个区块确认。通过本发明实施例提供的方法,可以将区块校验形成链条穿起来,有效解决了多签名场景下区块合法性和签名统一的问题,并且相比现有技术,计算过程简单,从而效率和安全性都大大提高。

图2为图1所示方法的一种优选实施方式的示例性流程图。

如图2所示,该方法步骤s201-203、s206、s212与图1所示的方法步骤s101-s105相同。

在一优选实施中,步骤s104中,根据区块bn的本地共识证明数据proofn’验证共识证明数据proofn是否正确,包括:

步骤s207:分别提取本地共识证明数据proofn’中的本地共识验证节点集合setl和共识证明数据proofn中的已签名的验证节点集合commitsn;

步骤s208:判断已签名的验证节点集合commitsn是否为本地共识验证节点集合setl的子集;

步骤s209:若是,则判断已签名的验证节点合集commitsn的个数是否大于或等于共识要求达到的验证节点个数quorumsize;

步骤s210:若是,则判断共识证明数据proofn中的value_digest是否与第n轮共识保存在本地的共识结果的哈希值local_previous_hash相等;

步骤s211:若是,则校验本地共识验证节点集合setl中的各个节点对共识证明数据proofn中的签名数据是否正确。

在另一优选实施中,步骤s103中,根据区块bn+1的本地保存的验证节点集合validatorset验证验证节点的哈希值validators_hash是否正确,包括:

步骤s204:对区块bn+1的本地保存的验证节点集合validatorset进行序列化操作生成本地验证节点哈希值local_validator_hash;

步骤s205:判断验证节点的哈希值validators_hash与本地验证节点哈希值local_validator_hash是否一致。

图3示出了根据本发明实施例的区块有效性的验证装置的结构示意图。

如图3所示,该装置包括:

数据获取单元301,用于在第n+1轮共识过程中,获取当前待生成区块bn+1的共识数据consensusn+1、当前待生成区块bn+1的前一个区块bn的共识证明数据proofn,其中,n为自然数,共识数据consensusn+1包括:区块序号seq、区块哈希值hash、前一区块的哈希值previous_hash、验证节点的哈希值validators_hashn;

第一判断单元302,用于判断区块bn+1的区块序号seq是否加1,同时判断区块bn+1的前一区块的哈希值previous_hash与本地保存的区块bn的哈希值是否一致;

第一验证单元303,用于当第一判断单元判断区块序号seq和前一区块的哈希值previous_hash正确时,则获取区块bn+1的本地保存的验证节点集合validatorset,根据区块bn+1的本地保存的验证节点集合validatorset验证该验证节点的哈希值validators_hash是否正确;

第二验证单元304,用于当第一验证单元验证验证节点的哈希值validators_hash正确时,则获取区块bn的本地共识证明数据proofn’,根据区块bn的本地共识证明数据proofn’验证共识证明数据proofn是否正确,其中,本地共识证明数据proofn’为第n轮共识过程中保存在本地的bn的共识证明数据,若是,则区块bn有效。

本发明实施例中,获取区块bn+1的本地保存的验证节点集合validatorset和获取区块bn的本地共识证明数据proofn’,可以分别在第一验证单元303和第二验证单元304中执行,也可以同时在数据获取单元301中执行。第一判断单元302、第一验证单元303为对区块bn+1的共识数据consensusn+1合法性的验证;第二验证单元304为对区块bn的共识证明数据proofn合法性的验证。

上述实施例中,通过每一次共识过程对前一次共识的共识证明数据进行校验,根据前一次共识过程的本地共识证明数据验证本次共识过程中的前一个区块验证节点签名等数据的合法性,即前一个区块的合法性由后一个区块确认。通过本发明实施例提供的方法,可以将区块校验形成链条穿起来,有效解决了多签名场景下区块合法性和签名统一的问题,并且相比现有技术,计算过程简单,从而效率和安全性都大大提高。

进一步地,在一优选实施例中,第二验证单元304,还用于:

分别提取本地共识证明数据proofn’中的本地共识验证节点集合setl和共识证明数据proofn中的已签名的验证节点集合commitsn;

判断已签名的验证节点集合commitsn是否为本地共识验证节点集合setl的子集;

若是,则判断已签名的验证节点合集commitsn的个数是否大于或等于共识要求达到的验证节点个数quorumsize;

若是,则判断共识证明数据proofn中的value_digest是否与第n轮共识保存在本地的共识结果的哈希值local_previous_hash相等;

若是,则校验本地共识验证节点集合setl中的各个节点对共识证明数据proofn中的签名数据是否正确。

进一步地,在一优选实施例中,第一验证单元303,还用于:

对区块bn+1的本地保存的验证节点集合validatorset进行序列化操作生成本地验证节点哈希值local_validator_hash;

判断验证节点的哈希值validators_hash与本地验证节点哈希值local_validator_hash是否一致。

本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行实现本发明各实施例提供的区块有效性的验证方法。

该计算机可读存储介质可以是上述实施例中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本申请的公式输入方法。

已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。

通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。

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