CN111480162A - 用于并发字节码解释的区块链实施的系统和方法 - Google Patents

用于并发字节码解释的区块链实施的系统和方法 Download PDF

Info

Publication number
CN111480162A
CN111480162A CN201880081017.0A CN201880081017A CN111480162A CN 111480162 A CN111480162 A CN 111480162A CN 201880081017 A CN201880081017 A CN 201880081017A CN 111480162 A CN111480162 A CN 111480162A
Authority
CN
China
Prior art keywords
transaction
blockchain transaction
blockchain
thread
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201880081017.0A
Other languages
English (en)
Other versions
CN111480162B (zh
Inventor
莹·陈
迪安·克莱默
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nchain Holdings Ltd
Original Assignee
Nchain Holdings Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nchain Holdings Ltd filed Critical Nchain Holdings Ltd
Publication of CN111480162A publication Critical patent/CN111480162A/zh
Application granted granted Critical
Publication of CN111480162B publication Critical patent/CN111480162B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/401Transaction verification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/04Payment circuits
    • G06Q20/06Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
    • G06Q20/065Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash
    • G06Q20/0658Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash e-cash managed locally
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/405Establishing or using transaction specific rules
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic 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)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • Finance (AREA)
  • Strategic Management (AREA)
  • Software Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Power Engineering (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Multimedia (AREA)

Abstract

提供了创建和/或验证花费区块链交易的计算机实施的方法,花费区块链交易包括i)多个锁定脚本,所述多个锁定脚本各自表示执行线程的实例(其能够是从由先前区块链交易的锁定脚本所表示的执行线程分叉的执行线程和/或为线程间通信和控制而管理和/或控制的至少一个先前区块链交易的执行线程);或ii)表示从由至少一个先前区块链交易所表示的多个执行线程联接的执行线程的实例的锁定脚本。一旦被创建和/或验证,该花费区块链交易就能够在区块链网络上被传递以便存储在区块链分类帐中。区块链交易能够实施用于并发或异步执行线程的线程特定的锁定脚本和关联分叉、联接和屏障构造。交易能够被验证并存储在区块链分类帐中。区块链交易能够被用作智能合约的一部分。

Description

