会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 智能合约 / 智能合约

智能合约

申请号 CN202180015017.2 申请日 2021-01-19 公开(公告)号 CN115136542A 公开(公告)日 2022-09-30
申请人 区块链许可股份公司; 发明人 克雷格·史蒂文·赖特; 克洛伊·塔尔坦;
摘要 一种在分层网络中执行的方法。所述分层网络包括核心层,所述核心层包括一个或更多个核心节点;一个或更多个中间层,每个所述中间层包括一个或更多个中间层节点;一个或更多个外层,每个所述外层包括一个或更多个外层节点。每个所述核心节点是区块链网络的节点。一个或更多个中间层节点是提供智能合约服务以维护所述智能合约状态的智能合约节点。一个或更多个外层节点是所述智能合约服务的客户端节点。所述方法包括由智能合约节点:在所述第一智能合约节点处维护的所述状态的记录中记录所述智能合约的状态。此外,同时记录所述状态的至少一个第一事务记录在所述区块链网络的区块链上。
权利要求

1.一种在分层网络中维护智能合约状态的方法,所述分层网络包括核心层、一个或更多个中间层、和一个或更多个外层,所述核心层包括一个或更多个核心节点,每个所述中间层包括一个或更多个中间层节点,每个所述外层包括一个或更多个外层节点;其中,每个所述核心节点是区块链网络的节点,所述中间层节点中的一个或更多个中间层节点是提供智能合约服务以维护所述智能合约状态的智能合约节点,所述外层节点中的一个或更多个外层节点是所述智能合约服务的客户端节点;所述方法包括由所述一个或更多个智能合约节点中的第一智能合约节点执行:在所述第一智能合约节点处维护的所述状态的记录中记录所述智能合约的状态;

其中,也记录有所述状态的至少一个第一事务被记录在所述区块链网络的区块链上。

2.根据权利要求1所述的方法,其中所述一个或更多个智能合约节点是多个智能合约节点;所述方法包括,由所述第一智能合约节点:将所述状态传播到另一个智能合约节点处维护的所述智能合约状态的记录,所述传播在所述分层网络的所述一个或更多个中间层内的智能合约节点之间的一个或更多个连接上执行。

3.根据权利要求1或2所述的方法,其中所述第一事务由所述客户端节点中的一个客户端节点传输到待记录在所述区块链中的所述核心节点中的至少一个核心节点。

4.根据前述任一项权利要求所述的方法,其中所述方法包括,由所述第一智能合约节点:将所述第一事务从所述第一智能合约节点传输到待记录在所述区块链上的所述核心节点中的至少一个核心节点。

5.根据权利要求3所述的方法,其中,通过所述客户端节点中的一个客户端节点与所述核心层之间的所述分层网络内的至少一个连接,所述第一事务被直接传输到所述至少一个核心节点。

6.根据权利要求4所述的方法,其中所述方法包括,由所述第一智能合约节点:在所述第一智能合约节点处从所述客户端节点中的所述一个客户端节点接收所述第一事务;

其中所述第一智能合约节点的所述传输包括将所述第一事务转发到所述至少一个核心节点。

7.根据权利要求6所述的方法,其中以下两项中的一项或两项:‑所述接收是直接通过所述第一智能合约节点与所述客户端节点中的所述一个客户端节点之间的所述分层网络内的连接执行的,和/或‑所述转发是直接通过所述第一智能合约节点与所述核心层之间的所述分层网络内的至少一个连接执行的。

8.根据前述任一项权利要求所述的方法,其中所述第一事务由所述客户端节点中的一个客户端节点发起。

9.根据权利要求1至7中任一项所述的方法,其中所述第一事务由所述第一智能合约节点发起。

10.根据前述任一项权利要求所述的方法,其中在所述智能合约节点中的至少一个智能合约节点处维护的所述状态的所述记录被提供给所述客户端节点中的至少一个客户端节点。

11.根据权利要求10所述的方法,其中所述提供使得所述至少一个客户端节点能够确定所述状态,而无需查询所述区块链上的所述记录。

12.根据权利要求10或11所述的方法,其中所述记录直接通过所述至少一个智能合约节点与所述至少一个客户端节点之间的所述分层网络内的连接提供。

13.根据权利要求10至12中任一项所述的方法,其中所述方法包括:所述第一智能合约节点,通过所述第一智能合约节点将在所述第一智能合约节点处维护的所述状态的所述记录提供给所述至少一个客户端节点,来执行所述提供。

14.根据从属于权利要求2的权利要求10至13中任一项所述的方法,其中在所述状态传播到的其它智能合约节点中的至少一个处维护的记录被提供给所述至少一个客户端节点。

15.根据前述任一项权利要求所述的方法,其中所述智能合约节点中的至少一个智能合约节点被设置成检查所述区块链上或矿工内存池中的所述记录,以确认所述智能合约的所述状态。

16.根据权利要求15所述的方法,其中所述至少一个智能合约节点被设置成直接通过所述至少一个智能合约节点与所述核心节点中的至少一个核心节点之间的所述分层网络内的连接来执行所述检查。

17.根据权利要求15或16所述的方法,其中所述方法包括所述第一智能合约节点执行所述检查。

18.根据权利要求15、16或17所述的方法,其中所述检查由除所述第一智能合约节点之外的所述智能合约节点中的另一智能合约节点执行。

19.根据前述任一项权利要求所述的方法,其中所述客户端节点中的至少一个客户端节点检查所述区块链或矿工的内存池,以确认所述智能合约的所述状态。

20.根据权利要求19所述的方法,其中由所述至少一个客户端节点进行的所述检查通过所述客户端节点与所述核心层之间的所述分层网络内的直接连接执行。

21.根据前述任一项权利要求所述的方法,其中所述第一事务包括一个或更多个输入,每个输入包括所述智能合约的相应方的加密签名。

22.根据前述任一项权利要求所述的方法,其中所述第一事务的输入包括所述第一智能合约节点的操作者的加密签名。

23.根据前述任一项权利要求所述的方法,其中所述第一事务包括一个或更多个输出,每个输出包括将所述输出锁定到所述智能合约的相应方的锁定脚本。

24.根据前述任一项权利要求所述的方法,其中所述第一事务包括应用级有效载荷,所述有效载荷包括所述智能合约的一个或更多个条款。

25.根据前述任一项权利要求所述的方法,其中所述方法包括由所述第一智能合约节点:使用与所述第一智能合约节点相关联的加密密钥对所述有效载荷的至少一部分进行签名,所述有效载荷包括所述条款中的至少一个。

26.根据权利要求24或25所述的方法,其中所述有效载荷包含在所述第一事务的不可花费的输出中。

27.根据前述任一项权利要求所述的方法,其中所述在所述第一智能合约节点处维护的所述记录中记录所述状态包括:记录所述智能合约的第一状态,并且记录所述智能合约的所述状态的变化,所述变化是与所述第一状态相比的变化;

其中所述第一状态被记录在所述区块链上的第一事务中,所述状态变化记录在所述区块链上的第二事务中。

28.根据权利要求27所述的方法,其中所述第一事务包括输出,所述输出包括相应的锁定脚本,所述锁定脚本包括状态难题,所述状态难题需要状态难题的解以解锁所述相应的锁定脚本;并且其中所述方法包括由所述第一智能合约节点:使用存储在所述第一智能合约节点的一组规则来基于所述一组规则制定所述状态难题,并在所述区块链上记录之前将所述状态难题包括在所述第一事务中;以及在所述第一智能合约节点维护的所述记录中记录所述智能合约状态的变化,其条件是所述第二事务包括输入,所述输入指向包括所述状态难题的相应输出,并且所述输入提供所述状态难题的解。

29.根据前述任一项权利要求所述的方法,其中所述第一事务通过所述分层网络的一个或更多个外层内的至少一个连接被在至少两个客户端节点之间协商。

30.根据权利要求2至7、10至20或29中任一项所述的方法,其中使用通信协议执行所述分层网络的至少一些节点之间的通信,包括所述传播、传输、接收、转发、提供、检查和/或协商中的一个或更多个,其中消息的形式如下:a)从客户端节点发送到核心节点的事务;

b)从客户端节点到核心节点的查询,以查询事务是否已被接受到矿工的内存池中,以及来自所述核心节点的对应响应;

c)从客户端节点到核心节点的默克尔证明请求,其表明事务已挖掘到区块中,以及来自所述核心节点的包含所述默克尔证明的响应;和/或d)从客户端节点到核心节点的区块头列表请求,以及来自所述核心节点的包含所述区块头列表的响应。

31.根据前述任一项权利要求所述的方法,其中所述第一智能合约节点处的所述状态的记录包括记录多个状态变化,所述多个状态变化也记录在所述区块链上的一个或更多个事务中,所述一个或更多个事务至少包括所述第一事务;其中所述方法包括由所述第一智能合约节点:确定所述状态变化的顺序,并且根据所述顺序将所述状态变化应用于在所述第一智能合约节点处维护的所述记录中。

32.根据权利要求31所述的方法,其中所述顺序的所述确定包括从所述分层网络的所述中间层节点中的一个或更多个中间层节点中实现的排序服务接收所述顺序。

33.根据权利要求31或32所述的方法,其中所述顺序记录在所述区块链上。

34.根据前述任一项权利要求所述的方法,其中所述核心层是完整的。

35.根据前述任一项权利要求所述的方法,其中所述分层网络总体是不完整的。

36.一种计算设备,所述计算设备包括:

存储器,所述存储器包括一个或更多个存储器单元,以及

处理装置,所述处理装置包括一个或更多个处理单元;

其中所述存储器存储被设置成在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时通过执行根据前述任一项权利要求所述的方法来操作作为所述第一智能合约节点的所述计算机设备。

37.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或更多个处理器上运行时,执行根据权利要求1至35中任一项所述的方法。

38.一种方法,所述方法包括:

使用通信协议的一个或更多个消息在第一网络的两个或更多个节点之间传送关于智能合约的信息,其中消息的形式如下:a)从客户端节点发送到核心节点的事务;

b)从客户端节点到核心节点的查询,以查询事务是否已被接受到矿工的内存池中,以及对应的响应;

c)默克尔证明请求,所述默克尔证明表明事务已挖掘到区块中,以及包含所述默克尔证明的响应;和/或d)区块头列表请求,以及包含所述区块头列表的响应;以及

导致所述智能合约的状态存储在提供智能合约服务的所述网络的智能合约节点上的记录中;

其中所述智能合约的所述状态也记录在区块链网络的区块链上。

39.一种计算设备,所述计算设备包括:

存储器,所述存储器包括一个或更多个存储器单元;

处理装置,所述处理装置包括一个或更多个处理单元;以及

网络接口,所述网络接口包括一个或更多个网络接口单元;

其中所述存储器存储被设置成在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时操作所述计算机设备,以执行根据权利要求38所述的方法,包括经由所述网络接口传送所述一个或更多个消息。

40.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或更多个处理器上运行时,执行根据权利要求38所述的方法。

说明书全文

智能合约

技术领域

[0001] 本公开涉及一种使用区块链提供智能合约的方法。

背景技术

[0002] 区块链是指一种分布式数据结构形式,其中在点对点(P2P)网络中的多个节点中的每个节点处维护区块链副本。区块链包括一系列数据区块,其中每个区块包括一个或更多个事务(transaction)。每个事务都可以回指序列中的先前事务,其可以扩展一个或更多区块。事务可以通过提交到网络包括在新区块中。新区块的创建过程称为“挖掘”,该过程涉及多个挖掘节点中的每个挖掘节点争相执行“工作量证明”,即基于等待包括在区块中的未决事务池解决加密难题。
[0003] 网络中的每个节点可以具有以下三个角色中的任何一个、两个或全部:转发、挖掘和存储。转发节点在整个网络节点中传播事务。挖掘节点将事务挖掘到区块中。存储节点各自对区块链中的已挖掘区块存储自己的副本。为了将事务记录在区块链中,一方将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的挖掘节点可以争相将该事务挖掘到新区块中。每个节点被配置为遵守相同的节点协议,该协议将包括用于确认事务有效的一个或更多个条件。无效事务将不会传播或挖掘到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此作为不可改变的公共记录,继续存储在P2P网络中的各个节点处。
[0004] 成功解决工作量证明难题以创建最新区块的矿工通常被奖励一个称为“区块创始事务”的新事务,该事务会生成新的数字资产数额。工作量证明激励矿工不要欺骗系统,在他们的区块中包括双重花费事务,因为挖掘区块需要大量计算资源,而包括试图双重花费的区块很可能不会被其他节点接受。
[0005] 在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或更多个输入以及一个或更多个输出。任何可花费输出包括指定数字资产数额的元素,有时称为UTXO(“未花费的事务输出”)。该输出还可以包括指定用于赎回该输出的条件的锁定脚本。每个输入包括指向先前事务中的此类输出的指针,并且还可以包括解锁脚本以用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或更多个条件的锁定脚本。第二事务(目标事务)包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
[0006] 在此类模型中,当第二事务(目标事务)被发送到P2P网络以在区块链中传播和记录时,在每个节点处应用的有效性准则之一将是:解锁脚本满足在第一事务的锁定脚本中定义的一个或更多个条件中的所有条件。另一条件将是:第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务,也不会包括该事务以便挖掘到要记录在区块链中的区块中。
[0007] 另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。
[0008] 传统上,区块链中的事务用于传递数字资产,即许多数字代币。但是也可利用区块链在区块链上叠加其它功能。例如,区块链协议可允许在事务输出中存储附加用户数据。现代区块链在单一事务中可存储的最大数据容量在不断增加,从而能够并入更复杂的数据。例如,这可用于在区块链中存储电子文档,甚至音频或视频数据。

发明内容

[0009] 本公开提供了一种方案,由此智能合约的状态维持在围绕区块链网络节点的核心分层的智能合约节点层中,并且由此状态也记录在区块链网络的区块链上。
[0010] 根据本文公开的一个方面,提供了一种在分层网络中维护智能合约的状态的方法。所述分层网络包括核心层,所述核心层包括一个或更多个核心节点;一个或更多个中间层,每个所述中间层包括一个或更多个中间层节点;一个或更多个外层,每个所述外层包括一个或更多个外层节点。每个所述核心节点是区块链网络的节点,所述中间层节点中的一个或更多个是提供智能合约服务以维护所述智能合约状态的智能合约节点,所述外层节点中的一个或更多个是所述智能合约服务的客户端节点。所述方法包括由所述一个或更多个智能合约节点中的第一个:在所述第一智能合约节点处维护的所述状态的记录中记录所述智能合约的状态。此外,同时记录所述状态的至少一个第一事务记录在所述区块链网络的区块链上。

附图说明

[0011] 为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
[0012] 图1是一种用于实现区块链的系统的示意性框图;
[0013] 图2示意性地示出了可记录在区块链中的事务的一些示例;
[0014] 图3是分层网络的示例的示意性表示;
[0015] 图4是分层网络的示例的另一示意性表示;
[0016] 图5是分层的示例的另一示意性表示;
[0017] 图6是分层网络的示例的另一示意性表示;
[0018] 图7示意性地示出了分层网络中实现的示例性认证服务;
[0019] 图8是用于记录区块链上的数据项顺序的示例性事务的示意性事务图;
[0020] 图9示意性地示出了用于记录事务中一组数据项的顺序的示例性索引列表;
[0021] 图10示意性地示出了用于记录事务中一组数据项的顺序的索引列表的另一示例;
[0022] 图11示意性地示出了用于记录事务中一组数据项的顺序的索引列表的另一示例;
[0023] 图12示意性地示出了在分层网络的一层中实现的智能合约节点的系统;
[0024] 图13是描述用于零息债券合约的基于区块链的DFA的示意图;
[0025] 图14是示出与主要状态并行存在的次要状态的示意图;
[0026] 图15示意性地示出了区块链分层网络(BLN),分别由第1层到第3层的矿工、智能合约和用户组成;
[0027] 图16示意性地示出了在BLN拓扑中连接的节点社区;
[0028] 图17是示出示例性方法中第一阶段的示意性序列图;
[0029] 图18是示出示例性方法中第二阶段的示意性序列图;
[0030] 图19是示出示例性方法中第三阶段的示意性序列图;
[0031] 图20是示出示例性始发事务的示意性事务图;
[0032] 图21至图24是示出部分完成的接续阶段中部分完成的交易事务的示例的示意性事务图;
[0033] 图25是示出完成交易事务的示例的示意性事务图;
[0034] 图26是示出转换事务的示例的示意性事务图;
[0035] 图27是示出完成事务的示例的示意性事务图;
[0036] 图28是示出UTXO集合撤销事务的示例的示意性事务图。

具体实施方式

