CN113329031A - 一种区块的状态树的生成方法及装置 - Google Patents
一种区块的状态树的生成方法及装置 Download PDFInfo
- Publication number
- CN113329031A CN113329031A CN202110689224.8A CN202110689224A CN113329031A CN 113329031 A CN113329031 A CN 113329031A CN 202110689224 A CN202110689224 A CN 202110689224A CN 113329031 A CN113329031 A CN 113329031A
- Authority
- CN
- China
- Prior art keywords
- block
- account
- account data
- data
- height
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/56—Financial cryptography, e.g. electronic payment or e-cash
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Accounting & Taxation (AREA)
- Development Economics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种区块的状态树的生成方法及装置,其中,区块的状态树的生成方法包括:针对区块链中的任一区块,确定区块的第一账户和第一账户数据;第一账户是区块中各交易执行后账户数据发生变化的账户,第一账户数据是各交易执行后第一账户中发生变化后的账户数据;构建由各第一账户和各第一账户的第一账户数据构成的区块的状态树,并将状态树的根哈希存储在区块的区块头中,其中,状态树以键值对的方式存储。该技术方案用以精简区块链上用于构建状态树的账户数据,从而缩短用于验证的分支路径的长度,提高账户数据的存在性验证的效率。
Description
本申请为申请号为201910960376.X、申请日为2019年10月10日、发明名称为“一种区块的状态树的生成和链上数据验证的方法及装置”的分案申请。
技术领域
本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种区块(Block)的状态树的生成方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术(例如:区块链(BlockChain)、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,区块链技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对区块链技术提出的更高的要求。
以太坊(ethereum)的状态树和存储树中,若对存储树中的合约状态进行存在性验证,需要先确定合约状态在存储树中的分支路径,验证该合约状态是否存在于对应的存储树中,随后确定该存储树所对应的账户状态在状态树中的分支路径,进而验证该账户状态是否存在于对应的状态树中。
但随着区块链上数据不断增长,区块链节点需要获取的用于验证的分支路径较长,获取分支路径的耗时和存在性验证的耗时都较长。
发明内容
本发明实施例提供一种区块的状态树的生成方法及装置,用以精简区块链上用于构建状态树的账户数据,从而缩短用于验证的分支路径的长度,提高账户数据的存在性验证的效率。
第一方面,本发明实施例提供的一种区块的状态树的生成方法,包括:
针对区块链中的任一区块,确定所述区块的第一账户和第一账户数据;所述第一账户是所述区块中各交易执行后账户数据发生变化的账户,所述第一账户数据是所述各交易执行后所述第一账户中发生变化后的账户数据;
构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,并将所述状态树的根哈希存储在所述区块的区块头中,其中,所述状态树以键值对的方式存储。
上述技术方案中,在构建状态树时,仅基于当前区块交易执行过程中所修改的或新增的账户数据生成,而不会再基于原有区块对应的未发生变化的账户数据生成,该方式通过精简数据量,可以极大地减少状态树层级。
可选的,所述构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,包括:
针对任一第一账户的任一第一账户数据,将所述第一账户的标识、所述第一账户数据的标识和所述区块的块高作为key值,所述第一账户数据作为叶子节点的value值,基于MPT模式构建所述区块的状态树。
上述技术方案中,直接将key值进行持久化存储,而不是将key值的哈希进行持久化存储,通过该方式,可以保障同一账户下的账户数据具有相同的压缩前缀,也就是账号标识或账户地址,有效利用Patricia Tree的优势,将状态树的层级压缩至最小,减少存储空间的同时也加快了分支路径的构建及验证效率。
可选的,所述第一账户数据包括所述各交易执行后所述第一账户中发生变化的块高记录、账户状态和/或合约状态;所述块高记录用于记录所述第一账户中的账户状态和/或合约状态发生历次变化时所在的区块的块高。
账户状态原本属于状态树的叶子节点中的值,合约状态原本属于存储树的叶子节点中的值,而上述技术方案中,将状态树的叶子节点中的值下移至与存储树的叶子节点中的值平级,将状态树和存储树合并为一棵树,从而扁平化账户数据的层级结构,加快了分支路径的构建及验证效率。进一步的,在落盘存储时增加key-value键值对,其中,该key中包括账户标识和账户数据标识,此时的账户数据标识对应块高记录,value值即为块高记录,该块高记录用于记录账户标识对应账户中的账户数据发生历次变化时所在的区块的块高,通过该方式,可以在验证某个账户数据时,先确定该账户数据所在状态树的区块,进而根据该区块确定用于验证的分支路径。
可选的,所述方法还包括:
接收客户端的数据获取请求;所述数据获取请求中包括第二账户的标识、第二账户数据的标识和第一块高;
根据所述第二账户的标识和所述第二账户的第一块高记录的标识,确定所述第一块高记录;根据所述第二账户的标识、所述第二账户数据的标识、所述第一块高,确定所述第二账户数据;
从第一区块的状态树中获取用于验证所述第一块高记录的第一分支路径;所述第一区块是所述第一块高记录中的最高块高对应的区块;
从第二区块的状态树中获取用于验证所述第二账户数据的第二分支路径;所述第二区块是第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高;
将所述第一块高记录、所述第一分支路径、所述第二账户数据、所述第二分支路径发送至所述客户端,以使所述客户端对所述第一块高记录和第二账户数据进行验证。
上述技术方案中,区块链节点根据客户端的数据获取请求,向客户端返回两组数据,第一组是第一块高记录和用于验证第一块高记录的第一分支路径,第二组是第二账户数据和用于验证第二账户数据的第二分支路径,从而客户端可以根据该两组数据分别对第一块高记录和第二账户数据进行验证。其中,第一分支路径和第二分支路径相比于现有技术中的分支路径都较短,区块链节点在获取分支路径时所需时长较短,且客户端验证所需时长也较短,从而提高客户端验证数据的效率。
第二方面,本发明实施例提供的一种链上数据验证的方法,包括:
向区块链节点发送数据获取请求;所述数据获取请求包括第二账户的标识、第二账户数据的标识和第一块高;
接收所述区块链节点返回的第一块高记录、第一分支路径、第二账户数据、第二分支路径;所述第一块高记录和所述第二账户数据是所述区块链节点根据所述第二账户的标识、所述第二账户数据的标识和所述第一块高确定的;所述第一分支路径是所述区块链节点确定的用于验证所述第一块高记录的分支路径;所述第二分支路径是所述区块链节点确定的用于验证所述第二账户数据的分支路径;
根据所述第一分支路径、本地存储的第一区块的区块头中状态树的根哈希验证所述第一块高记录是否正确;所述本地存储的第一区块的区块头是从所述区块链节点上获取的,所述第一区块是区块链上是所述第一块高记录中的最高块高对应的区块;
在确定所述第一块高记录正确之后,根据所述第二分支路径、所述本地存储的第二区块的区块头中状态树的根哈希,验证所述第二账户数据的是否正确;所述本地存储的第二区块的区块头是从所述区块链节点上获取的,所述第二区块是所述区块链上第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高。
上述技术方案中,客户端向区块链节点发送数据获取请求,区块链节点根据客户端的数据获取请求,向客户端返回两组数据,第一组是第一块高记录和用于验证第一块高记录的第一分支路径,第二组是第二账户数据和用于验证第二账户数据的第二分支路径,从而客户端可以根据该两组数据分别对第一块高记录和第二账户数据进行验证。其中,第一分支路径和第二分支路径相比于现有技术中的分支路径都较短,区块链节点在获取分支路径时所需时长较短,且客户端验证所需时长也较短,从而提高客户端验证数据的效率。
可选的,所述根据所述第一分支路径、本地存储的第一区块的区块头中状态树的根哈希验证所述第一块高记录是否正确,包括:
根据所述第一块高记录和所述第一分支路径中叶子节点和分支节点的数据,确定第一根哈希;
若所述第一根哈希等于所述本地存储的第一区块的区块头中状态树的根哈希,则确定所述第一块高记录正确。
上述技术方案中,客户端根据本地存储的第一区块的区块头中状态树的根哈希和第一分支路径,实现对第一块高记录的验证。
可选的,所述根据所述第二分支路径、所述本地存储的第二区块的区块头中状态树的根哈希,验证所述第二账户数据的是否正确,包括:
根据所述第二账户数据和所述第二分支路径中叶子节点和分支节点的数据,确定第二根哈希;
若所述第二根哈希等于所述本地存储的第二区块的区块头中状态树的根哈希,则确定所述第二账户数据正确。
上述技术方案中,客户端根据本地存储的第二区块的区块头中状态树的根哈希和第二分支路径,实现对第二账户数据的验证。
可选的,所述方法还包括:
向所述区块链节点发送查询请求;
接收所述区块链节点返回的查询结果;所述查询结果是所述区块链节点在接收到所述查询请求后返回的区块链的当前块高;
判断所述本地存储的区块头的最高块高是否小于所述当前块高,若是,则向所述区块链节点发送区块头获取请求;所述区块头获取请求中包括待获取区块头的块高;
接收所述区块链节点返回的区块头,将接收到的区块头存储在本地。
上述技术方案中,客户端定时去区块链节点获取最新区块的区块头,可以保障在需要对账户数据进行验证时,本地存储有用于验证的区块的区块头信息。
可选的,所述将接收到的区块头存储在本地之前,还包括:
获取所述接收到的区块头中的N个签名信息;
根据共识节点列表,对所述N个签名信息验证;所述共识节点列表是根据所述区块链的创世块的区块头至所述接收到的区块头的前一个区块头确定的共识节点组成的列表;
若所述N个签名信息通过验证,则确定所述接收到的区块头正确。
可选的,所述根据共识节点列表,对所述N个签名信息验证,包括:
确定所述N个签名信息对应的N个共识节点;
判断所述N个共识节点中在所述共识节点列表中的M个共识节点;
若M符合预设条件,则确定所述N个签名信息通过验证。
通过上述方式,客户端从创世块开始即对创世块的块头信息进行验证,且每增加一个区块的块头,都会结合当前共识节点列表中的共识节点对当前增加的区块的块头进行验证,以保障保存至本地的区块的块头信息是正确的,从而保障用于验证账户数据的区块头中状态树的根哈希的正确性,进而实现对账户数据的验证。
第三方面,本发明实施例提供的一种区块的状态树的生成装置,包括:
确定单元,用于针对区块链中的任一区块,确定所述区块的第一账户和第一账户数据;所述第一账户是所述区块中各交易执行后账户数据发生变化的账户,所述第一账户数据是所述各交易执行后所述第一账户中发生变化后的账户数据;
构建单元,用于构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,并将所述状态树的根哈希存储在所述区块的区块头中,其中,所述状态树以键值对的方式存储。
可选的,所述构建单元具体用于:
针对任一第一账户的任一第一账户数据,将所述第一账户的标识、所述第一账户数据的标识和所述区块的块高作为key值,所述第一账户数据作为叶子节点的value值,基于MPT模式构建所述区块的状态树。
可选的,所述第一账户数据包括所述各交易执行后所述第一账户中发生变化的块高记录、账户状态和/或合约状态;所述块高记录用于记录所述第一账户中的账户状态和/或合约状态发生历次变化时所在的区块的块高。
可选的,所述装置还包括处理单元;
所述处理单元用于:
接收客户端的数据获取请求;所述数据获取请求中包括第二账户的标识、第二账户数据的标识和第一块高;
根据所述第二账户的标识和所述第二账户的第一块高记录的标识,确定所述第一块高记录;根据所述第二账户的标识、所述第二账户数据的标识、所述第一块高,确定所述第二账户数据;
从第一区块的状态树中获取用于验证所述第一块高记录的第一分支路径;所述第一区块是所述第一块高记录中的最高块高对应的区块;
从第二区块的状态树中获取用于验证所述第二账户数据的第二分支路径;所述第二区块是第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高;
将所述第一块高记录、所述第一分支路径、所述第二账户数据、所述第二分支路径发送至所述客户端,以使所述客户端对所述第一块高记录和第二账户数据进行验证。
第四方面,本发明实施例提供的一种链上数据验证的装置,包括:
收发单元,用于向区块链节点发送数据获取请求;所述数据获取请求包括第二账户的标识、第二账户数据的标识和第一块高;
所述收发单元,还用于接收所述区块链节点返回的第一块高记录、第一分支路径、第二账户数据、第二分支路径;所述第一块高记录和所述第二账户数据是所述区块链节点根据所述第二账户的标识、所述第二账户数据的标识和所述第一块高确定的;所述第一分支路径是所述区块链节点确定的用于验证所述第一块高记录的分支路径;所述第二分支路径是所述区块链节点确定的用于验证所述第二账户数据的分支路径;
验证单元,用于根据所述第一分支路径、本地存储的第一区块的区块头中状态树的根哈希验证所述第一块高记录是否正确;所述本地存储的第一区块的区块头是从所述区块链节点上获取的,所述第一区块是区块链上是所述第一块高记录中的最高块高对应的区块;
所述验证单元,还用于在确定所述第一块高记录正确之后,根据所述第二分支路径、所述本地存储的第二区块的区块头中状态树的根哈希,验证所述第二账户数据的是否正确;所述本地存储的第二区块的区块头是从所述区块链节点上获取的,所述第二区块是所述区块链上第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高。
可选的,所述验证单元具体用于:
根据所述第一块高记录和所述第一分支路径中叶子节点和分支节点的数据,确定第一根哈希;
若所述第一根哈希等于所述本地存储的第一区块的区块头中状态树的根哈希,则确定所述第一块高记录正确。
可选的,所述验证单元具体用于:
根据所述第二账户数据和所述第二分支路径中叶子节点和分支节点的数据,确定第二根哈希;
若所述第二根哈希等于所述本地存储的第二区块的区块头中状态树的根哈希,则确定所述第二账户数据正确。
可选的,所述装置还包括同步单元;
所述同步单元用于:
向所述区块链节点发送查询请求;
接收所述区块链节点返回的查询结果;所述查询结果是所述区块链节点在接收到所述查询请求后返回的区块链的当前块高;
判断所述本地存储的区块头的最高块高是否小于所述当前块高,若是,则向所述区块链节点发送区块头获取请求;所述区块头获取请求中包括待获取区块头的块高;
接收所述区块链节点返回的区块头,将接收到的区块头存储在本地。
可选的,所述同步单元在所述将接收到的区块头存储在本地之前,还用于:
获取所述接收到的区块头中的N个签名信息;
根据共识节点列表,对所述N个签名信息验证;所述共识节点列表是根据所述区块链的创世块的区块头至所述接收到的区块头的前一个区块头确定的共识节点组成的列表;
若所述N个签名信息通过验证,则确定所述接收到的区块头正确。
可选的,所述同步单元具体用于:
确定所述N个签名信息对应的N个共识节点;
判断所述N个共识节点中在所述共识节点列表中的M个共识节点;
若M符合预设条件,则确定所述N个签名信息通过验证。
第五方面,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块的状态树的生成方法。
第六方面,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块的状态树的生成方法。
第七方面,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述链上数据验证的方法。
第八方面,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述链上数据验证的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种Merkle Tree的示意图;
图2为现有技术中以太坊中状态树和存储树的示意图;
图3为本发明实施例提供的一种状态树和存储树的示意图;
图4为本发明实施例提供的另一种状态树和存储树的示意图;
图5为本发明实施例提供的一种区块的状态树的生成方法的流程的示意图;
图6为本发明实施例提供的一种链上数据验证所适用的系统架构;
图7为本发明实施例提供的一种链上数据验证的方法的流程的示意图;
图8为本发明实施例提供的一种客户端获取区块头的流程的示意图;
图9为本发明实施例提供的另一种链上数据验证所适用的系统架构;
图10为本发明实施例提供的一种区块的状态树的生成装置的结构示意图;
图11为本发明实施例提供的一种链上数据验证的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为了更好的解释本发明,先对本发明所涉及的专业术语解释如下:
1、Merkle Tree(默克尔树)
Merkle Tree是一种由叶子节点、中间节点和根节点构成的二叉树。其中叶子节点记录的是数据(如本发明实施例中提及账户数据)的哈希值,中间节点记录的是它的两个子节点(子节点可能为叶子节点或者其他中间节点)组成后计算的哈希值,根节点所记录值的计算方法与中间节点所记录值的计算方法类似。
Merkle Tree可如图1所示,Merkle Tree自底向上的构建流程为,D1-D7是基础数据(用于构建叶子节点),H1-H7记录的是相应数据的哈希值(H1-H7即为叶子节点)。往上一层,H9是中间节点,记录的是将节点H2和H1作为输入进行哈希运算后得到的值。循环重复上述计算过程,最后计算得到最后一个节点的哈希值,该节点为根节点,所记录的哈希值为整棵Merkle Tree的哈希值。
2、Merkle证明
从Merkle Tree的构建过程我们可以发现任意一个叶子节点所记录的数据被修改,叶子节点的哈希值会相应的改变,最终影响到根节点的哈希值。因此根节点的哈希值可以作为一组数据的唯一摘要。同时我们可以基于Merkle Tree,通过提供某一数据的Merkle分支路径来实现对该数据的存在性验证,该证明即为Merkle证明。
如图1中,验证方若想验证D2是否存在于Merkle Tree中,则区块链节点可以提供D1-H10-H14的Merkle分支路径,验证方根据该分支路径,算出D1和D2的哈希值,然后将H1和H2求哈希值,再与H10求哈希值,最后与H14求哈希值,得到的哈希值如果与根节点记录的哈希值一致,则表示D2存在于Merkle Tree中。
3、Trie Tree(前缀树)
Trie Tree是一种搜索树,又称Digital Tree(字典树)。与二叉树不同,Trie Tree的键值并不是由树中的节点存储,而是取决于其在树中的位置(即从根节点到达特定节点的路径)。一个节点的所有子孙都有相同的前缀,为这个节点对应的字符串(根节点对应空字符串)。只有叶子节点才有对应的存储数值。
4、Patricia Tree(压缩前缀树)
Patricia Tree是一种更节省空间的前缀树,一个节点如果没有兄弟节点,则与其父节点合并。
5、以太坊的状态树和存储树
如图2所示,以太坊包括状态树和存储树,状态树可以是状态MPT(可以认为MPT=Merkle Tree+Patricia Tree)或状态Merkle Tree,存储树可以是存储MPT或存储MerkleTree。
状态树由以太坊的账户构成,状态树的根节点的哈希记录在每个区块头的状态树根(state root)字段中。存储树是保存与账户相关联数据的结构,该项只有合约账户才有,所有智能合约的数据都以32字节映射的形式保存在存储树中。存储树的根节点的哈希值记录在账户的storage root字段中。
状态MPT或存储MPT的叶子节点记录key-value数据项的value,其key编码由MPT的从根节点到达叶子节点的路径构成。
以太坊的状态树和存储树中,仍然可以基于Merkle证明对账户数据(包括账户状态和合约状态)进行存在性验证,以图2为例,若要验证合约状态之一的27在区块60中的存在性,则需要在存储树中确定用于验证27的分支路径,并根据该分支路径验证27是否构成Account 175的存储树,同时也需要在状态树中确定用于验证Account 175的分支路径,并根据该分支路径验证Account 175是否构成区块59的状态树,即需要进行两次Merkle证明。
但随着区块链数据的不断增长,需在链上分配更多的额外空间来存储树的构建关系。另外,链上数据的增加也使得提供分支路径以及外部进行Merkle证明的耗时也会越来越大。
为解决上述问题,本发明实施例提供一种新的状态树和存储树的构建关系,其中,状态树和存储树中仅用于存储当前区块交易执行过程中所修改的账户数据,如新增的账户数据或被修改的账户数据。本发明实施例提供一种状态树和存储树可以如图3所示,对比于图2解释如下:
如图2的状态树和存储树中,区块60执行过程中修改了Account 175的合约状态,27变为45,则基于原有Account 175的合约状态26和该修改后的合约状态45确定父节点中的哈希值,并将构建出的存储树的根节点哈希值存储至区块60的Account 175的storageroot字段中;基于原有Account 174的账户状态和该修改后的Account 175的账户状态确定父节点中的哈希值,并将构建出的状态树的根节点哈希值存储至区块60的state root字段中。
如图3的状态树和存储树中,区块60执行过程中修改了Account 175的合约状态,27变为45,则仅基于当前Account 175的修改后的合约状态45确定父节点中的哈希值,并将构建出的存储树的根节点哈希值存储至区块60的Account 175的storage root字段中;基于该修改后的Account 175的账户状态确定父节点中的哈希值,并将构建出的状态树的根节点哈希值存储至区块60的state root字段中。
由上可知,本发明实施例中的状态树和存储树仅基于当前区块交易执行过程中所修改的或新增的账户数据生成,而不会再基于原有区块对应的未发生变化的账户数据生成,该方式通过精简数据量,可以极大地减少状态树和存储树的层级。举例来说,现有技术采用10000个账户构建区块60对应的状态树,而本发明实施例中若区块60中所有交易执行后仅有1000个账户的账户数据发生变化,则本发明实施例只需要采用1000个账户构建区块60对应的状态树,且该1000个账户基于各自发生变化的合约数据构建各自的存储树,本发明实施例的数据量减少至原数据量的1/10,可以极大地减少状态树和存储树的层级。
此外,以太坊的状态树和存储树中,采用两次Merkle证明,先证明合约状态在存储树中,再证明账户状态在状态树中,本发明实施例可以将状态树和存储树合并为一棵树,将状态树的叶子节点中的值下移至与存储树的叶子节点中的值平级,从而扁平化账户数据的层级结构。本发明实施例提供一种新的状态树可以如图4所示。区块对应一个状态树,该状态树的叶子节点包括账户状态和合约状态,通过该方式仅需要一次Merkle证明即可以实现对账户数据的存在性验证,比如需要验证合约状态27在区块60中的存在性,则需要在该状态树中获取用于验证该27的分支路径,并根据该分支路径验证27是否构成区块60的状态树即可,相比于现有技术,状态树的层级变小,且加快了分支路径的构建及验证效率。
本发明实施例中,可以将落盘存储所用的key定义为“账号标识+账户数据标识+写入/修改该key-value所在块高”,value值即为账户数据标识对应的账户数据,此外,上述key中,账号标识可以理解成账号地址;账户数据标识可以理解成需持久化存储数据的序号,或者需持久化存储数据的标识,比如账户数据是账户状态中的账户余额,则账户数据标识可以是“balance”,比如账户数据是合约状态中的值,则账户数据标识可以是设定的序号,如图4中合约状态27的标识是2。本发明实施例中的叶子节点存储的是账户数据的哈希值。
基于key-value构建状态树,可以是构建状态MPT,key值指示MPT中从根节点到达叶子节点的路径,如图4中,key(0x234_balance_60)=100。
考虑到本发明实施例所构建的状态树仅是基于变化账户的变化账户数据构建的,该构建方式存在一个问题,即不能证明一个不存在的数据的正确性,相当于无法证明一个没有构成某一区块的状态树的账户数据是否在该区块的状态树中存在。举例来说,当前区块链的块高为100,存在某个账户的账户数据只在块高20时变化过,则仅能基于块高20的区块的状态树验证该账户的账户数据的正确性,而不能基于块高20以后的任一个的区块的状态树验证该账户的账户数据的正确性。
为了解决上述问题,本发明实施例在存储上述key-value键值对的基础上,还会增加另外一组key-value键值对,其中,该key中包括账户标识和账户数据标识,此时的账户数据标识对应块高记录,value值即为块高记录,该块高记录用于记录账户标识对应账户中的账户数据发生历次变化时所在的区块的块高。
举例来说,如图4中,区块链的当前区块高度为60,0x234_1为持久化存储的key,1为块高记录的标识,12-45-50为记录的块高记录,可以理解为账户0x234在区块高度12写入,在区块高度45和50进行修改。当前区块链上存储如表1所示的四个key-value键值对,其中,第一个key-value键值对即指示该账户0x234的块高记录,第二个至第四个key-value键值对即指示该账户0x234在对应块高上写入或修改时的balance值。
表1
key | value |
0x234_1 | 12-45-50 |
0x234_balance_12 | 100 |
0x234_balance_45 | 300 |
0x234_balance_50 | 200 |
通过存储该key-value键值对,可以快速确定出账户所对应的账户数据发生历次变化时所在的区块的块高,进一步确定应该基于哪一个区块的状态树验证待验证数据的正确性,具体实现方式可在下面具体描述。
基于上述描述,图5示例性的示出了本发明实施例提供的一种区块的状态树的生成方法的流程,该流程可以由区块的状态树的生成的装置执行,该装置可以位于区块链节点中,可以是该区块链节点。
步骤501,区块链节点针对区块链中的任一区块,确定区块的第一账户和第一账户数据。
其中,第一账户是区块中各交易执行后账户数据发生变化的账户,第一账户数据是各交易执行后第一账户中发生变化后的账户数据。
具体实现中,区块链节点基于当前区块中的各交易,确定各交易所涉及的账户,且判断各交易所涉及的账户中的账户数据是否发生变化,账户数据发生变化的账户即为第一账户,发生变化的账户数据即为第一账户数据,一个第一账户中可能存在一个第一账户数据,也可能存在多个第一账户数据。
可选的,第一账户中可能存在的第一账户数据可以包括各交易执行后第一账户中发生变化的块高记录、账户状态和/或合约状态。如表1中的例子,在区块50的第一账户0x234中可以包括的第一账户数据有块高记录12-45-50和balance的值200。
又例如,当前区块中各交易共涉及账户100个,账户数据发生变化的账户为98个,则此时该当前区块对应的第一账户即为98个,该98个账户中的每一个账户都对应至少一个发生变化的账户数据。此处,可以是当前区块中的一笔交易或者多笔交易导致某个账户的状态数据在当前区块执行完毕后状态数据不发生变化。
步骤502,区块链节点构建由各第一账户和各第一账户的第一账户数据构成的区块的状态树,并将状态树的根哈希存储在区块的区块头中。
其中,状态树以键值对的方式存储。
在构建过程中,可以针对任一第一账户的任一第一账户数据,将第一账户的标识、第一账户数据的标识和区块的块高作为key值,第一账户数据作为叶子节点的value值,基于MPT模式构建区块的状态树。
本发明实施例中,直接将key值进行持久化存储,而不是将key值的哈希进行持久化存储,通过该方式,可以保障同一账户下的账户数据具有相同的压缩前缀,也就是账号标识或账户地址,如图4所示,0x234的所有账户数据的key都有相同的前缀,即0x234,所以至少可以将0x234的所有账户数据的key以共同前缀0x234进行压缩。而现有技术中,对0x234的所有账户数据的key进行哈希计算后,所存在的共同前缀变少,形成状态树的层级较深。所以,本发明实施例可以有效利用Patricia Tree的优势,将状态树的层级压缩至最小,减少存储空间的同时也加快了分支路径的构建及验证效率。
基于上述区块链节点中状态树的构建方案,本发明实施例还提供一种链上数据验证的方法,该方法适用于如图6所示的系统架构,该系统架构可以包括客户端和区块链节点。其中,客户端又可以理解成数据使用方,区块链节点又可以理解成数据提供方;区块链节点是客户端可以访问的区块链系统中的任一个区块链节点。
如图7为本发明实施例示出的链上数据验证的方法的流程,该流程具体包括:
步骤701,客户端向区块链节点发送数据获取请求。
数据获取请求包括第二账户的标识、第二账户数据的标识和第一块高,该数据获取请求用于指示获取第二账户的第二账户数据在第一块高上的值。
步骤702,区块链节点根据第二账户的标识和第二账户的第一块高记录的标识,确定第一块高记录。
区块链节点接收客户端发送的数据获取请求后,会根据第二账户的标识和第二账户的第一块高记录的标识,确定第一块高记录,如表1中,第二账户的标识为0x234,第二账户的第一块高记录的标识为1,则组成的key为0x234_1,根据持久化存储的key-value键值对,确定key为0x234_1对应的value为12-45-50。
步骤703,区块链节点根据第二账户的标识、第二账户数据的标识、第一块高,确定第二账户数据。
区块链节点根据第二账户的标识、第二账户数据的标识、第一块高,确定第二账户数据,如表1中,若第一块高为48,则确定第二账户的标识为0x234,第二账户数据的标识为balance,则组成的key为0x234_balance_45,根据持久化存储的key-value键值对,确定key为0x234_balance_45对应的value为300。
步骤704,区块链节点从第一区块的状态树中获取用于验证第一块高记录的第一分支路径。
步骤705,区块链节点从第二区块的状态树中获取用于验证第二账户数据的第二分支路径。
由于发明实施例中构建某个区块的状态树只能用于验证该区块的状态树对应的账户数据的存在性,所以,要验证第二账户数据的存在性,需要先确定第二账户数据所在状态树对应的第二区块,进而根据第二区块的状态树,确定用于验证第二账户数据的第二分支路径。
在确定第二账户数据所在状态树对应的第二区块时,需要先确定该第二账户的账户数据历次被修改时所记录的块高记录,也即需要确定出第一块高记录,在确定出第一块高记录后,可以将第一块高记录中低于第一块高的所有块高中的最高的块高所对应的区块作为第二区块,该第二区块即用于记录第二账户在第一块高之前的最近一次被修改后的账户数据,进而根据第二区块的状态树,确定用于验证第二账户数据的第二分支路径。
此外,为了保障第一块高记录的正确性,同样需要确定第一块高记录所在的状态树对应的第一区块,进而根据第一区块的状态树,确定用于验证第一块高记录的第一分支路径。具体的,该第一区块可以是第一块高记录中最高块高对应的区块。
如表1中,若第一块高为48,则第一分支路径是由块高50的第一区块对应的状态树确定的,第二分支路径是由块高45的第二区块对应的状态树确定的。
步骤706,区块链节点将第一块高记录、第一分支路径、第二账户数据、第二分支路径发送至客户端。
步骤707,客户端根据第一分支路径、本地存储的第一区块的区块头中状态树的根哈希验证第一块高记录是否正确;
客户端本地存储有区块链上各区块的区块头,用于在接收到区块链节点发送的第一块高记录、第一分支路径、第二账户数据、第二分支路径后,分别根据对应的区块头中的信息,对第一块高记录和第二账户数据进行验证。
一种实现方式下,可以是客户端定时去区块链节点获取最新区块的区块头,另一实现方式下,可以是客户端在需要对接收到的数据进行验证时,再去区块链节点上获取。前者具体可以如图8所示,由客户端和区块链节点交互完成。
步骤801,客户端向区块链节点发送查询请求;
步骤802,区块链节点向客户端发送区块链的当前块高;
步骤803,客户端确定本地存储的区块头的最高块高小于当前块高;
步骤804,客户端向区块链节点发送区块头获取请求;
步骤805,区块链节点确定客户端待获取的区块头;
步骤806,区块链节点向客户端发送待获取的区块头;
步骤807,客户端接收区块链节点返回的区块头,将接收到的区块头存储在本地。
步骤801至步骤807中,客户端向区块链节点发送查询请求,区块链节点在接收到该查询请求后,会向客户端反馈当前区块链上的当前块高,客户端接收该包括当前块高的查询结果,用于根据查询结果判断是否需要向区块链节点同步区块头,具体的,客户端判断本地存储的区块头的最高块高是否小于区块链上的当前块高,若是,则确定向区块链节点同步区块头,并向区块链节点发送区块头获取请求,其中,该区块头获取请求中即包括待获取区块头的块高。
举个例子,区块链节点的区块链的当前块高为100,客户端本地存储的区块头的最高块高为98,则客户端确定需要向区块链节点获取第99个、第100个区块的区块头,客户端向区块链节点发送区块头获取请求,其中,该区块头获取请求中即包括待获取区块头的块高为99和100。
上述实现方式中,客户端定时去区块链节点获取最新区块的区块头,可以保障在需要对账户数据进行验证时,本地存储有用于验证的区块的区块头信息。
由上可知,客户端可以根据第一分支路径、本地存储的第一区块的区块头中状态树的根哈希,确定第一块高记录是否正确。此处,客户端本地存储的第一区块也即客户端从区块链节点上获取的第一块高记录中的最高块高对应的区块。
具体验证过程中,客户端根据第一块高记录和第一分支路径中叶子节点和分支节点的数据,确定第一根哈希,若客户端确定第一根哈希等于本地存储的第一区块的区块头中状态树的根哈希,则确定第一块高记录正确。
步骤708,客户端在确定第一块高记录正确之后,根据第二分支路径、本地存储的第二区块的区块头中状态树的根哈希,验证第二账户数据的是否正确。
客户端先判断第一块高记录是否正确,若正确之后,则可以进一步根据第二分支路径、本地存储的第二区块的区块头中状态树的根哈希,验证第二账户数据的正确性,其中,客户端本地存储的第二区块的区块头是从区块链节点上获取的,第二区块是区块链上第二块高对应的区块,第二块高是第一块高记录中低于第一块高的所有块高中的最高的块高。
具体验证过程中,客户端可以根据第二账户数据和第二分支路径中叶子节点和分支节点的数据,确定第二根哈希,若客户端确定第二根哈希等于本地存储的第二区块的区块头中状态树的根哈希,则确定第二账户数据正确。
需要说明的是,本发明实施例中虽然提供的是客户端先获取第一块高记录和第二账户数据,并基于第一区块对第一块高记录进行验证以及基于第二区块对第二账户数据进行验证,但本发明实施例中还可以是客户端先获取第一块高记录,并基于第一区块对第一块高记录进行验证,在对第一块高记录进行验证通过后,进而获取第二账户数据,并基于第二区块对第二账户数据进行验证。
需要说明的是,由于客户端基于本地存储的第一区块的区块头的状态树的根哈希对第一块高记录进行验证,以及基于本地存储的第二区块的区块头的状态树的根哈希对第二账户数据进行验证,所以客户端首先需要确定本地存储的区块头信息是正确的。
为证明区块头中信息的正确性,具体实现中,在区块头中增加了链上节点对区块头的签名列表,客户端在获取到该区块头后,会根据区块头中的签名列表验证该区块头的正确性,具体的,客户端将接收到的区块头存储在本地之前,获取接收到的区块头中的N个签名信息,并根据本地共识节点列表,对N个签名信息验证,若N个签名信息通过验证,则确定接收到的区块头正确。此处,共识节点列表是客户端根据区块链的创世块中的区块头至接收到的区块头的前一个区块头确定的共识节点组成的列表,如客户端获取到的当前的区块头是第100个区块的区块头,则客户端需要根据第0个区块(创世块)至第99个区块的区块头确定的共识节点列表,对当前的区块头的签名信息进行验证。
解释为,共识节点列表中的共识节点是在区块链的创世块中确定的,在后续区块交易中可能发生改变,比如,创世块中确定共识节点列表中的共识节点有A、B、C、D;在第0个区块至第49个区块时,区块头中共识节点列表中的共识节点未发生变化;在第50个区块时,区块中的交易执行后共识节点列表中增加共识节点E,则此时,共识节点列表中的共识节点有A、B、C、D、E;在第50个区块至第99个区块时共识节点列表中的共识节点未发生变化;所以,客户端在验证第100个区块头中N个签名信息时,可以是根据第0个区块至第99个区块的区块头确定的共识节点列表对该N个签名信息进行验证。
上述实施例中,虽然说共识节点列表是根据第0个区块至第99个区块的区块头确定的,但是在对第100个区块的区块头中签名信息进行验证时,直接采用第99个区块的区块头中共识节点列表进行验证即可,因为第99个区块的区块头已经通过第98个区块的区块头中共识节点列表的验证,第98个区块的区块头已经通过第97个区块的区块头中共识节点列表的验证,以此类推,第2个区块的区块头已经通过第1个区块的区块头中共识节点列表的验证,第1个区块的区块头已经通过第0个区块的区块头中共识节点列表的验证。
此外,在当前区块的交易执行后共识节点列表中共识节点发生变化,则相当于某个合约数据发生变化,则需要采用当前区块的区块头的状态树根哈希验证该合约数据的正确性,以及采用当前区块的前一个区块的区块头的共识节点列表验证该当前区块头中的签名信息,相当于采用当前区块的前一个区块的区块头的共识节点列表验证该当前区块的区块头中状态树根哈希的正确性。仍以上述例子说明,第50个区块中的交易执行后共识节点列表中增加共识节点E,则第50个区块对应的状态树的合约数据发生变化,如增加某个合约数据(代表共识节点E),则需要采用第50个区块中状态树的根哈希对该增加的合约数据进行存在性验证,以及采用第49个区块的共识节点列表对该第50个区块的区块头信息进行验证,即对该第50个区块的区块头中状态树的根哈希进行验证。
具体验证过程中,可以是客户端确定N个签名信息对应的N个共识节点,并判断N个共识节点中在共识节点列表中的M个共识节点,若M符合预设条件,则确定N个签名信息通过验证。M符合预设条件,指的是M的个数符合预设阈值,在不同共识算法情况下,预设阈值可以取不同值。一种实现方式中,采用PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错)共识算法,则预设阈值为f+1,当共识节点个数大于等于f+1时,即代表该区块的块头信息通过验证,其中,f=(N-1)/3。另一种实现方式中,采用POW(Proof of Work,工作证明)共识算法,则预设阈值为N/2+1,当共识节点个数大于等于N/2+1时,即代表该区块的块头信息通过验证,其中,N为共识列表中共识节点的个数。
此外,客户端还需要验证创世块信息的正确性,当客户端验证区块链上有特定个数的共识节点的创世块信息一致,即认可该创世块。此处的特定个数可以是上述预设阈值。
通过上述方式,客户端从创世块开始即对创世块的块头信息进行验证,且每增加一个区块的块头,都会结合当前共识节点列表中的共识节点对当前增加的区块的块头进行验证,以保障保存至本地的区块的块头信息是正确的,从而保障用于验证账户数据的区块头中状态树的根哈希的正确性,进而实现对账户数据的验证。
由上可知,客户端在对某个账户数据进行验证时,验证流为创世块→共识节点→区块头信息→状态树根哈希→账户数据,也就是,创世块对共识节点验证,共识节点对区块头信息验证,区块头信息对状态树根哈希验证,状态树根哈希对账户数据验证。而且,状态树在构建时,基于哈希计算的单向性,一旦对叶子节点(账户数据)修改,则都会改变状态树根哈希,也即,进一步保证账户数据的不被修改性。此外,上述相关验证点的信息都由链上节点提供,对于有准入概念的联盟链,链上节点在给客户端提供信息之前需进行鉴权,进一步保障数据验证的准确性。
为了更好的解释本发明实施例,下面结合表1提供一个完整的链上数据验证的例子,具体如下:
客户端向区块链节点请求获取账户0x234在块高48的区块上的balance,区块链节点先根据0x234_1确定第一块高记录12-45-50,区块链节点根据块高50的第一区块的状态树确定用于验证第一块高记录12-45-50的第一分支路径;区块链节点根据第一块高记录12-45-50和块高48,确定第一块高记录中小于块高48且最大的块高为45,区块链节点先根据0x234_balance_45确定balance为300,并根据块高45的第二区块的状态树确定用于验证balance 300的第二分支路径。区块链节点将第一块高记录12-45-50、第一分支路径和balance 300、第二分支路径一起发送至客户端,客户端根据本地存储的块高50的第一区块的区块头,结合第一分支路径验证第一块高记录12-45-50的正确性,基于已经证明的第一块高记录12-45-50,确定balance在45区块处被修改,则使用本地存储的块高45的第二区块的区块头,结合第二分支路径验证,验证balance 300的正确性。结合上述过程,客户端即完成了查询并验证账户0x234在块高48的区块上的balance为300的过程。
需要说明的是,图6中的客户端还可以是与区块链节点不同联盟链的区块链节点,如图9中,可以包括第一区块链节点和第二区块链节点;其中,第一区块链节点又可以理解成数据使用方,第二区块链节点又可以理解成数据提供方;第一区块链节点和第二区块链节点属于不同的联盟链。
基于同一发明构思,图10示例性的示出了本发明实施例提供的一种区块的状态树的生成装置的结构,该装置可以执行区块的状态树的生成方法的流程。
该装置包括:
确定单元1001,用于针对区块链中的任一区块,确定所述区块的第一账户和第一账户数据;所述第一账户是所述区块中各交易执行后账户数据发生变化的账户,所述第一账户数据是所述各交易执行后所述第一账户中发生变化后的账户数据;
构建单元1002,用于构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,并将所述状态树的根哈希存储在所述区块的区块头中,其中,所述状态树以键值对的方式存储。
可选的,所述构建单元1002具体用于:
针对任一第一账户的任一第一账户数据,将所述第一账户的标识、所述第一账户数据的标识和所述区块的块高作为key值,所述第一账户数据作为叶子节点的value值,基于MPT模式构建所述区块的状态树。
可选的,所述第一账户数据包括所述各交易执行后所述第一账户中发生变化的块高记录、账户状态和/或合约状态;所述块高记录用于记录所述第一账户中的账户状态和/或合约状态发生历次变化时所在的区块的块高。
可选的,所述装置还包括处理单元1003;
所述处理单元1003用于:
接收客户端的数据获取请求;所述数据获取请求中包括第二账户的标识、第二账户数据的标识和第一块高;
根据所述第二账户的标识和所述第二账户的第一块高记录的标识,确定所述第一块高记录;根据所述第二账户的标识、所述第二账户数据的标识、所述第一块高,确定所述第二账户数据;
从第一区块的状态树中获取用于验证所述第一块高记录的第一分支路径;所述第一区块是所述第一块高记录中的最高块高对应的区块;
从第二区块的状态树中获取用于验证所述第二账户数据的第二分支路径;所述第二区块是第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高;
将所述第一块高记录、所述第一分支路径、所述第二账户数据、所述第二分支路径发送至所述客户端,以使所述客户端对所述第一块高记录和第二账户数据进行验证。
基于同一发明构思,图11示例性的示出了本发明实施例提供的一种链上数据验证的装置的结构,该装置可以执行链上数据验证的方法的流程。
该装置包括:
收发单元1101,用于向区块链节点发送数据获取请求;所述数据获取请求包括第二账户的标识、第二账户数据的标识和第一块高;
所述收发单元1101,还用于接收所述区块链节点返回的第一块高记录、第一分支路径、第二账户数据、第二分支路径;所述第一块高记录和所述第二账户数据是所述区块链节点根据所述第二账户的标识、所述第二账户数据的标识和所述第一块高确定的;所述第一分支路径是所述区块链节点确定的用于验证所述第一块高记录的分支路径;所述第二分支路径是所述区块链节点确定的用于验证所述第二账户数据的分支路径;
验证单元1102,用于根据所述第一分支路径、本地存储的第一区块的区块头中状态树的根哈希验证所述第一块高记录是否正确;所述本地存储的第一区块的区块头是从所述区块链节点上获取的,所述第一区块是区块链上是所述第一块高记录中的最高块高对应的区块;
所述验证单元1102,还用于在确定所述第一块高记录正确之后,根据所述第二分支路径、所述本地存储的第二区块的区块头中状态树的根哈希,验证所述第二账户数据的是否正确;所述本地存储的第二区块的区块头是从所述区块链节点上获取的,所述第二区块是所述区块链上第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高。
可选的,所述验证单元1102具体用于:
根据所述第一块高记录和所述第一分支路径中叶子节点和分支节点的数据,确定第一根哈希;
若所述第一根哈希等于所述本地存储的第一区块的区块头中状态树的根哈希,则确定所述第一块高记录正确。
可选的,所述验证单元1102具体用于:
根据所述第二账户数据和所述第二分支路径中叶子节点和分支节点的数据,确定第二根哈希;
若所述第二根哈希等于所述本地存储的第二区块的区块头中状态树的根哈希,则确定所述第二账户数据正确。
可选的,所述装置还包括同步单元1103;
所述同步单元1103用于:
向所述区块链节点发送查询请求;
接收所述区块链节点返回的查询结果;所述查询结果是所述区块链节点在接收到所述查询请求后返回的区块链的当前块高;
判断所述本地存储的区块头的最高块高是否小于所述当前块高,若是,则向所述区块链节点发送区块头获取请求;所述区块头获取请求中包括待获取区块头的块高;
接收所述区块链节点返回的区块头,将接收到的区块头存储在本地。
可选的,所述同步单元1103在所述将接收到的区块头存储在本地之前,还用于:
获取所述接收到的区块头中的N个签名信息;
根据共识节点列表,对所述N个签名信息验证;所述共识节点列表是根据所述区块链的创世块的区块头至所述接收到的区块头的前一个区块头确定的共识节点组成的列表;
若所述N个签名信息通过验证,则确定所述接收到的区块头正确。
可选的,所述同步单元1103具体用于:
确定所述N个签名信息对应的N个共识节点;
判断所述N个共识节点中在所述共识节点列表中的M个共识节点;
若M符合预设条件,则确定所述N个签名信息通过验证。
基于同一发明构思,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块的状态树的生成方法。
基于同一发明构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块的状态树的生成方法。
基于同一发明构思,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述链上数据验证的方法。
基于同一发明构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述链上数据验证的方法。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种区块的状态树的生成方法,其特征在于,包括:
针对区块链中的任一区块,确定所述区块的第一账户和第一账户数据;所述第一账户是所述区块中各交易执行后账户数据发生变化的账户,所述第一账户数据是所述各交易执行后所述第一账户中发生变化后的账户数据;
构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,并将所述状态树的根哈希存储在所述区块的区块头中,其中,所述状态树以键值对的方式存储。
2.如权利要求1所述的方法,其特征在于,所述构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,包括:
针对任一第一账户的任一第一账户数据,将所述第一账户的标识、所述第一账户数据的标识和所述区块的块高作为key值,所述第一账户数据作为叶子节点的value值,基于MPT模式构建所述区块的状态树。
3.如权利要求2所述的方法,其特征在于,所述第一账户数据包括所述各交易执行后所述第一账户中发生变化的块高记录、账户状态和/或合约状态;所述块高记录用于记录所述第一账户中的账户状态和/或合约状态发生历次变化时所在的区块的块高。
4.如权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
接收客户端的数据获取请求;所述数据获取请求中包括第二账户的标识、第二账户数据的标识和第一块高;
根据所述第二账户的标识和所述第二账户的第一块高记录的标识,确定所述第一块高记录;根据所述第二账户的标识、所述第二账户数据的标识、所述第一块高,确定所述第二账户数据;
从第一区块的状态树中获取用于验证所述第一块高记录的第一分支路径;所述第一区块是所述第一块高记录中的最高块高对应的区块;
从第二区块的状态树中获取用于验证所述第二账户数据的第二分支路径;所述第二区块是第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高;
将所述第一块高记录、所述第一分支路径、所述第二账户数据、所述第二分支路径发送至所述客户端,以使所述客户端对所述第一块高记录和第二账户数据进行验证。
5.一种区块的状态树的生成装置,其特征在于,包括:
确定单元,用于针对区块链中的任一区块,确定所述区块的第一账户和第一账户数据;所述第一账户是所述区块中各交易执行后账户数据发生变化的账户,所述第一账户数据是所述各交易执行后所述第一账户中发生变化后的账户数据;
构建单元,用于构建由各第一账户和所述各第一账户的第一账户数据构成的所述区块的状态树,并将所述状态树的根哈希存储在所述区块的区块头中,其中,所述状态树以键值对的方式存储。
6.如权利要求5所述的装置,其特征在于,所述构建单元具体用于:
针对任一第一账户的任一第一账户数据,将所述第一账户的标识、所述第一账户数据的标识和所述区块的块高作为key值,所述第一账户数据作为叶子节点的value值,基于MPT模式构建所述区块的状态树。
7.如权利要求6所述的装置,其特征在于,所述第一账户数据包括所述各交易执行后所述第一账户中发生变化的块高记录、账户状态和/或合约状态;所述块高记录用于记录所述第一账户中的账户状态和/或合约状态发生历次变化时所在的区块的块高。
8.如权利要求5至7任一项所述的装置,其特征在于,所述装置还包括处理单元;
所述处理单元用于:
接收客户端的数据获取请求;所述数据获取请求中包括第二账户的标识、第二账户数据的标识和第一块高;
根据所述第二账户的标识和所述第二账户的第一块高记录的标识,确定所述第一块高记录;根据所述第二账户的标识、所述第二账户数据的标识、所述第一块高,确定所述第二账户数据;
从第一区块的状态树中获取用于验证所述第一块高记录的第一分支路径;所述第一区块是所述第一块高记录中的最高块高对应的区块;
从第二区块的状态树中获取用于验证所述第二账户数据的第二分支路径;所述第二区块是第二块高对应的区块;所述第二块高是所述第一块高记录中低于所述第一块高的所有块高中的最高的块高;
将所述第一块高记录、所述第一分支路径、所述第二账户数据、所述第二分支路径发送至所述客户端,以使所述客户端对所述第一块高记录和第二账户数据进行验证。
9.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至4任一项所述的方法。
10.一种计算机可读非易失性存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行如权利要求1至4任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110689224.8A CN113329031B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成方法及装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910960376.XA CN110602148B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
CN202110689224.8A CN113329031B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成方法及装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910960376.XA Division CN110602148B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113329031A true CN113329031A (zh) | 2021-08-31 |
CN113329031B CN113329031B (zh) | 2023-06-13 |
Family
ID=68866285
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910960376.XA Active CN110602148B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
CN202110689224.8A Active CN113329031B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成方法及装置 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910960376.XA Active CN110602148B (zh) | 2019-10-10 | 2019-10-10 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (2) | CN110602148B (zh) |
WO (1) | WO2021068728A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114564539A (zh) * | 2022-03-01 | 2022-05-31 | 山东大学 | 账户活跃度感知的区块链世界状态动态构建方法及系统 |
CN114691687A (zh) * | 2021-12-30 | 2022-07-01 | 北京连琪科技有限公司 | 验证区块状态证明的方法 |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110602148B (zh) * | 2019-10-10 | 2021-07-06 | 深圳前海微众银行股份有限公司 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
CN111177225B (zh) * | 2020-01-02 | 2023-05-23 | 支付宝(杭州)信息技术有限公司 | 账户状态存在性证明方法及装置和状态查询方法及装置 |
CN111209339B (zh) * | 2020-01-03 | 2021-09-14 | 腾讯科技(深圳)有限公司 | 区块同步方法、装置、计算机以及存储介质 |
CN113312205B (zh) * | 2020-02-26 | 2022-07-29 | 腾讯科技(深圳)有限公司 | 数据校验方法、装置、存储介质和计算机设备 |
CN111461751B (zh) * | 2020-04-02 | 2024-03-29 | 武汉大学 | 基于区块链的房产信息链上组织方法、历史状态追溯方法及装置 |
CN111488359A (zh) * | 2020-04-08 | 2020-08-04 | 北京瑞策科技有限公司 | 业务数据区块链的关系数据存储方法及其装置 |
CN111488610A (zh) * | 2020-04-08 | 2020-08-04 | 北京瑞策科技有限公司 | 基于业务数据区块链的状态数据查询方法及装置 |
CN111488606B (zh) * | 2020-04-08 | 2021-04-27 | 北京瑞策科技有限公司 | 基于业务数据区块链的数据共享方法及装置 |
CN111488615A (zh) * | 2020-04-08 | 2020-08-04 | 北京瑞策科技有限公司 | 业务数据区块链的跨链实现方法及装置 |
CN111553669B (zh) * | 2020-04-28 | 2021-09-10 | 腾讯科技(深圳)有限公司 | 一种交易路由方法、装置及计算机可读存储介质 |
CN111553670B (zh) * | 2020-04-28 | 2021-10-15 | 腾讯科技(深圳)有限公司 | 一种交易处理方法、装置及计算机可读存储介质 |
CN111640018B (zh) * | 2020-05-06 | 2021-08-03 | 深圳前海微众银行股份有限公司 | 一种区块链交易存在性验证方法及装置 |
CN112286939A (zh) * | 2020-06-12 | 2021-01-29 | 支付宝(杭州)信息技术有限公司 | 块链式账本中全局状态的哈希的生成方法、装置及设备 |
CN112364010B (zh) * | 2021-01-12 | 2021-04-23 | 支付宝(杭州)信息技术有限公司 | 一种重要业务记录的存在性验证方法及装置 |
CN113254450B (zh) * | 2021-05-28 | 2022-07-22 | 山大地纬软件股份有限公司 | 一种基于区块链的增量mpt树账户状态存储方法及系统 |
CN114385756A (zh) * | 2021-06-17 | 2022-04-22 | 支付宝(杭州)信息技术有限公司 | 在区块链中执行交易的方法和区块链节点 |
CN113704249A (zh) * | 2021-07-14 | 2021-11-26 | 杭州溪塔科技有限公司 | 一种区块链中使用静态默克尔树的方法和装置 |
CN113360456B (zh) * | 2021-08-11 | 2021-10-29 | 腾讯科技(深圳)有限公司 | 数据归档方法、装置、设备以及存储介质 |
CN113505138B (zh) * | 2021-09-06 | 2021-12-21 | 支付宝(杭州)信息技术有限公司 | 区块链系统中状态证明及执行区块的方法及装置 |
CN114520810A (zh) * | 2022-01-27 | 2022-05-20 | 山东浪潮工业互联网产业股份有限公司 | 一种基于区块链的区块数据传输方法、设备及介质 |
CN114780640A (zh) * | 2022-04-28 | 2022-07-22 | 蚂蚁区块链科技(上海)有限公司 | 一种区块链中的数据处理方法及区块链节点 |
CN115052008B (zh) * | 2022-05-26 | 2023-07-25 | 南京邮电大学 | 基于云存储的区块链数据链下存储方法 |
CN115150417A (zh) * | 2022-07-01 | 2022-10-04 | 南方电网电力科技股份有限公司 | 一种基于区块链的数据存储方法及相关装置 |
CN115021945B (zh) * | 2022-08-08 | 2022-11-08 | 四块科技(深圳)有限公司 | 区块链交易处理方法和系统 |
CN115941692B (zh) * | 2023-03-09 | 2023-05-23 | 中国信息通信研究院 | 基于主从式区块链存储模式的信息标识系统、设备和介质 |
CN117251120B (zh) * | 2023-11-17 | 2024-03-01 | 杭州乒乓智能技术有限公司 | 基于jvm堆外内存的对账系统优化方法、装置、设备及介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503992A (zh) * | 2016-10-18 | 2017-03-15 | 北京天德科技有限公司 | 一种将交易信息和账户信息分别存储的区块链 |
CN108197226A (zh) * | 2017-12-29 | 2018-06-22 | 山大地纬软件股份有限公司 | Mptc账户状态树以及mptc区块链快速检索方法 |
CN108282474A (zh) * | 2018-01-18 | 2018-07-13 | 山东大学 | 基于区块链的数字资产交易一致性的维护方法 |
CN108805570A (zh) * | 2018-06-01 | 2018-11-13 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及存储介质 |
US20190007199A1 (en) * | 2016-07-15 | 2019-01-03 | Mastercard International Incorporated | Method and system for partitioned blockchains and enhanced privacy for permissioned blockchains |
US20190018888A1 (en) * | 2017-04-12 | 2019-01-17 | Vijay K. Madisetti | Method and System for Tuning Blockchain Scalability, Decentralization, and Security for Fast and Low-Cost Payment and Transaction Processing |
CN109359159A (zh) * | 2018-09-30 | 2019-02-19 | 深圳前海微众银行股份有限公司 | 分布式存储方法、系统及设备 |
CN109684333A (zh) * | 2018-12-24 | 2019-04-26 | 杭州复杂美科技有限公司 | 一种数据存储及裁剪方法、设备和存储介质 |
CN109933592A (zh) * | 2019-03-22 | 2019-06-25 | 杭州复杂美科技有限公司 | 数据存储方法、数据回滚方法、设备和存储介质 |
WO2019179538A2 (en) * | 2019-07-11 | 2019-09-26 | Alibaba Group Holding Limited | Shared blockchain data storage |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018115567A1 (en) * | 2016-12-19 | 2018-06-28 | Nokia Technologies Oy | Method and apparatus for private data transfer between parties |
CN108039943B (zh) * | 2017-12-06 | 2020-10-30 | 清华大学深圳研究生院 | 一种可验证的加密搜索方法 |
CN108153907B (zh) * | 2018-01-18 | 2021-01-22 | 中国计量大学 | 通过16位Trie树实现空间优化的词典存储管理方法 |
CN108615156A (zh) * | 2018-05-09 | 2018-10-02 | 上海魅联信息技术有限公司 | 一种基于区块链的数据结构 |
CN108595720B (zh) * | 2018-07-12 | 2020-05-19 | 中国科学院深圳先进技术研究院 | 一种区块链时空数据查询方法、系统及电子设备 |
CN109359222B (zh) * | 2018-08-06 | 2021-07-06 | 杭州复杂美科技有限公司 | 数据存储方法及系统、设备和存储介质 |
CN109145163B (zh) * | 2018-08-22 | 2021-08-24 | 深圳前海微众银行股份有限公司 | 区块链数据缩容方法、装置及存储介质 |
CN109213900B (zh) * | 2018-09-18 | 2020-10-16 | 百度在线网络技术(北京)有限公司 | 一种区块链的数据修改方法、装置、设备和介质 |
CN110009334B (zh) * | 2018-11-07 | 2020-04-28 | 阿里巴巴集团控股有限公司 | 一种构建梅克尔树、简单支付验证方法及装置 |
CN109409889B (zh) * | 2018-11-13 | 2021-11-12 | 杭州秘猿科技有限公司 | 一种区块链中的区块确定方法、装置及电子设备 |
CN109829267A (zh) * | 2019-02-22 | 2019-05-31 | 陕西优米数据技术有限公司 | 一种基于区块链的版权共识系统和方法 |
CN110060064B (zh) * | 2019-04-26 | 2023-05-16 | 深圳市迅雷网络技术有限公司 | 一种交易信息验证方法及相关装置 |
CN110188550B (zh) * | 2019-05-17 | 2024-05-24 | 深圳前海微众银行股份有限公司 | 一种区块链的数据验证方法和装置 |
CN110602148B (zh) * | 2019-10-10 | 2021-07-06 | 深圳前海微众银行股份有限公司 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
CN111008201B (zh) * | 2020-03-09 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 并行修改和读取状态树的方法和装置 |
-
2019
- 2019-10-10 CN CN201910960376.XA patent/CN110602148B/zh active Active
- 2019-10-10 CN CN202110689224.8A patent/CN113329031B/zh active Active
-
2020
- 2020-09-18 WO PCT/CN2020/116269 patent/WO2021068728A1/zh active Application Filing
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190007199A1 (en) * | 2016-07-15 | 2019-01-03 | Mastercard International Incorporated | Method and system for partitioned blockchains and enhanced privacy for permissioned blockchains |
CN106503992A (zh) * | 2016-10-18 | 2017-03-15 | 北京天德科技有限公司 | 一种将交易信息和账户信息分别存储的区块链 |
US20190018888A1 (en) * | 2017-04-12 | 2019-01-17 | Vijay K. Madisetti | Method and System for Tuning Blockchain Scalability, Decentralization, and Security for Fast and Low-Cost Payment and Transaction Processing |
CN108197226A (zh) * | 2017-12-29 | 2018-06-22 | 山大地纬软件股份有限公司 | Mptc账户状态树以及mptc区块链快速检索方法 |
CN108282474A (zh) * | 2018-01-18 | 2018-07-13 | 山东大学 | 基于区块链的数字资产交易一致性的维护方法 |
CN108805570A (zh) * | 2018-06-01 | 2018-11-13 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及存储介质 |
CN109359159A (zh) * | 2018-09-30 | 2019-02-19 | 深圳前海微众银行股份有限公司 | 分布式存储方法、系统及设备 |
CN109684333A (zh) * | 2018-12-24 | 2019-04-26 | 杭州复杂美科技有限公司 | 一种数据存储及裁剪方法、设备和存储介质 |
CN109933592A (zh) * | 2019-03-22 | 2019-06-25 | 杭州复杂美科技有限公司 | 数据存储方法、数据回滚方法、设备和存储介质 |
WO2019179538A2 (en) * | 2019-07-11 | 2019-09-26 | Alibaba Group Holding Limited | Shared blockchain data storage |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114691687A (zh) * | 2021-12-30 | 2022-07-01 | 北京连琪科技有限公司 | 验证区块状态证明的方法 |
CN114564539A (zh) * | 2022-03-01 | 2022-05-31 | 山东大学 | 账户活跃度感知的区块链世界状态动态构建方法及系统 |
CN114564539B (zh) * | 2022-03-01 | 2022-11-25 | 山东大学 | 账户活跃度感知的区块链世界状态动态构建方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2021068728A1 (zh) | 2021-04-15 |
CN110602148A (zh) | 2019-12-20 |
CN110602148B (zh) | 2021-07-06 |
CN113329031B (zh) | 2023-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110602148B (zh) | 一种区块的状态树的生成和链上数据验证的方法及装置 | |
CN110737664B (zh) | 一种区块链节点同步的方法及装置 | |
WO2021032138A1 (zh) | 一种基于区块链系统的共识方法、装置及系统 | |
CN112261159B (zh) | 执行跨片事务的方法及系统、主链节点和目标分片节点 | |
CN111008201B (zh) | 并行修改和读取状态树的方法和装置 | |
US10992459B2 (en) | Updating a state Merkle tree | |
CN109766389B (zh) | 一种基于位图索引的区块链轻客户端验证查询方法 | |
CN109410043B (zh) | 一种基于分层树状结构的区块链信息高效存储方法及装置 | |
CN112261162B (zh) | 执行跨片事务的方法及系统、主链节点和目标分片节点 | |
CN112261157B (zh) | 提交跨片事务的方法及系统、主链节点和源分片节点 | |
CN112579261A (zh) | 退出跨片事务的方法和系统、主链节点和目标分片节点 | |
CN112286963A (zh) | 一种区块链终端数据可信查询系统及其实现方法 | |
CN111488396A (zh) | 业务数据区块链的数据同步方法及装置 | |
CN111640018B (zh) | 一种区块链交易存在性验证方法及装置 | |
CN111080298B (zh) | 一种适用于能源区块链的区块生成与交易验证方法 | |
CN109685657B (zh) | 在区块链网络中处理交易的方法和节点设备以及存储介质 | |
CN112261160B (zh) | 包含分片的区块链系统中退出跨片事务的方法及系统 | |
CN115795563A (zh) | 一种状态数据校验方法及装置 | |
CN112261156B (zh) | 一种提交跨片事务的方法及系统、主链节点和源分片节点 | |
CN112396422B (zh) | 提交跨片事务的方法及系统、主链节点和目标分片节点 | |
CN113535803B (zh) | 一种基于关键字索引的区块链高效检索及可靠性验证方法 | |
CN112269423B (zh) | 一种锁定区块链系统中全局时钟的方法及区块链系统 | |
CN112261161B (zh) | 一种锁定区块链系统中分片区块的方法及区块链系统 | |
CN114144775A (zh) | 总账可验证修剪系统 | |
CN112261158B (zh) | 返回跨片事务响应的方法及系统、主链节点和源分片节点 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |