区块链数据对比及共识方法与流程

文档序号:11921559阅读:371来源:国知局
区块链数据对比及共识方法与流程

本发明涉及互联网数据传输领域,特别地涉及区块链验证技术中的数据对比及共识。



背景技术:

随着网络在人们日常生活中的地位越来越重要,网络上重要信息的安全和防伪需求也非常迫切。区块链技术作为随着比特币一起发展的一种验证防伪技术已得到广泛应用,但目前还存在一些问题如下:

1、在新区块交易数据对比时都需要传送全部哈希值,数据量很大;

2、交易数据传输重复的概率大,自己缺少的数据不能确定地去找下载的来源,效率不高,数据不容易补全,有部分交易有较长的延时;

3、或选一台服务器打包来广播新区块,传播速度慢,反复传输的数据量大,或者要同时比较非常多的服务器来达成共识,达成共识的时间不够快。

4、数据存储还不够灵活。



技术实现要素:

为了克服上述现有技术的不足,本发明提供了一种区块链的数据对比及共识方法,包括: 对于每笔交易内容的哈希值计算,通过变换随机数,使得在一段时间内预设哈希值中的N位数不重复,称为不重复编号,N为正整数;认证服务器比较不同哈希值的所述不重复编号,判断交易是否一致。

进一步地,所述哈希值用16进制表示;

进一步地,所述不重复的N位数可以是前N位、后N位、或任意N位的组合。

进一步地,定义一台或多台服务器作为前置节点,由1台前置节点计算所有的不重复编号,或者设定不重复编号的段号,由多台前置节点分别计算不同段号的不重复编号。

进一步地,通过前置服务器按照获取顺序给每笔交易附加上整数编号,并附上新区块的高度,方便判断交易数据被认证服务器接收的时间先后。

进一步地,利用布隆过滤器检查数据的遗漏情况,通过变换随机数一段时间内生成的哈希值使其在布隆过滤器中不重复。

进一步地,利用布隆过滤器检查数据的遗漏情况的方法具体包括:

步骤S1:根据需要传送的数据量建立布隆过滤器,设计映射函数确保在布隆过滤器上添加所有哈希值后,仍留有一部分空;

步骤S2:通过变换随机数生成的哈希值使其在第一服务器上的布隆过滤器中不会重复,每次在布隆过滤器上添加哈希值时,在二进制位数组上至少有一个位置的1是和这个添加的哈希值唯一对应的。

步骤S3:第二服务器把收到的全部哈希值都添加到布隆过滤器,比较第一服务器第二服务器上的布隆过滤器是否一致,若不一致,就把在第二服务器中添加完数据的布隆过滤器发送到第一服务器。

步骤S4:第一服务器收到第二服务器发来的布隆过滤器,把第一服务器上的所有哈希值继续添加到发来的过滤器上,把所有能填上新的空位的哈希值记录下来,发送到第二服务器。

步骤S5:重复步骤S3和步骤S4,直到第二服务器上的布隆过滤器和第一服务器上的布隆过滤器一致为止。

比较从前置节点服务器A传输到记帐服务器B的数据差异的方法,包括以下步骤:

步骤S1:使用上述布隆过滤器检查数据的遗漏情况的方法,补全遗漏的交易数据;

步骤S2:根据前期实际交易量设计类梅克尔树的层级,设计类梅克尔数节点的容量是2n+1-2,最下层理论上最多可放置交易笔数是2n

进一步地,按最近的交易笔数,考虑历史交易笔数,动态调整每个新的区块的不重复编号的设计容量。

容量调整方案为:若最新一个区块的实际交易笔数超过2n的80%,下一区块的类梅克尔树最下层的设计容量即可增加1倍,为2n+1,若最新一个区块的实际交易笔数小于2n的30%,下一区块的类梅克尔树最下层设计容量即可缩小1倍,为2n-1。

新区块的设计容量是2n,即共有2n的编号可选,前置节点服务器A建立一个2n位数的第一字符串,每位都为0,在产生不重复编号后,把编号和字符串位置对应起来,将相应的位置的0字符串用1代替,2n位字符串位置编号从左到右为0至2n -1;

