区块还原方法、设备和存储介质技术

技术编号:25551618 阅读:17 留言:0更新日期:2020-09-08 18:51
本发明专利技术提供一种区块还原方法、设备和存储介质,该方法包括:接收第一交易,在第一队列中存在与第一交易的交易哈希相同、签名不同的交易时,将第一交易存入第二队列;接收第一数据集合;根据第一交易哈希列表在第一队列中查找第一区块的各交易以还原第一区块,计算所还原的第一区块的第一状态哈希;在第一状态哈希与第一区块头中的第二状态哈希不同时,根据第一交易哈希列表在第二队列中查找第一区块的各交易;在第二队列中所查找到的交易的数量为1时,删除第一队列中与在第二队列中所查找到的第二交易的交易哈希相同的第三交易,并将第二交易移入第一队列以再次还原第一区块。本申请降低区块链网络交易回传率。

【技术实现步骤摘要】
区块还原方法、设备和存储介质
本申请涉及区块链
,具体涉及一种区块还原方法、设备和存储介质。
技术介绍
在申请人先前所提出的交易广播机制(具体可参考申请人所申请的各项交易广播或区块广播等专利文本)中,交易哈希由交易的交易内容生成,区块的区块头信息中的梅克尔根由区块的各交易的交易哈希计算生成,区块链节点在收到一笔交易,假设该交易内容为content(X),区块链节点先判断本地是否已存有与content(X)相同的另一笔交易:若存有,则丢弃新接收的交易;若未存有,则将新接收的交易存入本地交易池。在申请人先前所提出的区块验证机制(具体可参考申请人所申请的各项区块生成、区块广播或区块验证等专利文本)中,生成区块的区块链节点将所生成的区块的数据集合(包括所生成的区块的区块头信息和交易哈希列表)发送给其它区块链节点;其它区块链节点在接收区块时,根据交易哈希列表在本地交易池查找所接收区块的各交易,根据所查找到的各交易的交易哈希计算梅克尔根,在判断所计算的梅克尔根与区块头信息中的梅克尔根相同时,再根据所接收的数据集合和所查找到的各交易组装还原第一区块,执行所还原的第一区块得到执行结果,但执行结果与区块头信息中的执行结果不一致。在测试使用上述机制的区块链网络时,假设区块链中有ABCD四个区块链节点,偶然发现两笔交易哈希相同但签名不同的交易tx1(sig_a1(content(M)))和tx2(sig_a2(content(M)));假设A、B先收到tx1,C、D先收到tx2;A、B收到tx1后,再收到tx2时,由于tx1和tx2的交易内容相同,A、B不会将tx2存入本地交易池;同理,C、D不会将tx1存入本地交易池;假设A生成了包括tx1的区块block(N),并将blockheader(N)和block(N)的交易哈希列表广播给B、C、D;由于交易哈希由交易的交易内容生成,因此A、B、C、D的梅克尔根均相同;在梅克尔根相同的情况下,B、C、D根据所查找到的交易组装还原block(N);B根据hash(content(M))从本地查找到tx1,而C、D根据hash(content(M))从本地查找到tx2;因此,A、B执行block(N)所生成的第一执行结果相同,C、D执行block(N)所生成的第二执行结果相同,而第一执行结果与第二执行结果不同。一种常规的解决方法是,C、D向A请求block(N),但是这种方法会造成block(N)的确认时间变长,区块链网络中存在较多的回传信息。
技术实现思路
鉴于现有技术中的上述缺陷或不足,期望提供一种在不延长区块的确认时间的同时,降低区块链网络交易回传率的区块还原方法、设备和存储介质。第一方面,本专利技术提供一种适用于区块链节点的区块还原方法,交易池包括两个队列,区块链节点从交易池中的第一队列拉取交易生成区块,上述方法包括:接收客户端发送的或其它区块链节点广播的第一交易,并判断本地交易池的第一队列中是否存在与第一交易的交易哈希相同、签名不同的交易:是,则将第一交易存入本地交易池的第二队列;接收第一区块链节点在打包第一区块后广播的第一数据集合;其中,第一数据集合包括第一区块的第一区块头和第一交易哈希列表;根据第一交易哈希列表在第一队列中查找第一区块的各交易以还原第一区块,计算所还原的第一区块的第一状态哈希;判断第一状态哈希与第一区块头中的第二状态哈希是否相同:否,则根据第一交易哈希列表在第二队列中查找第一区块的各交易;以及判断在第二队列中所查找到的交易的数量是否为1:是,则删除第一队列中与在第二队列中所查找到的第二交易的交易哈希相同的第三交易,并将第二交易移入第一队列以再次还原第一区块;以及,计算再次还原的第一区块的第三状态哈希值;判断第三状态哈希值是否与第一状态哈希值相同:否,则向第一区块链节点请求第一区块;否,则向第一区块链节点请求第一区块。第二方面,本专利技术提供一种适用于区块链节点的区块还原方法,交易池包括两个队列,区块链节点从交易池中的第一队列拉取交易生成区块,上述方法包括:接收客户端发送的或其它区块链节点广播的第一交易,并判断本地交易池的第一队列中是否存在与第一交易的哈希相同、签名不同的交易:是,则将第一交易存入本地交易池的第二队列;打包第一区块并生成第一区块的第一数据集合;其中,第一数据集合包括第一区块的第一区块头和第一交易哈希列表;将第一数据集合广播给其它区块链节点,以供其它区块链节点:根据第一交易哈希列表在第一队列中查找第一区块的各交易以还原第一区块,计算所还原的第一区块的第一状态哈希;判断第一状态哈希与第一区块头中的第二状态哈希是否相同:否,则根据第一交易哈希列表在第二队列中查找第一区块的各交易;以及,判断在第二队列中所查找到的交易的数量是否为1:是,则删除第一队列中与在第二队列中所查找到的第二交易的交易哈希相同的第三交易,并将第二交易移入第一队列以再次还原第一区块;以及,计算再次还原的第一区块的第三状态哈希值;判断第三状态哈希值是否与第一状态哈希值相同:否,则向当前节点请求第一区块;否,则向当前节点请求第一区块。第三方面,本专利技术还提供一种设备,包括一个或多个处理器和存储器,其中存储器包含可由该一个或多个处理器执行的指令以使得该一个或多个处理器执行根据本专利技术各实施例提供的区块还原方法。第四方面,本专利技术还提供一种存储有计算机程序的存储介质,该计算机程序使计算机执行根据本专利技术各实施例提供的区块还原方法。本专利技术诸多实施例提供的区块还原方法、设备和存储介质通过接收第一交易,在本地交易池的第一队列中存在与第一交易的交易哈希相同、签名不同的交易时,将第一交易存入本地交易池的第二队列;接收第一区块链节点在打包第一区块后广播的第一数据集合;根据第一交易哈希列表在第一队列中查找第一区块的各交易以还原第一区块,计算所还原的第一区块的第一状态哈希;在第一状态哈希与第一区块头中的第二状态哈希不同时,根据第一交易哈希列表在第二队列中查找第一区块的各交易;在第二队列中所查找到的交易的数量为1时,删除第一队列中与在第二队列中所查找到的第二交易的交易哈希相同的第三交易,并将第二交易移入第一队列以再次还原第一区块的方法,降低区块链网络交易回传率。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1为本专利技术一实施例提供的一种区块还原方法的流程图。图2为图1所示方法的一种优选实施方式中步骤S112的流程图。图3为图1所示方法的一种优选实施方式中步骤S13的流程图。图4为图1所示方法的另一种优选实施方式中步骤S13的流程图。图5为本专利技术一实施例提供的一种区块还原方法的流程图。图6为本专利技术一实施例提供的一种设备的结构示意图。具体实施方式...

