首页 / 专利库 / 资料储存系统 / 分布式账本 / 分布式账本技术

分布式账本技术

阅读:326发布:2020-05-12

专利汇可以提供分布式账本技术专利检索,专利查询,专利分析的服务。并且描述了一种供由 节点 网络的节点执行以维护由节点网络维护的 分布式账本 的至少一部分的计算机实现的方法。该方法包括维护分布式账本的至少一部分。分布式账本的该至少一部分被配置成存储记录和该记录的相关联的验证数据。记录的验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态。,下面是分布式账本技术专利的具体信息内容。

1.一种供由节点网络的节点执行以维护由所述节点网络维护的分布式账本的至少一部分的计算机实现的方法,所述方法包括:
在验证规程期间将事件状态指派给接收到的预期记录,其中所述事件状态由所述节点的逻辑时钟提供,其中所述预期记录包括旨在用于所述分布式账本的记录。
2.根据权利要求1所述的计算机实现的方法,其特征在于,针对所述预期记录的记录的验证规程包括使所述预期记录沿着节点序列的诸节点传递,其中所述节点序列中的每个节点将相应事件状态指派给所述预期记录,其中所述相应事件状态由所述节点的相应逻辑时钟来提供。
3.根据权利要求2所述的计算机实现的方法,其特征在于,所述验证规程产生用于所述预期记录的记录的验证数据,其中所述验证数据标识:(i)在所述验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点的相应逻辑事件时钟指派给所述预期记录的相应事件状态。
4.根据权利要求3所述的计算机实现的方法,其特征在于,所述验证数据包括:所述节点序列中的每个节点的标识符以及其在所述节点序列中的位置的指示,以及在所述验证规程期间由所述节点序列中的每个节点的相应逻辑事件时钟指派给所述预期记录的相应事件状态。
5.根据权利要求3或4所述的计算机实现的方法,其特征在于,所述验证数据包括节点标识符的有序列表,每个节点标识符标识所述网络中的对应节点,以及在所述验证规程期间由所述节点序列中的每个节点的相应逻辑事件时钟指派给所述预期记录的相应事件状态,其中所述有序列表的顺序是在所述验证规程期间沿其传递所述预期记录的所述节点序列的顺序。
6.根据任一前述权利要求所述的计算机实现的方法,其特征在于,所述验证规程为每个预期记录构建因果路径。
7.根据任一前述权利要求所述的计算机实现的方法,其特征在于,所述预期记录包括记录以及至少验证元素,所述验证元素标识由所述验证规程中的当前节点为所述预期记录指派的相应事件状态。
8.根据任一前述权利要求所述的计算机实现的方法,其特征在于,所述方法进一步包括:
维护所述分布式账本的至少一部分,其中所述分布式账本的所述至少一部分被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点的相应逻辑事件时钟指派给所述预期记录的相应事件状态。
9.根据权利要求8所述的计算机实现的方法,其特征在于,所述节点序列的诸节点的至少一个子集的每个节点在所述验证规程期间执行对所述预期记录的记录的检查。
10.根据任一前述权利要求所述的计算机实现的方法,其特征在于,所述方法进一步包括:
在由所述节点维护的所述分布式账本的所述至少一部分中存储预期记录的记录和与所述记录相关联的验证数据,其中所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点的相应逻辑事件时钟指派给所述预期记录的相应事件状态。
11.根据任一前述权利要求所述的计算机实现的方法,其特征在于,所述验证规程包括:
接收预期记录;
将事件状态指派给所述预期记录;以及
传送给所述预期记录的所述事件状态。
12.根据权利要求11所述的计算机实现的方法,其特征在于,所述验证规程进一步包括:
检查所述预期记录的记录以确认所述节点是否准许将所述记录包括在所述分布式账本中;
以所述节点准许将所述记录包括在分布式账本中为条件,传送由所述节点为所述预期记录指派的相应事件状态。
13.根据权利要求11或权利要求12所述的计算机实现的方法,其特征在于,所述验证规程进一步包括:
将所述预期记录发送至所述网络中的其他节点,其中所述其他节点变成所述节点序列中的下一个节点。
14.根据任一前述权利要求所述的计算机实现的方法,其特征在于,所述方法进一步包括:
接收预期记录的验证数据,其中所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;以及
将所述预期记录的记录和所述记录的验证数据存储在由所述节点维护的所述分布式账本的至少一部分中。
15.根据权利要求14所述的计算机实现的方法,其特征在于,所述节点序列的诸节点的至少一个子集的每个节点在所述验证规程期间执行对所述预期记录的记录的检查。
16.根据权利要求1至7中任一项所述的供由节点网络的节点执行的计算机实现的方法,其特征在于,所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,其中所述验证规程方法包括:
接收预期记录,其中所述预期记录包括旨在用于所述分布式账本的记录,其中所述记录消耗特定项与特定实体的特定关联性;
检查由所述节点维护的所述分布式账本的至少一部分,以确定所述特定项与所述特定实体的所述特定关联性是否已被所述账本中的另一记录所消耗;以及
以所述节点确定所述关联性尚未被所述账本中的另一记录消耗为条件,传送由所述节点为所述预期记录指派的事件状态。
17.根据权利要求1至7中任一项所述的供由节点网络的节点执行的计算机实现的方法,其特征在于,所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,其中所述验证规程包括:
接收用于所述分布式账本的第一预期记录,其中所述第一预期记录包括旨在用于所述分布式账本的记录,其中所述记录消耗特定项与特定实体的特定关联性;
接收用于所述分布式账本的第二预期记录,其中所述第二预期记录包括旨在用于所述分布式账本的记录,其中所述记录消耗特定项与特定实体的特定关联性;
确定在所述第一预期记录和所述第二预期记录之间是否存在冲突,包括各自消耗相同特定项与相同特定实体的相同特定关联性的所述第一预期记录和所述第二预期记录的冲突;以及
以确定冲突为条件,拒绝所述第一预期记录和所述第二预期记录中的至少一者。
18.根据权利要求1至7中任一项所述的供由节点网络的节点执行的计算机实现的方法,其特征在于,所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
从所述网络中的另一节点接收记录和所述记录的验证数据,其中所述记录消耗特定项与特定实体的特定关联性,其中所述记录的所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;
确定是否存在冲突,当已由所述记录消耗的特定关联性是与由所述节点维护的所述分布式账本的至少一部分中的不同记录所消耗的相同的特定关联性时存在冲突;
以存在冲突为条件,从与记录相关联的所述验证数据的事件状态确定首先消耗了所述特定关联性的记录和第二个消耗了所述特定关联性的记录;以及
更新所述分布式账本以存储首先消耗了所述特定关联性的记录,并拒绝第二个消耗了所述特定关联性的记录。
19.根据权利要求1至7中任一项所述的供由节点网络的第一节点执行的计算机实现的方法,其特征在于,所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
作为其中节点序列包括所述第一节点的第一验证规程的一部分,接收第一预期记录,其中所述第一预期记录包括旨在用于所述分布式账本的第一记录,其中所述第一记录消耗特定项与特定实体的特定关联性;
从第二节点接收第二预期记录,在所述第二节点中第二验证规程正被执行,其中所述节点序列包括所述第二节点但不包括所述第一节点,其中所述第二预期记录包括旨在用于所述分布式账本的第二记录,其中所述第二记录消耗特定项与特定实体的特定关联性;
确定在所述第一预期记录和所述第二预期记录之间是否存在冲突,其中当所述第一记录和所述第二记录各自消耗相同特定项与相同特定实体的相同特定关联性时存在冲突;以及
以存在冲突为条件,拒绝所述第一预期记录和所述第二预期记录中的至少一者。
20.根据权利要求16至19中任一项所述的计算机实现的方法,其特征在于,所述项包括数字货币
21.根据任一前述权利要求所述的用于验证存储在分布式账本中的记录的计算机实现的方法,其特征在于,所述分布式账本被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态,所述方法包括:
接收要验证记录的请求
使用与所述记录相关联的所述验证数据来联系所述节点序列中的每个节点,以请求确认所述验证数据的特定部分是正确的;以及
以所述节点序列中的每个节点确认所述验证数据的所述特定部分正确为条件,验证所述记录。
22.根据权利要求1至20中任一项所述的供由节点执行用以确认分布式账本中的记录的验证数据的特定部分正确的计算机实现的方法,其特征在于,所述分布式账本被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态,所述方法包括:
接收要确认所述验证数据的所述特定部分正确的请求;
检查存储在由所述节点维护的所述分布式账本的至少一部分中的所述验证数据的所述特定部分;以及
以所述验证数据的所述特定部分正确为条件,确认所述验证数据的所述特定部分是正确的。
23.根据权利要求1至20中任一项所述的供由节点网络的节点执行以维护由所述节点网络维护的分布式账本的至少一部分的计算机实现的方法,其特征在于,所述方法包括:
维护所述分布式账本的至少一部分,其中所述分布式账本的所述至少一部分被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;
其中具有所述账本的账户的唯一标识符将每个账户与所述账本的对应部分相关联。
24.一种供由节点网络的节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
维护每个关联性的静态时间值,其中所述静态时间值取决于所述关联性保持未使用的时间长度而被增加;
维护所述节点的信誉权重,其中所述节点的信誉权重当所述节点参与针对被提交给所述账本的预期记录的验证规程时被增加,其中所述节点的信誉权重被增加的量基于对由所述预期记录的记录用尽的所述关联性的静态时间值的所分配的共享;以及使用所述网络中的所述节点的信誉权重来解决两个记录之间的冲突,其中经历了验证规程的具有较低的总信誉权重的节点序列的记录被拒绝。
25.计算机可执行指令,所述计算机可执行指令当在计算机上被执行时致使所述计算机执行任何前述权利要求所述的方法。
26.一种包括至少一个计算机处理器和至少一个计算机存储器的计算机节点,其特征在于,所述计算机存储器包括计算机可执行指令,所述计算机可执行指令在被执行时致使所述计算机节点执行权利要求1至24中任一项所述的方法。

说明书全文

分布式账本技术

技术领域

[0001] 本公开涉及分布式账本技术,并且具体而言涉及供由维护分布式账本的节点网络的节点执行的计算机实现的方法以及对应的计算机程序和计算机节点。

背景技术

