区块链中的随机数生成的制作方法

文档序号:20361856发布日期:2020-04-10 23:44阅读:241来源:国知局
区块链中的随机数生成的制作方法

本发明总体上涉及分布式账本技术,包括区块链交易,并且更具体地,涉及区块链脚本内的安全随机数生成。本发明还利用加密和数学技术来增强与通过区块链网络进行的电子转移有关的安全性。本发明特别适合于但不限于在智能合约中使用。



背景技术:

在本文中,术语“区块链(blockchain)”可指几种类型的电子的、基于计算机的分布式账本(distributedledgers)中的任何一种。这些包括基于共识的区块链和交易链技术、许可及未许可的账本、共享账本及其变型。虽然也已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币账本(bitcoinledger)。虽然出于方便和说明的目的,“比特币”的示例可称为本发明中所描述技术的有用应用,但是比特币仅是本发明中所描述技术可以应用的众多应用中的一个。但是,应当注意的是,本发明不限于与比特币区块链一起使用;可选的区块链实现和协议,包括非商业应用,也落入本发明的范围内。例如,本发明中所描述的技术将为使用区块链实现提供优势,该区块链实现在关于何种约束可以在交易中编码方面具有类似于比特币的限制,无论是否发生加密货币的交换。

区块链是点对点(peer-to-peer)电子账本,其被实现为基于计算机的、去中心化的分布式系统,该系统由区块组成,区块又可以由交易和其他信息组成。在一些示例中,“区块链交易”是指对包括数据和一组条件的字段值的结构化集合进行编码的输入消息,其中这组条件的满足是将字段集写入区块链数据结构的先决条件。例如,就比特币而言,每个交易是对区块链系统中参与者之间数字资产的控制的转移进行编码的数据结构,并且该数据结构包括至少一个输入和至少一个输出。

在一些实施例中,“数字资产”是指与使用权相关联的二进制数据。数字资产的示例包括比特币和其他加密货币。在一些实施例中,例如使用的是比特币,数字资产是未通证化的,因此,例如,在区块链中没有标识数字资产的标识符,而是通过生成记录在区块链的有效交易的能力来证明对数字资产的控制。但是请注意,一些区块链实现可能使用通证化的数字资产从而,例如,可以使用记录在区块链上的信息来明确识别数字资产。尽管在一些实施例中,数字资产可以用作加密货币,但可预期的是,在实施例中,数字资产可以附加地或替代地在其他环境中使用。注意,本发明虽然适用于对数字资产的控制,但是本质上是技术性的,并且可以在使用区块链数据结构的其他环境中运用,而不必涉及数字资产转移。如本发明中使用的“数字资产”可以指一个或多个数字资产。例如,交易可能有多个输入,这些输入中的每一个都可以代表不同的数字资产。在此示例中,控制被转移的数字资产可以是多个数字资产的集合,该集合本身是数字资产。类似地,交易可以细分和/或组合这些多个输入以产生一个或多个输出从而,例如,输入的数量和输出的数量可能不同。

在一些实施方式中,可以通过将数字资产的至少一部分从第一实体重新关联到第二实体来执行数字资产的控制转移。每个区块都包含前一区块的散列,以便将区块链接在一起,以创建一个永久的、不可更改的所有交易的记录,这些交易自区块链诞生之始写入区块链。交易包含被称为脚本的小程序,它们被嵌入至交易的输入和输出中,这些脚本指定了如何以及由谁来访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。

在一些示例中,“基于堆栈的脚本语言”是指支持各种基于堆栈或面向堆栈的执行模型和操作的编程语言。也就是说,基于堆栈的脚本语言可以使用称为堆栈的数据结构。使用堆栈,可以将值压入堆栈顶部或从堆栈顶部弹出。对堆栈执行的各种操作可能导致从堆栈顶部压入或弹出一个或多个值。例如,op_equal操作从堆栈中弹出前两项,将这两项进行比较,并将结果(例如,如果相等则为1,如果不相等则为0)压入到堆栈顶部。在一些实施例所采用的某些脚本语言中,可以有至少两个堆栈:主堆栈(mainstack)和备用堆栈(alternatestack)。脚本语言的一些操作可以将项从一个堆栈的顶部移动到另一个堆栈的顶部。例如,op_toaltstack将值从主堆栈的顶部移动到备用堆栈的顶部。使用基于堆栈的脚本语言编写的脚本可被压入逻辑堆栈,该逻辑堆栈可以使用任何适当的数据结构(例如向量、列表或堆栈)来实现。

为了将交易写入区块链,必须对该交易进行“验证”。网络节点(挖矿节点)执行工作以确保每个交易有效,无效交易被网络拒绝。节点可以具有不同于其他节点的有效性标准。因为区块链的有效性是基于共识的,所以如果大多数节点同意交易有效,则该交易被视为有效。安装在节点上的软件客户端部分地通过执行未花费的交易输出(unspenttransactionoutput,简称utxo)锁定和解锁脚本,对引用utxo的交易执行此验证工作。如果锁定和解锁脚本的执行评估为真(true),并且满足其他验证条件(如果适用的话),则由节点验证交易。经验证的交易被传播到其他网络节点,随后挖矿节点可以选择将该交易包括在区块链中。因此,为了将交易写入区块链,该交易必须i)由接收交易的第一节点进行验证(即,如果交易得到验证,则该节点将该交易中继到网络中的其他节点);ii)添加到挖矿节点创建的新区块中;iii)被挖矿(即添加到过去交易的公共账本中)。当充分数量的区块被添加到区块链以使交易实际上不可逆时,该交易被视为已确认。

当前研究的一个领域是使用区块链来实现“智能合约(smartcontracts)”。智能合约是旨在自动执行机器可读合约或协议的条款的计算机程序。与用自然语言编写的传统合约不同,智能合约是机器可执行程序,其包含可以处理输入以产生结果的规则,然后可以根据这些结果执行操作。

在实施例中,虽然与特定实体的交互可以在智能合约的特定步骤中进行编码,但是智能合约可以自动执行和自我执行。在一些示例中,自动执行是指智能合约的成功执行,执行智能合约是为了实现utxo的转移。注意,在这类示例中,能够导致utxo的转移的“实体”是指能够创建解锁脚本而无需证明对某些秘密的已知的实体。换句话说,可以验证解锁交易,而无需验证数据源可以访问加密秘密(例如,私有非对称密钥、对称密钥等)。此外,在这类示例中,自我执行是指区块链网络的验证节点根据约束来执行解锁交易。在一些示例中,“解锁”utxo是指创建引用utxo并作为有效执行的解锁交易。解锁utxo在本领域中也可以称为花费utxo。

区块链交易输出包括锁定脚本和有关数字资产(诸如比特币)所有权的信息。锁定脚本(也可以称为负载(encumbrance))通过指定解锁utxo所需满足的条件来“锁定”数字资产。例如,锁定脚本可能要求在解锁脚本中提供某些数据来解锁相关联的数字资产。锁定脚本在比特币中也被称为“脚本公钥(scriptpubkey)”。要求一方提供数据来解锁数字资产的技术涉及在锁定脚本中嵌入数据的散列。但是,如果在创建锁定脚本时数据是未确定的(例如,未知的和不固定的),则会出现问题。



技术实现要素:

因此,期望提供在一个或多个这些方面改进区块链技术的方法和系统。因此,根据本发明,提供了如所附权利要求中定义的方法和相应的系统。

因此,期望提供一种用于区块链网络的节点的计算机实现的方法,所述计算机实现的方法包括:

验证第三交易,所述第三交易在第三锁定脚本中包括第一难题和第二难题,其中:

在第一交易中,所述第一难题被包括在第一锁定脚本中,所述第一锁定脚本使用第一条件锁定对第一数字资产的控制的转移,所述第一条件可通过第一难题的解来满足;

在第二交易中,所述第二难题被包括在第二锁定脚本中,所述第二锁定脚本使用第二条件锁定对第二数字资产的控制的转移,所述第二条件可通过第二难题的解来满足;

所述第一交易和所述第二交易被提交给区块链;和

