CN113924747A - 区块链交易数据字段验证 - Google Patents
区块链交易数据字段验证 Download PDFInfo
- Publication number
- CN113924747A CN113924747A CN202080037799.5A CN202080037799A CN113924747A CN 113924747 A CN113924747 A CN 113924747A CN 202080037799 A CN202080037799 A CN 202080037799A CN 113924747 A CN113924747 A CN 113924747A
- Authority
- CN
- China
- Prior art keywords
- transaction
- identifier
- hash
- internal
- data
- 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.)
- Pending
Links
Images
Classifications
-
- 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
- H04L9/3239—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 involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
-
- 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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于生成目标交易的二级交易标识符的计算机实现方法,所述二级交易标识符使查询用户能够确定所述目标交易是否包括候选数据字段。所述方法包括标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树。对每个数据字段进行哈希处理,以生成所述交易哈希树的多个叶哈希值中的相应一个。所述交易哈希树的根哈希值包括所述二级交易标识符。
Description
技术领域
本公开涉及用于使查询用户能够验证区块链的区块内的交易是否包括候选数据字段的方法。
背景技术
区块链是指一种分布式数据结构形式,其中在点对点(P2P)网络中的多个节点中的每个节点处维护区块链副本。区块链包括一系列数据区块,其中每个区块包括一笔或多笔交易。每笔交易都回指序列中的先前交易,从而追溯到区块链开始处的创始区块。通过称为“挖掘”的过程,交易可以通过提交到网络包括在新区块中,该过程涉及多个挖掘节点中的每个挖掘节点争相执行“工作量证明”,即基于等待包括在区块中的未决交易池解决加密难题。
区块链中的交易通常用于传递数字资产,即用作价值储存手段的数据。但是也可利用区块链实现区块链上的分层附加功能。例如,区块链协议可允许在交易输出中存储附加用户数据。现代区块链在单一交易中可储存的最大数据容量在不断增加,从而能够并入更复杂的数据。例如,这可用于在区块链中存储电子文档,甚至音频或视频数据。
网络中的每个节点可以具有以下三个角色中的任何一个、两个或全部:转发、挖掘和存储。转发节点在整个网络节点中传播交易。挖掘节点将交易挖掘到区块中。存储节点各自对区块链中的已挖掘区块存储自己的副本。为了将交易记录在区块链中,一方将该交易发送到网络中的节点中的一个节点进行传播。接收该交易的挖掘节点可以争相将该交易挖掘到新区块中。每个节点被配置为遵守相同的节点协议,该协议将包括用于确认交易有效的一个或更多个条件。无效交易将不会传播或挖掘到区块中。假定交易已经核实有效,从而在区块链上被接受,该附加用户数据将因此作为不可改变的公共记录,继续存储在P2P网络中的各个节点处。
成功解决工作量证明难题以创建最新区块的矿工通常被奖励一笔称为“区块创始交易”的交易,该交易会生成新的数字资产金额。工作量证明激励矿工不要欺骗系统,在他们的区块中包括双重花费交易,因为挖掘区块需要大量计算资源,而包括试图双重花费的区块很可能不会被其他节点接受。
区块链中的每个区块通常包含该区块中所有交易的概要。该概要使用“默克尔树”生成。默克尔树是包含加密哈希值的哈希树。在文献中有时使用术语“默克尔树”来指二进制哈希树,尽管默克尔的原始公开不限于二进制哈希树,但文献中的其他位置也使用“哈希树”和“默克尔树”作为同义词。在本文中采用前一种定义。术语“树”是指分支数据结构,该树的顶部具有“根”,底部具有“叶”。默克尔树的构建方法是递归地对节点对进行哈希处理直到仅存在一个哈希值,该哈希值称为根或默克尔根。根哈希值表示区块中整组交易的整体数字指纹,提供了有效的过程来验证该区块中是否包括交易。为了证明该区块中包括特定交易,节点仅需产生相对少量的哈希值,构成将特定交易连接到树根的认证路径或“默克尔路径”。
发明内容
在大多数区块链生态系统中,各种类型节点的功能和能力将各不相同。例如,矿工可能具有对更多计算资源的访问权限,使得他们可以存储区块链的完整副本并验证所有传入交易,而区块链的普通用户可能具有用于创建和广播支付的更轻量级的客户端。
节点可以使用默克尔树或哈希树来验证给定交易是否被挖掘到区块链中。这在本领域中称为简化支付验证(SPV),但并不限于验证支付交易。该验证方法通常需要节点(可能仅运行轻量级客户端)来获取完整的交易数据,对其进行哈希处理并执行“默克尔证明”。
目前,SPV方法适用于需要验证区块链中是否存在少量数据(如图像文件)的轻量级客户端。然而,随着区块链生态系统规模的扩大,交易大小可能显著增加,并且其中嵌入的任意数据分组的大小也可能显著增加。当在需要对整个交易进行哈希处理的情况下验证交易时,这是一个问题,特别是对于轻量级客户端,这意味着它们可能需要检索大型(例如,兆字节或千字节)交易以验证区块链上的交易中是否存在更小(例如,千字节)的数据分组。
因此,节点(例如,轻量级客户端)需要能够证明部分交易(例如,较小的数据分组)的存在,而不必获取完整交易。
根据在本文中所公开的一个方面,提供了一种用于生成目标交易的二级交易标识符的计算机实现方法,所述二级交易标识符使查询用户能够确定所述目标交易是否包括候选数据字段;所述方法由生成用户执行,并且包括:标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树,其中所述交易哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中对每个数据字段进行哈希处理以生成所述多个叶哈希值中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
本公开认识到另一种可以利用默克尔树或更一般的哈希树来允许节点(即查询用户)验证交易的各个数据字段的方式。交易被拆分(或解析)为用于生成哈希树的一组数据字段,即交易的不同部分被标识为单独的数据字段。哈希树的根用作交易的新颖二级标识符。查询用户(例如,可以仅操作轻量级客户端)可以使用所述二级标识符来执行证明,以证明交易中存在(小)数据字段,而无需获取完整交易数据并对其进行哈希处理。
二级交易标识符可以由有权访问完整交易数据的任何用户生成。例如,所述生成用户可以是已经接收交易的矿工、区块链网络的用户(例如,已经生成交易的爱丽丝),或者实际上是已经提供给区块链外部或能够查看交易的用户。
根据在本文中所公开的另一方面,提供了一种用于使查询用户能够确定区块链的区块内的目标交易是否包括候选数据字段的方法;所述方法由提交用户执行,并且包括:获取所述目标交易的二级交易标识符;将所述二级交易标识符提交给交易以包括在所述区块链的区块内,其中所述二级交易标识符已通过以下步骤生成:标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树,其中所述交易哈希树包括:i)叶层,所述叶层包括根据一组有序的数据字段排序的多个叶哈希值,其中对每个数据字段进行哈希处理以生成所述多个叶哈希值中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中的最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
所述二级交易标识符可以在链上存储以供所述查询用户访问。附加地或替代地,Tx1的二级交易标识符可以记录在不同的交易Tx2中。所述二级交易标识符可以由矿工记录在生成交易中。
任何用户都可以在链上记录(即,使得被包括在区块链上)所述二级交易标识符。例如,矿工可以将其包括在区块(包含目标交易的相同区块或不同区块)的生成交易内。或者,一方(例如,爱丽丝)可以通过将包含所述二级交易标识符的(有效)交易传输给要挖掘到区块链的一个或多个节点,使得该标识符包括在区块链的区块内。
根据在本文中所公开的另一方面,提供了一种用于验证是否已经根据指定协议生成区块链的区块内的目标交易的候选二级交易标识符的计算机实现方法,所述方法由验证用户执行,并且包括:获取所述候选二级交易标识符;标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树,其中所述交易哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中对每个数据字段进行哈希处理以生成相应叶哈希值;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对最高内部层的所述内部哈希值的级联进行哈希处理生成的;验证所述二级交易标识符是否与所述候选二级交易标识符匹配。
这允许有权访问完整交易的任何用户(例如,诸如矿工的区块链网络的节点)验证生成用户是否已经使用正确的协议(例如,交易数据字段的正确标识和哈希树的正确生成)来生成二级交易标识符。一旦验证了记录用户已经使用了正确的协议,则验证节点可以例如通过通知诸如查询用户的其他区块链用户来证明该事实。
根据在本文中所公开的另一方面,提供了一种用于确定区块链的区块内的目标交易是否包括候选数据字段的计算机实现方法,所述方法由查询用户执行,并且包括:获取候选叶哈希值,其中所述候选叶哈希值为所述候选数据字段的哈希值;获取所述目标交易的候选二级交易标识符,其中所述二级交易标识符是通过标识所述目标交易的一组数据字段生成的,每个数据字段包括所述交易的相应数据,并生成交易哈希树,其中所述交易哈希树的根层包括所述二级交易标识符;获取所述候选数据字段的认证路径,其中所述认证路径包括一组有序的哈希值,并且其中所述一组有序的哈希值包括至少一个叶哈希值和一组或多组内部哈希值,每组内部哈希值属于所述交易哈希树的相应内部层;利用所述获取的候选叶哈希值、所述获取的候选二级交易标识符以及所述获取的候选数据字段的认证路径进行哈希树证明,所述执行生成二级交易标识符;其中所述确定基于所述二级交易标识符是否与所述候选二级交易标识符匹配。
如上所述,当前使用SPV方法来验证区块链上是否存在交易。在该方法中,区块中的每个交易形成哈希树的叶。相反,本公开使用单独的数据字段作为哈希树的叶以验证是否存在这些数据字段之一。当N个数据字段在根哈希值中进行哈希处理和概括时,查询用户可以通过执行哈希树证明(当哈希树是默克尔树时称为默克尔证明)来检查哈希树(以及因此交易)中是否包括任何一个数据字段(候选数据字段)。为此,向查询用户提供认证路径,也称为哈希树路径(并且当哈希树是默克尔树时也称为默克尔路径)。查询用户使用哈希树路径的连续哈希值递归地对候选数据字段进行哈希处理,直到生成候选二级交易标识符(根哈希值)。二级交易标识符与用于生成它的底层哈希函数一样具有唯一性。因此,由于哈希函数的特性,如果候选数据字段是同一交易的一部分,则候选二级交易标识符将仅与交易的二级交易标识符相同。如果候选二级交易标识符和获取的二级交易标识符匹配,则查询用户可以确信候选数据字段是交易的一部分。
根据在本文中所公开的另一方面,提供了一种用于生成区块链的区块的二级区块标识符的计算机实现方法,其中所述区块包括一组交易,所述二级区块标识符使查询用户能够确定所述一组交易是否包括候选数据字段;所述方法由生成用户执行,并且包括:对于所述一组交易中的每笔交易,获取相应的二级交易标识符;生成交易集哈希树,其中所述交易集哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
这里,区块内每笔交易的各个二级交易标识符用作“交易哈希树的树”的叶。也就是说,每个二级交易标识符本身就是交易哈希树的根哈希值。交易哈希树的树(也称为交易集哈希树)的根充当二级区块标识符,因为它是区块内所有交易的压缩。二级区块标识符可以由能够获取(例如,生成)所有二级交易标识符的任何用户生成。例如,生成用户可以是已经生成二级交易标识符的矿工。或者,可以从包括二级交易标识符的交易(例如,生成交易)中提取二级交易标识符。
应当注意的是,存在标识区块的其他方式,例如,区块头、区块高度、区块深度和区块号。然而,术语“区块标识符”在全文中用于指哈希树的(默克尔)根。例如,二级区块标识符是交易树的根。
根据在本文中所公开的另一方面,提供了一种用于使查询用户能够确定区块链的区块内的一组交易是否包括候选数据字段的方法;所述方法由提交用户执行,并且包括:获取包括所述一组交易的所述区块的二级区块标识符;将所述二级区块标识符提交给交易以包括在所述区块链的区块内,其中所述二级区块标识符已通过以下步骤生成:对于所述一组交易中的每笔交易,获取相应的二级交易标识符;生成交易集哈希树,其中所述交易集哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
同样,有权访问二级交易标识符的任何用户(例如,已经生成这些标识符的用户)可以生成二级区块标识符。然而,只有矿工可以在区块的生成交易内记录二级区块标识符。
根据在本文中所公开的另一方面,提供了一种用于验证是否已经根据指定协议生成区块链的区块的候选二级区块标识符的计算机实现方法,其中所述区块包括一组交易,其中所述方法由验证用户执行,并且包括:获取所述候选二级区块标识符;对于所述一组交易中的每笔交易,获取相应的二级交易标识符;生成交易集哈希树,其中所述交易集哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的;验证所述二级区块标识符是否与所述候选二级区块标识符匹配。
这允许有权访问交易中每笔交易的完整内容的任何用户(例如,诸如矿工或存储节点的区块链网络的节点)验证生成用户是否已经使用正确的协议(例如,交易集哈希树的正确生成)来生成二级区块标识符。
根据在本文中所公开的另一方面,提供了一种用于确定区块链的区块是否包括目标交易的计算机实现方法,所述目标交易包括候选数据字段,其中所述区块包括一组交易,所述一组交易包括所述目标交易,所述方法由查询用户执行,并且包括:获取:i)候选叶哈希值,其中所述候选叶哈希值是所述候选数据字段的哈希值;ii)所述目标交易的候选二级交易标识符;iii)所述候选数据字段的认证路径;使用i)、ii)和iii)执行哈希树证明以生成二级交易标识符;获取iv)候选二级区块标识符;v)所述候选二级区块标识符的认证路径;使用iv)、v)和所述生成的二级交易标识符执行哈希树证明,以生成二级区块标识符;获取:vi)所述目标交易的候选初级交易标识符;vii)包括所述一组交易的所述区块的候选初级区块标识符;viii)所述初级区块标识符的认证路径;使用vi)、vii)和viii)执行哈希树证明以生成初级区块标识符;其中,所述确定基于以下条件:a)所述生成的二级交易标识符是否与所述候选二级交易标识符匹配;b)所述生成的二级区块标识符是否与所述候选二级区块标识符匹配;c)所述生成的初级区块标识符是否与所述候选初级区块标识符匹配。
在确认候选区块标识符和生成的区块标识符(对于每个初级和二级版本)彼此匹配时,查询用户可以确信已经被挖掘到区块链中的区块包括目标交易,并且目标交易包括候选数据字段。这是因为初级区块标识符和二级区块标识符都是根据相同的输入数据(交易)构建的,这是由于工作量证明共识而受信任的。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的交易的一些示例;
图3是另一种用于实现区块链的系统的示意性框图;
图4是默克尔树的示意图;
图5示出了在使用默克尔路径的由根R表示的树中的数据块D1的默克尔存在证明;
图6是交易默克尔树的示意图;
图7是区块默克尔树TB的示意图,其根RB包括在有效区块的区块头中;
图8是区块的示意图,其中交易默克尔树TM的树的根RM包括在生成交易中;
图9a和图9b分别示出了存储在交易中的示例性学术论文数据的完整轻量级版本。
具体实施方式
图1总体地示出了一种用于实现区块链150的示例性系统100。系统100包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个节点104,该多个节点被设置成在分组交换网络101内形成点对点(P2P)覆盖网络106。每个节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个节点104包括含一个或更多个处理器的处理装置,例如一个或更多个中央处理单元(CPU)、加速器处理器、特定应用程序处理器和/或现场可编程门阵列(FPGA)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等的磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等的电子媒介和/或诸如光盘驱动器等的光学介质。
区块链150包括一系列数据区块151,其中在P2P网络160中的多个节点中的每个节点处维护相应的区块链150副本。区块链中的每个区块151均包括一笔或多笔交易152,其中该上下文中的交易是指一种数据结构。数据结构的性质将取决于用作交易模型或计划的一部分的交易协议类型。给定的区块链通常全程使用一个特定的交易协议。在一种常见的交易协议中,每笔交易152的数据结构至少包括一个输入和至少一个输出。每个输出指定一个金额,该金额表示属于输出被加密锁定的用户103的数字资产值(需要该用户的签名进行解锁,从而进行赎回或花费)。每个输入指向先前交易152的输出,从而链接这些交易。
节点104中的至少一些节点扮演转发节点104F的角色,这些节点转发并因此传播交易152。节点104中的至少一些节点扮演挖掘区块151的矿工104M的角色。节点104中的至少一些节点扮演存储节点104S(有时也称为“完整副本”节点)的角色,每个存储节点均在相应的存储器中存储相同区块链150的相应副本。每个矿工节点104M还维护等待挖掘到区块151中的交易152的池154。给定节点104可以是转发节点104、矿工104M、存储节点104S或其中两个节点或所有节点的任意组合。
在给定的当前交易152j中,输入(或每个输入)包括指针,该指针引用交易序列中先前交易152i的输出,指定该输出将在当前交易152j中被赎回或“花费”。通常,当前交易可以是池154或任何区块151中的任何交易。尽管为了确保当前交易有效,将需要存在先前交易152i并核实其有效,但是在创建当前交易152j甚至向网络106发送当前交易152j时,不必存在先前交易152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送交易152i、152j的情况(参见下面关于孤立交易的讨论)。先前交易152i同样可以称为先行交易或前任交易。
当前交易152j的输入还包括先前交易152i的输出被锁定到的用户103a的签名。反过来,当前交易152j的输出可以加密锁定到新用户103b。因此,当前交易152j可将先前交易152i的输入中定义的金额转移到当前交易152j的输出中定义的新用户103b。在某些情况下,交易152可具有多个输出,以在多个用户间分割输入金额(其中一个可以是原始用户103a,以便进行变更)。在某些情况下,交易还可以具有多个输入,以将一个或更多个先前交易的多个输出中的金额汇总在一起,并重新分配到当前交易的一个或更多个输出。
上述可称为“基于输出的”交易协议,有时也称为未花费的交易输出(UTXO)的协议(其中输出称为UTXO)。用户的总余额不是用区块链中存储的任何一个数字定义的;相反,用户需要特殊“钱包”应用程序105,以整理该用户的所有UTXO值,这些UTXO值分散在区块链151的许多不同交易152中。
作为基于账户的交易模型的一部分,另一种类型的交易协议可称为“基于账户的”协议。在基于账户的情况下,每笔交易均不通过参考过去交易序列中先前交易的UTXO来定义转移的金额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。在此类系统中,交易使用账户的运行交易记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为交易引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在交易中签名。例如,如果数据字段中包含先前交易的ID,则该数据字段可指向先前交易。
无论采用何种类型的交易协议,当用户103希望执行新交易152j时,其希望将新交易从其计算机终端102发送至P2P网络106的节点104中的一个(现在通常是服务器或数据中心,但原则上可以是其他用户终端)。此节点104根据在节点104中的每个节点处应用的节点协议检查交易是否有效。节点协议的详细信息将与相关区块链150中使用的交易协议类型相对应,一起形成整个交易模型。节点协议通常要求节点104检查新交易152j中的加密签名是否与预期签名相匹配,这取决于交易152的有序序列中的先前交易152i。在基于输出的情况下,这可包括检查新交易152j的输入中包含的用户加密签名是否与新交易花费的先前交易152i的输出中定义的条件相匹配,其中该条件通常包括至少检查新交易152j的输入中的加密签名是否解锁新交易的输入所指向的先前交易152i的输出。在一些交易协议中,条件可至少部分地由输入和/或输出中包含的自定义脚本定义。或者,这可仅由节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新交易152j有效,当前节点会将其转发到P2P网络106中的一个或多个其他节点104。这些节点104中的至少一些节点还作为转发节点104F,根据相同的节点协议应用相同的测试,从而将新交易152j转发到一个或更多个进一步的节点104,依此类推。通过这种方式,新交易在节点104的整个网络中进行传播。
在基于输出的模型中,给定输出(例如,UTXO)是否花费的定义是,根据节点协议,其是否通过另一个随后交易152j的输入有效赎回。交易有效的另一个条件是其试图花费或赎回的先前交易152i的输出尚未被另一笔有效交易花费/赎回。同样,如果无效,交易152j将不会在区块链中传播或记录。这可防止重复花费,即花费者对同一笔交易的输出花费超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的交易顺序,账户余额在任何时候均具有单一定义的状态。
除核实之外,节点104M中的至少一些节点在称为挖矿的过程中争先创建交易区块,该过程以“工作量证明”为基础。在挖矿节点104M处,将新交易添加到区块中尚未出现的有效交易的池中。然后,矿工争相通过尝试解决加密难题来组装交易池154中交易152的新的有效区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与交易池154并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个节点104M处消耗大量的处理资源。
解决难题的第一矿工节点104M在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其他节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。基于已在每个此类节点处检查获胜者的已宣布解决方案,获胜者已为其解决该难题的交易池154之后由充当存储节点104S的节点104中的至少一些节点记录在区块链150中作为新区块151。区块指针155还分配给指向区块链中先前创建的区块151n-1的新区块151n。工作量证明有助于降低重复花费的风险,因为创建新区块151需要大量工作,并且由于包含重复花费的任何区块都可能被其他节点104拒绝,因此挖矿节点104M受到激励,不允许在其区块中包含双重花费。一旦创建,则不可修改区块151,因为其根据相同的协议在P2P网络106中的存储节点104S中的每个存储节点进行识别和维护。区块指针155还向区块151施加顺序。由于交易152记录在P2P网络106中每个存储节点104S处的有序区块中,因此提供了交易的不可变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同矿工104M可能会根据任何给定时间的未挖掘交易池154的不同快照执行该操作,具体取决于他们何时开始搜索解决方案。解决相应难题的人员首先定义新区块151n中包含的交易152,并更新当前未挖掘交易池154。然后,矿工104M继续争相从新定义的未完成池154中创建区块,依此类推。此外,还存在解决可能出现的任何“分叉”的协议,其中两名矿工104M彼此在很短的时间内解决难题,从而传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。
在大部分区块链中,获胜矿工104M会自动获得特殊类型的新交易作为奖励,该新交易创建新的数字资产值(与将数字资产金额从一个用户转移至另一个用户的正常交易截然相反)。因此,获胜节点被视为已“挖掘”一定数量的数字资产。这种特殊类型的交易有时称为“生成”交易,其自动形成新区块151n的一部分。该奖励可激励矿工104M争相参与工作量证明。通常情况下,常规(非生成)交易152还将在其输出中的一个输出中指定附加交易费用,以进一步奖励创建其中包含交易的区块151n的获胜矿工104M。
由于挖掘中涉及的计算资源,通常至少矿工节点104M中的每个矿工节点采用服务器的形式,该服务器包括一个或更多个物理服务器单元,甚至整个数据中心。每个转发节点104M和/或存储节点104S还可采取服务器或数据中心的形式。但是,原则上来说,任何给定节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个节点104的存储器均存储被配置为在节点104的处理装置上运行的软件,以根据节点协议执行其相应的角色并处理交易152。应当理解的是,在本文中归因于节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。此外,在本文中使用的“区块链”一词是指一般技术类型的通用术语,不限于任何特定专有区块链、协议或服务。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。他们充当交易中的付款人和收款人,但不一定代表其他方参与挖掘或传播交易。他们不一定运行挖矿协议。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝,第二方103b称为鲍勃,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
每一方103的计算机设备102包括相应的处理装置,其包括一个或多个处理器,例如一个或多个CPU、图形处理单元(GPU)、其他加速器处理器、特定应用程序处理器和/或FPGA。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
客户端应用程序或软件105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动SSD、闪存密钥、可移动EEPROM、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如CD或DVD ROM等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应的用户方103创建、签名和发送拟在节点104的整个网络中传播的交易152,并因此包含在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产金额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种交易152的输出中定义的金额。
每个计算机设备102上的客户端应用程序105的实例可操作地耦合到P2P网络106的转发节点104F中的至少一个转发节点。这可以启用客户端105的钱包功能,以将交易152发送至网络106。客户端105还可联系一个、一些或所有存储节点104,以在区块链150中查询相应方103作为接收者的任何交易(或实际上在区块链150中检查其他方的交易,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供交易信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据交易协议制定和发送交易152。每个节点104运行软件,其被配置为根据节点协议核实交易152有效的软件,并且在转发节点104F的情况下转发交易152,以在整个网络106中传播此类交易。交易协议和节点协议相互对应,给定交易协议和给定节点协议一起实现给定的交易模型。区块链150中的所有交易152均采用相同的交易协议(尽管交易协议可允许其内存在不同的交易子类型)。网络106中的所有节点104采用相同的节点协议(尽管其可根据针对该子类型定义的规则区分处理不同的交易子类型,并且不同的节点还可扮演不同的角色,从而实现协议的不同对应方面)。
如上所述,区块链150包括一系列区块151,其中每个区块151包括通过如前所述的工作量证明过程创建的一个或更多个交易152的集合。每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。区块链150还包括有效交易池154,其等待通过工作量证明过程包含在新的区块中。每笔交易152包括指向先前交易的指针,以定义交易序列的顺序(注:交易152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一笔或多笔原始交易152指向创始区块153,而非先前交易。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新交易152j时,她将根据相关交易协议(使用其客户端应用程序105中的钱包功能)制定新交易。然后,她将交易152从客户端应用程序105发送至其连接的一个或更多个转发节点104F中的一个。例如,这可以是与爱丽丝的计算机102最近或最佳连接的转发节点104F。当任何给定节点104接收新交易152j时,其将根据节点协议及其相应的角色进行处理。这包括首先检查新接收的交易152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些交易协议中,有效条件可通过交易152中包含的脚本在每个交易的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的交易152j通过有效性测试(即:“有效”的条件下),接收交易152j的任何存储节点104S将向在该节点104S处维护的区块链150的副本中的池154中添加新有效交易152。进一步地,接收交易152j的任何转发节点104F随后将有效交易152传播至P2P网络106中的一个或更多个其他节点104。由于每个转发节点104F应用相同的协议,因此假定交易152j有效,这意味着交易很快将在整个P2P网络106中传播。
一旦进入在一个或更多个存储节点104处维护的区块链150的副本中的池154中,矿工节点104M将开始竞相解决包括新交易152的池154的最新版本方面的工作量证明难题(其他矿工104M可继续尝试基于池154的旧视角解决难题,但首先解决难题的矿工将定义下一个新区块151的结束位置和新池154的开始位置,最终将有人解决包括爱丽丝的交易152j的池154的一部分的难题)。一旦包括新交易152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每笔交易152包括指向早前交易的指针,因此交易的顺序也被不可变地记录下来。
图2示出了示例性交易协议。这是基于UTXO的协议的示例。交易152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一笔或更多笔交易152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。
在基于UTXO的模型中,每笔交易(“Tx”)152包括数据结构,其包括一个或更多个输入202和一个或更多个输出203。每个输出203可包括未花费的交易输出(UTXO),其可用作另一新交易的输入202的来源(如果UTXO尚未赎回)。UTXO指定数字资产金额(价值储存手段)。它还可包含其来源交易的交易ID以及其他信息。交易数据结构还可包括标头201,其可包括输入字段202和输出字段203的大小指示符。标头201还可包括交易的ID。在实施例中,交易ID是交易数据(不含交易ID本身)的哈希值,且存储在提交至矿工104M的原始交易152的标头201中。
比方说爱丽丝103a希望创建转移相关数字资产金额至鲍勃103b的交易152j。在图2中,爱丽丝的新交易152j标记为“Tx1”。该新交易获取在序列中先前交易152i的输出203中锁定至爱丽丝的数字资产金额,并至少将此类金额中的一部分转移至鲍勃。在图2中,先前交易152i标记为“Tx0”。Tx0和Tx1只是任意的标记,其不一定意味着Tx0指区块链151中的第一交易且Tx1指池154中的下一笔交易。Tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)交易。
当爱丽丝创建其新交易Tx1时,或至少在她将该新交易发送至网络106时,先前交易Tx0可能已经有效并包括在区块链150中。该交易此时可能已包括在区块151中的一个区块中,或者可能仍在池154中等待,在这种情况下,该交易将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络102;或者,如果节点协议允许缓冲“孤立”交易,Tx0甚至可以在Tx1之后发送。本文交易序列上下文中使用的“先前”和“后续”一词是指由交易中指定的交易指针定义的序列中的交易顺序(哪个交易指向哪个其他交易等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定节点104的顺序。然而,指向先前交易(先行交易或“父交易”)的后续交易(后代交易或“子交易”)不会有效除非父交易有效。在父交易之前到达节点104的子交易被视为孤立交易。根据节点协议和/或矿工行为,其可被丢弃或缓冲一段时间,以等待父交易。
先前交易Tx0的一个或更多个输出203中的一个包括特定的UTXO,标记为UTXO0。每个UTXO包括指定UTXO表示的数字资产金额的值以及锁定脚本,该锁定脚本定义后续交易的输入202中的解锁脚本必须满足的条件,以使后续交易有效,从而成功赎回UTXO。通常情况下,锁定脚本将金额锁定至特定方(该金额的交易的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续交易的输入中的解锁脚本包括先前交易被锁定到的一方的加密签名。
锁定脚本(亦称scriptPubKey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(Script)”(S大写)。锁定脚本指定花费交易输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在交易的输出中。解锁脚本(亦称scriptSig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在交易的输入202中。
因此在示出的示例中,Tx0的输出203中的UTXO0包括锁定脚本[Checksig PA],该锁定脚本需要爱丽丝的签名Sig PA,以赎回UTXO0(严格来说,是为了使试图赎回UTXO0的后续交易有效)。[Checksig PA]包含爱丽丝的公私密钥对中的公钥PA。Tx1的输入202包括指向Tx1的指针(例如,通过其交易ID(TxID0),其在实施例中是整个交易Tx0的哈希值)。Tx1的输入202包括在Tx0中标识UTXO0的索引,以在Tx0的任何其他可能输出中对其进行标识。Tx1的输入202进一步包括解锁脚本<Sig PA>,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
当新交易Tx1到达节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个标准)。在实施例中,这涉及并置两个脚本:
<Sig PA><PA>||[Checksig PA]
其中“||”表示并置,“<…>”表示将数据放在堆栈上,“[…]”表示由解锁脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥PA(包括在Tx0的输出的锁定脚本中),以认证Tx1的输入中的锁定脚本是否包含爱丽丝签名预期部分的数据时的签名。预期的部分数据本身(“消息”)也需要包括在Tx0中,以便执行此认证。在实施例中,签名的数据包括整个Tx0(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行认证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如节点104等其他实体可认证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行散列,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够认证签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或更多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行认证),则节点104认为Tx1有效。如果是存储节点104S,这意味着其将添加至等待工作量证明的交易154池。如果是转发节点104F,则其将交易Tx1转发到网络106中的一个或更多个其他节点104,从而将在整个网络中传播。一旦Tx1有效并包括在区块链150中,这将把Tx0中的UTXO0定义为已花费。请注意,Tx1仅在花费未花费的交易输出203时才有效。如果试图花费另一交易152已经花费的输出,则即使满足所有其他条件,Tx1也将无效。因此,节点104还需要检查先前交易Tx0中引用的UTXO是否已经花费(已经形成另一有效交易的有效输入)。这是为何区块链150对交易152施加定义的顺序很重要的原因之一。在实践中,给定节点104可维护单独的数据库,标记已花费交易152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效交易的有效输入。
请注意,在基于UTXO的交易模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分金额,而同时又花费另一部分。但UTXO的金额可以在下一个交易的多个输出之间分割。例如,Tx0的UTXO0中定义的金额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有金额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零钱,或者支付给另一方。
在实践中,爱丽丝通常还将需要包括获胜矿工的费用,因为现在仅靠区块创始交易的奖励币通常不足以激励挖掘。如果爱丽丝未包括矿工的费用,Tx0可能会被矿工节点104M拒绝,因此,尽管技术上有效,但仍然不会传播并包括在区块链150中(如果矿工104M不愿意,矿工协议不会强制他们接受交易152)。在一些协议中,挖掘费不需要其自身的单独输出203(即不需要单独的UTXO)。相反,给定交易152中输入202所指向的总金额与输出203所指定的总金额之间的任何差额都将自动提供给获胜矿工104。例如,假设指向UTXO0的指针是Tx1的唯一输入,而Tx1只有一个输出UTXO1。如果UTXO0中指定的数字资产的金额大于UTXO1中指定的金额,则该差额将自动提供给获胜矿工104M。替代地或附加地,这不一定排除可以在其自身交易152的其中一个UTXO 203中明确指定矿工费用。
另请注意,如果给定交易152的所有输出203中指定的总金额大于其所有输入202所指向的总金额,则这是大多数交易模型中的另一失效依据。因此,此类交易将不会传播或挖掘到区块151中。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何交易152中的锁定至他们的未花费UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种交易152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其他随后交易中尚未花费的各种UTXO值整理在一起。通过查询在任何存储节点104S(例如,与相应方的计算机设备102最近或最佳连接的存储节点104S)处存储的区块链150副本,可以实现这一点。
请注意,脚本代码通常用示意图表示(即非精确语言)。例如,可写入[ChecksigPA]表示[Checksig PA]=OP_DUP OP_HASH160<Pa>OP_EQUALVERIFY OP_CHECKSIG。“OP_...”是指脚本语言的特定操作码。OP_CHECKSIG(又称“Checksig”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ECDSA)验证签名的有效性。在运行时,移除脚本中任何出现的签名(‘sig’),但在由‘sig’输入验证的交易中仍保留附加要求,诸如哈希难题。再如,OP_RETURN是脚本语言操作码,用于创建交易的不可花费输出,其可以将元数据储存在交易中,从而将元数据不可变地记录在区块链150中。例如,元数据可包括需存储在区块链中的文件。
签名PA是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定交易,签名将对部分交易输入以及全部或部分交易输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其包括相应交易被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行认证。更通俗地说,脚本语言可用于定义任何一个或更多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
图3示出了用于实现区块链150的系统100。除了附加功能外,系统100与图1所示的内容基本相同。网络的一个或多个节点104可以包括软件301,用于生成将记录在区块链150的区块151中的目标交易152的二级交易标识符。优选地,矿工104M中的一个、一些或全部可以包括所述软件(称为“矿工软件”),然而,不排除一方或多方(例如,爱丽丝和/或鲍勃)的计算机设备可以包括所述软件。
图3还示出了可以包括一个或多个模块的矿工软件的框图。标识模块302被配置为获取目标交易,例如,可以从网络的转发节点104F接收目标交易,并且标识目标交易的一组数据字段。所述一组中的每个数据字段包括目标交易的数据。例如,一个或多个数据字段可以包括支付相关数据。该组数据字段一起构成完整交易。如果交易包括媒体内容,则一个或多个数据字段可以包括该媒体内容的一部分或全部。树生成模块303被配置为使用该组数据字段生成哈希树。该组数据字段被输入到算法以生成哈希树(例如,默克尔树)。哈希树包括根哈希值,其在以下讨论中用作目标交易的二级交易标识符。记录模块304被配置为将二级交易标识符(根哈希值)记录在区块152的第一交易字段(生成交易)中。然后,将该区块记录在区块链中。
二级交易标识符使查询用户能够检查目标交易内是否存在数据字段(这里称为候选数据字段),而无需获取或访问完整交易。例如,用户(例如,鲍勃)的客户端应用程序105可能不具有足够的能力来获取完整交易。例如,鲍勃可能希望最初检查目标交易是否包括媒体内容(例如,电影剪辑),而无需获取完整交易。作为另一示例,矿工可能希望检查交易的支付部分,而无需存储交易的其他部分。作为另一示例,节点(例如,矿工或存储节点)可能希望修剪交易。这里,修剪意味着用原始数据的哈希值替换交易的至少一部分。然而,节点可能仍然需要向查询用户证明交易包含现在已经被“修剪”(即用哈希值替换)的候选数据字段(例如,交易的可花费输出)。
为了检查目标交易是否包含候选数据字段,查询用户(例如,鲍勃103b)获取候选数据字段(或其哈希值)、目标交易的二级交易标识符以及认证路径(或哈希路径)。认证路径包括从哈希树获取的一组哈希值。查询用户使用候选数据字段的哈希值和认证路径的哈希值遍历哈希树以获取候选二级交易标识符。如果候选二级交易标识符与获取的二级交易标识符匹配,则交易包含候选数据字段,反之亦然。换句话说,查询用户可以检查候选数据字段是否构成由二级交易标识符表示的交易的一部分。应当注意的是,遍历哈希树不需要完整交易,只需要候选数据字段的哈希值和随后产生的哈希值的哈希伙伴。下面参考图5更详细地描述该过程。
交易
在高层次上,交易Tx是可以包括输入和输出的消息,其将数字资产的所有权从第一组地址转移到第二组地址(其可以包括或不包括第一组中的一个或多个地址)。
一个特定区块链协议使用具有字段的交易,所述字段包括以下一个或多个版本txin_count、txin、txout_count、txout和锁定时间。其他协议可以使用包括这些字段中的一些或不包括这些字段的交易。在本文中所公开的技术适用于任何区块链协议,下面讨论的字段仅作为示例使用。
version字段是一个整数(例如,4字节整数),其指示交易的创建者遵循的一组协议规则。txin_count字段是一个正整数(例如,介于1字节和9字节之间),其指定交易中的输入数量。
txin字段是交易输入的数组。每个输入包括以下子字段中的一个或多个:outpoint-指示正在花费的UTXO的对(TxID,n)的结构,包括:txid_prev-正在花费的UTXO的交易标识符TxID(例如,32字节字符串);vout-正在花费的UTXO的输出索引(例如,4字节整数)n;scriptSigLen-解锁脚本的整数长度(以字节为单位),最多10,000字节;scriptSig-解锁脚本的结构,其可以包括许多单独的元素;sequence-指示交易的当前版本的整数(例如,4字节整数)。
txout_count字段是一个正整数(介于1字节和9字节之间),其指定交易中的输出数量。txout字段是交易输出的数组。每个输出可以包括以下子字段中的一个或多个:value-指示输出的值的整数(例如,8字节整数);scriptPubKeyLen-锁定脚本的整数长度(以字节为单位),最多10,000字节;scriptPubKey-锁定脚本的结构,其可以包括许多单独的元素;locktime-指示最早时间的整数(例如,4字节整数),在此最早时间之后,交易可以包括在区块中。
应当理解的是,在该示例性协议中,可能包含相当大的数据的交易的唯一字段是脚本字段,即scriptSig和scriptPubKey。因此,在解决大型数据的存在性计算的轻量级证明问题时,这两个字段是最重要的。
下面示出了包括一个输入和一个输出的交易的示例,其中分别用符号P和H(P)引用公钥及其RIPEMD-160哈希值来表示。
查询用户可能希望检查交易的版本,以查看该交易(或区块中的每笔交易)是否使用相同的版本或协议进行。查询用户可能希望检查txin_count以执行对区块链的分析,例如用于研究目的。查询用户(例如,矿工)可能仅希望检查交易的输出以检查输出的有效性(例如,数字资产可能被花费)。
可以使用交易数据的哈希值或双哈希值来唯一地标识交易。例如,交易可以是通过其SHA-256双哈希值的标识符。交易标识符TxID可以例如作为给定交易Tx的函数编写
TxID:=H2(Tx),
其中H是哈希函数(例如,SHA-256加密哈希函数)。应当注意的是,此类加密哈希函数的抗冲突特性意味着需要完整交易消息m=Tx来生成正确的TxID。换句话说,如果可替换消息Tx′经过哈希处理,则将生成可替换标识符TxID′,条件是Tx′≠Tx。
生成交易
区块中的第一交易不同于上述用于一般交易的结构,因为它用于允许矿工回收挖掘激励。这也称为“生成”交易,因为每次挖掘新区块时都会生成新的数字资产。这称为区块奖励。生成交易还允许矿工索要由区块中的其他交易确定的总交易费用。生成交易在txin-count和txin字段中仅与一般形式不同。txin_count字段包括整数“01”,因为生成交易包括单个输入。txin字段本身在其若干子字段中不同于非发生交易,如下所述。由于在这种情况下没有花费UTXO,因此输出点的子字段是:txid_prev-指示缺少先前输出点的空值(全零,例如32字节值为零);vout-指示缺少先前输出点的值(例如,0xffffff)。scriptSigLen字段是解锁脚本的整数长度(以字节为单位),最多100字节。由于没有要“解锁”的UTXO,scriptSig字段由两个字段构成:高度字段-包含该交易的区块的区块高度(例如,4字节);generation_script-任意数据,最多96字节。最后一个字段是序列字段–一个整数(例如,4字节),指示交易的当前版本。
生成交易的generation_script字段可由用户(例如,矿工)用于在交易中包括任意数据。
区块
区块是一种数据结构,包括一组交易以及与如何将区块附加(挖掘)到区块链相关的可选附加字段。特定区块链协议的区块的字段可以概括为区块头、txn_count和txns。区块头是一种结构,包含有关数据块的挖掘方式、时间及其内容的信息。这包括以下六个子字段中的一个或多个:版本–一个整数(例如,4字节整数),指示用于区块核实的一组协议规则;prev_block–先前区块头的双哈希值(例如,32字节SHA-256);Merkle_root–从交易的默克尔树导出的双哈希值(例如,32字节SHA-256);时间戳–对矿工生成区块头的Unix时间进行编码的整数(例如,4字节整数);N位–对要挖掘的区块所需的目标难度进行编码的整数(例如,4字节整数);随机数–一个整数(例如,4字节整数),其选择用于实现所需难度的区块头哈希值。txn_count字段是一个可变大小的整数,指示区块中的交易数量。txns字段是一种结构,包括区块中包括的交易的完整列表的交易数据。该列表中的第一交易始终是生成交易,其余交易遵循上述一般交易结构。
默克尔树
默克尔树,也称为二进制哈希树,是哈希树的一种特殊形式。树中的每个节点(由圆圈示出)都有一个索引对(i,j),表示为N(i,j)。索引i,j是与树中的特定位置相关的数字标签。默克尔树的一个特征是,其每个节点的构造由以下方程式控制:
其中k=(i+j-1)/2和H为加密哈希函数。
图4中示出了根据这些方程式构建的二进制哈希树400。图4示出了i=j情况对应于叶节点401,叶节点401仅仅是数据Di的相应第i区块的哈希值。i≠j情况对应于内部节点402或根节点403,其通过递归地哈希和级联树中的子节点直到到达特定节点或根节点而生成。在本文中,哈希树的叶节点也称为叶哈希值。类似地,内部节点和根节点也称为内部哈希值或根哈希值。
默克尔树的构建需要使用加密哈希函数。通常,如果哈希函数具有以下属性,则认为该函数是加密安全的:
1)抗原像–给定h=H(m),在计算方面难以找到m;
2)抗第二原像–给定h=H(m)和m,在计算方面难以找到m′,使得H(m′)=h;
3)抗冲突–在计算方面难以找到消息m和m′对,使得H(m)=H(m′)。
交易的初级交易标识符TxID使用此类哈希函数生成,并且因此该标识符继承哈希函数摘要的属性。哈希树的根具有与TxID非常相似的属性,因为哈希树根的唯一性可以降低到底层加密哈希函数的唯一性。这是有益的,因为根可以用作数据的标识符,如果在两种情况下使用相同的哈希函数,则该标识符与通过对数据进行哈希处理生成的标识符一样具有唯一性。
在大多数应用中,哈希树的主要功能是便于证明某些数据块Di404是N数据块的列表或集合的成员。在给定哈希树根和候选数据块Di的情况下,可以将其视为该集合内区块的“存在证明”。此类证明机制称为哈希树证明(或默克尔树的默克尔证明),并且包括获取哈希值集合,称为给定数据块Di和根R的哈希值或认证路径(或默克尔路径)。数据块的认证路径是通过反复哈希和级联的方式重建根R所需的最小哈希列表。如果验证者知道所有区块D1,…,DN,则可以执行存在证明。然而,这确实需要比认证路径本身大得多的存储开销,并且需要整个数据集可供验证者使用。
1)从可信源获取默克尔根R。
2)从源获取默克尔路径Γ。在这种情况下,Γ是哈希值的集合:
Γ={N(2,2),N(3,4),N(5,8)}。
3)使用D1和Γ计算默克尔证明如下:
a.对数据块进行哈希处理(或双重哈希处理,具体取决于实现方式)以获取:N(1,1)=H(D1)。
b.与N(2,2)级联并进行哈希处理以获取:N(1,2)=H(N(1,1)∥N(2,2))。
c.与N(3,4)级联并进行哈希处理以获取:N(1,4)=H(N(1,2)∥N(3,4))。
d.与N(5,8)级联并进行哈希处理以获取根:N(1,8)=H(N(1,4)∥N(5,8)),
R′=N(1,8)。
e.将所计算的根R′与(1)中获取的根R进行比较:
这表明对给定的区块D1和根R执行默克尔证明,仅使用必要的最少哈希值就可以有效地“向上”遍历默克尔树。这是一种有效机制,可以为作为由默克尔树及其根表示的数据集的一部分的某些数据提供存在证明。例如,如果数据D1对应于区块链交易,并且根R作为区块头的一部分公开可用,那么可以快速证明该交易包含在该区块中。
交易树生成算法
如上所述,本公开提供了一种用于生成交易的二级交易标识符的方法,该方法用于确定该交易是否包括称为“候选数据字段”的特定数据。由于在大多数区块链协议中,每笔交易与通常通过对完整交易进行哈希处理(或双重哈希处理)生成的初级交易标识符相关联,因此称为二级交易标识符。
该方法包括:将交易字段逐个拆分为一组数据分组(或数据字段),这些数据分组(或数据字段)可以用作哈希树(例如,默克尔树)的叶,其中哈希树的根对应于二级交易标识符。在本文中,拆分相当于标识交易的数据字段。换句话说,交易实际上不必被“分割”。相反,可以将交易的不同部分标识(例如,分配)为该组数据字段中的不同数据字段。二级交易标识符对于给定交易将是唯一的(例如,给定交易的唯一256位数字表示(哈希值))。该哈希值可用于验证任何单独字段是否是哈希树的有效叶,而无需获取整组(即,完整交易)。
在给定交易Tx的情况下,验证其是否已挖掘到区块链中的一种方式是验证其对应的TxID(初级交易标识符)是否出现在区块中。该检查可以通过执行哈希树证明(例如,默克尔证明)来验证对应于TxID的交易是由区块头中的哈希根表示的交易集的一部分来完成。然而,该检查要求验证者首先获取完整的交易消息m=Tx,并确认TxID=H(Tx)实际上对给定Tx和假设TxID的保持,其中H是哈希函数。这对于区块链的一些用户来说可能是有问题的,在用户实现轻量级客户端和/或消息m较大时尤为如此。
在示例中,可以生成符合以下定义的二级交易标识符MTxID:MTxID:=F(Tx,TxID)。算法F用作从两个输入消息Tx和TxID生成二级交易标识符的单向函数。假设TxID可以作为交易消息Tx的函数编写
TxID:=H2(Tx),这意味着MTxID可以按照以下方式作为单个消息m=Tx的函数编写:MTxID:=F(Tx,H2(Tx))∶=F(Tx)。算法F包括哈希树生成器。该算法将完整交易作为输入Tx并返回哈希摘要MTxID,该摘要可以用作交易的二级标识符。二级标识符可以是256位哈希摘要。应当理解的是,在该方案中,二级标识符MTxID不替换初级标识符TxID。为了加强这一点,算法F的设计包括例如使用典型的双哈希函数H2(Tx)生成TxID,该函数将二级标识符绑定到初级标识符。
用于生成二级交易标识符MTxID的方法可以分为三个主要阶段,如下所述。
输入:Tx
F(Tx):
1)计算TxID:=H2)Tx)。
输出:MTxID=R
在该示例中,哈希树是二进制哈希树(即默克尔树)。然而,通常可以使用任何n进制哈希树,n是指树的分支。例如,在二进制哈希树中,对两个子节点进行哈希处理以形成父节点;在三进制哈希树中,对三个子节点进行哈希处理以形成父节点,以此类推。
阶段1:计算TxID
生成用户可以从区块链网络的一个或多个不同方(或节点)接收交易。例如,该交易可以由网络的一个节点直接传输给生成用户或者经由一个或多个不同的节点传输。生成用户可以是打算将交易记录在区块链的区块中的矿工。
该方法可以包括通过对交易进行哈希处理来生成初级交易标识符。第一阶段是对Tx执行的SHA-256双哈希计算,生成初级交易标识符TxID。可以使用其他哈希函数,并且在一些示例中仅执行单个哈希计算。通常,Tx消息本身不会显式包括TxID。因此,后续阶段需要对TxID进行此显式预计算,从而可以显式编码此初级标识符的方式构建哈希树。
将包括消息Tx的交易数据分为离散分组,该离散分组可以用作哈希树T的叶。可以将交易拆分为其现有字段。这些字段中的大多数包含简单的数字数据,其大小通常非常小–通常介于1字节和32字节之间。因此,重点关注增加的总体交易大小将与sigScript和scriptPubKey字段相关,其分别与输入(解锁)和输出(锁定)相关。可以使用三个类别来区分交易字段:输入字段、输出字段和其他字段。在一些示例中,将交易拆分为这三个类别,例如,一个数据字段包括所有输入字段,一个数据字段包括所有输出字段,一个数据字段包括其他字段。可以将输入字段和输出字段分为非脚本字段和脚本字段,非脚本字段包括数字数据,脚本字段包括脚本数据。
下表显示了可以将交易拆分为一组数据字段的方式。
在一些示例中,可以将交易拆分为:至少一个包括该交易的输入数据的数据字段(例如,txid_prev);至少一个包括该交易的输出数据的数据字段(例如,value);至少一个包括该交易的非输入数据和非输出数据(即其他数据,例如version)的数据字段。每个数据字段可以仅由一种类型的数据组成,例如仅由输入数据组成。
在其他示例中,可以将交易拆分为更多的数据字段。例如,该组数据字段可以包括:至少一个包括该交易的脚本输入数据的数据字段(例如,scriptSig);至少一个包括该交易的非脚本输入数据的数据字段(例如,vout);至少一个包括该交易的脚本输出数据的数据字段(例如,scriptPubkey);至少一个包括该交易的非脚本输出数据的数据字段(例如,scriptPubKeyLen)。
可以将交易Tx拆分为以下一组有序数据分组:
D1=<version>、
D2=<txin_count>、
D3=<txout_count>、
D4=<locktime>、
D5=<txid_prev>∥<vout>∥<scriptSigLen>∥<sequence>、
D6=<scriptSig>、
D7=<value>∥<scriptPubKeyLen>、
D8=<scriptPubKey>。
如果每个分组Di是二进制哈希树的叶,选择以这种方式拆分数据具有几个好处。首先,级联所有非脚本输入以形成分组D5,并且类似地,级联所有非脚本输出以形成D7。这意味着,将交易的每个输入和输出准确地拆分两个部分–非脚本组件和脚本组件。在二进制哈希树中,这是特别有利的,因为这意味着每个输入和输出可以配对为同级叶。因此,输入和输出可以与其他字段完全分离,并且每个输入或输出的脚本组件和非脚本组件也可以分离。这意味着,在给定脚本非常大的情况下,仍然可以通过执行哈希树证明来验证非脚本组件,而无需处理较大脚本本身。
除了这些字段之外,TxID还可以作为叶包括在哈希树T中。根据上述示例,这意味着包括数据字段D9=<TxID>。通常,交易中可以有许多输入和许多输出,每个输入和输出可以通过算法F拆分为两个组件。因此,该树T中数据块的总数将由以下方程式给出
其中nin和nout分别是交易输入和输出的数量。在一些示例中,可以级联所有其他数据字段,以形成单个数据字段。这可将叶的总数减少到N=2+2(nin+nout)。
在因没有而使得N=2k的情况下,可以添加空填充数据的2k-N>0数据分组,以确保二进制哈希树有足够的叶。该填充可以是空数据,也可以是TxID的2k-N副本,以便加强初级交易标识符与最终二级标识符MTxID之间的链接。
给定交易可以包括多个输入和/或多个输出。每个输入可以包括脚本数据和非脚本数据。类似地,每个输出可以包括脚本数据和非脚本数据。可以拆分交易,使得一个数据字段包括来自每个输入的所有脚本数据,并且一个数据字段包括来自每个输入的所有非脚本数据。可以类似地划分输出数据。或者,组合的一个或多个数据字段可以包括来自每个输入的所有脚本数据,并且组合的一个或多个数据字段可以包括来自每个输入的所有非脚本数据。同样,可以类似地划分输出数据。
在一些情况下,可能需要从给定字段中提取部分数据,并将其用作哈希树T的附加叶。可以从scriptSig字段中提取的数据的示例是签名<Sig(P,m)>,并且可以从scriptPubKey字段中提取的数据的示例是公钥哈希值<H(P)>。在示例中,可以提取其中一个或两个以形成单独的数据字段。从脚本中提取这些数据元素,并将它们作为附加数据分组包括在哈希树中,这样可以对交易中的参与者及其签名进行轻量级验证,而无需处理其他数据。
作为另一例子,交易类型的标识符可以作为叶包括在哈希树中。在类似TxID的意义上,这不是包括在交易消息中的字段或数据元素,而是可以通过基于标准交易类型(例如,支付到公钥哈希(P2PKH)、支付到脚本哈希(P2SH)或非标准)的标准解释消息进行标识。包括表示交易类型的数据元素将允许轻量级用户标识有关交易的重要信息,而无需在本地检索或分析。
在某些情况下,矿工将生成二级交易标识符,例如在将交易挖掘到区块链中时。可能需要以最简单的方式拆分交易,以便矿工实现。良好的候选将是通过固定每个树的叶数(例如,N=2k),并将交易消息N拆分为数据分组来生成哈希树,使得m=m1∥m2∥…∥mN,其中公共分组大小与总交易大小线性扩展。
或者,可以固定哈希树的数据叶的公共分组大小S。然后,可以将交易拆分为所需数量的分组N。该选项可用于确保低带宽轻量级验证实用程序不会因选择适当小的S而受到影响。
该方法包括:使用该组数据字段作为交易哈希树的叶。交易哈希树包括叶层、一个或多个内部层和根层。叶层包括多个叶节点(也称为叶哈希值,因为每个节点是哈希摘要)。每个叶节点是通过对交易的相应数据字段进行哈希处理生成的。至少一个叶哈希值基于初级交易标识符。在一些示例中,一个或多个叶哈希值是通过对初级交易标识符进行哈希处理生成的。在一些示例中,级联该交易的一个或多个数据字段与初级交易标识符,然后进行哈希处理以生成相应的叶哈希值。每个内部层包括多个内部节点(或内部哈希值)。给定内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的。例如,第一或最低内部层(即直接连接到叶层的内部层)包括通过对至少两个叶哈希值的级联进行哈希处理生成的内部节点。对于二进制哈希树,级联来自给定层的两个节点,然后进行哈希处理以生成下一层的节点。对于n进制哈希树,级联来自给定层的n个节点,然后进行哈希处理以生成下一层的节点。根层包括交易树的根,即二级交易标识符。二级交易标识符是通过对一个或多个内部层(即直接连接到根层的内部层)中最高层的内部哈希值的级联进行哈希处理生成的。
二级交易标识符(交易哈希树的根)可以包括在区块的生成交易中。然后,可以将该区块记录在区块链中。或者,如下所述,二级交易标识符可以包括在经由网络的一个或多个节点传输给矿工的交易。
算法F采用一组有序的数据分组并通过使用这些分组作为叶构建哈希树T。图6示出了二进制哈希树的示例性结构。在该示例中,前四个数据字段D1,…,D4是交易的其他字段,随后的数据字段2×(nin+nout)是表示为脚本D5,D6字段数据和非脚本D7,D8字段数据对的输入字段和输出字段。剩余的数据字段包括至少一个字段D9,D10,该字段包含TxID和达到某个整数k的N=2k所需的任何填充DN。
在给定这些N数据字段作为叶的情况下,哈希树生成算法创建默克尔树T。可以使用用于生成初级交易标识符的相同算法来构建默克尔树。这意味着T的构建方式与其根RB(初级交易标识符)在区块头中找到的交易树TB相同,包括使用叶的哈希函数和内部节点的哈希函数。下面将详细描述交易树TB的构建。应当注意的是,在哈希树T和现有TB中,可以对数据字段进行双重哈希处理,以生成该树的叶。这对于轻量级存在证明是有益的。或者,可以对数据字段进行单重哈希处理,以生成该树的叶。不同之处在于,T的叶是包括单笔交易的字段的分组而TB的叶是包括在给定区块中的各笔交易。优选地,哈希树中叶的顺序与阶段3中指定的分组的顺序完全相同。
节点(例如,在节点处运行的矿工软件)可以将交易消息Tx解析为一组有序的叶,并简单地将它们连同根R一起存储,而不是存储整个哈希树。或者,也可以存储整个哈希树。通过仅保持有序的叶和根,与存储Tx相比,对于R,存储开销仅增加32字节,并且可以在任何时间根据该信息构建树。如果节点像通常那样选择存储数据分组,并且在需要时简单地根据分组构建树及其根,则也可以减少这种小的存储开销。
如果二级交易标识符由矿工生成,则矿工可以将其包括在区块的生成交易中。如果二级交易标识符由除矿工之外的用户(例如,爱丽丝)生成,则该用户可以将其包括在通过网络传播以由矿工挖掘到区块中的交易内。作为另一示例,二级交易标识符可以由未连接到区块链网络但具有对目标交易的访问权限的用户生成。该用户可以通过例如互联网向一方或多方(可以连接也可以不连接到区块链网络)传输二级交易标识符。二级交易标识符(交易哈希树的根)可以记录在(即写入提交)区块(包含目标交易的相同区块或不同区块)的生成交易中。然后,可以将该区块记录在区块链中。二级交易标识符可以提交给除生成交易之外的交易。例如,用户可以获取二级交易标识符,将其包括在交易(例如,交易的脚本)内,并将该交易传输给网络的一个或多个节点以挖掘到区块链中。生成二级交易标识符的用户可以附加地或替代地将标识符存储在本地存储器中。
候选数据字段验证
如上所述,二级交易标识符允许查询用户检查交易是否包括候选数据字段。查询用户需要候选数据字段(或其哈希值)、二级交易标识符和哈希树路径(或认证路径),以便执行此类检查。生成用户可以将这些需求元素中的一个或多个传输给查询用户。或者,查询用户可以从另一用户或从区块链本身获取一个或多个元素(例如,可以从生成交易获取二级交易标识符)。
在一些示例中,生成用户可能希望向查询用户证明交易包括候选数据字段,而无需透露完整交易(或者,查询用户可能仅希望检查交易是否包括候选数据字段)。在这种情况下,生成用户可以将候选数据字段传输给查询用户。
哈希树路径包括一组有序的哈希值。该组哈希值至少包括叶哈希值。该组还可以包括一个或多个内部哈希值。内部哈希值的数量取决于交易被拆分成的数据字段的数量和哈希树的类型(例如,哈希树是否为二进制哈希树、三进制哈希树等)。
查询用户使用候选数据字段(或其哈希值)和哈希路径来确定(通过执行哈希树证明)使用那些元素生成的哈希树的根是否与交易的二级交易标识符匹配。如果根与二级交易标识符匹配,由于底层哈希函数的唯一性,查询用户可以确信交易包括候选数据字段。
哈希树证明包括级联候选数据字段的哈希值与该组有序的哈希值(哈希树路径)中的至少一个叶哈希值。这会产生内部哈希值(或哈希树的内部节点)。然后,级联生成的内部哈希值与哈希树路径中的一个或多个哈希值(如果哈希树是二进制哈希树,则为单个哈希值)。然后,对级联的内部哈希值进行哈希处理,以生成下一哈希值。根据哈希树的大小(例如,数据字段的数量),下一哈希值可以是另一内部哈希值或根哈希值。如果下一哈希值是另一内部哈希值,则级联来自哈希树路径的一个或多个内部哈希值并对结果进行哈希处理,直到生成根哈希值。应当注意的是,哈希树路径中的每个哈希值只使用一次。
根哈希值相当于候选二级交易标识符。如果候选二级交易标识符与获取的二级交易标识符匹配,则候选数据字段将构成交易的一部分。可以(例如,经由用户设备向用户)输出指示(例如,TRUE或FALSE),以指示候选数据字段是否构成交易的一部分。输出可以是视觉或音频警报。
在一些示例中,交易包括内容数据(例如,媒体数据)。一个或多个数据字段可以包括内容数据。内容数据可以是例如图像数据(例如,图片)、声音数据(例如,歌曲)、视频数据(例如,电影)或文档数据(例如,文字文档或pdf)。候选数据字段可以是包括数据的数据字段。因此,这可以允许一方验证交易是否包括所述内容。
在一些示例中,提供二级交易标识符和候选数据字段的生成用户可以是网络的可信节点。
应当注意的是,本文中的“用户”不限于最终用户或消费者。例如,在实施例中,生成用户(记录方)可以是矿工104M。查询用户可以是诸如爱丽丝103a的消费者103或矿工节点104M。用户的查询也不限于手动发起的查询。在实施例中,查询可以由用户运行的自动化过程执行。例如,该过程可以是由矿工或其他节点104运行的自动化过程,所述矿工或其他节点104仅希望检查他们正在验证或挖掘的每笔交易的支付部分。
交易树验证算法
一方(即验证用户)可以执行与交易树生成算法F互补的验证算法VF。该验证算法将允许验证者爱丽丝检查另一方鲍勃是否已经正确使用生成算法来生成候选MTxID。验证算法VF(MTxID,Tx)采用鲍勃的候选标识符MTxID和交易Tx两个输入,这两个输入应由MTxID标识。该算法可以输出TRUE或FALSE(或一些其他指示),以指示候选标识符MTxID是否已经正确生成。输出可以是经由用户设备向用户输出(例如,作为视觉或音频警报)。
验证算法可以如下编写:
输入:MTxID,Tx
VF(MTxID,Tx):
1)计算TxID:=H2(Tx)。
4)检查R和MTxID是否相等:
4.1如果R=MTxID,则返回“TRUE”。
4.2如果R≠MTxID,则返回“FALSE”。
输出:“TRUE”或“FALSE”
当协议指定应使用二进制哈希树来生成二级交易标识符时,该算法适用。然而,一般来说,如上所述,可以使用任何n进制哈希树。
查询方(爱丽丝)可以从生成用户(鲍勃)或从网络的另一节点获取候选二级交易标识符MTxID。或者,验证方可以通过从区块链的区块中提取候选者来获取候选MTxID(回顾二级交易标识符可以记录在区块的生成交易中)。
该验证算法允许任何网络对等体独立地验证由另一对等体(例如,矿工)证实的MTxID是否已经根据生成算法F正确且诚实地计算。在使用VF执行验证时,验证者知道生成算法F以及与候选MTxID相对应的完整交易数据Tx。例如,生成算法和/或交易可以分布在网络的节点之间。
信任MTxID
生成二级交易标识符MTxID:=R的一个目的是允许轻量级客户端爱丽丝验证区块链上是否存在感兴趣的交易字段或数据元素,而无需检索和解释完整交易。
然而,客户端不一定信任公知MTxID。例如,如果爱丽丝接收到来自不受信任方鲍勃的MTxID的值,则爱丽丝无法判断鲍勃是否已经使用了正确的生成函数F。其原因在于,能够证明某个数据分组Di是与区块链上的交易Tx相对应的一组有序的的成员涉及两个条件:
2)证明MTxID对应于挖掘的交易Tx,由TxID标识。
对交易的哈希树T执行哈希证明(例如,默克尔证明)仅足以满足这两个条件中的第一条件。MTxIDs的这种信任问题的解决方案称为“第2层协议”,其为给定交易的两个标识符TxID和MTxID之间提供直接的链上链接。
生成用户可以构建附加的哈希树TM(哈希树的树),并将其根哈希值RM作为数据元素包括在生成交易的脚本中。构建TM可以与作为用于每个新区块的挖掘过程的一部分的交易的聚合并行完成。包括RM仅需要在生成交易中存储相对较小的32字节值。
协议可以包括以下阶段:
3)生成两个哈希树:
3.1)按照(2)确定的顺序将每笔交易作为叶生成区块哈希树TB,该步骤使用生成区块哈希树的标准方法完成。该阶段包括:通过对交易进行哈希处理,为每笔交易生成相应的初级交易标识符。
3.2)按照(2)确定的顺序使用每笔交易的MTxID作为叶生成交易哈希树TM的树。MTxID的顺序与(3.1)中对应的TXs的顺序相同,并且每个都是使用函数MTxIDi=F(Txi)生成。
4)将每个根记录在候选区块中:
4.1)将树TB的根RB记录在候选区块头的Merkle_root字段中。
4.2)将树TM的根RM记录在候选区块生成交易的字段中。
可以将RM记录在候选区块生成交易的一个或多个字段中,例如,记录在该交易的一个输出脚本中。
与上述验证算法一样,验证用户可以使用同一组交易来生成交易哈希树的树,并且验证树TM的生成根RM是否等于生成用户生成的根。
图7示出了示例性区块哈希树TB700。如图所示,对每笔交易701进行哈希处理以构建TB的相应叶702,并且将根RB包括在有效区块的区块头中。
图8示出了区块的示例性组成,其中交易哈希树TM的树的根RM包括在生成交易的脚本字段中。此外,还示出了区块哈希树TB,其根RB存储在区块头中。
该协议允许在区块中包括的交易的TxIDs与其对应的MTxIDs之间建立由矿工证实的链接。这是因为它始终由同一名矿工在区块中创建交易列表(用RB表示)和其对应的MtxIDs的列表(用RT表示),所有这些列表都存储在区块链上。在任何区块中,工作量证明(PoW)共识算法确保RB的值和相应树TB可信。RB中的信任用于确保RM的值也受信任,因为它与PoW所保护的信息一致。
如上所述,生成用户可以实现其中生成二级区块标识符的“第2层协议”。第2层协议是在基本区区块链协议的“顶部”实现的协议。基本协议不受(甚至不需要“知晓”)此类第2层协议的影响。第2层协议只是构建区块链协议的附加部分和扩展部分。
二级区块标识符是交易集哈希树(或交易哈希树的树)的根。交易集哈希树的每个叶可以是区块内不同交易的二级交易处理标识符(具体取决于区块内交易的数量,一个或多个哈希值可以用作填充)。同一生成用户可以生成二级交易标识符和二级区块标识符。或者,第一生成用户可以生成二级交易标识符,而不同的第二生成用户可以生成二级区块标识符。在一些示例中,只有矿工可以生成二级区块标识符。例如,第一生成用户可以在第一交易内包括二级交易标识符,并通过网络传输。类似地,第二生成用户可以对不同的第二交易执行相同的操作。第三生成用户可以获取第一交易和第二交易的二级交易标识符,以及一个或多个不同交易的二级交易标识符,然后生成二级区块标识符。
如果任何用户(验证用户)有权访问生成用户用于生成二级交易标识符和/或二级区块标识符的交易,则这些用户可以验证这些标识符是否正确生成,即根据区块链的协议。验证用户可以从例如交易的源或区块链的完整或部分副本获取交易。验证用户重复的过程与生成用户在正确遵循协议的情况下应完成的过程相同。如果二级交易标识符与生成用户产生的标识符匹配,则验证用户可以证明其已经正确生成。这同样适用于二级区块标识符。
二级交易标识符和二级区块标识符可以提交给要挖掘到区块链中的相同交易或不同交易。如果二级交易标识符由矿工生成,则矿工可以将其包括在区块的生成交易中。如果二级交易标识符由除矿工之外的用户(例如,爱丽丝)生成,则该用户可以将其包括在通过网络传播以由矿工挖掘到区块中的交易内。作为另一示例,二级交易标识符可以由未连接到区块链网络但具有对目标交易的访问权限的用户生成。该用户可以通过例如互联网向一方或多方(可以连接也可以不连接到区块链网络)传输二级交易标识符。二级交易标识符(交易哈希树的根)可以记录在(即写入或提交给)区块(包含目标交易的相同区块或不同区块)的生成交易中。然后,可以将该区块记录在区块链中。二级交易标识符可以提交给除生成交易之外的交易。例如,用户可以获取二级交易标识符,将其包括在交易(例如,交易的脚本)内,并将该交易传输给网络的一个或多个节点以挖掘到区块链中。生成二级交易标识符的用户可以附加地或替代地将标识符存储在本地存储器中。
同一提交用户可以提交二级交易标识符和二级区块标识符,以便包括在区块链的区块(相同区块或不同区块)内。或者,第一提交用户可以将二级交易标识符提交给交易,而不同的第二提交用户可以将第二区块标识符提交给交易(例如,提交给生成交易)。例如,只有矿工可以将二级区块标识符提交给生成交易,而其他用户可以将二级交易标识符包括在交易中。
存在证明
可以检查交易的任何单独字段,以查看是否存在于区块链上,而无需使用以下一组存在证明的完整交易:
1)获取(Di,R,Γ)的哈希证明,其中R=MTxID。也就是说,验证候选数据字段Di是具有R作为其二级标识符的交易的一部分。
2)获取(MTxID,RM,Γ)的哈希证明。也就是说,验证候选二级交易标识符MTxID是具有RM作为其根的哈希树TM的树的一部分。
3)获取(TxID,RB,Γ)的哈希证明。也就是说,验证候选交易标识符TxID是具有RB作为其根的区块哈希树TB的一部分。
4)检验RM和RB是否在同一区块中。这可以通过检查区块链上的区块来确定。
可选地,存在证明可以包括分别验证TxID和MTxID分别位于TB和TM的同一叶节点位置。
这些测试足以证明Di是交易Tx的一部分。此外,这些测试只需要相对较少(32位)哈希值,这对于轻量级客户端来说是可行的。这意味着任何瘦客户端都可以执行此类轻量级存在证明,而无需获取完整的交易数据。应当注意的是,可以对数据区块本身的单个(例如,SHA-256)哈希值执行上面详述的相同存在证明。这将是H(Di)而不是Di上的存在证明。在许多情况下,关于数据哈希值的此类证明将是优选的,因为它允许有效地证明存在数据,而无需提供或透露数据本身。
查询用户可能希望知道候选数据字段是否是包括在区块链的区块内的交易的一部分。查询用户至少需要候选数据字段的哈希值(可以提供给用户,或者可以向查询用户提供用户随后进行哈希处理的候选数据字段)。此外,还需要二级交易标识符的认证路径(或哈希树路径)。
为了实现第2层存在证明,查询用户还需要候选二级区块标识符和候选二级区块标识符的认证路径。除此之外,还需要:目标交易的候选初级交易标识符;包括一组交易的区块的候选初级区块标识符;初级区块标识符的认证路径。
可以由生成用户或区块链网络的另一节点向查询用户提供上述需求中的各项或部分需求。或者,可以从区块链本身(例如,从区块链的完整或部分副本)获取。作为另一示例,与区块链分离的一方(例如,服务提供商)可以访问并提供一项或多项需求。
计算缺席期
参与该协议的矿工将只能够采用RM编码的形式为网络提供他们挖掘的区块的有价值的MTxID信息。在某些情况下,不是每名矿工都会参与该协议。参与协议的矿工M可以在其生成交易的脚本字段中包括另一(32字节)哈希值RM Inter。该值RM Inter是第三哈希树TM Inter的根。该附加树的构建方式与TM相同,但在M成功挖掘的区块之间的过渡期间,将按照挖掘顺序对每笔交易使用MTxID。尽管这需要由矿工在其生成交易中存储额外的32字节,但是这确实意味着他们可以提供可信的MTxID并因此提供轻量级存在证明,而无需其他矿工参与。这也是因为用于验证的所有必要信息都存储在链上。
示例性用例
下面参考图9a和图9b提供生成用户希望验证交易是否包括候选数据字段的示例。交易可用于存储与数字资产转移无关的内容数据。例如,一些交易可以在OP_RETURNscriptPubkey字段中包含可能与数字资产接收方地址无关的数据。由于内容数据与和数字资产转移明确相关的数据分离,在许多情况下,用户可能只希望验证区块链内是否存在交易片段,而无需下载完整的交易数据。
假设爱丽丝是SPV节点,用于保存区块头信息的记录,以及来自参与所述协议的矿工的生成交易的生成脚本数据。假设鲍勃是此类矿工,他也拥有区块链的完整副本。考虑区块链上的交易Tx1,其中包含学术论文的数字版本。文档数据包含在两个单独的OP_RETURN输出scriptPubKey字段中,其中标题和摘要包含在第一OP_RETURN(输出1)中,文章的其余部分包含在第二OP_RETURN(输出2)中,如图9a所示。
爱丽丝知道Tx1的TxID,但没有完整的交易数据。爱丽丝希望访问Tx1并请求鲍勃访问,然而鲍勃希望获得付款作为向爱丽丝提供完整交易数据的回报。另一方面,爱丽丝不希望在确定其将接收的交易数据将包含文件之前向鲍勃付款。鲍勃可以通过向爱丽丝发送预览以及轻量级存在证明来提供这种确定性。鲍勃首先将Tx1的交易数据(减去文章的大部分内容)发送给爱丽丝,然后将第二OP_RETURN(输出2)之后的数据替换为数据的SHA256哈希值(参见图9b)。
一方面,爱丽丝希望验证她接收的标题和摘要(交易片段)是否未经更改,但是鲍勃不希望提供完整交易。鲍勃需要证明,爱丽丝接收到的数据存储在区块链上,而无需爱丽丝下载交易或SPV钱包可以提供的任何其他数据(区块头和生成数据)。
轻量级存在证明可用于验证鲍勃发送的Tx1的轻量级版本是否未经更改(即来自区块链)。除轻量级Tx1外,鲍勃还提供哈希证明,即鲍勃根据上面概述的方法提供序列哈希值,使爱丽丝能够根据存储Tx1的区块的生成交易中存储的树根RM来验证接收到的数据(参见图9a)。由于爱丽丝具有RM,因此她可以执行哈希证明来验证鲍勃发送的数据的完整性。
爱丽丝确信鲍勃已经向她发送了完整学术论文的片段,她可能希望查看完整交易,在这种情况下,她可以请求完整的交易数据。在接收到丢失的数据(即完整交易)时,爱丽丝可以通过检查第二OP_RETURN(输出2)中的数据哈希为与轻量级交易中给定OP_RETURN(输出2)数据相同的字符串来执行最后一次检查。或者,爱丽丝可以对完整交易进行哈希处理,并根据开始时拥有的TxID进行检查。
作为另一示例,一方可能希望从交易中修剪数据,例如,遵守个人数据要求或节省存储空间。然而,该方可能仍然需要向其他方证明该交易包含候选数据字段(例如,交易的可花费输出)。交易的二级交易标识符允许任何一方验证修剪后的交易是否包含候选数据字段。修剪后的数据(例如,个人信息)可以替换为修剪后数据的哈希值。由于OP_RETURN数据或脚本字段可存储的数据量增加,因此可能需要进行修剪。因此,如果节点希望验证修剪后的交易是否包括候选数据字段,则可以向该方提供修剪后数据的哈希值,以用作哈希树中的叶节点。
应当理解的是,上述实施例仅通过示例的方式进行描述。
根据在本文中所公开的教导的第一实施例,提供了一种用于生成目标交易的二级交易标识符的计算机实现方法,所述二级交易标识符使查询用户能够确定所述目标交易是否包括候选数据字段;所述方法由生成用户执行,并且包括:标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树,其中所述交易哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中对每个数据字段进行哈希处理以生成所述多个叶哈希值中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中的最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
在一些示例中,所述方法可以包括从区块链网络的一个或多个节点接收所述交易。例如,一个或多个终端用户。交易可以是基于UTXO的模型的交易。或者,交易可以是基于账户的模型的交易。
在一些示例中,每组内部哈希值由单个哈希值组成(例如,哈希树是二进制哈希树)。或者,每组内部哈希值可以包括两个或多个哈希值(例如,如果哈希树是三元哈希树,则包括两个哈希值)。
根据第二可选实施例,可以提供一种根据所述第一实施例所述的方法,其中所述方法可以包括将所述二级交易标识符提交给所述区块链。
生成用户可以是所述区头链网络的节点处的矿工。查询用户可以是终端用户、矿工或所述网络的不同类型节点。
根据第三可选实施例,可以提供一种根据所述第一实施例或第二实施例所述的方法,其中所述方法可以包括以下各项中的一项、一些或全部:将所述二级交易标识符提交给交易以包括在所述区块链的区块内;将所述二级交易标识符提交给生成交易以包括在所述区块链的区块内;将所述二级交易标识符传输给区块链网络的节点;将所述二级交易标识符存储在生成用户的计算装置的存储器中。
在逻辑上,所述生成交易可以是所述区块中的第一交易。
根据在本文中所公开的教导的第四实施例,提供了一种用于使查询用户能够确定区块链的区块内的目标交易是否包括候选数据字段的方法;所述方法由提交用户执行,并且包括:获取所述目标交易的二级交易标识符;将所述二级交易标识符提交给交易以包括在所述区块链的区块内,其中所述二级交易标识符已通过以下步骤生成:标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树,其中所述交易哈希树包括:i)叶层,所述叶层包括根据一组有序的数据字段排序的多个叶哈希值,其中对每个数据字段进行哈希处理以生成所述多个叶哈希值中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
根据第五可选实施例,可以提供一种根据所述第四实施例所述的方法,其中所述获取可以包括以下各项中的至少一项:生成所述二级交易标识符;从区块链网络的节点接收所述二级交易标识符;从所述区块链网络外部的节点接收所述二级交易标识符。
根据第六可选实施例,可以提供一种根据所述第四或第五实施例所述的方法,其中所述提交可以包括将所述二级交易标识符提交给所述区块链的区块内的生成交易。
根据第七可选实施例,可以提供一种根据所述第一至第六实施例中任一个所述的方法,其中所述交易哈希树可以是二进制哈希树,其中所述最低内部层中的每个内部哈希值是通过对两个不同叶哈希值的级联进行哈希处理生成的,每个内部层中的每个内部哈希值是通过对来自较低层的两个哈希值的级联进行哈希处理生成的,并且其中所述最高内部层包括两个内部哈希值。
在所述哈希树是二进制哈希树的情况下,每组内部哈希值由单个内部哈希值组成。
根据第八可选实施例,可以提供一种根据所述第一至第七实施例中任一个所述的方法,其中所述方法可以包括将所述候选数据字段的认证路径传输给所述查询用户,其中所述认证路径包括一组有序的哈希值,并且其中所述一组有序的哈希值包括至少一个叶哈希值和一组或多组内部哈希值,每组内部哈希值属于所述交易哈希树的所述内部层中的相应一层。
根据第九可选实施例,可以提供一种根据所述第一至第八实施例中任一个所述的方法,其中所述方法可以包括将所述候选数据字段或其哈希值而不是所述目标交易的至少一个其他数据字段传输给所述查询方。
例如,同一节点可以同时传输所述候选数据字段和所述二级交易标识符。所述节点可以是可信节点。
在一些示例中,仅将所述目标交易的所述候选字段而不是任何其他数据字段传输给所述查询方。
根据第十可选实施例,可以提供一种根据所述第一至第九实施例中任一个所述的方法,其中所述一组数据字段可以包括:i)至少一个包括所述目标交易的输入数据的数据字段;ii)至少一个包括所述目标交易的输出数据的数据字段;iii)至少一个包括所述目标交易的非输入数据和非输出数据的数据字段。
在一些示例中,每个数据字段可以仅包括一种类型的数据,例如输入数据、输出数据或其他数据(即,非输入数据和非输出数据)。
根据第十一可选实施例,可以提供一种根据所述第一至第十实施例中任一个所述的方法,其中所述一组数据字段可以包括:i)至少一个包括所述目标交易的脚本输入数据的数据字段;ii)至少一个包括所述目标交易的非脚本输入数据的数据字段;iii)至少一个包括所述目标交易的脚本输出数据的数据字段;iv)至少一个包括所述目标交易的非脚本输出数据的数据字段。
根据第十二可选实施例,可以提供一种根据所述第一至第十一实施例中任一个所述的方法,其中以下两项中的一项或两项:所述目标交易可以包括对应于多个输入的数据,并且其中对于所述输入中的每一个输入,所述一组数据字段包括:至少一个包括所述输入的脚本数据的数据字段;至少一个包括所述输入的非脚本数据的数据字段;和/或所述目标交易可以包括对应于多个输出的数据,并且其中对于所述输出中的每一个输出,所述一组数据字段包括:至少一个包括所述输出的脚本数据的数据字段;至少一个包括所述输出的非脚本数据的数据字段。
根据第十三可选实施例,可以提供一种根据所述第一至第十二实施例中任一个所述的方法,其中所述一组数据字段可以包括:i)至少一个包括一个或多个签名的数据字段;ii)至少一个包括除签名之外的所述目标交易的脚本输入数据的数据字段;iii)至少一个包括一个或多个公钥哈希值的数据字段;iv)至少一个包括除公钥哈希值之外的所述目标交易的脚本输出数据的数据字段。
根据第十四可选实施例,可以提供一种根据所述第一至第十三实施例中任一个所述的方法,其中所述一组数据字段中的至少一个数据字段可以包括所述目标交易的初级交易标识符,和/或所述数据字段中的至少一个数据字段附加有所述目标交易的所述初级交易标识符。
在一些示例中,每个数据字段可以附加所述初级交易标识符。或者,不包括所述初级交易标识符的每个数据字段可以附加所述初级交易标识符。
根据第十五可选实施例,可以提供一种根据所述第一至第十四实施例中任一个所述的方法,其中所述初级交易标识符可以通过对所述目标交易进行哈希处理生成。
所述初级交易标识符可以通过对所述目标交易进行双重哈希处理生成。
根据第十六可选实施例,可以提供一种根据所述第一至第十五实施例中任一个所述的方法,其中所述标识可以包括标识一组固定数目的数据字段。
根据第十七可选实施例,可以提供一种根据所述第一至第十五实施例中任一个所述的方法,其中所述标识可以包括标识一组数据字段,每个数据字段包括固定量的数据。
根据第十八可选实施例,可以提供一种根据所述第一至第十七实施例中任一个所述的方法,其中所述目标交易可以包括内容数据,并且其中所述候选数据字段包括所述内容数据的至少一部分。
根据第十九可选实施例,可以提供一种根据所述第一至第十八实施例中任一个所述的方法,其中所述内容数据包括以下各项中的一项、一些或全部:图像数据;声音数据;视频数据;文本数据。
根据在本文中所公开的教导的第二十实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第一至第三实施例中任一个和/或所述第八至第十九实施例中任一个所述的方法。
根据在本文中所公开的教导的第二十一实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器中,并且被配置为当在计算机设备上运行时,执行根据所述第一至第三实施例中任一个和/或所述第八至第十九实施例中任一个所述的方法。
根据在本文中所公开的教导的第二十二实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第四至第十九实施例中任一个所述的方法。
根据在本文中所公开的教导的第二十三实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第四至第十九实施例中任一个所述的方法。
根据在本文中所公开的教导的第二十四实施例,提供了一种用于验证是否已经根据指定协议生成区块链的区块内的目标交易的候选二级交易标识符的计算机实现方法,所述方法由验证用户执行,并且包括:获取所述候选二级交易标识符;标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;生成交易哈希树,其中所述交易哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中对每个数据字段进行哈希处理以生成相应叶哈希值;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对最高内部层的所述内部哈希值的级联进行哈希处理生成的;验证所述二级交易标识符是否与所述候选二级交易标识符匹配。
根据第二十五可选实施例,可以提供一种根据所述第二十四实施例所述的方法,其中所述获取包括以下各项中的一项或多项:从区块链网络的节点接收所述候选二级交易标识符;从所述区块链网络外部的节点接收所述候选二级交易标识符;从所述区块链的区块内的交易中提取所述候选二级交易标识符。
根据在本文中所公开的教导的第二十六实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第二十四和第二十五实施例中任一个所述的方法。
根据在本文中所公开的教导的第二十七实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第二十四和第二十五实施例中任一个所述的方法。
根据在本文中所公开的教导的第二十八实施例,提供了一种用于确定区块链的区块内的目标交易是否包括候选数据字段的计算机实现方法,所述方法由查询用户执行,并且包括:获取候选叶哈希值,其中所述候选叶哈希值为所述候选数据字段的哈希值;获取所述目标交易的候选二级交易标识符,其中所述二级交易标识符是通过标识所述目标交易的一组数据字段生成的,每个数据字段包括所述交易的相应数据,并生成交易哈希树,其中所述交易哈希树的根层包括所述二级交易标识符;获取所述候选数据字段的认证路径,其中所述认证路径包括一组有序的哈希值,并且其中所述一组有序的哈希值包括至少一个叶哈希值和一组或多组内部哈希值,每组内部哈希值属于所述交易哈希树的相应内部层;利用所述获取的候选叶哈希值、所述获取的候选二级交易标识符以及所述获取的候选数据字段的认证路径进行哈希树证明,所述执行生成二级交易标识符;其中所述确定基于所述二级交易标识符是否与所述候选二级交易标识符匹配。
在一些示例中,所述获取所述候选数据字段的所述哈希值可以包括获取所述候选数据字段和对所述候选数据字段进行哈希处理。或者,所述获取可以包括例如从记录方或另一节点接收所述候选数据字段的所述哈希值。
根据第二十九可选实施例,可以提供一种根据所述第二十八实施例所述的方法,其中所述执行所述哈希树证明包括:对所述候选叶哈希值与所述一组有序的哈希值中的所述至少一个叶哈希值的级联进行哈希处理;然后,重复以下过程:对先前哈希处理结果与所述认证路径中的所述一组或多组内部哈希值中的下一组内部哈希值的级联进行哈希处理,直到所述一组或多组内部哈希值中的最后一个内部哈希值在与所述先前哈希处理级联之后进行哈希处理,其中所述二级交易标识符是所述最终哈希处理的结果。
根据第三十可选实施例,可以提供一种根据所述第二十八或第二十九实施例所述的方法,其中所述获取所述候选叶哈希值包括:接收所述候选叶哈希值;或接收所述候选数据字段,对所述候选数据字段进行哈希处理,以生成所述候选叶哈希值。
根据第三十一可选实施例,可以提供一种根据所述第二十八至第三十实施例中任一个所述的方法,其中所述获取所述候选二级交易标识符包括以下各项中的至少一项:从所述区块链网络的节点接收所述二级交易标识符;从所述区块链网络外部的节点接收所述二级交易标识符;从所述区块链的区块内的交易中提取所述二级交易标识符。
根据在本文中所公开的教导的第三十二实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第二十八至第三十一实施例中任一个所述的方法。
根据在本文中所公开的教导的第三十三实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第二十八至第三十一实施例中任一个所述的方法。
根据在本文中所公开的教导的第三十四实施例,提供了一种用于生成区块链的区块的二级区块标识符的计算机实现方法,其中所述区块包括一组交易,所述二级区块标识符使查询用户能够确定所述一组交易是否包括候选数据字段;所述方法由生成用户执行,并且包括:对于所述一组交易中的每笔交易,获取相应的二级交易标识符;生成交易集哈希树,其中所述交易集哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
所述初级区块标识符也可以称为初级区块默克尔根。所述二级区块标识符也可以称为二级区块默克尔根。
根据第三十五可选实施例,可以提供一种根据所述第三十四实施例所述的方法,其中所述方法可以包括以下各项中的一项、一些或全部:将所述二级区块标识符提交给交易以包括在所述区块链的区块内;将所述二级区块标识符提交给生成交易以包括在所述区块链的区块内;将所述二级区块标识符传输给区块链网络的节点;将所述二级交易标识符存储在生成用户的计算装置的存储器中。
在一些示例中,所述区块哈希树和/或所述交易集哈希树是二进制哈希树。
根据第三十六可选实施例,可以提供一种根据所述第三十四或第三十五实施例所述的方法,其中所述获取所述相应二级交易标识符包括以下各项中的一项或多项:生成所述相应二级交易标识符中的一个、一些或全部;从所述区块链网络的节点接收所述相应二级交易标识符中的一个、一些或全部;从所述区块链网络外部的节点接收所述相应二级交易标识符中的一个、一些或全部;从所述区块链的区块内的至少一笔交易中提取所述相应二级交易标识符中的一个、一些或全部。
根据在本文中所公开的教导的第三十七实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第三十四至第三十六实施例中任一个所述的方法。
根据在本文中所公开的教导的第三十八实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第三十四至第三十六实施例中任一个所述的方法。
根据在本文中所公开的教导的第三十九实施例,提供了一种用于使查询用户能够确定区块链的区块内的一组交易是否包括候选数据字段的方法;所述方法由提交用户执行,并且包括:获取包括所述一组交易的所述区块的二级区块标识符;将所述二级区块标识符提交给交易以包括在所述区块链的区块内,其中所述二级区块标识符已通过以下步骤生成:对于所述一组交易中的每笔交易,获取相应的二级交易标识符;生成交易集哈希树,其中所述交易集哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
根据第四十可选实施例,可以提供一种根据所述第三十九实施例所述的方法,其中所述提交可以包括将所述二级交易标识符提交给所述区块链的区块内的生成交易。
根据第四十一可选实施例,可以提供一种根据所述第三十九或第四十实施例所述的方法,其中所述方法可以包括:获取包括所述一组交易的所述区块的初级区块标识符;将所述二级交易标识提交给所述区块链的所述区块的所述生成交易;其中所述初级区块标识符是通过以下步骤生成的:对于所述一组交易中的每笔交易,通过对所述交易进行哈希处理来生成相应的初级交易标识符;生成区块哈希树,所述区块哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述初级交易标识符中的一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述区块标识符,其中所述区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
根据在本文中所公开的教导的第四十二实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第三十九至第四十一实施例中任一个所述的方法。
根据在本文中所公开的教导的第四十三实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第三十九至第四十一实施例中任一个所述的方法。
根据在本文中所公开的教导的第四十四实施例,提供了一种用于验证是否已经根据指定协议生成区块链的区块的候选二级区块标识符的计算机实现方法,其中所述区块包括一组交易,其中所述方法由验证用户执行,并且包括:获取所述候选二级区块标识符;对于所述一组交易中的每笔交易,获取相应的二级交易标识符;生成交易集哈希树,其中所述交易集哈希树包括:i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的;验证所述二级区块标识符是否与所述候选二级区块标识符匹配。
根据第四十五可选实施例,可以提供一种根据所述第四十四实施例所述的方法,其中所述获取包括以下各项中的一项或多项:从区块链网络的节点接收所述候选二级区块标识符;从所述区块链网络外部的节点接收所述候选二级区块标识符;从所述区块链的区块的交易中提取所述候选二级区块标识符。
根据在本文中所公开的教导的第四十六实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第四十四至第四十五实施例中任一个所述的方法。
根据在本文中所公开的教导的第四十七实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第四十四至第四十五实施例中任一个所述的方法。
根据在本文中所公开的教导的第四十八实施例,提供了一种用于确定区块链的区块是否包括目标交易的计算机实现方法,所述目标交易包括候选数据字段,其中所述区块包括一组交易,所述一组交易包括所述目标交易,所述方法由查询用户执行,并且包括:获取:i)候选叶哈希值,其中所述候选叶哈希值是所述候选数据字段的哈希值;ii)所述目标交易的候选二级交易标识符;iii)所述候选数据字段的认证路径;使用i)、ii)和iii)执行哈希树证明以生成二级交易标识符;获取iv)候选二级区块标识符;v)所述候选二级区块标识符的认证路径;使用iv)、v)和所述生成的二级交易标识符执行哈希树证明,以生成二级区块标识符;获取:vi)所述目标交易的候选初级交易标识符;vii)包括所述一组交易的所述区块的候选初级区块标识符;viii)所述初级区块标识符的认证路径;使用vi)、vii)和viii)执行哈希树证明以生成初级区块标识符;其中,所述确定基于以下条件:a)所述生成的二级交易标识符是否与所述候选二级交易标识符匹配;b)所述生成的二级区块标识符是否与所述候选二级区块标识符匹配;c)所述生成的初级区块标识符是否与所述候选初级区块标识符匹配。
根据第四十九可选实施例,可以提供一种根据所述第四十八实施例所述的方法其中所述确定还基于以下条件:包括所述一组交易的所述区块是否包括所述候选初级区块标识符和所述候选二级区块标识符。
根据在本文中所公开的教导的第五十实施例,提供了一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据所述第四十八至第四十九实施例中任一个所述的方法。
根据本文所公开的教导的第五十一实施例,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在计算机设备上运行时,执行根据所述第四十八至第四十九实施例中任一个所述的方法。
根据在本文中所公开的另一实施例,可以提供一种包括生成用户、查询用户、可能涉及的任何第三方和节点网络的动作的方法。
根据在本文中所公开的另一实施例,可以提供一种系统,所述系统包括:供生成用户使用的计算机设备;供提交用户使用的计算机设备;供验证用户使用的计算机设备;供查询用户使用的计算机设备、供任何第三方使用的计算机设备和节点网络。
一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
Claims (51)
1.一种用于生成目标交易的二级交易标识符的计算机实现方法,所述二级交易标识符使查询用户能够确定所述目标交易是否包括候选数据字段;所述方法由生成用户执行,并且包括:
标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;
生成交易哈希树,所述交易哈希树包括:
i)叶层,所述叶层包括多个叶哈希值,其中对每个数据字段进行哈希处理以生成所述多个叶哈希值中的相应一个;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
2.根据权利要求1所述的方法,所述方法包括以下各项中的一项、一些或全部:
将所述二级交易标识符提交给交易以包括在区块链的区块内;
将所述二级交易标识符提交给生成交易以包括在所述区块链的区块内;
将所述二级交易标识符传输给区块链网络的节点;
将所述二级交易标识符存储在生成用户的计算装置的存储器中。
3.根据权利要求1或2所述的方法,所述方法包括将所述二级交易标识符提交给所述区块链。
4.一种用于使查询用户能够确定区块链的区块内的目标交易是否包括候选数据字段的计算机实现方法;所述方法由提交用户执行,并且包括:
获取所述目标交易的二级交易标识符;
将所述二级交易标识符提交给交易以包括在所述区块链的区块内,
其中所述二级交易标识符已通过以下步骤生成:
标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;
生成交易哈希树,所述交易哈希树包括:
i)叶层,所述叶层包括根据一组有序的数据字段排序的多个叶哈希值,其中对每个数据字段进行哈希处理以生成所述多个叶哈希值中的相应一个;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
5.根据权利要求4所述的方法,其中所述获取包括以下各项中的至少一项:
生成所述二级交易标识符;
从区块链网络的节点接收所述二级交易标识符;
从所述区块链网络外部的节点接收所述二级交易标识符。
6.根据权利要求4或5所述的方法,其中所述提交包括将所述二级交易标识符提交给所述区块链的区块内的生成交易。
7.根据前述任一项权利要求所述的方法,其中所述交易哈希树是二进制哈希树,其中所述最低内部层中的每个内部哈希值是通过对两个不同叶哈希值的级联进行哈希处理生成的,每个内部层中的每个内部哈希值是通过对来自较低层的两个哈希值的级联进行哈希处理生成的,并且其中所述最高内部层包括两个内部哈希值。
8.根据前述任一项权利要求所述的方法,所述方法包括将所述候选数据字段的认证路径传输给所述查询用户,其中所述认证路径包括一组有序的哈希值,并且其中所述一组有序的哈希值包括至少一个叶哈希值和一组或多组内部哈希值,每组内部哈希值属于所述交易哈希树的所述内部层中的相应一层。
9.根据前述任一项权利要求所述的方法,所述方法包括将所述候选数据字段或其哈希值而不是所述目标交易的至少一个其他数据字段传输给所述查询方。
10.根据前述任一项权利要求所述的方法,其中所述一组数据字段包括:
i)至少一个包括所述目标交易的输入数据的数据字段;
ii)至少一个包括所述目标交易的输出数据的数据字段;
iii)至少一个包括所述目标交易的非输入数据和非输出数据的数据字段。
11.根据前述任一项权利要求所述的方法,其中所述一组数据字段包括:
i)至少一个包括所述目标交易的脚本输入数据的数据字段;
ii)至少一个包括所述目标交易的非脚本输入数据的数据字段;
iii)至少一个包括所述目标交易的脚本输出数据的数据字段;
iv)至少一个包括所述目标交易的非脚本输出数据的数据字段。
12.根据前述任一项权利要求所述的方法,其中以下两项中的一项或两项:
所述目标交易包括对应于多个输入的数据,并且其中对于所述输入中的每一个输入,所述一组数据字段包括:至少一个包括所述输入的脚本数据的数据字段;至少一个包括所述输入的非脚本数据的数据字段;和/或
所述目标交易包括对应于多个输出的数据,并且其中对于所述输出中的每一个输出,所述一组数据字段包括:至少一个包括所述输出的脚本数据的数据字段;至少一个包括所述输出的非脚本数据的数据字段。
13.根据前述任一项权利要求所述的方法,其中所述一组数据字段包括:
i)至少一个包括一个或多个签名的数据字段;
ii)至少一个包括除签名之外的所述目标交易的脚本输入数据的数据字段;
iii)至少一个包括一个或多个公钥哈希值的数据字段;
iv)至少一个包括除公钥哈希值之外的所述目标交易的脚本输出数据的数据字段。
14.根据前述任一项权利要求所述的方法,其中所述一组数据字段中的至少一个数据字段包括所述目标交易的初级交易标识符,和/或所述数据字段中的至少一个数据字段附加有所述目标交易的所述初级交易标识符。
15.根据权利要求14所述的方法,其中所述初级交易标识符是通过对所述目标交易进行哈希处理生成的。
16.根据前述任一项权利要求所述的方法,其中所述标识包括标识一组固定数目的数据字段。
17.根据权利要求1至15中任一项所述的方法,其中所述标识包括标识一组数据字段,每个数据字段包括固定量的数据。
18.根据前述任一项权利要求所述的方法,其中所述目标交易包括内容数据,并且其中所述候选数据字段包括所述内容数据的至少一部分。
19.根据权利要求18所述的方法,其中所述内容数据包括以下各项中的一项、一些或全部:
-图像数据;
-声音数据;
-视频数据;
-文本数据。
20.一种供生成用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求1至3、和/或8至19中任一项所述的方法。
21.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述生成用户的计算机设备上运行时,执行根据权利要求1至3和/或8至19中任一项所述的方法。
22.一种供提交用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求4至19中任一项所述的方法。
23.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述提交用户的计算机设备上运行时,执行权利要求4至19中任一项所述的方法。
24.一种用于验证是否已经根据指定协议生成区块链的区块内的目标交易的候选二级交易标识符的计算机实现方法,所述方法由验证用户执行,并且包括:
获取所述候选二级交易标识符;
标识所述目标交易的一组数据字段,每个数据字段包括所述交易的相应数据;
生成交易哈希树,所述交易哈希树包括:
i)叶层,所述叶层包括多个叶哈希值,其中对每个数据字段进行哈希处理以生成相应的叶哈希值;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述二级交易标识符,其中所述二级交易标识符是通过对最高内部层的所述内部哈希值的级联进行哈希处理生成的;
验证所述二级交易标识符是否与所述候选二级交易标识符匹配。
25.根据权利要求24所述的方法,其中所述获取包括以下各项中的一项或多项:
从区块链网络的节点接收所述候选二级交易标识符;
从所述区块链网络外部的节点接收所述候选二级交易标识符;
从所述区块链的区块内的交易中提取所述候选二级交易标识符。
26.一种供验证用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求24和25中任一项所述的方法。
27.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述验证用户的计算机设备上运行时,执行权利要求24和25中任一项所述的方法。
28.一种用于确定区块链的区块内的目标交易是否包括候选数据字段的计算机实现方法,所述方法由查询用户执行,并且包括:
获取候选叶哈希值,其中所述候选叶哈希值为所述候选数据字段的哈希值;
获取所述目标交易的候选二级交易标识符,其中所述二级交易标识符是通过标识所述目标交易的一组数据字段生成的,每个数据字段包括所述交易的相应数据,并生成交易哈希树,其中所述交易哈希树的根层包括所述二级交易标识符;
获取所述候选数据字段的认证路径,其中所述认证路径包括一组有序的哈希值,并且其中所述一组有序的哈希值包括至少一个叶哈希值和一组或多组内部哈希值,每组内部哈希值属于所述交易哈希树的相应内部层;
利用所述获取的候选叶哈希值、所述获取的候选二级交易标识符以及所述获取的候选数据字段的认证路径进行哈希树证明,所述执行生成二级交易标识符;其中所述确定基于所述二级交易标识符是否与所述候选二级交易标识符匹配。
29.根据权利要求28所述的方法,其中所述执行所述哈希树证明包括:
对所述候选叶哈希值与所述一组有序的哈希值中的所述至少一个叶哈希值的级联进行哈希处理;
然后,重复以下过程:对先前哈希处理结果与所述认证路径中的所述一组或多组内部哈希值中的下一组内部哈希值的级联进行哈希处理,直到所述一组或多组内部哈希值中的最后一个内部哈希值在与所述先前哈希处理级联之后进行哈希处理,其中所述二级交易标识符是所述最终哈希处理的结果。
30.根据权利要求28或29所述的方法,其中所述获取所述候选叶哈希值包括:
接收所述候选叶哈希值;或
接收所述候选数据字段,对所述候选数据字段进行哈希处理,以生成所述候选叶哈希值。
31.根据权利要求28至30中任一项所述的方法,其中所述获取所述候选二级交易标识符包括以下各项中的至少一项:
从所述区块链网络的节点接收所述二级交易标识符;
从所述区块链网络外部的节点接收所述二级交易标识符;
从所述区块链的区块内的交易中提取所述二级交易标识符。
32.一种供查询用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求28至31中任一项所述的方法。
33.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述查询用户的计算机设备上运行时,执行权利要求28至31中任一项所述的方法。
34.一种用于生成区块链的区块的二级区块标识符的计算机实现方法,其中所述区块包括一组交易,所述二级区块标识符使查询用户能够确定所述一组交易是否包括候选数据字段;所述方法由生成用户执行,并且包括:
对于所述一组交易中的每笔交易,获取相应的二级交易标识符;
生成交易集哈希树,其中所述交易集哈希树包括:
i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
35.根据权利要求34所述的方法,所述方法包括以下各项中的一项、一些或全部:
将所述二级区块标识符提交给交易以包括在所述区块链的区块内;
将所述二级区块标识符提交给生成交易以包括在所述区块链的区块内;
将所述二级区块标识符传输给区块链网络的节点;
将所述二级交易标识符存储在生成用户的计算装置的存储器中。
36.根据权利要求34或35所述的方法,其中所述获取所述相应二级交易标识符包括以下各项中的一项或多项:
生成所述相应二级交易标识符中的一个、一些或全部;
从所述区块链网络的节点接收所述相应二级交易标识符中的一个、一些或全部;
从所述区块链网络外部的节点接收所述相应二级交易标识符中的一个、一些或全部;
从所述区块链的区块内的至少一笔交易中提取所述相应二级交易标识符中的一个、一些或全部。
37.一种供生成用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求34至36中任一项所述的方法。
38.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述生成用户的计算机设备上运行时,执行权利要求34至36中任一项所述的方法。
39.一种用于使查询用户能够确定区块链的区块内的一组交易是否包括候选数据字段的计算机实现方法;所述方法由提交用户执行,并且包括:
获取包括所述一组交易的所述区块的二级区块标识符;
将所述二级区块标识符提交给交易以包括在所述区块链的区块内,
其中所述二级区块标识符已通过以下步骤生成:
对于所述一组交易中的每笔交易,获取相应的二级交易标识符;
生成交易集哈希树,其中所述交易集哈希树包括:
i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
40.根据权利要求39所述的方法,其中所述提交包括将所述二级交易标识符提交给所述区块链的区块内的生成交易。
41.根据权利要求39或40所述的方法,所述方法包括:
获取包括所述一组交易的所述区块的初级区块标识符;
将所述二级交易标识提交给所述区块链的所述区块的所述生成交易;
其中所述初级区块标识符是通过以下步骤生成的:
对于所述一组交易中的每笔交易,通过对所述交易进行哈希处理来生成相应的初级交易标识符;
生成区块哈希树,所述区块哈希树包括:
i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述初级交易标识符中的一个;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述区块标识符,其中所述区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的。
42.一种供提交用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求39至41中任一项所述的方法。
43.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述提交用户的计算机设备上运行时,执行权利要求39至41中任一项所述的方法。
44.一种用于验证是否已经根据指定协议生成区块链的区块的候选二级区块标识符的计算机实现方法,其中所述区块包括一组交易,其中所述方法由验证用户执行,并且包括:
获取所述候选二级区块标识符;
对于所述一组交易中的每笔交易,获取相应的二级交易标识符;
生成交易集哈希树,其中所述交易集哈希树包括:
i)叶层,所述叶层包括多个叶哈希值,其中每个叶哈希值对应于所述二级交易标识符中的相应一个;
ii)一个或多个内部层,所述一个或多个内部层中的每个内部层包括多个内部哈希值,其中每个内部层中的每个内部哈希值是通过对来自较低层的至少两个哈希值的级联进行哈希处理生成的,所述一个或多个内部层中最低内部层的每个内部哈希值是通过对至少两个不同叶哈希值的级联进行哈希处理生成的;
iii)根层,所述根层包括所述二级区块标识符,其中所述二级区块标识符是通过对所述一个或多个内部层中最高内部层的所述内部哈希值的级联进行哈希处理生成的;
验证所述二级区块标识符是否与所述候选二级区块标识符匹配。
45.根据权利要求44所述的方法,其中所述获取包括以下各项中的一项或多项:
从区块链网络的节点接收所述候选二级区块标识符;
从所述区块链网络外部的节点接收所述候选二级区块标识符;
从所述区块链的区块的交易中提取所述候选二级区块标识符。
46.一种供验证用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求44和45中任一项所述的方法。
47.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述验证用户的计算机设备上运行时,执行权利要求44和45中任一项所述的方法。
48.一种用于确定区块链的区块是否包括目标交易的计算机实现方法,所述目标交易包括候选数据字段,其中所述区块包括一组交易,所述一组交易包括所述目标交易,所述方法由查询用户执行,并且包括:
获取:i)候选叶哈希值,其中所述候选叶哈希值是所述候选数据字段的哈希值;ii)所述目标交易的候选二级交易标识符;iii)所述候选数据字段的认证路径;
使用i)、ii)和iii)执行哈希树证明以生成二级交易标识符;
获取iv)候选二级区块标识符;v)所述候选二级区块标识符的认证路径;
使用iv)、v)和所述生成的二级交易标识符执行哈希树证明,以生成二级区块标识符;
获取:vi)所述目标交易的候选初级交易标识符;vii)包括所述一组交易的所述区块的候选初级区块标识符;viii)所述初级区块标识符的认证路径;
使用vi)、vii)和viii)执行哈希树证明以生成初级区块标识符;
其中,所述确定基于以下条件:a)所述生成的二级交易标识符是否与所述候选二级交易标识符匹配;b)所述生成的二级区块标识符是否与所述候选二级区块标识符匹配;c)所述生成的初级区块标识符是否与所述候选初级区块标识符匹配。
49.根据权利要求48所述的方法,其中所述确定还基于以下条件:包括所述一组交易的所述区块是否包括所述候选初级区块标识符和所述候选二级区块标识符。
50.一种供查询用户使用的计算机设备,所述设备包括:
存储器,所述存储器包括一个或多个存储器单元;和
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上时,执行根据权利要求48至49中任一项所述的方法。
51.一种计算机程序,所述计算机程序包含在计算机可读存储器上,并且被配置为当在所述查询用户的计算机设备上运行时,执行权利要求48至49中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1907349.3 | 2019-05-24 | ||
GBGB1907349.3A GB201907349D0 (en) | 2019-05-24 | 2019-05-24 | Verification of data fields of blockchain transactions |
PCT/IB2020/053813 WO2020240296A1 (en) | 2019-05-24 | 2020-04-22 | Verification of data fields of blockchain transactions |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113924747A true CN113924747A (zh) | 2022-01-11 |
Family
ID=67385545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080037799.5A Pending CN113924747A (zh) | 2019-05-24 | 2020-04-22 | 区块链交易数据字段验证 |
Country Status (7)
Country | Link |
---|---|
EP (1) | EP3966996A1 (zh) |
JP (1) | JP2022533355A (zh) |
KR (1) | KR20220012353A (zh) |
CN (1) | CN113924747A (zh) |
GB (1) | GB201907349D0 (zh) |
SG (1) | SG11202112019PA (zh) |
WO (1) | WO2020240296A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111539816A (zh) * | 2020-02-19 | 2020-08-14 | 杭州溪塔科技有限公司 | 一种区块链中确定交易标识的方法、装置和电子设备 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111144887A (zh) * | 2019-12-20 | 2020-05-12 | 辽宁振兴银行股份有限公司 | 一种区块链共享数据的保护方法 |
CN112765420A (zh) * | 2021-01-13 | 2021-05-07 | 湖北宸威玺链信息技术有限公司 | 基于区块链的错误字段数据处理方法及系统及装置及介质 |
GB202101589D0 (en) * | 2021-02-05 | 2021-03-24 | Nchain Holdings Ltd | Blockchain tree structure |
GB202104312D0 (en) * | 2021-03-26 | 2021-05-12 | Nchain Licensing Ag | Computer-implemented method & system |
US11902426B2 (en) * | 2021-06-26 | 2024-02-13 | Ceremorphic, Inc. | Efficient storage of blockchain in embedded device |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101637868B1 (ko) * | 2016-02-22 | 2016-07-08 | 주식회사 코인플러그 | 블록체인을 기반으로 하는 금융기관 제증명서류 위변조 검증시스템 및 방법 |
EP3593487B1 (en) * | 2017-03-10 | 2021-04-28 | Visa International Service Association | Compact recordation protocol |
-
2019
- 2019-05-24 GB GBGB1907349.3A patent/GB201907349D0/en not_active Ceased
-
2020
- 2020-04-22 EP EP20724935.0A patent/EP3966996A1/en active Pending
- 2020-04-22 SG SG11202112019PA patent/SG11202112019PA/en unknown
- 2020-04-22 KR KR1020217042550A patent/KR20220012353A/ko unknown
- 2020-04-22 CN CN202080037799.5A patent/CN113924747A/zh active Pending
- 2020-04-22 JP JP2021568333A patent/JP2022533355A/ja active Pending
- 2020-04-22 WO PCT/IB2020/053813 patent/WO2020240296A1/en unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111539816A (zh) * | 2020-02-19 | 2020-08-14 | 杭州溪塔科技有限公司 | 一种区块链中确定交易标识的方法、装置和电子设备 |
CN111539816B (zh) * | 2020-02-19 | 2022-07-15 | 杭州溪塔科技有限公司 | 一种区块链中确定交易标识的方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US20220216997A1 (en) | 2022-07-07 |
WO2020240296A1 (en) | 2020-12-03 |
GB201907349D0 (en) | 2019-07-10 |
EP3966996A1 (en) | 2022-03-16 |
JP2022533355A (ja) | 2022-07-22 |
KR20220012353A (ko) | 2022-02-03 |
SG11202112019PA (en) | 2021-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113924747A (zh) | 区块链交易数据字段验证 | |
US20220278859A1 (en) | Digital contracts using blockchain transactions | |
CN115997369A (zh) | 用于在区块链网络中验证数据的方法和装置 | |
CN116508291A (zh) | 默克尔证明实体 | |
CN113874839A (zh) | 区块链交易内的脚本内函数 | |
US20220337427A1 (en) | Cryptographically linked identities | |
CN115211073A (zh) | 公钥生成方法 | |
WO2021059054A1 (en) | Divisible tokens | |
EP4032223A1 (en) | Multi-criteria blockchain protocol | |
US20230394063A1 (en) | Merkle proof entity | |
CN117280653A (zh) | 多方区块链地址方案 | |
US12034859B2 (en) | Verification of data fields of blockchain transactions | |
CN117121440A (zh) | 统一资源标识符 | |
CN117693926A (zh) | 区块链区块和存在证明 | |
CN117337436A (zh) | 多方区块链地址方案 | |
CN117561697A (zh) | 部分基于sha的哈希函数 | |
WO2024033015A1 (en) | Attesting to knowledge of blockchain transaction outputs | |
WO2024061546A1 (en) | Enforcing constraints on blockchain transactions | |
KR20240100377A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
KR20240093714A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
CN117941317A (zh) | 生成区块链事务 | |
CN118202614A (zh) | 分片的默克尔树 | |
CN118216122A (zh) | 用于分布式区块链功能的方法和系统 | |
CN117678193A (zh) | 区块链区块和存在证明 | |
CN117136527A (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 |