首页> 中国专利> 一种基于委托权益证明算法的区块链共识方法和装置

一种基于委托权益证明算法的区块链共识方法和装置

摘要

本发明一种基于委托权益证明算法的区块链共识方法和装置,涉及区块链领域,所述方法包括:多个见证人节点中每个见证人节点根据自身的选票以及接收到的选票情况进行投票,选出多个受托节点;对参与投票共识的节点在确定选票的有效性后发放投票激励;在多个受托节点中任一受托节点生成区块,且区块共识成功后,对投票给对应受托节点的选票有效的见证人节点发放记账激励。本发明降低了币龄的重要性,能够加快剔除错误见证人节点,对选票有效的见证人节点发放投票激励,提高了见证人节点的参与度。在区块共识完成后,再给选票有效的见证人节点发放记账激励,避免出现区块链系统中心化的趋势,具有较高的实用性。

著录项

  • 公开/公告号CN112600682A

    专利类型发明专利

  • 公开/公告日2021-04-02

    原文格式PDF

  • 申请/专利权人 四川大学;

    申请/专利号CN202011425792.9

  • 发明设计人 李强;杨坤桥;郭兵;

    申请日2020-12-09

  • 分类号H04L12/18(20060101);H04L29/08(20060101);G06N5/04(20060101);

  • 代理机构11319 北京润泽恒知识产权代理有限公司;

  • 代理人王婷婷

  • 地址 610065 四川省成都市武侯区一环路南一段24号

  • 入库时间 2023-06-19 10:27:30

说明书

技术领域

本发明涉及区块链领域,特别是一种基于委托权益证明算法的区块链共识方法和装置。

背景技术

区块链技术是由多种已存在的技术(P2P网络、密码学等)组合形成的具有去中心化的记录技术。目前区块链没有统一的定义,维基百科上对区块链的定义是:区块链(bolckchain)是利用分布式的数据库对信息进行甄别、传播和记录的对等网络,简言之,区块链在本质上就是一个具有去中心化特征的分布式数据库,区块链技术从本质来说是一个分布式的数据库技术,网络内的节点利用密码学、共识算法、点对点通信等技术,共同维护全网数据的一致性和完整性。

目前区块链实现共识的算法,主要有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stack,PoS)以及委托权益证明(Delegate Proof of Stack,DPoS)等多种。DPoS算法与PoS算法的区别在于,不再需要统计每个见证人节点的币龄做排序操作,而是每个见证人节点将它拥有的币龄作为选票投给它自己信任的受托节点,由区块链系统从这些受托节点中选择排名靠前的节点轮流完成记账。

DPoS算法通过每轮投票选择多个受托节点轮流记账,大幅提高了区块链系统的共识效率。但它也存在着一些问题:整个系统中见证人节点参与度不高,因为参与投票、共识需要一些资源的消耗;其次由于依据币龄作为选票,当发现错误见证人节点时,不能快速的将它们剔除;还有DPoS算法在完成记账后发放记账激励时只对受托节点发放,而不对那些投票的见证人节点激励,长期来看会加剧区块链系统的中心化趋势。

发明内容

鉴于上述问题,本发明提供一种基于委托权益证明算法的区块链共识方法和装置,在保证了区块链系统安全性的前提下,提高了区块链系统中见证人节点参与度,同时可以加快剔除错误见证人节点,以及避免只对受托节点发放记账激励。

本发明实施例提供了一种基于委托权益证明算法的区块链共识方法,所述区块链系统包括:多个见证人节点;所述方法包括:

所述多个见证人节点中每个见证人节点根据自身的选票以及接收到的选票,进行投票,以在所述多个见证人节点中选出多个受托节点;

对投票给所述多个受托节点的选票有效的见证人节点发放投票激励;

在所述多个受托节点中任一受托节点生成区块,且生成的区块共识成功后,对投票给所述多个受托节点的选票有效的见证人节点发放记账激励;

其中,所述选票包括:见证人节点的币龄、见证人节点的保证金以及见证人节点的历史共识信息,所述历史共识信息包括:见证人节点参与成功的共识次数和失败的共识次数。

可选地,所述多个见证人节点中每个见证人节点根据自身的选票以及接收到的选票,进行投票,以在所述多个见证人节点中选出多个受托节点,包括:

所述每个见证人节点根据自身的币龄、保证金以及历史共识信息,计算得到自身的选票,并广播自身的选票至其余见证人节点;

