首页 / 专利库 / 银行与财务事项 / 比特币地址 / 使用分布式散列表和点对点分布式分类账控制合约的履行的方法和系统

使用分布式散列表和点对点分布式分类账控制合约的履行的方法和系统

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

专利汇可以提供使用分布式散列表和点对点分布式分类账控制合约的履行的方法和系统专利检索,专利查询,专利分析的服务。并且一种用于控制 智能合约 的履行的计算机实现的方法(100)和系统(1)。所述方法包括将合约存储在基于计算机的存储库之上或之中。所述合约与第一用户(U1)和第二用户(U2)之间的 许可 证相关。所述方法还包括通过通信网络接收交易,该交易包括代币从代理(A)到所述第一用户(U1)或所述第二用户(U2)的转移。所述交易包括元数据,所述元数据包括指示所述合约的存储 位置 的标识符。所述方法还包括查询点对点分布式分类账(即 区 块 链 ),以确定所述交易是否包括至少一个未花费的输出(UTXO)。所述方法还包括:对查询所述点对点分布式分类账进行响应,确定是否 修改 所述合约的履行。所述区块链可为 比特币 区块链。,下面是使用分布式散列表和点对点分布式分类账控制合约的履行的方法和系统专利的具体信息内容。

1.一种用于控制合约的履行的计算机实现的方法,所述方法包括:
将合约存储在基于计算机的存储库之上或之中,所述合约与第一用户(U1)和第二用户(U2)之间的许可证相关;
通过通信网络接收交易,所述交易包括代币从代理(A)到所述第一用户(U1)或所述第二用户(U2)的转移,所述交易包括元数据,所述元数据包括指示所述合约的存储位置的标识符;
查询点对点分布式分类账,以确定所述交易是否包括至少一个未花费的输出(UTXO);
以及
对查询所述点对点分布式分类账进行响应,确定是否修改所述合约的履行。
2.根据权利要求1所述的方法,其中所述交易进一步包括确定性赎回脚本地址。
3.根据权利要求1或2所述的方法,其中所述赎回脚本地址是支付脚本散列(P2SH)地址。
4.根据前述权利要求中任一项所述的方法,其中确定步骤包括:
如果从所述点对点分布式分类账中,不能识别出所述至少一个未花费的输出(UTXO),则终止所述合约;或
如果从所述点对点分布式分类账中,识别出所述至少一个未花费的输出(UTXO),则维持所述合约。
5.根据权利要求4所述的方法,其中终止所述合约的步骤包括广播进一步的交易以花费所述至少一个未花费的输出(UTXO)。
6.根据权利要求5所述的方法,其中在广播所述进一步的交易的步骤中,所述进一步的交易包括指令,以在指定的日期和/或时间花费所述至少一个未花费的输出(UTXO)。
7.根据权利要求5或6所述的方法,其中所述进一步的交易包括:
输入,其为所述至少一个未花费的输出(UTXO);以及
赎回脚本,其包括签名、所述元数据、与所述代理相关的代理公钥(PA)以及与所述第一用户(U1)相关的第一用户公钥(PU1)。
8.根据前述权利要求中任一项所述的方法,其中所述合约定义:
至少一个条件,所述至少一个条件与所述第一用户(U1)和所述第二用户(U2)之间的所述许可证的操作有关;以及
至少一个动作,其执行取决于对所述条件的评估。
9.根据前述权利要求中任一项所述的方法,其中所述元数据包括:
所述合约存储在所述基于计算机的存储库中的地址或地址的表示;和/或所述合约的散列。
10.根据前述权利要求中任一项所述的方法,其中查询所述点对点分布式分类账的步骤进一步包括:
通过确定所述至少一个未花费的输出(UTXO)是否存在于所述点对点分布式分类账的未花费的交易输出的列表中,检查所述合约是否已被终止。
11.根据前述权利要求中任一项所述的方法,其中所述合约存储在分布式散列表(DHT)中。
12.根据前述权利要求中任一项所述的方法,其中所述合约包括确定性有限自动机(DFA)以实施所述合约。
13.根据权利要求12所述的方法,其中所述确定性有限自动机(DFA)是使用编码方案来定义的。
14.根据前述权利要求中任一项所述的方法,进一步包括更新所述合约的步骤,通过执行以下步骤:
生成子密钥,所述子密钥涉及与所述合约相关的先前密钥;
生成进一步的赎回脚本,所述进一步的赎回脚本包括所述子密钥、所述合约的位置和所述合约的散列;以及
向所述进一步的赎回脚本支付一定数量的加密货币(C)。
15.根据前述权利要求中任一项所述的方法,进一步包括生成从所述合约导出的子合约的步骤,其中所述子合约与确定性地址相关,通过执行以下步骤生成所述子合约:
使用通过使用种子导出的新公钥;
将所述子合约存储在所述基于计算机的存储库之中或之上,并带有对所述合约的引用;
向所述点对点分布式分类账,广播子合约交易,所述子合约交易包括对所述合约的所述引用;以及
向与所述合约相关的所述元数据添加对所述子合约的引用。
16.根据前述权利要求中任一项所述的方法,其中所述第一用户(U1)和所述第二用户(U2)之间的许可证涉及以下各项中的一项或多项:
计算机软件;以及
数字媒体,包括音乐、视频和电子书。
17.根据前述权利要求中任一项所述的方法,其中所述点对点分布式分类账是所述区块链。
18.根据前述权利要求中任一项所述的方法,其中所述加密货币是比特币。
19.一种计算机软件程序,包括机器可读指令,以使处理设备实施前述权利要求中任一项所述的方法。
20.一种用于控制合约的履行的计算机系统,所述系统包括处理设备,所述处理设备用于:
将合约存储在基于计算机的存储库之上或之中,所述合约与第一用户(U1)和第二用户(U2)之间的许可证相关;
通过通信网络接收交易,所述交易包括代币从代理(A)到所述第一用户(U1)或所述第二用户(U2)的转移,所述交易包括元数据,所述元数据包括指示所述合约的存储位置的标识符;
查询点对点分布式分类账,以确定交易是否包括至少一个未花费的输出(UTXO);以及对查询所述点对点分布式分类账进行响应,确定是否修改所述合约的履行。

说明书全文

使用分布式散列表和点对点分布式分类账控制合约的履行的

方法和系统

技术领域

[0001] 本发明涉及一种使用分布式散列表和点对点分布式分类账来保护计算机软件的安全以及授权访问计算机软件的方法。

背景技术

