一种交易验证方法、装置、设备及存储介质与流程

文档序号:26758440发布日期:2021-09-25 04:58阅读:83来源:国知局
一种交易验证方法、装置、设备及存储介质与流程
一种交易验证方法、装置、设备及存储介质
1.本技术为在2021年05月18日提交中国专利局、申请号为2021105371826、申请名称为“一种交易验证方法、装置、设备及存储介质”的中国专利申请的分案申请,其全部内容通过引用结合在本技术中。
技术领域
2.本技术涉及区块链技术领域,尤其涉及一种交易验证方法、装置、设备及存储介质。


背景技术:

3.应当理解,区块链网络中的出块节点在生成新区块时,需要收集在该区块链网络中传播的未确认的交易,进而可以逐个执行收集到的交易所对应的交易业务,以得到交易执行结果。其中,出块节点在执行交易业务的过程中,需要从该区块链网络的区块链中,事先获取从创世区块至当前最新区块(即具有最大生成时间戳的区块)中的所有状态数据,以此来对该交易进行合法性校验。例如,出块节点在执行某交易对应的资产转移业务时,需要判断资产转移方是否有足够的额度。此时,该出块节点需要花费较长的时间来读取区块链上的所有状态数据,以至于降低了合法性校验的效率。这样,在区块链上的区块越来越多的情况下,针对于同一个状态数据而言,该状态数据的读取或者写入操作所需要消耗的资源开销将会不断上升,从而造成出块节点的运行负担过重,进而导致该出块节点的启动时间较长。


技术实现要素:

