CN115917546A - 生成区块链地址 - Google Patents
生成区块链地址 Download PDFInfo
- Publication number
- CN115917546A CN115917546A CN202180041832.6A CN202180041832A CN115917546A CN 115917546 A CN115917546 A CN 115917546A CN 202180041832 A CN202180041832 A CN 202180041832A CN 115917546 A CN115917546 A CN 115917546A
- Authority
- CN
- China
- Prior art keywords
- blockchain
- transaction
- data
- component
- script
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/02—Payment architectures, schemes or protocols involving a neutral party, e.g. certification authority, notary or trusted third party [TTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/22—Payment schemes or models
- G06Q20/223—Payment schemes or models based on the use of peer-to-peer networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/30—Payment architectures, schemes or protocols characterised by the use of specific devices or networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/30—Payment architectures, schemes or protocols characterised by the use of specific devices or networks
- G06Q20/36—Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3829—Payment protocols; Details thereof insuring higher security of transaction involving key management
-
- 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/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)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- Accounting & Taxation (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Finance (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (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来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由节点单独存储到区块链中,并不断更新。
发明内容
先前,一些区块链网络将事务的输入和输出限制为少数“标准”事务类型,其中每种事务类型具有特定的脚本模式。也就是说,根据区块链网络运行的共识规则,要使事务有效,所述事务的输入和输出必须符合这些标准事务类型中的一种。
现在,这些限制中的部分或全部已取消,因此能够创建自定义事务脚本,并允许区块链节点单独规定处理新接收事务的“策略规则”。
放宽对事务类型的限制所带来的挑战是用于(例如,由客户端应用程序)对输出脚本进行编码的对应区块链地址,或更确切地说是用于正确地生成输出脚本的信息。通过将事务脚本替换为相对较小(例如,25字节)的字符串,区块链地址为希望将数字资产分配给另一用户的区块链用户提供用户友好体验。区块链地址不一定出现在区块链本身上,而是在客户端应用程序级别实现。最常见的事务类型是标准事务中的一种,称为“支付到公钥哈希”(P2PKH)事务。在P2PKH事务中,数字资产锁定至指定接收者的公钥哈希的输出脚本。对应的P2PKH地址是唯一表示所述脚本的字符串。
然而,目前尚不存在“非标准”或自定义脚本的正式脚本到地址映射。因此,需要使用户能够生成对非标准事务脚本进行编码(即,表示非标准事务脚本)的区块链地址。第一用户可以将所述生成的地址提供给第二用户,从而允许所述第二用户生成对应的输出脚本。
根据本文公开的一个方面,提供了一种基于区块链事务的对应模板输出脚本生成区块链地址的计算机实现的方法,其中所述区块链地址包括前缀组件和数据组件;所述方法由第一方执行并且包括:基于第一模板输出脚本生成第一区块链地址,所述第一区块链地址包括第一前缀组件和第一数据组件,所述第一前缀组件用于识别第一模板输出脚本,所述第一数据组件表示填充所述第一模板输出脚本所需的一个或更多个数据项;其中所述第一前缀组件大于一个字节,和/或其中所述第一数据组件是基于填充所述第一模板输出脚本所需的多个数据项生成的。
根据本文公开的另一方面,提供了一种基于对应区块链地址生成区块链事务的输出脚本的计算机实现的方法,其中所述区块链地址包括前缀组件和数据组件;所述方法由第二方执行并且包括:生成第一区块链事务的第一输出脚本,其中所述第一输出脚本是基于第一区块链地址生成的,其中所述第一区块链地址包括第一前缀组件和第一数据组件,所述第一前缀组件用于识别第一模板输出脚本,所述第一数据组件表示填充所述第一模板输出脚本所需的一个或更多个数据项;其中所述第一前缀组件大于一个字节;和/或,其中所述第一数据组件是基于填充所述第一模板输出脚本所需的多个数据项生成的。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3是用于基于区块链地址生成区块链事务的系统的示意性框图。
具体实施方式
示例性系统概述
图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赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
如图1所示,爱丽丝和鲍勃的计算机设备102a、120b中的每个计算机设备上的客户端应用程序都可以包括附加通信功能。此附加功能可使爱丽丝103a建立与鲍勃103b的单独侧信道107(在任何一方或第三方的鼓动下)。侧信道107使得能够脱离区块链网络交换数据。此类通信有时称为“链下”通信。例如,这可用于在爱丽丝与鲍勃之间交换事务152,而不将该事务(尚未)注册到区块链网络106上或将其发布到链150上,直到其中一方选择将其广播到网络106上。以这种方式共享事务有时称为共享“事务模板”。事务模板可能缺少形成完整事务所需的一个或多个输入和/或输出。替代地或附加地,侧信道107可用于交换任何其它事务相关数据,例如密钥、议付数额或条款、数据内容等。
通过与区块链网络106相同的分组交换网络101可建立侧信道107。替代地或附加地,侧信道301可以经由诸如移动蜂窝网络的不同网络或者诸如无线局域网络的局域网建立,甚至经由爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线链路建立。通常,在本文中任何地方所指的侧信道107可以包括经由一项或多项联网技术或通信介质的任何一条或多条链路,这些链路用于“链下”交换数据,即脱离区块链网络106交换数据。在使用多条链路的情况下,链下链路束或集合整体上可以称为侧信道107。因此,应当注意的是,如果说爱丽丝和鲍勃通过侧信道107交换某些信息或数据等,则这不一定意味着所有这些数据都必须通过完全相同的链路或甚至相同类型的网络发送。
预备知识
区块链应用程序通常包括(即,存储)私钥集合,该私钥集合允许用户转移大量数字资产并将数据写入区块链。在区块链生态系统中,客户端应用程序有许多不同的实现方式。基于设备的应用程序的设计架构可以被认为以一定比例存在于两种类型的信任模型之间:服务器客户端(为改善用户体验和密钥备份而设计的密钥的托管或部分托管控制)和对等(对用户承担更高责任的密钥进行分散控制)。
在客户端应用程序的上下文中,互操作性是对一个产品中的信息在多大程度上可转移到其他产品或系统的度量。客户端需要具有互操作性,以便区块链的用户不依赖于其特定客户端应用程序提供商来访问其数字资产或区块链数据。例如,用户应该能够从一个应用程序中提取其私钥,并能够将其导入到新的应用程序中,而不会丢失资产/数据。
先前的区块链地址–通常,地址是用于通过对特定区块链脚本类型相关信息进行编码来接收数字资产(例如,付款)的字母数字标识符。一些区块链地址的长度可以是26-34个字符,并且是经过base58编码的字符串(即,由于视觉模糊,不包括I、l、0和O的字母数字字符)。这些区块链地址旨在通过将公钥和脚本中的原始字节转换为格式化字符串来提高安全性和易用性。
传统区块链地址有三个特征:
●前缀(prefix)–位于地址字符串开头的单个字节,用于对地址类型和使用该地址的网络(例如,Mainnet或Testnet)进行编码。
●哈希摘要(hash digest)–使用SHA256+RIPEMD-160对锁定脚本占用资金的数据进行哈希处理,以生成唯一的20字节字符串。这还会保护公钥在用于解锁事务输出之前不会以原始形式传输。
●校验和(checksum)–在地址末尾添加4字节校验和,以确保键入错误不会导致错误传输地址。如果与hash160数据级联的前缀的哈希与校验和不匹配,则客户端应用程序将向用户发出错误警报。
现有地址类型可以概括为以下类型:
Address=Base58(<Prefix><H(Data)><Checksum>),
其中“Prefix”是识别已知锁定脚本模板的子字符串,“Data”对应于将其本身或其某些函数用于填充脚本模板的附加信息。
例如,在支付到公钥哈希(P2PKH)锁定脚本的情况下,为前缀分配编号1,该编号识别(即,映射到)以下脚本模板:
TP2P=OP_DUP OP_HASH160<EMPTY>OP_EQUALVERIFY OP_CHECKSIG
其中,脚本<EMPTY>的空数据部分将使用公钥的RIPEMD-160SHA256哈希H160(P)填充。这意味着,公钥P的P2PKH地址AP2P(P)和对应的锁定脚本LSP2PKH(P)可以写为:
AP2PKH(P)=Base58(<1><H160(P)><Checksum>),
LSP2P(P)=OP_DUP OP_HASH160<H160(P)>OP_EQUALVERIFY OP_CHECKSIG。
可以遵循相同的过程,但此次使用编号3替换“Prefix”,该编号对应于支付到脚本哈希(P2SH)锁定脚本模板,并使用脚本的序列化部分“SS”替换“Data”,以生成地址AP2SH(SS)和对应的锁定脚本LSP2SH(SS),如下所示:
AP2S(SS)=Bass58(<3><H160(SS)><Checksum>),
LSP2S(SS)=OP_HASH160<H160(SS)>OP_EQUAL。
其中使用P2SH锁定脚本的标准脚本模板TP2SH,其中脚本<EMPTY>的空数据部分将对应于所需的序列化脚本哈希H160(SS):
TP2SH=OP_HASH160<EMPTY>OP_EQUAL。
这些示例说明了如何将每个地址映射到锁定脚本,两者均包括用于填充特定锁定脚本模板的“Data”的哈希。该映射可以可视化为:
存在其他标准输出脚本模板,例如多重签名模板TMultiSig和数据输出模板TOPRETURN,如下所示:
TMultiSig=<m=EMPTY><P1=EMPTY>…<Pn=EMPTY><n=EMPTY>OP_CHECKMULTISIG,
TOPRETURN=OP_FALSE OP_RETURN<EMPTY>。
然而,不存在用于映射到这种类型的输出脚本的对应“地址”。
AP2PKH和AP2SH是一些区块链网络在编写时仅使用的两种标准地址类型,因此只需要两个对应的脚本模板(分别为TP2PK和TP2SH),并且这些地址可以分别使用单字符(1字节)前缀1和3,因为1字节的空间足以满足这两种地址类型的需要。
标准地址类型目前用于映射到非常简单的锁定脚本,在这两种情况下,地址中经过哈希处理的数据(即,H160(P)或H160(SS))可以直接插入对应模板的<EMPTY>脚本部分。这只有在以下情况下才有可能实现:
●P2PKH的用例非常原始,仅适合构建简单的锁定脚本;
●P2SH的用例用于容纳所有其他可能的脚本,但使得接收者负责在后续解锁脚本中提供这些脚本。这意味着,锁定脚本的创建者可以简单地将复杂脚本表示为哈希,并将其直接插入简单的P2SH模板。
事实上,现有地址类型与其对应的锁定脚本之间存在双向关系,而不仅仅是单向映射,即可以直接从其中一个提取另一个,而不需要访问任何外部数据源,反之亦然。
这种关系可以写为:
地址与锁定脚本之间的双向关系是现有地址框架的一个重要属性,允许将地址用作以人类可识别且能够由用户处理的方式在对等体之间传送整个锁定脚本的高效手段。
根据大多数区块链协议,用于创建先前地址的每个公钥必须从唯一私钥中导出。在地址生成期间,首先在原始私钥字节前面加上单字节前缀(0x80或0xef),以指示私钥是否分别用于在Mainnet或Testnet上生成事务。然后,使用带前缀的私钥生成校验和,并将其附加到私钥的末尾。最后,将整个字符串转换为50-51Base58符号,并在前面加上前缀5、L或K,具体取决于钱包函数是以压缩形式还是以未压缩形式存储公钥。所生成的字符串现在采用钱包导入格式(WIF)。
公钥-首先根据私钥s生成公钥P。这是通过将私钥乘以secp256k1椭圆曲线生成点G来实现的:
P=s·G。
然后,在公钥前面加上单字节前缀(0x02、0x03或0x04),以指示公钥是以压缩格式还是以未压缩格式存储。然后,对公钥进行SHA256+RIPEMD160哈希处理,以生成20字节字符串。在字符串前面加上前缀网络ID字节(例如,对于Mainnet,则加上0x00)。对字符串进行双重SHA256哈希处理,以创建附加到哈希摘要的校验和。
区块链地址
区块链网络使用的当前地址框架满足有限数量的不同解锁条件。虽然确实可以在P2SH锁定脚本中对许多脚本条件进行编码,但先前的寻址方法受到将锁定脚本减少为以下两种标准类型的限制:P2PKH和P2SH。这意味着,用户不能自由创建这两种类型之外的锁定脚本。
现在已在至少一个区块链网络上放宽对锁定脚本的限制。然而,未来也可能放宽对其他区块链网络的限制,在这种情况下,这里提到的问题也将适用于这些网络。然而,在不建立新的寻址协议的情况下,删除“标准”事务的概念会带来以下问题:
1.地址的1字节前缀空间无法提供足够的锁定脚本模板来满足广泛的用例和锁定要求。
2.许多锁定脚本模板需要填充多个<EMPTY>脚本部分。例如,m/n多重签名锁定脚本模板TMultiSig将要求地址的“data”组件表示n个不同的公钥,以及m和n的值。
本发明提供了一种新的寻址框架,该框架允许对各种锁定脚本应用地址生成,使得用户、客户端应用程序和区块链节点能够有效地传输和处理锁定脚本。
图3示出了用于实现本发明的实施例的示例性系统300。系统300包括第一方301和第二方,第一方301被配置为生成区块链地址,第二方被配置为生成区块链事务的输出(即,锁定)脚本。系统300还可以包括区块链网络106的部分或全部,即一个或多个区块链节点104。第二方302可以将包括所生成的输出脚本的区块链事务提交给区块链网络106,或者提交给另一方(例如,第一方301),以便该方将事务提交给区块链网络106。
第一方301和第二方302分别包括相应的计算机设备(未示出)。应当理解的是,归因于任何一方301和302的任何动作都适用于该方301和302的相应计算机设备。作为特定示例,第二方302可以采用爱丽丝103a的形式(例如,由爱丽丝103a操作的客户端应用程序105a),并且被配置为执行上述与爱丽丝103a相关联的部分或全部动作。类似地,第一方301可以采用鲍勃103b的形式(例如,由鲍勃103b操作的客户端应用程序105b),并且被配置为执行上述与爱丽丝103b相关联的部分或全部动作。在该示例中,第二方302(爱丽丝103a)将一定数额的数字资产转移给第一方301(鲍勃103b),但是应当理解的是,在其他示例中,第一方301可以将一定数额的数字资产转移给第二方302。应当注意的是,在一些实施例中,第二方302和第一方301实际上可以是同一实体。也就是说,同一实体可以同时生成脚本和对应的地址。
第一方301被配置为基于模板输出脚本生成区块链地址(例如,与第一方301相关联的区块链地址)。模板输出脚本是需要填充一个或多个数据项的输出脚本。例如,模板输出脚本可以包括一个或多个操作代码(“操作码”)。技术人员熟悉操作码及其函数。
第一方301生成的地址至少包括前缀组件和数据组件。该地址还可以包括校验和组件,将在下文中进行讨论。应当理解的是,地址的组件等同于该地址的字段。
前缀组件识别用于生成区块链地址的模板输出脚本。也就是说,前缀映射到模板输出脚本。例如,前缀可以充当密钥值对中的密钥,该值是对应的模板输出脚本。前缀可以用于识别第一方301和/或第二方302存储在数据库(例如,查找表)中的模板输出脚本。附加地或替代地,数据库可以其他方式提供给第一方301和/或第二方302。例如,数据库可以存储在区块链150上,或以其他方式在互联网上查找。
应当注意的是,映射不一定是唯一的映射,但不排除这种情况。换句话说,给定前缀可以仅映射到一个模板脚本,或者前缀可以映射到若干模板脚本。
数据组件表示填充模板输出脚本以生成区块链事务的输出脚本所需的一个或多个数据项。数据项的示例包括公钥,或解锁和/或形成输出脚本所需的数据,或第一方301已知的其他数据。
根据本发明,前缀组件的大小可以大于一个字节。也就是说,前缀组件不限于单个字节。通常,根据第一方301、第二方302或区块链网络106中的任何一方强制执行的数据大小限制,前缀组件的大小可以在两个字节与上限之间变化。在一些实施例中,前缀可以仅为一个字节,其可以用于表示多达256个模板脚本。
附加地或替代地,该数据组件是基于多个数据组件生成的。也就是说,该数据组件至少是填充模板输出脚本所需的多个数据项的函数。
例如,生成后,第一方301可以将所生成的地址存储在其客户端应用程序105中。作为存储地址的替代或补充,第一方301可以将区块链地址传输给第二方301,如图3所示。第一方301可以其他方式使该地址对第二方302可用,以便第二方302获取该地址。例如,第一方301可以将该地址呈现给第二方302,例如,作为字符串或作为该地址的光表示。作为特定示例,第一方301可以将该地址转换为条形码或二维码,并将该地址(例如,在显示屏上)显示给第二方302。
前缀组件可以包括一个或多个子组件。例如,前缀的第一子组件可以包括人类可读的字符串。人类可读的字符串应当理解为一系列字母和/或数字,而不是由用户解释。在一些示例中,人类可读的字符串仅包括字母或字母和数字的组合。例如,人类可读的字符串可以包括生成该地址所依据的模板输出脚本的标识符。
作为另一个示例,前缀组件可以包括基于模板输出脚本生成的第二子组件。也就是说,第二子组件可以通过对模板输出脚本应用函数来生成,例如以对模板输出脚本进行编码或以其他方式进行加密。该函数可以包括一个或多个哈希函数。例如,模板输出脚本可以进行哈希处理,并且哈希结果可以构成第二子组件的部分或全部。在一些示例中,对模板输出脚本应用函数(例如,哈希函数)以生成结果,并且仅该结果的其中一部分构成第二子组件。例如,模板输出脚本的哈希摘要的前n个前导数字可以构成第二子组件。
作为另一个示例,前缀组件可以包括第三组件,第三组件包括区块链网络106的用户和/或节点的标识符。例如,该标识符可以是与用户和/或区块链节点104相关联的公钥。例如,节点104可能已指示愿意(例如)在其他事务之前发布包括模板输出脚本的事务。
前缀组件可以包括第一子组件、第二子组件和第三子组件的任意组合。应当注意的是,术语“第一”、“第二”和“第三”仅用作任意标签,并不一定意味着其他子组件中的一个子组件的排序或存在。例如,前缀组件可以包括独立于第一子组件和/或第二子组件的第三子组件。
类似地,数据组件可以包括一个或多个子组件,例如,第一子组件和/或第二子组件。第一子组件可以包括填充模板输出脚本所需的一个或多个(例如,多个)数据项。例如,如果模板输出脚本需要填充一系列公钥,则数据组件的第一子组件可以包括这些公钥。
第二子组件可以通过对一个或多个(例如,多个)数据项应用函数来生成,例如以对数据项进行编码或以其他方式进行加密。对一个或多个数据项应用的函数可以是也可以不是对模板输出脚本应用以生成前缀组件的第二子组件的相同函数。对一个或多个数据项应用函数可以包括对一个或多个数据项进行哈希处理。
第一方301生成的地址可以包括校验和组件。例如,校验和组件可以使第一方301和/或第二方302能够验证该地址已正确生成,即根据地址框架生成。该校验和可以基于前缀组件的部分或全部和/或数据组件的部分或全部生成。作为附加或替代选项,校验和组件可以基于填充模板输出脚本所需的数据项中的部分或全部生成。
该地址可以包括一个或多个子组件,该一个或多个子组件指示构成该地址的即将发布的组件和/或子组件的数量和/或该地址的即将发布的组件和/或子组件的长度。例如,可以指示前缀组件和/或数据组件的相应子组件数量。作为另一个示例,可以指示前缀子组件中的一个或多个前缀子组件的相应长度和/或数据子组件中的一个或多个数据子组件的相应长度。在一个特定示例中,该地址可以包括一个或多个可变整数(VarInt)组件,该组件指示子组件的上述数量和/或长度。
在一些示例中,区块链地址可以使用base58编码进行编码以省略:0(零)、O(大写o)、I(大写i)和l(小写L)以及非字母数字字符+(加)和/(斜杠)。
第二方302被配置为基于区块链地址生成输出脚本。该地址可以从第一方301获取,例如,第二方可以接收该地址作为二维码。第二方302可以将输出脚本并入区块链事务中,以将一定数额的数字资产分配给第一方301。
第二方302可以使用该地址的前缀组件来识别生成该地址所依据的模板输出脚本。例如,第二方302可以(例如,在存储器中)存储一个或多个模板输出脚本,每个模板输出脚本映射到前缀组件或子组件。第二方302可以使用前缀组件或其子组件来查找正确的模板输出脚本。
或者,模板输出脚本可以基于数据组件来识别,也可以基于地址随附的数据(例如,来自第一方301的消息)来识别。
第二方302可以使用数据组件来填充模板输出脚本。也就是说,模板输出脚本包括一个或多个未填充的字段。为了生成完整的输出脚本,这些字段需要填充数据组件表示的数据项。
或者,模板输出脚本的部分或全部可以基于前缀组件来填充,也可以基于地址随附的数据(例如,来自第一方301的消息)来填充。也就是说,第一方301可以将数据项中的部分或全部发送给第二方302。
本发明提供了一种寻址框架,该框架有助于删除当前的标准锁定脚本类型概念。该框架提供了为任何可能的锁定“脚本类型”(LSType)创建可识别的“地址类型”(AType)的过程。该新框架可以保持先前地址的一些属性,即地址可以是地址与脚本之间的人类可识别的双向关系
新的地址生成框架可以包括以下三个组件:
1.地址前缀,用于识别该地址对应的锁定脚本模板TType。优选地,该前缀的长度为6-8个字节。
2.数据表示R(Data),用于表示应该用于填充地址模板TType的“data”。
3.校验和(例如,该地址的其余哈希的前四个字节),用于在生成地址时进行错误校验。
这三个组件构成该新框架的基础,这将生成以下形式的地址:
Address=AType=Base58(<Prefix><R(Data)><Checksum>)现有地址框架与新地址框架的主要区别如下:
●前缀可以更大,以便容纳更多可能的地址类型。
●前缀可以被选择用于包含人类可读(而不仅仅是人类可识别)的数据。
●前缀可以灵活选择。
●地址中数据的表示可以采用多种形式,例如哈希、原始数据、哈希集合。
●前缀和数据表示均可配置。
本质上,该框架允许(例如,通过节点104)通告、交换和传送具有足够扩展性的锁定脚本类型,以应对传统脚本限制的取消并保留现有地址类型的有用属性。由于用户可以自由创建先前被视为非标准的新脚本类型,因此该框架在促进高效的用户到用户通信(通过其相应的客户端应用程序)方面尤其有用。
该框架的其中一个可配置部分是地址前缀,地址前缀被定义为字符串(例如,6个字节),用于识别与特定锁定脚本模板TType对应的地址类型AType:
AType=Base58(<Prefix><R(Data)><Checksum>)
可以使用VarInt编码,以便将前缀、数据和校验和的字节长度显式地编码到字符串中。这样做有利于形成可变前缀、数据和校验和长度地址,从而为用户提供更大的灵活性。
生成该前缀的方法有多种,并且所生成地址的属性取决于所选的方法。通常,至少有以下四种广泛的选择:
1.使用人类可读的字符串;
2.使用脚本模板的哈希;
3.除(1)或(2)外还使用MinerID;或
4.使用(1)、(2)和(3)的组合。
将前缀分配给地址类型的一种简单方法是使用描述性人类可读的字符串,该描述性人类可读的字符串表示要使用的锁定脚本模板的性质。例如,考虑如下所示的支付到R-Puzzle(P2RPH)模板TP2RPH:
TP2RPH=OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLIT OP_DROP OP_HASH160<EMPTY>OP_EQUALVERIFY OP_OVER OP_CHECKSIGVERIFY OP_CHECKSIG
可以通过将字符串“P2RPH”指定为前缀本身<Prefix>=<P2RPH>并生成以下形式的地址来创建该模板的地址:
AP2RPH(r)=Base58(<P2RPH><R(r)><Checksu>),
其中,用于填充模板锁定脚本TP2RPH的“Data”为整数r。
应当注意的是,此处没有规定应该如何表示r的值,这将在下面进行描述。
地址AP2RPH(r)可以映射到锁定脚本LP2RPH(r),以便实现P2RPH输出用例的新地址框架。对应的脚本将写为:
LP2RPH(r)=OP_DUP OP_3 OP_SPLIT OP_NIP OP_1 OP_SPLIT OP_SWAP OP_SPLITOP_DROP OP_HASH160<H(r)>OP_EQUALVERIFY OP_OVER OP_CHECKSIGVERIFY OP_CHECKSIG
人类可读的前缀的优点在于,它允许用户根据地址解释锁定脚本的性质,并提高对人类的可用性。此外,人类可读的前缀可防止恶意软件,并且有助于防止输出锁定至不可花费地址。
为特定地址类型创建前缀的替代方法是获取给定锁定脚本类型的脚本模板TType的哈希摘要。例如,再次使用P2RPH用例,可以将前缀生成为<Prefix>=<L64[H(TP2RPH)]>,其中L64[Data]是数据的前8个字节(64位)(前缀字节长度的选择需尽可能紧凑,同时确保哈希冲突概率较低)。这将允许为以下形式的P2RPH输出脚本创建地址:
AP2RPH(r)=Dase58(<L64[H(TP2RPH)]><R(r)><Checksum>),其中,同样没有指定如何准确地表示地址中的整数值r。
脚本模板哈希前缀的优点在于,该前缀始终链接到锁定脚本的实际形式,并且允许用户通过将预期锁定脚本模板的哈希与地址的前导字节进行比较来进行错误校验和版本比较。
为了更好地便于特定区块链节点通告其事务核实策略(即,各个节点实现的可配置策略规则),将脚本模板类型链接到特定节点104的MinerID(即,公钥)是有利的。如果每个节点104具有其自身的MinerID,该MinerID本身是唯一的公钥,则每个节点104可以定义它们愿意在新构建的区块中发布的一组地址类型,从而形成在构建事务时客户端应用程序和支付服务提供商可以查询和查看的策略。为了将MinerID并入地址模板中,可以将MinerID密钥的4字节前缀与先前方法中的至少一种方法结合,以确保在单个节点的域中唯一地定义每个地址类型和对应的锁定脚本模板。本质上,这意味着使用由多个组件构成的复合前缀。
可以为P2RPH锁定脚本生成的地址示例如下:
然而,不排除MinerID可以独立于前述前缀组件使用。
使用MinerID的优点在于,该前缀始终链接到锁定脚本的实际形式,并且允许用户通过将预期锁定脚本模板的哈希与地址的前6-8个字节进行比较来进行错误校验和版本比较。
由于用于生成地址前缀的前三种方法中的每种方法都具有不同的属性和优点,因此可以在给定地址中使用这三种方法的元素。
例如,以下地址可能是P2RPH输出的合理示例:
本质上,较大的复合前缀对每个地址类型和对应的锁定脚本类型的更多信息进行编码。
下面介绍如何配置地址中的数据表示形式:
AType=Base58(<Prefix><R(Data)><Checksum>)。
关于前缀,有多种方法来配置地址格式的这一方面,每种方法在不同的情况下都可能是有利的。两种方法可以概括如下:
1.使用数据的函数(例如,哈希);
2.直接在地址中使用数据本身。
通常,地址上下文中的“数据”是指使特定锁定脚本唯一的数据。换句话说,在脚本模板可以多次使用和重复使用的情况下,这些模板中的<EMPTY>数据字段由一组唯一的数据元素填充,该组唯一的数据元素赋予模板在特定上下文中的含义。
例如,在支付到公钥哈希(P2PKH)锁定脚本的情况下,数据将是锁定脚本向其支付的公钥P,因为这是P的特定选择,其将区分锁定脚本与使用同一模板TP2PKH的其他锁定脚本。
这里需要对数据与数据哈希进行细微区分,因为区块链网络从P2PKH和P2SH的现有简单场景转换而来,其中需要满足的唯一数据类型分别是Data=P和Data=SS。在这些情况下,P2PKH和P2SH的性质是输出支付到哈希,这十分方便,并且允许用户以地址格式和锁定脚本将数据表示为其相应的哈希H(P)和H(SS)。
然而,对于更复杂的脚本来说,这并不容易实现,其中用户可能不希望支付到紧凑的哈希消息摘要;和/或用户可能希望支付到多个数据元素,例如公钥和某个其他密钥。
这是目前不存在用于支付到多重签名(P2MS)锁定脚本的标准“地址”格式的其中一个原因,因为用于填充锁定脚本的数据包括整数值m,n以及对签名有效的公钥n。在这种情况下,输出既不会支付到简单的消息哈希,也不会支付到单个数据项。新的寻址框架所适合的情况如下所示。
要考虑的第一选择是使用数据的函数作为其在地址中的表示。例如,在具有较大值n的P2MS的情况下,可以对一组公钥应用哈希函数,以便紧凑地表示该组公钥。
在这种情况下,可以如下生成P2MS输出的地址:
AMultiSig=Base58(<Prefix><H(m||n||P1||P2||…||Pn)><Checksum>)。
该地址与使用地址中完整数据的P2MS地址示例的不同之处在于,该地址使用单个20字节哈希值(而不是多个33字节公钥和32字节整数)紧凑地表示公钥P1,P2,…Pn和参数m、n的完整列表,这使得地址格式更易于管理且方便使用。这还可提供额外的隐私级别,因为可以在所有各方都不知道锁定脚本中涉及哪些密钥的情况下构建地址。然而,除非进行修改,否则地址不会传送填充P2MS模板所需的所有数据,这是一种权衡。这提供以下两种选择:
(i)修改该地址对应的模板脚本TMultiSig→T′MultiSig,以便支付到组合的公钥哈希;或
(ii)通过单独的信道(例如,侧信道301)或消息向付款人/收款人提供原始形式的数据(即,m||n||P1||P2||…||Pn)。
这意味着,使用该方法可以打破地址AMultiSig与锁定脚本LMultiSig之间的双向关系,因为可以从锁定脚本中提取地址,但不能从地址中提取锁定脚本,即
AType(Data)←LSType(Data)。
然而,应当注意的是,这在所有情况下都不一定如此。事实上,在锁定脚本显式地支付到哈希的情况下,使用地址中数据的哈希确实能够保持双向关系。
使用数据的函数作为表示的优点在于能够更紧凑地表示地址内的锁定脚本,并且使用数据的哈希函数能够唯一地表示用于填充脚本模板的数据。
表示数据的替代方法是通过包括数据作为地址的一部分来使用数据本身。例如,在支付到多重签名(P2MS)锁定脚本的情况下,可以将m,n,P1,P2,…,Pn作为数据包括在P2MS地址本身中,如下所示:
AMultiSig=Base58(<Prefix><m||n||P1||P2||…||Pn><Checksum>)
假设选择<Prefix>使得可以识别模板TMultiSig,这里的地址AMultiSig包含构建多重签名锁定脚本LMultisig所需的所有信息,如下所示:
LSMultisig=<m><P1>…<Pn><n>OP_CHECKMULTISIG。
以这种方式直接使用数据允许地址保留前面提到的有用属性,即地址和锁定脚本在这种情况下具有双向关系,因此在已知模板脚本TMultiSig的情况下可以彼此提取:
显然,有许多其他用例可以使用实际数据作为数据表示,并且在许多这些实例中,需要保持双向关系,以允许用户简洁地传送整个锁定脚本。
使用数据表示的一个优点在于,可以从地址中提取填充脚本模板类型所需的所有数据。这意味着,鉴于地址前缀与脚本模板之间的映射是公知的且可验证,地址可以继续用作传输“要支付到”的整个脚本的介质。其他优点在于,在大多数情况下,这会保持双向关系:锁定脚本可以在单个消息中完全传送,允许对填充事务的数据进行错误校验(使用地址中的校验和)以发现用户错误(例如,在手动输入期间),并且锁定脚本数据是透明的,这可以给事务各方带来信心。
此外,某些情况也可能适于在地址中表示数据的方法的组合。例如,可以为同一P2MS脚本构建以下地址格式,如上所示:
该地址将数据本身(R(Data)=Data)的使用与数据哈希(R(Data)=H(Data))的使用相结合,以保持公钥的隐私性,同时传送相关方的数量和签字人的阈值数量。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.一种生成区块链地址的计算机实现的方法,所述生成区块链地址基于区块链事务的对应模板输出脚本,其中所述区块链地址包括前缀组件和数据组件;所述方法由第一方执行并且包括:
基于第一模板输出脚本生成第一区块链地址,所述第一区块链地址包括第一前缀组件和第一数据组件,所述第一前缀组件用于识别第一模板输出脚本,所述第一数据组件表示填充所述第一模板输出脚本所需的一个或更多个数据项;
其中所述第一数据组件是基于填充(populate)所述第一模板输出脚本所需的多个数据项生成的。
语句2.根据语句1所述的方法,包括:存储所述第一区块链地址,和/或使所述第一区块链地址对第二方可用。
语句3.根据语句2所述的方法,其中使所述第一区块链地址对所述第二方可用包括:将所述第一区块链地址传输给所述第二方。
语句4.根据语句2或3所述的方法,其中所述存储所述第一区块链地址和/或使所述第一区块链地址可用包括:将所述第一区块链地址表示为机器可读的光学标签。
语句5.根据前述任一项语句所述的方法,其中所述第一数据组件是基于填充(populate)所述第一模板输出脚本所需的多个数据项生成的。
语句6.根据前述任一项语句所述的方法,其中所述第一前缀组件包括第一前缀子组件,所述第一前缀子组件包括人类可读的字符串。
语句7.根据前述任一项语句所述的方法,其中所述第一前缀组件包括第二前缀子组件,所述第二前缀子组件是通过对所述第一模板输出脚本应用函数生成的。
语句8.根据语句7所述的方法,其中对所述第一模板输出脚本应用所述函数包括:对所述第一模板输出脚本应用一个或更多个哈希函数。
语句9.根据语句7或8所述的方法,其中所述第二前缀子组件包括对所述第一模板输出脚本应用所述函数的结果的仅一部分。
语句10.根据前述任一项语句所述的方法,其中所述第一前缀组件包括第三前缀子组件,所述第三前缀子组件包括公钥的至少一部分。
语句11.根据语句10所述的方法,其中所述公钥与区块链节点相关联。
在一些示例中,所述第一前缀组件可以包括所述第一前缀子组件、所述第二前缀子组件和所述第三前缀子组件中的一个、部分或全部的组合。
语句12.根据前述任一项语句所述的方法,其中所述第一数据组件包括第一数据子组件,所述第一数据子组件包括所述多个数据项中的至少一个。
语句13.根据语句12所述的方法,其中所述第一数据子组件包括所述多个数据项。
语句14.根据前述任一项语句所述的方法,其中所述第一数据组件包括第二数据子组件,所述第二数据子组件是通过对所述多个数据项应用函数生成的。
语句15.根据语句13或14所述的方法,其中对所述多个数据项应用所述函数包括:对所述多个数据项应用一个或更多个哈希函数。
语句16.根据前述任一项语句所述的方法,其中所述第一前缀组件和/或所述第一数据组件包括相应子组件,所述相应子组件指示所述第一前缀组件的相应长度和所述第一数据组件的相应长度。
语句17.根据前述任一项语句所述的方法,其中:
所述第一前缀组件包括一个或更多个相应子组件,所述一个或更多个相应子组件指示所述第一前缀子组件、所述第二前缀子组件和/或所述第三前缀子组件的相应长度;和/或
所述第一数据组件包括一个或更多个相应子组件,所述一个或更多个相应子组件指示所述第一数据子组件和/或所述第二数据子组件的相应长度。
语句18.根据前述任一项语句所述的方法,其中所述第一区块链地址包括第一校验和组件。
语句19.根据前述任一项语句所述的方法,其中所述第一区块链地址使用base58编码表示。
语句20.根据语句2或其从属语句中任一项所述的方法,包括:将所述多个数据项传输给所述第二方。
语句21.一种生成区块链事务的输出脚本的计算机实现的方法,所述生成区块链事务的输出脚本基于对应区块链地址,其中所述区块链地址包括前缀组件和数据组件;所述方法由第二方执行并且包括:
生成第一区块链事务的第一输出脚本,其中所述第一输出脚本是基于第一区块链地址生成的,其中所述第一区块链地址包括第一前缀组件和第一数据组件,所述第一前缀组件用于识别第一模板输出脚本,所述第一数据组件表示填充所述第一模板输出脚本所需的一个或更多个数据项;
其中所述第一数据组件是基于填充所述第一模板输出脚本所需的多个数据项生成的。
语句22.根据语句21述的方法,其中所述第一前缀组件大于一个字节。
语句23.根据语句21或22所述的方法,包括:从第一方获取所述第一区块链地址。
语句24.根据语句21至23中任一项所述的方法,包括:基于所述第一前缀组件,从多个候选模板输出脚本中识别所述第一模板输出脚本。
语句25.根据语句21至24中任一项所述的方法,包括:基于所述第一数据组件表示的所述一个或更多个数据项,填充所述第一输出脚本。
语句26.根据语句21至25中任一项所述的方法,包括:
生成所述第一区块链事务;以及
将所述第一区块链事务传输给一个或更多个区块链节点,以便发布在区块链上。
语句27.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项语句所述的方法。
语句28.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在根据语句26所述的计算机设备上运行时,执行根据语句1至26中任一项所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括所述第一方和所述第二方的所述动作。
根据本文公开的另一方面,可以提供一种系统,所述系统包括所述第一方和所述第二方的所述计算机设备。
Claims (28)
1.一种生成区块链地址的计算机实现的方法,所述生成区块链地址基于区块链事务的对应模板输出脚本,其中所述区块链地址包括前缀组件和数据组件;所述方法由第一方执行并且包括:
基于第一模板输出脚本生成第一区块链地址,所述第一区块链地址包括第一前缀组件和第一数据组件,所述第一前缀组件用于识别第一模板输出脚本,所述第一数据组件表示填充所述第一模板输出脚本所需的一个或更多个数据项;
其中所述第一数据组件是基于填充所述第一模板输出脚本所需的多个数据项生成的。
2.根据权利要求1所述的方法,包括:存储所述第一区块链地址,和/或使所述第一区块链地址对第二方可用。
3.根据权利要求2所述的方法,其中使所述第一区块链地址对所述第二方可用包括:将所述第一区块链地址传输给所述第二方。
4.根据权利要求2或3所述的方法,其中所述存储所述第一区块链地址和/或使所述第一区块链地址可用包括:将所述第一区块链地址表示为机器可读的光学标签。
5.根据前述任一项权利要求所述的方法,其中所述第一前缀组件大于一个字节。
6.根据前述任一项权利要求所述的方法,其中所述第一前缀组件包括第一前缀子组件,所述第一前缀子组件包括人类可读的字符串。
7.根据前述任一项权利要求所述的方法,其中所述第一前缀组件包括第二前缀子组件,所述第二前缀子组件是通过对所述第一模板输出脚本应用函数生成的。
8.根据权利要求7所述的方法,其中对所述第一模板输出脚本应用所述函数包括:对所述第一模板输出脚本应用一个或更多个哈希函数。
9.根据权利要求7或8所述的方法,其中所述第二前缀子组件包括对所述第一模板输出脚本应用所述函数的结果的仅一部分。
10.根据前述任一项权利要求所述的方法,其中所述第一前缀组件包括第三前缀子组件,所述第三前缀子组件包括公钥的至少一部分。
11.根据权利要求10所述的方法,其中所述公钥与区块链节点相关联。
12.根据前述任一项权利要求所述的方法,其中所述第一数据组件包括第一数据子组件,所述第一数据子组件包括所述多个数据项中的至少一个。
13.根据权利要求12所述的方法,其中所述第一数据子组件包括所述多个数据项。
14.根据前述任一项权利要求所述的方法,其中所述第一数据组件包括第二数据子组件,所述第二数据子组件是通过对所述多个数据项应用函数生成的。
15.根据权利要求13或14所述的方法,其中对所述多个数据项应用所述函数包括:对所述多个数据项应用一个或更多个哈希函数。
16.根据前述任一项权利要求所述的方法,其中所述第一前缀组件和/或所述第一数据组件包括相应子组件,所述相应子组件指示所述第一前缀组件的相应长度和所述第一数据组件的相应长度。
17.根据前述任一项权利要求所述的方法,其中:
所述第一前缀组件包括一个或更多个相应子组件,所述一个或更多个相应子组件指示所述第一前缀子组件、所述第二前缀子组件和/或所述第三前缀子组件的相应长度;和/或
所述第一数据组件包括一个或更多个相应子组件,所述一个或更多个相应子组件指示所述第一数据子组件和/或所述第二数据子组件的相应长度。
18.根据前述任一项权利要求所述的方法,其中所述第一区块链地址包括第一校验和组件。
19.根据前述任一项权利要求所述的方法,其中所述第一区块链地址使用base58编码表示。
20.根据权利要求2或其从属权利要求中任一项所述的方法,包括:将所述多个数据项传输给所述第二方。
21.一种生成区块链事务的输出脚本的计算机实现的方法,所述生成区块链事务的输出脚本基于对应区块链地址,其中所述区块链地址包括前缀组件和数据组件;所述方法由第二方执行并且包括:
生成第一区块链事务的第一输出脚本,其中所述第一输出脚本是基于第一区块链地址生成的,其中所述第一区块链地址包括第一前缀组件和第一数据组件,所述第一前缀组件用于识别第一模板输出脚本,所述第一数据组件表示填充所述第一模板输出脚本所需的一个或更多个数据项;
其中所述第一数据组件是基于填充所述第一模板输出脚本所需的多个数据项生成的。
22.根据权利要求21述的方法,其中所述第一前缀组件大于一个字节。
23.根据权利要求21或22所述的方法,包括:从第一方获取所述第一区块链地址。
24.根据权利要求21至23中任一项所述的方法,包括:基于所述第一前缀组件,从多个候选模板输出脚本中识别所述第一模板输出脚本。
25.根据权利要求21至24中任一项所述的方法,包括:基于所述第一数据组件表示的所述一个或更多个数据项,填充所述第一输出脚本。
26.根据权利要求21至25中任一项所述的方法,包括:
生成所述第一区块链事务;以及
将所述第一区块链事务传输给一个或更多个区块链节点,以便发布在区块链上。
27.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项权利要求所述的方法。
28.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在计算机设备上运行时,执行根据权利要求1至26中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2008950.4A GB2596065A (en) | 2020-06-12 | 2020-06-12 | Generating blockchain addresses |
GB2008950.4 | 2020-06-12 | ||
PCT/EP2021/062611 WO2021249716A1 (en) | 2020-06-12 | 2021-05-12 | Generating blockchain addresses |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115917546A true CN115917546A (zh) | 2023-04-04 |
Family
ID=71835498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180041832.6A Pending CN115917546A (zh) | 2020-06-12 | 2021-05-12 | 生成区块链地址 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230230052A1 (zh) |
EP (1) | EP4136560A1 (zh) |
JP (1) | JP2023529468A (zh) |
CN (1) | CN115917546A (zh) |
GB (1) | GB2596065A (zh) |
WO (1) | WO2021249716A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112039661A (zh) * | 2020-08-20 | 2020-12-04 | 上海简苏网络科技有限公司 | 携带指定信息的地址编码方法及装置 |
WO2023117230A1 (en) * | 2021-12-21 | 2023-06-29 | Nchain Licensing Ag | Blockchain transaction |
CN116051278A (zh) * | 2022-12-01 | 2023-05-02 | 北京中科深智科技有限公司 | 一种基于区块链数字人捏造和鉴权使用与交易的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201701589D0 (en) * | 2017-01-31 | 2017-03-15 | Nchain Holdings Ltd | Computer-implemented system and method |
-
2020
- 2020-06-12 GB GB2008950.4A patent/GB2596065A/en active Pending
-
2021
- 2021-05-12 WO PCT/EP2021/062611 patent/WO2021249716A1/en unknown
- 2021-05-12 JP JP2022576153A patent/JP2023529468A/ja active Pending
- 2021-05-12 CN CN202180041832.6A patent/CN115917546A/zh active Pending
- 2021-05-12 US US18/009,319 patent/US20230230052A1/en active Pending
- 2021-05-12 EP EP21725508.2A patent/EP4136560A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230230052A1 (en) | 2023-07-20 |
JP2023529468A (ja) | 2023-07-10 |
GB202008950D0 (en) | 2020-07-29 |
EP4136560A1 (en) | 2023-02-22 |
GB2596065A (en) | 2021-12-22 |
WO2021249716A1 (en) | 2021-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20210128455A (ko) | 블록체인 네트워크를 통한 이전을 구현하는 컴퓨터 구현 시스템 및 방법 | |
CN115917546A (zh) | 生成区块链地址 | |
CN113924747A (zh) | 区块链交易数据字段验证 | |
JP2022533753A (ja) | 知識証明 | |
CN114982193A (zh) | 使用区块链事务的数字合约 | |
CN115997369A (zh) | 用于在区块链网络中验证数据的方法和装置 | |
JP2022533751A (ja) | 知識証明 | |
CN115211073A (zh) | 公钥生成方法 | |
CN113875190A (zh) | 包括基于哈希的验证的可运行代码的区块链交易 | |
EP4189913A1 (en) | Blockchain tokens | |
CN116210016A (zh) | 共生通证系统 | |
CN116508291A (zh) | 默克尔证明实体 | |
CN116830085A (zh) | 生成区块链事务以及核实区块链事务 | |
CN115885497A (zh) | 数字签名 | |
CN114531941A (zh) | 多标准区块链协议 | |
CN118044151A (zh) | 传播锁定脚本 | |
KR20240024113A (ko) | 다중-레벨 블록체인 | |
CN117751550A (zh) | 分层共识 | |
CN117280653A (zh) | 多方区块链地址方案 | |
CN116547945A (zh) | 默克尔证明实体 | |
CN115699676A (zh) | 自定义事务脚本 | |
CN116671061A (zh) | 节点版本控制 | |
CN117121440A (zh) | 统一资源标识符 | |
CN117561697A (zh) | 部分基于sha的哈希函数 | |
CN117693923A (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 |