用于并发字节码解释的区块链实施的系统和方法
技术领域
本发明一般涉及处理区块链交易的计算机实施的方法,并且更具体地说,涉及在区块链交易处理的结构内实施锁定脚本以支持并发和/或异步线程执行。本发明特别适合于但不限于用于在智能合约交易中进行处理和交易的方法和设备。
背景技术
在本文档中,术语“区块链”指的是几种类型的电子的、基于计算机的、分布式的分类帐中的任一种。这些包括基于共识的区块链和交易链技术、经许可和未经许可的分类帐、共享分类帐及其变体。虽然其它区块链实施已被提出并且发展,但区块链技术的最广为人知的应用是比特币区块链。尽管为了在本公开中的方便和说明的目的而可以在本文中提及比特币的示例,但应注意的是,本发明不被限于与比特币区块链一起使用;并且替换的区块链实施和协议落在本发明的范围内。例如,本发明可以在其它区块链实施中是有用的,这些区块链实施具有与比特币关于在交易内能够对什么约束进行编码类似的限制。术语“比特币”在本文中被用来包括比特币协议的任何变体。
区块链是对等的电子分类帐,其被实施为由区块组成的基于计算机的、去中心化的分布式系统,区块又由交易和其它信息组成。区块链系统或区块链网络包括多个区块链节点和操作集。区块链节点可能被配置成执行该操作集中的一些或全部操作。各种区块链节点可能被实施为由节点运营商操作的计算机硬件、计算机软件或两者的组合,其中节点运营商可以是独立的并且与其它节点运营商无关。区块链节点可能各自维护区块链分类帐的副本或其的一些部分。该操作集可能包括创建交易、传播交易、读取区块链分类帐、评估区块链分类帐、为到区块链分类帐的提议添加而生成(挖掘)新区块、与其它区块链节点进行通信,以及为用户提供钱包功能以管理区块链资产。
区块链分类帐是去中心化的,因为不存在决定何时修改分类帐的单个区块链节点或实体。相反,区块链节点通过区块链协议的规则的知识各自被编程,以便证实区块链分类帐和证实其它区块链节点所采取的动作与那些规则一致。术语“区块链”可以指区块链分类帐包括一系列链接的区块的事实,每个链接的区块可表示为计算机存储器中的数据结构,可由计算机进程读取并且可作为数据传输传送。区块包括一或多个交易,也可表示为计算机存储器中的数据结构,可由计算机进程读取并且可作为数据传输传送。这些区块被链接,其中正式添加到区块链的每个新区块包括对紧邻的前一区块的不可变引用,该紧邻的前一区块包括对其紧邻的前一区块的不可变引用,并以此类推。
区块链协议的规则之一将是一旦区块被添加到区块链,它就不能被更改,即,它是不可变的,并且区块链分类帐的唯一可能的修改是新区块的添加。由于区块链节点编程有其作为规则,因此,它们将不修改在它们的区块链分类帐的副本中的区块,而是仅添加区块,并且即使如此,仅在对所提议的区块运行证实进程之后添加区块以确保它符合区块链协议。由于区块一旦被添加到分类帐就是不可变的,因此,区块中的交易也是不可变的。
区块链网络的一些节点进行操作以创建交易。预期交易的创建能够涉及牵涉电子钱包节点、代理节点或区块链网络的某一其它节点的操作。当区块链节点创建交易时,它创建包括交易细节的数据对象,并且随后通常以对等方式将该数据对象发送到或广播到它能够通过区块链网络连接到的其它区块链节点。一些区块链节点作为“矿工”操作并且收集一或多个交易,形成与区块对应的数据结构,执行一些计算以验证被放入区块中的交易,解答难题,将难题的解答放入数据结构中并尝试将区块传播到其它区块链节点。难题可能是处于对交易的数据和区块链分类帐的当前状态特定的非平凡计算的形式,诸如分类帐中区块的数量和来自最后添加的区块的数据。
通过使难题依赖于交易,流氓区块链节点不能传播提前形成的区块。要解决非平凡难题,流氓区块链节点不能简单地将区块注入到区块链网络中,而是要求区块链节点做一些重要的计算任务来证明它付出了努力(实际上,示出难题的解决方案是“工作证明”)。优选地,在区块链协议中,工作证明是不平凡的,但证实难题被解决并且工作被完成是容易的。这意味着其它区块链节点不必一定要信任正在提议添加新区块到分类帐的区块链节点。如果通过另一个区块链节点的证实,则该区块链节点将添加新区块到它的区块链分类帐的副本的末尾,并且将新区块传播到其它区块链节点。其他区块链节点执行相同的证实时,它们也将断定该区块是有效的并且将被添加到区块链分类帐,因此它们将添加它到它们的区块链分类帐的副本。如果某一区块链节点确定所提议的新区块是无效的,则它将不它添加它到它的区块链分类帐的副本并且将不传播它。因为区块链中的有效性是基于共识的,所以如果大多数节点同意交易是有效的,则交易被认为是有效的。
区块链系统通常这样操作,使得节点所有者和运营商不必信任其它节点所有者和运营商。相反,协议使得执行协议不允许的某些操作在计算上是不可行的,诸如修改较早的区块,在没有对应工作证明的情况下提议新区块,或包括无效交易。以其它节点将未注意到的方式执行区块链协议不允许的操作在计算上不可行时,不需要特定的信任。
为使交易被包括在被写入区块链的区块中,(1)挖掘区块链节点(或验证节点)将验证交易,(2)挖掘区块链节点将尝试传播包括该交易的区块,以及(3)其它节点将证实区块的有效性和该区块中交易的有效性。由于挖掘区块链节点将被编程或配置有所考虑的那些规则,因此,挖掘区块链节点将不可能将未通过证实的交易包括到区块中,因为此类区块将不被其它节点接受并且挖掘节点将得不到益处。对于一些区块链系统,挖掘的一个此类益处是,如果区块被接受,则该区块被允许包括“奖励”交易,其中指定量的值被分配给该节点的运营商,而不需要来自某一其它实体的值的对应减少。这样,成功的矿工通过利用区块创建的值得到补偿。另外,如下所解释的,交易能够包括交易费,该交易费还将去往控制挖掘区块链节点的矿工,并且还要求交易可被证实为有效以便该矿工看到任何补偿。
区块链网络中的交易包括各种数据元素,包括交易值和其它数据元素。在去中心化的分布式分类帐系统中,分类帐是公共的,因此任何人都能够查看分类帐和查看交易。在区块链分类帐中,存在创始交易,创始交易启动区块链和将某个单位的值归属于该创始交易。在本文中的示例中,出于解释的目的,值的单位是隐秘性,但采用其它数字资产的其它变化也是可能的。
不同于创始交易和奖励交易的交易涉及“花费”在区块链分类帐上一或多个现有交易的值,并且在此类交易被添加到区块链分类帐时,它又能够被花费。每个未花费的交易(unspent transaction)以公共方式指定所需的要求以便花费该交易的值。一个简单的要求可能是“您必须先证明您是Alice,然后您可以花费它”。Alice可能随后创建“花费”该交易的值的新交易,其中Alice的新交易证明它来自Alice并且具有指向该先前交易的指针。对于奖励交易,存在交易值,但奖励交易不“花费”先前交易。当然,要使Alice的交易被区块链网络接受,它不能引用已经花费的交易,并且必须实际上证明Alice创建了它。
根据区块链协议并且因此根据区块链节点的协定,如果交易指向已经被花费的先前交易输出,即分类帐包括用于其的指向该先前交易输出的有效现有交易输入,则该交易是无效的。为了防止任何闯入者创建新交易输入,该新交易输入“花费”由先前未花费的交易输出所表示的值,每个交易输出包括表示对将创建此类交易的任何提出要求者强加的要求的数据,并且由于未花费的交易输出是不可变的,因此,该数据不能被改变。当然,已花费的交易也是不可变的。
在上面的示例中,Alice可能已创建花费交易(spending transaction),使得她独自具有解锁能力的先前交易中的值能够被转移到Bob,即,使得现在将存在仅Bob具有解锁能力并由此花费的新的未花费的交易。Alice创建的花费交易可能包括与以下要求对应的数据:“任何人如果能够提供足够的信息来证明他们知道Bob的私有密钥,则他们都可以自由地指向此交易-且由此花费其的全部值”。假设Bob是谨慎的,则Bob将是唯一能创建花费该交易的有效交易的人。实际上,Bob拥有该值,并且是唯一能够花费该值的人。注意,这不要求Bob信任区块链节点的任何运营商或信任具有创建交易能力的任何其它方。所有Bob需要信任的是流氓方不能完全接管大多数区块链节点。
在特定情况下,一个交易正好完全花费一个先前未花费的交易,并且该一个交易能够被后面的交易完全花费或者根本不花费。在一般情况下,交易具有一或多个交易输入和一或多个交易输出,其中每个交易输入引用先前交易的交易输出(并且该交易输出具有可花费的值),并且每个交易输出具有可花费的值(其保持未花费,直到它被将来交易的交易输入所花费/引用)。交易的交易输出指定交易的可花费单位,它以该单位被完全花费或根本不花费。在本文中描述的一些示例中,交易被引用为“已花费”,并且应理解的是,在交易具有多个交易输出的情况下,描述可能覆盖其中少于交易的所有输出被花费的情况。
在交易能够具有多个交易输出的情况下,该交易的不同交易输出能够在不同时间被花费。交易被创建时,其交易输出被视为未花费。每个交易输出能够被后面的交易的交易输入所花费,或者保持未花费。如果交易具有在先前交易的交易输出已经被花费之后试图花费该先前交易的交易输出的交易输入,则区块链节点将因为是无效交易而拒绝该交易。
在一方(Alice)控制值为X的未花费的交易输出并且想要仅花费该交易输出的一部分Y的情况下,Alice能够指定具有多个交易输出的新交易,一个是带有只能由Bob花费的值Y的交易输出和一个是带有只能由Alice花费的值X-Y的交易输出。实际上,原始交易输出被完全用尽,但存在“进行更改”的属于Alice的新交易输出。
交易的交易输入的数量和该交易的交易输出的数量不需要相同。然而,除了一些例外,为成为有效交易,在交易的交易输出中指定的值的总和不应超过交易的交易输入所花费的先前交易输出的值的总和,并且在一些情况下将更少。对于创始交易和奖励交易,交易输出的值的总和能够大于(一或多个)交易输入的值的总和,或者根本不需要存在任何输入,但是对于常规交易,如果其交易输出的值的总和超过其交易输入的值的总和,则交易将是无效的。对于一些交易,其交易输出的值的总和能够少于其交易输入的值的总和,在此情况下,成功的矿工针对所述差异添加交易费交易,因此取得平衡并且产生使矿工处理交易的激励。在比特币协议中,这是创币交易(Coin base transaction),其被添加到区块并且具有等于包括在比特币区块中的所有其它交易的交易费用的总和(即,所有包括的交易的所有输入和输出的差的和)加上用于创建新区块的奖励的可花费输出。
交易的每个交易输出包括为花费该输出的值而必须满足的约束。在一些区块链协议中,约束被嵌入到“锁定脚本”中,该“锁定脚本”指定定义那些约束是什么的数据和脚本命令。锁定脚本充当交易输出中所表示的值的屏障,因为另一参与者(actor)不能“花费”交易输出中所表示的值,除非他们能够“解锁”该交易输出的锁定脚本。
花费交易的每个交易输入花费先前交易的交易输出。花费交易输入的“解锁脚本”指定用于满足由先前交易输出的锁定脚本指定的约束的数据和脚本命令。只有满足这些约束,花费交易才能够花费先前交易的交易输出。因此,有效交易指定至少一个输入,并且有效花费交易的每个输入包括指向先前交易输出(正被花费的那个)的指针和“解锁”先前交易输出的锁定脚本的解锁脚本。根据对应区块链协议操作的区块链节点将一起执行锁定脚本和解锁脚本以证实交易输入。在具体系统中,脚本是基于堆栈的,并且证实区块链节点将从空堆栈开始,执行解锁脚本(其可以在堆栈上留下数据对象),然后执行锁定脚本(其可以使用堆栈上的数据对象)。
当证实区块链节点组合锁定脚本和解锁脚本并且执行该组合时,执行后的结果将是“TRUE(真)”或“FALSE(假)”。在一些情况下,在脚本被完全执行之前,脚本的执行以FALSE结果结束。例如,假设对于给定的脚本执行,存在在有效的脚本执行中始终相等两个值,而无论在脚本中还发生什么。如果在执行该脚本的中途,在这两个值之间进行比较并且它们不相等,则脚本的执行能够在该比较之后立即停止,并且返回FALSE结果。不需要执行脚本的其余部分。
如果证实区块链节点组合锁定脚本和解锁脚本,执行该组合,并且结果为TRUE(即,解锁脚本包括解锁交易输出所需的一切),则证实区块链节点将证实交易是有效的(假设满足了其它要求,诸如适当的时间戳、适当的格式化、不指向已经花费的交易输出等)。如果证实区块链节点证实该交易是有效的,则它将传播该交易以便进行挖掘。其它区块链节点将进行相同的计算以得出交易有效的结论。这样,具有仅指向未花费的交易输出的输入并且具有解锁那些未花费的交易输出的解锁脚本的有效交易将传播并且最终成为区块的一部分,该区块最终成为分类帐的一部分。
另一方面,如果流氓节点尝试传播无效交易,则其它节点将发现它无效并且不传播它。
一旦交易是有效的并且被接受到区块链中,它的内容就不能被更改。这意味着在创建交易时锁定脚本是固定的。然而,解锁脚本在那时不一定是固定的,因为解锁脚本被包括在后面的花费交易中,并且在后面的花费交易被创建之前不需要被创建。
在典型情况下,解锁脚本不能简单地由任何人创建,而且仅由被授权花费先前交易输出的一方创建。与上面的示例中一样,锁定脚本可能是“任何人如果能够提供足够的信息来证明他们知道Bob的私有密钥,则他们都可以自由地指向此交易输出-且由此花费其的全部声明值”,并且解锁脚本可能是“Bob已用其私有密钥对交易进行了签名,并且以下是结果:<sig_Bob>”。随后,证实区块链节点将处理这两个语句并得出TRUE或FALSE的结论。在容易证实<sig_Bob>是Bob的有效签名,Bob(或知道Bob的私钥的其他人)容易生成此类签名,并且在不知道Bob的私钥的情况下其他人很难生成有效签名时,此进程效果良好。因此,能够在一个不信任的系统中转移值。Bob将要花费的交易的发起者不需要信任系统或信任Bob,因为在未先知道Bob的私有密钥的情况下在密码上难以形成将被区块链节点的共识所接受的有效且可证实的结果。
区块链节点能够容易地证实Bob对交易进行了签名,并且证实签名是锁定脚本的唯一要求。当然,可能存在不证实其它节点在何处进行证实并且可能证实其它节点在何处不进行证实的流氓节点,但是只要流氓节点不能压过区块链网络上表现良好的节点,则流氓节点将不能促成无效交易或阻止有效交易被传播或挖掘。
验证花费交易时,节点执行一或多个交易输入的解锁脚本和一或多个先前交易输出的对应锁定脚本。在此类脚本执行评估为TRUE,并且其它验证条件(如果适用的话)被满足时,交易就该节点而言是有效的。该节点将随后传播经验证的交易到其它网络节点,于是矿工节点能够选择将交易包括在区块中。因此,为使交易被写入区块链,它必须(1)被接收交易的节点验证,(2)被中继(但仅在交易被验证时)到网络中的其它节点,(3)被添加到由矿工建立的新区块,(4)作为所提议的区块的一部分被传播,以及(5)使所提议的区块根据节点的共识被接受为到过去交易的公共分类帐的添加。
在足够数量的区块被添加到区块链以使交易实际上不可逆时,交易被认为是被确认。由于交易是不可变的,因此,区块链协议能够阻止交易的单边反转。当然,如果Alice将值X转移给Bob并且Alice想要返回该值X,则她能够在Bob同意的情况下得到该值,在此情况下,Alice到Bob关于X的交易(Alice-to-Bob-for-X transaction)没有被反转或取消,但是存在Bob发起的新交易,即Bob到Alice关于X的交易。
一旦交易被包括在区块中,该交易就被认为是不可变的,并且一旦区块被提交到区块链,该区块就被认为是不可变的。可能存在其中在区块链中存在分叉并且存在回退区块链的一定能力的一段短的时间,但通常,经过的时间越多,任何回退的可能性就越小。本文中,除非另外指示,否则假设交易和区块在被完全提交到区块链之后是不可变的。
一种确保不可变性的方法是通过使用密码技术。例如,存在诸如散列和数字签名的密码操作,这些操作将一些数据序列作为它们的输入,并提供以某种方式对应于该输入数据序列的输出数据序列。这些操作使得对于从给定密码输入(例如,交易或区块)生成的给定密码输出(例如,散列或数字签名),使用可用计算资源来找到导致相同密码输出的不同密码输入在计算上是不可行的或不可能的。因此,证实器能够假设如果密码输入与密码输出一致,则被用来生成该密码输出的是该密码输入而不是某一其它经修改的密码输入。
在区块链网络中,在不要求每个节点信任每个其它节点的情况下,这样证实交易并且这样证实区块,并且忽略和不使用不可证实的交易和区块,交易和区块被认为是有效不可变的,并且这可能是假设如果散列或数字签名正确地对应于交易或区块,则交易或区块尚未从其原始状态被修改的结果。
一些区块链节点将存储整个分类帐,而其他节点可能仅存储未花费的交易输出(UTXO,用于比特币分类帐)。未花费的交易输出对应于可花费的值,并且优选地,每个未花费的交易输出具有锁定脚本,对于该锁定脚本,除了该值的“所有者”之外的任何人都不能容易地生成可证实的解锁脚本。当然,这不是一个要求,但将可预期的是,任何人能够容易地生成可证实解锁脚本的任何交易输出将在交易中迅速地被花费,该交易将其值转移到另一交易输出,该另一交易输出仅可由首先注意它的人花费。结果,区块链能够被用来转移对加密货币值的控制,并且更一般地,从区块链系统中的一个参与者转移到区块链系统中的另一个参与者的数字资产和包括已花费的交易输出和未花费的交易输出的交易的记录被记录在公共的不可变的分类帐中,使得易于证实数字资产的流程和防止那些数字资产的双重花费。
在本文中使用时,“数字资产”可以指一或多个数字资产。在此示例中,其控制被转移的数字资产可以是多个数字资产的集合,该集合本身是数字资产。在实施例中,加密货币是基于令牌的加密货币,其中每个令牌表示资产的份额(例如,公司的份额),并且单个交易涉及多个类型的令牌(例如,涉及一或多个不同公司中的份额)。
交易包括能够形成计算对象的锁定脚本和解锁脚本。一旦被提交到区块链,交易就变成不可变的,并且该特征具有除了只是对加密货币形式的数字资产的控制的不可变转移外的其它用途。除了转移值之外,不可变的交易能够被用来实施其它操作,诸如事件的公证记录,其中各方的权利和义务被编码在交易中的智能合约的实施,以及根据区块链协议,根据智能合约的条款的转移价值。
在比特币平台上,使用基于堆栈的脚本语言来编写脚本,但可能转而使用其它方案。执行基于堆栈的脚本语言的指令时,处理器(诸如区块链节点的一部分)将数据存储在称为堆栈的先进后出数据结构上。处理器能够将值推送到堆栈的顶部,或者从堆栈的顶部弹出值,或者可能访问(读/写)堆栈中存储的其它值。对堆栈执行的各种操作能够导致推送或弹出或以其它方式访问堆栈上的值的一或多个,对其执行操作,以及更改堆栈上的元素的顺序(这可能相当于两次弹出操作和两次推送,其中第一次推送是弹出的第一项)。例如,OP_EQUAL操作可能从堆栈中弹出最上面的两个项目,比较它们,并且将结果(例如,如果相等,则为1,或者如果不相等,则为0)推送到堆栈的顶部。在一些当前实施例所采用的一些脚本语言中,可以存在至少两个堆栈:主堆栈和备用堆栈。脚本语言的一些操作能够将项目从一个堆栈移动到另一堆栈。例如,执行OP_TOALTSTACK操作促使处理器将值从主堆栈的顶部移动到备用堆栈的顶部。
通过包括在交易中的脚本,能够实施智能合约,其中合约的条款被编码到脚本中。示例可能是“如果Bob已支付给Carol X,并且Dave已授予对该交易的许可,则Alice将支付给Bob X的一半”的形式,并且其能够被编码为锁定脚本的一部分,该锁定脚本仅在(除了其它条件之外)存在Bob支付了Carol的在前交易(prior transaction)和Dave对其许可进行了编码的在前交易时才将评估为TRUE。在本文中使用时,“在前交易”可能指已经被添加到区块链的任何交易,而不一定是具有花费交易花费的输出的先前交易。实际上,智能合约能够表示机器可执行程序,该程序包括定义输入以便产生结果的规则,规则能够随后促使根据那些结果来执行动作。
除了值的转移之外,交易还可能转移值的其它对象或占有权益。例如,交易可能转移一些名义上的加密货币值,但也包括与以下断言对应的数据:“能够花费此交易的任何人也是123Marley Circle的房屋和土地的合法所有者”。占有权益可能以相同意思在公共记录中是模糊不清的。例如,交易可能包括与以下断言对应的数据:“能够花费此交易的任何人也是在Central Bank of Trust持有的信托号码(trust number)12345下信托持有的该某个财产的合法所有者”。在本文中,这被称为令牌,其表示并实施经由区块链的真实世界实体的转移。潜在敏感或秘密的项目能够由不具有可辨别的含义或值的令牌来表示。令牌因此用作允许从区块链引用真实世界项目的标识符。
如本文中所解释的,从创建者或某一其它特定实体没有被委派有强制执行和/或执行智能合约的任务的意义上来说,智能合约是“智能的”。相反,与特定实体的交互能够被编码在智能合约中的特定步骤,并且智能合约能够在其它情况下自动地自执行和自实施。在一些示例中,自动执行指的是能为其益处而花费未花费的交易输出的任何实体。注意,在此类示例中,能花费未花费的交易输出的“任何实体”指的是能创建解锁脚本而无需证明了解某一秘密的实体。换而言之,能够在不证实数据源可访问密码秘密(例如,私有非对称密钥、对称密钥等)的情况下验证花费交易。而且,在此类示例中,作为区块链网络的验证节点根据智能合约的约束来验证花费交易的结果,发生自实施。在一些示例中,“花费”未花费的交易输出指的是创建引用未花费的交易输出并且作为有效执行的花费交易输出。花费此类交易输出的副作用是区块链网络将处理锁定脚本和解锁脚本以验证新交易,即花费交易。如果有效,则认为先前交易输出已花费。通过在交易输出中包括某个值并且实施它,使得任何人能够花费该输出,存在使各方创建此类花费交易的激励,并且因此智能合约的步骤可能将被执行,如果不是由智能合约中的参与者执行,则由操作区块链节点的其他人执行。
形成被记录为交易的一部分的锁定脚本和解锁脚本的脚本是不可变的,并且因此锁定脚本通常不能被修改或引用未来交易的部分,因为那些部分在交易被固定时是未知的。交易输入的解锁脚本能够指由交易输入所指向的先前交易输出的部分或区块链中除先前交易之外的在前交易。这可以限制能够如何使用交易。
希望的是提供另外功能性和改进的方法和系统以便在这些方面的一或多个中使用区块链技术。因此,根据本发明,提供有一种如所附权利要求中所限定的系统和/或方法。
发明内容
在各种实施例中,提供了一种计算机实施的方法,该方法创建和/或验证花费区块链交易,该花费区块链交易包括:i)多个锁定脚本,所述多个锁定脚本各自表示执行线程的实例(该执行线程能够是从由先前区块链交易的锁定脚本所表示的执行线程分叉的执行线程和/或为线程间通信和控制而管理和/或控制的至少一个先前区块链交易的执行线程);或ii)锁定脚本,所述锁定脚本表示从由至少一个先前区块链交易所表示的多个执行线程实例联接的执行线程。一旦被创建和/或验证,花费区块链交易就能够在区块链网络上被传递以便存储在区块链分类帐中。
另外或备选的是,计算机实施的方法可以创建和/或验证实施用于并发或异步执行线程的线程特定的锁定脚本和关联分叉、联接和屏障构造的区块链交易。此类区块链交易能够在区块链网络上被验证和传递,以便存储在区块链分类帐中。区块链交易能够被用作智能合约的一部分。
另外或备选的是,可以由区块链网络的节点创建花费区块链交易。花费区块链交易能够指向表示执行线程的先前区块链交易的锁定脚本。花费区块链交易能够进一步包括多个锁定脚本,每个锁定脚本表示从由先前区块链交易的锁定脚本所表示的执行的线程分叉的执行线程的实例。
在一个实施例中,由先前区块链交易的锁定脚本所表示的执行线程可以包括字节码序列,并且由花费区块链交易的多个锁定脚本所表示的至少一个执行线程实例能够通过复制先前区块链交易的锁定脚本的字节码序列来生成。
在另一个实施例中,由先前交易的锁定脚本所表示的执行线程可以包括字节码序列和解释器代码,并且由花费区块链交易的多个锁定脚本所表示的至少一个执行线程实例能够通过复制先前区块链交易的锁定脚本的字节码序列和解释器代码来生成。
在又一实施例中,方法能够存储或访问有效字节码序列集合,并且由花费区块链交易的多个锁定脚本所表示的至少一个执行线程实例能够通过复制有效字节码序列集合来生成。
在另一实施例中,方法能够存储或访问有效字节码序列和有效解释器代码的集合,并且由花费区块链交易的多个锁定脚本所表示的至少一个执行线程实例可以通过复制该有效字节码序列和有效解释器代码的集合来生成。
在另一实施例中,花费区块链交易可以通过为由花费区块链交易的多个锁定脚本所表示的执行线程实例生成执行状态信息(诸如下一执行指针)并且将执行状态信息(诸如下一执行指针)包括到花费区块链交易的多个锁定脚本中来创建。一旦被创建和/或验证,花费区块链交易就能够在区块链网络上被传递以便存储在区块链分类帐中。
另外或备选的是,可以由区块链网络的节点接收花费区块链交易。花费区块链交易可以包括多个锁定脚本,每个锁定脚本表示从由先前区块链交易的锁定脚本所表示的执行的线程分叉的执行线程的实例。通过针对一或多个条件来证实花费区块链交易的锁定脚本,节点可以验证花费区块链交易。证实可以涉及将花费区块链交易的多个锁定脚本中的至少一个与先前区块链交易的锁定脚本进行匹配。证实还可以涉及为表示执行线程实例的花费区块链交易的多个锁定脚本使用下一执行指针以执行花费区块链交易的多个锁定脚本和生成结果执行状态信息,以及检查此类结果执行状态信息的有效性。
在一个实施例中,由先前区块链交易的锁定脚本所表示的执行线程可以包括字节码序列和可能的解释器代码,并且花费区块链交易的多个锁定脚本能够被要求包括相同的字节码序列和可能相同的解释器代码,以便花费区块链交易的验证成功。在此情况下,证实能够涉及将用于花费区块链交易的多个锁定脚本中的每一个的字节码序列和可能的解释器代码与先前区块链交易的锁定脚本的字节码序列和可能的解释器代码进行匹配。花费区块链交易的验证能够基于此类匹配的结果来确定。
在另一实施例中,由先前区块链交易的锁定脚本所表示的执行线程可以包括字节码序列和可能的解释器代码,并且花费区块链交易的多个锁定脚本能够是i)先前区块链交易的锁定脚本的相同的字节码序列和可能相同的解释器代码,或者ii)属于有效锁定脚本集合的不同的字节代码序列和可能的解释器代码,以便花费区块链交易的验证成功。在此情况下,证实能够涉及生成对应于先前区块链交易的锁定脚本的散列数据值,并且将该散列数据值添加到对应于有效锁定脚本集合的散列数据值集合。能够为花费交易的每个锁定脚本生成散列数据值,并且将其与散列数据值集合进行比较。花费区块链交易的验证能够基于此类散列数据值比较的结果来确定。
另外或备选的是,能够由区块链网络的节点创建花费区块链交易。花费区块链交易能够指向一或多个先前区块链交易的多个锁定脚本,其中所述多个锁定脚本各自表示执行线程的实例。花费区块链交易还能够包括表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本。一旦被创建和/或验证,花费区块链交易就能够在区块链网络上被传递以便存储在区块链分类帐中。
在一个实施例中,表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本能够通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列来生成。
在另一实施例中,表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本能够通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列和解释器代码来生成。
在又一实施例中,方法能够存储或访问有效字节码序列集合,并且表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本能够通过复制该有效字节码序列集合来生成。
在另一实施例中,方法能够存储或访问有效字节码序列和有效解释器代码的集合,并且表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本能够通过复制该有效字节码序列和有效解释器代码的集合来生成。
在另一实施例中,花费区块链交易能够通过为从由花费区块链交易所指向的执行线程实例联接的执行线程生成执行状态信息(诸如下一执行指针)并且将执行状态信息(诸如下一执行指针)包括到花费区块链交易的锁定脚本中来创建。
另外或备选的是,能够由区块链网络的节点接收花费区块链交易。花费区块链交易能够指向一或多个先前区块链交易的多个锁定脚本,其中所述多个锁定脚本各自表示执行线程的实例。花费区块链交易还能够包括表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本。通过对照一或多个条件来证实花费区块链交易的锁定脚本,节点能够验证花费区块链交易。证实能够涉及将花费区块链交易的锁定脚本与一或多个先前区块链交易的多个锁定脚本进行匹配。验证还能够涉及执行一或多个先前区块链交易的多个锁定脚本以生成结果执行状态信息,并且随后合并或组合此类结果执行状态信息。
在一个实施例中,至少一个先前区块链交易的多个锁定脚本能够包括公共字节码序列和可能的解释器代码,并且花费区块链交易的锁定脚本能够被要求包括公共字节码序列和可能相同的解释器代码,以便花费区块链交易的验证成功。在此情况下,证实能够涉及将用于花费区块链交易的锁定脚本的字节码序列和可能的解释器代码与先前区块链交易的多个锁定脚本中的每一个的字节码序列和可能的解释器代码进行匹配。花费区块链的验证能够基于此类匹配的结果来确定。
在另一实施例中,花费区块链交易的锁定脚本能够是一或多个先前区块链交易的多个锁定脚本的相同字节码序列和可能相同的解释器代码,或者能够是对应于有效锁定脚本集合的不同字节码序列和可能的解释器代码。在此情况下,证实能够涉及生成对应于先前区块链交易的锁定脚本的散列数据值,并且将该散列数据值添加到对应于有效锁定脚本集合的散列数据值集合。为花费交易的每个锁定脚本生成散列数据值,并且将其与散列数据值集合进行比较。花费区块链的验证能够基于此类散列数据值比较的结果来确定。
另外或备选的是,能够由区块链网络的节点创建花费区块链交易。花费区块链交易能够指向一或多个先前区块链交易的多个锁定脚本,所述多个锁定脚本中的每一个表示执行线程的实例。花费区块链交易还能够包括对应的多个锁定脚本,其执行涉及由花费区块链交易所指向的在执行线程实例之间的线程间通信或控制。一旦被创建和/或验证,花费区块链交易就能够在区块链网络上被传递以便存储在区块链分类帐中。
在一个实施例中,花费区块链交易的多个锁定脚本能够通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列来生成。
在另一实施例中,花费区块链交易的多个锁定脚本能够通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列和解释器代码来生成。
在又一实施例中,花费区块链交易能够通过为由花费区块链交易的多个锁定脚本所表示的执行线程实例生成执行状态信息(诸如下一执行指针)并且将执行状态信息(诸如下一执行指针)包括到花费区块链交易的多个锁定脚本中来创建。
另外或备选的是,能够由区块链网络的节点接收花费区块链交易。花费区块链交易能够指向一或多个先前区块链交易的多个锁定脚本,所述多个锁定脚本中的每一个表示执行线程的实例。花费区块链交易还能够包括对应的多个锁定脚本,其执行涉及在执行线程实例之间的线程间通信或控制。通过对照一或多个条件来证实花费区块链交易的多个锁定脚本,节点能够验证花费区块链交易。证实能够涉及将花费区块链交易的多个锁定脚本与一或多个先前区块链交易的多个锁定脚本进行匹配。证实还能够涉及执行由一或多个先前区块链交易的多个锁定脚本所表示的执行线程实例,以便提供在执行线程实例之间的线程间通信和/或控制。
在一个实施例中,至少一个先前区块链交易的多个锁定脚本能够包括字节码序列和可能的解释器代码,并且花费区块链交易的多个锁定脚本能够被要求包括一或多个先前区块链交易的多个锁定脚本的字节码序列和解释器代码,以便花费区块链交易的验证成功。在此情况下,证实能够涉及将用于花费区块链交易的每个锁定脚本的字节码序列和可能的解释器代码与一或多个先前区块链交易的对应锁定脚本的字节码序列和可能的解释器代码进行匹配。花费区块链的验证能够基于此类匹配的结果来确定。
另外或备选的是,花费区块链交易的操作能够对用于使用区块链实施的智能合约的操作进行编码。
还希望的是提供一种系统,包括:处理器;以及包括可执行指令的存储器,可执行指令由于所述处理器的执行,促使系统执行如所要求保护的任何方法。
还希望的是提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,可执行指令由于被计算机系统的处理器执行,促使计算机系统至少执行如所要求保护的任何方法。
附图说明
根据本文中描述的实施例,本发明的这些和其它方面将是显而易见的,并且将参照所述实施例对其进行阐明。现在将仅通过示例,并且参照附图来描述本发明的实施例,其中:
图1A图示了其中能够实施各种实施例的区块链网络。
图1B图示了比特币区块链环境特定的区块链交易的示例。
图2和3A-3D图示了智能合约的区块链交易的(TX1、TX2、TX3、TX4、TX5、TX6)的序列,其中区块链交易的序列i)对执行线程的执行进行分叉以在分叉构造或操作的控制下生成多个执行线程,以及ii)在屏障构造或操作的控制下在多个执行线程之间采用线程间通信和协作,以及iii)在联接构造或操作的控制下合并多个执行线程。注意,区块链交易TX3和TX4在被提交到区块链时能够表示由区块链交易的序列所表示的多个执行线程(例如,TX3的线程A锁定脚本和TX4的线程B锁定脚本)的并发或异步执行。
图4和5图示了不同智能合约的区块链交易的另一序列,其中区块链交易的序列i)在分叉构造或操作的控制下对执行线程的执行进行分叉以生成多个执行线程,以及ii)在联接构造或操作的控制下合并多个执行线程。区块链交易的此序列在屏障构造或操作的控制下避免了在多个执行线程之间的线程间通信和协作。注意,区块链交易TX3和TX4在被提交到区块链时能够表示由区块链交易的序列所表示的执行的多个线程(例如,TX3的线程A锁定脚本和TX4的线程B锁定脚本)的并发或异步执行。
图6图示了图2和3A-3D的序列的区块链交易TX2的创建、验证和挖掘,其中结果区块链交易TX2是对执行线程(即,线程A锁定脚本)的执行进行分叉的花费交易,该执行线程作为先前区块链交易TX1的锁定脚本被执行以生成在分支构造或操作的控制下的多个执行线程(即,线程A锁定脚本和新线程B锁定脚本的延续),分叉构造或操作作为先前区块链交易TX1的线程A锁定脚本的一部分被执行。线程A锁定脚本和新线程B锁定脚本的延续作为花费区块链交易TX2的锁定脚本被执行。
图7图示了图2和3A-3D的序列的区块链交易TX3的创建、验证和挖掘,其中结果区块链交易TX3是带有在逻辑上跟随图6的区块链交易TX2的单个执行线程(即,线程A锁定脚本)的花费交易。
图8图示了图2和3A-3D的序列的区块链交易TX4的创建、验证和挖掘,其中结果区块链交易TX4是带有在逻辑上跟随图6的区块链交易TX2的单个执行线程(即,线程B锁定脚本)的花费交易。
图9图示了图2和3A-3D的序列的区块链交易TX5的创建、验证和挖掘,其中结果区块链交易TX5是带有多个执行线程(即,线程A锁定脚本和线程B锁定脚本)的花费交易,所述多个执行线程在屏障构造或操作的控制下在多个执行线程之间采用线程间通信和协作,屏障构造或操作作为先前区块链交易TX3和TX4的锁定脚本(即,线程A锁定脚本和/或线程B锁定脚本)的一部分被执行。
图10图示了图4和5的序列的区块链交易TX6'的创建、验证和挖掘,其中结果区块链交易TX6'是带有单个执行线程(例如,线程C锁定脚本)的花费交易,所述单个执行线程在联接构造或操作的控制下被执行,联接构造或操作作为先前区块链交易TX3和TX4的锁定脚本(例如,线程A锁定脚本和/或线程B锁定脚本)的一部分被执行。新线程C锁定脚本作为花费区块链交易TX6'的锁定脚本被执行。
图11是图示了根据实施例的区块链交易的锁定脚本的解释器代码的执行的示意性表示,其与验证节点的运行时系统(例如,区块链客户端)的内置软件解释器的执行协作,以便解释锁定脚本的字节码序列。
图12图示了其中能够实施各种实施例的计算环境。
具体实施方式
首先将参照图1A,图1A图示了根据本公开的实施例的与区块链关联的示例区块链网络100。在该实施例中,区块链网络100包括可能被实施为对等分布式电子装置的区块链节点,每个对等分布式电子装置运行执行操作的软件和/或硬件的实例,操作遵循全部或部分地在区块链节点的运营商之中达成一致的区块链协议。在一些示例中,这些分布式电子装置被简称为“节点”,诸如图1A中的节点102。区块链协议的一个示例是比特币协议。
通过计算资源服务提供商的分布式系统中的多个计算装置,或者通过诸如图12的计算装置2600的任何合适的电子客户端装置,节点102可以包括任何合适的计算装置(例如,数据中心中的服务器、诸如台式计算机、膝上型计算机、平板计算机、智能电话等的客户端计算装置)。节点102能够具有输入以接收数据消息或表示所提议的交易(诸如交易104)的对象。节点102可能对于它们维护的信息是可查询的,诸如它们对交易状态的理解。
如图1A中所示,一些节点102通信地耦合到一或多个其它节点102。关于哪些节点102能够与哪些其它节点进行通信,不需要集中地确定那些细节。假设消息是区块链协议指示应被转发的消息,区块链网络100中的活跃节点能与一或多个其它节点102进行通信,使得从一个节点102传递到另一节点102的消息能够在整个区块链网络100(或其的某一重要部分)中传播便足够了。一个此类消息可能是由节点102A之一对所提议的交易的公布,其随后将沿着诸如路径106的路径传播。另一此类消息可能是被提议包括在区块链上的新区块的公布。
节点102能够维持包括与区块链中的区块对应的数据的区块链分类帐。这些区块是在密码上不可变的,因为随后的区块依赖于在一个区块变成不可变时在该区块上计算的值,并且对不可变区块的任何修改能够被其它区块链节点容易地识别为无效区块。区块链分类帐还能够包括与可能是可变的并且尚未被提交到区块链的交易对应的数据。区块链分类帐可能是区块链网络的区块链分类帐的完整副本或其的一部分。一些节点可能只维持未花费的交易,而其它节点可能维护整个分类帐。这样,分类帐是分布式分类帐,因为每个节点能够具有其自己的副本。节点优选仅根据协议的规则修改其副本,并且对于完全遵循这些规则的所有节点,它们的副本有时应与其它节点相同,为区块和交易节省一些传播时间。节点102应包括证实它接收的区块和那些区块中的交易的能力。区块链协议的规则可能是:如果节点确定区块或交易是无效的,则它将不传播该区块或交易到其它节点。通过该规则,有效并被证实为是有效的区块和交易将传播区块链网络,而无效的区块和交易将不传播。
区块链网络中的一些节点102是矿工节点,其执行收集交易和创建交易的区块的操作,使得新区块能够被提交给区块链。矿工节点可能被期望执行既复杂(以避免流氓节点容易地创建不当区块)又依赖于所包括的交易的数据(使得流氓节点不能提前执行复杂的操作)的某一操作,其中那些任务的性能容易地被其它节点证实。那些其它节点证实矿工节点的工作,并且经证实,它们将该区块接受到它们的区块链的副本中并传播它。这将新区块提交给区块链的分布式分类帐。在一些示例中,区块是一组交易,通常标记有该先前区块的时戳和“指纹”(例如散列)。这样,每个区块变得链接到先前区块,从而创建链接区块链中的区块的“链”。在实施例中,根据区块链网络中的节点的共识将有效区块添加到区块链。此外,在一些示例中,区块链包括经验证的区块的列表。
在实施例中,至少一些节点作为验证交易的验证节点来操作,如本公开中所描述的。在一些示例中,区块链以数字资产的形式证明价值,并且区块链的交易一起提供从创始交易(其开始区块链)或从生成新“挖掘的”数字资产作为对矿工节点运营商的激励的奖励交易到后续交易的链。链的一部分的末端将是未花费的交易或其的一部分,并且区块链上的每个交易指定一或多个输出,其中一些输出可能被花费,而一些输出可能未花费,其中输出包括该输出的值的规范和对于某人通过插入将扩展链的该部分的有效交易(即,至少满足指定要求的交易)来“花费”该输出所需的要求。在本文中使用时,未花费的交易输出可能被称为UTXO。
对某人花费UTXO所需的要求在UTXO的锁定脚本中指定。有效的花费交易将是这样的交易:(i)将一或多个先前UTXO指定为交易的输入,其中该指定能带有指向UTXO的指针,(ii)满足用于那些UTXO中的每一个的锁定脚本的要求,以及(iii)具有输入,使得由那些输入所指向的所有UTXO的值的总和小于或等于交易的所有输出的值的总和。表示满足锁定脚本的要求的数据能够由解锁脚本提供。验证节点能够处理解锁脚本,随后是锁定脚本,并且该进程的输出是无效结果或对花费交易的验证。
该进程可以是无状态进程,使得如果一个节点运行该解锁脚本和该锁定脚本,则结果是将在其它节点得出的验证。因此,满足已经在区块链上尚未被花费的先前交易的输出的锁定脚本的花费交易将传播并且最终被提交到区块链。创建了被提交的花费交易的节点又将在其自己的锁定脚本中指定了对任何人花费该新交易的输出的值所需的要求。该进程被认为是无状态的,因为除了一些小的例外,脚本不需要引用脚本之外的参考,并且不依赖于那些脚本之外的变量或其它状态。结果,能够独立地评估解锁脚本和锁定脚本。
在其它变化中,区块链系统可能包括允许将外部数据包括在脚本评估进程中的功能性。在此类情况下,能够以如下方式控制和/或保护外部数据:使用外部数据来评估解锁脚本和锁定脚本时,评估跨执行评估的节点是一致的。
图1B图示了如可能被存储在图1A的区块链节点102使用的区块链分类帐中的交易150的示例。带有类似功能性的其它变化是可能的。交易的数据元素或字段可能如图1B所示,并且可能包括除了在本公开中描述的那些之外的另外的字段。如所示出的,存在区块链版本字段152,其具有指示交易150的区块链协议版本的值。#vin字段154指示在交易150中存在多少交易输入(下面解释)。其它字段可能存在并且未被图示,但对于每个交易输入(这里图示为示例Vin[y]160),存在字段集,包括先前交易的交易ID(TxID)161、对该先前交易(供应交易输出以匹配交易输入160的交易)的交易输出之一的索引162,其中TxID161和索引162一起形成引用先前交易的交易输出的指针163。在本文中使用时,术语“先前交易”在相对于当前或本交易的上下文中使用时指的是具有由当前或本交易引用(和“花费”)的交易输出的特定在前交易(或多个交易)。在示例中,当前或本交易可能被称为“花费交易”。
在一些区块链实施中,不存在用于指派唯一TxID值的集中机制,并且相反,存在用于为交易生成唯一TxID的去中心化机制,诸如通过生成交易本身的内容的散列。由于有效交易不能具有与另一有效交易完全相同的所有内容,因此,每个有效交易将具有用于其TxID的唯一散列(除了散列冲突的极低概率之外)。无论如何实施,本文中假设每个交易具有唯一的交易ID。由于散列处理的性质,一旦从交易的内容生成了TxID,该内容就不能被更改并且使TxID对于该交易保持有效。
如图1B中所示,用于交易输入Vin[y]160的该字段集还包括指示随后的解锁脚本的长度的Unlocking_Script_Length字段164、包括“解锁”由指针163所指向的交易输出的对应锁定脚本的用于vin[y]160的解锁脚本的Unlocking_Script字段165(在比特币协议中通常称为作为“scriptSig”)及可能被用来约束交易150的序列#字段166。
虽然图1B仅明确地示出一个交易输入和一个交易输出,但每者多于一个是可能的。在交易输入之后,存在#vout字段170,其指示在交易150中存在多少交易输出(也在下面解释)。对于每个交易输出(这里图示为示例Vout[x]180),存在字段集,包括指示由此交易输出Vout[x]180提供的交易值的输出值字段181、指示随后的锁定脚本的长度的Locking_Script_Length字段182及包括用于此交易输出Vout[x]180的锁定脚本(在比特币协议中通常称为“scriptPubKey”)的Locking_Script字段183。如所解释的,此交易输出的交易值能够由能创建具有交易输入的花费交易的任何人“花费”,该交易输入具有在使用该解锁脚本和该锁定脚本执行证实时区块链节点将证实为TRUE的解锁脚本。其它字段可能跟随交易输出字段,诸如锁定时间字段190,其能够约束交易150在指定的将来时间之前或在指定的将来区块之前不活跃。在花费交易的每个交易输入指向先前交易输出的对应交易输出并且先前交易输出包括交易值的情况下,交易输入不需要包括指示该交易值的字段。
在本公开中,引用各种脚本操作码(或op_code)和关键字来执行各种操作。比特币协议使用称为“脚本”的脚本系统来执行各种操作。然而,预期其它区块链技术能够实施不同指令集,并且因此本公开中所描述的操作码被认为是说明由操作码而不是脚本中的特定操作码执行的操作。在一些实施例中,脚本系统是图灵不完整指令集(例如,缺乏对循环、递归,goto语句等的支持)。在其它实施例中,脚本系统能够是图灵完整指令集。
本公开的某些实施例能够在用于实施所描述的指令集的脚本系统或其它系统在单个脚本中允许多于200个指令(例如,操作码或op_code)的假设下操作。同样地,本公开的某些实施例进一步假设:
·在执行操作码脚本/指令集的系统中,存在并且启用了由某些低级操作码(或低级字节码操作)提供的功能性;和/或
·通过创建自定义的功能,能够实施由某些高级操作码(或高级字节码操作)提供的功能性,这些自定义的功能被编写为提供期望的行为。这些自定义的功能可能是为实施该语言中存在但已被禁用的op_code的功能性而被编写的,或者可以是提供了脚本语言本身未提供的特定功能性的“新”op_code。
能够由脚本系统支持的低级操作码的示例包括:
·OP_1SUB,其中从顶部堆栈项目中减去值“1”
·OP_2DUP,其复制顶部两个堆栈项目
·OP_ADD,其在堆栈上添加顶部两个项目
·OP_CAT,其级联堆栈上顶部两个项目
·OP_CHECKSIG,其中公共密钥和签名从堆栈中弹出,并根据SIGHASH类型对照交易字段的签名进行证实。如果签名有效,则返回1,否则返回0。
·OP_CHECKSIGVERIFY,其功能与OP_CHECKSIG相同,但之后执行OP_VERIFY
·OP_DROP,其移除或弹出堆栈的顶部项目
·OP_DUP,其复制顶部堆栈项目
·OP_ELSE,如果未执行前面的OP_IF或OP_NOTIF或OP_ELSE,则将执行这些语句;否则,如果执行了前面的OP_IF或OP_NOTIF或OP_ELSE,则不执行这些语句
·OP_ENDIF,其结束如果/否则区块
·OP_EQUAL,如果输入完全相等,则返回1,否则返回0
·OP_EQUALVERIFY,其与OP_EQUAL相同,但之后运行OP_VERIFY
·OP_FROMALTSTACK,其将输入放置在主堆栈的顶部,并将其从备用堆栈中移除
·OP_HASH256,其中输入被散列两次:首先使用SHA-256,然后使用RIPEMD-160
·OP_IF,如果顶部堆栈值不为FALSE,则执行语句并移除顶部堆栈值
·OP_LEFT,其只保留字符串中指定点左侧的字符
·OP_MUL,其将堆栈上的顶部两个项目相乘
·OP_NOTIF,如果顶部堆栈栈值为FALSE,则执行语句并且移除顶部堆栈值
·OP_RIGHT,其只保留字符串中指定点右侧的字符
·OP_ROLL,其中堆栈中深为n个项目的项目被移到顶部
·OP_ROT,其将堆栈上的顶部三个项目旋转到左侧
·OP_SIZE,其推动堆栈的顶部元素的字符串长度(不弹出它)
·OP_SUBSTR,其返回字符串的一部分
·OP_SWAP,其中交换堆栈上的顶部两个项目
·OP_TOALTSTACK,其将输入放置在备用堆栈的顶部,并将其从主堆栈中移除
·OP_TUCK,其中复制在堆栈顶部的项目并且将其插入在顶部第二项目之前
·OP_VERIFY,如果顶部堆栈值不为TRUE,则其将交易标记为无效
这些低级操作码当前由比特币协议的脚本系统支持。
能够本公开的方法和系统支持的高级操作码的示例包括:
·OP_ECPX,其返回椭圆曲线点的x坐标
·OP_BIGMOD,其在将堆栈上顶部两个项目相除后返回余数
·OP_BIGMODADD,其对堆栈的顶部两个项目执行模数为堆栈的第三项目的模数加法
·OP_BIGMODINVERSE,其执行模数负指数运算
·OP_BIGMODMUL,其对堆栈的顶部两个项目执行模数为堆栈的第三项目的模数乘法
·OP_DERENCODE,其以DER格式对堆栈上的顶部两个项目进行编码
·OP_ECPMULT,其对堆栈上的顶部两个项目执行椭圆曲线点乘法(也称为椭圆曲线标量乘法)
这些高级操作码能够提供在比特币协议的脚本系统中本身未提供的特定功能性。
花费交易的验证能够涉及对照花费交易的同一交易输入Vin[x]160的解锁脚本(scriptSig)165,对由花费交易的交易输入Vin[x]160的指针163所指向的先前交易的未花费输出的锁定脚本(scriptPubKey)的证实。在更一般的情况下,每个交易能够具有多个输入和/或多个输出,在此情况下,锁定脚本可能是用于先前交易的多个交易输出之一的锁定脚本,并且解锁脚本可能是用于花费交易的多个交易输入之一的解锁脚本。此类验证能够由基于堆栈的交易证实器执行,该交易证实器根据其输入是否有效来输出TRUE或FALSE结果。在其它变化中,交易证实器能够引用外部可信数据或状态。这里的教导可能也适用于不使用基于堆栈的交易证实器的区块链系统。
除了一些小的例外,对于基于堆栈的交易验证器,锁定脚本和解锁脚本被独立地处理,并且不依赖于那些脚本之外的变量或其它状态。结果,锁定脚本将不引用锁定脚本本身之外的先前交易的字段。锁定脚本还不能引用花费交易的字段,因为在创建先前交易和因此也创建锁定脚本,并使其变得不可变时,花费交易并不存在。此外,解锁脚本不能直接对花费交易的字段进行操作。这些限制是有用的,因为它们确保在给定相同的锁定脚本和相同的解锁脚本的情况下,任何正确编程的区块链节点将得到相同的结果。对于此的一个例外是,脚本可能具有对照从作为整体的交易生成的签名来检查脚本之一中的签名的能力。在实施例中,脚本能够为此目的使用OP_CHECKSIG op_code。
在基于堆栈的操作中,交易证实器通过依次处理脚本中的每个op_code来执行解锁脚本。一些op_code导致处理,一些导致数据在堆栈上被访问,或者某一组合。一旦完成解锁脚本的执行,就可以存在保留在堆栈上的数据。如果解锁脚本的执行没有终止执行的脚本错误或op_code,则交易证实器随后执行锁定脚本,该锁定脚本能够使用堆栈上存在的数据。在使用相同的op_code集来编写锁定脚本和解锁脚本的情况下,这在效果上类似于执行单个脚本,该单个脚本包括解锁脚本和之后的锁定脚本的级联。然而,在解锁脚本的op_code的执行结束时以及在锁定脚本的op_code的执行之前检查脚本错误能够防止由畸形解锁脚本引起的问题。一旦脚本的执行完成,保留在堆栈顶部的结果就是证实的结果。如果在堆栈的顶部为TRUE,则认为证实了解锁脚本实际上解锁了锁定脚本。在此方面,解锁脚本满足锁定脚本的所有要求。
注意,用于区块链交易的锁定脚本能够经由签名和其它密码技术对区块链交易的对应解锁脚本中必须存在的内容施加约束。一个此类约束是解锁脚本必须包括一些任意数据。一些约束可能是“弱约束”或更一般的约束,诸如解锁脚本必须包括具有四个字节长度的一些数据的约束,或某一特定数量的字节而不将那些字节约束为任何特定值。更强或更特定的约束是数据被散列化时数据必须产生特定的散列值。此后一约束通常要求数据具有特定长度并且是用于数据的特定值,因为他人几乎不可能确定将产生相同散列的不同值。通过解锁脚本将该数据推送到堆栈上,或者将该数据的散列推送到堆栈上,使锁定脚本将所需的散列推送到堆栈上,并且随后执行OP_EQUAL op_code,以及随后执行OP_VERIFY op_code,可能在脚本中实施该约束。如果这两个被推送项目匹配,则这些op_code将返回TRUE,并且如果不匹配,则返回FALSE。在更一般的情况下,能够施加要求存在某些数据或存在带有某些特性的数据的约束。
弱约束的示例是解锁脚本必须包括某些数据,这些数据可能包括该序列化的花费交易字段集,而不必要求这些字段是任何特定值。这样,锁定脚本能够约束将该锁定脚本的输出解锁的解锁脚本的脚本,以包括该解锁脚本所来自的花费交易的字段。这有效地允许锁定脚本对解锁脚本在堆栈上留下的花费交易的字段执行操作。弱约束的另一示例是解锁脚本必须包括可能从指定位置获得的某些数据,但是其中对数据的值没有约束。这允许即使在锁定脚本不可变之后很久才确定数据的值,也能够被施加的一些弱约束。
包括指定某些约束和约束可能包括的数据的区块链交易的锁定脚本和解锁脚本的操作能够被用来实施“智能合约”。智能合约能够定义合约的条款和条件,涉及谁能够做什么,他们什么时候能够做,以及谁在什么时候得到什么报酬。在条款和条件能够被表示为对解锁脚本或花费交易的其它部分的弱约束或强约束的情况下,智能合约的那些条款和条件能够由区块链协议强制执行。
在说明性示例中,Alice借给Bob一些钱并且Bob同意偿还Alice。区块链交易的序列的锁定脚本和解锁脚本能够被实施为智能合约以表示Bob向Alice的付款。例如,智能合约能够被构造成使得Bob在接下来的三个月每月向Alice付款,并且如果未履行付款,则Bob的债务进入债务收取阶段。在债务收取阶段,Alice能够释放交易并且将其移交给收债人,其将从Bob收取债务。此类智能合约能够使用本文中所描述的锁定脚本和解锁脚本上的变化来创建。
在另一示例中,Alice是每月赠送1个单位的数字资产的非常慈善的人。她的规则是任何人都可以索要该数字资产,但每月仅1个单位能够被索要。Alice以在本公开中所描述的方式创建智能合约,并且用3个单位的数字资产的初始池作为其种子。Alice能够构造允许任何实体每月拿走1个单位的数字资产的脚本,这被复制以允许剩余部分的数字资产每月通过区块链交易的序列被索要。
区块链交易的序列的解锁脚本和锁定脚本能够实施字节码序列,字节码序列实施表示智能合约随时间的过去的状态的非信任确定性状态机。更具体地,字节码序列能够被认为是计算机程序,该计算机程序通过状态规则集和明确定义的状态集体现状态机,借此字节码序列(计算机程序)的字节码的执行提供在状态机的状态之间的转变。一些状态规则能够相当复杂,并且有多个路径。在此类情况下,能够相对于其它计算或操作同时或异步地完成字节码序列执行的一些计算或操作。
锁定脚本能够包括强加在解锁脚本上的约束,并且因此能够要求将某些数据注入到花费交易输入的解锁脚本中,诸如花费交易本身的序列化的字段、包括正被执行的锁定脚本的先前交易的序列化的字段、当前状态值、来自所确定的源(可选)的输入及指定从当前状态和其它输入计算下一状态所要求的状态机的条件和操作的执行数据。
锁定脚本能够包括解释器代码和字节码的序列。解释器代码能够被配置成递增地和按顺序地解释和执行字节码的序列。字节码的序列的执行能够被看作是形成执行的线程,类似于传统程序。在传统软件程序中,能够创建并在以后使用分叉-联接模型将新执行线程联接在一起。这能够使得新线程能继续执行,直至包括的程序终止,该线程被请求停止,或者它自然地完成执行。执行程序能够等待线程结束,并且使用联接操作继续执行。本公开使执行的此模型适合在智能合约的上下文中的区块链交易中使用。为允许此行为,被解释的锁定脚本采用某些标记或构造,其允许解释器代码确定何时要求不同的功能性(包括分叉、联接和屏障构造)。这些构造支持相对于其它计算或操作同时或异步地执行操作或计算的状态机。分叉构造从一个状态或执行路径(或“执行的线程”或“执行线程”或“执行线程实例”)创建多个不同的执行路径(或“执行的线程”或“执行线程”或“执行线程实例”)。由分叉构造产生的执行线程能够被称为子执行线程。产生子执行线程的一个执行线程能够被称为父执行线程。分叉构造能够被用来彼此并行地执行计算或操作(诸如在公共映射/化简工作流中)或产生新合约。联接构造将多个不同的执行路径(或“执行的线程”或“执行线程”或“执行线程实例”)联接在一起成为一个执行路径(或“执行的线程”或“执行线程”或“执行线程实例”)。由联接构造产生的一个执行线程能够被称为子执行线程。被联接以形成子执行线程的多个执行线程能够被称为父执行线程。产接构造能够被用来将智能合约的多个执行线程合并在一起,或从多个智能合约的结果构造另一智能合约。屏障构造被用来管理和控制在多个不同的执行路径(或“执行的线程”或“执行线程”或“执行线程实例”)之间的通信和协作。
图2图示了区块链交易的(TX1、TX2、TX3、TX4、TX5、TX6)的序列的示例实施例,其中区块链交易的序列i)对执行线程的执行进行分叉以在分叉构造的控制下生成多个执行线程,以及ii)在屏障构造的控制下在多个执行线程之间采用线程间通信和协作,以及iii)在联接构造的控制下合并多个执行线程。执行线程是一或多个状态机的执行路径,所述状态机能够是智能合约的一部分或不同智能合约的部分。
注意,区块链交易TX3和TX4在被提交到区块链时能够表示由区块链交易的序列所表示的多个执行线程(例如,TX3的线程A锁定脚本和TX4的线程B锁定脚本)的并发或异步执行。这在智能合约需要在多个并发或异步步骤中被执行的情况下可能是有用的。具体而言,在合约的过程中,任务有时能够在合约期间并发或异步地被执行。例如,建造房屋的合约可能用于铺砖的各个阶段和用于绿化的各个完成阶段,这可能是可并行进行的。通过允许智能合约采用相对于彼此并发或异步地被执行的区块链交易,能够以异步方式相对于彼此独立地执行合约的不同的片段。
分叉构造被编码为区块链交易TX1的锁定脚本的一部分。分叉构造通过使用对花费区块链交易TX2的锁定脚本的约束来对区块链交易TX1的执行线程(或执行线程实例)进行分叉或复制。在交易级,分叉构造要求对于给定的锁定脚本,在花费区块链交易中将需要存在至少两个或不止两个锁定脚本。在所示的示例中,区块链交易TX1的锁定脚本的分叉构造支持通过区块链交易TX2的两个交易输出的对应线程A锁定脚本和线程B锁定脚本来创建多个执行线程。
屏障构造被编码为区块链交易TX3的线程A锁定脚本和/或区块链交易TX4的线程B锁定脚本的一部分。屏障构造提供对在线程A锁定脚本与线程B锁定脚本之间的线程间通信和协作的控制。此类控制能够涉及将执行线程约束在执行的特定点,或者停止(等待)或休眠一个执行线程(例如,线程B锁定脚本)的执行直至由另一执行线程(例如,线程A锁定脚本)释放,或者其它线程同步条件。此类控制能够被用来在多个执行线程彼此竞争以完成它们的任务的情况下避免竞争条件。在交易级,屏障构造要求,对于要被管理或控制的线程特定的锁定脚本中的每一个,需要存在指向线程特定的锁定脚本以及花费区块链交易中的对应线程特定的锁定脚本的指针。
联接构造被编码为线程A锁定脚本和/或线程B锁定脚本的一部分,并且被用来创建区块链交易TX6。联接构造能够确保线程A锁定脚本和线程B锁定脚本已终止,并且能够将线程A锁定脚本和线程B锁定脚本的结果执行状态组合或合并成执行的单个线程(例如,线程C锁定脚本)。这在智能合约需要处理由多个执行线程产生的结果数据的情况下能够是有用的。在交易级,联接构造要求,对于要被联接的线程特定的锁定脚本中的每一个,需要存在指向花费区块链交易中的对应锁定脚本的指针。
图3A图示了图2的区块链交易TX2的创建、验证和挖掘,其中先前区块链交易TX1的锁定脚本对分叉构造进行编码。该示例性分叉构造对先前区块链交易TX1的线程A锁定脚本的执行进行分叉以生成作为区块链交易TX2的两个交易输出A、B的锁定脚本的两个执行线程(或执行线程实例)(例如,交易输出A包括先前区块链交易TX1的线程A锁定脚本的延续,并且交易输出B包括新线程B锁定脚本)。在此情况下,如所示地创建区块链交易TX2,其包括单个交易输入和用于线程A锁定脚本的延续和新线程B锁定脚本的两个交易输出。单个交易输入包括用于先前区块链交易TX1的线程A锁定脚本的解锁脚本。从先前区块链交易TX1的交易输出复制用于线程A锁定脚本(或其一部分)的延续的交易输出A。从分叉构造的执行中确定用于新线程B锁定脚本的交易输出B。预期能够存在如下面更详细所描述的用于新线程B锁定脚本的不同情形。区块链交易TX2一旦被创建,就将被发送或广播到区块链网络以便进行验证。在成功验证后,区块链交易TX2能够由区块链网络的挖掘节点进行挖掘以便存储在区块链208中,如图所示。
在一种情形(称为“带有复制的线程的分叉”)中,从线程A锁定脚本的操作中复制用于交易输出B的新线程B锁定脚本的操作。在此情况下,共享相同操作的两个不同的执行线程可能通过不同的输入数据来执行。这是在常见的MapReduce类型情况下有用的变体。在此“带有复制的线程的分叉”情形中,区块链交易TX2的创建和/或验证能够涉及处理区块链交易TX2的每个交易输出,以检查区块链交易TX2的交易输出的锁定脚本是否匹配先前区块链交易TX1的单个交易输出的锁定脚本。如果对于区块链交易TX2的交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且区块链交易TX2能够被认为无效。如果此检查通过,则分叉构造能够继续,其中区块链交易TX2的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态,该指定的执行状态能够对于区块链交易TX2的交易输出的锁定脚本是相同的或不同的。如果对于区块链交易TX2的交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且区块链交易TX2能够被认为无效。如果对于区块链交易TX2的所有交易输出的此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX2能够被认为有效。
在另一情形(称为“支持不同的线程的分叉”)中,用于输出B的新线程B锁定脚本的操作能够与线程A锁定脚本的操作是相同的或不同的(或不同的)。在此情况下,能够静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)与有效锁定脚本对应的有效散列值集合。区块链交易TX2的创建和/或验证能够涉及确定用于由区块链交易TX2的交易输入所指向的先前区块链交易的锁定脚本的散列值,并在希望时将此散列值添加到散列值集合。对区块链交易TX2的每个交易输出进行处理,以检查对区块链交易TX2的交易输出的锁定脚本进行散列处理是否产生匹配该集合的有效散列值之一的散列值。如果对于区块链交易TX2的交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且区块链交易TX2能够被认为无效。如果此检查通过,则分叉构造能够继续,其中区块链交易TX2的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态,该指定的执行状态能够对于区块链交易TX2的交易输出的锁定脚本是相同的或不同的。如果对于区块链交易TX2的交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且区块链交易TX2能够被认为无效。如果对于区块链交易TX2的所有交易输出的此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX2能够被认为有效。
图3B图示了图2的区块链交易TX3的创建、验证和挖掘,其中先前区块链交易TX2的线程A锁定脚本的执行被继续。在此情况下,如所示地创建区块链交易TX3,其包括单个交易输入和单个交易输出,该单个交易输出包括线程A锁定脚本的延续。该交易输入包括用于先前区块链交易TX2的线程A锁定脚本的解锁脚本。从用于线程A锁定脚本的先前区块链交易TX2的交易输出复制用于线程A锁定脚本(或其一部分)的延续的交易输出。区块链交易TX3一旦被创建,就将被发送或广播到区块链网络以便进行验证。在成功验证后,区块链交易TX3能够由区块链网络的挖掘节点进行挖掘以便存储在区块链208中。
在实施例中,区块链交易TX3的创建和/或验证能够涉及处理区块链交易TX3的交易输出,以检查区块链交易TX3的交易输出的锁定脚本是否匹配用于线程A锁定脚本的先前区块链交易TX2的交易输出的锁定脚本。如果对区块链交易TX3的交易输出的检查失败,则失败条件能够被引发,并且区块链交易TX3能够被认为无效。如果对区块链交易TX3的交易输出的检查通过,则区块链交易TX3的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态。如果此进一步检查失败,则区块链交易TX3能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX3能够被认为有效。
图3B还图示了图2的区块链交易TX4的创建、验证和挖掘,其中先前的区块链交易TX2的线程B锁定脚本的执行继续。在此情况下,如所示地创建区块链交易TX4,其包括单个交易输入和用于线程B锁定脚本的延续的单个交易输出。该交易输入包括用于先前区块链交易TX2的线程B锁定脚本的解锁脚本。从用于线程B锁定脚本的先前区块链交易TX2的交易输出复制用于线程B锁定脚本(或其一部分)的延续的交易输出。区块链交易TX4一旦被创建,就将被发送或广播到区块链网络以便进行验证。在成功验证后,区块链交易TX4能够由区块链网络的挖掘节点进行挖掘以便存储在区块链208中。
在实施例中,区块链交易TX4的创建和/或验证能够涉及处理区块链交易TX4的交易输出,以检查区块链交易TX4的交易输出的锁定脚本是否匹配用于线程B锁定脚本的先前区块链交易TX2的交易输出的锁定脚本。如果对区块链交易TX4的交易输出的检查失败,则失败条件能够被引发,并且区块链交易TX4能够被认为无效。如果对区块链交易TX4的交易输出的检查通过,则能够检查区块链交易TX4的交易输出的锁定脚本的执行状态以确保它对应于指定的执行状态。如果此进一步检查失败,则失败条件能够被引发,并且区块链交易TX4能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX4能够被认为有效。
图3C图示了图2的区块链交易TX5的创建、验证和挖掘,其涉及在屏障构造的控制下先前区块链交易TX3的线程A锁定脚本的执行和先前区块链交易TX4的线程B锁定脚本的执行。在此情况下,如所示地创建区块链交易TX5,其包括两个交易输入(一个包括用于先前区块链交易TX3的线程A锁定脚本的解锁脚本,并且另一个包括用于先前区块链交易TX4的线程B锁定脚本的解锁脚本)和用于线程A锁定脚本和线程B锁定脚本的两个交易输出。从先前区块链交易TX3的交易输出复制用于线程A锁定脚本(或其一部分)的交易输出A。从先前区块链交易TX4的交易输出复制用于线程B锁定脚本(或其一部分)的交易输出B。区块链交易TX5一旦被创建,就将被发送或广播到区块链网络以便进行验证。在成功验证后,区块链交易TX5能够由区块链网络的挖掘节点进行挖掘以便存储在区块链208中。
在实施例中,区块链交易TX5的创建或验证能够涉及处理区块链交易TX5的每个交易输出,以检查区块链交易TX5的交易输出的锁定脚本是否匹配先前区块链交易(例如在此示例中的TX3或TX4)的对应交易输出的锁定脚本。如果对于区块链交易TX5的交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且区块链交易TX5能够被认为无效。如果此检查通过,则屏障构造能够继续,其中区块链交易TX5的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态。结果执行状态能够由屏障构造的一或多个参数指示。此类参数能够涉及约束用于执行的线程在执行的特定点,或者停止(等待)或休眠执行的一个线程(例如,线程B锁定脚本)的执行直至由执行的另一线程(例如,线程A锁定脚本)释放,或者其它线程同步条件。此类控制能够被用来在执行的多个线程彼此竞争以完成它们的任务的情况下避免竞争条件。如果对于区块链交易TX5的交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且区块链交易TX5能够被认为无效。如果对于区块链交易TX5的所有交易输出的此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX5能够被认为有效。
图3D图示了图2的区块链交易TX6的创建、验证和挖掘,其中在联接构造的控制下先前区块链交易TX5的多个执行线程(线程A锁定脚本和线程B锁定脚本)被联接到区块链交易TX6的单个执行线程(线程C锁定脚本)中。在此情况下,如所示地创建区块链交易TX6,其包括两个交易输入(一个包括用于先前区块链交易TX5的线程A锁定脚本的解锁脚本,并且另一个包括用于先前区块链交易TX5的线程B锁定脚本的解锁脚本)和用于新线程C锁定脚本的一个交易输出。从联接构造的执行中能够确定用于线程C锁定脚本的交易输出。预期能够存在如下面更详细所描述的用于线程C锁定脚本的不同情形。区块链交易TX6一旦被创建,就将被发送或广播到区块链网络以便进行验证。在成功验证后,区块链交易TX6能够由区块链网络的挖掘节点进行挖掘以便存储在区块链208中。
在一种情形(称为“与复制的线程的联接”)中,从线程A锁定脚本和线程B锁定脚本的公共操作中复制用于新线程C锁定脚本的操作。在此情形中,区块链交易TX6的创建和/或验证能够涉及处理区块链交易TX6的单个交易输出,以检查交易输出的锁定脚本是否匹配用于先前区块链交易TX5的两个交易输出(线程A锁定脚本和线程B锁定脚本)中的每一个的锁定脚本。如果对于父锁定脚本中的任何一个的此检查失败,则失败条件能够被引发,并且区块链交易TX6能够被认为无效。如果此检查通过,则联接构造能够继续,其中线程A锁定脚本和线程B锁定脚本被执行到一些静态定义或动态推断的特定位置,并且随后结果执行状态能够被组合或合并以推导出用于线程C锁定脚本到某一定义的位置的执行的初始执行状态。如果此进一步检查失败,则失败条件能够被引发,并且区块链交易TX6能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX6能够被认为有效。
在另一情形(称为“支持不同的线程的联接”)中,用于新线程C锁定脚本的操作能够与线程A锁定脚本和线程B锁定脚本的操作是相同的或不同的(或不同的)。在此情况下,能够静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)与有效锁定脚本对应的有效散列值集合。区块链交易TX6的创建和/或验证能够涉及确定用于由区块链交易TX6的交易输入所指向的先前区块链交易TX5的线程A锁定脚本和线程B锁定脚本的散列值,并在希望时将这些散列值添加到散列值集合。对区块链交易TX6的交易输出进行处理,以检查对区块链交易TX6的交易输出的锁定脚本进行散列处理是否产生匹配集合的有效散列值之一的散列值。如果此检查失败,则失败条件能够被引发,并且区块链交易TX6能够被认为无效。如果此检查通过,则联接构造能够继续,其中线程A锁定脚本和线程B锁定脚本被执行到一些静态定义或动态推断的特定位置,并且随后结果执行状态能够被组合或合并以推导出用于线程C锁定脚本到某一定义的位置的执行的初始执行状态。如果此进一步检查失败,则失败条件能够被引发,并且区块链交易TX6能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX6能够被认为有效。
在用于联接构造的所有这些情形中,交易TX6的指定执行状态能够确保线程A锁定脚本和/或线程B锁定脚本已终止执行,并且能够涉及组合或合并线程A锁定脚本和线程B锁定脚本的结果执行状态。这在智能合约需要处理由执行的多个线程产生的结果数据的情况下能够是有用的。
图4图示了不同智能合约的区块链交易的另一序列,其中区块链交易的序列i)在分叉构造或操作的控制下对执行线程的执行进行分叉以生成多个执行线程,以及ii)在联接构造或操作的控制下合并多个执行线程。区块链交易的此序列在屏障构造或操作的控制下避免了在多个执行线程之间的线程间通信和协作。
图4的区块链交易TX2、TX3和TX4能够如上相对于图3A-3B所述被创建、验证和挖掘。注意,区块链交易TX3和TX4在被提交到区块链时能够表示由区块链交易的序列所表示的执行的多个线程(例如,区块链交易TX3的线程A锁定脚本和区块链交易TX4的线程B锁定脚本)的并发或异步执行。
图5图示了图4的区块链交易TX6'的创建、验证和挖掘,其中在联接构造的控制下先前区块链交易TX3的线程A锁定脚本的执行线程和先前区块链交易TX4的线程B锁定脚本的执行线程被联接到区块链交易TX6'的单个执行线程(线程C锁定脚本)中。在此情况下,如所示地创建区块链交易TX6',其包括两个交易输入(一个包括用于先前区块链交易TX3的线程A锁定脚本的解锁脚本,并且另一个包括用于先前区块链交易TX4的线程B锁定脚本的解锁脚本)和用于新线程C锁定脚本的一个交易输出。从联接构造的执行中能够确定用于线程C锁定脚本的交易输出。预期能够存在如下面更详细所描述的用于线程C锁定脚本的不同情形。区块链交易TX6'一旦被创建,就将被发送或广播到区块链网络以便进行验证。在成功验证后,区块链交易TX6'能够由区块链网络的挖掘节点进行挖掘以便存储在区块链208中。
在“与复制的线程的联接”情形中,从线程A锁定脚本和线程B锁定脚本的公共操作中复制用于线程C锁定脚本的操作。在此情形中,区块链交易TX6的验证能够涉及处理区块链交易TX6的单个交易输出,以检查交易输出的锁定脚本是否匹配先前区块链交易TX3的交易输出的线程A锁定脚本和先前区块链交易TX4的交易输出的线程B锁定脚本。如果对于父线程锁定脚本中的任何一个的此检查失败,则失败条件能够被引发,并且区块链交易TX6'能够被认为无效。如果此检查通过,则联接构造能够继续,其中区块链交易TX6'的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态,并且先前区块链交易TX3的线程A锁定脚本和先前区块链交易TX4的线程B锁定脚本的父线程的执行状态能够被合并在一起。如果此进一步检查失败,则失败条件能够被引发,并且区块链交易TX6'能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX6'能够被认为有效。
在“支持不同的线程的联接”情形中,用于新线程C锁定脚本的操作能够与线程A锁定脚本和线程B锁定脚本的操作是相同的或不同的(或不同的)。在此情况下,能够静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)与有效锁定脚本对应的有效散列值集合。区块链交易TX6'的创建和/或验证能够涉及确定用于由区块链交易TX6'的交易输入所指向的先前区块链TX3的线程A锁定脚本和先前区块链交易TX4的线程B锁定脚本的散列值,并在希望时将这些散列值添加到散列值集合。对区块链交易TX6'的交易输出进行处理,以检查对区块链交易TX6'的交易输出的锁定脚本进行散列处理是否产生匹配集合的有效散列值之一的散列值。如果此检查失败,则失败条件能够被引发,并且区块链交易TX6'能够被认为无效。如果此检查通过,则联接构造能够继续,其中区块链交易TX6'的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态,并且先前区块链交易TX3的线程A锁定脚本和先前区块链交易TX4的线程B锁定脚本的父线程的执行状态能够被合并在一起。如果此进一步检查失败,则失败条件能够被引发,并且区块链交易TX6'能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则区块链交易TX6'能够被认为有效。
在用于联接构造的所有这些情形中,交易TX6'的指定执行状态能够确保线程A锁定脚本和/或线程B锁定脚本已终止执行,并且能够涉及组合或合并线程A锁定脚本和线程B锁定脚本的结果执行状态。这在智能合约需要处理由执行的多个线程产生的结果数据的情况下能够是有用的。
图6图示了图2的区块链交易TX2的示例性细节,其中先前区块链交易TX1的锁定脚本的执行涉及分叉构造的执行。分叉构造对作为先前区块链交易TX1的锁定脚本被执行的执行线程(即线程A锁定脚本)的执行进行分叉,以生成多个执行线程(即线程A锁定脚本的延续和新线程B锁定脚本)。
如图所示,先前区块链交易TX1具有包括解锁脚本(标记为“scriptSig”)的单个交易输入Vin[x]。先前区块链交易TX1还具有表示包括字节码序列和解释器代码的线程A锁定脚本(标记为“scriptPubKey”)的交易输出Vout[x]。字节码序列是能够被认为是状态机的计算机程序,该状态机体现带有明确定义的状态集的状态规则集,借此字节码序列(计算机程序)的字节码的执行提供状态机的状态之间的转变。解释器代码支持线程A锁定脚本的字节码序列的解释。线程A锁定脚本还包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程A锁定脚本的一部分的当前执行指针指与当前状态对应的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
如在图6的示例中能够看到,花费区块链交易TX2具有单个交易输入Vin[x]和两个单独的交易输出,一个是表示线程A锁定脚本的Vout[x],另一个是表示线程B锁定脚本的Vout[y]。花费区块链交易TX2的单个交易输入Vin[x]包括指向先前区块链交易TX1的交易输出Vout[x]的指针和用于先前区块链交易TX1的交易输出Vout[x]的线程A锁定脚本的解锁脚本(“scriptSig”)。交易输出Vout[x]和Vout[y]两者均包括字节码序列和解释器代码。从先前区块链交易TX1的Vout[x]的线程A锁定脚本的字节码序列和解释器代码中能够复制花费区块链交易TX2的Vout[x]的线程A锁定脚本的字节码序列和解释器代码。
花费区块链交易TX2的交易输出Vout[x]的线程A锁定脚本还包括下一状态执行指针(或“下一执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程A锁定脚本的一部分的下一执行指针指与此下一状态对应的线程A锁定脚本的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
注意,在创建花费区块链交易TX2时,通过生成或访问被包括在花费区块链交易TX2的线程A锁定脚本中的下一执行指针,使用先前区块链交易TX1的线程A锁定脚本的序列化的状态数据来恢复线程A锁定脚本的字节码序列的执行的当前执行状态,并且随后执行线程A锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX2的线程A锁定脚本中的序列化的状态数据。此类执行在与被包括在先前区块链交易TX1中的线程A锁定脚本的当前执行指针对应的点(或操作)处开始,并且在与线程A锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX2的Vin[x]的解锁脚本(“scriptSig”)的执行所确定的输入。
注意,在创建和验证花费区块链交易TX2时将被执行的花费区块链交易TX2的线程A锁定脚本的字节码操作的数量由如包括在先前区块链交易TX1中的线程A锁定脚本的当前执行指针与花费区块链交易TX2的线程A锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX2的线程A锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX2时将被执行的花费区块链交易TX2的线程A锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
从分叉构造的执行中确定用于新线程B锁定脚本的花费区块链交易TX2的交易输出Vout[y]。预期能够存在如下面更详细所描述的用于新线程B锁定脚本的不同情形。
在“带有复制的线程的分叉”情形中,从先前区块链交易TX1的Vout[x]的线程A锁定脚本的字节码序列和解释器代码中能够复制用于新线程B锁定脚本的字节码序列和解释器代码。在此情况下,共享相同操作的两个不同的执行线程(花费区块链交易TX2的Vout[x]的线程A锁定脚本和未决区块链交易TX2的Vout[y]的线程B锁定脚本)可能通过不同的输入数据来执行。这是在常见的MapReduce类型情况下有用的变体。在此情形中,花费区块链交易TX2的交易输出Vout[y]的线程B锁定脚本还包括下一状态执行指针(或“下一执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程B锁定脚本的一部分的下一执行指针指与此下一状态对应的线程B锁定脚本的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
注意,在创建花费区块链交易TX2时,通过生成或访问被包括在花费区块链交易TX2的线程B锁定脚本中的下一执行指针,使用先前区块链交易TX1的线程A锁定脚本的序列化的状态数据来恢复线程B锁定脚本的字节码序列的执行的当前状态,并且随后执行线程B锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX2的线程B锁定脚本中的序列化的状态数据。此类执行在与被包括在先前区块链交易TX1中的线程A锁定脚本的当前执行指针对应的点(或操作)处开始,并且在与线程B锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX2的Vin[x]的解锁脚本(“scriptSig”)的执行所确定的输入。
在“带有复制的线程的分叉”情形中,在创建和验证花费区块链交易TX2时将被执行的花费区块链交易TX2的线程B锁定脚本的字节码操作的数量能够由如包括在先前区块链交易TX1中的线程A锁定脚本的当前执行指针与花费区块链交易TX2的线程B锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX2的线程B锁定脚本的下一执行指针的执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX2时将被执行的花费区块链交易TX2的线程B锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
在“带有复制的线程的分叉”情形中,区块链交易TX2的创建和/或验证能够涉及处理花费区块链交易TX2的每个交易输出,以检查给定交易输出的锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列值)是否匹配先前区块链交易TX1的单个交易输出Vout[x]的线程A锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列值)。如果对于交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且区块链交易TX2能够被认为无效。如果此检查通过,则分叉构造能够继续,其中区块链交易TX2的交易输出的锁定脚本的字节码序列的执行状态能够被检查,以确保它对应于指定的执行状态,该指定的执行状态能够对于区块链交易TX2的交易输出的两个锁定脚本是相同的或不同的。如果对于交易交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且区块链交易TX2能够被认为无效。如果对于花费区块链交易TX2的所有交易输出的此进一步检查通过并且任何另外的检查得以满足,则花费区块链交易TX2能够被认为有效。
注意,在其它实施例中,花费区块链交易能够包括不止两个交易输出,其表示从先前区块链交易的锁定脚本的父执行线程分叉的不止两个子执行线程。在“带有复制的线程的分叉”情形中,花费区块链交易的交易输出的锁定脚本表示各自从先前区块链交易的锁定脚本复制的多个执行线程。在实施例中,用于每个交易输出的锁定脚本能够包括多个元素,包括:
●要被执行的子线程字节码序列;
●用以解释和执行子线程字节码序列的解释器代码
●表示在子线程字节码序列中执行的位置的下一执行指针;以及
●虚拟内存的副本或快照,其表示在下一执行指针的子线程字节码序列的执行状态。
在其它实施例中,用于每个交易输出的锁定脚本能够包括另外或其它数据元素。此外,花费区块链交易的交易输入的解锁脚本(“scriptSig”)(其指向由分叉的构造分叉的先前区块链交易的锁定脚本的父执行线程)能够包括以下项:i)花费区块链交易本身的一部分的副本,和ii)指向交易输入的先前区块链交易的副本。注意,在验证花费区块链交易时,解锁脚本首先被放置在虚拟存储器(堆栈)中,并且因此在以后可由对应锁定脚本的特定解释器虚拟字节码访问以供使用。通过包括这两个项目作为花费区块链交易的交易输入的解锁脚本(“scriptSig”)的一部分,能够进行花费区块链交易和分叉构造的验证。
下面的表A提供描述分叉构造的虚拟字节码(VOP_FORK_DUP)的伪代码,该虚拟字节码遵循本文中所描述的“带有复制的线程的分叉”情形。虚拟字节码VOP_FORK_DUP能够被包括在锁定脚本的字节码序列中,并使用包括在锁定脚本中的解释器代码来解释以执行表A的操作。虚拟字节码VOP_FORK_DUP能够在如本文中所述创建和/或验证花费区块链交易时被解释。在此情况下,操作提取如存储在花费区块链交易的交易输入的解锁脚本中并由交易输入所指向的先前区块链交易的锁定脚本。操作循环通过花费区块链交易的交易输出集,该交易输出集能够由静态存储(例如,作为锁定脚本的解释器代码的一部分)或动态存储(例如,在被解释为锁定脚本的一部分的字节码序列中)的参数来表示。对于每个交易输出,操作检查包括在交易输出中的锁定脚本的字节码序列和解释器代码(或用于此类数据的组合的散列值)是否匹配如存储在花费区块链交易的交易输入的解锁脚本中的先前区块链交易的锁定脚本的字节码序列和解释器代码(或用于此类数据的组合的散列值)。如果对于交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则联接构造的操作能够继续,其中用于该交易输出的锁定脚本的字节码序列的下一执行指针被检查是否在特定位置。用于交易输出的锁定脚本的字节码序列的下一执行指针能够是相同的或不同的。如果对于交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果对于所有交易输出的此进一步检查通过并且任何另外的检查得以满足,则该区块链交易能够被认为有效。如果VOP_FORK_DUP虚拟字节码的验证成功,则花费区块链交易的子线程锁定脚本的一或多个字节码的执行能够继续并且被检查以确保它匹配虚拟存储器的快照,该快照表示在用于花费区块链交易的验证的下一执行指针处的子线程字节码序列的执行状态。
表A
Figure BDA0002539726370000431
在另一情形(称为“支持不同的线程的分叉”)中,用于新线程B锁定脚本的字节码序列和/或解释器代码能够相对于先前区块链交易T1的线程A锁定脚本的字节码序列和解释器代码是相同的或不同的(或不同的)。在此情形中,能够静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)与有效字节码序列和解释器代码对应的有效散列值集合。花费区块链交易TX2的交易输出Vout[y]的线程B锁定脚本还包括下一状态执行指针(或“下一执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程B锁定脚本的一部分的下一执行指针指与此下一状态对应的线程B锁定脚本的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
在此“支持不同的线程的分叉”情形中,在创建花费区块链交易TX2时,通过生成或访问被包括在花费区块链交易TX2的线程B锁定脚本中的下一执行指针,初始化线程B锁定脚本的字节码序列的执行的当前状态,并且随后执行线程B锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX2的线程B锁定脚本中的序列化的状态数据。此类执行在与线程B锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX2的Vin[x]的解锁脚本(“scriptSig”)的执行所确定的输入。
在“支持不同的线程的分叉”情形中,在创建和验证花费区块链交易TX2时将被执行的花费区块链交易TX2的线程B锁定脚本的字节码操作的数量能够由花费区块链交易TX2的线程B锁定脚本的字节码序列的初始执行指针与线程B锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX2的线程B锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX2时将被执行的花费区块链交易TX2的线程B锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
在“支持不同的线程的分叉”情形中,花费区块链交易TX2的创建和验证能够涉及确定用于先前区块链交易TX1的线程A锁定脚本的字节码序列和解释器代码的组合的散列值,并且在需要时将此散列值添加到集合。处理随后循环通过花费区块链交易TX2的交易输出(Vout[x]和Vout[y]),其中循环的每次迭代检查对具体交易输出的锁定脚本的字节码序列和解释器代码的组合进行散列处理是否产生匹配集合的有效散列值之一的散列值。如果对于交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则分叉构造能够继续,其中该交易输出的锁定脚本的字节码序列的执行状态能够被检查,以确保它对应于指定的执行状态。用于交易输出的锁定脚本的字节码序列的指定执行状态能够是相同的或不同的。如果对于交易交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且花费区块链交易TX2能够被认为无效。如果这些进一步的检查通过并且任何另外的检查得以满足,则花费区块链交易TX2能够被认为有效。
注意,在其它实施例中,涉及分叉构造的花费区块链交易能够包括不止两个交易输出,其表示从先前区块链交易的锁定脚本的父执行线程分叉的不止两个子执行线程。在“支持不同的线程的分叉”情形中,花费区块链交易的交易输出的锁定脚本表示花费区块链交易的不同的执行线程。在实施例中,每个交易输出的锁定脚本能够包括多个元素,包括:
·要被执行的子线程字节码序列;
·用以解释和执行子线程字节码序列的解释器代码;
·表示在子线程字节码序列中执行的位置的下一执行指针;以及
·虚拟内存的副本或快照,其表示在下一执行指针的子线程字节码序列的执行状态。
在其它实施例中,用于每个交易输出的锁定脚本能够包括另外或其它数据元素。此外,花费区块链交易的交易输入的解锁脚本(“scriptSig”)(其指向由分叉的构造分叉的先前区块链交易的锁定脚本的父执行线程)能够包括以下项:i)花费区块链交易本身的一部分的副本,和ii)指向交易输入的先前区块链交易的副本。注意,在验证花费区块链交易时,解锁脚本首先被放置在虚拟存储器(堆栈)中,并且因此在以后可由对应锁定脚本的特定解释器虚拟字节码访问以供使用。通过包括这两个项目作为花费区块链交易的交易输入的解锁脚本(“scriptSig”)的一部分,能够进行花费区块链交易和分叉构造的验证。
下面的表B提供描述分叉构造的虚拟字节码(VOP_FORK_DISTINCT)的伪代码,该虚拟字节码遵循本文中所描述的“支持不同的线程的分叉”情形。虚拟字节码VOP_FORK_DISTINCT能够被包括在锁定脚本的字节码序列中,并使用包括在锁定脚本中的解释器代码来解释以执行表B的操作。虚拟字节码VOP_FORK_DISTINCT能够在如本文中所述创建和/或验证花费区块链交易时被解释。操作提取如存储在花费交易的交易输入的解锁脚本中的先前区块链交易的锁定脚本。操作循环通过花费区块链交易的子线程锁定脚本集(其对应于该交易输出集),该子线程锁定脚本集能够由静态存储(例如,作为锁定脚本的解释器代码的一部分)或动态存储(例如,在被解释为锁定脚本的一部分的字节码序列中)的参数来表示。操作读取与每个子线程锁定脚本(或交易输出)的字节码序列和解释器代码的组合对应的散列值。在实施例中,这些散列值能够被静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)。例如,结合VOP_FORK_DISTINCT虚拟字节码,虚拟字节码之后的数据的字节能够指定该子线程锁定脚本集(以及因此该字节码序列/解释器散列值和对应交易输出的集)及用于为该子线程锁定脚本集确定字节码序列/解释器散列值的边界的字符分隔符。操作初始化与有效字节码序列和解释器代码组合对应的散列值集合。该散列值集合能够由静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)的数据表示。随后,计算用于先前区块链交易的锁定脚本的字节码序列和解释器代码的组合的散列值,并将其添加到集合。操作随后循环通过花费区块链交易的该交易输出集。对于每个交易输出,操作从花费区块链交易的对应输出中提取锁定脚本,计算所提取的锁定脚本的字节码序列和解释器代码的组合的散列值,并且检查计算的散列值是否存在于散列值集合中。如果对于交易输出中的任何一个的此检查失败,则失败条件能够被引发,并且花费区块链交易能够被认为无效。如果此检查通过,则分叉构造能够继续,其中花费区块链交易的交易输出的锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态,该指定的执行状态能够对于花费区块链交易的交易输出的锁定脚本是相同的或不同的。如果对于交易输出中的任何一个的此进一步检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果对于所有交易输出的此进一步检查通过并且任何另外的检查得以满足,则花费区块链交易能够被认为有效。如果VOP_FORK_DISTINCT虚拟字节码的验证成功,则花费区块链交易的子线程锁定脚本的一或多个字节码的执行能够继续并且被检查以确保它匹配虚拟存储器的快照,该快照表示在用于花费区块链交易的验证的下一执行指针处的子线程字节码序列的执行状态。
另外,也可能使花费区块链交易的输出的子线程字节码序列包括在先前区块链交易的父线程字节码序列中。在此情况下,随后可能只检查子线程字节码序列是否存在于父线程字节码序列中,并且随后从包括子线程操作的特定位置继续执行字节码序列。
表B
Figure BDA0002539726370000471
图7图示了图2的区块链交易TX3的示例性细节,其继续先前区块链交易TX2的线程A锁定脚本的执行。如图所示,先前的区块链交易TX2具有单个交易输入Vin[x]和两个单独的交易输出,一个交易输出Vout[x]表示线程A锁定脚本,另一交易输出Vout[y]表示线程B锁定脚本。两个交易输出均包括字节码序列和解释器代码。先前区块链交易TX2的交易输入Vin[x]包括指向先前区块链交易TX1的交易输出Vout[x]的指针和解锁脚本(“scriptSig”)。
注意,先前区块链交易TX2的交易输出Vout[x]的线程A锁定脚本包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程A锁定脚本的一部分的当前执行指针指与此当前状态对应的线程A锁定脚本的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
如在图7的示例中能够看到,花费区块链交易TX3具有单个交易输入Vin[x]和单个交易输出Vout[x]。该交易输入Vin[x]包括指向先前区块链交易TX2的交易输出Vout[x]的指针和用于先前区块链交易TX2的交易输出Vout[x]的线程A锁定脚本的解锁脚本(标记为“scriptSig”)。该交易输出Vout[x]表示包括字节码序列和解释器代码的线程A锁定脚本(标记为“scriptPubKey”)。解释器代码支持线程A锁定脚本的字节码序列的解释。从先前区块链交易TX2的Vout[x]的线程A锁定脚本的字节码序列和解释器代码中能够复制花费区块链交易TX3的Vout[x]的线程A锁定脚本的字节码序列和解释器代码。
花费区块链交易TX3的线程A锁定脚本还包括下一状态执行指针(或“下一执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程A锁定脚本的一部分的下一执行指针指与该下一状态对应的线程A锁定脚本的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
在创建花费区块链交易TX3时,通过生成或访问被包括在花费区块链交易TX3的线程A锁定脚本中的下一执行指针,使用先前区块链交易TX2的线程A锁定脚本的序列化的状态数据来恢复线程A锁定脚本的字节码序列的执行的当前执行状态,并且随后执行线程A锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX3的线程A锁定脚本中的序列化的状态数据。此类执行在与被包括在先前区块链交易TX2中的线程A锁定脚本的当前执行指针对应的点(或操作)处开始,并且在与线程A锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX3的Vin[x]的解锁脚本(“scriptSig”)的执行所确定的输入。
注意,在创建和验证花费区块链交易TX3时将被执行的花费区块链交易TX3的线程A锁定脚本的字节码操作的数量由如包括在先前区块链交易TX2中的线程A锁定脚本的当前执行指针与花费区块链交易TX3的线程A锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX3的线程A锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX3时将被执行的花费区块链交易TX3的线程A锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
花费区块链交易TX3的创建和/或验证能够涉及处理花费区块链交易TX3的交易输出Vout[x],以检查交易输出Vout[x]的线程A锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)是否匹配先前区块链交易TX2的交易输出Vout[x]的线程A锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)。如果此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则操作能够继续,其中花费区块链交易TX3的线程A锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态。如果此进一步检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则该区块链交易能够被认为有效。
图8图示了图2的区块链交易TX4的示例性细节,其继续先前区块链交易TX2的线程B锁定脚本的执行。如图所示,先前的区块链交易TX2具有单个交易输入Vin[x]和两个单独的交易输出,一个交易输出Vout[x]表示线程A锁定脚本,另一交易输出Vout[y]表示线程B锁定脚本。两个交易输出均包括字节码序列和解释器代码。先前区块链交易TX2的单个交易输入Vin[x]包括指向先前区块链交易TX1的交易输出Vout[x]的指针和解锁脚本(“scriptSig”)。
注意,先前区块链交易TX2的交易输出Vout[y]的线程B锁定脚本包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程B锁定脚本的一部分的当前执行指针指与此当前状态对应的线程B锁定脚本的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
如在图8的示例中能够看到,花费区块链交易TX4具有单个交易输入Vin[x]和单个交易输出Vout[x]。该交易输入Vin[x]包括指向先前区块链交易TX2的线程B锁定脚本的交易输出Vout[y]的指针和用于先前区块链交易TX2的线程B锁定脚本的解锁脚本(标记为“scriptSig”)。该交易输出Vout[x]表示包括字节码序列和解释器代码的线程B锁定脚本(标记为“scriptPubKey”)。解释器代码支持线程B锁定脚本的字节码序列的解释。从先前区块链交易TX2的Vout[x]的线程B锁定脚本的字节码序列和解释器代码中能够复制花费区块链交易TX4的Vout[y]的线程B锁定脚本的字节码序列和解释器代码。
花费区块链交易TX4的Vout[x]的线程B锁定脚本还包括下一状态执行指针(或“下一执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程B锁定脚本的一部分的下一执行指针指与该下一状态对应的线程B锁定脚本的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
在创建花费区块链交易TX4时,通过生成或访问被包括在花费区块链交易TX4的线程B锁定脚本中的下一执行指针,使用先前区块链交易TX2的线程B锁定脚本的序列化的状态数据来恢复线程B锁定脚本的字节码序列的执行的当前状态,并且随后执行线程B锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX4的线程B锁定脚本中的序列化的状态数据。此类执行在与被包括在先前区块链交易TX2中的线程B锁定脚本的当前执行指针对应的点(或操作)处开始,并且在与线程B锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX4的Vin[x]的解锁脚本(“scriptSig”)的执行所确定的输入。
注意,在创建和验证花费区块链交易TX4时将被执行的花费区块链交易TX4的线程B锁定脚本的字节码操作的数量由如包括在先前区块链交易TX2中的线程B锁定脚本的当前执行指针与花费区块链交易TX4的线程B锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX4的线程B锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX4时将被执行的花费区块链交易TX4的线程B锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
花费区块链交易TX4的创建和/或验证能够涉及处理花费区块链交易TX4的交易输出Vout[x],以检查交易输出Vout[x]的线程B锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)是否匹配先前区块链交易TX2的交易输出Vout[y]的线程B锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)。如果此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则操作能够继续,其中花费区块链交易TX4的线程B锁定脚本的执行状态能够被检查,以确保它对应于指定的执行状态。如果此进一步检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则该区块链交易能够被认为有效。
图9图示了图2的区块链交易TX5的示例性细节,其在屏障构造的控制下继续先前区块链交易TX3的线程A锁定脚本的执行和先前区块链交易TX4的线程B锁定脚本的执行。
如图所示,先前区块链交易TX3具有包括解锁脚本(标记为“scriptSig”)的单个交易输入Vin[x]。先前区块链交易TX3还具有表示包括字节码序列和解释器代码的线程A锁定脚本(标记为“scriptPubKey”)的交易输出Vout[x]。解释器代码支持线程A锁定脚本的字节码序列的解释。线程A锁定脚本还包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程A锁定脚本的一部分的当前执行指针指与当前状态对应的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
如图所示,先前区块链交易TX4具有包括解锁脚本(标记为“scriptSig”)的单个交易输入Vin[x]。先前区块链交易TX4还具有表示包括字节码序列和解释器代码的线程B锁定脚本(标记为“scriptPubKey”)的交易输出Vout[x]。解释器代码支持线程B锁定脚本的字节码序列的解释。线程B锁定脚本还包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程B锁定脚本的一部分的当前执行指针指与当前状态对应的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
如在图9的示例中能够看到,花费区块链交易TX5具有两个单独的交易输入Vin[x]、Vin[y]和两个对应交易输出Vout[x]、Vout[y]。花费区块链交易TX5的交易输入Vin[x]包括指向用于先前区块链交易TX3的线程A锁定脚本的交易输出Vout[x]的指针和用于先前区块链交易TX3的Vout[x]的线程A锁定脚本的解锁脚本(“scriptSig”)。花费区块链交易TX5的交易输入Vin[y]包括指向用于先前区块链交易TX4的线程B锁定脚本的交易输出Vout[x]的指针和用于先前区块链交易TX3的Vout[x]的线程B锁定脚本的解锁脚本(“scriptSig”)。交易输出Vout[x]表示线程A锁定脚本。交易输出Vout[y]表示线程B锁定脚本。两个交易输出均包括字节码序列和解释器代码。解释器代码支持给定交易输出的字节码序列的解释。
从先前区块链交易TX3的Vout[x]的线程A锁定脚本的字节码序列和解释器代码中能够复制花费区块链交易TX5的Vout[x]的线程A锁定脚本的字节码序列和解释器代码。花费区块链交易TX5的Vout[x]的线程A锁定脚本还包括下一状态执行指针(或“下一执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程A锁定脚本的一部分的下一执行指针指与该下一状态对应的线程A锁定脚本的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
注意,在创建花费区块链交易TX5时,通过生成或访问被包括在花费区块链交易TX5的线程A锁定脚本中的下一执行指针,使用先前区块链交易TX3的线程A锁定脚本的序列化的状态数据来恢复线程A锁定脚本的字节码序列的执行的当前执行状态,并且随后执行线程A锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX5的线程A锁定脚本中的序列化的状态数据。此类执行在与被包括在先前区块链交易TX3中的线程A锁定脚本的当前执行指针对应的点(或操作)处开始,并且在与线程A锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX5的Vin[x]的解锁脚本(“scriptSig”)的执行所确定的输入。
注意,在创建和验证花费区块链交易TX5时将被执行的花费区块链交易TX5的线程A锁定脚本的字节码操作的数量由如包括在先前区块链交易TX3中的线程A锁定脚本的当前执行指针与花费区块链交易TX5的线程A锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX5的线程A锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX5时将被执行的花费区块链交易TX5的线程A锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
从先前区块链交易TX4的Vout[x]的线程B锁定脚本的字节码序列和解释器代码中能够复制花费区块链交易TX5的Vout[y]的线程B锁定脚本的字节码序列和解释器代码。
花费区块链交易TX5的Vout[y]的线程B锁定脚本还包括下一状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程B锁定脚本的一部分的下一执行指针指与该下一状态对应的线程B锁定脚本的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
注意,在创建花费区块链交易TX5时,通过生成或访问被包括在花费区块链交易TX5的线程B锁定脚本中的下一执行指针,使用先前区块链交易TX4的线程B锁定脚本的序列化的状态数据来恢复线程B锁定脚本的字节码序列的执行的当前状态,并且随后执行线程B锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX5的线程B锁定脚本中的序列化的状态数据。此类执行在与被包括在先前区块链交易TX4中的线程B锁定脚本的当前执行指针对应的点(或操作)处开始,并且在与线程B锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX5的Vin[y]的解锁脚本(“scriptSig”)的执行所确定的输入。
注意,在创建和验证花费区块链交易TX5时将被执行的花费区块链交易TX5的线程B锁定脚本的字节码操作的数量由包括在先前区块链交易TX4中的线程B锁定脚本的当前执行指针与花费区块链交易TX5的线程B锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX5的线程B锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX5时将被执行的花费区块链交易TX5的线程B锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
注意,线程A锁定脚本的执行状态和/或线程B锁定脚本的执行状态(其在花费区块链交易TX5的创建和验证期间由这些锁定脚本的执行产生)能够由屏障构造或操作的一或多个参数来指示。此类参数能够涉及约束用于执行的线程在执行的特定点,或者停止(等待)或休眠执行的一个线程(例如,线程B锁定脚本)的执行直至由执行的另一线程(例如,线程A锁定脚本)释放,或者其它线程同步条件。此类控制能够被用来在执行的多个线程彼此竞争以完成它们的任务的情况下避免竞争条件。
区块链交易TX5的创建和/或验证能够涉及处理区块链交易TX5的交易输出Vout[x],以检查交易输出Vout[x]的锁定脚本是否匹配用于线程A锁定脚本的先前区块链交易TX3的对应交易输出Vout[x]的锁定脚本,并且处理区块链交易TX5的交易输出Vout[y],以检查交易输出Vout[y]的锁定脚本是否匹配用于线程B锁定脚本的先前区块链交易TX4的对应交易输出Vout[x]的锁定脚本。如果对于区块链交易TX5的交易输出中的任何一个的该检查失败,则失败条件能够被引发,并且区块链交易TX5能够被认为无效。如果此检查通过,则屏障构造能够继续,其中区块链交易TX5的交易输出的线程A锁定脚本和线程B锁定脚本的执行状态能够被检查,以确保它们对应于指定的执行状态。线程A锁定脚本的结果执行状态和/或线程B锁定脚本的结果执行状态能够由屏障构造或操作的一或多个参数来指示。此类参数能够涉及约束用于执行的线程在执行的特定点,或者停止(等待)或休眠执行的一个线程(例如,线程B锁定脚本)的执行直至由执行的另一线程(例如,线程A锁定脚本)释放,或者其它线程同步条件。此类控制能够被用来在执行的多个线程彼此竞争以完成它们的任务的情况下避免竞争条件。如果此进一步检查失败,则失败条件能够被引发,并且花费区块链交易TX5能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则花费区块链交易TX5能够被认为有效。
注意,在其它实施例中,涉及屏障构造的花费区块链交易能够包括表示被管理或控制的不止两个执行线程的不止两个交易输入和对应交易输出。对于涉及屏障构造的花费区块链交易,花费区块链交易的交易输出的锁定脚本表示结果执行线程。在实施例中,用于每个交易输出的锁定脚本能够包括多个元素,包括:
·要被执行的线程字节码序列;
·用以解释和执行线程字节码序列的解释器代码;
·表示在线程字节码序列中执行的位置的下一执行指针;以及
·虚拟内存的副本或快照,其表示在下一执行指针的线程字节码序列的执行状态。
在其它实施例中,用于每个交易输出的锁定脚本能够包括另外或其它数据元素。此外,花费区块链交易的交易输入的解锁脚本(“scriptSig”)(其指向作为屏障构造的主题的先前区块链交易的锁定脚本的多个执行线程)每个包括以下项:i)花费区块链交易本身的一部分的副本,以及ii)指向相应交易输入的先前区块链交易的副本。注意,在验证花费区块链交易时,解锁脚本首先被放置在虚拟存储器(堆栈)中,并且因此在以后可由对应锁定脚本的特定解释器虚拟字节码访问以供使用。通过包括这两个项目作为花费区块链交易的交易输入的解锁脚本(“scriptSig”)的一部分,能够进行花费区块链交易和屏障构造的验证。
下面的表C提供描述如本文所述的屏障构造的虚拟字节码(VOP_BARRIER)的伪代码。虚拟字节码VOP_FORK_BARRIER能够被包括在锁定脚本的字节码序列中,并使用包括在锁定脚本中的解释器代码来解释以执行表C的操作。虚拟字节码VOP_BARRIER能够在如本文中所述创建和/或验证花费区块链交易时被解释。注意,屏障构造能够将另一线程约束为其执行中的特定点或其它以便该线程的执行继续。如果VOP_BARRIER虚拟字节码的验证成功,则用于花费区块链交易的相应交易输出的子线程锁定脚本的一或多个字节码的执行能够继续并且被检查以确保它匹配虚拟存储器的快照,该快照表示在用于花费区块链交易的验证的下一执行指针处的子线程字节码序列的执行状态。
表C
Figure BDA0002539726370000571
图10图示了图5的区块链交易TX6'的示例性细节,其如本文中所述在联接构造的控制下联接先前区块链交易TX3的线程A锁定脚本的执行和先前区块链交易TX4的线程B锁定脚本的执行。
如图所示,先前区块链交易TX3具有包括解锁脚本(标记为“scriptSig”)的单个交易输入Vin[x]。先前区块链交易TX3还具有表示包括字节码序列和解释器代码的线程A锁定脚本(标记为“scriptPubKey”)的交易输出Vout[x]。解释器代码支持线程A锁定脚本的字节码序列的解释。交易输出Vout[x]的线程A锁定脚本还包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程A锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程A锁定脚本的一部分的当前执行指针指与当前状态对应的字节码序列的执行点。被包括为线程A锁定脚本的一部分的序列化的状态数据表示在由包括在线程A锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
如图所示,先前区块链交易TX4具有包括解锁脚本(标记为“scriptSig”)的单个交易输入Vin[x]。先前区块链交易TX4还具有表示包括字节码序列和解释器代码的线程B锁定脚本(标记为“scriptPubKey”)的交易输出Vout[x]。解释器代码支持线程B锁定脚本的字节码序列的解释。交易输出Vout[x]的线程B锁定脚本还包括当前状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程B锁定脚本的字节码序列所表示的状态机的状态内的当前状态。被包括为线程B锁定脚本的一部分的当前执行指针指与当前状态对应的字节码序列的执行点。被包括为线程B锁定脚本的一部分的序列化的状态数据表示在由包括在线程B锁定脚本中的当前执行指针所引用的执行点处由字节码序列所表示的状态机的状态。
从在图10的示例中能够看到,花费区块链交易TX6'具有用于要被联接的两个线程的两个单独的交易输入Vin[x]、Vin[y]和表示线程C锁定脚本的一个交易输出Vout[x]。花费区块链交易TX6'的交易输入Vin[x]包括指向先前区块链交易TX3的Vout[x]的线程A锁定脚本的交易输出Vout[x]的指针和用于先前区块链交易TX3的Vout[x]的线程A锁定脚本的解锁脚本(“scriptSig”)。花费区块链交易TX6'的交易输入Vin[y]包括指向用于先前区块链交易TX4的Vout[x]的线程B锁定脚本的交易输出Vout[x]的指针和用于先前区块链交易TX4的Vout[x]的线程B锁定脚本的解锁脚本(“scriptSig”)。
花费区块链交易TX6'的交易输出Vout[x]表示字节码序列和解释器代码。解释器代码支持交易输出Vout[x]的线程C锁定脚本的字节码序列的解释。花费区块链交易TX6'的Vout[x]的线程C锁定脚本还包括下一状态执行指针(或“当前执行指针”)和序列化的状态数据(标记为“虚拟存储器”),它们一起表示由线程C锁定脚本的字节码序列所表示的状态机的状态内的下一状态。被包括为线程C锁定脚本的一部分的下一执行指针指与该下一状态对应的线程C锁定脚本的字节码序列的执行点。被包括为线程C锁定脚本的一部分的序列化的状态数据表示在由包括在线程C锁定脚本中的下一执行指针所引用的执行点处由字节码序列所表示的状态机的状态。从联接构造的执行中确定用于新线程C锁定脚本的花费区块链交易TX6'的交易输出Vout[x]。预期能够存在如下面更详细所描述的用于新线程C锁定脚本的不同情形。
在“与复制的线程的联接”情形中,从先前区块链交易TX3的Vout[x]的线程A锁定脚本的字节码序列和解释器代码或从先前区块链交易TX4的Vout[y]的线程B锁定脚本的字节码序列和解释器代码中能够复制用于新的线程C锁定脚本的字节码序列和解释器代码。
在“与复制的线程的联接”情形中,在创建花费区块链交易TX6'时,通过执行线程A锁定脚本和线程B锁定脚本到一些静态定义或动态推断的特定位置,并且随后组合或合并结果执行状态以推导出用于线程C锁定脚本的字节码序列的初始执行状态,以及随后执行线程C锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX6'的线程C锁定脚本中的序列化的状态数据。此类执行在与线程C锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX6'的Vin[x]的解锁脚本(“scriptSig”)的执行和/或Vin[y]的解锁脚本(“scriptSig”)的执行所确定的输入。
在“与复制的线程的联接”情形中,在创建和验证花费区块链交易TX6'时将被执行的花费区块链交易TX6'的线程C锁定脚本的字节码操作的数量能够由如包括在先前区块链交易TX3中的线程A锁定脚本的当前执行指针(或如包括在先前区块链交易TX4中的线程B锁定脚本的当前执行指针)与花费区块链交易TX6'的线程C锁定脚本的下一执行指针之间的差来指示。通过选择或改变花费区块链交易TX6'的线程C锁定脚本的下一执行指针,能够通过设计来改变执行指针中的此差。这样,在创建和验证花费区块链交易TX6'时将被执行的花费区块链交易TX6'的线程C锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
在“与复制的线程的联接”情形中,区块链交易TX6'的创建和/或验证能够涉及处理区块链交易TX6'的交易输出Vout[x],以检查该交易输出的线程C锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)是否匹配先前区块链交易TX3的交易输出Vout[x]的线程A锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)和/或是否匹配先前区块链交易TX4的单个交易输出Vout[x]的线程B锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列)。如果此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则联接构造能够继续,其中该区块链交易的交易输入的锁定脚本的执行状态能够被检查,以确保它们对应于指定的执行状态,并且随后此类执行状态能够被组合或合并在一起。如果此进一步检查失败,则失败条件能够被引发,并且花费区块链交易TX6'能够被认为无效。如果此进一步检查通过并且任何另外的检查得以满足,则花费区块链交易TX6'能够被认为有效。
注意,在其它实施例中,涉及联接构造的花费区块链交易能够包括不止两个交易输出,其表示被合并在一起以形成花费区块链交易的锁定脚本的子执行线程分叉的不止两个父执行线程。在“与复制的线程的联接”情形中,联接先前区块链交易的锁定脚本的多个执行线程的花费区块链交易的锁定脚本能够包括多个元素,包括:
·要被执行的子线程字节码序列;
·用以解释和执行子线程字节码序列的解释器代码;
·表示在子线程字节码序列中执行的位置的下一执行指针;以及
·虚拟内存的副本或快照,其表示在下一执行指针的子线程字节码序列的执行状态。
在其它实施例中,联接先前区块链交易的锁定脚本的多个执行线程的花费区块链交易的锁定脚本能够包括另外或其它的数据元素。此外,花费区块链交易的交易输入的解锁脚本(“scriptSig”)(其指向要由联接构造联接的先前区块链交易的锁定脚本的多个执行线程)每个包括以下项:i)花费区块链交易本身的一部分的副本,以及ii)指向相应交易输入的先前区块链交易的副本。注意,在验证花费区块链交易时,解锁脚本首先被放置在虚拟存储器(堆栈)中,并且因此在以后可由对应锁定脚本的特定解释器虚拟字节码访问以供使用。通过包括这两个项目作为花费区块链交易的交易输入的解锁脚本(“scriptSig”)的一部分,能够进行花费区块链交易和联接构造的验证。
下面的表D提供描述用于在联接构造的控制下联接多个先前区块链交易的锁定脚本的执行线程的虚拟字节码(VOP_JOIN_DUP)的伪代码,该虚拟字节码遵循“与复制的线程的联接”情形。虚拟字节码VOP_JOIN_DUP能够被包括在锁定脚本的字节码序列中,并使用包括在锁定脚本中的解释器代码来解释以执行表D的操作。虚拟字节码VOP_JOIN_DUP能够在如本文中所述创建和/或验证花费区块链交易时被解释。操作提取如存储在交易输入的解锁脚本中的花费区块链交易的锁定脚本。操作循环通过花费区块链交易的该交易输入集。对于每个交易输入,操作提取如存储在对应交易输入的解锁脚本中并指向交易输入的先前区块链交易的锁定脚本,并且检查花费区块链交易的锁定脚本的字节码序列和解释器代码(或此类数据的组合的散列值)是否匹配如存储在对应交易输入的解锁脚本中的先前区块链交易的锁定脚本中所包括的。如果对于交易输入中的任何一个的此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则联接构造的操作能够继续,其中对照某一静态定义或动态推断的特定位置,检查用于花费区块链交易的锁定脚本的下一执行指针。如果下一执行指针正确,则提取用于先前区块链交易的锁定脚本的执行状态,并且将虚拟存储器实例合并在一起以形成用于执行的结果线程的单个虚拟存储器状态。如果下一执行指针不正确,则失败条件能够被引发,并且花费区块链交易能够被认为无效。如果VOP_JOIN_DUP虚拟字节码的验证成功,则花费区块链交易的子线程锁定脚本的一或多个字节码的执行能够继续并且被检查以确保它匹配虚拟存储器的快照,该快照表示在用于花费区块链交易的验证的下一执行指针处的子线程字节码序列的执行状态。
表D
Figure BDA0002539726370000621
在“支持不同的线程的联接”情形中,用于新的线程C锁定脚本的字节码序列和解释器代码能够与先前区块链交易T3的线程A锁定脚本的字节码序列和解释器代码和从先前区块链交易T4的线程B锁定脚本的字节码序列是相同的或不同的(或不同的)。在此情形中,能够从锁定脚本中使用的有效字节码序列和解释器代码的集合中复制用于新线程C锁定脚本的字节码序列和解释器代码。
在“支持不同的线程的联接”情形中,在创建花费区块链交易TX6'时,通过执行线程A锁定脚本和线程B锁定脚本到一些静态定义或动态推断的特定位置,并且随后组合或合并结果执行状态以推导出用于线程C锁定脚本的字节码序列的初始执行状态,以及随后执行线程C锁定脚本的字节码序列,能够确定被包括在花费区块链交易TX6'的线程C锁定脚本中的序列化的状态数据。此类执行在与线程C锁定脚本的下一执行指针对应的点(或操作)处终止。此类执行还能够使用由花费区块链交易TX6'的Vin[x]的解锁脚本(“scriptSig”)的执行和/或Vin[y]的解锁脚本(“scriptSig”)的执行所确定的输入。
在“支持不同的线程的联接”情形中,在创建和验证花费区块链交易TX6'时将被执行的花费区块链交易TX6'的线程C锁定脚本的字节码操作的数量能够由花费区块链交易TX6'的线程C锁定脚本的下一执行指针差来指示。这样,在创建或验证花费区块链交易TX6'时将被执行的花费区块链交易TX6'的线程C锁定脚本的字节码操作的数量能够被约束或者在参数化对花费交易的约束中被使用。此参数化的约束能够被用来限制在交易之间执行的字节码操作的数量(例如,以避免智能合约的字节码序列的低效操作),将智能合约的字节码序列逻辑地划分为在花费交易的序列上被执行的不同的段,基于参数化的约束为创建新交易的实体计算奖励,或用于其它可能的用途。
在“支持不同的线程的联接”情形中,能够访问或维持与于有效锁定脚本对应的有效散列值集合。花费区块链交易TX6'的创建和/或验证能够涉及处理花费区块链交易TX6'的交易输出Vout[x],以检查交易输出Vout[x]的线程C锁定脚本是否产生匹配集合的有效散列值之一的散列值。如果此检查失败,则失败条件能够被引发,并且区块链交易TX6'能够被认为无效。如果此检查通过,则联接构造的操作能够继续,其中对照某一静态定义或动态推断的特定位置,检查用于要被联接的执行的新线程的下一执行指针。如果下一执行指针正确,则提取用于先前区块链交易的锁定脚本的执行的线程的执行状态并将其合并在一起。如果下一执行指针不正确,则失败条件能够被引发,并且该区块链交易能够被认为无效。
在所有这些情形中,联接构造能够确保线程A锁定脚本和/或线程B锁定脚本已终止执行,并且能够涉及组合或合并线程A锁定脚本和线程B锁定脚本的结果执行状态。这在智能合约需要处理由执行的多个线程产生的结果数据的情况下能够是有用的。
注意,在其它实施例中,涉及联接构造的花费区块链交易能够包括不止两个交易输出,其表示被合并在一起以形成花费区块链交易的锁定脚本的子执行线程分叉的不止两个父执行线程。在“与不同的线程的联接”情形中,联接先前区块链交易的锁定脚本的多个执行线程的花费区块链交易的锁定脚本能够包括多个元素,包括:
·要被执行的子线程字节码序列;
·用以解释和执行子线程字节码序列的解释器代码;
·表示在子线程字节码序列中执行的位置的下一执行指针;以及
·虚拟内存的副本或快照,其表示在下一执行指针的子线程字节码序列的执行状态。
在其它实施例中,联接先前区块链交易的锁定脚本的多个执行线程的花费区块链交易的锁定脚本能够包括另外或其它的数据元素。此外,花费区块链交易的交易输入的解锁脚本(“scriptSig”)(其指向要由联接构造联接的先前区块链交易的锁定脚本的多个执行线程)每个包括以下项:i)花费区块链交易本身的一部分的副本,以及ii)指向相应交易输入的先前区块链交易的副本。注意,在验证花费区块链交易时,解锁脚本首先被放置在虚拟存储器(堆栈)中,并且因此在以后可由对应锁定脚本的特定解释器虚拟字节码访问以供使用。通过包括这两个项目作为花费区块链交易的交易输入的解锁脚本(“scriptSig”)的一部分,能够进行花费区块链交易和联接构造的验证。
下面的表E提供描述用于在联接构造的控制下联接多个先前区块链交易的锁定脚本的执行线程的虚拟字节码(VOP_JOIN_DISTINCT)的伪代码,该虚拟字节码遵循“支持不同的线程的联接”情形。虚拟字节码VOP_JOIN_DISTINCT能够被包括在锁定脚本的字节码序列中,并使用包括在锁定脚本中的解释器代码来解释以执行表E的操作。虚拟字节码VOP_JOIN_DISTINCT能够在如本文中所述创建和/或验证花费区块链交易时被解释。操作循环通过花费区块链交易的父线程锁定脚本集(其对应于交易输入的数量),该父线程锁定脚本集能够由静态存储(例如,作为锁定脚本的解释器代码的一部分)或动态存储(例如,在被解释为锁定脚本的一部分的字节码序列中)的参数来表示。操作读取与每个父线程锁定脚本的字节码序列和解释器代码的组合对应的散列值。在实施例中,这些散列值能够被静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)。例如,结合VOP_JOIN_DISTINCT虚拟字节码,虚拟字节码之后的数据的字节能够指定父线程锁定脚本的数量(以及因此字节码序列/解释器散列值和对应交易输入的数量)及用于为该数量的父线程锁定脚本确定字节码序列/解释器散列值的边界的字符分隔符。操作初始化与有效字节码序列和解释器代码组合对应的散列值集合。此散列值集合能够由静态地存储(例如,作为锁定脚本的解释器代码的一部分)或动态地存储(例如,在被解释为锁定脚本的一部分的字节码序列中)的数据表示。随后,计算用于先前区块链交易的父线程锁定脚本的字节码序列和解释器代码的组合的散列值,并将其添加到集合。操作随后循环通过花费区块链交易的该交易输入集。对于每个交易输入,操作提取如存储在对应交易输入的解锁脚本中的花费区块链交易的锁定脚本,提取如存储在花费区块链交易的对应交易输入的解锁脚本中的先前区块链交易的锁定脚本,并且检查用于花费区块链交易的锁定脚本的字节码序列和解释器代码的组合的散列值是否存在于散列值集合中以及用于先前区块链交易(其对应于交易输入)的锁定脚本的字节码序列和解释器代码的组合的散列值是否存在用于散列值集合中。如果对于交易输入中的任何一个的此检查失败,则失败条件能够被引发,并且该区块链交易能够被认为无效。如果此检查通过,则用于联接构造的操作能够继续,其中对照某一静态定义或动态推断的特定位置,检查用于花费区块链交易的锁定脚本的下一执行指针。如果下一执行指针正确,则用于先前区块链交易的父线程锁定脚本的执行状态被提取并合并在一起以形成用于执行的子线程的单个虚拟存储器状态。如果下一执行指针不正确,则失败条件能够被引发,并且花费区块链交易能够被认为无效。如果VOP_JOIN_DISTINCT虚拟字节码的验证成功,则花费区块链交易的子线程锁定脚本的一或多个字节码的执行能够继续并且被检查以确保它匹配虚拟存储器的快照,该快照表示在用于花费区块链交易的验证的下一执行指针处的子线程字节码序列的执行状态。
表E
Figure BDA0002539726370000661
在“与复制的线程的联接”情形的示例情况中,我们能够假设一或多个先前区块链交易具有表示来自相同字节码的线程集合的执行的锁定脚本。两个线程均处于某种状态,在此状态下,为继续到下一状态,它们需要合并。新花费交易被创建,图7中示出了其的示例。新花费交易包括单个交易输出,该单个交易输出包括包括以下内容的锁定脚本:
·与执行的其它两个父线程相同的字节码序列,其是区块链上在被执行的整个程序的封装;
·被用来解释和执行字节码序列的解释器代码。
·表示在字节码序列中执行的位置的下一执行指针,以及
·虚拟内存的副本或快照,其表示在下一执行指针的字节码序列的执行状态。
此花费区块链交易合并了由先前区块链交易的锁定脚本所表示的执行的两个线程,并且因此包括多个交易输入,每个交易输入指向在被合并的执行的一个线程。
在实施例中,如本文中所述的区块链交易的线程特定的锁定脚本的字节码序列是被设计用于通过被包括在相应区块链交易中的解释器代码的执行来解释的计算机指令。解释器代码的执行将线程特定的锁定脚本的字节码序列的字节码转译成由验证节点的运行时系统(例如,区块链客户端)的软件解释器支持的操作码或命令,其将此类操作码或命令转译成在验证节点的CPU硬件上被执行的机器码,如图11中所示。解释器代码的执行能够支持高级字节码或命令的转译,所述高级字节码或命令扩展或补充了验证节点的运行时系统的软件解释器支持的低级字节码操作。例如,解释器代码能够支持将表示分支构造(诸如如上所述的VOP_FORK_DUP或VOP_FORK_DISTINCT虚拟字节码的变体)、屏障构造(诸如如上所述的VOP_BARRIER虚拟字节码)和/或联接构造(诸如如上所述的VOP_JOIN_DUP或VOP_JOIN_DISTINCT虚拟字节码的变化)的虚拟字节码转译成验证节点的运行时系统的软件解释器支持的字节码操作的组合。在此情况下,解释器代码能够支持将此类虚拟字节码操作转译成属于比特币脚本语言并且由验证节点的运行时系统的软件解释器支持的op_code或命令。在另一示例中,解释器代码能够支持以高级编程语言编写的脚本字节码操作的转译,以便由验证节点的运行时系统的软件解释器来解释。在此情况下,解释器代码能够支持将以高级编程语言编写的脚本字节码操作转译成属于比特币脚本语言并且由验证节点的运行时系统的软件解释器支持的op_code或命令。软件解释器的执行能够一次一个字节码地将操作码或命令按顺序转译成机器代码(例如,简单解释),或者可能采用即时编译方法,其中在运行时根据需要将字节码序列段(或其部分)编译成机器代码,并且随后执行结果机器代码。结果机器代码可能能够被高速缓存并在以后重新使用,而无需被重新编译。
注意,本文中所描述的区块链交易的锁定脚本经常能够包括在执行期间被更新的状态。在智能合约的上下文中,此状态能够被分解为两种类型,跨智能合约的线程特定的锁定脚本使用的“全局共享状态”,或由智能合约的一个线程特定的锁定脚本内部使用的“私有状态”。为支持对执行的线程进行分叉和联接,适当的策略能够被用来支持“全局共享状态”和“私有状态”二者。这些策略能够是以下任意之一:
静态-与状态一起采取的适当动作由解释器以单个静态方式处理,其在智能合约的区块链交易的线程特定的锁定脚本的执行期间为每个分叉或联接被以相同的方式应用。
动态-根据具体情况采取适当的动作。在由解释器所执行的字节码序列中明确地定义了如何在分叉时与新线程共享状态以及在线程的联接期间如何使用状态。
因此,本发明的实施例可以提供一种计算机实施的方法,包括:创建和/或验证花费区块链交易,花费区块链交易包括i)多个锁定脚本,每个锁定脚本表示执行线程的实例(其能够是从由先前区块链交易的锁定脚本所表示的执行线程分叉的执行线程和/或为线程间通信和控制而被管理和/或控制的至少一个先前区块链交易的执行线程)或ii)表示从由至少一个先前区块链交易所表示的多个执行线程实例联接的执行线程的实例的锁定脚本。以及
在区块链网络上传递花费区块链交易以便存储在区块链中。
花费区块链交易能够由区块链网络的节点创建;和/或花费区块链交易能够指向表示执行线程的先前区块链交易的锁定脚本。另外或备选的是,花费区块链交易包括多个锁定脚本,每个锁定脚本表示从由先前区块链交易的锁定脚本所表示的执行线程分叉的执行线程的实例。另外或备选的是,节点将花费区块链交易发送到区块链网络的其它节点,以便在区块链中验证和存储。
由先前区块链交易的锁定脚本所表示的执行线程包括字节码序列,并且由花费区块链交易的多个锁定脚本所表示的执行线程实例的至少一个是通过复制先前区块链交易的锁定脚本的字节码序列来生成。
备选的是,由先前交易的锁定脚本所表示的执行线程包括字节码序列和解释器代码,并且由花费区块链交易的多个锁定脚本所表示的执行线程实例的至少一个是通过复制先前区块链交易的锁定脚本的字节码序列和解释器代码来生成。备选的是,节点存储或访问有效字节码序列集合,并且由花费区块链交易的多个锁定脚本所表示的执行线程实例的至少一个是通过复制该集合的有效字节码序列来生成。在仍有的另一备选中,节点存储或访问有效字节码序列和有效解释器代码的集合,并且由花费区块链交易的多个锁定脚本所表示的执行线程实例的至少一个是通过复制该集合的有效字节码序列和有效解释器代码来生成。
另外或备选的是,花费区块链交易的创建涉及为表示执行线程实例的花费区块链交易的多个锁定脚本生成执行状态信息(诸如下一执行指针),并将执行状态信息(诸如下一执行指针)包括到花费区块链交易的多个锁定脚本中。
花费区块链交易能够由区块链网络的节点接收。另外或备选的是,花费区块链交易指向表示执行线程的先前区块链交易的锁定脚本。另外或备选的是,花费区块链交易包括多个锁定脚本,每个锁定脚本表示从由先前区块链交易的锁定脚本所表示的执行线程分叉的执行线程的实例。另外或备选的是,通过对照一或多个条件来证实花费区块链交易的锁定脚本,节点验证花费区块链交易。
在一些实施例中,证实涉及将花费区块链交易的多个锁定脚本中的至少一个与先前区块链交易的锁定脚本进行匹配。另外或备选的是,验证涉及检查由花费区块链交易的多个锁定脚本所表示的执行线程实例的执行状态信息(诸如下一执行指针)。另外或备选的是,由先前区块链交易的锁定脚本所表示的执行线程包括字节码序列和可能的解释器代码,并且花费区块链交易的多个锁定脚本各自被要求包括相同的字节码序列和可能相同的解释器代码,以便花费区块链交易的验证成功。另外或备选的是,证实涉及将用于花费区块链交易的多个锁定脚本中的每一个的字节码序列和可能的解释器代码与先前区块链交易的锁定脚本的字节码序列和可能的解释器代码进行匹配,借此基于此类匹配的结果来确定花费区块链交易的验证。由先前区块链交易的锁定脚本所表示的执行线程包括字节码序列和可能的解释器代码,并且花费区块链交易的多个锁定脚本能够是i)先前区块链交易的锁定脚本的相同的字节码序列和可能相同的解释器代码,或者ii)属于有效锁定脚本集合的不同的字节代码序列和可能的解释器代码,以便花费区块链交易的验证成功。
另外或备选的是,验证涉及生成对应于先前区块链交易的锁定脚本的散列数据值,并且将该散列数据值添加到对应于有效锁定脚本集合的散列数据值集合,以及将为花费交易的每个锁定脚本生成的散列数据值与散列数据值集合进行比较,借此基于此类散列数据值比较的结果来确定花费区块链交易的验证。
花费区块链交易能够由区块链网络的节点创建;和/或花费区块链交易指向一或多个先前区块链交易的多个锁定脚本,其中所述多个锁定脚本各自表示执行线程的实例;和/或花费区块链交易包括表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本;和/或花费区块链交易由节点发送给区块链网络中的其它节点以便在区块链中验证和存储。
表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本能够通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列来生成。或者表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本是通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列和解释器代码来生成。或者节点存储或访问有效字节码序列集合,并且表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本是通过复制该集合的有效字节码序列来生成。或者节点存储或访问有效字节码序列和有效解释器代码的集合,并且表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本是通过复制该集合的有效字节码序列和有效解释器代码来生成。
另外或备选的是,花费区块链交易的创建涉及为从由花费区块链交易所指向的执行线程实例联接的执行线程生成执行状态信息(诸如下一执行指针)并且将执行状态信息(诸如下一执行指针)包括到花费区块链交易的锁定脚本中。
花费区块链交易能够由区块链网络的节点接收;和/或花费区块链交易指向一或多个先前区块链交易的多个锁定脚本,其中所述多个锁定脚本各自表示执行线程的实例;和/或花费区块链交易包括表示从由花费区块链交易所指向的执行线程实例联接的执行线程的锁定脚本;和/或通过对照一或多个条件来证实花费区块链交易的锁定脚本,节点验证花费区块链交易。
在一或多个实施例中,证实涉及将花费区块链交易的锁定脚本与一或多个先前区块链交易的多个锁定脚本进行匹配;和/或验证涉及检查用于一或多个先前区块链交易的多个锁定脚本的执行状态信息(诸如下一执行指针),并且随后合并或组合此类执行状态信息;和/或至少一个先前区块链交易的多个锁定脚本能够包括公共字节码序列和可能的解释器代码,并且花费区块链交易的锁定脚本被要求包括公共字节码序列和可能相同的解释器代码,以便花费区块链交易的验证成功。和/或证实涉及将用于花费区块链交易的锁定脚本的字节码序列和可能的解释器代码与先前区块链交易的多个锁定脚本中的每一个的字节码序列和可能的解释器代码进行匹配,借此基于此类匹配的结果来确定花费区块链的验证。和/或花费区块链交易的锁定脚本能够是一或多个先前区块链交易的多个锁定脚本的相同字节码序列和可能相同的解释器代码,或者能够是对应于有效锁定脚本集合的不同的字节码序列和可能的解释器代码。和/或验证能够涉及生成对应于先前区块链交易的锁定脚本的散列数据值,并且将该散列数据值添加到对应于有效锁定脚本集合的散列数据值集合,为花费交易的每个锁定脚本生成散列数据值,以及将它与散列数据值集合进行比较,借此基于此类散列数据值比较的结果来确定该花费区块链的验证。
花费区块链交易能够由区块链网络的节点创建;和/或花费区块链交易指向一或多个先前区块链交易的多个锁定脚本,每个锁定脚本表示执行线程的实例;和/或花费区块链交易包括对应的多个锁定脚本,其执行涉及由花费区块链交易所指向的在执行线程实例之间的线程间通信或控制;和/或花费区块链交易被发送给区块链网络中的其它节点以便在区块链中验证和存储。
花费区块链交易的多个锁定脚本能够通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列来生成。或者花费区块链交易的多个锁定脚本是通过复制一或多个先前区块链交易的多个锁定脚本的字节码序列和解释器代码来生成。和/或花费区块链交易的创建涉及为由花费区块链交易的锁定脚本的执行线程实例生成执行状态信息(诸如下一执行指针)并且将执行状态信息(诸如下一执行指针)包括到花费区块链交易的多个锁定脚本。
另外或备选的是,本发明能够包括一种计算机实施的方法,包括:
花费区块链交易由区块链网络的节点接收;和/或花费区块链交易指向一或多个先前区块链交易的多个锁定脚本,每个锁定脚本表示执行线程的实例;和/或花费区块链交易包括对应的多个锁定脚本,其执行涉及由花费区块链交易所指向的在执行线程实例之间的线程间通信或控制;以及通过对照一或多个条件来证实花费区块链交易的多个锁定脚本,节点验证花费区块链交易。
证实可以涉及将花费区块链交易的多个锁定脚本与一或多个先前区块链交易的多个锁定脚本进行匹配;和/或验证涉及检查用于一或多个先前区块链交易的多个锁定脚本的执行状态信息(诸如下一执行指针),以便提供在花费区块链交易所指向的执行线程实例之间的线程间通信和/或控制;和/或至少一个先前区块链交易的多个锁定脚本包括字节码序列和可能的解释器代码,并且花费区块链交易的多个锁定脚本被要求包括一或多个先前区块链交易的多个锁定脚本的字节码序列和解释器代码,以便花费区块链交易的验证成功;和/或证实涉及将用于花费区块链交易的每个锁定脚本的字节码序列和可能的解释器代码与一或多个先前区块链交易的对应锁定脚本的字节码序列和可能的解释器代码进行匹配,借此基于此类匹配的结果来确定花费区块链的验证。
现在转到图12。图12是可以被用来实践本公开的至少一个实施例的计算装置2600的说明性简化框图。在各种实施例中,计算装置2600可以被用来实施上面所图示和所描述的系统的任何一个。例如,计算装置2600可以被配置用作数据服务器、web服务器、便携式计算装置、个人计算机或任何电子计算装置。如图12中所示,计算装置2600可以包括一或多个处理器2602,其可被配置成经由总线子系统2604与多个外围子系统进行通信和可操作地耦合到多个外围子系统。处理器2602可以被用于作为如本文中所述的验证花费交易的一部分的解锁和锁定脚本的处理。这些外围子系统可以包括:存储子系统2606,其包括存储器子系统2608和文件/盘存储子系统2610;一或多个用户接口输入装置2612;一或多个用户接口输出装置2614;以及网络接口子系统2616。此类存储子系统2606可以被用于诸如与本公开中所描述的交易关联的细节的信息的临时或长期存储。
总线子系统2604可以提供用于使得计算装置2600的各种组件和子系统能够如预期地彼此进行通信的机制。虽然总线子系统2604被示意性地示为单个总线,但是总线子系统的备选实施例可以利用多个总线。网络接口子系统2616可以提供到其它计算装置和网络的接口。网络接口子系统2616可以用作从计算装置2600接收来自其它系统的数据和向其它系统传输数据的接口。例如,网络接口子系统2616可以使得数据技术人员能够将装置连接到无线网络,使得数据技术人员可以能够在处于远程位置(例如用户数据中心)时传输和接收数据。总线子系统2604可以被用于将诸如细节、搜索项等数据传递到本公开的受监督模型,并且可以被用于将受监督模型的输出传递到一或多个处理器2602以及经由网络接口子系统2616到商家和/或债权人。
用户接口输入装置2612可以包括一或多个用户输入装置,诸如键盘、诸如集成鼠标的指点装置、轨迹球、触摸板或图形输入板;扫描器;条形码扫描器;结合到显示器中的触摸屏;音频输入装置,诸如语音识别系统、麦克风;以及其他类型的输入装置。通常,术语“输入装置”的使用旨在包括用于向计算装置2600输入信息的所有可能类型的装置和机制。一或多个用户接口输出装置2614可以包括显示子系统、打印机或者诸如音频输出装置等的非视觉显示器。显示子系统可以是阴极射线管(CRT)、诸如液晶显示器(LCD)、发光二极管(LED)显示器的平板装置,或投影或其它显示装置。通常,术语“输出装置”的使用旨在包括用于从计算装置2600输出信息的所有可能类型的装置和机制。一或多个用户接口输出装置2614可以被用来例如呈现用户接口,以便于用户与执行所描述的进程及其变化的应用进行交互(在此类交互可能适当时)。
存储子系统2606可以提供用于存储可以提供本公开的至少一个实施例的功能性的基本编程和数据结构的计算机可读存储介质。在由一或多个处理器执行时,应用(程序、代码模块、指令)可以提供本公开的一或多个实施例的功能性,并且可以被存储在存储子系统2606中。这些应用模块或指令可以由一或多个处理器2602执行。存储子系统2606可以另外提供用于存储根据本公开使用的数据的存储库。存储子系统2606可以包括存储器子系统2608和文件/盘存储子系统2610。
存储器子系统2608可以包括多个存储器,包括用于在程序执行期间存储指令和数据的主随机存取存储器(RAM)2618和其中可以存储固定指令的只读存储器(ROM)2620。文件/盘存储子系统2610可以提供用于程序和数据文件的非暂时性持久(非易失性)存储,并且可以包括硬盘驱动器、软盘驱动器及关联的可移动介质、光盘只读存储器(CD-ROM)驱动器、光驱、可移动介质盒及其它类似的存储介质。
计算装置2600可以包括至少一个本地时钟2624。本地时钟2624可以是表示从具体开始日期起已过去的滴答数的计数器,并且可以整体地位于计算装置2600内。本地时钟2624可以被用来以特定时钟脉冲同步用于计算装置2600和其中包括的所有子系统的处理器中的数据转移,并且可以被用来协调在计算装置2600与数据中心中的其它系统之间的同步操作。在一个实施例中,本地时钟2624是原子时钟。在另一实施例中,本地时钟是可编程间隔定时器。
计算装置2600可以是各种类型,包括便携式计算机设备、平板计算机、工作站或下面描述的任何其它装置。另外,计算装置2600可以包括可以通过一或多个端口(例如,USB、耳机插孔、闪电连接器等)被连接到计算装置2600的另一装置。可以被连接到计算装置2600的装置可以包括被配置成接受光纤连接器的多个端口。因此,该装置可以被配置为将光学信号转换为电信号,电信号可以通过将该装置连接到计算装置2600的端口传输以便进行处理。由于计算机和网络的不断变化的性质,图12中所描绘的计算装置2600的描述仅旨在作为用于说明装置的优选实施例的特定示例。具有比图12所描绘的系统更多或更少的组件的许多其它配置是可能的。
因此,要以说明性而不是限制性的意义考虑说明书和附图。然而,将明显的是,在不脱离如权利要求中所陈述的本发明的范围的情况下,可以对其进行各种修改和更改。同样地,其它变化也在本公开的范围内。因此,尽管所公开的技术易于作出各种修改和替代构造,但其某些所说明的实施例在附图中被示出并且已在上面被详细描述。然而,应理解的是,无意将本发明限于所公开的特定形式,而是与此相反,意图覆盖落入如所附权利要求所限定的本发明的范围内的所有修改、替代构造和等同物。
在描述所公开的实施例的上下文中(特别是在所附权利要求的上下文中),除非上下文另有指示或明显相矛盾,否则,术语“一个”、“一种”和“该”及类似指示物的使用应被解释为涵盖单数和复数两者。除非另有说明,否则,术语“包括(comprising)”、“具有”、“包括(including)”和“包括(containing)”要被解释为开放式术语(即,意味着“包括,但不限于”)。术语“连接”在未被修改并且指物理连接时,即使存在某一中间物,也要被解释为部分地或全部地包括在内,附连到或联接在一起。除非另外指示,否则,本公开中对数值范围的叙述仅旨在用作单独提及落在该范围内的每个单独值的速记方法,并且每个单独值被结合到说明书中,如同它被单独叙述一样。除非上下文另有说明或相矛盾,否则,术语“集”(例如,“项目集”)或“子集”的使用要被解释为包括一或多个成员的非空集合。进一步,除非上下文另有说明或相矛盾,否则,术语对应集的“子集”不一定表示对应集的适当子集,而是子集和对应集可以相等。
除非上下文另有明确说明或明显相矛盾,否则,诸如形式为“A、B和C中的至少一个”或“A、B或C的至少一个”短语的关联语言要通过如通常使用的上下文来理解为呈现项目、术语等可以为A或B或C,或A和B和C的集的任何非空子集。例如,在具有三个成员的集的说明性示例中,关联短语“A、B和C中的至少一个”和“A、B或C中的至少一个”指以下集中的任一个:{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、{A,B,C}。因此,此类关联语言通常不旨在暗示某些实施例要求A中的至少一个、B中的至少一个和C中的至少一个中的每一个存在。
除非上下文另外指出或明显相矛盾,所描述的进程的操作能够以任何合适的顺序被执行。所描述的进程(或其变化和/或组合)可以在配置有可执行指令的一或多个计算机系统的控制下被执行,并且可以通过硬件或其组合实施为在一或多个处理器上共同执行的代码(例如,可执行指令、一或多个计算机程序或一或多个应用)。代码可以例如以包括可由一或多个处理器执行的多个指令的计算机程序的形式被存储在计算机可读存储介质上。计算机可读存储介质可以是非暂时性的。
除非另有声明,否则,所提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅旨在更好地说明本发明的实施例,而不对本发明的范围构成限制。说明书中的语言均不应被解释为将任何未要求保护的元素指示为本发明的实践所必需的。
描述了本公开的实施例,包括发明人已知的用于执行本发明的最佳模式。在阅读了前面的描述之后,那些实施例的变化可变得对于本领域的普通技术人员是显而易见的。发明人期望技术人员适当地采用此类变化,并且发明人预期了本公开的实施例以不同于所明确描述的方式来实践。因此,本公开的范围包括如适用法律所允许的所附权利要求中所述主题的所有修改和等同物。另外,除非上下文另外指明或明显相矛盾,否则,上述元素在其所有可能变化中的任何组合均由本公开的范围所涵盖。
包括出版物、专利申请和专利的所引用的所有参考文献被结合在此作为参考,其程度如同每个参考文献被单独地和明确地指示为被结合为参考并且被完整地阐述。
应当注意,上面提及的实施例说明而不是限制本发明,并且本领域技术人员将能在不脱离如由所附权利要求所限定的本发明的范围的情况下设计许多备选实施例。在权利要求中,置于括号中的任何附图标记不应被解释为限制权利要求。词语“包括(comprising)”和“包括(comprises)”、“具有”及诸如此类不排除在任何权利要求或整个说明书中列出的那些元素或步骤之外的元件或步骤的存在。在本说明书中,“包括(comprises)”意思是“包括或由…组成”,并且“包括(comprising)”意思是“包括或由…组成”。元素的单数引用不排除此类元件的复数引用,且反之亦然。除非另有声明或上下文有明确说明,否则,项目列表中的术语“和/或”指示在列表中至少一个项目的存在,而不排除或要求列表中的任何项目存在。本公开的实施例可以借助于包括几干不同的元素的硬件以及借助于适当编程的计算机来实施。在列举了几个装置的装置权利要求中,这些装置中的几个可以由同一个硬件项来实施。在相互不同的从属权利要求项中叙述某些措施的这一事实不表示这些措施的组合不能被用来形成优势。

Claims (19)

1.一种计算机实施的方法,包括:
创建和/或验证花费区块链交易,所述花费区块链交易包括:i)多个锁定脚本,所述多个锁定脚本各自表示执行线程的实例(该执行线程能够是从由先前区块链交易的锁定脚本所表示的执行线程分叉的执行线程和/或为线程间通信和控制而管理和/或控制的至少一个先前区块链交易的执行线程);或ii)锁定脚本,所述锁定脚本表示从由至少一个先前区块链交易所表示的多个执行线程实例联接的执行线程的实例;以及
在区块链网络上传递所述花费区块链交易以便存储在区块链中。
2.一种计算机实施的方法,包括:
将先前区块链交易存储在由区块链网络维持的区块链中,所述先前区块链交易包括表示父执行线程的实例的锁定脚本;
响应于包括在所述先前区块链交易的所述锁定脚本中的对应第一构造或操作,创建和/或验证第一区块链交易,所述第一区块链交易包括多个锁定脚本,所述多个锁定脚本各自表示从所述父执行线程分叉的子执行线程的实例;以及
在所述区块链网络上传递所述第一区块链交易以便存储在所述区块链中。
3.根据权利要求2所述的计算机实施的方法,其中:
所述第一区块链交易指向表示所述父执行线程的所述先前区块链交易的所述锁定脚本。
4.根据权利要求2或3所述的计算机实施的方法,其中
所述先前区块链交易的所述锁定脚本包括字节码序列和可选的解释器代码,并且所述第一区块链交易的所述多个锁定脚本中的至少一个包括所述先前区域链交易的所述锁定脚本的所述字节码序列的副本和可选的所述解释器代码的副本,或
所述先前区块链交易的所述锁定脚本包括字节码序列和可选的解释器代码,并且所述第一区块链交易的所述多个锁定脚本包括i)所述先前区块链交易的所述锁定脚本的所述字节码序列的副本和可选的所述解释器代码的副本,或ii)属于有效锁定脚本集合的不同的字节码序列和可选的解释器代码。
5.根据权利要求2至4所述的计算机实施的方法,其中:
所述第一区块链交易的所述多个锁定脚本各自包括用于相应子执行线程的执行状态信息(诸如下一执行指针)。
6.根据权利要求2至5中任一项所述的计算机实施的方法,还包括:
通过将所述第一区块链交易的所述多个锁定脚本中的至少一个与所述先前区块链交易的所述锁定脚本进行匹配来验证所述第一区块链交易;和/或
通过将用于所述第一区块链交易的所述多个锁定脚本中每一个锁定脚本的所述字节码序列和可选的解释器代码与所述先前区块链交易的锁定脚本的所述字节码序列和可选的解释器代码进行匹配来验证所述第一区块链交易,借此基于此类匹配的结果来确定所述第一区块链交易的验证;和/或
通过生成对应于所述先前区块链交易的所述锁定脚本的散列数据值,将所述散列数据值添加到与有效锁定脚本集合对应的散列数据值集合,以及将为所述第一区块链交易的每个锁定脚本生成的散列数据值与所述散列数据值集合进行比较,来验证所述第一区块链交易,借此基于该散列数据值比较的结果来确定所述第一区块链交易的验证;和/或
通过检查由所述第一花费区块链交易的所述多个锁定脚本所表示的所述子执行线程实例的执行状态信息(诸如下一执行指针),验证所述第一区块链交易。
7.根据权利要求2至6中任一项所述的计算机实施的方法,还包括:
响应于包括在至少一个其它先前区块链交易的至少一个锁定脚本中的对应第二构造或操作,创建和/或验证第二区块链交易,所述第二区块链交易包括表示从多个父执行线程实例联接的子执行线程的实例的锁定脚本,所述多个父执行线程实例由存储在所述区块链中的所述至少一个其它先前区块链交易的锁定脚本表示;以及
在所述区块链网络上传递所述第二区块链交易以便存储在所述区块链中。
8.根据权利要求7所述的计算机实施的方法,其中:
所述第二区块链交易指向所述至少一个其它先前区块链交易的多个锁定脚本,其中所述多个锁定脚本表示由所述第二区块链交易联接的所述多个父执行线程实例。
9.根据权利要求8所述的计算机实施的方法,其中:
所述至少一个其它先前区块链交易的所述多个锁定脚本各自包括字节码序列和可选的解释器代码,并且所述第二区块链交易的所述锁定脚本包括一或多个先前区块链交易的所述锁定脚本之一的所述字节码序列和可选的所述解释器代码的副本,或
所述至少一个其它先前区块链交易的所述多个锁定脚本各自包括字节码序列和可选的解释器代码,并且所述第二区块链交易的所述锁定脚本包括i)所述一或多个先前区块链交易的所述锁定脚本之一的所述字节码序列和可选的所述解释器代码的副本,或ii)属于有效锁定脚本集合的不同的字节码序列和可选的解释器代码。
10.根据权利要求7至9中任一项所述的计算机实施的方法,其中:
所述第二区块链交易的所述锁定脚本包括用于从所述多个父执行线程实例联接的所述子执行线程的执行状态信息(诸如下一执行指针)。
11.根据权利要求7至10中任一项所述的计算机实施的方法,其进一步包括:
通过将所述至少一个其它先前区块链交易的锁定脚本与所述第二区块链交易的所述锁定脚本进行匹配,验证所述第二区块链交易;和/或
通过将所述至少一个其它先前区块链交易的锁定脚本的所述字节码序列和可选的解释器代码与所述第二区块链交易的锁定脚本的所述字节码序列和可选的解释器代码进行匹配,验证所述第二区块链交易,借此基于此类匹配的结果来确定所述第二区块链交易的验证;和/或
通过生成对应于所述至少一个其它先前区块链交易的锁定脚本的散列数据值,将所述散列数据值添加到对应于有效锁定脚本集合的散列数据值集合,以及将为所述第二区块链交易的所述锁定脚本生成的散列数据值与所述散列数据值集合进行比较,来验证所述第二区块链交易,借此基于该散列数据值比较的结果来确定所述第二区块链交易的验证;和/或
通过检查由所述第二区块链交易的所述锁定脚本所表示的所述子执行线程的执行状态信息(诸如下一执行指针),验证所述第二区块链交易。
12.根据权利要求2至11中任一项所述的计算机实施的方法,其进一步包括:
响应于包括在所述至少一个其它先前区块链交易的至少一个锁定脚本中的对应第三构造或操作,创建和/或验证包括多个锁定脚本的第三区块链交易,所述多个锁定脚本表示存储在所述区块链中的用于线程间通信和控制的至少一个其它先前区块链交易的执行线程;以及
在所述区块链网络上传递所述第三区块链交易以便存储在所述区块链中。
13.根据权利要求12所述的计算机实施的方法,其中:
所述第三区块链交易指向所述至少一个其它先前区块链交易的多个锁定脚本,其中所述多个锁定脚本表示由所述第三区块链交易管理或控制的所述多个执行线程。
14.根据权利要求13所述的计算机实施的方法,其中:
所述至少一个其它先前区块链交易的所述多个锁定脚本各自包括字节码序列和可选的解释器代码,并且所述第三区块链交易的所述多个锁定脚本包括所述至少一个其它先前区块链交易的所述锁定脚本之一的所述字节码序列和可选的所述解释器代码的副本,或
所述至少一个其它先前区块链交易的所述多个锁定脚本各自包括字节码序列和可选的解释器代码,并且所述第三区块链交易的所述锁定脚本包括i)所述至少一个其它先前区块链交易的所述锁定脚本之一的所述字节码序列和可选的所述解释器代码的副本,或ii)属于有效锁定脚本集合的不同的字节码序列和可选的解释器代码。
15.根据权利要求12至14中任一项所述的计算机实施的方法,其中:
所述第三区块链交易的所述锁定脚本包括用于由所述第三区块链交易管理和控制的执行线程的执行状态信息(诸如下一执行指针)。
16.根据权利要求12至15中任一项所述的计算机实施的方法,其进一步包括:
通过将所述至少一个其它先前区块链交易的锁定脚本与所述第三区块链交易的锁定脚本进行匹配,验证所述第三区块链交易;和/或
通过将所述至少一个其它先前区块链交易的锁定脚本的所述字节码序列和可选的解释器代码与所述第三区块链交易的锁定脚本的所述字节码序列和可选的解释器代码进行匹配,验证所述第三区块链交易,借此基于此类匹配的结果来确定所述第三区块链交易的验证;和/或
通过生成对应于所述至少一个其它先前区块链交易的锁定脚本的散列数据值,将所述散列数据值添加到对应于有效锁定脚本集合的散列数据值集合,以及将为所述第三区块链交易的锁定脚本生成的散列数据值与所述散列数据值集合进行比较,来验证所述第三区块链交易,借此基于该散列数据值比较的结果来确定所述第三区块链交易的验证;和/或
通过检查由所述第三区块链交易管理和控制的执行线程的执行状态信息(诸如下一执行指针),验证所述第三区块链交易。
17.根据权利要求1至16中任一项所述的计算机实施的方法,其中所述第一区块链交易和/或所述第二区块链交易和/或所述第三区块链交易是智能合约的一部分。
18.一种系统,包括:
处理器;以及
包括可执行指令的存储器,所述可执行指令由于所述处理器的执行,促使所述系统执行根据权利要求1至17中任一项所述的计算机实施的方法的至少一部分。
19.一种在其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于被计算机系统的处理器执行,促使所述计算机系统执行根据权利要求1至17中任一项所述的计算机实施的方法的至少一部分。
CN201880081017.0A 2017-12-13 2018-12-07 用于并发字节码解释的区块链实施的系统和方法 Active CN111480162B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB1720767.1A GB201720767D0 (en) 2017-12-13 2017-12-13 Computer-implemented system and method
GB1720767.1 2017-12-13
PCT/IB2018/059757 WO2019116184A1 (en) 2017-12-13 2018-12-07 Blockchain-implemented systems and methods for concurrent bytecode interpretation