[0002] 分布式账本技术是被用来维护分布式账本(有时被称为共享账本)的技术。分布式账本是跨多个计算机节点(或简称为“节点”)散布的数字记录的被复制、共享和同步的集合,其中各节点通常跨多个站点、国家或机构定位
[0003] 分布式账本通常跨节点网络(通常是对等网络)来被维护,节点网络的拓扑结构可取决于应用的要求而变化。需要一种共识机制来确保所有节点都能够就合法和非法活动达成一致并相应地采取行动。
[0004] 在非法活动的情形中,这可能是导致节点或一组节点的错误操作的诚实错误(honest fault),或者是节点运营商为牟利或破坏所做出的恶意活动。由于从恶意意图中确定诚实错误通常是不可能的,因此大多数共识机制都假定所有错误都是由不诚实的行为者造成的。
[0005] 在许多情形中,共识机制服务于允许新节点验证它们是否正与现有节点正确地同步的附加目的。
[0006] 最纯粹形式的分布式账本消除了对用于维护被存储在账本中的数据的完整性的单个中央集权(central authority)的需要。取而代之的是,此任务变成整个网络的责任,其中网络的各节点共同参与以确保数据的整体完整性。
[0007] 账本中的所有信息通常都使用加密技术,以使用密码关键字、加密和数字签名来确保一致性、完整性、安全性和权限。一旦数据被提交并被存储在账本中,其便被视为受网络的共识机制的规则管控的记录数据库中的不可变条目。
[0008] 尽管集中式账本频繁地受到各种形式的网络攻击的影响,但是就分布式账本内在而言是很难对其发起成功攻击的,因为多个分布式副本存在于许多位置中,为了达成成功攻击,所有这些分布式副本需要被同时地攻击。支持分布式账本的网络越大,攻击在逻辑上和资源需求方面就变得越昂贵。类似地,归因于共识机制要求所有节点都同意任何改变,以及发起任何改变所需的密码证明,因此被存储在分布式账本中的记录对单方所致的恶意改变是有抵抗的。
[0009] 分布式账本(或“数字分布式账本”,以明确该术语与计算机存储的数据有关)可以被视为存储真相的单个版本的不可变的分布式数据库。
[0010] 分布式账本技术在许多行业类别(industry vertical)中具有变革各组织进行日常运营的方式的巨大潜力。例如,该技术可被用来在各种行政规程上协助政府,诸如征税、发放许可证、管理社会保障福利和投票规程。该技术在诸如金融、溯源、音乐和娱乐、珍贵资产、物联网、以及各种商品的供应链等领域也具有应用。尽管分布式账本技术具有巨大的潜力,但是现有的分布式账本体系结构遭受许多技术问题和限制。
[0011] 分布式账本体系结构的一种形式是链。这是数字货币比特币(Bitcoin)的底层技术,并且是在无需中央控制实体的情况下启用了无需许可(permissionless)和去信任(trustless)的价值转移的第一个分布式账本。
[0012] 在该设计中,各交易被一起批处理并以区块为单位以周期性区间被记录,这些区块被附加到上一个有效区块以创建链,因此命名为区块链。在网络内被称为“矿工(miner)”的独立实体执行以下任务:通过从网络收集各交易、将它们一起批处理,并尝试找到满足如由网络定义的当前要求的哈希值来创建区块。
[0013] 在比特币中,此过程涉及矿工尝试发现区块的SHA-256哈希,该SHA-256哈希包含如由确定性网络要求(被称为“难度”)定义的数个前导零位。如果矿工已生成的当前哈希不满足这些要求,则他可以递增“nonce(随机数)”值并再次尝试。如果矿工在数次nonce增量之后仍没有找到可接受的哈希(在比特币中,nonce是32位值),则他们可以替换区块中的一些交易、重置nonce值并再次开始。随着更多的矿工加入网络以及难度增加,单个矿工发现满足这些要求的哈希的机会便降低。
[0014] 此过程被称为“工作量证明”,因为发现区块的有效哈希需要大量的努力,然而在给定区块内容和nonce值的情况下,验证哈希是否有效对任何人来说都是轻而易举的。
[0015] 一旦矿工已发现有效的区块哈希,他们便将其提交给网络,寄希望于没有其他矿工已在相同的时间区间内生成比他们的区块哈希前导零位更多的竞争区块哈希。如果没有的话,则他们的区块将被附加到链的末尾,并且所有矿工接着将重置并尝试发现下一个区块的有效哈希。
[0016] 工作量证明的共识规则很简单:在每个区间中,具有包含最多前导零位的哈希的区块是被网络所接受的区块,因此被接受的区块链是跨所有区块累积工作最多的区块链。
[0017] 矿工通过因成功生成区块而被授予若干比特币来得到对他们的工作的奖励,并且还对被包括在该区块中的交易收取费用。对区块生成的新比特币的授予还充当用于发行和分配新货币单位的经济机制。
[0018] 比特币只是如何在没有中央实体的情况下使用分布式账本来记录事件并促进所有权转移的一个例子,现在有很多这样的例子。尽管许多例子使用不同的共识机制、哈希算法、经济参数和区块间隔以及众多新特征的发展,但几乎所有的例子都采用了类似的基于区块链的体系结构,并因而继承了它的许多(如果不是全部的话)局限性。一些分布式账本体系结构(诸如Ripple和有向非循环图(DAG))并不是基于区块链的,但是遭受到与此处针对区块链详细描述的问题相类似的各种问题的影响。
[0019] 这些问题中最关键的问题或许就是这样的体系结构可能缺乏可扩展性。本质上是垂直的,网络内的所有节点和矿工都需要接收过去、现在和将来的所有区块的副本,以便与全局状态同步并正确地操作。
[0020] 当前,比特币区块的大小为1MB,并且足以每秒处理3-5笔交易而不会出现问题。然而,随着区块大小增加以促进更高的交易吞吐量,区块到网络中所有节点的传播时间也增加。最终,此传播时间长于其中区块被创建的区间,对比特币而言该区间为10分钟。矿工没有以及时的方式接收到最新的区块,并因此基于旧知识创建新区块。网络变得充满了正与彼此竞争的区块,并且网络吞吐量急剧地下降。在这一点上,增加区块大小只会进一步扩大由于CAP定理引起的问题以及由于光速局限性而导致的数据传输限制。“CAP”代表一致性、可用性和分区容限。
[0021] 此饱和点已被计算为开始于每秒约400-500笔交易,并且相应地在每秒约800-1000笔交易处或者在125MB至250MB的区块大小处变成临界的。相比之下,全球借记卡和信用卡支付平均在每秒3000-5000笔交易的区间内,并且峰值为10,000笔且将需要大小为千兆字节的区块。
[0022] 进一步增加了可伸缩性问题的是矿工需要关于网络中当前待决交易的尽可能多的知识以便高效地创建区块的要求。各交易在被包括在区块中之前先在网络上被个体地广播到所有节点,这导致交易被广播两次,一次是在被创建时,且在被包括在区块中时被再次广播。这进一步消耗了可用的网络带宽并增加了整体区块传播时间。
[0023] 另一紧迫的问题是共识机制的资源消耗。大多数分布式账本利用某种形式的资源消耗来驱动共识机制。最普及的是工作量证明,通过计算哈希以便发现有效的区块哈希而消耗的资源便是计算能力,这进而消耗了电力。目前,比特币已被计算为消耗约10GW的电力以执行其共识,以太坊(Ethereum)紧随其后,随着这些网络的发展以及矿工之间的竞争加剧,消耗将增加。为提供共识而消耗的资源量与网络的吞吐能力之间也不存在关联。
[0024] 其他共识机制包括权益证明(proof-of-stake)、活动证明(proof-of-activity)、燃烧证明(proof-of-burn)、容量证明(proof-of-capacity)和流逝时间证明(proof-of-elapsed-time)。每一种都受到了批评。例如,在权益证明中,存在很少的动机去表现得良好(“无权益(nothing-at-stake)”问题)。活动证明遭受到相同问题的影响,并且像工作量证明一样在计算上也很密集。燃烧证明需要毁灭价值(destruction of value),并且在财务上是昂贵的。容量证明遭受到“无权益”问题的影响,并且需要巨量的存储资源。流逝时间证明具有与信任有关的潜在问题。
[0025] 二次消耗也是一个因素,因为挖矿动作需要大量硬件来执行任务并保持竞争力,硬件本身会随着时间的流逝而磨损、变得不适用且因而成为废品。
[0026] 另一个令人关注的问题是当前分布式账本技术随时间集中化的趋势,尤其是当在公共环境中操作时。该集中化是双重问题,并且是当前所采用的共识机制和缺乏对网络中各节点的激励以保管账本副本这两者的结果。
[0027] 由于共识机制而导致的集中化围绕着这样一个事实,即它们是基于资源的并且随着矿工之间竞争的增加而采用上升的难度参数。随着该困难参数的增加,参与挖矿过程变得更加昂贵且变得有利可图。运营规模较小或者用以购买其所需资源的资本有限的矿工由于其不再能够竞争而停止其操作。最终,这导致少量非常大的挖矿运营,这损害了总体安全性、减少了攻击面,并使这些矿工之间的合谋和滥用变得更加容易。
[0028] 第二种集中化效应涉及保管存在于网络中的完整账本的副本的节点。由于区块链的垂直体系结构以及需要所有区块确保正确的全局状态这一事实,存储完整副本所需的存储空间量在大小上永远都在增加。这些“全节点”也是加入网络的新节点(其希望同步)的主要数据提供者,这给它们提出了快速互联网连接的附加要求。全节点无论如何都不会因提供此关键和必要功能而被奖励,然而,存在与操作一个节点相关联的显著成本。随着这些成本的增加,这些全节点的运营商可决定停止提供此关键服务,因为这纯粹是自愿的。这可能再次导致少数实体控制这些节点中的大多数节点,因此损害了总体安全性、减少了攻击面,并允许可能的合谋和滥用。
[0029] 区块链的另一个缺点在于,为了获取有关过去事件的信息(例如,为获得实体的余额),必须有人访问并扫描整个区块链。这花费很长时间,并且使实时交易(例如,从自动柜员机(cashpoint)取款)成为问题。存在可以在一定程度上缓解此问题的技术解决方案,诸如将频繁访问的信息智能缓存到存储器中,但是随着区块链在大小上的增长,这些解决方案最终从长远来看只是将问题推向另一领域(将存在大存储器需求用以存储缓存)。
[0030] 以太坊是类似于比特币的开源、公共、基于区块链的分布式计算平台,但其中包含允许对各种动作执行图灵完备逻辑(脚本)的特征。这些脚本被称为智能合约,并且允许开发者创建市场、存储债务或承诺的登记、根据很久以前给出的指令(如遗嘱或期货合约)转移资金,并为其他去集中化(decentralised)应用的开发提供平台。以太坊提供了被称为“以太(ether)”的数字货币令牌,其可以在账户之间被转移并被用来就所执行的计算对参与者节点进行补偿。以太坊的交易吞吐量与比特币的交易吞吐量类似,并且差不多以相同方式遭受到饱和效应的影响。
[0031] 提供解决上面描述的问题中的一者或多者的分布式账本技术或体系结构将是有利的。具体而言,提供可扩展以供在宽范围的应用中使用的分布式账本技术或体系结构将是有利的。例如,就数字货币交易而言,提供与当前技术或体系结构相比提高了的交易吞吐量和减少了的结算时间将是有利的。提供一种改进的共识机制,或者从更一般的意义上说,提供一种既不会随着时间的流逝而集中化、也不会消耗大量资源的经改进的验证机制也将是有利的。发明内容
[0032] 下面阐述本公开的各方面和特征。本特定公开的性质在于,存在多个方面,每个方面由节点网络的节点(或“计算机节点”,各术语在本文中被可互换地使用)执行。虽然不是必需的,但对节点而言执行下面阐述的诸方面中的一者或多者或者所有方面是可能的。相应地,可以以任何组合将一个方面的特征引入另一方面。
[0033] 本公开提供了基于合作而不是基于竞争的改进的数字账本技术或体系结构。取代区块链方案的资源密集型竞争,本公开教导了一种账本/体系结构,其中网络中的节点一起工作,以在所接收到的旨在用于分布式账本的记录被提交给该账本之前对该记录执行验证规程。该记录作为包括该记录的预期记录的一部分在各节点之间被发送。该记录可以包括任何记录数据,其中该记录和记录数据是因应用而异的。一旦记录被提交给账本或存储在账本中,记录便可以被查询以确定记录的时间排序(即,其中记录被接收的相对顺序)。记录也可以随后被验证,以确认相对排序。个体记录可以使用验证记录来被验证,该验证记录由验证规程生成并被存储在账本中。
[0034] 本公开的某些方面涉及由节点网络维护的分布式账本。网络的节点维护账本(或账本的一部分)的本地副本。验证规程被使用,其中包括旨在用于账本的记录的预期记录沿着节点序列被传递。节点序列中的每个节点将相应或本地事件状态指派给预期记录,并且在将预期记录的记录提交给账本之际,节点序列中的节点存储该记录的验证数据。记录的验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态。
[0035] 根据一个方面,提供了一种供由节点网络的节点执行以维护由节点网络维护的分布式账本的至少一部分的计算机实现的方法,该方法包括在验证规程期间将事件状态指派给所接收到的预期记录,其中该预期记录包括旨在用于分布式账本的记录。预期记录在被提交给由节点维护的账本的至少一部分的本地副本之前经历验证规程。
[0036] 在给定时间处的节点的事件状态可以被认为是该节点的本地事件状态。通常,网络中的每个节点将为该节点所接收的每个预期记录更新其事件状态。
[0037] 节点可以(i)在接收到预期记录之际,或(ii)在节点执行的验证规程部分的结束时,或(iii)在这些时间之间的任何时间处,更新其事件状态。
[0038] 本地事件状态可以由用于相应节点的逻辑时钟来提供,诸如Lamport时钟、向量(Vector)时钟、矩阵(Matrix)时钟或任何其他可操作以当更新其本地事件状态时产生部分或全排序的逻辑时钟或计数器。更新本地事件状态可以包括递增逻辑时钟值。任选地,本地事件状态可以基于预期记录的接收来被更新。预期记录接着将按接收到的顺序被处理。任选地,本地事件状态可以被指派给所接收到的预期记录,并且本地事件状态可以在预期记录已被处理之后来被更新(接着,下一个本地事件状态将被指派给下一个预期记录)。如果多个预期记录正被同时处理,则其他指派本地事件状态的方式可以被使用。通常,节点为所接收到的每个预期记录提供对应或相关联的事件状态。
[0039] 可以经由更新(例如使用八卦(gossip)协议)将已被处理并被存储到一个节点的账本的副本的记录发送到其他节点。在通过更新接收到记录之际,接收方节点可以更新其本地事件状态并将该记录存储在其账本的副本中。任何节点的账本的副本可以是部分副本。即,账本的本地副本可以是账本的至少一部分。
[0040] 被指派给预期记录的事件状态可以有利地在针对预期记录的记录的验证规程中被使用,其中预期记录沿着节点序列的节点被传递,并且其中节点序列中的每个节点将相应的事件状态指派给预期记录。该节点还可以被配置成维护分布式账本的至少一部分。分布式账本(或账本的一部分)被配置成存储记录和该记录的相关联的验证数据。被存储在分布式账本中的记录的验证数据标识:(i)在验证规程期间(当包括旨在用于分布式账本的记录的预期记录沿着节点的序列被发送时)网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态。
[0041] 网络中的其他节点,尤其是节点序列中的节点,也可以被配置成维护账本的至少一部分。节点序列中的诸节点的每一者可以被配置成存储记录和相关联的验证数据。有利地,相同的记录和验证数据应被存储在由节点序列的节点维护的分布式账本的各部分中。即,相同的记录应被复制到存储在网络中的多个节点处的账本的副本中。由于验证数据应包含诸节点的序列及它们各自指派的事件状态的记录,因此尝试改变记录或验证数据(例如通过故障或恶意活动)的任何节点的账本将不再与网络的其余部分的账本的副本相匹配。被存储在序列中的节点处的验证数据和序列中的节点将能够验证记录并检测故障或恶意节点。
[0042] 为了确保记录的验证可以由任何网络节点充分地执行,在不损害效率的情况下在验证数据中包括尽可能多的事件状态是有利的。效率主要受网络大小的影响,并且对于任何大小的网络,存在效率在其内处于它的峰值的下界和上界。对于使用八卦协议的实现,在验证数据中使用log(n)*3个事件状态(其中n是网络中的节点数)是高效的。对于不使用八卦协议的实现,验证数据中的(n/3)+1个事件状态是高效的。效率是共识性能和冲突解决之间的折衷,并且这些数字可以取决于应用要求来被修改
[0043] 验证规程可被视为实现验证机制的至少一部分。验证规程可以被认为是共识规程,该共识规程进而可以被视为实现共识机制的至少一部分。验证数据可被认为是共识数据。
[0044] 节点序列可被认为是事件路径或节点的有序子集。
[0045] 根据另一方面,提供了一种供由节点网络的节点执行以维护由节点网络维护的分布式账本的至少一部分的计算机实现的方法,该方法包括:维护分布式账本的至少一部分,其中分布式账本的至少一部分被配置成存储记录和该记录的相关联的验证数据,其中记录的验证数据标识:在验证规程期间网络中的接收到预期记录的节点序列(其中预期记录沿着节点序列的节点被传递,并且其中节点序列中的每个节点将相应事件状态指派给预期记录);以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态。
[0046] 在验证规程中,记录作为预期记录的一部分被处理,该预期记录包括在该阶段旨在用于分布式账本的记录。即,该记录具有对应的预期记录,该预期记录具有在验证规程期间被指派给它的事件状态。
[0047] 分布式账本(或账本的至少一部分,视情况而定)也可以被配置成存储记录的相关联的记录标识符。记录标识符可以是记录的哈希。换言之,其可以是通过对记录的数据进行哈希化而计算出的哈希值。由节点存储的分布式账本(或账本的至少一部分,或视情况而定)可以被配置成与记录相关联地存储节点首次接收到预期记录时的本地事件状态。
[0048] 节点序列的诸节点的至少一个子集的每个节点可以在验证规程期间执行对预期记录的记录的检查。该检查可被用来确认该节点准许将该记录包括在分布式账本中。该检查可以包括检查预期记录的记录是否遵照一个或多个经定义的准则。例如,该检查可以是针对格式、有效载荷的内容、加密属性或任何其他经定义的准则进行检查。如果对预期记录的检查失败,则预期记录将被拒绝,并且节点可能不将事件状态指派给预期记录。即,节点可以仅将事件状态指派给它确认为通过检查的预期记录。
[0049] 另一方面提供了一种供由节点网络的节点执行以维护由节点网络维护的分布式账本的至少一部分的计算机实现的方法,该方法包括:在由节点维护的分布式账本的至少一部分中存储预期记录的记录和与该记录相关联的验证数据,其中验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态。
[0050] 又一个方面提供了一种用于处理由节点网络维护的分布式账本的预期记录的计算机实现的方法,该预期记录包括旨在用于分布式账本的记录,该方法包括:发起针对预期记录的验证规程,其中验证规程包括预期记录被发送到网络的节点序列,其中节点序列中的每个节点在验证规程期间将相应的事件状态指派给每个所接收到的预期记录。
[0051] 除了包括旨在用于账本的记录之外,预期记录还可以包括供在验证规程中使用的至少一个验证元素。该至少一个验证元素至少包括标识由当前节点指派给预期记录的相应事件状态的验证元素。该至少一个验证元素还可以包括序列中当前节点的标识符。该至少一个验证元素还可以包括序列中下一个节点的标识符。包括至少一个验证元素的一个或多个数据结构(例如,一个或多个验证坐标)可以被提供。每个数据结构或坐标可以包括验证元素,这些验证元素包括由当前节点为预期记录所指派的相应事件状态、序列中当前节点的标识符、以及序列中下一个节点的标识符。(诸)数据结构还可以包括记录的标识符。(诸)数据结构可以随着预期记录在验证规程期间沿节点序列传递而被更新,以包括当前节点的至少一个验证元素。该至少一个验证元素包括标识由当前节点指派给预期记录的相应事件状态的至少一个验证元素。该更新可以包括更新已被描述的至少一个验证元素。该更新可以通过替换数据结构中的验证元素或通过在预期记录沿着节点序列传递时为该序列中的每个节点添加数据结构来达成。
[0052] 该方法可以进一步包括接收记录并且以接收到记录为条件(基于接收到记录)来构造包括该记录的预期记录并发起验证规程。
[0053] 该方法可以由用于验证规程的协调器节点执行。节点序列通常将包括协调器节点。协调器节点可以是节点序列中的第一节点,但是其也可以是序列中的另一节点。例如,一个节点可以发起序列,而序列中的第二节点可以充当协调器节点。
[0054] 任选地,该方法进一步包括:接收标识网络中的节点序列的数据以及在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态;构造验证数据,该验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态;以及传送该验证数据。该方法可以进一步包括传送提交(commit)指令,该提交指令指导节点序列中的节点将预期记录的记录存储(或保存)在分布式账本中。传送提交指令可以包括传送验证数据。该数据(其标识节点序列和相应事件状态)可以在数据结构中被接收,该数据结构包括来自节点序列中的每个节点的相应验证元素。可以从来自数据结构的验证元素构造验证数据。该验证数据可以包括一组经聚集的数据结构,即节点序列中每个节点一个数据结构。
[0055] 根据另一方面,提供了一种供由节点网络的节点执行的计算机实现的方法,其中节点网络维护分布式账本,该方法包括:接收分布式账本的预期记录,其中该预期记录包括旨在用于分布式账本的记录;将事件状态指派给预期记录;以及传送预期记录的事件状态。事件状态可要么直接地要么间接地经由网络中的其他节点被传送至协调器节点。事件状态可以被传送至序列中的前一个节点或所有先前节点。该方法可以包括利用节点的至少一个验证元素来更新预期记录中的(诸)数据结构。事件状态的传送可以包括传送数据结构,该数据结构包括节点的至少一个验证元素(例如,所指派的事件状态、当前节点标识符、下一个节点标识符和记录标识符)。
[0056] 记录可以具有标识符。该方法可以包括将记录和标识符存储在例如待决列表中,以使得记录可以在稍后被标识,尤其是将其记录存储(或保存)到账本。
[0057] 通常,节点序列中的每个节点都将执行此方法。节点执行任何检查并非是必需的。例如,分布式账本可被用来存储简单记录(诸如电子邮件)而无需检查。这样的账本将使得能够使用验证数据来验证记录。
[0058] 该方法可以包括:检查预期记录的记录以确认节点是否准许(即,不反对)将该记录包括在分布式账本中;以节点准许将记录包括在分布式账本中为条件并传送预期记录的相应事件状态。该方法可以进一步包括传送准许(consent)指示符,其中传送准许指示符可以包括传送预期记录的相应事件状态。该方法还可以包括:以节点不准许将记录包括在分布式账本为条件,传送非准许指示符。
[0059] 可要么直接地要么间接地经由网络中的其他节点向协调器节点进行传送。准许指示符可以包括预期记录的标识符、节点的标识符、节点的给预期记录的事件状态。其还可以包括序列中下一个节点的标识符。其可以作为单个坐标或数组来传送。准许指示符的传送可以包括传送数据结构,该数据结构包括节点的验证元素(所指派的事件状态、当前节点标识符、下一个节点标识符和记录标识符)。
[0060] 协调器节点不是必需的。相反,例如,可以在预期记录沿着节点序列被传递时构造验证数据,并且可接着向序列中的前一个节点或序列中的所有先前节点进行传送。
[0061] 如果协调器节点接收到非准许指示符,则其不传送预期记录的验证数据,并且节点将不存储(或保存)预期记录的记录。协调器节点可以传送非提交(non-commit)指令和/或记录的存储可以在每个节点处超时。
[0062] 如果序列中的前一个节点接收到非准许指示符,则该节点将不存储(或保存)记录,并且其将会把非准许指示符发送到序列中的前一个节点,且依此类推。传送非提交指令的节点可将其传送至序列中的所有先前节点,以使每个节点不存储(或保存)记录。
[0063] 该检查可以包括对一个或多个经定义的准则的检查。
[0064] 该方法可以进一步包括将预期记录发送到网络中的其他节点,其中该其他节点变成节点序列中的下一个节点。该方法可以包括:接收指示符以确认该其他节点将参与验证规程。该方法可以包括:接收指示该其他节点将不参与验证规程的指示符,例如如果该其他节点没有存储账本的副本的话。在该情形中,该方法可以包括:响应于接收到指示符,将预期记录发送到网络中的一不同的其他节点,其中该不同的其他节点变成节点序列中的下一个节点。如果在预定时间内没有接收到确认其他节点将参与验证规程的指示符,则可以使用类似的过程。
[0065] 另一方面提供了一种供由节点网络的节点执行以存储由节点网络维护的分布式账本的至少一部分中的记录的计算机实现的方法,该方法包括:接收预期记录的验证数据,其中该验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态;将预期记录的记录和该记录的验证数据存储在由节点维护的分布式账本的至少一部分中。该验证数据可以包括一组经聚集的数据结构,即节点序列中每个节点一个数据结构。每个数据结构包括验证元素(包括事件状态),其由相应节点在验证规程期间指派。
[0066] 验证数据可能已与提交指令(其可能是隐式提交指令)一起被从协调器节点发送。验证数据可以与预期记录的标识符一起被接收。
[0067] 节点序列的诸节点的至少一个子集的每个节点可能已在验证规程期间执行了对预期记录的记录的检查。该检查可能已被用来确认该节点准许将该记录包括在分布式账本中。
[0068] 分布式账本可以包括记录,其中多个记录中的每一者消耗相应项与相应实体的相应关联性。
[0069] 可消耗关联性是可以以某种方式被消耗或用尽的关联性。可被用尽的关联性的非限制性示例涉及将实体(例如,人、企业、法人、地点或事物)与特定项(其可包括对象或色)相关联的关联性。关联性(例如,对象的所有权或分配或角色的正式指派)可被改变为另一实体,并且将不再与从前的实体相关联。换言之,原来将实体与该特定项相关联的关联性本该被用尽或消耗。重要的是,例如,如果该项是被出售的物理实体或一定数量的数字货币,则重要的是,同一可消耗关联性不被消耗或花费一次以上。
[0070] 可消耗关联性使系统能够用于各种各样的目的,诸如记录财务交易和相关联的账户余额、记录项(包括财产、职责、角色等)的所有权的转移。
[0071] 另一方面提供了一种供由节点网络的节点执行的计算机实现的方法,其中节点网络维护分布式账本,其中分布式账本包括记录,其中多个记录中的每一者消耗相应项与相应实体的相应关联性,该方法包括:接收预期记录,其中该预期记录包括旨在用于分布式账本的记录,其中该记录消耗特定项与特定实体的特定关联性;检查由节点维护的分布式账本的至少一部分,以确定该特定关联性是否已被账本中的另一记录所消耗;以及以节点确定该特定关联性尚未被账本中的另一记录消耗为条件,传送由该节点为预期记录指派的事件状态。以节点确定冲突为条件,该方法可以进一步包括传送非准许指示符。
[0072] 可要么直接地要么间接地经由网络中的其他节点向协调器节点进行传送。可以向序列中的前一个节点或所有先前节点进行传送。可以向序列中的下一个节点进行传送。准许指示符可以包括预期记录的标识符、节点的标识符和/或节点的给预期记录的事件状态。其还可以包括序列中下一个节点的标识符。其可以作为单个坐标或数组传送。准许指示符的传送可以包括传送数据结构,该数据结构包括节点的验证元素(例如,所指派的事件状态、当前节点标识符、下一个节点标识符和记录标识符)。
[0073] 如果协调器节点接收到非准许指示符,则其不传送预期记录的验证数据,并且节点将不存储(或保存)预期记录的记录。协调器节点可以传送非提交指令和/或记录的存储可以在每个节点处超时。
[0074] 如果序列中的前一个节点接收到非准许指示符,则该节点将不存储(或保存)记录,并且其可将非准许指示符发送到序列中的前一个节点,且以此类推。传送非提交指令的节点可将其传送至序列中的所有先前节点,从而指导每个节点不存储(或保存)记录。
[0075] 另一方面提供了一种供由节点网络的节点执行的计算机实现的方法,其中节点网络维护分布式账本,其中分布式账本包括记录,其中多个记录中的每一者消耗相应项与相应实体的相应关联性,该方法包括:接收分布式账本的第一预期记录,其中第一预期记录包括旨在用于分布式账本的记录,其中该记录消耗特定项与特定实体的特定关联性;接收分布式账本的第二预期记录,其中第二预期记录包括旨在用于分布式账本的记录,其中该记录消耗特定项与特定实体的特定关联性;确定第一预期记录和第二预期记录之间是否存在冲突,冲突包括第一预期记录和第二预期记录各自消耗同一特定关联性;以及以确定冲突为条件,拒绝第一预期记录和第二预期记录中的至少一者。
[0076] 拒绝可以包括传送针对第一和第二预期记录中的至少一者的非准许指示符。非准许指示符通常包括用于预期记录或记录的标识符,以及指示不准许将其包括在账本中(即,已针对其标识出冲突)的指示符。
[0077] 该确定可以包括将第一预期记录所消耗的关联性(可消耗关联性)与第二预期记录所消耗的关联性(可消耗关联性)进行比较并确定它们是同一关联性。每个记录可以包括标识可消耗条目的消耗品数据。可消耗条目标识实体和项之间的关联性。即,可消耗关联性可包括可消耗条目或者可由可消耗条目来表示。可消耗条目可以具有标识符。该确定可以包括比较标识符。可消耗条目标识符可以是可消耗条目中的一些或全部数据的哈希,并且可以是实体的标识符和项的标识符的哈希。
[0078] 消耗品数据还可包括用于在项以及一个或多个新实体之间创建新关联性的数据。该数据可以包括新实体的标识符。该数据可以包括一个或多个对应的新实体的一个或多个标识符,并且可以包括标识项的数据。在其中由一个实体拥有的项被拆分成不止一个新的项(例如,对于数字货币)的实例中,数据可以包括创建新的项所需的所有数据,诸如被转移至每个实体的货币的量。换言之,消耗品数据可以包括用以消耗已经在账本中的一个或多个可消耗条目的数据以及用以创建一个或多个新的可消耗条目的数据。
[0079] 记录可以简单地消耗一个或多个可消耗关联性,例如与实体相关联的一次性使用的数字息票或令牌。附加地或替代地,记录可以创建一个或多个新的可消耗关联性,例如,当记录包括数字货币中的支付时。新创建的可消耗关联性可以与相同的项相关,并且记录可因此将相应项的关联性从相应实体转移至其他相应实体。
[0080] 非准许指示符可以被转移至协调器节点。非准许指示符可以被传送至序列中的前一个节点或所有先前节点。可以传送用于第一预期记录和第二预期记录中的仅一者的非准许指示符。具有最早因果事件状态的记录通常将是针对其传送准许指示符的记录,因此,具有较晚因果事件状态的记录通常将是针对其传送非准许指示符的记录。
[0081] 如果协调器节点接收到非准许指示符,则其不传送预期记录的验证数据,并且节点将不存储(或保存)预期记录的记录。协调器节点可以传送非提交指令和/或记录的存储可以在每个节点处超时。
[0082] 如果序列中的前一个节点接收到非准许指示符,则该节点将不存储(或保存)记录,并且其可将非准许指示符发送到序列中的前一个节点,且依此类推。传送非提交指令的节点可将其传送至序列中的所有先前节点,以使每个节点不存储(或保存)记录。
[0083] 另一方面提供了一种供由节点网络的节点执行的计算机实现的方法,其中节点网络维护分布式账本,其中分布式账本包括记录,其中多个记录中的每一者消耗相应项与相应实体的相应关联性,该方法包括:从网络中的另一节点接收记录和该记录的验证数据,其中该记录消耗特定项与特定实体的特定关联性,其中该记录的验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态;确定是否存在冲突,即当已由该记录消耗的特定关联性是与该节点所维护的分布式账本的至少一部分中的不同记录所消耗的特定关联性相同的特定关联性时存在的冲突;以存在冲突为条件,从与记录相关联的验证数据的事件状态中确定首先消耗了该特定关联性的记录和第二个消耗了该关联性的记录;以及更新分布式账本以存储首先消耗了该特定关联性的记录,并拒绝第二个消耗了该特定关联性的记录。
[0084] 另一方面提供了一种供由节点网络的第一节点执行的计算机实现的方法,其中节点网络维护分布式账本,其中分布式账本包括记录,其中多个记录中的每一者消耗相应项与相应实体的相应关联性,该方法包括:作为其中节点序列包括第一节点的第一验证规程的一部分,接收第一预期记录,其中第一预期记录包括旨在用于分布式账本的第一记录,其中第一记录消耗特定项与特定实体的特定关联性;从第二节点接收第二预期记录,在第二节点中第二验证规程正被执行,其中节点序列包括第二节点但不包括第一节点,其中第二预期记录包括旨在用于分布式账本的第二记录,其中第二记录消耗特定项与特定实体的特定关联性;确定在第一预期记录和第二预期记录之间是否存在冲突,其中当第一记录和第二记录各自消耗相同特定项与相同特定实体的相同特定关联性时存在冲突;以及以存在冲突为条件,拒绝第一预期记录和第二预期记录中的至少一者。该方法可以进一步包括传送针对第一和第二预期记录中的至少一者的非准许指示符。非准许指示符通常包括预期记录的标识符或预期记录,以及指示不准许将其包括在账本中(即,冲突已被标识)的指示符。
[0085] 第一预期记录的非准许指示符可被发送至协调器节点或序列中的前一个节点或所有先前节点。第二预期记录的非准许指示符可以被发送至第二节点。
[0086] 如果协调器节点接收到非准许指示符,则其不传送预期记录的验证数据,并且节点将不存储(或保存)预期记录的记录。协调器节点可以传送非提交指令和/或记录的存储可以在每个节点处超时。
[0087] 如果序列中的前一个节点接收到非准许指示符,则该节点将不存储(或保存)记录,并且其可将非准许指示符发送到序列中的前一个节点,且依此类推。传送非提交指令的节点可将其传送至序列中的所有先前节点,以使每个节点不存储(或保存)记录。
[0088] 与实体相关联的项可以包括数字货币。
[0089] 另一方面提供了一种用于验证存储在分布式账本中的记录的计算机实现的方法,其中分布式账本被配置成存储记录和该记录的相关联的验证数据,其中记录的验证数据标识:(i)在验证规程期间网络中接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态,该方法包括:接收要验证记录的请求;使用与记录相关联的验证数据来联系节点序列中的每个节点,以请求确认验证数据的特定部分是正确的;以及以节点序列中的每个节点确认验证数据的特定部分正确为条件来验证记录。
[0090] 另一方面提供了一种供由节点执行用以确认分布式账本中的记录的验证数据的特定部分正确的计算机实现的方法,其中分布式账本被配置成存储记录和该记录的相关联的验证数据,其中记录的验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态,该方法包括:接收要确认验证数据的特定部分正确的请求;
[0091] 检查存储在由节点维护的分布式账本的至少一部分中的验证数据的特定部分;以及以验证数据的特定部分正确为条件,确认验证数据的特定部分是正确的。
[0092] 另一方面提供了一种供由节点网络的节点执行以维护由节点网络维护的分布式账本的至少一部分的计算机实现的方法,该方法包括:维护分布式账本的至少一部分,其中分布式账本的至少一部分被配置成存储记录和该记录的相关联的验证数据,其中记录的验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态;其中具有账本的账户的唯一标识符将每个账户与账本的对应部分相关联。
[0093] 分布式账本可以包括多个分区,每个分区包括分布式账本的一部分。网络的每个节点可以被配置成存储(i)零个分区(ii)多个分区中的一者或多者,或者(iii)多个分区。
[0094] 分布式账本可以被配置成存储记录和该记录的相关联的验证数据。其可以被配置成存储记录的相关联的记录标识符。其可以被配置成存储与节点首次接收到预期记录的时间相对应的相关联的事件状态,如果该记录是通过更新被从另一节点接收到的,则事件状态与节点首次接收到记录的时间相对应。
[0095] 预期记录可以包括记录并至少包括验证元素,该验证元素标识由当前节点为预期记录所指派的相应事件状态。预期记录可以包括记录和数据结构,该数据结构包括该记录的标识符、序列中当前节点的标识符、与序列中当前节点的本地事件状态相对应的预期记录的事件状态,以及序列中下一个节点的标识符。
[0096] 准许指示符可以包括预期记录的标识符、序列中当前节点的标识符、序列中当前节点的预期记录的事件状态,以及序列中下一个节点的标识符。验证数据可以包括每个节点的标识符和其在序列中的位置的指示、序列中每个节点的预期记录的事件状态。对于序列中的每个节点,验证数据可以包括该节点的标识符、该节点的预期记录的事件状态,以及该序列中下一个节点的标识符。提交指令可以包括记录的标识符和验证数据。这些数据是验证元素,并且可以在一个或多个数据结构中被提供,如已经描述的。
[0097] 预期记录可以包括记录并至少包括验证元素,该验证元素包括该记录的标识符、序列中当前节点的标识符、由序列中当前节点指派给预期记录的事件状态,以及序列中下一个节点的标识符。该结构可以与使用协调器节点的实现一起使用。
[0098] 预期记录可以包括记录并至少包括验证元素,该验证元素包括记录的标识符以及由序列中的当前节点为预期记录指派的相应或本地事件状态。对于如预期记录沿其被传递的序列中的每个节点,预期记录可以进一步包括验证元素,该验证元素包括序列中当前(观察者)节点的标识符以及序列中下一个节点(下一个观察者节点)的标识符。该结构可以与不需要协调器节点的实现一起使用。
[0099] 数据结构(例如,验证坐标)可以包括验证元素。
[0100] 序列中并非所有的节点都必需执行对遵照一个或多个经定义的准则和/或对冲突的检查。可具有其中一个或多个节点仅将事件状态指派给预期记录并将预期记录传递下去的序列。序列中的一个或多个其他节点可以利用一个或多个经定义的准则执行检查。一个或多个其他节点可以执行对冲突的检查。
[0101] 另一方面提供了一种供由节点网络的节点执行的计算机实现的方法,其中节点网络维护分布式账本,其中分布式账本包括记录,其中多个记录中的每一者消耗相应项与相应实体的相应关联性,该方法包括:维护每个关联性的静态时间值,其中静态时间值取决于关联性保持未使用的时间长度而被增加;维护节点的信誉权重,其中节点的信誉权重当节点参与针对被提交给账本的预期记录的验证规程时被增加,其中节点的信誉权重被增加的量是基于对由预期记录的记录用尽的关联性的静态时间值的所分配的共享;以及使用网络中节点的信誉权重来解决两个记录之间的冲突,其中经历了验证规程的具有较低的总信誉权重的节点序列的记录被拒绝。
[0102] 另一方面提供了一种包括计算机可执行指令的计算机程序,该计算机可执行指令当在计算机上被执行时致使计算机执行以上方法中的任一者。
[0103] 另一方面提供了一种包括至少一个计算机处理器和至少一个计算机存储器的计算机节点,其中计算机存储器包括计算机可执行指令,该计算机可执行指令在被执行时致使计算机节点执行以上方法中的任一者。
[0104] 网络(其可以是对等网络)的节点可以被配置成执行相同的方法。
[0105] 另一方面提供了一种计算机节点的网络,其中每个计算机节点包括至少一个计算机处理器和至少一个计算机存储器,其中计算机存储器包括计算机可执行指令,该计算机可执行指令在被执行时致使计算机节点执行以上方法中的任一者。
[0106] 相应地,将领会到,提供了一种改进的分布式账本技术或体系结构。存储至分布式账本的提高了的速度可被达成。提供了一种数字账本技术,该数字账本技术可扩展以供在宽范围的应用中使用。就数字货币交易而言,提供了提高了的交易吞吐量。当使用所公开的账本技术/体系结构来存储数字货币交易时,每秒交易(tps)吞吐量可以随存在于网络内的节点的数目而线性地增加。一般而言,当使用商用硬件时,网络中每10个节点可使网络吞吐量增加约1000tps。还提供了形成经改进的验证或共识机制的至少一部分的验证规程(或共识规程)。例如,提供了一种验证机制,该验证机制不倾向于随时间的集中化并且不消耗已知的体系结构消耗的大量资源。
[0107] 附图简述
[0108] 现在将参考附图仅以示例的方式描述本公开的说明性实现。在附图中:
[0109] 图1示出了计算机节点的网络的示意表示;
[0110] 图2描绘了数字账本的堆栈模型;
[0111] 图3示出了计算机的示意表示;
[0112] 图4示出了第一实现的由计算机节点维护的账本中存储的数据;
[0113] 图5示出了新的预期记录的结构,该新的预期记录包括供包括在第一实现的分布式账本中的记录;
[0114] 图6示出了第一实现的预期记录的验证坐标;
[0115] 图7示出了针对预期记录的验证规程的概览,该预期记录包括旨在用于第一实现的分布式账本的记录;
[0116] 图8示出了从协调器节点的角度描绘第一实现的验证规程的流程图
[0117] 图9示出了从执行验证规程的节点序列中的节点的角度描绘第一实现的验证规程的流程图;
[0118] 图10示出了描绘第一实现的记录验证规程的流程图;
[0119] 图11示出了第二实现的由计算机节点维护的账本中存储的数据;
[0120] 图12示出了第二实现的一组可消耗条目;
[0121] 图13示出了第二实现的一组经更新的可消耗条目;
[0122] 图14示出了针对预期记录的验证规程的概览,该预期记录包括旨在用于第二实现的分布式账本的记录;
[0123] 图15示出了从协调器节点的角度描绘第二实现的验证规程的流程图;
[0124] 图16示出了从执行验证规程的节点序列中的节点的角度描绘第二实现的验证规程的流程图;
[0125] 图17示出了第二实现的由节点执行以确定冲突的预期记录的存在的规程的流程图;
[0126] 图18示出了第二实现的变体的由节点执行以确定冲突的预期记录的存在的另一规程的流程图;
[0127] 图19示出了第二实现的针对新的预期记录的验证规程的流程图;
[0128] 图20示出了第二实现的由节点执行以确定冲突的记录的存在的规程的流程图;
[0129] 图21示出了针对三个记录执行了验证规程的节点的序列;
[0130] 图22示出了第三实现的一组可消耗条目;以及
[0131] 图23示出了第三实现的一组经更新的可消耗条目。
[0132] 详细描述
[0133] 本详细描述通过参考图1描述计算机节点的网络开始,在该计算机节点网络上可以维护分布式账本的诸实现。然后参考图2描述概念性堆栈模型,该概念性堆栈模型示出了相同的账本功能性如何能够支持不同的应用。图3被用来描述可用作网络中的计算机节点的计算机的各组件。然后参考图4至图10描述与电子邮件的存储相关的简单的第一实现。然后参考图11至21描述与记录艺术品的所有权相关的更复杂的第二实现。然后参考图22和23描述与使用数字货币的支付相关的第三实现。还描述了第四实现和所有实现的变体。不同实现的特征及各变体的特征不是互相排斥的。相反,所有实现的特征及各变体的特征可以与彼此以及与权利要求中记载的特征一起使用。
[0134] 参考图1,示出了包括多个节点102至112的网络100。计算机A和B是可以连接至网络100的计算机。计算机A和B是用户计算机(或其他电子设备),其通常在存储和维护分布式账本或将要描述的相关联的验证规程中不起积极作用。
[0135] 节点102至112通过网络100连接。网络100可以是任何合适的网络,诸如互联网。用户计算机A和B可以使用任何合适的技术(例如,经由无线或有线连接)连接至网络。
[0136] 图2描绘了数字账本体系结构的概念性堆栈模型。网络层101提供用于节点之间的网络通信的数据路由路径。账本层103是处置分布式账本技术的不因应用而异的元素的层,所述元素包括处理包括旨在用于账本的记录的预期记录,将记录存储在账本中以及存储与每个记录相关联的验证数据。应用层105支持因应用而异的功能性,包括用于特定实现、记录的结构和用户交互的因应用而异的功能性。包括记录数据的记录在应用层中被创建,并接着被传递至账本层以供处理。可在应用层105中被支持的示例应用包括与各件艺术品的所有权的记录相关的应用、与记录交易(尤其是金融交易(例如,数字货币)和存储法律文档的记录相关的应用。
[0137] 图3示出了可被用来执行所描述的方法的计算机节点200的示意性及简化表示。计算机节点102至112以及用户计算机A和B可以具有计算机节点200的一般结构。
[0138] 计算机200包括各种数据处理资源,诸如耦合至中央总线结构的处理器202。还连接到总线结构的是其他数据处理资源,诸如存储器204。显示适配器206将显示设备208连接到总线结构。一个或多个用户输入设备适配器210将用户输入设备212(诸如键盘和/或鼠标)连接到总线结构。一个或多个通信适配器214也被连接至总线结构以提供到网络100的连接。
[0139] 在操作中,处理器202执行包括可被存储在存储器204中的计算机可执行指令的计算机程序。所执行的处理的结果可以经由显示适配器206和显示设备208被显示给用户。可以经由用户输入设备适配器210从用户输入设备212接收用于控制计算机系统200的操作的用户输入。
[0140] 所描述的实现将参考执行特定步骤或操作的一个或多个节点(或者一个或多个节点处的过程或规程)。将领会的是,在所描述的实现中,这些步骤或操作由一个或多个节点的处理器基于存储在存储器中的指令来执行。被描述为由概念性堆栈模型的层执行的规程或操作类似地由一个或多个节点的处理器基于存储在存储器中的指令来执行。
[0141] 作为简要概览,在所描述的实现中,当来自应用层105中的应用的记录要被包括在账本中时,账本层103中的规程构造预期记录。账本层103中的规程接着执行针对预期记录的验证规程。预期记录包括在验证规程期间被使用和更新的记录和验证数据元素。验证规程涉及预期记录沿着网络中的节点序列被传递。网络中的节点被配置成在对所接收到的预期记录执行的验证规程期间更新节点的唯一本地事件状态,并将经更新的事件状态指派给所接收到的预期记录。
[0142] 节点序列的身份及节点的顺序(即路径)以及在验证规程期间由节点序列的每个节点指派给预期记录的相应事件状态被存储为验证数据。在将来的任何时点,验证数据可被用来通过以下项验证记录:检查每个节点具有相同的验证数据,以及由序列中的每个节点确认其根据验证数据而指派给对应的预期记录的事件状态与其指派的存储用于账本中的记录的事件状态相匹配。此处援引的所指派的事件状态是当节点在针对预期记录的验证规程期间首次接收到作为预期记录的一部分的记录时由节点指派给该记录的事件状态。该“所指派的事件状态”通常将被称为“所指派的事件状态”或类似物,但是如果上下文在其他方面是不清楚的,则其将被称为“验证规程指派的事件状态”或类似物。
[0143] 除了接收预期记录作为验证规程的一部分之外,节点还可以接收已被存储在网络中其他节点的账本中的记录。在所描述的实现中,此类记录在使用八卦协议的更新期间被接收。当节点以这种方式接收记录(其之前没有接收过的记录)时,其将更新其本地事件状态,并将经更新的事件状态指派给所接收到的记录。该节点接着在其账本副本中存储所接收到的记录以及该节点指派给该记录的相关联/所指派的事件状态。如果上下文在其他方面是不清楚的,则该事件状态将被称为“更新过程指派的事件状态”或类似物,以将其与“验证规程指派的事件状态”区分开。这两个事件状态之间的关键差异在于,对于前者,节点使记录作为来自另一节点的更新被报告给它,而对于后者,节点曾参与了验证规程。
[0144] 现在将描述第一实现。在第一实现中,节点的本地事件状态使用逻辑事件时钟来被确定。在第一实现中,逻辑事件时钟是Lamport时钟。因此,在第一实现中,由节点指派给所接收到的预期记录和记录的事件状态是逻辑事件时钟计数值,或更具体而言是Lamport时钟值。在第一实现中,每当节点接收预期记录作为验证规程的一部分时,节点都更新其本地事件状态。每当节点接收记录作为更新过程的一部分时,节点还更新其本地事件时钟。换言之,每当新的记录要么在验证规程中被接收为预期记录要么作为更新过程的一部分被接收为记录时,节点的事件状态更新。在一变体中,事件状态仅针对所接收到的预期记录来更新,而不针对作为更新接收到的记录来更新。作为更新规程的一部分接收记录本身是可选特征。
[0145] 第一实现的一个方面提供了一种在分布式账本中存储记录和相关联的数据的方式。图4示出了第一实现的存储在账本中的数据。账本由计算机节点维护,该计算机节点存储已通过验证规程被验证的记录(当作为预期记录的一部分时)。在该实现中,网络中的所有节点维护完整的分布式账本的副本,因此每个节点的本地副本(诸如图4所示)是完整的副本。账本被配置成存储包括记录的数据。在该第一实现中,分布式账本中的每个记录是从一个用户发送给另一用户的电子邮件的记录,例如从用户A(使用分布式账本体系结构运行电子邮件应用的用户计算机A的用户)发送给用户B(也(但不一定)使用分布式账本体系结构运行电子邮件应用的用户计算机B的用户)。当用户A使用该应用发送电子邮件时,运行电子邮件应用的应用层105生成或创建包含记录数据的记录。在该第一实现中,记录数据包括有效载荷,该有效载荷包括发送者、接收者、发送时间、电子邮件文本和附件。
[0146] 由网络100中的每个节点本地存储的账本的副本存储已被发送且被存储在或保存至分布式账本的电子邮件的记录。对于每个记录,节点的账本存储该记录的记录标识符(记录ID)、由该节点在其接收到记录(要么在验证规程期间被接收为预期记录的一部分要么作为更新过程的一部分被接收为记录)时指派给该记录的所指派的事件状态、在验证规程期间产生的该记录的验证数据以及该记录本身。
[0147] 返回到图14,记录的记录ID是标识特定记录的唯一标识符。在该实现中,记录ID是通过对记录进行哈希化而生成的数字。这具有防止记录被篡改的优点-即使对记录数据的很小改变也将导致对通过哈希化记录而生成的值的显著改变。新的哈希值将与记录ID不匹配,且因此可以检测到篡改。
[0148] 术语“标识符”和“ID”在本文中被互换地使用。
[0149] 针对账本中的记录所记录的所指派的事件状态是本地事件状态,维护账本的节点在其首次接收到该记录时将该本地事件状态指派给该记录。
[0150] 节点可以首先接收记录作为验证规程的一部分,即当该记录是经历验证规程的预期记录的一部分时。这将在节点参与针对该记录(当作为预期记录的一部分时)的验证规程的情况下发生。在该情形中,被指派给记录且存储在账本中的所指派的事件状态将是节点的当其在验证规程期间接收到预期记录时的本地事件状态。这就是前面提到的“验证规程指派的事件状态”。
[0151] 替代地,如果节点不参与针对预期记录的验证规程,则可以稍后经由来自另一节点的更新向其通知该记录。在该情形中,被指派给记录且存储在账本中的所指派的事件状态将是节点的当其在更新期间接收到该记录时的本地事件状态。这就是前面提到的“更新过程指派的事件状态”。
[0152] 在该实现中,更新包括通过八卦协议从网络100的其他节点接收数据。在当前实现中,八卦协议涉及一个节点向网络中的其他节点广播其已存储在它的账本中的记录ID。通常,这些记录ID是最近已被添加到其账本中的记录ID。响应于此,接收方节点的每一者检查其自己的本地账本,以查看其是否已包含广播记录ID(以及其他相关联的数据)。然后,可以从广播节点请求并接收任何丢失的数据,尤其是未存储在节点的账本副本中的广播记录ID的一者或多者的数据。可以通过一个节点请求另一节点发送或广播其最新近的记录ID或自一段时间以来已被存储的一组记录ID来发起类似的更新过程。
[0153] 在第一实现中,每个节点存储分布式账本的完整副本,并因此存储每个记录。然而,这不是必需的,并且在一变体中,节点可以将记录的任何组合存储在其账本副本中,或甚至根本不存储记录。这偏离了现有的分布式账本技术。例如,在区块链中,包括记录的区块链的链接性质意味着节点在更新时需要整体接收区块链账本
[0154] 使用所描述的方法,更新节点能够接收特定记录的数据,而不必接收所有记录的数据。这再次偏离了现有办法。例如,节点可以决定接收有关其他节点的账本中最近包括的记录的信息,之后它们再接收有关较旧的、可能相关性较低的记录的信息。
[0155] 有利地,与区块链不同,该功能性意味着使用所描述的方法的节点一旦在它们加入网络100时便可以在网络中有用地运作。这是因为,例如,即使它们存储不完整的账本或者根本不存储账本,它们也可参与针对预期记录的验证规程。诸如区块链之类的系统缺少此功能性,因为它们要求参与在网络中的每个节点都具有整个区块链或账本结构的完整副本,之后该节点才被允许参与使用账本的过程。加入区块链的新节点目前必须在其可以参与之前接收大约250千兆字节的数据。这是极度资源密集的。本公开的实现因而通过以下来表示带宽使用和计算负担中的巨大的潜在减少:允许节点即使在它们自己保持部分账本或不保持账本的情况下也在支持分布式账本的各方面上有所分担。
[0156] 现在返回图4,记录的验证数据包括关于网络100的哪些节点参与了针对该记录(当该记录曾是预期记录的一部分时)的验证规程的信息。
[0157] 第一实现的一个方面提供了一种发起针对预期记录的验证规程的方法。
[0158] 第一实现中的验证规程(将在下面进行更详细的描述)包括预期记录沿着网络中的节点序列传递,以及响应于接收到预期记录,序列中的每个节点更新其本地事件状态并将经更新的事件状态指派给预期记录作为所指派的事件状态。节点标识符和所指派的事件状态形式的验证元素被用来构造预期记录的验证数据。一旦针对预期记录的验证规程完成,该记录便被包括作为分布式账本中的记录并与为该预期记录构造的验证数据一起存储至执行了验证规程的那些节点的本地账本。验证数据标识网络的接收到作为验证规程的一部分的预期记录的节点序列,以及在验证规程期间由节点序列中的每一者指派给预期记录的事件状态值。在第一实现中,验证数据包括节点标识符(每个节点标识符标识网络中的对应节点)的有序列表以及由每个节点指派给预期记录的对应事件状态。有序列表的顺序是沿其传递预期记录的节点序列的顺序。更具体而言,在第一实现中,验证数据包括坐标列表,每个坐标包括记录ID、发送者节点ID、接收者节点ID以及由发送者节点指派给预期记录的事件状态。在第一实现中,节点ID是唯一的96位数字。在第一实现中,坐标和坐标列表可以被视为向量状态,因为它们各自包括不止一个事件状态。
[0159] 验证规程(其涉及向所接收到的每个预期记录指派事件状态)意味着为每个预期记录建立“因果路径”。这意味着记录的验证数据包含定义哪些节点接收到该记录以及以什么顺序接收到该记录的数据,而该记录曾是经历验证规程的预期记录的一部分。在序列足够大或序列的路径长度足够大的情况下,来自网络的显著部分的验证或共识可被给出:存储在账本中的记录是在验证规程期间接收到的未更改的记录。在该第一实现中,向量时钟被用来存储验证数据,该验证数据包括向量事件状态。向量的坐标示出了在验证规程期间哪些节点接收到预期记录以及由每个节点在其接收到预期记录时指派给预期记录的事件状态。不同记录的向量事件状态也可以被比较以解决记录之间的冲突,如将关于第二、第三和第四实现所讨论的。在第一实现(其中八卦协议被使用),log(n)*3的向量长度(或序列中的节点数)(其中n是网络中的节点数)提供良好的性能。此大小左右的向量或序列长度平衡了安全性和速度要求,但是对于任何特定实现,所使用的实际值都是选择问题。
[0160] 从以上描述中将显而易见的是,在所描述的方法中,诸节点个体地参与确定因果路径和事件的相对顺序。因此,验证/共识被以所有节点都可参与的积极方式来达成。这与现有共识方法形成对比,在现有共识方法中,共识是通过例如工作量证明方法获得的,就像在区块链中的情形一样。区块链达成共识的被动方法利用了临时验证(称为“0确认”)。节点未积极参与确定共识。相反,随机机会和工作量证明被用来确定事件的排序。这不仅将节点与共识规程隔离开来,从而导致网络中的潜在信任不足,而且使用临时0确认的需求还导致漏洞(vulnerability)的时间窗(介于0确认和通过进入区块链的完全确认之间)。在此时间窗中,所谓的Finney攻击是可能的,其中网络充满了恶意重复交易。本文中所描述的积极验证/共识方法移除了对0确认的要求,并因此移除了漏洞窗。它们还使节点能够积极参与共识规程,从而导致更加透明和可验证的账本和网络。因而,本公开的各实现提供了一种跨维护分布式账本的节点网络达成共识的更安全的方法。
[0161] 返回到图4,存储在账本中的最终数据是记录本身。记录包括记录数据,该记录数据在此实现中包括记录有效载荷。有效载荷包含可交付或已交付项的细节。在第一实现中,记录与电子邮件有关。因此,有效载荷包括电子邮件的相关数据,如已描述的。
[0162] 图4所示的数据示出了与由节点存储的分布式账本的副本中的电子邮件1001的记录相关的条目。该条目包括:电子邮件1001的记录的记录ID;由节点指派给电子邮件1001的记录的事件状态(要么当节点在更新期间接收到该记录时要么在针对该记录的验证规程期间作为预期记录的一部分);当记录曾是预期记录的一部分时在针对该记录的验证规程期间产生的验证数据;以及记录本身(包括包含有效载荷的记录数据)。
[0163] 如果例如电子邮件1002的新记录要被包括在分布式账本中,则该记录必须首先经历验证规程。电子邮件1002的记录因此将被创建并从应用层105传递至账本层103。账本层构造包括电子邮件1002的记录的预期记录。
[0164] 图5示出了第一实现的预期记录400的结构。预期记录400包括与电子邮件1002有关的记录以及该记录的验证坐标,该验证坐标包括供在验证规程中使用的验证元素。预期记录400还包括用于验证规程的协调器节点的ID。协调器节点是接收记录、构造预期记录并发起针对预期记录的验证规程的节点。协调器节点还执行各种其他功能,如将要描述的。
[0165] 验证坐标的结构如图6所示。在第一实现中,验证坐标包括五个验证元素。该坐标包括以下验证元素:给定预期记录400的记录的记录ID;正将预期记录400发送至节点序列中的下一个节点的发送者节点的ID;节点序列中接收预期记录的接收方节点的ID;由发送者节点指派给预期记录的事件状态;以及节点计数值。节点计数可以从坐标中被省略,并且改为被包括作为与预期记录400相关联的元数据。在一些实现中,验证坐标还包括发送方节点接收到预期记录所处的坐标时间值。坐标时间值有助于允许节点快速更新,因为节点可以快速确定记录是在节点离线还是不可用的时间期间进入网络100的。
[0166] 随着验证规程的进行以及预期记录沿着执行验证规程的节点序列被传递,验证坐标将由序列中的每个节点更新。通过验证坐标的这种更新,记录的验证数据可被构造。现在将详细描述验证规程。
[0167] 图7示出了针对预期记录的验证规程的概览,该预期记录包括旨在用于分布式账本的记录。
[0168] 应用层将记录传递至账本层。在步骤402处,协调器节点(例如图1的节点102)接收记录并构造包括旨在用于分布式账本的记录、验证坐标和协调器节点ID的预期记录。协调器节点在接收到预期记录之际更新其本地事件状态,并将经更新的事件状态指派给预期记录。协调器节点将验证坐标设置为包括:记录ID、协调器节点ID(因为协调器节点是当前发送者节点)、序列中下一个节点(协调器将向其发送预期记录的节点)的ID、协调器节点已指派给预期记录的事件状态,以及节点计数值(其是将在序列中起重要作用的节点的总数)。在第一实现中,此数字是针对账本定义的。
[0169] 在步骤404处,预期记录沿着网络100中的节点序列被发送。在步骤406处,节点序列中的每个节点在接收到预期记录之际更新其本地事件状态,并将该经更新的状态指派给预期记录。如先前所描述,在该实现中,事件状态是逻辑时钟计数值,因此在该实现中被指派给预期记录的状态是逻辑时钟计数值。
[0170] 在步骤408处,每个节点将其各自指派的事件状态传送至协调器节点102。在第一实现中,通过更新验证坐标并将验证坐标传递至序列中的下一个节点并且通过将验证坐标发送至协调器节点来执行这些规程。
[0171] 在步骤410处,协调器节点102从其接收自节点序列的节点的所指派的事件状态构造验证数据。在第一实现中,该规程由聚集所接收到的验证坐标的协调器节点来执行,每个所接收到的验证坐标包含由每个相应节点指派给预期记录的相应事件状态。
[0172] 在步骤412处,协调器节点102向序列的诸节点的每一者传送提交指令和其已为预期记录构造410了的验证数据。在第一实现中,验证数据包括从序列中的诸节点的每一者接收的经聚集的验证坐标。提交指令可以沿着节点序列被一个接一个地发送至,或者可以被直接发送至序列中的诸节点。
[0173] 在步骤414处,序列的节点接着将预期记录的记录和对应的验证数据存储在它们各自的分布式账本的副本中。
[0174] 网络中的其他节点可稍后使用八卦协议或相关更新规程来更新其账本的副本。
[0175] 现在将更详细地描述参考图7所描述的验证规程,首先从协调器节点102的角度描述,接着从执行验证规程的节点的序列中的节点的角度描述。
[0176] 第一实现提供了一种方法,该方法在验证规程期间接收数据并为预期记录的记录构造验证数据。现在将参考图8描述从协调器节点102的角度来看的验证规程(在协调器节点102已经构造了预期记录并且向该预期记录指派了经更新的事件状态之后)。在步骤402处,协调器节点接收预期记录、构造预期记录、更新其本地事件状态,将经更新的事件状态指派给预期记录,并相应地设置验证坐标。协调器节点还在预期记录中设置协调器节点ID(节点102)。因而,步骤402结尾处的预期记录包括记录(在此实现中为电子邮件记录)、协调器节点ID(节点102)和以下形式的验证坐标:(#电子邮件1002#,节点102,节点104,23,19),其中#电子邮件1002#是记录ID、节点102是协调器节点的标识符,节点104是序列中下一个节点的标识符,23是由协调器节点102指派给预期记录的事件状态,而19是节点计数值。应当领会,该验证坐标对应于图6所示的结构。
[0177] 在步骤501处,协调器节点102接着将预期记录传送至针对预期记录的验证规程的节点序列中的下一个节点104。节点104在接收到预期记录之际更新其本地事件状态,并将经更新的状态指派给预期记录。节点104还更新预期记录的验证坐标,并将经更新的验证坐标传送至协调器节点。协调器节点102接收包括由节点104指派给预期记录的事件状态的验证坐标。节点104还将预期记录传递至序列中的下一个节点,并且每个节点进而更新预期记录的验证坐标,并将经更新的验证坐标传送至协调器节点,并且将预期记录一起传递至序列中的下一个节点。
[0178] 在该实现中,每个节点选择序列中的该节点向其发送预期记录的下一个节点。如果在经定义的时间段内未接收到用以确认该其他节点将参与验证规程的指示符,则节点选择一不同的下一个节点。
[0179] 在步骤503处已接收到包括由序列中的每个节点指派给预期记录的事件状态的验证坐标,在步骤505处,协调器节点102可以通过聚集其已接收到的验证坐标来构造预期记录的记录的验证数据。协调器节点能够确定其已接收到所有验证坐标,因为其可以遵循来自验证坐标的节点序列。每个验证坐标包含标识序列中下一个节点的数据。同样,协调器节点能够从它最初插入坐标中的节点计数值中确定它期望接收的坐标的总数m(在该实现中从每个节点接收一个)。
[0180] 已在步骤505处构造了验证数据,在步骤507处,协调器节点102将提交指令和所构造的验证数据传送至节点序列中的每个节点。在该实现中的验证数据包括所接收到的验证坐标的m倍数组,其中m是节点序列中的节点数。
[0181] 如将领会到的,第一实现的一个方面提供了一种方法,该方法在验证规程期间接收预期记录、将事件状态指派给预期记录并传送预期记录的所指派的事件状态。在此实现中该方法还包括将预期记录发送至网络中的其他节点。
[0182] 现在将参考图9描述从节点序列中的节点的角度来看的验证规程。
[0183] 在步骤502处,节点接收预期记录。在步骤504处,在接收到预期记录之际,节点更新其本地事件状态,并将经更新的事件状态指派给预期记录。例如,如果序列中的第二节点(在协调器节点之后)是节点104,则从节点102接收的验证坐标读取为(#电子邮件1002#,节点102,节点104,23,19)。这指示预期记录的记录的记录ID为#电子邮件1002#。发送者ID是节点102。接收方ID是节点104。节点102在其接收到预期记录时的本地事件状态以及因而其指派给预期记录的事件状态为23。节点计数是19。
[0184] 在步骤506处,节点更新验证坐标并将其发送到协调器节点102。
[0185] 在步骤508处进行检查以确定该节点是否是节点序列中所需的最后一个节点。如果该节点确定它不是序列的最后一个节点,则在步骤510处,该节点将预期记录的经更新版本发送至序列中的下一个节点106(包括经更新的验证坐标)。在该示例中,经更新的验证坐标现在读取为(#电子邮件1002#,节点104,节点106,81,18)。81是由节点104指派给预期记录的事件状态。节点计数值现在读取为18,因为又有一个节点接收到了预期记录并更新了验证坐标。每个节点将从该节点计数值中减去1,因为其相应地更新验证坐标。当节点计数值达到0时,序列的最终节点已被抵达。将显见的是,在节点序列的诸节点中存在各种方式可以跟踪节点序列中剩余多少个节点。在一变体中,节点计数值可以向上计数直到其达到预定义的值。
[0186] 在此实现中,节点还将预期记录存储在待决列表中。
[0187] 节点106接着执行步骤502至508。如果节点106还确定它不是序列的最后一个节点,则节点106将经更新的预期记录发送至下一个节点108。从节点106发送至节点108的验证坐标将读取为(#电子邮件1002#,节点106,节点108,12,17)。这指示节点106在其接收到预期记录时的本地事件状态,以及因而其指派给预期记录的事件状态为12。节点计数值已再一次地减少了1。
[0188] 一旦该规程已被执行了17次以上(序列中的每个节点各一次),则序列的最终节点将在步骤506处更新验证坐标并且节点计数值将读取为0。因此,序列的最终节点照常将其验证坐标传送至协调器节点102,但是在步骤508处,确定其为序列中的最后一个节点。因此,在步骤512处,该节点不向序列的任何其他节点传送。在步骤507处,协调器节点102传送提交指令和验证数据。在该实现中的验证数据包括所接收到的验证坐标的m倍数组,其中m是节点序列中的节点数。在该实现中,提交指令包括记录、记录ID和验证数据,其中序列中的每个节点在提交之后将提交指令转发至序列中的下一个节点。在一变体中,提交指令可以简单地包括对验证数据的发送,即,发送验证数据是隐式提交指令。
[0189] 到目前为止,已完成步骤502-510的节点将预期记录存储在待决列表中。在接收到提交指令之际,节点序列中的每个节点(或至少那些维护账本的相关部分的节点)(包括协调器节点102)从其待决列表中移除预期记录,并在由每个节点维护的账本中存储(或保存)预期记录的记录。每个节点在接收到预期记录时也存储其本地事件状态(这对于序列中的节点而言将是它们在验证规程期间指派给预期记录的事件状态)以及由协调器节点102构造505的验证数据。因而,每个节点可以在其本地账本中填写新的行(如所描绘的),并且电子邮件1002的记录可以被包括在分布式账本中。
[0190] 上面描述的方法允许节点100的网络构建分布式账本,其中分布式账本中的每个记录与验证数据相关联。该验证数据可以被检查以验证分布式账本中的记录。例如,验证数据可以在日后响应于用户发起的请求时来被检查。将参考图10描述该过程。
[0191] 每个记录通过其相关联的验证数据来标识网络100中在其验证规程期间接收到对应预期记录400的节点序列,以及在该验证规程期间由序列中每个节点指派给预期记录的相应事件状态。因此,希望验证记录的用户可以调用规程,该规程使用该记录的验证数据来与由验证数据标识的节点序列中的每个节点联系并请求确认验证数据的特定部分是正确的。更具体而言,序列中的每个节点可以接收对其的请求,以确认为记录存储了与提供给用户的验证数据相同的验证数据。附加地或替代地,序列中的每个节点可被要求确认其产生的验证坐标或其验证规程指派给记录的事件状态与提供给用户的相对应。附加地或替代地,序列中的每个节点可被要求确认其接收到的验证坐标与提供给用户的相对应。
[0192] 参考图10,在步骤517处,请求由网络100中的节点接收以验证分布式账本中的记录。在步骤519处,记录的验证数据被用来联系执行该记录的初始验证规程的节点序列中的每个节点。每个节点被请求确认验证数据是否正确。在步骤521处,序列中的每个节点要么确认要么不确认验证数据是正确的。在步骤523处,以节点序列的每个节点确认验证数据的至少相关/特定部分正确为条件,记录可被验证。在节点序列中的一个或多个节点未确认验证数据正确的情形中,记录不被验证(步骤525)。替代地,阈值被设置并且一定数目或百分比的节点需要确认验证数据的特定部分对于待验证的记录是正确的。
[0193] 从执行此用户发起的验证的每个节点的角度来看,节点接收要确认验证数据的特定部分正确的请求。节点接着检查存储在由节点维护的分布式账本的至少一部分中的验证数据的特定部分,并且以验证数据的特定部分正确为条件,确认验证数据的特定部分是正确的。
[0194] 这可被用来验证发生了事件,例如电子邮件被发送。同样,验证数据可被用来建立其中记录被存储至账本的确切顺序。
[0195] 已经详细描述了第一实现,并且也已描述了一些变体。在另一变体中,协调器节点不被使用,并且预期记录不包括协调器节点ID。在该变体中,验证数据随着预期记录沿节点序列传递而被构建。即,每个节点将验证坐标添加到预期记录,直到序列中的最后一个节点具有包括完整验证数据的预期记录。最后一个节点可接着将验证数据和提交指令传送至序列中的所有节点,或者验证数据和提交指令可以沿着序列被传递。在另一变体中,节点序列中的每个节点可以在验证规程期间执行对预期记录的记录的检查,例如检查是否遵照格式、结构、内容、数字签名或其他准则。在此变体中,如果节点报告对记录的检查已失败并且记录未被存储在账本中,则提交指令不被发送。此变体提供了一种方法,该方法用于检查预期记录的记录以确认节点是否准许将该记录包括在分布式账本中,并且以节点准许为条件来传送由节点指派给预期记录的事件状态。关于其他实现且在详细描述的结尾描述了其他变体。
[0196] 第二实现涉及在分布式账本中存储与由项ID标识的项的所有权中的改变有关的记录。在第二实现中,记录数据与第一实现的记录数据不同,因为记录数据是因应用而异的。具体而言,记录数据包括消耗品数据,该消耗品数据消耗项与一个实体的关联性,并且在该实现中,创建该项与另一实体的新关联性。该实现中的关联性(或可消耗关联性)包括可消耗条目,其中可消耗条目将实体与项相关联,并且该关联性可以被用尽或消耗。记录可以标识由记录消耗的可消耗条目,并且可以提供数据以创建新的(未经消耗的)可消耗条目。换言之,可消耗条目可以由记录用尽或消耗,并且另一可消耗条目可以由记录创建。虽然一个变体通过查询账本从存储在账本中的记录中检索直到最近的所有权数据,但是第二实现还包括被存储为分布式账本中的元数据的一组可消耗条目。虽然数据被存储在记录中,但是可消耗条目存储实体与项的关联性的副本(可消耗关联性),这是一种比必须查询记录以获得关于关联性是否已被消耗的直到最近的数据更高效的实现。这组可消耗条目使得账本能够跟踪所有权的改变。可消耗条目是记录由其条目ID标识的特定项当前正由特定实体(或所有者)拥有的条目。当所讨论的项的所有权因存储至账本中的新记录而改变时,可消耗条目可以被消耗(或用尽)。当这发生时,在此实现中,新的可消耗条目被添加至该组可消耗条目,以反映项的新所有者。归因于与同一项相关联的新的可消耗条目的存在,旧的可消耗条目于是被视为已消耗。除了不同的记录数据和与可消耗条目以及它们如何被处理和维护有关的附加特征之外,第二实现按与第一实现相同的方式操作。
[0197] 图11示出了第二实现的存储在账本中的数据。账本由计算机节点维护,该计算机节点存储已通过验证规程被验证的记录(当作为预期记录的一部分时)。在该实现中,网络中的所有节点维护完整的分布式账本的副本,因此每个节点的本地副本(诸如图11所示)是完整的副本。账本被配置成存储包括记录的数据。在该第二实现中,分布式账本中的每个记录是与艺术品的所有权的改变有关的记录。因此,图11中所示的数据类似于图4中所示的数据,不同之处在于此第二实现中的记录数据包括消耗品数据。在该实现中的记录数据不包括有效载荷,但是在一变体中,记录数据包括有效载荷和消耗品数据。此实现中的消耗品数据包括用于可消耗条目的可消耗条目ID,该可消耗条目将实体ID与项ID相关联。数据还包括项的所有权正被转移至的实体的ID。消耗品数据被用来更新存储在分布式账本中的一组可消耗条目,并验证项的当前所有权。
[0198] 图12示出了被存储为账本中的元数据的一组示例的可消耗条目。当新记录被存储在账本中时,账本中的该组可消耗条目还基于来自记录的消耗品数据来被更新。
[0199] 图12中所示的该组可消耗条目包含五个可消耗条目。每个条目具有唯一ID:#0001-#0005。每个条目进一步具有相关联的实体和项,该项由项ID来标识。此实现中的实体是项的所有者。在该实现中,每个实体具有公钥和私钥。数字签名(使用私钥)被用来证明所有者拥有项。此实现中的条目ID是实体ID和项ID的哈希。每个条目进一步包含指示条目是否已被消耗的状态指示符。在该实现中,当实体将其对条目所标识的项的所有权转移至新所有者/实体时,该条目被消耗。
[0200] 在第二实现中,艺术品的所有权的转移被记录。例如,可消耗条目#0001与实体A对项“凡高1”的所有权有关。由于此可消耗条目没有被消耗(“条目被消耗?:否”),因此可消耗条目#0001指示实体A是项凡高1的当前所有者。这对实体B、C和E以及相应项伦勃朗1、特纳1和毕加索1适用,如分别由可消耗#0002、#0003和#0005所示。账本中的该组可消耗条目(具体而言是可消耗条目#0004)还指示实体D在某一时点曾是毕加索1的所有者但已不再是所有者,如由可消耗条目#0004已被消耗的事实所指示(“条目被消耗?:是”)。
[0201] 当新记录被存储至账本时,由每个节点存储的一组可消耗条目(诸如图12所示)被更新以指示由于新记录被存储至账本而已发生的项的所有权中的改变。
[0202] 如在第一实现中那样,在第二实现中待存储至账本的任何记录首先经历验证规程作为预期记录的一部分,其中预期记录包括旨在用于存储在账本中的记录。记录是由用户使用他们用户设备上的他们的账户生成或创建的。用户设备存储用户账户的数据,包括可消耗条目的子集,其包括标识由用户拥有的项的未经消耗的(所拥有的)条目的实体ID。新记录(作为预期记录的一部分)通过节点的序列来被验证,一旦验证完成,该记录便被添加至分布式账本。如果验证成功,则新记录所提供的消耗品数据还被每个节点用来更新被存储为每个节点的本地账本中的元数据的该组可消耗条目。
[0203] 返回到图12,在一示例中,待存储至账本的新记录与实体A向实体B出售项梵高1有关。为了使此记录存储在分布式账本中,预期记录被创建。此实现中的预期记录具有与参考图5描述的第一实现相同的结构。第二实现中的记录的内容(记录数据)与第一实现的不同,如已经描述的。具体而言,第二实现中的记录数据包括消耗品数据。
[0204] 预期记录的记录的消耗品数据包括可消耗条目的条目ID,该可消耗条目标识被转移的项以及其所有权正被转移至的一方的实体ID。在该实现中,消耗品数据还包括当前所有者的数字签名。条目的条目ID被用来标识该组可消耗条目(图13)的待消耗(用尽)的条目。可消耗条目的消耗包括将该组可消耗条目中的可消耗条目的状态指示符从“否”改变为“是”。实体ID和由条目ID标识的项ID被用来将新的可消耗条目添加至已存储在账本中的该组可消耗条目,如图12所示。在一变体中,消耗品数据包括条目ID和条目ID(类似于此实现),而且还包括项ID。在另一变体中,是项数据而不是项ID。消耗品数据可取决于应用和特定实现而包括进一步的数据。在这些变体中,消耗品数据可被用来创建新的(未经消耗的)可消耗条目。
[0205] 在一示例中,有关实体A向实体B出售项梵高1的新记录被存储在账本中。记录的消耗品数据包括条目#0001的条目ID以标识可消耗条目以及项(凡高1)和“B”(实体B的身份)。消耗品数据还包括实体A的数字签名。假设包含该新记录的预期记录已通过验证规程被成功地验证,则账本中所存储的该组可消耗条目将如下被更新:
[0206] 可消耗条目#0001将被消耗-在可消耗条目#0001的状态指示符列中,“否”被改变为“是”。可消耗条目#0001因此已被用尽,并且无法被再次有效地使用。
[0207] 新的可消耗条目(可消耗条目#0006)被添加至账本中所存储的该组可消耗条目。这一新的可消耗条目将包含数据:(#0006,B,梵高1,否)。
[0208] 一旦该规程完成,图12所示的存储为账本中的元数据的该组可消耗条目将会被更新为图13中的一组可消耗条目。从图12和13中将显见的是,可以容易地从该组可消耗条目确定实体所拥有的项。
[0209] 除了更新账本中的该组消耗品条目之外,账本还以与关于第一实现已描述的相同的方式来被更新。即,账本由每个节点更新以包括新记录和相关联的记录ID、所指派的事件状态和验证数据。
[0210] 第二实现的一个方面提供了一种减轻“双花(double spends)”的方式。当实体对同一项花费(或交易或出售)两次时发生双花。在该实现中,如果相同的可消耗条目被消耗两次,则将发生双花。例如,在艺术品所有权的情形中,如果实体A将梵高1的所有权转移至实体B和C,则发生双花。这显然是成问题的,因为实体A应无法将同一项转移(或出售)给两个实体。在金融交易的情形中,双花是分布式账本技术面临的已知问题,并且涉及同一实体不止一次地花费相同的资金。双花的示例是先前描述的“Finney攻击”。
[0211] 第二实现的一个方面能够通过向验证规程(节点对每个新的预期记录执行该验证规程)添加检查过程来减轻双花。检查过程涉及:验证序列中的每个节点检查由预期记录的记录标识的正经历针对该节点的账本中存储的一组可消耗条目(诸如图12和13中所示)的验证的可消耗条目。
[0212] 例如,如果节点存储图13中所示的数据是针对新的预期记录的验证规程的一部分,则在验证规程期间,该节点将通过把该预期记录的记录包括在账本中来执行对哪个可消耗条目正被消耗的检查。这由预期记录的记录中的消耗品数据来指示。如果预期记录的记录指示可消耗条目#0001正被消耗(例如因为实体A正试图记录梵高1的所有权转移至实体F),则执行检查的节点将检测到冲突。这是因为可消耗条目#0001已被消耗(由节点的账本中的条目“条目被消耗?:是”指示)。可消耗条目#0001因此无法被再次有效地消耗,且因此该节点可以拒绝新的预期记录。项“凡高1”的双花由此被避免。在其中不存在冲突(即,由预期记录的记录标识的可消耗条目可用于有效消耗)的情形中,验证规程继续到节点序列中的下一个节点,如第一实现中那样。
[0213] 图14示出了刚刚描述的第二实现中的验证规程的概览。该规程类似于图7中所描述的规程,不同之处在于该验证规程现在包括检查。
[0214] 应用层将记录传递至账本层。在步骤702处,协调器节点(例如图1的节点102)接收记录并构造包括旨在用于分布式账本的记录、包括供在验证规程中使用的验证元素的验证坐标、和协调器节点ID的预期记录。与在第一实现中不同,预期记录的记录数据包括包含可消耗条目ID的消耗品数据。还不同于第一实现的是,协调器节点102检查预期记录的记录以确保因把记录包括在账本中而将被消耗的可消耗条目可用于有效消耗。这涉及协调器节点102将由预期记录的记录标识的可消耗条目与已存储在协调器节点的账本中的一组可消耗条目进行比较。如果协调器节点确定可消耗条目可用于有效消耗(或换言之,未经消耗或未使用),则协调器节点更新其本地事件状态并将其指派给预期记录。协调器节点还设置验证坐标和协调器节点ID,如在第一实现中那样。验证坐标的验证元素是:记录ID、协调器节点ID、序列中下一个节点(协调器将向其发送预期记录的节点)的ID、协调器节点已指派给预期记录的事件状态,以及节点计数值(其是将在序列中起重要作用的节点的总数)。如在第一实现中一样,此数字是针对账本定义的。
[0215] 在步骤704处,预期记录沿着网络100中的节点序列被发送。如在第一实现中一样,每个节点选择序列中的该节点向其发送预期记录的下一个节点。如果在经定义的时间段内未接收到用以确认该其他节点将参与验证规程的指示符,则节点选择一不同的下一个节点。在步骤706处,每个节点检查预期记录的记录以确保因把记录包括在账本中而将被消耗的可消耗条目可用于有效消耗。这涉及节点将由预期记录的记录标识的新的可消耗条目与已存储在节点的账本中的该组可消耗条目进行比较。该检查通过将预期记录的记录的可消耗条目ID与存储在节点的账本中的可消耗条目的ID进行比较来执行。
[0216] 在步骤708处,如果每个节点确定可消耗条目可用于有效消耗(或换言之,未经消耗或未使用),则每个节点更新其本地事件状态并且如在第一实现中那样将其指派给预期记录。在步骤710处,每个节点接着将其指派708给预期记录的事件状态传送至协调器节点102。在步骤712处,协调器节点102从其接收自节点序列节点的所指派的事件状态构造验证数据。如在第一实现中一样,该规程由聚集所接收的验证坐标的协调器节点来执行。
[0217] 在步骤714处,协调器节点102向序列的诸节点的每一者传送提交指令和其已为预期记录构造712了的验证数据。如在第一实现中一样,验证数据包括从序列中的诸节点的每一者接收的经聚集的验证坐标。提交指令可以沿着节点序列被一个接一个地发送,或者可以被直接发送至序列中的诸节点。
[0218] 在步骤716处,序列的节点接着将预期记录的记录和对应的验证数据存储在它们各自的分布式账本的副本中。每个节点还使用记录中的新的消耗品数据来更新存储在其账本中的一组可消耗条目。该组经更新的可消耗条目将因此指示由新添加的记录所记录的所有权的改变。
[0219] 网络中的其他节点可稍后经由八卦协议或相关更新规程来更新其账本的副本。这通常包括更新它们自己的相应的一组可消耗条目。
[0220] 因而,可以看出,在第二实现中针对新的预期记录所执行的验证规程非常类似于第一实现中所执行的验证规程。不同之处在于,该规程现在包括:用以确保在预期记录的记录的消耗品数据中标识出的可消耗条目可用于有效消耗的检查,以及用以使检查能够被执行的对该组可消耗条目的维护。
[0221] 在该实现中,当前所有者的数字签名也被检查,作为验证规程的一部分。数字签名和相关联的公钥/私钥密码术在本领域中是公知的且在此将不进行详细描述。
[0222] 图15示出了在协调器节点102已经构造了预期记录并执行了对预期记录的检查之后,从协调器节点的角度来看的第二实现中的验证规程。通过将图15与图8(其与第一实现有关)进行比较可以看出,协调器节点在第一和第二实现两者中都执行相同的步骤,不同之处在于第二实现在步骤702处包括用以确保因把记录包括在账本中而将被消耗的可消耗条目可用于有效消耗的检查。该检查通过将预期记录的记录的可消耗条目ID与存储在节点的账本中的可消耗条目的ID进行比较来执行。附加地,在第二实现中,如果执行验证规程的节点序列中的节点确定存在冲突,则协调器节点可以从该节点(未示出)接收对该冲突的指示。
[0223] 图16从节点序列中的节点的角度示出了第二实现中的验证规程。通过将图16与图9(其与第一个实现有关)进行比较可以看出,节点序列中的节点在第一和第二实现两者中都执行相同的步骤,其中第二实现中的附加步骤是检查由预期记录的记录标识的可消耗条目(在步骤912处示出)。该检查通过将预期记录的记录的可消耗条目ID与存储在节点的账本或待决列表中的可消耗条目的ID进行比较来执行。
[0224] 在步骤912处,节点可以标识冲突并拒绝预期记录。这未在图16中示出,但将参考图17-20进行详细描述。
[0225] 两个不同的预期记录的记录中的消耗品数据标识相同的可消耗关联性是可能的。即,这两个不同的记录标识同一可消耗条目将被消耗。这可能通过故障或作为经尝试的双花的结果而发生。在任一情形中,冲突出现。第二实现的一个方面涉及节点通过执行检查来确定预期记录之间存在冲突。
[0226] 图17解说了由节点执行以确定存在冲突的预期记录的规程。这可以在例如节点正参与预期记录的一者或多者的验证规程的情况下发生。节点将其已接收到的预期记录存储在该节点为其参与到验证规程中但验证规程尚未完成的预期记录的待决列表中。当节点接收到其他预期记录(作为另一验证规程的一部分)时,这些新接收到的预期记录将比照已在待决列表中的那些来被检查,并且比照节点的账本中所存储的其他记录以及一组可消耗条目来被检查。刚接收到的预期记录与已在节点的待决列表中的预期记录之间的冲突可因此被确定。该确定通过比较这两个预期记录的记录的可消耗条目ID来执行。
[0227] 在这些情形的任一者中,在步骤720处,节点可接收第一预期记录。第一预期记录的记录标识待消耗的特定可消耗条目。接着,该节点可随后参与针对不同的第二预期记录的验证规程。在该规程期间,在步骤722处,节点接收第二预期记录。第二预期记录也标识待消耗的特定可消耗条目。
[0228] 如果第一和第二预期记录两者标识正被消耗的同一可消耗条目,则存在冲突。在这样的情形中,在步骤724处,节点在其检查中确定在第一和第二预期记录之间存在冲突。由于可消耗条目只能被有效地消耗一次,因此在冲突的记录中仅一者可以被存储在账本中。将两个记录都存储在账本中将构成与标识了两次的可消耗条目相关联的项的双花。因此,在步骤726处,响应于确定724冲突,节点拒绝其稍晚接收到的预期记录。
[0229] 在一变体中,节点不需要参与两个冲突的预期记录的验证规程以确定冲突。该变体的一个方面涉及节点参与这两个冲突的预期记录中的仅一者的验证规程。图18示出了由节点在这样的场景中执行的过程。
[0230] 在步骤728处,节点在第一预期记录的验证规程期间接收该第一预期记录,该第一预期记录标识因把第一记录包括在账本中而将被消耗的特定可消耗条目。接着,在步骤730处,同一节点随后从另一节点接收第二预期记录。第二记录还标识因把第二记录包括在账本中而将被消耗的特定可消耗条目。例如,可以经由八卦协议将该第二预期记录作为更新的一部分来接收,并且接收第二记录的节点在该实例中不参与针对第二预期记录的实际验证规程,并因此在接收到第二条预期记录之际不更新其本地事件状态。
[0231] 然而,在步骤732处,接收这两个预期记录的节点可以确定在第一预期记录和第二预期记录之间存在冲突,因为两个预期记录的记录都标识待消耗的相同的可消耗条目。该确定通过比较预期记录的这两个记录的可消耗条目ID来执行。在步骤734处,响应于此,节点拒绝第一和第二预期记录中的至少一者。在该变体中,节点拒绝由节点网络稍晚接收到的预期记录。
[0232] 在该实现中,由于节点不参与第二预期记录的验证规程,因此该节点不更新其本地事件状态或向第二预期记录指派事件状态。然而,该节点可以通知第二节点(其从该第二节点接收到第二预期记录)其已经发现了冲突。第二节点可接着针对第二预期记录向协调器节点报告存在冲突。以这种方式,系统不仅仅依赖执行验证规程的实际节点序列中的节点来确定冲突。通过更新、八卦协议或其他手段接收到预期记录的任何节点都可以确定两个预期记录之间的冲突。
[0233] 图19示出了第二实现的节点序列中的每个节点在它们接收到预期记录时执行的方法的概览。图19中所示的针对第二实现的方法类似于图9中所示的针对第一实现的方法,但具有与消耗品数据相关的功能性且可消耗条目也被包括。参考图19,在步骤804处,节点104接收新的预期记录。
[0234] 在步骤806处,节点104接着比照账本和/或其待决列表检查预期记录的记录,以确定是否存在冲突。如先前所描述,这包括节点检查由预期记录的记录中的消耗品数据标识的可消耗条目是否实际上可用于有效消耗。
[0235] 在步骤808处,如果节点确定在新的预期记录与其待决列表中的预期记录之间存在冲突,则在步骤820处,该节点拒绝稍晚接收到的预期记录并报告该冲突。如果节点确定与已在账本中的记录的冲突,则该节点拒绝预期记录。可以向协调器节点102或任何其他节点进行报告。该检查通过将预期记录的记录的可消耗条目ID与存储在节点的账本或待决列表中的可消耗条目的ID进行比较来执行。
[0236] 如果节点104确定没有冲突,则在步骤810处,节点104更新其本地事件状态并将其指派给预期记录。该过程接着以与第一实现相同的方式继续。
[0237] 在步骤812处,节点104以与参考第一实现所描述的相同的方式将其验证坐标传送至协调器节点102。协调器节点102维护以下记录:哪些节点已检查了预期记录的记录。协调器节点102还维护由每个节点指派给预期记录的事件状态的记录。这使得协调器节点102能够如参考第一实现所描述的那样构造验证数据。
[0238] 如在第一实现中一样,已接收到预期记录的节点数通过每个节点以递增方式减少(或者在一变体中增加)验证坐标中所使用的节点计数值的方式来监视。
[0239] 在步骤814处进行检查以确定节点104是否是节点序列中所需的最后一个节点。如果节点104确定它不是序列的最后一个节点,则在步骤816处,节点104将预期记录的经更新版本(包括经更新的验证坐标)发送至序列中的下一个节点106。当节点104向节点106传送时,经更新的节点序列数据中的发送者节点的ID将是节点104的ID,而接收者节点的ID将是节点106的ID。由节点104指派给预期记录的事件状态将是节点104在其接收到预期记录时的本地事件状态。
[0240] 当在步骤804处从节点104接收到预期记录之际,下一个节点(节点106)接着执行步骤806-810。如果节点106确定没有冲突并且也不是序列的最后一个节点,则节点106执行步骤812至816。此过程重复,直到预定的所需节点数已准许将预期记录包括在账本中。这由达到预定值(诸如0)的节点计数值指示。此时,序列中的最后一个节点将通常信息传送至协调器节点102,但是(如步骤818所示)并不将预期记录发送至任何其他节点。
[0241] 在极少数情形中,尽管有上面描述的功能性,但是标识待消耗的相同的可消耗条目的某些冲突的预期记录可能在预期记录的验证规程期间规避检测。这可例如在以下情况下发生:冲突没有由已被描述的过程检测到,因为在验证规程正被执行的情况下没有单个节点能够标识冲突。在这些情形中,冲突的预期记录均可在冲突不会被检测到的情况下通过验证规程。两个预期记录的记录因此都将被添加至账本(位于不同位置上,即不同的本地副本),并且双花将发生。鉴于这种可能性,第二实现的进一步的方面涉及追溯地移除冲突的记录,即使它们已通过了验证规程。此功能性在图20中进行描述,并且使得能够追溯地解决双花。
[0242] 参考图20,在步骤736处,节点从网络中的另一节点接收记录和该记录的验证数据。这可例如作为更新规程的一部分而发生,在更新规程中节点接收其账本中可能缺少(例如,归因于节点已离线)的记录和相关数据。
[0243] 记录的验证数据标识在验证规程期间网络中的接收到预期记录的节点序列,以及在验证规程期间由节点序列中的每个节点指派给预期记录的相应事件状态。
[0244] 记录包括消耗品数据,该消耗品数据标识因把该记录包括在账本中而被消耗的可消耗条目。节点可以将此消耗品数据与已存储在节点的账本中的该组可消耗条目进行比较。在步骤738处,当节点执行该比较时,节点可以确定由接收到的记录标识的可消耗条目已在其账本中被消耗(即,其已被另一记录所消耗)。该确定通过比较这两个记录的可消耗条目ID来执行。在该情形中,节点已确定在被写入账本的不同部分的两个记录之间存在冲突。换言之,双花已发生并且分布式账本中的冲突存在。
[0245] 在步骤740处,该冲突可以通过确定冲突的记录中的哪一个首先被节点网络接收到来解决。这可以通过比较由网络的节点指派给记录的事件状态来确定。如上面所描述,事件状态可以在记录被包含在经历验证规程的预期记录中时被指派给这些记录。事件状态也可以当记录在更新期间或经由八卦协议被接收到时被指派给这些记录。通过这些过程中的任一者指派的事件状态可接着被用来确定记录或预期记录何时由特定节点接收的因果排序。然后可以确定两个冲突的记录中的哪一个首先被提交给网络。
[0246] 一旦已确定哪个记录首先被接收到,则在步骤742处,分布式账本可以被更新以仅存储该记录,并拒绝稍后接收到的其他冲突的(多个)记录。
[0247] 将参考图21描述节点如何确定两个记录中的哪一个首先由分布式账本接收到。
[0248] 图21示出了两个记录在它们各自的验证规程期间采取的通过网络的路径。记录J由节点1-5验证,而记录K由节点6-10验证。这两个记录(记录J和记录K)中的每一者消耗了相同的可消耗条目,并因此与彼此相冲突。然而,由于不存在已在两个记录的相应验证规程期间都接收到这两个记录的公共节点,因此节点1-5将验证并接受记录J,而节点6-10将对记录K做同样的事。每个记录的验证数据将被存储在账本的相应副本中,如已经详细描述的那样。在此之后的某个阶段,冲突可被检测。例如,如果节点5向节点6发送包含记录J的更新,则节点6将能够标识冲突。
[0249] 在该情形中,通过使用这些记录的验证数据以在针对被节点1-5和6-10的每一组中的至少一个节点接收到的一记录的相应验证规程期间发现该第三记录来解决冲突。在图21中,记录L在其验证规程期间被来自每个组的节点(分别是节点4和9)接收。在此境况中,记录J和K之间的冲突可以在这些记录的验证数据表明涉及记录L的以下准则被满足的情况下被解决:
[0250] (i)记录J(当其为预期记录的一部分时且在相关联的验证规程期间)由节点4在记录L(当其为预期记录的一部分时且在相关联的验证规程期间)之前接收到,以及记录L(当其为预期记录的一部分时且在相关联的验证规程期间)由节点9在记录K(当其为预期记录的一部分时且在相关联的验证规程期间)之前接收到;
[0251] 或者
[0252] (ii)记录J(当其为预期记录的一部分时且在相关联的验证规程期间)由节点4在记录L(当其为预期记录的一部分时且在相关联的验证规程期间)之后接收到,以及记录L(当其为预期记录的一部分时且在相关联的验证规程期间)由节点9在记录K(当其为预期记录的一部分时且在相关联的验证规程期间)之后接收到。
[0253] 在情形(i)中,记录K被网络稍晚地接收并且可被拒绝。在情形(ii)中,记录J被网络稍晚地接收并且可被拒绝。
[0254] 仍存在针对转移可消耗关联性(例如,使用可消耗条目)的记录的罕见实例,其中冲突解决可能在所描述的方式及其变体可使用的上面描述的方式中是不可能的。这是诸如记录L之类的记录不存在的情况。换句话说,不存在要么满足准则(i)要么满足(ii)的记录。在该情形中,提供了一种替代方法来确定冲突的记录中的哪些应被包括在账本中。这些罕见的情形通常将仅由于以下而发生:i)由恶意行动者手动创建并呈现的精心构造的冲突,或者ii)底层联网基础结构的全部或部分的关键故障(例如,如果深海互联网电缆被隔断)。
[0255] 在这种罕见的实例中,参与针对每个冲突的记录的验证规程的节点的信誉权重被比较以确定是否拒绝记录J或记录K。现在将描述该过程。
[0256] 每个可消耗关联性或可消耗条目的静态时间值被维护。静态时间值取决于可消耗关联性或可消耗条目保持未经消耗(未使用)的时间长度而增加。即,静态时间值是特定消耗品已静态的时间量的乘积。节点在它们每次参与预期记录的验证规程时增加其信誉,其中将预期记录的记录包括在分布式账本中消耗了可消耗关联性或可消耗条目。在特定示例中,由每个节点接收到的信誉增加等于STV/n,其中:STV是已针对通过将预期记录的记录包括在账本中而被消耗的可消耗关联性或可消耗条目构建的静态时间值;而n则是执行了针对预期记录的验证规程的节点数。
[0257] 每个节点的信誉权重因此随着时间的推移而构建,因为其参与针对被提交给账本的预期记录的验证规程。节点的信誉权重可以直接从账本中的数据计算。替代地,为了提高性能和效率,网络中各节点的信誉权重的列表可以由节点来维护。
[0258] 在该特定示例中,为了确定是否拒绝记录J或记录K,每个记录的验证规程中所涉及的所有节点的相应信誉权重分别被求和。来自其验证节点的信誉权重的最高量的记录是被接受的记录,而其他记录则被拒绝。将显见的是,对于任何数目的冲突的记录,可以使用该功能性来确定哪个记录被接受及哪些记录被拒绝。
[0259] 在更详细的示例中,当可消耗关联性或可消耗条目被部分或全部地消耗时,所消耗的条目的静态时间值被指派给执行了验证规程的节点。被创建的新的可消耗关联性或可消耗条目的静态时间值被设置为0。在该示例中,静态时间值被任选地设上限。这阻止了对单个可消耗关联性或可消耗条目的过度的信誉生成。在该示例中,静态时间值还任选地是指数函数,例如反平方根函数或反对数函数。这防止了Sybil攻击和“信誉”垃圾邮件。例如,如果10天内100的上限与反平方根函数一起被使用,则1天的静态时间将产生静态时间值1,2天的静态时间将产生静态时间值4,3天的静态时间将产生静态时间值9,4天的静态时间将产生静态时间值16……9天的静态时间将产生静态时间值81,并且10天或10天内的静态时间将产生静态时间值100。
[0260] 可以看出,提供了用于确定冲突的记录之间的相对顺序的功能性。
[0261] 已经详细描述了第二实现,并且也已描述了一些变体。在另一变体中,协调器节点不被使用,并且预期记录不包括协调器节点ID。在此变体中,验证数据在预期记录沿节点序列传递时被构建。即,每个节点将验证坐标添加到预期记录,直到序列中的最后一个节点具有包括完整验证数据的预期记录。最后一个节点可接着将验证数据和提交指令传送至序列中的所有节点,或者验证数据和提交指令可以沿着序列被传递。在另一变体中,节点序列中的每个节点可以在验证规程期间执行对预期记录的记录的检查,例如检查是否遵照格式、内容或其他准则。在此变体中,如果节点报告对记录的检查已失败并且记录未被存储在账本中,则提交指令不被发送。关于其他实现且在详细描述的结尾描述了其他变体。
[0262] 第三实现涉及使用数字货币记录支付。第三实现以与第二实现相同的方式操作,其附加特征是第三实现中的可消耗关联性或可消耗条目可以是可分割的。这意味着第三实现中的可消耗关联性或可消耗条目可被用来处理支付,其中数字货币的量可被拆分成较小的量或被组合成较大的量。第三实现因此使得实体能够从作为可消耗关联性或可消耗条目存储的货币量接收找零(change),其中该量的一部分被花费(转移至另一实体),而剩余量则被退还给它们。换言之,原始量是可分割的,并且可以被划分成两个部分。
[0263] 第三实现的账本(未示出)类似于图11所示的第二实现的账本,包括了消耗品数据的存在。消耗品数据是因应用而异的。在第三实现中,记录以及因此记录中所包含的消耗品数据与数字货币的支付有关。在第三实现中,记录消耗品数据包括:付款方ID、收款方ID、支付的货币量和货币。
[0264] 图22示出了第三实现的一组可消耗条目。该组可消耗条目指示实体G、H和I,在此实现中,这些实体是行账户所有者,各自拥有10个数字货币单位。所有者J和K各自拥有20个数字货币单位。如在第二实现中一样,状态指示符列显示它们当前仍是这些数字货币量的所有者。
[0265] 所有者G可能希望分别向所有者H、I、J和K支付2个货币单位。可以通过将新记录包括在内来将这些交易存储在分布式账本中,如在第二种实现那样。然而,在第三实现中,单个可消耗条目(可消耗条目#0007)被划分成五个新的可消耗条目。可消耗条目#0013-0016指示已被发送至所有者H-K的每一者的2个货币单位。另一可消耗条目#0012指示已被发送回所有者G的2个货币单位。这是因为所有者G从与可消耗条目#0007相关联的最初10个货币单位中保留了2个。G已有效地从交易中接收到2个单位的找零。
[0266] 在此交易发生之后的经更新的一组可消耗条目如图23所示。从图23可以看出,可消耗条目#0007已被消耗,并已被有效地划分成五个新的可消耗条目#0012-0016。
[0267] 该过程可以相反地发生,其中与少量数字货币相关的多个可消耗条目可被消耗并被组合成与大量数字货币相关的单个可消耗条目。例如,图23中显示的该组可消耗条目指示所有者H现在总共拥有12个货币单位。所有者H可因此通过消耗可消耗条目#0008和#0013并将其中所描述的项组合在新的消耗品中来向不同的实体发送12个货币单位。
[0268] 在一更简单的示例中,单个可消耗条目被划分成两个部分,一个部分代表被付款方,而另一部分则代表付款方的找零。
[0269] 在一变体中,可消耗条目涉及多种货币。在此变体中,可消耗条目还包含资产ISO标识符(例如GBP、USD、XBT)。所消耗的可消耗条目和创建的新的可消耗条目可以用不同的货币,由此使得货币能够被交换。在一变体中,一种或多种新的数字货币被使用。
[0270] 从图22和23中将显见的是,可以容易地从该组可消耗条目确定实体的总账户余额。
[0271] 在第四实现中,通用的万能记录结构在账本层中可用。与已描述的相同的验证规程和通用的账本结构被使用。通用记录结构包括记录数据,该记录数据包括序列长度、(诸)参与者、有效载荷、时间戳、(诸)签名者、(诸)签名、(诸)消耗者、(诸)消耗品。在该通用实现中,序列长度定义了节点序列的长度。(诸)参与者定义了记录动作中所涉及的所有各方的地址(从相应的公钥导出),并且将被告知事件。该信息有助于网络跨正确的分区和节点路由记录,以使得所有各方都具有更好的机会来立即查看记录。在大多数情形中,其也被用来加密有效载荷。有效载荷可以是任何用户数据,诸如文本、图像、pdf文档等。有效载荷通常被加密,使得只有参与者可以访问它。时间戳是用户提供的。网络不需要它们。时间戳用作方便字段,使得记录的查看者具有对事件可能已发生的大致时间的了解。(诸)签名者和(诸)签名分别定义所需的签名者并存储签名。(诸)消耗者和(诸)消耗品是消耗品数据。(诸)消耗者标识由记录消耗的一个或多个可消耗条目。(诸)消耗品提供了被用来创建一个或多个新的可消耗条目的数据。(诸)消耗品自身可以包括(诸)签名者、(诸)签名、(诸)参与者、(诸)时间戳和有效载荷中的一者或多者。利用(诸)消耗品,仅签名者需要被包括且用作所有者标识符,但是不需要签名。另一方面,消耗者不具有签名者,但确实具有签名。节点使用来自消耗者正在使用的消耗品的签名者(所有者),并验证与消耗者一起被包括的签名对该签名者(所有者)有效且因此有权花费。(诸)消耗品可以具有多个签名者且因而具有多个所有者,并且可以指定消耗者中的b个签名中的a个签名使用它们的要求。
[0272] 通用记录结构中的任何一个或多个字段可以由应用层针对因应用而异的实现来使用和设置。
[0273] 前面的描述阐述了诸实现和一些变体。现在将描述一些进一步的变体。如在详细描述的开头所提到的,不同实现的特征和变体的特征(既有已描述的又有将要描述的)不是互相排斥的。相反,所有实现的特征和变体的特征可以与彼此一起被使用。
[0274] 所描述的实现已聚焦于某些应用。其他应用包括但不限于行政规程,诸如税收、签发许可证、管控社会保障福利和投票规程、艺术品所有权、财务、音乐和娱乐、钻石和贵重资产、物联网、以及各种商品的供应链。所描述的分布式账本技术绝不限于其应用。
[0275] 以上实现的特征可以被容易地应用于与各种各样的项有关的记录。这些包括但不限于财产所有权、金融交易、合同和数据。本文中所描述的功能可被用来阻止双花并解决冲突的所有权主张。它们可被用来验证事件的约定顺序,并借助上面描述的哈希化功能性提供一种用于提供记录的防篡改账本的手段。在消耗品中使用数字签名确保了只有消耗品的真正所有者才能准许其消耗。
[0276] 将进一步领会,消耗品可包括特定于所需功能性的其他数据。例如,关于由记录引用的项是否可分割的指示可以被包含。在艺术品的情形中,除非已达成某种形式的共同所有权协议,否则这将读取为“假”。在金融交易的情形中,可分割的列可通常读取为“真”,因为金融交易通常可分割成较小的货币单位。
[0277] 在所描述的实现的变体中,节点序列中的每个节点可以数字地签名其产生的数据(验证坐标)。这确保了对数据的任何篡改将被阻止或至少能被检测到。这例如阻止了恶意节点(例如,协调器节点)更改其从节点序列中的一个或多个节点接收到的数据。
[0278] 对节点而言可以仅维护账本的一部分或者甚至一点也不维护账本,并且在所描述的实现的变体中,并非所有节点都维护整个账本。在此变体中,节点可仅执行对其维护的账本的部分的检查。然而,节点仍然可以在节点序列中起重要作用,而无需执行检查或最终存储记录。即,节点序列的子集可以仅执行已被描述的检查。节点存储标识账本的哪些部分由其他节点的至少一个子集维护的数据。这使得节点能够在验证规程期间将预期记录转发至正维护账本的相关部分的节点。同样,这使得各自维护账本的一部分的节点的编组能够组合它们的数据以提供整个账本。取决于应用,可能仅需要比照账本的某些部分来检查一些预期记录。一些节点可能不维护账本的任何部分。这些节点因此无法比照账本的记录来检查预期记录。然而,这些节点可能能够部分地检查预期记录,以确保它们遵照某些预定义的准则。
[0279] 账本可以被拆分成诸分区。系统的诸用户可具有诸账户。账户的唯一标识符(诸如公钥)可被用来将每个账户与账本的对应部分相关联。这些唯一标识符可被编组成诸标识符编组,即,诸账户可被编组成诸账户编组。每个编组形成账本的一部分,换言之,账本被分区成诸分区,其中每个分区包括一账户编组的记录。
[0280] 在此变体中,编组或分区是通过获取每个账户的256位公钥的被截的64位整数并对该被截数字执行取模运算以将其指派给账本的诸分区之一来达成的。除了用户具有账户之外,每个节点可以被给予公钥/私钥对,并且可以具有账户。将显见的是,将记录指派给特定分区的任何确定性方法可以被使用。标识账户的其他标识符可以被使用,并且其公钥和截断可以具有其他比特长度。
[0281] 相应地,此变体的一个方面提供了一种供由节点网络的节点执行以维护由节点网络维护的分布式账本的至少一部分的计算机实现的方法,该方法包括:维护分布式账本的至少一部分,其中分布式账本的至少一部分被配置成存储记录和该记录的相关联的验证数据,其中记录的验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在验证规程期间由节点序列中的每个节点指派给预期记录作为事件状态的相应事件状态;其中具有账本的账户的唯一标识符将每个账户与账本的对应部分相关联。
[0282] 可以看出,通过以此方式进行分区,每个用户的账户将驻留在诸分区之一。维护相关分区的节点可被用来支持用户的账户。节点可以通过维护一个或多个分区来参与到网络中。这是对现有系统的巨大改进,现有系统要求节点存储整个分布式账本,而不是存储某些相关区段。
[0283] 节点可以在更新期间仅接收与其分区相关的那些记录。这大大减少了节点上的存储和带宽负载,因为所有其他分区可以被有效地忽略。提供更新的节点还将知道要向哪些节点发送哪些记录,因为接收更新的节点将只对接收与它们所关联的分区或它们存储的分区有关的记录感兴趣。这与区块链形成对照,在区块链中所有记录都被发送至所有节点。诸分区进一步使得能够轻松查找与特定所有者有关的记录。这呈现出与现状的又一个偏离,现状需要扫描整个账本以找到与给定用户有关的那些交易或记录。
[0284] 节点可以向网络的其他节点广播该节点正在存储哪些分区,以及因此哪些记录与该节点相关以及哪些预期记录可以由该节点验证。节点可以例如在高速缓存中或在元数据中存储节点列表以及该列表中的每个相应节点正在存储哪些分区。此列表可以响应于来自诸节点的涉及它们正在存储哪些分区的新广播来被更新。
[0285] 在其中节点存储分区的实现中,预期记录将被指派给特定分区。该指派可以通过例如已经描述的分类取模功能性来完成。节点可以从预期记录的数据中确定预期记录与哪个分区有关。
[0286] 在其中节点存储分区的实现中,如果节点存储与正被检查的预期记录相关的分区,则节点仅能够比照账本中的记录执行对预期记录的检查(关于第二、第三和第四实现所描述的)。存储相关分区并因此能够执行对预期记录的检查的节点可以被视为能够执行针对预期记录的完整的验证规程。
[0287] 不存储与预期记录相关的分区的节点不能够执行对预期记录的检查。然而,该节点仍可以更新其本地事件状态,并将经更新的事件状态指派给预期记录。该节点还可以验证预期记录的与检查账本无关的其他方面,例如,预期记录的结构。该节点因此仍然能够部分地参与针对预期记录的验证规程,并且该节点仍然是节点序列中的接收预期记录并将其指派给预期记录的事件状态传送至协调器节点的节点。这种节点(其不能够执行对预期记录的检查,但仍然是验证规程期间的节点序列中的节点)可被视为能够执行针对预期记录的部分验证规程。
[0288] 如所描述的,诸节点可以通过查阅它们的关于每个节点存储哪些分区的列表来确定哪些其他节点存储与预期记录相关的分区。在针对预期记录的验证规程期间,节点将在可能的情况下使用此信息将预期记录发送至网络中存储相关分区的其他节点。换言之,预期记录被优先发送至可执行对预期记录的完整验证的节点。
[0289] 在节点无法在其列表中找到存储与预期记录相关的分区的另一节点的情形中,预期记录必须被发送至只能对预期记录执行部分验证的节点。在一变体中,仅针对预期记录执行部分验证的节点不递增预期记录的验证坐标的节点计数。在另一变体中,在预期记录被成功验证之前,可能需要最少数目的完整验证(即,由存储与预期记录相关的分区的节点进行的验证)。
[0290] 在第一实现中,节点在接收到新的预期记录之际更新其事件状态,而在第二、第三和第四实现中,节点在确定由预期记录的记录标识的可消耗条目可用于有效消耗(使用)之际更新其事件状态。在各变体中,事件状态可以在接收到预期记录之后的任何时间被指派。在一个变体中,节点在传送预期记录、节点序列数据和/或事件状态之际更新并指派它们的事件状态。在另一变体中,节点贯穿验证规程(在接收和发送预期记录之间)更新并指派它们的事件状态。在另一变体中(如在所描述的实现的一些实现中),节点接收预期记录并在将事件状态指派给所接收到的预期记录之前检查待决列表和账本是否有冲突。如果所接收到的预期记录与待决列表或账本中的相冲突,则节点拒绝所接收到的预期记录并且决不为其指派事件状态。在另一变体中,为了获得相同的结果,事件状态可以被指派给所接收到的预期记录,并且如果冲突被标识,则可以将事件状态从预期记录取消指派且预期记录被拒绝。相同的事件状态可接着被指派给下一个预期记录。
[0291] 图2的堆栈模型是概念性的。它示出了如何能够将相同的体系结构用于不同的应用。使用此模型并非是必需的。可以做出专用的、因应用而异的实现。
[0292] 计算机节点或用户计算机的体系结构可能会有很大不同,而图3的体系结构只是一个示例。图1的计算机A和/或B可以形成网络100的一部分,并且可以在存储和维护分布式账本中扮演积极角色。
[0293] 节点可以在网络中参与维护账本,即使它们仅维护整个账本的一部分。节点也可以形成网络100的一部分,并且甚至参与同分布式账本相关联的验证规程中的一些,而无需实际存储任何分布式账本的相应副本。对网络中的所有节点而言维护账本的完整副本并非是必要的。
[0294] 所描述的实现使用逻辑时钟来提供在因果关系上完整的事件状态。其他合适的逻辑时钟可以被使用。在其中计数器被使用的情形中,任何合适的增量事件计数机制可被使用。时钟可不必使用增量计数机制,而是可改为使用紧凑状态表示,诸如Merkle树或两者的组合。在一个变体中,包括表示节点在该时间已接收到的所有记录的校验和值的Lamport时钟的变体被使用。校验和是可交换的,使得从其添加和/或移除记录不破坏校验和本身的完整性,换言之,校验和如Merkle树哈希那样被使用。因此,在第一实现中,由节点指派给所接收到的预期记录和记录的事件状态是逻辑事件时钟计数值,或更具体而言是包括校验和的Lamport时钟值。
[0295] 虽然不是必需的,但是在所描述的实现中,所有逻辑时钟最初被设置为零。在各变体中,不同的初始设置可以被使用。
[0296] 如关于第一实现所描述的那样在接收到预期记录之际更新事件状态不是必需的。例如,更新可以在预期记录已被验证之后来执行,并且下一个接收到的预期记录可被指派新的经更新的事件状态。或者,例如,事件状态的更新和指派可以通过对预期记录的处理来部分地执行。
[0297] 验证规程可以进一步包括针对一个或多个经定义的准则来检查预期记录。例如,可以检查正被处理的预期记录的格式是否遵照经定义的格式要求。
[0298] 存在许多标识记录的替代方式,并且使用哈希化并不是必要的。
[0299] 节点可以以作为通过使用八卦协议的替换或补充的各种方式来更新其账本。可以在节点已离线达一段时间或者当新节点加入网络时要求更新。变体不使用八卦协议。对于使用八卦协议的实现,使用具有log(n)*3个事件状态(其中n是网络中的节点数)的节点序列长度是高效的。对于不使用八卦协议的实现,使用具有(n/3)+1个事件状态的节点序列是高效的。
[0300] 可存在与预期记录相关联的进一步的数据,并且这些进一步的数据可被包括在验证坐标中。
[0301] 在第二、第三和第四实现中,一旦节点序列中的节点已按上面描述的方式处理了预期记录,则预期记录由该节点保持在待决记录列表中,直到针对该预期记录的提交指令被接收到。在一变体中,预期记录的记录可以在由序列的节点处理之后被删除。在这些情形中,预期记录或记录可以被包括在来自协调器节点的提交消息中。
[0302] 在一变体中,验证规程可要求节点序列中的每个节点对被发送至协调器节点的验证坐标进行签名。这些签名可以是数字签名,并且该过程提供了一种确保每个节点都已准许预期记录的安全方式。
[0303] 在第二、第三和第四实现中,协调器节点是节点序列中的第一节点并且执行关于确定相关消耗品是否可以被有效消耗而描述的所有检查步骤。将显见的是,这完全是可任选的,并且协调器节点102可以仅执行这些检查步骤中的一些检查步骤或者不执行任何检查步骤。
[0304] 与账本层形成对比的应用层中的规程可以构造预期记录并发起验证规程。
[0305] 在所描述的实现中,序列中的节点可以将其已接收到预期记录的确认发送回先前节点。如果在预定时间段内没有接收到确认,则先前节点可以将预期记录发送至另一节点。
[0306] 在第二、第三和第四实现的变体中,并非序列中的所有节点都需要执行对冲突的检查。可具有其中诸节点的仅一个子集执行检查的序列。节点路径可以关于执行检查的节点数来被定义。
[0307] 在所描述的变体中,预期记录包含了验证坐标,该验证坐标包括由执行针对预期记录的验证规程的节点序列中的节点更新了的验证元素。验证坐标接着被发送至协调器节点,并被用来构造记录的验证数据。将显见的是,可以通过不涉及坐标的其他手段在验证过程期间重复该功能性。换言之,可以在验证规程期间在无需使用坐标的情况下构造记录的验证数据。即,坐标不是必需的。各变体使用包括验证元素的数据结构。验证元素包括至少发送者节点ID、接收方节点ID、发送者节点指派的事件状态,可任选地包括记录ID,可任选地包括节点计数。可以用任何合适的数据结构来提供这些验证元素。坐标是合适的数据结构的因实现而异的示例。
[0308] 在没有参考有效载荷的情况下描述了第二、第三和第四实现中的记录。然而,这是因应用而异的,并且记录不需要具有有效载荷。记录数据可以包括消耗品数据并且不包括有效载荷。记录数据可以包括有效载荷和消耗品数据,例如当诸如参考号(有效载荷)之类的消息伴随使用消耗品数据做出的支付时。
[0309] 一些或所有节点可以使用高速缓存来保持一组可消耗条目和/或待决的预期记录,以便提高效率和性能。
[0310] 第二、第三和第四实现中的账本可被用来记录某些货品、商品、权利或服务的所有权转移,有时可被用于交换一些其他货品、商品、权利或服务。
[0311] 在第二、第三和第四实现的描述中,使用“是”和“否”来更新可消耗条目的状态。将显见的是,这是因实现而异的,并且将所消耗的可消耗条目与未经消耗的可消耗条目区分开的任何手段可被使用。
[0312] 尽管所描述的实现中的所有实体都是所有者,但情况不一定如此。实体可以是与某个项相关联或与某个项具有关系的任何事物,诸如受让者、参与者、分配、角色、责任,等等。
[0313] 存在跟踪已接收到预期记录的节点数的替代方式。在一变体中,节点计数值仅在节点成功验证(或确定没有冲突)之际才可递增,而不是在接收到预期记录之际才递增。
[0314] 在第二、第三和第四实现中,与不涉及可消耗条目的第一实现不同,序列中执行验证规程的节点在预期记录被包括在账本中之前对预期记录进行检查。因此,在这些实现中,验证数据可被视为共识数据。可以将肯定验证视为指示节点序列已各自针对比照其自己的账本副本的差异对预期记录进行了检查,并且已准许将该记录包括在账本中。因此,在确定没有冲突之后,执行检查的节点可以将准许指示符传送至协调器节点或传送至任何其他节点。替代地,如果该节点的确确定了冲突,则其可向协调器节点或者向任何其他节点传送非准许指示符。
[0315] 在一些实现中,仅节点的子集可在预期记录的验证规程期间执行检查。在任何给定的预期记录被包括在账本中之前,可能需要预定数目的节点或网络中预定百分比的节点来执行针对该给定的预期记录的检查。通过要求足够高的数目的节点来检查新的预期记录,并且给定足够长的时间段(通常在秒的量级上),作为信息经由八卦散布遍及网络的结果,冲突变得不被检测到的机会趋向于零。
[0316] 可分割的可消耗条目(诸如关于第三实现所描述的那些)可被用来记录共享所有权协议,其中一个项由许多所有者部分地拥有。各示例包括房屋、艺术品、企业股份等的共享所有权。
[0317] 在一变体中,节点接收到预期记录的时间的坐标时间值(例如,UTC时间值)也可以被指派给预期记录并被存储在验证数据中。更具体而言,相应坐标时间值被包括在每个坐标中。坐标时间值可被用来查明其中记录被接收到的顺序。如果记录与文档(诸如法律文档)有关,则所公开的方法可以在确定其中文档抵达的顺序很重要的情况下明显地提供重要优势(例如在法律和金融部中)。
[0318] 在所描述的实现中,节点序列中的每个节点选择在验证规程中向其发送预期记录的下一个节点。以此方式,预期记录所采取的路径可被视为随机路径。或者,换言之,所得节点序列可被认为是随机序列。在各变体中,选择下一个节点的不同方式可被使用。
[0319] 在一变体中,记录可被视为“事件”。
[0320] 在一变体中,序列在同一节点处开始和结束。
[0321] 在一变体中,可消耗关联性/可消耗条目将实体与一次性使用的令牌或息票相关联。
[0322] 任何合适的计算机编程语言都可以在各种实现中被使用。一些实现使用Scala语言,其将在支持Java虚拟机的任何电子设备上运行。
[0323] 在各种实现中,当与已知的账本技术相比时,就电功率和处理器速度两方面而言,功率需求极其低。可以在各种实现中充当节点的电子设备包括计算机、智能电话甚至树莓派(Raspberry Pi)。
[0324] 在用户账户被使用的情况下,与用户有关的数据可以被本地存储在用户设备上并被用来构造预期记录。在一变体中,取代将数据存储在用户设备上,可以(例如通过查询搜索)从账本获得数据。
[0325] 可消耗条目可以包括指示可消耗条目是否已被消耗的状态指示符。在一变体中,可消耗条目可以不包括状态指示符,并且消耗可以经由关联性和审计来被检测。即,可以通过查看账本或待决列表中的记录并确定是否存在与同新实体相关联的同一项有关的更新近的条目来纯粹地确定可消耗条目的消耗。
[0326] 在一变体中,具有已被消耗的可消耗关联性(在一些实现中为可消耗条目)的旧记录被删除。有利地,这减少了存储需求。
[0327] 可以使用计算机可执行指令来实现所描述的方法。计算机程序产品或计算机可读介质可以包括或存储计算机可执行指令。计算机程序产品或计算机可读介质可以包括硬盘驱动器、闪存存储器、只读存储器(ROM)、CD、DVD、高速缓存、随机存取存储器(RAM)和/或其中信息被存储达任何历时(例如,达延长的时间段、永久地、简短实例、供临时缓冲、和/或供信息的高速缓存)的任何其他存储介质。计算机程序可以包括计算机可执行指令。计算机可读介质可以是有形或非瞬态计算机可读介质。术语“计算机可读”涵盖“机器可读”。
[0328] 如本文中所使用的单词“指派”包括以任何方式指派、分配、分拨、分派,归咎于或关联。
[0329] 单称词项“一”和“一个”不应理解为意指“一个且只有一个”。相反,除非另有说明,否则应将它们理解为意指“至少一个”或“一个或多个”。
[0330] 单词“包括”及其派生词(包括动词原型和动词复数)包括所阐述的特征的每一者,但不排除包括一个或多个其他特征。
[0331] 仅通过示例的方式描述了上述实现,并且所描述的实现在所有方面仅被认为是说明性的而非限制性的。将领会的是,可做出所描述的实现的变体而不脱离本发明的范围。同样将显见的是,存在没有被描述但是落入所附权利要求的范围之内的许多变体。
[0332] 在以下编号的条款中阐述了本公开的诸方面和特征。
[0333] 1.一种供由节点网络的节点执行以维护由所述节点网络维护的分布式账本的至少一部分的计算机实现的方法,所述方法包括:
[0334] 在验证规程期间将事件状态指派给接收到的预期记录,其中所述预期记录包括旨在用于所述分布式账本的记录。
[0335] 2.一种供由节点网络的节点执行以维护由所述节点网络维护的分布式账本的至少一部分的计算机实现的方法,所述方法包括:
[0336] 维护所述分布式账本的至少一部分,其中所述分布式账本的所述至少一部分被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态。
[0337] 3.根据条款2所述的计算机实现的方法,所述节点序列的诸节点的至少一个子集的每个节点在所述验证规程期间执行对所述预期记录的记录的检查。
[0338] 4.一种供由节点网络的节点执行以维护由所述节点网络维护的分布式账本的至少一部分的计算机实现的方法,所述方法包括:
[0339] 在由所述节点维护的所述分布式账本的所述至少一部分中存储预期记录的记录和与所述记录相关联的验证数据,其中所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态。
[0340] 5.一种用于处理给由节点网络维护的分布式账本的预期记录的计算机实现的方法,所述预期记录包括旨在用于所述分布式账本的记录,所述方法包括:
[0341] 发起针对预期记录的验证规程,其中所述验证规程包括所述预期记录被发送至所述网络的节点的序列,其中所述节点序列中的每个节点在所述验证规程期间将相应事件状态指派给每个所接收到的预期记录。
[0342] 6.根据条款5所述的计算机实现的方法,所述方法进一步包括:
[0343] 接收标识所述网络中的所述节点序列的数据以及由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;
[0344] 构造标识以下的验证数据:(i)在所述验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;以及
[0345] 传送所述验证数据。
[0346] 7.一种供由节点网络的节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,所述方法包括:
[0347] 接收用于所述分布式账本的预期记录,其中所述预期记录包括旨在用于所述分布式账本的记录;
[0348] 将事件状态指派给所述预期记录;以及
[0349] 传送给所述预期记录的所述事件状态。
[0350] 8.根据条款7所述的计算机实现的方法,进一步包括:
[0351] 检查所述预期记录的记录以确认所述节点是否准许将所述记录包括在所述分布式账本中;
[0352] 以所述节点准许将所述记录包括在分布式账本中为条件,传送由所述节点为所述预期记录指派的相应事件状态。
[0353] 9.根据条款7或条款8所述的计算机实现的方法,所述方法进一步包括:
[0354] 将所述预期记录发送至所述网络中的其他节点,其中所述其他节点变成所述节点序列中的下一个节点。
[0355] 10.一种供由节点网络的节点执行以将记录存储在由所述节点网络维护的分布式账本的至少一部分中的计算机实现的方法,所述方法包括:
[0356] 接收预期记录的验证数据,其中所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;以及
[0357] 将所述预期记录的记录和所述记录的验证数据存储在由所述节点维护的所述分布式账本的至少一部分中。
[0358] 11.根据条款10所述的计算机实现的方法,所述节点序列的诸节点的至少一个子集的每个节点在所述验证规程期间执行对所述预期记录的记录的检查。
[0359] 12.一种供由节点网络的节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
[0360] 接收预期记录,其中所述预期记录包括旨在用于所述分布式账本的记录,其中所述记录消耗特定项与特定实体的特定关联性;
[0361] 检查由所述节点维护的所述分布式账本的至少一部分,以确定所述特定项与所述特定实体的所述特定关联性是否已被所述账本中的另一记录所消耗;以及
[0362] 以所述节点确定所述关联性尚未被所述账本中的另一记录消耗为条件,传送由所述节点为所述预期记录指派的事件状态。
[0363] 13.一种供由节点网络的节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
[0364] 接收用于所述分布式账本的第一预期记录,其中所述第一预期记录包括旨在用于所述分布式账本的记录,其中所述记录消耗特定项与特定实体的特定关联性;
[0365] 接收用于所述分布式账本的第二预期记录,其中所述第二预期记录包括旨在用于所述分布式账本的记录,其中所述记录消耗特定项与特定实体的特定关联性;
[0366] 确定在所述第一预期记录和所述第二预期记录之间是否存在冲突,包括各自消耗相同特定项与相同特定实体的相同特定关联性的所述第一预期记录和所述第二预期记录的冲突;以及
[0367] 以确定冲突为条件,拒绝所述第一预期记录和所述第二预期记录中的至少一者。
[0368] 14.一种供由节点网络的节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
[0369] 从所述网络中的另一节点接收记录和所述记录的验证数据,其中所述记录消耗特定项与特定实体的特定关联性,其中所述记录的所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;
[0370] 确定是否存在冲突,当已由所述记录消耗的特定关联性是与由所述节点维护的所述分布式账本的至少一部分中的不同记录所消耗的相同的特定关联性时存在冲突;
[0371] 以存在冲突为条件,从与记录相关联的所述验证数据的事件状态确定首先消耗了所述特定关联性的记录和第二个消耗了所述特定关联性的记录;以及
[0372] 更新所述分布式账本以存储首先消耗了所述特定关联性的记录,并拒绝第二个消耗了所述特定关联性的记录。
[0373] 15.一种供由节点网络的第一节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
[0374] 作为其中节点序列包括所述第一节点的第一验证规程的一部分,接收第一预期记录,其中所述第一预期记录包括旨在用于所述分布式账本的第一记录,其中所述第一记录消耗特定项与特定实体的特定关联性;
[0375] 从第二节点接收第二预期记录,在所述第二节点中第二验证规程正被执行,其中所述节点序列包括所述第二节点但不包括所述第一节点,其中所述第二预期记录包括旨在用于所述分布式账本的第二记录,其中所述第二记录消耗特定项与特定实体的特定关联性;
[0376] 确定在所述第一预期记录和所述第二预期记录之间是否存在冲突,其中当所述第一记录和所述第二记录各自消耗相同特定项与相同特定实体的相同特定关联性时存在冲突;以及
[0377] 以存在冲突为条件,拒绝所述第一预期记录和所述第二预期记录中的至少一者。
[0378] 16.根据条款12至15中的任一项所述的计算机实现的方法,所述项包括数字货币。
[0379] 17.一种用于验证存储在分布式账本中的记录的计算机实现的方法,其中所述分布式账本被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态,所述方法包括:
[0380] 接收要验证记录的请求;
[0381] 使用与所述记录相关联的所述验证数据来联系所述节点序列中的每个节点,以请求确认所述验证数据的特定部分是正确的;以及
[0382] 以所述节点序列中的每个节点确认所述验证数据的所述特定部分正确为条件,验证所述记录。
[0383] 18.一种供由节点执行用以确认分布式账本中的记录的验证数据的特定部分正确的计算机实现的方法,其中所述分布式账本被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间网络中的接收到预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态,所述方法包括:
[0384] 接收要确认所述验证数据的所述特定部分正确的请求;
[0385] 检查存储在由所述节点维护的所述分布式账本的至少一部分中的所述验证数据的所述特定部分;以及
[0386] 以所述验证数据的所述特定部分正确为条件,确认所述验证数据的所述特定部分是正确的。
[0387] 19.一种供由节点网络的节点执行以维护由所述节点网络维护的分布式账本的至少一部分的计算机实现的方法,所述方法包括:
[0388] 维护所述分布式账本的至少一部分,其中所述分布式账本的所述至少一部分被配置成存储记录和所述记录的相关联的验证数据,其中用于记录的所述验证数据标识:(i)在验证规程期间所述网络中的接收到所述预期记录的节点序列;以及(ii)在所述验证规程期间由所述节点序列中的每个节点指派给所述预期记录的相应事件状态;
[0389] 其中具有所述账本的账户的唯一标识符将每个账户与所述账本的对应部分相关联。
[0390] 20.一种供由节点网络的节点执行的计算机实现的方法,其中所述节点网络维护分布式账本,其中所述分布式账本包括记录,其中多个所述记录中的每一者消耗相应项与相应实体的相应关联性,所述方法包括:
[0391] 维护每个关联性的静态时间值,其中所述静态时间值取决于所述关联性保持未使用的时间长度而被增加;
[0392] 维护所述节点的信誉权重,其中所述节点的信誉权重当所述节点参与针对被提交给所述账本的预期记录的验证规程时被增加,其中所述节点的信誉权重被增加的量基于对由所述预期记录的记录用尽的所述关联性的静态时间值的所分配的共享;以及[0393] 使用所述网络中的所述节点的信誉权重来解决两个记录之间的冲突,其中经历了验证规程的具有较低的总信誉权重的节点序列的记录被拒绝。
[0394] 21.根据前述条款中任一项所述的计算机实现的方法,其中所述预期记录包括记录以及至少验证元素,所述验证元素标识由当前节点为所述预期记录指派的相应事件状态。
[0395] 22.计算机可执行指令,所述计算机可执行指令当在计算机上被执行时致使所述计算机执行任何前述条款所述的方法。
[0396] 23.一种包括至少一个计算机处理器和至少一个计算机存储器的计算机节点,其中所述计算机存储器包括计算机可执行指令,所述计算机可执行指令在被执行时致使所述计算机节点执行条款1至21中任一项所述的方法。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