[发明专利]一种区块链的可扩展共识方法有效
申请号: | 202110774096.7 | 申请日: | 2021-07-08 |
公开(公告)号: | CN113535849B | 公开(公告)日: | 2023-03-07 |
发明(设计)人: | 李若欣;薛瑞尼;王诏贤;宋泽欣;唐大贺;杨中宇 | 申请(专利权)人: | 电子科技大学 |
主分类号: | G06F16/27 | 分类号: | G06F16/27;G06F16/23;G06F16/22;G06F16/2455;G06Q40/04 |
代理公司: | 四川鼎韬律师事务所 51332 | 代理人: | 温利平 |
地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 区块 扩展 共识 方法 | ||
1.一种区块链的可扩展共识方法,其特征在于,包括以下步骤:
(1)、启动DHT-Orderer服务并初始化配置;
启动DHT-Orderer服务,将参与排序的DHT节点通过哈希算法形成一个二进制数组hash_node,每个DHT节点通过hash_node加入到DHT-Orderer的哈希环中;
通过写入配置文件方式对区块推荐容量PreferredSize和区块最大容量PreferredMaxSize、区块容纳交易最大数量MaxMessageCount、区块超时时间BatchTimeout进行初始化;
(2)、定义区块结构并初始化;
区块结构分为:区块头与数据域;区块头又包含PreviousHash、Number、DataHash三个字段,其中,PreviousHash用于记录了当前区块在区块链中的上一个区块的哈希值,初始化为空;区块高度Number用于记录当前区块在区块链中的顺序,初始化为0;DataHash记录了本区块在区块链中的哈希值,初始化为空;数据域用于记录该区块包含的所有的交易消息,初始化为空;
(3)、选举mainNode节点;
通过一致性哈希算法定位DHT环中key=0的后继节点,将该节点选举为主节点mainNode;mainNode节点包含lastBlockHash与blockNum两个字段,其中,lastBlockHash字段赋值为区块链中最后一个区块的哈希值DataHash,blockNum字段赋值为区块链中最后一个区块的区块高度Number;
(4)、消息预处理;
接收从客户端发来的交易消息Tx,先通过过滤器进行过滤处理,将交易消息Tx超过区块最大容量PreferredMaxSize过滤掉,再进入步骤(5);
(5)、交易路由;
经过预处理后的交易消息Tx通过哈希算法映射到由排序节点组成的哈希环,通过查询本地排序节点的路由表,得到该交易的后继节点的地址,如果本地节点未记录后继节点地址,在本地的路由表中找到距离后继节点最近的节点CloseNode,远程连接该节点,再通过迭代方式查询CloseNode的路由表中的后继节点,并记录后继节点地址,再进入步骤(6);
(6)、通过步骤(5)得到的地址,将交易消息Tx转发给相应的排序节点,并对交易消息Tx进行区块打包;
(6.1)、设置缓存pendingBatch,初始化为空;为缓存pendingBatch设置一个计时器timer,初始化为0,当缓存清空时,启动计时器;
(6.2)、定义区块打包法;
将缓存中的所有交易打包并作为返回值写入到区块的数据域,使用哈希算法对区块的数据域输出定长数组,再将该数组的长度值作为当前区块的哈希值,在DataHash字段中进行填充,从而生成包含多条交易消息的一个区块;区块打包完成后,将打包后的区块转发给mainNode;
(6.3)、将预处理后的交易消息Tx通过DHT的一致性哈希算法路由到指定的DHT节点,判断计时器timer的值是否到达预设的超时时间BatchTimeout,如果达到,则按照步骤(6.2)所述方法进行区块打包并转发给mainNode,然后重置计时器,清空缓存,并跳转至步骤(7);否则,进入步骤(6.4);
(6.4)、判断当前的交易Tx的大小messageSize是否大于区块打包的推荐容量PreferredSize,如果messageSize>PreferredSize,则进一步判断缓存是否为空,如果缓存为空,则再按照步骤(6.2)所述方法进行区块打包并转发给mainNode,然后重置计时器,清空缓存,并跳转至步骤(7);如果缓存不为空,则按照步骤(6.2)所述方法将缓存中的所有交易打包为一个区块转发给mainNode,然后重置计时器,清空缓存,并跳转至步骤(7);如果不满足messageSize>PreferredSize,进入步骤(6.5);
(6.5)、判断当前的交易消息Tx的大小messageSize与当前缓存大小pendingBatchSizeBytes之和是否大于最大容量PreferredMaxSize,如果超过了最大容量,则按照步骤(6.2)所述方法进行区块打包并转发给mainNode,然后重置计时器,清空缓存,并跳转至步骤(7);否则,进入步骤(6.6);
(6.6)、将当前的交易消息Tx存放到缓存pendingBatch中,新的缓存大小pendingBatchSizeBytes为未加入当前交易的缓存大小pendingBatchSizeBytes与当前的普通交易Tx的大小messageSizeBytes之和;然后判断缓存中的交易消息Tx的个数是否超过区块容纳交易最大数量MaxMessageCount,如果超过,执行步骤(6.2),按照步骤(6.2)所述方法进行区块打包并转发给mainNode,然后重置计时器,清空缓存,并跳转至步骤(7);
(7)、mainNode依次对接收的区块进行更新;
(7.1)、mainNode节点收到区块后,读取该区块的Number字段和PreviousHash字段,再通过mainNode本地的blockNum和lastBlockHash字段对该区块的区块高度Number与上一个区块的哈希值PreviousHash进行赋值操作,然后进入步骤(7.2);
(7.2)、mainNode更新本地的lastBlockHash和blockNum字段,其中,lastBlockHash更新为该区块的哈希值DataHash,blockNum更为blockNum加1;从而完成该区块的更新操作;
(7.3)、当mainNode收到下一个区块时,循环执行步骤(7.1)-(7.2),直到最后一个区块更新完成,然后进入步骤(8);
(8)、mainNode将更新完毕的区块写入本地账本,最终将分布式独立的区块形成可追溯的区块链。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110774096.7/1.html,转载请声明来源钻瓜专利网。