部分有序的区块链转让专利

申请号 : CN202080072521.1

文献号 : CN115210741B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : K·娜拉亚娜姆K·库马尔D·P·萨特雅纳拉雅安A·考尔

申请人 : 国际商业机器公司

摘要 :

方法包括:从相邻区块链对等体和排序服务节点中的一个或多个接收区块链的块(284);从所接收的块中识别属于所述区块链内的同一时隙的两个或更多个块;经由同时执行所述两个或更多个识别的块来并行地验证所述两个或更多个识别的块;以及响应于对所述两个或更多个识别的块的验证,将所述两个或更多个识别的块存储在区块链对等体的本地区块链分类账上(281,282,283)。

权利要求 :

1.一种用于区块链的设备,包括:

网络接口,其被配置为从相邻区块链对等体和排序服务节点中的一个或多个接收区块链的块;以及处理器,其被配置成从所接收的块中识别属于所述区块链内的同一时隙的两个或更多个块,经由同时执行两个或更多个识别的块来并行地验证所述两个或更多个识别的块,以及响应于对所述两个或更多个识别的块的验证,将所述两个或更多个识别的块存储在区块链对等体的本地区块链分类账上;

其中当两个或更多个其他块不依赖于两个或更多个识别的块时,与属于同一时隙的所述两个或更多个识别的块并行地验证属于紧邻的先前时隙的两个或更多个块。

2.根据权利要求1所述的设备,其中,属于同一时隙的所述两个或更多个识别的块是彼此无关的块。

3.根据权利要求1所述的设备,其中,所述处理器被配置为在所述区块链对等体的两个或更多个独立的处理器内核上并行地同时执行所述两个或更多个识别的块。

4.根据权利要求1所述的设备,其中,所述处理器进一步被配置为初始化所述本地区块链分类账以用于引导和恢复过程中的至少一个。

5.根据权利要求1所述的设备,其中,所述处理器进一步被配置为识别所述区块链上属于紧邻的先前时隙的两个或更多个其他块。

6.根据权利要求1所述的设备,其中,所述处理器被配置为基于存储在所接收的块中的哈希值识别哪些接收的块属于同一时隙。

7.根据权利要求1所述的设备,其中,当块的紧邻的先前哈希值是所述区块链上的紧邻的先前时隙中存储的多个块的哈希的函数时,所述处理器确定所述块属于当前时隙中。

8.一种用于区块链的方法,包括:

从相邻区块链对等体和排序服务节点中的一个或多个接收区块链的块;

从所接收的块中识别属于所述区块链内的同一时隙的两个或更多个块;

经由同时执行两个或更多个识别的块,并行验证所述两个或更多个识别的块;以及响应于对所述两个或更多个识别的块的验证,将所述两个或更多个识别的块存储在区块链对等体的本地区块链分类账上;

其中当两个或更多个其他块不依赖于两个或更多个识别的块时,与属于同一时隙的所述两个或更多个识别的块并行地验证属于紧邻的先前时隙的两个或更多个块。

9.根据权利要求8所述的方法,其中,属于同一时隙的所述两个或更多个识别的块是彼此无关的块。

10.根据权利要求8所述的方法,其中,所述验证包括在所述区块链对等体的两个或更多个独立的处理器内核上并行地同时执行所述两个或更多个识别的块。

11.根据权利要求8所述的方法,进一步包括在引导和恢复过程中的至少一个期间初始化所述本地区块链分类账。

12.根据权利要求8所述的方法,进一步包括识别所述区块链上属于紧邻的先前时隙的两个或更多个其他块。

13.根据权利要求8所述的方法,其中,所述识别包括基于存储在所接收的块中的哈希值来识别接收的块中的哪些块属于同一时隙。

14.根据权利要求8所述的方法,其中,所述识别包括:当块的紧邻的先前哈希值是存储在所述区块链上的紧邻的先前时隙中的多个块的哈希的函数时,确定所述块属于当前时隙中。

15.一种包括指令的非暂时性计算机可读介质,所述指令在由处理器读取时使所述处理器执行一种方法,所述方法包括:从相邻区块链对等体和排序服务节点中的一个或多个接收区块链的块;

从接收的块中识别属于所述区块链内的同一时隙的两个或更多个块;

经由同时执行两个或更多个识别的块,并行验证所述两个或更多个识别的块;以及响应于对所述两个或更多个识别的块的验证,将所述两个或更多个识别的块存储在区块链对等体的本地区块链分类账上;

其中当两个或更多个其他块不依赖于所述两个或更多个识别的块时,与属于同一时隙的所述两个或更多个识别的块并行地验证属于紧邻的先前时隙的两个或更多个块。

16.根据权利要求15所述的非暂时性计算机可读介质,其中,属于同一时隙的所述两个或更多个识别的块是彼此无关的块。

17.根据权利要求15所述的非暂时性计算机可读介质,其中,所述验证包括在所述区块链对等体的两个或更多个独立的处理器内核上并行地同时执行所述两个或更多个识别的块。

18.根据权利要求15所述的非暂时性计算机可读介质,其中,所述方法进一步包括在引导和恢复过程中的至少一个过程期间初始化所述本地区块链分类账。

说明书 :

部分有序的区块链

技术领域

[0001] 本申请总体上涉及将数据存储在区块链上,并且更具体地涉及区块链分类账,其中非相关块被以时隙而不是以线性序列排序,由此使得能够改进对块数据的数据访问。

背景技术

[0002] 集中式数据库将数据存储和维护在一个位置处的单个数据库(例如,数据库服务器)中。该位置通常是中央计算机,例如台式中央处理单元(CPU)、服务器CPU或大型计算机。存储在集中式数据库上的信息典型地可从多个不同点访问。多个用户或客户端工作站可以例如基于客户端/服务器配置在集中式数据库上同时工作。集中式数据库易于管理、维护和控制,尤其是出于安全目的因为其位置单一。在集中式数据库内,数据冗余被最小化,因为所有数据的单个存储位置也意味着给定数据集仅具有一个主要记录。
[0003] 然而,集中式数据库存在显著的缺点。例如,如果没有容错考虑,集中式数据库就会出现单点故障。因此,如果发生硬件故障(例如,硬件、固件和/或软件故障),数据库内的所有数据都会丢失并且所有用户的工作都被中断。此外,集中式数据库高度依赖于网络连接性。因此,连接越慢,每个数据库访问所需的时间就会增加。另一个缺点是当集中式数据库由于单个位置经历高流量时会发生瓶颈。此外,集中式数据库提供对数据的有限访问,因为数据库只维护一份数据副本。
[0004] 各组织最近开始将区块链作为一种安全存储数据的方式,这种方式不受中央实体的限制,并且可以从多个点访问。在区块链网络中,节点负责共同管理和存储区块链上的数据。区块链提供数据冗余、无中央权限、多个访问节点等。传统的区块链将数据块存储在块的线性序列中,其中每个块被哈希链接到紧邻的先前的块,依此类推。该链接是该块存储紧邻的前块的哈希的结果。这些链创建了一个连续块链,称为区块链。
[0005] 验证(有时称为一致协议)是区块链的基本方面,因为它确保区块链对等体具有正确的区块链状态。在许可区块链中,区块链对等体可以通过验证块之间的哈希链接来验证区块链的状态。这要求区块链对等体执行块的线性链上的每个链接的哈希验证。区块链可以生长成数千或甚至数百万的区块。因此,验证过程可能花费相当多的时间和资源。因此,需要一种克服这些缺点和限制的解决方案。

发明内容

[0006] 从第一实施例来看,本发明提供一种装置,包括:网络接口,其被配置成从相邻区块链对等体和排序服务节点中的一个或多个接收区块链的块;以及处理器,其被配置成从所接收的块中识别属于所述区块链内的相同时隙的两个或更多个块,通过同时执行所述两个或更多个识别的块来并行地验证所述两个或更多个识别的块,以及响应于对所述两个或更多个识别的块的验证,将所述两个或更多个识别的块存储在区块链对等体的本地区块链分类账上。
[0007] 优选地,本发明提供一种装置,其中属于相同时隙的两个或更多个识别的块是彼此无关的块。
[0008] 优选地,本发明提供一种装置,其中所述处理器被配置成在所述区块链对等体的两个或更多个独立的处理器内核上并行地同时执行所述两个或更多个识别的块。
[0009] 优选地,本发明提供一种装置,其中所述处理器还被配置为初始化用于引导和恢复过程中的至少一个的本地区块链分类账。
[0010] 优选地,本发明提供一种装置,其中所述处理器进一步被配置为标识所述区块链上属于紧邻的先前时隙的两个或更多个其他块。
[0011] 优选地,本发明提供一种装置,其中所述处理器还被配置为当所述两个或更多其他块不依赖于所述两个或更多个标识的块时,与属于同一时隙的所述两个或更多个标识的块并行地验证属于所述紧邻的先前时隙的所述两个或更多个块。
[0012] 优选地,本发明提供一种装置,其中处理器被配置为基于接收的块中存储的哈希值来识别接收的块中的哪些块属于相同的时隙。
[0013] 优选地,本发明提供一种装置,其中,当所述块的紧邻的先前哈希值是存储在所述区块链上的紧邻的先前时隙中的多个块的哈希的函数时,所述处理器确定所述块属于当前时隙。
[0014] 从另一方面来看,本发明提供一种方法,该方法包括从相邻区块链对等体和排序服务节点中的一者或多者接收区块链的块中的一个或多个,从所接收的块中识别属于所述区块链内的同一时隙的至少两个块,经由同时执行所述至少两个识别的块来并行地验证所述至少两个识别的块,以及响应于所述至少两个标识的块的验证,将所述至少两个标识的块存储在区块链对等体的本地区块链分类账上。
[0015] 优选地,本发明提供一种方法,其中属于相同时隙的两个或更多识别的块是彼此无关的块。
[0016] 优选地,本发明提供一种方法,其中所述验证包括在所述区块链对等体的两个或更多独立的处理器内核上并行地同时执行所述两个或更多标识的块。
[0017] 优选地,本发明提供一种方法,还包括在引导和恢复过程中的至少一个期间初始化本地区块链分类账。
[0018] 优选地,本发明提供一种方法,还包括:标识所述区块链上属于紧邻的先前时隙的两个或更多个其他块。
[0019] 优选地,本发明提供一种方法,还包括:当所述两个或更多个其他块不依赖于所述两个或更多标识的块时,与属于同一时隙的所述两个或更多标识的块并行地验证属于所述紧邻的先前时隙的所述两个或更多其他块。
[0020] 优选地,本发明提供一种方法,其中所述识别包括基于存储在所接收的块中的哈希值来识别所接收的块中的哪些块属于相同的时隙。
[0021] 优选地,本发明提供了一种方法,其中,所述识别包括当块的直接先前哈希值是存储在所述区块链上的先前时隙中的多个块的哈希的函数时,确定所述块属于当前时隙。
[0022] 从另一方面来看,本发明提供一种包括指令的非瞬态计算机可读介质,所述指令在被处理器读取时,使处理器执行从一个或多个相邻区块链对等体和排序服务节点接收区块链的块中的一个或多个块,从所接收的块中识别属于所述区块链内的同一时隙的至少两个块,经由同时执行所述至少两个所识别的块来并行地验证所述至少两个所识别的块,以及响应于所述至少两个标识的块的验证,将所述至少两个标识的块存储在区块链对等体的本地区块链分类账上。
[0023] 优选地,本发明提供一种非易失性计算机可读介质,其中,属于同一时隙的两个或多个识别的块是彼此无关的块。
[0024] 优选地,本发明提供一种非瞬态计算机可读介质,其中,所述验证包括在所述区块链对等体的两个或更多个独立的处理器内核上并行地同时执行所述两个或更多个标识的块。
[0025] 优选地,本发明提供一种非暂时性计算机可读介质,其中所述方法还包括在引导和恢复过程中的至少一个期间初始化所述本地区块链分类账。