4.本技术实施例提供一种交易验证方法、装置、设备及存储介质,可以加快出块节点的启动时间。
5.本技术实施例一方面提供一种交易验证方法,该方法由区块链网络中的出块节点执行,出块节点为区块链网络中的轻量节点,包括:
6.获取区块链网络中的用户节点发送的待验证交易以及待验证交易对应的交易验证信息;交易验证信息是由区块链网络中的全量节点在执行待验证交易对应的交易业务后所确定的;交易验证信息包括状态读取集合、状态写入集合、初始交易执行结果以及区块标识;区块标识用于指向全量节点的全量区块链上具有最大生成时间戳的目标区块;且目标区块的第一区块头中包含区块标识;
7.在轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,基于第二区块头中的第一状态快照,对状态读取集合以及状态写入集合进行校验,得到待验证交易的第一校验结果;
8.在第一校验结果指示校验成功时,基于状态读取集合执行交易业务,得到交易业务对应的目标交易执行结果以及待写入状态数据;
9.基于初始交易执行结果、目标交易执行结果、状态写入集合以及待写入状态数据,
对待验证交易进行合法性校验。
10.本技术实施例一方面提供一种交易验证方法,该方法由区块链网络中的全量节点执行,包括:
11.在获取到与区块链网络中的用户节点相关联的待验证交易时,在全量节点的全量区块链上,将具有最大生成时间戳的区块作为目标区块,且将目标区块的区块头作为第一区块头;
12.获取目标区块中的默克尔帕特里夏树,基于目标区块中的默克尔帕特里夏树,执行待验证交易对应的交易业务,得到交易业务对应的初始交易执行结果、状态读取集合以及状态写入集合;
13.获取第一区块头中的区块标识,将初始交易执行结果、状态读取集合、状态写入集合以及区块标识,作为待验证交易对应的交易验证信息;交易验证信息用于指示区块链网络中的出块节点,基于区块头链中的第二区块头中的第一状态快照,对待验证交易进行合法性校验;第二区块头为区块头链中与区块标识相匹配的区块头;出块节点为区块链网络中的轻量节点。
14.本技术实施例一方面提供一种交易验证装置,包括:
15.交易获取模块,用于获取区块链网络中的用户节点发送的待验证交易以及待验证交易对应的交易验证信息;交易验证信息是由区块链网络中的全量节点在执行待验证交易对应的交易业务后所确定的;交易验证信息包括状态读取集合、状态写入集合、初始交易执行结果以及区块标识;区块标识用于指向全量节点的全量区块链上具有最大生成时间戳的目标区块;且目标区块的第一区块头中包含区块标识;
16.集合校验模块,用于在轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,基于第二区块头中的第一状态快照,对状态读取集合以及状态写入集合进行校验,得到待验证交易的第一校验结果;
17.目标执行结果确定模块,用于在第一校验结果指示校验成功时,基于状态读取集合执行交易业务,得到交易业务对应的目标交易执行结果以及待写入状态数据;
18.合法性校验模块,用于基于初始交易执行结果、目标交易执行结果、状态写入集合以及待写入状态数据,对待验证交易进行合法性校验。
19.其中,状态读取集合和状态写入集合是全量节点基于目标区块中的默克尔帕特里夏树所生成的;
20.该集合校验模块包括:
21.状态快照获取单元,用于从轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,且将第二区块头中的状态快照作为第一状态快照;
22.读取集合校验单元,用于从状态读取集合中获取第一状态数据的第一存在性证明,基于第一状态快照,对第一存在性证明进行校验,得到第一证明校验结果;第一状态数据为全量节点在目标区块中的默克尔帕特里夏树上读取到的与待验证交易相关联的状态数据;
23.写入集合校验单元,用于从状态写入集合中获取第二状态数据的可修改证明,基于第一状态快照,对可修改证明进行校验,得到第二证明校验结果;第二状态数据为全量节
点在执行交易业务的过程中记录到的模拟写入目标区块的下一区块的状态数据;
24.校验结果确定单元,用于基于第一证明校验结果和第二证明校验结果,确定待验证交易的第一校验结果。
25.其中,该读取集合校验单元包括:
26.证明获取子单元,用于从状态读取集合中获取第一状态数据的第一存在性证明;第一存在性证明为全量节点从目标区块中的默克尔帕特里夏树中,获取到的与第一状态数据相关联的节点路径;节点路径包含叶子节点和树根节点;叶子节点用于存储第一状态数据;
27.初始比对结果确定子单元,用于基于节点路径所指示的第一节点索引关系,将叶子节点作为子节点,且将叶子节点的上一节点作为子节点对应的父节点,将子节点的子节点哈希值与父节点的哈希指针进行比对,得到初始比对结果;
28.第一比对结果确定子单元,用于若初始比对结果指示比对成功,则基于第一节点索引关系更新子节点以及父节点,直到更新后的父节点为树根节点时,得到第一存在性证明的第一比对结果;
29.第二比对结果确定子单元,用于将树根节点的树根哈希值与第一状态快照进行比对,得到第一存在性证明的第二比对结果;
30.校验结果确定子单元,用于基于第一比对结果和第二比对结果,得到第一证明校验结果。
31.其中,该合法性校验模块包括:
32.交易执行结果比对单元,用于将初始交易执行结果和目标交易执行结果进行比对,得到第三比对结果;
33.证明校验单元,用于从状态写入集合中获取第二状态数据的第二存在性证明,基于第一状态快照,对第二存在性证明进行校验;
34.状态数据比对单元,用于在校验成功时,将第二状态数据与待写入状态数据进行比对,得到第四比对结果;
35.合法性校验单元,用于基于第三比对结果和第四比对结果,得到待验证交易的第二校验结果,且基于第二校验结果,对待验证交易进行合法性校验。
36.其中,该装置还包括:
37.状态快照生成模块,用于在确定待验证交易具备合法性时,基于状态写入集合中的第二状态数据,生成与第二状态数据相关联的第二状态快照;
38.待处理区块头生成模块,用于基于待验证交易、目标交易执行结果以及第二状态快照,生成待处理区块头;待处理区块头用于作为第二区块头的下一区块头;
39.待处理区块头写入模块,用于将待处理区块头写入区块头链。
40.其中,该装置还包括:
41.加密处理模块,用于在将待处理区块头成功写入区块头链后,获取全量节点的节点公钥,对待处理区块头进行加密处理,得到加密数据信息;
42.加密数据信息发送模块,用于将加密数据信息发送至全量节点,以使全量节点基于全量节点的节点私钥,对加密数据信息进行解密处理,得到待处理区块头;待处理区块头用于指示全量节点生成待处理区块头对应的待处理区块;待处理区块用于作为全量区块链
上的目标区块的下一区块。
43.本技术实施例一方面提供一种交易验证装置,包括:
44.目标区块确定模块,用于在获取到与区块链网络中的用户节点相关联的待验证交易时,在全量节点的全量区块链上,将具有最大生成时间戳的区块作为目标区块,且将目标区块的区块头作为第一区块头;
45.初始执行结果确定模块,用于获取目标区块中的默克尔帕特里夏树,基于目标区块中的默克尔帕特里夏树,执行待验证交易对应的交易业务,得到交易业务对应的初始交易执行结果、状态读取集合以及状态写入集合;
46.验证信息确定模块,用于获取第一区块头中的区块标识,将初始交易执行结果、状态读取集合、状态写入集合以及区块标识,作为待验证交易对应的交易验证信息;交易验证信息用于指示区块链网络中的出块节点,基于区块头链中的第二区块头中的第一状态快照,对待验证交易进行合法性校验;第二区块头为区块头链中与区块标识相匹配的区块头;出块节点为区块链网络中的轻量节点。
47.其中,目标区块确定模块包括:
48.签名信息接收单元,用于接收区块链网络中的用户节点发送的待验证交易对应的交易签名信息;交易签名信息为用户节点基于用户私钥,对待验证交易进行签名处理后所得到的;
49.签名信息验签单元,用于获取用户私钥对应的用户公钥,基于用户公钥对交易签名信息进行验签,得到验签结果;
50.目标区块确定单元,用于在验签结果指示验签成功时,在全量节点的全量区块链上,获取具有最大生成时间戳的区块,将获取到的区块作为目标区块,且将目标区块的区块头作为第一区块头。
51.其中,初始执行结果确定模块包括:
52.第一状态数据确定单元,用于获取目标区块中的默克尔帕特里夏树,将获取到的默克尔帕特里夏树作为待处理树,从所述待处理树中读取与待验证交易相关联的状态数据,将读取到的状态数据作为第一状态数据;
53.第二状态数据确定单元,用于基于第一状态数据,执行待验证交易对应的交易业务,得到交易业务对应的初始交易执行结果,且在执行交易业务的过程中,记录模拟写入目标区块的下一区块的状态数据,将记录到的状态数据作为第二状态数据;
54.读取集合生成单元,用于基于待处理树,收集第一状态数据的第一存在性证明,基于第一存在性证明生成状态读取集合;
55.写入集合生成单元,用于基于待处理树,收集第二状态数据的可修改证明和第二存在性证明,基于可修改证明和第二存在性证明生成状态写入集合。
56.其中,该写入集合生成单元包括:
57.可修改证明获取子单元,用于在将第二状态数据插入到待处理树之前,获取与第二状态数据相关联的关键字符串,基于关键字符串获取第二状态数据的可修改证明;
58.存在性证明获取子单元,用于在将第二状态数据插入到待处理树之后,获取第二状态数据的存在性证明,将第二状态数据的存在性证明作为第二存在性证明;
59.写入集合生成子单元,用于基于可修改证明和第二存在性证明,生成状态写入集
合。
60.其中,待处理树包含树根节点;
61.该可修改证明获取子单元还用于:
62.在将第二状态数据插入到待处理树之前,获取与第二状态数据相关联的关键字符串;
63.获取待处理树所指示的第二节点索引关系,基于第二节点索引关系,从树根节点开始遍历查找与关键字符串具有相同前缀的字符;
64.基于查找到的所有字符,得到待处理字符串,获取与待处理字符串相关联的存在性证明,且将获取到的存在性证明作为第二状态数据的可修改证明。
65.本技术实施例一方面提供了一种计算机设备,包括:处理器和存储器;
66.处理器与存储器相连,其中,存储器用于存储计算机程序,计算机程序被处理器执行时,使得该计算机设备执行本技术实施例提供的方法。
67.本技术实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本技术实施例提供的方法。
68.本技术实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例提供的方法。
69.在本技术实施例中,区块链网络中的出块节点(即该区块链网络中的轻量节点)在接收到该区块链网络中的用户节点发送的待验证交易的同时,还会一并接收到该区块链网络中的全量节点在执行该待验证交易对应的交易业务后所确定的交易验证信息。其中,这里的交易验证信息可以包括该交易业务对应的初始交易执行结果、状态读取集合、状态写入集合以及区块标识。其中,区块标识可以用于指向全量节点的全量区块链上具有最大生成时间戳的目标区块,且该目标区块的第一区块头中包含该区块标识。基于此,该出块节点无需花费大量的时间,同步从全量区块链的创世区块至目标区块中的所有状态数据,而是直接从出块节点的区块头链中查找与该区块标识相匹配的第二区块头,然后基于该第二区块头的第一状态快照以及交易验证信息,对待验证交易进行合法性校验,从而可以提升合法性校验的效率,进而减轻了出块节点的运行负担,以至于大大加快了出块节点的启动时间。
附图说明
70.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
71.图1是本技术实施例提供的一种区块链网络结构的示意图;
72.图2是本技术实施例提供的一种进行数据交互的场景示意图;
73.图3是本技术实施例提供的一种交易验证方法的流程示意图;
74.图4是本技术实施例提供的一种对交易签名信息进行验签的场景示意图;
75.图5是本技术实施例提供的一种默克尔帕特里夏树的结构示意图;
76.图6是本技术实施例提供的一种第一状态数据的第一存在性证明的示意图;
77.图7是本技术实施例提供的一种第二状态数据的可修改证明的示意图;
78.图8是本技术实施例提供的一种交易验证方法的流程示意图;
79.图9是本技术实施例提供的一种交易验证方法的流程示意图;
80.图10是本技术实施例提供的一种生成待处理区块的场景示意图;
81.图11是本技术实施例提供的一种交易验证装置的结构示意图;
82.图12是本技术实施例提供的一种交易验证装置的结构示意图;
83.图13是本技术实施例提供的一种计算机设备的示意图;
84.图14是本技术实施例提供的一种数据处理系统的结构示意图。
具体实施方式
85.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
86.请参见图1,图1是本技术实施例提供的一种区块链网络结构的示意图。图1所示的区块链网络结构可以应用于区块链系统,该区块链系统可以是由多个区块链节点通过网络通信的形式连接形成的分布式系统。换言之,所有区块链节点之间可以相互建立点对点或者端对端(peer to peer,简称p2p)连接,以形成p2p网络(即图1所示的区块链网络)。
87.其中,这里的区块链节点可以为接入该区块链网络中的任意形式的计算机设备,比如,该计算机设备可以为接入该区块链网络中的用户终端,也可以为接入该区块链网络中的服务器,这里对区块链节点的具体形式不做限定。可以理解的是,这里的用户终端可以包括智能手机、平板电脑、笔记本电脑、桌上型电脑等具有数据处理功能的智能终端。该用户终端中可以安装有目标应用(即应用客户端),当该应用客户端运行于用户终端中时,可以与上述图1所示的区块链网络中的其他区块链节点之间进行数据交互。其中,该应用客户端可以包含社交客户端、多媒体客户端(例如,视频客户端)、娱乐客户端(例如,游戏客户端)、教育客户端、直播客户端等应用客户端。其中,该应用客户端可以为独立的客户端,也可以为集成在某客户端(例如,社交客户端、教育客户端以及多媒体客户端等)中的嵌入式子客户端,在此不做限定。这里的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。
88.如图1所示,该区块链网络中可以包括三种类型的区块链节点,具体可以包括全量节点、出块节点以及用户节点。其中,全量节点是指用于存储完整区块数据的区块链节点,本技术实施例可以将该全量节点的区块链称之为全量区块链,该全量区块链中的每个区块均可以包括区块头以及区块体。其中,该区块头中可以包括用于判断状态数据的完整性的状态快照、当前区块的区块标识(例如,区块块高或者区块哈希值)、父区块哈希值以及生成
时间戳等。该区块体中可以包括默克尔帕特里夏树(merkle patricia tree,简称mpt),该默克尔帕特里夏树中的叶子节点(即数据节点)中可以存储有具体的状态数据。这意味着该全量节点的全量区块链需要保留所有账户的完整的状态数据。
89.应当理解,本技术实施例中的出块节点是指用于生成新区块头的区块链节点,为了大大减少存储空间的消耗,该出块节点可以为区块链网络中的轻量节点(simplified payment verification,简称spv节点)。这里的轻量节点是指用于存储区块数据中的区块头信息,而不需要存储完整区块数据的区块链节点。换言之,本技术实施例可以将出块节点的区块链称之为区块头链(即轻量区块链),该区块头链可以为由多个区块头首尾连接而成的链型结构。这意味着该出块节点的区块头链可以保留用于判断状态数据的完整性的状态快照,而不需要保留所有账户的完整的状态数据。
90.其中,本技术实施例中的用户节点是指部署在用户侧,由用户控制的区块链节点。可以理解的是,该用户节点可以单独部署在某一个计算机设备,用于为用户组装待验证交易(例如,交易1)。该用户节点可以与区块链网络中的全量节点(该全量节点部署在与用户节点不同的计算机设备上)进行交互。例如,用户节点可以将该交易1发送至全量节点,以使全量节点模拟执行该交易1对应的交易业务,且接收该全量节点在执行该交易1对应的交易业务之后得到的交易验证信息。此外,该用户节点还可以与区块链网络中的出块节点进行交互。例如,该用户节点可以将全量节点发送的交易验证信息以及用户节点自身组装的待验证交易(即交易1)一并发送至出块节点,以使出块节点基于接收到的交易验证信息对该交易1进行合法性校验。可选的,该用户节点还可以和该区块链网络中的全量节点共同部署在同一个计算机设备。这意味着该用户节点将会具备全量节点所具备的节点功能,即存储完整区块数据。因此,用户节点在为用户组装待验证交易(例如,交易2)之后,可以直接执行该交易2对应的交易业务,以得到该交易2对应的交易验证信息。此时,该用户节点可以直接将交易2和交易2对应的交易验证信息一并发送至出块节点,以使出块节点基于接收到的交易验证信息对该交易2进行合法性校验。
91.由此可见,本技术实施例中的出块节点在接收到区块链网络中的用户节点发送的待验证交易时,可以一并接收到该待验证交易对应的交易验证信息。因此,在出块节点对待验证交易进行合法性校验时,无需获取存储在全量区块链的所有状态数据,而是根据接收到的该待交易验证信息,对该待验证交易进行合法性校验。其中,这里的交易验证信息可以包括状态读取集合、状态写入集合、初始交易执行结果以及区块标识。该区块标识用于指向全量节点的全量区块链上的具有最大生成时间戳的目标区块,该目标区块的第一区块头中包含该区块标识。因此,在对待验证交易进行校验的过程中可以包括以下校验:首先出块节点可以在区块头链中查找到与区块标识相匹配的区块头(即第二区块头)时,可以获取第二区块头中的第一状态快照,进而可以基于该第一状态快照校验交易验证信息中的两个集合(即状态读取集合和状态写入集合),得到第一校验结果。在第一校验结果指示校验成功时,出块节点可以基于状态读取集合执行待验证交易对应的交易业务,得到目标交易执行结果和待写入状态数据。然后,该出块节点可以基于初始交易执行结果、目标交易执行结果、状态写入集合以及待写入状态数据,对待验证交易进行合法性校验。这意味着出块节点不需要花费时间来读取全量区块链上的所有状态数据,而是直接根据接收到的交易验证信息,对待验证交易进行合法性校验,以至于减轻了出块节点的运行负担,进而大大加快了出块
节点的启动时间。
92.为便于理解,进一步地,请参见图2,图2是本技术实施例提供的一种进行数据交互的场景示意图。如图2所示,用户节点20a可以为上述图1所示的区块链网络中的用户节点,该用户节点20a可以用于为用户组装待验证交易。本技术实施例中的全量节点20b可以为上述图1所示的区块链网络中的全量节点,该全量节点20b可以存储有所有账户的完整的状态数据。本技术实施例中的出块节点20c可以为上述图1所示的区块链网络中的出块节点,该出块节点20c可以为能够收集当前区块链网络中的待验证交易,以进行合法性校验的轻量节点。
93.应当理解,本技术实施例中的待验证交易可以包括但不限于资产转移交易(例如,抵押、借贷、虚拟资产流转等业务场景下的交易)以及合同签订交易。其中,这里的虚拟资产可以是指游戏币、游戏钻石、游戏装备以及电子票据等。例如,在虚拟资产流转场景中,用户节点20a对应的用户(例如,用户1)的账户余额中有10个游戏币,当该用户1需要将某笔虚拟资产(例如,3个游戏币)转移到另一用户(例如,用户2)的账户上时,用户1可以针对该用户节点20a执行触发操作,以使用户节点20a可以响应该触发操作,为该用户1组装交易(例如,图2所示的交易2x)。其中,这里的触发操作可以包括点击、长按等接触性操作,也可以包括语音、手势等非接触性操作,这里将不对其进行限定。
94.进一步地,该用户节点20a可以将该交易2x作为待验证交易,进而可以将该交易2x发送至图2所示的全量节点20b,以使该全量节点20b可以执行该交易2x对应的交易业务,从而得到该交易2x对应的交易验证信息(例如,图2所示的交易验证信息2y)。其中,该全量节点20b的全量区块链可以为图2所示的区块链2a,该区块链2a中可以包括多个具有完整区块数据的区块,本技术实施例可以以100个区块为例,具体可以包括区块1g、区块2g、