[0002] 在本文档中,我们使用术语“链”来包括所有形式的电子的、基于计算机的分布式分类账。这些包括基于共识的区块链和交易链技术、许可的和未许可的分类账、共享的分类账及其变体。尽管已经提出并开发了其他区块链实施方案,区块链技术最广为人知的应用是比特币分类账。虽然本文中出于方便和说明的目的可能引用比特币,但应注意,本发明并不限于比特币区块链的使用,其他替代性的区块链实现方案和协议也落入本发明的范围内。术语“用户”在本文中可指人或基于处理器的资源。
[0003] 区块链是一种点对点电子分类账,它是一种基于计算机的去中心化、分布式系统,由区块组成,而这些区块又由交易组成。每笔交易都是一种数据结构,对区块链系统参与者之间的数字资产的控制权的转移进行编码,并且该数据结构包括至少一个输入和至少一个输出。每个区块都包含前一个区块的散列,这些区块被链接在一起,以创建一个永久的、不可更改的记录,该记录自区块链创建以来写入了该区块链的所有交易。交易包含嵌入其输入和输出中的称为脚本的小程序,这些脚本指定了如何以及由何人才能访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。
[0004] 为了将交易写入区块链,必须对其进行“验证”。网络节点(矿工)执行工作以确保每笔交易都有效,无效交易被网络拒绝。安装在节点上的软件客户端通过执行其定和解锁脚本,对未花费的交易(UTXO)执行此验证工作。如果锁定和解锁脚本的执行评估为真(TRUE),则交易有效,交易被写入区块链。因此,为了将交易写入区块链,必须i)由接收交易的第一节点对其进行验证——如果交易通过了验证,则该节点将其中继到网络中的其他节点;ii)添加到由矿工建造的新区块中;以及iii)挖掘,即添加到过去交易的公共分类账中。
[0005] 尽管区块链技术因加密货币的实施方案而广为人知,但数字企业家已经开始探索使用比特币所基于的加密安全系统和可存储在区块链上的数据来实现新的系统。如果区块链可用于不局限于加密货币领域的自动化任务和流程,那将是非常有利的。这样的解决方案将能够利用区块链的好处(例如,永久的、防篡改的事件记录、分布式处理等),同时在其应用中更通用。
[0006] 目前研究的一个领域是使用区块链来实现“智能合约”。这些是旨在自动执行诸如合约或协议等机器可读文档的条款的计算机程序。与用自然语言书写的传统合约不同,智能合约是一种机器可执行程序,其包括可处理输入以产生结果的规则,然后可根据这些结果来引起将要执行的动作。
[0007] 与区块链相关的另一个兴趣领域是通过区块链,使用“代币”(或“彩色硬币”)来代表和转移现实世界的实体。潜在的敏感或秘密的项目可由没有可辨别含义或价值的代币来表示。因此,代币充当了一个标识符,允许在区块链中引用现实世界的项目。
[0008] 这些技术研究领域可在控制数字资产(例如软件)方面发挥优势。保护计算机软件的完整性和共享计算机软件的传统方法涉及对计算机软件的可执行程序的数字签名。例如,使用密钥对(例如公钥和私钥)签署可执行程序或其他相关代码。公钥经常从诸如证书颁发机构等可信的中央机构获得。
[0009] 计算机软件经常附有包含合约义务的许可证。许可证可能包含管理软件使用或再分发的条款。如果计算机软件或相关许可证被非法转移给其他用户,则可能会出现问题。
[0010] 对本说明书中已包含的文档、行为、材料、设备、物品等的任何讨论不应被视为承认任何或所有这些事项构成现有技术基础的一部分,或者是本发明相关领域的公知常识,由于它存在于本发明的每个权利要求优先权日之前。
[0011] 在整个说明书中,单词“包括(comprise)”或其变形(comprises或comprising)将被理解为暗示包含所述元件、整体或步骤,或元件、整体或步骤的组,但不排除任何其他元件、整体或步骤,或元件、整体或步骤的组。

发明内容

[0012] 本发明可包括计算机实现的控制方法。它可用来控制计算机执行的流程的履行。该流程可由合约指定。合约可为智能合约,其为机器可执行文档。术语“用户”在本文中可用于指人类用户或机器(计算机)。或者,本发明也可被描述为提供安全解决方案(方法/系统)。它可用于保持受控资源或数字资产的完整性。它可用于控制受控资源或数字资产的转移。该资源或资产可为软件。
该方法可包括:
将(智能)合约存储在基于计算机的存储库之上或之中,合约与第一用户(U1)和第二用户(U2)相关;
通过通信网络接收区块链交易,区块链交易包括至少一个输出,并且包括要从代理或第一计算机(A)转移到第一用户(U1)或第二用户(U2)的代币(其中第二用户是第二计算机),交易包括元数据,元数据包括指示合约的存储位置的标识符;
查询点对点分布式分类账以确定交易是否包括至少一个未花费的输出(UTXO);以及,对查询点对点分布式分类账进行响应,确定是否修改合约的履行。
未花费的输出(UTXO)可包括合约的表示。查询点对点分布式分类账可包括扫描点对点分布式分类账(区块链)以确定交易是否包括表示合约的至少一个未花费的输出(UTXO)。合约可与第一和第二用户之间的许可证相关。
[0013] 交易还可包括确定性赎回脚本地址。赎回脚本地址可为支付脚本散列(pay-to-script-hash,P2SH)地址。因此,合约(或合约中定义的元素)的存在可使用被公布到点对点分布式分类账(例如,区块链)的交易来公开,该公开过程用到了由合约发行人确定或提供的支付脚本散列地址;和/或合约的元数据。
[0014] 确定步骤可包括:在从点对点分布式分类账中,不能识别出至少一个未花费的输出(UTXO),则终止合约,或者在从点对点分布式分类账中,识别出至少一个未花费的输出(UTXO),则维持合约。
[0015] 终止合约的步骤可包括广播进一步的交易以花费至少一个未花费的输出(UTXO)。另外,在广播进一步交易的步骤中,进一步交易可包括在指定日期和/或时间花费至少一个未花费的输出(UTXO)的指令。例如,指令可为CheckLockTimeVerify指令。
[0016] 进一步的交易可包括输入,其为至少一个未花费的输出(UTXO),以及赎回脚本,其包括签名、元数据、与代理相关的代理公钥(PA)以及与第一用户(U1)相关的第一用户公钥(PU1)。通过在点对点分布式分类账上执行交易以花费未花费的输出,提供了自动终止合约以及许可证的优点。
[0017] 合约可定义至少一个条件,该至少一个条件与第一用户(U1)和第二用户(U2)之间的许可证的操作有关,以及至少一个动作,其执行取决于对该条件的评估。该条件可为可评估为真或假的测试。该条件可为合约的一部分(例如,条款)。履行合约可需要完成或履行条件。如果条件评估为真,则可完成该条件。
[0018] 元数据可包括合约存储在基于计算机的存储库中的地址或地址的表示和/或合约的散列。
[0019] 查询点对点分布式分类账的步骤还可包括通过确定至少一个未花费的输出(UTXO)是否存在于点对点分布式分类账的未花费交易输出列表中,来检查合约是否已被终止。
[0020] 基于计算机的存储库可以是或包括服务器。存储库可为在基于计算机的资源上提供的数据库或存储设施。可对存储库编制索引,以允许对其进行搜索。存储库可包括分布式散列表(Distributed Hash Table,简称“DHT”)。合约可存储在DHT中或与DHT相关。
[0021] 合约可包括确定性有限自动机(DFA)以实现合约。此外,还可使用编码方案来定义确定性有限自动机(DFA)。
[0022] 该方法还可包括更新合约的步骤,通过执行以下步骤:生成涉及与合约相关的先前密钥的子密钥;生成进一步的赎回脚本,该进一步的赎回脚本包括子密钥、合约的位置和合约的散列;并向进一步的赎回脚本支付一定数量的加密货币(C)。
[0023] 该方法还可包括生成从合约导出的子合约的步骤,其中子合约与确定性地址相关,并且通过执行以下步骤生成子合约:使用利用种子导出的新公钥;将所述子合约存储在基于计算机的存储库之中或之上,并带有对所述合约的引用;向点对点分布式分类账广播子合约交易,子合约交易包括对所述合约的引用;并向与合约相关的元数据添加对子合约的引用。
[0024] 第一用户(U1)和第二用户(U2)之间的许可证可涉及计算机软件和数字媒体(包括音乐、视频和电子书)中的一项或多项。
[0025] 点对点分布式分类账可为区块链。此外,加密货币可为比特币。
[0026] 本发明还可包括计算机实现的系统,用于执行上述本发明的任何实施例
[0027] 一种计算机软件程序,包括机器可读指令,以使处理设备实施上述方法。
[0028] 本发明可包括对应于上述方法的任何实施例的计算机系统。该方法用于控制诸如(智能)合约中定义的计算机实现的流程的执行。该系统可包括处理设备,该处理设备用于:将(智能)合约存储在基于计算机的存储库之上或之中;合约可与第一用户(U1)和第二用户(U2)之间的许可证相关;
通过通信网络接收区块链交易,区块链交易包括至少一个输出,并且包括要从代理(A)(例如第一计算机)转移到第二计算机(可为第一用户(U1)或第二用户(U2))的代币,交易包括元数据,元数据包括指示合约的存储位置的标识符;
查询点对点分布式分类账,以确定交易是否包括至少一个未花费的输出(UTXO);以及对查询点对点分布式分类账进行响应,确定是否修改合约的履行。
[0029] 未花费的输出(UTXO)可包括合约的表示。查询点对点分布式分类账(区块链)可包括扫描点对点分布式分类账(区块链),以确定交易是否包括表示合约的至少一个未花费的输出(UTXO)。
[0030] 与上述任何特征有关的一个方面或实施例也可与任何其他方面或实施例结合使用。与本发明的系统有关的被描述的任何特征可适用于相应的方法,反之亦然。附图说明
[0031] 图1示出了散列表的示例。
[0032] 将参考以下附图描述本发明的示例:
[0033] 图2示出了使用分布式散列表来确定用于保护计算机软件的元数据(M)的示例系统的示意图;
[0034] 图3示出了使用分布式散列表来确定用于保护计算机软件的元数据(M)的计算机实现方法的流程图
[0035] 图4示出了Merkle树的示例;
[0036] 图5示出了Merkle树的示例,其引用了计算机软件和与计算机软件相关的许可证;
[0037] 图6示出了使用分布式散列表来确定指示计算机软件的位置的标识符的计算机实现方法的流程图。
[0038] 图7示出了示例处理设备的示意图;以及
[0039] 图8示出了使用分布式散列表和点对点分布式分类账来控制合约的履行的计算机实现方法的流程图。