附图说明

[0026] 图1A是示出根据示例实施方式的区块链网络的示图。
[0027] 图1B是示出根据示例实施例的部分有序的区块链分类账的示图。
[0028] 图2A是示出根据示例实施例的区块链架构配置的示图。
[0029] 图2B是示出根据示例性实施方式的区块链交易流程的示图。
[0030] 图3A是示出根据示例实施方式的许可区块链网络的示图。
[0031] 图3B是示出根据示例实施方式的另一个许可的区块链网络的示图。
[0032] 图3C是示出根据示例性实施方式的无许可区块链网络的示图。
[0033] 图4A是示出根据示例实施例的在对等操作期间并行验证块的过程的示图。
[0034] 图4B是示出根据示例实施例的在查询检索操作期间跳过块的验证的过程的示图。
[0035] 图4C为示出根据实例性实施方式的将交易映射至DAG以确定并行处理选项的过程的示图。
[0036] 图4D是示出根据示例实施例的在存储新交易期间选择性地验证块的过程的示图。
[0037] 图4E是示出根据示例实施例的对加密的数据块进行部分排序的过程的示图。
[0038] 图5是示出根据示例性实施方式的并行验证块的方法的示图。
[0039] 图6A是示出根据示例实施方式的被配置为执行在此描述的一个或多个操作的示例系统的示意图。
[0040] 图6B是示出根据示例实施方式的被配置为执行在此描述的一个或多个操作的另一示例系统的示图。
[0041] 图6C是示出根据示例实施例的被配置为利用智能合同的另一示例系统的图。
[0042] 图6D是示出根据示例实施例的被配置为利用区块链的又一示例系统的图。
[0043] 图7A是示出根据示例实施例的新块被添加到分布式分类账的过程的示图。
[0044] 图7B是示出根据示例性实施方式的新数据块的内容的示图。
[0045] 图7C是示出根据示例实施例的数字内容的区块链的示图。
[0046] 图7D是示出根据示例实施方式的可以表示区块链中的块的结构的块的图。
[0047] 图8A是示出根据示例性实施方式的存储机器学习(人工智能)数据的示例性区块链的示图。
[0048] 图8B是示出根据示例性实施方式的示例性量子安全区块链的示图。
[0049] 图9是示出了支持一个或多个示例性实施方式的示例性系统的示图。

具体实施方式