、区块99g以及区块100g,该区块1g可以称之为该区块链2a的创世区块。其中,区块链2a中的每个区块均可以包括区块头和区块体,例如,区块1g中可以包括区块头1和区块体。
95.其中,可以理解的是,该全量节点20b在接收到该交易2x时,可以在区块链2a上,将具有最大生成时间戳的区块(例如,图2所示的区块100g)作为目标区块,进而可以将该区块100g中的区块头100作为第一区块头。进一步地,该全量节点20b可以获取区块100g中的默克尔帕特里夏树(例如,图2所示的默克尔帕特里夏树2m),基于该默克尔帕特里夏树2m,模拟执行交易2x对应的交易业务,以得到该交易业务对应的交易执行结果(即初始交易执行结果),状态读取集合以及状态写入集合。此时,该全量节点20b可以获取第一区块头中的区块标识,进而可以将初始交易执行结果、状态读取集合、状态写入集合以及区块标识,作为该交易2x对应的交易验证信息2y。其中,这里的区块标识可以是指该目标区块(例如,区块100g)的区块块高,也可以是指该目标区块的区块哈希值,在此不做限定。
96.应当理解,该全量节点20b可以将交易验证信息2y返回至该用户节点20a。进一步地,该用户节点20a可以将自身生成的交易2x和全量节点20b返回的交易验证信息2y一并发送至图2所示的出块节点20c,以使该出块节点20c基于该交易验证信息2y对交易2x进行合法性校验,从而可以确定交易2x的合法性。其中,该出块节点20c的轻量区块链(即区块头链)可以为图2所示的区块头链2b,该区块头链2b是由多个区块头首尾相连而构成的,本技术实施例可以以100个区块头为例,具体可以包括区块头1、区块头2、

、区块头99以及区块头100。每个区块头中均可以包括用于判断当前区块的所有状态数据的完整性的状态快照。
97.其中,可以理解的是,出块节点20c在接收到用户节点20a发送的交易2x和交易验证信息2y时,可以在图2所示的区块头链2b中,查找与该第一区块头中的区块标识相匹配的区块头(例如,区块头链2b中的区块头100),且将查找到的区块头作为第二区块头,进而可以基于该第二区块头中的状态快照(即第一状态快照),对交易验证信息2y中的状态读取集合以及状态写入集合进行校验,得到交易2x的第一校验结果,以确定该交易2x对应的交易业务能否被出块节点20c执行。在第一校验结果指示校验失败时,该出块节点20c可以确定该交易2x对应的交易业务无法被出块节点20c执行,即该交易2x不具备合法性。可选的,在第一校验结果指示校验成功时,该出块节点20c可以确定该交易2x对应的交易业务能够被执行,此时,该出块节点20c可以基于该状态读取集合,执行交易2x对应的交易业务,得到该交易业务对应的目标交易执行结果以及待写入状态数据(例如,7个游戏币)。进一步地,该出块节点20c可以根据初始交易执行结果、状态写入集合、目标交易执行结果和待写入状态数据,对交易2x继续进行合法性校验。
98.其中,若初始交易执行结果与目标交易执行结果一致,状态写入集合中的第二状态数据的存在性证明(即第二存在性证明)合法,且第二状态数据与待写入状态数据一致,则该出块节点20c可以确定交易2x具备合法性。可选的,若初始交易执行结果与目标交易执行结果不一致,或者状态写入集合中的第二状态数据的第二存在性证明不合法,或者第二状态数据与待写入状态数据不一致,则该出块节点20c可以确定该交易2x不具备合法性。
99.由此可见,本技术实施例中的出块节点20c在校验交易2x时,无需从区块链2a上同步所有账户的状态数据,而是根据接收到交易验证信息2y(即全量节点20b在接收到交易2x时,模拟执行交易2x对应的交易业务后得到的交易验证信息),直接对交易2x进行合法性校验,以至于减轻了出块节点20c的运行负担,进而大大加快了出块节点20c的启动时间。
100.其中,区块链网络中的出块节点基于获取到的交易验证信息,对待验证交易进行合法性校验的具体实现方式可以参见下述图3

图10所对应的实施例。
101.进一步地,请参见图3,图3是本技术实施例提供的一种交易验证方法的流程示意图。如图3所示,该方法可以由区块链网络中的出块节点执行,该出块节点可以为接入至该区块链网络的用户终端,也可以为接入至该区块链网络中的服务器,在此不做限定。为便于理解,本技术实施例以该方法由用户终端执行为例进行说明,该方法至少可以包括以下步骤s101

步骤s104:
102.步骤s101,获取区块链网络中的用户节点发送的待验证交易以及待验证交易对应的交易验证信息。
103.具体地,区块链网络中的出块节点可以获取到该区块链网络中的用户节点发送的待验证交易以及待验证交易对应的交易验证信息。其中,这里的待验证交易可以为用户节点在响应用户的触发操作(例如,点击操作)时所生成的交易。这里的交易验证信息可以为区块链网络中的全量节点在接收到用户节点发送的待验证交易时,执行该待验证交易对应的交易业务后所得到的验证信息。其中,这里的用户节点与全量节点可以共同部署在同一计算机设备,也可以部署在不同的计算机设备,这里将不对其进行限定。本技术实施例可以以用户节点和全量节点部署在不同的计算机设备这种情况为例,用以阐述出块节点对待验证交易信息的合法性校验。
104.可以理解的是,区块链网络中的用户节点对应的用户(例如,第一用户)可以针对
某一交易业务,执行触发操作(例如,点击操作)。比如,该交易业务可以为将第一用户的电子票据转移至另一用户(例如,第二用户)的业务。此时,该用户节点可以响应该触发操作,以生成用于广播至区块链网络的待验证交易。与此同时,为了有效保证待验证交易在区块链网络传输时的真实性和安全性,该用户节点可以基于用户私钥(即第一用户的私钥),对该待验证交易进行签名处理,得到该待验证交易的交易签名信息。进一步地,该用户节点可以将该待验证交易以及交易签名信息一并发送至该区块链网络中的全量节点。应当理解,全量节点在获取到该待验证交易对应的交易签名信息时,可以获取用户私钥对应的用户公钥(即第一用户的公钥),进而可以基于该用户公钥对交易签名信息进行验签,以得到验签结果。
105.为便于理解,进一步地,请参见图4,图4是本技术实施例提供的一种对交易签名信息进行验签的场景示意图。如图4所示,本技术实施例中的用户节点40a可以为区块链网络中的由用户控制的区块链节点,例如,该用户节点40a可以为上述图2所示的用户节点20a。本技术实施例中的全量节点40b可以为区块链网络中的具有保存完整区块数据功能的区块链节点,例如,该全量节点40b可以为上述图2所示的全量节点20b。
106.应当理解,图4所示的用户节点40a在响应用户节点40a对应的用户(例如,用户1)的触发操作时,可以生成用于广播至区块链网络中的待验证交易(例如,图4所示的交易4x)。此时,该用户节点40a可以基于该用户1的用户私钥,对该交易4x进行签名处理,得到该交易4x对应的交易签名信息。其中,可以理解的是,该用户节点40a可以获取针对待验证交易的哈希计算规则,该哈希计算规则可以为该用户节点40a与区块链网络中的其他区块节点(例如,全量节点40b)提前约定好的摘要算法。因此,该用户节点40a可以基于该哈希计算规则对该交易4x进行哈希计算,以得到交易4x的摘要信息(例如,摘要信息h)。其中,本技术实施例可以将用户节点40a确定的交易4x的摘要信息称之为第一摘要信息。进一步地,该用户节点40a可以基于该用户1的用户私钥,对该第一摘要信息进行签名处理,从而可以得到图4所示的交易签名信息。
107.进一步地,该用户节点40a可以将交易4x和交易签名信息一并发送至图4所示的全量节点40b,以使该全量节点40b基于用户私钥对应的用户公钥(即用户1的用户公钥),对交易签名信息进行验签,得到验签结果。其中,可以理解的是,全量节点40b可以获取用户1的用户公钥,进而可以基于该用户公钥对交易签名信息进行验签,得到交易4x的第一摘要信息。与此同时,该全量节点40b还可以获取与用户节点40a相同的哈希计算规则,对交易4x进行哈希计算,从而可以得到该交易4x的摘要信息(例如,摘要信息h)。其中,本技术实施例可以将全量节点40b确定的交易4x的摘要信息称之为第二摘要信息。
108.此时,该全量节点40b可以将第一摘要信息与第二摘要信息进行比对,得到验签结果,以确定该交易4x是否被篡改。可以理解的是,若第一摘要信息与第二摘要信息不相同,则该全量节点40b可以确定验签结果指示验签失败。可选的,若第一摘要信息与第二摘要信息相同,则该全量节点40b可以确定验签结果指示验签成功,这意味着交易4x未发生篡改,且该交易4x确实是由用户节点40a发送的。
109.应当理解,在验签结果指示验签成功时,本技术实施例中的全量节点可以在全量节点的全量区块链上,获取具有最大生成时间戳的区块(例如,图2所示的区块链2a中的区块100g),进而可以将获取到的区块作为目标区块,且将该目标区块的区块头作为第一区块
头。进一步地,该全量节点可以获取该目标区块中的默克尔帕特里夏树,基于获取到的默克尔帕特里夏树,执行待验证交易对应的交易业务,以确定待验证交易信息对应的交易验证信息。
110.其中,本技术实施例中的出块节点的区块头链(即轻量区块链)的区块头中,保留有用于判断状态数据的完整性的状态快照。可以理解的是,某一区块头的状态快照可以表示对应区块的所有状态数据的固定长度,若当前区块的状态数据发生变化,则状态快照会随之变化,以此可以判断所有状态数据的完整性。这里的状态数据即代表了当前区块链网络的状态数据。比如,对于以太坊区块链网络而言,这里的状态数据可以包括某个用户的账户余额、已经发出的未确认交易;某个合约的代码、其内部的存储项的值;一些与共识机制运行相关的数据等。
111.本技术实施例中的全量节点存储的全量区块链的区块中,不仅保留有用于判断状态数据的完整性的状态快照,还保留有所有账户的完整的状态数据。可以理解的是,该全量区块链中的每个区块均可以包括区块头信息以及区块体信息。区块头信息可以包括状态快照,区块体信息可以包括默克尔帕特里夏树。默克尔帕特里夏树可以具有以下功能:存储任意长度的key