所述第三交易与第三数字资产相关联;

至少部分地基于所述第一难题的解和所述第二难题的解生成伪随机数;和

至少部分地基于所述伪随机数转移对所述第三数字资产的控制。

所述第一交易可以由第一方创建,并且所述第二交易可以由不同于所述第一方的第二方创建。这样,在第一方或第二方中的至少一方保持诚实的条件下(例如,不试图破坏伪随机数生成器),从第一难题的解和第二难题的解导出的种子可能是不可确定的。

所述第一方可以在所述第一交易创建之前访问所述第一难题的解。附加地或替代地,所述第二方可以在所述第二交易创建之前访问第二难题的解。这样,双方不需要花费太多的计算资源,因为他们已经知道其各自难题的解。

所述第一锁定脚本可以包括时间约束。附加地或替代地,在满足所述时间约束的条件下,包括所述第一难题的解的交易的验证可以使得对所述第一数字资产的控制转移到第一实体。附加地或替代地,在未满足所述时间约束的条件下,惩罚交易的验证可以使得对所述第一数字资产的控制转移到不同于所述第一实体的第二实体。

所述时间约束可以是在超过时限之前揭示所述第一难题的解。这样,第一实体有理由在时间约束内提供第一难题的解,否则会有将数字资产损失给第二实体的风险。

验证伪随机数生成交易可以在满足所述第一条件和所述第二条件之前执行。因此,伪随机数生成交易可以在解被公布之前提交给区块链,从而确保伪随机数生成交易不会被知道第一难题和第二难题的解的实体操纵。

所述第一难题可以是加密散列难题。

所述第一难题可以是所述第一交易的锁定脚本中的操作码集合。附加地或替代地,作为接收所述第一难题的解作为输入的结果,所述操作码集合的执行可以评估为真。

解决所述第一难题和所述第二难题可能比验证所述第一难题的解和所述第二难题的解在计算上更加困难。

生成所述伪随机数可以包括至少部分地基于所述第一难题的解和所述第二难题的解导出种子值。

可以验证种子交易,所述种子交易包括所述第一难题的解和所述第二难题的解。这样,在第一方或第二方中的至少一方保持诚实的条件下(例如,不试图破坏伪随机数生成器),种子可能是不可确定的。

转移对所述第三数字资产的控制可以包括:在所述伪随机数是第一值的条件下,所述种子交易的验证可能成功。附加地或替代地,在所述伪随机数是不同于所述第一值的第二值的条件下,所述种子交易的验证可能不成功。这样,在伪随机数生成器的锁定脚本中施加的约束可能受到伪随机数的影响。

可以验证退款交易,所述退款交易将对所述第三数字资产的控制返还给创建所述第三交易的实体。

验证退款交易可以在特定时间段内没有发生所述种子交易的成功验证的条件下发生,所述种子交易包含所述第一难题的解和所述第二难题的解。这样,在第三交易的utxo保持未转移的情况下(例如,在一定时间之后),创建第三交易的实体无需遭受数字资产的损失。

还期望提供一种系统,包括:处理器;和包括可执行指令的存储器,所述可执行指令作为所述处理器执行的结果使得系统执行所要求保护的任何一种方法。

还期望提供一种非暂时性计算机可读存储介质,其上存储有可执行指令,所述可执行指令作为计算机系统的一个或多个处理器执行的结果,使得所述计算机系统至少执行所要求保护的任何一种方法。

因此,还期望提供一种计算机实现的方法,包括:

在区块链网络中的节点处验证包括难题的第一交易,所述第一交易与数字资产相关联,所述难题的解在所述第一交易验证时是不可确定的;

至少部分地通过验证第二交易来生成伪随机数,所述第二交易被创建以转移对与所述第一交易相关联的所述数字资产的控制,所述伪随机数至少部分地基于包括在所述第二交易中的难题的解;和

至少部分地基于所述伪随机数转移对所述数字资产的控制。

所述难题可以是加密散列难题。

所述难题可以是工作量证明函数。

所述难题可以是所述第一交易的锁定脚本中的操作码集合。附加地或替代地,作为接收所述难题的解作为输入的结果,所述操作码集合的执行评估为真。

解决所述难题可能比验证所述解在计算上更加困难。

转移对所述数字资产的控制可以包括:在所述伪随机数是第一值的条件下,所述第二交易的验证可能成功。附加地或替代地,在所述伪随机数是不同于所述第一值的第二值的条件下,所述第二交易的验证不成功。这样,在伪随机数生成器的锁定脚本中施加的约束可能受到伪随机数的影响。

所述解可以至少部分地用于在所述第一交易的所述锁定脚本中导出伪随机数生成算法的种子。

所述锁定脚本可以将所述第二交易的验证约束到特定时间帧。这样,各方可以在特定时间帧内具备解决所述难题的理由。

所述特定时间帧的到期可以使得指定方能够接收对所述数字资产的控制。

所述指定方可以是创建所述第一交易的一方。这样,指定方可以在难题未解决的情况下(例如,在特定时间段之后)收回数字资产。

用于解决所述难题的分配(例如奖励)可以大于(例如价值更大)所述数字资产。这样,更大的分配可以为各方解决难题提供理由;数字资产的分配比例越大,理由就越多。在某些情况下,分配的大小可能受到限制,以便最小化各方试图欺骗(例如,破坏伪随机数生成交易和/或解)的风险。

所述解可以至少部分地从所述区块链网络中的区块的头部导出。

在所述第一交易被成功验证时,所述头部可能是不可确定的。例如,所述头部可以是所述区块链网络中特定时间时或之后的未来区块的头部。这样,因为在创建第一交易时,未来头部可能是不可确定的,所以可以保证解在特定时间之前是未知的。

还期望提供一种系统,包括:处理器;和包括可执行指令的存储器,所述可执行指令作为所述处理器执行的结果,使得所述系统执行所要求保护的任何一种方法。

还期望提供一种非暂时性计算机可读存储介质,其上存储有可执行指令,所述可执行指令作为计算机系统的处理器执行的结果,使得所述计算机系统至少执行所要求保护的任何一种方法。

本发明可以被描述为验证方法/系统,和/或用于控制区块链交易的验证的控制方法/系统。在一些实施例中,经验证的区块链交易导致该交易记录在区块链上;在一些应用中,这可能导致数字资产通过区块链交换或转移。数字资产是由区块链管理的资源的单位。尽管在一些实施例中,数字资产可以被用作加密货币,但是可以预期的是,在实施例中,数字资产可以附加地或替代地在其他环境中使用。注意,本发明虽然适用于对数字资产的控制,但本质上是技术性的,并且可以在利用区块链数据结构的其他情况下使用,而不必涉及数字资产的转移。如下所述,本发明还可以被描述为通过区块链网络或平台执行操作的新的、改进的和有利的方式的安全方法/系统。

附图说明

参考本文描述的实施例,本发明的这些和其他方面将变得显而易见并得以阐明。现在将仅通过示例并参考附图来描述本发明的实施例,其中:

图1示出了可以实现各种实施例的区块链环境;

图2示出了根据实施例的区块链随机化的示例;

图3示出了说明由实施例来解决的不安全随机化的问题的示例;

图4示出了根据实施例的用于生成种子的部分的承诺解的示例;

图5示出了根据实施例的承诺解惩罚的示例;

图6示出了根据实施例的实现种子交易以解锁伪随机数生成交易的示例;

图7示出了根据实施例的由于时限到期而退还数字资产的示例;

图8示出了根据实施例的承诺解的示例的流程图;

图9示出了根据实施例的用于生成种子的难题解技术的示例;

图10示出了根据实施例的难题解技术的示例的流程图;

图11示出了根据实施例的随机化智能合约约束的示例;和

图12示出了可以实现各种实施例的计算环境。

具体实施方式