[0050] 将容易理解的是,如在本文的附图中一般描述和图示的,本发明的部件可以以各种不同的配置布置和设计。因此,如附图中表示的方法、装置、非易失性计算机可读介质和系统中的至少一个的实施方式的以下详细描述并不旨在限制所要求保护的应用的范围,而是仅仅表示所选择的实施方式。
[0051] 在一个或多个实施例中,如贯穿本说明书所描述的当前特征、结构、或特性可以以任何适合的方式被组合或移除。例如,贯穿本说明书的短语“示例性实施方式”、“一些实施方式”或其他类似语言的使用是指以下事实:结合实施方式所描述的特定特征、结构或特性可以包括在至少一个实施方式中。因此,贯穿本说明书出现的短语“示例性实施方式”、“在一些实施方式中”、“在其它实施方式中”、或其它类似语言不一定都指相同组的实施方式,并且在一个或多个实施方式中,可以任何合适的方式组合或去除所描述的特征、结构、或特性。进一步,在图中,元件之间的任何连接可以允许单向和/或双向通信,即使所描绘的连接是单向或双向箭头。而且,在附图中描绘的任何装置可以是不同的装置。例如,如果移动设备被示为发送信息,则有线设备也可被用于发送该信息。
[0052] 此外,尽管在实施方式的描述中可以使用术语“消息”,但是应用程序可以应用于许多类型的网络和数据。此外,尽管在示例性实施例中可以描述特定类型的连接、消息和信令,但是本申请不限于特定类型的连接、消息和信令。
[0053] 示例实施例为部分有序的区块链分类账提供方法、系统、组件、非暂态计算机可读介质、设备和/或网络,其中块被布置在时隙中而不是线性序列中。
[0054] 在一个实施例中,应用利用作为分布式存储系统的去中心化数据库(诸如区块链),该分布式存储系统包括彼此通信的多个节点。去中心化数据库包括类似于能够在互不信任方之间维护记录的分布式分类账的仅附加的不可变数据结构。不可信方在本文中称为对等体或对等节点。每个对等体都维护数据库记录的副本,并且在分布式对等体之间没有达成一致时,任何单个对等体不可以修改数据库记录。例如,对等体可执行共识协议以验证区块链存储交易,将存储交易分组成块,并在块上建立哈希链。为了一致性,该过程根据需要通过排序存储交易形成分类账。在各种实施例中,可以使用经许可的和/或无许可的区块链。在公共或无许可区块链中,任何人都可以在没有特定身份的情况下参与。公共区块链可以涉及本地加密货币并且使用基于不同协议(诸如工作证明(PoW))的共识。另一方面,经许可的区块链数据库提供共享共同目标但不完全相互信任的一组实体之间的安全交互,诸如交换资金、商品、信息等的业务。
[0055] 本申请可以利用运行任意、可编程逻辑的区块链,其被定制为去中心化存储方案并且被称为“智能合同”或“链码”。在一些情况下,可存在被称为系统链码的管理功能和参数的专用链码。应用还可以利用智能合同,智能合同是可信的分布式应用,其利用区块链数据库的防篡改特性和节点之间的基础协议,这被称为背书或背书策略。与本申请相关联的区块链交易在被提交至区块链之前可以被“背书”,而未被背书的交易被忽略。认可策略允许链接代码以对于认可必需的对等节点集合的形式指定用于交易的认可者。当客户端将交易发送给背书策略中指定的对等体时,执行该交易以验证交易。在验证之后,交易进入排序阶段,其中使用一致协议产生被分组为块的背书交易的有序序列。
[0056] 本申请可以利用作为区块链系统的通信实体的节点。在不同类型的多个节点可在同一物理服务器上运行的意义上,“节点”可执行逻辑功能。节点被分组在信任域中并且与以不同方式控制它们的逻辑实体相关联。节点可以包括不同类型,例如客户端或提交客户端节点,它们将交易调用提交给背书者(例如,对等方),并将事务提议广播到排序服务(例如,排序节点)。排序排序另一类型的节点是对等节点,其可接收客户端提交的交易、提交交易并维持区块链交易的分类账的状态和副本。对等体也可以具有背书人的作用,尽管它不是必需的。排序‑服务‑节点或排序器是为所有节点运行通信服务的节点,并且其实现递送保证,诸如在提交交易和修改区块链的世界状态时向系统中的每个对等节点广播,该世界状态是初始区块链交易的另一名称,其通常包括控制和设置信息。
[0057] 本申请能够利用分类账,该分类账是区块链的所有状态转换的排序、防篡改记录。状态转换可以由参与方(例如,客户端节点、排序节点、背书者节点、对等节点等)提交的链码调用(即,交易)引起。每个参与方(诸如对等节点)可维护分类账的副本。交易可以导致资产组的键‑值对作为一个或多个操作数被提交到分类账,诸如创建、更新、删除等。分类账包括用于在块中存储不可变的排序记录的区块链(也称为链)。分类账还包括维护区块链的当前状态的状态数据库。
[0058] 本申请可以利用作为交易日志的链,所述交易日志被构造为哈希链接的块,并且每个块包含N个交易的序列,其中N等于或大于1。区块头包括块的交易的哈希以及先前区块头的哈希。以这种方式,分类账上的所有交易可被排序和加密地链接在一起。因而,不可能篡改分类账数据而不破坏哈希链接。最近添加的区块链块的哈希表示在链之前已经出现的每个交易,从而使得可以确保所有对等节点都处于一致且可信的状态。链可存储在对等节点文件系统(即,本地的、附加的存储、云等)上,有效地支持区块链工作负载的仅附加性质。
[0059] 不可变分类账的当前状态表示包括在链交易日志中的所有键的最新值。因为当前状态表示信道已知的最新键值,所以有时将其称为世界状态。链调用执行针对分类账的当前状态数据的交易。为了使这些链码交互有效,键的最新值可以存储在状态数据库中。状态数据库可以简单地是到链的交易日志中的索引视图,因此可以在任何时间从链中重新生成它。在对等节点启动时并且在接受交易之前,可以自动恢复(或者如果需要的话生成)状态数据库。
[0060] 诸如超级分类账结构的区块链框架提供企业级许可分布式分类账技术(DLT)。被许可区块链不同于公共区块链,因为在被许可区块链中,访问仅限于区块链的成员。超级分类账结构被归功于引入用于将区块链交易存储在分类账上的新架构,称为执行订单验证。它已知在工业和公共领域使用的通用区块链架构。
[0061] 执行顺序验证区块链网络的关键要素之一是排序服务(在此也称为排序节点)。排序器的作用是向区块链对等体提供已经按照有序方式执行的块,以便存储在它们各自的分布账上。排序者向客户端和对等体提供共享通信信道,为包含交易的消息提供广播服务。排序器还确保交易被严格排序(即,每个交易严格地在另一交易之前或之后)。
[0062] 当排序器已经接收到足够的交易并且已经对交易进行排序时,排序器将生成块并将该块广播给参与区块链网络的区块链对等体。每个块包括区块链上紧邻的先前块的哈希。这在两个块之间创建链接。这个过程随着新块的制作而连续地重复。其结果是块的线性顺序次序。然而,块的大小有限。此外,这种块的验证需要验证线性块序列中的每个哈希。这可导致数百、数千或甚至数百万个哈希在验证过程期间被验证。
[0063] 举例实施例为区块链分类账上的块引入新的排序过程,称为部分排序的交易或部分排序的块。块可存储数百或数千交易。然而,不是所有块都具有彼此的依赖性。例如,新块可能不依赖于紧邻的先前块。本文描述的系统利用这种非依赖性,并且引入在区块链分类账上使用时隙。排序服务可使用时隙来彼此并行地和与其他时隙顺序地保持多个块。例如,时隙可容纳两个或两个以上块,且所述两个或两个以上块中的每一者可包含到先前时隙的哈希链接。在此实例中,当前时隙中的两个或两个以上块中的每一者可包含基于先前时隙中的块的组合的哈希函数,而不是包含到一个块(例如,紧接的先前块)的哈希链接。
[0064] 部分排序的区块链(以及其中的交易)的一些益处包括并行验证/执行块的能力。在传统的区块链中,在线性序列中进行确认,其中,以连续的顺序验证每个块哈希。结果是以线性方式执行的连续哈希验证串。相反,部分有序的区块链使得能够并行执行/验证多个块(例如,在相同时隙中的块等)。这可以显著减少确认该区块链所必需的时间量。部分排序的区块链还创建了其他益处,包括更快的对等体恢复/引导、更快的查询处理、针对改进的交易吞吐量的块的选择性验证、针对改进的交易吞吐量和查询响应时间由任何组织的一组对等体采用不同的基于DAG的方法、交易的加密块的排序等。
[0065] 图1A示出根据示例实施例的遵从执行顺序验证框架的区块链网络100。参考图1A,区块链网络100包括存储区块链分类账(区块链110)的分布式副本的多个区块链对等体121、122、123和124。客户端(未示出)可以经由区块链对等体121‑124提出交易以存储在区块链110上。在交易提交至区块链110之前,交易可由一个或多个背书的对等体执行。区块链对等体121‑124中的任何一个都可以充当背书者。
[0066] 然后,可以将成功执行的交易提供给排序节点120(例如,由客户端等)。排序节点120接收交易,基于时间戳对它们进行排序,并且在块中存储所排序的交易。当已经接收到足够的交易,或者预定的时间限制已经期满时,保存有序交易的新块可以被切割,并且发送到区块链对等体121‑124用于存储。在存储之前,区块链对等体121‑124中的每个区块链对等体可以在将块存储在其区块链110的相应副本上之前再次验证交易。然而,排序节点120可创建部分排序的块/交易,而不是排序节点120将块排序成线性序列,如图1B所示。
[0067] 具体地,图1B示出根据示例实施例的部分有序的区块链分类账110的示例。可以理解,并非所有交易都具有它们之间的依赖性,当前块中的交易也不总是依赖于区块链上的每个先前块。部分排序利用这个概念并且提供一种机制,通过该机制,非相关块(不具有任何互相关交易的块)可以存储在区块链分类账上的相同时隙上。为了防止时隙变得过大,排序节点120可设置时隙大小最大值、截止时间等。
[0068] 根据不同的实施例,排序节点120可以安排这些交易,其方式为使得它们可以在尽可能长的时间内(或者直到达到时隙大小的最大值或截止时间)避免块之间的相关性。此外,举例实施例引入在区块链分类账上的时隙的概念。时隙基本上是可以并行布置在区块链分类账(传统上是线性顺序的)上的一组块。与传统的线性块序列相比,平行布置的时隙可以垂直地(平行)运行,而分类账的不同时隙水平地(一个接一个顺序地)运行。为了时间的目的,假定在相同时隙中的块是相等的。系统可引入此概念,因为没有块包含相互依赖的交易,因此消除了在相同时隙中的不同块之间的时序差异的关键性。
[0069] 图1B示出了相应块115的四个时隙111、112、113和114的实例。时隙不必包括一个以上的块。换言之,时隙可以仅包括单个块,或者它可以包括两个或更多个块。而且,每个时隙111‑114内的块数量可以受到时隙大小、由排序节点120监视的截止时间等的限制。
[0070] 对于同一时隙中的交易,这些交易可以具有由排序节点120标识和实现的不同属性。例如,时隙112的块(例如,块9)中的交易可取决于同一块(例如,块9)中的交易,或取决于先前时隙111(或多个时隙)的块(例如,块8)中存在的交易。然而,块中的交易不能取决于同一时隙中的其他块的交易。因此,块9不能具有取决于块10、11或12的交易,反之亦然。当新块具有取决于在当前时隙的块中存在的任何交易的交易时,排序节点120创建新时隙。例如,如果在创建插时隙112时,排序节点112接收到取决于块10的交易,则排序节点可以创建块13并且同时还创建时隙113。
[0071] 同时,存储在每个块中的先前哈希值不同于传统线性顺序区块链中的先前哈希值。在图1B的实例中,函数116用于创建先前哈希值。例如,同一时隙中的每个块可存储相同的先前哈希值。此外,先前哈希值可以是基于来自紧接的先前时隙的哈希值/块的组合生成的值。例如,块13、14和15属于同一时隙113(也称为时隙i)。这里,块13、14和15中的每一个可存储基于来自块9、10、11和12的属于紧邻的先前时隙112的哈希的组合以及基于块9、10、11和12的先前哈希值116的先前哈希值。这确保了维持插时隙的顺序性质,同时还允许同一插时隙中的块之间的并行性。
[0072] 根据各实施例,时隙(i)中的新块的先前哈希值是先前时隙(i‑1)中存在的块的哈希的函数(Fn)。函数Fn的示例包括在先前时隙中的块的哈希的XOR。作为另一示例,函数Fn可以是在先前时隙中的块的混合哈希。例如,复合哈希可以是作为先前时隙中的块的哈希的函数的键的二级哈希。
[0073] 在图1B的示例中,块9‑12彼此不相关并且因此属于同一个插时隙112。同时,块13违反非依赖性要求,因为块13中的交易中的至少一个取决于存在于从9至12的块之一中的交易。因此,排序节点120创建新的时隙113,并且块13被添加到时隙13。此外,块13的先前哈希值是基于存在于先前时隙112中的块的函数116。同时,剩余的块14和15不依赖于块13中的交易,也不互相依赖于彼此。因此,块14和15被添加到时隙113。同时,块16违反依赖性要求,或者在时隙限制参数之后接收块16。
[0074] 例如,为了防止计算成本爆炸,排序节点120可以实现时隙大小要求和截止时间要求中的一个或多个。时隙大小要求限制可存在于一个时隙中的块(或交易)的数量。如果时隙中的块的数目达到所分配的时隙大小参数,则排序节点120切割新时隙并将下块放置在该新时隙中。作为另一示例,截止时间参数是排序节点120可将块添加到当前时隙的最大分配时间。截止时间参数可由排序节点120跟踪,排序节点120在创建新时隙时启动定时器。这里,排序节点120将保持向时隙添加块直到定时器期满/完成。当排序节点120开始新的时隙时,排序节点120重启时间。在图1B的示例中,假设在时隙113的创建期间定时器到期,并且在定时器到期之后创建块16。因此,块16被添加到新的时隙114。
[0075] 排序节点120可以维护时隙读取集和时隙写入集,其包含已经被属于当前时隙的块中的交易读取或写入的键。通过限制时隙的大小,排序节点120用于维护这些集合所使用的资源是有限的。在一些实施例中,当排序节点120接收取决于当前时隙的某个先前块中的交易的新交易时,也可以创建新时隙。在这种情况下,将自动重置排序器所使用的资源。时隙大小的限制确保排序器在取决于当前时隙的某个先前块中的交易的新交易没有到来的情况下不会被压倒。时隙的实际大小可以根据排序器处可用的资源来设置。此外,如果时隙的大小不受限制,则先前的块哈希验证可能花费很长时间,因为它需要等待许多紧邻的先前的块被接收。由于每个对等体拥有有限数量的处理器,时隙中的所有块可能不被并行验证。
[0076] 作为另一示例,通过限制时隙打开的时间量,由排序节点120用于维护这些集合的资源是有限的。时隙打开的时间量的限制同样确保排序节点120在取决于当前时隙的某个先前块中的交易的新交易没有到来时不会被压倒。可以根据排序器处可用的资源来设置时隙打开的实际时间量。如果时隙打开的时间量不受限制,则在开始/较早时被包括在时隙中的交易遭受高延迟。
[0077] 在这些示例中,可以在以下三种场景中创建新的时隙。例如,当排序节点120接收到取决于当前时隙的某个先前块中的交易的新交易时,可以创建新时隙。作为另一示例,当达到时隙大小时,排序节点120可创建新时隙。作为另一示例,排序节点120可以在达到截止时间时创建新时隙。
[0078] 同时,区块链对等体121‑124可以在块已经被创建之后从排序节点120接收块。这里,区块链对等体121‑124可一次一个地接收块。因此,区块链账本110中的块的槽位/部分顺序并不立即显而易见。当区块链对等体(例如,121‑124)从排序节点120接收到新广播的块时,该区块链对等体可以通过检查该新块中的先前哈希值是否是先前时隙中存在的块的哈希的函数来检查该块是否属于当前时隙中。
[0079] 如果先前哈希不是先前时隙的哈希的函数,则区块链对等体可检查新块是否属于下一时隙。在这种情况下,如果新块属于下时隙,则新块中的前一哈希值应当是当前时隙中的块的哈希的函数。如果可以成功地检查哈希值,则区块链对等体递增当前时隙指针,并在区块链分类账上创建新的时隙。如果哈希值不匹配,则区块链对等体尚未接收当前时隙中的一些块,该块中的交易可潜在地取决于这些块。此外,由于区块链网络中的冗余,期望每个块被应该所有对等体接收。区块链对等体可将块存储在缓冲器中并周期性地检查其是否属于当前时隙。
[0080] 为了跟踪交易依赖性,排序节点120可使用哈希集来跟踪时隙中的每个块的交易的键。在该示例中,如果交易仅依赖于该块或先前时隙中的块中存在的交易,则该交易可被添加至该块。同时,如果交易不能被添加到当前时隙,则排序节点120可以决定创建新时隙位并将该交易放在那里,或者拖延该交易并且处理可被添加到当前时隙位的其他交易。在这种情况下,排序节点120可以采取措施以确保针对被拒绝的交易没有发生交易饥饿(例如,在块中包括交易之前对等待时间的限制)。
[0081] 对于每个键,排序节点120可维护关于哪些交易(存在于哪个块中)被读取和修改的单独元数据。虽然这种方法在存储器要求方面是昂贵的,但是元数据可能对于对等体信任排序节点120的许可平台是有利的。当对等体加入区块链网络100时,它将开始接收块。在现有场景中,对等体必须在它可以验证来自当前接收的块的交易之前请求所有之前的块。然而,在示例实施例中,由于部分排序,区块链对等方可以仅请求当前块中的交易所依赖的那些块。
[0082] 由排序节点120生成的哈希集可包括已被属于当前时隙的块中的交易读取或写入的所有键的集合。排序节点120可以将该集合保持在不同数据结构中,如经由哈希集或经由链表或经由数组等。在一些实施例中,排序节点120可维持包括时隙读取集和时隙写入集的两个集。时隙读取集合可以包括已经被属于当前时隙中的块的交易读取的键。时隙写入集合可以包括已经被属于当前时隙中的块的交易写入的键。当新交易到来时,排序节点120可将其读/写集合与时隙读取集和时隙写入集进行比较。使用这个比较,排序节点120可以决定交易是否可以被放入属于当前时隙的块中或者它是否需要新的时隙。
[0083] 作为另一示例,排序节点120可创建由客户端提交的交易的有向无环图(DAG)。在该示例中,属于同一连接组件的交易可被置于同一块中,或跨不同时隙被置于不同块中。此外,属于不同组件的交易可被置于同一时隙中(但同一时隙中的不同块)。
[0084] 示例实施例提供优于传统线性有序区块链的显著益处。例如,示例实施例描述了实现区块链的交易之间的部分排序的排序节点。排序节点可识别在一时间段内到达的不同交易的键之间的相关性,并创建不同的块并将它们排序在一起(即,区块链分类账中的时隙),这可由任何对等体同时执行。块的先前哈希包括在先前时隙中的块的哈希的函数(例如,哈希的异或、复合哈希等)。在一些实施例中,时隙中的块的数量受时隙中允许的块的最大数量或超时限制,在超时之后不再有块可被添加到当前时隙。在一些实施例中,排序节点确保没有交易饥饿,同时确保使适合时隙的块的数量最大化。
[0085] 图2A示出根据示例实施例的区块链架构配置200。参照图2A,区块链架构200可包括某些区块链元件,例如,一组区块链节点202。区块链节点202可以包括一个或多个节点204‑210(这四个节点仅通过示例来描绘)。这些节点参与许多活动,诸如区块链交易添加和确认过程(一致)。区块链节点204‑210中的一个或多个可以基于背书策略对交易进行背书,并且可以为架构200中的所有区块链节点提供排序服务。区块链节点可发起区块链认证并试图写入存储在区块链层216中的区块链不可变分类账,其副本也可存储在支撑物理基础设施214上。区块链配置可以包括被链接到应用编程接口(API)222以访问和执行所存储的程序/应用代码220(例如,链码、智能合同等)的一个或多个应用224,所存储的程序/应用代码220可以根据参与者寻求的定制配置来创建并且可以维护其自己的状态、控制其自己的资产和接收外部信息。这可以被部署为交易并且经由附加到分布式分类账而被安装在所有区块链节点204‑210上。
[0086] 区块链基础或平台212可包括不同层的区块链数据、服务(例如,加密信任服务、虚拟执行环境等)和支持物理计算机基础设施,所述基础设施可用于接收和存储新交易并提供对试图访问数据条目的审核者的访问。区块链层216可以暴露接口,该接口提供对处理程序代码和参与物理基础设施214所必需的虚拟执行环境的访问。密码信任服务218可用于验证交易(诸如资产交换交易)并保持信息私有。
[0087] 图2A的区块链架构配置可通过由区块链平台212暴露的一个或多个接口和提供的服务来处理和执行程序/应用代码220。代码220可以控制区块链资产。例如,代码220可以存储和转移数据,并且可以由节点204‑210以智能合同和相关联的链式代码的形式来执行,该链式代码具有经受其执行的条件或其他代码元素。作为非限制性实例,可以创建智能合同以执行提醒、更新和/或受到改变、更新等的其他通知。智能合同本身可用于识别与分类账的授权和访问要求和使用相关联的规则。例如,读取数据226可以由包括在区块链层216中的一个或多个处理实体(例如,虚拟机)处理以创建要被写入到区块链的处理结果,所述处理结果包括写入数据228。物理基础设施214可用于检索本文所述的任何数据或信息。
[0088] 智能合同可以经由高级应用和编程语言创建,并且然后被写到区块链中的块。智能合同可以包括利用区块链(例如,区块链对等体的分布式网络)注册、存储和/或复制的可执行代码。交易是智能合同代码的执行,其可以响应于满足与智能合同相关联的条件而执行。智能合同的执行可以触发对数字区块链分类账的状态的可信修改。由智能合同执行引起的对区块链分类账的修改可以通过一个或多个一致协议遍及区块链对等体的分布式网络被自动复制。
[0089] 智能合同可以以键‑值对的格式向区块链写入数据。此外,智能合同代码可以读取存储在区块链中的值,并在应用操作中使用它们。智能合同代码可以将不同逻辑操作的输出写入到区块链中。代码可以用于在虚拟机或其他计算平台中创建临时数据结构。写入区块链的数据可以是公共的和/或可以被加密并维持为私有的。由智能合同使用/生成的临时数据由供应的执行环境保存在存储器中,然后一旦识别了区块链需要的数据就删除。
[0090] 链接代码可以包括具有附加特征的智能合同的代码解释。如本文所描述的,链码可以是部署在计算网络上的程序代码,其中链码在共有过程期间由链确认器一起执行和验证。链码接收哈希并且从区块链中检索与通过使用先前存储的特征提取器创建的数据模板相关联的哈希。如果哈希标识符的哈希和从所存储的标识符模板数据创建的哈希匹配,则链码向所请求的服务发送授权键。链码可以向区块链写入与加密细节相关联的数据。
[0091] 图2B示出根据示例实施例的区块链的节点之间的区块链交易流250的示例。参考图2B,交易流程可包括由应用客户端节点260发送至认可的对等节点281的交易建议291。背书的对等体281可验证客户端签名并且执行链码功能以发起交易。输出可以包括链码结果、在链码中读取的键/值版本的集合(读取集)、以及在链码中写入的键/值的集合(写入集)。如果被批准,提议响应292连同背书签名一起被发送回客户端260。客户端260将背书组装成交易有效载荷293并将其广播至排序服务节点284。排序服务节点284然后将排序交易作为块递送到信道上的所有对等体281‑283。在提交到区块链之前,每个对等体281‑283可以验证交易。例如,对等体可检查背书策略以确保指定对等体的正确分配已对结果签名并对交易有效载荷293验证签名。
[0092] 再次参考图2B,客户端节点260通过构建请求并将请求发送至作为背书者的对等节点281来发起交易291。客户端260可以包括利用所支持的软件开发工具包(SDK)的应用,所述SDK利用可用的API来生成交易建议。提议是调用链码功能以使得数据可以被读取和/或写入到分类账(即,为资产写入新的键值对)的请求。SDK可以充当垫片以将交易提案封装成适当的架构化格式(例如,远程过程调用(RPC)上的协议缓冲器)并采用客户端的加密证书来产生交易提案的唯一签名。
[0093] 作为响应,背书对等节点281可验证(a)交易提案形成良好,(b)交易在过去尚未被提交(重放攻击保护),(c)签名有效,以及(d)提交者(在该示例中,客户端260)被适当地授权以在该信道上执行所提议的操作。背书的对等节点281可以将交易提议输入作为对所调用的链码函数的自变量。然后,对照当前状态数据库执行链码以产生包括响应值、读取集和写入集的交易结果。然而,此时没有对分类账进行更新。在292中,该值集合连同背书的对等节点281的签名作为提议响应292被传递回客户端260的SDK,SDK解析应用消费的有效载荷。
[0094] 作为响应,客户端260的应用检查/验证背书的对等体签名,并且比较建议响应以确定建议响应是否相同。如果链码仅查询分类账,则应用将检查查询响应并且通常将不向排序节点服务284提交交易。如果客户端应用程序打算将交易提交给排序节点服务284以更新分类账,则应用程序确定在提交之前指定的背书策略是否已被满足(即,所有对等节点对交易是否都背书该交易)。这里,客户端可仅包括交易的多方中的一个。在这种情况下,每个客户端可具有其自身的背书节点,并且每个背书节点将需要背书交易。该架构使得即使应用选择不检查响应或以其他方式转发未个性化交易,背书策略仍将由对等体强制执行并在提交验证阶段得到保持。
[0095] 在成功检查之后,在步骤293,客户端260将背书组装成交易并在交易消息内将交易建议和响应广播至排序节点284。交易可包含读/写集、背书对等体签名和信道ID。排序节点284不需要检查交易的全部内容以便执行其操作,相反,排序节点284可以简单地从网络中的所有信道接收交易,按信道对它们按时间顺序进行排序,并且每信道创建交易块。
[0096] 交易的块被从排序节点284递送到信道上的所有对等节点281‑283。块内的交易294被验证以确保任何背书策略被满足并确保对于读集合变量的分类账状态没有改变,因为读取集是由交易执行生成的。块中的交易被标记为有效或无效。此外,在步骤295,每个对等节点281‑283将块附加到通道的链,并且对于每个有效交易,写入集被提交至当前状态数据库。发出事件以通知客户端应用交易(调用)已经被不可更改地附加到链,以及通知交易是有效还是无效。
[0097] 图3A示出了以分布式、去中心化对等架构为特征的受许可的区块链网络300的示例。在该示例中,区块链用户302可以向经许可的区块链304发起交易。在该示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户端侧应用、直接通过API等来发布。网络可以提供对诸如审核者之类的监管器306的访问。区块链网络运营商308管理成员许可,诸如将监管器306登记为“审核者”并且将区块链用户302登记为“客户端”。审核者可以仅限于查询分类账,而客户端可以被授权部署、调用和查询某些类型的链码。
[0098] 区块链开发者310可写入链码和客户端应用程序。区块链开发者310可以通过接口将链码直接部署到网络。为了在链码中包括来自传统数据源312的证书,开发者310可使用带外连接来访问数据。在该示例中,区块链用户302通过对等节点314连接到被许可的区块链304。在进行任何交易之前,对等节点314从管理用户角色和许可的证书授权机构316检索用户的注册和交易证书。在一些情况下,区块链用户必须拥有这些数字证书以便在许可的区块链304上进行交易。同时,尝试利用链码的用户可能被要求在传统数据源312上验证他们的凭证。为了确认用户的授权,链码可以使用通过传统处理平台318到该数据的带外连接。
[0099] 图3B示出了以分布式、去中心化对等架构为特征的受准许的区块链网络320的另一示例。在该示例中,区块链用户322可以向经许可的区块链324提交交易。在该示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户端侧应用、直接通过API等来发布。网络可以提供对诸如审核者之类的调节器326的访问。区块链网络运营商328管理成员许可,诸如将调节器326登记为“审核者”并且将区块链用户322登记为“客户端”。审核者可以仅限于查询分类账,而客户端可以被授权部署、调用和查询某些类型的链码。
[0100] 区块链开发者330写入链码和客户端侧应用。区块链开发者330可以通过接口将链码直接部署到网络。为了在链码中包括来自传统数据源332的凭证,开发者330可以使用带外连接来访问数据。在该示例中,区块链用户322通过对等节点334连接到网络。在进行任何交易之前,对等节点334从证书授权机构336检索用户的登记和交易证书。在一些情况下,区块链用户必须拥有这些数字证书以便在经许可的区块链324上进行交易。同时,尝试利用链码的用户可能被要求在传统数据源332上验证他们的凭证。为了确认用户的授权,链码可以使用通过传统处理平台338到该数据的带外连接。
[0101] 在一些实施例中,本文中的区块链可以是无许可的区块链。与要求允许加入的经许可的区块链相反,任何人都可以加入未经许可的区块链。例如,为了加入无许可区块链,用户可通过提交交易并因此将条目添加到分类账来创建个人地址并开始与网络交互。此外,所有方具有在系统上运行节点以及采用挖掘协议来帮助验证交易的选择。
[0102] 图3C示出了由包括多个节点354的无许可区块链352处理的交易的处理350。发送者356希望经由无许可区块链352向接收者358发送支付或某一其他形式的价值(例如,契约、医疗记录、合同、商品、服务或可被封装在数字记录中的任何其他资产)。在一个实施例中,发送方设备356和接收方设备358中的每一个可具有提供用户界面控制和交易参数显示的数字钱包(与区块链352相关联)。作为响应,交易通过区块链352被广播至节点354。根据区块链352的网络参数,节点基于无许可的区块链352创建者建立的规则(其可以是预定义的或动态分配的)来验证360交易。例如,这可以包括验证有关各方的身份等。可以立即验证交易,或者可以将其与其他交易一起放置在队列中,并且节点354基于网络规则集确定交易是否有效。
[0103] 在结构362中,将有效交易形成为块并且用锁(哈希)密封。该过程可以通过挖掘节点354中的节点来执行。挖掘节点可以利用另外的软件,其特别地用于针对无许可区块链352挖掘和创建块。每个块可由使用由网络商定的算法创建的哈希(例如,256位数等)来标识。每个块可包括报头、指向链中的先前块的报头的哈希的指针或引用、以及一组有效交易。对先前块的哈希的引用与块的安全独立链的创建相关联。
[0104] 在块可以被添加到区块链之前,块必须被验证。对无许可区块链352的验证可包括工作证明(PoW),其是从块的头部导出的谜题的解。虽然在图3C的示例中未示出,但是用于验证块的另一过程是权益证明。与工作证明不同,其中,算法用权益证明来奖励解决数学问题的挖掘者,新块的创建者以确定性方式被选择,取决于其财富,也被定义为“权益”。然后,由选择的/选择的节点执行类似的证明。
[0105] 利用挖掘364,节点尝试通过对一个变量进行增量改变直到解满足全网络目标来解决块。这产生PoW,从而确保正确答案。换言之,潜在的解决方案必须证明在解决该问题时耗尽计算资源。在一些类型的无许可区块链中,矿工可能会因正确挖掘区块而获得价值(例如硬币等)奖励。
[0106] 这里,PoW过程与区块链一起使区块链的修改变得极其困难,因为攻击者必须修改所有后续块以便接受一个块的修改。此外,随着新块的挖掘,修改块的难度增加,并且后续块的数量也会增加。通过分发366,成功验证的块通过免许可区块链352分发,所有节点354将块添加到多数链,多数链是免许可区块链352的可审计分类帐。此外,将由发送者356提交的交易中的值存入或以其他方式传送到接收者设备358的数字钱包。
[0107] 图4A示出根据示例实施例的在对等操作期间并行验证块的过程400A。参考图4A,当恢复包括区块链424和状态数据库426的其本地区块链分类账422时,区块链对等体420可在引导或恢复过程期间同时检索多个块411‑414。
[0108] 默认地,在现有的区块链协议中,区块链对等体在重启期间需要启动许多应用,同时它会按顺序执行区块链的不同块。这导致较长的引导时间,因为顺序地执行块。然而,在示例实施例中,区块链对等体420可以并行地执行块411‑414,这节省了完成整个区块链410的块验证所需要的时间量。由于时隙中的交易的部分排序,多个块的并行验证是可用的。这导致崩溃的对等体和/或第一次启动的新对等体的更快恢复。
[0109] 例如,区块链对等体420可以使用多个物理核来加速恢复过程。当区块链对等体420开始恢复过程时,它将经由gossip协议从另一对等体(未示出)接收块。作为响应,区块链对等体420可以标识属于同一时隙的块411‑414。可以使用(可能在区块链对等体420中的多个物理核上运行的)多个线程来同时恢复属于同一时隙的这些块411‑414。与必须执行线性序列中的块的当前系统相比,这种块间并行性改善了恢复时间。
[0110] 例如,在过程400A期间,区块链对等体420可以从相邻对等体收集块。收集过程可在引导或重启期间执行。区块链对等体420还可以初始化其本地分类账422。区块链对等体420可以同时取回块411‑414,并且同时独立地使用不同核/处理器(无需任何附加处理)来验证块411‑414。区块链对等体420可经由区块链对等体420的不同核并行地更新状态数据库426。这导致对等恢复/启动的时间减少。利用在区块链410中部分排序的交易,可以并行验证属于相同插时隙的多个块,而无需额外的处理。
[0111] 图4B示出根据示例实施例的在查询检索操作期间跳过对块的验证的过程400B。参考图4B,区块链对等体420接收对存储在块415中的交易的查询。可以从客户端430等接收查询。作为响应,区块链对等体420可验证块415和区块链410中的先前块。然而,不是如在传统的区块链分类账中所完成的那样验证所有块,而是区块链对等体420可以跳过不依赖于块415的块并且将它们从验证过程中移除。
[0112] 默认地,在现有区块链协议中,对等节点在回复对当前块的键的查询之前必须验证当前块的所有先前块。这导致较长的查询响应时间,因为这些块被顺序地验证。然而,当前块中的键可能不取决于先前块。尽管如此,在响应查询之前,必须验证链上的先前块。相反,在过程400B中,区块链对等体420在对查询作出响应之前不需要执行所有前驱块,这节省了对查询作出响应所需的时间量。例如,区块链对等体420可以跳过包括查询的块415的时隙(i)中的块。此外,区块链对等体420可跳过其他块(例如,时隙(i‑1)),如果这些块不包括块415的依赖交易的话。此跳过可继续,直到块取决于块415为止。
[0113] 例如,区块链对等体420可接收对存储在时隙(i)的块415中的交易的查询。与当前块相同的时隙(i)中的其他块可能未决用于验证(或者甚至未被区块链对等体420接收)。然而,区块链对等体420可以跳过这些块,并且在对查询做出响应之前仅验证当前块(不烦扰在相同时隙中的其他块的验证)。因此,区块链对等体可识别链中在块415之前的下一块且跳过其间的剩余块。这导致更快/改进的查询响应时间。此外,状态数据库426在当前块验证之后被更新,并且提供查询响应。在相同时隙中的剩余块被验证之后,状态数据库426被相应地更新。然而,这些更新不影响查询响应。
[0114] 图4C为示出根据实例性实施方式的将交易映射至DAG以确定并行处理选项的过程400C的示图。组织可以在区块链网络中运行多个对等体。默认地,在现有区块链协议中,组织中的所有对等体通过独立地且顺序地执行每个块中的交易来将所有有效交易提交到状态数据库。在一些实施例中,仅有锚对等节点可能需要立即验证每个块中的交易,使得交易周转时间不受阻碍。每个组织中的其他对等体可以将块缓冲,并且如果可能的话并行执行交易。示例实施例提供了一种机制,通过该机制,可以基于部分排序的交易的概念使用组织的多个区块链对等体来划分和并行执行交易。
[0115] 具体地,参考图4C中的过程400C,区块链对等体420可以从相邻插时隙中的块中存在的交易构建DAG结构442、444和446,以便也进一步利用跨时隙的并行性。在图4C的实例中,三个块布置在相同的时隙中(块A、B和C)。部分有序交易的特征之一是同一时隙中的两个块不能包括相互依赖的交易。然而,每个块可在其中包括相关交易。例如,块A、B和C中的每一个包括一系列依赖于内的交易。区块链对等体420可使用DAG来绘制这些内部依赖关系。在DAG结构中,节点表示交易,并且链接表示交易之间的依赖关系。此外,区块链对等体420(或某个其他服务)可基于DAG结构442、444和446来拆分/划分要并行处理的交易,使得不在同一时间跨同一组织的多个对等体执行两个依赖交易。
[0116] 例如,排序节点可以将每个块递送到组织的多个对等体中的锚对等体。在图4C中,区块链对等体420表示锚节点。区块链对等体420可以将其接收的每个块发送到组织中的所有其他区块链对等体(未示出)。此外,区块链对等体420可按顺序验证块的交易(因此对客户端而言,在交易执行状态上没有延迟)。该验证可以基于属于与图4A的示例中相同的时隙的块的并行验证。
[0117] 此外,组织中的其他对等体可以在对块进行验证之前缓冲块,以发现并行验证在交易之间是否可行。这些对等体可缓冲时隙i中的块以查找这些块中的交易是否可与从稍后时隙到时隙i的交易并行地执行。对等体可从来自时隙‑i的每个块和来自时隙‑(i+1)的块构建DAG以寻找来自时隙‑(i+1)的该块是否可与来自时隙‑i的块一起被验证。如果不存在相关性,则来自时隙‑(i+1)的块可与时隙‑(i)中的块并行地执行。此处的目的是实现改善的交易吞吐量。并且同一组织中的不同对等体可实现基于DAG的并行性的这些不同组合。由于不同对等体正在实现如本示例中所描述的不同级别的并行性,因此同一对等体可能不能最早地针对不同查询计算查询响应。并且传入的查询可以由组织的任何对等体来响应,无论谁都能够更快地计算查询响应。为了做到这一点,区块链对等体420可从每个块A、B和C构造出DAG,以确定这三个块的交易是否可被并行执行或者它们是否彼此依赖。在DAG442中,示出来自块A的彼此依赖的交易。同样地,在DAG 444和446中,分别示出了在块B和C中彼此依赖的交易。
[0118] 在此实例中,DAG帮助将交易分成组,使得在来自不同组的交易之间不存在依赖性,并且因此可与其他组的交易并行地验证一组交易。使用基于DAG的分析来验证交易的目的是并行地验证交易,从而实现改善的交易吞吐量。
[0119] 图4D示出了根据示例实施例的在存储新交易期间选择性地验证块的过程400D。默认情况下,在现有的区块链协议中,区块链对等体需要在验证当前块的交易之前验证当前块的所有先前块。这导致低交易吞吐量。具体地,执行当前块的对等体可能不关注前一块中的键(例如,前一块包含与同一网络中的不同智能合同相关的交易等)。在示例实施例中,区块链对等体420可以不需要在验证当前块中的交易之前验证所有先前块,并且这导致更高的交易吞吐量。
[0120] 在图4D的过程400D中,区块链对等体420可从由于与排序节点可用的元数据(例如,哈希集等)而可能的排序节点中获得当前交易所依赖的先前交易的细节(连同它们的块号)。区块链对等体420可以在验证当前交易之前选择性地仅验证当前交易的相关的前任交易(并且不等待先前块中的其他交易的验证)。这导致改善的交易吞吐量。
[0121] 如关于图1B所描述的,排序节点可以包括交易的列表(连同这些交易中的每一个都存在的块),该列表更新任何特定的键‑值对(例如,周期性地更新R.O.I‑利率)。此元数据被维护在排序节点处。元数据可包括每个键的标识及其依赖性。这里,区块链对等体420知道交易的读/写集合的键。由此,对等体从排序节点寻找这些键中的每个的元数据(即,更新给定键的选择性交易和块)。在图4D的示例中,区块链对等体420接收块37的交易。基于来自排序节点的哈希集,区块链对等体420标识来自块37的交易的键的依赖性被包括在块29、17和16中。因此,不是验证所有块,而是区块链对等体420可以选择性地仅验证块29、17和16,所述块29、17和16取决于块37中的交易。
[0122] 在图4D的示例中,区块链对等体420可以从由排序节点维护的元数据中取得当前块中的交易的前驱交易的细节(连同这些交易是其一部分的块号)。块中(或跨块)的不同交易可依赖于不同的智能合同。因此,不是所有交易都彼此相关。
[0123] 在图4D的示例中,在区块链对等体420可以仅处理包含块37中的当前交易的依赖交易的选择性块。在这种情况下,那些选择的块中的当前交易的非依赖性交易也不被验证。这克服了完成当前块的所有先前块的交易验证的要求,极大地提高了交易吞吐量。
[0124] 图4E示出了根据示例性实施方式的对加密的数据块进行部分排序的过程400E。在该示例中,排序节点450即使在交易被加密(并且因此依赖性被隐藏)的情况下也能够实现块的部分排序。例如,由于隐私问题,交易连同读/写集合可被加密。为了使排序节点450能够以时隙式方式布置交易,每个加密交易可以具有与其相关联的键。这里,键可以由诸如客户端、对等体等的交易提交者分配。彼此相关联的交易可以用相同的键提交。在图4E的示例中,键是“质量”、“支付”和“货运”。
[0125] 在该示例中,键被分配给交易并且可以包括不同的键名称。具有相同键的交易可彼此相关。然而,具有不同键的交易在它们本身之间不应具有相关性。例如,具有质量键的交易的读/写集合应当不同于具有分配给其的货运键的交易的读/写集合。根据不同实施例,在加密交易的情况下,排序节点450可以利用这些键来将交易安排在时隙中,并且利用并行性的好处。具体地,排序节点450将具有质量键的交易块分配到集群452,将具有支付键的交易块分配到集群454,并且将具有装运键的交易块分配到集群456。这里,所有的交易被加密,但是排序节点知道每个块的键簇。
[0126] 根据不同的实施例,排序节点450可以将这些块安排在区块链460上的多个时隙中。具体地,来自集群442、444和446中的每一个的一个块可以在相同的时隙上并行排序。所以,时隙中的块的最大数目可等于键群集的数目。在此,用标识符462标记块以表示存储在其中的交易的键。以此方式,被加密的交易仍可被布置在时隙中。键由交易提交者在交易基础上分配。排序节点450使用这些键来决定具有相同键的交易块应落入哪个时隙。
[0127] 图5示出了根据示例性实施方式的在对等操作期间并行验证块的方法500。例如,方法500可以在对等恢复操作、对等启动/引导操作等期间执行。参考图5,在510中,该方法可以包括从相邻的区块链对等体接收区块链的块。例如,块可在引导过程、恢复过程、确认过程等期间被区块链对等体接收。相邻对等体可以被包括在与接收块的对等体相同的区块链网络中。在一些实施例中,当区块链对等体正在执行恢复或引导操作时,该方法还可以包括在引导和恢复过程中的至少一个过程期间初始化本地区块链分类账。
[0128] 在520中,该方法可以包括从接收的块中识别属于区块链内的同一时隙的两个或更多个块。例如,两个或更多个块可仅包括与时隙中的其他块中的交易无关的交易。例如,当第一块中的交易都不依赖于第二块中的交易时,第一和第二块可被视为非依赖性块,反之亦然。然而,可能的是第一块中的交易可以取决于第一块中的其他交易。同样地,第二区块中的交易可取决于第二区块中的其他交易。然而,交易可不具有块间依赖关系。
[0129] 在一些实施例中,所述识别可包括基于存储在所接收的块中的哈希值来识别所接收的块中的哪些块属于相同时隙中。在一些实施例中,标识可包括当块的直接先前哈希值是存储在区块链上的直接先前时隙中的多个块的哈希的函数时确定块属于当前时隙中。
[0130] 在530中,方法可包括经由同时执行两个以上识别的块来并行验证两个以上识别的块。此外,在540中,响应于对两个或更多个标识的块的验证,该方法可以包括将两个或更多个标识的块存储在区块链对等体的本地区块链分类账上。根据各种实施例,验证可以包括在区块链对等体的两个或更多个独立的处理器内核上并行(在时间上重叠)同时执行两个或更多个标识的块。
[0131] 在一些实施例中,该方法可以进一步包括识别区块链上属于紧邻的先前时隙的两个或更多个其他块。在此实例中,所述方法可进一步包含当所述两个或两个以上其他块不取决于所述两个或两个以上所识别的块时,与属于同一时隙的所述两个或两个以上所识别的块并行地验证属于所述紧邻的先前时隙的所述两个以上其他块。
[0132] 图6A示出了包括被配置为执行根据示例性实施方式的各种操作的物理基础设施610的示例性系统600。参考图6A,物理基础设施610包括模块612和模块614。模块614包括区块链620和智能合同630(其可以驻留在区块链620上),智能合同630可以执行包括在任何示例实施例中的任何操作步骤608(在模块612中)。步骤/操作608可以包括所描述或描绘的实施例中的一个或多个,并且可以表示从一个或多个智能合同630和/或区块链620写入或读取的输出或写入信息。物理基础设施610、模块612和模块614可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。进一步,模块612和模块614可以是相同的模块。
[0133] 图6B示出了根据示例实施方式的被配置为执行各种操作的另一个示例系统640。参考图6B,系统640包括模块612和模块614。模块614包括区块链620和智能合同630(其可以驻留在区块链620上),智能合同630可以执行包括在任何示例实施例中的任何操作步骤608(在模块612中)。步骤/操作608可以包括所描述或描绘的实施例中的一个或多个,并且可以表示从一个或多个智能合同630和/或区块链620写入或读取的输出或写入信息。物理基础设施610、模块612和模块614可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。进一步,模块612和模块614可以是相同的模块。
[0134] 图6C示出根据示例实施例的被配置为在缔约方之间利用智能合同配置的示例系统和被配置为在区块链上强制执行智能合同条款的调解服务器。参考图6C,配置650可以表示由明确识别一个或多个用户设备652和/或656的智能合同630驱动的通信会话、资产传输会话或过程或程序。智能合同执行的执行、操作和结果可以由服务器654管理。智能合同630的内容可能需要作为智能合同交易的各方的实体652和656中的一个或多个的数字签名。智能合同执行的结果可以作为区块链交易被写到区块链620。智能合同630驻留在可以驻留在一个或多个计算机、服务器、处理器、存储器和/或无线通信设备上的区块链620上。
[0135] 图6D示出了根据示例性实施方式的包括区块链的系统660。参考图6D的示例,应用编程接口(API)网关662提供用于访问区块链逻辑(例如,智能合同630或其他链码)和数据(例如,分布式分类账等)的公共接口。在该示例中,API网关662是用于通过将一个或多个实体652和656连接至区块链对等体(即,服务器654)来对区块链执行交易(调用、查询等)的公共接口。这里,服务器654是区块链网络对等组件,其保存世界状态的副本和分布式分类账,允许客户端652和656查询关于世界状态的数据以及将交易提交到区块链网络中,其中,根据智能合同630和背书策略,背书对等体将运行智能合同630。
[0136] 以上实施例能够以硬件、由处理器执行的计算机程序、固件或以上的组合来实现。计算机程序可实施于计算机可读介质上,例如存储介质。例如,计算机程序可以驻留在随机存取存储器(“RAM”)、闪存、只读存储器(“ROM”)、可擦除可编程只读存储器(“EPROM”)、电可擦除可编程只读存储器(“EEPROM”)、寄存器、硬盘、可移动盘、致密盘只读存储器(“CD‑ROM”)、或本领域已知的任何其他形式的存储介质中。
[0137] 示范性存储介质可耦合到处理器,使得处理器可从存储介质读取信息和将信息写入到存储介质。在替代方案中,存储介质可与处理器成一体。处理器和存储介质可驻留在专用集成电路(“ASIC”)中。在替代方案中,处理器和存储介质可作为离散组件驻留。
[0138] 图7A示出根据示例实施例的新块被添加到分布式分类账720的过程700,图7B示出根据示例实施例的用于区块链的新数据块结构730的内容。参考图7A,客户端(未示出)可向区块链节点711、712和/或713提交交易。客户端可以是从任何来源接收的指令以制定在区块链720上的活动。作为示例,客户端可以是代表请求者(诸如设备、个人或实体)行动的应用,以提议针对区块链的交易。多个区块链对等体(例如,区块链节点711、712和713)可以维护区块链网络的状态和分布式分类账720的副本。在区块链网络中可存在不同类型的区块链节点/对等体,包括背书模拟并背书由客户端提出的交易的对等体和提交验证背书、验证交易和提交交易的对等体到分布式分类账720。在此实例中,区块链节点711、712和713可执行背书节点、提交节点或两者的作用。
[0139] 分布式分类账720包括在块中存储不可变的排序记录的区块链和维护区块链722的当前状态的状态数据库724(当前世界状态)。每个通道可以存在分布式分类账720,并且每个对等体维护它们作为其成员的每个通道的分布式分类账720的其自己的副本。区块链722是交易日志,被构造为哈希链接的块,其中每个块包含N个交易的序列。块可包括诸如图
7B中所示的各种组件。块的链接(由图7A中的箭头示出)可以通过在当前块的块报头内添加先前块的报头的哈希来生成。以此方式,将区块链722上的所有交易排序并加密地链接在一起,从而防止篡改区块链数据而不破坏哈希链接。此外,由于链接,区块链722中的最新块代表在它之前出现的每个交易。区块链722可以存储在对等文件系统(本地或附加存储)上,所述对等文件系统支持仅附加的区块链工作负载。
[0140] 区块链722和分布式分类账722的当前状态可以存储在状态数据库724中。此处,当前状态数据表示曾经包括在区块链722的链交易日志中的所有键的最新值。链调用对照状态数据库724中的当前状态执行交易。为了使这些链码交互极其有效,所有键的最新值被存储在状态数据库724中。状态数据库724可以包括进入区块链722的交易日志的索引视图,因此可以在任何时间从链中重新生成它。在交易被接受之前,在对等体启动时,状态数据库724可自动被恢复(或者如果需要的话被生成)。
[0141] 背书节点从客户端接收交易,并基于模拟结果背书交易。背书节点持有模拟交易建议的智能合同。当背书节点背书交易时,背书节点创建交易背书,该交易背书是指示模拟交易的背书的从背书节点到客户端应用的签名响应。背书交易的方法取决于可以在链码中指定的背书策略。背书策略的示例是“多数背书节点必须背书交易”。不同的信道可具有不同的背书策略。客户端应用程序将经过验证的交易转发至排序服务710。
[0142] 排序服务710接受背书的交易,将它们排序到块中,并且向提交对等体递送所述块。例如,当已经达到交易阈值、定时器超时或另一条件时,排序服务710可以发起新块。在图7A的示例中,区块链节点712是提交对等体,其已接收到新数据新数据块730以供存储在区块链720上。区块链中的第一块可以称为创始块,其包括关于区块链、其成员、存储在其中的数据等的信息。
[0143] 排序服务710可以由排序器集群构成。排序服务710不处理交易、智能合同或维护共享分类账。相反,排序服务710可以接受背书的业务并且指定那些业务被提交到分布式分类账720的顺序。可以设计区块链网络的架构,使得‘排序’(例如,Solo、Kafka、BFT等)的具体实现变成可插拔组件。
[0144] 交易以一致的顺序被写到分布式分类账720。交易的顺序被建立以确保对状态数据库724的更新在它们被提交至网络时是有效的。与其中通过解决密码谜题或挖掘发生排序的密码货币区块链系统(例如,比特币等)不同,在该示例中,分布式分类账720的各方可以选择最适合该网络的排序机制。
[0145] 当排序服务710初始化新数据块730时,新数据块730可以被广播到提交对等体(例如,区块链节点711、712和713)。作为响应,每个提交对等体通过检查以确保读取集和写入集仍匹配状态数据库724中的当前世界状态来验证新数据块730内的交易。具体地,提交对等体可以确定当背书者模拟交易时存在的读数据是否与状态数据库724中的当前世界状态相同。当提交对等体验证交易时,交易被写到分布式分类账720上的区块链722,并且状态数据库724用来自读‑写集合的写数据来更新。如果交易失败,即,如果提交对等体发现读‑写集合与状态数据库724中的当前世界状态不匹配,则排序到块中的交易将仍然被包括在该块中,但它将被标记为无效,并且状态数据库724将不被更新。
[0146] 参考图7B,被存储在分布式分类账720的区块链722上的新数据块730(也被称为数据块)可以包括多个数据段,诸如块报头740、块数据750和块元数据760。应当理解,各种描述的方框及其内容(例如,图7B中所示的新数据方框730及其内容)仅仅是实例,并非旨在限制实例实施方式的范围。新数据块730可以在块数据750内存储N个交易(例如,1、10、100、500、1000、2000、3000等)的交易信息。
[0147] 根据不同实施例,新数据块730可以包括到块报头740内的区块链上的先前时隙的链接。具体地,块报头740可以包括块的先前时隙的哈希函数742。在一些实施例中,哈希函数742可包括被包括在紧邻的先前时隙中的一组块的哈希(或该组块中的文档的哈希)的异或。作为另一示例,哈希函数742可包括先前时隙中包括的一组块的哈希(或该组块中的文档的哈希)的混合哈希。
[0148] 块头740还可包括唯一块号、新数据块730的块数据750的哈希等。新数据块730的块号可以是唯一的并且以不同顺序分配,诸如从零开始的递增/连续顺序。
[0149] 块数据750可以存储被记录在新数据块730内的每个交易的交易信息。例如,交易数据可以包括交易的类型、版本、时间戳、分布式分类账720的信道ID、交易ID中的一个或多个,时期、有效载荷可见性、链码路径(部署tx)、链码名称、链码版本、输入(链码和功能)、客户端(创建者)标识(诸如公钥和证书),客户端的签名、背书人的身份、背书人签名、建议哈希、链码事件、响应状态、命名空间、读取集合(由交易读取的键和版本的列表等),写入集合(键和值的列表等)、开始键、结束键、键的列表、Merkle树查询概要等。可针对N个交易中的每个交易存储交易数据。
[0150] 块元数据760可存储元数据的多个字段(例如,作为字节阵列等)。元数据字段可以包括关于块创建的签名、对最后配置块的引用、标识块内的有效和无效交易的交易过滤器、对块进行排序的排序服务的存留的最后偏移等。签名、最后配置块、和排序器元数据可以由排序服务710添加。同时,块(诸如区块链节点712)的提交者可以基于背书策略、读/写集合的验证等来添加有效/无效信息。交易过滤器可包括大小等于块数据750中的交易的数量的字节阵列和标识交易是否有效/无效的验证码。在一些实施方式中,虽然在图7B中未示出,但是块元数据760可以在其内存储推荐的智能合同的元数据。
[0151] 图7C示出了根据本文描述的实施方式的用于数字内容的区块链770的实施方式。数字内容可包括一个或多个文件和相关联的信息。所述文件可包含介质、图像、视频、音频、文本、链接、图形、动画、网页、文档或其他形式的数字内容。区块链的不可变的、仅附加的方面充当保护措施来保护数字内容的完整性、有效性和真实性,从而使其适合用于法律程序中,其中可接受性规则适用,或在其中考虑证据或其中数字信息的呈现和使用以其他方式感兴趣的其他设置中。在这种情况下,数字内容可以被称为数字证据。
[0152] 区块链可以各种方式形成。在一个实施例中,数字内容可以包括在区块链本身中并且从区块链本身访问。例如,区块链的每个块可以沿着相关联的数字内容存储参考信息的哈希值(例如,报头、值等)。然后可以一起加密哈希值和相关联的数字内容。因此,每个块的数字内容可以通过解密区块链中的每个块来访问,并且每个块的哈希值可以用作引用先前块的基础。这可以说明如下:
[0153]
[0154] 在一个实施例中,数字内容可以不包括在区块链中。例如,区块链可在没有任何数字内容的情况下存储每个块的内容的经加密的哈希。数字内容可以被存储在与原始文件的哈希值相关联的另一存储区域或存储器地址中。其他存储区域可以是用于存储区块链的相同存储设备,或者可以是不同的存储区域或者甚至是单独的关系数据库。通过获得或查询感兴趣块的哈希值,然后在存储区域中查找与该实际数字内容对应存储的值,可以引用或访问每个块的数字内容。这个操作可以被执行,例如,数据库网守。这可以说明如下:
[0155] 区块链                                          存储区
[0156] 块1哈希值                                      块1哈希值…内容[0157] 块N哈希值                                      块N哈希值…内容[0158] 在图7C的示例性实施方式中,区块链770包括以有序序列密码连接的多个嵌段7781、7782、…、778N,其中N≥1。用于链接块7781、7782、…、778N的加密可以是多个键控或非键控哈希函数中的任何函数。在一个实施例中,块7781、7782、…、778N是哈希函数,该哈希函数从基于块中的信息的输入产生n位字母数字输出(其中,n是256或另一个数)。这样的哈希函数的示例包括但不限于SHA类型(SHA代表安全哈希算法)算法、Merkle‑Damgard算法、HAIFA算法、Merkle‑tree算法、基于现时的算法和防冲突的PRF算法。在另一实施例中,块
7781、7782、…、778N可通过不同于哈希函数的函数加密链接。为了说明的目的,参考哈希函数(例如,SHA‑2)进行以下描述。
[0159] 在区块链中的块7781、7782、…、778N中的每一个包括报头、文件的版本、以及值。由于区块链中的哈希,报头和值对于每个块是不同的。在一个实施例中,该值可被包括在报头中。如下文更详细描述的,文件的版本可以是原始文件或原始文件的不同版本。
[0160] 区块链中的第一块7781被称为创始块,并且包括报头7721、原始文件7741和初始值7761。用于创始块以及实际上在所有后续块中的哈希方案可以变化。例如,第一块7781中的所有信息可被一起哈希并且一次哈希,或者第一块7781中的信息的每一个或一部分可被分开哈希,然后可执行分开哈希的部分的哈希。
[0161] 报头7721可以包括一个或多个初始参数,其例如可以包括版本号、时间戳、随机数、根信息、难度级、一致性协议、持续时间、介质格式、源、描述性关键字和/或与原始文件7741和/或区块链相关联的其他信息。报头7721可以自动地(例如,通过区块链网络管理软件)或由区块链参与者手动地生成。与区块链中的其他块7782至778N中的头不同,创始块中的头7721不参考先前的块,仅仅因为不存在先前的块。
[0162] 创始块中的原始文件7741可以是例如在被包括在区块链中之前在有或没有处理的情况下由装置捕获的数据。通过系统的接口从设备、介质源或节点接收原始文件7741。原始文件7741与元数据相关联,所述元数据例如可以由用户、设备和/或系统处理器手动地或自动地生成。元数据可以被包括在与原文件7741相关联的第一块7781中。
[0163] 创始块中的值7761是基于原始文件7741的一个或多个唯一属性生成的初始值。在一个实施例中,一个或多个唯一属性可以包括原始文件7741的哈希值、原始文件7741的元数据和与文件相关联的其他信息。在一个实施例中,初始值7761可基于以下唯一属性:
[0164] 1)SHA‑2计算的原始文件的哈希值
[0165] 2)发端设备标识
[0166] 3)原始文件的开始时间戳
[0167] 4)原始文件的初始存储位置
[0168] 5)用于软件当前控制原始文件和相关联元数据的区块链网络成员ID
[0169] 在区块链中的其他块7782至778N也具有报头、文件和值。然而,与第一块7721不同,其他块中的报头7722至772N中的每一个包括紧邻在前面的块的哈希值。前一个块的哈希值可以仅是前一个块的报头的哈希或者可以是整个前一个块的哈希值。通过在剩余块的每一个中包括前一块的哈希值,可以在逐块的基础上执行从第N个块返回到创始块(和相关联的原始文件)的跟踪,如箭头780所指示的,以建立可审计的和不可变的监管链。
[0170] 其他块中的报头7722至772N中的每一个还可以包括其他信息,例如,版本号、时间戳、随机数、根信息、难度级、一致协议和/或其他参数或与对应的文件和/或区块链相关联的信息。
[0171] 在其他块中的文件7742至774N可以等于原始文件或者可以是创始块中的原始文件的修改版本,这取决于例如执行的处理的类型。所执行的处理的类型可从块到块变化。该处理可以涉及,例如,对在前块中的文件的任何修改,如编辑信息或以其他方式改变文件的内容、将信息从这些文件带走、或将信息添加或附加到这些文件上。
[0172] 另外或可替代地,处理可以涉及仅从在前块复制文件、改变文件的存储位置、分析来自一个或多个在前块的文件、将文件从一个存储或存储器位置移动到另一个、或执行相对于区块链的文件和/或其相关联的元数据的动作。涉及分析文件的处理可以包括例如附加、包括或以其他方式将不同分析、统计或与该文件相关联的其他信息相关联。
[0173] 其他块中的其他块7762至776N中的每一个中的值是唯一的值,并且作为所执行的处理的结果都是不同的。例如,任何一个块中的值对应于先前块中的值的更新版本。该更新反映在被赋值的块的哈希中。块的值因此提供在块中执行什么处理的指示,并且还允许通过区块链返回到原始文件的跟踪。该跟踪确认文件在整个区块链中的监管链。
[0174] 例如,考虑先前块中的文件的部分被编辑、屏蔽或像素化以便保护在文件中示出的人的身份的情况。在这种情况下,包括编辑文件的块将包括与编辑文件相关联的元数据,例如,如何执行编辑、谁执行编辑、编辑发生的时间戳等。元数据可被哈希以形成值。因为块的元数据不同于经哈希以在先前块中形成值的信息,所以所述值彼此不同,且可在解密时恢复。
[0175] 在一个实施例中,当发生以下任何一个或多个时,可以更新先前块的值(例如,计算新的哈希值)以形成当前块的值。在这个示例实施例中,可以通过对以下指出的信息的全部或一部分进行哈希来计算新的哈希值。
[0176] a)如果文件已经以任何方式处理(例如,如果文件被编辑、复制、更改、访问或采取一些其他动作),则新SHA‑2计算的哈希值
[0177] b)文件的新存储位置
[0178] c)所识别的与该文件相关联的新元数据
[0179] d)从一个区块链参与者向另一个区块链参与者传输对文件的访问或控制[0180] 图7D示出根据一种实施方式的可表示区块链790中的区块结构的区块的实施方式。所述区块区块i包括报头772i、文件774i和值776i。
[0181] 报头772i包括先前块区块i‑1的哈希值和附加参考信息,所述附加参考信息例如可以是本文所讨论的任意类型的信息(例如,包括参考、特性、参数等的报头信息)。所有区块参考前一区块的哈希,当然除了创始块。前一区块的哈希值可以仅是前一区块中的报头的哈希或前一区块中的信息的全部或部分(包括文件和元数据)的哈希。
[0182] 文件774i包括多个数据,如按顺序的数据1、数据2、…、数据N。使用描述与数据相关联的内容和/或特性的元数据元数据1、元数据2、…、元数据N对数据加标签。例如,每个数据的元数据可以包括用于指示数据的时间戳、处理数据、指示人员或数据中描绘的其他内容的关键词、和/或可以有助于作为整体建立文件的有效性和内容、并且特别是其使用数字证据的其他特征的信息,例如,如结合以下讨论的实施例所描述的。除了元数据之外,每个数据可以标记有对先前数据的引用REF1、REF2、…、REFN以防止篡改、文件中的间隙、以及通过文件的顺序引用。
[0183] 一旦元数据被分配给数据(例如,通过智能合同),在没有哈希改变的情况下不能更改元数据,这可以容易地被识别用于无效。因此,元数据创建可被访问以供区块链中的参与者使用的信息的数据记录。
[0184] 值776i是哈希值或基于先前讨论的任何类型的信息计算的其他值。例如,对于任何给定的块Blocki,该块的值可被更新以反映为该块执行的处理,例如,新的哈希值、新的存储位置、相关联的文件的新的元数据、控制或访问的传输、标识符、或将被添加的其他动作或信息。尽管每个块中的值被示出为与文件的数据的元数据和标题分离,但是在另一实施例中,该值可以部分地或整体地基于该元数据。
[0185] 一旦形成区块链770,在任何时间点,可以通过查询区块链以获得跨块的值的交易历史来获得文件的不可变托管链。该查询或跟踪过程可开始于解密最当前包括的块(例如,最后(第N)块)的值,然后继续解密其他块的值,直到到达创始块并恢复原始文件为止。解密还可包括在每个块解密报头和文件以及相关联的元数据。
[0186] 解密是基于在每个块中发生的加密的类型来执行的。这可涉及使用私钥、公钥或公钥‑私钥对。例如,当使用非对称加密时,网络中的区块链参与者或处理器可使用预定算法生成公钥和私钥对。公钥和私钥通过某种数学关系相互关联。公钥可公开分发以用作从其他用户接收消息的地址,例如,IP地址或家庭地址。私钥保密并且用于对发送到其他区块链参与者的消息进行数字签名。签名被包括在消息中,使得接收者可以使用发送者的公钥来验证。这样,接收者可以确信只有发送者可能已经发送该消息。
[0187] 产生密钥对可类似于在区块链上创建账户,但不必实际上在任何地方注册。此外,在区块链上执行的每个交易由发送方使用其私钥进行数字签名。此签名确保仅账户的所有者能够跟踪和处理(如果在由智能合同确定的许可的范围内)区块链的文件。
[0188] 图8A和图8B示出了可以合并和使用在本文中的区块链的使用情况的另外的实例。具体地,图8A示出了存储机器学习(人工智能)数据的区块链810的示例800。机器学习依赖于大量历史数据(或训练数据)来构建预测模型以便对新数据进行准确预测。机器学习软件(例如,神经网络等)经常可以筛选数百万个记录以挖掘非直观模式。
[0189] 在图8A的示例中,主机平台820构建并部署用于资产830的预测监视的机器学习模型。这里,主机平台820可以是云平台、工业服务器、web服务器、个人计算机、用户设备等。资产830可以是任何类型的资产(例如,机器或设备等),诸如飞机、机车、涡轮机、医疗机器和设备、油气设备、船、船、交通工具等。作为另一示例,资产830可以是非有形资产,诸如股票、货币、数字硬币、保险等。
[0190] 可以使用区块链810来显著地改进机器学习模型的训练过程802和基于经训练的机器学习模型的预测过程804两者。例如,在802中,不是要求数据科学家/工程师或其他用户收集数据,而是历史数据可由资产830本身(或通过中间物,未示出)存储在区块链810上。这可显著地减少主机平台820在执行预测模型训练时所需的收集时间。例如,使用智能合同,数据可以直接地并且可靠地从其起始位置直接传输到区块链810。通过使用区块链810来确保所收集的数据的安全性和所有权,智能合同可以直接将数据从资产发送到使用该数据来建立机器学习模型的个体。这允许在资产830之间共享数据。
[0191] 可以基于共识机制将所收集的数据存储在区块链810中。共识机制拉入(允许节点)以确保正在记录的数据被验证并准确。所记录的数据被加时间戳、密码签名和不变。因此,它是可审计的、透明的、并且安全的。在某些情况下(即,供应链、医疗保健、物流等),添加直接写入该区块链的IoT设备可增加被记录的数据的频率和准确度。
[0192] 此外,对收集的数据的机器学习模型的训练可采取由主机平台820进行的细化和测试的轮次。每一轮都可以基于附加数据或先前未被考虑来帮助扩展机器学习模型的知识的数据。在802中,不同的训练和测试步骤(以及与其相关联的数据)可以由主机平台820存储在区块链810上。机器学习模型的每个细化(例如,变量、权重等的变化)可以存储在区块链810上。这提供了如何训练模型以及使用什么数据来训练模型的可验证证明。此外,当主机平台820已经实现最终训练的模型时,所得到的模型可以被存储在区块链810上。
[0193] 模型经过训练后,可以将其部署到现场环境,其中,其可以基于最终训练的机器学习模型的执行做出预测/决定。例如,在804中,机器学习模型可以用于诸如飞机、风力涡轮机、保健机器等资产的基于条件的维护(CBM)。在该示例中,从资产830反馈的数据可以被输入到机器学习模型并且用于进行事件预测,诸如故障事件、错误代码等。通过在主机平台820处执行机器学习模型而做出的判定可以存储在区块链810上以提供可审核/可验证的证明。作为一个非限制性示例,机器学习模型可以预测资产830的一部分的未来故障/失败,并且创建替换该部分的警报或通知。此决策后面的数据可由主机平台820存储在区块链810上。在一个实施例中,本文描述和/或描绘的特征和/或动作可以在区块链810上或相对于区块链810发生。
[0194] 区块链的新交易可被一起聚集成新块并被添加到现有哈希值。然后将其加密以创建新块的新哈希。当交易被加密时,其被添加到下一交易列表,等等。结果是各自包含所有先前块的哈希值的区块链。存储这些块的计算机定期比较它们的哈希值以确保它们全部一致。任何不同意的计算机丢弃导致该问题的记录。这种方法对于确保该区块链的抗篡改性是良好的,但它不是完美的。
[0195] 玩该系统的一种方式是不诚实的用户以他们的偏好改变交易列表,但是以保持哈希不变的方式。这可以通过蛮力完成,换言之,通过改变记录、加密结果以及查看哈希值是否相同。并且如果不是,则反复地尝试,直到它找到匹配的哈希为止。区块链的安全性基于这样的信念:普通计算机仅能够在完全不切实际的时间尺度(诸如宇宙的年龄)上执行这种暴力攻击。相比之下,量子计算机要快得多(快1000倍)并且因此造成更大的威胁。
[0196] 图8B示出了实现量子密钥分配(QKD)以防止量子计算攻击的量子安全模区块链852的示例850。在该示例中,区块链用户可以使用QKD来验证彼此的身份。这利用诸如光子的量子粒子发送信息,在不破坏光子的情况下窃听器无法复制该信息。这样,发送者和接收者通过该区块链可以确定彼此的身份。
[0197] 在图8B的示例中,存在四个用户854、856、858和860。每对用户均可在它们之间共享密钥862(即,QKD)。由于在该示例中存在四个节点,因此存在六对节点,因此使用六个不同的秘密密钥862,包括QKDAB、QKDAC、QKDAD、QKDBC、QKDBD和QKDCD。每对可以通过使用量子粒子(例如光子)发送信息来创建QKD,该量子粒子不能被窃听者复制而不破坏它们。这样,一对用户可以确定彼此的身份。
[0198] 区块链852的操作基于以下两个过程:(i)交易的创建,以及(ii)聚集新交易的块的构造。可以类似于传统的区块链网络来创建新交易。每个交易可以包含关于发送者、接收者、创建时间、待转移的金额(或值)、证明发送者拥有用于操作的资金的参考交易的列表等的信息。该交易记录然后被发送到所有其他节点,在那里其被输入到未确认交易池中。这里,两方(即,854‑860中的一对用户)通过提供其共享密钥862(QKD)来认证交易。该量子签名可附接至每个交易,使得其非常难以篡改。每个节点相对于区块链852的本地副本检查它们的条目以验证每个交易具有足够的资金。然而,交易尚未确认。
[0199] 可以使用广播协议以分散方式创建块,而不是对块执行传统的挖掘过程。在预定时间段(例如,秒、分钟、小时等),网络可将广播协议应用于任何未确认的交易,从而实现关于交易的正确版本的拜占庭协议(共识)。例如,每个节点可以拥有私有值(该特定节点的交易数据)。在第一轮中,节点将它们的私有值传送给彼此。在随后的轮次中,节点传送它们在前一轮次从其他节点接收的信息。这里,诚实节点能够在新块内创建完整的一组交易。这个新的区块可以被添加到区块链852中。在一个实施例中,本文描述和/或描绘的特征和/或动作可在区块链852上或相对于区块链852发生。
[0200] 图9示出了支持本文中描述和/或描绘的一个或多个示例性实施方式的示例性系统900。系统900包括计算机系统/服务器902,其可与许多其他通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器902一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统和包括以上系统或设备中的任一个的分布式云计算环境等。
[0201] 计算机系统/服务器902可以在由计算机系统执行的诸如程序模块之类的计算机系统可执行指令的一般上下文中描述。一般而言,程序模块可包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器902可以在分布式云计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质中。
[0202] 如图9所示,云计算节点900中的计算机系统/服务器902以通用计算设备的形式示出。计算机系统/服务器902的组件可以包括但不限于一个或多个处理器或处理单元904、系统存储器906、以及将包括系统存储器906的不同系统组件耦合至处理器904的总线。
[0203] 总线表示若干类型的总线结构中的任何一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构中的任一种的处理器或局部总线。作为示例而非限制,此类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线以及外围组件互连(PCI)总线。
[0204] 计算机系统/服务器902通常包括各种计算机系统可读介质。这样的介质可以是可由计算机系统/服务器902访问的任何可用介质,并且其包括易失性和非易失性介质、可移动和不可移动介质。在一个实施例中,系统存储器906实现其他附图的流程图。系统存储器906可包括易失性存储器形式的计算机系统可读介质,诸如随机存取存储器(RAM)910和/或高速缓存存储器912。计算机系统/服务器902还可以包括其他可移动/不可移动、易失性/非易失性计算机系统存储介质。仅通过示例的方式,存储系统914可以被提供用于从不可移除的非易失性磁性介质(未示出,并且通常被称为“硬盘驱动器”)进行读取和写入。尽管未示出,可以提供用于从可移动非易失性磁盘(例如,“软盘”)读取或向其写入的磁盘驱动器,以及用于从可移动非易失性光盘(如CD‑ROM、DVD‑ROM或其他光学介质)读取或向其写入的光盘驱动器。在这样的情况下,每一个可以通过一个或多个数据介质接口连接到总线。如以下将进一步描绘和描述的,存储器906可以包括具有被配置成用于执行该应用的不同实施例的功能的一组(例如,至少一个)程序模块的至少一个程序产品。
[0205] 具有一组(至少一个)程序模块918的程序/实用程序916,以及操作系统、一个或多个应用程序、其他程序模块和程序数据,可以通过示例而非限制的方式存储在存储器906中。操作系统、一个或多个应用程序、其他程序模块和程序数据中的每一个或它们的一些组合可以包括网络环境的实现方式。程序模块918通常执行如本文所述的应用的不同实施例的功能和/或方法。
[0206] 如本领域技术人员将理解的,本申请的方面可以体现为系统、方法或计算机程序产品。因此,本申请的方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或者结合软件和硬件方面的实施例的形式,在本文中可以统称为“电路”、“模块”或“系统”。此外,本申请的方面可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有体现在其上的计算机可读程序代码。
[0207] 计算机系统/服务器902还可与一个或一个以上外部装置920(例如,键盘、定点装置、显示器922等)通信;和/或使计算机系统/服务器902能够与一个或多个其他计算设备通信的任何设备(例如,网卡、调制解调器等)。这样的通信可经由I/O接口924发生。此外,计算机系统/服务器902可以经由网络适配器926与诸如局域网(LAN)、通用广域网(WAN)和/或公共网络(例如,互联网)的一个或多个网络通信。如所描绘的,网络适配器926经由总线与计算机系统/服务器902的其他部件通信。应当理解,虽然未示出,但是其他硬件和/或软件组件可以与计算机系统/服务器902结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器和数据归档存储系统等。
[0208] 虽然系统、方法和非暂态计算机可读介质中的至少一个的示例性实施例已经在附图中示出并且在前面的详细描述中描述,但是将理解的是,本申请不限于所公开的实施例,而是能够具有由以下权利要求阐述和定义的许多重新排列、修改和替换。例如,不同附图的系统的能力可由本文描述的或分布式架构中的一个或多个模块或组件来执行,并且可包括发射器、接收器或两者的对。例如,由单独模块执行的功能的全部或一部分可由这些模块中的一者或一者以上执行。进一步,本文描述的功能可以在不同时间和关于模块或组件内部或外部的不同事件来执行。此外,在各个模块之间发送的信息可以经由数据网络、互联网、语音网络、互联网协议网络、无线设备、有线设备和/或经由多个协议中的至少一个在模块之间发送。而且,由任何模块发送或接收的消息可直接和/或经由一个或多个其他模块发送或接收。
[0209] 本领域技术人员将理解,“系统”可以体现为个人计算机、服务器、控制台、个人数字助理(PDA)、蜂窝电话、平板计算设备、智能电话或任何其他合适的计算设备或设备的组合。将上述功能呈现为由“系统”执行并不旨在以任何方式限制本申请的范围,而是旨在提供许多实施例的一个实例。实际上,本文公开的方法、系统和装置可以以与计算技术一致的局部和分布式形式来实现。
[0210] 应注意,本说明书中所描述的系统特征中的一些已经被呈现为模块,以便更具体地强调其实现独立性。例如,模块可以被实现为硬件电路,所述硬件电路包括定制超大规模集成(VLSI)电路或门阵列、诸如逻辑芯片、晶体管之类的现成半导体、或其他分立组件。模块也可以在可编程硬件设备(诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备、图形处理单元等)中实现。
[0211] 模块也可以至少部分地在软件中实现,用于由不同类型的处理器执行。所标识的可执行代码单元可以例如包括可以例如被组织为对象、过程或函数的计算机指令的一个或多个物理或逻辑块。然而,所识别的模块的可执行文件不需要在物理上位于一起,而是可以包括存储在不同位置的不同指令,当逻辑地结合在一起时,所述不同指令包括模块并且实现模块的所述目的。进一步,模块可存储在计算机可读介质上,所述计算机可读介质可为(例如)硬盘驱动器、快闪装置、随机存取存储器(RAM)、磁带或用于存储数据的任何其他此类介质。
[0212] 实际上,可执行代码的模块可以是单个指令或许多指令,并且甚至可以分布在几个不同的代码段上、在不同的程序之间、以及跨几个存储器设备。类似地,操作数据可以在本文中在模块内被识别和示出,并且可以以任何合适的形式体现和组织在任何合适类型的数据结构内。操作数据可以作为单个数据集来收集,或者可以分布在不同位置上,包括在不同的存储设备上,并且可以至少部分地仅仅作为电子信号存在于系统或网络上。
[0213] 将容易理解的是,如在此的附图中总体上描述和展示的,本申请的这些部件可以按多种多样的不同构型来安排和设计。因此,实施例的详细描述不旨在限制所要求的应用的范围,而仅代表本申请的所选实施例。
[0214] 本领域普通技术人员将容易理解,可以用不同顺序的步骤和/或用与所公开的配置不同的配置的硬件元件来实践以上内容。因此,虽然已经基于这些优选实施例描述了本申请,但是对于本领域技术人员而言显而易见的是,某些修改、变化和替代构造将是显而易见的。
[0215] 虽然已经描述了本申请的优选实施例,但是应当理解的是,所描述的实施例仅是说明性的,并且当考虑对其的全部范围的等同物和修改(例如,协议、硬件设备、软件平台等)时,本申请的范围将仅由所附权利要求书限定。