value键值对数据、提供一种快速计算所维护数据集哈希标识的机制、提供一种快速状态回滚的机制、以及提供一种称为默克尔证明的证明方法,进行轻量节点的扩展,实现简单支付验证。
112.其中,默克尔帕特里夏树(即mpt)是一种组织数据的树形结构,包括数据节点、拓展节点以及分支节点这三种类型的节点。应当理解,这里的数据节点是指树形结构的叶子节点,出现在mpt底部,用于存储具体的状态数据;这里的拓展节点是指具有一个子节点的父节点,可以包含一个任意长度字符串(key),和一个指向子节点的哈希指针;这里的分支节点是指具有1至16个子节点的父节点,有一个容量为16的哈希值数组,数组中的这16个位置的字符分别对应16进制下的0

9,a

f,并且分别有可能作为哈希指针而指向一个子节点。这16个字符具体可以包括字符“0”,字符“1”,字符“2”,字符“3”,字符“4”,字符“5”,字符“6”,字符“7”,字符“8”,字符“9”,字符“a”,字符“b”,字符“c”,字符“d”,字符“e”以及字符“f”。应当理解,本技术实施例可以将子节点指向父节点的索引关系称之为第一节点索引关系,例如,默克尔帕特里夏树中所指示的自底向上的索引关系。本技术实施例还可以将父节点指向子节点的索引关系称之为第二节点索引关系,例如,默克尔帕特里夏树中所指示的自顶向下的索引关系。
113.为便于理解,进一步地,请参见图5,图5是本技术实施例提供的一种默克尔帕特里夏树的结构示意图。如图5所示,本技术实施例中的默克尔帕特里夏树5m可以为区块链网络中的全量区块链的某一区块所存储的默克尔帕特里夏树。例如,该默克尔帕特里夏树5m可以为全量节点获取到的目标区块中的默克尔帕特里夏树(例如,上述图2所示的区块链2a的区块100g中的默克尔帕特里夏树2m)。
114.为便于理解,进一步地,请参见表1,表1是本技术实施例提供一种与当前区块链网络相关联的状态数据。如表1所示:
115.表1
[0116] keyvalue状态数据1ab567cd100
状态数据2abc1235fenghm状态数据3abc12b512.34
[0117]
其中,每个状态数据均是以(key,value)键值对的方式进行存储。表1所示的key是指状态数据的关键字符串,value是指状态数据的具体值。本技术实施例中的状态数据的数量可以包括多个,这里以3个为例,具体可以包括状态数据1、状态数据2以及状态数据3。比如,该状态数据1的关键字符串可以为“ab567cd”,且该状态数据1的具体值可以为100;该状态数据2的关键字符串可以为“abc1235”,且该状态数据2的具体值可以为fenghm;该状态数据3的关键字符串可以为“abc12b5”,且该状态数据3的具体值可以为12.34。
[0118]
可以理解的是,本技术实施例中的全量节点可以对上述表1所示的状态数据进行组织,从而构建如图5所示的默克尔帕特里夏树5m。如图5所示,该默克尔帕特里夏树5m可以包括树根节点(例如,拓展节点10z)、中间节点(例如,分支节点10f、拓展节点20z、拓展节点30z、分支节点20f、拓展节点40z以及拓展节点50z)和叶子节点(例如,数据节点10s、数据节点20s以及数据节点30s)。
[0119]
其中,该默克尔帕特里夏树5m的树根节点的树根哈希值可以作为该默克尔帕特里夏树5m所在区块的状态快照。比如,若该默克尔帕特里夏树5m为上述图2所示的区块链2a的区块100g中存储的默克尔帕特里夏树2m,则该树根哈希值可以作为图2所示的区块100g中的区块头100的状态快照,该状态快照可以用于判断图2所示的区块100g中的所有状态数据的完整性。基于此,图2所示的区块头链2b中的区块头100(即第二区块头)的状态快照也可以为该默克尔帕特里夏树5m的树根哈希值。
[0120]
应当理解,该默克尔帕特里夏树5m中的每个节点的哈希指针均可以用于指向对应子节点的子节点哈希值。例如,该拓展节点10z中可以包括一个任意长度的字符串(例如,“ab”)、以及一个用于指向子节点的哈希指针。其中,该哈希指针可以用于指向该拓展节点10z的子节点(例如,图5所示的分支节点10f)。基于此,上述表1所示的每个状态数据中的关键字符串可以对应一条从默克尔帕特里夏树5m中的树根节点到相应数据节点的真实节点路径。
[0121]
其中,对于用于存储状态数据1(例如,100)的数据节点10s而言,与该数据节点10s相关联的节点路径1可以为:拓展节点10z的哈希指针指向分支节点10f,分支节点10f中的字符“5”的哈希指针指向拓展节点20z;该拓展节点20z的哈希指针指向数据节点10s。
[0122]
对于用于存储状态数据2(例如,fenghm)的数据节点20s而言,与该数据节点20s相关联的节点路径2可以为:拓展节点10z的哈希指针指向分支节点10f,分支节点10f中的字符“c”的哈希指针指向拓展节点30z;该拓展节点30z的哈希指针指向分支节点20f;该分支节点20f中的字符“3”的哈希指针指向拓展节点40z;该拓展节点40z的哈希指针指向数据节点20s。
[0123]
对于用于存储状态数据3(例如,12.34)的数据节点30s而言,与该数据节点30s相关联的节点路径3可以为:拓展节点10z的哈希指针指向分支节点10f,分支节点10f中的字符“c”的哈希指针指向拓展节点30z;该拓展节点30z的哈希指针指向分支节点20f;该分支节点20f中的字符“b”的哈希指针指向拓展节点50z;该拓展节点50z的哈希指针指向数据节点20s。
[0124]
应当理解,本技术实施例中的全量节点可以获取目标区块中的默克尔帕特里夏
树,进而可以基于获取到的默克尔帕特里夏树,执行该待验证交易对应的交易业务,得到该交易业务对应的初始交易执行结果、状态读取集合以及状态写入集合。
[0125]
其中,可以理解的是,该全量节点可以获取目标区块中的默克尔帕特里夏树,将获取到的默克尔帕特里夏树作为待处理树,进而可以从该待处理树中,读取与待验证交易相关联的状态数据,且将读取到的状态数据作为第一状态数据。进一步地,该全量节点可以基于该第一状态数据,执行待验证交易对应的交易业务,以得到交易业务对应的初始交易执行结果,且在执行交易业务的过程中,记录模拟写入目标区块的下一区块的状态数据,将记录到的状态数据作为第二状态数据。其中,这里的初始交易执行结果可以为交易执行成功或者交易执行失败这种交易执行结果。
[0126]
比如,若全量节点接收到的该待验证交易所对应的交易业务为:从区块链网络中的用户节点对应的用户(例如,用户1)的账户中,向另一用户(例如,用户2)转移10个游戏币,那么,该全量节点读取的第一状态数据可以为图5所示的默克尔帕特里夏树5m中的数据节点10s所存储的状态数据1(例如,100),即用户1的账户余额中有100个游戏币。该全量节点在基于这100个游戏币执行待验证交易对应的交易业务的过程中,记录到的需要写入目标区块的下一区块的状态数据(即第二状态数据)可以为90,这意味着全量节点模拟执行交易业务后,用户1的账户余额中还包括90个游戏币。
[0127]
进一步地,该全量节点可以基于该待处理树,收集第一状态数据的第一存在性证明,进而可以基于第一存在性证明生成状态读取集合,进而可以基于第一存在性证明生成状态读取集合。应当理解,全量节点在执行交易业务时,读取到的与该待验证交易相关联的第一状态数据的数量可以包括一个或者多个,基于此,全量节点可以基于收集到的所有第一存在性证明,生成状态读取集合。
[0128]
如图5所示,该全量节点可以将上述图5所示的默克尔帕特里夏树5m作为待处理树,进而可以在默克尔帕特里夏树5m中查找到用于存储第一状态数据的数据节点(例如,用于100这一状态数据1的数据节点10s)。此时,该全量节点可以基于默克尔帕特里夏树5m,获取与数据节点10s相关联的节点路径(例如,节点路径1)。其中,该节点路径可以包括数据节点10s、拓展节点20z、分支节点10f以及拓展节点10z。进一步地,该全量节点可以将获取到的节点路径作为该第一状态数据的第一存在性证明,此处可以一并参见图6,图6是本技术实施例提供的一种第一状态数据的第一存在性证明的示意图。其中,图6所示的存在性证明6p即为区块链网络中的全量节点所收集到的第一状态数据的第一存在性证明。
[0129]
与此同时,本技术实施例中的全量节点还可以基于待处理树,收集该第二状态数据的可修改证明和第二存在性证明,进而可以基于可修改证明和第二存在性证明生成状态写入集合。
[0130]
其中,可以理解的是,在将该第二状态数据插入到待处理树之前,该全量节点可以获取与该第二状态数据相关联的关键字符串,进而可以基于关键字符串获取第二状态数据的可修改证明。换言之,在将第二状态数据插入到待处理树之前,该全量节点可以获取与第二状态数据相关联的关键字符串,进而可以获取待处理树所指示的第二节点索引关系(例如,自顶向下的索引关系)。进一步地,该全量节点可以基于该第二节点索引关系,从树根节点开始遍历查找与关键字符串具有相同前缀的字符。此时,该全量节点可以基于查找到的所有字符,得到待处理字符串,获取与待处理字符串相关联的存在性证明,且将获取到的存
在性证明作为第二状态数据的可修改证明。
[0131]
如图5所示,该全量节点确定的待处理树可以为图5所示的默克尔帕特里夏树5m,在将该第二状态数据插入到该默克尔帕特里夏树5m之前,该全量节点可以获取与第二状态数据(例如,90)相关联的关键字符串,进而可以获取默克尔帕特里夏树5m所指示的第二节点索引关系(例如,自顶向下的索引关系)。进一步地,该全量节点可以基于该第二节点索引关系,从树根节点(例如,图5所示的拓展节点10z)开始遍历查找与关键字符串具有相同前缀的字符。此时,该全量节点可以基于查找到的所有字符,得到待处理字符串。
[0132]
例如,若该第二状态数据(例如,90)的关键字符串为“ab567cd”,则该全量节点在图5所示的默克尔帕特里夏树5m中,可以查找到与关键字符串相匹配的所有字符,即该全量节点确定的待处理字符串(例如,待处理字符串1)为“ab567cd”。此时,该全量节点可以获取与该待处理字符串1中的字符相关联的节点,即用于存储字符“ab”的拓展节点10z、用于存储字符“5”的分支节点10f、用于存储字符“67cd”的拓展节点20z、以及该拓展节点20z的哈希指针所指示的数据节点10s。换言之,该全量节点可以直接将数据节点10s的存在性证明(例如,上述图6所示的存在性证明6p)作为与该待处理字符串1相关联的存在性证明,进而可以将与该待处理字符串1相关联的存在性证明作为该第二状态数据的可修改证明。
[0133]
可选的,若该第二状态数据(例如,90)的关键字符串为“abc5678”,则该全量节点在图5所示的默克尔帕特里夏树5m中,可以查找到与关键字符串相匹配的部分字符,即该全量节点确定的待处理字符串(例如,待处理字符串2)为“abc”。此时,该全量节点可以获取与该待处理字符串2中的字符相关联的节点,即用于存储字符“ab”的拓展节点10z和用于存储字符“c”的分支节点10f。进一步地,该全量节点可以基于获取到的这两个节点,得到与该待处理字符串2相关联的存在性证明,进而可以将与该待处理字符串2相关联的存在性证明作为该第二状态数据的可修改证明,此处可以一并参见图7,图7是本技术实施例提供的一种第二状态数据的可修改证明的示意图。其中,图7所示的可修改证明7q即为区块链网络中的全量节点所收集到的第二状态数据的可修改证明。
[0134]
进一步地,在将第二状态数据插入到待处理树之后,该全量节点可以获取第二状态数据的存在性证明,进而可以将第二状态数据的存在性证明作为第二存在性证明。其中,全量节点获取第二状态数据的第二存在性证明的具体实施方式,可以参见上述获取第一状态数据的第一存在性证明的具体实施方式,这里将不再继续进行赘述。此时,该全量节点可以基于可修改证明和第二存在性证明,生成状态写入集合。
[0135]
应当理解,该全量节点还可以获取目标区块的第一区块头中的区块标识,进而可以将执行交易业务得到的初始交易执行结果、生成的状态读取集合和状态写入集合、以及获取到的区块标识,作为待验证交易对应的交易验证信息。进一步地,该全量节点可以将该交易验证信息发送至区块链网络中的用户节点,以使该用户节点可以将该交易验证信息以及待验证交易一并发送至区块链网络中的出块节点。其中,可以理解的是,该用户节点还可以将交易签名信息也发送至出块节点,以使出块节点对待验证交易进行验签,从而可以有效确保待验证交易传输时的安全性和真实性。
[0136]
步骤s102,在轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,基于第二区块头中的第一状态快照,对状态读取集合以及状态写入集合进行校验,得到待验证交易的第一校验结果。
[0137]
其中,状态读取集合和状态写入集合是区块链网络中的全量节点基于目标区块中的默克尔帕特里夏树所生成的。具体地,该区块链网络中的出块节点(即区块链网络中的轻量节点)可以从该轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,进而可以将查找到的区块头作为第二区块头,且将第二区块头中的状态快照作为第一状态快照。与此同时,该出块节点还可以从交易验证信息包括的状态读取集合中,获取第一状态数据的第一存在性证明,进而可以基于第一状态快照,对第一存在性证明进行校验,以得到第一证明校验结果。其中,这里的第一状态数据可以为全量节点在目标区块的默克尔帕特里夏树上,读取到的与待验证交易相关联的状态数据。此外,该出块节点还可以从交易验证信息包括的状态写入集合中,获取第二状态数据的可修改证明,进而可以基于第一状态快照,对可修改证明进行校验,以得到第二证明校验结果。其中,这里的第二状态数据可以为全量节点在执行交易业务的过程中,记录到的模拟写入目标区块的下一区块的状态数据。进一步地,该出块节点可以基于第一证明校验结果和第二证明校验结果,确定待验证交易的第一校验结果。
[0138]
如图2所示,本技术实施例中的出块节点20c可以从区块头链2b中获取与第一区块头(即区块链2a的区块100g中的区块头100)中的区块标识相匹配的区块头,进而可以将获取到的区块头作为第二区块头(即区块头链2b中的区块头100)。进一步地,该出块节点20c可以获取第二区块头中的状态快照,且将获取到的状态快照作为第一状态快照。
[0139]
应当理解,区块链网络中的出块节点可以从状态读取集合中获取第一状态数据的第一存在性证明。其中,该第一存在性证明可以为全量节点从目标区块中的默克尔帕特里夏树中,获取到的与第一状态数据相关联的节点路径。该节点路径可以包含叶子节点和树根节点。进一步地,该出块节点可以获取节点路径所指示的第一节点索引关系(例如,自底向上的索引关系),进而可以基于该第一节点索引关系,将叶子节点作为子节点,且将叶子节点的上一节点作为该子节点的父节点,进而可以将子节点的子节点哈希值与父节点的哈希指针进行比对,从而可以得到初始比对结果。若初始比对结果指示比对成功,则该出块节点可以基于第一节点索引关系,更新子节点以及父节点,直到更新后的父节点为树根节点时,得到第一存在性证明的第一比对结果。与此同时,该出块节点还可以将树根节点的树根哈希值与第一状态快照进行比对,得到第一存在性证明的第二比对结果,进而可以基于第一比对结果和第二比对结果,得到第一证明校验结果。其中,本技术实施例中的出块节点可以先遍历比对子节点哈希值与父节点的哈希指针,再比对树根节点的树根哈希值与第一状态快照。可选的,该出块节点还可以先比对树根节点的树根哈希值与第一状态快照,再遍历比对子节点哈希值与父节点的哈希指针,这里将不对比对的先后顺序进行限定。
[0140]
如图6所示,区块链网络中的出块节点从状态读取集合中获取到的第一状态数据的第一存在性证明可以为图6所示的存在性证明6p。其中,存在性证明6p可以为全量节点从目标区块中的默克尔帕特里夏树中,获取到的与第一状态数据(例如,100)相关联的节点路径,这里的节点路径可以包括叶子节点(例如,用于存储第一状态数据的数据节点10s)、中间节点(例如,拓展节点20z以及分支节点10f)、树根节点(例如,拓展节点10z)。
[0141]
本技术实施例中的出块节点可以基于该节点路径指示的第一节点索引关系,将数据节点10s作为子节点,且将数据节点10s的上一节点(即拓展节点20z)作为父节点。进一步地,该出块节点可以获取数据节点10s的节点哈希值,且将该数据节点10s的节点哈希值作
为子节点哈希值。此时,该出块节点可以将数据节点10s的节点哈希值与拓展节点20z的哈希指针(例如,0x936e

)进行比对,从而可以得到初始比对结果。
[0142]
若数据节点10s的节点哈希值与拓展节点20z的哈希指针不一致,则出块节点可以确定初始比对结果指示比对失败,此时,该出块节点可以直接确定该待验证交易不具备合法性。
[0143]
可选的,若数据节点10s的节点哈希值与拓展节点20z的哈希指针一致,则出块节点可以确定初始比对结果指示比对成功,此时,该出块节点可以基于第一节点索引关系更新子节点以及父节点。换言之,该出块节点可以将拓展节点20z作为新的子节点(即第一更新子节点),且将拓展节点20z的上一节点(例如,分支节点10f)作为该第一更新子节点的父节点(即第一更新父节点),进而可以将拓展节点20z的节点哈希值与分支节点10f中字符“5”的哈希指针(例如,0xa15c

)进行比对,得到新的初始比对结果(即第一更新比对结果)。在新的初始比对结果指示成功时,该出块节点可以继续更新子节点和父节点,即将分支节点10f作为最新的子节点(即第二更新子节点),将分支节点10f的上一节点(例如,拓展节点10z)作为该第二更新子节点的父节点(即第二更新父节点),进而可以将分支节点10f的节点哈希值与拓展节点10z的哈希指针(例如,0x5f90

)进行比对,得到最新的初始比对结果(即第二更新比对结果)。可以理解的是,当第二更新父节点为拓展节点10z(即默克尔帕特里夏树的树根节点)时,该出块节点可以结束更新,进而可以将最新的初始比对结果作为该存在性证明6p的第一比对结果。
[0144]
进一步地,该出块节点可以获取拓展节点10z的节点哈希值(即树根哈希值),将该拓展节点10z的节点哈希值与第一状态快照进行比对,得到存在性证明6p的第二比对结果。
[0145]
可以理解的是,若第一比对结果指示比对失败,且第二比对结果指示树根哈希值与第一状态快照不一致,则该出块节点可以确定第一证明校验结果指示校验失败,此时,该出块节点可以直接确定该待验证交易不具备合法性。可选的,若第一比对结果指示比对成功,且第二比对结果指示树根哈希值与第一状态快照一致,则该出块节点可以确定第一证明校验结果指示校验成功。此时,该出块节点可以继续从交易验证信息包括的状态写入集合中,获取第二状态数据的可修改证明,进而可以基于第一状态快照,对可修改证明进行校验,以得到第二证明校验结果。其中,该出块节点确定第二证明校验结果的具体实施方式可以参见上述确定第一证明校验结果的具体实施方式,这里将不再继续进行赘述。
[0146]
此时,该出块节点可以基于第一证明校验结果和第二证明校验结果,确定待验证交易的第一校验结果。应当理解,在第一证明校验结果指示校验失败,或者第二证明校验结果指示校验失败时,该出块节点可以确定待验证交易的第一校验结果指示校验失败,此时,该出块节点可以确定该待验证交易不具备合法性。可选的,在第一证明校验结果和第二证明校验结果均指示校验成功时,该出块节点可以确定待验证交易的第一校验结果指示校验成功,进而可以执行下述步骤s103,继续对待验证交易进行合法性交易。
[0147]
步骤s103,在第一校验结果指示校验成功时,基于状态读取集合执行交易业务,得到交易业务对应的目标交易执行结果以及待写入状态数据。
[0148]
具体地,在第一校验结果指示校验成功时,出块节点可以从状态读取集合中的第一存在性证明中获取第一状态数据,进而可以基于该第一状态数据,执行该交易业务,以得到交易业务对应的交易执行结果。此时,本技术实施例可以将出块节点执行交易业务后得
到的交易执行结果称之为目标交易执行结果。应当理解,该出块节点可以在执行交易业务的过程中,记录需要写入目标区块的下一区块的状态数据。其中,本技术实施例可以将出块节点记录的需要写入目标区块的下一区块的状态数据称之为待写入状态数据。
[0149]
比如,若出块节点接收到的用户节点发送的待验证交易所对应的交易业务为:从区块链网络中的用户节点对应的用户(例如,用户1)的账户中,向另一用户(例如,用户2)转移10个游戏币,那么,该出块节点可以基于状态读取集合中的第一状态数据(例如,100),执行该待验证交易对应的交易业务,以得到目标交易执行结果。此外,该出块节点在交易业务执行的过程中记录到的需要写入目标区块的下一区块的状态数据可以为90。这意味着在出块节点执行待验证交易对应的交易业务之后,用户1的账户余额将由100个游戏币更新为90个游戏币。
[0150]
步骤s104,基于初始交易执行结果、目标交易执行结果、状态写入集合以及待写入状态数据,对待验证交易进行合法性校验。
[0151]
具体地,该出块节点可以将初始交易执行结果和目标交易执行结果进行比对,得到第三比对结果。与此同时,该出块节点还可以从状态写入集合中获取第二状态数据的第二存在性证明,进而可以基于第二区块头中的第一状态快照,对第二存在性证明进行校验。在校验成功时,该出块节点可以将第二状态数据与待写入状态数据进行比对,得到第四比对结果。此时,该出块节点可以基于第三比对结果和第四比对结果,得到待验证交易的第二校验结果,且基于第二校验结果,对待验证交易进行合法性校验。
[0152]
可以理解的是,本技术实施例中的出块节点可以先比对初始交易执行结果和目标交易执行结果,再校验第二存在性证明以及比对第二状态数据和待写入状态数据。其中,若第三比对结果指示初始交易执行结果与目标交易执行结果不一致,则出块节点可以确定第三比对结果指示比对失败,即待验证交易不具备合法性。可选的,若第三比对结果指示初始交易执行结果和目标交易执行结果一致,则该出块节点可以确定第三比对结果指示比对成功,进而可以继续基于第一状态快照,对该状态写入集合中的第二存在性证明进行校验。其中,出块节点校验第二存在性证明的具体实施方式可以参见上述校验第一存在性证明的具体实施方式,这里将不再继续进行赘述。在第二存在性证明校验失败时,该出块节点可以确定待验证交易不具备合法性。应当理解,在第二存在性证明校验成功时,该出块节点可以继续比对第二存在性证明中的第二状态数据与出块节点记录到的待写入状态数据,从而可以得到第四比对结果。若第四比对结果指示第二状态数据与待写入状态数据不一致,则出块节点确定第四比对结果比对失败,基于此,该出块节点可以确定待验证交易的第二校验结果指示校验失败,即待验证交易不具备合法性。可选的,若第四比对结果指示第二状态数据与待写入状态数据一致,则该出块节点可以确定第四比对结果指示比对成功,基于此,该出块节点可以确定待验证交易的第二校验结果指示校验成功,即待验证交易具备合法性。
[0153]
其中,该出块节点还可以先校验第二存在性证明以及比对第二状态数据和待写入状态数据,再比对初始交易执行结果和目标交易执行结果。这里将不对比对顺序进行限定。
[0154]
由此可见,本技术实施例中的全量节点在获取到用户节点发送的待验证交易时,可以基于全量区块链中目标区块,执行待验证交易对应的交易业务,进而可以将执行交易业务后得到的初始交易执行结果、状态读取集合、状态写入集合以及目标区块的区块标识作为该待验证交易的交易验证信息。在区块链网络中的出块节点接收到待验证交易的同
时,会一并获取全量节点确定的交易验证信息。基于此,该出块节点无需花费时间,从全量区块链的创世区块开始同步所有状态数据,而是直接从出块节点的区块头链中获取与区块标识相匹配的第二区块头,并根据第二区块头的第一状态快照以及交易验证信息,快速对待验证交易进行合法性校验,从而可以提升合法性校验的效率,进而可以减轻出块节点的运行负担,以至于大大加快了出块节点的启动时间。此外,由于本技术实施例中的出块节点为区块链网络中的轻量节点,因此,该出块节点不需要保留完整的区块数据,而是保留区块头首尾相连而构成的区块头链上的部分数据,即可对待验证交易进行验证,从而可以大大较少了存储空间的消耗。
[0155]
进一步地,请参见图8,图8是本技术实施例提供的一种交易验证方法的流程示意图。如图8所示,该方法可以由区块链网络中的用户节点、全量节点以及出块节点共同执行,该用户节点可以为区块链网络中的由用户控制的区块链节点,例如,该用户节点可以为上述图2所示的用户节点20a。本技术实施例中的全量节点可以为区块链网络中的具有保存完整区块数据功能的区块链节点,例如,该全量节点可以为上述图2所示的全量节点20b。该出块节点可以为区块链网络中的轻量节点,例如,该出块节点可以为上述图2所示的出块节点20c。该方法至少可以包括以下步骤s201