首先将参考图1,图1示出了根据本发明实施例的与区块链相关联的示例性区块链网络100。在该实施例中,示例区块链网络100包括被实现为点对点分布式电子设备的区块链节点,每个节点运行软件和/或硬件的实例,该实例执行遵循区块链协议的操作,该协议至少部分地在节点102的运营商之间达成一致。在一些示例中,“节点”是指分布在区块链网络中的点对点电子设备。区块链协议的示例是比特币协议。

在一些实施例中,节点102可以由任何合适的计算设备(例如,由数据中心中的服务器、由客户端计算设备(例如,台式电脑、笔记本电脑、平板电脑、智能手机等)、由计算资源服务提供商的分布式系统中的多个计算设备或者由诸如图12的计算设备1200的任何合适的电子客户端设备)组成。在一些实施例中,节点102具有输入,以接收代表所提议的交易(诸如交易104)的数据消息或对象。在一些实施例中,节点对于其所维护的信息(如交易104的状态信息)是可查询的。

如图1所示,一些节点102通信地耦接到一个或多个其他节点102。这种通信耦接可以包括有线或无线通信中的一个或多个。在该实施例中,节点102各自维护区块链中所有交易的“账本”的至少一部分。这样,账本就是分布式账本。由影响账本的节点处理的交易可由一个或多个其他节点验证,从而维护账本的完整性。

至于哪些节点102可以与哪些其他节点通信,假设消息是区块链协议指示应该被转发的消息,那么示例性区块链网络100中的每个节点能够与一个或多个其他节点102通信就足够了,这样在节点之间传递的消息可以在示例性区块链网络100(或其某个重要部分)中传播。一个这样的消息可能是由节点102之一(如节点102a)发布提议的交易,然后该消息将沿着诸如路径106的路径传播。另一个这样的信息可能是发布新区块,该新区块被提议包含到区块链中。

在实施例中,至少一些节点102是执行复杂计算(诸如解决加密问题)的挖矿节点。解决加密问题的挖矿节点为区块链创建新区块,并将该新区块广播到其他的节点102。其他的节点102验证挖掘节点的工作,并且在验证后,将该区块接收到区块链中(例如,通过将其添加到区块链的分布式账本中)。在一些示例中,区块是一组交易,通常标记的有前一区块的时间戳和“指纹”(例如,散列)。这样,每个区块可以链接到前一区块,从而创建在区块链中链接区块的“链(chain)”。在实施例中,通过节点102的共识将有效区块添加到区块链。同样在一些示例中,区块链包括已验证区块的列表。

在实施例中,如本发明中所描述的,至少一些节点102用作验证交易的验证节点。在一些示例中,交易包括提供数字资产(例如,若干比特币)所有权的证明的数据,以及接受或转移数字资产所有权/控制的条件。在一些示例中,“解锁交易”是指将由前一交易的utxo指示的数字资产的至少一部分重新关联(例如,转移所有权或控制)到与区块链地址相关联的实体的区块链交易。在一些示例中,“前一交易(previoustransaction)”是指包含由解锁交易所引用的utxo的区块链交易。在一些实施例中,交易包括“锁定脚本”,该“锁定脚本”使用在所有权/控制可以被转移(“解锁”)之前必须满足的条件来锁定(encumber)交易。

在一些实施例中,区块链地址是字母数字字符串,其与将数字资产的至少一部分的控制转移/重新关联到的实体相关联。在一些实施例中实现的一些区块链协议中,与该实体相关联的公钥和区块链地址之间存在一对一的对应。在一些实施例中,交易的验证涉及验证锁定脚本和/或解锁脚本中指定的一个或多个条件。在成功验证交易104后,验证节点将交易104添加到区块链并将其分配到节点102。

本发明的某些实施例是在下述的假设下操作的,即脚本系统或用于实现所描述的指令集合的其他系统允许单个脚本中超过200条指令(例如操作码)。同样,本发明某些实施例进一步假设:

·本发明所引用的操作码提供的功能,在执行操作码脚本/指令集合的系统中是存在并启的;和/或

·可以通过创建自定义函数来实现所需的功能,这些自定义函数被编写以提供所需的行为。编写这些自定义函数以实现该语言中存在但已被禁用的操作码的功能,或者可以是实现提供脚本语言本身没有提供的特定功能的“新”操作码的功能。

本发明中引用的操作码的示例包括:

·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,结束if/else区块

·op_equal,如果输入完全相等,则返回1,否则返回0

·op_equalverify,与op_equal相同,但随后运行op_verify

·op_fromaltstack,将输入放在主堆栈的顶部,并将其从备用堆栈中移除

·op_hash256,其中输入被散列两次:首先使用sha-256,然后使用ripemd-160

·op_if,如果顶部堆栈值不为假(false),则执行语句并移除顶部堆栈值

·op_mul,将堆栈中的前两项相乘

·op_notif,如果顶部堆栈值为假,则执行语句并移除顶部堆栈值op_roll,其中堆栈中深度为n项的项被移动到顶部

·op_substr,返回字符串的一部分

·op_swap,其中堆栈中的前两项被交换

·op_toaltstack,将输入放在备用堆栈的顶部,并将其从主堆栈中移除

·op_verify,如果顶部堆栈值不为真(true),则将交易标记为无效

图2是示出本发明实施例的示例200。如图2所示,该示例包括具有锁定脚本210的伪随机数生成器(pseudorandomnumbergenerator,简称prng)交易202,该锁定脚本210包括prng,该prng基于作为种子交易204的解锁脚本212的执行结果接收到的种子值来生成随机数,该种子交易204试图解锁prng交易202的utxo。

在一些实施例中,prng交易202是在锁定脚本210中包含prng的区块链交易。在一些实施例中,prng也称为确定性随机比特生成器(deterministicrandombitgenerator,简称drbg),指的是生成数字序列的算法,该数字序列的属性近似于随机数序列的属性。prng有别于真随机数生成器,因为序列依赖于初始种子值。在一些实施例中,具有相同种子值的prng将复制相同的序列。在一些实施例中,prng在锁定脚本210中被编码为操作码序列,作为执行的结果,该操作码序列产生统计上的随机(例如,不包含可识别的模式或规律)值。prng将值作为输入,作为初始化prng的种子。

在一些实施例中,锁定脚本210是使用要满足的条件(例如,通过解锁脚本212提供的数据)锁定prng交易202的脚本,以便成功验证prng交易202,并且可以转移与prng交易202相关联的数字资产的控制/所有权。例如,锁定脚本210可以要求在解锁脚本212中提供某些数据,以便解锁prng交易202的相关数字资产。更具体地,由区块链系统(诸如结合图1描述的区块链网络)中的验证节点执行锁定脚本210,使得锁定脚本210从已执行的解锁脚本(例如解锁脚本212)接收数据,基于该数据执行某些操作,并返回指示锁定脚本210是否已经成功“解锁”(即,满足锁定脚本210中设置的条件集合)的结果。在本发明中,锁定脚本210还包括如上所述的prng,其包括作为接收种子作为prng的输入(例如,作为种子交易204的解锁脚本212的执行的结果)的条件。在一些实施例中,锁定脚本被编码为使用由prng生成的随机数来在锁定脚本210的约束中使用。

在一些实施例中,种子交易204是区块链交易,其在解锁脚本212中至少包含在prng交易202的锁定脚本210中可由prng使用的种子值。在一些实施例中,解锁脚本212是种子交易204的可执行脚本,其试图满足放在prng交易202的锁定脚本210上的条件集合。本发明的操作原理是种子值在创建锁定脚本210时是不可确定的,因此,由prng基于种子值生成的值在创建锁定脚本210时同样是不可确定的。本发明描述了满足这些条件的实施例。

图3示出了由本发明的实施例解决的不安全随机性问题的示例300。也就是说,在图2所示的示例200中,prng306被包括在第一交易302的锁定脚本310中,并且prng306的种子308通过第二交易304的解锁脚本312来提供,第二交易304被创建以解锁/赎回与第一交易302相关联的数字资产(诸如比特币)。

在一些实施例中,第一交易302和第二交易304是代表区块链网络中数字资产转移的字段值集合。在一些实施例中,字段值集合可以包括输入和输出。在一些实施例中,输入表示试图解锁前一区块链交易的输出。在一些实施例中,在成功验证交易后,验证节点将交易添加到区块链,并使其被分配到区块链的其他节点。