所述每个见证人节点根据已接收到的其它见证人节点的选票,以及自身的选票,按照选票的数值大小进行排序;

所述每个见证人节点在预设时间内选取最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播所述候选节点的信息;

对所有候选节点中每个候选节点的选票进行校验、统计,依照其拥有的校验正确的选票的数值大小进行排序;

选取排序靠前的第一预设数量的候选节点作为所述多个受托节点。

可选地,对投票给所述多个受托节点的选票有效的见证人节点发放投票激励,包括:

针对每个受托节点中选票有效的见证人节点发放投票激励,具体包括:

计算该受托节点中所有选票有效的见证人节点的保证金总和;

计算该受托节点中每个选票有效的见证人节点的保证金各自的占比;

根据每个选票有效的见证人节点的保证金各自的占比,和每个选票有效的见证人节点的历史共识信息,计算得到每个选票有效的见证人节点的投票激励。

可选地,在所述多个受托节点中任一受托节点生成区块,且生成的区块共识成功后,对投票给所述受托节点的选票有效的见证人节点发放记账激励,包括:

在所述多个受托节点中任一受托节点生成区块,且所述区块共识成功后,发放总记账激励;

基于博弈论中的Banzhaf权利指数,确定每个选票有效的见证人节点对应的权利指数;

根据每个选票有效的见证人节点对应的权利指数,以及所述总记账激励,计算得到每个选票有效的见证人节点应得的记账激励。

可选地,所述方法还包括:

所述多个受托节点中每一个受托节点均需生成第二预设数量个区块;

在每一个受托节点均生成第二预设数量个区块后,执行步骤:所述多个见证人节点中每个见证人节点根据自身接收到的选票,进行投票,以在所述多个见证人节点中选出多个受托节点。

可选地,在所述每个见证人节点根据已接收到的其它见证人节点的选票,以及自身的选票,按照选票的数值大小进行排序之后,还包括:

所述多个见证人节点中第一见证人节点,未在预设时间内选取最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播所述候选节点的信息,则判定所述第一见证人节点投票无效,且罚没所述第一见证人节点的保证金。

可选地,对所有候选节点中每个候选节点的选票进行校验、统计,依照其拥有的校验正确的选票的数值大小进行排序,包括:

对所有候选节点中每个候选节点的每张选票进行校验;

对校验正确的选票进行数值统计,并依照校验正确的选票的数值大小进行排序;

对所有候选节点中每个候选节点的每张选票进行校验之后,还包括:

对校验不正确的选票,确定发出该选票的见证人节点的选票无效,并罚没发出该选票的见证人节点的保证金。

可选地,所述每个见证人节点根据自身的币龄、保证金以及历史共识信息,计算得到自身的选票,并广播自身的选票至其余见证人节点,包括:

所述每个见证人节点计算自身的币龄与第一权重的乘积得到修正币龄;

所述每个见证人节点计算自身的保证金与第二权重的乘积得到修正保证金;

所述每个见证人节点计算自身的历史共识信息与第三权重的乘积得到修正历史共识信息;

所述每个见证人节点计算所述修正币龄、所述修正保证金以及所述修正历史共识信息的和值,得到自身的选票,并广播自身的选票至其余见证人节点;

其中,所述每个见证人节点的历史共识信息的数值大小,随着其参与成功的共识次数的增长而变大,随着其参与失败的共识次数的增长而变小。

本发明实施例还提供了一种基于委托权益证明算法的区块链共识装置,所述区块链系统包括:多个见证人节点;所述装置包括:

选出受托节点模块,用于所述多个见证人节点中每个见证人节点根据自身接收到的选票,进行投票,以在所述多个见证人节点中选出多个受托节点;

发放投票激励模块,用于对投票给所述多个受托节点的选票有效的见证人节点发放投票激励;

发放记账激励模块,用于在所述多个受托节点中任一受托节点生成区块,且生成的区块共识成功后,对投票给所述多个受托节点的选票有效的见证人节点发放记账激励;

其中,所述选票包括:见证人节点的币龄、见证人节点的保证金以及见证人节点的历史共识信息,所述历史共识信息包括:见证人节点参与成功的共识次数和失败的共识次数。

可选地,所述选出受托节点模块包括:

计算选票单元,用于所述每个见证人节点根据自身的币龄、保证金以及历史共识信息,计算得到自身的选票、并广播自身的选票至其余见证人节点;