步骤s209:
[0156]
步骤s201,用户节点将为用户组装的待验证交易发送至全量节点;
[0157]
步骤s202,全量节点在获取到与区块链网络中的用户节点相关联的待验证交易时,在全量节点的全量区块链上,将具有最大生成时间戳的区块作为目标区块,且将目标区块的区块头作为第一区块头;
[0158]
步骤s203,全量节点获取目标区块中的默克尔帕特里夏树,基于目标区块中的默克尔帕特里夏树,执行待验证交易对应的交易业务,得到交易业务对应的初始交易执行结果、状态读取集合以及状态写入集合;
[0159]
步骤s204,全量节点获取第一区块头中的区块标识,将初始交易执行结果、状态读取集合、状态写入集合以及区块标识,作为待验证交易对应的交易验证信息;
[0160]
步骤s205,全量节点将交易验证信息发送至用户节点;
[0161]
步骤s206,用户节点在接收到交易验证信息时,将交易验证信息和待验证信息发送至出块节点;
[0162]
步骤s207,出块节点在轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,基于第二区块头中的第一状态快照,对状态读取集合以及状态写入集合进行校验,得到待验证交易的第一校验结果;
[0163]
步骤s208,出块节点在第一校验结果指示校验成功时,基于状态读取集合执行交易业务,得到交易业务对应的目标交易执行结果以及待写入状态数据;
[0164]
步骤s209,出块节点基于初始交易执行结果、目标交易执行结果、状态写入集合以及待写入状态数据,对待验证交易进行合法性校验。
[0165]
其中,该步骤s201