Publications (2)

Publication Number Publication Date
CN111480162A true CN111480162A (zh) 2020-07-31
CN111480162B CN111480162B (zh) 2024-04-12

Family

ID=61007094

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880081017.0A Active CN111480162B (zh) 2017-12-13 2018-12-07 用于并发字节码解释的区块链实施的系统和方法

Country Status (9)

Country Link
US (1) US11915238B2 (zh)
EP (2) EP3724806B8 (zh)
JP (2) JP7379332B2 (zh)
KR (1) KR102625385B1 (zh)
CN (1) CN111480162B (zh)
GB (1) GB201720767D0 (zh)
SG (1) SG11202005512WA (zh)
WO (1) WO2019116184A1 (zh)
ZA (1) ZA202004253B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111932271A (zh) * 2020-08-13 2020-11-13 四川长虹电器股份有限公司 一种基于区块链的社区资源交易方法
CN112866392A (zh) * 2020-08-31 2021-05-28 支付宝(杭州)信息技术有限公司 一种执行智能合约的方法、区块链节点、系统和存储介质

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019209059A1 (en) * 2018-04-25 2019-10-31 Samsung Electronics Co., Ltd. Machine learning on a blockchain
CN108846674A (zh) * 2018-07-12 2018-11-20 众安信息技术服务有限公司 在区块链中验证签名的方法和装置
US10929473B2 (en) * 2018-09-27 2021-02-23 Palo Alto Research Center Incorporated Integrated index blocks and searching in blockchain systems
WO2020081076A1 (en) * 2018-10-17 2020-04-23 Hewlett-Packard Development Company, L.P. Apparatus and method for dynamic sharding of concurrent blockchains
US10733152B2 (en) 2018-12-29 2020-08-04 Alibaba Group Holding Limited System and method for implementing native contract on blockchain
WO2019072310A2 (en) 2018-12-29 2019-04-18 Alibaba Group Holding Limited SYSTEM AND METHOD FOR IMPLEMENTING NATIVE CONTRACT ON BLOCK CHAIN
US11271755B2 (en) * 2019-03-25 2022-03-08 Micron Technology, Inc. Verifying vehicular identity
WO2019120316A2 (en) 2019-03-26 2019-06-27 Alibaba Group Holding Limited System and method for implementing different types of blockchain contracts
EP3715981A1 (de) * 2019-03-27 2020-09-30 Siemens Aktiengesellschaft Verfahren und steuersystem zum steuern einer ausführung von transaktionen
CN110659905B (zh) * 2019-09-20 2023-09-22 腾讯科技(深圳)有限公司 交易验证方法、装置、终端设备以及存储介质
US10867288B1 (en) 2019-11-25 2020-12-15 Capital One Services, Llc Blockchain payment notification system
US11314729B2 (en) * 2020-02-20 2022-04-26 International Business Machines Corporation Multi-candidate data structure for transaction validation
EP3907644B1 (en) * 2020-05-07 2022-10-05 Cambridge Cryptographic Ltd Blockchain
CN111522648B (zh) * 2020-07-03 2020-10-09 支付宝(杭州)信息技术有限公司 一种区块链的交易处理方法、装置及电子设备
GB2597672A (en) * 2020-07-29 2022-02-09 Taal Dit Gmbh Blockchain tokens
CA3091660A1 (en) * 2020-08-31 2021-11-03 Polymath Inc. Method, system, and medium for blockchain-enabled atomic settlement
CN111814202B (zh) * 2020-08-31 2020-12-11 支付宝(杭州)信息技术有限公司 一种执行智能合约的方法、区块链节点和存储介质
WO2022061878A1 (en) 2020-09-28 2022-03-31 Alipay (Hangzhou) Information Technology Co., Ltd. Blockchain transaction processing systems and methods
GB2605776A (en) * 2021-04-07 2022-10-19 Nchain Licensing Ag Blockchain-implemented hash function
US20220391887A1 (en) * 2021-06-08 2022-12-08 Artema Labs, Inc Systems and Methods for Maintenance of NFT Assets
CN114091111B (zh) * 2021-09-09 2022-11-18 深圳前海微众银行股份有限公司 一种区块链智能合约的存储方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106406896A (zh) * 2016-09-27 2017-02-15 北京天德科技有限公司 一种并行PipeLine技术的区块链建块方法
US20170212781A1 (en) * 2016-01-26 2017-07-27 International Business Machines Corporation Parallel execution of blockchain transactions
WO2017132641A1 (en) * 2016-01-28 2017-08-03 Nasdaq, Inc. Systems and methods for securing and disseminating time sensitive information using a blockchain
US20170293747A1 (en) * 2016-04-12 2017-10-12 Sensoriant, Inc. Method and system for safeguarding stored data
CN107423124A (zh) * 2017-07-27 2017-12-01 中链科技有限公司 一种用于对交易数据进行并行处理的方法

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
JP2001092647A (ja) 1999-09-27 2001-04-06 Hitachi Ltd プロセス定義情報からフロー制御プログラムへの変換方法
US10592985B2 (en) 2015-03-02 2020-03-17 Dell Products L.P. Systems and methods for a commodity contracts market using a secure distributed transaction ledger
JP6704985B2 (ja) * 2015-04-05 2020-06-03 デジタル・アセット・ホールディングス・エルエルシー デジタル資産仲介電子決済プラットフォーム
US10437585B2 (en) 2015-10-23 2019-10-08 Oracle International Corporation Managing highly scalable continuous delivery pipelines
US10652319B2 (en) 2015-12-16 2020-05-12 Dell Products L.P. Method and system for forming compute clusters using block chains
WO2017139688A1 (en) 2016-02-12 2017-08-17 D+H Usa Corporation Peer-to-peer financial transactions using a private distributed ledger
EP3257191B1 (en) 2016-02-23 2018-04-11 Nchain Holdings Limited Registry and automated management method for blockchain-enforced smart contracts
JP7128111B2 (ja) 2016-02-23 2022-08-30 エヌチェーン ホールディングス リミテッド ブロックチェーンを介して資産関連活動を制御するシステム及び方法
WO2017148527A1 (en) 2016-03-03 2017-09-08 Nec Europe Ltd. Method for managing data in a network of nodes
WO2017161417A1 (en) 2016-03-21 2017-09-28 National Ict Australia Limited Business process execution on a blockchain platform
CN109564599A (zh) 2016-03-31 2019-04-02 克劳斯公司 用于创建和执行数据驱动法律合同的系统和方法
US20170344988A1 (en) 2016-05-24 2017-11-30 Ubs Ag System and method for facilitating blockchain-based validation
US20170345011A1 (en) 2016-05-26 2017-11-30 Hitfin, Inc. System and method executed on a blockchain network
US10339014B2 (en) * 2016-09-28 2019-07-02 Mcafee, Llc Query optimized distributed ledger system
CN106548330B (zh) 2016-10-27 2018-03-16 上海亿账通区块链科技有限公司 基于区块链的交易验证方法及系统
CN106598579B (zh) 2016-12-06 2020-12-25 北京果仁宝科技有限公司 区块链上集成动态类型编程语言方法和装置
US20190087793A1 (en) * 2017-08-31 2019-03-21 Brown University Adding concurrency to smart contracts

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170212781A1 (en) * 2016-01-26 2017-07-27 International Business Machines Corporation Parallel execution of blockchain transactions
WO2017132641A1 (en) * 2016-01-28 2017-08-03 Nasdaq, Inc. Systems and methods for securing and disseminating time sensitive information using a blockchain
US20170293747A1 (en) * 2016-04-12 2017-10-12 Sensoriant, Inc. Method and system for safeguarding stored data
CN106406896A (zh) * 2016-09-27 2017-02-15 北京天德科技有限公司 一种并行PipeLine技术的区块链建块方法
CN107423124A (zh) * 2017-07-27 2017-12-01 中链科技有限公司 一种用于对交易数据进行并行处理的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
THOMAS DICKERSON ET AL: "Adding Concurrency to Smart Contracts", 《PRINCIPLES OF DISTRIBUTED COMPUTING》, pages 132 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111932271A (zh) * 2020-08-13 2020-11-13 四川长虹电器股份有限公司 一种基于区块链的社区资源交易方法
CN112866392A (zh) * 2020-08-31 2021-05-28 支付宝(杭州)信息技术有限公司 一种执行智能合约的方法、区块链节点、系统和存储介质