【技术保护点】
1.一种区块还原方法,其特征在于,交易池包括两个队列,区块链节点从所述交易池中的第一队列拉取交易生成区块,所述方法适用于区块链节点,所述方法包括:/n接收客户端发送的或其它区块链节点广播的第一交易,并判断本地交易池的第一队列中是否存在与所述第一交易的交易哈希相同、签名不同的交易:/n是,则将所述第一交易存入本地交易池的第二队列;/n接收第一区块链节点在打包第一区块后广播的第一数据集合;其中,所述第一数据集合包括所述第一区块的第一区块头和第一交易哈希列表;/n根据所述第一交易哈希列表在所述第一队列中查找所述第一区块的各交易以还原所述第一区块,计算所还原的第一区块的第一状态哈希;/n判断所述第一状态哈希与所述第一区块头中的第二状态哈希是否相同:/n否,则根据所述第一交易哈希列表在所述第二队列中查找所述第一区块的各交易;以及/n判断在所述第二队列中所查找到的交易的数量是否为1:/n是,则删除所述第一队列中与在所述第二队列中所查找到的第二交易的交易哈希相同的第三交易,并将所述第二交易移入所述第一队列以再次还原所述第一区块;以及,/n计算再次还原的第一区块的第三状态哈希值;/n判断所述第三状态哈希值是否与所述第一状态哈希值相同:/n否,则向所述第一区块链节点请求所述第一区块;/n否,则向所述第一区块链节点请求所述第一区块。/n...