具体实施方式

[0040] 本发明大体涉及利用分布式散列表和诸如比特币区块链等的点对点(P2P)分布式分类账(区块链),来保护和授权访问计算机软件的方法和系统。
[0041] 虽然下面描述的实施例可具体指发生在比特币区块链上的交易(这里称为区块链),但是应当理解,本发明也可使用其他P2P分布式分类账来实施。为简单起见,下面使用区块链来描述本发明的各个方面,这仅仅是因为其高度的标准化和大量相关的公开文档。分布式散列表
[0042] 在典型的客户端/服务器模型中,中央服务器可掌管大部分资源。这意味着在中央服务器发生攻击或故障的情况下,存储在中央服务器上的大多数资源可能会受到损害。相反,在分布式模型中,资源在参与节点之间共享(“分布”)。以这种方式,所有参与节点的容量都得到利用,一台服务器的故障不会对大部分资源造成损害。
[0043] 图1示出了散列表的示例。散列表由关键字-值对组成。每个关键字-值对的关键字都通过散列函数映射到索引。索引定义了关键字-值对的存储值的位置。
[0044] 分布式散列表(Distributed Hash Table,简称“DHT”)是将分布式模型应用于散列表的示例。类似于散列表,DHT包括关键字-值对,并且提供了一种在仅给出关键字的情况下,定位(“查找”)关键字-值对中的值的有效方法。然而,与散列表相比,关键字-值对分布和存储在许多参与节点。以这种方式,各参与节点共同分担了存储和维护关键字-值对的责任。
[0045] 与散列表相同,DHT中的每个关键字-值对都映射到索引。通过对关键字执行散列函数来确定每个关键字-值对的索引。例如,加密安全散列算法SHA-1可用于确定索引。
[0046] 通过对密钥空间进行分区,为每个参与节点分配至少一个索引。对于分配给参与节点的每个索引,该参与节点存储关键字-值对中的值。
[0047] 优点在于可有效地检索关键字-值对中的值。为了检索与关键字相关的值,节点可执行“查找”以(通过索引)确定负责节点。然后可访问负责节点以确定该值。比特币和区块链
[0048] 如本领域所公知的,区块链是交易类型分类账的数据库,基于比特币协议,其存储容量分布在参与在系统中的各网络节点上。每笔比特币交易都在网络广播,交易被确认后汇总成区块。然后,通过将区块存储在多个参与节点上,将区块包括在区块链中。
[0049] 加密货币的P2P分布式分类账的完整副本包含用加密货币进行的每一笔交易。因此,提供了不断增长的交易数据记录列表。由于进入区块链的每一笔交易都是加密执行的,因此,区块链被加强了防范篡改和修改的能,甚至是参与节点的操作员的篡改和修改。
[0050] 由于区块链的透明性,因此每笔交易的历史记录都是公开的。
[0051] 区块链的另一个优点是交易和交易记录是相同的。
[0052] 以这种方式,在实际交易中捕获与交易有关的信息。此记录是永久的、不可变的,因此不需要第三方将交易记录保存在单独的数据库中。付费脚本散列和多重签名
[0053] 虽然下面的实施例可特别指使用比特币协议的付费脚本散列(P2SH)方法的交易,但是应当理解,本发明也可使用比特币协议的另一种方法来实现,例如付费公钥散列(pay-to-public-key-hash)方法。
[0054] 区块链上的每笔交易记录均包括脚本,该脚本包括指示交易和多个公钥的信息。这些公钥可与加密货币的发送者和接收者相关。脚本可被视为记录在区块链上的记录每笔交易的指令列表,其描述了用户如何获得对交易记录中指定的加密货币的访问权。脚本还可描述访问加密货币的要求,例如,所需的签名。
[0055] 作为背景技术,在比特币协议的标准P2SH方法中,输出脚本或赎回脚本可采用以下形式:
[0056] 其中NumSigs是满足赎回脚本来解锁交易所需的有效签名的数量“m”;PubK1,PubK2...PubK15是公钥,对应于解锁交易的签名(最多15个公钥),NumKeys是公钥的数量“n”。
[0057] 在比特币协议中,可使用椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm)来生成基于用户私钥的签名。然后,签名用于赎回与输出脚本或赎回脚本相关的加密货币。当用户赎回输出脚本或赎回脚本时,用户提供其签名和公钥。然后,输出脚本或赎回脚本根据公钥来验证签名。
[0058] 为了赎回上述赎回脚本,至少需要与公钥对应的数量“m”的签名。在一些示例中,公钥的顺序是重要的,用于签名的“n”个中的数量“m”个签名必须按顺序进行。例如,考虑“m”为2,“n”为15的情况。如果有两个签名可供使用,Sig1(对应于PubK1)和Sig 15(对应于PubK15),则赎回脚本必须首先由Sig1签名,然后由Sig15签名。系统概述
[0059] 图2示出了系统1,其包括第一节点3,其通过通信网络5与第二节点7进行通信。第一节点3具有相关的第一处理设备21,第二节点5具有相关的第二处理设备27。第一和第二节点3、7的示例包括电子设备,例如计算机、平板计算机、移动通信设备、计算机服务器等。
[0060] 记录和存储关键字-值对的DHT 13也在图2中示出。DHT 13可与一个或多个处理设备19相关联,以接收、记录和存储关键字-值对中的值。处理设备19可由DHT 13的“参与节点”使用。如上所述,DHT 13提供了定位关键字-值对中的值的有效方法。
[0061] 图2还示出了P2P分布式分类账14以记录交易。P2P分布式分类账14可与一个或多个处理设备20相关联以接收和记录交易。如上所述,P2P分布式分类账14的一个示例是比特币区块链。因此,在区块链的环境中,与P2P分布式分类账14相关的处理设备20可为被称为“矿工”的处理设备。
[0062] 第一节点3与第一用户23相关联,第二节点7与第二用户24相关联。在一个示例中,第一节点3可代表计算机软件的供应商。在另一示例中,第一节点3可代表代理或服务提供商。在又一示例中,第一节点3可表示计算机软件的用户。
[0063] 类似地,第二节点7可代表代理、服务提供商、计算机软件的供应商或计算机软件的用户。
[0064] 在一个示例中,第一节点3实施如图3和图6所示的方法100、500。在另一示例中,第二节点7实施方法100、500。虽然下面的示例性实施例可指由第一节点3来实施方法,但是应该理解,本发明也可被调整或修改为由其他节点来实施。
[0065] 如图3所示的方法100包括步骤100,确定与计算机软件相关的数据(D1)。数据(D1)还可包括与计算机软件相关的许可证。方法100还包括步骤120,基于计算机软件来确定第一散列值(H1)。在一个示例中,第一散列值(H1)可与计算机软件的可执行程序有关。
[0066] 方法100还包括步骤130,基于数据(D1)和计算机软件来确定第二散列值(H2)。在一个示例中,第二散列值(H2)可代表计算机软件的细节和与计算机软件相关的许可证。在另一示例中,第二散列值(H2)可包括附加信息。
[0067] 方法100还包括步骤140,通过通信网络5,将数据(D1)、第一散列值(H1)和第二散列值(H2)发送到分布式散列表13上的条目,其中第二散列值(H2)被分配给关键字-值对中的关键字,而数据(D1)和第一散列值(H1)被分配给关键字-值对中的值。关键字-值对中的值还可包括指示计算机软件或许可证的位置的标识符。
[0068] 方法100还包括步骤150,确定基于第二散列值(H2)的元数据(M),以包括在点对点分布式分类账14上。在一个示例中,元数据(M)可包括在第一赎回脚本(RS1)中,以包括在点对点分布式分类账14上。确定与计算机软件相关的数据110
[0069] 如上所述,方法100包括步骤110,确定与计算机软件相关的数据(D1)。确定数据(D1)的步骤110可包括从用户、节点或数据存储接收数据(D1)。确定数据(D1)的步骤110还可包括在第一节点3处生成数据(D1)。
[0070] 在一个示例中,第一节点3可通过用户接口15接收来自第一用户23的数据(D1)。在另一示例中,第一节点3可接收来自第二用户24的数据(D1)。在又一示例中,第一节点3可接收来自数据存储17的数据(D1)。
[0071] 数据(D1)与计算机软件相关联,其中数据(D1)可识别计算机软件、附加信息、计算机软件的许可证或指示计算机软件的位置。例如,数据(D1)可包括识别计算机软件的字符串或数据结构。字符串或数据结构可包括关于计算机软件的识别关键字和/或附加信息的集合。附加信息的示例可为计算机软件的版本的如数字等标识符。例如,如果计算机软件名为BobSoftware,版本是3.0,则字符串或数据结构(D1)可包括“BobSoftware/3.0”。
[0072] 在另一示例中,数据(D1)可包括与计算机软件相关的许可证的标识符。这可为软件许可证标识号(ID)或软件许可证密钥。在另一示例中,许可证的标识符可包括许可证内容的加密散列。
[0073] 数据(D1)还可包括指示计算机软件的存储位置的标识符。在一个示例中,标识符可包括互联网上的对象的统一资源定位地址(URL)。在另一示例中,可提供到诸如散列表或分布式散列表之类的存储库中的计算机软件的存储位置的链接。
[0074] 在又一个示例中,数据(D1)可包括识别计算机软件的供应商的信息。这可包括个人详细信息,如姓名、地址、联系方式或与供应商相关的公钥。基于计算机软件来确定第一散列值(H1)120
[0075] 也如上所述,方法100还包括步骤120,确定计算机软件的第一散列值(H1)。确定第一散列值(H1)的步骤120可包括接收来自用户的第一散列值(H1)或访问来自数据存储的第一散列值(H1)。确定第一散列值(H1)的步骤120还可包括在第一节点3处计算散列值。
[0076] 在一个示例中,第一节点3可经由用户接口15,接收来自第一用户23的第一散列值(H1)。在另一示例中,第一节点3可接收来自第二用户24的第一散列值(H1)。在又一示例中,第一节点3可访问来自本地数据存储17或远程数据存储的第一散列值(H1)。
[0077] 在一个示例中,第一散列值(H1)是计算机软件的可执行文件。计算机软件的可执行文件可从诸如互联网之类的通信网络5获取。在另一示例中,可执行文件可由第一用户23或第二用户24提供。在又一示例中,可从数据存储17中获取可执行文件。在又一个示例中,可从诸如散列表或DHT之类的存储库中获取可执行文件。
[0078] 可使用SHA-256算法来确定软件的可执行文件的散列,以创建信息的256位表示。应当理解,也可使用其他散列算法,包括安全散列算法(SHA-Secure Hash Algorithm)系列中的其他算法。一些特定示例包括SHA-3子集中的实例,包括SHA3-224、SHA3-256、SHA3-
384、SHA3-512、SHAKE128、SHAKE256。其他散列算法可包括RACE完整性基元评估消息摘要(RIPEMD-RACE Integrity Primitives Evaluation Message Digest)系列中的那些。一个特定示例可包括RIPEMD-160。其他散列函数可包括基于Zémor-Tillich散列函数和基于背包的散列函数的系列。
基于数据(D1)和计算机软件来确定第二散列值(H2)130
[0079] 方法100还包括步骤130,基于数据(D1)和计算机软件来确定第二散列值(H2)。
[0080] 在一个示例中,可基于数据(D1)和计算机软件的可执行文件(或可执行文件的散列,即第一散列值(H1))的级联的散列,来确定第二散列值(H2)。在另一示例中,可基于数据(D1)、计算机软件的可执行文件(或可执行文件的散列)和附加信息的级联的散列,来确定第二散列值(H2)。
[0081] 附加信息可包括第一用户23的公钥(PU1)或第二用户24的公钥(PU2)。在另一示例中,附加信息可包括与第一用户23或第二用户24相关的实体的标识符。例如,实体可为第一用户23或第二用户24的雇主。在另一示例中,实体可为第一用户23或第二用户24的服务提供商。
[0082] 附加信息还可包括与第一节点3、第二节点7、第一用户23或第二用户24相关的设备的设备标识符。设备的示例是如图2所示的第一处理设备21。设备标识符可包括以下各项中的至少一个:媒体访问控制(MAC)地址、主板序列号或设备标识号。设备标识符还可为MAC地址、主板序列号或设备标识号中的至少两个的级联。在另一示例中,设备标识符可包括与MAC地址、主板序列号或设备标识号或上述级联相关的散列值。
[0083] 在又一个示例中,附加信息可包括与计算机软件相关的许可证的到期日期。与计算机软件相关的合约(例如许可证)
[0084] 在另一示例中,可基于数据(D1)、计算机软件的可执行文件(或可执行文件的散列)、附加信息或与计算机软件有关的合约(例如,许可证)的级联,来确定第二散列值(H2)。
[0085] 合约(例如许可证)的表示可为指定许可证内容的文件或文档。例如,纯ASCII文本、PDF文档或Word文档。第二散列值(H2)可包括原始形式的许可证,或者例如,它可提供到许可证在可公开访问的诸如互联网等通信网络中的位置的链接。在另一示例中,可提供连接到诸如散列表或DHT等存储库中的许可证的位置的链接。在又一个示例中,可提供连接到诸如数据存储17等基于计算机的资源中的许可证的位置的链接。
[0086] 在一个示例中,许可证可包括与计算机软件相关的第一散列值(H1)。
[0087] 与计算机软件相关的许可证可进一步包括如上所述的附加信息。在一个示例中,许可证可与第一用户23或第二用户24相关联。许可证可包括第一用户23的公钥(PU1)或第二用户24的公钥(PU2)。在另一示例中,许可证可包括与第一用户23或第二用户24相关的实体的标识符。
[0088] 与计算机软件相关的许可证还可包括与第一节点3、第二节点7、第一用户23或第二用户24相关的设备的设备标识符。设备的示例是如图2所示的第一处理设备21。设备标识符可包括以下各项中的至少一个:MAC地址、主板序列号或设备标识号。设备标识符还可为MAC地址、主板序列号或设备标识号中的至少两个的级联。在另一示例中,设备标识符可包括与MAC地址、主板序列号或设备标识号或上述级联相关的散列值。
[0089] 第一用户23可为计算机软件的供应商,第二用户24可为计算机软件的接收者(“终端用户”)。在另一示例中,第二用户23可为计算机软件的供应商,第二用户24可为计算机软件的终端用户。
[0090] 在一个示例中,与计算机软件相关的许可证仅可授权一个终端用户(“单用户许可证”)。在另一示例中,与计算机软件相关的许可证可授权终端用户的一个设备(“单设备许可证”)。在另一示例中,与计算机软件相关的许可证可授权终端用户的多于一个的设备(“多设备许可证”)。
[0091] 在另一示例中,可能存在多于一个的终端用户(“多用户许可证”)。在另一示例中,与计算机软件相关的许可证可授权每个终端用户的一个设备。在另一示例中,与计算机软件相关的许可证可授权每个终端用户的多于一个的设备。
[0092] 在许可证与第一用户23或第二用户24相关联的情况下,许可证可包括与第一用户23相关的第一用户公钥(PU1)和与第二用户24相关的第二用户公钥(PU2)。
默克尔(Merkle)树
[0093] 在另一示例中,许可证可为Merkle树的顶部散列值。Merkle树的一个示例如图4所示。在Merkle树中,每个节点处的散列值都是它们各自的“子节点”的散列。例如,散列值Hash-A 305是两个“子”节点309和311处的散列值的散列。可以看出,Merkle树的顶部散列值Hash-AB 303包括Merkle树中的所有散列值。也就是说,它捕获树底部的四个“叶子”的散列值,A1 317、A2 319、B1 321和B2 323。
[0094] 在本发明的示例中,Merkle树的每个“叶子”都可代表许可证信息的一个方面。一个示例性许可证在图5中示出。在散列值Hash-D 409中捕获数据417(D1),在散列值Hash-S 411(H1)中捕获软件的可执行文件419,在散列值Hash-P 413中捕获用户23和/或24的公钥
421,在散列值Hash-E 415中捕获到期日期423。可以看出,节点405和407分别捕获与用于数据(D1)417和软件419以及公钥421和有效期限423的叶子相关的散列值。
[0095] 应当理解,上面未另外描述的其他信息可包括散列值(H2)所基于的附加信息。将数据(D1)、第一散列值(H1)和第二散列值(H2)发送到分布式散列表140
[0096] 方法100还包括步骤140,通过通信网络5,将数据(D1)、第一散列值(H1)和第二散列值(H2)发送到分布式散列表13上的条目。
[0097] 在一个示例中,第二散列值(H2)可为关键字-值对中的关键字,而数据(D1)和第一散列值(H1)可为关键字-值对中的值。
[0098] 在另一示例中,如上所述的附加信息也可为关键字-值对中的值的一部分。这包括但不限于:第一用户23或第二用户24的公钥、与第一节点3、第二节点7、第一用户23或第二用户24相关的设备的设备标识符、指示计算机软件或许可证的位置的标识符、或与许可证相关的其他附加信息。
[0099] 如上所述,DHT 13由关键字-值对组成,其中每个关键字-值对都被分配给索引。在一个示例中,第二散列值(H2)可用于生成索引。可对第二散列值(H2)执行散列函数或加密散列函数。例如,可使用加密函数SHA-1:索引=SHA-1(H2)
[0100] 对于第二散列值(H2)为DHT 13中的关键字-值对中的关键字,并且数据(D1)和第一散列值(H1)为关键字-值对中的值的情况,关键字和值被发送到DHT 13中的任何参与节点。
[0101] 在一个示例中,诸如输入(关键字,值)(put(key,value))之类的消息可被发送到DHT 13的参与节点,其中关键字(key)是第二散列值(H2),值(value)是数据(D1)和第一散列值(H1)。可向所有参与节点发送消息,直到该消息由通过密钥空间划分所指示的,被分配给索引的参与节点所接收。然后,分配给消息中指示的索引的参与节点可将关键字-值对存储在DHT 13上,并承担维护与关键字-值对相关的条目的责任。
[0102] 优点在于,可从DHT 13中获取任何给定关键字的值。在一个示例中,第一用户23或第二用户24可能希望获取该值。经由第一节点3、第二节点7或未另外示出的另一节点,第一用户23或第二用户24可向DHT 13中的任何参与节点提供诸如获取(值)(get(key))之类的请求消息。然后,该请求消息可被发送到所有参与节点,直到该请求消息由通过密钥空间划分所指示的,被分配给索引的参与节点所接收。确定元数据(M)150
[0103] 方法100还包括步骤150,确定元数据(M),该元数据(M)包括第二散列值(H2)。确定元数据(M)的步骤150可包括接收来自用户、节点或数据存储的元数据(M)。例如,元数据(M)可被包括在P2P分布式分类账14上的交易的P2SH多重签名第一赎回脚本(RS1)中的公钥可用的15个位置中的一个或多个。
[0104] P2P分布式分类账14上的交易的第一赎回脚本(RS1)可表示代币化交易(“发行代币”)的发行或创建,代币化交易代表包括在元数据(M)中的内容。在一个示例中,代币可由代理(A)发行。
[0105] 在比特币协议的P2SH方法中,通过共同拥有的英国专利申请1603125.4中首次介绍的方法,元数据可被包括在赎回脚本中,该专利申请名称为“用于基于区块链的加密货币的通用代币化系统”(Universal tokenisation system for blockchain based cryptocurrencies),其内容通过整体引用并入本文中。其中描述了在赎回脚本中包括元数据的过程。然后,下面提供了该过程的简要概述。元数据
[0106] 元数据(M)可嵌入在P2SH多重签名赎回脚本(RS1)中的公钥可用的15个位置中的一个或多个。例如,赎回脚本(RS1)可采取以下形式:其中Metadata1和Metadata2均包含在赎回脚本中取代公钥位置的元数据,PubK1和PubK2是公钥。
[0107] 元数据(M)可包括第二散列值(H2)。元数据(M)还可包括描述与计算机软件或许可证相关的条件的描述或关键字。例如,许可证的日期、与许可证相关的用户的姓名、出生日期、地址、联系方式或其他信息。在另一示例中,可包括与一定数量的加密货币相关的信息。
[0108] 元数据(M)可以多种方式来包括信息。在一个示例中,可包括信息的内容。在另一示例中,可包括信息的加密散列。可使用SHA-256算法来确定信息的散列,以创建信息的256位表示。应当理解,也可使用其他散列算法,包括安全散列算法(SHA)系列中的其他算法。一些特定示例包括SHA-3子集中的实例,包括SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256。其他散列算法可包括RACE完整性原语评估消息摘要(RIPEMD)系列中的那些。一个特定示例可包括RIPEMD-160。其他散列函数可包括基于Zémor-Tillich散列函数和基于背包的散列函数的系列。
[0109] 在本发明的其他实施例中,包括以上各项中的一项或多项的结合可包括在元数据(M)中。由于元数据(M)可通过诸如区块链之类的P2P分布式分类账14公开,或者通过不安全的网络传输,因此出于隐私原因,可能希望隐藏元数据(M)的具体细节。
[0110] 因此,在本发明的实施例中使用的多重签名P2SH比特币交易具有优点,因为它能够传输和永久记录与计算机软件和许可证相关的信息。通过在交易的诸如赎回脚本的输出脚本中包含元数据,来实现此记录。第一赎回脚本
[0111] 如上所述,赎回脚本是比特币协议的标准P2SH方法中的输出脚本的示例,描述了用户如何获得对交易记录中指定的加密货币的访问。
[0112] 在本发明中,用于发行代币的第一赎回脚本(RS1)可基于元数据(M)。第一赎回脚本(RS1)还可包括与代理私钥(VA)形成密码对的代理公钥(PA)。以这种方式,代理私钥(VA)需要“解锁”或花费与交易相关的加密货币。
[0113] 在一个示例中,用于发行代币的第一赎回脚本(RS1)可包括元数据(M)。第一赎回脚本(RS1)还可包括代理公钥(PA)。在此示例中,第一赎回脚本(RS1)可为以下形式:
其中OP_1表示满足第一赎回脚本(RS1)以解锁交易所需的签名数量(“NumSigs”),OP_3表示赎回脚本中的公钥数量(“NumKeys”)。
[0114] 在该示例中,第一赎回脚本(RS1)可包括元数据的两个指定字段,Metadata1和Metadata2。Metadata1和Metadata2的具体示例在下面的表1中示出。表1
[0115] 该示例包括提供指向Metadata1中的许可证的指针,在许可证的大小排除了在元数据(M)中包括这样的细节的情况下,该指针可能是有用的。此外,由于元数据(M)可被公开,或者通过不安全的网络传输,因此出于隐私原因,可能希望隐藏代币的具体细节。
[0116] Metadata1的前4个字节指示许可证的类型。例如,许可证类型可表示诸如BobSoftware之类的计算机软件的名称。在另一示例中,许可证类型可表示许可证的授权类型,诸如如上所述的“单用户”或“多设备”。接下来的16个字节保存实际电子许可证文件的位置的IP地址,允许IPv6地址。注意,在一些实施例中,该值可指向种子(torrent)文件的种子,使得许可证文件可分布在上而不是集中。后面12个字节包含特定于许可证类型的数据。
[0117] Metadata2的前20个字节是实际许可证文件的散列,在应用于许可证文件的实际内容的SHA256上使用RIPEMD-160。由于实际许可证文件可为可获取的,因此允许根据合约来验证交易。注意,许可证文件本身可以是完全公开的(未加密的,且人类可读的),或者可加密以保护隐私,这取决于具体实施例的要求。可根据许可证的类型,来使用Metadata2的剩余12个字节的内容。
[0118] 从上面提供的第一赎回脚本(RS1)的示例可以看出,发行代币必须由代理(A)签署才能花费。表2中提供了发行代币的交易的示例,为简洁起见,未示出矿工的费用。表2
[0119] 表2的第4到8行表示交易的输入,其是将要包括在发行代币(即“代币化的”)中的第一数量的加密货币(C1)。在此示例中,第一数量的加密货币(C1)是将第一数量的加密货币转移给了代理(A)的先前交易(ID-110)的结果,因此先前交易(ID-110)输出脚本(赎回脚本ID-110)包括代理公钥(PA)。因此,要解锁此先前输出,必须使用第一用户的私钥(VA)对脚本(赎回脚本ID-110)进行签名。最后,表2的第8行表明第一数量的加密货币(C1)将是该交易(ID-600)的第一输出。
[0120] 表2的第9到13行代表交易(ID-600)的第一(也是唯一的)输出,在这种情况下,它代表正在创建并转移回代理的发行代币。第10行示出了输出值,是第一数量的加密货币(C1)。第11行示出了输出脚本,其中包括如比特币协议的P2SH方法中所使用的“<赎回脚本散列>”。在该示例中,赎回脚本是如上所述的形式的第一赎回脚本(RS1)。
[0121] 然后,用第一数据输出(O1),在P2P分布式分类账14上,记录表2中所示的交易(ID-600)的输出。特别地,第一数据输出(O1)可包括在交易中转移的第一数量的加密货币(C1)的指示。第一数据输出(O1)还可包括第一赎回脚本(RS1)的散列。
[0122] 在第一加密货币数量(C1)的进一步的交易中,例如将代币转移给第一用户23或第二用户24,解锁第一数量的加密货币(C1)的脚本(例如,进一步的交易的输入脚本签名ScriptSig)可采取以下形式:Sig-VA Sig-VU1其中Sig-VU1表明第一用户23的签名。注意,上述脚本假定只需要来自代理(A)或第一用户23中的一个签名来解锁第一数量的加密货币(C1)。
[0123] 可通过第二赎回脚本(RS2)将发行代币转移给另一用户。第二赎回脚本
[0124] 与计算机软件和许可证相关的代币可从代理(A)转移给另一用户,例如第一用户23或第二户24。在一个示例中,代币的转移可表示授权用户访问计算机软件或许可证。转移可通过第二赎回脚本(RS2)来实现。
[0125] 在一个示例中,代理(A)希望将发行代币转移给第一用户23。第一用户23可表示例如计算机软件的供应商。
[0126] 在该示例中,第二赎回脚本(RS2)可基于元数据(M)、与代理(A)相关的代理公钥(PA)和与第一用户23相关的第一用户公钥(PU1)。
[0127] 第二赎回脚本(RS2)可以是以下形式:
[0128] 在该示例中,第二赎回脚本(RS2)包括与第一赎回脚本(RS1)相同的两个元数据字段。第二赎回脚本(RS2)还包括与代理相关的代理公钥(PA)和与第一用户相关的第一用户公钥(PU1)。
[0129] 从上面提供的第二赎回脚本(RS2)的示例可以看出,被转移的代币必须由代理(A)或第一用户23签署才能花费。表3中提供了发行代币的此转移的交易的示例,其中为了简洁起见,未示出矿工的费用。表3
[0130] 与表2类似,表3的第4至8行表示交易(ID-610)的输入。在该示例中,输入是发行代币,即表2中所示的交易(ID-600)的输出。可看出,第7行中的赎回脚本对应于发行代币的赎回脚本,即第一赎回脚本(RS1)。因此,为了解锁交易(ID-600)的输出,必须用代理公钥(PA)对第一赎回脚本(RS1)进行签名。
[0131] 表3的第9到13行表示交易(ID-610)的输出,在这种情况下,它代表正被转移到代理(A)或第一用户23(U1)的发行代币。第10行示出了输出值,是第一数量的加密货币(C1)。第11行示出了输出脚本,其中包括如比特币协议的P2SH方法中所使用的“<输出脚本散列>”。在该示例中,赎回脚本是如上所述的形式的第二赎回脚本(RS2)。
[0132] 然后,用第二数据输出(O2),在P2P分布式分类账14上,记录交易(ID-610)的输出。第二数据输出(O2)可包括来自第一数据输出(O1)的第一数量的加密货币(C1)将在交易中被转移的指示。第二数据输出(O2)还可包括第二赎回脚本(RS2)的散列。
控制合约的履行
[0133] 内置于区块链中的智能合约可通过直接嵌入比特币交易(即在锁定/解锁脚本中)的逻辑和/或通过基于计算机的外部应用程序来实施。这种基于计算机的外部应用程序可称为“代理(agents)”、“甲骨文(oracles)”或“机器人(bots)”。此外,某些合约条件可通过诸如nLockTime字段等其他比特币交易元素来执行。
[0134] 本发明涉及控制合约的履行,通过假定只要在区块链上存在代表合约的有效的未花费的交易输出(UTXO-unspent transaction output),合约(例如许可证)就仍然保持有效。应当理解,由于各种机制(例如,编程计算代理)的行为受合约本身的条件或规定控制,因此这种未花费的状态可能受到影响和改变。例如,合约规定其将在某个特定日期期满,或者当某个值达到指定阈值时期满。
[0135] 使用未花费的交易输出来表示合约的原理可与诸如加密技术等其他特征结合使用。这允许实现复杂的场景和活动。未签署的交易输出UTXO以及使得其能够被花费的脚本中的相关元数据,实际上在这样的环境中,允许交易充当指向离链(off-chain)的存储库的指针或对其的引用,该存储库包含合约的正式细节。在这里,离链意味着它不是区块链本身的一部分。这提供了一种机制,借此任何人都可通过检查区块链来确定合约是否已被终止或仍然有效。一旦合约终止,这将作为交易中的花费输出记录在区块链中,并且可供公众检查。区块链交易成为合约存在和当前状态的永久的、不可更改的和公开的记录。
[0136] 如图8所示的方法800包括步骤810,将合约存储在基于计算机的存储库之上或之中,合约与第一用户(U1)和第二用户(U2)之间的许可证相关。基于计算机的存储库(也可称为“注册表”或“寄存器”)可以各种方式实现,包括例如分布式散列表(DHT)。可生成合约(例如,许可证)的散列,并将其作为元数据存储在区块链交易中,并且可作为用于从区块链中引用合约的查找关键字。在交易元数据中还提供对合约位置的引用。例如,可提供存储库的URL。虽然元数据对公众开放,但合约本身可能并不开放,或可能受到部分保护。
[0137] 诸如CheckLockTimeVerify(CLTV)之类的标准比特币特征可使合约在未来的某个时间点正式的自动的到期。区块链的使用使得到期日期成为安全(不可更改的)公共记录的问题。该概念与下面描述的多个密钥的使用相结合,使得CLTV模型能够自动延期(roll-on)或续订合约,除非明确取消。
[0138] 方法800还包括步骤820,通过通信网络,接收包括将代币从代理(A)转移到第一用户(U1)或第二用户(U2)的交易,交易包括元数据,元数据包括指示合约的存储位置的标识符;
[0139] 确定性的子密钥与本文所描述的代币化机制的结合使用,允许创建针对合约的子合约或计划。
[0140] 此外,使用离块(off-block)计算代理(也称为“甲骨文(oracles)”)允许合约条件性由可信第三方构建和修改。这意味着代理的行为可能受合约定义中提供的条件(例如“IF”语句)的影响。关键术语
[0141] 这里可使用以下术语。合约发行人:
该实体代表负责将合约公布到区块链上的行为者
利益相关方:
该实体代表需要确定特定合约是否仍然存在的行为者
存储库:
该实体代表一个位置,用于保护/存储区块链智能合约引用的合约的结构化表示;
合约对方:
该实体代表特定合约的对方。请注意,在许多情况下,此实体不存在
合约:
这是存储在存储库中的结构化文档或文件,它是从区块链引用的。合约可为任何类型的合约或协议。这可包括,例如,金融合约、产权契约、服务合约等。合约的内容可以是公开的,也可以是不公开的。合约是正式化的,因为它使用编码方案以结构化方式表达。
合约模型
[0142] 合约模型的基本要素如下:·编码方案,其允许完整描述任何类型的合约。该方案可为新的构造,也可使用现有的设施,如XBRL、XML、JSON(等);
·用于实现合约的DFA(确定性有限自动机),可在编码方案中完全定义。这包括:
ο一组参数,以及从哪里获取这些参数;
ο一组状态定义
ο状态之间的一组转换,包括转换的触发器和转换期间遵循的规则。
ο规则定义表
·此合约实例的具体参数的定义;
·对合约进行安全保护的机制;
·一种“浏览器”,使合约能够以正式的法律语言让人阅读;以及
·一种编译器,将编码方案转换为oracle代码和/或诸如比特币脚本之类的脚本。
实施合约
[0143] 当合约在基于计算机的存储库中注册时,诸如URL等相关的地址和散列可用作区块链交易中的元数据,以将链上的交易与控制合约本身相关联。这可用各种形式实施,但是为了完整性,下面在标题为“编码方案”的部分,提供了合适的编码方案。
[0144] 关于如何实施合约定义中包含的DFA,有许多不同的方法:·作为区块链交易或交易的时序。有许多单独的白皮书介绍了如何直接以比特币脚本语言来实施各种形式的DFA;
·作为基于代理的(例如oracle)进程或进程时序。下面标题为“用于本发明的说明性计算代理”的部分描述了用于定义和运行合适的代理以监视区块链以及可能的其他外部源的基本过程。
·作为用于智能钱包的一组指令。在这个内容中,智能钱包实际上只是一个本地的oracle进程,它可处理某些合约条件,例如将交易输入分配给区块链交易。
[0145] 请注意,给定的合约定义可作为上述三种机制的混合来实施,其中每个合约状态转换实际上是一个单独的实施方案。有许多方法可从合约定义中创建实施方案,包括手工制作相关的交易/代码。公布合约的存在
[0146] 为了公布合约(或合约中定义的元素)的存在,使用付费脚本散列地址(P2SH),向区块链公布交易(涉及代币从代理(A)转移到第一用户(U1)或第二用户(U2))。在P2SH交易中,接收者必须提供与脚本散列匹配的脚本,以及使脚本评估为真(true)的数据,以便交易是已花费。关于本发明的实施例,根据合约的发行人(例如,第一用户(U1)或第二用户(U2))以及合约的元数据,可容易的确定付费脚本散列(P2SH)。
[0147] 虽然此输出仍保留在区块链的UTXO列表中(即,交易仍是未花费),但这表明包含于元数据本身的合约的有效性。一旦此输出是已花费,则合约就被认为是已完成。子合约/条件
[0148] 子合约是与现有合约直接相关的合约。条件是现有合约中的条款,其必须公开履行才能满足该合约的条款。根据本发明的实施例,子合约和条件都可以相同的方式实现,即作为具有确定性赎回脚本地址的UTXO来实现的合约。在这两种情况下,当UTXO已被花费时,合约被视为已完成(在条件的情况下,这表示该条件已经满足)。
[0149] 有许多机制可用于为条件或子合约创建确定性地址:·使用种子信息来导出新的公钥;
·使用对主合约的引用,在存储库中创建和发布子合约,并将其用作元数据引用;以及·将条件/子合约引用添加到现有合约的元数据中。
保护合约安全
[0150] 合约的正式表示(即规定合约内容的文档或文件)可根据特定合约的正式需要,以各种方式得到保护,尽管在所有情况下,合约存在的公共记录将公布在区块链上,并包含在元数据记录中(有关特定元数据结构的详细内容,请参阅名称为“编码方案”的一节)。
[0151] 从该区块链记录中,被授权的实体将能够获知正式表示的位置以及散列,以确定自交易公布以来正式表示未被修改。
[0152] 但是,通过多种方法来进一步保护正式表示本身的安全是可能的:·文档存储库本身可提供访问控制机制;以及
·可通过标准加密技术来保护合约本身,限制访问那些能够访问相关解密密钥的实体。
终止合约
[0153] 由于区块链提供永久的、不可更改的交易记录,因此不能只通过移除相关的合约文档而使合约终止。这意味着安全合约存储库必须具有与通过许多标准机制支持的区块链本身相同的存储和保留规则。这意味着解决方案必须提供一种通过区块链记录直接检测合约期满的机制。
[0154] 这是通过代表合约的UTXO的花费来处理的。对于许多合约类型,合约期满可与合约本身的公布同时公布。实际上创建了两个交易,一个用于发布合约并获得代表合约的交易输出,第二个用于花费该输出。此第二个交易上设置了CheckLockTimeVerify,以在某一给定的未来日期(代表合约结束)花费输出。
[0155] 这种自动花费可扩展以支持合约的延期(例如,如果合约没有被取消,则会自动延长十二个月)。在这种情况下,花费UTXO,将其发送到“新”延期的合约。
[0156] 方法800还包括步骤830,查询点对点分布式分类账,以确定交易是否包括至少一个未花费的输出(UTXO)。查询点对点分布式分类账的此过程涉及检查区块链,以确认与合约相关的UTXO是否已花费。如果UTXO仍未花费,则合约仍然有效。如果UTXO仍未花费,但有一个/锁定时间(a/locktime)交易待处理,则这将确定合约的到期时间。如果UTXO已花费,则合约在某些方面已完成。
[0157] 查询点对点分布式分类账的过程830,假定利益相关方(例如代理、或第一方(U1)或第二方(U2))知道通过其他路径(一般而言,即,他们是合约发行人或合约对方)来管理合约的交易。但是,任何有权访问合约文件并了解合约发行人的实体都可通过以下方式进行检查:·为UTXO交易导出赎回脚本;以及
·扫描区块链以查找具有匹配赎回脚本散列的UTXO。
[0158] 在本发明的替代实施例中,查询点对点分布式分类账的步骤830是作为自动轮询过程的一部分来执行的,由此以预定的时间间隔扫描区块链,以便确定交易是否包括至少一个未花费的输出(UTXO)(即确定交易是否仍未花费)。
[0159] 方法800还包括步骤840,对查询点对点分布式分类账进行响应,确定是否修改合约的履行。确定步骤840包括:在至少一个未花的费输出(UTXO)不能从点对点分布式分类账中被识别出的情况下,终止合约;或者,在至少一个未花费的输出(UTXO)从点对点分布式分类账中被识别出的情况下,维持合约。应当理解,确定步骤840可形成自动化过程的一部分。例如,计算机软件的特定许可证可能需要定期付款(例如月付或年付),或者设计为仅在特定时间运行。在各种情况下,软件都必须能够轮询点对点分布式分类账并相应地采取动作(例如,请求用户进行支付,以便维护计算机软件的有效许可证)。使软件能够在其他外部条件下运行条件判断句(conditional)也是有可能的,在这种情况下,软件可轮询oracle。如果需要区域封锁(即地理激活限制),则用户的IP地址可被散列处理,并可被用于在分布式散列表中创建另一个字段。
[0160] 或者,或者另外,许可证可能在给定日期到期,在这种情况下,合约交易可被公式表示,如此它是可通过oracle(或代理(A))的签名来花费的,而另一个交易被写成具有设置到期日期的锁定时间的公式,自动将交易的未花费的输出(UTXO)支付回oracle(或代理(A))。
[0161] 如果从点对点分类账中,不能识别出至少一个未花费输出(UTXO),则合约发行人(例如代理商或供应商)或合约对方(例如被许可方)可能希望关闭现有合约(即终止例如计算机软件的许可证)。关闭的策动者(在大多数情况下,计算机软件的供应商或代表供应商的代理(A))将通过验证先前的UTXO是否已被花费来检查区块链,以确定合约是否已被取消(根据方法800的步骤830)。如果先前的UTXO已被花费,则该流程结束,因为合约已被关闭。然而,应当理解,如果从点对点分类账中,不能识别至少一个未花费的输出(UTXO),则用户(例如,被许可方)可经由分布式散列表(DHT)连接到供应商的服务器,并被给与例如支付以更新许可证的机会。
[0162] 如果有已存在的关闭交易,那么策动者只需对此交易进行签名,并将其提交到区块链。如果没有已存在的关闭交易,那么策动者将,用最后一个合约的UTXO作为交易输入来创建交易,解锁脚本是他们的签名、与合约相关的元数据以及他们的公钥。
[0163] 在交易被接受到区块链时,大家都会知道,合约已被关闭(尽管只有参与者才知道具体原因)。
[0164] 表4中提供了通过花费至少一个未花费的输出(UTXO)来终止合约(例如许可证)的交易的示例,再次为了简洁起见,未示出矿工的费用。表4
[0165] 与表3类似,表3的第4至8行表示交易(ID-610)的输入。在此示例中,输入是1/4多重签名P2SH交易,即表3中所示的交易(ID-610)的输出。可看出,第7行中的赎回脚本对应于1/4多重签名P2SH交易的赎回脚本,即第二赎回脚本(RS2)。因此,为了解锁交易(ID-610)的输出,必须用代理公钥(PA)或第一用户公钥(PU1)来对第二赎回脚本(RS2)进行签名。
[0166] 表3的第9至13行表示交易(ID-620)的输出,在这种情况下,其代表正被花费的未花费输出(UTXO)(即,正在向代理(A)或oracle返还的一定数量的加密货币(C1))。第10行示出了输出值,其为第一数量的加密货币(C1)。指示计算机软件或许可证的位置的标识符
[0167] 如上所述,数据(D1)或许可证可包括分别指示计算机软件或许可证的位置的标识符。
[0168] 在一个示例中,标识符可以独立于数据(D1)或许可证而确定,并且保持与数据(D1)或许可证分开。如上面的方法100中所述,还可将标识符与数据(D1)和第一散列值(H1)一起分配给关键字-值对中的值。以这种方式,如上所述,标识符可包括在消息输入(关键字,值)(put(key,value))的值(value)字段中,并发送到DHT 13中的参与节点。
[0169] 在一个示例中,指示位置的标识符可包括互联网上的对象的URL。在另一示例中,指示位置的标识符可包括诸如散列表或DHT 13之类的存储库的地址。在又一示例中,指示位置的标识符可包括基于计算机的存储库的地址,该存储库例如是基于计算机的资源上提供的服务器、数据库或存储设施,例如与第一节点3的第一处理设备21相关的数据存储17。
[0170] 图6示出了用于确定计算机软件或许可证的位置的方法500。方法500包括步骤510,确定来自第一赎回脚本(RS1)的元数据(M)。如上所述,元数据(M)可嵌入在第一赎回脚本(RS1)中的公钥可用的15个位置中的一个或多个。
[0171] 在比特币协议的P2SH方法中,当交易的输出在后续交易中被花费时,赎回脚本在后续交易中变得可见。如上所述并参考表2,发行代币的交易(ID-600)被返还给代理(A)。以这种方式,代理(A)可花费该发行代币以暴露第一赎回脚本(RS1)。因此,基于第二散列值(H2)的元数据(M)在P2P分布式分类账14上可见。以这种方式,在步骤520中,能够从第一赎回脚本(RS1)中的元数据(M)获取第二散列值(H2)。在一个示例中,能够使用请求消息获取(关键字)(get(key)),从DHT 13中获取与关键字-值对中的关键字相关的值。
[0172] 方法500还包括步骤530,通过通信网络5,将第二散列值(H2)发送到与DHT 13的参与节点相关的处理器。如上所述,第二散列值(H2)可为关键字-值对中的关键字。还如上所述,可通过向DHT 13的任何参与节点提供包含关键字的消息来获取给定关键字的值。因此,在标识符包括在关键字-值对中的值字段中的示例中,方法500能够从参与节点的处理器处,确定指示计算机软件或许可证的位置的标识符(步骤540)。处理设备
[0173] 如上所述,第一节点3和第二节点7可为电子设备,例如计算机、平板计算机、移动通信设备、计算机服务器等。电子设备可包括处理设备21、27、数据存储17和用户接口15。
[0174] 图7示出了处理设备21、27的示例。处理设备21、27可在第一节点3、第二节点7或未另外示出的其他节点处使用。处理设备21、27包括经由总线1530彼此通信的处理器1510、存储器1520和接口设备1540。存储器1520存储计算机软件程序,该计算机软件程序包括用于实现上述方法100和500的机器可读指令和数据,处理器1510执行来自存储器1520的指令以实现方法100和500。接口设备1540可包括通信模块,其促进与通信网络5的通信,在一些示例中,也促进与用户接口15和诸如数据存储17之类的外围设备通信。应当注意,尽管处理设备1510可为独立的网络元件,但是处理设备1510也可为另一网络元件的一部分。此外,由处理设备1510执行的一些功能可分布在多个网络元件之间。例如,在与第一节点3相关的安全局域网中,第一节点3可具有多个处理设备21以实施方法100、500。
[0175] 在本公开描述用户、雇主、雇员、发行人、商家、提供商或其他实体执行特定动作(包括签名、发行、确定、计算、发送、接收、创建等),使用这种措辞是为了表述清楚。应该理解,这些动作由这些实体使用的计算设备执行。
[0176] 本领域技术人员将理解,在不脱离本发明大体的范围的情况下,可对上述实施例作出多种变化和/或修改。因此,本发明的实施例在所有方面都被认为是说明性的而非限制性的。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