[0037] 示例性系统概述
[0038] 图1示出了一种用于实现区块链150的示例性系统100。系统100包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个节点104,该多个节点被设置成在分组交换网络101内形成点对点(P2P)覆盖网络106。该区块链网络106的每个节点
104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个节点104包括含一个或更多个处理器的处理装置,例如一个或更多个中央处理单元(CPU)、加速器处理器、特定应用程序处理器和/或现场可编程门阵列(FPGA)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等的磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等的电子媒介和/或诸如光盘驱动器等的光学介质。
[0039] 区块链150包括一系列数据区块151,其中在P2P网络160中的多个节点中的每个节点处维护相应的区块链150副本。区块链中的每个区块151均包括一个或更多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链通常全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定一个数额,该数额表示属于输出被加密锁定的用户103的数字资产值(需要该用户的签名进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
[0040] 节点104中的至少一些节点扮演转发节点104F的角色,这些节点转发并因此传播事务152。节点104中的至少一些节点扮演挖掘区块151的矿工104M的角色。节点104中的至少一些节点扮演存储节点104S(有时也称为“完整副本”节点)的角色,每个存储节点均在相应的存储器中存储相同区块链150的相应副本。每个矿工节点104M还维护等待挖掘到区块151中的事务152的池154。给定节点104可以是转发节点104、矿工104M、存储节点104S或其中两个节点或所有节点的任意组合。
[0041] 在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,当前事务可以是池154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
[0042] 当前事务152j的输入还包括先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户103b。在某些情况下,事务152可具有多个输出,以在多个用户间分割输入数额(其中一个可以是原始用户
103a,以便进行变更)。在某些情况下,一事务还可以具有多个输入,以将一个或更多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或更多个输出。
[0043] 上述可称为“基于输出的”事务协议,有时也称为未花费的事务输出(UTXO)的协议(其中输出称为UTXO)。用户的总余额不是用区块链中存储的任何一个数字定义的;替代地,用户需要特殊“钱包”应用程序105,以整理该用户的所有UTXO值,这些UTXO值分散在区块链151的许多不同事务152中。
[0044] 作为基于账户的事务模型的一部分,另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。在此类系统中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含先前事务的ID,则该数据字段可指向先前事务。
[0045] 无论在何种类型的模型中,当用户103希望执行新事务152j时,其希望将新事务从其计算机终端102发送至P2P核实网络106的节点104中的一个(现在通常是服务器或数据中心,但原则上可以是其他用户终端)。此节点104根据在节点104中的每个节点处应用的节点协议检查事务是否有效。节点协议的详细信息将与相关区块链150中使用的事务协议类型相对应,一起形成整个事务模型。节点协议通常要求节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的先前事务152i。在基于输出的情况下,这可包括检查新事务152j的输入中包含的用户加密签名是否与新事务花费的先前事务152i的输出中定义的条件相匹配,其中该条件通常包括至少检查新事务152j的输入中的加密签名是否解锁新事务的输入所指向的先前事务152i的输出。在一些事务协议中,条件可至少部分地由输入和/或输出中包含的自定义脚本定义。或者,这可仅由节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,当前节点会将其转发到P2P网络106中的一个或更多个其他节点104。这些节点104中的至少一些节点还作为转发节点104F,根据相同的节点协议应用相同的测试,从而将新事务152j转发到一个或更多个进一步的节点104,依此类推。通过这种方式,新事务在节点104的整个网络中进行传播。
[0046] 在基于输出的模型中,给定输出(例如,UTXO)是否花费的定义是,根据节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图花费或赎回的先前事务152i的输出尚未被另一个有效事务花费/赎回。同样,如果无效,事务152j将不会在区块链中传播或记录。这可防止重复花费,即花费者对同一个事务的输出花费超过一次。
[0047] 除核实之外,节点104M中的至少一些节点在称为挖矿的过程中争先创建事务区块,该过程以“工作量证明”为基础。在挖矿节点104M处,将新事务添加到区块中尚未出现的有效事务的池中。然后,矿工争相通过尝试解决加密难题来组装事务池154中事务152的新的有效区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与事务池154并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个节点104M处消耗大量的处理资源。
[0048] 解决难题的第一矿工节点104M在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其他节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。基于已在每个此类节点处检查获胜者的已宣布解决方案,获胜者已为其解决该难题的事务池154之后由充当存储节点104S的节点104中的至少一些节点记录在区块链150中作为新区块151。区块指针155还分配给指向区块链中先前创建的区块151n‑1的新区块151n。工作量证明有助于降低重复花费的风险,因为创建新区块151需要大量工作,并且由于包含重复花费的任何区块都可能被其他节点104拒绝,因此挖矿节点104M受到激励,不允许在其区块中包含双重花费。一旦创建,则不可修改区块151,因为其根据相同的协议在P2P网络106中的存储节点104S中的每个存储节点进行识别和维护。区块指针155还向区块151施加顺序。由于事务152记录在P2P网络106中每个存储节点104S处的有序区块中,因此提供了事务的不可变公共分类账。
[0049] 池154有时称为“内存池”。在本文中,该术语并不限于任何特定的区块链、协议或模型。它是指矿工已接受用于挖矿的事务池,并且矿工已承诺不接受试图花费相同输出的任何其它事务。
[0050] 应当注意的是,在任何给定时间争相解决难题的不同矿工104M可能会根据任何给定时间的未挖掘事务池154的不同快照执行该操作,具体取决于他们何时开始搜索解决方案。解决相应难题的人员首先定义新区块151n中包含的事务152,并更新当前未挖掘事务池154。然后,矿工104M继续争相从新定义的未完成池154中创建区块,依此类推。此外,还存在解决可能出现的任何“分叉”的协议,其中两名矿工104M彼此在很短的时间内解决难题,从而传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。
[0051] 在大部分区块链中,获胜矿工104M会自动获得特殊类型的新事务作为奖励,该新事务创建新的数字资产值(与将数字资产数额从一个用户转移至另一个用户的正常事务截然相反)。因此,获胜节点被视为已“挖掘”一定数量的数字资产。这种特殊类型的事务有时称为“生成”事务,其自动形成新区块151n的一部分。该奖励可激励矿工104M争相参与工作量证明。通常情况下,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中包含事务的区块151n的获胜矿工104M。
[0052] 由于挖掘中涉及的计算资源,通常至少矿工节点104M中的每个矿工节点采用服务器的形式,该服务器包括一个或更多个物理服务器单元,甚至整个数据中心。每个转发节点104M和/或存储节点104S还可采取服务器或数据中心的形式。但是,原则上来说,任何给定节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
[0053] 每个节点104的存储器均存储被配置为在节点104的处理装置上运行的软件,以根据节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层的一个或更多个应用中实现,或者在诸如操作系统层或协议层的较低层中实现,或者在这些层的任何组合中实现。此外,在本文中使用的“区块链”一词是指一般技术类型的通用术语,不限于任何特定专有区块链、协议或服务。
[0054] 扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。他们充当事务中的支付者和收受者,但不一定代表其他方参与挖掘或传播事务。他们不一定运行挖矿协议。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝(Alice),第二方103b称为鲍勃(Bob),但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
[0055] 每一方103的计算机设备102包括相应的处理装置,其包括一个或更多个处理器,例如一个或更多个CPU、图形处理单元(GPU)、其他加速器处理器、特定应用程序处理器和/或FPGA。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
[0056] 客户端应用程序105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动SSD、闪存密钥、可移动EEPROM、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如CD或DVD ROM等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
[0057] 客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应的用户方103创建、签名和发送拟在节点104的整个网络中传播的事务152,并因此包含在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
[0058] 注意:虽然各种客户端功能可以描述为集成到给定客户端应用105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用组成的套件中实现,例如经由API进行接口连接或一个应用作为另一个应用的插件。更通俗地说,客户端功能可以在应用层或诸如操作系统的较低层或这些层的任意组合实现。下面将根据客户端应用105进行描述,但应当理解的是,这不是限制性的。
[0059] 每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到P2P网络106的转发节点104F中的至少一个转发节点。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联系一个、一些或所有存储节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其他方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。每个节点
104运行软件,其被配置为根据节点协议核实事务152有效的软件,并且在转发节点104F的情况下转发事务152,以在整个网络106中传播此类事务。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。区块链150中的所有事务152均采用相同的事务协议(尽管事务协议可允许其内存在不同的事务子类型)。网络106中的所有节点104采用相同的节点协议(尽管其可根据针对该子类型定义的规则区分处理不同的事务子类型,并且不同的节点还可扮演不同的角色,从而实现协议的不同对应方面)。
[0060] 如上所述,区块链150包括一系列区块151,其中每个区块151包括通过如前所述的工作量证明过程创建的一个或更多个事务152的集合。每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。区块链150还包括有效事务池154,其等待通过工作量证明过程包含在新的区块中。每个事务152(除了一生成事务)包括指向先前事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或更多个原始事务152指向创始区块153,而非先前事务。
[0061] 当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送至其连接的一个或更多个转发节点104F中的一个。例如,这可以是与爱丽丝的计算机102最近或最佳连接的转发节点104F。当任何给定节点104接收新事务152j时,其将根据节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
[0062] 如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何存储节点104S将向在该节点104S处维护的区块链150的副本中的池154中添加新有效事务152。进一步地,接收事务152j的任何转发节点104F随后将有效事务152传播至P2P网络106中的一个或更多个其他节点104。由于每个转发节点104F应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个P2P网络106中传播。
[0063] 一旦进入在一个或更多个存储节点104处维护的区块链150的副本中的池154中,矿工节点104M将开始竞相解决包括新事务152的池154的最新版本方面的工作量证明难题(其他矿工104M可继续尝试基于池154的旧视角解决难题,但首先解决难题的矿工将定义下一个新区块151的结束位置和新池154的开始位置,最终将有人解决包括爱丽丝的事务152j的池154的一部分的难题)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
[0064] 不同的节点104可以首先接收给定事务的不同实例,并且因此在一个实例被挖掘到区块150中之前具有关于哪个实例“有效”的冲突视图,此时所有节点104同意所挖掘的实例是唯一的有效实例。如果节点104接受一个实例为有效实例,然后发现第二实例已记录在区块链150中,则该节点104必须接受这一点,并将丢弃(即视为无效)其最初接受的未挖掘实例。
[0065] 基于UTXO的模型
[0066] 图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或更多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。
[0067] 在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或更多个输入202和一个或更多个输出203。每个输出203可包括未花费的事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO包括指定数字资产数额的值。这表示(分布式)分类账上的一组代币。UTXO还可包含其来源事务的事务ID以及其他信息。事务数据结构还可包括头部201,其可包括输入字段202和输出字段203的大小指示符。头部201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在提交至矿工104M的原始事务152的头部201中。
[0068] 比方说,爱丽丝103a希望创建转移相关数字资产数额至鲍勃103b的事务152j。在图2中,爱丽丝的新事务152j标记为“Tx1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字资产数额,并至少将此类数额中的一部分转移至鲍勃。在图2中,先前事务152i标记为“Tx0”。Tx0和Tx1只是任意的标记,其不一定意味着Tx0指区块链151中的第一事务且Tx1指池154中的下一个事务。Tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
[0069] 当爱丽丝创建其新事务Tx1时,或至少在她将该新事务发送至网络106时,先前事务Tx0可能已经有效并包括在区块链150中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在池154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络102;或者,如果节点协议允许缓冲“孤立”事务,Tx0甚至可以在Tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定节点104的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达节点104的子事务被视为孤立事务。根据节点协议和/或矿工行为,其可被丢弃或缓冲一段时间,以等待父事务。
[0070] 先前事务Tx0的一个或更多个输出203中的一个包括特定的UTXO,标记为UTXO0。每个UTXO包括指定UTXO表示的数字资产数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回UTXO。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益者)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
[0071] 锁定脚本(亦称scriptPubKey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(Script)”(S大写)。锁定脚本指定花费事务输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptSig)是提供满足锁定脚本准则所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
[0072] 因此在示出的示例中,Tx0的输出203中的UTXO0包括锁定脚本[Checksig PA],该锁定脚本需要爱丽丝的签名Sig PA,以赎回UTXO0(严格来说,是为了使试图赎回UTXO0的后续事务有效)。[Checksig PA]包含爱丽丝的公私密钥对中的公钥PA。Tx1的输入202包括向回指向Tx1的指针(例如,通过其事务ID(TxID0),其在实施例中是整个事务Tx0的哈希值)。Tx1的输入202包括在Tx0中标识UTXO0的索引,以在Tx0的任何其他可能输出中对其进行标识。Tx1的输入202进一步包括解锁脚本,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
[0073] 根据实施方式,所需的签名可以例如是传统的ECDSA(椭圆曲线数字签名算法)签名、DSA(数字签名算法)签名或RSA(Rivest–Shamir–Adleman)签名,或任何其它适当形式的加密签名。签名的挑战可以例如实现为标准的支付到公钥(P2PK)难题或P2PK哈希(P2PKH)难题,或者替代地,R难题(R‑puzzle)等难题可以实现为签名的手段。本示例以P2PK为例进行说明。
[0074] 当新事务Tx1到达节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个准则)。在实施例中,这涉及并置两个脚本:
[0075] ||[Checksig PA]
[0076] 其中“||”表示并置,“<…>”表示将数据放在堆栈上,“[…]”表示由解锁脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥PA(包括在Tx0的输出的锁定脚本中),以认证Tx1的输入中的锁定脚本是否包含爱丽丝签名预期部分的数据时的签名。预期的部分数据本身(“消息”)也需要包括在Tx0中,以便执行此认证。在实施例中,签名的数据包括整个Tx0(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
[0077] 本领域技术人员将熟悉通过公私密码进行认证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如节点104等其他实体可认证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行散列,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够认证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
[0078] 本文任何位置提及的哈希可以例如通过SHA(安全哈希算法)哈希函数、HMAC(基于哈希的消息认证码)哈希函数或本领域已知的任何其它适当形式的加密哈希函数来实现。
[0079] 如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或更多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行认证),则节点104认为Tx1有效。如果是挖矿节点104M,这意味着其将添加至等待工作量证明的事务154池。如果是转发节点104F,则其将事务Tx1转发到网络106中的一个或更多个其他节点104,从而将在整个网络中传播。一旦Tx1有效并包括在区块链150中,这将把Tx0中的UTXO0定义为已花费。请注意,Tx1仅在花费未花费的事务输出203时才有效。如果试图花费另一事务152已经花费的输出,则即使满足所有其他条件,Tx1也将无效。因此,节点104还需要检查先前事务Tx0中引用的UTXO是否已经花费(已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定节点104可维护单独的数据库,标记已花费事务152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效事务的有效输入。
[0080] 如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务将不会传播或挖掘到区块151中。
[0081] 请注意,在基于UTXO的事务模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分数额,而同时又花费另一部分。但UTXO的数额可以在下一个事务的多个输出之间分割。例如,Tx0的UTXO0中定义的数额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有数额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零,或者支付给另一方。
[0082] 在实践中,爱丽丝通常还将需要包括获胜矿工的费用,因为现在仅靠区块创始事务的奖励币通常不足以激励挖掘。如果爱丽丝未包括矿工的费用,Tx0可能会被矿工节点104M拒绝,因此,尽管技术上有效,但仍然不会传播并包括在区块链150中(如果矿工104M不愿意,矿工协议不会强制他们接受事务152)。在一些协议中,挖掘费不需要其自身的单独输出203(即不需要单独的UTXO)。替代地,给定事务152中输入202所指向的总数额与输出203所指定的总数额之间的任何差额都将自动提供给获胜矿工104。例如,假设指向UTXO0的指针是Tx1的唯一输入,而Tx1只有一个输出UTXO1。如果UTXO0中指定的数字资产的数额大于UTXO1中指定的数额,则该差额将自动提供给获胜矿工104M。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定矿工费用。
[0083] 爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的未花费UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其他随后事务中尚未花费的各种UTXO值整理在一起。通过查询在任何存储节点104S(例如,与相应方的计算机设备102最近或最佳连接的存储节点104S)处存储的区块链150副本,可以实现这一点。
[0084] 请注意,脚本代码通常用示意图表示(即非精确语言)。例如,可写入[Checksig PA]表示[Checksig PA]=OP_DUP OP_HASH160OP_EQUALVERIFY OP_CHECKSIG。“OP_...”是指脚本语言的特定操作码。OP_CHECKSIG(又称“Checksig”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ECDSA)验证签名的有效性。在运行时,移除脚本中任何出现的签名(‘sig’),但在由‘sig’输入验证的事务中仍保留附加要求,诸如哈希难题。再如,OP_RETURN是脚本语言操作码,用于创建事务的不可花费输出,其可以将元数据储存在事务中,从而将元数据不可变地记录在区块链150中。例如,元数据可包括需存储在区块链中的文件。
[0085] 签名PA是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及全部或部分事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
[0086] 锁定脚本有时称为“scriptPubKey”,指其包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行认证。更通俗地说,脚本语言可用于定义任何一个或更多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
[0087] 分层网络
[0088] 分层网络结构:分层网络指在通信信道上分层的覆盖网络。比如,通信信道可以是底层基础设施网络,例如个人局域网、局域网(例如,公司间P2P网络)或广域网(例如,互联网)。在其它示例中,分层网络可以是经由有线连接而连接的节点网络。在另一示例中,连接可以是无线连接,例如蓝牙或Wi‑Fi连接。在一些示例中,上述示例性连接中的部分或全部可用于形成分层网络。
[0089] 部分或全部节点是被配置为根据连接协议连接(即,加入或重新加入)分层网络的网络。连接协议可能因连接节点所连接(即,尝试连接或重新连接)的网络的特定层而异。在详细描述连接协议之前,将描述可由连接协议创建或实施的一系列示例性分层网络。然而,应当理解的是,这些仅仅是说明性示例,通常而言,可以创建遵守连接协议的任何分层网络。
[0090] 图3是分层网络(LN)300的示例的示意性表示。通常而言,LN包括由核心节点301和一系列层(或外壳)组成的核心网络(或核心层)。核心层也称为LN的第一层。该系列层从核心层向外依次从由第二节点302组成的第二层延伸到一个或更多个外层。每个外层由一组外部节点303组成。图3中仅示出了一个外层,但应当理解的是,LN可以包括任意数量的外层。作为特定示例,图5示出了包括五层的LN 500的示例,图6示出了包括四层的LN 600的示例。
[0091] 图3的示例性LN 300包括五个核心节点301、六个第二节点302和八个外部节点303。在一些LN 300中,节点的数量可随着每一层而增加,即核心层由最小数量的节点组成,最外层由最大数量的节点组成。在其它示例中,核心层与最外层之间的一层或更多层可以由最大数量的节点组成。在此示例中,核心层是LN 300的最内层,第二层是中间层,外层(作为唯一的外层)是最外层。
[0092] 核心层(LN内的网络)在此示例中形成完全图,即每个核心节点301与另一核心节点301相互连接。对于五个核心节点301的核心层,在给定的示例中,核心层需要十个不同的核心连接(即,两个核心节点之间的连接)。在其它示例(例如,图4)中,核心层可能不是完全图。核心层可以形成“近完全图”。在近完全图中,至少一个核心节点301未连接到至少一个其它核心节点301。可能只缺少一个核心连接。在近完全图的特定示例中,每个核心节点301可以连接到一个或更多个节点,而不是所有其它核心节点301。
[0093] 第二层包括第二节点302。需要注意的是,术语“第二节点”仅用作节点302的标签,节点302通过构造位于LN 300的第二层中。每个第二节点302连接到至少一个核心节点301。在一些示例中,每个第二节点302可以仅连接到一个核心节点301。或者,第二节点302中的部分或全部可以连接到多个核心节点301。比如,第二节点302中的部分或全部可以连接到核心节点301中的每一个核心节点。在图3的示例性LN 300中,每个核心节点301连接到两个第二节点302。然而,在此示例中,一些第二节点302(示出为条纹圆圈)连接到一个核心节点
301,而一些第二节点302(示出为白色圆圈和阴影圆圈)连接到两个核心节点301。连接到相同核心节点301的第二节点302(和外层的外部节点303)称为“社区”。比如,多个白色节点形成一个社区,多个条纹节点形成一个社区,多个阴影节点形成又一社区。第二节点302与核心节点301之间的连接称为“祖先连接”,并示出为宽虚线。
[0094] 在图3的示例中,每个第二节点302连接到另外两个第二节点302。在一些示例中,第二节点302中的部分或全部可能不与其它第二节点形成连接,例如,一些第二节点302可连接到其它第二节点302,而一些第二节点可连接到其它第二节点302。这些“层内”连接在图3中示为节点之间的实线。
[0095] 图3的外层包括外部节点303。需要注意的是,尽管存在一定的可能性,但“外层”中的“外”一词本身并不一定局限于整个LN网络的最外层。每个外部节点303连接到至少一个第二节点302。在一些示例中,每个外部节点303可以仅连接到一个第二节点302。或者,外部节点303中的部分或全部可以连接到多个第二节点302。比如,外部节点303中的部分或全部可以连接到每个第二节点301。在图3的示例性LN 300中,每个外部节点303连接到两个第二节点302。一些第二节点302(即,条状节点)连接到两个外部节点303,一些第二节点302(即,白色节点和阴影节点)连接到三个外部节点303。
[0096] 在图3的示例中,每个外部节点303连接到同一层的两个其它第二节点303。在一些示例中,外部节点303中的部分或全部可能不与同一层的其它外部节点303形成任何连接。外部节点303中的部分或全部可以与同一层的另一外部节点303形成至少一个连接。
[0097] 除了连接到至少一个第二节点302之外,每个外部节点303还连接到至少一个核心节点301。外部节点303与核心节点301之间的连接称为“核心祖先连接”,示为细虚线。每个外部节点303可以连接到其第二祖先节点302所连接到的每个核心节点301。如图3所示,每个外部节点303可以连接到其第二祖先节点302所连接到的每个核心节点301,而非连接到其它核心节点301。在这种情况下,每个外部节点303属于单个社区。
[0098] 图4是LN 400的另一示例的示意性表示。与图3的LN 300一样,示例性LN 400包括核心层、第二层和外层。这些示例性LN 300、400共享相同数量的节点(即,五个核心节点301、六个第二节点302和八个外部节点303),但包括不同数量的连接。比如,在此示例中,核心层不是完全图,因为核心节点301之间不存在一些连接。另一区别在于,两个社区(白色节点和阴影节点)包括单个核心节点301,而另一社区(阴影节点)包括三个核心节点301。又一区别在于,LN 400外壳中的节点度现在为1,而LN 300外壳中的节点度为2。也就是说,在此示例中,对于LN 400,每个外部节点303连接到单个其它外部节点303。因此,不同层的节点具有不同的度。
[0099] 图5是LN 500的另一示例的示意性表示。在此示例中,仅一些核心节点301连接到第二节点和外部节点303。也就是说,在此示例中,一些核心节点301仅与其它核心节点301形成连接。因此,在此示例中,LN 500包括单个社区(阴影节点)。该示例中的LN 500包括五层:核心层、第二层和三个外层。核心层由五个核心节点301组成,这些节点构成近完全图。在近完全图的此示例中,只缺少单个核心连接。第二层由连接到两个核心节点301的单个第二节点302组成。第二层由连接到两个核心节点301的单个第二节点302组成。第三层由经由祖先连接而连接到第二节点302的单个外部节点303组成。第三层的外部节点303还连接到第二节点302所连接到的两个核心节点301。外部节点303经由相应的核心祖先连接而连接到两个核心节点301。第四层也由单个外部节点304组成。第四层的外部节点304经由祖先连接而连接到第三层的外部节点303,并且经由祖先连接而连接到第二节点302。第四层的外部节点304还连接到第二节点302和第三层的外部节点303所连接的两个核心节点301。外部节点304经由相应的核心祖先连接而连接到两个核心节点301。最后,第五层由两个外部节点305组成。第五层的两个外部节点305连接到第四层的外部节点304、第三层的外部节点
303和第二节点302,其中每个连接都是祖先连接。两个外部节点305还经由核心祖先连接而连接到两个核心节点301。在此示例中,对于LN 500,第二层的节点和外层的节点未连接到同一层的任何其它节点。
[0100] 图6是LN 600的另一示例的示意性表示。该LN包括两个节点社区,具体如白色节点和黑色节点所示。在此示例中,核心层形成完全图(即,节点网络)。每个社区包括一组特有的三个核心节点301。该示例性LN 600包括四层(核心层、第二层和两个外层)。外层的每个节点连接到先前的层中的一个节点。与图5的示例性LN 500类似,第二层的节点和外层的节点未连接到同一层的任何其它节点。
[0101] 在一些实施例中,LN 300、400、500、600(为简洁起见,从现在起用“300”表示)可以是“区块链分层网络(BLN)”。本文中“BLN”一词定义为分层网络,其包括区块链网络或至少部分区块链网络,例如参考图1描述的区块链网络106。
[0102] BLN受到Mandala网络的启发,具有一些类似的功能,但其被设计成允许更灵活和理想的连接结构,例如用于利用区块链网络106的服务和用户网络。
[0103] BLN 300可以在其核心包括区块链网络106的至少一部分。通常而言,分层网络的节点覆盖在底层基础设施网络上,例如互联网101。核心节点中的部分或全部是区块链网络106的节点104。它们可以包括挖矿节点104M、存储节点104S或其组合。在实施例中,核心节点中的每一个都是挖矿节点104M和/或存储节点104S(例如,完整复制节点)。
[0104] 每个外部节点303(或最外层的每个外部节点)可以是最终用户节点,包括用户的计算机设备。这可以是个人用户或组织,例如公司、学术机构或政府机构等。因此,每个外部节点303可以包括一个或更多个用户终端和/或服务器,该服务器包括位于一个或更多个站点的一个或更多个服务器单元。每个外部节点303包括存储器,该存储器包括一个或更多个存储器单元;处理装置,该处理装置包括一个或更多个处理单元。这些可以例如采用任何形式的存储器介质和/处理器,与前面关于其它网络元件或用户设备所讨论的一样。存储器存储被设置成在处理装置上运行的客户端软件,其中客户端软件被配置为当运行时根据以下任何实施例或类似实施例将节点作为遵循连接协议的协议客户端进行操作。可选地,最终用户节点中的一个或更多个可以包括区块链网络106的用户102的用户设备103,并且客户端软件可以包括区块链钱包应用程序105等。
[0105] 每个第二节点302可采用服务器的形式,该服务器包括一个或更多个物理服务器单元。每个此类节点包括存储器,该存储器包括一个或更多个存储器单元;处理装置,该处理装置包括一个或更多个处理单元。这些可以例如采用任何形式的存储器介质和/处理器,与前面关于其它网络元件所讨论的一样。存储器存储被设置成在第二节点302的处理装置上运行的软件。软件被配置为在运行时根据以下任何实施例或类似实施例遵循连接协议。在一些实施例中,软件被配置为当运行时提供根据以下描述的任何实施例或类似实施例操作的服务。
[0106] 在一些示例中,第二节点302中的部分或全部可以操作智能合约服务。智能合约服务被配置为响应并基于由LN 300的其它节点中的一个(例如,由外部节点303)传输到智能合约服务的区块链事务来执行预定义操作。比如,智能合约可以响应于从外部节点303接收特定区块链事务,将区块链事务传输到核心节点301。
[0107] 在其它示例中,第二节点302中的部分或全部可以操作其中的分布式数据库。也就是说,操作分布式数据库的每个第二节点302被配置为存储从LN 300的另一节点(例如,外部节点303)接收的数据。接收和存储数据的第二节点302可以被配置为将数据传播到同样操作分布式数据库的其它第二节点302。
[0108] 节点301、302、303被配置为在覆盖网络层形成彼此之间的连接。也就是说,分层网络的节点301、302、303被配置为遵循覆盖网络协议,该协议指定可以并且不可以与分层网络的其它节点301、302、303形成的连接。因此,尽管所有节点可以(但不一定)在物理上经由底层基础设施(例如,互联网)彼此连接,但当它们作为分层网络的节点301、302、303参与并根据分层网络300的相关覆盖网络协议进行操作时,此类节点301、302、303之间的连接可能会受到更大的限制。分层网络300的两个节点301、302、303之间的连接意味着这些节点可以直接通信,在这种情况下,意味着不必经由分层网络300的另一节点301、302、303执行跳转。在分层网络等覆盖网络的上下文中,“连接”指在分层网络300层(即,分层网络的覆盖网络协议层)的连接(即,边缘)。
[0109] 在实施例中,当LN 300是BLN,第二节点302中的部分或全部可以被配置为将区块链事务传输到这些第二节点302所连接的核心节点301。在一些示例中,第二节点302可以在将区块链事务传输到核心节点301之前生成区块链事务。在其它示例中,第二节点302可以将区块链事务转发给核心节点301。比如,第二节点302可以从外部节点303接收区块链事务,然后将接收到的区块链事务发送给核心节点301。类似地,给定的第二节点302(即,第二节点中的部分或全部)可以被配置为从连接到给定的第二节点302的核心节点301和/或外部节点303获得区块链事务。
[0110] 此外/或者,外部节点303中的部分或全部可以被配置为将区块链事务传输到其所连接的核心节点301。外部节点303还可以被配置为将区块链事务传输到其所连接的第二节点302。在一些示例中,外部节点303可以将区块链事务传输给第二节点302和核心节点301。
[0111] 外部节点303中的部分或全部可以被配置为将区块链事务传输给其它外部节点303,例如同一层的外部节点,或有序层集合中上一层或下一层的外部节点。
[0112] 在BLN 300的每个核心节点301执行区块链节点104的角色的实施例中,第二节点302和/或外部节点303中的部分或全部可以被配置为请求确认已在给定的第二节点302或外部节点303所连接的挖矿节点104M的事务池中接受给定事务。池154(有时称为“内存池”)包括已根据区块链网络106的一组共识规则进行核实的事务。如果事务(例如,“第一事务”)包含在池154中,则挖矿节点104M不会接受试图双重花费第一事务的输入所引用的输出的另一事务(例如,“第二事务”)。因此,第二节点302和/或外部节点303可以查询核心节点
301,以检查事务(例如,节点302、303向区块链网络106提交的事务)是否已被接受,或检查是否事务(例如,从BLN 300的另一节点接收的事务)是否为双重花费事务。核心节点301被配置为将对请求的回复传输到请求节点302、303。
[0113] 此外/或者,第二节点302和/或第三节点303可以被配置为向核心节点301传输请求,以获取已在区块链150的区块151中挖掘的事务的默克尔证明。技术人员熟悉默克尔证明。默克尔证明是追溯到默克尔根的哈希序列。为了验证是否已在区块151中挖掘事务,节点302、303获取事务的哈希值,将其与默克尔证明的哈希序列中的第一哈希值进行级联(即,与事务的哈希值处于同一默克尔树级别的哈希伙伴),并对结果进行哈希处理。重复该级联和哈希处理过程,直到默克尔证明中的所有哈希值都被利用为止。如果产生的哈希与默克尔根相同,则事务必须包含在默克尔树中,并且因此包含在区块151中。核心节点301被配置为将默克尔证明传输给请求节点302、303。
[0114] 此外/或者,第二节点302和/或第三节点303可以被配置为向核心节点301传输针对给定区块151的区块头的请求。在其它数据中,区块头包括挖掘到该区块151中的事务的默克尔根。核心节点301被配置为将默克尔证明传输给请求节点302、303。
[0115] 在一些实施例中,核心节点301中的部分或全部可以被配置为将一组事务传输给部分或全部第二节点302和/或连接到核心节点301的部分或全部外部节点。该组中的事务可共享公共属性。比如,核心节点301可以传输包含特定协议标志的所有事务。标志可以包含在事务的输出中,例如,在不可花费的输出中。再如,事务可包括特定(且相同)的区块链地址,例如,它们可能应支付给同一区块链地址。外部节点303可与核心节点301达成协议,即核心节点301将向与外部节点303相关联的地址发送任何应付的事务。又如,事务可包括二级共识规则集。也就是说,事务可在输出中包括多个控制分支,每个控制分支特定于相应的共识规则集。输出可包括特定于第一规则集的第一控制分支和特定于第二规则集的第二控制分支(这两个控制分支可以包含在if‑else条件中)。如果节点302、303被配置为实现第二规则集,则核心节点301可以将事务传输给节点302、303。如果节点302、303未被配置为实现第一规则集和第二规则集,则核心节点不会将事务传输给节点302、303。
[0116] 作为挖矿节点104M的核心节点301可以在由该挖矿节点104M挖掘到区块151的生成事务(也称为“Coinbase”事务)中包含特定于该挖矿节点104M的标识符(例如,“矿工ID”)。BLN 300的其它节点可使用标识符来识别网络上的该挖矿节点104M。
[0117] 识别LN 300的节点301、302、303的另一种方式是通过数字证书。节点301、302、303中的部分或全部可以与数字证书相关联。数字证书包含并证明相应节点的标识符,例如与该节点相关联的公钥、节点的网络地址(例如,IP地址)等。LN 300的节点可以使用不同节点的数字证书来连接到该节点。例如,外部节点303可以从第二节点302获取数字证书,并使用包含在数字证书中的第二节点的标识信息来连接到第二节点302。
[0118] 给定层的节点可以向有序层集中的下一层的节点颁发数字证书,即核心节点301可以向第二节点302颁发数字证书,第二节点302可以向第一外层的外部节点303颁发数字证书,依此类推。在一些示例中,给定层的节点可以向同一层的节点颁发数字证书,例如,第二节点302可以向一个或更多个其它第二节点302颁发相应的数字证书。
[0119] 连接协议:如上所述,连接到分层网络300的每个节点可以根据连接协议进行连接。也就是说,连接节点必须遵循连接协议的规则。连接节点只能形成连接协议所允许的连接。不得形成其它连接。在示例中,连接节点可以是核心节点301、第二节点302或外部节点303。在一些示例中,LN 300的每个节点都必须遵守连接协议。在其它示例中,只有第一次连接到LN 300或重新加入LN 300的节点必须遵循连接协议。图3至图6示出了根据连接协议建立的示例性LN 300、400、500、600。
[0120] 需要注意的是,从物理上讲,在一些示例中,LN 300的每个节点可以连接或能够在其它层彼此连接,例如经由互联网。连接协议限制覆盖网络层可以形成的连接,即在分层网络层不存在或不允许一些连接。LN 300的每个连接节点被配置为根据LN 300中的覆盖层协议(包括连接协议)进行操作,该协议确定节点可以和无法在覆盖层形成的连接。换言之,连接是允许的通信信道,其中两个节点被配置为允许通过其协议形成。如果节点与另一节点连接,则可以与该节点交换,而不经由分层网络中的另一节点跳转,但如果没有连接,则不能交换,只能经由存在连接的一个或更多个其它节点的跳转进行通信。
[0121] 连接协议要求连接节点连接到先前层(更内层)的至少一个节点和至少一个核心节点,但在一些示例中,核心节点可以是最内层,并且因此无法连接到先前层。在连接节点是第二节点的示例中,这两个要求是等效的。如果连接节点是第一外层的外部节点,则连接节点至少连接到第二节点302和核心节点301。
[0122] 连接协议可要求连接节点连接到多个核心节点。连接协议可进一步要求连接节点连接到多个(而非全部)核心节点,例如,除一个核心节点外的所有核心节点。连接节点可以是必须连接到两个或更多个核心节点的第二节点。也就是说,第二节点中的部分或全部必须连接到两个或更多个核心节点(在一些示例中,并非所有核心节点)。
[0123] 连接协议可要求连接节点连接到一个或更多个第二节点。如果连接节点是第二节点,这意味着连接(第二)节点必须连接到一个或更多个不同的第二节点。如果连接节点是外部节点,连接(第二)节点必须连接到一个或更多个第二节点。连接外部节点可以是第一外层的外部节点,或第二层的外部节点,以此类推。
[0124] 连接协议可要求连接到先前层节点的外部节点必须连接到先前层节点所连接的部分或全部核心节点(上面称为“核心祖先”)。例如,外部节点可连接到第二节点。在那种情况下,外部节点还必须连接到第二节点所连接的核心节点。如果外部节点连接到多个第二节点,则连接协议可要求外部节点必须连接到每个第二节点所连接的核心节点。再如,第二外层的外部节点可以连接到第一外层的外部结点。在该示例中,连接协议要求第二外层的外部节点必须连接到第一外层的外部结点所连接的核心节点。
[0125] 连接协议可要求外部节点连接到同一外层的一个或更多个(例如,两个)外部节点。连接协议可要求每个外部节点连接到同一层的一个或更多个外部节点。或者,一些外层可包含形成一个或更多个同层连接的外部节点,而一些外层可包含不形成一个或更多个同一层连接的外部节点。连接协议可要求同一外层的每个外部节点必须连接到该层相同数量的不同外部节点。例如,第一外层的每个外部节点可能需要连接到两个外部节点。第二外层的每个外部节点可能需要连接到三个外部节点。也就是说,外部节点所连接的同一层的外部节点数量可能在不同的外层之间有所不同。
[0126] 在一些实施例中,第ith外层(例如,第三外层)的外部节点可连接到前(i‑1)th层th(例如,第二外层)的外部节点。连接协议可要求下一(i+1) 外层的外部节点(例如,所有外th th
部节点)必须连接到第(i‑1) 外层的外部节点所连接的第i 层的每个节点。比如,图5所示的LN 500中第五层的外部节点305连接到第四层的外部节点304和第三层的外部节点303。
th th
在一些示例中,连接协议可要求第(i+1) 层的外部节点必须连接到第i 外层的外部结点所连接的每个先前层的每个外部节点。
[0127] 在LN 300的部分或全部节点与数字证书相关联的实施例中,连接协议可要求连接节点必须仅连接到与相应数字证书相关联的节点相关联的节点。在一些实施例中,如果与相应的节点相关联的数字证书已由相应节点之前的层的节点(例如,核心节点)颁发,或在一些示例中,由相应节点的同一层的节点(例如,不同的第二节点)颁发,则连接协议可要求连接节点(例如,外部节点)必须仅连接到相应的节点(例如,第二节点)。
[0128] 在一些实施例中,连接协议可要求连接节点只能连接到已向连接节点颁发数字证书的节点。也就是说,连接到节点包括从该节点接收数字证书。
[0129] 连接协议支持BLN的构建。与Mandala网络一样,BLN是分层建立的。与Mandala网络不同,第一层可形成不完全图(例如,近完全图)。BLN与Mandala网络之间的其它区别在于,在BLN中,每个接续层中的节点可以具有不同的度,节点可以连接到中心层中的多个节点,和/或各层之间的节点度可能不同。
[0130] 优选地,对于中央核心之外的所有节点:
[0131] (i)每个节点连接到中央核心内n1个节点中的m。
[0132] (ii)每个节点连接到每层中的一个节点,其中g是总层数。
[0133] (iii)每个节点都是正好一个社区的成员。最多有n2个社区,其中n2是第二层的节点数。
[0134] (iv)每个节点最多通过3次跳转连接到其它节点。这称为图的直径。
[0135] 在BLN中,“社区”指共享同一组核心祖先的节点集合。图6示出了带网络n1=6、m=3和g=4的BLN,并绘制两个不同社区的节点:黑色节点社区和白色节点社区。白色节点社区包括均连接到中央核心左侧的三个节点的所有节点,黑色节点社区包括连接到中央核心右侧的三个节点的所有节点。
[0136] Mandala网络的特征在于核心层(i=1)外的所有节点都连接到正好一个核心祖先(即,ci=1)。这在很大程度上有助于Mandala网络的涌现性:
[0137] ·具有平均最短路径长度,该长度随着网络规模(N=∑ini)的增大而逐渐趋于常数。
[0138] ·随着网络规模(N=∑ini)增大变得特别稀疏。
[0139] ·可以抵抗随机节点故障。
[0140] BLN的特点在于所有非核心节点都连接到至少一个祖先。然而,BLN定义适用于最多与核心祖先有m个连接的非核心节点(即,1≤ci≤m)。在BLN中从ci=1推广到1≤ci≤m是区块链协议的人工产物。定义区块链系统的协议依赖于概率安全模型。从本质上来讲,这意味着BLN中的任何参与者(节点)对区块链150上记录的事件存在既得利益时,必须通过连接到网络哈希算力(hash power)的最小分数f考虑概率安全模型,其中所有总哈希算力分布在BLN核心层的节点中。
[0141] 假设核心层在其n1个核心节点中呈现出哈希算力的统一均衡分布,则节点的最小分数为:
[0142] f=m/n1
[0143] 区块链协议表明最小分数的下限为f=0.51,但大规模BLN的网络参与者可能需要比这更大的分数(例如,f=0.67)来提高弹性(例如,双重花费)。BLN可以通过参数m的选择进行表征,因为这决定了BLN内参与者操作的概率安全性,具体取决于相关BLN需求的特定用例。
[0144] 最接近核心的第二层L2中的节点最依赖于区块链协议的概率安全模型,并且在接近Lg的层中,这种依赖性可能会降低。连接协议可要求L2的节点恰好连接到c2=m个核心祖先,而所有接续层i>2中的节点可连接到核心节点范围1<<ci≤m内的任何位置。在一些示例中,所有接续层中的节点必须连接到m个核心祖先。
[0145] BLN中央核心外的节点可以与核心有“SPV类”连接。这意味着可以做到以下几点。
[0146] a)向核心节点发送事务
[0147] b)询问核心节点是否已在其内存池/候选区块中接受事务
[0148] c)要求提供已在区块中挖掘的事务的默克尔证明
[0149] d)要求提供最新的区块头列表
[0150] 这些简单且有针对性的请求旨在尽可能减少核心节点301的负担,同时允许使用BLN在顶部构建尽可能广泛的可扩展解决方案。许多用例只需要上述连接类型。在一些示例中,第二节点302和/或外部节点303被配置成使得只能执行上述动作a)至d)。然而,其它解决方案通常是企业级的,可能需要核心主动为其提供更多数据,例如满足特定标准的事务。因此,动作a)至d)是BLN的最低要求,但在一些示例中,这些节点与核心之间也可能存在额外数据传送。
[0151] 对于运行智能合约的节点,一些节点可能只需要SPV之类的操作a)到d),而另一些节点可能需要协议,以便从核心节点接收更多数据。
[0152] 在一些BLN中,用户可操作第3层或更高层的节点,智能合约可以由第2层或更高层的节点操作。用户实际上无法连续“监听”区块链上具有特定输出地址的事务,因为需要对区块链150进行持续监控,以获取包括特定地址在内的事务。鉴于每个时间段内可以传输到区块链的事务数量均不断增加,此类持续监控对于最终用户来说是不现实的。尽管在某些区块链的钱包架构中不断监控区块链是常见的,但鉴于每个时间段提交给区块链的事务数量和区块链的用户数量预计未来都将出现大幅增加,该解决方案不具备可扩展性。考虑以下示例:爱丽丝想向鲍勃付费。她利用其知道属于鲍勃的输出地址为所需数额创建事务。然后,爱丽丝将该事务提交给挖矿网络,而非直接提交给鲍勃。为了让鲍勃知道已经接受事务,他必须“监听”区块链,查看网络上是否以及何时出现了带有其输出地址的事务。他必须请求挖矿节点代表他这样操作。这意味着挖矿节点必须记录鲍勃的地址,并检查是否其收到的每个事务与该地址相匹配。需要注意的是,矿工没有这样做的经济动机。假设矿工每秒必须处理一百万个事务,并且必须检查是否匹配一百万个地址,则很快变得不切实际。
[0153] 替代地,在BLN中,爱丽丝可能与鲍勃有直接联系,并且可直接向他发送事务。然后,鲍勃可向核心中的矿工发送事务,并且同时询问他们是否接受该事务有效。由于事务中包含矿工的费用,因此激励矿工接受事务,并且激励他们确认是否已接受事务,以降低构建孤立区块的风险。为了使系统更加安全,爱丽丝可以向鲍勃发送她的事务输入的默克尔证明。鲍勃可以检查这些默克尔证明,因为他有区块头副本。这可向鲍勃确保爱丽丝的输入在某一点上是区块链150的一部分,如果她已经花费这些输入,则鲍勃将拥有双重花费的证据,因为他已在爱丽丝给他的事务中收到爱丽丝的签名。需要注意的是,鲍勃可以是智能合约(第二节点),爱丽丝可以是希望与该智能合约交互的用户(外部节点)。如果智能合约是“轻量级”的,在这种意义上,智能合约操作者(operator)未与挖矿节点达成任何特定协议以促进智能合约的处理,则也不能依靠监听区块链150来接收触发状态变化的事务。爱丽丝必须将此类事务直接发送至智能合约。
[0154] 服务提供者可以操作第2层或更高层中的节点。服务提供者的情况不同于用户或轻量级智能合约的情况。服务提供者可以与核心挖矿节点或核心节点集合订立商业协议,然后将事务的某个子集传播给服务提供者节点。此类事务应易于识别并满足特定标准,例如:
[0155] ·待特定协议标志的OP_RETURN数据。例如,Metanet协议、代币化协议或数字证书协议。
[0156] ·匹配小型特定集合的输出地址。例如,企业级智能合约或地址白名单/黑名单。
[0157] ·OP_VER控制分支指示的二级共识规则集。
[0158] 此外,按照这些规则发送到核心的事务,或以其它方式确定为参与服务级别协议的社区的一部分的事务可能具有较低(或甚至为零)的事务费用。差额可以通过更多的事务量或服务水平协议的法定货币收入来弥补。
[0159] BLN 300的所有节点可能和与其身份相关联的半永久公钥相关联。该公钥可允许安全通信,并通过身份密钥的确定性推导,或通过使用身份密钥对事务密钥进行签名或加密,来提供区块链事务中使用的公钥链接。
[0160] 识别挖矿核心节点的两种方式如下所示:
[0161] 1)矿工ID。矿工可以选择通过向其挖掘的每个区块的Coinbase事务输入中添加他们的身份密钥来识别自己。
[0162] 2)网络分析。一些矿工选择匿名。然而,通过分析网络,例如通过查看新区块的来源,仍然可以识别构建区块的节点。
[0163] 重要的是,BLN的节点能够识别两种类型的矿工,从而能够轮询尽可能多的矿工,以确定是否已接受他们的事务。
[0164] 具有矿工ID的核心节点能够向第2层节点颁发数字证书。这可能是因为他们与这些节点有服务级别协议,或者可能是因为这些节点要求证书收费。在这种意义上,核心节点可充当证书颁发机构(CA)。
[0165] 无论是否有来自核心节点的证书,第2层节点都可以请求外部CA向其颁发数字证书。因此,每个第2层节点可以具有至少一个数字证书来证明其身份。它们可以向第2层中的其它节点颁发证书,从而在它们之间创建信任网。第2层的节点可以向第3层的节点颁发证书,第3层的节点可以将证书颁发给第4层的节点,依此类推,从而创建称为公钥基础设施(PKI)的证书层次结构。
[0166] 事实上,此类PKI不仅可以用于识别BLN中的节点,还可以确保遵循正确的BLN结构。例如,如果第3层向过多的第4层节点颁发证书,或者无法确保它们与系统中的其它节点具有适当的连接,则可能会撤销第3层节点的证书。
[0167] 这些证书本身可以存储在区块链150上。这使得PKI透明且易于审核。
[0168] 排序和时间戳
[0169] 许多应用可以使用区块链来实现,其中应用数据的顺序很重要。为解决此问题,根据本公开的实施例,网络的一个或更多个节点可以被配置为充当认证服务,在提交给服务的不同数据项之间进行仲裁,以确定数据项的最终顺序,然后将该顺序不可变地记录在区块链上。
[0170] 认证服务在一个或更多个认证节点处实现。在实施例中,这些是覆盖在底层基础设施网络上的覆盖网络的节点,例如互联网。然而,也不排除它们本身可以是网络的基础设施节点,例如组织内的专用网络。无论采用哪种方式,一个或更多个认证节点被设置成从一个或更多个客户端节点接收数据项,以形成记录所接收数据项的顺序的事务,并将这些事务转发到一个或更多个核心节点以记录在区块链150上。核心节点是区块链网络106的节点104。它们可以包括挖矿节点104M、存储节点104S或其组合。在实施例中,核心节点中的每一个都是挖矿节点104M和/或存储节点104S(例如,完整复制节点)。
[0171] 每个客户端节点可以是最终用户节点,包括服务用户的计算机设备。这可以是个人用户或组织,例如公司、学术机构或政府机构等。因此,每个客户端节点可以包括一个或更多个用户终端和/或服务器,该服务器包括位于一个或更多个站点的一个或更多个服务器单元。每个客户端节点包括存储器,该存储器包括一个或更多个存储器单元;处理装置,该处理装置包括一个或更多个处理单元。这些可以例如采用任何形式的存储器介质和/处理器,与前面关于其它网络元件或用户设备所讨论的一样。存储器存储被设置成在处理装置上运行的客户端软件,其中客户端软件被配置为当运行时根据以下任何实施例或类似实施例将节点作为认证节点提供的认证服务的客户端进行操作。可选地,传输最终用户节点中的一个或更多个可以包括区块链网络106的用户102的用户设备103,并且客户端软件可以包括区块链钱包应用程序105等。然而,认证服务可以被设置成代表此类最终用户制定至少一些事务,而不是必须在用户的钱包105中制定所有此类事务。
[0172] 认证节点被设置成在客户端节点与核心节点之间调和的认证服务。每个认证节点可采用服务器的形式,该服务器包括一个或更多个物理服务器单元。每个此类节点包括存储器,该存储器包括一个或更多个存储器单元;处理装置,该处理装置包括一个或更多个处理单元。这些可以例如采用任何形式的存储器介质和/处理器,与前面关于其它网络元件所讨论的一样。存储器存储被设置成在认证节点的处理装置上运行的认证服务软件。该软件被配置为当运行时提供根据以下描述的任何实施例或类似实施例操作的认证服务。在实施例中,每个认证节点的身份可以由证书颁发机构认证,以使客户端节点、核心节点和/或其它认证服务节点能够验证该认证节点的身份。每个客户端节点的身份可以由证书颁发机构认证,以使认证服务节点、核心节点和/或其它客户端节点能够验证该客户端节点的身份。为了提供或使用认证服务,此类节点之间的交互可能取决于验证。此外/或者,节点版本控制可以用作在覆盖网络中识别节点的替代机制。
[0173] 在实施例中,上述布置可以用分层网络700的形式实现,例如图3至图6中描述的类型,并且如图7中的示例所示。也就是说,分层网络包括:核心网络,该核心网络包括核心节点701;围绕核心的至少一个中间层,每个中间层包括一个或更多个中间层节点702;围绕中间层的最外层的至少一个外层,每个外层包括一个或更多个外层节点703。需要注意的是,尽管存在一定的可能性,但“外层”中的“外”一词本身并不一定局限于整个分层网络700的最外层。在实施例中,图7的分层网络700可以是图3的分层网络300,在这种情况下,图7的外层节点是图3或图4的第三层节点,图7中的中间层节点702是图3或图4的第二层节点302,图7的核心节点701可以是图3或图4的核心节点301。
[0174] 如关于图3至图6所讨论,分层网络700可以是覆盖在底层物理或基础设施网络上的覆盖网络,例如互联网。在此类实施例中,节点701、702、703被配置为在覆盖网络层形成彼此之间的连接。也就是说,分层网络的节点701、702、703被配置为遵循覆盖网络协议,该协议指定可以并且不可以与分层网络的其它节点701、702、703形成的连接。因此,尽管所有节点在物理上能够经由底层基础设施(例如,互联网)彼此连接,但当它们作为分层网络的节点701、702、703参与并根据分层网络700的相关覆盖网络协议进行操作时,此类节点701、702、703之间的连接可能会受到更大的限制。分层网络700的两个节点701/702/703之间的连接意味着这些节点可以直接通信,在这种情况下,意味着不必经由分层网络700的另一节点701/702/703执行跳转。在覆盖网络的上下文中,“连接”指在分层网络层(即,分层网络的覆盖网络协议层)的连接(即,边缘)。
[0175] 每个中间层节点702连接到核心网络中的至少一个核心节点701(区块链网络节点104)。核心网络包括区块链网络106的至少一部分。在实施例中,核心网络本身可以是完整的网络。
[0176] 在一些情况下,一些中间层节点702和/或外层节点703可以包括区块链网络106的外围节点104,例如除挖矿节点104M和/或存储节点104S之外的节点,例如转发节点104F。或者,它们可包括在区块链网络106中不具有任何角色的节点(挖掘、存储或转发),而非作为区块链网络106的客户端。
[0177] 每个外层节点703连接到至少一个中间层中的中间层节点中的至少一个。在实施例中,每个外层节点703还有连接到至少一个核心节点701的至少一个连接(即,连接到区块链网络106)。在一些此类实施例中,外层节点703中的一个或更多个分别都具有连接到多个(而非全部)核心节点701的连接。在实施例中,整个分层网络700可以是非完整网络,即不是每个节点701、702、703都在覆盖网络层彼此连接。在实施例中,给定层内的每个节点都可连接到同一层中的至少一个其它节点。例如,中间层内的每个节点702可连接到同一中间层内的一个或更多个其它节点,和/或外层中的每个结点703可连接到同一外层中的一个或更多个其它节点。在实施例中,还可以在不同中间层的不同中间层节点702和/或不同外层的不同外层节点703之间形成连接。
[0178] 在实施例中,分层网络700可以根据与图3至图6中有关的任何协议规则或结构特征进行配置;其中中间节点702的每个中间层是核心与最外层之间的层,外部节点703的每个外层是第二层外面的层(中间层在核心与外层之间)。
[0179] 下面的实施例将在分层网络的上下文中进行举例论证,但应当理解的是,这并不构成限制,更通俗地说,认证节点可以是在区块链网络106的一个或更多个客户端节点与一个或更多个核心节点104之间调和的任何类型的覆盖网络的任何节点。
[0180] 在分层网络700的实施方式中,至少一个中间层内的中间节点702中的至少一个充当提供认证服务的认证节点702A的角色。在至少一个外层的外层中的外部节点703中的至少一个是由认证节点702A提供的认证服务的客户端节点703C。每个核心节点701是区块链网络106的节点104中的一个,优选矿工104M和/或存储节点104S(例如,完整复制节点)。为便于说明,图7中仅示出了两个客户端节点703C和两个认证节点702A,但应当理解的是,可能还存在更多节点。在实施例中,客户端节点703C和认证节点702A可以作为彼此同一社区的一部分。
[0181] 客户端节点703C是客户端,至少因为它们是认证服务的客户端。在实施例中,在客户端节点703C中的一个或更多个上运行的客户端软件可以进一步被配置为将其节点703C作为由一个或更多第二层节点702提供的一个或更多个附加服务的客户端进行操作,例如数据库服务或智能合约服务。和/或其可被配置为将其节点703C作为区块链网络106的一个或更多个核心节点701(例如,104M、104S)的客户端进行操作,例如能够查询区块链150。
[0182] 此外,客户端节点703C描述为认证服务的客户端(以及可选的一个或更多个其它服务)这一事实并不排除这些节点本身也可能是提供给一个或更多个进一步实体的一个或更多个进一步服务的服务器的可能性(未示出)。例如,客户端节点703C可包括向客户提供在线服务的公司的计算机设备。本文中“最终用户”指相关特定服务的最终用户,不一定局限于商业供应链末端的个人消费者(尽管当然也存在这种可能性)。
[0183] 下面描述了一种方法,其中排序服务实体702A可以使用区块链150来记录从一个或更多个客户端节点703C接收数据元素的排序和时间。可选地,排序服务还可以盖时间戳。
[0184] 首先针对单个可信的顺序认证节点702A描述该方法。这可以建模为以区块链网络节点104/701为核心的分层网络700中的单个中间层(例如,第二层)节点。然后,该服务的用户将是外层(例如,第三层)节点703C的用户,其直接连接到服务702A,并且可选地也连接到区块链150(通过连接到核心中的至少一个核心节点701)。
[0185] 当从外层中的客户端节点703C接收数据元素时,中间层时间戳服务702A将按照排序将数据元素收集在一起。当某个时间段过去时,例如0.1秒,数据元素的该有序列表封装在事务中,并经由核心701发送到区块链150,并且因此不可更改地进行记录。如果将时间戳添加到记录中,则也会记录时间和顺序。
[0186] 示例性应用用于定义数据库等中条目更新的最终顺序。在这种情况下,从客户端节点703C接收的每个数据项可表示数据库中条目的相应状态变化(即,更新)。然而,此类更新不一定是可交换的,即顺序很重要。例如,如果存在两个执行数据元素的非交换操作的请求,例如从左侧进行矩阵乘法,则顺序很重要。在另一示例中,一个请求可以是删除文件,另一请求是读取文件。同样,应用这些请求的顺序会对结果产生影响。
[0187] 另一示例性应用是在基于输出(例如,基于UTXO)的区块链模型中实现智能合约。基于UTXO的事务等不像基于账户的模型的事务一样本质上支持智能合约,因此如果要在基于输出的模型(例如,基于UTXO的模型)中实现智能合约,则智能合约功能需要在基本事务模型上分层。在这种情况下,待记录在区块链150上的数据项可同样表示状态的变化,例如所有权的变化等。同样,顺序很重要,例如,因为这可能会影响试图转让所有权的有效性。
[0188] 另一示例性应用是证书颁发机构(CA)的数字证书的排序和时间戳。数字证书用于批准访问权限或其它电子许可,例如用于支持互联网的SSL/TLS和HTTPS安全性。2011年,Dutch CA被从伊朗进行操作的攻击者攻破。高知名度的域被授予虚假证书,并且篡改了CA服务器上的日志文件。如果使用下述排序和时间戳服务将这些日志文件存储在区块链上,则由于工作量证明提供的安全性,无法更改日志文件。值得注意的是,公司HSM中的私钥在攻击中被泄露。这表明不能总是仅依靠经典的加密协议来确保信息的安全,而且依赖其它机制(例如,工作量证明)来使此类攻击变得极其繁琐可能也是有益的。
[0189] 在操作中,认证节点702A被设置成通过中间层与外层之间的覆盖网络连接从一个或更多个客户端节点703C接收多个数据项。在本文中,数据项可以通过任意术语的方式标记为D。多个相关数据项可以从相同的客户端节点703C或不同的客户端节点703C接收,或者一些数据项从同一客户端节点703C接收,另一些数据项从不同的客户端节点703C接收。它们可以经由客户端节点703C与认证节点702A之间的连接直接接收,或者可以经由其中分层网络的一个或更多个其它节点转发(即,可经由传输客户端节点703C与认证节点702A之间的多次跳转接收)。
[0190] 认证节点702A被配置为确定多个数据项D的顺序,从而确定多个数据项的序列。在实施例中,确定的顺序是在认证节点702A接收数据项的顺序。然而,并不排除可以适用其它仲裁规则。例如,如果传输数据项的客户端节点703C加盖传输或创建时间的时间戳,并且认证节点702A信任这些客户端节点,则顺序可能是报告的传输或创建时间,而非接收时间。再如,顺序可取决于为不同数据项赋予不同权重的优先级方案。
[0191] 无论确定的顺序如何,认证节点702A通过创建一系列区块链事务152以记录在区块链150上来认证该顺序。认证节点702A生成一系列两个或更多个此类事务,在本文中可通过任意术语的方式标记为Tx0、Tx1、Tx2……。认证节点702A包含该系列中每个接续事务Tx的有效载荷(payload)中一个或更多个数据项D的不同集合的指示。有效载荷可包含在相应事务的不可花费的输出中。此类输出可通过终止该输出的锁定脚本的操作码变得不可花费,例如OP_RETURN。然而,在其它事务协议中,可通过其它方式包含有效载荷。根据认证节点702A确定的数据项的顺序,每个接续事务中指示的一个或更多个数据项的集合紧接在该系列事务中该事务之前的事务中指示的集合之后。即,该系列中事务的顺序与确定的数据项序列中集合的顺序相匹配。
[0192] 认证节点702A为一系列事务创建或以其它方式确定对应的一系列公共/私有密钥对:
[0193] P1,P2,P3,…
[0194] 认证节点702A使用每个密钥对的私钥对签署一系列事务中的对应事务:
[0195] Tx0→Tx1→Tx2→Tx3→…。
[0196] 事务Tx1在其输入的解锁脚本中包含P1的签名,事务Tx2包含P2的签名,以此类推。每个事务还包含有效载荷,例如在OP_RETURN字段中,包含由相应事务认证的一个或更多个数据项D的集合的指示。该有效载荷由每个签名进行签署(在使用脚本语言的实施例中,可使用适当的SIGHASH标志)。初始资金事务Tx0构建成使得可以通过P1的签名进行解锁。其可具有带微量(dust)值的输出点0。例如,Tx1可构建为如图8所示。所有后续事务都具有相同的结构。即,Tx2包含签名,该签名使用指向Tx1的输入中的P2,以解锁Tx1,并且在输出中具有锁定脚本,可以通过P3的签名进行解锁,以此类推。区块链网络106可以基于密钥对的对应公钥来验证签名。资金事务Tx0可以包含或不包含第一组数据项的指示(序列中的第一组数据项可以在Tx0或Tx1中指示)。
[0197] 注:为简单起见,图8所示的表格忽略了事务费用。这可以通过向事务添加另一输入和输出来进行解释(例如,由认证服务管理)。
[0198] OP_RETURN语句包含称为data1的有效载荷。这包含数据元素D或其指示,由用户按照由Tx1认证的集合中的认证服务所认证的顺序提交。(Tx2中的data2也是类似的,以此类推。)由于每个事务都对先前事务的哈希值进行签名,因此这也意味着有效载荷data1、data2、data3的排序,以此类推。
[0199] 一旦被区块链网络106接受,区块链事务便不能双重花费。此外,它还充当对认证节点702A提供的认证服务进行认证的顺序的发布形式。这使客户端节点703的用户确信,其数据元素按该认证机构认证的顺序出现的位置无法可追溯地进行更改。一旦在区块151中挖掘出此类事务,则更不可能改变顺序,因为替换现有区块的计算成本昂贵。
[0200] 在一些实施例中,每个事务Tx0、Tx1、Tx2……中指示的集合只包含每个事务的一个数据项D(即,每个data有效载荷仅指示单个相应的D)。或者,每个此类事务指示的集合可包括每个事务的多个数据项D(每个data有效载荷指示多个不同数据项D的不同相应集合)。在后一种情况下,有效载荷信息还指定相应事务的本地集合内数据项D的顺序。这可以例如通过有效载荷中包含的有序列表(例如,OP_RETURN输出)和/或指示映射到每个D的指示的顺序的索引来实现。稍后将更详细地讨论图9至图11所示的示例。
[0201] 当每个事务指示多个数据项D时,需要一些依据才能确定每个事务待收集在一起的数据项。原则上,任何方案都可以用于在事务之间划分数据项,但在实施例中,这可以基于固定的时间间隔来完成。即,在该系列的第一事务中包含由认证节点702A在固定时间间隔的第一实例内接收的所有数据项D,然后在固定时间间隔的下一实例中接收的所有数据项D在该序列中的下一事务中指示,以此类推。
[0202] 事务之间间隔的确切时间可以通过实施方式进行配置。例如,事务可以按0.1秒的间隔提交。
[0203] 数据项的相应集合可以仅通过将该集合的数据项明确地(“明文”)包含在相应事务Tx的有效载荷中,而在事务中进行指示。此外/或者,它们可以用转换后的形式表示,例如哈希值、加密形式或r难题。下面将参考图9至图11对示例进行更详细的讨论。在排序认证服务的上下文中,本文中数据项的“指示”至少指允许查询节点检查事务以验证数据项的认证顺序的某些信息。在数据项D的确切值未明确包含在事务中的某些情况下,可能需要查询节点预先知道数据项D的值,并且仅检查链上的事务或区块链节点104的内存池154中的事务,以确认这些项的预期顺序。
[0204] 在实施例中,认证节点702A还可在该系列中每个事务Tx0、Tx1、Tx2……的有效载荷中包括至少一个时间戳。时间戳指示在认证节点702A接收到相应数据项的时间。对于每个事务的单个数据项D,这可能只是接收该数据项的时间。对于每个事务Tx的多个数据项D,每个事务有效载荷可包含指示集合的到达时间的单个时间戳(例如,接收的时间间隔),或集合中每个数据项D的单个时间戳。
[0205] 当认证服务向区块链150提交包含用户数据的事务时,在一些实施例中,该服务还将该事务发送到提交数据项D的客户端节点703。这一点是可以实现的,因为外层(例如,第3层)的用户直接连接到中间层(例如,第2层)的认证节点702A。因为在实施例中,客户端节点703还直接连接到核心的区块链挖矿节点104M和/或存储节点104S,所以可独立检查区块链网络106是否已接受事务Tx0、Tx1、Tx2……。因此,客户端节点703A可以查询矿工104M的内存池154,和/或存储节点104S上的实际区块链150记录,以确认已认证预期的顺序。其它第三方节点也可经由区块链网络106任何合适的连接以类似的方式验证这一点。在一些实施例中,客户端节点703A的查询可通过客户端节点703C与核心之间的连接执行,其中该核心仅使用前面相对于图3至图6所讨论的SPV类连接。
[0206] 可选地,认证服务还可以向提交数据项的客户端节点703C发送包含其数据的事务之前的事务链。这是为了让用户可确保不存在两个通过服务提交给区块链且具有不同顺序的竞争性事务链。事务链的长度应与用户所需的信任级别相适应。该信任可以外包:例如,证书颁发机构可以每小时证明事务链的准确性。
[0207] 在实施例中,层内的客户端节点703C也可以相互连接,并可以相互发送包含它们的默克尔证明及对应的默克尔证明的(挖矿)事务。因为在实施例中,每个外层(例如,第3层)节点独立地连接到区块链150,因此可以验证默克尔证明是否正确。由此,外层(例如,第3层)的用户可以在信任区块链上的工作量证明之前,只需在时间戳服务中获得最小数量的临时信任,便可针对数据的排序达成一致。
[0208] 下面将更详细地探讨OP_RETURN有效载荷data1。服务旨在认证在时间间隔内接收数据元素D1,D2,D3,…的顺序。需要注意的是,数据元素可表示与每个用户相关的数据的提交哈希值。用户自行选择是否公开他们的数据,还是记录他们数据的提交哈希值。
[0209] 在事务Tx中指示数据项D的集合及其相对顺序有几种不同的方法。最简单的方法是为每个元素建立索引,由于已签署OP_RETURN,因此通过时间戳服务进行认证。然而,做到这一点可采用更明智的方法,从而提供额外的排序证据,并允许推广到分布式时间戳服务。
[0210] 方法1.1:哈希链。为每个数据元素Di分配唯一的索引i,并在哈希链中创建条目Hi。Hi的值取决于数据元素和哈希链的先前个元素。这意味着哈希链的每个元素都必须在先前元素之后创建,从而按顺序执行。图9的表格中示出了哈希链的示例。该表格将包含在事务的有效载荷(数据)中,可以选择是否在事务中包含明确的D列。
[0211] 未明确包含D值的一个优势在于,哈希值可能小于D,并且因此在链上所需存储的位数较少。同时,这意味着如果用户不想公开,则不需要公布D的实际值。无论采用哪种方式,且无论是否明确地包含D值,哈希链的另一优势在于顺序很难进行更改。例如,假设每个事务有1000个数据项D。然后,重新排序这些数据项需要执行1000次哈希处理,这在计算上是繁琐的。因此,即使认证节点702A不完全可信,但用户能更加确信数据项未进行重新排序。
[0212] 在一些实施例中,还可包含接收每个数据元素Di的时间戳ti的认证。其中一种方法是在哈希链的每个元素的原像中包含时间戳,例如:
[0213] H1′=H(D1‖t1),H2′=H(D2‖t2‖H1′),以此类推
[0214] 在这种情况下,包含时间的列也将添加到图9的表格中。
[0215] OP_RETURN有效载荷data1由例如图9所示的表格组成。为节省空间或保持数据元素的私密性,可省略“数据”列。尽管需要注意的是,在那种情况下,证明哈希链顺序的唯一方法是已知所有数据元素。
[0216] 用HMAC替换哈希函数可以确保额外的安全性。HMAC的描述见RFC 2104,其将秘密对称密钥引入哈希处理过程。这意味着仅知道秘密密钥的人员才能证明数据的顺序。
[0217] 方法I.2:带默克尔树的哈希链。这种情况与图9的哈希链类似,但不是发布整个哈希链,而是转换为默克尔树,并且只发布根。在这种情况下,集合中的每个数据项D建模为默克尔树的叶子,默克尔根作为指示包含在事务中。需要注意的是,数据的索引用其在默克尔树叶子中显示的顺序表示。稍后可以向用户提供默克尔证明,以允许用户检查是否存在数据项及其在默克尔树中的位置。该方法节省了事务的空间,因为默克尔根的OP_RETURN有效载荷中只需要256位。
[0218] 此外/或者,每个数据项可以在事务中由该叶子的对应默克尔证明表示。本领域技术人员熟悉的是,给定数据项的默克尔根和默克尔证明(即根与叶之间的哈希链),则默克尔树可以证明给定数据项是集合的成员。
[0219] 方法2.1:签名链。在此方法中,为每个数据元素D创建新的公钥,并使用新的公钥对该元素进行签名。这符合RFC 3161中所述时间戳协议的要求。
[0220] 考虑图10中所示的公钥序列和签名。思路是每个公钥均基于先前数据生成。与哈希链类似,序列中的每个公钥(并且因此签名)只有在知道序列中的先前公钥的情况下才能创建,从而按顺序执行。
[0221] 在该方法的变体中,表格中的每个条目都可以是其本身的事务。
[0222] 方法2.2:r难题链。r难题是近期公开的一种挑战和证明形式。它基于ECDSA签名(S,R)的r部分,可在不泄露秘密的情况下证明知道秘密。参见https://www.youtube.com/watch?v=9EHKvNuRc0A&t=978s和https://www.youtube.com/watch?v=CqqTCsLzbEA。
[0223] ECDSA(椭圆曲线数字签名算法)签名由(S,R)组合构成,其中R是临时密钥对的公共部分的x轴。每个签名可以使用相同的公钥,但将临时密钥链接在一起。这将给出图11所示的序列。这可包含在事务有效载荷(数据)中,作为上述任何方法的替代或补充。
[0224] 此处,R1是随机临时密钥,(H(Di))指使用临时密钥R1i与P1签署的数据H(Di)。
[0225] 通常而言,方法1.1、方法1.2、方法2.2和/或方法2.2等中的任何一种方法可单独使用或联合使用,以指示事务的有效载荷(数据)中一组数据项D之间的顺序。
[0226] 分布式情况:单个节点702A提供顺序认证服务的场景中已描述上述内容。此外,还可以通过多个认证节点702A提供此类服务。
[0227] 考虑例如使用分层网络700达成共识的分布式认证服务的情况。在这种情况下,图7中的多个中间层节点702(例如,第2层节点)将扮演认证节点的角色。
[0228] 假设大部分认证节点702A诚实行事,并希望就在社区(如先前所定义)传播的数据的排序和时间戳达成共识,该社区由认证服务节点702A和用户703C组成。假设N个独立认证服务节点703A连接到m个核心挖矿节点701的相同子集,并且因此定义分层网络700的社区。存在多个中间层(例如,第2层)认证节点702A这一事实允许外层(例如,第3层)的许多用户连接到中间层(例如,第2层)中的节点702,而不会对中间层节点造成过高的负载(连接太多)。
[0229] 接下来要解决的问题是,在此类分布式情况中,中间层认证节点层702A(例如,第2层节点)如何可在两个数据项的排序中达成共识,例如两个用户提交的两个数据项D1、D2,即使以不同的顺序到达一个认证节点702A。
[0230] 解决此问题的一种方法是使用阈值签名,即如前所述,需要至少M个不同的签名(M>1)来解锁事务,而不只是一个签名。考虑适用于认证服务节点702A的M/N阈值签名系统。这意味着存在带私有密钥共享a1,a2,..,aN的N个参与节点。M个参与者的任何子组都可以产生签名共享,其组合形成消息的签名,该消息将解锁该系列中的先前事务。
[0231] 假设其中一个认证服务节点702A产生包含OP_REUTRN有效载荷data1的候选事务Tx1,该有效载荷是在所选时间段内其接收到的所有数据元素D的有序列表。该节点可将候选事务广播给所有其它认证服务节点702A(或至少其中一些),并要求它们的签名共享以对事务进行签名。如果至少收到M个签名共享(包括其自身的签名),则可将事务提交给区块链网络106,并挖掘到区块151。这可确保至少通过分布式网络中的M/N个时间戳服务,针对数据元素的排序达成一致。
[0232] 如何选择在事务中创建单个认证节点702A?上面已假设只有一个认证服务节点702A已创建候选事务Tx1,并且其它认证节点702A支持这一点。但是下一候选事务呢?至少有两种方案:(i)始终有一个创建候选事务的特许认证节点702A,或(ii)在创建每个事务后,随机选择一个认证节点702A作为创建下一事务的下一节点。这可以是提前确定的随机序列,或者可以是基于与刚提交的事务Tx1相关的种子的确定性随机选择。例如,种子可以是Tx1。此外,也可以使用其它分布式仲裁算法进行分布式计算。
[0233] 智能合约
[0234] 图12示出了根据本文公开的实施例在分层网络1200中实现智能合约的系统的示例。
[0235] 分层网络1200包括:核心网络,该核心网络包括一个或更多个核心节点1201;围绕核心的至少一个中间层,每个中间层包括一个或更多个中间层节点1202;围绕中间层的最外层的至少一个外层,每个外层包括一个或更多个外层节点1203。同样,尽管存在一定的可能性,但“外层”中的“外”一词并不一定局限于最外层。分层网络1200可以是覆盖在底层物理网络或基础设施网络(例如,互联网)上的覆盖网络,或者也可以是独立网络(例如,组织内的专用网络)。
[0236] 核心节点1201是区块链网络106的节点104。它们可以包括挖矿节点104M、存储节点104S或其组合。在实施例中,核心节点中的每一个都是挖矿节点104M和/或存储节点104S(例如,完整复制节点)。
[0237] 在一些情况下,一些中间层节点1202和/或外层节点1203可以包括区块链网络106的外围节点104,例如除挖矿节点104M和/或存储节点104S之外的节点,例如转发节点104F。或者,它们可包括在区块链网络106中不具有任何角色的节点(挖掘、存储或转发),而非作为区块链网络106的客户端。
[0238] 中间节点1202包括跨分层网络1200的一个或更多个中间层的多个智能合约节点1202SC。其中,智能合约节点1202SC向客户端节点1203C提供智能合约服务。这些智能合约节点1202SC中的每一个都被配置为维持一个或更多个智能合约的状态记录。在实施例中,状态在智能合约节点1202SC中传播,使得至少一些智能合约的状态在多个智能合约节点
1202SC中重复。在一些情况下,每个智能合约节点1202SC可以在系统中存储每个智能合约状态的副本;但在其它实施例中,每个智能合约节点1202SC仅存储一个或几个智能合约的状态,并且每个合约的状态只能在部分而非全部的智能合约节点1202SC上复制。
[0239] 每个智能合约节点1202SC可采用服务器的形式,其包括一个或更多个物理服务器单元。每个此类节点包括存储器,该存储器包括一个或更多个存储器单元;处理装置,该处理装置包括一个或更多个处理单元。这些可以例如采用任何形式的存储器介质和/处理器,与前面关于其它网络元件所讨论的一样。对于数据库条目本身,存储器存储被设置成在认证节点的处理装置上运行的数据库软件。该软件被配置为当运行时提供根据以下描述的任何实施例或类似实施例操作的数据库服务。
[0240] 在实施例中,每个智能合约节点1202SC的身份可以由证书颁发机构认证,以使客户端节点1203C、核心节点1201和/或其它智能合约节点1202SC或其它中间层节点(例如,认证服务节点702A或智能合约节点)能够验证智能合约节点1202SC的身份。此类节点之间的交互可能取决于验证。例如,客户端节点1203C只可向智能合约节点1202SC发送消息,前提是根据证书验证其身份。此外/或者,节点版本控制可以用作在覆盖网络中识别节点的替代机制。
[0241] 每个客户端节点1203C可以是最终用户节点,包括智能合约服务的用户的计算机设备。同样,这可以是个人用户或组织,例如公司、学术机构或政府机构等。因此,每个客户端节点可以包括一个或更多个用户终端和/或服务器,该服务器包括位于一个或更多个站点的一个或更多个服务器单元。每个客户端节点包括存储器,该存储器包括一个或更多个存储器单元;处理装置,该处理装置包括一个或更多个处理单元。这些可以例如采用任何形式的存储器介质和/处理器,与前面关于其它网络元件或用户设备所讨论的一样。存储器存储被设置成在处理装置上运行的客户端软件,其中客户端软件被配置为当运行时根据以下任何实施例或类似实施例将节点作为智能合约节点1202SC提供的智能合约服务的客户端进行操作。可选地,传输最终用户节点中的一个或更多个可以包括区块链网络106的用户102的用户设备103,并且客户端软件可以包括区块链钱包应用程序105等。
[0242] 在实施例中,每个客户端节点1203C的身份可以由证书颁发机构认证,以使智能合约节点1202SC、其它中间层节点(例如,认证服务节点702A或智能合约节点)、核心节点1201和/或其它客户端节点1203C能够验证客户端节点1203C的身份。此类节点之间的交互可能取决于验证。例如,智能合约节点1202SC只可从客户端节点1203C接受消息,前提是基于证书验证其身份。此外/或者,节点版本控制可以用作在覆盖网络中识别节点的替代机制。
[0243] 在实施例中,分层网络1200可根据与图3至图6和/或图7相关的任何协议规则或结构特征进行配置。节点1201、1202、1203被配置为在覆盖网络层形成彼此之间的连接,其中分层网络1200是覆盖在底层基础设施网络上的覆盖网络,例如互联网。也就是说,分层网络的节点1201、1202、1203被配置为遵循覆盖网络协议,该协议指定可以并且不可以与分层网络的其它节点1201、1202、1203形成的连接。
[0244] 例如,在实施例中,每个中间层节点1202连接到核心网络中的至少一个核心节点1201(区块链网络节点104)。核心网络包括区块链网络106的至少一部分。在实施例中,核心网络本身可以是完整的网络。每个外层节点1203可连接到至少一个中间层内的至少一个中间层节点。在实施例中,每个外层节点1203还有连接到至少一个核心节点1201的至少一个连接(即,连接到区块链网络)。在一些此类实施例中,外层节点1203中的一个或更多个分别都具有连接到多个(而非全部)核心节点1201的连接。在实施例中,整个分层网络1200可以是非完整网络,即不是每个节点1201、1202、1203都在覆盖网络层彼此连接。在实施例中,给定层内的每个节点都可连接到同一层中的至少一个其它节点。例如,中间层内的每个节点
1202可连接到同一中间层内的一个或更多个其它节点,和/或外层中的每个结点1203可连接到同一外层中的一个或更多个其它节点。在实施例中,还可以在不同中间层的不同中间层节点1202和/或不同外层的不同外层节点1203之间形成连接。
[0245] 分层网络1200的两个节点1201/1202/1203之间的连接意味着这些节点可以直接通信,在这种情况下,意味着不必经由分层网络1200的另一节点1201/1202/1203执行跳转。在覆盖网络的上下文中,“连接”指在分层网络层(即,分层网络的覆盖网络协议层)的连接(即,边缘)。
[0246] 为简单起见,图12只示出了两个客户端节点1203C和两个智能合约节点1202SC,但应当理解的是,可能还存在更多的节点。在实施例中,客户端节点1203C和智能合约节点1202SC可以是属于同一社区的一部分。
[0247] 客户端节点1203C是客户端,至少因为它们是智能合约服务的客户端。在实施例中,在一个或更多个客户端节点1203C上运行的客户端软件可以进一步被配置为将其节点1203C作为由一个或更多第二层节点1202提供的一个或更多个附加服务的客户端进行操作,例如排序认证服务或数据库服务。和/或其可被配置为将其节点1203C作为区块链网络
106的一个或更多个核心节点1201(例如,104M、104S)的客户端进行操作,例如能够查询区块链150。此外,客户端节点1203C描述为智能合约服务的客户端(以及可选的一个或更多个其它服务)这一事实并不排除这些节点本身也可能是提供给一个或更多个进一步实体的一个或更多个进一步服务的服务器的可能性(未示出)。例如,客户端节点1203C可包括通过网络向客户提供在线服务的公司的计算机设备。
[0248] 在一些实施例中,图12的分层网络1200可以是图3和图4的分层网络300。在这种情况下,图12的外层节点1203是图3或图4的第三层节点303,图12的中间层节点1202是图3或图4的第二层节点302,图12的核心节点1201是图3或图4的核心节点301。
[0249] 在一些实施例中,图12的分层网络1200可以是图7的分层网络700,其中图12的外层节点1203是图7的外层节点703,图12的中间层节点1202是图7的中间层节点702,图12的核心节点1201是图7的核心节点701。在此类实施例中,认证节点702A的认证服务可以集成到与智能合约节点1202SC相同的部分或全部中间层节点702/1202中,和/或认证节点702A可包括在相同和/或不同社区的相同和/或不同中间层中的独立中间层节点702/1202。
[0250] 在操作中,一个或更多个客户端节点1203C的一个或更多个用户决定智能合约的条款。两个或更多个客户端节点1203C的用户之间可以通过分层网络1200的一个或更多个外层中的连接中的一个或更多个对此进行协商。或者,这些条款可以与分层网络1200分开协商,例如通过电话或面对面会议。
[0251] 无论采用哪种方式,外层或中间层中的一个节点1202/1203制定至少第一事务152,用于在区块链150上记录智能合约的状态。该状态可包括合约的全部条款,或者可以仅包括合约的一个或更多个参数,例如合约是否有效或到期,或者谁是合约所代表权利的当前所有者。
[0252] 在实施例中,第一事务至少在一定程度上由客户端节点1203C制定,并经由客户端节点1203C与核心节点1201中的至少一个之间的分层网络1200中的连接之一,从客户端节点1203C直接发送到核心层。在这种情况下,需要单独的步骤将智能合约的状态告知智能合约节点1202SC中的至少一个。为实现这一点,可以向智能合约节点1202SC发送事务副本,或发送单独的消息(并非以事务的形式)将智能合约的相关状态告知智能合约节点1202SC。这可以经由分层网络1200的外层与中间层之间的连接中的一个或更多个来进行。另一方案是智能合约节点1202SC通过核心层的一个或更多个节点1201(104)检查区块链150上记录的事务,或区块链网络106的矿工的内存池154中记录的事务。该检查可以通过智能合约节点1202SC与核心层的核心节点1201中的一个或更多个之间的连接来直接执行,或者可以经由到核心层的多次跳转来执行。
[0253] 在其它实施例中,第一事务至少在一定程度上由客户端节点1203C制定,并发送到智能合约节点1202SC以转发到核心层1201,以便记录在区块链150上。在这种情况下,智能合约节点1202SC从客户端1203C收到事务后便知道智能合约的状态。智能合约节点1202SC可以直接通过客户端1203C与智能合约节点1202SC之间的分层网络1200内的连接而从客户端节点1203C接收事务。或者,可以通过分层网络1200中的多次跳转间接地接收。智能合约节点1202SC可以直接通过智能合约节点1202SC与核心节点1201中的一个或更多个之间的分层网络内的连接而将事务转发到核心层,或者通过多次跳转而间接地转发。
[0254] 在其它可能的实施例中,第一事务可以至少在一定程度上由智能合约节点1202SC制定。在这种情况下,智能合约节点1202SC可以向核心层发送第一事务,以记录在区块链150上。它可以将第一合约直接通过分层网络1200中的连接发送给核心,然后再发送给核心节点1201中的一个或更多个。或者,智能合约节点1202SC可以经由分层网络1200内的多次跳转间接地将第一事务发送到核心层。
[0255] 在一些实施例中,智能合约的一个或更多个条款可以通过在两个或更多个客户端节点1203C之间和/或在一个或更多个客户端节点1203C与智能合约节点1202SC之间交换第一事务的模板版本来进行协商。该协商过程可涉及相应方在收到模板并批准相关条款后在事务中添加他们的签名。稍后将讨论一些示例。在一些此类实施例中,智能合约节点1202SC可经由协商中使用的模板来确定智能合约的相关状态,即使在记录到链上之前未看到事务的最终版本。
[0256] 通过上述任何方法,智能合约节点1202SC可知道智能合约的状态,该状态同时也存储在区块链150上。然后,可将状态记录在智能合约节点1202SC处维护的本地记录中。在一些实施例中,智能合约节点1202SC还可将状态传播到智能合约节点1202SC的一个或更多个其它节点,这些节点也将状态记录在其自身的本地记录中。或者,网络1200中可能只存在一个智能合约节点1202SC,或存在多个智能合约节点1202SC,但每个节点都可以独立操作(不在它们之间传播状态)。
[0257] 然后,任何希望确认智能合约状态的节点都可通过核心节点1201从智能合约节点1202SC或区块链150检查状态,或从智能合约节点1202SC和区块链150两者检查状态。
[0258] 比如,在实施例中,客户端节点1203C可以联系智能合约节点1202SC中的一个来查询智能合约的状态,而无需从区块链150读取状态,且无需联系核心层1201。一旦记录状态,则会减少核心层的流量。状态可以从最初记录状态的智能合约节点1202SC进行查询,或者从状态传播到的任何智能合约节点1202SC进行查询。查询客户端节点1203C可以是智能合约的一方或感兴趣的第三方。查询可以直接通过查询客户端节点1203C与查询的智能合约节点1202SC之间的分层网络1200内的连接进行,或通过分层网络1200内的多次跳转间接进行。
[0259] 在另一示例性场景中,客户端节点1203C或其它智能合约节点1202C可以从智能合约节点1202SC和核心层节点1201两者查询智能合约的状态,并比较结果以检查是否存在共识。同样,查询可以经由分层网络1200中相关节点对1201、1202SC、1203C之间的直接连接来执行,或者经由多个连接(多次跳转)间接地执行。
[0260] 智能合约状态可以用任意一种或更多种可能的形式记录在第一事务中。在实施例中,它可以明确地记录在事务的有效载荷中。或者,状态可以用转换后的形式(例如,哈希值)记录在有效载荷中。当存在哈希值等时,这本身只允许节点在给定预期状态的情况下检查是否已记录状态(节点无法从记录中查看状态)。这可以称为状态的“提交哈希值”。然而,在实施例中,UTXO集合中存在状态事务也可视为合约存在于哪种状态的指示;也就是说,这是连续的非离散事件。
[0261] 有效载荷可以包含在事务的不可花费的输出中。例如,输出可通过包含终止相应锁定脚本的操作码变得不可花费,例如使用脚本语言时为OP_RETURN(可选地,也可以在锁定脚本的OP_RETURN前面包含OP_FALSE)。然而,其它事务协议或脚本语言可提供在事务中包含应用层有效载荷(即,用户数据)的其它方法。
[0262] 在状态信息的另一示例中,智能合约的一方或更多方可以记录在一个或更多个输出中。这可以记录在一个或更多个不可花费的输出的有效载荷中(例如,使用OP_RETURN或OP_FALSE OP_RETURN),或者通过将一个或更多个可花费的输出锁定到相关方。例如,一个输出可锁定至A方,另一输出可锁定至B方,以记录A方和B方是事务的双方;或者一个输出可锁定至A方,另一输出可锁定至T方,其中T是合约受托者,也是智能合约节点1202SC的操作者。在此类情况下,锁定脚本中的公钥充当智能合约方的指示。在区块链层,密钥用于验证试图花费第一事务的任何事务的解锁脚本的标准目的,但在应用层(即,由智能合约服务和/或客户端软件解释),密钥用于指示合约的状态(例如,转让者或受让者)。
[0263] 在状态信息的另一示例中,事务的一个输出可包括状态难题(state puzzle),需要状态难题的解来进行解锁。一组用于形成状态难题的一个或更多个规则可以存储在一个智能合约节点1202SC处。智能合约节点1202C可以被设置为根据存储在智能合约节点1202SC的该组规则至少制定第一事务的状态难题部分。稍后将更详细地讨论这方面的一些示例。
[0264] 在实施例中,智能合约的状态变化可使用第二事务进行记录,例如记录智能合约已到期,或记录合约所代表的权利所有权变更(例如,债券等)。第二事务可以采用与上述与第一事务相关的任何技术类似的方式来制定和记录。新状态可以采用上述与第一事务相关的任何方式记录在第二事务中。
[0265] 在一些此类实施例中,第一事务和第二事务仅签署两个不相关的源事务(第一事务和第二事务未链接在一起)。在这种情况下,状态的变化可以只通过两个事务的应用有效载荷(例如,OP_RETURN输出)中包含的信息在应用层表示,而非区块链层。应用层解释由智能合约服务及其客户端分配给事务。
[0266] 然而,在其它实施例中,第二事务花费第一事务的输出。特别地,第一事务可包含输出,该输出包括状态难题,第二事务包含指向该输出的输入。第二事务需要包含状态难题的解,以解锁第一事务的输出。在区块链层,需要核实第二事务以记录在链上。在应用层,它也是识别状态变化的条件。智能合约节点1202SC只能在其智能合约状态的本地记录中记录状态的变化,条件是第二事务提供状态难题的解。
[0267] 在实施例中,可以使用这两种不同的记录状态变化的机制,每种机制都记录不同层次的状态信息:状态难题机制用于记录一对第一事务和第二事务中智能合约的主要状态的变化,OP_RETURN有效载荷机制用于在另一对第一事务和第二事务中记录智能合约的次要状态的变化。例如,主要状态可包括债券等权利是否有效或过期,次要状态可包括权利的当前所有权。在此类情况下,平行状态以一致的方式存在。在实施例中,一个状态可以触发另一状态来改变状态。比如,在主要状态和次要状态的情况下,主要状态的变化可能会影响次要状态(但反之则不成立)。稍后将更详细地讨论实现主要状态和次要状态及其变化的示例。
[0268] 在实施例中,智能合约服务可以与排序机制一起实现,例如前述的排序服务,以确定适用状态变化的最终顺序。例如,在从不同客户端节点1203接收相同的智能合约和/或在不同智能合约节点1202SC之间传播时出现不同状态变化的情况下,这可能是有用的。
[0269] 在一些场景中,同一智能合约节点1202SC可接收更新同一智能合约的多个请求。为适应这一点,智能合约节点1202SC可以被配置为按照指定顺序应用状态变化。在一些实施例中,指定顺序可以基于在接收智能合约节点1202SC的接收时间,或由发送客户端节点
1203C或转发智能合约节点1202SC添加的时间戳。或者,可以在来自一个客户端节点1203C的一个或更多个请求中断言指定顺序,或者可以在另一中间层节点1202的消息中断言指定顺序,例如另一智能合约节点1202SC或认证服务节点702A,或者从核心1201断言指定顺序。
例如,可以按多个更新的有序列表或映射到每个更新请求的顺序索引的形式断言顺序。
[0270] 在实施例中,指定顺序可记录在区块链150上,例如通过前面讨论的认证服务702A。在此类实施例中,发起状态变化的客户端节点1203C可以从认证服务获702A取顺序,并将该顺序提交给智能合约节点1202SC。在这种情况下,除了在区块链150上记录顺序外,顺序认证服务702还将包括指定顺序的消息返回给请求客户端节点1203C(这同时也是认证服务702A的客户端703C)。当客户端1203C向智能合约节点1202SC请求变化智能合约的状态时,还提交通过认证服务702A获得的顺序。智能合约节点1202SC按照区块链上(或矿工的内存池154中)记录的顺序对此进行检查,然后按照指定顺序应用更新,条件是客户端1203C提交的顺序与链150上记录的顺序相匹配。该检查可以经由智能合约节点1202SC与核心1201之间的连接直接进行,或者可以经由多次跳转进行。
[0271] 或者,记录状态变化的智能合约节点1202SC可以直接从区块链150读取顺序,并应用从区块链150(或矿工的内存池154)读取的顺序。
[0272] 在另一变体中,认证服务702A可以集成到一个或更多个智能合约节点1202SC中。在这种情况下,其中一个智能合约节点1202SC负责确定顺序(并且可选地添加时间戳),并将其记录在区块链150上。负责顺序的智能合约节点1202SC可以将指定顺序传播到中间层节点之间的连接周围的其它智能合约节点1202SC。其它智能合约节点1202SC可以按照区块链中记录的顺序进行检查,或者可以直接从区块链150(或矿工的内存池154)读取顺序。这可以经由智能合约节点1202SC与核心1202之间的连接直接进行,或者可以经由多次跳转进行。
[0273] 为了说明公开方案背后的一些原则,现在将通过示例的方式描述特定的实施方式。例如,将参考第2层实现的智能合约节点和第3层实现的客户端(用户)节点,但这可分别推广到任何中间层和外层。
[0274] 下面介绍使用覆盖网络层的基于区块链的确定性有限自动机(DFA)的用例。网络拓扑遵循上述区块链分层网络(BLN)1200的规定,其中核心网络由完整的区块链客户端组成,外壳由简单支付验证(SPV)节点组成。这些二级SPV节点在由核心中设立的工作量证明共识所设定的边界内遵守一组特殊的子规则。二级节点无需保留区块链的副本,但可根据一些外部数据利用SPV范例传播状态转换。网络层可以使用数字证书或节点版本控制进行识别。下面将描述示例性用例,该用例允许一级金融市场和二级金融市场的不同用户使用连接在BLN拓扑中的智能合约节点触发不同的状态。
[0275] 术语:下面为示例性用例中将使用的一些术语。
[0276] 市场:
[0277] 一级市场——由发行实体(公司或政府)直接向公众发行股票或债券的市场为一级市场。投资银行处理这些事务,一级市场的投资者通常是大型机构买家,一次性购买以数百万计的证券。由于最初的需求难以预测,销售价格设定较低;这使得一级市场非常不稳定。发行金融机构在一级市场销售证券需遵循复杂的监管程序。
[0278] 二级市场——发行者的所有证券事务都由投资者在二级市场进行。这可以在股票交易所(例如,纳斯达克)或场外(债务证券)进行。股票的价格取决于买家与卖家的供需关系,而在一级市场,初始价格由发行实体设定。大型机构买家在一级市场购买大量证券后,部分买家随后在二级市场出售股票以获利。任何规模的投资者都可以参与这种交易。虽然股票属于交易量最大的证券之一,但投资银行以及公司和个人投资者在二级市场交易共同基金和债券,而一些实体也在二级市场购买抵押贷款。
[0279] 场外——去中心化的经销者网络是集中式公共交易所的私营替代方案。这里可以出售非标准数量,且与交易所相比公开透明度较低,因为交易完成后才公开价格。债务证券通常由投资银行在场外(OTC)二级市场进行交易,这主要是归因于债务证券与股票相比具有多样性。经纪经销者通过计算机网络相互协商,经常在内部撮合客户买卖。债券价格受利率和信用评级变化的影响。OTC交易最大的优势在于其所提供的流动性,为到期前出售债券的投资者提供了充分的保护。然而,双方之间直接进行交易,因此不受监管或不受主要交易所规则的约束,这可能会视为存在争议。
[0280] 金融实体:
[0281] 矿工——使用工作量证明(PoW)共识机制在比特币区块链上存储、记录和更新事务的完整区块链客户端。
[0282] 债券发行者——向投资者或贷款者发行新债务证券的公司或政府机构。
[0283] 承销者——机构投资者,例如充当债券发行者的贷款者的投资银行。
[0284] 债券经销者——虽然投资者可以互相交易适销债券,但交易通常通过债券经销者完成,或者更具体地说,主要投资经销者的债券交易平台。这些经销者处于庞大的电话与计算机网络的中心,连接着所有感兴趣的玩家。此外,还有交易员负责了解一组债券的所有情况,并提供买卖的报价,或为债券“做市”。经销者为债券投资者提供“流动性”,从而这些投资者可以更容易地买卖债券,并对价格做出有限的让步,但经销者也可以直接或通过债券经纪人匿名买卖债券。
[0285] 债券投资者——购买债券的用户。根据投资者的规模,债券可以从二级OTC市场的经销者处购买,或者可以直接从承销者处购买。
[0286] 经纪人——二级市场的中间人业务允许债券经销者之间进行匿名交易。
[0287] 债券受托者——债券受托者或财务代理人是债券发行者所雇佣的可信第三方,以执行债券发行者与债券持有者之间金融合约中所列的条件。受托者代表债券持有者的利益。
[0288] 金融合约:
[0289] 债券购买协议——在一级债券市场私下协商后,债券发行者与承销者约定销售条件的合约。新债务债券不向公众出售,而是直接出售给承销者。
[0290] 信托契据——债券发行者与投资者(即,债券持有者)之间约定销售条件的合约,由相关参与者在二级债券市场上成功交易后签订。债券购买协议由发行者与新发行债券承销者签署,而信托契据指发行者与代表投资者利益的受托者之间签署的合约。
[0291] 基于区块链的确定性有限自动机:确定性有限自动机(DFA)属于有限状态机,其通过运行由该字符串唯一确定的状态序列来接受或拒绝给定的符号字符串。给定状态和输入,则只会出现一个新的状态(可能是相同的状态),从而得出唯一的计算结果(例如,合约)。
[0292] 在WO/2018/078584中,DFA的状态与区块链上未花费的事务输出(UTXO)相关联。需要注意的是,区块链网络持续跟踪所有可用的UTXO。WO/2018/078584使用零息债券(ZCB)的示例来实现状态转换。这是以超低折扣价出售给投资者的债务证券,在债券到期之前,投资者不会收到任何息票(利息),即在未来的某个时间全额支付票面价值。ZCB可以是公司债券、市政债券或国库(政府)债券,并视为一种长期投资。由于不定期支付利息,ZCB很容易实现为DFA,因为金融合约只需要简单的状态转换(初始建立和最终支付或违约)。表1总结了ZCB合约的关键特征。
[0293]优点 缺点
销售价格提供超低折扣 无需定期支付利息
固定收入保证 年度“不明”利息应缴纳所得税
长期有效期 价格波动使得利息可能较低
  违约风险(公司债券)