【技术特征摘要】
1.一种区块还原方法,其特征在于,交易池包括两个队列,区块链节点从所述交易池中的第一队列拉取交易生成区块,所述方法适用于区块链节点,所述方法包括:
接收客户端发送的或其它区块链节点广播的第一交易,并判断本地交易池的第一队列中是否存在与所述第一交易的交易哈希相同、签名不同的交易:
是,则将所述第一交易存入本地交易池的第二队列;
接收第一区块链节点在打包第一区块后广播的第一数据集合;其中,所述第一数据集合包括所述第一区块的第一区块头和第一交易哈希列表;
根据所述第一交易哈希列表在所述第一队列中查找所述第一区块的各交易以还原所述第一区块,计算所还原的第一区块的第一状态哈希;
判断所述第一状态哈希与所述第一区块头中的第二状态哈希是否相同:
否,则根据所述第一交易哈希列表在所述第二队列中查找所述第一区块的各交易;以及
判断在所述第二队列中所查找到的交易的数量是否为1:
是,则删除所述第一队列中与在所述第二队列中所查找到的第二交易的交易哈希相同的第三交易,并将所述第二交易移入所述第一队列以再次还原所述第一区块;以及,
计算再次还原的第一区块的第三状态哈希值;
判断所述第三状态哈希值是否与所述第一状态哈希值相同:
否,则向所述第一区块链节点请求所述第一区块;
否,则向所述第一区块链节点请求所述第一区块。


2.根据权利要求1所述的方法,其特征在于,所述将所述第一交易存入本地交易池的第二队列包括:
判断本地交易池的第二队列中是否存在与所述第一交易的交易哈希相同、签名不同的交易:
否,则将所述第一交易存入本地交易池的第二队列;
是,则丢弃所述第一交易。


3.根据权利要求1所述的方法,其特征在于,所述根据所述第一交易哈希列表在所述第一队列中查找所述第一区块的各交易以还原所述第一区块包括:
根据所述第一交易哈希列表在所述第二队列中查找所述第一区块的各交易;
判断在所述第二队列中所查找到的交易的数量是否大于1:
是,则删除所查找到的各交易,并根据所述第一交易哈希列表在所述第一队列中查找所述第一区块的各交易以还原所述第一区块。


4.根据权利要求1所述的方法,其特征在于,所述根据所述第一交易哈希列表在所述第一队列中查找所述第一区块的各交易以还原所述第一区块包括:
根据所述第一交易哈希列表在所述第二队列中查找所述第一区块的各交易;
判断在所述第二队列中所查找到的交易的数量是否大于1:
是,则从所查找到的各交易中保存一个交易并删除其它交易,并根据所述第一交易哈希列表在所述第一队列中查找所述第一区块的各交易以还原所述第一区块。


5.一种区块还原方法,其特征在于,交易池包括两个队列,区块链节点从所述交易池中的第一队列拉取交易生成区块,所述方法适用于区块链节点,所述方法包括:
接收客户端发送的或其它区块链节点广播的第一交易...

【专利技术属性】
技术研发人员:何正军王志文吴思进
申请(专利权)人:杭州复杂美科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1