[发明专利]一种基于可验证随机函数的分片共识方法有效
| 申请号: | 202110573395.4 | 申请日: | 2021-05-25 |
| 公开(公告)号: | CN113422805B | 公开(公告)日: | 2023-04-07 |
| 发明(设计)人: | 李峰;薛惠丹;潘雨青;李一元 | 申请(专利权)人: | 江苏大学 |
| 主分类号: | H04L67/1042 | 分类号: | H04L67/1042;H04L9/40;H04L9/32;G06Q40/04 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 212013 *** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 验证 随机 函数 分片 共识 方法 | ||
1.一种基于可验证随机函数的分片共识方法,其特征在于,包括如下步骤:
1)初始化服务群组,构建并初始化节点信息注册表;所述节点信息注册表,用于记录申请入网的节点信息;
2)初始化节点参数,所述节点参数包括权益信息STAKE_INFO、权值WEIGHT、状态位STATUS_BIT、积分值INTEGRAL、错误计数ERROR_COUNT、节点类别NODE_CATE和节点等级NODE_LEVEL;
3)节点向服务群组申请进网注册,构建区块链网络;
4)选举目录委员会成员;
5)节点进行网络分片;
6)同时选举每个分片的普通委员会成员;
7)选举领导者;
8)普通委员会内部共识;
9)判断共识是否结束,如果共识未结束,进入下一时期,进行委员会重配置,转步骤4),开始新一时期的委员会共识流程,否则整个共识流程结束;
所述步骤3)中节点向服务群组申请进网注册,构建区块链网络,包括如下步骤:
3.1)节点将权益信息STAKE_INFO和IP地址打包成进网注册信息包RI并发送给服务群组;记服务群组收到的最早到达的RI对应的节点为当前节点;
3.2)服务群组根据当前节点的权益信息STAKE_INFO是否符合行业要求对当前节点进行资格审查;如果审查通过,转步骤3.3),否则转步骤3.4);
3.3)服务群组根据节点IP地址生成32位编码的数字身份UID;将数字身份UID、WEIGHT值和数字证书STAKE_INFO_CERT加入节点信息注册表中该节点对应的表项;同时向节点发送“允许进网”的通知,其中,所述“允许进网”通知包括数字身份UID、WEIGHT值、数字证书STAKE_INFO_CERT;转步骤3.6);
3.4)服务群组向节点发送“拒绝进网”通知,并要求该节点重新提供权益信息STAKE_INFO;同时服务群组将节点信息注册表中该节点对应的表项的未通过次数FAIL_COUNT加1,转下一步;
3.5)判断FAIL_COUNT是否小于α:如果FAIL_COUNT<α,转步骤3.1);否则服务群组将节点信息注册表中该节点对应的表项的节点黑名单标识IS_BLACKLIST置真,取服务群组收到的下一个到达的RI对应的节点为当前节点,转步骤3.2);其中,具体实施中,取α为10;
3.6)节点收到进网通知后,将通知中UID、STAKE_INFO_CERT和WEIGHT值在本地储存,用RSA算法生成密钥对(pk,sk),并将STATUS_BIT设置为正常状态;
3.7)当有N个节点通过服务群组审查,将此N个节点作为参与共识的节点,构建区块链网络,转步骤4);否则取服务群组收到的下一个到达的RI对应的节点为当前节点,转步骤3.2);
所述步骤4)中选举目录委员会成员,包括如下步骤:
4.1)每个节点分别计算目录票据值cata_value,计算公式如下:
其中,uid表示节点数字身份UID;v表示视图;e表示时期,协议以时期为单位运行;VRF(·)表示可验证随机函数;catalog代表选举的为目录委员会成员;ξe-1代表上一时期产生的随机数,最初的随机数ξ0由协议给定;weight为节点向服务群组申请进网注册中获取的WEIGHT值;sk为节点自身的私钥,表示节点uid使用自身私钥sk对VRF(·)进行签名;
4.2)每个节点根据目录票据值cata_value进行哈希计算生成目录随机数rand_cata_valueuid;v;e;计算公式如下:
rand_cata_valueuid;v;e=H(cata_valueuid;v;e),
其中,H(·)为哈希函数;
4.3)选择目录委员会成员备选,即最快满足rand_cata_valueuid;v;e≤pι的节点为目录委员会成员备选,其中pι为难度系数;并将该节点设为当前节点;
4.4)当前节点在本地缓存中建立并保存目录委员会列表DC_LIST,将节点信息添加入表DC_LIST中,并将DC_LIST、节点数字身份UID和节点IP地址打包成消息向全网广播;
4.5)其他节点收到目录委员会成员备选节点广播的消息后,将消息中数字身份UID向服务群组进行验证,所述验证方法为:节点向服务群组获取消息中节点IP地址对应的数字身份UID,将消息中的数字身份UID与从服务群组获取到的UID进行对比,判断是否相等,若两者相等,表示验证通过,节点将在本地保存目录委员会列表DC_LIST,并向目录委员会成员备选返回“验证通过”的消息,若两者不相等,表示验证未通过,将不返回任何消息;
4.6)判断目录委员会成员备选是否为目录委员会成员,所述判断方法为:若时间δ内,目录委员会成员备选收到N-f条“验证通过”的消息,f为拜占庭节点数量,将该节点的节点类别NODE_CATE设置为目录委员会成员,增加该节点的权值WEIGHT和积分值INTEGRAL,在本地建立并保存节点身份关系映射表NIRM_TABLE,并将目录委员会列表DC_LIST中本节点信息添加入该表中;转步骤5);否则减少该节点积分值INTEGRAL;依据时间顺序选择下一个计算出满足公式rand_cata_valueuid;v;e≤pι的节点,把该节点选中为目录委员会成员备选,并设为当前节点,转步骤4.4),直至选举出目录委员会成员;
所述步骤5)中节点进行网络分片,包括如下步骤:
5.1)每个非目录委员会成员设定节点等级NODE_LEVEL,并打包成消息Level_info发送给目录委员会成员;所述节点等级NODE_LEVEL的设定方法是:权值WEIGHT满足weight<α0的节点等级NODE_LEVEL为level0;WEIGHT值满足αi-1≤weightαi的节点等级NODE_LEVEL为level(i),其中0<i≤n-2;WEIGHT值满足αn-2≤weight的节点等级NODE_LEVEL为level(n-1);所述消息Level_info包括节点IP地址、数字身份UID和节点等级NODE_LEVEL;
5.2)目录委员会成员收集非目录委员会成员节点返回的消息Level_info,把消息内容添加到节点身份关系映射表NIRM_TABLE中;
5.3)判断时间δ内,目录委员会成员收集到的消息个数是否满足n(w+1)≤λ≤N-1且每一等级NODE_LEVEL的节点个数是否大于等于β,如果满足得到n个网络分片的节点身份关系映射表NIRM_TABLE,然后将该表进行全网广播,转步骤5.4);否则将目录委员会成员收集非目录委员会成员节点返回消息的时间间隔δ设定为δ+δ',转步骤5.2);其中,n为分片数量,λ为消息个数,w为普通委员会成员个数;具体实施中,取β为4;
5.4)每个节点在接收到节点身份关系映射表NIRM_TABLE后,在本地保存该表;并按表中节点IP地址进行相互通信来进行组网,完成网络分片;
所述步骤6)中选举分片的普通委员会成员,包括如下步骤:
6.1)计算分片内每个节点的普通票据值nor_value,计算公式如下:
其中,normal代表选举的为普通委员会成员;
6.2)利用哈希计算生成每个节点的普通随机数rand_nor_valueuid;v;e,计算公式如下:
rand_nor_valueuid;v;e=H(nor_valueuid;v;e);
6.3)选择普通委员会成员备选,即最快满足rand_nor_valueuid;v;e≤pD的节点为普通委员会成员备选,其中pD为难度系数;并将该节点设为当前节点;
6.4)当前节点将数字身份UID和节点IP地址打包成普通委员会成员选举消息向全网广播;
6.5)其他节点收到普通委员会成员备选广播的消息后,分别将消息中数字身份UID向服务群组进行验证,所述验证方法为:节点向服务群组获取消息中节点IP地址对应的数字身份UID,将消息中的数字身份UID与从服务群组获取到的UID进行对比,判断是否相等,若两者相等,表示验证通过,节点将向普通委员会成员备选返回“验证通过”的消息,否则,验证未通过,将不返回任何消息;
6.6)判断普通委员会成员备选是否为普通委员会成员,如果是普通委员会成员转步骤6.7),否则转步骤6.9);其中,判断方法为:时间δ内,如果当前节点收到N-f条“验证通过”的消息,则当前节点是普通委员会成员;否则,当前节点不是普通委员会成员;f为恶意节点数量;
6.7)将当前节点的节点类别NODE_CATE设置为普通委员会成员,增加该节点的权值WEIGHT和节点积分值INTEGRAL,同时,将该节点的IP地址、数字身份UID和节点类别NODE_CATE发送给目录委员会成员;
6.8)判断普通委员会成员数量是否达到w个,如果达到,转步骤6.10);否则,取下一个满足rand_nor_valueuid;v;e≤pD条件的节点为普通委员会成员备选,并设为当前节点,转步骤6.4);
6.9)减少当前节点积分值INTEGRAL;取下一个满足rand_nor_valueuid;v;e≤pD条件的节点为普通委员会成员备选,并设为当前节点,转步骤6.4);
6.10)每个委员会成员向目录委员会成员发送数字身份UID、节点等级NODE_LEVEL和节点类别NODE_CATE;
6.11)目录委员会成员收到来自普通委员会的信息,更新节点身份关系映射表NIRM_TABLE;
所述步骤7)中选举领导者包括如下步骤:
7.1)从时期e=0为开始,计算每个普通委员会成员的票据值ticketuid;e;v,计算公式为:
其中,代表可验证随机函数,leader为VRF的附加输入,表示本次计算的目的是选择领导者,{U1,...,Uw}e代表时期e内的w个普通委员会成员,v代表视图编号,uid表示节点数字身份UID;
7.2)选出ticketuid;e;v值最高的节点作为领导者备选;
7.3)领导者备选启动可验证随机函数VRF的生成算法,生成本轮随机数ξr,并向普通委员会内所有成员进行广播;
7.4)普通委员会成员收到消息后通过可验证随机函数VRF中的验证算法验证随机数ξr是否生成正确,若生成正确,返回证明凭证,转下一步;否则,不返回任何消息,转下一步;
7.5)领导者备选判断其是否可以成为领导者,所述判断方法为:在时间δ内,若领导者备选收集到N-f个证明凭证,则当选为领导者,增加该节点积分值INTEGRAL,在时期e的genesis block区块中保存本时期的随机数为ξr,跳转步骤8);否则视本轮领导者选举失败,减少积分值INTEGRAL,并将错误计数ERROR_COUNT加1,同时,令视图编号v=v+1,转7.1),开始新一轮领导者选举,直到领导者选举成功;
所述步骤8)中普通委员会内部共识,包括如下步骤:
8.1)委员会内成员收集交易,构建待打包出块的交易列表TL,每个节点收集交易数据,放到自身的交易缓冲区中,每一轮共识运行前,节点取出缓冲区中的前S个交易,组成待打包出块的交易列表TL;
8.2)leader节点向分片内replica节点发送出块者提案并取得共识;所述Leader为领导者节点和replica为副本节点,普通委员会内除leader节点外的所有节点都可以作为副本节点;
所述步骤8.2)中共识过程包括如下步骤:
8.2.1)从视图编号v=0开始,分别计算每个replica节点的value值,生成仲裁凭证AC(Arbitration Certificate)和准备凭证PC(Prepare Certificate);并将value、AC和PC打包成新视图消息发送给leader节点;其中,所述value值计算公式如下:
AC关联视图信息,表明该视图是否获得了足够多副本的认可;
8.2.2)leader节点在接收到N-f个新视图消息后,从编号最大的视图v所对应的节点中,随机选择一个节点设为当前节点;
8.2.3)比较当前节点的视图编号与leader节点所在的视图编号是否相差1并且当前节点新视图消息中的value值是否满足valueuid;e;v≤pτ条件,其中pτ为难度系数,如果同时满足以上两个条件,当前节点是候选出块者节点,转步骤8.2.4);否则,当前节点不是候选出块者节点,转步骤8.2.4);
8.2.4)判断视图v所对应的所有节点是否比较结束,如果结束转步骤8.2.5),否则,从视图v所对应的节点中,重新随机选择一个不同节点设为当前节点,转步骤8.2.3);
8.2.5)leader节点根据候选出块者节点生成提案listProposal,即候选出块者节点列表;
8.2.6)leader节点将视图编号最大的仲裁凭证AC记为highAC,然后将listProposal、highAC封装为prepare类型的消息MSG(PREPARE,listProposal,highAC)发送给replica节点;
8.2.7)replica节点对收到的prepare类型消息进行安全性检测校验,并进行listProposal提案投票并向leader节点返回投票信息voteMSG(PREPARE,m.node,curView),其中m.node为listProposal提案投票结果;同时将本地的prepareAC赋值为highAC,即最近的视图信息;
8.2.8)leader节点收集replica节点的回复消息,当leader收到N-f个当前提案的投票时,将它们合并为prepareAC(v),并封装commit消息MSG(COMMIT,prepareAC(v))向全网广播,转步骤8.2.9),否则,转步骤8.2.6);
8.2.9)replica节点收到commit消息并向leader节点发送对commit的投票消息voteMS(GCOMMIT,m.node,curVi;
8.2.10)当leader节点收到N-f个commit的选票时,将收到的选票合并成一个commitAC(v);然后leader节点整合commitAC(v)中的投票信息,选出出块节点,并向该节点发送可以出块的消息,转步骤8.2.11);否则,转步骤8.2.9);
8.2.11)出块节点将交易列表TL打包出块,并成功上链,在本地中记录区块BN并发送给leader节点;
8.2.12)leader节点封装decide消息MSG(DECIDE,commitAC(v))将其发送给replica节点;
8.2.13)replica节点在收到decide消息时,将commitAC中包含的提案视图视为已提交的决策,并在本地增加新节点信息,然后增加viewNumber,令v=v+1,并启动下一个视图,重复步骤8),直到下一时期。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江苏大学,未经江苏大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110573395.4/1.html,转载请声明来源钻瓜专利网。





