一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种区块链交易验证方法和系统

2022-08-13 20:57:20 来源:中国专利 TAG:


1.本发明属于计算机技术与信息安全技术领域,涉及一种区块链交易验证方法和系统。


背景技术:

2.区块链交易验证协议使得本地验证者可以验证远程区块链上交易的有效性。flyclient协议是一个适应于存储空间有限的轻客户端的区块链交易验证协议。flyclient协议利用了一种特殊的默克尔树,称为默克尔山脉(merkle mountain range,mmr)来组织区块。对于被验证链中任意第i个位置的区块,将前i-1个区块的区块头作为叶子结点组织成一棵mmr树,其根放入第i个区块的区块头中,这个树根可以看作是对之前所有区块的承诺值。将被验证链中最后一个区块头中包含的树根记作mn,那么每一个区块头到mn的默克尔路径,简称mmr证据,证明了该区块头在链中的正确位置。利用mmr的构造,flyclient协议允许用户在验证远程区块链上交易的有效性时,只需要下载对数个区块头以及这些区块头的mmr证据,从而避免了下载和验证整条区块链所带来的巨大开销。但是在flyclient协议中,证明交易有效性的证据尺寸还是跟远程链的链长有关,随着远程链的增长,证据尺寸变得很大,造成很大的通信和存储开销。


技术实现要素:

3.本发明的一个目的在于对flyclient协议进行改进,提出一种区块链交易验证方法和系统,所述系统使用的协议可称为partitioned-flyclient协议,使得在验证远程链上交易有效性时,降低证据尺寸,减少通信和存储开销。
4.为实现上述目的,本发明采用如下技术方案:
5.一种区块链交易验证方法,包括以下步骤:
6.将区块链中每一证明者维护的证明链c,每间隔len个区块就分隔为一个子段,总共分隔为p个子段c
p
,其中,所述证明链c包括n

个区块,所述n

个区块中的前n个区块对应的证据已被验证者验证,第n 1个区块属于子段ci中,待验证交易包含在第n 1个区块至第n

个区块中的一区块,1<i≤p;
7.针对每一子段cj,通过构建mmr树,获取对同一个子段c
p
中所有区块的承诺值,以及各区块mmr证据,其中,j∈[i,p],i表示第n 1个区块所在的子段c
p
的序号;
[0008]
基于所述承诺值与所述mmr证据,计算所述证明链c的有效性证据;
[0009]
计算所述待验证交易的默克尔路径,并结合所述待验证交易所在区块的区块头与所述mmr证据,生成证明待验证交易的存在性证据;
[0010]
基于所述证明链c的有效性证据与所述待验证交易的存在性证据,计算所述证明链c中待验证交易的有效性证据,并将所述待验证交易的有效性证据发送至验证者,以使所述验证者基于获取各待验证交易的有效性证据,计算所述待验证交易的验证结果。
[0011]
进一步地,所述针对每一子段c
p
,通过构建mmr树,获取对同一个子段c
p
中所有区块
的承诺值,以及各区块mmr证据,包括:
[0012]
对于所述证明链c中第s个位置的区块bs,获取所述区块bs所在的子段c
p

