一种基于区块链共识推举记账者的方法
文献发布时间:2023-06-19 12:24:27
技术领域
本发明基于区块链技术领域,尤其涉及一种基于区块链共识推举记账者的方法。
背景技术
区块链共识机制是区块之间传递信息建立信任的桥梁;区块链技术是一种分布式账本技术,区块链记账不依靠单一的中心服务器,而是建立一个一个新区块进行记账的,在记账过程中一个区块记账权的决定和数据的写入都是区块链共识的过程。
区块链主要的共识机制包括:工作量证明(Proof ofWork)、权益证明(Proof ofstake)和委托权益证明(DelegatedProof-of-Stake),它们的共同特点是在一轮记账权的争夺时,对于所有的参与争夺记账权的节点都是平等的,不管是已经获得过其他区块的记账权的节点,还是未获得过任何区块记账权的节点;导致了一个节点存在两个甚至两个以上区块记账权的情况。
发明内容
本发明旨在解决和优化上述技术背景中存在的问题。
为此,本发明的目的在于提供一种基于区块链共识推举记账者的方法,具体地,该方法包括:
将参与竞争本轮记账者的节点分为两类:一类是已经获取前面区块的记账权,另一类是未获得过前面任何区块的记账权;
对节点进行编号,编号遵循原则:已存在有其他区块记账权的节点获得新区块记账权的数据占比较小;
随机挑选该轮打包的几组数据,求取这些数据的默克尔根值;
将默克尔根值整数化,根据所得的整数值和预先设定的规则,确定本轮的记账者。
所述节点编号方法为:把两类节点分成两组,即一组是未获得过前面任何区块记账权的节点,另一组是已经获取过前面区块记账权的节点;从第一组中任意挑选一个节点编号为0,然后从第二组中任意挑选一个节点编号为2,再从第一组剩下的节点中任意挑选一个节点编号为3,从第二组剩下的节点中任意挑选一个节点编号为5,依照这种规则进行下去,完成对第一组和第二组节点的交叉编号;形成后一个数字减前一个数字分别等于2和1交替出现的整数数列,具体编号数列为:0、2、3、5、6…k。
所述挑选打包数据的方法为:对本轮打包好的数据根据客户信息进行分组,一个客户数据就是一组数据,然后对各组进行编号,编号为1、2、3…n,随机挑选其中的64个奇数或者64个偶数。
所述默克尔根值整数化的方法为:将默克尔根值中的符号全部去掉,只保持1和0,将该二进制数还原成十进制数A。
所述预先设定的规则为:计算B=Amod(k+2),将得到的B按大小插入节点编号0、2、3、5、6…k中,B所在数列0、2、3、5、6…k位置的左边距离最近的那个数对应的节点就是本轮竞争的获胜者,该节点获得新区块的记账权。
其中,所述在一轮记账结束后包括:在一轮记账结束以后,区块链系统会进入下一轮记账者的挑选的工作;首先区块链系统会对所有竞争记账者的节点进行交叉编号,同时区块链系统会把本轮需要保存的数据进行打包;获得随机挑选数据的默克尔根值,进而获得默克尔根值对应的整数化值,通过预先设定的规则确定本轮获得记账权的节点。
所述对参与竞争的记账者进行分类还包括:区块链系统会根据所有区块记账者的身份标识,确认该区块的记账拥有者;通过本轮竞争的节点的身份标识,判断该节点属于哪一类竞争记账者的参与者。
所述对节点进行编号包括:编号对已存在有其他区块记账权的节点获得新区块记账权的数据占比较小,这个占比可以根据适当情况调整适当的比例,但也不能过大或者过小,在大多数情况下,以已存在有其他区块记账权的节点获得新区块记账权的数据占比是未获得过任何区块记账者节点的一半为准。
所述对节点进行编号还包括:节点编号数列0、2、3、5、6…k是以对两种类型的节点交叉进行编号,形成后一个数字减前一个数字的差分别等于2和1交替出现的整数数列,其中K是节点编号的最大取值。
所述随机挑选其中的64个奇数或者64个偶数包括:从排好的编号1、2、3…n中随机挑选64个奇数或者偶数,挑选方式分为三种:一,从左边向右边挑选;二:从右边向左边挑选;三:从中间开始挑选;挑选的64个数,需保证全奇数或者全偶数。
所述默克尔根值为一种默克尔树数据结构的树根值;所述默克尔树为以基础数据的哈希值为树最底层枝,经过两两结合得到一个新哈希值,直到最底层哈希值计算一遍,得到新的一组哈希值;然后对该组哈希值进行两两结合得到另一组哈希哈希值,这样两两结合,不断更迭,仅剩下一个哈希值,该哈希值就是默克尔树的默克尔根值。
所述将默克尔根值整数化还包括:将默克尔根值整数化的方法可以是任意一种哈希值化整的方法,但整数化后的数值不能太小。
所述确定记账者后还包括:区块链系统将该节点成为新区块的记账者广播到其他区块,其他区块对该信息进行保存,并达成共识,允许该节点将该轮打包的数据信息写入新生成的区块;写入信息,把写入的信息传入其他区块,该轮结束,区块链进入下一轮挑选记账者的流程。
本发明的有益效果:提供了一种区块链共识选取记账者的方法,该方法增加了区块记账权在节点的覆盖速度,减少了一个节点获得多个区块记账权的概率。
附图说明
图1为本发明推举方法流程图。
图2为本发明节点编号顺序图。
图3为本发明数据的默克尔树结构图。
具体实施方式
为了进一步说明本发明的上述目的、特征和优点,下面将结合附图和具体实施方式对本发明进行进一步的详细说明。
如图1所示,本发明的推举方法的流程图,包括如下步骤:S100,将参与竞争本轮记账者的节点分为两类:一类是未获得过前面任何区块的记账权的节点,另一类是已经获取前面区块的记账权的节点;S101,对节点进行编号,编号遵循原则:已存在有其他区块记账权的节点获得新区块记账权的数据占比较小;S102,随机挑选该轮打包的几组数据,求取这些数据的默克尔根值;S103,将默克尔根值整数化,根据所得的整数值和预先设定的规则,确定本轮的记账者。
步骤S100,将参与竞争本轮记账者的节点分为两类:一类是未获得过前面任何区块的记账权的节点,另一类是已经获取前面区块的记账权的节点,包括:在一轮记账结束以后,区块链系统会进入下一轮记账者的挑选的工作;记账者挑选方法按照上述给出的流程:首先区块链系统会对所有竞争记账者的节点进行交叉编号,同时区块链系统会把本轮需要保存的数据进行打包;获得随机挑选数据的默克尔根值,进而获得默克尔根值对应的整数化值,通过预先设定的规则确定本轮获得记账权的节点。
具体地,还包括:区块链系统会根据所有区块记账者的身份标识,确认该区块的记账拥有者;通过本轮竞争的节点的身份标识,判断该节点属于哪一类竞争记账者的参与者;通过身份标识把该轮参与竞争记账者的节点分成两类,一类是在前面区块记账权的竞争过程中,未获得过任何区块记账权的节点;另一类是在前面区块记账权的竞争过程中,已经获得过其他区块记账权的节点。
优选地,把上述两类节点按照类型分成两组,第一组为第一类节点:在前面区块记账权的竞争中,未获得过任何区块记账权的节点;第二组为第二类节点:在前面区块记账权的竞争过程中,已经获得过其他区块记账权的节点。
步骤S101,对节点进行编号,编号遵循原则:已存在有其他区块记账权的节点获得新区块记账权的数据占比较小,具体地,包括:编号对已存在有其他区块记账权的节点获得新区块记账权的数据占比较小,这个占比可以根据适当情况调整适当的比例,但也不能过大或者过小,在大多数情况下,以已存在有其他区块记账权的节点获得新区块记账权的数据占比是未获得过任何区块记账者节点的一半为准。
优选地,具体编号细节为:从第一组分组节点中选出一个节点做上标记,标记编号为0;从第二组分组节点中选出一个节点做上标记,标记编号为2,与前一个编号差为2;然后从第一组分组节点中随机挑选剩下的节点做上标记,标记编号为3,与前一个编号差为1;从第二组分组节点中随机选出剩下的一个节点做上标记,标记编号为5,与前一个编号差为2;接着从第一组分组节点中随机选出剩下的一个节点做上标记,标记编号为6,与前一个编号差为1;依照此方法,不断交叉从第一组和第二组节点中取出未取出过的节点,按照出现第一组节点,则其编号与前一个节点编号差为1,出现第二组节点,则其编号与前一个节点编号差为2;依照此规律,不断抽取节点,对其进行编号。
优选地,具体编号细节还包括:大多数时候第一组节点数量和第二组节点数量是不相同的;当节点数量不同时,按照上述规律,将节点数量少的一组节点数量编号完以后,则对剩下的节点数量多的一组进行编号;编号规律为:当只剩下第一组节点时,则剩下的编号,前后编号差均为2;当只剩下第二组节点是,则剩下的编号,前后编号差均为1。
优选地,最终的编号数列为:0、2、3、5、6…k;其中K为所有节点按照上述方法进行编号以后的最大值。
优选地,编号的第二种表述方法为:如图2为本发明节点编号顺序图,该图表示了编号的具体细节和表示方法;其中,第一组节点1、节点2和节点a分别表示在第一组中第一次、第二次和第a次随机取出的节点;第二组节点1、节点2和节点a分别表示在第二组中第一次、第二次和第a次随机取出的节点;编号0、编号2、编号3、编号5、编号3(a-1)、编号3a-1和编号k分别表示各节点所对应的编号;根据图示可以看出,当第一组第a次随机挑选一个节点时,则该节点的编号为3(a-1);当第二组第a次随机挑选一个节点时,则该节点的编号为3a-1;最终形成的编号序列为:0、2、3、5…3(a-1)、3a-1…k,可以简写为0、2、3、5、6…k。
步骤S102,随机挑选该轮打包的几组数据,求取这些数据的默克尔根值,具体地,包括:对本轮打包好的数据根据客户信息进行分组,一个客户数据就是一组数据,然后对各组进行编号,编号为1、2、3…n,随机挑选其中的64个奇数或者64个偶数。
优选地,对用户发送的信息,按客户数据条数进行分组,一条数据就是一组,假如打包的数据信息一共为10000条,则分成10000组;则对这10000组数据进行编号,编号序列为1、2、3…10000,按照该方案,则如果一共有n组数据,则编号序列为1、2、3…n。
优选地,还包括:对打包的数据进行编号以后,随机挑选其中编号为64个奇数或者64个偶数,然后用挑选出的编号所对应的数据合成默克尔根值。
优选地,在从编号序列1、2、3…n中挑选64个奇数或者64个偶数,可以选择任何挑选的方式,可以从左边往右边挑选或者从右边往左边挑选,也可以从中间随机挑选64个全奇或者全偶的编号。
默克尔根值是哈希散列值,是一种具有默克尔树数据结构的树根值;如图3所示为挑选出的数据合成默克尔根值的结构图;该图中数据1、数据2、数据3…数据64为挑选出的64组数据;h
步骤S103,将默克尔根值整数化,根据所得的整数值和预先设定的规则,确定本轮的记账者,具体地,包括:将默克尔根值整数化的方法可以是任意一种哈希值化整的方法,但整数化后的数值不能太小,整数化后的值要大于步骤S101中的k。
优选地,将默克尔根值中的符号全部去掉,只保持1和0,将该二进制数还原成十进制数A(k<A≤2
优选地,所述预先设定的规则为由上述步骤得到的节点编号序列0、2、3、5、6…k,默克尔根值整数化的值A,将k和A带入B=Amod(k+2);把得到的B按大小插入节点编号0、2、3、5、6…k中,B所在数列0、2、3、5、6…k位置的左边距离最近的那个数对应的节点就是本轮竞争的获胜者,该节点获得新区块的记账权。
优选地,若所求得的值B刚好是节点编号序列0、2、3、5、6…k中的某个数,则确定该编号所对应的节点为本轮竞争的获胜者,该节点成为新区块的记账者。
具体地,还包括:区块链系统将该节点成为新区块的记账者广播到其他区块,其他区块对该信息进行保存,并达成共识,允许该节点将该轮打包的数据信息写入新生成的区块;该区块写入信息以后,把信息已经写入的消息反馈到其他区块,该轮结束,区块链进入下一轮挑选记账者的流程。
需要理解,上述实施例为本发明的一个具体实施例,本发明还有其他实施例或者变形;基于本行业的普通技术人员,在没有做出创造性劳动的前提下,对本发明的同等变换、变形和调整均属于本发明的保护范围。
- 一种基于区块链共识推举记账者的方法
- 一种基于区块链联盟链的快速共识记账方法及系统