步骤s209的具体实施方式可参见上述图3所对应实施例中对步骤s101

步骤s104的描述,这里将不再赘述。
[0166]
为便于理解,进一步地,请参见图9,图9是本技术实施例提供的一种交易验证方法的流程示意图。如图9所示,该方法可以由区块链网络中的用户节点、全量节点以及出块节点共同执行,该用户节点可以为区块链网络中的由用户控制的区块链节点,例如,该用户节
点可以为上述图2所示的用户节点20a。本技术实施例中的全量节点可以为区块链网络中的具有保存完整区块数据功能的区块链节点,例如,该全量节点可以为上述图2所示的全量节点20b。该出块节点可以为区块链网络中的轻量节点,例如,该出块节点可以为上述图2所示的出块节点20c。
[0167]
如图9所示,本技术实施例中的用户节点可以在用户执行与待验证交易相关联的触发操作时,执行步骤s91,为用户组装待验证交易,进而可以将该待验证交易发送至全量节点。可以理解的是,该全量节点在接收到待验证交易时,可以执行步骤s92,基于全量节点的全量区块链上的目标区块(即具有最大生成时间戳的区块),执行该待验证交易对应的交易业务,以得到交易业务对应的交易执行结果(即初始交易执行结果)、状态读取集合以及状态写入集合,进而可以将目标区块的第一区块头(例如,图2所示的区块100g的区块头100)中的区块标识、初始交易执行结果、状态读取集合以及状态写入集合作为待验证交易的交易验证信息,进而可以将该交易验证信息发送至用户节点。用户节点在接收到交易验证信息时,可以执行步骤s93,将交易验证信息以及待验证交易一并转发至出块节点。
[0168]
出块节点在接收到待验证交易和交易验证信息时,可以执行步骤s94,从出块节点的区块头链中,获取与第一区块头的区块标识相匹配的区块头(即第二区块头),进而可以基于该第二区块头(例如,图2所示的区块头链2b中的区块头100)中的状态快照(即第一状态快照),校验交易验证信息中的状态读取集合和状态写入集合,得到第一校验结果,在第一校验结果指示校验成功时,出块节点可以执行步骤s95,基于状态读取集合中的第一状态数据,执行交易业务,得到目标交易执行结果以及记录所有需要写入的数据(即待写入状态数据),进而可以基于交易验证信息中的初始交易执行结果和状态写入集合、以及执行交易业务后得到的目标交易执行结果和待写入状态数据,对待验证交易进行合法性校验。其中,本技术实施例中对待验证交易进行合法性校验的具体实施方式可以参见上述图3所对应实施例中对步骤s101