选票排序单元,用于所述每个见证人节点在预设时间内根据已接收到的其它见证人节点的选票,以及自身的选票,按照选票的数值大小进行排序;

投候选节点单元,用于所述每个见证人节点选取最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播所述候选节点的信息;

校验统计排序单元,用于对所有候选节点中每个候选节点的选票进行校验、统计,依照其拥有的校验正确的选票的数值大小进行排序;

选取受托节点单元,用于选取排序靠前的第一预设数量的候选节点作为所述多个受托节点。

可选地,所述发放投票激励模块用于对每个受托节点中选票有效的见证人节点发放投票激励,具体包括:

计算总和合单元,用于计算该受托节点中所有选票有效的见证人节点的保证金总和;

计算占比单元,用于计算该受托节点中每个选票有效的见证人节点的保证金各自的占比;

计算投票激励单元,用于根据每个选票有效的见证人节点的保证金各自的占比,和每个选票有效的见证人节点的历史共识信息,计算得到每个选票有效的见证人节点的投票激励。

可选地,所述发放记账激励模块包括:

发放总激励单元,用于在所述多个受托节点中任一受托节点生成区块,且所述区块共识成功后,发放总记账激励;

确定权利指数单元,用于基于博弈论中的Banzhaf权利指数,确定每个选票有效的见证人节点对应的权利指数;

计算记账激励单元,用于根据每个选票有效的见证人节点对应的权利指数,以及所述总记账激励,计算得到每个选票有效的见证人节点应得的记账激励。

可选地,所述校验统计排序单元具体用于:

对所有候选节点中每个候选节点的每张选票进行校验;

对校验正确的选票进行数值统计,并依照校验正确的选票的数值大小进行排序;

对校验不正确的选票,确定发出该选票的见证人节点的选票无效,并罚没发出该选票的见证人节点的保证金。

可选地,所述计算选票单元具体用于:

所述每个见证人节点计算自身的币龄与第一权重的乘积得到修正币龄;

所述每个见证人节点计算自身的保证金与第二权重的乘积得到修正保证金;

所述每个见证人节点计算自身的历史共识信息与第三权重的乘积得到修正历史共识信息;

所述每个见证人节点计算所述修正币龄、所述修正保证金以及所述修正历史共识信息的和值,得到自身的选票,并广播自身的选票至其余见证人节点;

其中,所述每个见证人节点的历史共识信息的数值大小,随着其参与成功的共识次数的增长而变大,随着其参与失败的共识次数的增长而变小。

本发明提供的一种基于委托权益证明算法的区块链共识方法和装置,首先选出多个受托节点,之后就对选票有效的见证人节点发放投票激励,这样有利于见证人节点的参与度。而选票中不再仅仅依据币龄这一个条件,而是加入了保证金和历史共识信息,降低了币龄的重要性,有利于加快剔除错误见证人节点。另外,在区块共识完成后,再给选票有效的见证人节点发放记账激励,不再是只给受托节点发放记账激励,避免出现区块链系统中心化的趋势,解决了目前DPoS算法存在的问题,具有较高的实用性。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是本发明实施例一种基于委托权益证明算法的区块链共识方法的流程图;

图2是本发明实施例一种基于委托权益证明算法的区块链共识装置的框图;

图3是本发明实施例中50轮投票的正常见证人节点的结果对照图;

图4是本发明实施例中50轮共识的见证人节点参与投票的数量曲线图;

图5是本发明实施例中50轮共识的时延曲线图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。应当理解,此处所描述的具体实施例仅用以解释本发明,仅仅是本发明一部分实施例,而不是全部的实施例,并不用于限定本发明。

本发明实施例提出的区块链共识方法,在目前的DPoS算法上进行了改进,参照图1,示出了本发明实施例一种基于委托权益证明算法的区块链共识方法的流程图,区块链包括:多个见证人节点;基于委托权益证明算法的区块链共识方法包括:

步骤101:多个见证人节点中每个见证人节点根据自身接收到的选票,进行投票,以在多个见证人节点中选出多个受托节点。

