CN114003972A - 生成区块状态承诺和证明及验证区块状态证明的方法 - Google Patents
生成区块状态承诺和证明及验证区块状态证明的方法 Download PDFInfo
- Publication number
- CN114003972A CN114003972A CN202111638682.5A CN202111638682A CN114003972A CN 114003972 A CN114003972 A CN 114003972A CN 202111638682 A CN202111638682 A CN 202111638682A CN 114003972 A CN114003972 A CN 114003972A
- Authority
- CN
- China
- Prior art keywords
- state
- block
- version
- name
- composite
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Computer Security & Cryptography (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Fuzzy Systems (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种生成区块状态承诺和证明及验证区块状态证明的方法,包括:每次在区块中写入状态时,记录写入状态的版本;将所述写入状态的状态名和所述版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺;对所述区块所有写入状态的状态名和复合状态值进行计算,将计算结果作为存在性承诺;在区块中记录所述存在性承诺;其中,所述区块包含全部区块的所有非过期写入状态的不存在性承诺。通过以区块为单位组织状态树,状态树的规模小,结合写入状态的过期机制,在全局状态规模巨大但活跃状态规模有限的场景下,极大降低了计算状态存在性证明的代价,缩短了状态证明数据的长度。
Description
技术领域
本申请涉及区块链安全技术领域,具体涉及一种生成区块状态承诺和证明及验证区块状态证明的方法。
背景技术
区块链的状态验证方式可分为全节点验证和轻节点验证两类。前者通过在本地保存所有区块数据,能够通过按照区块高度验证区块合法性,按照区块内的签名交易顺序逐条执行签名交易,自行生成和验证账本状态;而对于本地无区块和账本数据的轻节点,由于不具备执行签名交易所需要的状态数据,只能依靠全节点生成的证明数据验证指定状态在指定的区块高度下的存在性。
目前最具代表性的状态验证方法是以太坊主链所采用的基于全局状态的梅克尔证明。该方法在每个区块的区块头中包含了区块内签名交易执行完毕,当前全局状态的梅克尔树根(即全局状态的存在性承诺),全节点向轻节点公示区块头、并出具指定状态名的状态值、状态的梅克尔路径,轻节点通过自行验证区块合法性、计算并比对梅克尔树根,可以验证在该区块高度上指定的状态是否存在。该方法面临“状态数据膨胀”难题。
“状态数据膨胀”指的是因为用户及合约的不断增加,以及合约执行中写入的状态键-值对增加,在全节点处保存的状态数据会越来越多,从而使得全局状态树的规模不断扩大,一方面会导致状态树树根的计算量持续增加,另一方面会导致作为状态证明的梅克尔路径的数据长度持续增长,以太坊为此提出两种解决方案:
一、状态到期:状态证明沿用目前的梅克尔帕特里夏树(Merkle Patricia Tree,简称MPT树)方式。从状态中移除最近没有被访问过的状态(例如:上一次访问还是去年),并需要全节点的状态证明(State Proof)才能恢复过期状态。这会将每个人需要存储的状态减少到大约 20-50 GB。这个方案的局限在于:a.以最近状态访问时间范围缩小单棵MPT树的数据规模,在面临短时间内大量非重复状态名的访问时,缩小的效果有限,状态证明的计算量和证明数据长度仍然太大;b.存在安全问题,对于存在于最新MPT树的状态,全节点可以进行“状态时效性欺骗”,对轻节点谎称实际存在的最新状态不存在,并从历史MPT树中生成过期状态的证明。
二、弱无状态:只需要区块提议者存储状态,并允许所有其他节点无状态地验证区块。在实践中实现这一点需要切换到沃克尔树(Verkle Tree)以减少生成证明数据的规模。这种方案的局限在于: a. 沃克尔树采用的KZG承诺,虽然证明数据长度小,但是生成证明的计算量大。 b.由于仍然维持全局的状态树,随着状态数据膨胀,生成证明的计算量将不断增长,当沃克尔树叶子节点达到一定数量时,生成证明的计算复杂度导致在工程上难以应用。
发明内容
本申请旨在提供一种生成区块状态承诺和证明及验证区块状态证明的方法,使得无区块数据和状态数据的轻节点能够验证区块链状态的存在性和时效性。
根据本申请的一方面,提出一种生成区块状态承诺的方法,包括:
每次在区块中写入状态时,记录写入状态的版本;
将所述写入状态的状态名和所述版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺;
对所述区块所有写入状态的状态名和复合状态值组织状态树,并进行计算,将计算结果作为存在性承诺;
在区块中记录所述存在性承诺;
其中,所述区块包含全部区块的所有非过期写入状态的不存在性承诺。
根据一些实施例,前述方法包括:所述在所述区块中记录所述过滤器结果作为不存在性承诺,包括:
获取所述区块的写入状态集合;
根据写入状态的版本命名规则和上一版本,获取写入状态的当前版本;
对写入状态的状态名和当前版本进行编码,生成复合状态名;
将每个写入状态的所述复合状态名输入全局过滤器,进行过滤器计算,得到过滤器结果,作为不存在性承诺;
依据当前区块高度,对输入的复合状态名建立区块高度-复合状态名索引。
根据一些实施例,前述方法还包括:
操作1:根据所述状态的当前版本和所述版本命名规则,获取状态的下一版本;
操作2:根据写入状态的状态名和下一版本进行编码,生成下一版本的复合状态名;
操作3:对所述下一版本的复合状态名进行独立过滤器计算,将计算结果与所述不存在性承诺进行比对,判断下一版本的复合状态名是否已存在;
操作4:如果是,写入状态的当前版本切换到下一版本;
重复操作1-4,直至获得所述区块的所有写入状态的当前版本;
将每个写入状态当前版本的复合状态名输入到全局过滤器计算,得到过滤器结果,作为不存在性承诺。
根据一些实施例,前述方法包括:
从全局过滤器删除写入状态的最后写入版本的复合状态名,更新区块高度-复合状态名索引;
如果写入状态的版本是初始版本,或者写入的状态是过期状态,将全局过滤器的元素总数加1;
如果全局过滤器的元素总数超出预设上限,按照区块高度-复合状态名索引,从全局过滤器中删除1个最早写入的复合状态名,并更新区块高度-复合状态名索引;
如果删除之后该区块高度对应的状态列表不为空,记录该状态所在的区块高度为过期区块高度,否则增加区块高度,直到找到一个对应的状态列表不为空的区块高度,记录该区块高度为过期区块高度。
根据一些实施例,前述方法包括:所述独立过滤器和所述全局过滤器包括:布谷鸟过滤器。
根据一些实施例,前述方法包括:所述在区块中记录所述存在性承诺,包括:
获取所述区块的写入状态集合;
针对所述区块每个写入状态,对写入状态的原始值、状态的当前版本、所在区块高度进行编码,生成复合状态值;
对所述区块所有写入状态,将状态名和复合状态值作为键值对写入区块链的状态数据库;
对所述区块所有写入状态,依据状态名和复合状态值建立状态树,并计算状态树树根作为所有写入状态的存在性承诺。
根据一些实施例,前述方法包括:所述建立状态树包括:
通过梅克尔树或沃克尔树计算得到状态树。
根据一些实施例,前述方法包括:所述存在性承诺采用梅克尔树或沃克尔树的树根表示。
根据本申请的另一方面,提供一种生成区块状态证明的方法,包括:
获取状态名;
获取状态的最新版本;
获取状态的后续版本在全局的不存在性承诺;
基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
根据一些实施例,前述方法包括:
根据指定的状态名,获取最后一次写入该状态的区块头;
获取最新高度的区块头;
获取最后一次写入该状态的区块对应的状态树;
获取最后一次写入该状态的区块头中的存在性承诺;
根据指定的状态名及所述状态树,计算得到指定的状态名在所述状态树中的梅克尔路径或沃克尔路径作为状态的存在性证明;
依据所述状态名和状态的版本命名规则,计算状态的后续版本的复合状态名;
对所述复合状态名进行独立过滤器计算,并与最新高度的区块头中包含的状态的不存在性承诺比对,得到比对结果;
根据所述状态的存在性证明和所述比对结果,生成状态证明。
根据一些实施例,前述方法包括:所述获取最后一次写入该状态的区块头包括:
根据指定的状态名,从键值数据库读取复合状态值;
解码复合状态值,得到状态的原始值、状态的当前版本、所在区块高度;
根据所在区块高度,获取最后一次写入该状态的区块头。
根据一些实施例,前述方法包括:所述根据比对结果,生成状态证明包括:
判断如果最后一次写入状态的区块高度不大于过期区块高度,则状态过期,调用状态更新合约,将状态的当前版本切换到下一版本作为状态的新版本;
如果状态未过期,则判断状态的后续版本的复合状态名是否被误判为已存在;
如果有误判,全节点通过签名交易调用状态更新合约,将状态的当前版本切换到下一版本,
根据包含状态更新交易的新出区块的区块头、状态名、新复合状态值,生成状态证明;
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
根据一些实施例,前述方法包括:所述独立过滤器包括:布谷鸟过滤器。
根据本申请的另一方面,提供一种验证区块状态证明的方法,包括:
获取指定状态的状态证明;
从状态证明获取指定状态对应区块的区块头和最新区块头;
验证所述对应区块的区块头和最新区块头的合法性,以验证区块头包含的存在性承诺、不存在性承诺和过期区块高度未被篡改或伪造;
验证存在性承诺;
验证不存在性承诺。
根据一些实施例,前述方法包括:所述验证存在性承诺包括:
从状态证明获取状态名、复合状态值和状态的存在性证明;
从当前区块头中提取状态的存在性承诺,采用梅克尔树或沃克尔树方法计算,验证状态名和复合状态值是否存在于所述存在性承诺中。
根据一些实施例,前述方法包括:所述验证不存在性承诺包括:
从最新区块头中提取过期区块高度,如果过期区块高度不小于最后一次写入指定状态的区块高度,则验证不通过;
如果上述验证通过,从最新区块头中提取状态的不存在性承诺,以验证指定状态对应区块是最后一次写入指定状态的区块;
从所述复合状态值提取状态版本,根据状态版本和版本命名规则,获取状态的下一版本;
根据所述状态名、状态的下一版本,生成下一版本的复合状态名;
对下一版本的复合状态名进行独立过滤器计算,得到计算结果;
将所述最新区块头中的不存在性承诺和所述计算结果进行比对,如果比对结果表明所述复合状态名在全局复合状态名集合中不存在,则验证通过。
根据一些实施例,前述方法包括:所述独立过滤器包括:布谷鸟过滤器。
根据本申请的另一方面,提供一种区块链的节点,包括:
记录单元,每次在区块中写入状态时,记录该状态的版本;
不存在性承诺生成单元,将所述写入状态的状态名和所述版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺;
存在性承诺生成单元,对所述区块所有写入状态的状态名和复合状态值进行计算,将计算结果作为存在性承诺,在区块中记录所述存在性承诺。
根据一些实施例,前述节点包括:
所述不存在性承诺生成单元包括:
状态集合获取模块,获取所述区块的写入状态集合;
当前版本获取模块,根据写入状态的版本命名规则和上一版本,获取写入状态的当前版本;
复合状态名生成模块,对写入状态的状态名和当前版本进行编码,生成复合状态名;
过滤器计算模块,将复合状态名输入过滤器,进行过滤器计算,得到过滤器结果;
复合状态名索引建立模块,依据当前区块高度,对输入的复合状态名建立区块高度-复合状态名索引。
根据一些实施例,前述节点包括:
还包括判断单元,所述判断单元配置为:
操作1:根据所述状态的当前版本和所述版本命名规则,获取状态的下一版本;
操作2:根据写入状态的状态名和下一版本进行编码,生成下一版本的复合状态名;
操作3:对所述下一版本的复合状态名进行独立过滤器计算,将计算结果与所述不存在性承诺进行比对,判断下一版本的复合状态名是否已存在;
操作4:如果是,写入状态的当前版本切换到下一版本;
重复操作1-4,直至获得所述区块的所有写入状态的当前版本;
将每个写入状态当前版本的复合状态名输入到全局过滤器计算,得到过滤器结果,作为不存在性承诺。
根据一些实施例,前述节点包括:
所述判断单元还配置为:
从全局过滤器删除写入状态的最后写入版本的复合状态名,更新区块高度-复合状态名索引;
如果写入状态的版本是初始版本,或者写入的状态是过期状态,将全局过滤器的元素总数加1;
如果全局过滤器的元素总数超出预设上限,按照区块高度-复合状态名索引,从全局过滤器中删除1个最早写入的复合状态名,并更新区块高度-复合状态名索引;
如果删除之后该区块高度对应的状态列表不为空,记录该状态所在的区块高度为过期区块高度,否则增加区块高度,直到找到一个对应的状态列表不为空的区块高度,记录该区块高度为过期区块高度。
根据一些实施例,前述节点包括:
所述存在性承诺生成单元包括:
获取所述区块的写入状态集合;
针对所述区块每个写入状态,对写入状态的原始值、状态的当前版本、所在区块高度进行编码,生成复合状态值;
对所述区块所有写入状态,将状态名和复合状态值作为键值对写入区块链的状态数据库;
对所述区块所有写入状态,依据状态名和复合状态值建立状态树,并计算状态树树根作为所有写入状态的存在性承诺。
根据一些实施例,前述节点包括:
还包括时效性证明单元,所述时效性证明单元配置为:
获取状态名;
获取状态的最新版本;
获取状态的后续版本在全局的不存在性承诺;
基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
根据本申请的另一方面,提供一种区块链节点,包括:
获取状态名单元,用于获取状态名;
获取版本单元,用于获取状态的最新版本;
获取不存在性承诺单元,用于获取状态的后续版本在全局的不存在性承诺;
时效性证明单元,基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
根据一些实施例,前述节点包括:
所述时效性证明单元包括:
获取区块头模块,根据指定的状态名,获取最后一次写入该状态的区块头以及获取最新高度的区块头;
获取状态树模块,获取最后一次写入该状态的区块对应的状态树;
存在性证明计算模块,根据指定的状态名及所述状态树,计算得到指定的状态名在所述状态树中的梅克尔路径或沃克尔路径作为状态的存在性证明;
计算复合状态名模块,依据所述状态名和状态的版本命名规则,计算状态的后续版本的复合状态名;
过滤器计算模块,对所述复合状态名进行独立过滤器计算,并与最新高度的区块头中包含的状态的不存在性承诺比对,得到比对结果;
生成状态证明模块,根据所述状态的存在性证明和所述比对结果,生成状态证明。
根据一些实施例,前述节点包括:
所述获取区块头模块配置为:
根据指定的状态名,从键值数据库读取复合状态值;
解码复合状态值,得到状态的原始值、状态的当前版本、所在区块高度;
根据所在区块高度,获取最后一次写入该状态的区块头。
根据一些实施例,前述节点包括:
所述生成状态证明模块配置为:
判断如果最后一次写入状态的区块高度不大于过期区块高度,则状态过期,调用状态更新合约,将状态的当前版本切换到下一版本作为状态的新版本;
如果状态未过期,则判断状态的后续版本的复合状态名是否被误判为已存在;
如果有误判,调用状态更新合约,将状态的当前版本切换到下一版本;
根据状态的新版本,生成新复合状态值;
根据包含状态更新的新出区块的区块头、状态名、新复合状态值,生成状态证明;
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
根据本申请的另一方面,提供一种区块链节点,包括:
获取状态证明单元,获取指定状态的状态证明;
获取区块头单元,从状态证明获取指定状态对应区块的区块头和最新区块头;
验证区块头单元,用于验证所述对应区块的区块头和最新区块头的合法性,以验证区块头包含的存在性承诺、不存在性承诺和过期区块高度未被篡改或伪造;
验证存在性承诺单元,用于验证存在性承诺;
验证不存在性承诺单元,用于验证不存在性承诺。
根据一些实施例,前述节点包括:
所述验证存在性承诺单元配置为:
从状态证明获取状态名、复合状态值和状态的存在性证明;
从当前区块头中提取状态的存在性承诺,采用梅克尔树或沃克尔树方法计算,验证状态名和复合状态值是否存在于所述存在性承诺中。
根据一些实施例,前述节点包括:
所述验证不存在性承诺单元配置为:
从最新区块头中提取过期区块高度,如果过期区块高度不小于最后一次写入指定状态的区块高度,则验证不通过;
如果上述验证通过,从最新区块头中提取状态的不存在性承诺,以验证指定状态对应区块是最后一次写入指定状态的区块;
从所述复合状态值提取状态版本,根据状态版本和版本命名规则,获取状态的下一版本;
根据所述状态名、状态的下一版本,生成下一版本的复合状态名;
对下一版本的复合状态名进行独立过滤器计算,得到计算结果;
将所述最新区块头中的不存在性承诺和所述计算结果进行比对,如果比对结果表明所述复合状态名在全局复合状态名集合中不存在,则验证通过。
根据本申请的另一方面,提供一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如前任一项所述的方法。
根据本申请的另一方面,提供一种电子设备,包括:
存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法中任一项所述的方法。
根据本申请示例实施例,通过以区块为单位组织状态树,状态树的规模小,极大降低了计算状态存证性证明的代价,缩短了状态证明数据的长度。
根据本申请示例实施例,通过布谷鸟过滤器,结合状态版本命名规则实现了状态的不存在证明,解决了现有方案的“最新状态不存在”导致的时效性欺骗问题。
根据本申请示例实施例,采用的布谷鸟过滤器在海量数据下具备优异性能,相对于现有方案的沃克尔树的证明计算,能够以极小的计算代价支撑高效出块。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1示出根据本申请示例实施例的生成区块状态承诺的方法流程图。
图2示出根据本申请示例实施例的生成区块状态证明的方法流程图。
图3示出根据本申请示例实施例的验证区块状态证明的方法流程图。
图4示出根据本申请示例实施例的区块链的节点的示意图。
图5示出根据本申请另一示例实施例的区块链的节点的示意图。
图6示出根据本申请另一示例实施例的区块链的节点的示意图。
图7示出根据本申请示例实施例的区块数据结构示意图。
图8示出根据本申请示例实施例的状态存在性承诺及证明示意图。
图9示出根据本申请示例实施例的区块高度复合状态名索引示意图。
图10示出根据本申请示例实施例的不存在性承诺生成示意图。
图11示出根据本申请示例实施例的生成状态承诺流程图。
图12示出根据本申请示例实施例的生成状态证明流程图。
图13示出根据本申请示例实施例的验证区块状态证明流程图。
图14示出根据一示例性实施例的一种电子设备的框图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本申请将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本申请概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的,因此不能用于限制本申请的保护范围。
本申请提出了基于状态最新版本在区块内的存在性证明,结合状态的后续版本在全局的不存在性证明,证明状态在全局中的存在性和时效性。在每次写入状态时,记录该状态的版本并计算状态+版本的全局布谷鸟过滤器结果(状态的连续写入采用可预知的状态+版本命名规则),在区块中包含该区块所有写入状态的存在性承诺,在区块中包含全部区块所有非过期写入状态+版本的布谷鸟过滤器结果。
当出具状态证明时,对于指定的状态名,全节点出具:a.最后一次写入该状态的区块头,其中包含了状态及写入版本的存在性承诺; b.最新高度的区块头,其中包含了所有非过期写入状态+版本的布谷鸟过滤器结果,可以证明该状态的后续版本的全局不存在性。两者结合证明了该状态存在性和时效性。
在对本申请的技术方案进行详细描述之前,首先对本申请中使用的术语约定进行如下介绍:
Hash(哈希或散列)算法,又常被称为指纹(fingerprint)或摘要(digest)算法,是非常基础也非常重要的一类算法。可以将任意长度的二进制明文数据映射为较短的(通常是固定长度的)二进制数据(Hash 值),并且不同的明文很难映射为相同的 Hash 值。
签名:本申请中的签名包含账户标识和数字签名两部分,其中数字签名是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法;账户标识用于从关联交易中提取签名者的公钥,用以验证其数字签名;
签名交易:包含交易发起方签名的结构化数据,代表了签名者的授权行为,签名交易中指定了调用的合约名、合约方法及调用参数。
全节点:区块链组网中同步和拥有全部区块数据和全局状态的组网节点,在本申请中负责对区块头中的状态存在性承诺和不存在性承诺进行共识,负责向轻节点提供状态证明。
轻节点:是不拥有区块数据和状态数据的组网节点,能够与全节点进行通信,拥有与全节点一致的状态树计算实现,以及与全节点一致的独立过滤器实现,在本申请中负责验证全节点提供的状态证明。
世界状态(World State):区块链账本的外部状态,简称状态,所有状态构成区块链的全局状态。合约容器上下文接口中提供了读写状态的接口,支持向键-值数据库读写状态键值对;
状态证明:包括存在性和时效性两方面的证明,存在性证明用于验证指定的状态名+状态值存在于区块链的全局状态中;由于相同状态名可以被多次写入不同的值,时效性证明用于验证指定的状态名的状态值是最后写入的。
状态承诺:包含在区块头中的二进制数据,分为状态的存在性承诺和状态的不存在性承诺。状态的存在性承诺用于验证指定的状态名和状态值在区块头所在区块内的存在性;状态的不存在性承诺用于验证指定状态名的指定版本在区块头所在区块之前的全局不存在性。
梅克尔树(Merkle tree):又被称做哈希树(hash tree),在密码学及计算机科学中是一种树形数据结构,每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签。梅克尔树能够高效、安全地验证大型数据结构的内容。例如,二叉树的梅克尔树,最顶层的节点被称作梅克尔树根(Merkle treeroot)。
梅克尔证明(Merkle proofs):一个梅克尔证明包含了一个数据块,数据块所在梅克尔树的根哈希,以及包含了所有沿数据块到根路径哈希的“分支”路径。验证方沿着出具的分支路径逐步计算哈希,直到算出梅克尔树的根,与可信的梅克尔树的根比较,如果一致,可以证明数据块的内容可信。
沃克尔树(VerkleTree):Kuszmaul在 2018 年的论文中首次提出的模型,采用向量Hash代替梅克尔树的单值Hash,与梅克尔树相比不需要提供姐妹节点,从而缩短了证明数据的尺寸。代价是生成证明的计算更加复杂。
布谷鸟过滤器:(英语:Cuckoo Filter)是在论文《Cuckoo Filter:Better ThanBloom》中提出的一种对布隆过滤器的改进,与后者相比,它支持对不重复元素的删除,并且在3%误判率以下时,计算结果占用空间比后者少40%左右。
本申请提出一种生成区块状态承诺和证明及验证区块状态证明的方法,使得无区块数据和状态数据的轻节点能够验证区块链状态的存在性和时效性。
全节点在出块共识时,在区块头中包含本区块所有写入状态的由状态名、写入版本、状态值、本区块高度组成的复合状态的存在性承诺,并在区块头中包含本区块所有写入状态的由状态名和写入版本组成的复合状态名的不存在性承诺。
全节点按照轻节点指定的状态名,出具状态证明,包括最后写入该状态的区块的区块头、写入的复合状态值、状态的存在性证明、最新高度区块的区块头。
轻节点依据最后写入该状态的区块头中包含的状态存在性承诺和对应的状态的存在性证明,可以验证所出具的复合状态值在该区块的存在性,通过复合状态值包含的状态版本信息,依据既定的状态版本的命名规则,可以计算出该状态的下一版本的复合状态名,依据最新高度区块头中包含的状态不存在性承诺,通过对下一版本的复合状态名进行布谷鸟过滤器计算,可以确定在全局非过期状态中,不存在该状态的下一版本写入,从而判断写入的复合状态值为最新版本。
以下结合附图对本申请的示例实施例进行说明。
图1示出根据本申请示例实施例的生成区块状态承诺的方法流程图。
状态承诺是包含在区块头中的数据项,包括状态的存在性承诺和状态的不存在性承诺。
生成状态承诺与区块出块同步进行,在出块共识的过程中,参与共识的全节点各自在本地运算状态承诺,并对状态承诺进行共识,区块出块公示之后,通过验证区块合法性来保证状态承诺无法被修改或伪造。生成状态承诺的步骤如下。
参见图1,在S101,每次在区块中写入状态时,记录该状态的版本和复合状态值。
根据一些实施例,顺序执行区块的签名交易序列,获得写入状态集合。
针对本区块每个写入状态,对写入状态的原始值+状态当前版本+所在区块高度进行编码,生成复合状态值。
对本区块所有写入状态,将状态名+复合状态值作为键-值对写入区块链的状态数据库。复合状态值的存储利用区块链系统自带的键-值数据库,承载状态版本和区块高度信息,工程实施代价小。
根据一些实施例,复合状态值数据格式及版本命名规则如表1所示:
表1
根据一些实施例,复合状态名数据格式如表2所示:
表2
在S103,将所述状态和所述状态的版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺。
针对本区块每个写入状态,依据上一版本和版本命名规则得到当前版本,对写入状态的状态名+当前版本进行编码,形成当前版本的复合状态名。
根据一些实施例,对写入状态进行版本管理,版本命名采用可计算的命名规则,依据当前版本名可计算出下一版本名,以此类推。版本规则是为了证明状态的时效性,通过“状态的下一版本不存在”证明“当前版本就是最新版本”。
针对本区块每个写入状态,对写入状态的状态名+下一版本名进行编码,形成下一版本复合状态名,对下一版本复合状态名进行独立过滤器计算,如布谷鸟过滤器(也可用其他类型的过滤器或者支持元素移除和非成员证明的累加器,以下用布谷鸟过滤器为例进行说明),将计算结果与上一个区块头状态不存在性承诺进行比对,判断对下一版本复合状态名是否被误判为已存在。
如果是,写入状态的当前版本切换到下一版本,并重复本步骤,直至本区块所有写入状态均不存在误判。获得本区块每个写入状态的当前版本。将每个写入状态当前版本的复合状态名输入到全局过滤器计算,计算结果叠加到上一个区块头的状态不存在性承诺,形成本区块头的状态不存在承诺。此步骤可排除本区块的前向区块导致的布谷鸟过滤器误判的复合状态名。
依据当前区块高度,对输入的复合状态名建立区块高度-复合状态名索引,通过索引可获取指定区块高度下的所有复合状态名及其写入顺序。具体的,区块高度-复合状态名索引的结构和建立可参照图9所示的区块高度复合状态名索引示意图。
其中,所述区块包含全部区块的所有非过期写入状态的不存在性承诺。全局非过期状态的布谷鸟过滤器计算代价远远低于维护全局状态树并计算状态树根的代价,使得本申请的方法可以应用于大规模状态数据。例如,通过布谷鸟过滤器生成不存在性承诺的过程可参照图10所示的实施例。
从全局过滤器删除最后写入版本复合状态名,并更新区块高度-复合状态名索引,从区块高度-复合状态名索引中删除最后写入复合状态名,避免同一状态反复写入,导致布谷鸟过滤器误判率上升。对于布谷鸟过滤器,在误判率一定的前提下,容纳的元素越多,计算结果数据越长,因此有必要将元素规模约束在稳定规模,可采用的方法有,当过滤器元素总数超出预设值时,过滤器每增加一个新元素,按照元素输入过滤器的顺序,删除最早输入的元素。
如果写入状态的版本是初始版本,或者写入的状态是过期状态(即写入状态版本不是初始版本,并且写入状态的最后写入版本所在区块高度不大于过期区块高度),将全局过滤器的元素总数加1。
如果全局过滤器的元素总数超出预设上限,按照区块高度-复合状态名索引,从全局过滤器中删除1个最早写入的复合状态名,并更新区块高度-复合状态名索引,从区块高度-复合状态名索引中删除1个最早写入的复合状态名。
最早写入的状态从上面的索引寻找,按照区块高度升序,找到第一个不为空的列表的头部元素。
状态过期是由预设的全局过滤器元素总数限制决定的,随着全局过滤器容纳的元素不断增加,当超出总数限制时,触发状态过期机制。此后每次增加一个新元素,必须移除一个上面索引管理的最早写入的元素。被移除的状态称为过期状态。
过期区块高度记录在全节点的一个全局变量,每次移除元素时更新。如果移除元素之后,列表不为空,仍保持该列表对应的区块高度为过期区块高度;如果移除元素之后列表为空,则需要沿着区块高度升序,寻找下一个列表不为空的区块高度作为过期区块高度。
维护过期区块高度的目的是:由于全局过滤器的容量有限,不能真正保存所有区块的写入状态,所以在生成证明时需要知道:当前全局过滤器保存了从哪个区块高度开始(过期区块高度下一区块)直到最新区块高度的写入状态,如果不在这个区间,全局过滤器证明不了不存在性,需要启用状态更新合约来激活状态。
过期区块高度写入到区块头,参与共识,这样验证阶段才可以拿到全局过滤器能够证明不存在性的区块区间。
写入状态时,为对应的区块高度建立列表。某个区块高度存在空列表,有两种可能原因:该区块没有任何状态写入;该区块本来是有状态写入的,但是所有写入的状态都被后续区块的新版本状态覆盖了(旧版本从索引列表删除)。
在S105,对所述区块所有写入状态的复合状态值进行计算,将计算结果作为存在性承诺。
根据一些实施例,对本区块所有写入状态,依据状态名+复合状态值计算状态的存在性承诺。可采用梅克尔证明或沃克尔证明,以区块为单位维护状态树,也就是梅克尔树或沃克尔树,代替以太坊采用的全局状态树,使得状态膨胀时,状态树仍然维持在一个相对稳定的小规模,大大降低了存在性承诺的计算代价,和存在性证明的数据长度。例如,后面参照图11所描述的方式示例性给出了计算存在性承诺的过程。
在S107,在区块中记录所述存在性承诺。
根据一些实施例,将状态的过期区块高度、不存在性承诺和存在性承诺写入区块头,与其他区块数据项共同参与区块散列值(Hash)计算,并共识出块,以防止承诺被伪造。
区块头包含在区块中,经过区块链所有共识节点的按照共识算法确认,将承诺放置在区块头,是为了防止被篡改或者伪造。
根据一些实施例,区块(Block)由区块头(BlockHeader)和区块体(BlockBody)组成,区块头中包含了区块高度、区块散列值、前一区块散列值、本区块写入状态的存在性承诺、全局非过期写入状态的不存在性承诺、过期区块高度、区块合法性证明。区块合法性证明由区块链使用的共识算法决定,可以是工作量证明、权益证明或者共识节点对区块的签名背书等。参见图7示出根据本申请示例实施例的区块数据结构示意图。
图2示出根据本申请示例实施例的生成区块状态证明的方法流程图。
生成状态证明可以在区块出块之后的任何时刻进行,生成状态证明的步骤如下。
参见图2,在S201,获取状态名。
根据一些实施例,轻节点指定状态名sn,要求全节点提供状态证明。
在S203,获取状态的最新版本。
根据一些实施例,全节点根据原始状态名,从键-值数据库读取复合状态值sn-cv,解码复合状态值,得到最后写入该状态的区块高度sn-cvh、状态版本sn-cvv和原始状态值sn-v;根据区块高度sn-cvh,获取最后一次写入该状态的区块头bhs。
在S205,获取状态的后续版本在全局的不存在性承诺。
根据一些实施例,全节点依据区块高度获得最后写入指定状态的该区块的区块头bhs。
全节点依据最新区块高度,获得最新区块头bhl。
依据状态的版本命名规则,计算后续版本的复合状态名,对其进行布谷鸟过滤器计算,并与最新区块头中包含的不存在性承诺比对,直到找到一个不会出现布谷鸟过滤器误判的版本号sn-cvv'。
在S207,基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
根据一些实施例,证明状态的存在性,包括:
全节点首先从区块链状态数据库按照状态名,取得最新的复合状态值。
通过解码复合状态值,获得最后一次写入该状态的区块高度,依据区块高度获得对应的区块头,该区块头包含了状态存在性承诺(例如,采用梅克尔证明,生成梅克尔树的树根)。
全节点按照指定状态在该区块状态树中的梅克尔路径,生成状态存在性证明。
全节点将状态名、复合状态值、区块头和状态存在性证明发给轻节点。
根据一些实施例,对所述复合状态名进行过滤器计算,并与最新高度的区块头中包含的状态的不存在性承诺比对,根据比对结果,生成状态证明。
其中,在比对过程中,需要先判断状态是否过期,再判断状态的后续版本的复合状态名是否被误判为已存在。先判断如果最后一次写入状态的区块高度不大于过期区块高度,则状态过期,调用状态更新合约,将状态的当前版本切换到下一版本作为状态的新版本。如果状态未过期,则判断状态的后续版本的复合状态名是否被误判为已存在。
如果有误判,全节点通过签名交易调用状态更新合约,将状态的当前版本切换到下一版本。根据包含状态更新交易的新出区块的区块头、状态名、新复合状态值,生成状态证明。
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
由于不存在证明仅可以证明从过期区块高度到最新区块高度,该状态的新版本不存在。对于最后一次写入在过期区块高度之前的状态(过期状态),需要调用状态更新合约重新激活。这个操作之后,就将过期状态以新版本写入到最新区块。
过滤器误判、状态不在过滤器能证明的区间(即:状态过期),这两种情况都会导致过滤器的不存在证明失效,两种情况都调用状态更新合约来解决。
如果上述步骤未发现误判或状态过期,全节点整合sn、sn-cv、bhs、bhl,生成状态证明sn-proof并发送给轻节点。
如果上述步骤发现误判,全节点通过签名交易调用状态版本更新合约,以sn+sn-cvv'+当前区块高度编码生成新版本的复合状态值sn-cv',对状态版本进行更新。
以包含该签名交易的新出区块的区块头bhl'、sn、sn-cv'作为状态证明sn_proof'发送给轻节点,由于bhl'已经是最新区块,不再需要时效性证明,以上步骤可以排除状态写入区块的后向区块导致的布谷鸟过滤器误判。
根据一些实施例,在区块链上部署状态更新合约,允许全节点通过签名交易以相同的状态名、状态值写入状态,导致状态在新出区块中以更高的版本写入。该合约用于处理状态过期,或者后向区块包含的写入状态导致的布谷鸟过滤器误判,将待证明的状态写入最新高度区块保证它的时效性,直接在最新区块中证明状态的存在性即可。例如,后面参照图12所描述的方式示例性给出了生成状态证明的过程。
图3示出根据本申请示例实施例的验证区块状态证明的方法流程图。
轻节点获得指定状态sn的证明sn-proof之后,执行以下验证状态步骤。
参见图3,在S301,获取指定状态的状态证明。
轻节点从全节点获得指定状态sn的证明sn-proof。
在S303,从状态证明获取当前区块头和最新区块头。
从状态证明sn-proof获取区块头bhs、bhl。
在S305,验证当前区块头和最新区块头的合法性,以验证区块头包含的存在性承诺和不存在性承诺未被篡改或伪造。
根据一些实施例,验证区块头bhs、bhl的合法性,依据采用共识算法的不同,决定区块合法性验证规则,例如POW验证工作量证明、POS验证权益证明等,以验证区块头包含的存在性承诺、不存在性承诺和过期区块高度未被篡改或伪造。
在S307,验证存在性承诺。
从状态证明获取状态名和复合状态值。
从区块头中提取状态的存在性承诺,采用梅克尔树或沃克尔树方法计算,验证状态名和复合状态值是否存在于该区块的写入状态集合。具体为,从当前区块头bhs中提取状态的存在性承诺,验证sn+sn-cv是否存在于该区块的写入状态集合。
在S309,验证不存在性承诺。
从最新区块头中提取过期区块高度,如果过期区块高度不小于最后一次写入指定状态的区块高度,则验证不通过。
如果上述验证通过,从最新区块头中提取状态的不存在性承诺,以验证当前区块头所在的区块是最后一次写入指定状态的区块。
从所述复合状态值提取状态版本,根据状态版本和版本命名规则,获取状态的下一版本。根据所述状态名、状态的下一版本,生成下一版本的复合状态名,对下一版本的复合状态名进行过滤器计算,得到计算结果。
将所述最新区块头中的不存在性承诺和所述计算结果进行比对,如果比对结果表明所述复合状态名在全局复合状态名集合中不存在,则验证通过。例如,后面参照图13所描述的方式示例性给出了验证区块状态证明的过程。
图4示出根据本申请示例实施例的区块链的节点的示意图。
根据一些实施例,一种区块链节点,包括:记录单元401,不存在性承诺生成单元402,存在性承诺生成单元403。
记录单元401,每次在区块中写入状态时,记录该状态的版本和复合状态值。
不存在性承诺生成单元402,将所述状态和所述状态的版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺。
根据一些实施例,不存在性承诺生成单元402包括:
状态集合获取模块,获取所述区块的写入状态集合。
当前版本获取模块,根据状态的版本命名规则和上一版本,获取状态的当前版本。
复合状态名生成模块,对写入状态的状态名和当前版本进行编码,生成复合状态名。
过滤器计算模块,将复合状态名输入全局过滤器,进行过滤器计算,得到过滤器结果。
复合状态名索引建立模块,依据当前区块高度,对输入的复合状态名建立区块高度-复合状态名索引。
存在性承诺生成单元403,对所述区块所有写入状态的复合状态值进行计算,将计算结果作为存在性承诺,在区块中记录所述存在性承诺。
根据一些实施例,所述存在性承诺生成单元包括:
获取所述区块的写入状态集合;
针对所述区块每个写入状态,对写入状态的原始值、状态的当前版本、所在区块高度进行编码,生成复合状态值;
对所述区块所有写入状态,将状态名和复合状态值作为键值对写入区块链的状态数据库;
依据状态名和复合状态值计算状态的存在性承诺。
根据一些实施例,还包括判断单元404,所述判断单元404配置为:
根据所述状态的当前版本和所述版本命名规则,获取状态的下一版本。
根据写入状态的状态名和下一版本进行编码,生成下一版本的复合状态名。
对所述下一版本的复合状态名进行独立过滤器计算,将计算结果与所述不存在性承诺进行比对,判断下一版本的复合状态名是否被误判为已存在。
如果是,写入状态的当前版本切换到下一版本。
重复以上步骤,直至获得所述区块的所有写入状态的当前版本。
将每个写入状态当前版本的复合状态名输入到全局过滤器计算,得到过滤器结果,作为不存在性承诺。
根据一些实施例,所述判断单元404还配置为:
从全局过滤器删除写入状态的最后写入版本复合状态名,更新区块高度-复合状态名索引。
如果写入状态的版本是初始版本,或者写入的状态是过期状态,将全局过滤器的元素总数加1。
如果全局过滤器的元素总数超出预设上限,按照区块高度-复合状态名索引,从全局过滤器中删除1个最早写入的复合状态名,并更新区块高度-复合状态名索引。
如果删除之后该区块高度对应的状态列表不为空,记录该状态所在的区块高度为过期区块高度,否则增加区块高度,直到找到一个对应的状态列表不为空的区块高度,记录该区块高度为过期区块高度。
根据一些实施例,还包括时效性证明单元405,所述时效性证明单元405配置为:
获取状态名。
获取状态的最新版本。
获取状态的后续版本在全局的不存在性承诺。
基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
图5示出根据本申请另一示例实施例的区块链的节点的示意图。
根据一些实施例,一种区块链节点,包括:获取状态名单元501,获取版本单元502,获取不存在性承诺单元503,时效性证明单元504。
获取状态名单元501,用于获取状态名。
获取版本单元502,用于获取状态的最新版本。
获取不存在性承诺单元503,用于获取状态的后续版本在全局的不存在性承诺。
时效性证明单元504,基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
根据一些实施例,所述时效性证明单元504包括:
获取区块头模块,根据指定的状态名,获取最后一次写入该状态的区块头以及获取最新高度的区块头。
根据一些实施例,根据指定的状态名,从键值数据库读取复合状态值,解码复合状态值,得到状态的原始值、状态的当前版本、所在区块高度,根据所在区块高度,获取最后一次写入该状态的区块头。
计算复合状态名模块,依据状态的版本命名规则,计算状态的后续版本的复合状态名。
过滤器计算模块,对所述复合状态名进行过滤器计算,并与最新高度的区块头中包含的状态的不存在性承诺比对。
生成状态证明模块,根据比对结果,生成状态证明。
根据一些实施例,判断如果最后一次写入状态的区块高度不大于过期区块高度,则状态过期,调用状态更新版本,将状态的当前版本切换到下一版本作为状态的新版本。
如果状态未过期,则判断状态的后续版本的复合状态名是否被误判为已存在。如果有误判,全节点通过签名交易调用状态更新合约,将状态的当前版本切换到下一版本。根据包含状态更新交易的新出区块的区块头、状态名、新复合状态值,生成状态证明。
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
根据状态的新版本,生成新复合状态值,根据包含状态更新交易的新出区块的区块头、状态名、新复合状态值,生成状态证明。
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
图6示出根据本申请另一示例实施例的区块链的节点的示意图。
根据一些实施例,一种区块链节点,包括:获取状态证明单元601,获取区块头单元602,验证区块头单元603,验证存在性承诺单元604,验证不存在性承诺单元605。
获取状态证明单元601,获取指定状态的状态证明。
获取区块头单元602,从状态证明获取当前区块头和最新区块头。
验证区块头单元603,用于验证当前区块头和最新区块头的合法性,以验证区块头包含的存在性承诺、不存在性承诺和过期区块高度未被篡改或伪造。
验证存在性承诺单元604,用于验证存在性承诺。
验证不存在性承诺单元605,用于验证不存在性承诺。
根据一些实施例,所述验证存在性承诺包单元604配置为:
从状态证明获取状态名、复合状态值和状态的存在性证明。
从当前区块头中提取状态的存在性承诺,采用梅克尔树或沃克尔树方法计算,验证状态名和复合状态值是否存在于该区块的写入状态集合。
根据一些实施例,所述验证不存在性承诺单元605配置为:
从最新区块头中提取过期区块高度,如果过期区块高度不小于最后一次写入指定状态的区块高度,则验证不通过。
如果上述验证通过,从最新区块头中提取状态的不存在性承诺,以验证当前区块头所在的区块是最后一次写入指定状态的区块。从所述复合状态值提取状态版本,根据状态版本和版本命名规则,获取状态的下一版本。
根据所述状态名、状态的下一版本,生成下一版本的复合状态名。对下一版本的复合状态名进行独立过滤器计算,得到计算结果。
将所述最新区块头中的不存在性承诺和所述计算结果进行比对,如果比对结果表明所述复合状态名在全局复合状态名集合中不存在,则验证通过。
图8示出根据本申请示例实施例的状态存在性承诺及证明示意图。
根据一些实施例,状态的存在性承诺可以采用梅克尔树或沃克尔树,以梅克尔树为例生成区块写入状态的存在性承诺如图8所示,通过以上步骤获得某一区块高度(例如100)的写入状态集合为Sa~Sh,将状态名+状态复合值求散列值,然后逐层两两组合求散列值,获得梅克尔树根Habcdefgh,该梅克尔树根即本区块写入状态的存在性承诺,保存在区块头,作为“本区块写入状态的存在性承诺”。
图9示出根据本申请示例实施例的不存在性承诺生成示意图。
根据一些实施例,状态的不存在性承诺,即全局状态的复合状态名集合gn(状态名+版本号)的布谷鸟过滤器计算结果bloom_gn。该结果为一个二进制位序列,每个复合状态名进行布谷鸟过滤器计算,根据计算结果将其中的某些位置1。
对于一个输入的复合状态名sn,要判断其是否存在于全局状态的复合状态名集合,只需要对它进行相同的布谷鸟过滤器计算,获得结果bloom_sn,然后与状态的不存在性承诺进行比对,如果bloom_sn所有置1的位,bloom_gn对应的位均为1,表明sn有极大的概率存在于gn中,如果bloom_sn所有置1的位,bloom_gn对应的位至少有1位不为1,则表明sn一定不存在于gn中。
图10示出根据本申请示例实施例的区块高度复合状态名索引示意图在向全局过滤器输入复合状态名时,依据写入状态所在区块的区块高度,建立由区块高度指向复合状态名的索引,该索引的数据结构为以区块高度作为下标的数组,数组元素为支持尾部加入、头部移除和中间移除的列表类型,列表元素为输入全局过滤器的复合状态名。依据索引可以支持以下操作:
增加元素:向全局过滤器输入复合状态名时,依据状态所在区块的区块高度,找到该区块高度对应的列表,向列表尾部增加复合状态名;
删除指定元素:从全局过滤器删除复合状态名时,依据状态所在区块高度,找到该区块高度对应的列表,从列表移除复合状态名;
删除头部元素:依据状态所在区块的区块高度,找到该区块高度对应的列表,从列表移除头部元素。
图11示出根据本申请示例实施例的生成状态承诺流程图。
根据一些实施例,顺序执行区块的签名交易序列,获得写入状态集合。
针对本区块每个写入状态,依据上一版本号和版本命名规则的当前版本,对写入状态的状态名+当前版本名进行编码,形成当前版本复合状态名。
针对本区块每个写入状态,对写入状态的状态名+下一版本名进行编码,形成下一版本复合状态名,对下一版本复合状态名进行布谷鸟过滤器计算,将计算结果与状态不存在性承诺进行比对,判断对下一版本复合状态名是否被误判为已存在。
如果是,写入状态的当前版本切换到下一版本,并重复本步骤,直至本区块所有写入状态均不存在误判。获得本区块每个写入状态的当前版本。将本区块每个写入状态最后写入版本的复合状态名从全局过滤器移除,并将每个写入状态的当前版本复合状态名输入全局过滤器,计算结果叠加到上一区块的不存在性承诺,生成本区块的不存在性承诺。
针对本区块每个写入状态,对写入状态的原始值+状态当前版本+所在区块高度进行编码,生成复合状态值。
对本区块所有写入状态,将状态名+复合状态值作为键-值对写入区块链的状态数据库,依据状态名+复合状态值计算状态的存在性承诺。
将状态的不存在承诺和存在性承诺写入区块头,与其他区块数据项共同参与区块散列值(Hash)计算,并共识出块。
图12示出根据本申请示例实施例的生成状态证明流程图。
根据一些实施例,从复合状态名sn-cv解码并提取状态版本sn-cvv,依据状态名sn和状态版本以及版本命名规则,计算状态下一个版本的复合命名sn-next。
提取最新区块头bhl中的不存在性承诺,对sn-next进行布谷鸟过滤器计算,验证sn-next是否存在于全局过滤器的非过期写入状态集合中。如果不存在,则表明bhs所在的区块,是bhl之前,过期区块高度之后所有区块的最后一次对状态sn的写入,该状态的写入值就是最新的状态值。
状态的不存在性承诺,即全局状态的复合状态名集合gn(状态名+版本号)的布谷鸟过滤器计算结果bloom_gn。该结果为一个二进制位序列,每个复合状态名进行布谷鸟过滤器计算,根据计算结果将其中的某些位置1。
对于一个输入的复合状态名sn,要判断其是否存在于全局状态的复合状态名集合,只需要对它进行相同的布谷鸟过滤器计算,这里采用单独过滤器计算,单独过滤器和全局过滤器是同样的程序,同样的算法,都是将输入元素进行多次哈希hash计算,根据结果置相应的位为1。区别在于全局过滤器是指:它的结果是全局所有非过期复合状态名输入计算结果的叠加。而单独过滤器是对一个复合状态名输入的计算结果。
获得单独过滤器的结果bloom_sn,然后与状态的不存在性承诺也就是全局过滤器结果bloom_gn进行比对,如果bloom_sn所有置1的位,bloom_gn对应的位均为1,表明复合状态名sn有极大的概率存在于全局状态的复合状态名集合gn中,如果bloom_sn所有置1的位,bloom_gn对应的位至少有1位不为1,则表明sn一定不存在于gn中。
图13示出根据本申请示例实施例的验证区块状态证明流程图。
根据一些实施例,轻节点获得指定状态sn的证明sn-proof之后,执行以下验证状态步骤:
轻节点首先验证区块头的合法性,保证状态的存在性承诺和不存在性承诺未被篡改。
轻节点将状态名+复合状态值求散列值,获得复合状态值比对是否一致。
轻节点按照状态存在性证明,计算梅克尔树根,比对是否与区块头中的状态存在性承诺一致。
从写入状态的区块头bhs中提取状态的存在性承诺,验证sn+sn-cv是否存在于该区块的写入状态集合。从sn-cv解码并提取状态版本sn-cvv,依据状态名sn和状态版本和版本命名规则,计算状态下一个版本的复合状态名sn-cv-next。
提取最新区块头bhl中的不存在性承诺,对sn-cv-next进行布谷鸟过滤器计算,验证sn-cv-next是否存在于全局过滤器的写入状态集合中。如果不存在,则表明bhs所在的区块,是bhl之前,过期区块高度之后所有区块的最后一次对状态sn的写入,该状态的写入值就是最新的状态值。
应清楚地理解,本申请描述了如何形成和使用特定示例,但本申请不限于这些示例的任何细节。相反,基于本申请公开的内容的教导,这些原理能够应用于许多其它实施例。
本领域技术人员可以理解实现上述实施例的全部或部分步骤被实现为由CPU 执行的计算机程序。在该计算机程序被CPU 执行时,执行本申请提供的上述方法所限定的上述功能的程序可以存储于一种计算机可读存储介质中,该存储介质可以是只读存储器,磁盘或光盘等。
此外,需要注意的是,上述附图仅是根据本申请示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
通过对示例实施例的描述,本领域技术人员易于理解,根据本申请实施例的生成区块状态承诺和证明及验证区块状态证明的方法方法至少具有以下优点中的一个或多个。
根据示例实施例,通过根据本申请示例实施例,通过以区块为单位组织状态树,状态树的规模小,极大降低了计算状态存证性证明的代价,缩短了状态证明数据的长度。
根据示例实施例,通过布谷鸟过滤器,结合状态版本命名规则实现了状态的不存在证明,解决了现有方案的“最新状态不存在”导致的时效性欺骗问题。
根据示例实施例,采用的布谷鸟过滤器在海量数据下具备优异性能,相对于现有方案的沃克尔树的证明计算,能够在极小的计算代价支撑高效出块。
图14示出根据一示例性实施例的一种电子设备的框图。
下面参照图14来描述根据本申请的这种实施方式的电子设备200。图14显示的电子设备200仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图14所示,电子设备200以通用计算设备的形式表现。电子设备200的组件可以包括但不限于:至少一个处理单元210、至少一个存储单元220、连接不同系统组件(包括存储单元220和处理单元210)的总线230、显示单元240等。
其中,存储单元存储有程序代码,程序代码可以被处理单元210执行,使得处理单元210执行本说明书描述的根据本申请各种示例性实施方式的方法。
存储单元220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)2201和/或高速缓存存储单元2202,还可以进一步包括只读存储单元(ROM)2203。
存储单元220还可以包括具有一组(至少一个)程序模块2205的程序/实用工具2204,这样的程序模块2205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备200也可以与一个或多个外部设备300(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备200交互的设备通信,和/或与使得该电子设备200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口250进行。并且,电子设备200还可以通过网络适配器260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器260可以通过总线230与电子设备200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、或者网络设备等)执行根据本申请实施方式的上述方法。
软件产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本领域技术人员可以理解上述各模块可以按照实施例的描述分布于装置中,也可以进行相应变化唯一不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上具体地示出和描述了本申请的示例性实施例。应可理解的是,本申请不限于这里描述的详细结构、设置方式或实现方法;相反,本申请意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (32)
1.一种生成区块状态承诺的方法,其特征在于,包括:
每次在区块中写入状态时,记录写入状态的版本;
将所述写入状态的状态名和所述版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺;
对所述区块所有写入状态的状态名和复合状态值进行计算,将计算结果作为存在性承诺;
在区块中记录所述存在性承诺;
其中,所述区块包含全部区块的所有非过期写入状态的不存在性承诺。
2.根据权利要求1所述的方法,其特征在于,所述在所述区块中记录所述过滤器结果作为不存在性承诺,包括:
获取所述区块的写入状态集合;
根据写入状态的版本命名规则和上一版本,获取写入状态的当前版本;
对写入状态的状态名和当前版本进行编码,生成复合状态名;
将每个写入状态的所述复合状态名输入全局过滤器,进行过滤器计算,得到过滤器结果,作为不存在性承诺;
依据当前区块高度,对输入的复合状态名建立区块高度-复合状态名索引。
3.根据权利要求2所述的方法,其特征在于,还包括:
操作1根据所述状态的当前版本和所述版本命名规则,获取状态的下一版本;
操作2根据写入状态的状态名和下一版本进行编码,生成下一版本的复合状态名;
操作3对所述下一版本的复合状态名进行独立过滤器计算,将计算结果与所述不存在性承诺进行比对,判断下一版本的复合状态名是否已存在;
操作4如果是,写入状态的当前版本切换到下一版本;
重复操作1-4,直至获得所述区块的所有写入状态的的当前版本;
将每个写入状态当前版本的复合状态名输入到全局过滤器计算,得到过滤器结果,作为不存在性承诺。
4.根据权利要求3所述的方法,其特征在于,还包括:
从全局过滤器删除写入状态的最后写入版本的复合状态名,更新区块高度-复合状态名索引;
如果写入状态的版本是初始版本,或者写入的状态是过期状态,将全局过滤器的元素总数加1;
如果全局过滤器的元素总数超出预设上限,按照区块高度-复合状态名索引,从全局过滤器中删除1个最早写入的复合状态名,并更新区块高度-复合状态名索引;
如果删除之后该区块高度对应的状态列表不为空,记录该状态所在的区块高度为过期区块高度,否则增加区块高度,直到找到一个对应的状态列表不为空的区块高度,记录该区块高度为过期区块高度。
5.根据权利要求4所述的方法,其特征在于,所述独立过滤器和所述全局过滤器包括:支持元素移除的布谷鸟过滤器。
6.根据权利要求1所述的方法,其特征在于,所述在区块中记录所述存在性承诺,包括:
获取所述区块的写入状态集合;
针对所述区块每个写入状态,对写入状态的原始值、状态的当前版本、所在区块高度进行编码,生成复合状态值;
对所述区块所有写入状态,将状态名和复合状态值作为键值对写入区块链的状态数据库;
对所述区块所有写入状态,依据状态名和复合状态值建立状态树,并计算状态树树根作为所有写入状态的存在性承诺。
7.根据权利要求6所述的方法,其特征在于,所述建立状态树包括:
通过梅克尔树或沃克尔树计算得到状态树。
8.根据权利要求1所述的方法,其特征在于,所述存在性承诺采用梅克尔树根或沃克尔树根表示。
9.一种生成区块状态证明的方法,其特征在于,包括:
获取状态名;
获取状态的最新版本;
获取状态的后续版本在全局的不存在性承诺;
基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
10.根据权利要求9所述的方法,其特征在于,具体包括:
根据指定的状态名,获取最后一次写入该状态的区块头;
获取最新高度的区块头;
获取最后一次写入该状态的区块对应的状态树;
获取最后一次写入该状态的区块头中的存在性承诺;
根据指定的状态名及所述状态树,计算得到指定的状态名在所述状态树中的梅克尔路径或沃克尔路径作为状态的存在性证明;
依据所述状态名和状态的版本命名规则,计算状态的后续版本的复合状态名;
对所述复合状态名进行独立过滤器计算,并与最新高度的区块头中包含的状态的不存在性承诺比对,得到比对结果;
根据所述状态的存在性证明和所述比对结果,生成状态证明。
11.根据权利要求10所述的方法,其特征在于,所述获取最后一次写入该状态的区块头包括:
根据指定的状态名,从键值数据库读取复合状态值;
解码复合状态值,得到状态的原始值、状态的当前版本、所在区块高度;
根据所在区块高度,获取最后一次写入该状态的区块头。
12.根据权利要求10所述的方法,其特征在于,所述根据所述状态的存在性证明和所述比对结果,生成状态证明包括:
判断如果最后一次写入状态的区块高度不大于过期区块高度,则状态过期,调用状态更新合约,将状态的当前版本切换到下一版本作为状态的新版本;
如果状态未过期,则判断状态的后续版本的复合状态名是否被误判为已存在;
如果有误判,调用状态更新合约,将状态的当前版本切换到下一版本;
根据包含状态更新的新出区块的区块头、状态名、新复合状态值,生成状态证明;
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
13.根据权利要求12所述的方法,其特征在于,所述独立过滤器包括:布谷鸟过滤器。
14.一种验证区块状态证明的方法,其特征在于,包括:
获取指定状态的状态证明;
从状态证明获取指定状态对应区块的区块头和最新区块头;
验证所述对应区块的区块头和最新区块头的合法性,以验证区块头包含的存在性承诺、不存在性承诺和过期区块高度未被篡改或伪造;
验证存在性承诺;
验证不存在性承诺。
15.根据权利要求14所述的方法,其特征在于,所述验证存在性承诺包括:
从状态证明获取状态名、复合状态值和状态的存在性证明;
从当前区块头中提取状态的存在性承诺,采用梅克尔树或沃克尔树方法计算,验证状态名和复合状态值是否存在于所述存在性承诺中。
16.根据权利要求15所述的方法,其特征在于,所述验证不存在性承诺包括:
从最新区块头中提取过期区块高度,如果过期区块高度不小于最后一次写入指定状态的区块高度,则验证不通过;
如果上述验证通过,从最新区块头中提取状态的不存在性承诺,以验证指定状态对应区块是最后一次写入指定状态的区块;
从所述复合状态值提取状态版本,根据状态版本和版本命名规则,获取状态的下一版本;
根据所述状态名、状态的下一版本,生成下一版本的复合状态名;
对下一版本的复合状态名进行独立过滤器计算,得到计算结果;
将所述最新区块头中的不存在性承诺和所述计算结果进行比对,如果比对结果表明所述复合状态名在全局复合状态名集合中不存在,则验证通过。
17.根据权利要求16所述的方法,其特征在于,所述独立过滤器包括:布谷鸟过滤器。
18.一种区块链的节点,其特征在于,包括:
记录单元,每次在区块中写入状态时,记录该状态的版本;
不存在性承诺生成单元,将所述写入状态的状态名和所述版本输入全局过滤器,得到过滤器结果,并在所述区块中记录所述过滤器结果作为不存在性承诺;
存在性承诺生成单元,对所述区块所有写入状态的状态名和复合状态值进行计算,将计算结果作为存在性承诺,在区块中记录所述存在性承诺。
19.根据权利要求18所述的节点,其特征在于,所述不存在性承诺生成单元包括:
状态集合获取模块,获取所述区块的写入状态集合;
当前版本获取模块,根据写入状态的版本命名规则和上一版本,获取写入状态的当前版本;
复合状态名生成模块,对写入状态的状态名和当前版本进行编码,生成复合状态名;
过滤器计算模块,将复合状态名输入全局过滤器,进行过滤器计算,得到过滤器结果;
复合状态名索引建立模块,依据当前区块高度,对输入的复合状态名建立区块高度-复合状态名索引。
20.根据权利要求19所述的节点,其特征在于,还包括判断单元,所述判断单元配置为:
操作1根据所述状态的当前版本和所述版本命名规则,获取状态的下一版本;
操作2根据写入状态的状态名和下一版本进行编码,生成下一版本的复合状态名;
操作3对所述下一版本的复合状态名进行独立过滤器计算,将计算结果与所述不存在性承诺进行比对,判断下一版本的复合状态名是否已存在;
操作4如果是,写入状态的当前版本切换到下一版本;
重复操作1-4,直至获得所述区块的所有写入状态的当前版本;
将每个写入状态当前版本的复合状态名输入到全局过滤器计算,得到过滤器结果,作为不存在性承诺。
21.根据权利要求20所述的节点,其特征在于,所述判断单元还配置为:
从全局过滤器删除写入状态的最后写入版本的复合状态名,更新区块高度-复合状态名索引;
如果写入状态的版本是初始版本,或者写入的状态是过期状态,将全局过滤器的元素总数加1;
如果全局过滤器的元素总数超出预设上限,按照区块高度-复合状态名索引,从全局过滤器中删除1个最早写入的复合状态名,并更新区块高度-复合状态名索引;
如果删除之后该区块高度对应的状态列表不为空,记录该状态所在的区块高度为过期区块高度,否则增加区块高度,直到找到一个对应的状态列表不为空的区块高度,记录该区块高度为过期区块高度。
22.根据权利要求18所述的节点,其特征在于,所述存在性承诺生成单元包括:
获取所述区块的写入状态集合;
针对所述区块每个写入状态,对写入状态的原始值、状态的当前版本、所在区块高度进行编码,生成复合状态值;
对所述区块所有写入状态,将状态名和复合状态值作为键值对写入区块链的状态数据库;
对所述区块所有写入状态,依据状态名和复合状态值建立状态树,并计算状态树树根作为所有写入状态的存在性承诺。
23.根据权利要求18所述的节点,其特征在于,还包括时效性证明单元,所述时效性证明单元配置为:
获取状态名;
获取状态的最新版本;
获取状态的后续版本在全局的不存在性承诺;
基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
24.一种区块链节点,其特征在于,包括:
获取状态名单元,用于获取状态名;
获取版本单元,用于获取状态的最新版本;
获取不存在性承诺单元,用于获取状态的后续版本在全局的不存在性承诺;
时效性证明单元,基于状态的最新版本,以及状态的后续版本在全局的不存在性承诺,证明状态在全局中的时效性。
25.根据权利要求24所述的节点,其特征在于,所述时效性证明单元包括:
获取区块头模块,根据指定的状态名,获取最后一次写入该状态的区块头以及获取最新高度的区块头;
获取状态树模块,获取最后一次写入该状态的区块对应的状态树;
存在性证明计算模块,根据指定的状态名及所述状态树,计算得到指定的状态名在所述状态树中的梅克尔路径或沃克尔路径作为状态的存在性证明;
计算复合状态名模块,依据所述状态名和状态的版本命名规则,计算状态的后续版本的复合状态名;
过滤器计算模块,对所述复合状态名进行独立过滤器计算,并与最新高度的区块头中包含的状态的不存在性承诺比对,得到比对结果;
生成状态证明模块,根据所述状态的存在性证明和所述比对结果,生成状态证明。
26.根据权利要求25所述的节点,其特征在于,所述获取区块头模块配置为:
根据指定的状态名,从键值数据库读取复合状态值;
解码复合状态值,得到状态的原始值、状态的当前版本、所在区块高度;
根据所在区块高度,获取最后一次写入该状态的区块头。
27.根据权利要求25所述的节点,其特征在于,所述生成状态证明模块配置为:
判断如果最后一次写入状态的区块高度不大于过期区块高度,则状态过期,调用状态更新合约,将状态的当前版本切换到下一版本作为状态的新版本;
如果状态未过期,则判断状态的后续版本的复合状态名是否被误判为已存在;
如果有误判,全节点通过签名交易调用状态更新合约,将状态的当前版本切换到下一版本;
根据状态的新版本,生成新复合状态值;
根据包含状态更新交易的新出区块的区块头、状态名、新复合状态值,生成状态证明;
如果未发现误判或状态过期,根据状态名、复合状态值、最后一次写入该状态的区块头、最新高度的区块头,生成状态证明。
28.一种区块链节点,其特征在于,包括:
获取状态证明单元,获取指定状态的状态证明;
获取区块头单元,从状态证明获取指定状态对应区块的区块头和最新区块头;
验证区块头单元,用于验证所述对应区块的区块头和最新区块头的合法性,以验证区块头包含的存在性承诺、不存在性承诺和过期区块高度未被篡改或伪造;
验证存在性承诺单元,用于验证存在性承诺;
验证不存在性承诺单元,用于验证不存在性承诺。
29.根据权利要求28所述的节点,其特征在于,所述验证存在性承诺单元配置为:
从状态证明获取状态名、复合状态值和状态的存在性证明;
从当前区块头中提取状态的存在性承诺,采用梅克尔树或沃克尔树方法计算,验证状态名和复合状态值是否存在于所述存在性承诺中。
30.根据权利要求29所述的节点,其特征在于,所述验证不存在性承诺单元配置为:
从最新区块头中提取过期区块高度,如果过期区块高度不小于最后一次写入指定状态的区块高度,则验证不通过;
如果上述验证通过,从最新区块头中提取状态的不存在性承诺,以验证指定状态对应区块是最后一次写入指定状态的区块;
从所述复合状态值提取状态版本,根据状态版本和版本命名规则,获取状态的下一版本;
根据所述状态名、状态的下一版本,生成下一版本的复合状态名;
对下一版本的复合状态名进行独立过滤器计算,得到计算结果;
将所述最新区块头中的不存在性承诺和所述计算结果进行比对,如果比对结果表明所述复合状态名在全局复合状态名集合中不存在,则验证通过。
31.一种电子设备,其特征在于,包括:
存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1-17中任一项所述的方法。
32.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现如权利要求1-17所述方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210322918.2A CN114691686B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺的方法 |
CN202111638682.5A CN114003972B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺和证明及验证区块状态证明的方法 |
CN202210322924.8A CN114691687B (zh) | 2021-12-30 | 2021-12-30 | 验证区块状态证明的方法 |
CN202210320521.XA CN114880320B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态证明的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111638682.5A CN114003972B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺和证明及验证区块状态证明的方法 |
Related Child Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210320521.XA Division CN114880320B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态证明的方法 |
CN202210322924.8A Division CN114691687B (zh) | 2021-12-30 | 2021-12-30 | 验证区块状态证明的方法 |
CN202210322918.2A Division CN114691686B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114003972A true CN114003972A (zh) | 2022-02-01 |
CN114003972B CN114003972B (zh) | 2022-06-10 |
Family
ID=79932494
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210322918.2A Active CN114691686B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺的方法 |
CN202111638682.5A Active CN114003972B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺和证明及验证区块状态证明的方法 |
CN202210320521.XA Active CN114880320B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态证明的方法 |
CN202210322924.8A Active CN114691687B (zh) | 2021-12-30 | 2021-12-30 | 验证区块状态证明的方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210322918.2A Active CN114691686B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态承诺的方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210320521.XA Active CN114880320B (zh) | 2021-12-30 | 2021-12-30 | 生成区块状态证明的方法 |
CN202210322924.8A Active CN114691687B (zh) | 2021-12-30 | 2021-12-30 | 验证区块状态证明的方法 |
Country Status (1)
Country | Link |
---|---|
CN (4) | CN114691686B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180150799A1 (en) * | 2016-11-30 | 2018-05-31 | International Business Machines Corporation | Blockchain checkpoints and certified checkpoints |
CN109977274A (zh) * | 2019-03-31 | 2019-07-05 | 杭州复杂美科技有限公司 | 一种数据查询和验证方法、系统、设备及存储介质 |
US20190379543A1 (en) * | 2018-06-07 | 2019-12-12 | International Business Machines Corporation | Efficient validation for blockchain |
CN113179272A (zh) * | 2021-04-28 | 2021-07-27 | 杭州丽冠科技有限公司 | 基于智能合约的区块链跨链交互方法、装置和计算机可读存储介质 |
US20210256015A1 (en) * | 2020-02-19 | 2021-08-19 | Baidu Online Network Technology (Beijing) Co., Ltd. | Blockchain-based data processing method and apparatus, device, and medium |
CN113362068A (zh) * | 2021-08-10 | 2021-09-07 | 北京连琪科技有限公司 | 一种轻节点验证区块链状态转移的方法 |
CN113420039A (zh) * | 2021-08-23 | 2021-09-21 | 中国电力科学研究院有限公司 | 一种调控云平台的模型管理方法、系统、设备及介质 |
CN113505138A (zh) * | 2021-09-06 | 2021-10-15 | 支付宝(杭州)信息技术有限公司 | 区块链系统中状态证明及执行区块的方法及装置 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11128603B2 (en) * | 2016-09-30 | 2021-09-21 | Nec Corporation | Method and system for providing a transaction forwarding service in blockchain implementations |
WO2018161007A1 (en) * | 2017-03-03 | 2018-09-07 | Mastercard International Incorporated | Method and system for storage and transfer of verified data via blockhain |
US11429967B2 (en) * | 2018-03-13 | 2022-08-30 | Nec Corporation | Mechanism for efficient validation of finality proof in lightweight distributed ledger clients |
US11296864B2 (en) * | 2018-05-16 | 2022-04-05 | International Business Machines Corporation | Identifying faults in a blockchain ordering service |
CN108805565B (zh) * | 2018-05-17 | 2022-01-18 | 深圳前海微众银行股份有限公司 | 基于区块链的承诺存在性证明方法、设备及可读存储介质 |
US20200007343A1 (en) * | 2018-06-28 | 2020-01-02 | Blockchain Integrated Partners, Llc | Systems and methods for data validation and assurance |
US11334439B2 (en) * | 2018-08-29 | 2022-05-17 | International Business Machines Corporation | Checkpointing for increasing efficiency of a blockchain |
SG11202001989WA (en) * | 2019-07-11 | 2020-04-29 | Alibaba Group Holding Ltd | Shared blockchain data storage |
CN110378697B (zh) * | 2019-07-22 | 2023-03-31 | 南京信息工程大学 | 一种基于rsa累加器的区块链轻节点utxo交易验证方法及其装置 |
CN110503558B (zh) * | 2019-08-29 | 2023-10-03 | 深圳前海微众银行股份有限公司 | 一种基于区块链系统的处理方法及装置 |
CN114503509B (zh) * | 2019-09-25 | 2024-04-23 | 维萨国际服务协会 | 密钥-值映射承诺系统和方法 |
CN110602148B (zh) * | 2019-10-10 | 2021-07-06 | 深圳前海微众银行股份有限公司 | 一种区块的状态树的生成和链上数据验证的方法及装置 |
CN111177225B (zh) * | 2020-01-02 | 2023-05-23 | 支付宝(杭州)信息技术有限公司 | 账户状态存在性证明方法及装置和状态查询方法及装置 |
CN111275438B (zh) * | 2020-01-14 | 2023-04-28 | 北京众享比特科技有限公司 | 区块链网络的共识方法、装置、设备和存储介质 |
CN113132401B (zh) * | 2021-04-25 | 2023-06-27 | 深圳大学 | 基于区块链的数据处理方法和装置 |
-
2021
- 2021-12-30 CN CN202210322918.2A patent/CN114691686B/zh active Active
- 2021-12-30 CN CN202111638682.5A patent/CN114003972B/zh active Active
- 2021-12-30 CN CN202210320521.XA patent/CN114880320B/zh active Active
- 2021-12-30 CN CN202210322924.8A patent/CN114691687B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180150799A1 (en) * | 2016-11-30 | 2018-05-31 | International Business Machines Corporation | Blockchain checkpoints and certified checkpoints |
US20190379543A1 (en) * | 2018-06-07 | 2019-12-12 | International Business Machines Corporation | Efficient validation for blockchain |
CN109977274A (zh) * | 2019-03-31 | 2019-07-05 | 杭州复杂美科技有限公司 | 一种数据查询和验证方法、系统、设备及存储介质 |
US20210256015A1 (en) * | 2020-02-19 | 2021-08-19 | Baidu Online Network Technology (Beijing) Co., Ltd. | Blockchain-based data processing method and apparatus, device, and medium |
CN113179272A (zh) * | 2021-04-28 | 2021-07-27 | 杭州丽冠科技有限公司 | 基于智能合约的区块链跨链交互方法、装置和计算机可读存储介质 |
CN113362068A (zh) * | 2021-08-10 | 2021-09-07 | 北京连琪科技有限公司 | 一种轻节点验证区块链状态转移的方法 |
CN113420039A (zh) * | 2021-08-23 | 2021-09-21 | 中国电力科学研究院有限公司 | 一种调控云平台的模型管理方法、系统、设备及介质 |
CN113505138A (zh) * | 2021-09-06 | 2021-10-15 | 支付宝(杭州)信息技术有限公司 | 区块链系统中状态证明及执行区块的方法及装置 |
Non-Patent Citations (4)
Title |
---|
ZHUOTAO LIU 等: "HyperService: Interoperability and Programmability Across Heterogeneous Blockchains", 《2019 ACM SIGSAC CONFERENCE ON COMPUTER AND COMMUNICATIONS SECURITY》 * |
刘明达 等: "区块链在数据安全领域的研究进展", 《计算机学报》 * |
蔡亮: "基于双层协同的联盟区块链隐私数据保护方法", 《基于双层协同的联盟区块链隐私数据保护方法》 * |
郭朝 等: "区块链跨链技术分析", 《物联网学报》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114880320A (zh) | 2022-08-09 |
CN114003972B (zh) | 2022-06-10 |
CN114691687A (zh) | 2022-07-01 |
CN114691686B (zh) | 2023-03-24 |
CN114691687B (zh) | 2022-12-06 |
CN114691686A (zh) | 2022-07-01 |
CN114880320B (zh) | 2023-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2020504927A (ja) | イベントの削除を可能にする分散データベースのための方法および装置 | |
IL293232A (en) | A system and method for adjusting interaction with an object in a public account environment based on a "chain of blocks" (blockchain) | |
CN109410045A (zh) | 一种平行链共识方法、设备和存储介质 | |
CN112395300B (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN103959264A (zh) | 在存储云中使用去重复来管理不可变冗余文件 | |
KR20190079517A (ko) | 블록체인 기반 IoT 환경에서의 다중 검색을 지원하는 데이터 구조체를 이용한 검색 방법 및 그 방법에 따른 장치 | |
CN111461751A (zh) | 基于区块链的房产信息链上组织方法、历史状态追溯方法及装置 | |
US11818246B2 (en) | Blockchain data structures and systems and methods therefor for multipath transaction management | |
CN114127724A (zh) | 针对多副本存储的完整性审计 | |
CN112182109A (zh) | 基于区块链的分布式数据编码存储方法和电子设备 | |
US20240275601A1 (en) | Systems And Methods For State Minimization And Unlinkable Transactions | |
CN115858488A (zh) | 基于数据治理的平行迁移方法、装置及可读介质 | |
Heo et al. | Blockchain data storage optimisations: a comprehensive survey | |
CN114003972B (zh) | 生成区块状态承诺和证明及验证区块状态证明的方法 | |
CN117349880A (zh) | 一种基于区块链的分布式数据存储与记录方法 | |
CN112182108A (zh) | 基于区块链的分布式数据存储更新方法和电子设备 | |
JP2024527556A (ja) | 完全性保護のためのハッシュツリーを使用した階層データ構造中のデータの符号化 | |
CN113300837B (zh) | 一种基于区块证明的跨链验证方法、装置和电子设备 | |
KR102375144B1 (ko) | 블록체인을 이용하여 개인키를 관리하는 장치, 방법, 시스템 및 컴퓨터 판독가능 저장 매체 | |
CN109154880A (zh) | 在分散存储网络中一致的存储数据 | |
CN111949738A (zh) | 基于区块链的数据存储去重方法、终端设备和存储介质 | |
JP5683425B2 (ja) | データ撹乱・再構築システム、データ再構築装置、データ再構築方法、データ再構築プログラム | |
Miloslavskaya et al. | Blockchain redacting algorithm with storing votes inside the chain | |
CN112653767B (zh) | 数字身份管理方法、装置、电子设备和可读存储介质 | |
CN115439118B (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 |