前置节点服务器B也建立一个2n位的第二字符串,收到传过来的交易数据后,把相应的不重复编号与字符串对应的位置的0用1替换;

服务器B把第二字符串发送到前置节点与第一字符串进行对比,找出不同的字符的位置,该位置编号就是不重复编号,将这些编号的相应数据发送到服务器B即补全了所缺少的数据。

步骤S3:类梅克尔树数据存储用一个数组表示,0至2n+1-2节点存储下层2个哈希值的串联后再哈希的哈希值,2n-1到2n+1-2节点存储按顺序的不重复编号,在类梅克尔数存储数组下标和不重复编号的差是2n -1,没有对应的信息的叶子节点默认为哈希空值;

步骤S4:自下而上逐层计算合并的哈希值,直到算出根节点的哈希值;

步骤S5:向系统选出的共识记账服务器传送类梅克尔树的值;

步骤S6:找到最下层有差异的哈希值,缺失数据的共识记帐服务器向有相关数据的前置节点或其他服务器请求下载数据,若数据与其他服务器不一致,则将数据发送到缺失的服务器进行校验,重新计算出相关的哈希值后再通知共识记账服务器。

步骤S7:重复步骤S4、S5、S6,排除与周围的共识记帐服务器相同率少于20%的交易,重复步骤S4。

步骤S8:选举若干台共识记账服务器,将这几台服务器所有交易的类默克尔树根进行对比,类默克尔树根哈希值一样的最多的服务器生成的区块作为最新的区块,若默克尔树根哈希值都不一样,就随机选一台,其他共识记账服务器对比类默克尔树根哈希值,若一样就作为新的区块,若不一样,就比较类默克尔树,下载不同的交易数据,形成一样的新区块,或直接下载新的区块,最后去掉类默克尔树最层哈希值为空值的节点,重新生成容量更小的区块。

不但本区块链的交易可以形成共识,跨区块链也可以形成共识,跨链数据交换的步骤如下:

步骤S1:相应的区块链监管部门互相授权两条或多条链可以跨区块链交易;

步骤S2:用户在A或B区块链上都开立合法公钥地址帐户;

步骤S3:用户将交易内容用A、B区块链上对应的私钥分别签名;

步骤S4:用户将签名和相应的公钥发送到自己公钥地址帐户所在的区块链,同时发送到交易对手的区块链,或将共同的签名发到两个区块链。

步骤S5:A区块链记帐服务器验证交易A或B的签名后达成共识后写入A区块链最新区块,执行交易并在A区块链上纪录;

步骤S6:B区块链上的多台记账服务器访问A区块链上的历史纪录,若发现有对应的跨链交易信息,则B区块链上相当多台记账服务器达成共识后,在B区块链上执行交易。

与现有技术相比,本发明的区块链的数据对比及共识方法使数据对比需要传送的信息大幅度减少,非常方便地找出遗漏的数据,并能定位请求下载交易数据,灵活的共识方案,可大幅度地缩短各服务器达成共识的时间,跨链交易设计使区块链上的数字货币和数字资产可以真正的跨链转移,就像现金的转移一样,不需要转移中介,有利于区块链在不用领域和地域发挥更大的作用,交易数据可按不重复编号分段校验、打包、存储,可使数据存储采用更多的方案来实现,区块链的发展不会受制于服务器的性能和容量。

附图说明

图1是说明本发明的方法中如何利用不重复编号查补遗漏数据;

图2是说明本发明的方法中如何产生不重复编号;

图3是说明本发明的方法中利用布隆过滤器检查数据的遗漏情况的方法;

图4是说明本发明的方法中跨链交易的实现方法;

图5是说明本发明的方法中如何设计类梅克尔树;

图6是说明本发明的方法中如何通过类梅克尔树来同步异常数据;

图7是说明本发明的方法中如何选举共识服务器来达成共识,形成新的区块。

具体实施方式

本发明提供了一种区块链的数据对比及共识方法,包括:对于每笔交易内容的哈希值计算,通过变换随机数,使得在一段时间内预设哈希值中的N位数不重复,称为不重复编号,N为正整数;记账服务器间比较不同哈希值的所述不重复编号,判断交易是否一致。所述哈希值用16进制表示,另外也可以通过前置服务器来获取按顺序给每笔交易附加上整数编号,并附上新区块的高度,方便判断交易数据被服务器接收的时间先后,对于前面区块的遗漏的交易数据可以单独建组对比。所述不重复的N位数可以是前N位、后N位、或任意N位的组合。区块链系统中可以定义一台或多台服务器作为交易入口,称为前置节点,可以由1台前置节点选取所有的不重复编号,或者由多台前置节点分别选取不同段号的不重复编号。

如果有公钥地址的帐户较多地发送不符合要求的交易哈希值,这里约定发送交易需要一笔超过最小额度的金额,若系统认为是违反交易或安全规则,可以将这金额消失,若帐户的最小余额不够则将不能发起交易,对于较多地发送不符合要求的交易哈希值的服务器,通过一定的监控程序,可以自动或人工手动停止其服务,也可由区块链上CA证书中心来管理,检测服务器监测到违反系统运行规则的公钥地址后(交易账户公钥地址或服务器公钥地址),通知CA证书中心冻结其一些功能,也可写入黑名单。

所有记帐服务期在区块链准备打包前,比特股是每次只选一台服务器做记帐服务期,然后广播给其他服务器,瑞波币是所有记帐服务器都相互比较,把周围服务器的交易哈希值与自己服务器上的交易哈希值对比,若80%的交易哈希值一致,则打包,而这里则可以根据需要选举若干台服务器(1台至全部服务器的组合)作为共识服务器,每台服务器定时统计和其他服务器的通讯性能,并相互交换信息,每台服务器即可根据各服务器通讯性能信息,设计不同的多台服务器组合的共识方案,要排除通讯性能较差的服务器,兼顾一下每台服务器和其他非组合中的其他服务器的通讯性能,目的是使组合的共识服务器打包速度快,传播给其他最新区块的速度快。不同记账服务器(或称共识服务器)若发送交易哈希值进行对比,需要传送大量的数据,比较也耗时间,只要发送不重复编号对比即可,如可以排序后按顺序对比,也可以放到字典map中对比。

实施例1,参照图1:

本实施例说明如何利用不重复编号查补遗漏数据。

利用不重复编号对比数据缺失,这里预估新区块交易笔数在6笔,设置总编号量为2的4次方,以交易哈希值的前两位表示。

这里共有16个编号(0至15)可以选,建立一个16位的全部是“0”的字符串StringA16,在前置节点A服务器选出不重复编号后,把编号和字符串位置一一对应起来,将相应的位置的0字符串用1替换,16位字符串位置编号从左到右为0至15。这里字符串0、4、7、a、d、f位的字符为“1”。

服务器B也和A服务器一样建立一个全是0的16位字符串StringB16,服务器收到A服务器传过来的交易数据后,把相应的不重复编号与字符串对应的位置的0用1替换,这里字符串0、7、a、f位的字符为“1”。

服务器B把StringB16发送到A服务器与StringA16进行对比,找出不同的字符的位置4、d,这位置编号就是交易的不重复编号4、d,将这些编号的相应数据发送到B服务器即补全了服务器B所缺的数据

可以设定不重复编号的段号,分配在不同的前置节点上,比如交易哈希值开始的第一位为3(或用16进制表示段号:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)的所有不重复编号都要到这个前置节点(或几台前置节点集群)上登记,并把相关的交易发送给其他记帐服务器,其他记帐服务器若缺少3开始的不重复编号的交易,在这个前置节点一定能下载到3开始的不重复编号的交易,通过不重复编号的分段发放,既保证不重复编号,也可以分流集中取号的压力。