本发明实施例中,区块链中有多个见证人节点,每一个见证人节点需要根据自身的选票以及接收到的选票来进行投票,根据投票的结果以在多个见证人节点中选出多个受托节点。其中,选票包括:见证人节点的币龄、见证人节点的保证金以及见证人节点的历史共识信息,所谓历史共识信息包括:见证人节点参与成功的共识次数和失败的共识次数。任何一个见证人节点参与过的所有区块链共识次数中,总会存在参与成功的共识和参与失败的共识,一般认为参与共识失败的见证人节点为错误节点,当然并不是只要见证人节点参与共识失败一次,就认为其是错误见证人节点,而是根据其参与成功的共识次数和失败的共识次数的比值来决定其是否为错误见证人节点。假若某个见证人节点参与成功的共识次数多于或者远多于失败的共识次数,那么该见证人节点就是正确见证人节点,自然,假若某个见证人节点参与成功的共识次数约等于或者少于失败的共识次数,那么该见证人节点就是错误见证人节点。

对于选票,每个见证人节点均需要自行计算,具体的计算方法包括:

步骤S1:每个见证人节点计算自身的币龄与第一权重的乘积得到修正币龄;

步骤S2:每个见证人节点计算自身的保证金与第二权重的乘积得到修正保证金;

步骤S3:每个见证人节点计算自身的历史共识信息与第三权重的乘积得到修正历史共识信息。

本发明实施例中,因为额外引入了保证金和历史共识信息,所以为币龄、保证金以及历史共识信息分别设置了各自的权重,这样做是为了避免拥有较高币龄的见证人节点为恶意节点时,无法剔除的问题,这样降低了选票对币龄的单一因素依赖。而保证金可以作为见证人节点选票的背书,增加选票的可信度的同时,也增加了见证人节点的作恶成本。见证人节点参与的成功共识次数越多说明见证人节点的投票越可信,所以历史共识信息可以进一步增加选票的可信度。

基于上述考虑,为币龄、保证金以及历史共识信息分别设置不同的权重,在计算时,见证人节点计算自身的币龄与第一权重的乘积得到修正币龄;计算自身的保证金与第二权重的乘积得到修正保证金;计算自身的历史共识信息与第三权重的乘积得到修正历史共识信息。

步骤S4:每个见证人节点计算修正币龄、修正保证金以及修正历史共识信息的和值,得到自身的选票,并广播自身的选票至其余见证人节点。

其中,每个见证人节点的历史共识信息的数值大小,随着其参与成功的共识次数的增长而变大,随着其参与失败的共识次数的增长而变小。

本发明实施例中,每个见证人节点计算得到各自的修正币龄、修正保证金以及修正历史共识信息之后,求取三者的和值,即可得到自身的选票,得到选票后广播自身的选票至其余见证人节点。当然,其也会接收到其他见证人节点广播的各自的选票。

假设第一权重为0.4、第二权重为0.2、第三权重为0.4,那么每个见证人节点的选票为:选票=0.4*币龄+0.2*保证金+0.4*历史共识信息。

针对历史共识信息,为了加快作恶见证人节点的剔除,就需要能及时的降低这些见证人节点的权重,但又要防止见证人节点受失败共识次数的影响造成长期的投票权重过低。因此可以设定统计历史共识信息时,设定为几次成功的共识记录可以抵消一次失败的共识记录,例如:设定2次成功的共识记录可以抵消1次失败的共识记录。而当成功共识次数小于失败次数两倍时,认为历史共识信息的结果为负值且呈指数减小,即,成功共识次数越小于失败次数两倍时,其历史共识信息的结果越小;而当成功共识次数大于失败次数两倍时,认为历史共识信息的结果为正值且呈线性增长,即,成功共识次数越大于失败次数两倍时,其历史共识信息的结果越大。通过动态调整节点的权重,能够快速降低作恶节点选票对整体投票结果的影响,也能鼓励节点参加正确的共识来提高它的选票投票权重。

历史共识信息的结果可以通过以下这种优选的方式得到:

假设Cs表示见证人参与成功的共识次数,Ce表示见证人参与失败的共识次数,第三权重为0.4。那么当Cs≥2Ce时,历史共识信息的结果=0.4*│Cs-2Ce│;当Cs<2Ce时,历史共识信息的结果=-0.4*2

在每个见证人节点计算好自身的选票并广播后,其也接收到其它见证人节点广播的选票,之后的步骤包括:

步骤T1:每个见证人节点根据已接收到的其它见证人节点的选票,以及自身的选票,按照选票的数值大小进行排序;