步骤s104的描述,这里将不再赘述。
[0169]
在待验证交易具备合法性时,出块节点可以执行步骤s96,基于状态写入集合中的第二状态数据,生成与该第二状态数据相关联的新的状态快照(即第二状态快照)。进一步地,该出块节点可以执行步骤s97,基于待验证交易、目标交易执行结果以及第二状态快照,生成新的区块头(即待处理区块头)。其中,该待处理区块头可以用于作为区块头链上的第二区块头的下一区块头。此时,该出块节点可以将待处理区块头写入区块头链,且在将该待处理区块头成功写入至区块头链后,可以将待处理区块头发送至全量节点,以使全量节点执行步骤s98,基于该待处理区块头中的交易(已经确定具备合法性的待验证交易),重新执行对应交易业务,生成新的区块(即待处理区块),进而可以将待处理区块作为全量区块链上的目标区块的下一区块,以写入全量区块链中。
[0170]
为便于理解,进一步地,请参见图10,图10是本技术实施例提供的一种生成待处理区块的场景示意图。如图10所示,本技术实施例中的全量节点100b可以为区块链网络中的具有保存完整区块数据功能的区块链节点,例如,该全量节点100b可以为上述图2所示的全量节点20b。该出块节点100c可以为区块链网络中的轻量节点,例如,该出块节点100c可以为上述图2所示的出块节点20c。
[0171]
如图10所示,本技术实施例中的出块节点100c的区块头链可以为图10所示的区块头链10b。其中,该区块头链10b中的区块头100可以为该出块节点100c基于待验证交易对应
的交易验证信息中的区块标识所确定的第二区块头,该第二区块头可以包括第一状态快照。该区块头链10b中的区块头101可以为该出块节点100c在确定该待验证交易具备合法性时所生成的新的区块头(即待处理区块头),该区块头101中可以包括第二状态快照。
[0172]
其中,可以理解的是,该出块节点100c可以从交易验证信息中的状态写入集合,获取全量节点100b在模拟执行该待验证交易对应的交易业务之后所记录的第二状态数据。进一步地,该出块节点100c可以基于该第二状态数据,生成与该第二状态数据相关联的新的状态快照(即第二状态快照)。此时,该出块节点100c可以对待验证交易、目标交易执行结果以及第二状态快照进行打包处理,从而可以得到新的区块头(即待处理区块头),进而可以将该待处理区块头作为区块头100的下一区块头(即区块头101),以将该区块头101写入至图10所示的区块头链10b。
[0173]
应当理解,在出块节点100c将区块头101成功写入至图10所示的区块头链10b之后,该出块节点100c可以将该区块头101发送至图10所示的全量节点100b。其中,为了有效确保待处理区块头在数据传输时的安全性,该出块节点100c可以先获取全量节点100b的节点公钥,对区块头101进行加密处理,从而可以得到加密数据信息,然后,将该加密数据信息发送至全量节点100b。
[0174]
全量节点100b在接收到该加密数据信息时,可以基于全量节点100b的节点私钥,对该加密数据信息进行解密处理,从而可以得到出块节点100c生成的区块头101。此时,该全量节点100b可以获取区块头101中的待验证交易,进而可以重新执行该待验证交易对应的交易业务,以生成新的区块(即待处理区块)。如图10所示,区块链10a可以为该全量节点100b的全量区块链,该区块链10a中的区块100g可以为全量节点100b确定的目标区块。
[0175]
其中,该全量节点100b在重新执行该待验证交易对应的交易业务的过程中,可以记录需要写入至待处理区块的状态数据(即目标状态数据),进而可以基于该目标状态数据,对区块100g中的默克尔帕特里夏树(即待处理树)进行更新,以得到新的默克尔帕特里夏树(即目标默克尔帕特里夏树),且基于该目标默克尔帕特里夏树,生成待处理区块。应当理解,全量节点100b在生成待处理区块后,可以将该待处理区块作为区块100g的下一区块(即图10所示的区块101g),以将该待处理区块成功写入至区块链10a。其中,该区块101g中的生成时间戳用于更新该区块链10a上具有最大生成时间戳。
[0176]
由此可见,本技术实施例中的全量节点在获取到用户节点发送的待验证交易时,可以基于全量区块链中目标区块,执行待验证交易对应的交易业务,进而可以将执行交易业务后得到的初始交易执行结果、状态读取集合、状态写入集合以及目标区块的区块标识作为该待验证交易的交易验证信息。在区块链网络中的出块节点接收到待验证交易的同时,会一并获取全量节点确定的交易验证信息。基于此,该出块节点无需花费时间,从全量区块链的创世区块开始同步所有状态数据,而是直接根据出块节点的区块头链中的第二区块头的第一状态快照,以及交易验证信息,确定待验证交易的合法性,从而可以减轻出块节点的运行负担,以至于大大加快了出块节点的启动时间。此外,由于本技术实施例中的出块节点为区块链网络中的轻量节点,因此,该出块节点不需要保留完整的区块数据,而是保留区块头首尾相连而构成的区块头链上的部分数据,即可对待验证交易进行验证,从而可以大大较少了存储空间的消耗。在出块节点验证待验证交易具备合法性时,还可以基于该待验证交易生成新的区块头(即待处理区块头),且将新的区块头发送至全量节点,以使全量
节点基于新的区块头生成新的区块,进而可以将具备合法性的该待验证交易成功写入至全量区块链。
[0177]
进一步地,请参见图11,图11是本技术实施例提供的一种交易验证装置的结构示意图。该交易验证装置1可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如,该交易验证装置1为一个应用软件;该交易验证装置1可以用于执行本技术实施例提供的方法中的相应步骤。如图11所示,该交易验证装置1可以运行于区块链网络中的出块节点,该出块节点可以为该区块链网络中的轻量节点,例如,该出块节点可以为上述图2所对应实施例中的出块节点20c。该交易验证装置1可以包括:交易获取模块10,集合校验模块20,目标执行结果确定模块30,合法性校验模块40,状态快照生成模块50,待处理区块头生成模块60,待处理区块头写入模块70,加密处理模块80以及加密数据信息发送模块90。
[0178]
该交易获取模块10,用于获取区块链网络中的用户节点发送的待验证交易以及待验证交易对应的交易验证信息;交易验证信息是由区块链网络中的全量节点在执行待验证交易对应的交易业务后所确定的;交易验证信息包括状态读取集合、状态写入集合、初始交易执行结果以及区块标识;区块标识用于指向全量节点的全量区块链上具有最大生成时间戳的目标区块;且目标区块的第一区块头中包含区块标识;
[0179]
该集合校验模块20,用于在轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,基于第二区块头中的第一状态快照,对状态读取集合以及状态写入集合进行校验,得到待验证交易的第一校验结果。
[0180]
其中,状态读取集合和状态写入集合是全量节点基于目标区块中的默克尔帕特里夏树所生成的;
[0181]
该集合校验模块20包括:状态快照获取单元201,读取集合校验单元202,写入集合校验单元203以及校验结果确定单元204。
[0182]
该状态快照获取单元201,用于从轻量节点的区块头链中,查找与第一区块头中的区块标识相匹配的区块头,将查找到的区块头作为第二区块头,且将第二区块头中的状态快照作为第一状态快照;
[0183]
该读取集合校验单元202,用于从状态读取集合中获取第一状态数据的第一存在性证明,基于第一状态快照,对第一存在性证明进行校验,得到第一证明校验结果;第一状态数据为全量节点在目标区块中的默克尔帕特里夏树上读取到的与待验证交易相关联的状态数据。
[0184]
其中,该读取集合校验单元202包括:证明获取子单元2021,初始比对结果确定子单元2022,第一比对结果确定子单元2023,第二比对结果确定子单元2024以及校验结果确定子单元2025。
[0185]
该证明获取子单元2021,用于从状态读取集合中获取第一状态数据的第一存在性证明;第一存在性证明为全量节点从目标区块中的默克尔帕特里夏树中,获取到的与第一状态数据相关联的节点路径;节点路径包含叶子节点和树根节点;叶子节点用于存储第一状态数据;
[0186]
该初始比对结果确定子单元2022,用于基于节点路径所指示的第一节点索引关系,将叶子节点作为子节点,且将叶子节点的上一节点作为子节点对应的父节点,将子节点的子节点哈希值与父节点的哈希指针进行比对,得到初始比对结果;
[0187]
该第一比对结果确定子单元2023,用于若初始比对结果指示比对成功,则基于第一节点索引关系更新子节点以及父节点,直到更新后的父节点为树根节点时,得到第一存在性证明的第一比对结果;
[0188]
该第二比对结果确定子单元2024,用于将树根节点的树根哈希值与第一状态快照进行比对,得到第一存在性证明的第二比对结果;
[0189]
该校验结果确定子单元2025,用于基于第一比对结果和第二比对结果,得到第一证明校验结果。
[0190]
其中,该证明获取子单元2021,初始比对结果确定子单元2022,第一比对结果确定子单元2023,第二比对结果确定子单元2024以及校验结果确定子单元2025的具体实现方式可以参见上述图3所对应实施例中对第一证明校验结果的描述,这里将不再继续进行赘述。
[0191]
该写入集合校验单元203,用于从状态写入集合中获取第二状态数据的可修改证明,基于第一状态快照,对可修改证明进行校验,得到第二证明校验结果;第二状态数据为全量节点在执行交易业务的过程中记录到的模拟写入目标区块的下一区块的状态数据;
[0192]
该校验结果确定单元204,用于基于第一证明校验结果和第二证明校验结果,确定待验证交易的第一校验结果。
[0193]
其中,该状态快照获取单元201,读取集合校验单元202,写入集合校验单元203以及校验结果确定单元204的具体实现方式可以参见上述图3所对应实施例中对步骤s102的描述,这里将不再继续进行赘述。
[0194]
该目标执行结果确定模块30,用于在第一校验结果指示校验成功时,基于状态读取集合执行交易业务,得到交易业务对应的目标交易执行结果以及待写入状态数据;
[0195]
该合法性校验模块40,用于基于初始交易执行结果、目标交易执行结果、状态写入集合以及待写入状态数据,对待验证交易进行合法性校验。
[0196]
其中,该合法性校验模块40包括:交易执行结果比对单元401,证明校验单元402,状态数据比对单元403以及合法性校验单元404。
[0197]
该交易执行结果比对单元401,用于将初始交易执行结果和目标交易执行结果进行比对,得到第三比对结果;
[0198]
该证明校验单元402,用于从状态写入集合中获取第二状态数据的第二存在性证明,基于第一状态快照,对第二存在性证明进行校验;
[0199]
状态数据比对单元403,用于在校验成功时,将第二状态数据与待写入状态数据进行比对,得到第四比对结果;
[0200]
该合法性校验单元404,用于基于第三比对结果和第四比对结果,得到待验证交易的第二校验结果,且基于第二校验结果,对待验证交易进行合法性校验。
[0201]
其中,该交易执行结果比对单元401,证明校验单元402,状态数据比对单元403以及合法性校验单元404的具体实现方式可以参见上述图3所对应实施例中对步骤s104的描述,这里将不再继续进行赘述。
[0202]
该状态快照生成模块50,用于在确定待验证交易具备合法性时,基于状态写入集合中的第二状态数据,生成与第二状态数据相关联的第二状态快照;
[0203]
该待处理区块头生成模块60,用于基于待验证交易、目标交易执行结果以及第二状态快照,生成待处理区块头;待处理区块头用于作为第二区块头的下一区块头;
[0204]
该待处理区块头写入模块70,用于将待处理区块头写入区块头链。
[0205]
该加密处理模块80,用于在将待处理区块头成功写入区块头链后,获取全量节点的节点公钥,对待处理区块头进行加密处理,得到加密数据信息;
[0206]
该加密数据信息发送模块90,用于将加密数据信息发送至全量节点,以使全量节点基于全量节点的节点私钥,对加密数据信息进行解密处理,得到待处理区块头;待处理区块头用于指示全量节点生成待处理区块头对应的待处理区块;待处理区块用于作为全量区块链上的目标区块的下一区块。
[0207]
其中,该交易获取模块10,集合校验模块20,目标执行结果确定模块30,合法性校验模块40,状态快照生成模块50,待处理区块头生成模块60,待处理区块头写入模块70,加密处理模块80以及加密数据信息发送模块90的具体实现方式可以参见上述图3所对应实施例中对步骤s101

