一种交易信息验证方法及相关装置
技术领域
本发明涉及区块链技术,尤其涉及一种交易信息验证方法、设备、系统及计算机可读存储介质。
背景技术
区块链是一个不断连续增长的记录列表,这些列表通过密码学方法前后相连起来,具有不可篡改、公开、透明的特性。
区块链中,由记账节点将交易进行打包得到区块,再将区块添加到区块链中,记账节点也即挖矿节点,是指在区块链系统中参与共识的节点。记账节点在将交易打包为区块之前还需要验证当前交易是否正确,也就是需要验证交易双方对应的状态数据是否能够满足交易的进行,因此,记账节点为了能够验证交易双方的状态数据通常需要保存有整个区块链的数据,根据区块链的数据确定对应交易双方的状态数据,再进行验证。
这就要求参与共识的记账节点需要较高的存储能力,来保存整个区块链的数据,随着区块链数据的不断增长,对记账节点的存储能力的要求也就越高,这将造成记账节点的成本十分高。
发明内容
本发明的主要目的在于提供一种交易信息验证方法、设备、系统及计算机可读存储介质,旨在解决现有技术中存在的对记账节点存储能力要求过高的技术问题。
为实现上述目的,本发明提供的一种交易信息验证方法,所述方法应用于区块链网络中的轻量节点,所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据,所述方法包括:
接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息;
向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求,以使所述全量节点利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
接收所述全量节点发送的所述目标状态数据与所述第一Merkle proof,利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
可选地,所述状态树包括利用十六进制表示节点key的分支节点;
则所述向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求,包括:
将所述转出方账号转换为十六进制;
向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述数据获取请求包括十六进制的转出方账号,以使所述全量节点根据所述十六进制的转出方账号在预设状态树中确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof。
可选地,当所述轻量节点将所属分片切换到目标分片时,所述方法还包括:
同步所述目标分片中现有轻量节点保存的状态树的根节点数据。
可选地,所述待验证信息包括nonce和/或转出方账号的balance。
可选地,所述待验证信息还包括智能合约数据树的根节点信息;其中,所述智能合约数据树为用于保存智能合约数据的MPT树;
则在所述利用所述状态数据进行所述待验证信息的验证之后,所述方法还包括:
向所述全量节点发送获取待验证智能合约数据的数据获取请求,以使所述全量节点利用所述智能合约数据树确定待验证智能合约数据以及与所述待验证智能合约数据树对应的第二Merkle proof;其中,所述第二Merkle proof为用于结合所述待验证智能合约数据计算所述智能合约数据树的根节点信息的必要节点;所述智能合约数据为需要被智能合约操作的数据;
利用所述第二Merkle proof与验证通过的智能合约数据树的根节点信息验证所述待验证智能合约数据是否真实,如果真实则对所述待验证智能合约数据进行智能合约中的操作。
本申请还提供一种轻量节点,所述轻量节点包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的交易信息验证程序,所述交易信息验证程序被所述处理器执行时实现如任一项所述的方法。
本申请还提供一种交易信息验证系统,所述系统应用于区块链网络中的轻量节点,所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据,所述系统包括:
接收模块,用于接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息;
发送模块,用于向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求,以使所述全量节点利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
验证模块,用于接收所述全量节点发送的所述目标状态数据与所述第一Merkleproof,利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有交易信息验证程序,所述交易信息验证程序可被一个或多个处理器执行,以实现如任一项所述的交易信息验证方法。
本申请还提供一种交易信息验证方法,所述方法应用于全量节点,包括:
接收轻量节点发送的获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述待验证信息为所述轻量节点通过接收到的待处理交易确定的待验证信息;所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
向所述轻量节点发送所述目标状态数据与所述第一Merkle proof,以使所述轻量节点利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
本申请还提供一种区块链系统,所述区块链系统包括:
轻量节点,用于接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息;向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求;接收所述全量节点发送的所述目标状态数据与所述第一Merkle proof,利用所述第一Merkleproof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证;全量节点,其中,所述全量节点用于接收轻量节点发送的获取与所述待验证信息相关的目标状态数据的数据获取请求;利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkleproof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;向所述轻量节点发送所述目标状态数据与所述第一Merkle proof。
由此可见,本申请提供的交易信息验证方法,应用于轻量节点,轻量节点保存状态树的根节点,状态树用于保存所述区块链网络中各用户账号的状态数据,在接收到待处理交易后,确定交易对应的转出方账号和待验证信息,并向全量节点发起与待验证信息相关的目标状态数据获取请求,以获取到目标状态数据和用于验证目标状态数据是否真实的Merkle proof,根据Merkle树原理,轻量节点中只需要保存状态树的根节点,在验证目标状态数据时,利用Merkle proof和保存的真实的根节点就可以验证出目标状态数据是否真实。因此,对于作为记账节点的轻量节点来说,无需保存所有用户账号的状态数据,只需要保存状态树的根节点就能完成待验证信息的验证并且保证验证结果的真实可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例的流程示意图;
图2为本发明提供的一种Merkle树结构示意图;
图3为本发明提供的一种MPT树结构示意图;
图4为本发明另一实施例的流程示意图;
图5为本发明一实施例揭露的交易信息验证设备的内部结构示意图;
图6为本发明一实施例揭露的交易信息验证系统的结构示意图;
图7为本发明另一实施例的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明提供一种交易信息验证方法。
参照图1,图1为本发明一实施例的流程示意图。
在一实施例中,该方法应用于区块链网络中的轻量节点,所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据,该方法包括:
S101,接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息。
在本方案中,存在两种类型的计算机节点,第一种为轻量节点,轻量节点是一种存储性能较低的节点,本方案中的轻量节点即为记账节点,用来参与共识,但无需存储全量的区块链数据,而仅仅存储区块头数据,其中区块头数据包括状态树的根节点;第二种是对存储性能较高的全量节点,用于存储全量的区块链数据,包括完整的状态树。由于作为记账节点的轻量节点没有存储区块链的全部数据,所以当其接收到交易信息并需要对交易信息中待验证信息进行验证时,需要从全量节点获取数据对当前的交易信息的相关内容进行验证。
首先接收待处理交易,确定该待处理交易对应的转出方账号和待验证信息。例如待处理交易为账号A向账号B转账的交易,则转出方账号为账号A,待验证信息根据实际情况确定,例如可以是转出方A的balance(余额),验证转出方的余额可以确定转出方是否有足够的余额完成该待处理交易。在一个具体的实施方式中,目标待验证信息包括nonce和/或balance,nonce是一个账号发出的交易序号,是一个严格单调递增的计数器,当发出一个交易,nonce增加,同时交易中也会带上这个nonce值。在打包交易之前,也需要使用该nonce值,因此就需要验证该nonce值是否正确。此外,具体需要验证哪些信息根据记账节点与打包条件确定,例如,当交易过程不仅要简单的完成交易,还需要执行智能合约时,待验证信息还可以包括智能合约代码、智能合约数据等,有关智能合约相关信息的验证将在下述实施例进行具体介绍,在本方案中将不再赘述。
S102,向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求,以使所述全量节点利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树。
在本方案中,不要求记账节点具备较高的存储能力,因此区块链的全部信息也就不在记账节点中存储,而是在全量节点进行保存,全量节点具有较高的存储性能,其中保存的区块链的全部信息包括每个用户账号的状态数据。状态数据与待验证信息对应,待验证信息就是待验证的状态数据,而全量节点中保存有可以用来验证待验证信息的实际状态数据,因此状态数据也对应的包括nonce和/或转出方账号的balance。当作为记账节点的轻量节点接收到待处理交易时,向全量节点发送数据获取请求,该数据获取请求用于获取与待验证信息相关的目标状态数据,该数据获取请求中包括转出方账号,全量节点通过转出方账号在预设的状态树中确定目标状态数据以及与目标状态数据对应的第一merkle proof。
需要说明的是,记账节点与全量节点之间并不是完全可信的关系,也就是说,当全量节点把对应待验证信息的状态数据发给记账节点时,记账节点并不能完全确定这个状态数据是上述保存区块链全部信息的预设MPT树中的状态数据,即不能保证这个状态数据是真实可靠的,因此记账节点不能够直接利用获取到的状态数据对待验证信息进行验证,还需要对接收到的状态数据进行真实性的验证。
由于记账节点为轻量节点,能够保存的数据量较少,为了能够使记账节点在保存少量数据的前提下,可以对目标状态数据进行验证,在本方案中,以MPT树(MerklePatricia Tree)的形式在全量节点中保存区块链全部信息,MPT树即Merkle树和Patricia树的结合,Patricia树为一种字典树,MPT树既具备字典树的特性,可以快速查找,也具备Merkle树的特性,可以对树中叶子节点的数据进行验证。
Merkle树通常也被称作Hash Tree(哈希树),就是存储hash(哈希)值的一棵树。Merkle树的叶子节点是数据块的hash值。非叶子节点保存的值是该非叶子节点下一层的所有子节点的串联字符串的hash值,串联字符串就是非叶子节点的下一层所有子节点的信息作为字符串进行串联得到的。参见图2,Merkle树中每一非叶子节点都保存有下一层子节点串联字符串的哈希值,例如,Hab为非叶子节点,其下一层子节点就是Ha和Hb,串联字符串即Ha+Hb,因此,Hab中保存的值就是Hash(Ha+Hb)。叶子节点保存具体数据块的哈希值,因此,当验证某一个数据块是否是该Merkle树中的数据块时,即可利用该数据块的哈希值与父节点的哈希值计算出根节点的哈希值,如果计算计算结果和真正的根节点保存的哈希值一致,则证明该数值是该Merkle树的一个数值。
例如,当一个请求获取方想要获取某个Merkle树的数据块时,其需要预先保存有该Merkle树的根节点保存的值,从而在获取到想要获取的数据块后,可以利用根节点保存的值来确定该数据块是否是真实来自该Merkle树。具体方式可以是请求获取方利用获取到的数据块等数据,自己计算出与这些获取到的数据对应的根节点保存的值,然后将计算结果与预先保存的根节点保存的值进行对比,如果一样,则证明获取到的数据块是该Merkle树的数据块。
需要说明的是,根据上文介绍的Merkle树中每层节点保存数据的原理可知,计算根节点保存的值不仅需要数据块,还需要相应的其它必要节点的信息,然后逐层计算哈希值,知道算出根节点保存的值。
具体地,参见图2,当该请求获取方需要获取数据块(Tx b)时,Merkle树所在的节点不仅要将(Tx b)返回给请求获取方,还需要将能够用于计算到(Tx b)所在的Merkle树的根节点数据(Habcd)的所有数据返回给该请求获取方,从而使该请求获取方计算出根节点数据。
具体需要返回的必要数据为Merkle proof,即用于证明某个节点存在于Merkle树中必要节点数据,想要证明某个节点是否存在于Merkle树中,可以利用该节点和该节点对应的Merkle proof来计算出Merkle树的根节点数据,如果计算得到的根节点数据与Merkle树的实际根节点数据是一样的,则说面这个节点存在于Merkle树中,因此Merkle proof也可以理解为用于结合所述待验证节点数据计算所述预设MPT树的根节点数据必要节点数据。
在图2中,对于(Tx b),也就是Hb这个节点来说,对应的Merkle proof就是Ha、Hcd,在请求获取方验证时,即可以先计算(Tx b)的hash值,得到Hb,然后利用Merkle proof中的Ha计算出hash(Ha+Hb)得到Hab,然后利用Merkle proof中的Hcd计算得到根节点的值hash(Hab+Hcd),得到Habcd,然后判断本地保存的根节点数据是否是Habcd,如果是,则证明(Txb)是该Merkle树中的数据块。
Patricia树,是一种压缩字典树,或称压缩前缀树,是一种更节省空间的Trie。对于字典树的每个节点来说,如果该节点是其父节点的唯一的子节点的话,就和父节点合并。由于区块链中每个交易账号的状态数据的变化快,因此累积的状态数据量也就会很多,利用此种树来存储状态数据更加节省空间。
在本方案中,考虑到记账节点需要保存少量数据,并且还需要对获取到的状态数据进行验证,因此采用Merkle树机制,而考虑到状态数据变化快,数据量大,因此采用压缩字典树,从而本方案中利用Patricia树与Merkle树结合的结果MPT树,实现验证过程。
当全量节点接收到数据获取请求后,即可将与目标状态数据对应的的Merkleproof返回给记账节点,记账节点即可利用该Merkle proof算出MPT树根节点保存的数据。
有关MPT树的介绍具体参见图3,图3为本申请实施例提供的一种具体的MPT树。
在该MPT树中,包括:
叶子节点(leaf node),表示为[key,value]的一个键值对,其中key是key的账号信息的一部分,用来索引到账号对应的value,value是状态数据。在本方案中,以十六进制数作为key来进行索引。
扩展节点(extension node),也是[key,value]的一个键值对,但是这里的value是其他节点的hash值,这个hash可以被用来查询数据库中的节点。也就是说通过hash链接到其他节点。
分支节点(branch node),在本方案中,采用十六进制表示分支节点key,并对应有value,分支节点是一个长度为17的list,前16个元素对应着key中的16个可能的十六进制字符,如果有一个[key,value]对在这个分支节点终止,最后一个元素代表一个值,即分支节点既可以搜索路径的终止也可以是路径的中间节点。
因此,在本方案中,将所述目标账号与所述待验证信息发送至全量节点,包括:将所述目标账号转换为十六进制;将十六进制的目标账号与所述待验证信息发送至全量节点。
当全量节点接收到记账节点发送的目标账号与对应的待验证信息后,利用目标账号的十六进制找到对应的value,value即状态数据。在本方案中,
MPT树中包括4个账号,4个账号的值为对应nonce值。具体对应关系见表1。
表1
账号 |
值(value) |
a711355 |
1 |
a77d337 |
2 |
a7f9365 |
3 |
a77d397 |
4 |
对应账号a77d397与值1来说,值1对应的节点为leaf node4,则对应的Merkleproof可以是leaf node3、leaf node1、leaf node2。
S103,接收所述全量节点发送的所述目标状态数据与所述第一Merkle proof,利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
具体地,轻量节点只需要利用全量节点返回的第一Merkle proof与状态数据依次计算出预先保存的状态树的每一层节点信息的哈希值,从而得到根节点数据,根节点的第一层子节点的哈希值就是根节点数据,具体计算原理可以参见上述Merkle树的介绍,此处将不再进行赘述,计算得到的根节点数据作为第一计算结果。
需要说明的是,由于在本方案中是利用MPT形式的状态树树来保存区块链中每笔交易的状态数据,因此,状态智能合约数据树的根节点信息树的根节点数据也就是区块链中的第一笔数据,即区块头数据。
参见图3与上述表1,对应账号a77d397与值1来说,值1对应的节点为leaf node4,则对应的Merkle proof可以是leaf node3、leaf node1、leaf node2。
可以利用leaf node4的哈希值与leaf node3的哈希值确定branch node2,然后计算branch node2的哈希值得到extension node2,计算leaf node1、leaf node2、extensionnode2的哈希值得到branch node1,计算branch node1的哈希值得到根节点extensionnode1。
在轻量节点中,只需要保存区块链的区块头数据,也就是只需要保存状态树的根节点,用该根节点来验证上述通过第一Merkle proof和目标状态数据计算出来的根节点数据是否正确,如果正确,则说明用于计算的目标状态数据也是正确的,则可以利用目标状态数据来验证待验证数据是否正确。
由此可见,本申请提供的交易信息验证方法,应用于轻量节点,轻量节点保存状态树的根节点,状态树用于保存所述区块链网络中各用户账号的状态数据,在接收到待处理交易后,确定交易对应的转出方账号和待验证信息,并向全量节点发起与待验证信息相关的目标状态数据获取请求,以获取到目标状态数据和用于验证目标状态数据是否真实的Merkle proof,根据Merkle树原理,轻量节点中只需要保存状态树的根节点,在验证目标状态数据时,利用Merkle proof和保存的真实的根节点就可以验证出目标状态数据是否真实。因此,对于作为记账节点的轻量节点来说,无需保存所有用户账号的状态数据,只需要保存状态树的根节点就能完成待验证信息的验证并且保证验证结果的真实可靠性。
在传统记账节点中,所有的记账节点存储的区块交易数据都是一样的,随着区块数据的不断增长,存储资源消耗的问题将越来越严重,因此出现了分片架构,在分片架构中,对所有记账节点进行分片,不同分片内的记账节点保存不同的数据,但是每个分片内的记账节点数要远小于传统的所有记账节点数,因此就更容易遭受攻击,为避免遭受攻击还需要频繁为记账节点切换分片,从而避免攻击。但是传统的记账节点中由于需要保存自己分片内所有的区块链数据,所以在频繁切换分片时,也就需要频繁的同步大量的数据,这对数据处理的速度和数据的存储能力都有较高的要求,从而切换分片的代价也比较大。
为此,本申请提供一种具体的交易信息验证方法,在前述实施例的基础上,本实施例对技术方案进行进一步的说明和优化,可以有效解决切换分片代价较大的问题。
具体如下:
当所述轻量节点将所属分片切换到目标分片时,所述方法还包括:
同步所述目标分片中现有轻量节点保存的预设根节点数据。
由于上述实施例中,轻量节点仅需要保存区块头数据即可进行交易信息中的待验证信息的验证,从而完成共识,因此,在本方案中,当轻量节点需要切换到目标分片时,只需要同步目标分片的轻量节点中保存的区块头数据即可,利用上述实施例所述的步骤即可实现记账节点在目标分片中的工作。
由于只需要同步区块头数据,因此在切换分片时,对数据处理的要求以及轻量节点的存储能力要求也会相对降低很多,切换分片的代价也会降低很多。
参照图4,图4为另一实施例的流程示意图,本实施例中,所述待验证信息还包括智能合约数据树的根节点信息,其中,所述智能合约数据树为用于保存智能合约数据的MPT树;则在所述利用所述状态数据进行所述待验证信息的验证之后,所述方法还包括:
S201,向所述全量节点发送获取待验证智能合约数据的数据获取请求,以使所述全量节点利用所述智能合约数据树确定待验证智能合约数据以及与所述待验证智能合约数据树对应的第二Merkle proof;其中,所述第二Merkle proof为用于结合所述待验证智能合约数据计算所述智能合约数据树的根节点信息的必要节点;所述智能合约数据为需要被智能合约操作的数据。
在本方案中,当交易信息涉及到智能合约,还需要验证智能合约的数据是否正确,智能合约是指交易过程中需要执行的操作代码,在智能合约中,会有些变量或数据需要被获取或被处理,如,在交易过程中需要智能合约更改其中的一个变量a,将a更改为a+100。
本方案中,智能合约数据保存在另一棵MPT类型的树中,该树为智能合约数据树,一般也称为storage tree。该智能合约数据树的根节点信息作为上述状态树中的值,保存在状态树中。当需要验证智能合约数据时,首先要获取到智能合约数据树的根节点信息并验证其是否正确,本方案中,智能合约数据树的根节点信息就是上述实施例中的待验证信息,具体验证过程已在上述实施例做出介绍,此处将不再赘述。在智能合约数据树中,用于验证待验证智能合约数据的实际智能合约数据作为叶子节点,在智能合约数据树中对待验证智能合约数据进行的验证与上述实施例中,在预设MPT树中对待验证信息进行验证的原理相同,只是树中节点保存的数据和需要验证的数据有所变化,具体内容可以参见上述实施例。
当需要验证智能合约数据时,即可向全量节点发送用于获取待验证智能合约数据的数据获取请求,使所述全量节点在智能合约数据树中待验证智能合约数据,以及对应的Merkle proof。S202,利用所述第二Merkle proof与验证通过的智能合约数据树的根节点信息验证所述待验证智能合约数据是否真实,如果真实则对所述待验证智能合约数据进行智能合约中的操作。
利用第二Merkle proof和全量节点返回来的待验证智能合约数据即可计算出智能合约数据树的根节点信息,计算过程可以参考上述状态树根节点数据的计算过程,此处不再赘述。
用验证通过的只能合约数据的根节点信息即可验证计算得到的根节点信息是否正确,如果正确,则证明用于计算的待验证智能合约数据也是正确的。待验证智能合约数据验证通过后,即可完成智能合约中对该数据的相应的操作。
进一步的,本实施例还公开了一种轻量节点。
参照图5,图5为本发明一实施例揭露的轻量节点的内部结构示意图。图5中,轻量节点1包括存储器11和处理器12,所述存储器11上存储有可在所述处理器12上运行的交易信息验证程序,所述交易信息验证程序被所述处理器12执行时实现如下方法:
接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息;
向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求,以使所述全量节点利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
接收所述全量节点发送的所述目标状态数据与所述第一Merkle proof,利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
由此可见,本申请实施例提供的一种轻量节点,保存状态树的根节点,状态树用于保存所述区块链网络中各用户账号的状态数据,在接收到待处理交易后,确定交易对应的转出方账号和待验证信息,并向全量节点发起与待验证信息相关的目标状态数据获取请求,以获取到目标状态数据和用于验证目标状态数据是否真实的Merkle proof,根据Merkle树原理,轻量节点中只需要保存状态树的根节点,在验证目标状态数据时,利用Merkle proof和保存的真实的根节点就可以验证出目标状态数据是否真实。因此,对于作为记账节点的轻量节点来说,无需保存所有用户账号的状态数据,只需要保存状态树的根节点就能完成待验证信息的验证并且保证验证结果的真实可靠性。
在一个具体的实施方式中,所述状态树包括利用十六进制表示节点key的分支节点;
则所述交易信息验证程序被所述处理器12执行时实现具体如下方法:
将所述转出方账号转换为十六进制;
向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述数据获取请求包括十六进制的转出方账号,以使所述全量节点根据所述十六进制的转出方账号在预设状态树中确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof。
当所述记账节点将所属分片切换到目标分片时,所述交易信息验证程序被所述处理器12执行时,还可以实现:同步所述目标分片中现有轻量节点保存的状态树的根节点数据。
其中,所述待验证信息包括nonce和/或转出方账号的balance。
所述待验证信息还包括智能合约数据树的根节点信息;其中,所述智能合约数据树为用于保存智能合约数据的MPT树;则在所述交易信息验证程序被所述处理器12执行时,还可以实现:
向所述全量节点发送获取待验证智能合约数据的数据获取请求,以使所述全量节点利用所述智能合约数据树确定待验证智能合约数据以及与所述待验证智能合约数据树对应的第二Merkle proof;其中,所述第二Merkle proof为用于结合所述待验证智能合约数据计算所述智能合约数据树的根节点信息的必要节点;所述智能合约数据为需要被智能合约操作的数据;
利用所述第二Merkle proof与验证通过的智能合约数据树的根节点信息验证所述待验证智能合约数据是否真实,如果真实则对所述待验证智能合约数据进行智能合约中的操作。
在本实施例中,所述轻量节点1可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机。
进一步的,参照图5,所述轻量节点1还可以包括总线13,其中,所述存储器11和所述处理器12通过所述总线13连接。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是轻量节点1的内部存储单元,例如该轻量节点1的硬盘。存储器11在另一些实施例中也可以是轻量节点1的外部存储设备,例如轻量节点1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括轻量节点1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于轻量节点1的应用软件及各类数据,例如交易信息验证程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行交易信息验证程序等。
总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,轻量节点1还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该轻量节点1与其他电子设备之间建立通信连接。
可选地,该轻量节点1还可以包括用户接口15,用户接口15可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在轻量节点1中处理的信息以及用于显示可视化的用户界面。
图5仅示出了具有组件11-15的轻量节点1,本领域技术人员可以理解的是,图5示出的结构并不构成对轻量节点1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
进一步的,本实施例还公开了一种交易信息验证系统。
参照图6,图6为本发明一实施例揭露的交易信息验证系统结构示意图。图6中,所述系统应用于区块链网络中的轻量节点,所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据,所述系统包括:接收模块301,用于接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息;
发送模块302,用于向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求,以使所述全量节点利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
验证模块303,用于接收所述全量节点发送的所述目标状态数据与所述第一Merkle proof,利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
在一具体实施方式中,所述预设MPT树包括利用十六进制表示节点key的分支节点;则所述验证模块303具体用于将所述转出方账号转换为十六进制;向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述数据获取请求包括十六进制的转出方账号,以使所述全量节点根据所述十六进制的转出方账号在预设状态树中确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof。
在一个具体的实施方式中,当所述轻量节点将所属分片切换到目标分片时,所述系统还包括:
同步模块,用于同步所述目标分片中现有轻量节点保存的状态树的根节点数据。
在一个具体的实施方式中,所述待验证信息包括nonce和/或转出方账号的balance。
在一个具体的实施方式中,所述待验证信息还包括智能合约数据树的根节点信息;其中,所述智能合约数据树为用于保存智能合约数据的MPT树;
则所述系统还包括:
合约数据验证模块,用于向所述全量节点发送获取待验证智能合约数据的数据获取请求,以使所述全量节点利用所述智能合约数据树确定待验证智能合约数据以及与所述待验证智能合约数据树对应的第二Merkle proof;其中,所述第二Merkle proof为用于结合所述待验证智能合约数据计算所述智能合约数据树的根节点信息的必要节点;所述智能合约数据为需要被智能合约操作的数据;利用所述第二Merkle proof与验证通过的智能合约数据树的根节点信息验证所述待验证智能合约数据是否真实,如果真实则对所述待验证智能合约数据进行智能合约中的操作。
本实施例的交易信息验证系统用于实现前述的交易信息验证方法,因此交易信息验证系统中的具体实施方式可见前文中的交易信息验证方法的实施例部分,例如,接收模块301,发送模块302,验证模块303,分别用于实现上述交易信息验证方法中步骤S101,S102,S103,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。
进一步的,本实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有交易信息验证程序,所述交易信息验证程序可被一个或多个处理器执行,以实现如上述任一实施例所述的交易信息验证方法的步骤。
进一步的,本发明还提供一种计算机程序产品,包括计算机指令,当所述计算机指令在计算机上运行时,使得所述计算机可以执行实现上述任一实施例所述交易信息验证方法的步骤。
进一步的,参见图7,本发明还提供了一种交易信息验证方法,应用于全量节点,具体包括:
S401,接收轻量节点发送的获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述待验证信息为所述轻量节点通过接收到的待处理交易确定的待验证信息;所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
S402,向所述轻量节点发送所述目标状态数据与所述第一Merkle proof,以使所述轻量节点利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
全量节点的操作步骤与上述轻量节点相关实施例相对应,具体可以参见轻量节点的相关实施例,因此本申请实施例也具有和上述实施例相对应的有益效果。
进一步的,本发明还提供了一种全量节点,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的交易信息验证程序,所述交易信息验证程序被所述处理器执行时实现如下方法:
接收轻量节点发送的获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述待验证信息为所述轻量节点通过接收到的待处理交易确定的待验证信息;所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;向所述轻量节点发送所述目标状态数据与所述第一Merkle proof,以使所述轻量节点利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
进一步的,本发明还提供了一种交易信息验证系统,应用于全量节点,包括:
数据获取请求接收模块,用于接收轻量节点发送的获取与所述待验证信息相关的目标状态数据的数据获取请求;其中,所述待验证信息为所述轻量节点通过接收到的待处理交易确定的待验证信息;所述轻量节点中保存状态树的根节点,所述状态树用于保存所述区块链网络中各用户账号的状态数据利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;
状态数据发送模块,用于向所述轻量节点发送所述目标状态数据与所述第一Merkle proof,以使所述轻量节点利用所述第一Merkle proof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证。
进一步的,本发明还提供了一种区块链系统,所述区块链系统包括:
轻量节点,用于接收待处理交易,确定所述待处理交易对应的转出方账号和待验证信息;向全量节点发送获取与所述待验证信息相关的目标状态数据的数据获取请求;接收所述全量节点发送的所述目标状态数据与所述第一Merkle proof,利用所述第一Merkleproof与轻量节点预先保存的状态树的根节点数据验证所述目标状态数据是否真实,如果真实则利用所述目标状态数据进行所述待验证信息的验证;
全量节点,其中,所述全量节点用于接收轻量节点发送的获取与所述待验证信息相关的目标状态数据的数据获取请求;利用预设的状态树确定所述目标状态数据以及与所述目标状态数据对应的第一Merkle proof;其中,所述第一Merkle proof为用于结合所述目标状态数据计算所述状态树的根节点数据的必要节点数据;其中,所述状态树为用于保存状态数据的MPT树;向所述轻量节点发送所述目标状态数据与所述第一Merkle proof。
全量节点与轻量节点均已在上述实施例中做出具体介绍,此处将不再进行赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。