可参数化的智能合约的制作方法

文档序号:19734785发布日期:2020-01-18 04:20阅读:193来源:国知局
可参数化的智能合约的制作方法
本发明大体上涉及分布式分类账技术,包括区块链交易,且更具体地,涉及使字段从区块链交易注入解锁交易脚本中。本发明利用加密和数学技术来增强与通过区块链网络进行的电子转账有关的安全性。本发明特别适合,但不限于,在智能合约和状态机中使用。
背景技术
:在本文中,我们使用术语″区块链″来包括所有形式的基于计算机的电子分布式分类账。这些包括基于共识的区块链和交易链技术、经过许可和未经许可的分类账、共享分类账及其变化形式。尽管已经提议且开发了其它区块链实现方式,但是区块链技术最广为人知的应用是比特币分类账。虽然″比特币(bitcoin)″可以被引用为本发明中描述的技术的有效应用,但是出于方便和说明的目的,比特币仅仅是本发明中描述的技术可以应用到的许多应用之一。然而,应注意,本发明不限于用在比特币区块链;包括非商业应用在内的替代区块链(alternativeblockchain)实现方式和协议也落入本发明的范围内。例如,无论是否发生加密货币交换,技术都可以提供优势,利用类似于比特币的,对可以在交易内编码的约束,具有限制的区块链实现方式。区块链是点对点(peer-to-peer)的电子分类账,其实现为基于计算机的,去中心化的,分布式系统,所述系统由区块组成,而区块又由交易和其它信息组成。在一些示例中,″区块链交易″是指对包括数据和条件集的字段值的结构化集合进行编码的输入消息,满足所述条件集是将字段集写入区块链数据结构的前提条件。例如,使用比特币,每笔交易都是对数字资产控制在区块链系统参与者之间的转移进行编码的数据结构,并且包括至少一个输入和至少一个输出。在一些实现方式中,可以通过将数字资产的至少一部分从第一实体重新关联到第二实体来执行对数字资产的控制的转移。每个区块包括前一个区块的散列,因此区块被链接在一起以创建自区块链创建以来一直写入区块链的所有交易的永久性不可变记录。交易包括嵌入到其输入和输出中的被称为脚本的小程序,所述小程序规定如何以及通过谁可以访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。也就是说,基于堆栈的脚本语言可以利用堆栈。使用堆栈,可以将值压入堆栈的顶部或从堆栈的顶部弹出。对堆栈执行的各种操作可以使得将一个或多个值推入堆栈的顶部或从堆栈的顶部弹出。例如,op_equal操作会从堆栈中弹出顶部两项,将它们进行比较,然后将结果(例如,如果相等则为1,如果不相等则为0)压入堆栈的顶部。对堆栈执行的其它操作,例如op_pick,可以允许从堆栈顶部以外的位置选择项。在一些本发明的实施例采用的一些脚本语言中,可能至少有两个堆栈:主堆栈和备用堆栈。脚本语言的一些操作可以将项从一个堆栈的顶部移动到另一个堆栈的顶部。例如,op_toaltstack将值从主堆栈的顶部移动到备用堆栈的顶部。为了将交易写入区块链,必须对其进行″验证(validated)″。网络节点(矿工)执行工作以确保每笔交易均有效,而无效交易则被网络拒绝。一个节点可以具有不同于其它节点的有效性标准。由于区块链中的有效性是基于共识的,因此,如果大多数节点同意交易有效,则交易被视为有效。安装在节点上的软件客户端通过执行未花费交易(utxo)锁定和解锁脚本来对部分引用utxo的交易执行此验证工作。如果锁定和解锁脚本的执行评估为真,并且满足其它验证条件(如果适用),则交易被节点验证为有效。将经验证的交易传播到其它网络节点,随后矿工节点可以选择将所述交易包括在区块链中。因此,为了将交易写入区块链,必须:i)由接收交易的第一节点验证交易-如果交易被验证,则所述节点将交易中继到网络中的其它节点;且ii)将交易添加到由矿工构建的新区块;且iii)挖掘,即将交易添加到过去交易的公共分类账。当将足够数量的区块添加到区块链以使交易实际上不可逆时,交易被视为已确认。技术实现要素:本发明描述了一个或多个基于区块链的计算机程序的技术方面。基于区块链的计算机程序是记录在区块链交易中的机器可读和可执行程序。基于区块链的计算机程序包括可以处理输入以产生结果的规则,然后可以根据这些结果执行操作。如果锁定脚本既可以访问解锁交易又可以访问先前交易,则可以利用区块链来实现高度灵活和复杂的智能合约。当前研究的一个领域是使用基于区块链的计算机程序来实现″智能合约″。与将以自然语言编写的传统合约不同,智能合约可以是设计成自动执行机器可读合约或协议条款的计算机程序。在实施例中,尽管可以在智能合约中的特定步骤对与特定实体的交互进行编码,但智能合约可以其它方式自动执行和自强制执行。在一些示例中,自动执行是指成功执行以实现utxo的转移的智能合约的执行。应注意,在此类示例中,能够使得utxo转移的″实体″是指能够创建解锁脚本而无需证明某些秘密知识的实体。换句话说,可以在不验证数据来源(例如,创建了解锁交易的实体)是否有权访问加密秘密(例如,私有非对称密钥、对称密钥等)的情况下确认解锁交易。同样,在此类示例中,自强制执行是指使区块链网络的验证节点根据约束来强制执行解锁交易。在一些示例中,从技术意义上使用″解锁″utxo(也称为″花费″utxo)是指创建引用utxo并作为有效执行的解锁交易。区块链交易输出包括锁定脚本和关于例如比特币之类的数字资产的所有权的信息。锁定脚本,也可以称为留置(encumbrance),通过指定转移utxo所需符合的条件来″锁定″数字资产。例如,锁定脚本可以要求在解锁脚本中提供某些数据以解锁相关联的数字资产。锁定脚本在比特币中也称为″脚本公钥(scriptpubkey)″。要求一方提供数据以解锁数字资产的技术涉及将数据的散列嵌入锁定脚本内。然而,如果在创建锁定脚本时数据是未确定的(例如,未知的和未固定的),则会出现问题。因此,期望提供在这些方面中的一个或多个方面中改进区块链技术的改进的方法和系统。因此,根据本发明,提供了如所附权利要求书中所定义的方法和对应系统。本发明可以被描述为验证方法/系统,和/或被描述为用于控制区块链交易的验证的控制方法/系统。在一些实施例中,经验证的区块链交易使得交易记录在区块链上,这在一些应用中可以使得经由区块链进行数字资产的交换或转移。数字资产是由区块链管理的资源的单位。尽管在一些实施例中,数字资产可以用作加密货币,但是在实施例中,设想数字资产可以另外或替代地用于其它情形。应注意,本发明虽然适用于数字资产的控制,但是本发明本质上是技术性的,并且可以在利用区块链数据结构而不一定涉及数字资产转移的其它情形使用。如下所述,本发明还可以被描述为用于经由区块链网络或平台执行操作的新的、改进的和有利的方式的安全方法/系统。如下文将更详细描述的,在实施例中,通过采用解锁交易的字段值集和来自解锁交易的解锁脚本的签名散列(sighash)类型作为输入并执行签名生成和验证操作,可以给予锁定脚本访问解锁交易的某些字段的权限。如下文将更详细描述的,在实施例中,通过约束从解锁交易的某些字段中提取的交易标识符(id),使得序列化的先前交易包括在解锁交易的解锁脚本中,可以给予锁定脚本访问先前交易中的字段集的权限。根据实施例,可以提供一种将序列化的先前交易注入区块链交易锁定脚本中的方法,所述方法采用对应于第一交易的第一字段值集和对应于另一交易的第二字段值集作为输入,从第一字段值集中提取交易标识符,并且基于第二字段值集确定另一交易对应于交易标识符。如下文将更详细描述的,在实施例中,锁定和解锁脚本可以用于使得能够安全地提供来自确定或未确定来源的未确定数据。为了使来自未确定来源的数据免受更改的影响,可以将数据嵌入序列化的先前交易中。应注意,即使数据在序列化的先前交易中,从锁定脚本不会将所述数据约束为某一值的意义上来说,它也是未确定的。为了使来自确定来源的数据不被更改,可以将来自确定来源的公钥包括在锁定脚本中,在锁定脚本中,可以使用数据修改公钥,然后可以使用公钥来验证使用修改后的私钥签名的数据的签名。根据实施例,可以提供一种方法,来获得未确定数据和第二值,并且基于解锁脚本中提供的数据和第二值来验证未确定数据与数据来源相关联。如下文将更详细描述的,在实施例中,可以通过从先前交易中提取约束参数并将约束参数应用于解锁交易的字段来创建参数化智能合约。可以通过具有约束的锁定脚本来实现参数化智能合约,所述约束通过由来自确定或未确定来源的解锁交易的解锁脚本中提供的安全的未确定数据进行参数化。根据实施例,可以提供一种方法,来获得未确定数据,可以根据所述未确定数据确定要应用于数字资产重新关联的约束集,并且根据所述约束集将数字资产与第二实体重新关联。如下文将更详细描述的,在实施例中,将智能合约创建为自复制的,直到达到终止条件为止。根据实施例,可以提供一种方法,来检查是否满足终止条件,并且如果不满足终止条件,则检查先前交易的锁定脚本与解锁交易的锁定脚本是否匹配。如下文将更详细描述的,在实施例中,可以使用参数化的自复制的智能合约来创建不可信任的确定性状态机。根据实施例,可以提供一种方法,来验证自复制的锁定脚本,并且至少部分地基于来自确定来源的输入和不可信任的确定性状态机的当前状态来确定不可信任的确定性状态机的下一状态。本发明所描述和建议的新颖技术扩展了区块链的功能,而不会破坏确保区块链数据结构内存储的数据的完整性的区块链特性。例如,这些技术通过利用区块链网络来设置和强制执行重新关联数字资产的标准,从而改进了计算领域,特别是用于验证的条件被定义为嵌入记录中的智能合约的数字记录验证领域。另外,本发明所描述和建议的技术可以通过使区块链交易能够充当状态机而使计算机程序功能取决于记录在这种状态机中的状态来改进区块链网络的功能。此外,本发明所描述和建议的技术可能必须植根于计算机技术中,以便克服由于安全性原因而专门设计为限制功能的区块链技术(例如比特币的脚本)特有的问题。例如,脚本本身不支持复杂的流控制功能,例如发生循环。这种限制的一个优点是程序具有可预测的执行时间。将脚本限制为线性或树状决策任务的另一个显著优点是它避免了无限循环,无限循环可能被用作发起例如拒绝服务(dos或ddos)攻击之类的漏洞的手段。因此,增强并保留了区块链转移/交换的安全性,但是需要找到机制来实现语言本身不允许或不提供的功能。本发明在这方面取得了进步,通过自复制和自引用区块链交易锁定脚本的实现方式,至少部分地解决了区块链交易的当前限制。因此,本发明提供了技术问题的技术解决方案,并且在安全性、经由区块链的数字资产交换/转移的改进控制以及当前区块链相关功能的扩展方面提供了优点。因此,根据本发明,可以提供一种如所附权利要求书中所定义的计算机实现的方法(和对应系统)。可以将所述计算机实现的方法描述为区块链数据约束方法。所述计算机实现的方法可以包括:i)在区块链网络中的节点处接收对数字资产的控制进行转移的第一交易,所述第一交易包括第一脚本,所述第一脚本至少:包括第一交易的字段值集;并且由于被执行而使节点获得所述字段值集;ii)获得第二交易,所述第二交易与数字资产相关联,并且包括第二脚本,所述第二脚本由于被执行而使节点至少:至少部分地基于由于第一脚本的执行而提供的字段值集来生成签名;以及iii)通过执行第一脚本和第二脚本来验证第一交易。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下成功执行对第一交易的验证。第一脚本可以进一步包括非对称密钥对中的私有加密密钥。另外或替代地,第二脚本可以进一步使节点至少部分地基于私有加密密钥和掩码数来生成签名。另外或替代地,验证第一交易可以进一步包括验证签名是否与非对称密钥对中的公共加密密钥相关联。第一脚本可以进一步指定签名散列类型。另外或替代地,字段值集可以至少部分地基于签名散列类型。签名散列类型可以是指示第一交易的字段值集中的哪些字段值将被包括在签名中的值。第二脚本可以是施加用于验证第一交易的条件集的锁定脚本。另外或替代地,锁定脚本的执行可以使节点通过确定是否已满足条件集来验证第一交易。第一脚本可以是用于满足第二脚本的条件集的解锁脚本。数字资产可以与区块链网络中的未花费交易输出相关联。节点可以是通信连接到区块链网络中的至少一个其它节点的计算装置。区块链网络可以由运行区块链协议实例的分布式电子装置组成。可以使用图灵不完整指令集来编写第一脚本和第二脚本。使用图灵完整指令集来编写第一脚本和第二脚本。通过包括字段集,第一脚本可以使节点由于第一脚本的执行而使字段集可用作第二脚本的输入。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的计算机实现的方法(和对应系统)。可以将所述计算机实现的方法描述为区块链数据约束方法。所述计算机实现的方法可以包括:i)在区块链网络中的节点处接收对数字资产的控制进行转移的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少:获得对应于第一交易的第一字段值集;以及获得对应于特定交易的第二字段值集;ii)获得第二交易,所述第二交易与数字资产相关联,并且包括第二脚本,所述第二脚本由于被执行而使节点至少:获得由于第一脚本的执行而提供的特定交易的第一字段值集和第二字段值集;从第一字段值集中提取交易标识符;以及至少部分地基于第二字段值集确定特定交易对应于交易标识符;以及iii)通过执行第一脚本和第二脚本来验证第一交易。第二字段值集可以采用规范化格式。节点可以通过生成第二字段值集的散列来确定特定交易对应于交易标识符。另外或替代地,节点可以通过验证散列与交易标识符匹配来确定特定交易对应于交易标识符。特定交易可以与对被转移的数字资产的控制相关联。特定交易可以与不同于被转移的数字资产的第二数字资产相关联。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下成功验证第一交易。节点可以是区块链网络的验证节点。验证第一交易可以进一步包括由于第一交易的成功验证而将第一交易添加到区块链网络中的区块链。第二脚本可以是施加用于验证第一交易的条件集的锁定脚本。另外或替代地,锁定脚本的执行可以使节点通过确定是否已满足条件集来验证第一交易。第一脚本可以是用于满足第二脚本的条件集的解锁脚本。第一脚本可以指定签名散列类型。另外或替代地,第二脚本可以进一步由于被执行而使节点获得由于第一脚本的执行而提供的签名散列类型。第二脚本可以进一步由于被执行而使节点至少部分地基于签名散列类型来确定特定交易是与第一交易相关联的交易集的组成部分。第二脚本可以进一步由于被执行而使节点至少部分地基于签名散列类型来确定特定交易对应于第二交易。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的计算机实现的方法(和对应系统)。可以将所述计算机实现的方法描述为区块链数据约束方法。所述计算机实现的方法可以包括:i)在区块链网络中的节点处接收对数字资产的控制进行转移的第一交易,所述第一交易包括第一脚本,所述第一脚本包括至少:第一值,所述第一值的至少一部分包括不受第二脚本约束的数据;以及第二值;ii)获得第二交易,所述第二交易与数字资产相关联,并且包括第二脚本,所述第二脚本由于被执行而使节点至少:由于第一脚本的执行而获得第一值和第二值;以及至少部分地基于第一值和第二值验证数据与特定来源相关联;以及iii)通过执行第一脚本和第二脚本来验证第一交易。第二脚本可以是包括用于验证第二交易的条件集的锁定脚本。另外或替代地,第一脚本可以是用于满足锁定脚本的条件集的解锁脚本。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下执行对第一交易的验证。数据与数据来源关联的失败验证可能会导致验证第一交易失败。特定来源的身份可以不受第二脚本约束。特定交易可以是数据的特定来源。另外或替代地,第一值可以是特定交易的字段值集。另外或替代地,第二值可以包括与特定交易相关联的交易标识符。第二脚本可以通过验证特定交易对应于交易标识符来验证数据与数据来源相关联。第二脚本可以通过验证交易标识符与特定交易的字段集的散列匹配来验证特定交易对应于交易标识符。通过包括特定交易的字段集,第一脚本可以使节点由于第一脚本的执行而使特定交易的字段集可以用作第二脚本的输入。特定交易可以是第二交易。数据可以被编码在特定交易的字段中。第二脚本可以约束特定来源的身份。第二值可以是签名。另外或替代地,第二脚本可以进一步使节点获得与数据来源相关联的公钥,并且另外或替代地,至少部分地基于公钥和数据来生成修改后的公钥。另外或替代地,第二脚本可以至少部分地基于修改后的公钥来验证数据与数据来源相关联。可以通过对公钥执行椭圆曲线点乘以数据值来生成修改后的公钥。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的计算机实现的方法(和对应系统)。可以将所述计算机实现的方法描述为区块链数据约束方法。所述计算机实现的方法可以包括:i)在区块链网络中的节点处接收对数字资产的控制进行转移的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少获得数据和第一交易的第一字段值集;ii)获得第二交易,所述第二交易包括第二脚本,所述第二脚本由于被执行而使节点至少:至少部分地基于由于第一脚本的执行而提供的数据来确定约束集;以及至少部分地基于第一字段值集来针对第一交易验证约束集;以及iii)根据由于第一脚本和第二脚本的执行而获得的约束集来转移对数字资产的控制。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下执行对数字资产的控制的转移。数据来源的身份可以不受第二脚本约束。第二脚本可以约束数据来源的身份。第二脚本可以包括可用于验证数据的特定数据来源的公钥。验证数据可以包括至少部分地基于公钥和数据来生成修改后的公钥,并且另外或替代地,至少部分地基于修改后的公钥来确定数据与数据来源相关联。可以至少部分地从数据中的参数集中导出约束集。约束集的满足可以是用于重新关联数字资产的至少一部分的条件。转移对数字资产的控制可以包括将数字资产从第一实体重新关联到第二实体。可以至少部分地基于约束集来确定第二实体的身份。数据来源可以是第二交易。另外或替代地,数据包括第二交易的第二字段值集。另外或替代地,第二脚本的执行可以使得至少部分地从第二字段值集中导出约束集。可以至少部分地基于约束集来确定第二实体的身份。约束集可以进一步使数字资产的至少一部分与第三实体重新关联。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的计算机实现的方法(和对应系统)。可以将所述计算机实现的方法描述为区块链数据约束方法。所述计算机实现的方法可以包括:i)在区块链网络中的节点处接收对数字资产的控制进行转移的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少:获得第一交易的第一字段值集,所述第一字段值集包括第三脚本;以及获得第二交易的第二字段值集,所述第二字段值集包括第二脚本的副本;ii)获得第二交易,所述第二交易包括第二脚本,所述第二脚本由于被执行而使节点由于确定终止条件没有得到满足而至少:从第一字段值集获得第三脚本;以及确定第二脚本的副本与第三脚本匹配;以及iii)由于第一脚本和第二脚本的执行而转移对数字资产的控制。第二交易可以是与数字资产相关联的交易。另外或替代地,第一交易可以是将数字资产的至少一部分从第一实体重新关联到第二实体的交易。第一脚本可以是用于满足第二脚本的条件集的解锁脚本。第二脚本可以是施加用于验证第一交易的条件集的锁定脚本。第三脚本可以是施加用于验证未来交易的条件集的锁定脚本。转移对数字资产的控制可以包括将数字资产从第一实体重新关联到第二实体。确定终止条件没有得到满足可以包括确定与第二交易相关联的数字资产的金额足以重新关联数字资产的至少一部分。可以将第三脚本嵌入第一字段值集的字段值中。区块链网络可以由运行区块链协议实例的分布式电子装置组成。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下执行对数字资产的控制的转移。作为用于转移对数字资产的控制的另一条件,第二脚本可以进一步使节点验证第一交易符合附加约束。第一和第二交易可以是与数字资产相关联的重复智能合约集的组成部分。重复智能合约集可以由终止条件终止。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的计算机实现的方法(和对应系统)。可以将所述计算机实现的方法描述为区块链数据约束方法。所述计算机实现的方法可以包括:计算机实现的方法,包括:i)在区块链网络中的节点处接收对数字资产的控制进行转移的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少获得第一交易的第一字段值集、第二交易的第二字段值集,以及输入;ii)获得第二交易,所述第二交易包括第二脚本,所述第二脚本包括规则集,所述第二脚本由于被执行而使节点至少:验证第二脚本与嵌入第一字段值集中的第三脚本匹配;至少部分地基于第二字段值集确定当前状态;以及至少部分地基于所述当前状态、所述输入和所述规则集确定下一状态;验证所述下一状态包括在第一字段值集中;以及iii)由于第一脚本和第二脚本的执行而转移对数字资产的控制。第二脚本可以约束输入来源的身份。所要求保护的任何方法可以进一步包括验证输入来源的加密秘密。规则集可以是状态转换矩阵。第三脚本可以是施加用于验证未来交易的条件集的锁定脚本。第二脚本可以进一步使节点确定终止条件没有得到满足。输入可以嵌入在第二字段值集中。终止条件可以是与第二交易相关联的数字资产的大小不足以进行转移。当前状态可以指示第二交易的状态。下一状态可以指示在验证时第一交易的状态。所要求保护的任何方法可以进一步包括接收第三交易。另外或替代地,所要求保护的任何方法可以进一步包括:从第一交易获得第四脚本,所述第四脚本由于被执行而使节点至少部分地基于下一状态、第二输入和规则集来确定不同于下一状态和当前状态的另一状态。当前状态和下一状态可以是第一和第二交易的可能状态集的组成部分。转移对数字资产的控制可以包括将数字资产从第一实体重新关联到第二实体。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的方法(和对应系统)。可以将所述方法描述为区块链数据约束方法。所述方法可以包括:i)在区块链网络中的节点处接收要验证的第一交易,所述第一交易包括第一脚本,所述第一脚本至少:包括第一交易的字段值集;并且由于被执行而使节点获得所述字段值集;ii)获得第二交易,所述第二交易已被验证并且包括第二脚本,所述第二脚本由于被执行而使节点至少:至少部分地基于由于第一脚本的执行而提供的字段值集来生成签名;以及iii)通过执行第一脚本和第二脚本来验证第一交易。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下成功执行对第一交易的验证。第一脚本可以进一步包括非对称密钥对中的私有加密密钥。另外或替代地,第二脚本可以进一步使节点至少部分地基于私有加密密钥和掩码数来生成签名。另外或替代地,验证第一交易可以进一步包括验证签名与非对称密钥对中的公共加密密钥相关联。第一脚本可以进一步指定签名散列类型。另外或替代地,字段值集可以至少部分地基于签名散列类型。签名散列类型可以是指示第一交易的字段值集中的哪些字段值将被包括在签名中的值。第二脚本可以是施加用于验证第一交易的条件集的锁定脚本。另外或替代地,锁定脚本的执行可以使节点通过确定是否已满足条件集来验证第一交易。第一脚本可以是用于满足第二脚本的条件集的解锁脚本。验证第一交易可以使未花费交易输出转移。节点可以是通信连接到区块链网络中的至少一个其它节点的计算装置。区块链网络可以由运行区块链协议实例的分布式电子装置组成。可以使用图灵不完整指令集来编写第一脚本和第二脚本。使用图灵完整指令集来编写第一脚本和第二脚本。通过包括字段集,第一脚本可以使节点由于第一脚本的执行而使字段集可用作第二脚本的输入。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的方法(和对应系统)。可以将所述方法描述为区块链数据约束方法。所述方法可以包括:i)在区块链网络中的节点处接收要验证的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少:获得对应于第一交易的第一字段值集;以及获得对应于特定交易的第二字段值集;ii)获得第二交易,所述第二交易已被验证并且包括第二脚本,所述第二脚本由于被执行而使节点至少:获得由于第一脚本的执行而提供的第一字段值集和特定交易的第二字段值集;从第一字段值集中提取交易标识符;以及至少部分地基于第二字段值集来确定特定交易对应于交易标识符;以及iii)通过执行第一脚本和第二脚本来验证第一交易。第二字段值集可以采用规范化格式。节点可以通过生成第二字段值集的散列来确定特定交易对应于交易标识符。另外或替代地,节点可以通过验证散列与交易标识符匹配来确定特定交易对应于交易标识符。特定交易可以与由于验证第一交易而转移的对数字资产的控制相关联。特定交易可以与第二数字资产相关联,所述第二数字资产不同于由于验证第一交易而转移的数字资产。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下成功验证第一交易。节点可以是区块链网络的验证节点。验证第一交易可以进一步包括由于第一交易的成功验证而将第一交易添加到区块链网络中的区块链。第二脚本可以是施加用于验证第一交易的条件集的锁定脚本。另外或替代地,锁定脚本的执行可以使节点通过确定是否已满足条件集来验证第一交易。第一脚本可以是用于满足第二脚本的条件集的解锁脚本。第一脚本可以指定签名散列类型。另外或替代地,第二脚本可以进一步由于被执行而使节点获得由于第一脚本的执行而提供的签名散列类型。第二脚本可以进一步由于被执行而使节点至少部分地基于签名散列类型来确定特定交易是与第一交易相关联的交易集的组成部分。第二脚本可以进一步由于被执行而使节点至少部分地基于签名散列类型来确定特定交易对应于第二交易。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的方法(和对应系统)。可以将所述方法描述为区块链数据约束方法。所述方法可以包括:i)在区块链网络中的节点处接收要验证的第一交易,所述第一交易包括第一脚本,所述第一脚本包括至少:第一值,所述第一值的至少一部分包括不受第二脚本约束的数据;以及第二值;ii)获得第二交易,所述第二交易已被验证并且包括第二脚本,所述第二脚本由于被执行而使节点至少:由于第一脚本的执行而获得第一值和第二值;以及至少部分地基于第一值和第二值验证数据与特定来源相关联;以及iii)通过执行第一脚本和第二脚本来验证第一交易。第二脚本可以是包括用于验证第二交易的条件集的锁定脚本。另外或替代地,第一脚本可以是用于满足锁定脚本的条件集的解锁脚本。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下执行对第一交易的验证。数据与数据来源关联的失败验证可能会导致验证第一交易失败。特定来源的身份可以不受第二脚本约束。特定交易可以是特定数据来源。另外或替代地,第一值可以是特定交易的字段值集。另外或替代地,第二值可以包括与特定交易相关联的交易标识符。第二脚本可以由于被执行而通过验证特定交易对应于交易标识符来验证数据与数据来源相关联。第二脚本可以由于被执行而通过验证交易标识符与特定交易的字段集的散列匹配来验证特定交易对应于交易标识符。通过包括特定交易的字段集,第一脚本可以使节点由于第一脚本的执行而使特定交易的字段集可以用作第二脚本的输入。特定交易可以是第二交易。数据可以被编码在特定交易的字段中。第二脚本可以约束特定来源的身份。第二值可以是签名。另外或替代地,第二脚本可以进一步使节点获得与数据来源相关联的公钥,并且另外或替代地,至少部分地基于公钥和数据来生成修改后的公钥。另外或替代地,第二脚本可以由于被执行而至少部分地基于修改后的公钥来验证数据与数据来源相关联。可以通过对公钥执行椭圆曲线点乘以数据值来生成修改后的公钥。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的方法(和对应系统)。可以将所述方法描述为区块链数据约束方法。所述方法可以包括:i)在区块链网络中的节点处接收要验证的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少获得数据和第一交易的第一字段值集;ii)获得第二交易,所述第二交易包括第二脚本,所述第二脚本由于被执行而使节点至少:至少部分地基于由于第一脚本的执行而提供的数据来确定约束集;以及至少部分地基于第一字段值集来针对第一交易验证约束集;以及iii)根据由于第一脚本和第二脚本的执行而获得的约束集来验证第一交易。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下执行对第一交易的验证。数据来源的身份可以不受第二脚本约束。第二脚本可以约束数据来源的身份。第二脚本可以包括可用于验证数据的特定数据来源的公钥。验证数据可以包括至少部分地基于公钥和数据来生成修改后的公钥,并且另外或替代地,至少部分地基于修改后的公钥来确定数据与数据来源相关联。可以至少部分地从数据中的参数集中导出约束集。约束集的满足可以是用于重新关联数字资产的至少一部分的条件。验证第一交易可以包括将数字资产从第一实体重新关联到第二实体。约束集可以进一步使数字资产的至少一部分与第三实体重新关联。可以至少部分地基于约束集来确定第二实体的身份。数据来源可以是第二交易。另外或替代地,数据包括第二交易的第二字段值集。另外或替代地,第二脚本的执行可以使得至少部分地从第二字段值集中导出约束集。可以至少部分地基于约束集来确定第二实体的身份。约束集可以进一步使数字资产的至少一部分与第三实体重新关联。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的方法(和对应系统)。可以将所述方法描述为区块链数据约束方法。所述方法可以包括:i)在区块链网络中的节点处接收要验证的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少:获得第一交易的第一字段值集,所述第一字段值集包括第三脚本;以及获得第二交易的第二字段值集,所述第二字段值集包括第二脚本的副本;ii)获得第二交易,所述第二交易包括第二脚本,所述第二脚本由于被执行而使节点由于确定终止条件没有得到满足而至少:从第一字段值集获得第三脚本;以及确定第二脚本的副本与第三脚本匹配;以及iii)由于第一脚本和第二脚本的执行而验证第一交易。第一脚本可以是用于满足第二脚本的条件集的解锁脚本。第二脚本可以是施加用于验证第一交易的条件集的锁定脚本。第三脚本可以是施加用于验证未来交易的条件集的锁定脚本。第二交易可以是与数字资产相关联的交易。另外或替代地,第一交易可以是将数字资产的至少一部分从第一实体重新关联到第二实体的交易。验证第一交易可以包括将数字资产从第一实体重新关联到第二实体。确定终止条件没有得到满足可以包括确定与第二交易相关联的数字资产的金额足以重新关联数字资产的至少一部分。可以将第三脚本嵌入第一字段值集的字段值中。区块链网络可以由运行区块链协议实例的分布式电子装置组成。可以在不验证创建第一交易的实体是否有权访问秘密信息的情况下执行对第一交易的验证。作为用于验证第一交易的另一条件,第二脚本可以进一步使节点验证第一交易符合附加约束。第一和第二交易可以是与数字资产相关联的重复智能合约集的组成部分。重复智能合约集可以由终止条件终止。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。因此,根据本发明,可以提供一种如所附权利要求书中所定义的方法(和对应系统)。可以将所述方法描述为区块链数据约束方法。所述方法可以包括:i)在区块链网络中的节点处接收要验证的第一交易,所述第一交易包括第一脚本,所述第一脚本由于被执行而使节点至少获得第一交易的第一字段值集、第二交易的第二字段值集,以及输入;ii)获得第二交易,所述第二交易包括第二脚本,所述第二脚本包括规则集,所述第二脚本由于被执行而使节点至少:验证第二脚本与嵌入第一字段值集中的第三脚本匹配;至少部分地基于第二字段值集确定当前状态;以及至少部分地基于所述当前状态、所述输入和所述规则集确定下一状态;验证所述下一状态包括在第一字段值集中;以及iii)由于第一脚本和第二脚本的执行而验证第一交易。第二脚本可以约束输入来源的身份。所要求保护的任何方法可以进一步包括验证输入来源的加密秘密。规则集可以是状态转换矩阵。第三脚本可以是施加用于验证未来交易的条件集的锁定脚本。第二脚本可以进一步使节点确定终止条件没有得到满足。输入可以嵌入在第二字段值集中。终止条件可以是与第二交易相关联的数字资产的大小不足以进行转移。验证第一交易可以包括将数字资产从第一实体重新关联到第二实体。当前状态可以指示第二交易的状态。下一状态可以指示在验证时第一交易的状态。所要求保护的任何方法可以进一步包括接收第三交易。另外或替代地,所要求保护的任何方法可以进一步包括:从第一交易获得第四脚本,所述第四脚本由于被执行而使节点至少部分地基于下一状态、第二输入和规则集来确定不同于下一状态和当前状态的另一状态。当前状态和下一状态可以是第一和第二交易的可能状态集的组成部分。还期望提供一种系统,所述系统包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于由处理器执行而使所述系统执行所要求保护的任何方法。还期望提供一种其上存储有可执行指令的非暂时性计算机可读存储介质,所述可执行指令由于由计算机系统的处理器执行而使计算机系统至少执行所要求保护的任何方法。附图说明本发明的这些方面和其它方面将从本文中描述的实施例显而易见,且参考本文中描述的实施例进行阐明。现在将仅通过举例的方式并参考附图来描述本发明的实施例,其中:图1示出可以在其中实现各种实施例的区块链环境;图2示出根据实施例的不可信任的确定性状态机的示例;图3示出通过实施例解决的与锁定脚本相关联的问题的示例;图4示出根据实施例的解锁脚本可访问的数据的示例;图5示出根据实施例的从序列化交易字段集生成签名的示例;图6是示出根据实施例的使得注入序列化解锁交易字段集的示例的流程图;图7示出通过实施例解决的与锁定脚本相关联的问题的另一示例;图8示出根据实施例的使得注入序列化先前交易的示例;图9示出根据实施例的取决于签名散列类型的可用字段集的示例;图10示出根据实施例的从序列化交易中提取交易标识符的示例;图11是示出根据实施例的使得注入序列化先前交易的示例的流程图;图12示出根据实施例的不安全地提供来自未确定来源的未确定数据的示例;图13示出根据实施例的安全地提供来自确定来源的未确定数据的示例;图14示出根据实施例的将来自未确定来源的未确定数据安全地提供到锁定脚本中的示例;图15是示出根据实施例的将未确定数据安全地提供到锁定脚本中的示例的流程图;图16示出根据实施例的参数化智能合约的示例;图17是示出根据实施例的执行参数化智能合约的示例的流程图;图18示出通过实施例解决的智能合约复制问题的示例;图19示出根据实施例的智能合约复制问题的解决方案的示例;图20示出根据实施例解决的智能合约复制问题的另一示例;图21示出根据实施例的自复制智能合约的示例;图22示出根据实施例的具有终止条件的自复制智能合约的示例的流程图;图23示出根据实施例解决的下一状态确定的问题的示例;图24示出根据实施例的不可信任确定性状态机的示例;图25示出根据实施例的不可信任确定性状态机的示例的流程图;以及图26示出可以在其中实现各种实施例的计算环境。具体实施方式首先将参考图1,其示出根据本发明的实施例的与区块链相关联的示例区块链网络100。在实施例中,示例区块链网络100由运行区块链协议的实例的点对点分布式电子装置组成。在一些示例中,分布式电子装置被称为节点102。区块链协议的示例是比特币协议。节点102可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置(例如,台式计算机、膝上型计算机、平板计算机、智能手机等)、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。在实施例中,节点102中的一个或多个节点通信连接到节点102中的一个或多个其它节点。这种通信连接可以包括有线或无线通信中的一个或多个。在实施例中,节点102各自维护区块链中所有交易的″分类账″的至少一部分。以这种方式,分类账是分布式分类账。由影响分类账的节点处理的交易可以由其它节点中的一个或多个验证,从而保持分类账的完整性。在实施例中,节点102中的至少一些节点是矿工节点,其执行复杂的计算,例如解决加密问题。解决加密问题的矿工节点为区块链创建新区块,并将所述新区块广播到节点102中的其它节点。节点102中的其它节点验证矿工节点的工作,并在验证后将区块接受到区块链中(例如,通过将其添加到区块链的分布式分类账中)。在一些示例中,区块是一组交易,通常用前一个区块的时间戳和″指纹″(例如,散列)标记。通过这种方式,每个区块都链接到前一个区块,从而在区块链中创建链接区块的″链″。在实施例中,通过节点102的共识将有效区块添加到区块链。另外,在一些示例中,区块链包括经过验证的区块的列表。在实施例中,如本发明中所描述的,节点102中的至少一些节点用作验证交易的验证节点。在一些示例中,交易包括提供数字资产(例如,许多比特币)所有权的证明以及用于接受或转移数字资产所有权/控制权的条件的数据。在一些示例中,″解锁交易″是指将由先前交易的未花费交易输出(utxo)指示的数字资产的至少一部分重新关联(例如,转移所有权或控制权)到与区块链地址相关联的实体的交易。在一些示例中,″先前交易″是指包括由解锁交易所引用的utxo的交易。在一些实施例中,交易包括″锁定脚本″,所述″锁定脚本″以必须满足才能转移(″解锁″)所有权/控制权的条件留置交易。在一些实施例中,区块链地址是一串字母数字字符,其与数字资产的至少一部分的控制转移/重新关联到的实体相关联。在一些实施例中实现的一些区块链协议中,和实体相关联的公钥与区块链地址之间存在一一对应的关系。交易的验证可以包括验证锁定脚本和/或解锁脚本中指定的一个或多个条件。在成功验证交易104后,验证节点将交易104添加到区块链并将其分发到节点102。图2示出本发明的示例实施例200。具体地,图2描绘了编码第一状态206的先前区块链交易202和编码第二状态208的解锁区块链交易204。在示例实施例200中,第一时间的第一状态206被表示为嵌入先前区块链202中的参数。关于参数化约束的更多细节可在图16的描述中找到。解锁区块链交易204将包括表示第二状态208的参数。在示例实施例200中,交易202和204是字段值集,其包括一个或多个输入和一个或多个输出。在一些实施例中,输入和输出反映了将数字资产的至少一部分从至少一个实体重新关联到至少另一实体的意图。在示例实施例200中,先前区块链交易202是包括在区块链中的最新的、经过确认的交易。在示例实施例200中,解锁区块链交易204是近期交易,其尚待确认并且尚未包括在区块链中。解锁区块链交易204的每个输入都接收前一个区块链交易202的输出。一些区块链技术,例如比特币,使用椭圆曲线数字签名算法(ecdsa)作为数字签名的数学方案。在实施例中,ecdsa是用于保护utxo不被未经批准的实体获得的加密数字签名。比特币中的椭圆曲线数字签名(ecds)通常会在其末尾附加签名散列标记(sighash类型);然而,设想本发明的技术可与不实现sighash类型的区块链技术一起使用。在这样的区块链技术中,ecds被设想为符合特定区块链技术的签名生成原理。在实施例中,sighash类型是指在被序列化(例如规范化)和散列化之前从交易中提取的字段集。例如,sighash类型会影响签名中包括交易的哪些字段。在一些示例中,sighash类型可以是sighash_all、sighash_none、sighash_single或sighash_anyonecanpay中的一个或多个。在实施例中,类型sighash_all指示除了输入脚本之外,要对交易中的所有字段进行散列和签名。在实施例中,类型sighash_none指示不需要对输出进行签名,这可以允许其他人更新交易。在实施例中,类型sighash_single指示对输入进行签名但是序列号留空白,因此其他人可以创建交易的新版本,但是唯一进行签名的输出是与输入在相同位置的输出。在实施例中,类型sighash_anyonecanpay与其它类型组合,并指示对包括sighash_anyonecanpay的输入进行签名,但是不需要对其它输入进行签名。sighash类型可以由指示sighash类型的值表示。例如,在一些实现方式中,sighash_all由具有值1的字节表示,sighash_none由具有值2的字节表示,sighash_single由具有值3的字节表示,并且sighash_anyonecanpay由具有值80的字节表示。在一些实现方式中,通过将字节值加在一起来执行对sighash类型的组合。在一些示例中,由sighash类型确定的交易字段集是指由sighash类型确定的以字节编码的对应交易的子集。例如,在sighash类型为sighash_anyonecanpay的情况下,签名中仅包括一个交易输入。在实施例中,ecds由一对以区别编码规则(der)格式编码的256位数字(r,s)表示。然而,应注意,本发明的技术可与其它编码格式一起使用,例如基本编码规则(ber)或规范编码规则(cer)。ecdsa中使用的参数包括k(具有坐标(x,y)的椭圆曲线点),k(256位数字;通常是随机数以保护私钥),g(椭圆曲线上的基点,具有阶次n:n×g=0,其中0表示相同的椭圆曲线点),n是在椭圆曲线有限字段中用作参数的大质数,r(ecds中256位数字之一),s(签名中另一个256位数字),k-1(k的模乘逆,即k-1k≡1modn),m(被签名的消息/数据;在实施例中,通过散列函数将其调整为256位),a(私钥;例如256位数字)。在实施例中,如下生成ecds。首先,通过将k与生成器相乘来确定椭圆曲线点k:k=k×g然后,根据k确定点x,并根据以下公式确定ecds中256位数字中的第一个,即r:r=xmodn然后,根据以下公式确定ecds中256位数字中的第二个,即s:s=k-1(m+r×a)modn最后,以der格式对(r,s)进行编码。在给定签名(r,s)、消息/数据m以及与私钥a相对应的公钥a的情况下,签名是可验证的。为验证签名,计算v=s-1×(m×g+r×y)。如果v=r,则签名有效。比特币使用称为″脚本″的脚本系统。在本发明中,参考各种脚本操作码和关键字来执行各种操作。然而,设想其它区块链技术可以实现不同的指令集,因此,本发明中描述的操作码被认为是对由操作码而不是脚本中的特定操作码执行的操作的说明。在一些实施例中,脚本系统是图灵不完整指令集(例如,不支持循环、递归、跳转语句等)。在其它实施例中,脚本系统是图灵完整指令集。本发明的某些实施例在脚本系统或用于实现所描述的指令集的其它系统在单个脚本中允许多于200条指令(例如,操作码)的假设下操作。同样,本发明的某些实施例还假设:·在执行操作码脚本/指令集的系统中,存在并启用了由本
发明内容引用的操作码提供的功能;和/或·可以通过创建自定义功能来实现所需的功能,这些功能被编写为提供期望的行为。这些自定义功能可能是为实现语言中存在的但已被禁用的op_code的功能而编写的,也可能是提供了脚本语言本身未提供的特定功能的″新″op_code。本发明中引用的操作码的示例包括:·op_ecpx,其返回椭圆曲线点的x坐标·op_add,其将堆栈中的顶部两项相加·op_bigmod,其将堆栈中的顶部两项相除后返回余数·op_bigmodadd,其对堆栈的顶部两项执行模数为堆栈的第三项的模数加法·op_bigmodinverse,其执行模数负指数运算·op_bigmodmul,其对堆栈的顶部两项执行模数为堆栈的第三项的模数乘法·op_cat,其将堆栈中的顶部两项连接在一起·op_checksig,其中根据sighash类型从堆栈中弹出公钥和签名,并根据交易字段的签名进行验证。如果签名有效,则返回1,否则返回0。·op_checksigverify,其功能与op_checksig相同,但之后执行op_verify·op_derencode,其以der格式对堆栈中的顶部两项进行编码·op_dup,其复制堆栈顶项·op_ecpmult,其对堆栈上的顶部两项执行椭圆曲线点乘法(也称为椭圆曲线标量乘法)·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,如果堆栈顶值不为假,则执行语句并删除堆栈顶值·op_mul,将堆栈中的顶部两项相乘·op_notif,如果堆栈顶值为假,则执行语句并删除堆栈顶值·op_roll,其中堆栈中深为n项的项移至顶部·op_substr,返回字符串的一部分·op_swap,其中交换堆栈中的顶部两项·op_toaltstack,其将输入放置在备用堆栈的顶部,并将其从主堆栈中删除·op_verify,如果堆栈顶值不为真,则将交易标记为无效在实施例中,可以使用操作码来创建ecds生成脚本,可以将其扩展以通过将sighash字节附加到末尾来创建签名生成脚本op_gensig。表1:在以上脚本中,将<sighash字节>、消息<m>、私钥<a>和数字<k>按上述顺序输入到主(后进先出)堆栈中。执行脚本操作″op_dupop_toaltstack<pubkg>op_ecpmult″会使得将数字<k>复制到备用堆栈,并且将<k>与椭圆曲线生成器<pubkg>相乘以在主堆栈的顶部产生椭圆曲线点k。执行脚本操作″op_ecpx<n>op_bigmodop_dupop_toaltstack″会使得根据模n的k的x坐标计算r。将r的副本压入备用堆栈。执行脚本操作″<n>op_bigmodmul<n>op_bigmodaddop_fromaltstackop_swapop_fromaltstack<n>op_bigmodinverse<n>op_bigmodmul″会根据=k-1(m+r×a)modn计算s。最后,执行脚本操作″op_derencodeop_swapop_cat″会使得以der格式对r和s进行编码,并与<sighash字节>连接在一起。在本发明中,此脚本被称为op_gensig。因此,在本发明的实施例中对op_gensig的引用应被视为以上脚本中执行的操作的简写。图3是示出通过本发明的实施例解决的与区块链交易相关联的问题的示例300。也就是说,在图3中示出的示例300的实施例中,先前交易302中的锁定脚本306不能直接读取解锁交易304的字段。如所提及的,在一些实施例中,先前交易302是包括在区块链中的最新的确认交易。同样,在一些实施例中,解锁交易304是尚未确认且尚未包括在区块链中的未来交易,表示试图重新关联由先前交易302控制的数字资产的至少一部分。如上所述,在一些实施例中,锁定脚本306是通过指定为了转移输出而需要符合的条件来留置交易的脚本。更具体地,执行锁定脚本306用于:由于由区块链系统的验证节点执行而从执行的解锁脚本接受数据,并基于所述数据执行某些操作,且返回解锁脚本的执行是否成功″解锁″(即,满足其中设置的条件集)锁定脚本的指示。在一些实施例中,锁定脚本306定义(例如,通过由解锁脚本提供的数据)必须满足以便成功验证交易的一个或多个数据约束。例如,锁定脚本306可以要求在解锁脚本中提供某些数据以解锁先前交易302的相关联数字资产。图4描绘了示例400,其示出本发明的与先前交易402的锁定脚本406不同的解锁脚本408有权访问一个实施例中的解锁交易404的字段(例如,根据sighash类型确定的解锁交易字段集)。在一些实施例中,先前交易402类似于图3的先前交易302。在一些实施例中,解锁交易404类似于解锁交易304。在一些实施例中,锁定脚本406具有与图3的锁定脚本306相似的特征。在一些实施例中,解锁脚本408是放置在交易的输入上的可执行脚本,其试图满足锁定脚本放置在交易的输出上的条件集。解锁脚本也称为″scriptsig″。如上所述,已将解锁脚本408设计为提供根据sighash类型确定的解锁交易字段集作为对锁定脚本的输入,从而使锁定脚本有权访问解锁交易的字段。关于序列化交易的内容和结构的更多细节可以在以下图5的描述中找到。注意,在实施例中,交易402和404包括附加字段。例如,在一些实施例中,″nversion″是指区块链协议版本,″#vin″是指交易的多个输入的计数,″hash″是指要重新关联数字资产的实体的支付给公钥的散列(pay-to-public-key-hash),″#vout″是指交易的多个输出的计数,″nvalue″是指剩余的未花费数字资产金额,并且″nlocktime″是指当交易完成时的时间戳。图5示出如何形成序列化交易字段集的示例500。如图5所示,序列化交易510(即,以特定格式的一系列字节表示的交易)包括交易的字段值集。在512,签名者选择sighash类型和数字k。数字k通常是随机数或伪随机数,以掩蔽/保护私钥,因此在本发明中有时被称为″掩码数″。交易的修改后的副本514是根据指定的sighash类型(例如,在示例500中为sighash_none+anyonecanpay)选择的序列化交易510的字段集的示例。签名者对交易的修改后的副本514进行散列处理(例如,执行双sha-256散列),从而生成消息m516。然后,签名者使用sighash类型、消息m、签名者的私钥以及数字k来创建签名,例如以上文结合图2所描述的方式。下表示出典型的解锁和解锁脚本的示例,其中,使用op_checksig操作码对照实体a的公钥来检查解锁脚本中指定的实体a的假定签名。表2:解锁脚本锁定脚本<siga><pubka>op_checksig因此,通过理解图5的签名生成,下表示出了在示例500中示出的过程的一部分被移至解锁脚本内的情况下,解锁和锁定脚本的示例。表3:解锁脚本可以进一步被修改为包括计算解锁脚本中的消息m的步骤。表4:然而,应注意,除了sighash类型和根据sighash类型确定的解锁交易字段集之外,过程的其它操作都可以移至锁定脚本。表5:因此,通过在锁定脚本内移动操作″op_hash256<a><k>op_gensig″,使解锁脚本包括sighash类型和根据sighash类型确定的解锁交易字段集,以便有效。以这种方式,使得序列化先前交易被注入锁定脚本中。下表示出了锁定和解锁脚本如何执行示例500的每个步骤过程并验证交易。表6:在本发明中,以上脚本可以被称为op_unlockingtxinjection。因此,在本发明的实施例中对op_unlockingtxinjection的引用应被视为以上脚本中执行的操作的简写。然而,应注意,提供sighash类型和根据sighash类型确定的解锁交易字段集的任何实体都可以接收交易输出。但是,这将成为有用的特征,如下文将更详细描述的。如上所述,在一些示例中,接收交易输出是指创建引用交易输出且将评估为有效因此接收交易输出的解锁交易。根据各种实施例,图6是示出根据实施例的使得注入根据sighash类型确定的解锁交易字段集的过程600的示例的流程图。过程600中的一些或全部(或所描述的任何其它过程,或这些过程的变化形式和/或组合)可以在配置有可执行指令和/或其它数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其它数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁、光或闪存介质上的计算机程序)。例如,过程600的一些或全部可以由例如图1的示例区块链网络100的区块链网络中的验证节点执行。此类验证节点可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。过程600包括一系列操作,其中执行过程600的系统结合图5中描述的方式执行未经验证的交易的解锁脚本和锁定脚本,因此获得sighash类型和交易字段值集、生成签名并验证签名。在602,系统从寻求重新关联数字资产的至少一部分的实体获得未经验证的交易。未经验证的交易包括锁定脚本和解锁脚本。在执行锁定脚本之前由系统执行解锁脚本。解锁脚本可以类似于以上表5和表6中所示的解锁脚本,并且指定sighash类型且包括未经验证的交易的序列化字段集。因此,在604和606,执行过程600的系统从解锁脚本获得sighash类型和未经验证的交易的序列化交易字段值集,并将它们放置在主堆栈中。成功完成解锁脚本的执行后,系统将使用在完成解锁脚本的执行时主堆栈的状态(在一些实现方式中为备用堆栈的状态)开始执行锁定脚本。锁定脚本可以类似于以上表5和表6中所示的锁定脚本。在608,根据锁定脚本,系统至少使用sighash类型和由于解锁脚本的执行而放置在主堆栈上的交易字段值集和与公钥-私钥对相关联的私钥来生成签名。在610,根据锁定脚本,系统针对密钥对的公钥成功验证签名。以这种方式,通过解锁脚本使交易字段集被注入锁定脚本中。应注意,取决于实施方案,可以以各种顺序和组合来执行操作602到610,并且一些操作可以与过程600的其它操作并行地执行。图7是示出通过本发明的实施例解决的与区块链交易相关联的问题的示例700。也就是说,在图7所示的示例700中,锁定脚本706不能读取其所嵌入的交易的输入,因此不能直接读取先前交易的字段。在一些实施例中,交易704类似于图3的解锁交易304,其表示试图重新关联由先前交易控制的数字资产的至少一部分。如上所述,在一些实施例中,类似于图3的锁定脚本306,锁定脚本706是通过指定为了转移输出而需要符合的条件来留置交易的脚本。图8示出通过提取交易id并执行约束检查来使解锁脚本808包括序列化先前交易的示例800。具体地,图8描绘了利用来自先前交易802a到802b的输出的具有解锁脚本808的解锁交易804。可以看出,解锁脚本808使序列化先前交易被检索。在一些示例中,序列化先前交易是指先前交易的字段值集的未修改版本。通过观察到交易id是序列化交易的双sha-256并且交易id与交易具有一对一的映射,可以理解图8所描绘的实施例。因此,通过应用下表7中所示的约束条件,可以使交易注入解锁脚本中。表7:解锁脚本锁定脚本<序列化交易>op_hash256<交易id>op_equal通过使得不仅注入任何序列化交易,而且通过使得注入在解锁交易804的输入中引用的一个或多个序列化先前交易(例如,先前交易802a到802b),本发明的实施例进一步改进了这种注入。如上文参考图7所描述的,可以由解锁脚本806使根据sighash类型确定的解锁交易字段集注入锁定脚本中,并且图9示出取决于指定的sighash类型在序列化交易中包括了哪些字段。图9示出取决于指定的sighash类型在序列化交易中可用的字段集的示例900。然而,应注意,图9旨在是示意性的,并且在各种实施例中,存在比图9中所描绘的更多的sighash类型。如图9所示,在具有不同sighash类型的情况下,在根据sighash类型确定的解锁交易字段集中包括不同的先前交易id集(应注意,″散列″字段以高位优先格式表示交易id)。在一些实施例中,嵌入锁定脚本的先前交易的交易id始终可用,而不管指定了哪种sighash类型。因此,可以使某些字段出现在通过按以下方式约束sighash类型而确定的解锁交易字段集中:首先,复制sighash类型。接着,将sighash类型压入堆栈中(例如sighash_all)。最后,调用op_equalverify。从图9中可以看出,sighash_all(如解锁交易904a所示)包括散列,所述散列,如所提及的,表示先前交易y和z的交易id。相比之下,sighash_all+anyonecanpay(如解锁交易904b所示)仅包括紧接在前的交易y的散列。在一些实施例中,解锁交易904a到904b类似于图3的解锁区块链交易204,其表示试图重新关联由先前交易(例如,交易y和/或x)控制的数字资产的至少一部分。可以通过使用子字符串操作码解析序列化交易直到达到期望的字段来完成提取交易id,如图10所示。图10示出在本发明的实施例中提取交易id的示例1000。具体地,图10示出由高位优先格式的交易id组成的散列1020是可以通过使用脚本内的子字符串操作码来提取的序列化交易1010的子字符串。在一些实施例中,在可提取交易id之前,首先解析序列化交易1010以确定散列1020的位置,因为一些字段(例如,#vin、scriptsiglen、scriptsig、scriptpubkeylen和scriptpubkey)具有可变字节长度。然而,设想在字段具有固定长度的实施方案中,解析可能不是必需的。因此,在一些实施例中,通过构建锁定脚本,使得以参考图6描述的方式注入在解锁交易中引用的特定序列化先前交易,可以使先前交易id可访问。例如,首先确定sighash类型约束,提取交易id,并且复制序列化先前交易,且对照从解锁交易序列化字段集(根据sighash类型)提取的交易id进行检查。应注意,可以执行此过程以使得注入多个不同的序列化先前交易。作为示例,表8提供了使得注入与解锁交易的输入x相对应的先前交易的脚本。表8:在以上脚本中,op_extractxid是将包括交易id和交易id位置的数据作为所提取的交易id的输入和输出的操作码/脚本。在本发明中,以上脚本可以被称为op_prevtxinjection。因此,在本发明的实施例中对op_prevtxinjection的引用应被视为以上脚本中执行的操作的简写。然而,应注意,提供sighash类型、根据sighash类型确定的解锁交易字段集以及序列化先前交易的任何实体都可以获取交易输出。但是,这将成为有用的特征,如下文将更详细描述的。作为另一个示例,表9提供了使得注入与被签名的输入相对应的先前交易的脚本。表9:在本发明中,与表8的脚本一样,表8中的上述脚本也可以被称为op_selftxinjection。因此,在本发明的实施例中对op_selftxinjection的引用应被视为以上脚本中执行的操作的简写。还应注意,提供sighash类型、根据sighash类型确定的解锁交易字段集以及序列化先前交易的任何实体都可以获取交易输出。但是,这将成为有用的特征,如下文将更详细描述的。如上所述,在一些示例中,获得交易输出是指创建引用交易输出的解锁交易并成功验证所述解锁交易。图11是示出根据各种实施例的使得注入序列化先前交易的过程1100的示例的流程图。过程1100中的一些或全部(或所描述的任何其它过程,或这些过程的变化形式和/或组合)可以在配置有可执行指令和/或其它数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其它数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁、光或闪存介质上的计算机程序)。例如,过程1100的一些或全部可以由例如图1的示例区块链网络100的区块链网络中的验证节点执行。此类验证节点可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。过程1100包括一系列操作,其中执行过程1100的系统结合执行未经验证的交易的解锁脚本和锁定脚本,且因此获得与从未经验证的交易中提取的交易id相对应的序列化先前交易。在1102,系统从寻求重新关联数字资产的至少一部分的实体获得未经验证的交易。未经验证的交易包括锁定脚本和解锁脚本。锁定脚本和解锁脚本可以类似于以上表8和表9中所示的锁定脚本和解锁脚本。也就是说,锁定脚本包括指令集,所述指令集用作例如通过解锁脚本存储在主堆栈和备用堆栈中的输入值。如果评估为真,则指令集的执行将成功验证未经验证的交易。因此,解锁脚本在锁定脚本之前执行,从而在主堆栈和备用堆栈中设置欲由锁定脚本使用的值。图11的实施例中的未经验证的交易的解锁脚本包括序列化先前交易、sighash类型和序列化解锁交易字段集。由于其后跟随有锁定脚本的解锁脚本的执行,在1104,系统获得序列化先前交易、sighash类型和包括在解锁脚本中的序列化解锁交易字段集。在1106,系统基于sighash生成基于未经验证的交易的序列化字段值集的签名。应注意,sighash类型会影响在签名生成中使用哪些字段,并且期望的sighash可以取决于所寻求的特定先前交易。例如,表8示出用于提取先前交易(但不一定是包括相同锁定脚本的先前交易)的锁定脚本和解锁脚本,此表使用sighash_all的sighash类型。如图9所示,sighash_all类型使得能够检索解锁交易的其它先前交易的输入。相比之下,表9示出用于提取具有相同锁定脚本的先前交易(即,先前交易与被签名的输入相对应)的锁定脚本和解锁脚本,此表使用sighash_all|anyonecanpay的sighash类型。如图9所示,sighash_all|anyonecanpay的sighash类型删除了除具有被签名输入的先前交易之外的其它先前交易的输入。在1108,系统验证先前生成的签名,然后在1110,通过对所获得的序列化先前交易执行双sha-256,产生应与解锁交易的交易id(即序列化字段值集)匹配的值。使用子字符串操作码,在1112,系统提取序列化字段值集的交易id,然后在1114,系统确定通过序列化先前交易的双sha-256产生的交易id是否与序列化字段值集的交易id匹配。应注意,在各种实施例中,匹配不一定需要相等。例如,如果两个值不相等,但在数学上等值,则这两个值可以匹配。作为另一示例,如果两个值对应于共同对象(例如,值)或以某种预定方式互补和/或它们满足一个或多个匹配标准,则这两个值可以匹配。通常,可以使用确定是否存在匹配的任何方式。还应注意,可以以各种顺序和组合(包括并行地)执行在1102到1114中执行的一个或多个操作。图12示出示例1200,所述示例示出了通过本发明的实施例解决的与锁定脚本相关联的问题。也就是说,图12中描绘的示例1200示出了通过向锁定脚本提供未确定数据而出现的问题。在一些示例中,术语″未确定数据″是指通过解锁脚本提供的数据,所述解锁脚本对锁定脚本进行解锁,其中执行锁定脚本的节点没有先前指示。在一些实施例中,先前交易1202类似于图3的先前交易302。同样,在一些实施例中,解锁交易1204类似于304。在一些实施例中,区块链1224由点对点的电子分类账中的交易区块集组成。在实施例中,区块链1224的每个区块包括先前区块的散列,使得区块被联接(即,″链接″)在一起以创建区块链中所有已验证交易的永久性不可变记录。在一些实施例中,未确定来源1222a可以是试图获得先前交易1202的utxo的实体。未确定来源1222b可以与未确定来源1222a相同或者可以是与未确定来源1222a不同的实体。在任一情况下,执行锁定脚本的节点在执行锁定脚本之前都不了解未确定来源1222a到1212b。在示例1200中,锁定脚本1206是空白的,从而允许其在不事先知道数据来源或数据将是什么的情况下接受数据。在(例如,通过未确定来源1222a)创建解锁交易1204时,确定数据(″<d>″)。然而,由于解锁交易1204容易被更改(也就是说,是可变的),例如在其在区块链1224上被确认之前(此时解锁交易1204变为不可变的)被未确定来源1222b更改,因此这种锁定脚本存在安全问题。图13示出示例1300,所述示例示出了在本发明的实施例中如何将来自确定来源的未确定数据安全地提供到锁定脚本1306中。也就是说,图13中描绘的示例1300示出在执行锁定脚本1306的节点具有将提供数据的来源(例如,确定来源1326)的先验知识而没有关于数据将是什么的先验知识的情况下出现的问题。在一些实施例中,先前交易1302类似于图3的先前交易302。同样,在一些实施例中,解锁交易1304类似于304。在一些实施例中,区块链1324类似于图12的区块链1224。在示例1300中,锁定脚本1306用于使得执行锁定脚本1306的验证节点检查在解锁脚本1308中提供的数据是否已经由确定数据来源提供。也就是说,通过以下方式对数据进行乘法运算,可以基于数据(d)修改私钥以产生修改后的私钥(a′):a′=a×d通过按以下方式执行椭圆曲线点乘法以产生修改后的公钥(a′),可以类似地修改与未修改的私钥相对应的公钥(a):a′=d×a因此,锁定脚本1306可以用于使验证节点评估使用私钥签署的签名,所述私钥是基于数据使用所述数据来源的公钥(a)修改的。更具体地,签名检查操作码可以包括在锁定脚本1306中,其检查使用修改后的私钥签署的签名(siga′)是否对应于修改后的公钥,且因此是有效签名。可以例如通过使用op_checksig操作码来执行所述检查。如在示例1300中可以看到,锁定脚本1306的执行使节点将公钥放置在堆栈中,并在公钥与通过解锁脚本1308的先前执行而放置在堆栈中的数据之间执行椭圆曲线点乘法运算(op_ecmult)。然后,可以在由锁定脚本中指定的来源(例如,确定来源1326)创建解锁交易时确定数据。因此,锁定脚本知道提供数据的来源,但不知道数据将是什么。锁定脚本1306的进一步执行使得针对使用修改后的私钥签署的数据(也通过解锁脚本1308的先前执行而放置在堆栈中)的签名验证结果(例如,如果值匹配,则op_checksig返回真)。此方法是安全的,因为对解锁交易1304的更改将使交易无效。然而,必须指定数据的来源(确定来源1326)。ecdsa中的签名验证算法涉及检查签名、公钥和消息是否具有特定的数学关系。消息可以是任何数据。在比特币中,验证操作码op_checksig通过将消息限制为序列化交易同时仍允许验证消息是否来自特定来源来防止任何任意数据成为消息。本发明的实施例提供对此限制的替代解决方案。在一些实施例中,未确定来源1322是不能更改数据的实体。在一些实施例中,确定来源1326是在生成锁定脚本1306时的已知实体,使得锁定脚本1306包括确定来源1326的公钥。图14示出示例1400,所述示例示出了可以如何将来自未确定来源的未确定数据安全地提供到锁定脚本1406中。具体地,图14描绘了解锁交易1404,其基于结合图11的过程1100描述的锁定脚本来执行锁定脚本。在一些实施例中,先前交易1402类似于图3的先前交易302。同样,在一些实施例中,解锁交易1404类似于304。在一些实施例中,区块链1424类似于图12的区块链1224。示例1400与图13的示例1300的不同之处在于,在创建锁定脚本1406时示例1400中的数据可以是未确定的。所讨论的数据将被嵌入先前交易1402中的某处,并且因此可以通过如上文相对于图8到11所描述的解析序列化先前交易来提取。以这种方式,执行锁定脚本1406的节点不需要具有提供序列化先前交易的实体的先验知识,也不需要节点具有先前交易1402的先验知识。此外,被提交给区块链1424的先前交易1402在创建解锁交易1404时已经是不可变的,因此免于更改而不会导致解锁交易1404无效。然而,尽管执行锁定脚本1406的节点不具有数据的先验知识,但是在创建先前交易1402时数据是确定的。在一些实施例中,锁定脚本1406是根据关于图11的过程1100所描述的脚本的脚本。在一些实施例中,解锁脚本1408类似于结合图8到11描述的解锁脚本。例如,如在示例1400中可以看到,解锁脚本1408包括至少一个序列化先前交易、sighash类型和解锁交易1404的序列化解锁交易字段集。未确定来源1422a是提供在序列化先前交易中编码的数据的实体。未确定来源1422b是试图拦截和更改解锁交易1404的实体。在一些实施例中,未确定来源1422a到1422b可以是相同或不同的实体。如在示例1400中可以看到,在创建锁定脚本1406时不需要知道未确定来源1422a的身份。此外,在创建锁定脚本1406时也不需要知道数据。但未确定来源1422b仍被阻止更改数据。在实施例中,除了由解锁交易1404执行的锁定脚本之外,可以使用先前交易1402的各个字段来存储安全的未确定数据,包括先前交易1402的输出中的数字资产的金额或在先前交易1402的另一个输出的锁定脚本中编码的元数据。因此,示例1400的实施例实际上允许任何实体将数据嵌入先前交易中,支付锁定脚本1406的某些变化,并确保没有其它实体可以修改所述数据。此特征在下文描述的其它实施例中适用。图15是示出根据各种实施例的安全地提供未确定数据的过程1500的示例的流程图。过程1500中的一些或全部(或所描述的任何其它过程,或这些过程的变化形式和/或组合)可以在配置有可执行指令和/或其它数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其它数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁、光或闪存介质上的计算机程序)。例如,过程1500的一些或全部可以由例如图1的示例区块链网络100的区块链网络中的验证节点执行。此类验证节点可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。过程1500包括一系列操作,其中接收未经验证的交易,由于解锁脚本的执行而获得未确定数据和第二值,并且将未确定数据验证为与可信数据来源相关联。在1502,系统从寻求重新关联数字资产的至少一部分的实体获得未经验证的交易。未经验证的交易包括锁定脚本和解锁脚本。锁定脚本和解锁脚本可以类似于图13和14中所示的锁定脚本和解锁脚本。如果评估为真,则指令集的执行将成功验证未经验证的交易。因此,解锁脚本在锁定脚本之前执行,从而在主堆栈和备用堆栈中设置欲由锁定脚本使用的值。在图13的实施例中,未经验证的交易的解锁脚本包括未确定数据(″<d>″)和使用修改后的私钥签名的未确定数据的签名(″<siga′>″),所述修改后的私钥是通过使用椭圆曲线点乘法将确定的数据来源(例如,″bob″)的私钥乘以未确定数据的值来修改的。因此,私钥将是椭圆曲线上的点。应注意,如上所述,术语″未确定″在此上下文中是指数据未指定或以其它方式由锁定脚本本身约束。以类似方式,″未确定数据来源″是其身份未由锁定脚本指定或约束的数据来源,而″确定数据来源″则在锁定脚本内约束身份为特定的数据来源(例如,通过包括数据来源的公钥)。图14的实施例中未经验证的交易的解锁脚本包括序列化先前交易的未确定数据、sighash类型和序列化解锁交易字段集。以这种方式,由于数据来源是序列化先前交易,因此不需要由锁定脚本本身指定或约束数据来源。由于其后跟随锁定脚本的解锁脚本的执行,在1504,系统获得未确定数据,以及可用于使用与数据相关联的已确定或未确定来源来验证数据的值(例如,使用修改后的私钥签署的签名,或可以从中提取交易标识符的序列化解锁交易字段集)。在1506,系统验证数据。例如,在图13的实施例中,系统通过使用椭圆曲线点乘法(如上所述)用数据修改公钥并验证修改后的公钥与使用对应私钥(所述私钥本身是使用椭圆曲线点乘法修改的)生成的签名相关联来确认数据与锁定脚本中包括的公钥相关联。作为另一个示例,在图14的实施例中,系统通过以图11的过程1100的方式确定序列化先前交易的散列是否与从序列化解锁交易字段集中提取的交易id匹配来验证数据对应于特定的先前交易。应注意,可以以各种顺序和组合(包括并行地)执行在1502到1506中执行的一个或多个操作。图16示出本发明实施例的示例可参数化智能合约1600。具体地,图16描绘了具有锁定脚本1606的先前交易1602,所述锁定脚本对解锁交易1604的解锁脚本1608施加约束。通过回顾本发明在图3到6的描述中已经描述了可以如何使根据sighash类型确定的解锁交易字段集注入锁定脚本1606中,可以理解图16中所描绘的实施例。进一步回顾图7到11的描述,本发明描述了在施加约束以使序列化先前交易被注入锁定脚本1606之前,可以如何使用子字符串操作码提取交易id来解析根据sighash类型确定的解锁交易字段集。此过程可以扩展为处理解锁交易字段集中的任何字段。应注意,在图6和11的上下文中描述的锁定脚本未对创建解锁交易的特定实体施加约束。例如,锁定脚本不需要证明特定实体是否有权访问秘密(例如,私钥,产生特定散列的值等)。图16的实施例将这个概念关于创建解锁交易的特定实体不加区别地应用,但是对如何声明utxo施加了某些约束。以这种方式,图16的实施例是自动执行的并且是自强制执行的。换句话说,如果不符合智能合约的条件(即不符合指定的约束条件),则合约将不会执行,因为验证将失败。在一些实施例中,可以通过对解锁交易1604的输入(例如,要求来自″alice″的输入)施加约束(例如,参数)来使锁定脚本中的智能合约能够交互。因为解锁脚本1608是锁定脚本1606的输入来源,所以在实施例中,可以使用解锁脚本1608中的安全的未确定数据来对锁定脚本1606中的智能合约进行参数化。在实施例中,以结合图13到15描述的方式对未确定的且安全的数据进行参数化能保护智能合约以防更改。在实施例中,参数化数据是未确定的。本发明描述了两种用于向锁定脚本(例如,智能合约)提供安全的未确定数据的方法。第一方法是可以从确定来源获得安全的未确定数据,如在图13和15的上下文中所描述的。第二方法是可以从未确定来源(例如,先前交易)获得安全的未确定数据,如在图14到15的上下文中所描述的。在使用第一方法的实施例中,参数将由创建解锁交易的实体确定,并且将在创建解锁交易时进行设置(例如,在解锁脚本1608中)。在使用第二方法的实施例中,参数将由创建先前交易的实体确定,并且将在创建先前交易时设置(即,嵌入序列化先前交易中)。还应注意,在实施例中,可以组合第一方法和第二方法,使得一个或多个参数可以嵌入先前交易中,并且一个或多个其它参数可以嵌入解锁交易的解锁脚本中。提供以下示例以说明可以如何使用这些方法创建智能合约。在示例中,为alice创建或由alice创建智能合约,将其收入的70%转至她的储蓄,并将其收入的30%转至她的投资经理bob。她的储蓄账户与加密公钥a(pubka)相关联,而她与bob的账户与加密公钥b(pubkb)相关联。alice的雇主实施了这份智能合约,此合约在发薪日以上述方式分配alice的收入。因此,alice的收入会按照她想要的方式自动分开。在所述示例中,参数是由于智能合约的执行而转移的数字资产的金额。智能合约的执行将使得在根据上述标准确定对解锁交易1604的输出的约束之前,从先前交易1602中提取参数。表10提供了实施以上示例的示例解锁和锁定脚本:表10:图17是示出根据各种实施例的实现参数化智能合约的过程1700的示例的流程图。过程1700中的一些或全部(或所描述的任何其它过程,或这些过程的变化形式和/或组合)可以在配置有可执行指令和/或其它数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其它数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁、光或闪存介质上的计算机程序)。例如,过程1700的一些或全部可以由例如图1的示例区块链网络100的区块链网络中的验证节点执行。此类验证节点可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。过程1700包括一系列操作,其中从嵌入安全的未确定数据中的参数中提取约束。在1702,系统执行脚本,所述脚本使得注入序列化先前交易(例如,图16的先前交易1602的序列化字段值)、sighash类型,以及根据sighash类型确定的解锁交易字段集(例如,解锁交易1604的字段值)。脚本可以是来自表8或9的脚本的变化形式。应注意,对于图16和17的可参数化智能合约,可能不需要完整地参考图11的过程1100,因为如果不需要来自未确定来源的参数,则可不需要序列化先前交易。在1704,系统以取决于参数来源是未确定来源还是确定来源的方式提取参数。例如,可以通过以结合图13描述的方式从解锁脚本1608中提取参数来执行从确定来源的数据提取参数。作为另一示例,可以通过以结合图14描述的方式从序列化先前交易中提取参数来执行从未确定来源的数据提取参数。作为又一示例,如果一些参数嵌入未确定来源的数据中并且一些参数从确定来源接收到,则可以编写脚本以组合图13和14的操作,从来自未确定来源和确定来源两者的数据中提取参数。在1706,系统从参数导出约束。例如,在表10的示例脚本中,参数是支付给智能合约的金额,导出约束包括确定要转付至alice和bob的支付给公钥的(pay-to-public-key,简称″p2pk″)地址的金额(例如70%和30%)。然而,预期参数和可从参数导出的约束可以是众多的,变化超出上述示例。在1708,系统对照根据sighash类型确定的解锁交易字段值集来验证约束。也就是说,系统验证解锁交易的相关子集符合约束。如果解锁交易的相关子集符合约束,则确认解锁交易有效;否则,如果解锁交易的相关子集不符合约束,则认为解锁交易无效。应注意,可以以各种顺序和组合(包括并行地)执行在1702到1708中执行的一个或多个操作。图18示出通过本发明的实施例解决的与重复智能合约相关联的问题的示例1800。也就是说,为了创建重复已知次数(例如五次)的交易,可以提前创建已知数量的解锁交易。尽管这对于少数交易而言是可管理的,但是对于具有许多重复交易的合约,提前生成所有解锁交易1804a到1804n可能变得很麻烦并且脚本1806a到1806n可能变得非常多。在示例中,alice具有一定金额的数字资产(例如,比特币),其价值可以交换为商品或服务。alice已将这笔款项分配给她的儿子bob用来支付每天的学校午餐。图18的示例1800示出alice可以提前为bob的各个午餐交易创建解锁交易1804a到1804n。然而,如图19所示,本发明设想alice可用的替代解决方案。图19示出本发明的实施例的自复制智能合约的示例1900。如图19中所示,不是创建预定的一定数量的解锁交易来获得重复合约,而是可以基于结合图16到17描述的可参数化智能合约来创建具有终止条件的自复制智能合约1904。以这种方式,在以上示例中,alice只需要创建一个解锁交易即可消耗先前交易1902中的数字资产的初始金额。解锁交易1904a包括使得解锁交易1904a将自身复制到下一解锁交易的脚本。所述脚本包括终止条件,所述终止条件使得在满足所述终止条件之后(例如,在n次出现之后)解锁交易1904n停止复制。在一个可能的实现方式中,为了创建合约的交易链,提前创建未来交易,并且每个交易的锁定脚本将后续交易的锁定脚本嵌入,如图20所示。然而,对于自复制解锁交易,为了验证解锁交易的约束未修改,每个先前交易的锁定脚本(例如,智能合约)将需要安全地验证其是否与解锁交易中的锁定脚本匹配。图20示出通过本发明的实施例解决的重复交易的问题的示例2000。也就是说,先前交易2002的锁定脚本(锁定脚本0)合并了第一解锁交易2004a的锁定脚本(锁定脚本1),而第一解锁交易2004a的锁定脚本本身又合并了第二解锁交易2004b的锁定脚本(锁定脚本2),依此类推,直到最后的解锁交易2004n。如果完全展开,很明显锁定脚本0与锁定脚本1不同,锁定脚本1与锁定脚本2不同,依此类推。因此,示例2000不能说是自复制的,因为锁定脚本不同。这个问题可以理解为源于自引用的问题。也就是说,锁定脚本将需要嵌入其自身的副本,从而成为无休止且无法解开的循环。因此,锁定脚本将不可确定。示例2000固定了循环可以解开的次数(n),然后将值分配给第n个锁定脚本,第n个锁定脚本又允许第n-1个锁定脚本将第n个锁定脚本嵌入,第n-1个锁定脚本又允许第n-2个锁定脚本将第n-1个锁定脚本嵌入,依此类推。但是,这将形成n个不同的锁定脚本。图21示出针对自复制交易的简单实现方式的问题的解决方案的示例2100。具体地,图21描绘了复制智能合约,所述智能合约每次将发送给自身的数字资产金额减少一个单位,并且还向alice支付1个单位的数字资产。也就是说,先前交易2102保持初始金额x。第一解锁交易2104a将1个单位的数字资产支付至属于alice的支付给公钥的散列(pay-to-public-key-hash,简称″p2pkh″)地址,输出新的总计(x′=x-1)并且将其自身复制到第二解锁交易2104b。在一些示例中,p2pk或p2pkh可以用作将数字资产直接转移到与相应公钥相关联的实体的地址。第二解锁交易2104b同样将1个单位的数字资产支付至alice,输出新的总计(x″=x′-1)并且同样复制自身。因此,可以看出,随着过程继续进行而与初始金额x无关,最终将生成解锁交易以输出不可兑换金额的数字资产(例如零)。通过观察到每个后续解锁交易将比其先前交易拥有更少金额的数字资产,即使不扣除各种区块链协议中扣除的最低交易费用,也可以直观地理解这一点。因此,输出金额将收敛为零,这时处理交易变得毫无意义。然而,本发明的实施例包括通过实现终止条件以避免这种不可兑换的解锁交易来针对此问题的解决方案。此外,在实施例中,图20中所示的问题的解决方案将使锁定脚本1接收均嵌入锁定脚本的第一数据(例如,解锁交易数据)和第二数据(例如,先前交易数据)。在这些实施例中,锁定脚本1验证来自第一数据和第二数据的锁定脚本是否匹配。然后,如果锁定脚本1验证第二数据(先前交易数据)嵌入了锁定脚本1,则验证第一数据也嵌入了锁定脚本1。下表11中提供了此类脚本的基本概述:表11:从以上脚本可以看出,已针对第一解锁交易2104a的锁定脚本验证了先前交易2102的锁定脚本,所述先前交易2102的锁定脚本是当前正在运行的将要解锁utxo的锁定脚本,所述第一解锁交易将在未来在当前解锁交易是另一解锁交易(例如,第二解锁交易2104b)的先前交易时兑换。因此,如图18和20所示,不是为每个交易创建不同的解锁交易,而是脚本促使每个锁定脚本必须相同。如果先前交易2102的锁定脚本与第二解锁交易2104b将尝试解锁的(例如,第一解锁交易2104a)锁定脚本相同,则确保锁定脚本是真实的。在实施例中,终止条件避免了先前交易没有足够资金但是锁定脚本仍然验证的情况;即不可兑换的交易。例如,可以实施终止条件以验证是否有足够的数字资产来执行下一交易,否则终止验证。作为更具体的示例,如果初始池包括365单位的数字资产加上每笔交易费用所需的金额(例如,足以一年中每天进行一次交易),则终止条件可以验证剩余的单位数量超过完成交易所需;例如,只要有足够的资金,就可以继续验证交易。否则,如果资金不足,则满足终止条件并且终止验证。因此,如果在第366天资金不足,则确认不需要第366次解锁交易的锁定脚本,并且终止条件确保其终止锁定脚本的自复制。图22是示出根据各种实施例的具有终止条件的自复制智能合约的过程2200的示例的流程图。过程2200中的一些或全部(或所描述的任何其它过程,或这些过程的变化形式和/或组合)可以在配置有可执行指令和/或其它数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其它数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁、光或闪存介质上的计算机程序)。例如,过程2200的一些或全部可以由例如图1的示例区块链网络100的区块链网络中的验证节点执行。此类验证节点可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。过程2200包括一系列操作,其中如果不符合终止条件,则验证解锁交易和先前交易的锁定脚本是相同的,并且验证其它约束。在2202,系统接收未经验证的交易。系统通过运行未经验证的交易的解锁脚本开始,然后开始执行与未经验证的交易所引用的数字资产相关联的先前(已验证的)交易的锁定脚本。将过程2200描绘为执行表11的示例脚本的变化形式。例如,在2204,执行过程2200的系统确定是否满足终止条件。如上所述,在实现方式中,如果数字资产的金额不足以完成交易,则可以满足终止条件。然而,预期其它终止条件也是可能的。例如,终止条件可以是基于时间的;如果未经验证的交易在特定日期之前未得到验证,则可以满足终止条件。在满足终止条件时,在2206,过程2200终止并且结束验证。否则,在2208,系统从未经验证的交易中提取第一锁定脚本。应注意,第一锁定脚本是在当前未经验证的交易被验证之后将执行的锁定脚本,此时另一未经验证的交易尝试转移当前交易的utxo。在2210,系统从序列化先前交易中提取第二锁定脚本。在此实施例中,第二锁定脚本是当前正在执行的锁定脚本的副本。在2212,执行过程2200的系统确定第一锁定脚本是否与第二锁定脚本匹配(例如,两个锁定脚本是否相同)。如果锁定脚本不匹配,则在2214,系统确定未经验证的交易未能通过验证并保持未经验证。否则,在2216,系统验证脚本中的任何剩余约束(例如,验证数字签名或先前交易的其它要求)。如果没有剩余约束,或者如果所有剩余约束都已成功验证,则交易成功验证。成功验证后,可以将交易添加到区块链。应注意,可以以各种顺序和组合(包括并行地)执行在2202到2216中执行的一个或多个操作。图23示出通过本发明的实施例解决的问题的示例2300。具体地,图23描绘了使用区块链交易从第一状态转换到第二状态的状态机。在一些示例中,状态机的状态转换被解释为在给定当前状态、一个或多个输入2326以及状态规则集2306的情况下确定下一状态。图23的示例2300示出具有状态规则集2306和嵌入参数中的第一状态2328a的先前交易2302。在一些实施例中,创建解锁交易2304以接受来自确定来源的输入2326。输入2326与第一状态2328a结合可用于参考状态规则集2306确定嵌入解锁交易2304的参数中的第二状态2328b。在实施例中,状态规则集是状态转换矩阵,其可以结合图16和17描述的方式由对解锁交易2304的约束来表示。在此类实施例中,通过当前状态和从其确定下一状态的输入对约束进行参数化。约束包括检查以确保解锁交易2304在特定字段中包括下一状态值。在实施例中,当前状态被表示为嵌入交易中的参数,并且解锁交易2304将具有也嵌入解锁交易2304中的下一状态值。下一状态值是在解锁交易2304的字段值集内相对于智能合约的当前状态,如上所述,当创建解锁交易2304时可访问所述字段值集。在一些实施例中,在创建解锁交易2304时确定的参数中提供至少一个输入作为外部数据。为了安全起见,此类参数来自确定来源。这提供了确定性的状态转换。最后,通过采用上文结合图18到22描述的自复制智能合约的脚本,可以创建不可信任的确定性状态机实施例。在一些示例中,″不可信任″是指只要符合约束条件,任何实体都可以创建有效的解锁交易的属性;然而,在一些情况下,实体可能需要与确定来源进行交互以获得所需的输入。应注意,尽管结合图23到25描述的各种实施例是指从确定来源获得输入,但设想在一些实施例中,可以从未确定来源(例如从序列化先前交易)中获得一个或多个输入。图24示出本发明的实施例的不可信任的确定性状态机的示例2400。如图24所示,示例2400可以包括在状态规则集2406中的第一状态2428a(″s1″)处的先前交易2402。在示例2400中,状态规则集2406提供下一状态的两个可能的状态2430a(″s2″或″s3″)。如在示例2400中可以看到,解锁交易2404采用其解锁脚本中的输入2426和嵌入先前交易2402的字段值集中的第一状态2428a(″s1″)作为输入,根据状态规则集2406确定适当的第二状态2428b(″s2″)。如在示例2400中进一步看到,状态转换矩阵现在提供了对于从第二状态2428b的下一状态转换可能的新状态2430b(″s4″或″s5″)。注意,状态规则集2406可以被编码为由当前状态和一个或多个输入参数化的切换语句或其它条件语句(例如,″如果-则-否则(if-then-else)″)。在实施例中,在自复制锁定脚本中,在状态改变的规则集(例如状态转换矩阵)中表示每个可能的状态,并且特定交易表示处于特定状态的状态机。在此类实施例中,交易的锁定脚本被复制到试图将对数字资产的控制转移到下一交易的每个解锁交易,所述下一交易必须链接到当前交易。重复此过程,直到满足终止条件为止。因为输入不是固定的并且可以是未确定数据,所以可以基于特定的外部输入来改变状态机的状态。因此,未确定数据提供了可能影响下一状态的输入。在说明性示例中,alice借给bob一些钱,bob同意偿还alice。如本发明中所描述的,不可信任的确定性状态机可以实现为智能合约,以表示bob向alice进行的转账。例如,可以构建智能合约,以便bob在接下来的三个月中每月向alice付款,如果过期未付款,则bob的债务将进入收债阶段。因此,只要bob每月进行一次转账,当前状态就保持在还款状态。然而,外部实体会提供指示bob过期未转账的输入,然后状态转移到过期未转账状态。在过期未转账状态下,alice可以释放交易并将其移交给收债员,随后,不可信任的确定性状态机切换到收债状态。在收债状态下,收债员将向bob收债。可以使用图23到25中描绘的实施例的脚本的变化形式来创建此类智能合约。在另一个示例中,alice是一个非常慈善的人,她每个月都会捐赠1个单位的数字资产。她的规则是任何人都可以申领数字资产,但每月只能申领1个单位。alice以本发明中描述的方式创建智能合约,并用数字资产的3个单位的初始池播种。alice可以构建允许任何实体每月收取1个单位的数字资产的脚本。数字资产的剩余部分将复制到后续的智能合约。下表示出了实现本发明的不可信任的确定性状态机的解锁和锁定脚本的示例。表12:图25是示出根据各种实施例的用于不可信任的确定性状态机的过程2500的示例的流程图。过程2500中的一些或全部(或所描述的任何其它过程,或这些过程的变化形式和/或组合)可以在配置有可执行指令和/或其它数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其它数据可以存储在非暂时性计算机可读存储介质上(例如,永久存储在磁、光或闪存介质上的计算机程序)。例如,过程2500的一些或全部可以由例如图1的示例区块链网络100的区块链网络中的验证节点执行。此类验证节点可以由任何合适的计算装置(例如,由数据中心中的服务器、由客户端计算装置、由计算资源服务提供商的分布式系统中的多个计算装置、或由例如图26的计算装置2600等任何合适的电子客户端装置)组成。过程2500包括一系列操作,其中验证自复制智能合约的锁定脚本,从序列化先前交易获得当前状态,从解锁脚本获得输入,并且至少部分地基于状态规则集确定下一状态。过程2500反映了表12所见的示例脚本的变化形式。在2502,系统接收解锁交易。系统通过运行解锁交易的解锁脚本开始,这会使序列化先前交易和嵌入锁定脚本中的输入被放入堆栈中。在2512检索这些输入。在2504,执行过程2500的系统确定是否满足终止条件。终止条件可以是如结合图19到22所描述的终止条件。在实施例中,终止条件是在满足时使状态机转换结束的条件。如果满足终止条件,则执行过程2500的系统进行到2506,之后不可信任的确定性状态机停止自复制。在2508中,系统以图22的2212中描述的方式验证先前交易锁定脚本与解锁交易锁定脚本是否匹配。如果锁定脚本不匹配,则验证失败,并且未验证解锁交易。否则,如果锁定脚本匹配,则在2510,系统从序列化先前交易中提取可能状态集的当前状态。在2512,由于锁定脚本的执行,系统获得放置在堆栈中的一个或多个输入。然后,在2514,系统应用状态规则集,以基于当前状态和一个或多个输入来确定不可信任的确定性状态机的可能状态集的下一状态。在2516,系统验证下一状态(例如,状态变量和其它与状态有关的数据,如果适用的话)被嵌入解锁交易中。系统还可以应用锁定脚本中指定的任何剩余约束。在成功完成2502到2516的操作后,过程以2500结束,之后执行所述过程的系统可以将解锁交易视为有效。应注意,可以以各种顺序和组合(包括并行地)执行在2502到2518中执行的一个或多个操作。应注意,在描述所公开的实施例的上下文中,除非另有说明,否则使用关于执行″指令″通常不独立执行(例如,传输数据、计算等)的操作的可执行指令(也称为代码、应用程序、代理等)的表述表示机器正在执行指令,从而使机器执行指定的操作。图26是可以用于实践本发明的至少一个实施例的计算装置2600的示意性简化框图。在各种实施例中,计算装置2600可以用于实现以上示出和描述的任何系统。例如,计算装置2600可以配置成用作数据服务器、网络服务器、便携式计算装置、个人计算机或任何电子计算装置。如图26所示,计算装置2600可以包括一个或多个处理器2602,其可以配置成通过总线子系统2604与多个外围子系统通信并且可操作地连接到多个外围子系统。处理器2602可以用于遍历本发明的实施例中在监督模型的随机森林中的决策树(例如,使得对各种搜索项的反向文档频率的评估等)。这些外围子系统可以包括存储子系统2606,所述存储子系统包括存储器子系统2608和文件/磁盘存储子系统2610、一个或多个用户界面输入装置2612、一个或多个用户界面输出装置2614以及网络接口子系统2616。此类存储子系统2606可以用于信息的临时或长期存储,例如与本发明中描述的交易相关联的细节、本发明中描述的历史记录的数据库以及本发明中监督模型的决策规则的存储。总线子系统2604可以提供用于使计算装置2600的各个组件和子系统能够按预期彼此通信的机制。尽管总线子系统2604被示意性地示出为单个总线,但是总线子系统的替代实施例可以利用多个总线。网络接口子系统2616可以提供到其它计算装置和网络的接口。网络接口子系统2616可以用作用于计算装置2600从其它系统接收数据以及向其它系统传输数据的接口。例如,网络接口子系统2616可以使数据技术人员能够将装置连接到无线网络,使得数据技术人员当在远程位置(例如用户数据中心)时能够传输和接收数据。总线子系统2604可以用于将例如细节、搜索项等的数据传达到本发明的监督模型,并且可以用于将监督模型的输出通过网络接口子系统2616传达到一个或多个处理器2602并传达到商户和/或债权人。用户界面输入装置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的端口进行传输以用于处理。由于计算机和网络的不断变化的性质,因此图26中描绘的计算装置2600的描述是为了说明装置的优选实施例的特定示例。具有比图26中描绘的系统更多或更少组件的许多其它配置是可能的。因此,说明书和附图应被认为是说明性的而不是限制性的。然而,显而易见的是,在不脱离如权利要求中所阐述的本发明的范围的情况下,可以对其进行各种修改和改变。同样,其它变化形式也在本发明的范围内。因此,尽管所公开的技术易于进行各种修改和替换构造,但是其某些图示的实施例在附图中示出并且已在上文详细描述。然而,应了解,无意将本发明限制于所公开的特定形式,相反,其目的是涵盖落入如所附权利要求中所限定的本发明范围内的所有修改、替代构造和等效物。除非本文另有说明或与上下文明显矛盾,否则在描述本公开的内容中(尤其在所附权利要求书的内容中)使用术语″a″和“an”和″the(所述)″以及类似指示物应理解为涵盖单数以及复数。除非另有指出,否则术语″包括(comprising)″、″具有(having)″、″包括(including)″和″包含(containing)应理解为开放式术语(即,意指″包括但不限于″)。术语″连接(connected)″,当未经修改且指物理连接时,应被解释为部分或全部包括在内、附接或接合在一起,即使存在某些干预。除非另外指示,否则本公开中值范围的列举仅旨在用作分别指代落入所述范围内的每个单独值的速记方法,并且每个单独值都并入说明书中,如同单独地列举一般。除非另有说明或与上下文相矛盾,否则术语″集(set)″(例如,″项目集(asetofitems)″)或″子集(subset)″的使用应被解释为包括一个或多个组成部分的非空集合。此外,除非另有说明或与上下文相矛盾,否则术语对应集的″子集(subset)″不一定表示对应集的适当子集,而是子集和对应集可以相同。除非另有明确说明或上下文明显矛盾,否则连接语言,例如″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,compries)″等不排除任何权利要求或整个说明书中列出的元件或步骤之外的元件或步骤的存在。在本说明书中,″包括(comprises)″意味着″包括(includes)或由...组成(consistsof)″,并且″包括(comprising)″意味着″包括(including)或由...组成(consistingof)″。对元件的单数引用并不排除对此类元件的复数引用,且反之亦然。本发明可以通过包括几个不同元件的硬件以及通过适当编程的计算机来实现。在列出若干构件的装置权利要求项中,可以通过硬件中的同一个物件实施若干这些构件。在彼此不同的附属权利要求项中叙述某些措施这一单纯事实并不指示不能使用这些措施的组合来获得效果。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1