步骤T2:每个见证人节点在预设时间内选取最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播候选节点的信息。

本发明实施例中,每个见证人节点接收到其它节点的选票后,可以根据已接收到的其它见证人节点的选票,以及自身的选票,按照选票的数值大小进行排序,选票数值最高的排第一,选票数值最低的排最后。之后见证人节点需要在预设时间内选取自身已经排序的第一,即最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播候选节点的信息。

之所以要在预设时间内让见证人节点投票,是为了提高区块链的共识速度。一般情况下,区块链中的见证人节点数量庞大,如果不设置预设时间强制见证人节点投票,那么见证人节点可能会拖延很久才进行投票,这样会导致受托节点的选出需要耗费较长时间,这显然不符合实际需求,因此需要设定一个预设时间,来加快受托节点的选出,进而提高区块链的共识速度。

另外,区块链中的见证人节点数量庞大,但网络质量并不是完全相同,所以在实际的过程中,并不是每一个见证人节点都可以接收到其它所有见证人节点的选票,即使接收到也需要花费较长时间,为了加快受托节点的选出,设定一个时间长度,以保证见证人节点及时投票。

例如:假设有100个见证人节点,因为网络质量等各种因素,假若想要这100个见证人节点都接收到彼此的选票,再排序、投票的话花费的时间可能需要10分钟,但是假若这100个见证人节点中每个见证人节点接收到另外80个选票,再排序、投票的话花费的时间可能只需要5分钟,那么就设定5分钟,5分钟之内100个见证人节点均完成各自的投票,得到所有的候补节点。

为了加快受托节点的选出,假若多个见证人节点中第一见证人节点(即任一见证人节点),未在预设时间内选取最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播候选节点的信息,则区块链判定该第一见证人节点投票无效,并且罚没该第一见证人节点的保证金。通过这样的方式,来加快受托节点的选出,进而提高区块链共识的速度。

步骤T3:对所有候选节点中每个候选节点的选票进行校验、统计,依照其拥有的校验正确的选票的数值大小进行排序;

步骤T4:选取排序靠前的第一预设数量的候选节点作为多个受托节点。

本发明实施例中,在候选节点确定后,对每个候选节点的选票进行校验,校验正确的话,就对校验正确的选票进行数值统计,即,候选节点的选票实际上是投票给它的见证人节点的选票的和值。例如:某候选节点得到了30个见证人节点的选票,那么理论上该候选节点的选票的数值就是30个见证人节点各自选票数值之和,前提是这30个见证人节点的选票均校验正确。假若某个见证人节点的选票校验不正确,那么对校验不正确的选票,需要确定发出该选票的见证人节点的选票无效,同时罚没发出该选票的见证人节点的保证金。这样就使得恶意节点的作恶成本增高,维护了区块链的安全和稳定。

候选节点中每一个校验正确的选票进行数值求和后,得到该候选节点的选票后,依照校验正确的选票的数值大小对所有候选节点进行排序,选票数值最高的候选节点排第一,选票数值最低的候选节点排最后。

排序完成后,选取排序靠前的第一预设数量的候选节点作为区块链中选出的多个受托节点。例如:第一预设数量为30%,那么就选取前30%的候选节点作为受托节点。

步骤102:对投票给多个受托节点的选票有效的见证人节点发放投票激励。

本发明实施例中,在投票选出受托节点后,就对投票给多个受托节点的选票有效的见证人节点发放投票激励。这样不但激励了见证人节点积极参与区块链受托节点的选出,同时也加快剔除了恶意的见证人节点。

针对每个受托节点中选票有效的见证人节点发放投票激励的步骤具体包括:

步骤V1:计算该受托节点中所有选票有效的见证人节点的保证金总和;

步骤V2:计算该受托节点中每个选票有效的见证人节点的保证金各自的占比;

步骤V3:根据每个选票有效的见证人节点的保证金各自的占比,和每个选票有效的见证人节点的历史共识信息,计算得到每个选票有效的见证人节点的投票激励。

本发明实施例中,为了鼓励见证人节点多缴纳保证金,增加见证人节点的作恶成本,鼓励见证人节点参与成功共识的次数,因此投票激励以保证金和历史共识信息来决定具体的分配。

首先计算该受托节点中所有选票有效的见证人节点的保证金总和,再计算该受托节点中每个选票有效的见证人节点的保证金各自的占比。即,见证人节点的保证金越高,则其占比越高。最后根据每个选票有效的见证人节点的保证金各自的占比,和每个选票有效的见证人节点的历史共识信息,计算得到每个选票有效的见证人节点的投票激励。