在一些实施例中,第二交易304是被创建以将第一交易302的数字资产的至少一部分(例如,如utxo所示)重新关联(例如,转移所有权或控制)到特定实体的区块链交易。在一些实施例中,第一交易302包括锁定脚本310,锁定脚本310使用在所有权/控制可以被转移之前必须满足的条件(“解锁”)来锁定第一交易302。在一些实施例中,区块链地址是字母数字字符串,其与数字资产的至少一部分的控制被转移/重新关联到的实体相关联。在一些实施例中实现的一些区块链协议中,与实体相关联的公钥和区块链地址之间存在一对一的对应。在一些实施例中,交易的验证涉及通过连续执行解锁脚本312和锁定脚本310来验证锁定脚本310中指定的一个或多个条件。

如上所述,在一些实施例中,prng306是伪随机数生成器,其生成属性近似于随机数序列属性的数字序列。在一些示例中,prng306是加密安全的伪随机数生成器(cryptographicallysecurepseudorandomnumbergenerator,简称csprng),也称为加密伪随机数生成器(cryptographicpseudorandomnumbergenerator,简称cprng)。在一些实施例中,prng306可以是根据上述假设(包括但不限于yarrow、fortuna和arc4random算法)在锁定脚本中被编码的任何伪随机数生成器。

在一些实施例中,锁定脚本310是通过指定需要满足的条件(即“解锁”)来锁定区块链交易的脚本,以便转移对与交易相关联的数字资产的至少一部分的控制。更具体地,执行锁定脚本310被用于(作为由区块链系统的验证节点执行的结果)从已执行的解锁脚本(例如,解锁脚本312)接受数据,并基于该数据执行某些操作,并且返回指示解锁脚本的执行是否成功“解锁”锁定脚本310的结果,其中“解锁”即满足在锁定脚本310中设置的条件集合。在一些实施例中,锁定脚本310定义一个或多个必须满足的数据约束(例如,通过解锁脚本提供的数据)以便成功验证交易。例如,锁定脚本310可能要求在解锁脚本312中提供某些数据,以便解锁与第一交易302相关联的相关数字资产。

在一些实施例中,种子308是用于初始化伪随机数生成器(诸如prng306)的数字或向量。然而,由于种子308决定了由prng306产生的伪随机数,由图3可以看出,向prng306提供种子308的实体314可以操纵prng306的输出。但是,本发明提出了两种解决方案作为种子操纵的防御措施。第一个解决方案是承诺解(commitmentsolution),其中种子是两个或多个难题解的组合,每个难题解被单独的一方所知。然而,在创建prng交易之前,每一方将一定数量的数字资产提交给难题交易,这可以通过在解交易中揭示难题的解来恢复。在承诺解的一些实施例中,未能揭示难题解将导致违约方所提交的数字资产被揭示其难题解的一方或多方没收。在其中一些实施例中,每个难题解必须在一定时间段内被揭示,否则该方将被视为违反其承诺。这样,每一方都可以有理由促成prng的种子。有了承诺解,生成难题交易的每一方都被允许提前知道难题的相应解。在难题解技术中,种子是难题交易的解。在创建难题时,解是未知的,但是解决难题的一方可以收集与难题交易相关联的数字资产的分配。

在一些示例中,“难题(puzzle)”指的是使用脚本语言中的一个或多个操作码的逻辑表达式集合,如果以特定的数字“解(solution)”作为输入,则该逻辑表达式集合作为执行的结果评估为真。难题可能具有各种难度,这可能会影响解决难题所需的时间。难题还可以具有这样的特征,即获得解(即,解决难题)比验证解是正确的在计算上更加困难。难题的一个示例是加密散列难题,其中,难题是找到一个数字,若将其与指定数字组合(例如,相加、相乘、附加等),然后通过给定的加密散列算法(例如,sha256、md5、blake、blake2等)进行处理,产生包含特定数字(例如,五个前导零,“1234处等)的值。在一些示例中,加密散列难题是使用加密散列算法创建或解决的问题,例如,由包括至少一个加密散列算法和条件集合的函数定义的问题,并且该难题的解是函数的输入集合,该函数产生满足条件集合的输出。

注意,在实施例中,使用加密散列函数或单向函数h(x)=y来生成散列,其中对于给定x而言,容易计算出y,但是对于给定y而言,计算出x在计算上是困难的。在某些情况下,解可以是一方的数字签名或其他数据,如果通过解锁脚本将其作为输入提供给持有难题的锁定脚本,则其作为解锁脚本和锁定脚本执行的结果导致锁定脚本评估为真。

在一些示例中,计算难度指的是计算复杂性理论领域中的复杂性类别。例如,使用默克尔签名方案对消息进行数字签名可能涉及作为生成正确解的一部分执行2r加密散列操作,其中r是所生成的默克尔树(merkletree)的深度。相反地,验证用于生成数字签名的签名密钥是默克尔树的叶节点可能涉及执行r加密散列操作,以验证从叶节点(对应于签名密钥)到根节点的认证。可以看出,执行2r加密散列操作比执行r加密散列操作在计算上更加困难(例如,花费更多的中央处理单元周期,使用更多的内存/存储空间等)。作为第二个示例,系统可以生成两个质数,并提供质数的乘积作为难题,其解是分解所提供的乘积。

应当注意的是,短语“单向函数”包括在严格的数学意义上不一定是单向的函数,但是其表现出使得该函数在应用本发明的各种技术的环境中有用的特性(例如抗碰撞性、抗原像攻击和抗第二原像攻击)。这样,具有函数的输出但不能访问相应输入的实体若没有,例如,加密(例如,蛮力)攻击所需的计算资源的大量消耗,可能无法确定输入。单向函数(也称为“有效单向函数(effectivelyone-wayfunctions)”)包括,但不限于,加密散列函数(诸如消息认证码(例如基于散列的消息认证码(hmac))、密钥导出函数(诸如pbkdf2和bcrypt(例如,其密码至少部分基于明文和加密密钥))以及其他安全随机化函数,这些函数可以但不一定具有大于其范围(可能的输出)的域(可能的输入集合)。可以使用单向函数加密地导出值。从缺少用作加密函数输入的信息(例如,加密密钥和/或盐(salt))的实体的角度来看,加密函数可以是单向函数(或者可以是单向函数的组成部分)。在一些示例中,“加密地导出”指的是使用单向函数至少一次,使用值或从值导出(可能加密地从值导出)的输入。例如,加密操作是对没有解密密钥的实体的“单向”操作。

图4示出了本发明的示例实施例400。具体地,图4描述了用于种子生成的承诺解的第一阶段。示例实施例400中描述的承诺解涉及至少两方406a-06b来提供解408a-08b,解408a-08b可以被组合以导出prng的种子。承诺解提供的优势在于,因为解408a-08b被组合在一起,所以需要各方的同意来操纵种子;也就是说,只要一方提供了另一方事先不知道的解,那么最终的种子在生成之前将是未知的。

在承诺解中,各方406a-06b(p∈{0,1,…,n})各自创建单独的承诺交易402a-02b,其中难题410a-10b作为约束被包括在交易各自的锁定脚本中。在一些实施例中,每个承诺交易都与包含约束(δp←verify(puzzlep,πp))的锁定脚本所锁定的一定数量的数字资产(例如xp)相关联,其中πp是对一方p的难题所提出的解。在一些实施例中,该约束也是有时限的,这意味着该方必须在特定的时间段内揭示该解,否则所提交的数字资产有被没收的风险。在一些实施例中,数字资产从该方自己的储备中提交。在其他实施例中,数字资产作为潜在分配由第三方(例如试图从由各方406a-06b确定的种子生成随机数的一方)提供。在一些实施例中,通过来自prng交易(诸如图6的prng交易610)的创建者,或者来自对创建伪随机数生成的种子感兴趣的某些其他实体的分配的承诺,向各方406a-06b提供参与种子的创建的理由。

在承诺交易402a-02b被挖矿到区块链之后,各方406a-06b中的每一方(p)可以通过利用解锁脚本创建解交易来揭示承诺交易难题(πp←puzzlesolutionp)的解,从而解锁其各自承诺交易的utxo,该解锁脚本解锁相应承诺交易的锁定脚本。从示例实施例400中可以看出,解交易404a-04b包括对其相应的难题410a-10b的解408a-08b。因此,解交易404a-04b的验证允许各方406a-06b恢复各自承诺交易402a-02b的utxo。

在一些实施例中,承诺交易402a-02b是区块链交易,类似于图3的第一交易302,其具有由相应方406a-06b提交的数字资产。在一些实施例中,解交易404a-04b是区块链交易,类似于图3的第二交易304,由各方406a-06b创建,以“解锁”各自承诺交易的utxo,以便赎回提交的数字资产。

在一些实施例中,各方406a-06b是已经同意为prng(例如图6的时限约束610中的prng)提供种子生成中使用的难题410a-10b和解408a-08b的实体。难题410a-10b不必复杂。例如,一方406可以知道字母“以知的加密散列的结果,并且可以创建难题410a来加密地对输入散列,并且将加密地散列输入与字母“入与的已知加密散列进行比较。如果散列的输入匹配已知散列结果,则输入是难题410a的正确解。在这种情况下,解是字母“字母,第一方406a知道该字母并且该字母可以作为第一解408a输入解交易404a的解锁脚本。但是,检查锁定脚本中的加密散列的其他方不太可能直接认识到该解是字母“字母。尽管在示例400中仅描绘了两方,但是可以设想的是,只要至少有两方,那么任何数量的方都可以参与提供难题和解。

在一些实施例中,解408a-08b(类似于图6的解608)是可以被组合以导出到prng(例如时限约束610中的prng)的种子的值。单独地,解408a-08b中的每一个都是值,如果将其作为输入通过解交易404a-04b的解锁脚本提供给包含难题410a-10b的承诺交易402a-02b的锁定脚本,则会导致相应的解锁和锁定脚本的执行评估为真。向prng提供种子会导致prng的执行生成随机数,该随机数可以在智能合约中以各种方式使用,其中的一些示例在下面表2和表3中示出。在一些实施例中,当相关联的承诺交易被创建时,各方406a-06b中的至少一个知道或以其他方式可以访问其各自难题的解。在其他实施例中,当其相关联的承诺交易402a-02b被创建时,所有的方407a-06b都知道或以其他方式可以访问其各自的难题410a-10b的解。

可以通过提交值(例如xp)和prng交易值(例如,图6和7中的y)之间的差异来提示各方406a-06b揭示其各自的难题解408a-08b。例如,如果xp>>y,则各方406a-06b将有充分的理由揭示其解408a-08b,因为他们面临着损失远远超过强制执行退款交易(例如图7的退款交易704)所导致的潜在收益的风险。

在一些实施例中,难题410a-10b是包括操作序列的算法,诸如在一个或多个输入上执行的脚本语言的操作码序列,其返回真或假的指示。例如,如果解404a是难题410a的有效解,则承诺交易402a的锁定脚本中难题410的执行可以评估为真(假设承诺交易402a中存在的任何其他约束也被满足)。但是,如果针对难题410a提出的解是无效解,则承诺交易402a的锁定脚本中难题410a的执行评估为假。

图5示出了未能在特定时间帧内为承诺交易提供有效解的后果的示例500。具体地,图5描绘了第一方506a在时限516(tc)期满之前未能给第一承诺交易502a中的难题510a(σa)提供解的情况。另一方面,第二方506b确实为其在时限516内由第二方502b创建的承诺交易502b中相应的难题510b(σb)提供了解508(πb)。因此,作为惩罚交易504a的验证的结果,第二方506b能够要求由第一方提交的数字资产(xa)的所有权。

在一些实施例中,承诺交易502a-02b类似于图4的承诺交易402a-02b。同样,在一些实施例中,难题510a-10b类似于难题410a-10b。在一些实施例中,解交易504类似于图4的解交易404b。同样,在一些实施例中,解508类似于图4的解508b。在一些实施例中,各方506a-06b是类似于图4的各方406a-06b的实体。

在一些实施例中,惩罚交易514是区块链交易,其可以在承诺交易502a的utxo在时限516之后保持未被转移的条件下被验证,以解锁承诺交易502a的utxo。因为第一方506a已经将数字资产的某一部分提交给承诺交易506a,所以惩罚交易514的存在是为了防止第一方506a未能揭示难题510a的解,因为如果第一方506a未能揭示其解,那么已经进行承诺交易的一个或多个其他方(例如第二方506b)可以要求第一方506a已经提交给第一承诺交易502a的任何数字资产。这样,双方506a-06b均可承诺揭示其各自难题510a-10b的解,否则双方506a-06b都面临丢失其提交的数字资产的风险。此外,由于另一方未能揭示其解的可能性,各方506a-06b具有进一步的理由来揭示其各自难题510a-10b的解,从而允许未违约方不仅可以收回他们自己提交的数字资产,而且可以奖励其违约方所提交的数字资产的至少一部分。这是示例500中所示的情况,其中第二方506b从揭示解508中获利,并且从惩罚交易514接收分配。

在一些实施例中,时限516是在承诺交易502a的锁定脚本中强制执行的截止期限。也就是说,在一些实施例中,承诺交易502a-02b的锁定脚本用于将被允许解锁承诺交易502a-02b的utxo的实体限制为仅是各自承诺交易的创建者,直到被编码到锁定脚本中的时限516到期。然而,在一些实施例中,锁定脚本可以用于在时限516到期后,允许一个或多个其他方(诸如第二方506b)要求承诺交易的utxo,并且不允许承诺交易502a的创建者要求承诺交易502a的utxo。在一些实施例中,承诺交易502a-02b必须在其锁定脚本中包括时限516,以便被验证。这样,惩罚交易514可以用作惩罚,以使当事方506a-06b具备提供其难题510a-10b及时解的理由。

图6示出了本发明的另一示例实施例600。具体地,图6描绘了用于种子生成的承诺解中的第二阶段,该阶段可以与图4的示例实施例400并行发生。也就是说,在承诺交易402a-02b被挖矿到区块链之后,prng交易602由试图对数字资产y的控制的转移施加随机约束的实体创建。因此,prng交易602的锁定脚本被包含prng和时限约束610σall←∧σp的锁定脚本和代码所锁定,以将种子交易604的解锁脚本中的难题解{πa,…,πb}组合成解π,其中锁定脚本(例如,π←combine({πa,…,πn}))中的prng的种子可以从该解π中被导出。也就是说,在某些情况下,该解π本身可以被用作种子,而在其他情况下,该解π可以被散列或以其他方式操纵成可被prng用作种子的值。时限约束610可以以多种方式被约束。例如,在prng交易602的锁定脚本中可以有一个或多个操作码,其在执行时根据指定的期满时间检查当前时间。

在示例实施例600中,种子交易604是为解锁prng交易602的utxo而创建的区块链交易。在一些实施例中,为了阻止对prng的操纵,在承诺交易(例如,图4的承诺交易402a-02b)被提交给区块链之后但在解交易(例如,解交易404a-04b)创建之前创建prng交易602。在一些实施例中,种子交易604在所有难题的解(例如解408a-08b)已经提交给区块链或者以其他方式对种子交易604的创建者可用之后被创建。在一些实施例中,种子交易604在其解锁脚本中包括各种难题的解608(π),例如图4的难题410a-10b的解408a-08b。

在一些实施例中,解608中的每个解被单独列出,并且通过prng交易602的锁定脚本的执行被组合。在其他实施例中,每个解608在种子交易604的解锁脚本中以prng交易602的锁定脚本所支持的方式组合在一起。如果种子交易604的解锁脚本中提供了所有的解408a-08b,则prng交易602的锁定脚本可以评估为真。替代地,在一些实施例中,如果在时限期满之前未提供解408a-08b,则如图7所示,数字资产y被退款。

在一个示例中,实体让一组当事方创建类似于图4的承诺交易402a-02b的承诺交易。然后,该实体使用结合到时限约束610中的难题410a-10b创建prng交易602。也就是说,在图4的示例性实施例400的简化的两方示例中,如果第一方406a在创建prng交易602之前揭示第一解608a,那么已经知道第二解408b并且刚知道第一解408a的第二方406b可以可能地确定prng交易602的锁定脚本中的prng的结果。因此,为了保护prng结果的不可预测性,解408a-08b不应在创建prng交易602之前被揭示。

在一些实施例中,实体还可以为承诺交易401a-02b中的每一个创建惩罚交易,类似于图5的惩罚交易514。此外,在一些实施例中,实体可以附加地或替代地创建退款交易(类似于图7的退款交易704),以确保实体在没有提供一个或多个解408a-08b的情况下不会没收数字资产y。

图7示出了一方未能在特定时间帧内为承诺交易提供有效解的另一后果的示例700。具体地,图7描绘了一方未能提供δall中的其中一个难题的解的情形,例如在图5中描绘的情形。因此,在时间716tc+δt之后,与prng交易702相关联的数字资产y可以通过退款交易704被赎回。

在一些实施例中,prng交易702类似于图6的prng交易602。如示例700所示,在一些实施例中,prng交易702被编码为在承诺交易期满(tc)之后的某个时间(δt)到期,以阻止一方等到prng交易702即将期满之前才揭示其解,因为这样做会损害及时创建种子交易(例如种子交易604)以解锁prng交易702的utxo的能力。

在一些实施例中,退款交易704是区块链交易,其被创建以在数字资产y在时间716t+δt之后仍然无人认领的情况下(例如通过验证包含难题解710的种子交易),偿还/收回与prng交易702相关联的数字资产。在示例中,退款交易704由prng交易702的创建者创建,以确保如果未找到难题710的解,则创建者能够取回数字资产y。然而,在一些示例中,prng交易702的创建者和退款交易704的创建者不必是同一方。在一些实施例中,时间716是为prng交易702提供解所允许的时间量设置的时限。

图8是示出根据本发明的承诺解的各种实施例的用于生成随机数的过程800的示例的流程图。过程800的一些或全部(或所描述的任何其他过程,或这些过程的变化和/或组合)可以在配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可以存储在非暂时性计算机可读存储介质(例如,永久存储在磁、光或闪存介质上的计算机程序)上。

例如,过程800的一些或全部可以由一个或多个计算设备(例如,由数据中心中的服务器、由客户端计算设备、由计算资源服务提供商的分布式系统中的多个计算设备或者由诸如图12的计算设备1200的任何合适的电子客户端设备)来执行。过程800包括一系列操作,其中两个难题被集成到prng交易的锁定脚本中,难题的解在prng交易被提交给区块链之后被集成到种子交易的解锁脚本中,prng交易的锁定脚本中的prng基于使用从解导出的种子来执行,从而产生伪随机数,并且基于所产生的伪随机数来施加约束。

在802中,获得一个或多个难题(诸如图4的难题410a-10b)。在一个实施例中,难题可以从承诺交易(诸如承诺交易402a-02b)的脚本中获得。如上所述,难题可以是使用脚本语言中的一个或多个操作码的逻辑表达式集合。难题是这样的:如果难题的解作为输入被接收,则难题算法/逻辑表达式作为执行的结果评估为真。难题可以是加密散列难题、工作量证明难题,或者其他一些有数字解的难题。

在804中,在承诺交易已经被提交给区块链之后,在802中获得的难题被组合到prng交易(诸如图6的prng交易602)的锁定脚本中,这样的方式使得难题的解(诸如解408a-08bb)可以作为输入被接收,并且被组合以导出可以用作prng的种子的值,从而生成伪随机数。

在806中,在确定prng交易已被提交给区块链之后,从过程800的执行转到808。在808中,一旦prng交易已被提交给区块链,从诸如图4的解408a-08b中获取prng交易中并入的难题的解。在一些实施例中,解的获取是在一段时间tc之后执行的(例如,如图7所示),以允许各方有足够的时间来提供他们的解。

在810中,确定是否在时限(例如,图7中的t+δt)内获得了并入到prng交易的锁定脚本中的所有难题的解。如果不能获得所有的解,则从过程800的执行转到812,随之惩罚交易可以被验证,以退还与prng交易相关联的数字资产(如在图7的上下文中描述的)。否则,如果在时限内获得了所有解,则从过程800的执行转到814。

在814中,解被并入到种子交易的解锁脚本中,如此在816中,解锁脚本与锁定脚本的组合的执行使得解被转换成种子值(例如,组合解值并对组合的解值执行sha256散列操作),该种子值作为锁定脚本中prng的输入,使得prng生成伪随机数。在818中,伪随机数可用于影响prng交易的锁定脚本的约束。也就是说,基于由prng锁定脚本中的prng生成的伪随机数,以某种方式(例如,所接受的签名的伪随机数,签名的有效性部分地基于伪随机数量是否在值的某个范围内、数字资产的伪随机数量是否被转移等)约束对与prng交易相关联的数字资产的控制的转移,例如以结合图11描述的方式。注意,在802-18中执行的一个或多个操作可以以各种顺序和组合来执行,包括并行执行。

图9示出了本发明的示例实施例900。具体地,图9描述了用于种子生成的难题解技术的一个示例。尽管结合图4-8描述的承诺解涉及两个或多个承诺方,但是示例实施例900中描述的难题解技术仅需要一个难题解908,该难题解908可用于导出prng交易902的种子。

在一些实施例中,prng交易902与数字资产y相关联,该数字资产y被具有约束(σ←verify(puzzle,π))的锁定脚本所锁定,如果在种子交易904的解锁脚本中具有难题910的有效解(π←puzzlesolution),则具有约束的锁定脚本可以被解锁(例如,评估为真)。在一些实施例中,prng交易902的锁定脚本还包括prng交易902可以被转移的时限。也就是说,在这样的实施例中,如果有效种子交易904没有在特定的时间帧内(例如,在时限期满之前)被验证,则数字资产y可以由prng交易902的创建者或者在一些实施例中由另一方通过类似于图7所示的退款交易704的退款交易来恢复。

在示例实施例900的难题解技术中,在创建prng交易902时,交易各方不知道难题910的难题解908。在一些实施例中,prng交易902与被转移到第一方以提供难题解908的分配(例如数字资产的一部分)相关联,从而向各方提供试图发现难题910的难题解908的理由。在某些情况下,该分配是区块链以外的分配(例如,真实货币)。在其他情况下,该分配是数字资产y的一部分。在其他情况下,该分配是另一交易的数字资产的一部分。在一些实施例中,该分配大于数字资产y,以便提供揭示难题解908的理由。

在一些实施例中,难题910是包括操作序列的算法(例如脚本语言中的操作码序列),如果在一个或多个输入上执行,则其返回真或假的指示。例如,在实施例中,如果难题解908是难题910的有效解,则包含难题910的prng交易902的锁定脚本的执行将评估为真。然而,在一些实施例中,如果难题解908无效,则锁定脚本的执行将评估为假。难题解技术的限制在于,在本实施例中,难题910的难题解908在难题910被创建时是未知的或不可确定的。在一些示例中,难题910在计算上是复杂的(例如,涉及超过阈值的特定时间量和/或处理能力),使得难题的解不可能在prng交易902创建之后的特定时间之前确定。

难题910的一个示例是工作量证明函数,例如在特定时间的区块链的未来区块头的加密散列。因为在将来特定时间越远,预测区块链的未来区块头会变得越来越困难,所以在prng交易902被创建并且分配与提供工作量证明相关联时,交易各方不太可能知道难题910的难题解908。注意,可以用多种方式指定未来的区块头。例如,解可以是在未来指定日期/时间之后创建的第一区块头的散列。作为另一个示例,未来区块头可以被指定为第一未来区块头,该第一未来区块头包含该区块中的特定数量的交易。因此,未来区块头的工作量证明难题是满足难题解技术的约束的一个示例。

对未来区块头的访问可以通过在解锁脚本中实现对数据的约束来执行,以要求解锁脚本包括区块头、区块链或区块头的链。通过对解锁脚本中的数据实施此类约束,并且通过在运行时将此类数据注入解锁脚本,交易可以基于区块链的各个方面。例如,区块头可以作为数据包含在潜在的种子交易的解锁脚本中,并且操作码序列可以在锁定脚本中执行,以验证数据是有效的区块头(例如,脚本的大小是80字节,数据的nbits字段等于或大于区块链难度,以及验证sha256小于或等于目标值),例如下表1所示的脚本。

表1:

在一些实施例中,种子交易904是被创建来提供可用于prng交易902锁定脚本中为prng导出种子的值的交易,该值为难题解908的形式。在一些实施例中,难题解908是一个值,如果该值作为输入通过种子交易904的解锁脚本被提供给难题910,则会导致prng交易902的锁定脚本评估为真作为执行的结果。向prng提供种子还导致prng执行以生成随机数。在一个实施例中,解决难题910与分配(例如与prng交易902相关联的数字资产的至少一部分)相关联,作为揭示解的理由。这样,可以向解决难题910的一方提供避免扣留解908的理由,因为这样做将增加另一方解决难题910并首先要求分配的可能性。

图10示出了根据本发明的难题解技术的各种实施例的用于生成随机数的过程1000的示例的流程图。过程1000(或所描述的任何其他过程,或这些过程的变化和/或组合)的一些或全部可以在配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下执行,并且可以实现为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可以存储在非暂时性计算机可读存储介质(例如,永久存储在磁、光或闪存介质上的计算机程序)上。

例如,过程1000的一些或全部可以由一个或多个计算设备(例如,由数据中心中的服务器、由客户端计算设备、由计算资源服务提供商的分布式系统中的多个计算设备或者由诸如图12的计算设备1200的任何合适的电子客户端设备)来执行。过程1000包括一系列操作,其中包括难题的prng交易被验证,并且种子交易使得种子在prng交易的锁定脚本中被提供给prng。prng的执行产生伪随机数。基于产生的伪随机数对交易施加约束。

在1002中,prng交易(例如图9的prng交易902)被区块链网络的验证节点验证。在一个实施例中,prng交易包括类似于难题910的难题,该难题具有在创建prng交易时未知的解。例如,在一些实施例中,难题的解涉及在从创建prng交易起经过一定时间之后才可用或可确定的数据。在1004中,在prng交易已经被提交到区块链网络之后,包含解锁脚本中的难题的解(例如,难题解908)的种子交易由区块链网络中的相同或不同验证节点来获取。

在1006中,该相同或不同的验证节点执行种子交易的解锁脚本,这使得解可用作prng交易的锁定脚本的输入。然后,验证节点执行prng交易的锁定脚本,该脚本将解作为输入,并基于prng可用于生成伪随机数的解导出值。在1008中,伪随机数被用于影响prng交易的锁定脚本的约束。也就是说,基于由prng锁定脚本中的prng生成的伪随机数,以某种方式(例如,所接受的签名的伪随机数,签名的有效性部分地基于伪随机数量是否在值的某个范围内、数字资产的伪随机数量是否被转移等)约束对与prng交易相关联的数字资产的控制的转移,例如以结合图11描述的方式。注意,在1002-18中执行的一个或多个操作可以以各种顺序和组合来执行,包括并行执行。

图11示出了如何实现本发明中描述的实施例的prng的示例1100。具体地,图11描绘了prng交易1102中的锁定脚本的示例,其由于以上述实施例中描述的方式被注入种子而随机产生两种结果之一。注意,尽管图11仅描绘了两种可能的结果,但是可能结果的实际数量和每个结果的概率可以由prng交易1102的创建者确定,并编码在prng交易1102的锁定脚本中。因此,有许多可能的结果和概率。在示例1100中描述的第一种可能结果中,随机结果1106a是试图解锁prng交易1102的utxo的第一交易1104a验证成功,但是试图解锁prng交易1102的utxo的第二交易1104b验证不成功。在第二种可能的结果中,随机结果1106b是试图解锁prng交易1102的utxo的第一交易1104a验证不成功,但是试图解锁prng交易1102的utxo的第二交易1104b的验证成功。

在一些实施例中,prng交易1102分别类似于结合图6和9描述的prng交易602或prng交易902。在一些实施例中,第一和第二交易1104a-04b分别类似于图6和9的种子交易604或种子交易904。也就是说,第一和第二交易1104a-04b中的每一个可以包括包含在prng交易1102的锁定脚本中的一个或多个难题的一个或多个解。但是,因为伪随机数生成器的种子是从提供给锁定脚本的解中被导出的,即使第一交易1104a和第二交易1104b都可以包含相同的解,结果(在示例1100中是确定哪个交易被成功验证)是伪随机的。例如,锁定脚本可以被编码,以接受来自伪随机数生成器的大于5的值上的alice的签名,而接受来自伪随机数生成器的小于或等于5的值上的bob的签名。

在一些实施例中,随机结果1106a-06b反映了prng交易1102的锁定脚本的prng的结果,该锁定脚本已经以一个或多个难题解被注入种子。下表说明了在锁定脚本中使用prng生成的随机数来确定约束集合的几个示例。表2示出了使用本发明中描述的类型的随机数生成器来确定约束集合的一个示例:

表2:

在上表中,基于种子(例如,在执行解锁脚本之后从堆栈存储器中的值导出的值)生成随机数,该随机数通过执行模数3运算并加1被限制为1和3之间的值。利用堆栈上的随机数,op_checkmultisig操作检查与堆栈上的随机数相等的签名数。表3示出了使用本发明中描述的类型的随机数生成器来确定约束集合的另一个示例:

表3:

在上表中,像前一个脚本一样,基于种子生成随机数。在这种情况下,该值被限制在0到1的范围内。如果随机数是1,则确定检查alice的有效签名(例如,与pubka相关联),而如果随机数是0,则确定检查bob的有效签名(例如,与pubkb相关联)。

注意,在描述公开的实施例的上下文中,除非另有说明,否则对于执行“指令”通常不独立执行的操作(例如,数据的传输、计算等)的可执行指令(也称为代码,应用,代理等)的表达式的使用表示指令正在由机器执行,从而使得机器执行指定的操作。

图12是可用于实践本发明的至少一个实施例的计算设备1200的示意性简化框图。在各种实施例中,计算设备1200可以用于实现上文示出和描述的任何系统。例如,计算设备1200可以用于用作数据服务器、网络服务器、便携式计算设备、个人计算机或任何电子计算设备。如图12所示,计算设备1200可以包括一个或多个处理器1202,在实施例中,处理器1202用于经由总线子系统1204与多个外围子系统通信并可操作地连接到多个外围子系统。在一些实施例中,这些外围子系统包括存储子系统1206,存储子系统1206包括存储器子系统1208和文件/磁盘存储子系统1210、一个或多个用户接口输入设备1212、一个或多个用户接口输出设备1214以及网络接口子系统1216。这种存储子系统1206可以用于信息的临时或长期存储。

在一些实施例中,总线子系统1204提供了一种机制,用于使计算设备1200的各种组件和子系统能够按照预期彼此通信。尽管总线子系统1204示意性地示出为单个总线,但是总线子系统的替代实施例使用多个总线。在一些实施例中,网络接口子系统1216为其他计算设备和网络提供接口。在一些实施例中,网络接口子系统1216用作从计算设备1200接收数据和从计算设备200向其他系统发送数据的接口。在一些实施例中,总线子系统1204用于传送诸如详细信息、搜索项等的数据。

在一些实施例中,用户接口输入设备1212包括一个或多个用户输入设备(例如键盘);指向设备(例如集成鼠标、轨迹球、触摸板或图形输入板);扫描仪;条形码扫描仪;并入到显示器中的触摸屏;音频输入设备(例如语音识别系统、麦克风);和其他类型的输入设备。通常,术语“输入设备”的使用旨在包括用于向计算设备1200输入信息的所有可能类型的设备和机制。在一些实施例中,一个或多个用户接口输出设备1214包括显示子系统、打印机或诸如音频输出设备等非视觉显示器。在一些实施例中,显示子系统包括阴极射线管(crt)、平板设备(例如液晶显示器(lcd)、发光二极管(led)显示器或投影或其他显示设备。通常,术语“输出设备”的使用旨在包括用于从计算设备1200输出信息的所有可能类型的设备和机制。例如,一个或多个用户接口输出设备1214可用于呈现用户接口,以便于用户与执行其中描述的过程和变化的应用进行交互(当这种交互可能是适当的时候)。

在一些实施例中,存储子系统1206提供一种计算机可读存储介质,用于存储提供本发明至少一个实施例的功能的基本编程和数据结构。在一些实施例中,当由一个或多个处理器执行时,应用(程序、代码模块、指令)提供本发明的一个或多个实施例的功能,并且在实施例中,存储在存储子系统1206中。这些应用模块或指令可以由一个或多个处理器1202执行。在各种实施例中,存储子系统1206另外提供了存储库,用于存储根据本发明使用的数据。在一些实施例中,存储子系统1206包括存储器子系统1208和文件/磁盘存储子系统1210。

在实施例中,存储器子系统1208包括多个存储器,例如用于在程序执行期间存储指令和数据的主随机存取存储器(ram)1218和/或其中可以存储固定指令的只读存储器(rom)1220。在一些实施例中,文件/盘存储子系统1210为程序和数据文件提供非暂时性永久(非易失性)存储,并且可以包括硬盘驱动器、软盘驱动器以及相关联的可移动介质、光盘只读存储器(cd-rom)驱动器、光驱、可移动介质盒或其他类似的存储介质。

在一些实施例中,计算设备1200包括至少一个本地时钟1224。在一些实施例中,本地时钟1224是表示从特定开始日期起已经流逝的滴答数的计数器,并且在一些实施例中,本地时钟1224集成地位于计算设备1200内。在各种实施例中,本地时钟1224用于在特定时钟脉冲下同步计算设备1200处理器和其中包括的子系统中的数据传输,并且可以用于协调计算设备1200和数据中心中的其他系统之间的同步操作。在另一个实施例中,本地时钟是可编程间隔定时器。

计算设备1200可以是多种类型中的任何一种,包括便携式计算机设备、平板计算机、工作站或下面描述的任何其他设备。另外,计算设备1200可以包括另一设备,在一些实施例中,该另一设备可以通过一个或多个端口(例如,usb、耳机插孔、闪电连接器等)连接到计算设备1200。在实施例中,这种设备包括用于接受光纤连接器的端口。因此,在一些实施例中,该设备用于将光信号转换成电信号,该电信号通过将该设备连接到计算设备1200的端口传输以进行处理。由于计算机和网络的不断变化的性质,图12中描绘的计算设备1200的描述仅旨在作为特定示例,以说明设备的优选实施例。许多具有比图12所示系统更多或更少组件的其他配置是可能的。

因此,说明书和附图应被认为是说明性的而非限制性的。但是,显而易见的是,在不脱离权利要求中所阐述的本发明的范围的情况下,可以对其进行各种修改和变化。同样,其他变型也在本发明的范围内。因此,虽然所公开的技术易受各种修改和替代构造的影响,但特定示出的实施例在附图中示出并且已经在上文中详细描述。然而,应当理解的是,无意将本发明限制于所公开的一种或多种特定形式,相反,目的是涵盖所附权利要求所定义的落入本发明的范围内的所有修改、替代构造和等同物。

除非本文另有说明或者与上下文明显矛盾,否则在描述所公开的实施例的上下文中(特别是在下文权利要求的上下文中),术语“一个(a)”和“一个(an)”和“所述(the)”以及类似的指代的使用应理解为涵盖单数和复数。除非另有说明,术语“包括(comprising)”、“具有(having)”、“包括(including)”和“包含(containing)”应理解为开放式术语(即,意味着“包括但不限于”。术语“连接(connected)”在未修改的情况下指的是物理连接,即使有东西介入,应理解为部分或全部包含在、连接到或连接在一起。除非另有说明,否则本发明中数值范围的引用仅旨在用作分别指代落入该范围内的每个单独数值的简写方法,并且每个单独数值都被并入说明书中,如同单独引用一样。除非另有说明或与上下文矛盾,否则术语“集合(set)”(例如,“项的集合(asetofitems)”)或“子集(subset)”的使用应理解为包括一个或多个成员的非空集合。此外,除非另有说明或与上下文矛盾,否则对应集合的术语“子集”不一定表示对应集合的真子集,但是子集和对应集合可以相等。

除非另有明确说明或与上下文明显矛盾,否则诸如“a、b、和c中的至少一个(atleastoneofa,b,andc)”或“a、b或c中的至少一个(atleastoneofa,borc)”形式的短语之类的连接语言,在上下文中理解为通常用来表示一个项、术语等,可以是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中的至少一个。

除非另有说明或者与上下文明显矛盾,否则所描述的过程的操作可以任何合适的顺序执行。所描述的过程(或其变型和/或组合)可以在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可以通过硬件或其组合实现为在一个或多个处理器上共同执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)。在一些实施例中,代码可以例如以计算机程序的形式存储在计算机可读存储介质上,计算机程序包括可由一个或多个处理器执行的多个指令。在一些实施例中,计算机可读存储介质可以是非暂时性的。

除非另有说明,否则提供的任何和所有示例或示例性语言(例如,“诸如(suchas)”)的使用仅旨在更好地说明本发明的实施例,并且不对本发明的范围构成限制。说明书中的任何语言都不应解释为表明任何未要求保护的要素对于实现本发明是必不可少的。

描述了本发明的实施例,包括发明人已知的用于实施本发明的最佳模式。通过阅读前述说明书,这些实施例的变型对于本领域普通技术人员来说将变得显而易见。发明人期望熟练的技术人员适当地采用这类变型,发明人打算以不同于具体描述的方式来实践本发明的实施例。因此,本发明的范围包括适用法律允许的所附权利要求中列举的主要内容的所有修改和等同物。此外,除非另有说明或者与上下文明显矛盾,否则上述要素在其所有可能的变型中的任何组合都包含在本发明的范围内。

引用的所有参考文献(包括出版物、专利申请和专利)通过引用并入本文,其并入程度与每个参考文献被单独且明确地指出通过引用并入并完整列出的程度相同。

应当说明的是,上述实施例说明而非限制本发明,在不脱离本发明的由所附权利要求限定的范围的情况下,本领域技术人员将能够设计出许多替代实施例。在权利要求中,括号中的任何附图标记不应解释为对权利要求的限制。词语“包括(comprising)”和“包括(comprises)”等并非在整体上排除其他元件和步骤的存在,尽管这些元件和步骤并没有在任何权利要求或说明书中列出。在本说明书中,“包括(comprises)”意指“包括(includes)或由......组成(consistsof)”,“包括(comprising)”意指“包括(including)或由......组成(consistingof)”。元件的单数引用不意味着排除这些元件的复数引用,反之亦然。本发明可以借助包括若干不同元件的硬件,以及借助适当编程的计算机来实施。在列举了若干方法的设备权利要求中,这些方法中的若干个可以由硬件的同一个部件来体现。不争的事实是,在相互不同的从属权利要求中列举了某些措施,并不代表这些措施的结合不能获得有益效果。

总结

本发明中描述和建议的技术扩展了区块链的功能,而未破坏确保存储在区块链数据结构中的数据的完整性的区块链的属性。例如,本发明中描述的技术通过为实现对交易的约束提供更大的灵活性来改进计算领域,特别是智能合约领域。此外,本发明中描述和建议的技术可以通过在脚本中生成伪随机数来改进区块链网络的功能。此外,本发明中描述和建议的技术必须植根于计算机技术,以便克服由于区块链脚本操作码中缺乏随机数生成功能而特别产生的问题。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1