步骤s104的描述,这里将不再继续进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0208]
进一步地,请参见图12,图12是本技术实施例提供的一种交易验证装置的结构示意图。该交易验证装置2可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如,该交易验证装置2为一个应用软件;该交易验证装置2可以用于执行本技术实施例提供的方法中的相应步骤。如图12所示,该交易验证装置2可以运行于区块链网络中的全量节点,该全量节点可以为上述图2所对应实施例中的全量节点20b。该交易验证装置2可以包括:目标区块确定模块100,初始执行结果确定模块200以及验证信息确定模块300。
[0209]
该目标区块确定模块100,用于在获取到与区块链网络中的用户节点相关联的待验证交易时,在全量节点的全量区块链上,将具有最大生成时间戳的区块作为目标区块,且将目标区块的区块头作为第一区块头。
[0210]
其中,目标区块确定模块100包括:签名信息接收单元1001,签名信息验签单元1002以及目标区块确定单元1003。
[0211]
该签名信息接收单元1001,用于接收区块链网络中的用户节点发送的待验证交易对应的交易签名信息;交易签名信息为用户节点基于用户私钥,对待验证交易进行签名处理后所得到的;
[0212]
该签名信息验签单元1002,用于获取用户私钥对应的用户公钥,基于用户公钥对交易签名信息进行验签,得到验签结果;
[0213]
该目标区块确定单元1003,用于在验签结果指示验签成功时,在全量节点的全量区块链上,获取具有最大生成时间戳的区块,将获取到的区块作为目标区块,且将目标区块的区块头作为第一区块头。
[0214]
其中,该签名信息接收单元1001,签名信息验签单元1002以及目标区块确定单元1003的具体实现方式可以参见上述图8所对应实施例中对步骤s202的描述,这里将不再继续进行赘述。
[0215]
该初始执行结果确定模块200,用于获取目标区块中的默克尔帕特里夏树,基于目标区块中的默克尔帕特里夏树,执行待验证交易对应的交易业务,得到交易业务对应的初始交易执行结果、状态读取集合以及状态写入集合。
[0216]
其中,初始执行结果确定模块200包括:第一状态数据确定单元2001,第二状态数据确定单元2002,读取集合生成单元2003以及写入集合生成单元2004。
[0217]
该第一状态数据确定单元2001,用于获取目标区块中的默克尔帕特里夏树,将获取到的默克尔帕特里夏树作为待处理树,从待处理树中读取与待验证交易相关联的状态数据,将读取到的状态数据作为第一状态数据;
[0218]
该第二状态数据确定单元2002,用于基于第一状态数据,执行待验证交易对应的交易业务,得到交易业务对应的初始交易执行结果,且在执行交易业务的过程中,记录模拟写入目标区块的下一区块的状态数据,将记录到的状态数据作为第二状态数据;
[0219]
该读取集合生成单元2003,用于基于待处理树,收集第一状态数据的第一存在性证明,基于第一存在性证明生成状态读取集合;
[0220]
该写入集合生成单元2004,用于基于待处理树,收集第二状态数据的可修改证明和第二存在性证明,基于可修改证明和第二存在性证明生成状态写入集合。
[0221]
其中,该写入集合生成单元2004包括:可修改证明获取子单元20041,存在性证明获取子单元20042以及写入集合生成子单元20043。
[0222]
该可修改证明获取子单元20041,用于在将第二状态数据插入到待处理树之前,获取与第二状态数据相关联的关键字符串,基于关键字符串获取第二状态数据的可修改证明。
[0223]
其中,待处理树包含树根节点;
[0224]
该可修改证明获取子单元20041还用于:
[0225]
在将第二状态数据插入到待处理树之前,获取与第二状态数据相关联的关键字符串;
[0226]
获取待处理树所指示的第二节点索引关系,基于第二节点索引关系,从树根节点开始遍历查找与关键字符串具有相同前缀的字符;
[0227]
基于查找到的所有字符,得到待处理字符串,获取与待处理字符串相关联的存在性证明,且将获取到的存在性证明作为第二状态数据的可修改证明。
[0228]
该存在性证明获取子单元20042,用于在将第二状态数据插入到待处理树之后,获取第二状态数据的存在性证明,将第二状态数据的存在性证明作为第二存在性证明;
[0229]
该写入集合生成子单元20043,用于基于可修改证明和第二存在性证明,生成状态写入集合。
[0230]
其中,该可修改证明获取子单元20041,存在性证明获取子单元20042以及写入集合生成子单元20043的具体实现方式可以参见上述图3所对应实施例中对状态写入集合的描述,这里将不再继续进行赘述。
[0231]
其中,该第一状态数据确定单元2001,第二状态数据确定单元2002,读取集合生成单元2003以及写入集合生成单元2004的具体实现方式可以参见上述图8所对应实施例中对步骤s208的描述,这里将不再继续进行赘述。
[0232]
该验证信息确定模块300,用于获取第一区块头中的区块标识,将初始交易执行结果、状态读取集合、状态写入集合以及区块标识,作为待验证交易对应的交易验证信息;交易验证信息用于指示区块链网络中的出块节点,基于区块头链中的第二区块头中的第一状态快照,对待验证交易进行合法性校验;第二区块头为区块头链中与区块标识相匹配的区块头;出块节点为区块链网络中的轻量节点。
[0233]
其中,该目标区块确定模块100,初始执行结果确定模块200以及验证信息确定模
块300的具体实现方式可以参见上述图8所对应实施例中对步骤s201

步骤s209的描述,这里将不再继续进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0234]
进一步地,请参见图13,图13是本技术实施例提供的一种计算机设备的示意图。如图13所示,该计算机设备3000可以为上述图2对应实施例中的出块节点20c,该计算机设备3000可以包括:至少一个处理器3001,例如cpu,至少一个网络接口3004,用户接口3003,存储器3005,至少一个通信总线3002。其中,通信总线3002用于实现这些组件之间的连接通信。其中,用户接口3003可以包括显示屏(display)、键盘(keyboard),网络接口3004可选地可以包括标准的有线接口、无线接口(如wi

fi接口)。存储器3005可以是高速ram存储器,也可以是非不稳定的存储器(non

volatile memory),例如至少一个磁盘存储器。存储3005可选地还可以是至少一个位于远离前述处理器3001的存储装置。如图13所示,作为一种计算机存储介质的存储器3005可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
[0235]
在图13所示的计算机设备3000中,网络接口3004主要用于进行网络通信;而用户接口3003主要用于为用户提供输入的接口;而处理器3001可以用于调用存储器3005中存储的设备控制应用程序。
[0236]
应当理解,本技术实施例中所描述的计算机设备3000可执行前文图3或者图8所对应实施例中对该交易验证方法的描述,也可执行前文图11所对应实施例中对该交易验证装置1或者图12所对应实施例中对该交易验证装置2的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0237]
此外,这里需要指出的是:本技术实施例还提供了一种计算机可读存储介质,且该计算机可读存储介质中存储有前文提及的交易验证装置1或者交易验证装置2所执行的计算机程序,且该计算机程序包括程序指令,当该处理器执行该程序指令时,能够执行前文图3或者图8所对应实施例中对该交易验证方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本技术方法实施例的描述。作为示例,程序指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行,分布在多个地点且通过通信网络互连的多个计算设备可以组成区块链系统。
[0238]
本技术一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备可执行前文图3或者图8所对应实施例中对交易验证方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0239]
进一步的,请参见图14,图14是本技术实施例提供的一种数据处理系统的结构示意图。该数据处理系统3可以包含数据处理装置141a和数据处理装置142a。其中,数据处理装置141a可以为上述图11所对应实施例中的交易验证装置1,可以理解的是,该数据处理装置141a可以集成在上述图2所对应实施例中的出块节点20c,因此,这里将不再进行赘述。其中,数据处理装置142a可以为上述图12所对应实施例中的交易验证装置2,可以理解的是,该数据处理装置142a可以集成在上述图2所对应实施例中的全量节点20b,因此,这里将不
再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的数据处理系统实施例中未披露的技术细节,请参照本技术方法实施例的描述。
[0240]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(read

only memory,rom)或随机存储记忆体(random access memory,ram)等。
[0241]
以上所揭露的仅为本技术较佳实施例而已,当然不能以此来限定本技术之权利范围,因此依本技术权利要求所作的等同变化,仍属本技术所涵盖的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1