[0294] 表1:零息债券合约的关键特征。
[0295] DFA转换表:DFA指包含以下元素的有限集合{S,I,t,s0,F}:
[0296] ·S是机器可能存在的有限状态集合,
[0297] ·I是输入的有限集合,包含与合约有关的任何事件或条件,例如,支付、票据到期、交易对手违约等,
[0298] ·t:S×I→S是转换函数,
[0299] ·s0是初始状态,
[0300] · 是所有可能的最终结果的集合。
[0301] 一旦建立上述所有元素,DFA则完全由转换表定义,其中指定所有可能的当前状态和输入的未来状态。
[0302] 表2示出了ZCB合约的转换表。可能的状态定义为S={f0,f0,f1},表示
[0303] ·持有状态(s0),
[0304] ·系统的最终状态F={f0,f1}
[0305] ο正常结论(如果遵循“愉快路径”)或圆满结局(f0),
[0306] ο出现问题的状态(f1),例如诉讼。
[0307] 考虑的输入为I={r,d,e},表示
[0308] ·到期时(或到期前)偿还本金(r),
[0309] ·到期时(或到期前)发行者违约(d),
[0310] ·合约到期未还款(e)
[0311]
[0312] 表2:零息债券合约转换表。
[0313] 图13示出了从持有状态到两个最终状态中的一个状态的转换。DFA从一种状态到另一状态的机制可以由区块链事务体现;实际上,花费与一个状态相关联的UTXO(事务的输入),并创建与下一状态相关联的UTXO(输出)。“始发”事务(o)、“转换”事务(t0、t1)和“完成”事务(c0、c1)在示意图中用蓝色三角形表示。
[0314] 智能合约的区块链分层网络:本公开使用前面描述的区块链分层网络(BLN)(例如,1200)来增强DFA系统中的状态,例如WO/2018/078584中ZCB定义的状态。
[0315] 在一些实施例中,系统可采用简单支付验证(SPV)范例,由此核心层1201之外的节点仅根据SPV协议转发特定的事务。专业智能合约节点1202SC的系统链接到“挖矿节点”104的核心区块链网络106,根据其工作证明(PoW)达成共识,而前者建立第二层共识(PoW或其它方法)。这意味着由二级节点构造的事务在主区块链系统上仍然有效。智能合约节点1202SC可以根据定义的状态表(外部数据)转发状态和条件。如果格式不同,则分层网络
1200的中间层和/或外层会拒绝状态转换。
[0316] 在WO/2018/078584中,ZCB状态源自债券的创建和到期,即债券到期后的结果。然而,由于属于长期投资,ZCB可能会受到限制。因此,投资者可选择在二级市场出售他们的债券。
[0317] 需要注意的是,此类交易不会影响底层DFA转换表中的状态,即由新债务证券的创建和到期所定义的状态。然而,存在相反的依赖关系,即DFA状态的变化会影响市场上的交易。图14示出了不同的状态是如何同时存在的。
[0318] 图14示出了零息债券的n次交易所产生的次要状态(花括号),该债券目前处于基于区块链的DFA定义的主要持有状态(顶部)。
[0319] 智能合约:智能合约指使用软件来促进、验证或执行协商或履行合约的部分或全部内容的合约。在基于输出的(例如,基于UTXO的)模型中,智能合约实体是连接到区块链的节点。
[0320] 在“SPV”范例中,核心1201外的节点可能无法“监听”区块链,除非使用标准的SPV协议,因为需要与挖矿节点签署服务水平协议,以向它们发送特定的事务,这不属于轻量级的解决方案。需要注意的是,如果不存在账户,可不断更新签名密钥,则仅通过浏览区块链难以识别可能与智能合约相关的事务。
[0321] 在本文公开的实施例中,智能合约的用户直接向智能合约发送事务。类似地,如果触发智能合约来创建事务,则会直接发送给用户。(用户和智能合约的事务还应该独立地发送到区块链。)
[0322] 为了稳健性,可能需要整层的智能合约节点(网络结构的第2层)。智能合约事务围绕该层进行传播,从而智能合约状态可保持一致。
[0323] 使用区块链分层网络(BLN)的一个原因在于能够实现智能合约。优选地,为了实现稳健性和负载平衡,将会存在多个智能合约节点1202SC,而第3层的用户则直接将事务发送到第2层的智能合约,从而使系统具有SPV友好性。
[0324] 智能合约节点1202SC可收取部分事务费用。所有智能合约节点可以一起行动。
[0325] 第2层节点和/或第3层节点可以在社区传播事务,因为它们都希望就智能合约的状态达成一致。
[0326] 第2层节点和/或第3层节点可以颁发标识它们自身和合约规则的数字证书。这可以是无需许可的系统,其中节点允许人员进入,因为每个事务都要付费。
[0327] 网络拓扑:下面表3为示例性网络拓扑的汇总。矿工操作完整节点,而智能合约和用户操作SPV节点,他们基于哈希算力(PoW)达成共识。智能合约节点使用哈希难题达成共识,该哈希难题源自私有债券购买协议(BPA)中列出的细节。用户对市场交易达成共识,其中使用UTXO集合关系来表示活跃的债券持有者,以及包含起草自信托契据(TI)的数字证书的事务。
[0328]
[0329] 表3:BLN中示例性角色描述。
[0330] 图15示出了表3中指定作为BLN拓扑中连接的节点的实体。
[0331] 在一级市场和二级市场交易的金融实体在第3层为用户。因此,当不同用户相互交互时,需要多个智能合约节点来支持负载均衡。
[0332] 由于可以在二级市场针对不同类型的金融合约进行交易,因此还可能形成多个社区。例如,一种ZCB来自于“剥离”债券。这是指投资银行从债券中剥离息票并单独出售,即剥离剩余债券和息票在二级市场分开进行交易。虽然需要不同的智能合约来反映信托契据的差异(即,与债券持有人达成的不同协议),但两者都与定义债券有效期的相同底层状态相联系。
[0333] 债券发行、交易及结算流程:下面的表4列出了示例性建立的参与者。
[0334]
[0335] 表4:不同金融市场的参与者。
[0336] 图16示出了BLN拓扑中连接的节点社区。
[0337] 现参考图17至图19描述使用BLN记录智能合约状态和状态变化的一些示例性方法。
[0338] 第一阶段——创建新债务证券。这是记录主要状态的示例。参考图17。
[0339] 步骤S0:爱丽丝雇佣特鲁迪作为ABC Inc.金融团队的一部分,以创建DFA结构并部署链接到该外部数据的智能合约节点。
[0340] 步骤S1:与爱丽丝私下协商后,鲍勃在BPA中承销新的债务证券。
[0341] 步骤S2:爱丽丝基于BPA中规定的条款设置和广播始发事务TxIDo。
[0342] 步骤S3:智能合约节点检查UTXO集合,以便TxIDo根据DFA转换表标记状态s0的开始。在一些实施例中,如图中所示,这可以可选地包括智能合约节点(特鲁迪)查询核心节点的UTXO集合。然而,这并不构成限制,也不一定需要连接到挖矿节点或其它核心节点以检查UTXO集合。例如,特鲁迪可以在智能合约节点上在本地维护她自身的UTXO集合副本。
[0343] 第二阶段——在市场上交易。这是记录次要状态的示例。参考图18。
[0344] 步骤S4:鲍勃创建交易事务模板TxIDtr,以发起向迪恩出售债券,其中他给自己添加可花费的输出,指示债券的成本。
[0345] 步骤S5:在部分完成的TxIDtr中,迪恩向特鲁迪添加可花费的输出。
[0346] 步骤S6:特鲁迪签署嵌入在空数据输出中的信托契据(TI)。
[0347] 步骤S7:迪恩通过向TxIDtr添加债券的支付输入来签署交易事务。
[0348] 步骤S8:鲍勃签署交易事务,以授权债券的销售。
[0349] 步骤S9:鲍勃(或特鲁迪)将完成的交易事务广播到第1层节点。
[0350] 对于在市场上交易债券的任何第3层用户(例如,迪恩至布鲁克,布鲁克至迪恩,迪恩至伊凡等),可以重复步骤S4至步骤S9。
[0351] 第三阶段——债券到期或其它情况。该阶段可涉及记录主要状态和次要状态的变化。参考图19。
[0352] 主要状态:
[0353] 步骤S10:特鲁迪通过创建和广播转换事务 ,在金融合约中发起状态的变化,以表示:
[0354] a.ABC Inc.将在债券到期时支付本金值(输入r→状态f0);
[0355] b.ABC Inc.将拖欠款项(输入d→状态f1);或
[0356] c.在未付款的情况下合约将到期(输入e→状态f1)。
[0357] 步骤S11:特鲁迪创建并广播完成事务 ,以表示金融合约的结果。
[0358] a.如果为步骤S10a‑>特鲁迪在 中提供相关的难题的解,指示活跃的债券持有者将收到债券本金值的款项。
[0359] b.如果为步骤S10b或步骤S10c‑>特鲁迪在 中提供相关的难题的解,指示在不付款的情况下终止合约。
[0360] 次要状态:
[0361] 步骤S12:特鲁迪在TxIDre中撤销UTXO集合关系。
[0362] a.如果为步骤11a‑>特鲁迪向债券持有者创建支付事务。
[0363] 第一阶段评论:受托者存储外部转换表,为DFA的每一种可能的状态创建哈希难题,并安全地将它们分发给所有有权签署合约的代理(即,智能合约节点)。
[0364] 新债务证券的支付可以在链上或链下处理。需要注意的是,如果在链上处理,则该事务独立于(即,未链接到)后续事务,因为BPA的创建需要债券发行者与承销商之间进行私下协商。
[0365] 图20示出了改编自WO/2018/078584的示例性始发事务的示意图。
[0366] BPA条件嵌入到图20所示的始发事务的锁定脚本中,作为哈希难题,由以下内容给出:
[0367]
[0368] 一旦向哈希难题提供解,则该事务将视为已花费。这会触发合约状态的变化,并在核心区块链网络中进行广播和确认。
[0369] 图20中输入值与输出值的差额是矿工和智能合约节点收取的费用(后者明确作为输出包含在图27的最终事务中)。
[0370] 第二阶段评论:交易事务可以采用商家销售点模板的形式,并包含信托契据合约的空数据输出以及向受托者的可花费的输出,以便:
[0371] (i)为活跃的债券持有者利用UTXO集合关系,
[0372] (ii)为智能合约节点在网络中广播新的投资细节提供经济激励(一旦在区块链上挖掘TI事务)。
[0373] 需要注意的是,受托者将花费先前的“交易”事务(如果存在)的输出,以根据UTXO集合关系指示所有权的变化。信托契据包含债券发行者和代表新债券持有者的受托者的签名。附加事务输入(对于极小的微量数额)包含卖方的签名,以表明债券的销售已得到双方的授权。需要注意的是,在OTC市场中,新的投资者从经销者处购买债券,而经销者可从经纪人处购买债券,经纪人除了向受托者收取费用外,还会收取佣金。
[0374] 图21是步骤S4中部分完成的交易事务的示意图。鲍勃为出售债券向自己添加一笔款项。
[0375] 图22是步骤S5中部分完成的交易事务的示意图。迪恩添加可花费的输出,通知特鲁迪处理任何未来的交易,即在此示例中为UTXO集合关系撤销。
[0376] 图23是步骤S6中部分完成的交易事务的示意图。特鲁迪起草并签署信托契据,该信托契据作为数字证书嵌入,并包含债券发行人的签名。
[0377] 图24是步骤S7中部分完成的交易事务的示意图。迪恩添加输入以支付债券。
[0378] 图25是步骤S8中完成的交易事务的示意图。鲍勃授权最终交易,并将其广播到区块链网络(或发送给特鲁迪进行广播)。
[0379] 第三阶段评论:合约签署的接续的转换由智能合约节点执行。它们需要获得对应于当前状态(s0)的难题的解,与世界互动(外部状态,例如债券到期日),以接收适当的输入,读取转换表(或仅对应于当前状态的部分),并获得对应于下一适当状态(ff)的难题。然后,可以将事务提交到区块链。如果放置成功,则将获得他们的费用,并且DFA将处于状态ff。
[0380] 图20中输入值与输出值的差额是矿工和智能合约节点收取的费用,尽管后者明确作为输出包含在图27的最终事务中。图27中的第一输出将任何未使用的资金返回给发起者(债券发行者,爱丽丝)。
[0381] 图27是改编自WO/2018/078584的转换事务的示意图。
[0382] 图28是UTXO集合撤销事务的示意图。
[0383] 上面已描述BLN拓扑,以促进智能合约和基于区块链的DFA等的使用。向一个网络拓扑添加在不同共识机制下运行的专用节点系统。采用SPV范例能够实现BLN不同层的节点之间的轻量级通信。该思路已在基于金融市场交易的用例中得到了例证,以表明不同用户如何有效地相互交易以及智能合约节点。
[0384] 结论
[0385] 应当理解,上述实施例仅通过示例的方式进行描述。更通俗地说,可以根据下述任何一个或更多个语句提供一种方法、装置或程序。
[0386] 语句1:一种在分层网络中维护智能合约状态的方法,所述分层网络包括核心层、一个或更多个中间层、和一个或更多个外层,所述核心层包括一个或更多个核心节点,每个所述中间层包括一个或更多个中间层节点,每个所述外层包括一个或更多个外层节点;其中,每个所述核心节点是区块链网络的节点,所述中间层节点中的一个或更多个中间层节点是提供智能合约服务以维护所述智能合约状态的智能合约节点,所述外层节点中的一个或更多个外层节点是所述智能合约服务的客户端节点;所述方法包括由所述一个或更多个智能合约节点中的第一智能合约节点执行:在所述第一智能合约节点处维护的所述状态的记录中记录所述智能合约的状态;其中,也记录有所述状态的至少一个第一事务被记录在所述区块链网络的区块链上。
[0387] 应当理解的是,在这种情况下的“第一”仅是给定一个智能合约节点的任意标签,本身并不一定意味着相对于其它智能合约节点的任何特定状态。
[0388] 语句2:根据语句1所述的方法,其中所述一个或更多个智能合约节点是多个智能合约节点;所述方法包括,由所述第一智能合约节点:将所述状态传播到另一个智能合约节点处维护的所述智能合约状态的记录,所述传播在所述分层网络的所述一个或更多个中间层内的智能合约节点之间的一个或更多个连接上执行。
[0389] 语句3:根据语句1或2所述的方法,其中所述第一事务由所述客户端节点中的一个客户端节点传输到待记录在所述区块链中的所述核心节点中的至少一个核心节点。
[0390] 语句4:根据前述任一项语句所述的方法,其中所述方法包括,由所述第一智能合约节点:将所述第一事务从所述第一智能合约节点传输到待记录在所述区块链上的所述核心节点中的至少一个核心节点。
[0391] 语句5:根据语句3所述的方法,其中,通过所述客户端节点中的一个客户端节点与所述核心层之间的所述分层网络内的至少一个连接,所述第一事务被直接传输到所述至少一个核心节点。
[0392] 或者,它可以通过多次跳转进行传输。
[0393] 语句6:根据语句4所述的方法,其中所述方法包括,由所述第一智能合约节点:在所述第一智能合约节点处从所述客户端节点中的所述一个客户端节点接收所述第一事务;其中所述第一智能合约节点的所述传输包括将所述第一事务转发到所述至少一个核心节点。
[0394] 语句7:根据语句6所述的方法,其中以下两项中的一项或两项:所述接收是直接通过所述第一智能合约节点与所述客户端节点中的所述一个客户端节点之间的所述分层网络内的连接执行的,和/或,所述转发是直接通过所述第一智能合约节点与所述核心层之间的所述分层网络内的至少一个连接执行的。
[0395] 或者,接收引线和转发引线的其中一个或两个都可以通过多次跳转。
[0396] 语句8:根据前述任一项语句所述的方法,其中所述第一事务由所述客户端节点中的一个客户端节点发起。
[0397] 语句9:根据语句1至7中任一项所述的方法,其中所述第一事务由所述第一智能合约节点发起。
[0398] 语句10:根据前述任一项语句所述的方法,其中在所述智能合约节点中的至少一个智能合约节点处维护的所述状态的所述记录被提供(make available)给所述客户端节点中的至少一个客户端节点。
[0399] 语句11:根据语句10所述的方法,其中所述提供使得所述至少一个客户端节点能够确定所述状态,而无需查询所述区块链上的所述记录。
[0400] 语句12:根据语句10或11所述的方法,其中所述记录直接通过所述至少一个智能合约节点与所述至少一个客户端节点之间的所述分层网络内的连接提供。
[0401] 或者,通过多次跳转可实现这一点。
[0402] 语句13:根据语句10至12中任一项所述的方法,其中所述方法包括:所述第一智能合约节点,通过所述第一智能合约节点将在所述第一智能合约节点处维护的所述状态的所述记录提供给所述至少一个客户端节点,来执行所述提供。
[0403] 通过第一智能合约节点与客户端节点之间分层网络内的连接可直接实现这一点,或通过多次跳转可间接实现这一点。
[0404] 语句14:根据从属于语句2的语句10至13中任一项所述的方法,其中在所述状态传播到的其它智能合约节点中的至少一个处维护的记录被提供给所述至少一个客户端节点。
[0405] 同样,通过分层网络中的单次跳转可直接实现这一点,或通过多次跳转可间接实现这一点。
[0406] 语句15:根据前述任一项语句所述的方法,其中所述智能合约节点中的至少一个智能合约节点被设置成检查所述区块链上或矿工内存池中的所述记录,以确认所述智能合约的所述状态。
[0407] 语句16:根据语句15所述的方法,其中所述至少一个智能合约节点被设置成直接通过所述至少一个智能合约节点与所述核心节点中的至少一个核心节点之间的所述分层网络内的连接来执行所述检查。
[0408] 语句17:根据语句15或16所述的方法,其中所述方法包括所述第一智能合约节点执行所述检查。
[0409] 语句18:根据语句15、16或17所述的方法,其中所述检查由除所述第一智能合约节点之外的所述智能合约节点中的另一智能合约节点执行。
[0410] 语句19:根据前述任一项语句所述的方法,其中所述客户端节点中的至少一个客户端节点检查所述区块链或矿工的内存池,以确认所述智能合约的所述状态。
[0411] 例如,在实施例中,这可以是次要状态,例如所有权。比如,客户端节点可检查UTXO集合的活跃债券持有者。
[0412] 语句20:根据语句19所述的方法,其中由所述至少一个客户端节点进行的所述检查通过所述客户端节点与所述核心层之间的所述分层网络内的直接连接执行。
[0413] 或者,通过多次跳转可实现这一点。
[0414] 语句21:根据前述任一项语句所述的方法,其中所述第一事务包括一个或更多个输入,每个输入包括所述智能合约的相应方的加密签名。
[0415] 语句22:根据前述任一项语句所述的方法,其中所述第一事务的输入包括所述第一智能合约节点的操作者的加密签名。
[0416] 语句23:根据前述任一项语句所述的方法,其中所述第一事务包括一个或更多个输出,每个输出包括将所述输出锁定到所述智能合约的相应方的锁定脚本。
[0417] 语句24:根据前述任一项语句所述的方法,其中所述第一事务包括应用级有效载荷(application‑level payload),所述有效载荷包括所述智能合约的一个或更多个条款。
[0418] 语句25:根据前述任一项语句所述的方法,其中所述方法包括由所述第一智能合约节点:使用与所述第一智能合约节点相关联的加密密钥对所述有效载荷的至少一部分进行签名,所述有效载荷包括所述条款中的至少一个。
[0419] 语句26:根据语句24或25所述的方法,其中所述有效载荷包含在所述第一事务的不可花费的输出中。
[0420] 在实施例中,不可花费的输出可通过将操作码包含在该输出的相应锁定脚本中变得不可花费,该操作码终止相应脚本。例如,这可以是OP_RETURN操作码。
[0421] 语句27:根据前述任一项语句所述的方法,其中所述在所述第一智能合约节点处维护的所述记录中记录所述状态包括:记录所述智能合约的第一状态,并且记录所述智能合约的所述状态的变化,所述变化是与所述第一状态相比的变化;其中所述第一状态被记录在所述区块链上的第一事务中,所述状态变化记录在所述区块链上的第二事务中。
[0422] 语句28:根据语句27所述的方法,其中所述第一事务包括输出,所述输出包括相应的锁定脚本,所述锁定脚本包括状态难题,所述状态难题需要状态难题的解以解锁所述相应的锁定脚本;并且其中所述方法包括由所述第一智能合约节点:使用存储在所述第一智能合约节点的一组规则来基于所述一组规则制定所述状态难题,并在所述区块链上记录之前将所述状态难题包括在所述第一事务中;以及,在所述第一智能合约节点维护的所述记录中记录所述智能合约状态的变化,其条件是所述第二事务包括输入,所述输入指向包括所述状态难题的相应输出,并且所述输入提供所述状态难题的解。
[0423] 语句29:根据前述任一项语句所述的方法,其中所述第一事务通过所述分层网络的一个或更多个外层内的至少一个连接被在至少两个客户端节点之间协商。
[0424] 比如,这可包括交换第一事务的模板版本。在实施例中,两个客户端节点中第一客户端节点的第一用户与两个客户端节点中第二客户端节点的第二用户针对模板事务达成一致。这可包括添加锁定到其中一方的相应输出,作为协商的一部分。两个节点中的一个节点还可添加输出,该输出锁定到第一智能合约节点的操作者。然后,两个客户端节点中的一个将该模板事务发送到第一智能合约节点,以使用与智能合约节点相关联的加密签名进行签名(例如,签署有效载荷中包含的条款)。然后,第一智能合约节点将已签名模板返回给第一节点和第二节点中的一个,其用户添加他们的签名(例如,在输入中),并发送给另一客户端节点,以便该客户端节点的用户添加他们的签名。其中一个客户端节点随后向核心层发送完成的已签署事务,包括所有三个签名,以记录在区块链上。例如,可能激励出售合约所代表的权利(例如,债券)的一方这样做。该最终发送步骤可直接发送到核心,或可通过第一智能合约节点转发到核心。
[0425] 语句30:根据语句2至7、10至20或29中任一项所述的方法,其中使用通信协议执行所述分层网络的至少一些节点之间的通信,包括所述传播、传输、接收、转发、提供、检查和/或协商中的一个或更多个。
[0426] 在实施例中,所述通信协议可以是采用如下形式的消息的通信协议:a)从客户端节点发送到核心节点的事务;b)从客户端节点到核心节点的查询,以查询事务是否已被接受到矿工的内存池中,以及来自所述核心节点的对应响应;c)从客户端节点到核心节点的默克尔证明请求,其表明事务已挖掘到区块中,以及来自所述核心节点的包含所述默克尔证明的响应;和/或,d)从客户端节点到核心节点的区块头列表请求,以及来自所述核心节点的包含所述区块头列表的响应。
[0427] 在实施例中,相关客户端节点和/或智能合约节点可被配置为当通过与至少一个核心节点的连接进行通信时,不超出a)至d)的范围。
[0428] 在实施例中,所述协议可以是SPV协议。
[0429] 在实施例中,客户端节点与智能合约节点之间的所有通信都可以使用所述协议。在实施例中,不同客户端节点之间的所有通信都可以使用所述协议。在实施例中,不同智能合约节点之间的所有通信都可以使用所述协议。在实施例中,客户端节点与核心节点之间的所有通信都可以使用所述协议。在实施例中,智能合约节点与核心节点之间的所有通信都可以使用所述协议。
[0430] 在实施例中,外层节点与中间层节点之间的所有通信都可以使用所述协议。在实施例中,不同外层节点之间的所有通信都可以使用所述协议。在实施例中,不同中间层节点之间的所有通信都可以使用所述协议。在实施例中,外层节点与核心节点之间的所有通信都可以使用所述协议。在实施例中,中间层节点与核心节点之间的所有通信都可以使用所述协议。
[0431] 语句31:根据前述任一项语句所述的方法,其中所述第一智能合约节点处的所述状态的记录包括记录多个状态变化,所述多个状态变化也记录在所述区块链上的一个或更多个事务中,所述一个或更多个事务至少包括所述第一事务;其中所述方法包括由所述第一智能合约节点:确定所述状态变化的顺序,并且根据所述顺序将所述状态变化应用于在所述第一智能合约节点处维护的所述记录中。
[0432] 语句32:根据语句31所述的方法,其中所述顺序的所述确定包括从所述分层网络的所述中间层节点中的一个或更多个中间层节点中实现的排序服务接收所述顺序。
[0433] 在实施例中,排序服务节点可以是与第一智能合约节点相同的社区的一部分。
[0434] 语句33:根据语句31或32所述的方法,其中所述顺序记录在所述区块链上。
[0435] 语句34:根据前述任一项语句所述的方法,其中所述核心层是完整的。
[0436] 即,核心层中的每个核心节点在分层网络中与核心层中的所有其它核心层节点都有连接。
[0437] 语句35:根据前述任一项语句所述的方法,其中所述分层网络总体是不完整的。
[0438] 即,并非每一层中的每个节点在分层网络中与所有其它核心层中的所有其它节点都有连接。在一些此类实施例中,给定层中的每个节点甚至不一定与同一层中的所有其它节点都有连接。
[0439] 语句36:一种计算设备,所述计算设备包括:存储器,所述存储器包括一个或更多个存储器单元,以及,处理装置,所述处理装置包括一个或更多个处理单元;其中所述存储器存储被设置成在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时通过执行根据前述任一项语句所述的方法来操作作为所述第一智能合约节点的所述计算机设备。
[0440] 语句37:一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或更多个处理器上运行时,执行根据语句1至35中任一项所述的方法。
[0441] 语句38:一种方法,所述方法包括:使用通信协议的一个或更多个消息在第一网络的两个或更多个节点之间传送关于智能合约的信息;以及,导致所述智能合约的状态存储在提供智能合约服务的所述网络的智能合约节点上的记录中;其中所述智能合约的所述状态也记录在区块链网络的区块链上。
[0442] 在实施例中,所述通信协议可以是采用如下形式的消息的通信协议:a)从客户端节点发送到核心节点的事务;b)从客户端节点到核心节点的查询,以查询事务是否已被接受到矿工的内存池中,以及对应的响应;c)默克尔证明请求,所述默克尔证明表明事务已挖掘到区块中,以及包含所述默克尔证明的响应;和/或,d)区块头列表请求,以及包含所述区块头列表的响应。
[0443] 在实施例中,所述通信协议可以是SPV。
[0444] 在实施例中,第一网络可包括核心节点,该核心节点是区块链网络的节点以及除区块链网络节点以外的非核心节点。通信可以在非核心节点之间进行,或者可以在一个非核心节点与一个核心节点之间进行。该核心非核心节点可以包含智能合约节点。通信可以在智能合约节点与一个核心节点之间进行。该方法可以由智能合约节点执行。非核心节点可包含作为智能合约节点的客户端的客户端节点。通信可以在客户端节点与智能合约节点之间进行。该方法可以由智能合约节点或客户端节点或其组合执行。
[0445] 在实施例中,所述通信可包括针对智能合约进行协商,例如通过交换事务的模板版本。所述导致步骤可基于(至少在一定程度上基于)通信,例如基于协商。此外/或者,所述通信可包括查询合约的状态,例如从智能合约节点或从其中一个核心节点查询。
[0446] 事务可由智能合约节点或其中一个客户端节点发送,以记录在区块链上,例如通过发送到其中一个核心节点。
[0447] 语句39:一种计算设备,所述计算设备包括:存储器,所述存储器包括一个或更多个存储器单元;处理装置,所述处理装置包括一个或更多个处理单元;以及网络接口,所述网络接口包括一个或更多个网络接口单元;其中所述存储器存储被设置成在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时操作所述计算机设备,以执行根据语句38所述的方法,包括经由所述网络接口传送所述一个或更多个消息。
[0448] 语句40:一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或更多个处理器上运行时,执行根据语句38所述的方法。
[0449] 根据本文公开的另一方面,可提供一种由客户端节点执行的方法,该方法包括本文公开的任何客户端节点的操作。根据又一方面,可提供一种客户端节点,该客户端节点被配置为执行此类方法,以及计算机程序,该计算机程序用于根据此类方法操作作为客户端节点的节点。根据又一方面,可提供一种方法,该方法包括任何一个或更多个智能合约节点和任何一个或更多个客户端节点的操作。根据再一方面,可提供对应的系统。
[0450] 一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。