投票激励的计算方法可以理解为:

对于一个见证人节点:假设Cs表示该见证人节点参与成功的共识次数,Ce表示该见证人参与失败的共识次数,n表示该见证人节点的保证金占比。那么当Cs≥2Ce时,该见证人节点的投票激励=n*(Cs-2Ce)

步骤103:在多个受托节点中任一受托节点生成区块,且生成的区块共识成功后,对投票给多个受托节点的选票有效的见证人节点发放记账激励。

本发明实施例中,选出多个受托节点并且发放投票激励后,多个受托节点中任一受托节点都可以生成区块,每当一个区块生成后,均需要区块链进行区块共识,并且受托节点是按照一定的顺序轮流生成区块。

为了将受托节点的选举次数控制在合理范围,因此多个受托节点中的每个受托节点均需要生成第二预设数量个区块,当所有的受托节点各自生成第二预设数量个区块之后,区块链就开始新一轮的受托节点选出。

假设受托节点有6个,第二预设数量为5,那么就是这6个受托节点每一个都需要生成5个区块,一共生成30个区块后,再开始新一轮的受托节点选出。这样做是为了保证区块链的公平,因为区块链中见证人节点的数量可能会发生变化,每个见证人节点的票数也会发生变化,因此需要在满足条件后,需要重新选出受托节点。所以在所有的受托节点各自生成第二预设数量个区块之后,执行步骤:多个见证人节点中每个见证人节点根据自身接收到的选票,进行投票,以在多个见证人节点中选出多个受托节点。

而在每一个受托节点生成区块并且区块共识成功后,均需要对投票给多个受托节点的选票有效的见证人节点发放记账激励,该步骤具体包括:

步骤D1:在多个受托节点中任一受托节点生成区块,且区块共识成功后,发放总记账激励;

步骤D2:基于博弈论中的Banzhaf权利指数,确定每个选票有效的见证人节点对应的权利指数;

步骤D3:根据每个选票有效的见证人节点对应的权利指数,以及总记账激励,计算得到每个选票有效的见证人节点应得的记账激励。

本发明实施例中,由于目前的DPoS共识算法中,只有受托节点才有记账激励,而本发明中却是对每个选票有效的见证人节点都发放记账激励,如何更好,更公平的分配这个记账激励,是一个很难解决的问题。发明人经过大量的研究以及实际测试,创造性发现DPoS共识算法与博弈论的相似之处,引入博弈论的相关知识,在发放的总记账激励的基础上,基于博弈论中的Banzhaf权利指数,确定每个选票有效的见证人节点对应的权利指数,最后根据每个选票有效的见证人节点对应的权利指数,以及总记账激励,计算得到每个选票有效的见证人节点应得的记账激励。

具体的,所谓博弈论,是研究指多个决策主体之间行为具有相互作用时,各主体根据所掌握的信息作出有利于自己决策的理论。博弈的基本要素有行动顺序、局中人、效用、均衡。局中人是指参与博弈作出决策的人,效用是在博弈过程中获得的收益,行动顺序是指局中人采取的决策顺序,根据纳什博弈最终会达到一个均衡稳定的状态。在博弈论中局中人是否与其他局中人以形成同盟的方式进行博弈称为合作博弈和非合作博弈。

基于这个理论,发明人进一步研究发现,在DPoS共识算法中,将每个投票的见证人节点视作局中人,见证人节点因投票获得的收益可以看做为效用,每个见证人节点采取的不同投票策略看做为行动顺序,那么能够看出整个区块链共识过程就符合了博弈论的特征。而见证人节点将自己的选票投给受托节点,进而与其他见证人节点竞争记账权的行为可以看做是一种合作博弈。基于上述研究发现,进一步基于合作博弈中的Banzhaf权利指数,就可以对记账激励进行再次分配。

