CN116547945A - 默克尔证明实体 - Google Patents
默克尔证明实体 Download PDFInfo
- Publication number
- CN116547945A CN116547945A CN202180074369.5A CN202180074369A CN116547945A CN 116547945 A CN116547945 A CN 116547945A CN 202180074369 A CN202180074369 A CN 202180074369A CN 116547945 A CN116547945 A CN 116547945A
- Authority
- CN
- China
- Prior art keywords
- transaction
- blockchain
- target
- merck
- transactions
- 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
- 238000000034 method Methods 0.000 claims abstract description 107
- 238000013515 script Methods 0.000 claims description 61
- 238000012545 processing Methods 0.000 claims description 20
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 2
- 230000006870 function Effects 0.000 description 21
- 238000012795 verification Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 8
- 230000009471 action Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000001902 propagating effect Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000013138 pruning Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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
-
- 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
- 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/2272—Management thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- 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)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种证明区块链事务的数据项存在于区块链上的计算机实现的方法,其中所述方法包括:从请求方,获取目标区块链事务的目标数据项;获取所述目标区块链事务;获取所述目标区块链事务的目标默克尔证明,其中对应的目标默克尔根包含在所述区块链的区块内,并且其中获取所述目标默克尔证明包括:计算所述目标区块链事务的目标事务标识符在对应的目标默克尔树的叶层内的索引;以及,至少输出所述目标默克尔证明,以供所述请求方用作所述目标数据项作为所述目标区块链事务的一部分存在于所述区块链上的证明。
Description
技术领域
本公开涉及证明区块链事务的数据存在于区块链上并获取所述证明的方法,或者换句话说,本公开涉及证明包含该数据的区块链事务存在于区块链上并获取所述证明的方法。
背景技术
区块链是指一种分布式数据结构,其中在分布式对等(P2P)网络(以下称为“区块链网络”)中的多个节点中的每个节点处维护区块链的副本,并且广泛公开该副本。区块链包括一系列数据区块,其中每个区块包括一个或多个事务(transaction)。除所谓的“coinbase事务”外,每个事务都指向序列中的先前事务,该序列可以跨越一个或多个区块,回到一个或多个coinbase事务。coinbase事务将在下文进一步讨论。提交给区块链网络的事务包括在新区块中。新区块的创建过程通常称为“挖掘”,该过程涉及多个节点中的每个节点争相执行“工作量证明”,即,基于等待被包括在区块链的新区块中的一组定义的有序且核实有效的未决事务的表示解决加密难题。应当注意的是,区块链可以在一些节点处被修剪(prune),并且区块的发布可以通过仅发布区块头来实现。
区块链中的事务可用于以下目的中的一个或多个:传送数字资产(即,一定数量的数字通证);对虚拟化分类账或注册表中的一组条目进行排序;接收和处理时间戳条目;和/或对索引指针按时间排序。也可利用区块链实现区块链上的层级附加功能。例如,区块链协议可允许在事务中存储附加的用户数据或数据索引。能够存储在单个事务中的最大数据容量没有预先指定的限制,因此可以并入越来越复杂的数据。例如,这可用于在区块链中存储电子文档、音频或视频数据。
区块链网络的节点(通常称为“矿工”)执行分布式事务注册和验证过程,这将后续更详细地描述。总之,在该过程中,节点核实事务并将这些事务***到区块模板中,这些事务尝试为该区块模板标识有效的工作量证明解。一旦找到有效的解,新区块便会被传播到网络的其它节点,从而使得每个节点能够在区块链上记录新区块。为了将事务记录在区块链中,用户(例如,区块链客户端应用程序)将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的节点可以争相寻找将核实有效的事务并入新区块的工作量证明解。每个节点被配置为执行相同的节点协议,该协议将包括用于确认事务有效的一个或多个条件。无效事务将不会传播或并入到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此在区块链网络中的每个节点上作为不可改变的公共记录进行注册和索引。
成功解决工作量证明难题可创建最新区块的节点通常被奖励一个称为“coinbase事务”的新事务,该事务分发数字资产数额,即通证数量。无效事务的检测和拒绝是通过竞争节点的行动来执行的,这些竞争节点充当网络的代理并且通过激励报告和阻止不正当行为。信息的广泛发布使得用户可以连续地审计节点的性能。仅发布区块头使得参与者可以确保区块链具有持续完整性。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或多个输入和一个或多个输出。任何可花费输出包括指定数字资产数额的元素,该元素可从进行中的事务序列导出。可花费输出有时称为UTXO(“未花费事务输出”)。输出还可以包括锁定脚本,该锁定脚本指定输出的未来赎回条件。锁定脚本是限定核实和传送数字通证或资产所必需的条件的谓词。事务(除coinbase事务之外)的每个输入包括指向先前事务中的此类输出的指针(即引用),并且还可以包括解锁脚本,用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或多个条件的锁定脚本。第二目标事务包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二目标事务被发送到区块链网络以在区块链中传播和记录时,在每个节点处应用的有效性条件之一将是解锁脚本满足在第一事务的锁定脚本中定义的一个或多个条件中的所有条件。另一条件将是第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务(作为有效事务,但可能注册无效事务),也不将该事务包括在要记录在区块链中的新区块中。
另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由节点单独存储到区块链中,并不断更新。
发明内容
默克尔证明通常用于验证事务存在于区块链上。想要验证特定事务存在于所述区块链上的一方(例如,用户)可以从区块链节点寻找默克尔证明。如果使用所接收的默克尔证明,可以将所述事务追溯到与所述区块链的区块中包括的默克尔根匹配的值,则所述用户可以确信所述事务存在于所述区块链上。应当注意的是,为了确保绝对确定,可能需要进行额外的检查。
目前,提供默克尔证明的唯一实体是区块链节点(也称为矿工)。如上所述,区块链节点主要涉及事务核实、区块构建和发布。
区块链技术的使用量不断增加,因此区块链***需要能够进行扩展,以满足日益增长的使用量和需求量。扩展区块链***的一种方法是增加所述区块的大小、提高事务率,并将所述区块链技术用作各种数据应用的不可变分类账。这会大幅增加所述区块链的大小,并增加用于事务核实的处理量。因此,对于终端用户和服务提供者来说,用于存储完整的区块链、核实事务以及响应事务相关查询的资源可能过于昂贵(就存储和处理要求而言)。
因此,需要一种资源效率更高的实体,所述实体能够证明事务存在于所述区块链上。此外,如果此类实体能够证明事务中存储(即,嵌入)的数据的完整性,则将是可取的。这在无信任环境中尤其可取。
根据本文公开的一个方面,提供了一种证明区块链事务的数据项存在于区块链上的计算机实现的方法,其中所述方法由默克尔证明实体执行,所述默克尔证明实体被配置为存储相应区块链事务的一组事务标识符但不向区块链网络发布新的区块链区块,并且其中所述方法包括:从请求方,获取目标区块链事务的目标数据项;获取所述目标区块链事务;获取所述目标区块链事务的目标默克尔证明,其中对应的目标默克尔根包含在所述区块链的区块内,并且其中获取所述目标默克尔证明包括:计算所述目标区块链事务的目标事务标识符在对应的目标默克尔树的叶层内的索引;以及,至少输出所述目标默克尔证明,以供所述请求方用作所述目标数据项作为所述目标区块链事务的一部分存在于所述区块链上的证明。
默克尔证明实体不执行在所述区块链上构建和/或发布区块的操作。换言之,所述默克尔证明实体不是区块链节点(根据本领域中用于此类节点的一个术语,不是“矿工”)。所述默克尔证明实体(以下也称为默克尔证明服务器(MPS))能够向请求方提供默克尔证明,但不参与事务核实或区块构建,因此资源密集度低于区块链节点。通过仅存储相关信息来优化数据存储、数据搜索和数据检索,在本例中,所述相关信息是所存储的一组事务。
在一些示例中,所述MPS可以提供默克尔证明而不必存储整个区块链,因此与区块链节点相比具有明显更少的存储要求。例如,所述MPS可以仅以原始格式存储所述相关事务。所述存储的事务可以涉及特定应用或服务。作为特定示例,所述存储的事务可以包含一个或多个患者的医疗数据。作为另一示例,所述存储的事务可以包含任何事务,所述任何事务包含特定数据项(例如,公钥哈希)。所述MPS支持按所述事务中的数据字段(例如,地址、公钥、数据协议标志等)或任何部分事务数据进行查询。
在其他示例中,所述MPS可以在区块链事务的整个域上提供其服务。虽然在事务方面具有与区块链节点相同的存储要求,但是所述MPS具有更少的处理要求,因为它不需要核实所述事务。为了提供默克尔证明,所述MPS可以简单地根据事务数据或对应的TxID来构建默克尔树,而不显式地验证所述事务。
所述MPS识别包含所述查询的数据的事务,并输出包含所述数据的所述事务的默克尔证明。所述默克尔证明可证明所述事务存在于所述区块链上。因此,如果所述查询的数据存在于所述事务中,则所述查询的数据存在于所述区块链上的所述事务中。应当注意的是,这是因为原始事务中数据的任何更改都意味着所述默克尔证明将无效。换言之,所述原始事务中的最轻微更改都意味着所述事务的所述事务标识符(TxID)将发生更改,并且由于所述TxID是用于生成所述默克尔证明的默克尔树的叶哈希,因此所述默克尔证明将不会生成所需的默克尔根(即,存储在包含所述事务的所述区块中的所述默克尔根)。
通过确定所述目标事务标识符的所述索引,即所述目标事务的所述叶哈希,所述MPS可以正确地识别正确的哈希以作为所述默克尔证明的一部分提供。
此外,如果提供了某个事务的默克尔证明,或者如果花费了所述事务的输出中的一个输出,并且连同原始花费事务一起提供了花费事务的默克尔证明,则可以证明所述事务存在于所述区块链上。该观察结果可以用于最小化相关事务链所需的证明数量。下面提供了更多详细信息。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的***的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示意性地示出了默克尔树;
图5示意性地示出了示例性默克尔证明;
图6A和图6B分别示意性地示出了根据本发明的一些实施例的示例性***;
图7示意性地示出了根据本发明的一些实施例的第二默克尔证明实体存储的数据;
图8示出了根据本发明的一些实施例的示例性方法;以及
图9示出了映射到Weather SV默克尔证明实体中每个位置的数据。
具体实施方式
示例性***概述
图1示出了一种用于实现区块链150的示例性***100。***100可以包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个区块链节点104,该多个区块链节点可以被设置成在分组交换网络101内形成对等(P2P)网络106。虽然未示出,但是区块链节点104可以被设置为近完全图。因此,每个区块链节点104高度连接到其它区块链节点104。
每个区块链节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个区块链节点104包括处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器、专用处理器和/或现场可编程门阵列(FPGA),以及其它设备,例如专用集成电路(ASIC)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。
区块链150包括一系列数据区块151,其中在分布式或区块链网络106中的多个区块链节点104中的每个节点处维护区块链150的相应副本。如上所述,维护区块链150的副本不一定意味着完全存储区块链150。相反,只要每个区块链节点150存储每个区块151的区块头(下面讨论),区块链150就可以进行数据修剪。区块链中的每个区块151均包括一个或多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定将数字资产的数量表示为财产的数额,其一个示例是输出被密码锁定到的用户103(需要该用户的签名或其它解进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。每个事务152(除coinbase事务之外)包括指向上一事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或多个原始事务152指向创始区块153,而非先前事务。
每个区块链节点104被配置为将事务152转发到其它区块链节点104,从而使得事务152在整个网络106中传播。每个区块链节点104被配置为创建区块151,并将相同区块链150的相应副本存储在其相应的存储器中。每个区块链节点104还维护等待并入到区块151中的事务152的有序集(或“池”)154。有序池154通常称为“内存池”。在本文中,该术语并不意在限制于任何特定的区块链、协议或模型。该术语是指节点104已接受为有效的有序事务集,并且对于该有序事务集,强制节点104不接受试图花费相同输出的任何其它事务。
在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,先前事务可以是有序集154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
当前事务152j的输入还包括输入授权,例如先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户或实体103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户或实体103b。在某些情况下,事务152可具有多个输出,以在多个用户或实体间分割输入数额(其中一个可以是原始用户或实体103a,以便进行变更)。在某些情况下,事务还可以具有多个输入,将一个或多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或多个输出。
根据基于输出的事务协议,例如比特币,当诸如个体用户或组织这类的一方103希望颁布新的事务152j时(由该方采用的自动程序或人为地),该颁布方将该新事务从其计算机终端102发送到接收者。颁布方或接收者将最终向网络106的一个或多个区块链节点104(现在通常是服务器或数据中心,但原则上也可以是其它用户终端)发送该事务。另外还不排除颁布新事务152j的一方103可以将事务直接发送到一个或多个区块链节点104,并且在一些示例中,可以不将事务发送到接收者。接收事务的区块链节点104根据在每个区块链节点104处应用的区块链节点协议来检查事务是否有效。区块链节点协议通常要求区块链节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的上一事务152i。在这种基于输出的事务协议中,这可以包括检查新事务152j的输入中包括的一方103的密码签名或其它授权是否与新事务分配的先前事务152i的输出中定义的条件匹配,其中该条件通常包括至少检查新事务152j的输入中的密码签名或其它授权是否解锁新事务的输入所链接到的上一事务152i的输出。条件可以至少部分地由包括在先前事务152i的输出中的脚本来定义。或者,这可仅由区块链节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,区块链节点104会将其转发到区块链网络106中的一个或多个其它区块链节点104。这些其它区块链节点104根据相同的区块链节点协议应用相同的测试,并因此将新事务152j转发到一个或多个其它节点104等等。通过这种方式,新事务在区块链节点104的整个网络中进行传播。
在基于输出的模型中,给定输出(例如,UTXO)是否分配(例如,花费)的定义是,根据区块链节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图赎回的先前事务152i的输出尚未被另一个事务赎回。同样,如果无效,则事务152j将不会在区块链150中传播(除非被标记为无效并且被传播用于提醒)或记录。这可防止重复花费,即事务处理者对同一个事务的输出分配超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的事务顺序,账户余额在任何时候均具有单一定义的状态。
除了核实事务有效之外,区块链节点104还争相成为在通常称为挖矿的过程中创建事务区块的第一个节点,而该过程由“工作量证明”支持。在区块链节点104处,新事务被添加到尚未出现在记录在区块链150上的区块151中的有效事务的有序池154。然后,区块链节点争相通过尝试解决加密难题以组装有序事务集154中事务152的新有效事务区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与未决事务有序池154的表示并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。注意,这仅仅是一种特定类型的工作量证明难题,并且不排除其它类型。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个区块链节点104处消耗大量的处理资源。
解决难题的第一区块链节点104在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其它区块链节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。第一区块链节点104将一个区块传播到接受该区块的其它节点达成阈值共识,从而执行协议规则。然后,有序事务集154被每个区块链节点104记录为区块链150中的新区块151。区块指针155还分配给指向该区块链中先前创建的区块151n-1的新区块151n。创建工作量证明解所需的大量工作(例如采用哈希的形式)发出信号通知第一节点104的意图以遵循区块链协议。这些规则包括如果它分配与先前核实有效的事务相同的输出,则不接受事务为有效,否则称之为重复花费。一旦创建,区块151就不能修改,因为它在区块链网络106中的每个区块链节点104处进行标识和维护。区块指针155还向区块151施加顺序。由于事务152记录在网络106中每个区块链节点104处的有序区块中,因此提供了事务的不可改变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同区块链节点104可以基于在任何给定时间尚未发布的事务的池154的不同快照来这样做,具体取决于它们何时开始搜索解或接收事务的顺序。解决相应难题的人员首先定义新区块151n中包括的事务152及其顺序,并且更新当前的未发布事务池154。然后,区块链节点104继续争相从新定义的未发布事务有序池154中创建区块,等等。此外,还存在解决可能出现的任何“分叉”的协议,其中两个区块链节点104彼此在很短的时间内解决难题,从而在节点104之间传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。应当注意的是,这不会影响网络的用户或代理,因为同一事务将出现在两个分叉中。
根据比特币区块链(和大多数其它区块链),成功构造新区块104的节点被授予在分配附加限定数量数字资产的新特殊类型事务中新分配附加的、接受的数额的数字资产的能力(与代理间或用户间事务相反,该事务将一定数量的数字资产从一个代理或用户转移到另一个代理或用户)。这种特殊类型的事务通常称为“coinbase事务”,但是也可以称为“启动事务”或“产生事务”。它通常形成新区块151n的第一事务。工作量证明发出信号通知构造新区块的节点的意图以遵循协议规则,从而允许稍后赎回该特定事务。在可以赎回该特殊事务之前,区块链协议规则可能需要成熟期,例如100个区块。通常,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中发布该事务的区块151n的区块链节点104。该费用通常称为“事务费用”,并在下文中讨论。
由于事务核实和发布中涉及的资源,通常至少每个区块链节点104采用包括一个或多个物理服务器单元的服务器的形式,或者甚至整个数据中心。但是,原则上来说,任何给定区块链节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个区块链节点104的存储器均存储被配置为在区块链节点104的处理装置上运行的软件,以根据区块链节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于区块链节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层或诸如操作***层或协议层的较低层或这些层任意组合的一个或多个应用中实现。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。这些用户可以与区块链网络106交互,但不参与核实事务或构造区块。其中一些用户或代理103可以充当事务中的发送者和接收者。其它用户可以与区块链150交互,而不必充当发送者或接收者。例如,一些当事方可以充当存储区块链150的副本(例如,已经从区块链节点104获得区块链的副本)的存储实体。
各方103中的一些或所有当事方可以作为不同网络的一部分连接,例如覆盖在区块链网络106之上的网络。区块链网络的用户(经常称为“客户端”)可以被称为是包含区块链网络106的***的一部分;然而,这些用户不是区块链节点104,因为它们不执行区块链节点所需的角色。相反,每一方103可以与区块链网络106交互,从而通过连接到区块链节点106(即,与区块链节点106通信)来利用区块链150。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与***100,但为了方便起见,未进行说明。每一方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能够创建、授权(例如签名)事务152并将其发送到一个或多个位比特币节点104,然后在区块链节点104的网络中传播,从而包括在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的***中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
注意:虽然各种客户端功能可以描述为集成到给定客户端应用程序105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用程序组成的套件中实现,例如经由API进行接口连接或一个应用程序作为另一个应用程序的插件。更通俗地说,客户端功能可以在应用层或诸如操作***的较低层或这些层的任意组合实现。下面将根据客户端应用程序105进行描述,但应当理解的是,这不是限制性的。
每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到网络106的区块链节点104中的至少一个。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联络区块链节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其它方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。如上所述,每个区块链节点104运行软件,该软件被配置为根据区块链节点协议核实事务152并转发事务152以便在区块链网络106中传播。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。相同的事务协议用于区块链150中的所有事务152。网络106中的所有节点104使用相同的节点协议。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送到她所连接的一个或多个区块链节点104。例如,这可能是与爱丽丝的计算机102最佳连接的区块链节点104。当任何给定区块链节点104接收新事务152j时,其将根据区块链节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何区块链节点104将向在区块链节点104处维护的有序事务集154中添加新的核实有效事务152。进一步地,接收事务152j的任何区块链节点104随后将核实有效事务152传播至网络106中的一个或多个其它区块链节点104。由于每个区块链节点104应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个网络106中传播。
一旦进入在给定区块链节点104处维护的未决事务有序池154,该区块链节点104将开始争相解决其各自的包含新事务152的池154的最新版本上的工作量证明难题(请记住,其它区块链节点104可以尝试基于不同的事务池154来解决难题。但是,首先解决难题的人将定义包括在最新区块151中的事务集合。最终,区块链节点104将解决有序池154的一部分的难题,该有序集154包括爱丽丝的事务152j)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
不同的区块链节点104可以首先接收给定事务的不同实例,并且因此在一个实例被发布到新区块151中之前具有关于哪个实例“有效”的冲突视图,此时所有区块链节点104同意所发布的实例是唯一的有效实例。如果区块链节点104将一个实例接受为有效实例,然后发现第二实例已记录在区块链150中,则区块链节点104必须接受这一点,并将丢弃(即,视为无效)其最初接受的实例(即,在区块151中尚未公布的实例)。
作为基于账户的事务模型的一部分,由一些区块链网络操作的另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由网络的节点单独存储到区块链中,并不断更新。在此类***中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含上一事务的ID,该数据字段可指向上一事务。
基于UTXO的模型
图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。应当注意的是,虽然参考比特币描述了示例性基于UTXO的协议,但是它同样可以在其它示例区块链网络上实现。
在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO包括指定数字资产数额的值。这表示分布式分类账上的一组通证。UTXO还可包含其来源事务的事务ID以及其它信息。事务数据结构还可包括标头201,其可包括输入字段202和输出字段203的大小指示符。标头201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在提交至节点104的原始事务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中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在有序集154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络106;或者,如果节点协议允许缓冲“孤立”事务,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的输入中的解锁脚本是否包含爱丽丝签名预期部分的数据时的签名。也需要包括预期的部分数据本身(“消息”),以便执行此认证。在实施例中,签名的数据包括整个Tx1(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息,诸如节点104等其它实体可验证消息必须已经由爱丽丝签名。签署通常包括对消息进行哈希,签署哈希值和将此标记到消息作为签名,从而使公钥的任何持有者能够验证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行验证),则区块链节点104认为Tx1有效。这意味着区块链节点104会将Tx1添加到待定事务有序池154。区块链节点104还会将事务Tx1转发到网络106中的一个或多个其它区块链节点104,以便其会在整个网络106中传播。一旦Tx1有效并包括在区块链150中,这会将UTXO0从Tx0定义为已花费。应当注意的是,Tx1仅在花费未花费事务输出203时才有效。如果其试图花费另一事务152已经花费的输出,则即使满足所有其它条件,Tx1也将无效。因此,区块链节点104还需要检查先前事务Tx0中引用的UTXO是否已经花费(即,其是否已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定区块链节点104可维护单独的数据库,标记已花费事务152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效事务的有效输入。
如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务不会传播或包括在区块151中。
请注意,在基于UTXO的事务模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分数额,而同时又花费另一部分。但UTXO的数额可以在下一事务的多个输出之间分割。例如,Tx0的UTXO0中定义的数额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有数额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零,或者支付给另一方。
在实践中,爱丽丝通常还需要包括用于比特币节点104的费用,该比特币节点104在区块151中成功包含爱丽丝的事务104。如果爱丽丝未包括此类费用,则Tx0可能会被区块链节点104拒绝,并且因此尽管在技术上有效,但可能不会传播并且包括在区块链150中(如果区块链节点104不希望接受事务152,节点协议不强迫区块链节点104接受)。在一些协议中,事务费用不需要其自身的单独输出203(即不需要单独的UTXO)。相反,输入202指向的总数额与给定事务152的输出203指定的总数额之间的任何差额都将自动提供给发布事务的区块链节点104。例如,假设指向UTXO0的指针是Tx1的唯一输入,并且Tx1仅具有一个输出UTXO1。如果在UTXO0中指定的数字资产数额大于在UTXO1中指定的数额,则可以由赢得工作量证明竞赛以创建包含UTXO1的区块的节点104分配该差值。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定事务费用。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其它随后事务中尚未花费的各种UTXO值整理在一起。为实现这一点,其可以查询存储在任何一个位比特币节点104处的区块链150的副本。
应当注意的是,脚本代码通常用示意图表示(即使用非精确语言)。例如,可以使用操作码(opcode)来表示特定功能。“OP_...”是指脚本语言的特定操作码。举例来说,OP_RETURN是脚本语言操作码,当在锁定脚本的开始处在操作码前加上OP_FALSE时,操作码创建事务的不可花费输出,该输出可以在事务内存储数据,从而将数据不可改变地记录在区块链150中。例如,数据可包括需存储在区块链中的文件。
通常,事务的输入包含对应于公钥PA的数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及部分或全部事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志通常是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其通常包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其通常提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
客户端软件
图3A示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括事务引擎401和用户界面(UI)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,事务引擎401被配置为实现客户端105的基础事务相关功能,诸如制定事务152,通过侧信道301接收和/或发送事务和/或其他数据,和/或发送事务至一个或更多个节点104以通过区块链网络106传播。
该UI层402被配置为通过相应用户的计算机设备102的用户输入/输出(I/O)方式呈现用户界面,包括通过设备102的用户输出方式向相应用户103输出信息,和通过设备102的用户输入方式接收来自相应用户103的输入。例如,用户输出方式可包括提供视觉输出的一个或显示多个屏(触摸或非触摸屏)、提供音频输出的一个或更多个扬声器、和/或提供触觉输出的一个或更多个触觉输出设备等。用户输入方式可包括例如一个或更多个触摸屏的输入阵列(可与用于输出方式的那个/那些相同或不同);一个或更多个基于光标的设备,诸如鼠标、轨迹板或轨迹球;一个或更多个麦克风和语音或声音识别算法,用于接收语音或声音输入;一个或更多个基于手势的输入设备,用于接收手动或身体手势形式的输入;或者一个或更多个机械按钮、开关或控制杆等。
注:虽然本文中的各种功能可以被描述为集成到同一客户端应用程序105中,但这并不一定构成限制,相反,它们可以在两个或更多个不同应用程序组成的一套程序中实现,例如一个应用程序作为另一个应用程序的插件或经由API(应用程序编程接口)进行接口。比如,事务引擎401的功能可以在单独的应用程序中实现,而不是在UI层402中实现,或者诸如事务引擎401的给定模块的功能可以在多个应用程序之间分割。同时,也不排除部分或全部描述的功能可以在比如操作***层实现。在本文任何位置引用单个或给定应用程序105或诸如此类的情况下,应当理解的是这只是作为示例,并且更通俗地说,所描述的功能可以在任何形式的软件中实现。
图3B给出了用户界面(UI)500的示例的模型,该UI可由客户端应用程序105a的UI层402在爱丽丝的设备102a上呈现。应当理解的是,类似的UI可以由客户端105b在鲍勃的设备102b或任何其他方的设备上呈现。
通过图示的方式,图3B从爱丽丝的角度示出了UI 500。该UI 500可包括一个或更多个UI元素501、502、503,该一个或更多个UI元素通过用户输出方式呈现为不同的UI元素。
例如,UI元素可包括一个或更多个用户可选择的元素501,这些元素可以是屏幕上的不同按钮、菜单中的不同选项或者诸如此类。用户输入方式被设置成使用户103(在这种情况下为爱丽丝103a)能够选择或以其它方式操作其中一个选项,诸如通过点击或触摸屏幕上的UI元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不一定限于用手执行操作)。
此外/或者,UI元素可包括一个或更多个数据输入字段502。这些数据输入字段通过用户输出方式呈现,例如屏幕上,并且数据可通过用户输入方式输入到字段中,例如键盘或触摸屏。或者,数据可以例如基于语音识别口头地接收。
此外/或者,UI元素可包括向用户输出信息的一个或更多个信息元素503。例如,这/这些可以在屏幕上呈现或可听见。
应当理解的是,呈现各种UI元素、选择选项和输入数据的特定方式并不重要。这些UI元素的功能稍后将进行更详细地讨论。还应当理解的是,图3中示出的UI 500只是一个图示模型,在实践中,它可包括一个或更多个进一步的UI元素,为了简洁起见,未对其进行说明。
默克尔树
默克尔树是分层数据结构,能够对数据集合进行安全验证。在默克尔树中,树中的每个节点均提供有索引对(i,j),并且表示为N(i,j)。索引i、j只是与树中的特定位置相关的数字标签。
默克尔树的一个特征是,其每个节点的构造由以下方程式控制:
其中H是加密哈希函数。
图4中示出了根据这些方程式构建的二进制默克尔树。从图中可以看出,i=j情况对应于叶节点,该叶节点仅仅是数据Di的对应第i分组的哈希。i≠j情况对应于内部节点或父节点,其通过递归地哈希和级联子节点直到找到一个父节点(默克尔根)而生成。
例如,节点N(0,3)由四个数据包D0,…,D3构造为
N(0,3)=H(N(0,1)||N(2,3))
=[H(N(0,0)||N(1,1))||H(N(2,2)||N(3,3))]
=[H(H(D0)||H(D1))||H(H(D2)||H(D3))]。
树的深度M被定义为树中节点的最低级别,节点的深度m是节点所在的层级。例如,mroot=0且mleaf=M,其中在错误!未找到引用源中,M=3。
对于比特币和一些其他区块链中的默克尔树,哈希函数是双重SHA256,即应用标准哈希函数SHA-256两次:H(x)=SHA256(SHA256(x))。
默克尔证明
默克尔树的主要功能是验证某个数据包Di是N个数据包的列表或集合的成员。该验证机制称为默克尔证明,涉及为给定的数据包Di和默克尔根R获取一组称为默克尔路径的哈希。数据包的默克尔证明只是通过反复哈希和级联的方式重建根R所需的最小哈希列表,通常称为“认证证明”。
如果证明者知道所有分组D0,…,DN-1及其顺序,则可以简单地执行存在证明。然而,这确实需要比默克尔证明大得多的存储开销,并且需要整个数据集可供证明者使用。
使用默克尔证明和使用整个列表的比较如下表所示,其中使用了二进制默克尔树,并假设数据块的数量N正好等于2的整数幂。
下表示出了默克尔树中叶节点的数量与默克尔证明所需的哈希数量(默克尔证明)之间的关系。
在这个简化场景中(其中数据包的数量等于叶节点的数量),已发现,计算默克尔证明所需的哈希值的数量以对数方式缩放。显然,计算涉及log2N个哈希的默克尔证明比存储N个数据哈希并计算显示证明要高效和实用得多。
方法
如果给定默克尔根R,则希望证明数据块D0属于由R表示的有序列表可以按如下所述执行默克尔证明:
i.从可信源获取默克尔根R。
ii.从源获取默克尔证明Γ。在这种情况下,Γ是哈希的集合:
Γ={N(1,1),N(2,3),N(4,7)}。
iii.使用D1和Γ按如下所述计算默克尔证明:
a.对数据块进行哈希处理以得到:
N(0,0)=H(D0)。
b.与N(1,1)级联并进行哈希处理以得到:
N(0,1)=H(N(0,0)||N(1,1))。
c.与N(2,3)级联并进行哈希处理以得到:
N(0,3)=H(N(0,1)||N(2,3))。
d.与N(4,7)级联并进行哈希处理以获取根:
N(0,7)=H(N(0,3)||N(4,7)),
R′=N(0,7)。
e.将计算得出的根R′与(i)中获取的根R进行比较:
1.如果R′=R,则确认树中存在D0,从而确认数据集
2.如果R′≠R,则证明失败,无法确认D0是的成员。/>
这是一种有效机制,可为作为由默克尔树及其根表示的数据集的一部分的某些数据提供存在证明。例如,如果数据D0对应于区块链事务,并且根R作为区块头的一部分公开可用,则可以快速证明该事务包含在该区块中。
图5错误!未找到引用源示出了作为示例性默克尔树的一部分验证存在D0的过程。这表明对给定区块D0和根R执行默克尔证明,仅使用必要的最少哈希值就可有效地“向上”遍历默克尔树。
构建默克尔证明所需的最少信息
在构建单叶的默克尔证明时,所需的最少信息为
1.叶的索引:叶在默克尔树的叶层中的位置。
2.哈希值的有序列表:计算默克尔根所需的哈希值。
为了阐明叶的索引的工作原理,请考虑图5所示的默克尔树。鲍勃知道树的根R,但不知道树的所有叶。D0的默克尔分支由一个索引0和三个哈希值(用圆圈圈出)组成。该索引用于指示所提供的哈希值应级联到所计算的哈希值的左侧还是右侧。
假设默克尔树具有N=2M个叶。给定层级0处的索引i,使得i0=i,b0=i0mod2,即
p0是索引为i0的叶节点的成对叶节点的索引,称为对,因为此类叶节点被级联和哈希处理,以在默克尔树中计算其父哈希节点(参见上文)。索引为p0的节点也称为“所提供的哈希”或“所需的数据”,因为其必须在计算i0叶节点的默克尔根时提供。
因此,可以在层级m定义,使得
bm=immod2
则所提供哈希的索引为
上面的方程式假定索引从0开始。
在本发明的上下文中,索引为i0的叶节点是目标事务的事务标识符。
存在证明–事务数据
图6A示出了用于实现本发明实施例的示例性***600。该***包括默克尔证明实体(或默克尔证明服务器(MPS))601。应当注意的是,术语“默克尔证明实体”仅用作被配置为执行本文中所描述的动作的实体的便利标签。类似地,术语“默克尔证明服务器”不一定意味着所描述的动作由服务器(即,专用或传统服务器单元或***,例如机架或数据中心)来执行,尽管这是一种可能的实现方式。此外,图中还示出了区块链节点104、请求方603和SPV客户端604。虽然仅示出了这些实体中的每个实体中的一个,但是应当理解的是,***600通常可以包括任意数量的这些实体中的每个实体。
MPS 601被配置为证明事务的特定数据项存在于区块链150上,即包括该组件的事务存在于区块链上。MPS 601被配置为存储一组事务。在一些示例中,MPS 601仅存储区块链上存储的事务的子集,即不存储整个区块链150。例如,MPS 601可以存储相关事务、与特定应用或服务相关的事务、包含特定锁定脚本、协议标志、公钥等的事务、包含媒体内容的事务等。在一些示例中,所有存储的事务具有某些共同之处,例如来自特定区块的所有事务、在特定时间之后或在两个时间之间(时间可以用Unix时间或区块高度测量)发布的所有事务、来自特定区块链节点104发布的一个或多个区块的所有事务等。或者,MPS 601可以存储完整的区块链,即所有发布的事务。
MPS 601不是区块链节点104。也就是说,MPS 601不是挖矿节点或“矿工”。MPS 601可以由区块链节点操作或连接到区块链节点,但是MPS 601本身不执行以下操作:核实事务;执行工作证明;构建区块;发布区块;强制遵循共识规则等。
MPS 601被配置为获取目标事务的目标数据项,即事务的数据项或与事务相关联的数据项。例如,***600可以包括一个或多个请求方603。请求方603可以向MPS 601发送目标数据项,作为对包含目标数据项的事务的默克尔证明的请求的一部分。在一些示例中,仅将向MPS 601发送目标数据项视为对默克尔证明的请求。
MPS 601被配置为获取目标事务。该目标事务可以从存储器中获取(即,所存储的一组事务包含目标事务)。例如,MPS 601可以基于目标数据项来识别该目标事务,例如用于搜索包括目标数据项的事务。作为特定示例,目标数据项可以是事务标识符(TxID)。TxID唯一地识别事务。MPS 601可以使用TxID来执行查找。作为另一示例,目标数据项可以是公钥或公钥哈希。MPS 6021可以在事务的输入和/或输出中搜索包括公钥或公钥哈希的事务。或者,可以向MPS 601提供目标事务以及目标数据项。
在获取目标事务之后,MPS 601还被配置为获取目标事务的“目标默克尔证明”,即用于证明目标事务存在于区块链上的默克尔证明。目标默克尔证明包括至少一组有序的哈希值。该组有序的哈希值中哈希值的数量基于默克尔树中叶的数量,即包含目标事务的区块151中事务的数量。默克尔证明还可以包括叶的索引,该索引指示该组有序的哈希值中的第一哈希值是应级联到目标TxID(即,目标事务的TxID)的左侧还是右侧。
MPS 601可以为每个所存储的事务存储相应的默克尔证明。也就是说,目标默克尔证明可以存储,以便稍后在需要时使用。
获取目标默克尔证明包括:从存储器中提取目标默克尔证明或即时计算目标默克尔证明。例如,MPS 601可以为一个或多个事务预先计算默克尔证明,或者响应于从请求方接收到请求而计算默克尔证明。应当注意的是,为了计算目标默克尔证明,需要给定区块的所有事务,从而可以生成默克尔树。MPS 601可以获取完整的事务区块,计算该区块的默克尔树,然后修剪不需要的事务。或者,MPS 601可以从不同的源获取默克尔树。然后,MPS 601可以存储默克尔树,或者仅存储相关事务的默克尔证明。当获取目标事务时,MPS 601从存储器中查找对应的默克尔证明(每个默克尔证明可以与存储器中的相应事务或TxID相关联)。
目标默克尔证明可以包括对应的默克尔树的一个或多个内部哈希或内部节点。在这种情况下,有用的是向请求方提供此类内部哈希的索引,使得请求方知道是将先前哈希(例如,目标TxID)级联到内部哈希的左侧还是右侧。因此,当提取目标默克尔证明时,MPS601使用叶哈希的索引(即,目标事务的TxID)来计算目标默克尔证明中内部哈希的索引。该MPS需要计算这些索引,以便从所存储的树中提取默克尔证据,即MPS具有所存储的树,并且叶索引允许其确定从树中挑选哪些内部节点以提取正确的默克尔证明。
应当注意的是,至少在一些示例中,MPS 601只需要计算目标TxID的索引。该单个索引可能足以确定所需的内部哈希。
除用于存储每个事务的相应默克尔证明的选项之外,该MPS可以预先计算并存储一个或多个默克尔树。每个默克尔树包括所存储的一组TxID、一组内部哈希值(或内部节点)和默克尔根中的多项。在该示例中,获取目标默克尔证明包括:使用所计算的目标TxID的索引,来从包含目标TxID的默克尔树中提取目标默克尔证明(即,所需的哈希值)。
作为另一示例,MPS 601可以响应于获取目标TxID来计算目标默克尔证明。也就是说,MPS 601可以使用所存储的一组TxID中的一个或多个TxID来计算目标默克尔证明(例如,通过计算完整的默克尔树并使用目标TxID的索引来提取所需的哈希值)。应当注意的是,该方法要求MPS 601将来自包括目标事务的区块151的所有事务存储在存储器中。
用于获取目标默克尔证明的另一选项是MPS 601从不同实体(例如,区块链节点104或SPV客户端应用)接收并存储一个或多个默克尔证明。根据为该实体提供的信任级别,MPS 601可以验证所获取的一个或多个默克尔证明已正确地计算出。例如,可以根据包含相应事务的相应区块的相应区块头来验证默克尔证明,该默克尔证明旨在用于该相应事务。在这种情况下,MPS 601可以选择仅存储已验证的所接收默克尔证明。
MPS 601还被配置为输出目标默克尔证明。例如,可以将目标默克尔证明直接传输给请求方603。或者,可以在网页等上发布目标默克尔证明。目标默克尔证明可以用作目标事务存在于区块链上的证明。MPS 601还可以将目标事务输出给请求方603。如果请求方603能够访问目标事务,则不必执行此操作。
图8示出了可由MPS 601执行的示例性方法800。在步骤801中,MPS 601存储一组选定事务(例如,具有至少一个未花费事务输出的事务)。在步骤802中,MPS 601获取目标数据项(例如,协议标志、公钥等)。在步骤803中,MPS 601获取包括目标数据项的一个或多个目标事务。在步骤804中,MPS 601获取一个或多个默克尔证明,例如每个目标事务的一个默克尔证明。在步骤805中,MPS 601输出一个或多个默克尔证明。
区块链150的每个区块151包括相应的区块头。MPS 601可以存储一个或多个区块头。例如,MPS 601可以存储每个所公布的区块151的区块头。区块头可以存储在有序列表中。区报头的顺序可以与区块链150中的对应区块151的顺序匹配。在一些示例中,来自给定区块151的事务可以与该区块151的区块头相关联地存储。在一些示例中,MPS 601可以仅存储区块头的一个或多个而非全部数据字段,而不是存储完整的区块头。例如,MPS 601可以仅存储包含在区块头内的默克尔根。或者,MPS 601可以存储包含在区块头内的默克尔根和先前哈希(存储在区块头n中的先前哈希等于第n-1个区块头)。
在一些示例中,MPS 601还可以从包含目标事务的区块151的区块头输出默克尔根。默克尔根可以作为包含默克尔根的区块头的一部分输出,或者单独输出,亦或与区块头的一个或多个其他数据字段(例如,先前区块哈希)组合输出。默克尔根可以直接输出给请求方603或以其他方式发布。
MPS 601可以基于在其中发布对应事务的区块来成组存储事务。也就是说,来自区块n的事务可以存储在一个组中,来自区块n-1的事务可以存储在不同的组中,以此类推。每个组中的事务可以存储在有序列表中,其中列表中事务的顺序与给定区块151中事务的顺序匹配。应当注意的是,所存储事务的列表可以包含比对应区块151更少的事务,因为MPS601不存储完整的区块链150。
MPS 601可以从区块链网络106(例如,从区块链节点104)获取部分或全部所存储的事务。可以从单个区块链节点104获取全部事务。或者,可以从多个节点获取事务,例如,从一个区块链节点104获取一些事务,从其他区块链节点104获取一些事务,以此类推。这同样适用于区块头。也就是说,可以从单个区块链节点104或从多个节点104获取部分或全部所存储的区块头(或仅获取所存储的默克尔根和/或先前区块哈希)。在一些示例中,MPS601可以从来自相同区块链节点104的给定区块(以及可选地,该区块的区块头)获取全部事务(或至少此类相关事务)。MPS 601可以从节点104获取完整的事务区块,然后过滤或修剪事务区块以获取此类相关事务区块(例如,包含特定数据字段或数据项的事务区块)。剩余事务由该MPS存储。
在一些示例中,MPS 601可以通过从多个节点104获取相同的事务和/或区块头来验证部分或全部所获取的事务和/或区块头。
也不排除以下情况,即MPS 601可以从区块链节点104之外的实体获取一个或多个所存储的事务。例如,MPS 601可以从应用程序提供者获取事务,例如,该应用程序提供者将与对应的应用程序相关的事务发送给MPS 601。作为另一示例,实体(例如,服务提供者)可以将该实体生成的全部事务发送给MPS 601。
在一些示例中,MPS 601可以请求与相应TxID对应的原始事务数据。也就是说,MPS601可以存储一个或多个TxID,然后从不同的实体(例如,区块链节点104或SPV客户端)获取一个或多个对应的事务。一旦MPS 601获取原始事务数据,它就可以删除TxID,因为它们可以从原始数据中重新生成。
类似地,MPS 601可以从区块链节点104之外的实体获取一个或多个区块头。例如,MPS 601可以从一个或多个SPV客户端获取区块头。
在一些示例中,MPS 601可以存储每个区块的Coinbase事务(请记住,每个区块只有一个Coinbase事务)。在这些示例中,MPS 601可以获取在与目标事务相同的区块中发布的Coinbase事务的默克尔证明。然后,例如,MPS 601可以将Coinbase事务的默克尔证明以及Coinbase事务本身一起输出给请求方603。这可以供请求方603用于验证目标默克尔证明是否具有正确的长度。例如,如果Coinbase事务的默克尔证明的长度为十(即,十个哈希值),则目标默克尔证明的长度也应当为十。
在一些示例中,MPS 601存储的事务可以包括一个或多个事务链。目标事务的默克尔证明可以用于证明存在一个或多个父事务,并且因此证明存在此类事务中的数据。在这种情况下,如果目标事务是子事务,则目标默克尔证明可证明每个父事务已发布在区块链150上(如果每个父事务均未发布在区块链150上,则子事务不会发布在区块链150上)。通常,事务链中最近发布的事务的默克尔证明可证明所有其他事务存在于该链中。例如,MPS601可以将事务链中的每个事务连同目标事务的目标默克尔证明一起直接输出给用户。
在MPS 601存储所存储事务的默克尔证明的示例中,为了减少存储空间,MPS 601可以仅存储目标事务的默克尔证明,而不存储事务链中的其他事务。
在一些情况下,目标数据项可以存在于多个事务中。也就是说,多个事务可以存在于区块链150上。如果MPS 601识别包含目标数据项的多个事务,则MPS 601可以获取并输出每个所识别的事务的相应默克尔证明。MPS 601还可以输出每个所识别的事务。或者,如上所述,如果每个所识别的事务形成事务链,则MPS 601可以输出每个所识别的事务,并且仅输出事务中的最近一个事务(即,目标事务)的默克尔证明。
MPS 601采用计算装置的形式(例如,与图1所示类似),该计算装置包括一个或多个用户终端,例如台式电脑、笔记本电脑、平板电脑、智能电话、智能手表等可穿戴智能设备或汽车等车辆的板载电脑等。附加地或替代地,该计算装置可以包括服务器。本文中的服务器是指可以包括位于一个或多个地理位置处的一个或多个物理服务器单元的逻辑实体。在需要的情况下,分布式或“云”计算技术本身在本领域中是已知的。服务器的一个或多个用户终端和/或一个或多个服务器单元可以经由分组交换网络彼此连接,例如,该分组交换网络可以包括互联网等广域网、3GPP网络等移动蜂窝网络、以太网等有线局域网(LAN),或者Wi-Fi、线程或6LoWPAN网络等无线LAN。该计算装置包括控制器和接口。该控制器可操作地耦合到接口204。该控制器被配置为执行归因于该MPS的动作。该接口被配置为发送和接收数据,例如事务、区块头、默克尔证明等。
控制器和接口中的每一个可以软件代码的形式实现,该软件代码包含在计算机可读存储器上并在处理装置上运行,该处理装置包括CPU等一个或多个处理器、GPU等工作加速器协处理器和/或在位于一个或多个地理位置处的一个或多个计算机终端或单元上实现的其他专用处理器。在其上存储代码的存储器可以包括采用一种或多种存储介质(例如,电子或磁介质)的一个或多个存储器设备,该存储器设备也在位于一个或多个地理位置处的一个或多个计算机终端或单元上实现。在实施例中,控制器和/或接口可以在服务器上实现。或者,这些数据项中的一个或两个的相应实例可以在一个或多个用户终端中的一个、部分或全部用户终端中的每个用户终端上部分地或甚至全部地实现。在其他示例中,上述数据项的功能可以在用户终端和服务器的任意组合之间拆分。还应当注意的是,在需要的情况下,分布式计算技术本身在本领域中是已知的。也不排除以下情况,即这些数据项中的一个或多个数据项可以在专用硬件中实现。
现在将描述请求方603。请求方603被配置为向MPS 601发送对默克尔证明的请求。请求方603可以向MPS 601发送目标数据项和/或目标事务。作为响应,该请求方被配置为接收或以其他方式获取目标默克尔证明。请求方603可以使用目标默克尔证明来证明包括目标数据项的目标事务存在于区块链150上。例如,请求方603可以将目标默克尔证明连同目标事务等一起发送给第二接收方。请求方603还可以基于目标事务将默克尔树的默克尔根(例如,作为区块头的一部分)发送给第二接收方。默克尔根可以从MPS 601获取。请求方603可以是(或操作)SPV客户端。SPV客户端是被配置为执行SPV方法的客户端应用程序。例如,有关详细信息,请参阅https://wiki.bitcoinsv.io/index.php/Simplified_Payment_Verification。也就是说,SPV客户端(例如,由花费者操作)可以使用目标默克尔证明来执行SPV方法,即通过向另一方(例如,接收者)提供目标默克尔证明。在这种情况下,目标事务可以包括UTXO(目标数据项),其锁定到花费者,并且由包括锁定到接收者的UTXO的花费事务来引用。
简而言之,为了花费UTXO,使用SPV钱包的发送者将向接收者传递以下信息:
1.包含UTXO作为输出的事务Tx0;
2.Tx0的默克尔证明;
3.包含从默克尔证明(或其标识符,例如区块高度)导出的默克尔根的区块头;
4.花费UTXO的事务Tx1。
为了核实该信息,接收者根据Tx0的默克尔证明计算默克尔根。然后,接收者将其与区块头中指定的默克尔根进行比较。如果两者相同,则接收者接受Tx0在区块链中。
请求方603可以采用爱丽丝103a或鲍勃103b的形式。
现在,返回MPS 601。MPS 601可以称为辅助MPS(secondary MPS),也可以称为“完整性MPS(integrity MPS)”。在这些实施例中,完整性MPS 601可以从主MPS(primary MPS)或“通用MPS(general MPS)”602获取目标默克尔证明。通用MPS是被配置为存储相应事务的一组事务标识符的实体。通用MPS 602不存储完整的区块链数据,即每个完整的已发布事务。通用MPS 602被配置为执行以下操作:获取目标事务的目标事务标识符;获取目标区块链事务的目标默克尔证明,其中目标默克尔证明基于所存储的一组事务标识符中的一个或多个事务标识符;以及输出目标默克尔证明。因此,完整性MPS 601可以向通用MPS 602发送目标事务或目标事务TxID,并且反过来接收目标默克尔证明。
图6B示出了完整性MPS 601与通用MPS 602之间交互的示例性***600B。如图所示,***600B包括一个或多个区块链节点104、完整性MPS 601、通用MPS 602、请求方603和SPV客户端604。***600B可以包括多个请求方和/或SPV客户端。
从通用MPS 602开始,它主要涉及为给定事务标识符(TxID)提供默克尔证明。通用MPS 602可以将默克尔证明输出给请求方603或完整性MPS 601。例如,请求方603或完整性MPS 601可以向通用MPS 602发送TxID,并且通用MPS 602反过来提供默克尔证明。通用MPS602可以从一个或多个源获取产生默克尔证明所需的数据。例如,可以从区块链节点104获取默克尔证明本身。或者,通用MPS 602可以从区块链节点104或从SPV客户端604获取TxID和一个或多个对应的区块头。通用MPS 602可以使用TxID和对应的区块头来计算默克尔证明。
关于完整性MPS 601,它主要涉及向请求方603提供默克尔证明。完整性MPS 601可以从请求方603接收事务组件(或事务数据字段或数据项),并且反过来提供包含该组件的事务的默克尔证明。请求方603转而可以将事务和默克尔证明发送给另一方,例如SPV客户端604。完整性MPS 601可以从区块链节点104和/或SPV客户端604获取事务。完整性MPS 601还可以从区块链节点104和/或SPV客户端604获取区块头,以用作默克尔证明的一部分,尽管在有足够数据可用的情况下,区块头可以由完整性MPS计算。
通常,完整性MPS 601可以从通用MPS 602获取多个默克尔证明,例如每个所存储的事务一个默克尔证明。例如,当完整性MPS接收并存储新事务时,完整性MPS 601可以向通用MPS 602发送对新事务的默克尔证明的请求。
现在将描述本发明的一些实施例的示例性实现方式。
通用MPS
通用MPS 602充当专用服务器以向接收方(例如,用户)提供默克尔证明。也就是说,通用MPS 602是服务器,如果给定事务发布在区块链上,则该服务器提供该事务或事务ID的默克尔证明。通用MPS 602不存储完整的事务数据。这可以视为对存储默克尔树的区块链网络中SPV客户端的补充。更准确地说,通用MPS具有以下存储要求列表:
1.表示具有最多工作证明的链的区块头的有序列表(可选要求)
2.每个区块头的事务ID的有序列表(核心要求)
3.为每个区块头预先计算的默克尔树,其中默克尔根与区块头中指定的一个默克尔根匹配(可选要求)
4.每个区块中Coinbase事务的原始数据或区块中每个区块头的事务的任何原始数据(可选要求)
第一项要求旨在确保通用MPS 602的数据完整性。区块头中的默克尔根可以用作对事务ID列表的完整性检查。也就是说,当形成默克尔树的叶时,区块头可以用于检查来自给定区块的TxID在区块头中给出默克尔根。例如,如果TxID可信,或者如果通用MPS 602可安全访问可信SPV客户端或任何实体,该实体受信任地以最多工作证明来存储链的区块头,则可以摒弃第一项要求。
第二项要求旨在按照默克尔叶在默克尔树中出现的顺序来提供默克尔叶,以便可以重建默克尔树。应当注意的是,Coinbase事务ID始终是列表中的第一叶或第一哈希。叶的顺序由构建获胜区块的区块链节点确定。在比特币SV中,该顺序应反映拓扑顺序和先见规则。
第三项要求提供在计算与存储之间进行权衡的选项。图7示出了存储要求,其中实线框是必需的(在一些示例中),虚线框是可选的。应当注意的是,区块头包含所示区块头的附加字段,但是对于默克尔证明,通常仅需根哈希。可以使用先前哈希为根哈希建立索引。关键在于,通用MPS 602不需要存储内部节点。
第四项要求旨在提供默克尔树的深度证明。这是可由通用MPS 602向其用户提供的额外服务。由于向任何验证者呈现事务的原始数据,任何验证者都可以确信其默克尔证明中的第一哈希实际上是叶,因为对于并非充当叶的给定哈希值,构建有意义的事务在计算上是不可行的。此外,由于默克尔证明的长度意味着默克尔树的深度,因此来自同一树的所有默克尔证明具有相同的长度。当用户不拥有相关事务的原始数据时,该服务尤其有用。
给定事务ID,例如TxID1,通用MPS 602遍历事务ID的有序列表。如果通用MPS 602发现TxID1,则会构建或提取TxID1的默克尔证明并输出该默克尔证明。否则,通用MPS 602会输出相关内容,例如“找不到事务”。给定事务的原始数据,通用MPS 602可以对数据进行哈希处理,以获取对应的事务ID并如上所述继续执行操作。
当新区块发布后,通用MPS 602会获取以下信息:
1.新区块头;
2.新区块的事务ID的有序列表;以及
3.原始Coinbase事务。
可选地,通用MPS 602可以检查以下各项:
1.新区块头具有有效的工作证明;
2.根据事务ID计算的默克尔根等于区块头中的默克尔根;以及
3.Coinbase事务的哈希等于叶中的第一元素。
应当注意的是,服务器不需要获取原始事务或对事务运行签名验证。
下面描述了提供默克尔树的深度是一项有价值服务的原因。SPV客户端将事务ID和默克尔证明作为输入,并且如果默克尔根与区块头中的一个区块头中的默克尔根匹配,则输出True,否则输出False。然而,由于缺少必要信息,这种验证不会检查默克尔证明的长度是否与默克尔树的长度匹配。在某些情况下,攻击者可以提交缩短的默克尔证明,以试图证明存在并不存在的事务ID。这种缩短的默克尔证明可以通过移除叶或后续全部哈希来获取。
作为默克尔证明提供者的通用MPS 602最适合提供验证默克尔证明的长度所需的信息。通用MPS 602提供Coinbase事务的原始数据和其默克尔证明,而不是显式地提供默克尔树的深度。伪造原始事务数据和默克尔证明在计算上是不可行的。因此,这用作默克尔树的深度证明。了解树的深度可以减少上述关键漏洞。应当注意的是,如果SPV提供有相关事务的原始数据和默克尔证明,则它是安全的,不会遭受该漏洞的攻击。如果SPV不具有相关事务的原始数据,可以使用Coinbase事务的原始数据和其默克尔证明,来建立默克尔树的深度或相对于该默克尔树的默克尔证明的正确长度。
理论上,该漏洞还可以用于欺骗通用MPS 602接受叶或任何后续层级被完全移除的默克尔树。然而,通用MPS 602可以连接到多个区块链节点104,以确保所接收信息的一致性和正确性。此外,通用MPS 602还可以选择下载Coinbase事务的原始数据,以验证新区块的默克尔树的深度。
通用MPS 602有时可能不得不处理竞争区块、重组和孤立区块,在同一时间发现同一区块高度的多个区块时会发生这种情况。幸运的是,这种情况不会发生,除非在最近的区块头中,但是这种情况很少发生。区块链150通常在一个或两个区块之后收敛到竞争链中的一个竞争链。因此,当通用MPS 602在同一高度接收多个区块151后,它将保留所有此类区块,直到区块链网络收敛到具有最多工作证明的链。
仅限TxID MPS的局限性
所述通用MPS 602具有一些局限性。给定未发布事务,例如TxIDpayment,通用MPS602将不能验证在输入中引用的输出点是否存在,这是因为输出点是事务ID和索引的级联。通用MPS 602能够确定事务ID是否存在,但它不具有关于该事务具有的输出数量或该输出是否可花费的信息。解决这一问题的一种方法是,将在TxIDpayment中引用的事务的原始数据作为输入的一部分提供给通用MPS 602。另一种方法是,通用MPS 602存储未花费事务的原始数据。(未花费事务在这里是指具有至少一个未花费的可花费输出的事务。)
应当注意的是,如果通用MPS 602仅存储事务ID和对应的索引,则通用MPS 602无法验证或证明索引未被篡改。通用MPS 602需要完整的原始数据,以便验证或证明索引的完整性。
此外,它将无法向用户提供对事务内特定数据元素的搜索,例如锁定脚本或标志。因此,它将无法支持使用布隆过滤器等的用户,因为他们通常基于事务中包括的锁定脚本和公钥来过滤事务。
这导致需要一种能够提供更细粒度信息的MPS,其称为完整性MPS 601。完整性MPS601将存储一些事务的原始数据。应当注意的是,如果用户给出完整的事务,则可以使用通用MPS 602来证明所发布事务的完整性。可以使用完整性MPS 601,通过存储全部相关事务来证明从所发布事务中提取的一些数据的完整性。用户不需要提供完整的事务。
完整性MPS
完整性MPS 601存储一组相关事务的原始事务和其对应的默克尔证明。对于关于该组中事务的查询,该服务器可以提供原始事务及其默克尔证明作为其完整性的证明。该服务器还允许搜索部分事务或事务内容中的数据元素。可以基于数据应用程序(例如,Weather SV、Tokenized、Metanet或任何其他数据协议)甚至数据字符串(例如,锁定脚本、公钥、输出点等)来确定相关事务。因此,可以存在仅用于Weather SV应用程序的完整性MPS,其被配置为存储仅携带Weather SV的事务。
一组相关原始事务被传递到完整性MPS 601,并且在发布的情况下会持续存在于服务器上。完整性MPS 601可以视为网关,或者可以访问用于特定应用程序事务的网关。当区块链***扩展到百万兆字节区块时,这将是维护完整性MPS 601的最高效方式。对于其他情况,例如完全去中心化的对等数据应用程序,必须采用下载完整的事务区块的机制,并修剪不相关事务,或者使用布隆过滤器过滤比特币改进提案37(BIP37)中的事务。
在操作过程中
在一些实施例中,在默克尔树中维护相关原始事务及其默克尔证明的完整性MPS601执行以下步骤:
步骤1:获取相关原始事务。
步骤2:对原始事务进行哈希处理以获取事务ID。
步骤3:查询通用MPS 602以获取默克尔证明。
步骤4:如果事务未发布在区块中,请等待10分钟,然后重试。
可以用下载和修剪机制来代替对步骤3中的通用MPS 602的依赖,尽管这会导致效率低下。可以在预定义时间限制之后丢弃步骤4中的未发布事务,以避免拥塞。该限制可以根据应用的不同而变化。
示例性用例
WeatherSV(WSV)是一款允许用户将天气数据记录在比特币分类帐上的应用程序。每个位置具有唯一的公钥(即,唯一的锁定脚本)。这具有以下特征:
●激活的位置可以几乎每隔1个小时开始上传一次WSV事务,其中包含该位置的实时天气测量。
●每个WSV事务具有一个输入和两个输出,请参见错误!未找到引用源。
●这些输出包括
○0聪的不可花费输出,其具有OP_FALSE OP_RETURN,后跟以下各项的级联:
■对所有WSV事务恒定的标志,flagWSV
■该位置的天气预报,Weather data
○发送到该位置的唯一公钥地址的可花费输出。该地址称为信道。
每个位置具有自己的地址。
●输入将花费该位置的上一个WSV事务的可花费输出
应当注意的是,这意味着每个位置都会重用公钥
上表示出了信道A的WSV事务的示例。事务具有输出点它具有不可花费输出,该输出包含OP_RETURN,后跟WSV应用程序标志和与信道A相关联的位置的天气数据的级联。
到目前为止,该应用程序具有3.27×107个事务的总广播数和6240个信道。2020年3月,WSV事务数量约占BSV区块链上事务数量的27%。
可以设计用于Weather SV的完整性MPS 601以实现以下各项:
●当使用WSV事务或从WSV事务部分提取的数据进行查询时,完整性MPS 601可以提供具有完整性证明的全部数据。
应当注意的是,部分提取的数据可以是事务的OP_RETURN有效载荷中的数据字符串,也可以是表示位置的公共地址,或者仅仅是事务ID。
观察到单个位置的WSV事务是事务链后,可以修剪父事务的默克尔证明。例如,如果具有由10个事务TX1,TX2,…,TX10组成的链,只需保留TX10的默克尔证明。然而,如果要求完整性MPS提供TX1的完整性证明,则必须提供TX2,TX3,…,TX10的所有原始数据和TX10的默克尔证明。这是带宽与存储之间的权衡。为了平衡两者,可以修剪该链中的每个其他事务。也就是说,可以修剪TX1,TX3,…,TX9的默克尔证明。通过这种方式,当使用该链中的任何事务进行查询时,完整性MPS将在最坏情况下提供两个原始事务和一个默克尔证明。
通过检查以下各项来识别WSV事务的真实性:
●输出点(事务输入)是上一个WSV事务的可花费输出。
●事务输入和可花费输出两者用于同一WSV钱包地址。
因此,真实的事务是指只能由实体生成的事务,该实体知道该特定天气SV地址的锁定脚本的公钥的秘密密钥。
对于每个天气地址(即,天气信道或锁定脚本),MPS 601保留以下各项:
●最近挖掘的事务及其相关联的默克尔树
●与该地址相关联的全部已花费事务的原始事务数据。在WSV协议的情况下,不需要为先前花费的事务保存默克尔树。
如图9所示,用于WSV事务的完整性MPS 601的实例将为每个位置存储以下各项:
●其相关联的地址,以及每个地址;
●原始事务TxIDi,其具有未花费的可花费输出TxIDi||1;
●与TxIDi相关联的区块头;
●该区块头的默克尔证明;
●ID为TxIDi-1,TxIDi-2,…,TxIDi-r的原始父事务
父事务不需要保存其默克尔证明。保留这些父事务的原始数据事务格式,使得它们始终链接到当前TxIDi。
存储空间节省
对于当前区块大小、速率等,至少需要最后6个区块中的每个区块的默克尔树,其大小约为128千字节(Kb)x6=768Kb。30天内每个信道的原始数据事务的大小当前为300x30x24=0.2Mb。对于全部6240个信道,仅需1.26Gb的存储空间。然而,最近一个月内区块链的存储空间仅为4.8Gb,并且完整的区块链的存储空间为200Gb。总而言之,用于WSV应用程序的完整性MPS 601在同一时间段将仅需存储区块链的四分之一。
当数据应用程序生成大量事务时,可以通过使多个完整性MPS 601对这些事务进行分区来并行处理该过程。基于区块高度的分区可以是一种绝佳的解决方案。然后,如果区块高度未知,则向所有MPS发送查询。权衡是指在大数据集中执行一次查找与在多个更小的数据集中执行多次查找之间的权衡。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络106、比特币区块链150和比特币节点104进行了描述。然而,应当理解的是,比特币区块链是区块链150的一个特定示例,并且上述描述通常可以应用于任何区块链。也就是说,本发明决不限于比特币区块链。更一般地,以上对比特币网络106、比特币区块链150和比特币节点104的任何引用可以分别参考区块链网络106、区块链150和区块链节点104来替换。区块链、区块链网络和/或区块链节点可以共享如上所述的比特币区块链150、比特币网络106和比特币节点104的部分或全部所述特性。
在本发明的优选实施例中,区块链网络106是比特币网络,并且比特币节点104至少执行对区块链150的区块151进行创建、发布、传播和存储中的所有所述功能。不排除可能存在仅执行这些功能中的一个或部分功能但不是全部功能的其它网络实体(或网络元件)。也就是说,网络实体可以执行传播和/或存储区块的功能,而不创建和发布区块(请记住,这些实体不被认为是优选的比特币网络106的节点)。
在本发明的另一些实施例中,区块链网络106可以不是比特币网络。在这些实施例中,不排除节点可以执行对区块链150的区块151进行创建、发布、传播和存储中的至少一个或部分功能但不是所有功能。例如,在这些其它区块链网络上,“节点”可用于指被配置为创建和发布区块151但不存储和/或传播这些区块151到其它节点的网络实体。
甚至更通俗地说,上面对术语“比特币节点”104的任何引用可以用术语“网络实体”或“网络元件”代替,其中这样的实体/元件被配置为执行对区块进行创建、发布、传播和存储中的一些或全部角色。这种网络实体/元件的功能可以在硬件中实现,方法与上面参照区块链节点104所述的方式相同。
应当理解的是,上述实施例仅通过示例的方式进行描述。更通俗地说,可根据下述任何一个或多个语句提供一种方法、装置或程序。
语句1.一种证明区块链事务的数据项存在于区块链上的计算机实现的方法,其中所述方法由默克尔证明实体执行,所述默克尔证明实体被配置为存储相应区块链事务的事务标识符的集合但不向区块链网络发布新的区块链区块,并且其中所述方法包括:从请求方,获取目标区块链事务的目标数据项;获取所述目标区块链事务;获取所述目标区块链事务的目标默克尔证明,其中对应的目标默克尔根包含在所述区块链的区块内,并且其中获取所述目标默克尔证明包括:计算在对应的目标默克尔树的叶层内的所述目标区块链事务的目标事务标识符的索引;以及,至少输出所述目标默克尔证明,以供所述请求方将其用作:所述目标数据项作为所述目标区块链事务的一部分存在于所述区块链上的证明。
换句话说,所述方法证明包括所述目标数据项的区块链事务存在于所述区块链上。
在一些实施例中,多个区块链事务可以包括所述目标数据项。所述默克尔证明实体可以执行以下操作:获取所述多个目标事务;获取所述多个目标事务中的每个目标事务的相应目标默克尔证明;以及例如向所述请求方至少输出所述相应目标默克尔证明,以供所述请求方使用。所述默克尔证明实体还可以输出所述多个目标区块链事务中的每个目标区块链事务。
包含在所述区块链的所述区块内的所述默克尔根可以包括包含在所述区块链的所述区块的区块头内的默克尔根。
语句2.根据语句1所述的方法,所述方法包括:将所述索引输出给所述请求方。
语句3.根据语句2所述的方法,其中所述默克尔证明包括所述索引。
语句4.根据前述任一项语句所述的方法,其中所述默克尔证明实体不存储完整的区块链。
换句话说,所述一组区块链事务不包含在所述区块链上发布的每个事务。
语句5.根据前述任一项语句所述的方法,所述方法包括:输出所述目标区块链事务,以供所述请求方将其用作:所述目标数据项作为所述目标区块链事务的一部分存在于所述区块链上的证明。
语句6.根据前述任一项语句所述的方法,其中所存储的区块链事务集合是从一个或多个区块链节点获取的。
语句7.根据语句5所述的方法,所述方法包括:
从一个或多个区块链节点获取多个区块链事务;以及,
修剪和/或过滤所述多个区块链节点,以获取所存储的区块链事务的集合中的一个或多个区块链事务。
语句8.根据前述任一项语句所述的方法,其中所述存储的区块链事务集合中的一个或多个区块链事务是从服务提供者获取的,并且其中所存储的区块链事务的集合涉及由所述服务提供者提供的服务。
语句9.根据前述任一项语句所述的方法,其中所述的获取所述目标区块链事务包括:从所存储的区块链事务的集合中获取所述目标区块链事务。
例如,通过搜索包括所述目标数据项的区块链事务。
语句10.根据前述任一项语句所述的方法,其中所述的获取所述目标区块链事务包括:从所述请求方接收所述目标区块链事务。
语句11.根据前述任一项语句所述的方法,其中所述的获取所述目标默克尔证明包括:
将所述目标区块链事务或所述目标区块链事务的目标事务标识符发送给主默克尔证明实体,所述主默克尔证明实体被配置为存储相应区块链事务的事务标识符的集合;以及,
从所述主默克尔证明实体接收所述目标默克尔证明,其中所述目标默克尔证明是基于所存储的事务标识符的集合中的一个或多个事务标识符。
语句12.根据语句11所述的方法,其中所述目标默克尔证明是在从所述请求实体获取所述目标数据项之前获取到的。
语句13.根据语句11或12所述的方法,所述方法包括:获取所存储的区块链事务的集合中的每个区块链事务的相应默克尔证明。
语句14.根据前述任一项语句所述的方法,其中所述的获取所述目标默克尔证明包括:计算所述目标默克尔证明。
语句15.根据前述任一项语句所述的方法,其中所述的输出所述目标默克尔证明包括:将所述目标默克尔证明传输给所述请求方,和/或发布所述目标默克尔证明。
语句16.根据语句5或其任何从属语句所述的方法,其中所述的输出所述目标区块链事务包括:将所述目标区块链事务传输给所述请求方,和/或发布所述目标区块链事务。
语句17.根据前述任一项语句所述的方法,其中所存储的区块链事务的集合包括区块链事务的多个子集,其中区块链事务的每个子集来自所述区块链的相应区块。
事务标识符的每个子集可以存储在有序列表中,所述有序列表对应于存储在所述相应区块中的所述区块链事务的顺序。
语句18.根据语句17所述的方法,其中区块链事务的每个子集与所述区块链的所述相应区块的相应区块头相关联地存储。
所述相应区块头可以存储在有序列表中,所述有序列表对应于在所述区块链上发布的区块的顺序。
语句19.根据前述任一项语句所述的方法,其中从所述一个或多个区块链节点获取所述相应区块头。
可以从单个节点获取全部所述区块头。或者,可以从多个节点获取所述区块头,例如,可以从一个节点获取部分所述区块头,可以从其他节点获取部分所述区块头,以此类推。
在一些示例中,所述默克尔证明实体可以通过从所述多个节点获取所述相同的区块头来验证所述获取的区块头中的部分或全部区块头。
附加地或替代地,可以从一个或多个简单支付验证(SPV)客户端获取所述区块头中的部分或全部区块头。
语句20.根据语句17或其任何从属语句所述的方法,其中所述默克尔证明实体(为区块链事务的每个子集)存储生成区块链事务,所述生成区块链事务来自包含区块链事务的所述子集的所述相应区块。
语句21.根据语句20所述的方法,所述方法包括:
获取所述生成区块链事务的默克尔证明;以及,
至少输出所述默克尔证明,以供所述请求方将其用于证明所述目标默克尔证明的长度与所述对应的目标默克尔树的长度匹配。
语句22.根据语句21所述的方法,其中所述的输出所述默克尔证明包括:输出所述生成区块链事务。
语句23.根据前述任一项语句所述的方法,其中所述目标数据项包括以下各项中的至少一项:
所述目标区块链事务的事务标识符,
所述目标区块链事务的输入,
所述目标区块链事务的输出,
所述目标区块链事务的输入的数据字段,和/或,
所述目标区块链事务的输出的数据字段。
语句24.根据语句23所述的方法,其中所述目标区块链事务的所述输入和/或所述输出的所述数据字段包括以下各项中的至少一项:区块链地址、公钥、协议标志、锁定脚本、和/或媒体内容。
语句25.根据前述任一项语句所述的方法,其中所存储的区块链事务的集合包括区块链事务链,并且其中所述目标区块链是所述区块链事务链中最近的一个区块链事务。
语句26.根据语句25所述的方法,所述方法包括:输出所述区块链事务链中的每个事务,以供所述请求方将其用作所述区块链事务链中的每个事务存在于所述区块链上的证明。
语句27.根据语句25或26所述的方法,所述方法包括:仅存储所述目标默克尔证明而不存储所述区块链事务链中的任何其他事务的所述默克尔证明。
语句28.根据前述任一项语句所述的方法,其中所述请求方是终端用户。
语句29.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项语句所述的方法。
语句30.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项语句所述的方法。
Claims (30)
1.一种证明区块链事务的数据项存在于区块链上的计算机实现的方法,其中所述方法由默克尔证明实体执行,所述默克尔证明实体被配置为存储相应区块链事务的事务标识符的集合但不向区块链网络发布新的区块链区块,并且其中所述方法包括:
从请求方,获取目标区块链事务的目标数据项;
获取所述目标区块链事务;
获取所述目标区块链事务的目标默克尔证明,其中对应的目标默克尔根包含在所述区块链的区块内,并且其中获取所述目标默克尔证明包括:计算所述目标区块链事务的目标事务标识符在对应的目标默克尔树的叶层内的索引;以及
至少输出所述目标默克尔证明,以供所述请求方用作所述目标数据项作为所述目标区块链事务的一部分存在于所述区块链上的证明。
2.根据权利要求1所述的方法,所述方法包括:将所述索引输出给所述请求方。
3.根据权利要求2所述的方法,其中所述默克尔证明包括所述索引。
4.根据前述任一项权利要求所述的方法,其中所述默克尔证明实体不存储完整的区块链。
5.根据前述任一项权利要求所述的方法,所述方法包括:输出所述目标区块链事务,以供所述请求方用作所述目标数据项作为所述目标区块链事务的一部分存在于所述区块链上的证明。
6.根据前述任一项权利要求所述的方法,其中从一个或多个区块链节点获取所存储的区块链事务的集合。
7.根据权利要求5所述的方法,所述方法包括:
从一个或多个区块链节点获取多个区块链事务;以及
修剪和/或过滤所述多个区块链节点,以获取所存储的区块链事务的集合中的一个或多个区块链事务。
8.根据前述任一项权利要求所述的方法,其中从服务提供者获取所存储的区块链事务的集合中的一个或多个区块链事务,并且其中所存储的区块链事务的集合涉及由所述服务提供者提供的服务。
9.根据前述任一项权利要求所述的方法,其中所述的获取所述目标区块链事务包括:从所存储的区块链事务的集合中获取所述目标区块链事务。
10.根据前述任一项权利要求所述的方法,其中所述的获取所述目标区块链事务包括:从所述请求方接收所述目标区块链事务。
11.根据前述任一项权利要求所述的方法,其中所述的获取所述目标默克尔证明包括:
将所述目标区块链事务或所述目标区块链事务的目标事务标识符发送给主默克尔证明实体,所述主默克尔证明实体被配置为存储相应区块链事务的事务标识符的集合;以及
从所述主默克尔证明实体接收所述目标默克尔证明,其中所述目标默克尔证明是基于所存储的事务标识符的集合中的一个或多个事务标识符。
12.根据权利要求11所述的方法,其中在从所述请求实体获取所述目标数据项之前,获取所述目标默克尔证明。
13.根据权利要求11或12所述的方法,所述方法包括:获取所存储的区块链事务的集合中的每个区块链事务的相应默克尔证明。
14.根据前述任一项权利要求所述的方法,其中所述的获取所述目标默克尔证明包括:计算所述目标默克尔证明。
15.根据前述任一项权利要求所述的方法,其中所述的输出所述目标默克尔证明包括:将所述目标默克尔证明传输给所述请求方,和/或发布所述目标默克尔证明。
16.根据权利要求5或其任何从属权利要求所述的方法,其中所述的输出所述目标区块链事务包括:将所述目标区块链事务传输给所述请求方,和/或发布所述目标区块链事务。
17.根据前述任一项权利要求所述的方法,其中所存储的区块链事务的集合包括区块链事务的多个子集,其中区块链事务的每个子集来自所述区块链的相应区块。
18.根据权利要求17所述的方法,其中区块链事务的每个子集与所述区块链的所述相应区块的相应区块头相关联地存储。
19.根据前述任一项权利要求所述的方法,其中从所述一个或多个区块链节点获取所述相应区块头。
20.根据权利要求17或其任何从属权利要求所述的方法,其中所述默克尔证明实体为区块链事务的每个子集存储生成区块链事务,所述生成区块链事务来自包含区块链事务的所述子集的所述相应区块。
21.根据权利要求20所述的方法,所述方法包括:
获取所述生成区块链事务的默克尔证明;以及
至少输出所述默克尔证明,以供所述请求方用于证明所述目标默克尔证明的长度与所述对应的目标默克尔树的长度匹配。
22.根据权利要求21所述的方法,其中所述的输出所述默克尔证明包括:输出所述生成区块链事务。
23.根据前述任一项权利要求所述的方法,其中所述目标数据项包括以下各项中的至少一项:
所述目标区块链事务的事务标识符,
所述目标区块链事务的输入,
所述目标区块链事务的输出,
所述目标区块链事务的输入的数据字段,和/或
所述目标区块链事务的输出的数据字段。
24.根据权利要求23所述的方法,其中所述目标区块链事务的所述输入和/或所述输出的所述数据字段包括以下各项中的至少一项:区块链地址、公钥、协议标志、锁定脚本、和/或媒体内容。
25.根据前述任一项权利要求所述的方法,其中所存储的区块链事务的集合包括区块链事务链,并且其中所述目标区块链是所述区块链事务链中最近的一个区块链事务。
26.根据权利要求25所述的方法,所述方法包括:输出所述区块链事务链中的每个事务,以供所述请求方用作所述区块链事务链中的每个事务存在于所述区块链上的证明。
27.根据权利要求25或26所述的方法,所述方法包括:仅存储所述目标默克尔证明而不存储所述区块链事务链中的任何其他事务的所述默克尔证明。
28.根据前述任一项权利要求所述的方法,其中所述请求方是终端用户。
29.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项权利要求所述的方法。
30.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项权利要求所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2017731.7 | 2020-11-10 | ||
GB2017731.7A GB2600770A (en) | 2020-11-10 | 2020-11-10 | Merkle proof entity |
PCT/EP2021/078213 WO2022100946A1 (en) | 2020-11-10 | 2021-10-12 | Merkle proof entity |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116547945A true CN116547945A (zh) | 2023-08-04 |
Family
ID=74046369
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180074369.5A Pending CN116547945A (zh) | 2020-11-10 | 2021-10-12 | 默克尔证明实体 |
Country Status (8)
Country | Link |
---|---|
US (1) | US20230394063A1 (zh) |
EP (1) | EP4245010A1 (zh) |
JP (1) | JP2023547715A (zh) |
KR (1) | KR20230101843A (zh) |
CN (1) | CN116547945A (zh) |
GB (1) | GB2600770A (zh) |
TW (1) | TW202220411A (zh) |
WO (1) | WO2022100946A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024097406A1 (en) * | 2022-11-04 | 2024-05-10 | Interdigital Patent Holdings, Inc. | Methods, architectures, apparatuses and systems directed to application-aware computing and communication management in a blockchain system |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113508410A (zh) * | 2019-02-15 | 2021-10-15 | 区块链控股有限公司 | 用于通过区块链网络实现转账的计算机实现的***和方法 |
-
2020
- 2020-11-10 GB GB2017731.7A patent/GB2600770A/en active Pending
-
2021
- 2021-10-12 JP JP2023527771A patent/JP2023547715A/ja active Pending
- 2021-10-12 CN CN202180074369.5A patent/CN116547945A/zh active Pending
- 2021-10-12 EP EP21790483.8A patent/EP4245010A1/en active Pending
- 2021-10-12 KR KR1020237018022A patent/KR20230101843A/ko unknown
- 2021-10-12 WO PCT/EP2021/078213 patent/WO2022100946A1/en active Application Filing
- 2021-10-12 US US18/034,028 patent/US20230394063A1/en active Pending
- 2021-10-14 TW TW110138158A patent/TW202220411A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
JP2023547715A (ja) | 2023-11-13 |
TW202220411A (zh) | 2022-05-16 |
US20230394063A1 (en) | 2023-12-07 |
WO2022100946A1 (en) | 2022-05-19 |
KR20230101843A (ko) | 2023-07-06 |
EP4245010A1 (en) | 2023-09-20 |
GB202017731D0 (en) | 2020-12-23 |
GB2600770A (en) | 2022-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113924747A (zh) | 区块链交易数据字段验证 | |
CN116508291A (zh) | 默克尔证明实体 | |
CN115997369A (zh) | 用于在区块链网络中验证数据的方法和装置 | |
CN116113921A (zh) | 区块链上的伪随机选择 | |
CN117480758A (zh) | 用于验证区块链上的通证的计算机实现的方法和*** | |
JP2023554148A (ja) | 機密データのブロック | |
CN116157796A (zh) | 警报账户 | |
CN115885497A (zh) | 数字签名 | |
CN116547945A (zh) | 默克尔证明实体 | |
CN117795516A (zh) | 一种计算机实现的方法和*** | |
CN117280653A (zh) | 多方区块链地址方案 | |
CN118176694A (zh) | 用于分布式区块链功能的方法和*** | |
CN118044151A (zh) | 传播锁定脚本 | |
CN117751550A (zh) | 分层共识 | |
CN116671061A (zh) | 节点版本控制 | |
CN116057920A (zh) | 连接到区块链网络 | |
CN115699676A (zh) | 自定义事务脚本 | |
CN117337436A (zh) | 多方区块链地址方案 | |
CN117561697A (zh) | 部分基于sha的哈希函数 | |
CN117693926A (zh) | 区块链区块和存在证明 | |
CN117121440A (zh) | 统一资源标识符 | |
CN117678193A (zh) | 区块链区块和存在证明 | |
CN117280349A (zh) | 多方区块链地址方案 | |
CN117652124A (zh) | 区块链区块和存在证明 | |
CN117121434A (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 |