不同段号的不重复编号的发送和下载可以是分服务器管理的,在新的区块形成过程中,同一段号的交易统一共识和打包也是可行的,并可以建立独立的分段号的类梅克尔树,计算分段号的类梅克尔树根哈希值,最后在把分段号的类梅克尔树根作为叶子节点建立新的类梅克尔树,并生成类梅克尔树根哈希值,作为整个新区块所有交易的哈希值,不同段号的交易会常会出现同一支出地址的情况,记帐服务器要检查累计支付金额不应超过该账户余额,或者设专门的服务器检查同一地址支出的情况,并通知那些打包的服务器,交易哈希值可分段打包,可以在一个记帐服务器上打包和存储一个分段或多个分段,共识打包对比和硬盘存储也可以用不同的服务器来完成。

实施例2,参照附图2:

本实施例说明如何产生不重复编号。

假设分0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f(16进制)号前置云节点给用户取号。

2号节点除了第一位必须是2以外,还规定第二位和第三位不能重复,即16*16=256,即规定每个区块的时候这个节点只能发最多256个不同编号的交易号。

用户可以规定发出去的几笔交易都是钱包的第4笔交易,系统约定每次只能是一笔交易生效,不用担心多付问题。

如用户挑选2号节点发送交易,就生成一批交易的哈希值,把第一位是2的几笔交易发到2号节点,2027—,2245—,2246—,2231—,经2号节点判断,2027、2245、2231已经被其他用户挑选,这里2246是空缺的,前置云节点就把2246—这笔交易发送给记帐服务器了,其他交易删除。

附加区块高度的使记帐服务器可以判断交易数据是本区块期间发出的还是前面区块发出(但还没有写入区块链的交易)。

比如现在新的区块是9891,在前置节点用户的交易数据获得一个附加的区块高度,据此可以放到本区块的本节点的布隆过滤器或类梅克尔树来对比,但小于区块9891标记如区块9890、9889的交易数据(但还没有写入区块链的交易),需要单独放到一组合中与其他记帐服务器去对比,这样可以确保最新区块交易数据在对比过程中不会有编号碰撞的情况。

实施例3,参照图3:

本实施例说明利用布隆过滤器检查数据的遗漏情况,可以通过变换随机数一段时间内生成的哈希值使其在布隆过滤器中不重复,可以使数据从A服务器传输到B服务器后前后比较的误判率降为0(假设数据仅会遗漏,不会有新的数据出现)。

步骤S1:这里要从A服务器要传送共6个哈希值到B服务器,设布隆过滤组位数为16位。

步骤S2:通过变换随机数生成的哈希值使其在A服务器上的布隆过滤器中不会重复,每次在布隆过滤器上添加哈希值时,在二进制位数组上至少有一个位置的1是和这个添加的哈希值唯一对应的,h1、h2、h3、h4、h5、h6共6个哈希值对应不同的位,都是唯一映射的。

步骤S3:B服务器把收到的全部哈希值都添加到布隆过滤器(空的和A服务器上一样),比较A和B两个填上哈希值后的布隆过滤器是否一致,比较结果B上缺少2和d位,把缺的编号发送给A服务器请求下载。

步骤S4:重复步骤S3,直到B服务器上的布隆过滤器和A服务器一致为止。

实施例4,参照图4:

本实施例说明跨链交易是如何实现的,本区块链的交易可以形成共识,跨区块链也可以形成共识,通过区块链的投票权系统或区块链最高权限的CA管理中心可以授权跨区块链传递数字货币或数字资产,甚至可以在两条或多条区块链之间交易,这有利于区块链的行业分工或地域分工,如产权登记、信息存证、电子商务、政务系统、物流、物联网、供应链、交易所、银行清算系统、行业、企业(采购、销售、报销)、央行、交通运输、公用事业支付、医疗系统(方便公费医疗管理)、零钱包(可以将频繁的小额交易独立开来)等,跨链交易的步骤如下:

步骤S1:相应的区块链监管部门互相授权两条(如A和B)或多条链可以跨区块链交易,即允许一条区块链上的数字货币或数字资产可以转移到另一条区块链上。

步骤S2:用户在A或B区块链上都开立合法公钥地址帐户(如通过区块链上CA认证中心认证通过),为安全期间,最好让CA中心将需要跨链交易的本人在不同链上的公钥地址都进行关联签名认证,证明两个不同链上的公钥地址是同一人拥有,并用CA中心所拥有的权限将相关CA证书分别写入A和B区块链。CA中心可以给用户一个随机数签名,只要能用用户公钥解开,就说明用户是该公钥的拥有者,同时可以通过声音、视频或身份证等信息确认用户的真实身份。

步骤S3:交易内容为,用户要将A区块链上的币(如100个)转移到B区块链上,用户将交易内容用A、B区块链上对应的私钥分别签名或依次签名。

步骤S4:用户将签名和相应的公钥发送到自己公钥地址帐户所在的区块链,也可以同时发送到交易对手的区块链,或将共同的签名发到两个区块链。

步骤S5:A区块链记帐服务器验证交易A或B的签名后达成共识后写入A区块链最新区块,将用户A公钥地址上的币(如100个)扣除,在A区块链上纪录“支付给B区块链公钥地址”,这里仅是记录,标记为不能再花费的币。

步骤S6:B区块链上的相当多台记账服务器访问A区块链上的历史纪录,若发现确实有对应的跨链交易信息,已标记为不能再花费的币(如100个),B区块链上相当多台记账服务器达成共识后,同意在B区块链用户公钥地址上增加币(如100个)。

步骤S7:用户将A区块链上的币转移到B区块链上后,就可以直接向在B区块链上的商家(如公交公司)或其他个人支付币。

步骤S8:商家(如公交公司)或其他个人也可以重复S1至S7步骤,将币从B区块链跨链支付到A区块链。

实施例5,参照图5、6:

本实施例说明如何设计类梅克尔树,并如何同步异常数据。

类梅克尔树数据存储用一个数组表示,0至14存储下层2个哈希值的串联后再哈希的哈希值,15开始到30存储按顺序的交易不重复编号,在类梅克尔数存储数组下标和不重复编号他们的差是15,没有对应的信息的叶子节点默认为哈希空值。

A服务器的类梅克尔树自下而上逐层两两串联计算哈希值,如15和16的哈希值串联后哈希的哈希值存在7,3和4的哈希值串联后哈希的哈希值存在1,直到算出根节点的根哈希值。

B服务器收到A的数据后,如同A一样建立类梅克尔树,并一直计算出根节点的根哈希值。

这个类梅克尔树的建立方式和普通的梅克尔树是不一样的,最大的优势是即使哈希值的数量不一样,也不会改变各哈希值在类梅克尔树中的相应的位置,所有的哈希值都是能对号入座的,同一不重复编号的哈希值在不同的服务器上的类梅克尔树上的位置都是一样的。

这里比较A、B两颗类梅克尔树的根哈希值,不一样,比较其子节点,1节点不一致,2节点一致,比较1节点的子节点,3一致,4不一致,比较4节点的子节点,9一致,10不一致,比较10节点下的子节点,21一致,22不一致,22节点对应的不重复编号是7,向A服务器请求下载不重复编号7的哈希值。现在从下往上计算哈希值,把新请求来的不重复编号7的哈希值放到22,把21和22哈希值串联后哈希获得哈希值放入10,把9和10串联合并后哈希的好希值放入4,把3和4串联合并后哈希的好希值放入1,把1和2串联合并后哈希的好希值放入0,对比A和B服务器两颗类梅克尔树的更哈希值为一致,则两边的数据完全一致。

实施例6,参照图7:

本实施例说明如何选举共识服务器来达成共识,形成新的区块。

选举若干台共识记账服务器提供共识服务,将这几台服务器所有交易的类默克尔树根进行对比,类默克尔树根哈希值一样的最多的服务器生成的区块作为最新的区块,若默克尔树根哈希值都不一样,就随机选一台,其他记帐服务期对比类默克尔树根哈希值,若一样就作为新的区块,若不一样,就比较类默克尔树,下载不同的交易数据,形成一样的新区块,或直接下载新的区块,最后也可以去掉类默克尔树最下层哈希值为空值的节点,重新生成容量更小的区块。

最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

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