所谓Banzhaf权利指数是用来定量分析投票者在一次投票中的重要程度的指数,投票者在联盟中越重要,其权利指数越大。在联盟博弈中,若某个投票者在加入一个联盟后能使原本没有获胜机率的联盟获胜,或它在退出联盟后能使原本获胜的联盟无法取胜,那么这些联盟可以看做这个投票者的有效联盟[19]。对于每个投票者而言,其有效联盟越多,它拥有的投票权也就越大。对于一个联盟博弈(N,V)来说,若局中人投票权重可用向量β={β

其中N={1,2,…,n}表示见证人节点集合,V:2N→R为效用函数,并且K∈N,v(K)表示存在节点i时的联盟收益。v(K\{i})表示当i不存在于联盟中时的收益。2

例如:某个选票有效的见证人节点可以决定10个候选节点一定成为受托节点,那么该选票有效的见证人节点的效联盟数为10,假若所有选票有效的见证人节点的有效联盟的总和为120,那么该选票有效的见证人节点的权利指数为10/120=0.08333。该选票有效的见证人节点的记账激励=0.08333*总记账激励。

基于上述委托权益证明算法的区块链共识方法,参照图2,示出了本发明实施例一种基于委托权益证明算法的区块链共识装置的框图,所述区块链系统包括:多个见证人节点;所述装置包括:

选出受托节点模块210,用于所述多个见证人节点中每个见证人节点根据自身接收到的选票,进行投票,以在所述多个见证人节点中选出多个受托节点;

发放投票激励模块220,用于对投票给所述多个受托节点的选票有效的见证人节点发放投票激励;

发放记账激励模块230,用于在所述多个受托节点中任一受托节点生成区块,且生成的区块共识成功后,对投票给所述多个受托节点的选票有效的见证人节点发放记账激励;

其中,所述选票包括:见证人节点的币龄、见证人节点的保证金以及见证人节点的历史共识信息,所述历史共识信息包括:见证人节点参与成功的共识次数和失败的共识次数。

可选地,所述选出受托节点模块包括:

计算选票单元,用于所述每个见证人节点根据自身的币龄、保证金以及历史共识信息,计算得到自身的选票、并广播自身的选票至其余见证人节点;

选票排序单元,用于所述每个见证人节点在预设时间内根据已接收到的其它见证人节点的选票,以及自身的选票,按照选票的数值大小进行排序;

投候选节点单元,用于所述每个见证人节点选取最高选票数值对应的见证人节点为候选节点,将自身的选票投给该候选节点,并广播所述候选节点的信息;

校验统计排序单元,用于对所有候选节点中每个候选节点的选票进行校验、统计,依照其拥有的校验正确的选票的数值大小进行排序;

选取受托节点单元,用于选取排序靠前的第一预设数量的候选节点作为所述多个受托节点。

可选地,所述发放投票激励模块用于对每个受托节点中选票有效的见证人节点发放投票激励,具体包括:

计算总和合单元,用于计算该受托节点中所有选票有效的见证人节点的保证金总和;

计算占比单元,用于计算该受托节点中每个选票有效的见证人节点的保证金各自的占比;

计算投票激励单元,用于根据每个选票有效的见证人节点的保证金各自的占比,和每个选票有效的见证人节点的历史共识信息,计算得到每个选票有效的见证人节点的投票激励。

可选地,所述发放记账激励模块包括:

发放总激励单元,用于在所述多个受托节点中任一受托节点生成区块,且所述区块共识成功后,发放总记账激励;

确定权利指数单元,用于基于博弈论中的Banzhaf权利指数,确定每个选票有效的见证人节点对应的权利指数;

计算记账激励单元,用于根据每个选票有效的见证人节点对应的权利指数,以及所述总记账激励,计算得到每个选票有效的见证人节点应得的记账激励。

可选地,所述校验统计排序单元具体用于:

对所有候选节点中每个候选节点的每张选票进行校验;

对校验正确的选票进行数值统计,并依照校验正确的选票的数值大小进行排序;

对校验不正确的选票,确定发出该选票的见证人节点的选票无效,并罚没发出该选票的见证人节点的保证金。

可选地,所述计算选票单元具体用于:

所述每个见证人节点计算自身的币龄与第一权重的乘积得到修正币龄;

所述每个见证人节点计算自身的保证金与第二权重的乘积得到修正保证金;

所述每个见证人节点计算自身的历史共识信息与第三权重的乘积得到修正历史共识信息;

所述每个见证人节点计算所述修正币龄、所述修正保证金以及所述修正历史共识信息的和值,得到自身的选票,并广播自身的选票至其余见证人节点;

其中,所述每个见证人节点的历史共识信息的数值大小,随着其参与成功的共识次数的增长而变大,随着其参与失败的共识次数的增长而变小。

以下为了验证本发明方法的可靠性。利用多线程的方式来模拟见证人节点的共识行为,每个见证人节点用一个线程模拟,共模拟了120个见证人节点。通过实验对比本发明提出的方法与目前DPoS算法在见证人节点收益、见证人节点参与度、以及剔除错误见证人节点等方面的表现。实验环境如下表所示:

为了检验本发明的投票选出受托节点的方法,在区块链系统中存在30%的错误见证人节点时,经过多轮共识能否将这些错误见证人节点的剔除掉。设置实验条件如下:开始时各见证人节点拥有相同的币龄,在实验开始后逐渐使一部分见证人节点参与无效投票或产生错误区块,通过这种方式来模拟区块链系统中的作恶节点。在经过几轮共识后,系统中的各见证人节点的状态会不尽相同,从而各见证人节点的选票权重产生差异。

如图3所示为经过50轮投票后的正常见证人节点的结果对照图。图3中横轴为实验次数,纵轴为正常见证人节点占比(%),黑色条柱表示本发明的方法经过50轮投票后的正常见证人节点的占比,灰色条柱表示DPoS算法经过50轮投票后的正常见证人节点的占比。

由此可知,在实验轮数较少时,本发明的方法和DPoS算法错误见证人节点的比例相差不大。当实验进行到10轮时二者之间的差异开始凸显,当实验进行到35轮时本发明的方法中的错误见证人节点比例与原始算法已经拉开差距并保持稳定,而DPoS算法的错误节点比例呈上下波动状态。分析原因可知当一些见证人节点参与一些错误共识后,系统会记录下它的投票信息,本发明的方法会根据这些记录在计票时对这些见证人节点的投票权重进行调整,从而降低这些见证人节点成为受托节点的概率。而DPoS算法由于只对节点的币龄信息进行统计,并不能很好的减小错误见证人节点投票的权重。因此能够得出结论:本发明的方法能够加快区块链系统对异常见证人节点的筛选,降低异常见证人节点成为受托节点的概率。

针对见证人节点参与度,DPoS算法存在投票见证人节点积极性不高的问题,为了验证本发明的方法能否增加见证人节点的活跃度。本实验在各见证人节点初始币龄一致的情况下进行了50轮共识,并统计了各轮次参与投票的见证人节点数量,结果如图4所示。

图4中,横轴表示实验次数,纵轴表示见证人节点参与投票的数量;由黑方框加实线构成的曲线为本发明的方法下见证人节点参与投票数量的曲线,有黑圆形加实线构成的曲线为DPoS算法下见证人节点参与投票数量的曲线。DPoS算法在进行多轮共识时,其参与投票的见证人节点数大致稳定在65%左右。而本发明的方法,由于对参与投票的见证人节点有相应的投票激励,以及在投票后它的受托节点成功完成共识后,还会有相应的记账激励,因此本发明的方法下见证人节点的活跃度大约维持在80%左右,见证人节点的参与度要显著高于DPoS算法。本发明的方法对于提升区块链系统活跃度是有效的。

针对时延,是指从开始投票到生成区块的时间消耗。因此算法的时延能够直接反应出算法的真实性能,时间消耗越少,算法性能越高。在相同条件下进行50轮实验,得到了时延对比图,结构如图5所示。

图5中,横轴表示实验次数,纵轴表示时间消耗(s);由黑方框加实线构成的曲线为本发明的方法下时间消耗的曲线,有黑圆形加实线构成的曲线为DPoS算法下时间消耗的曲线。随着实验次数的增加,两种算法的时间消耗都呈增长趋势,但是本发明的方法时间消耗增长趋势相对缓慢。因此能够表明在时延上,本发明的方法相较于DPoS算法的改进是有效的。

通过上述实施例,本发明首先选出多个受托节点,之后就对选票有效的见证人节点发放投票激励,这样就提高了见证人节点的参与度。而选票中不再仅仅依据币龄这一个条件,而是加入了保证金和历史共识信息,降低了币龄的重要性,有效的剔除了错误见证人节点。另外,在区块共识完成后,再给选票有效的见证人节点发放记账激励,不再是只给受托节点发放记账激励,避免出现区块链系统中心化的趋势,解决了目前DPoS算法存在的问题,具有较高的实用性。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

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

上面结合附图对本发明的实施例进行了描述,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号