[0013]
在所述子段c
p
中,基于所述区块bs之前的区块,构建区块集合;
[0014]
根据所述区块集合中各区块的区块头,组成一棵mmr树,其中,所述mmr树的根存放在所述区块bs的区块头中,且所述mmr树中第一个叶子结点存放的mmr根设置为空值;
[0015]
基于前一个区块中的mmr根和前一个区块的区块头,可以获取当前区块中的mmr根。
[0016]
基于各个区块所在子段c
p
中最后一个区块中包含的mmr根,获取对c
p
中所有之前区块的承诺值;
[0017]
基于所述承诺值,获取各区块的mmr证据。
[0018]
进一步地,所述mmr证据的尺寸与相应的子段c
p
的长度成对数关系。
[0019]
进一步地,所述基于所述承诺值与所述mmr证据,计算所述证明链c的有效性证据,包括:
[0020]
对于每一子段cj,基于所述承诺值,并利用flyclient协议中证明算法prove(cj,length(cj),c),生成所述子段cj的初始有效性证据πj,其中,length(cj)表示子段cj的长度,c表示敌手节点数目除以诚实节点数目数值;
[0021]
将所述证明链c中第n 1个位置的区块b
n 1
和mmr证据,加入所述子段ci的初始有效性证据,得到所述子段ci的有效性证据π
′i;
[0022]
将所述子段cj的第一个区块的区块头和mmr证据,加入所述子段cj的初始有效性证据,得到所述子段cj的有效性证据π
′j;
[0023]
根据各子段cj的有效性证据π
′j,获取所述证明链c的有效性证据。
[0024]
进一步地,计算所述长度length(cj)的方法,包括:
[0025]
若j=i,则
[0026]
或,
[0027]
若j=p,则
[0028]
或,
[0029]
其它情况,则length(cj)=len。
[0030]
进一步地,所述基于所述证明链c的有效性证据与所述待验证交易的存在性证据,计算所述证明链c中待验证交易的有效性证据,还包括:
[0031]
获取第一个未被验证者验证的区块序号n 1;
[0032]
计算所述证明链c中区块总数与已验证区块数的差值n
’‑
n;
[0033]
将所述区块序号n 1与所述差值n
’‑
n,加入所述证明链c的证据。
[0034]
进一步地,所述验证者基于获取各待验证交易的有效性证据,计算所述待验证交易的验证结果,包括:
[0035]
计算各证明链c的长度,并基于所述长度,获取各证明链c的验证顺序
[0036]
根据验证顺序,选取一证明链c的有效性证据,并验证该证明链c的有效性证据;
[0037]
若所述证明链c的有效性证据验证成功,则验证链c上待验证交易的存在性证据;
[0038]
若所述验证都成功,则认为该证明链c中的待验证交易为有效交易,并中止后续证
明链c的验证,且输出所述验证结果;
[0039]
若所述验证失败,则依据所述验证顺序选取一证明链c,并对该证明链c的有效性证据进行验证。
[0040]
进一步地,所述验证该证明链c的有效性证据,包括:
[0041]
验证证明链c的有效性证据π
′i中区块b
n 1
的区块头指针,是否指向区块bn的区块头;
[0042]
和,
[0043]
验证证明链c的有效性证据π
′k中区块bk·
len 1
的区块头指针,是否指向证明链c的有效性证据π

k-1
中区块bk·
len
的区块头,其中,k∈[i 1,p];
[0044]
和,
[0045]
调用flyclient协议中的验证算法,验证证明链c的有效性证据π
′j的正确性。
[0046]
进一步地,所述验证链c上待验证交易的存在性证据,包括:
[0047]
分别验证包含所述待验证交易的区块b的区块头、所述mmr证据以及所述待验证交易到所述区块b的区块头的默克尔路径是否正确。
[0048]
一种区块链交易验证系统,所述区块链中每一证明者维护的证明链c被分隔为p个子段c
p
,所述证明链c包括n

个区块,所述n

个区块中的前n个区块对应的证据已被验证者验证,待验证交易包含在第n 1个区块至第n