Also Published As

Publication number Publication date
EP4120115A1 (en) 2023-01-18
EP3724806B1 (en) 2022-08-10
JP2021507567A (ja) 2021-02-22
EP3724806A1 (en) 2020-10-21
SG11202005512WA (en) 2020-07-29
CN111480162B (zh) 2024-04-12
KR20200096785A (ko) 2020-08-13
JP2024001321A (ja) 2024-01-09
EP3724806B8 (en) 2022-09-14
JP7379332B2 (ja) 2023-11-14
WO2019116184A1 (en) 2019-06-20
KR102625385B1 (ko) 2024-01-17
ZA202004253B (en) 2023-10-25
GB201720767D0 (en) 2018-01-24
US20210073811A1 (en) 2021-03-11
US11915238B2 (en) 2024-02-27

Similar Documents

Publication Publication Date Title
CN111480162B (zh) 用于并发字节码解释的区块链实施的系统和方法
KR102609711B1 (ko) 블록체인을 사용한 동시적 상태 머신 프로세싱
JP7431934B2 (ja) ブロックチェーン実装スクリプトベースのバイト解釈のための方法とシステム
CN110663054A (zh) 复制带有终止条件的智能合约
CN110663053B (zh) 将未确定来源的未确定数据安全地提供到区块链交易的锁定脚本中

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant