首页 / 专利库 / 银行与财务事项 / 比特币地址 / 使用区块链实现逻辑门功能

使用链实现逻辑功能

阅读:993发布:2020-05-26

专利汇可以提供使用链实现逻辑功能专利检索,专利查询,专利分析的服务。并且本 发明 提出了一种解决方案,即创建 区 块 链 交易以实现 逻辑 门 的功能。本发明可以在 比特币 平台或替代的区块链平台上实现。该交易包括 锁 定脚本,该锁定脚本包括被选择以便实现 逻辑门 (例如异或门)的功能的指令。执行脚本时(因为第二个交易正在尝试花费与锁定脚本相关的输出),条件指令将处理输入以提供TRUE或FALSE的输出。将第二个交易传送到区块链网络进行验证,如果确定有效,则将其写入区块链。第二个交易有效可以解释为TRUE输出。因此,第一交易的锁定脚本提供了所需逻辑门的功能。本发明提供了许多优点,并且可以用于各种各样的应用中,例如用于控制系统和单元的实现。,下面是使用链实现逻辑功能专利的具体信息内容。

1.一种计算机实现的控制方法,包括以下步骤:
在第一链交易中提供定脚本,所述锁定脚本
包括至少一个指令,用于:
处理至少一个布尔输入;和
实现逻辑的功能;
2.根据权利要求1所述的方法,其中所述逻辑门是与门,异或门,与非门,或非门,非门,同或门,蕴涵门,逆蕴涵门。
3.根据权利要求1或2所述的方法,其中所述至少一个布尔输入可以通过测试或评估区块链谜题的解决方案来导出或生成。
4.根据任一前述权利要求所述的方法,其中所述锁定脚本包括脚本的散列,所述脚本包括所述至少一个指令。
5.根据任一前述权利要求所述的方法,其中所述锁定脚本是所述比特币协议中已知的P2SH锁定脚本,或者是另一个区块链协议中的功能等效的锁定脚本。
6.根据任一前述权利要求所述的方法,包括以下步骤:
提供具有解锁脚本的进一步区块链交易
处理至少一个输入信号以提供至少一个布尔输入;
使用所述至少一个布尔输入执行所述第一和进一步区块链交易的锁定和解锁脚本。
7.根据权利要求6所述的方法,其中所述处理至少一个输入信号以提供至少一个布尔输入的步骤是在区块链交易中的脚本内执行的,优选地,所述脚本是所述进一步区块链交易的解锁脚本。
8.根据任一前述权利要求所述的方法,包括以下步骤:
将所述进一步交易和/或第一交易发送到区块链网络以进行验证。
9.根据任一前述权利要求所述的方法,包括以下步骤:
监测或搜索所述区块链或区块链网络以确定所述进一步交易存在或不存在。
10.根据权利要求8或9所述的方法,包括以下步骤:
提供计算资源,所述计算资源用于影响设备或过程的行为,基于:
对所述区块链或区块链网络内的进一步交易的检测;
和/或
所述进一步交易的有效性。
11.根据权利要求8至10所述的方法,包括以下步骤:
将所述区块链或区块链网络中的进一步交易的检测解释为逻辑门的TRUE输出。
12.根据任一前述权利要求所述的方法,其中在区块链网络内对所述进一步交易的验证取决于所述解锁脚本的执行。
13.根据任一前述权利要求所述的方法,包括以下步骤:
基于所述进一步交易的有效性来控制设备或过程,其中所述有效性由基于计算机的控制代理确定或建立,或者通过监测所述区块链网络以确定其是否已经由网络节点验证,和/或通过监测所述区块链的状态来确定所述交易是否已被写入所述区块链。
14.根据任一前述权利要求所述的方法,其中所述至少一个输入包括数值、常数值、散列函数的结果、加密密钥、区块链谜题(puzzle)和/或比特币其他区块链相关地址。
15.根据任一前述权利要求所述的方法,其中通过在基于计算的资源上执行的自动化过程,来生成所述第一和/或进一步交易,和/或发送第一和/或进一步交易到区块链网络。
16.根据任一前述权利要求所述的方法,其中所述至少一个指令:
包括布尔条件或运算符;和/或
使用基于堆栈的编程语言来编写和/或执行。
17.一种计算机实现的系统,用于实施任一前述权利要求所述的方法。
18.一种区块链实现的控制系统,用于实施异或门的所述功能且可运行用于:
接收多个输入信号;和
当一个且仅一个输入信号使得能够生成与存储数据项相等的散列值时,提供第一输出。
19.根据权利要求18所述的控制系统,所述系统可运行用于通过在区块链交易中执行锁定脚本来实现异或门的功能。
20.根据权利要求18至19所述的控制系统,其中所述系统可进一步运行用于:
导出每个所述输入的散列值;
将为每个所述输入信号导出的散列值与存储的散列值进行比较;
为每个输入返回第一个值,其中所述导出的散列值与存储的散列值相同;
为每个输入返回第二个值,其中所述导出的散列值与存储的散列值不同;
确定第一个值的数量并根据所述确定发出所述第一个输出。
21.根据权利要求18至20所述的控制系统,其中对所述控制系统提供第一输出进行响应,所述控制系统重新生成所述存储的数据项。
22.根据权利要求18至21所述的控制系统,其中以随机或伪随机方式重新生成所述存储的数据项。
23.根据权利要求18至22所述的控制系统,其中为每个存储的数据项生成公钥-私钥对。
24.一种使用区块链来实现异或门的功能的方法,包括提供区块链交易的步骤,所述区块链交易用于:
接收多个输入;和
当一个且仅一个输入使得能够生成等于存储的数据项的散列值时,提供第一输出。
25.根据权利要求24所述的方法,其中将所述方法用于通过在所述区块链交易中执行锁定脚本来实现异或门的所述功能。
26.一种控制方法,包括以下步骤:
检查区块链交易(TX2)的交易输入的解锁脚本的至少一个输入信号,其中所述至少一个输入信号是区块链谜题并且具有一个或多个加密签名;
尝试使用所述区块链交易(TX2)的解锁脚本来花费先前区块链交易(TX1)的输出,以便执行TX2的所述解锁脚本和与所述先前交易(TX1)的输出相关的锁定脚本;
处理TX2的所述解锁脚本内的所述至少一个输入信号以提供布尔值;和
使用所述布尔值来执行逻辑门代码,所述逻辑门代码已被选择用于模拟或执行所选或预定逻辑门的功能。
27.根据权利要求26所述的方法,其中:
在TX1的锁定脚本中提供所述逻辑门代码;和/或
所述谜题表示评估为真或假的条件,并且在所述锁定脚本的执行期间通过以下方式评估所述谜题:
使用解锁脚本向所述锁定脚本呈现谜题的解决方案或值;
对所述呈现的解决方案或值进行散列,然后将所述散列与所述锁定脚本中提供的存储散列进行比较;
将两个散列相等解释为“真”(TRUE)。

说明书全文

使用链实现逻辑功能

技术领域

[0001] 本发明主要涉及分布式账本(distributed ledger)(区块链)技术,可以是任何与区块链相关的技术,包括(但不限于)比特币区块链。本发明的各方面还涉及逻辑门和组合逻辑领域。本发明可以适用于控制系统或过程。

背景技术

[0002] 在本文中,我们使用术语“区块链”来包括所有形式的电子的,基于计算机的,分布式账本,包括基于共识的区块链和交易链技术、取得许可和未取得许可的账本、侧链和替代链(alt chains)技术、共享账本及其变型。虽然已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币账本(Bitcoin ledger)。虽然出于方便和说明的目的,本申请文件可能提到了比特币,但应该指出的是,本发明不限于比特币区块链(Bitcoin blockchain)的用途,其他区块链实施方式和协议也落入到本发明的范围内。术语“用户”在本文中可以指人或基于处理器的资源。
[0003] 区块链是一种由计算机实现的去中心化的分布式系统,由区块组成,而区块又由交易组成。每笔交易包括至少一个输入和至少一个输出。每个区块包含前一个区块的散列,使得区块链接在一起,从而创建一个永久的、不可更改的记录,该记录记载自区块链诞生之始就已写入区块链的所有交易。交易包含嵌入其输入和输出中的被称为脚本(script)的小程序,这些小程序指定如何以及由谁来访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。
[0004] 为了将交易写入区块链,必须对其进行“验证”。网络节点(矿工)执行工作以确保每笔交易都有效,无效交易被网络所拒绝。安装在节点上的软件客户端通过执行定和解锁脚本,对未花费的交易(UTXO)执行此验证工作。如果锁定和解锁脚本的执行评估为真(TRUE),则交易有效,且将交易写入区块链。因此,解锁脚本可以提供用于评估锁定脚本的输入。虽然这通常采用基于签名的输入的形式,但已知其他形式的输入也是可能的。此外,脚本语言中的许多命令是布尔值(例如OP-EQUAL),提供真或假(FALSE)的结果。这使得限制性可以构建到交易中。
[0005] 虽然已经提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币账本。虽然出于方便和说明的目的,本申请文件可能提到了比特币,但应该指出的是,本发明不限于比特币区块链的用途,其他区块链实施方式和协议也落入到本发明的范围内。
[0006] 区块链技术最有名的是其在加密货币(cryptocurrency)上的应用。然而,近年来,数字企业家们已经开始探索使用比特币所基于的加密安全系统和能够存储在区块链上的数据来实现新系统。本发明涉及区块链技术的这样一种新的、创造性的变型。特别地,本发明涉及使用区块链来实现或模拟逻辑门的功能,逻辑门又可以用作简单但有效且强大的机制,用于创建各种各样的计算机实现的系统。这样的系统可以包括用于控制过程和/或引导设备和系统的行为的控制单元。
[0007] 控制单元的基本元件是逻辑门。通过将门逻辑构建为区块链交易(blockchain transaction,简称TXs),可以实现利用区块链技术带来的好处的强大过程。这些好处包括但不限于实现网络安全增强,去中心化控制,设备/系统/过程控制,与遗留系统的潜在集成,以及记录的不变性/永久性。
[0008] 因此,希望提供一种在区块链上或通过区块链提供或模拟逻辑门功能的解决方案。在这种解决方案中,逻辑门可以通过区块链交易的锁定脚本来实现。可以提供对逻辑门的基本结构的扩展以允许任何数量的输入和任何数量的输出。现在已经设计出这种改进的解决方案。

发明内容

[0009] 因此,根据本发明,提供了如所附权利要求中所限定的解决方案。
[0010] 本发明的实施例可以提供计算机实现的方法和相应的系统,可以描述为控制方法/系统。
[0011] 本发明的实施例可以基本上以下文小标题为“技术1”的部分为依据。
[0012] 该方法可以包括在第一区块链交易中提供锁定脚本的步骤。
[0013] 第一(和/或进一步的)交易可以由自动化过程生成,即通过计算机生成而无需人为干预。
[0014] 锁定脚本可以包括至少一个用于处理至少一个布尔输入的指令。指令可以是区块链协议中使用的操作码。
[0015] 可以分配和/或选择锁定脚本中的至少一个指令以实现逻辑门的真值表。逻辑门可以是或门,异或门,与非门,或非门,非门,同或门,蕴涵门,逆蕴涵门。书写脚本的编程器可以选择逻辑门功能的指令。
[0016] 该方法可以包括提供具有解锁脚本的进一步的区块链交易的步骤。
[0017] 可以通过测试或评估区块链谜题(puzzel)的解决方案来导出或生成至少一个布尔输入。术语“谜题”在区块链技术领域中是已知的,并且容易被本领域技术人员所理解。
[0018] 锁定脚本可以包括(赎回)脚本的散列,(赎回)脚本包含至少一个指令。因此,可以以散列格式在锁定脚本内提供至少一个指令。
[0019] 锁定脚本可以是比特币协议中已知的支付脚本散列(P2SH)锁定脚本,或者是另一个区块链协议中的功能等效的锁定脚本。
[0020] 该方法可以包括处理至少一个输入信号以提供至少一个布尔输入的步骤。可以从任何源接收或导出输入信号。可以是区块链外部的源。
[0021] 该方法可以包括使用至少一个布尔输入分别执行第一和进一步的区块链交易的锁定和解锁脚本的步骤。
[0022] 处理至少一个输入信号以提供至少一个布尔输入的步骤可以由进一步的区块链交易的解锁脚本执行。
[0023] 该方法可以包括将进一步交易和/或第一交易发送到区块链网络以进行验证的步骤。网络可以是比特币网络。或者,可以在不将交易发送到区块链网络的情况下执行进一步交易的验证。可以将对进一步交易的成功验证/不成功验证分别解释为TRUE或FALSE值。
[0024] 该方法可以包括监视或搜索网络区块链以确定进一步交易存在或不存在的步骤。可以将区块链账本中的进一步交易的存在或不存在分别解释为TRUE或FALSE值。
[0025] 该方法可以包括提供计算资源的步骤,该计算资源用于基于区块链内的进一步交易的检测来控制或影响设备、系统或过程的行为。
[0026] 该方法可以包括将进一步交易的有效性解释为逻辑门提供的TRUE输出的步骤。有效性可以由控制代理确定,或者通过监视区块链和/或区块链网络来确定。
[0027] 确定进一步交易的有效性可以用作由计算代理执行的动作的触发器。
[0028] 区块链网络内的进一步交易的验证可以取决于解锁脚本的执行。
[0029] 该方法可以包括基于区块链内是否存在进一步交易来控制设备或过程的步骤。这可以是任何类型的设备、系统或技术过程。
[0030] 至少一个输入信号可以包括数值、常数值、散列函数的结果、加密密钥、区块链谜题(puzzle)和/或比特币其他区块链相关地址。
[0031] 可以通过在基于计算的资源上执行的自动化过程,来生成第一和/或进一步交易,和/或发送第一和/或进一步交易到区块链网络。
[0032] 至少一个指令可以包括布尔条件、操作码或运算符。它可以使用基于堆栈的编程语言来编写和/或执行。
[0033] 本发明还可以提供一种使用区块链来实现异或门逻辑门的功能的方法,该方法包括提供区块链交易的步骤,该区块链交易用于:
[0034] 接收多个输入信号;和
[0035] 当一个且仅一个输入信号使得能够生成等于存储的数据项的散列值时,提供第一输出。
[0036] 上述方法提及的特征也可以应用于在此描述的方法。
[0037] 可以将该方法用于通过在区块链交易中执行锁定脚本来实现异或门的功能。
[0038] 第一输出可以表示布尔值TRUE的输出。
[0039] 根据另一种形式的措辞,可以将本发明描述为提供包括以下步骤的方法:
[0040] 向区块链交易(TX2)的交易输入的解锁脚本提供至少一个输入信号,其中所述至少一个输入信号是区块链谜题并且具有一个或多个加密签名;
[0041] 尝试使用区块链交易(TX2)的解锁脚本来花费先前区块链交易(TX1)的输出,以便执行TX2的解锁脚本和与先前交易(TX1)的输出相关的锁定脚本;
[0042] 处理TX2的解锁脚本内的至少一个输入信号以提供布尔值;和
[0043] 使用布尔值来执行逻辑门代码,该逻辑门代码已被选择用于模拟或执行所选或预定逻辑门的功能。
[0044] 可以在TX1的锁定脚本中提供逻辑门代码;和/或谜题可以表示评估为真或假的条件,并且在锁定脚本的执行期间通过以下方式评估:
[0045] 使用解锁脚本向锁定脚本呈现谜题的解决方案或值;
[0046] 对所呈现的解决方案或值进行散列,然后将散列与锁定脚本中提供的存储散列进行比较;
[0047] 将散列的相等解释为“真”(TRUE)。
[0048] 本发明可以提供一种计算机实现的系统,用于实现如上所述方法的任何实施例。
[0049] 本发明还可以提供一种区块链实现的控制系统,用于实现逻辑门的功能并且可操作用于:
[0050] 接收多个输入信号;和
[0051] 当一个且仅一个输入信号使得能够生成等于存储的数据项的散列值时,提供第一输出。
[0052] 上述系统提到的相关特征也可以应用于在此描述的系统。
[0053] 该系统可操作用于通过在区块链交易中执行锁定脚本来实现逻辑门的功能。
[0054] 逻辑门可以是或门,异或门,与非门,或非门,非门,同或门,蕴涵门,逆蕴涵门。
[0055] 逻辑门可操作用于:
[0056] 导出每个输入的散列值;
[0057] 将为每个输入信号导出的散列值与存储的散列值进行比较;
[0058] 为每个输入信号返回第一个值,其中导出的散列值与存储的散列值相同;
[0059] 为每个输入信号返回第二个值,其中导出的散列值与存储的散列值不同;
[0060] 确定第一个值的数量,并根据此确定发出第一个输出。
[0061] 可以对提供第一输出的控制系统进行响应,重新生成所存储的数据项。可以以随机或伪随机方式重新生成所存储的数据项。可以为每个存储的数据项生成公钥-私钥对。
[0062] 所描述的与一个方面或实施例相关的任何特征,也可以用于另一方面或实施例。例如,所描述的关于方法的任何特征可以适用于系统,反之亦然。
[0063] 参考本文所述的实施例,本发明的这些和其他方面将变得清晰,并得以阐明。附图说明
[0064] 现在将仅通过示例并参考附图来描述本发明的实施例,其中:
[0065] 图1示出了根据本发明的实施例的系统及其说明性使用实例;
[0066] 图2示出了图1的控制系统的真值表;
[0067] 图3示出了处理图1的示例的解锁交易的步骤;以及
[0068] 图4到8示出了可用于共享秘密并生成公钥或私钥的技术;
[0069] 图9示出了本发明的说明性实施例的功能,其中在第二交易的解锁脚本[0070] 内评估两个布尔输入A和B以产生布尔输出X;
[0071] 图10示出了本发明的实施例的概况,包括第一和第二交易;
[0072] 图11示出了根据本发明的实施例的过程;
[0073] 图12示出了根据如下所述的本发明的“技术1”的实施例的概况;
[0074] 图13示出了根据如下所述的本发明的“技术2”的实施例的概况;
[0075] 图14示出了根据如下所述的本发明的“技术3”的实施例的概况;
[0076] 图15提供了根据现有技术如何评估锁定和解锁脚本的图示。

具体实施方式

[0077] 本发明提供了一种使用区块链交易的锁定脚本来实现特定真值表的逻辑的机制。如现有技术中已知的,这样的真值表用于实现逻辑门,其中通常基本门具有两个输入A和B以及单个输出X。图9示出了由本发明示例性实施例创建的结构的概况。在本发明中,在交易中评估两个输入A和B以产生输出X。输入值A和B通过区块链交易的解锁脚本提供,该区块链交易试图花费与锁定脚本相关的先前交易的输出,锁定脚本包含逻辑门代码。在一个或多个实施例中,解锁脚本可以包括赎回脚本。因此,需要至少两个交易来实现本发明的任何实施例。第一个交易使用嵌入门逻辑的锁定脚本锁定一定数量的比特币或其他加密货币。第二个交易通过呈现A和B值(可能还有签名)来花费第一个交易的输出。
[0078] 在经典门中,A,B和X是二进制的,取值等于真(1)或假(0)。但是,根据本发明的实施例,将经典门复制和扩展以包括更复杂的变型。特别地,区块链门的输入本身可能不是“真”或“假”输入,而是可以是若干不同的值、格式或值类型中的任何一种。例如,A和B可以是整数、散列值、加密密钥、BTC地址(等),并且可以在交易内评估A和B的真值以产生输出。在交易可能有效(“真”)或无效(“假”)的意义上,输出必须是二进制的。
[0079] 但是,输出可以用于几个更复杂的功能中的任何一个。例如,它可能代表满足一系列条件的重要支付的临时支付,或者它可能是一项微不足道的支付,但仍然可以作为事件的安全永久记录。以下提供区块链门的可变使用的进一步示例。
[0080] 存在许多不同类型的逻辑门,所有这些都属于本发明的范围。一般而言,有几个基本的2输入门足以构成任何电路,排序不分先后:
[0081]
[0082] 另一个常用的门是非门(NOT gate),它只有一个输入;它的输出是输入的相反值。门通常以“真值表”的形式呈现,提供输入值的每种可能的组合以及相关的输出值。例如,表
1显示了与门(AND gate)和非门。
[0083] 表1:与门和非门的真值表
[0084]
[0085] 所有八个基本双输入门如表2所示。
[0086] 表2:8个双输入门
[0087]A B AND OR XOR NAND NOR XNOR IMP N-IMP
0 0 0 0 0 1 1 1 T F
1 0 0 1 1 1 0 0 F T
0 1 0 1 1 1 0 0 T F
1 1 1 1 0 0 0 1 T F
[0088] 实际上,在给定两个二进制输入的情况下,有16种可能的不同方式来绘制输出列,根据所需应用,其中多种方式被证明是有用的。这些中的每一个都可以创建为单个门。因此,在通过单个区块链脚本(例如如下“技术1”)实现真值表的情况下,16种可能性中的任何一种都可以在交易锁定脚本内编码。当然,一些可能性可能很少或不具有现实生活应用。为了完整性的目的,前6个门的16种可能性如表3所示。
[0089] 表3:每个可能的双输入,单输出‘门’
[0090]A B   AND         XOR OR NOR XNOR         NAND  
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
[0091] 如前文所述,本发明提出了一种解决方案,其中创建区块链交易以实现逻辑门的至少部分功能。此门功能在交易的锁定脚本中进行模拟。为方便起见,这种锁定脚本在本文中可称为“区块链门”或“比特币门”。虽然可以使用替代的区块链协议和平台,同样为了方便起见,可以在示例中引用比特币。
[0092] 应注意,根据已知技术,可以设置区块链交易利用n/m个多重签名(multisig)选项。实际上,就交易所需的签名数量而言,这表现为逻辑门。在n=m的情况下,多重签名操作表现为逻辑与门。但是,这是逻辑门的有限实现,因为它仅涉及或仅受输入内提供的签名数量的影响,并且不允许将区块链实现的逻辑门评估为任何其他类型的输入。另一方面,本发明允许门功能在更宽的一组参数化输入上操作。
[0093] 根据本发明的各个实施例,第一区块链交易(TX1)的锁定脚本用于提供所选逻辑门的功能。也就是说,在第一交易中提供的锁定脚本包含一些代码,这些代码在被执行时将使用所呈现的输入值来根据特定逻辑门的真值表提供输出。因此,选择和安排锁定脚本内的指令,以便实现所需门的真值表。锁定脚本与第一个交易的输出(TXO)相关联。然后生成第二交易(TX2)。第二交易包括输入,该输入包括解锁脚本或与解锁脚本相关联。解锁脚本可用于解锁第一交易的锁定脚本以便花费输出(TXO)。验证导致执行第一个和第二个交易的锁定和解锁脚本。因此,将使用A和B的具体值。如现有技术中已知的,参见图15,说明了如何在交易验证期间评估锁定和解锁脚本。
[0094] 如果执行锁定和解锁脚本得出有效交易,则交易的有效性可以解释为逻辑门的TRUE输出。相反,如果交易验证失败,则可以将其解释为逻辑门的FALSE输出。这是对现有技术的增强,因为根据已知的区块链技术,失败的脚本即是这样。然而,根据本发明,失败的脚本(即不成功的验证)使得能够检测到“错误”输入并随后响应“错误”输入。因此,本发明能够推导和启动有意义的后续行为,而不管输入是真还是假,因为一些动作过程取决于区块链门的输出,无论输出具体是什么。
[0095] 交易的有效性可以通过以下方式确定:
[0096] ·通过计算代理
[0097] ·通过区块链网络上的一个或多个节点
[0098] ·通过检测区块链上的区块内的交易。如上所述,当第二交易被呈现给(比特币)网络以便尝试花费来自第一交易的输出时,挖掘节点将执行其验证任务。如果交易有效,可以将其写入区块链,否则交易将被拒绝。因此,计算代理可以监视区块链的状态以确定该交易是否已经成功发送到分类账。如果在区块链中检测到该交易,则一定表示交易有效,这可以由计算代理解释为逻辑门的TRUE输出。
[0099] 有效性或无效性的确定可以作为执行某些动作的触发因素。该动作可以由代理执行,可以控制或影响设备、系统或过程的行为。
[0100] 如图12、13和14所示,可以将第一交易(TX1)称为“启动逻辑门”,因为它定义了要被模拟的门的功能。可以将第二交易(TX2)称为“评估逻辑门”,因为它通过解锁脚本提供将用于评估门输出的值。
[0101] 存在用于实现上述内容的各种技术,如下所述并参考图10至14。
[0102] 技术1
[0103] 图12中示出了本发明的实施例。关键定义属性:
[0104] ·将输入信号A和B提供给单个交易(TX2)的交易输入的解锁脚本;
[0105] ·A和B是“(比特币)谜题”,可能附有一个或多个签名;
[0106] ·TX2的解锁脚本用于尝试使用先前交易TX1的输出;这导致分别执行TX2和TX1的解锁和锁定脚本;
[0107] ·在TX2的解锁脚本中处理A和B以评估为真/假;
[0108] ·然后使用那些处理的值执行相关逻辑,即所选门的代码(在TX1的锁定脚本中提供);
[0109] ·脚本评估然后执行其他逻辑和指令,例如多重签名;注意,如本领域中已知的,多重签名操作与所选逻辑门的代码的执行不同,并且多重签名操作在执行所选逻辑门的代码之后执行。
[0110] 每个谜题代表一个真或假的条件,并在执行锁定脚本期间通过以下方式进行评估:
[0111] ·首先通过解锁脚本向锁定脚本提供解决方案,即谜题的值;
[0112] ·锁定脚本对提供的值进行散列,然后将其与内部存储的散列值进行比较(“内部存储”意味着散列已作为锁定脚本的一部分写入)。所提供的值的散列与存储的散列相等意味着“真”,而不相等意味着“假”;因此,对于每个谜题,散列的比较提供了中间结果;
[0113] ·然后将两个评估条件的中间结果应用于锁定脚本内提供的相关门逻辑代码,以提供表示逻辑门的输出X的最终结果。如果最终结果为真,则使用多重签名操作验证所附签名。
[0114] TX1的锁定脚本可以是比特币协议中已知的P2SH锁定脚本,或者来自备选协议的功能等效项。根据已知技术,P2SH锁定脚本包括赎回脚本的散列,并且TX1输出只能在呈现正确脚本时花费,该正确脚本在散列时与存储在锁定脚本中的散列匹配。因此,关于支付脚本散列交易,尽管锁定脚本“知道”随后将提供的逻辑,实际逻辑在解锁脚本内呈现。如本领域技术人员将理解的,虽然必须知道锁定脚本在这种交易中的行为,但是使用加密安全技术,可以提供实际指令集作为解锁脚本的一部分。这种方法的一个优点是无法辨别赎回脚本的内容或存储的散列,因为在实践中,解决方案通过赎回脚本提供为初始散列,然后在执行锁定脚本期间再次进行散列处理,以便进行比较。因此,可以增强或维护隐私和安全性。
[0115] 在另一个变型中,A和B值可能不会被散列,并且不是测试散列之间的相等性,而是应用另一个测试来导出真和假。例如,A可能是当前道琼斯指数,脚本可能会测试A>(某个预定阈值)。这种方法不会使用P2SH交易类型来比较散列值来得到A和B的中间结果,而是使用锁定脚本中的“条件评估代码”来评估某些其他类型的预定条件。通过这种方式,可以测试许多不同类型的条件的真/假。然后,可以将来自条件评估代码的中间结果传递到锁定脚本的门逻辑部分,最后传递给签名验证。签名验证过程根据本领域的已知技术执行。应当注意,在这种特定情况下,由于A和B的值没有被散列,如果要求保持被测试的条件保密,则该方法不合适。
[0116] 技术2
[0117] 图13中提供了技术2的概况。关键定义属性:
[0118] ·输入A和B包含在解锁脚本中,并(例如,由控制代理)提供给单个交易输入的锁定脚本;
[0119] ·A和B为“真”或“假”,可能附有签名;
[0120] ·A和B代表的条件在交易之外由专用的、基于计算机的代理预先评估,以导出真/假值,然后安全地传输到控制代理;
[0121] ·控制代理创建进一步交易,其中包括解锁脚本,向锁定脚本提供A和B值(以及签名)。
[0122] 因此,技术2与技术1相同,不同的只是其在将条件呈现给解锁脚本之前通过计算代理来评估条件。与技术1一样,在第一交易的锁定脚本中提供模拟逻辑门功能的代码,并且在验证期间通过进一步交易的解锁脚本提供输入的实际值。
[0123] 技术3
[0124] 图14中提供了技术3的概况。关键定义属性:
[0125] ·将A和B(为同一个交易)提供给两个独立的交易输入的锁定脚本;
[0126] ·A和B是“(比特币)谜题”,可能附有签名;
[0127] ·使用SIGHASH标志的相关组合(例如ANYONECANPAY),两个独立的代理分别将A和B提供给交易模板(最终由控制代理完成);
[0128] ·在每个锁定脚本中,A和B被评估为真/假,然后锁定脚本执行相关的门逻辑;
[0129] ·然后,每个脚本执行其他逻辑,例如根据现有技术的签名检查。
[0130] 要使整个交易有效,每个输入必须有效,这就实现了AND真值表。相同的技术可用于任何数量的输入,即,不是评估两个条件A和B,而是可以将任何数量的条件A,B C......设置为创建交易的要求。
[0131] 模板交易
[0132] 在一个或多个实施例中,可以提供交易模板,将其复制然后用A和B输入填充,以创建可以广播到区块链网络的交易。如果广播交易被网络接受为有效,则可以将其解释为如上所述的“真”输出,但也用于在区块链上提供永久的、不可改变的记录。A和B通常表示可以评估为真或假的条件。可以评估任何类型的条件,并且可以使用任何类型的数据来评估条件。例如,条件可能涉及现实世界中的事件、信号的接收或缺失、计算的成功完成等。尽管这个清单是无限的,但以下代表了可以对其进行测试的不同类型条件的非常小的指示性样本。
[0133] 在区块链门中使用的可以测试真/假的示例条件:
[0134] 1.现在的日期是2025年6月30日;
[0135] 2.已达到第1,000,000比特币区块;
[0136] 3.一个实体发送了一个编码信号(例如鲍勃(Bob)刚刚说“GO!”来花费交易);
[0137] 4.位置X的温度低于Y℃;
[0138] 5.道琼斯指数目前在20,000以上;
[0139] 6.可识别为Juanita Shalala Morgensen-Smythe的人刚刚结婚;
[0140] 7.(等)
[0141] 区块链门可以由任何实体创建。但是,优选实施例是设置一个或多个自动软件代理以执行与区块链门的创建、维护和传输相关的功能。术语“自动化”可以理解为完全通过程序的执行来执行,而无需人工干预来完成任务。在一个优选的实施方案中,这些代理能够执行多种功能,其中下文仅列出了一个例子。
[0142] 可以由代理执行的与区块链门相关的示例函数
[0143] 1.一旦检测到“触发”,则监控现实世界中的事件并根据设定的规则执行某些操作;
[0144] 2.一旦检测到“触发”,则监视区块链中的触发器并根据设定的规则执行某些操作;
[0145] 3.获取交易模板的副本,并根据设定的规则使用输入和/或输出对其进行填充,并将交易广播到区块链网络。
[0146] 4.触发时执行其他类型的操作,例如向感兴趣的各方发送警报,或与其他代理通信以发送或接收数据等。
[0147] 在区块链交易中实现逻辑门有许多潜在的应用。如何创建和部署门或门的组合以实现应用的细节超出了本文的范围。然而,本发明可以用于例如电子设备的控制。其可能包括IOT(物联网)设备,例如:报警系统、车辆解锁系统、家电开关、无线传感器网络、SCADA系统(安全地)、工厂控制、逆变器、交易锁定系统、基于时间的保险箱灌溉系统,(等等)。其还可以用于开发自动支付系统和计算。例如:
[0148] a.如果按时收到付款,则发送到输出1,否则发送到输出2并分别计算金额和利息;
[0149] b.ANYONECANPAY区块链交易随着时间的推移而增加或减少.
[0150] 区块链交易中使用的“门”的一些可能的变型
[0151] 1.A和B可以是二进制的(如在经典的门中)。在交易是“真”(有效)或“假”(无效)的意义上,X可以是二进制的;
[0152] 2.A和B可以是加密签名;
[0153] 3.A和B可以是任何数字,代表有意义的值,例如可以是日期;
[0154] 4.A和B可以是有意义值的散列;
[0155] 5.A和B可以是比特币意义上的“谜题”(特定散列的解决方案);
[0156] 6.A和B可以是上述两项或多项的组合(例如,签名+谜题);
[0157] 7.A和B可以是不同的类型的(例如,A=签名+有意义的值;B=谜题)[0158] 8.可能有多个输入,A,B,C,......
[0159] 9.X=真(有效)可能意味着给第三方支付了一些比特币。例如,当满足由A和B代表的某些条件时,然后门逻辑将比特币支付给受益人;
[0160] 10.X=真(有效)可能意味着输出的比特币只是返回给付款人,而交易的目的与付款无关(示例如下);
[0161] 11.X=真(有效)可能意味着触发事件(例如,可能会触发监视代理以执行设定的操作,例如控制IOT设备);
[0162] 12.X=真(有效)可以意味着注册事件,也就是说,交易的目的是充当事件的安全的、不可更改的、永久的记录;
[0163] 13.可以有多个输出,X,Y,....这可能意味着给几个受益人支付了比特币,或者设置了几个触发器,或者是其组合。
[0164] 14.可以存在单个交易,其本身实现了一个门;其在锁定脚本中完成。
[0165] 本发明的实施例
[0166] 在本说明性示例中,我们使用锁定脚本来实现在设备控制应用中使用的异或门的功能。
[0167] 区块链IOT设备(Blockchain IOT Device,简称BID)是被设置为执行预定指令的计算代理,该预定指令安全地存储在BID之外(Off-BID),并且通过加密密钥被访问。“Off-BID”是指指令不在BID本身提供,而是存储在别处,并在需要时被访问。选择和设置这些指令以执行一个所选的任务或多个任务。执行时,指令可以控制和影响IOT设备的行为。BID驻留在IOT本身上,这意味着BID安装在IOT设备之中或之上的存储器中。然而,在其他实施例中,BID可以驻留在设备之外并且具有连接到设备的互联网连接。
[0168] IOT设备有自己的加密密钥(以及IP地址),因此它可以安全地与其他设备或DHT等进行通信和交互。其“操作系统”是一个简单的通用系统,具有一些嵌入式功能,(至少,但不限于)用于:
[0169] ·加密计算;
[0170] ·从外部源(例如DHT)获取指令;
[0171] ·执行简单的操作,例如切换开关(即在实体的IOT设备上)。
[0172] 因此,IOT设备及其相关的BID都不包含它们自己的内置指令,也不“知道”其自身的用途或使用方式。BID仅包含用于从其他地方安全地获取指令的机制。BID只能执行一些简单的操作(以下仅是说明性的而非限制性的):
[0173] ·访问自身的主私钥和公钥对;其也有自身的(可导出的)BTC地址;
[0174] ·将数据发送到IP地址或从IP地址接收数据的能
[0175] ·秘密共享协议计算(如下所述)——在优选实施例中,这些可以嵌入到机器代码中;
[0176] ·查找并解释区块链事件
[0177] ·操作并控制其所连接的实体设备(通过标准API,基本上只是一组开关)[0178] BID的传入和传出通信使用如下所述的安全机制加密,其使得能够使用共享的秘密创建密钥。这就允许:
[0179] (i)更高的安全性,从而避免“黑客攻击”;
[0180] (ii)简单的通用软件升级协议
[0181] (iii)设备不可知论
[0182] 因此,本发明的这个实施例提供了一种可用于任何IOT设备的通用操作系统。设备本身未被编程——所有程序单独存储并在设置时(或者,在一些实施例中,在执行时)加载到设备中。
[0183] 现在参看图1,系统100包括第一和第二客户端设备(分别被标记为102a和102b),以及BID控制系统104。BID控制系统104用于接收来自第一客户端设备102a和第二客户端设备102b的输入并将信息发送到第一客户端设备102a和第二客户端设备102b。在该示例用例中,第一和第二客户端设备102a,102b是可由BID控制系统104检测的射频识别设备(RFID)。控制系统104可运行以使用区块链并且可运行以将输出发送到区块链。
[0184] 我们将使用卡罗尔(Carol)的两只名为阿基米德(Archimedes)(A)和伯特兰(Bertrand)(B)的狗作为例子来描述控制系统104如何工作。阿基米德和伯特兰一整天都待在后院,后院只有它们两个。只要不一起吃饭,它们就彼此友好。只要一起吃饭,它们就会由于某种原因而变得好斗甚至打起架来。A和B都佩戴有识别RFID项圈,即第一RFID项圈102a和第二RFID项圈102b,可由物联网(IOT)设备101检测。该IOT设备是自动喂食器,其分配定量食物供其中一只狗食用,即BID控制系统104控制IOT供给装置的操作。
[0185] 在该示例中,BID 104是提供于IOT自动喂食器上的软件资源或元件,并且与喂食器交互以控制其功能。
[0186] BID从DHT下载并安装其指令,从而开始工作。在这些指令修改之前,不需要再次执行此操作。例如,可能是当需要升级BID或者要完全修改BID的行为时,可以修改其指令集以检测三个或更多个RFID信号。
[0187] 控制代理使用由BID传输的值来创建区块链交易,并且还在每次迭代之后与BID共享新的秘密,如下所述。
[0188] 使用区块链交易来实现BID控制系统104的功能,该区块链交易使用锁定脚本锁定:
[0189] OP_HASH160OP_EQUAL
[0190] 创建交易以(通过链接到分布式散列表(DHT)的元数据)提供指令集来控制IOT自动喂食器设备,可以包括根据下面描述的内容建立的至计算资源的指令。元数据可以包括指向可访问指令的位置的指针或引用,而不是存储指令在交易本身。因此,指令可以保持在“区块外(off-block)”。
[0191] 区块链不仅提供用于控制活动的机制,还记录已发生的事件的信息。例如,区块链提供了以下功能:计算喂食次数,记录喂食时间、哪只狗吃的,以及判断是否已分配最大食物配给等。区块链还提供加密安全性。
[0192] 交易的一个重要功能是确保只有当一只狗出现在喂食器前时才分配食物。因此,需要在交易的脚本中构建一些条件,这是通过XOR功能实现的,如图2所示的真值表:
[0193] ·如果A和B都没有在喂食器前,则不分配食物;
[0194] ·如果A在喂食器前而B不在,则分配食物;
[0195] ·如果B在喂食器前而A不在,则分配食物;
[0196] ·如果A和B都在喂食器前,则不分配食物。
[0197] 当A或B在喂食器前时,RFID信号从各自的客户端设备——即第一RFID项圈102a或第二RFID项圈102b,发送到自动喂食器的控制系统104,以解锁狗的安全当前谜题(puzzle)解决方案(在每次迭代后,其被新的谜题解决方案安全替换)。如果A或B不在喂食器前,则从各自的RFID项圈传输随机数到喂食器。也就是说,一只狗“在喂食器前”意味着它的RFID项圈位于喂食器的可检测范围内。如果是这种情况,则解锁相关谜题以进行传输。如果不是这样,则默认为随机数。
[0198] 本领域已知,因此,谜题解决方案是这样一种数据:当对该数据进行散列时,会产生一个值,当该值与(比特币)脚本中的存储值进行比较时提供匹配。也就是说,该过程是:将秘密值(“解决方案”)进行散列并存储在锁定脚本中以供稍后比较。为了解锁脚本,将秘密呈现给锁定脚本,锁定脚本首先对所呈现的值进行散列,然后将该值与其所存储的散列进行比较。如果比较结果为二者相等,则比较结果为“TRUE”。在实践中,存储的值是秘密的双散列(DOUBLE-hash),而呈现的值是秘密的单散列(SINGLE-hash)。对于脚本的输入,这使得任何长度的秘密总是会减少到标准的可管理大小(即总是160位长)。
[0199] 自动喂食器BID执行其指令,使用与BID的密钥/对相关的查找关键字从DHT获取指令。控制代理管理流向/来自BID的数据(即,与RFID信号有关、与BID的指令集无关的数据)。因此,自动喂食器BID监视其自身状态。它存储从单独的控制代理103接收的两个秘密值(S1和S2)。控制代理103可以是适当编程的计算资源,用于监视喂食过程。当在范围内检测到狗的RFID项圈时,有条件地使用秘密值S1和S2。基于从合适的DHT获取到的指令,当检测到在范围内(以及其它条件,涉及一天中时间、之前喂过的次数、其它限制条件等等)的RFID时,控制代理103向通用代理(Generic Agent)发送信号作为其控制代理(见下文)。所述信号包括:
[0200] ·如果检测到阿基米德的RFID,则S1(=Puzzle-A-Solution),否则为随机数;
[0201] ·如果检测到伯特兰的RFID,则S2(=Puzzle-B-Solution),否则为随机数;
[0202] 然后自动喂食器BID:
[0203] ·自动喂食器检查交易的有效性,或者在一些实施例中可能会检查网络上的有效交易(交易可能已经或可能还没有公布在区块上,但在任何条件下都必须是有效的交易)。此交易由控制代理创建和广播。如果嵌入的XOR测试已通过,则交易有效。如果未通过,则交易是无效的,并且不会传播到区块链网络上的第一“中继段(hop)”之外。因此,BID不会检测到它。或者,如果BID在第一中继段并因此检测到交易,则BID的部分功能(与任何其他节点一样)是验证交易。因此,BID在进行后续动作之前能够检测出交易是否有效。因此,有效交易也保证了已将所需信息——即关于喂食事件的信息,存储并记录在区块链上。
[0204] ·如果上面的回答为真(TRUE),则BID执行其条件指令——在这种情况下,它会分配一些食物;
[0205] ·BID从控制代理103接收传输,使其能够共享两个秘密(根据下文,为S1和S2),并在内部更新这些秘密值,为下一步的迭代做准备。
[0206] 比特币交易的锁定脚本以下式表示:
[0207] OP_HASH160OP_EQUAL OP_SWAP
[0208] OP_HASH160OP_EQUAL
[0209] OP_NUMEQUAL OP_NOT OP_VERIFY
[0210] OP_1metadata1PubK-Carol OP_2OP_CHECKMULTSIG
[0211] 其中:
[0212] Puzzle-A是OP_HASH160(Puzzle-A-Solution)的等效结果;
[0213] Puzzle-B是OP_HASH160(Puzzle-B-Solution)的等效结果;
[0214] metadata1(元数据1)包含对存储在DHT中的编码指令的引用;
[0215] PubK-Carol是卡罗尔的公钥。
[0216] 注意,代理的程式编写可以是硬编码的,或者也可以从DHT获取其自己的指令。按照下文列出的过程来存储和访问编码指令,用于使用元数据引用来自区块链交易的合约。可以使用下文列出的过程安全保存或重新创建卡罗尔的公钥。
[0217] 为了解锁上文示出的说明性区块链交易,将需要以下脚本:
[0218] Sig-Carol Puzzle-B-solution Puzzle-A-Solution[0219] 我们参考图3来说明以下步骤。
[0220] 控制系统104可运行以对所呈现的谜题-A解决方案进行散列,并将其与在步骤S300中从存储器获取的谜题-A的存储版本(存储版本是解决方案的散列)进行比较。谜题-A的存储版本可以存储在控制系统104的本地存储中或任何其他合适的存储介质中。如果二者相同,则堆栈顶部=1,而如果二者不同,则堆栈顶部=0。
[0221] 然后,在步骤S302中,将堆栈顶部与堆栈上的第二项进行调换,该第二项是puzzle-B解决方案。对puzzle-B解决方案进行散列,并将其与从存储器获取的谜题-B的存储版本进行比较,并再次以与S300相似的方法将1或0推送到堆栈的顶部。谜题-B的存储版本可以存储在控制系统104的本地存储中或任何其他合适的存储介质上。
[0222] 此时,顶部两个堆栈项为0或1。在步骤S304中,如果数字相等则OP_NUMEQUAL返回1,否则返回0,这与XOR真值表完全相反。
[0223] 在步骤S306中,OP_NOT翻转堆栈的顶部项以产生所需的XOR结果。
[0224] 在步骤S308中,OP_VERIFY检查堆栈的顶部项是否为1,如果不是——即如果XOR操作失败,则立即将交易标记为无效,因为来自第一和第二客户端设备的不止一个输入返回了匹配的puzzle解决方案。其结果是由于IOT分配器前的狗多于一只,没有食物被IOT分配器分配。也就是说,控制系统104的输出由底层比特币交易的执行来控制。
[0225] 如果OP_VERIFY返回1,则控制系统104中的处理返回到脚本的多签名(multi-sig)部分。其中在步骤S310对卡罗尔的签名的存在进行检验。
[0226] 在解锁脚本分析中由控制系统104执行的堆栈操作如下所示。首先,控制系统104对解锁脚本进行散列,以使用OP_EQUAL将散列与解锁脚本的散列进行比较。接下来,执行解锁脚本。
[0227]
[0228]
[0229]
[0230] 我们现在解释另一个例子,说明如何使用比特币交易来实现异或门的功能。
[0231] 鲍勃(Bob)看到XYZ公司的股票呈上涨趋势,于是决定如果趋势持续,他将会买入股票。因此,他设定了股价的阈值,如果价格高于此值,他将买入(在他看来,上升趋势肯定是真的并且将继续上升)。
[0232] 或者,他希望在市场整体低位时进入市场,因此即使XYZ股票的价值低于他设定的阈值,他也认为市场指数低于另一个阈值将成为买入XYZ的另一触发因素。
[0233] 但是,如果这两个条件都为真,即如果超过阈值并且市场指数低于定义的阈值,则他不想购买XYZ。这是因为(在他看来)市场整体低位加XYZ股票达到他的阈的组合实际上表明股价即将下跌。
[0234] 输入A和B的实际值(与真值相对)如下:
[0235] 输入A=XYZ股票的当前价格
[0236] 输入B=当前市场指数值
[0237] 真值,即A和B各自的阈值,如下:
[0238] A>$32.08/股评估为真
[0239] B<5320.01评估为真
[0240] 在异或门中,输出X=真,意味着触发1000股XYZ的购买订单。
[0241] 如果鲍勃不关心他的策略是否透明,他可以设置门交易来直接在所述比特币交易的锁定脚本内评估A和B,如下所示:
[0242] <32.08>OP_GREATERTHAN OP_SWAP<5320.01>OP_LESSTHAN
[0243] OP_NUMEQUAL OP_NOT OP_VERIFY OP_1metadata1PubK-Bob
[0244] OP_2OP_CHECKMULTSIG
[0245] 然后,为了解锁此交易,需要以下脚本:
[0246] Sig-Bob B A
[0247] 也就是说,锁定脚本使用锁定脚本内的脚本命令评估是否已超过A和B的阈值。
[0248] 应当理解,先前呈现的脚本分析将非常类似于针对鲍勃描述的情况。不同之处在于,不是使用操作OP_EQUAL比较A和B等于某些值,而是使用操作OP_GREATERTHAN和OP_LESSTHAN评估A和B是否大于或小于存储的值。
[0249] 尽管关于鲍勃的示例涉及股票价格和市场指数,但是这两个值可以是任何物理上可测量的参数,并且可以是上述两个示例的组合。例如,在用于监测制冷单元的控制系统中,A可以是温度,B可以是物理参数,如果门打开则评估为真,如果门关闭则评估为假。然后可以通过A超过阈值温度值并且B评估为假而解锁脚本,即温度高于阈值温度并且门关闭,因为这可以指示制冷单元中出现重大问题,即泄漏。这可以使用锁定脚本中的OP_GREATERTHAN和OP_NUMEQUAL命令来评估。或者,可以使用计算代理来评估A和B,建立计算代理是为了监测各个变量。
[0250] 使用共享秘密创建密钥
[0251] 可以安全地保存或重新创建密钥。具体地,在私钥可以用于导出公钥的情况下,私钥可以分成部分存储。
[0252] 用户——也就是爱丽丝(Alice)或鲍勃(Bob)可以保存他们的私钥的一部分,服务提供商可以保存第二部分,而第三部分可以保存在远程安全站点中。可以使用三个部分中的任何两个来重构私钥,或者更概括地,可以使用n个部分中的任意m个部分来重构私钥。
[0253] 如果私钥可以重构,那么私钥可以用于在使用时重新创建公钥,然后私钥和公钥可以在使用后再次丢弃。
[0254] 可以使用夏米尔秘密共享方案(Shamir’s Secret Sharing Scheme)来达到拆分私钥的目的。可以使用以下方法从主密钥确定性地导出私钥公钥对。该方法使得参与者可以共享秘密值而无需传输它们。
[0255] 系统可以使用子密钥生成方法为参与者生成公钥。如下所述:
[0256] 图4示出了系统1,其包括通过通信网络5与第二节点7通信的第一节点3。第一节点3具有相关的第一处理设备23,第二节点5具有相关的第二处理设备27。第一和第二节点3,7可以包括电子设备,例如计算机,电话,平板计算机,移动通信设备,计算机服务器等。在一个示例中,第一节点3可以是客户端(用户)设备,第二节点7可以是服务器。服务器可以是数字钱包提供商的服务器。
[0257] 第一节点3与具有第一节点主私钥(V1C)和第一节点主公钥(P1C)的第一非对称密码对相关。第二节点(7)与具有第二节点主私钥(V1S)和第二节点主公钥(P1S)的第二非对称密码对相关。换句话说,第一和第二节点各自拥有相应的公钥-私钥对。
[0258] 可以在注册过程期间,生成第一和第二非对称密码对,分别用于第一和第二节点3、7,例如钱包的注册。每个节点的公钥可以公开共享,例如通过通信网络5共享。
[0259] 为了在第一节点3和第二节点7处确定共同秘密(CS),节点3、7各自执行相应方法300、400的步骤,而不通过通信网络5沟通私钥。
[0260] 由第一节点3执行的方法300包括步骤330,至少基于第一节点主私钥(V1C)和生成器值(GV)确定第一节点第二私钥(V2C)。生成器值可以基于在第一和第二节点之间共享的消息(M),其可以包括通过通信网络5共享该消息,对此,下文将进一步详述。方法300还包括步骤370,至少基于第二节点主公钥(P1S)和生成器值(GV)确定第二节点第二公钥(P2S)。方法300包括步骤380,基于第一节点第二私钥(V2C)和第二节点第二公钥(P2S)确定共同秘密(CS)。
[0261] 重要的是,同样的共同秘密(CS)也可以通过方法400在第二节点7上确定。方法400包括步骤430,基于第一节点主公钥(P1C)和生成器值(GV)确定第一节点第二公钥(P2C)。方法400还包括步骤470,基于第二节点主私钥(V1S)和生成器值(GV)确定第二节点第二私钥(V2S)。方法400包括步骤480,基于第二节点第二私钥(V2S)和第一节点第二公钥(P2C)确定共同秘密(CS)。
[0262] 通信网络5可能包括局域网、广域网、蜂窝网络、无线通信网络、互联网等等。在这些网络中,数据可以通过通信媒介传送,如电线、光纤、无线传输,数据容易被窃听,比如被窃听者11窃听。方法300、400允许第一节点3和第二节点7均独立地确定共同秘密,而无需通过通信网络5传输共同秘密。
[0263] 因此,一个优点是可以由每个节点安全且独立地确定共同秘密(CS),而不必通过可能不安全的通信网络5发送私钥。接着,共同秘密可以用作秘密密钥(或者作为秘密密钥的基础)。
[0264] 方法300、400可以包括附加步骤。参见图8。方法300可以包括:在第一节点3处,基于消息(M)和第一节点第二私钥(V2C)生成签名消息(SM1)。方法300还包括步骤360,通过通信网络,将第一签名消息(SM1)发送到第二节点7。接着,在步骤440中,第二节点7可以接收第一签名消息(SM1)。方法400还包括以下步骤:步骤450,用第一节点第二公钥(P2C)验证第一签名消息(SM1),以及步骤460,基于验证第一签名消息(SM1)的结果认证第一节点3。有利地,这允许第二节点7认证所声称的第一节点(其中生成第一签名消息)是第一节点3。这基于以下假设:仅第一节点3可以访问第一节点主私钥(V1C),因此只有第一节点3可以确定用于生成第一签名消息(SM1)的第一节点第二私钥(V2C)。应当理解的是,类似地,可以在第二节点7处生成第二签名消息(SM2)并将其发送到第一节点3,使得第一节点3可以认证第二节点7,例如在点对点(peer-to-peer)情境中。
[0265] 可以以各种方式实现在第一和第二节点之间共享消息(M)。在一个示例中,可以在第一节点3处生成消息,然后将其通过通信网络5发送给第二节点7。或者,可以在第二节点7处生成消息,然后将其通过通信网络5发送给第二节点7。在一些示例中,消息(M)可以是公开的,因此可以通过不安全的网络5发送。一个或多个消息(M)可以存储在数据存储器13、17、19中。本领域技术人员将认识到,可以以各种方式实现消息的共享。
[0266] 有利地,可以保持允许重新创建共同秘密(CS)的记录,而记录本身不必私下存储或安全传输。
[0267] 注册方法100、200
[0268] 参考图6描述注册方法100、200的示例,其中方法100由第一节点3执行,方法200由第二节点7执行。这包括为相应的第一和第二节点3、7建立第一和第二非对称密码对。
[0269] 非对称密码对包括相关的私钥和公钥,例如在公钥加密中使用的密钥。在该示例中,使用椭圆曲线密码系统(ECC)和椭圆曲线运算的属性生成非对称密码对。
[0270] 在方法100、200中,这包括步骤110、210,第一和第二节点对于共同ECC系统达成一致并使用基点(G)。(注意:基点可以称为共同生成器,但术语“基点”用于避免与生成器值GV混淆)。在一个示例中,共同ECC系统可以基于secp256K1,secp256K1是比特币使用的ECC系统。可以选择、随机生成、或分配基点(G)。
[0271] 至于第一节点3,方法100包括步骤110,选定共同ECC系统和基点(G)。这可以包括从第二节点7或第三节点9接收共同ECC系统和基点。或者,用户接口15可以与第一节点3相关联,由此用户可以选择性地提供共同ECC系统和/或基点(G)。在另一可选方案中,共同ECC系统和/或基点(G)中的一个或他们一起可以由第一节点3随机选择。通过通信网络5,第一节点3可以发送通知给第二节点7,指示所使用的共同ECC系统和基点(G)。而在步骤210中,第二节点7可以通过发送确认,该通知指示认可使用共同ECC系统和基点(G)。
[0272] 方法100还包括步骤120,第一节点3生成第一非对称密码对,其包括第一节点主私钥(V1C)和第一节点主公钥(P1C)。这包括,至少部分地基于允许范围内的随机整数来生成第一节点主私钥(V1C),在共同ECC系统中规定了该允许范围。还包括基于第一节点主私钥(P1C)和基点(G)进行椭圆曲线点乘(elliptic curve point multiplication),来确定第一节点主公钥(P1C),根据如下公式:
[0273] P1C=V1Cx G   (公式1)
[0274] 因此,第一非对称密码对包括:
[0275] V1C:由第一节点保密的第一节点主私钥。
[0276] P1C:被公知的第一节点主公钥。
[0277] 第一节点3可以将第一节点主私钥(V1C)和第一节点主公钥(P1C)存储在与第一节点3相关的第一数据存储器13中。为了安全起见,第一节点主私钥(V1C)可以存储在第一数据存储器13的安全部分中,以确保密钥保持私密。
[0278] 方法100还包括步骤130,通过通信网络5,将第一节点主公钥(P1C)发送到第二节点7,如图6所示。在步骤220中,第二节点7接收第一节点主公钥(P1C)。在步骤230中,第二节点7将第一节点主公钥(P1C)存储在与第二节点7相关的第二数据存储器17中。
[0279] 类似于第一节点3,第二节点7的方法200包括步骤240,生成第二非对称密码对,第二非对称密码对包括第二节点主私钥(V1S)和第二节点主公钥(P1S)。第二节点主私钥(V1S)也是允许范围内的随机整数。而第二个节点主公钥(P1S)由以下公式确定:
[0280] P1S=V1Sx G   (公式2)
[0281] 因此,第二非对称密码对包括:
[0282] V1S:由第二节点保密的第二节点主私钥。
[0283] P1S:被公知的第二节点主公钥。
[0284] 第二节点7可以将第二非对称密码对存储在第二数据存储器17中。方法200还包括步骤250,将第二节点主公钥(P1S)发送到第一节点3。而在步骤140和150中,第一节点3可以接收并存储第二节点主公钥(P1S)。
[0285] 应当理解的是,在一些替代方案中,可以在诸如可信的第三方等与第三节点9相关的第三数据存储19处,接收和存储相应的公共主密钥。这可能包括充当公共目录的第三方,例如证书颁发机构。因此,在一些示例中,只有在确定需要共同秘密(CS)时,才可由第二节点7请求和接收第一节点主公钥(P1C)(反之亦然)。
[0286] 注册步骤可能只需要作为初始设置进行一次。
[0287] 会话发起并由第一节点3确定共同秘密
[0288] 现在将参考图7说明确定共同秘密(CS)的示例。共同秘密(CS)可以用于第一节点3和第二节点7之间的特定会话、时间、交易或其他目的。人们可能不希望使用相同的共同秘密(CS),或者说这样做不安全。因此,可以在不同的会话、时间、交易等之间更改共同秘密(CS)。
[0289] 提供以下内容用以说明上述安全传输技术。
[0290] 生成消息(M)310
[0291] 在该示例中,由第一节点3执行的方法300包括步骤310,生成消息(M)。消息(M)可以是随机的、伪随机的或用户定义的。在一个示例中,消息(M)基于Unix系统时间(Unix Time)和随机数(nonce)(和任意值)。例如,消息(M)可以为:
[0292] 消息(M)=UnixTime+nonce   (公式3)
[0293] 在一些示例中,消息(M)是任意的。然而,应当理解,消息(M)可以具有在某些应用中可能有用的选择性值(例如Unix系统时间等)。
[0294] 方法300包括步骤315,通过通信网络5将消息(M)发送到第二节点7。消息(M)可以在不安全的网络上发送,因为消息(M)不包含关于私钥的信息。
[0295] 确定生成器值(GV)320
[0296] 方法300还包括步骤320,基于消息(M)确定生成器值(GV)。在这个例子中,这包括确定消息的加密散列。加密散列算法的一个示例包括SHA-256,以创建一个256位生成器值(GV)。即:
[0297] GV=SHA-256(M)   (公式4)
[0298] 应当理解,其他散列算法也可以使用。其可以包括安全散列算法(Secure Hash Algorithm,简称“SHA”)系列中的其他散列算法。一些具体示例包括SHA-3子集中的实例,包括SHA3-224,SHA3-256,SHA3-384,SHA3-512,SHAKE 128,SHAKE256。其他散列算法可以包括RACE原始完整性基元评估消息摘要(RACE Integrity Primitives Evaluation Message Digest,简称“RIPEMD”)系列中的散列算法。具体示例可以包括RIPEMD-160。其他散列函数可以包括基于Zémor-Tillich的散列函数和基于背包(knapsack)的散列函数的系列。
[0299] 确定第一节点第二私钥330
[0300] 然后方法300包括步骤330,基于第二节点主私钥(V1C)和生成器值(GV)确定第一节点第二私钥(V2C)。根据以下公式,V2C可以基于第一节点主私钥(V1C)和生成器值(GV)的标量相加之和:
[0301] V2C=V1C+GV   (公式5)
[0302] 因此,第一节点第二私钥(V2C)不是随机值,而是确定性地从第一节点主私钥导出。加密对中的相应公钥,即第一节点第二公钥(P2C),具有以下关系:
[0303] P2C=V2Cx G   (公式6)
[0304] 将公式5中的V2C代入公式6中,则:
[0305] P2C=(V1C+GV)x G   (公式7)
[0306] 其中,“+”运算符指椭圆曲线点加法。注意椭圆曲线密码学代数具有分配律,公式7可以表示为:
[0307] P2C=V1Cx G+GV x G   (公式8)
[0308] 最后,公式1可以代入公式7,则:
[0309] P2C=P1C+GV x G   (公式9.1)
[0310] P2C=P1C+SHA-256(M)x G   (公式9.2)
[0311] 因此,在已知第一节点主公钥(P1C)和消息(M)的情况下,可以导出对应的第一节点第二公钥(P2C)。第二节点7可以具有这样的知识以独立地确定第一节点第二公钥(P2C),这将在下文关于方法400进一步进行详细讨论。
[0312] 基于消息和第一节点第二私钥生成第一签名消息(SM1)350
[0313] 方法300还包括步骤350,基于消息(M)和确定的第一节点第二私钥(V2C)生成第一签名消息(SM1)。生成签名消息包括应用数字签名算法对消息(M)进行数字签名。在一个示例中,这包括将第一节点第二私钥(V2C)应用于椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm,简称“ECDSA”)中的消息以获得第一签名消息(SM1)。ECDSA的实例包括基于具有secp256k1、secp256r1、secp384r1、se3cp521r1的ECC系统的椭圆曲线数字签名算法。
[0314] 在第二节点7处,采用对应的第一节点第二公钥(P2C)来验证第一签名消息(SM1)。第二节点7可以使用对第一签名消息(SM1)的验证来认证第一节点3,这将在下面的方法400中进行讨论。
[0315] 确定第二节点第二公钥370’
[0316] 然后,在步骤370中,第一节点3可以确定第二节点第二公钥(P2S)。如上所述,第二节点第二公钥(P2S)可以至少基于第二节点主公钥(P1S)和生成器值(GV)。在该示例中,由于将公钥确定为具有与基点(G)进行椭圆曲线点乘的私钥(步骤370’),所以可以以类似于公式6的方式表达第二节点第二公钥(P2S),如:
[0317] P2S=V2Sx G   (公式10.1)
[0318] P2S=P1S+GV x G   (公式10.2)
[0319] 公式10.2的数学证明与上述用于导出第一节点第二公钥(P2C)的公式9.1的数学证明相同。应当理解,在步骤370中,第一节点3可以独立于第二节点7确定第二节点第二公钥。
[0320] 在第一节点3处,确定共同秘密380
[0321] 然后,在步骤380中,第一节点3可以基于所确定的第一节点第二私钥(V2C)和所确定的第二节点第二公钥(P2S)来确定共同秘密(CS)。共同秘密(CS)可以由第一节点3通过以下公式确定:
[0322] S=V2Cx P2S   (公式11)
[0323] 在第二节点7处执行的方法400
[0324] 现在将描述在第二节点7处执行的对应方法400。应当理解,这些步骤中的一些步骤类似于上述由第一节点3执行的步骤。
[0325] 方法400包括步骤410,通过通信网络5接收来自第一节点3的消息(M)。这可以包括在步骤315由第一节点3发送的消息(M)。然后在步骤420中,基于消息(M),第二节点7确定生成器值(GV)。由第二节点7确定生成器值(GV)的步骤420类似于由上述第一节点执行的步骤320。在该示例中,第二节点7独立于第一节点3执行该确定步骤420。
[0326] 下一步骤包括步骤430,基于第一节点主公钥(P1C)和生成器值(GV)确定第一节点第二公钥(P2C)。在该示例中,由于将公钥确定(步骤430’)为具有与基点(G)进行椭圆曲线点乘的私钥,所以可以以类似于公式9的方式表达第一节点第二公钥(P2C),如:
[0327] P2C=V2Cx G   (公式12.1)
[0328] P2C=P1C+GV x G   (公式12.2)
[0329] 公式12.1和12.2的数学证明与上述针对公式10.1和10.2所讨论的内容相同。
[0330] 第二节点7认证第一节点3
[0331] 方法400可以包括由第二节点7认证所声称的第一节点3是第一节点3的步骤。如前所述,这包括接收来自第一节点3的第一签名消息(SM1)的步骤440。然后,在步骤450,第二节点7可以使用在步骤430确定的第一节点第二公钥(P2C)验证第一签名消息(SM1)上的签名。
[0332] 验证数字签名可以根据如上所述的椭圆曲线数字签名算法(ECDSA)来完成。重要的是,用第一节点第二私钥(V2C)签名的第一个签名消息(SM1)只能用相应的第一节点第二公钥(P2C)正确地验证,因为V2C和P2C来自一个密码对。由于这些密钥是由第一节点3注册时生成的第一节点主私钥(V1C)和第一节点主公钥(P1C)确定的,因此验证第一签名消息(SM1)可以用作认证的基础,即认证发送第一签名消息(SM1)的所谓第一节点是与在注册期间相同的第一节点3。因此,第二节点7还可以基于验证(450)第一签名消息的结果来执行认证(460)第一节点3的步骤。
[0333] 第二节点7确定共同秘密
[0334] 方法400还可以包括步骤470,第二节点7基于第二节点主私钥(V1S)和生成器值(GV)确定第二节点第二私钥(V2S)。类似于第一节点3执行的步骤330,第二节点第二私钥(V2S)可以基于第二节点主私钥(V1S)和生成器值(GV)的标量相加之和,根据以下公式:
[0335] V2S=V1S+GV   (公式13.1)
[0336] V2S=V1S+SHA-256(M)   (公式13.2)
[0337] 然后,在步骤480,第二节点7可以独立于第一节点3,基于第二节点第二私钥(V2S)和第一节点第二公钥(P2C)基于以下公式确定共同秘密(CS):
[0338] S=V2Sx P2C   (公式14)
[0339] 由第一节点3和第二节点7确定的共同秘密(CS)的证明
[0340] 由第一节点3确定的共同秘密(CS)与在第二节点7处确定的共同秘密(CS)相同。现在对公式11和公式14提供相同的共同秘密(CS)的数学证明进行说明。
[0341] 至于由第一节点3确定的共同秘密(CS),公式10.1可以代入公式11,如下所示:
[0342] S=V2Cx P2S   (公式11)
[0343] S=V2Cx(V2Sx G)
[0344] S=(V2Cx V2S)x G   (公式15)
[0345] 至于由第二节点7确定的共同秘密(CS),公式12.1可以代入公式14,如下所示:
[0346] S=V2Sx P2C   (公式14)
[0347] S=V2Sx(V2Cx G)
[0348] S=(V2Sx V2C)x G   (公式16)
[0349] 由于ECC代数是可交换的,因此公式15和公式16是等价的,因为:
[0350] S=(V2Cx V2S)x G=(V2Sx V2C)x G   (公式17)
[0351] 共同秘密(CS)和秘密密钥
[0352] 共同秘密(CS)现在可以被用作秘密密钥,或者作为在第一节点3和第二节点7之间进行安全通信的对称密钥算法中的秘密密钥的基础。
[0353] 共同秘密(CS)可以是椭圆曲线点(xs,ys)的形式。这可以使用由节点3、7所达成一致的标准公开已知操作转换成标准密钥格式。例如,xs值可以是256位的整数,可以用作AES256加密的密钥。它也可以使用RIREMD160转换成160位的整数,用于任何需要这个长度密钥的应用程序。
[0354] 可以根据需要确定共同秘密(CS)。重要的是,第一节点3不需要存储共同秘密(CS),因为这可以基于消息(M)重新确定。在一些示例中,所使用的消息(M)可以存储在数据存储13、17、19(或其他数据存储)中,而不需要主私钥所要求的相同级别的安全性。在一些示例中,消息(M)可以是公开可用的。
[0355] 然而,根据某些应用,共同秘密(CS)可以存储在与第一节点相关联的第一数据存储(X)中,前提是共同秘密(CS)与第一节点主私钥(V1C)一样安全。
[0356] 有利地,基于单个主密钥加密对,该技术可用于确定对应多个安全密钥的多个共同秘密。
[0357] 生成器值的层次结构(密钥)
[0358] 例如,可以确定一系列连续的生成器值(GV),其中可以基于先前的生成器值(GV)确定每个连续的GV。例如,无需重复步骤310至370和410至470以生成连续的单用途密钥,而是通过节点之间的先前协议,双方可以重复地先前使用的生成器值(GV)进行重新散列,以建立生成器值的层级结构。实际上,基于消息(M)的散列,生成器值可以是下一代生成器值(GV’)的下一代消息(M’)。这样做允许计算连续几代共享秘密而无需进一步的协议建立传输,特别是为每一代共同秘密传输多个消息。下一代共同秘密(CS’)可以如下方式计算。
[0359] 首先,第一节点3和第二节点7独立地确定下一代生成器值(GV’)。这类似于步骤320和步骤420,但适用于以下公式:
[0360] M’=SHA-256(M)   (公式18)
[0361] GV’=SHA-256(M’)   (公式19.1)
[0362] GV’=SHA-256(SHA-256(M))   (公式19.2)
[0363] 然后,第一节点3可以确定下一代第二节点第二公钥(P2S’)和第一节点第二私钥(V2C’),类似于上述步骤370和330,但是适用以下公式:
[0364] P2S’=P1S+GV’x G   (公式20.1)
[0365] V2C’=V1C+GV’   (公式20.2)
[0366] 然后,第二节点7可以确定下一代第一节点第二公钥(P2C’)和第二节点第二私钥(V2S’),类似于上述步骤430和470,但是适用以下公式:
[0367] P2C’=P1C+GV’x G   (公式21.1)
[0368] V2S’=V1S+GV’   (公式21.2)
[0369] 然后,第一节点3和第二节点7可以各自确定下一代共同秘密(CS’)。特别地,第一节点3使用以下公式确定下一代共同秘密(CS’):
[0370] CS’=V2C’x P2S’   (公式22)
[0371] 第二节点7使用以下公式确定下一代共同秘密(CS’):
[0372] CS’=V2S’x P2C’   (公式23)
[0373] 可以以相同的方式计算更多代(CS”,CS”’等)以创建链层级结构。该技术要求第一节点3和第二节点7都跟踪原始消息(M)或原始计算的生成器值(GV)以及它所涉及的节点。由于这是公开信息,因此没有关于保留此信息的安全问题。因此,该信息可以保存在“散列表”(将散列值链接到共同密钥)上,并且通过网络5自由分发(例如使用流技术(Torrent))。
此外,如果层级结构中的任何单个共同秘密(CS)遭到破坏,不会影响层级结构中任何其他共同秘密的安全性,前提是私钥V1C、V1S仍然安全。
[0374] 密钥的树结构
[0375] 除了如上所述的链(线性)层级结构之外,还可以创建树结构形式的层级。利用树结构,可以确定用于不同目的的各种密钥,例如认证密钥,加密密钥,签名密钥,支付密钥等,这些密钥都链接到单个安全地维护的主密钥。这在图12中得到最充分的说明,其示出了具有各种不同密钥的树结构901,其中每个都可用于与另一方创建共享密钥。树枝可以以几种方式完成,其中三种如下所述。
[0376] (i)主密钥繁衍
[0377] 在链层级结构中,通过向原始主密钥添加大量繁衍的重新散列的消息来创建每一个新的“链接”(公钥/私钥对)。例如,(为清楚起见,仅示出第一节点3的私钥):
[0378] V2C=V1C+SHA-256(M)   (公式24)
[0379] V2C’=V1C+SHA-256(SHA-256(M))   (公式25)
[0380] V2C”=V1C+SHA-256(SHA-256(SHA-256(M)))   (公式26)
[0381] …
[0382] 要创建分支,任何密钥都可以用作子-主密钥。例如,可以采用与常规主密钥相同的操作,通过向子-主密钥添加散列,V2C’用作子主密钥(V3C):
[0383] V3C=V2C’+SHA-256(M)   (公式27)
[0384] 子主密钥(V3C)本身可以具有下一代密钥(V3C’),例如:
[0385] V3C’=V2C’+SHA-256(SHA-256(M))   (公式28)
[0386] 这提供了树结构903,使用如图13所示的主密钥繁衍方法。
[0387] (ii)逻辑关联
[0388] 在此方法中,树(公钥/私钥对)上的所有节点生成为链(或其它形式),树中节点之间的逻辑关系由表维护,使用指针,表中树中的每个节点仅与树中的父节点相关联。因此,可以使用指针来确定相关的公钥/私钥对,以确定会话的共同密钥(CS)。
[0389] (iii)消息多重性
[0390] 可以通过链或树中的任何点引入新消息来生成新的私钥/公钥对。消息本身可以是任意的,或者可以带有一些含义或功能(例如,它可能与“真实的”行帐号等有关)。可能希望安全地保留用于形成新的私钥/公钥对的这种新消息。
[0391] 编码方案
[0392] 交易的元数据可用于访问存储在块外文档中的指令。本文档可能被称为“合约”。用于引用合约的元数据可以以各种方式格式化。但是,这里描述的是合适的编码方案。
[0393] 如果合约所规定的权利赋予了合约持有人或所有者,则合约可以转移。不可转移的合约的一个例子是合约方被命名的合约,也就是说,权利被赋予给有特定名字的实体而不是合约的持有者。本编码方案仅讨论可转移的合约。
[0394] 代币表示特定合约,该合约详述或定义了由合约转移的权利合约。根据本发明,代币是比特币交易形式的合约的表示。
[0395] 该编码方法使用包括三个参数或数据项的元数据。此数据可以表明:
[0396] i)合约规定的可用份额的数量(在本文中可以表示为“NumShares”);
[0397] ii)从发送方转移到至少一个接收方的一定数量的转移单位(在本文中可以表示为“ShareVal”);和
[0398] iii)用于计算该数量的转移单元的值的因子(这在本文中可称为“挂钩率(pegging rate)”)。
[0399] 该编码方案的一个优点是它可以仅使用上述三个参数来封装合约,或将合约表示为区块链上的代币。实际上,可以至少使用这三个数据项来规定合约。由于该编码方案可用于任何类型的可转移的合约,因此可以设计和应用通用算法。这些元数据项的进一步细节具体如下。
[0400] 可分割的代币是交易输出中的价值可被细分为更小量的代币(即,在多个交易中分配)。原型是代币化的法定货币。可分割的合约定义为指定非零挂钩率的合约。对于可分割的合约,在交易输出中转移的代币化价值通过挂钩率,与基础比特币(BTC)价值相关联。也就是说,合约规定了持有人在挂钩率方面的权利。对于不可分割的代币,没有挂钩率,合约以固定价值规定了持有人的权利(例如不记名债券:‘此合约可以兑换1000美元’或礼券“此合约可用来理发一次”)。对于不可分割的合约,基础交易BTC价值与合约价值无关。
[0401] “基础BTC价值”是指附加到交易输出的比特币金额(BTC)。在比特币协议中,每笔交易输出必须具有非零BTC金额才被认为是有效的。实际上,BTC金额必须大于设定的最小值(称为“尘埃(dust)”),在撰写本申请文件时,目前设定为546聪(satoshis)。1比特币定义为等于1亿聪。由于比特币交易仅用作帮助所有权交换的手段,因此实际的基础BTC金额是任意的:真正的价值由合约文件规定。从理论上讲,每一个代币都可以被尘埃携带。
[0402] 根据当前的编码方案,特别是对于可分割的代币,基础BTC价值确实具有含义:它通过挂钩率与合约价值相关。挂钩率本身是任意的,并且选择挂钩率以便使基础BTC价值保持较小。使用挂钩率而不是简单地使尘埃基础化每个代币交易的原因是,因为本发明的协议帮助了可分割性:当代币被分成几个较小金额的交易输出时,不必调整原始合约。不如说,每个细分代币的合约价值仅根据挂钩率和基础BTC价值的细分金额计算。
[0403] 有限代币是其中总发行价值由固定的非零数量的份额固定(或“限制”)的代币,其由称为NumShares的量定义。因此,根据有限合约不可再发行进一步的份额。例如,赛的部分所有权合约限于赛马的100%(例如每份额1%的100份额或每份额10%的10份额,等等)。无限合约意味着发行人能够包销进一步的份额发行,例如,将所需金额的法定货币加入其储备账户。必须在所有合约中明确说明NumShares。有限合约必须满足NumShares>0;通过设置NumShares=0来表示无限合约。
[0404] 典型的例子是货币储备(类似于黄金储备),使得储备银行账户中持有的总价值与现有期票(即未赎回的代币)中的总价值相匹配。这一概念不仅限于货币储备,还包括库存。例如,持有印花T恤代币的发行者开始时可库存10,000件T恤,并可发行一个可分的代币来代表这10,000件T恤(其中,例如,每份额=1件T恤)。可以细分原始代币,并且根据挂钩率定义的交易输出的基础BTC价值,每个细分的代币可以兑换多件T恤。然而,如果需求增加,发行人可能决定发行更多份额(即增加流通股数量(比如)再加10,000份额)。在这种情况下,发行人有责任在其储备账户(即库存仓库)中再存放10,000件T恤,以便包销进一步的发行。
因此,任何时候库存中的T恤总数(其中库存充当“储备账户”)=未赎回的份额的总数。
[0405] 挂钩率仅适用于可分割的合约,其中份额的价值(由名为ShareVal的量表示)与基础BTC金额挂钩。例如,合约可以指定发行人承诺以每个基础1BTC10,000美元的费率赎回代币。这意味着(例如)具有代币化基础输出值15,400聪的交易将可兑换为1.54美元。挂钩率的值为0表示合约是不可分割的(即只能整体转移,如不记名债券)。当挂钩率设置为0(表示不可分割的代币)时,基础BTC值与合约价值无关,可以设置为任何金额。通常在这种情况下,希望保持基础BTC金额尽可能小(即设置为尘埃)以使操作成本最小化。
[0406] NumShares是(有限)合约下可用的总(固定)份额数。对于有限合约,NumShares必须是大于零的整数。对于无限合约,NumShares不是固定的,因为可以随时发行更多的份额(只要它们被包销),通过将值设置为0来表示。
[0407] 定义份额为转移单位,ShareVal是该单位的价值。例如,对于法定货币,转移单位可以设置为1美分。或者,例如,它可以设置为50美分,在这种情况下,转移只能以多个50美分的“批次”执行。ShareVal也可以表示为百分比:例如,如果饲养员希望以10个相等的份额出售赛马,那么ShareVal=10%。ShareVal必须>0且必须在合约上定义。
[0408] 发行总额(Totallssuance)代表已发行份额的总价值。该价值仅涉及有限合约,无限合约的发行是不固定的,可发行更多份额。如果份额以百分比表示,那么根据定义,Totallssuance=100%。
[0409] 对于有限合约,NumShares,ShareVal和Totallssuance以下列方式相关联:
[0410] NumShares x ShareVal=Totallssuance
[0411] Totallssuance的值为0表示它是无限合约。无限合约的一个例子是法定货币(因此Totallssuance设为0);有限合约的例子有:(i)限量版纪念币(铸造1000枚,其中1股=1枚硬币):Totallssuance=1000x 1=1000个硬币;(ii)在售票场地的座位,其中Totallssuance=可用座位总数。
[0412] 将流通量定义为未花费的代币的总价值(即,由UTXO中的交易确定-未花费的交易输出)。所有未花费的交易的完整集均保存在可用于所有比特币节点的列表中。例如,如果发行人最初发行10,000美元作为法定货币类型代币,并且随着时间的推移,价值5500美元的代币被赎回,那么流通量=4500美元(即未赎回代币的价值)。此价值应与关联的储备帐户中的余额保持一致。
[0413] 适用于本发明实施例的计算资源(“代理”)的说明性示例
[0414] 本发明可以利用适当设置的计算资源(在本文中为“代理”)来执行所期望的过程的自动化方面。以下提供优选代理的示例(其他实施方式也可被使用)。
[0415] 代理可以与区块链一起操作,在图灵机(Turing machine)的实施方式中将其用作不可擦除的纸带(tape)。该代理与区块链网络并行运行,监督和处理(循环)过程的执行。循环过程旨在执行给定任务,例如,过程的自动化,或设备或系统的控制。此并行资源监测区块链的状态,并可以将交易写入区块链。从某种意义上说,它利用区块链作为图灵机的不可擦除的纸带,其定义和特征如下:
[0416] 1.区块链充当图灵机的纸带。区块链中的每个交易代表带上的一个单元格(cell)。该单元格可以包含来自有限字母表的符号。
[0417] 2.带头(tape head)可以读取来自区块的信息,该信息已被写入区块链。
[0418] 3.带头可以将包含许多交易的新块写入区块链的末尾。但是,它们无法写入已存在的块。因此,区块链带是不可擦除的。
[0419] 4.每个交易的元数据可以存储为多重签名支付脚本散列(P2SH)交易的一部分。
[0420] 代理的一个重要功能是充当监测区块链当前状态的自动化实体。它还可以从任何块外(off-block)源接收信号或输入。根据区块链状态和/或接收的输入,代理可以执行某些动作。代理决定要执行哪个(或哪些)动作。这些可能涉及或不涉及“现实世界”(即块外(off-block))中的动作和/或区块链上的动作(例如创建和广播新交易)。代理所采取的动作可能由区块链状态触发。代理还可以决定要向比特币网络广播的下一组交易,并随后写入区块链。
[0421] 代理的动作并行且同时运行在区块链(例如比特币)网络。从某种意义上说,这扩展了区块链(例如比特币)脚本的功能。这种连续监测实施了“循环”控制流构造,使代理和区块链系统的组合具有图灵完备性。
[0422] 图灵机包括两个堆栈:
[0423] ·数据堆栈:这是由上述区块链表示的。
[0424] ·控制堆栈:这是由代理函数表示的。它存储了与重复控制流功能相关的信息。
[0425] 控制堆栈与数据堆栈的分离提供了防止比特币核心内发生无限循环、减轻拒绝服务攻击(denial-of-service attack)的优点。
[0426] 代理管理和运行子例程,这些子例程能够通过任何类型的循环构造(例如,FOR-NEXT,REPEAT UNTIL等)进行循环。本文中描述的说明性实施例包括使用“重复”构造的一个示例的过程。用户可以指定索引(i)和限值(J)。这些分别表示当前迭代次数(通常从0开始计数)和重复循环的总迭代次数。
[0427] 对于每一次迭代:
[0428] 1.索引增量为1。对于退出条件,当索引达到限值时,迭代将停止;
[0429] 2.执行包含“如果条件就动作(if condition then action,简称“(ICTA)”语句的代码块;该动作可以是区块链上或链外的任何动作;
[0430] 3.计算该子例程的加密散列。这可以作为交易的一部分存储在区块链中。由于散列对每个代码都是唯一的,因此可以验证哪个代码已被使用。
[0431] 循环体包括代码块。每个代码块都包含“if condition then action”(ICTA)语句。这就为与以下内容匹配的交易监测了区块链的当前状态:
[0432] ·启动或触发条件(例如,达到特定日期时)。
[0433] ·重复条件(即与前一迭代相关的元数据或散列)。
[0434] ·停止条件(即循环的最后一次迭代)。
[0435] ICTA语句使代理能够根据区块链的当前状态决定下一个要进行的交易。进行下一个交易涉及将交易广播到比特币网络,并将新交易写入区块链。这充当了此迭代已被执行的记录。一旦将交易写入区块链,管理器(Manager)随后将发现上一次迭代已被执行并被写入区块链,并将执行下一次迭代。后者继续,直到当索引(i)达到代码块中指定的限值(J)时重复循环退出。
[0436] 每个交易都以可重复使用的方式保存在区块链中。在比特币实施方式中,交易中的每个签名都附加一个签名散列(SIGHASH)标志。该标志可以采用不同的值,每个值指示在没有该签名的所有者参与的情况下是否可以修改交易的其他部分。可重复使用的交易在交易输入中的一个具有SIGHASH标志“签名散列_任何人可付(SigHash_AnyoneCanPay)”。这允许任何人为交易的输入做出贡献。此参数使代理的ICTA功能能够被执行并重复多次,并使用不同的输入。该功能的使用可以限制在已授权的各方——例如,通过可重复使用的交易的版权
[0437] ICTA代码块的“If条件(if condition)”部分可以监测任何类型的条件。这与其他编程语言(例如C,C++,Java)类似,并且不限于存储在区块链上的信息。例如,它可以监测日期和时间(即达到某个日期和时间)或监测天气(即当温度低于10℃且正在下雨时),监测合约或信托的条件(即当公司A购买公司B时)。
[0438] ICTA代码块的“就动作(Then action)”部分可以执行多个动作。本发明不限制可采取的动作的数量或类型。该动作不限于区块链上的交易,尽管包含与动作相关的元数据的交易可以写入区块链。
[0439] 元数据可以是任何形式的。然而,在一个实施例中,元数据可存储指向文件的超链接,该文件包含与动作相关的更多数据或指令。元数据还可存储指向散列表的超链接,该散列表包含与动作有关的更多数据或指令以及该动作的散列,该动作的散列用作散列表的查找关键字。
[0440] 代理的控制堆栈可以通过多种方式实施,这些方式属于每个用户的特定需求。例如,控制堆栈的重复循环可以基于任何图灵完备语言。一种可能的语言选择是Forth格的基于堆栈的语言。使用这种语言的一个优点是它在编程风格上使控制堆栈与比特币脚本保持一致,而比特币脚本已经广为人知、广泛使用。
[0441] 使用比特币脚本的备用堆栈作为数据存储空间
[0442] 比特币脚本包含命令,也称为操作码(op codes),使用户能够将数据移动到称为“alt堆栈”的备用堆栈(alternative stack)。
[0443] 操作码为:
[0444] ·OP_TOALTSTACK表示将数据从主堆栈的顶部移动到alt堆栈的顶部。
[0445] ·OP_FROMALTSTACK表示将数据从alt堆栈的顶部移动到主堆栈的顶部。
[0446] 这使得来自计算的中间步骤的数据能够存储在alt堆栈中,类似于允许将数据存储在计算器上的“存储器”功能。在一个实施例中,alt堆栈用于配置比特币脚本以解决小的计算任务并将计算结果返回。
[0447] 使用代码注册表管理代理
[0448] 代理还管理其拥有并运行的所有代码的注册表。此注册表的结构类似于将特定关键字映射到特定值的查找表或词典。关键字和值对分别由代码块的散列(H1)和存储代码的互联网协议第6版(IPv6)地址表示。要使用关键字H1获取代码块,查找表用于获取相关的值(这是存储代码的位置)并相应地获取源代码。代码注册表的实现可以多样化。
[0449] 代理的代码的交易元数据,以及循环的重新生成
[0450] 在特定迭代中重新生成代理循环所需的信息作为元数据存储在区块链上记录的交易中。
[0451] 通过这种方式,区块链上的交易存储或提供对给定迭代循环信息的访问,该迭代循环在代理上被执行。该信息可以包括与循环相关的任何变量的值,例如索引i,以及任何其他必要信息,例如代码块中使用的参数值或指定可以访问其他所需信息的位置相关数据。
[0452] 元数据本身作为交易中多重签名支付脚本散列脚本(P2SH)的一部分存储。记录了交易的元数据还能够记录过去如何执行代码的审计跟踪。
[0453] 代理可以通过多种方式,在每次迭代时重新生成重复循环代码块。代码块可以硬编码到代理本身中,也可以存储在非公用或公用文件中,或者存储为非公用或公用散列表文件中的条目,或者上述的组合。代码块可以是带有硬编码变量的静态代码,也可以是静态代码块但包含可以填充的参数。参数可以是任何数据格式的单个值,或者可以是小块代码,或者是上述的组合。可以通过直接从交易中的元数据(例如比特币交易)或从诸如内部数据库或非公用/公共文件或散列表或上述的任何组合的外部源获取它们来填充参数。指向参数值的外部源的指针可能存储在交易中的元数据中。
[0454] 以下步骤提供了代理如何在第i次迭代中重新生成重复循环代码块的一个示例。在本示例中,代码注册表是散列表,散列值充当表的查找关键字,并存储在有关交易的元数据中。
[0455] 1.代理监测用于交易的区块链,该交易包含代码块的散列值,该代码块的散列值与代码注册表中的条目匹配。
[0456] 2.代理找到包含相应散列(H1)的交易。
[0457] 3.代理读取“元数据-代码散列(Metadata-CodeHash)”,获取代码散列(CodeHash)字段以获得H1并使用它来获取代码(C1)。如果RIPEMD-160(SHA256(C1))等于H1,则代码还未更改,可以安全地继续进行下一步。
[0458] 4.代理读取存储索引的“元数据-代码散列”,并在第i次迭代中重新生成代码。换句话说,在适当的迭代中“重新加载”循环。
[0459] 5.用户的签名包含在P2SH命令中,以验证元数据的来源。
[0460] 6.如果循环的此迭代需要这些数据,则代理读取“元数据-输出散列(Metadata-OutputHash)”和“元数据-输出指针(Metadata-OutputPointer)”,以获取前一步骤的输出。
[0461] 应当理解,基于上述变化的不同组合,存在许多不同的用于实现比特币门的模式。以下选择的是仅用于说明的模式,并非旨在进行限制。根据模式的特定属性和门逻辑的预期用途,每个模式可适用于实现一种类型的门,或几种类型的门,或适用于所有类型的门:
[0462] 应当说明的是,上述实施例对本发明进行说明而不是限制本发明,并且本领域技术人员将能够设计许多替代实施例而不脱离由所附权利要求限定的本发明的范围。在权利要求中,括号中的任何附图标记不应解释为对权利要求的限制。词语“包括(comprising)”和“包含(comprises)”等不排除除了在任何权利要求或说明书中作为整体列出的元件或步骤之外的元件或步骤的存在。在本说明书中,“包括(comprises)”意指“包括(includes)或由......组成(consists of)”,“包括(comprises)”意指“包括(including)或由......组成(consisting of)”。元素的单数引用不意味着排除这些元素的复数引用,反之亦然。本发明可以借助于包括若干不同元件的硬件以及借助于适当编程的计算机来实施。在列举了若干装置的设备权利要求中,这些装置中的若干个可以由该硬件的同一个部件来体现。在相互不同的从属权利要求中仅仅列举某些措施并不代表这些措施的组合不能用来获益。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