个区块中的一区块,针对每一子段,通过构建mmr树,获取对同一个子段中所有区块的承诺值,以及mmr证据,所述系统包括:
[0049]
证明者节点,用于基于所述承诺值与所述mmr证据,计算所述证明链c的有效性证据;计算所述待验证交易的默克尔路径,并结合所述待验证交易所在区块的区块头与mmr证据,生成交易的存在性证据;基于所述证明链的有效性证据与待验证交易的存在性证据,获取所述待验证交易的有效性证据,并将所述证据发送至验证者;
[0050]
验证者节点,基于各待验证交易的有效性证据,计算所述待验证交易的验证结果。
[0051]
与现有技术相比,本发明具有以下优点与效果:
[0052]
本发明在验证远程链上交易的有效性时,partitioned-flyclient协议中的跨链证据尺寸只与被验证链新增长部分的长度成对数关系,不像在flyclient协议中,证据尺寸与整个链长成对数关系,从而减少了证据尺寸,降低了验证过程中所需要的通信和存储开销。
附图说明
[0053]
图1分段重构mmr的示例图。
[0054]
图2本发明的方法流程图。
具体实施方式
[0055]
为使本发明的上述特征和优点能更明显易懂,下面通过具体实施例,对本发明的技术方案做进一步说明。
[0056]
本发明对flyclient协议进行改进,提出了一种更高效的区块链交易验证系统,该系统使用partitioned-flyclient协议,使得在验证远程链上交易有效性时,减少了验证的代价,具体包括以下两个重要方面:
[0057]
一、减小证据中需包含区块的个数
[0058]
利用子链验证验证,每次只验证链新增长部分即可,减少了验证过程中需要选取的区块个数,从而减少证据尺寸。
[0059]
二、减小证据中每一个区块的mmr证据的大小
[0060]
通过分段重构mmr技术,证明每一个区块位置的mmr证据只与分段长度len成对数关系,从而减少证据尺寸。
[0061]
具体来说,假设存在一个证明者集合,其中至少包含一个诚实证明者。当一个证明者想向远程验证者证明其维护的链上c存在一个有效交易tx时,需要提供以下证据给验证者:
[0062]
(1)证明链c是真正主链,即最长有效链的证据;
[0063]
(2)证明交易tx确实包含在c中的证据,即包含tx的区块b的区块头,b的mmr证据,以及tx的默克尔路径。
[0064]
为了减少跨链证据尺寸,partitioned-flyclient协议使用子链验证技术和分段重构mmr技术。子链验证是指如果验证者之前已经成功验证了某一条链,之后这条链又增长了,那么验证者在验证这条增长后链的有效性时,只需要验证新增加部分即可。这样减少了验证过程中需要选取的区块个数,从而减少证据尺寸。
[0065]
如果只是利用子链验证来改进flyclient协议,证明每一个区块位置的mmr证据还是与整条链的长度成对数关系。为了减少mmr证据尺寸,partitioned-flyclient协议使用了分段重构mmr技术。每隔len个区块为一个子段,在每一个子段中重新开始构造一棵新的mmr,其中len的取值由系统自由选择。具体地,对于被验证链中任意第s个位置的区块bs,将属于同一个子段中之前所有的区块bi·
len 1
,....,b
s-1
的区块头组成一棵mmr树,其中其根存放在bs的区块头中,而这个子段中第一个叶子结点bi·
len 1
中存放的mmr根设置为空值。这样构造之后,每一个区块中的mmr根可以看成是对同一个子段中所有之前区块的承诺值。对于任意一个区块,将其所在子段的最后一个区块中包含的mmr根记作m,那么每个区块到m的mmr证据证明了该区块在子段中的位置,是从这个子段中产生的,其所以mmr证据的尺寸只与这个子段的长度成对数关系。
[0066]
在partitioned-flyclient协议中,当一个证明者想向远程验证者证明其维护的链c上存在有效交易集合{tx}时,如图1所示,按照以下过程产生证据,并发送给验证者,其中假设验证者已经验证并接受了c中前n个区块对应的证据,现在c的长度增加到n',{tx}包含在c新增加部分中。
[0067]
1.首先将c分成多个子段除了最后一个子段中包含的区块个数可能小于len,其它每一个子段都包含len个区块。
[0068]
2.假设c中区块b
n 1
在子段ci中,那么对于每个子段cj,其中j≥i,分别利用flyclient协议中证明算法产生证明该子段有效性的证据。值得注意的是,b
n 1
的区块头以及它的mmr证据也需要添加进ci的证据中。并且对于ci之后的每个子段,该子段中的第一个区块的区块头以及它的mmr证据也需要添加进该子段的证据中。所有cj对应的证据一起组成证明c有效性的证据,其中j≥i。
[0069]
3.另外对于每个待验证交易tx,包含tx的区块b的区块头,b的mmr证据以及tx的默克尔路径也需要包含在证据中。
[0070]
partitioned-flyclient协议假设同步的网络模型,即所有验证者产生的证据能够在一轮中被所有验证者接收到。在收到证据后,验证者验证每个证据的有效性。假设各个证明者宣称的链长相同,那么按照证据被接受的时间顺序依次验证每个证据。要是各个证明者宣称的链长不同,即n'不同,那最长链对应的证据会优先被验证。
[0071]
对于每个证据,验证者按照以下几个步骤来验证证据的有效性:
[0072]
1.验证证据中区块b
n 1
的区块头中的指针是否指向区块bn,其中验证者在接受c中前n个区块对应的证据后就会本地保存bn的区块头。这一步是为了验证证据对应的新增长部分是否接在原来的链后。
[0073]
2.对于每个子段c
j'
,其中验证者验证证据中c
j'
的第一个区块的区块头中的指针是否指向c
j'-1
的最后一个区块的区块头。这一步是为了验证相邻子段之间链接关系。
[0074]
3.对于每个子段cj,其中验证者调用flyclient协议中验证算法验证cj所对应证据的有效性。
[0075]
4.对于每个待验证交易tx,验证者再验证包含tx的区块b的区块头,b的mmr证据和tx的默克尔路径的正确性。
[0076]
如果以上步骤都验证成功,验证者就相信tx确实是c中包含的一个有效交易。
[0077]
本发明还公开了一种区块链交易验证方法,如图2所示,包括:
[0078]
一、符号说明
[0079]
在下文中,用chain,简称c,来代表一条区块链。区块链c的长度记作length(c)。bi代表c中第i个区块,其中b
s∈[i,j]
代表c中第s个区块,其中s∈[i,j]。c[i,j]代表c中第i个区块到第j个区块这段子链,其中子链包含第i个区块和第j个区块。
[0080]
二、partitioned-flyclient协议中证据的产生过程
[0081]
假设c是某个证明者维护的链,系统中敌手节点数目是诚实节点数目的c倍,当该证明者想向远程验证者证明c上存在有效交易集合{tx}时,按照以下步骤产生证据并广播给验证者,其中假设验证者已经验证并接受了c[1:n k]对应的证据,其中k是公共前缀参数,现在c的长度增加到n',{tx}包含在c[n 1:n']中,n 1∈[i
·
len 1,(i 1)
·
len]。
[0082]
1.将c分成多个子段其中除了中包含的区块个数可能小于len,其它每一个子段都包含len个区块;
[0083]
2.对于每个子段cj,其中调用flyclient协议中的证明算法prove(cj,length(cj),c)得到证据πj,用于证明cj确实是长度为length(cj)的有效子段,其中第一个字段长度最后一个字段长度
其它每一个字段长度均为len;
[0084]
3.πi中只保留b
n 1
之后的区块的区块头以及对应的mmr证据;
[0085]
4.将b
n 1
的区块头以及它的mmr证据,加上πi一起构成π
′i;
[0086]
5.将b
j'
·
len 1
的区块头以及它的mmr证据,加上π
j'
一起构成π'
j'
,其中
[0087]
6.对于每个待验证的交易tx,将包含tx的区块b的区块头,b的mmr证据以及tx的默克尔路径添加到集合tx
proof
中;
[0088]
7.返回作为证据。
[0089]
三、partitioned-flyclient协议证据的验证过程
[0090]
每一个验证者对于收到的所有证据,用以下步骤验证每个证据的有效性。如果各个证明者宣称的链长不同,那最长链对应的证据将会被该验证者优先验证,当有一个证据被成功验证之后,其它剩余的待验证证据就无需再验证。
[0091]
1.验证证据π
′i中b
n 1
的区块头中的指针是否指向bn的区块头;
[0092]
2.对于验证证据π'
j'
中b
j'
·
len 1
的区块头中的指针是否指向证据π'
j'-1
中b
j'
·
len
的区块头;
[0093]
3.对于调用flyclient协议中的验证算法verify(length(cj),c,π'j)验证证据π'j的正确性,其中其它每一个字段长度均为len;
[0094]
4.对于每个tx,验证包含tx的区块b的区块头是否有效,即b的区块头的哈希值是否满足小于当前挖矿难度目标值,再验证b的mmr证据以及tx到b的区块头的默克尔路径是否正确;
[0095]
5.以上步骤都验证成功,验证者相信tx是包含在c中的一个有效交易。否则,验证者把tx当作是无效的交易。
[0096]
下面通过实验验证本发明所提出的partitioned-flyclient协议的高效性。
[0097]
实验假设待验证的区块链c是一条以太坊链,每个区块头的大小为508bytes,设置子段长度len=2
14
,系统参数c=0.9。实验假设验证者已经验证并接受了c[1:n k]对应的证据,其中k是公共前缀参数,现在c的长度增加到n'。实验固定n'-n=106,并且假设链c新增长部分中只包含一个待验证交易tx。实验比较在不同的n下,partitioned-flyclient和flyclient协议中用于证明tx有效性的证据的平均尺寸。如表1所示,对比可得partitioned-flyclient协议中证据尺寸更小,具有更小的通信和存储开销。
[0098]
表1.不同协议中证明交易有效性的证据的平均尺寸对比
[0099][0100]
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,本发明的保护范围应以权利要求所述为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献