会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 区块链账本 / 区块链账本的运行时自校正

区块链账本的运行时自校正

申请号 CN201980019518.0 申请日 2019-03-08 公开(公告)号 CN111868689A 公开(公告)日 2020-10-30
申请人 国际商业机器公司; 发明人 S·A·巴塞特; D·N·E·迪伦伯格; P·诺沃特尼; 张琦;
摘要 示例操作可包括以下一项或多项操作:经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块,从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,并从所选对等点中检索替换数据块,基于与所述区块链相关联的先前存储的验证块中的一个或多个来确定所述替换数据块是否有效,以及响应于确定所述替换数据块有效的,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。
权利要求

1.一种用于管理损坏的数据块的计算系统,该系统包括:

存储分布式账本的存储器;以及

处理器,配置为经由账本验证线程识别存储在所述分布式账本上的区块链内的损坏的数据块,从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,从所选对等点中检索替换数据块,基于与所述区块链相关联的先前存储的验证块中的一个或多个,确定所述替换数据块是否有效,并响应于确定所述替换数据块有效,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。

2.如权利要求1所述的计算系统,其中,所述账本验证线程包括在所述存储器中运行并且具有与构成所述分布式账本的文件分开存储的已编译代码的程序。

3.如前述权利要求中的任一项所述的计算系统,其中,所述处理器还被配置为:当确定所述损坏的数据块已经改变了其原始数据块的块大小时,检索用于所述区块链中的后续数据块的替换数据块。

4.如前述权利要求中的任一项所述的计算系统,其中,所述先前存储的验证块包括存储在执行所述账本验证线程的区块链节点的所述分布式账本的备份副本中的正确块。

5.如前述权利要求中的任一项所述的计算系统,其中,所述处理器被配置为顺序地扫描所述分布式账本的数据块,并基于在运行时生成的所述顺序扫描的数据块的各自的散列值,验证所述顺序扫描的数据块以识别所述损坏的数据块。

6.如前述权利要求中的任一项所述的计算系统,其中,所述处理器被配置为:将所述分布式账本与所述分布式账本的备份副本进行逐位比较,以基于所述逐位比较来识别所述损坏的数据块。

7.如前述权利要求中的任一项所述的计算系统,其中,所述处理器被配置为基于与当前从所述分布式账本中选择的数据块相关联的块访问模式,从所述分布式账本中预取数据块,并且根据所述预取数据块的各个散列值验证所述预取数据块,以从所述预取数据块中识别出所述损坏的数据块。

8.如前述权利要求中的任一项所述的计算系统,其中,所述处理器被配置为基于各个数据块的先前生成的校验和值来顺序地验证所述分布式账本的数据块,以基于所述校验和值来识别所述损坏的数据块。

9.如前述权利要求中的任一项所述的计算系统,其中,所述处理器被配置为从所述分布式账本中随机选择数据块,并且基于所述随机选择的数据块的各个散列值来验证所述随机选择的数据块,以从所述随机选择的数据块中识别所述损坏的数据块。

10.一种用于管理损坏的数据块的方法,该方法包括:

经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块;

从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,并从所选对等点中检索替换数据块;

基于与所述区块链相关联的先前存储的验证块中的一个或多个来确定所述替换数据块是否有效;以及响应于确定所述替换数据块有效的,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。

11.如权利要求10所述的方法,其中,所述账本验证线程包括在存储器中运行并且具有与构成所述分布式账本的文件分开存储的已编译代码的程序。

12.如权利要求10或11所述的方法,其中,所述检索还包括:当确定所述损坏的数据块已经改变了其原始数据的块大小时,检索用于所述区块链中的后续数据块的替换数据块。

13.如权利要求10至12中任一项所述的方法,其中,所述先前存储的验证块包括存储在执行所述账本验证线程的区块链节点的所述分布式账本的备份副本中的正确块。

14.如权利要求10至13中的任一项所述的方法,其中,所述经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块包括:顺序地扫描所述分布式账本的数据块;

以及基于在运行时生成的所述顺序扫描的数据块的各自的散列值来验证所述顺序扫描的数据块以识别所述损坏的数据块。

15.如权利要求10至14中的任一项所述的方法,其中,所述经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块包括:将所述分布式账本与所述分布式账本的备份副本进行逐位比较,以基于所述逐位比较来识别所述损坏的数据块。

16.如权利要求10至15中的任一项所述的方法,其中,所述经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块包括:基于与当前从所述分布式账本中选择的数据块相关联的块访问模式,从所述分布式账本中预取数据块,并且根据所述预取数据块的各个散列值验证所述预取数据块,以从所述预取数据块中识别出所述损坏的数据块。

17.如权利要求10至16中的任一项所述的方法,其中,所述经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块包括:基于各个数据块的先前生成的校验和值来顺序地验证所述分布式账本的数据块,以基于所述校验和值来识别所述损坏的数据块。

18.如权利要求10至17中的任一项所述的方法,其中,经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块包括:从所述分布式账本中随机选择数据块,并且基于所述随机选择的数据块的各个散列值来验证所述随机选择的数据块,以从所述随机选择的数据块中识别所述损坏的数据块。

19.一种用于管理损坏的数据块的计算机程序产品,所述计算机程序产品包括:

一种计算机可读存储介质,该计算机可读存储介质可由处理电路读取并存储由所述处理电路执行的指令,以执行如权利要求10至18中任一项所述的方法。

20.一种存储在计算机可读介质上并且可加载到数字计算机的内部存储器中的计算机程序,该计算机程序包括软件代码部分,当所述程序在计算机上运行时用于执行如权利要求10至18中任一项所述的方法。

说明书全文

区块链账本的运行时自校正

技术领域

[0001] 本申请总体上涉及错误检测,并且更具体地,涉及一种计算节点,其在运行时自动检测分布式账本(例如,区块链)上的损坏的数据块,并基于存储在共享相同的分布式账本的另一个计算节点上的数据,对损坏的数据块进行自我校正。

背景技术

[0002] 账本通常被定义为记录事务的账目簿。同时,分布式账本是数字账本,其可在多个计算节点之间全部或部分复制。可以通过加密属性(也称为加密分布式账本(CDL))来保护分布式账本。CDL至少可以具有以下某些特征:不可逆性(例如,一旦记录了事务就无法撤消)、可访问性(例如,任何一方都可以全部或部分访问CDL)、按时间顺序和时间戳记(例如,所有参与方都知道何时将事务添加到账本中以及以什么顺序添加)、基于共识的事务(仅当事务被网络上的各方通常一致同意才添加)、可验证性(全部事务可以通过密码验证)和/或等等。加密分布式账本的一个非限制性示例是区块链。
[0003] 分布式账本,例如区块链,通常存储连续增长的记录列表。尽管通常用于金融事务,但是区块链可以存储其他数据,例如与商品和服务有关的信息(即产品、包装、状态等)、数字货币、股票、权益、软件模型、专有数据以及其他信息。分散式方案为分散式网络提供权限和信任,并使它的节点能够连续和顺序地将其事务记录在公共或私有“块”上,从而创建称为区块链的独特“链”。密码,通过散列码,用于确保事务源的身份验证并删除中央中介。分布式账本由于其不可变的特性而受到保护,不会被篡改和修改。例如,每个块可以包含时间戳和到前一个块的链接。区块链可用于保存、跟踪、转移和验证信息。区块链网络内的区块链对等点可以通过与一个或多个其他区块链节点的背书和共识协议,触发到区块链账本的事务,确保一个实体无法自行更改区块链账本。
[0004] 传统上,区块链对等节点仅将新数据块附加到区块链账本。也就是说,区块链节点通常仅添加新数据块,而不是修改或以其他方式篡改先前存储和现有的数据块。这样做的原因之一是因为分布式账本的特性是不变的,并且在将新数据添加到分布式账本之前需要背书和共识过程。但是,由于各种原因,例如恶意攻击、系统故障、软件错误等,区块链账本中的数据块可能会随时间损坏。因此,需要一种用于修复区块链账本中不想要的块的机制。
[0005] 因此,在本领域中需要解决前述问题。

发明内容

[0006] 从第一方面来看,本发明提供一种用于管理损坏的数据块的计算系统,该系统包括:存储分布式账本的存储器;以及处理器,配置为经由账本验证线程识别存储在所述分布式账本上的区块链内的损坏的数据块,从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,从所选对等点中检索替换数据块,基于与所述区块链相关联的先前存储的验证块中的一个或多个,确定所述替换数据块是否有效,并响应于确定所述替换数据块有效,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。
[0007] 从第一方面来看,本发明提供一种用于管理损坏的数据块的方法,该方法包括:经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块;从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,并从所选对等点中检索替换数据块;基于与所述区块链相关联的先前存储的验证块中的一个或多个来确定所述替换数据块是否有效;以及响应于确定所述替换数据块有效的,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。
[0008] 从另一方面来看,本发明提供了一种用于管理损坏的数据块的计算机程序产品,该计算机程序产品包括计算机可读存储介质,该计算机可读存储介质可由处理电路读取并存储由处理电路执行的指令,以执行用于执行本发明步骤的方法。
[0009] 从另一方面来看,本发明提供了一种存储在计算机可读介质上并且可加载到数字计算机的内部存储器中的计算机程序,该计算机程序包括软件代码部分,当所述程序在计算机上运行时用于执行本发明的步骤。
[0010] 一个示例实施例可以提供一种方法,该方法包括以下至少一项:经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块,从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,并从所选对等点中检索替换数据块,基于与所述区块链相关联的先前存储的验证块中的一个或多个来确定所述替换数据块是否有效,并响应于确定所述替换数据块有效的,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。
[0011] 另一示例实施例可以提供一种系统,该系统包括至少一个存储分布式账本的存储器,以及处理器,该处理器被配置为经由账本验证线程识别存储在所述分布式账本上的区块链内的损坏的数据块,从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,从所选对等点中检索替换数据块,基于与所述区块链相关联的先前存储的验证块中的一个或多个,确定所述替换数据块是否有效,并响应于确定所述替换数据块有效,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。
[0012] 另一示例实施例可以提供一种包括指令的非暂时性计算机可读介质,当指令被处理器读取时,该指令使处理器执行以下操作中的至少一项:经由账本验证线程识别存储在所述分布式账本上的区块链内的损坏的数据块,从可访问所述分布式账本的多个区块链对等点中选择一个区块链对等点,从所选对等点中检索替换数据块,基于与所述区块链相关联的先前存储的验证块中的一个或多个,确定所述替换数据块是否有效,并响应于确定所述替换数据块有效,在所述分布式账本上使用所述替换数据块替换所述损坏的数据块。

附图说明

[0013] 现在将仅通过示例的方式,参考附图来描述本发明的实施例,其中:
[0014] 图1A是示出根据示例实施例的包括多个区块链对等点的区块链网络的图。
[0015] 图1B是示出根据示例实施例的与分布式账本交互的账本验证线程的图。
[0016] 图2A是示出根据示例实施例的对等节点区块链架构配置的图。
[0017] 图2B是示出根据示例实施例的用于自校正损坏的块的区块链节点之间的事务流的图。
[0018] 图3是示出根据示例实施例的许可的区块链网络的图。
[0019] 图4是示出根据示例实施例的账本校正过程的多个示例的图。
[0020] 图5是示出根据示例实施例的用于自校正分布式账本的损坏的数据块的方法的流程图。
[0021] 图6A是示出了根据示例实施例的,被配置为根据本文所述的一个或多个操作在区块链上执行各种操作的物理基础设施的图。
[0022] 图6B是示出了根据示例实施例的,在缔约方之间的智能合约配置和被配置为在区块链上强制执行智能合约条款的中介服务器的图。
[0023] 图7是示出被配置为支持一个或多个示例实施例的计算机系统的图。

具体实施方式

[0024] 将容易理解的是,如本文的附图中总体上描述和图示的,即时组件可以以多种不同的配置来布置和设计。因此,如附图所示,对方法、设备、非暂时性计算机可读介质和系统中的至少一个的实施例的以下详细描述并非旨在限制所要求保护的本申请的范围,而是仅代表所选实施例。
[0025] 在整个说明书中描述的即时特征、结构或特性可以在一个或多个实施例中以任何合适的方式组合。例如,在整个说明书中,短语“示例实施例”、“一些实施例”或其他类似语言的使用是指这样的事实:结合该实施例描述的特定特征、结构或特性可以包括在至少一个实施例中。因此,在整个说明书中,短语“示例实施例”、“在一些实施例中”、“在其他实施例中”或其他类似语言的出现不一定全部指代同一组实施例,并且所描述的特征、结构、或特征可以以任何合适的方式组合在一个或多个实施例中。
[0026] 另外,尽管在实施例的描述中可能已经使用术语“消息”,但是本申请可以应用于许多类型的网络数据,诸如分组、帧、数据报等。术语“消息”还包括分组,帧、数据报及其任何等同形式。此外,尽管在示例性实施例中可以描绘某些类型的消息和信令,但是它们不限于特定类型的消息,并且本申请不限于特定类型的信令。
[0027] 常规地,当实现分布式账本的多个节点在新块上达成共识时,区块链对等点仅通过将新数据块附加或以其他方式提交到现有的区块链来修改分布式账本。但是,区块链对等点无法验证分布式账本的先前存储的块。换句话说,区块链对等点无法确保分布式账本是准确的。结果,损坏的数据块可能存在于分布式账本的本地副本中,从而导致整个区块链网络出现问题。
[0028] 示例实施例提供了方法、设备、网络和/或系统,该方法、设备、网络和/或系统通过实现能够验证分布式账本上先前存储的块的账本验证线程来提供对这些问题的解决方案。账本验证线程可以使用各种不同的验证方法来检测数据块何时已损坏。响应于识别出损坏的数据块,账本验证线程可以从同一通道上的另一区块链对等点检索替换数据块,验证替换数据块,并用经验证的替换数据块替换损坏的数据块。因此,当账本上的一个或多个块由于恶意活动、软件错误、硬件故障等而损坏时,账本验证线程可以自我修复(即,自我纠正)分布式账本。各种触发器可以启动运行时验证过程,例如周期性的时间间隔、账本的更改、来自管理员的请求等。尽管本文的描述和附图是根据区块链描述的,但本申请同样适用于任何类型的分布式账本。
[0029] 账本(也称为数字账本、分布式账本、不变账本等)是区块链系统中的关键组件,因为它包含由区块链网络执行和提交的所有事务的记录。账本还具有其他元数据,例如事务的签名和数据块的散列值。因此,账本的无瑕疵和完整性对于区块链的正确有效运作至关重要。在典型的区块链网络中,每个区块链对等节点都维护账本的完整副本,并将其作为一系列文件存储在存储介质上,这容易受到破坏。损坏可能由于多种原因而发生,例如,恶意用户可能侵入对等节点并有意修改存储账本的文件,可能发生硬件故障,软件错误可能损坏账本文件等。
[0030] 在诸如Hyperledger Fabric的许多区块链系统中,对等节点的工作方式是,它仅将新块附加到账本的末尾,并且不定期验证账本中的现有块。结果,无法及时检测到账本中的损坏区块,由于许多原因,这可能对区块链系统有害。例如,在对等点启动时,对等点可能由于损坏的账本而无法启动。作为另一个示例,在对等点运行时期间,当区块链分析工作负载在对等节点中运行并且需要访问已损坏块中的事务时,将无法成功访问该事务。因此,由于存在损坏的块,分析工作负载可能会失败。
[0031] 为了减少损坏的块对区块链系统的功能的影响,示例实施例针对用于数字账本(例如,区块链账本)的运行时自校正机制。根据各方面,在对等节点上周期性地运行独立的线程(即,账本验证线程),并验证该对等账本中的块。如果检测到损坏的块,则账本验证线程可以选择可能具有损坏块的正确版本的另一个对等点(即对等点P2),并从另一个对等点请求替换块。在接收到请求之后,P2可以验证请求对等点,并且如果请求对等点合法,则发送相应的块。然后,在接收到替换块之后,P1对该块进行验证,如果接收到的块有效,则替换损坏的块。否则,当从P2接收到的块无效时,P1可能会向不同的对等点(即P3)询问相同的块。提供该系统的方式使得用户(例如管理员等)可以以许多方式配置账本验证线程,例如线程运行的频率以及需要验证账本的哪一部分。
[0032] 与账本不同,账本是存储介质上的一组文件,账本验证线程是在区块链对等点的存储器中运行或以其他方式连接至区块链对等点的程序。程序的编译代码可以与账本分开存储。具体细节可能取决于实现。例如,如果账本验证线程被实现为对等点的一部分,则账本验证线程程序可以以与对等程序相同的方式受到保护(即,存储在安全容器中的隔离位置中)。作为另一个示例,如果账本验证线程被实现为独立程序,则账本验证线程可以具有与对等程序无关的安全性配置,从而允许管理员配置更高的安全性设置。在任何一种情况下,账本验证线程程序都可能与账本完全分离,并且损坏或行为不当的原因将无法访问该程序。同样,账本验证线程可能对在区块链上进行事务的用户完全隐藏。也就是说,区块链用户无法与线程进行交互,但是,区块链管理员可以配置该机制,并启动和停止该机制。
[0033] 如果账本验证线程被实现为对等点的一部分,则账本验证线程程序可以作为对等点代码的一部分被安装(添加),并且与对等点一起启动和停止。作为另一个示例,如果账本验证线程被实现为独立程序,则管理员可以将该线程用作独立软件来连接到账本并按需运行算法。此外,如果账本验证线程被实现为对等点的一部分,则验证可以是后台进程/线程,并且可以通过各种可能的方式触发,包括但不限于:(1)线程定期验证账本的形式,因此,在完成上一次扫描后的特定时间段将触发该线程,(2)当对等节点的资源(即CPU、内存等)利用率低于阈值时,可能会触发线程,(3)线程可以由管理员显式触发。如果账本验证线程是作为独立程序实现的,则管理员可以按需运行账本验证线程。
[0034] 图1A示出了根据示例实施例的包括多个区块链对等点的区块链网络100。参照图1A的示例,网络100包括区块链节点110、112、114、116和118以及120,其经由诸如因特网、专用网络等的网络130连接。在此示例中,任何节点(110-120)可以充当一个或多个角色,例如对等点、代言人、订购者等。根据各个方面,节点110-120中的任何一个都可以具有账本验证线程在其中安装并运行,以验证/确认由相应节点存储的分布式账本的数据块。
[0035] 例如,区块链节点110可以使其中的账本验证线程执行以验证由区块链节点110存储的分布式账本的副本。当账本验证线程确定存在损坏的块时,账本验证线程可能导致区块链节点110向其他节点112、114、116、118和120中的任何一个发送对替换区块的请求。作为响应,可以获取替换区块,并且区块链节点110可以验证该替换区块。当成功验证时,区块链节点110可以用替换块替换损坏的块。然而,如果验证不成功,则区块链节点110可以向另一节点请求替换块。
[0036] 图1B示出了根据示例实施例的与分布式账本180交互的账本验证线程160。在该示例中,账本验证线程160(即,程序代码和编译代码)和分布式账本180的文件两者都存储在存储器150中,使得账本验证线程160和分布式账本180彼此隔离。根据各种实施例,账本验证线程160可以包括运行在区块链对等节点上的程序,该程序检查该对等点上的分布式账本180的完整性。账本验证线程160可以包括:损坏检测器模块162,用于检测账本上的一个或多个已损坏的数据块;受影响块模块164,用于检测账本上的哪些块受到影响;请求者模块166,用于从一个或多个相邻对等节点检索用于损坏的块的正确的块,以及替换器模块168,用于用替换数据块至少替换损坏的数据块(并且可能替换其他尾随的数据块)。
[0037] 损坏块检测器模块162可以实施各种损坏检测过程。一个对等点可以包含许多账本,并且每个账本在逻辑上都组织在一个链表中。链表中的每个项目都代表一个块,并且同一账本中的不同块通过散列指针相连。每个块包括标题(header)部分和数据部分。块标题包含前一个块的散列值。基本上 ,如果满足以下条件 :hash (B) ==nextBlock.Header.prevBlockHash,则将块B视为有效。否则,块B被视为损坏的块。
[0038] 根据各种实施例,可以使用多种方法中的一种或多种方法来检测账本中的破损块。例如,在171中,损坏检测可以包括顺序扫描账本并通过比较散列值来验证每个块,这可能是CPU密集型的。
[0039] 作为另一个示例,损坏检测可以包括在步骤172中对账本及其备份进行逐位比较,该备份先前已存储在存储器150中。该方法可以对账本及其备份以流方式进行比较,比计算散列值更快。但是账本备份可能并不总是可用,并且容易受到攻击。
[0040] 作为另一个示例,在173中,损坏检测可以基于从基于当前请求块的分析工作负载的访问模式预取数据块,等等。在该示例中,可以预取并验证一些块。预取操作可以基于启发式信息,该启发式信息告知块之间的关系。基于这种启发式方法,当访问一个块时,预取并验证相关的块。例如,启发式可以基于块访问的局部性原理,该原理观察到当访问一个块时,在不久的将来访问附近的块的可能性很高。
[0041] 作为另一示例,在174中,损坏检测器可以实现校验和算法(例如,循环冗余校验(CRC)等)以验证块。该方法可以为每个块创建校验和,并使用该校验和来验证块。快速的校验和生成算法(例如CRC)比计算块的散列值更快。但是校验和数据也容易受到攻击。CRC的工作方式可能与基于散列的方法有所不同。在这种情况下,CRC算法可用于创建块总和的并行列表。将检查这些总和而不是散列。这样做的好处是这种方法的速度更高。由于数据保存在检查算法和处理程序的内存中,因此这些数据不容易受到账本容易受到的攻击。
[0042] 作为另一个示例,在175中,损坏检测可以随机选择一些块,但不是全部,进行验证。与验证整个账本相比,此方法消耗的CPU更少,但这是一种概率方法,无法保证账本中每个块的正确性。
[0043] 当接收到替换块时,对等点可以以不同的方式确定该块的有效性,包括使用存储在随后的块中的该块的散列,这可以是默认的区块链动作。作为另一示例,对等点可以使用存储在对等点的存储器中的块的散列。在此示例中,对等点可以在其启动时遍历并验证对等点时获得此散列。
[0044] 还应当理解,可以以不同的方式选择对等点。例如,当一个块被检测为损坏的块时,对等点(即对等点1)需要联系另一个对等点以获得正确的块。为了获得账本更正过程的更好性能,对等点可以选择具有更好网络连接的另一个对等点。对等点可以跨越不同的位置,并且不同对等点之间的网络质量有时会有所不同。更好的网络连接可加速块传输,从而可以提高账本更正过程的性能。例如,可以通过“ping”的延迟来衡量网络连接的质量。作为另一个示例,对等点可以选择不那么忙的另一对等点。在不同对等节点上运行的工作负载是不同的。例如,在Hyperledger Fabric中,某些对等节点仅提交块,而其他一些对等节点也需要模拟事务。因此,最好选择运行较少密集工作负载的对等节点,以便该对等节点可以更快地响应请求,这也可以提高账本更正过程的性能。
[0045] 如本文所述,区块链是分布式系统,其包括彼此通信的多个节点。区块链运行称为链码(例如,智能合约等)的程序,保存状态和账本数据并执行事务。一些事务是在链码上调用的操作。通常,区块链事务通常必须由某些区块链成员“认可”,只有认可的事务才能提交给区块链,并影响区块链的状态。其他不认可的事务将被忽略。可能存在一个或多个用于管理功能和参数的特殊链码,统称为系统链码。
[0046] 节点是区块链系统的通信实体。在不同类型的多个节点可以在同一物理服务器上运行的意义上,“节点”可以执行逻辑功能。节点在信任域中分组,并与以各种方式控制它们的逻辑实体相关联。节点可以包括不同的类型,例如客户端或提交客户端节点,其向背书者(例如,对等点)提交事务调用,并且将事务提议广播到订购服务(例如,订购节点)。另一类节点是对等节点,它可以接收客户提交的事务,提交事务并维护状态和区块链事务账本的副本。尽管不是必需的,但对等点也可以充当背书人的角色。订购服务节点或订购者是为所有节点运行通信服务的节点,并实现交付保证,例如在提交事务和修改区块链的世界状态时向系统中的每个对等节点广播,这是初始区块链事务的另一个名称,通常包含控制和设置信息。
[0047] 如本文所述,账本是区块链的所有状态转变的有序的、防篡改的记录。状态转换可以由参与方(例如,客户端节点、订购节点、背书者节点、对等节点等)提交的链码调用(即,事务)引起。事务可能导致一组资产键值对作为一个或多个操作数(例如创建、更新、删除等)被提交到账本。账本包括一个区块链(也称为链),该区块链用于将不可变的顺序记录存储在块中。账本还包括一个状态数据库,用于维护区块链的当前状态。每个通道通常有一个账本。每个对等节点都为其所属的每个通道维护一个账本的副本。
[0048] 链是事务日志,其被构造为散列链接的块,并且每个块包含N个事务的序列,其中N等于或大于1。区块标题包括该区块事务的散列值,以及前一个区块标题的散列值。以这种方式,账本上的所有事务都可以被排序并密码链接在一起。因此,在不破坏散列链接的情况下不可能篡改账本数据。最近添加的区块链的块的散列表示链上该块之前发生的每笔事务,从而可以确保所有对等节点处于一致且受信任的状态。该链可以存储在对等节点文件系统(即本地、附加存储、云等)上,从而有效地支持区块链工作负载的仅附加性质。
[0049] 不可变账本的当前状态表示链式事务日志中包括的所有密钥的最新值。因为当前状态代表通道已知的最新键值,所以有时将其称为世界状态。链码调用针对账本的当前状态数据执行事务。为了使这些链码交互有效,可以将密钥的最新值存储在状态数据库中。状态数据库可能只是链中事务日志的索引视图,因此可以随时从链中重新生成。状态数据库可以在对等节点启动时以及在接受事务之前自动恢复(或根据需要生成)。
[0050] 图2A示出了根据示例实施例的区块链架构配置200。参照图2A,区块链架构200可以包括某些区块链元素,例如,一组区块链节点202。区块链节点202可以包括一个或多个节点204-210。(仅通过示例描述了4个节点)。这些节点参与了许多活动,例如区块链事务添加和验证过程(共识)。区块链节点204-210中的一个或多个可以认可事务并且可以为架构200中的所有区块链节点提供订购服务。区块链节点可以发起区块链认证并且试图写入存储在区块链层216中的区块链不可变账本,其副本也可以存储在基础的物理基础设施214上。区块链配置可以包括一个或多个应用程序224,这些应用程序链接到应用程序编程接口(API)222以访问和执行存储的程序/应用程序代码220(例如,链码、智能合约等),其可以根据参与者寻求的自定义配置进行创建,并且可以维护自己的状态,控制自己的资产并接收外部信息。可以将其部署为事务,并通过附加到分布式账本中来安装在所有区块链节点204-210上。
[0051] 区块链基础或平台212可包括区块链数据、服务(例如,密码信任服务、虚拟执行环境等)的各个层,以及可用于接收和存储新事务并提供正在寻求访问数据条目的审核员的访问。区块链层216可以暴露接口,该接口提供对处理程序代码和使用物理基础设施214所必需的虚拟执行环境的访问。加密信任服务218可以用于验证诸如资产交换事务之类的事务并保持信息私有。
[0052] 图2A的区块链架构配置可以通过区块链平台212暴露的一个或多个接口以及提供的服务来处理和执行程序/应用代码220。代码220可以控制区块链资产。例如,代码220可以存储和传输数据,并且可以由节点204-210以智能合约和具有对其执行的条件或其他代码元素的相关链码的形式执行。作为非限制性示例,可以创建智能合约以执行提醒、更新和/或其他关于更改、更新等的通知。智能合约本身可以用于标识与授权、访问要求和使用账本相关的规则。例如,信息226可以由包括在区块链层216中的一个或多个处理实体(例如,虚拟机)进行处理。结果228可以包括添加到账本的数据块。物理基础设施214可以用于检索本文描述的任何数据或信息。
[0053] 在链码内,可以通过高级应用程序和编程语言来创建智能合约,然后将其写入区块链中的块中。智能合约可以包括可执行代码,该可执行代码被注册、存储和/或复制到区块链(例如,区块链对等点的分布式网络)。事务是可以响应于与智能合约相关联的条件得到满足而执行的智能合约代码的执行。智能合约的执行可以触发对数字区块链账本状态的可信修改。由智能合约执行引起的对区块链账本的修改可以通过一个或多个共识协议在整个区块链对等点的分布式网络中自动复制。
[0054] 智能合约可以以键值对的格式将数据写入区块链。此外,智能合约代码可以读取存储在区块链中的值,并将其用于应用程序操作中。智能合约代码可以将各种逻辑操作的输出写入到区块链中。该代码可用于在虚拟机或其他计算平台中创建临时数据结构。写入区块链的数据可以是公开的和/或可以加密并维护为私有的。智能合约使用/生成的临时数据由提供的执行环境保存在内存中,一旦识别出区块链所需的数据,便将其删除。
[0055] 链码可包括具有附加特征的智能合约的代码解释。如本文所述,链码可以是部署在计算网络上的程序代码,在链上,链码验证器在共识过程中一起执行和验证。链码接收散列,并从区块链中检索与使用先前存储的特征提取器创建的数据模板关联的散列。如果散列标识符的散列值与从存储的标识符模板数据创建的散列值匹配,则链码将授权密钥发送到请求的服务。链码可以将与密码详细信息关联的数据写入区块链。
[0056] 图2B示出了根据示例实施例的,在区块链节点之间的用于自校正损坏的块的事务流250。在该示例中,区块链节点204自动检测并自我修复由区块链节点204管理的分布式账本上的损坏的数据块。这里,损坏的账本可以是由区块链节点204存储的本地副本。在231中,运行在区块链节点204上的账本验证线程使用以上在图1B的171-175中描述的一种或多种方法来执行账本验证过程。在232中,区块链节点204上的账本验证线程检测到损坏的块。在233中,区块链节点204识别并选择要从其接收替换块的区块链节点206,并发送对替换块的请求,该请求可以包括损坏的块的ID并且还可以包括一个或多个尾随的块的ID。当请求到达区块链节点206时,它可能不会由区块链节点206的账本验证线程处理,而是可能由Hyperledger Fabric中存在的,侦听此类请求的内置例程/函数处理并返回相应的块。
[0057] 在234中,选定的区块链节点206使用一个或多个加密密钥、块数据等来验证从其接收到请求的区块链节点204,并将替换块发送到区块链节点204。这里。区块链节点204在235中验证损坏的块,并且如果该块有效,则区块链节点204可以用从区块链节点206接收的替换块来替换该损坏的块。然而,在该示例中,在236中,区块链节点204的账本验证线程确定替换块无效。因此,在236,账本验证线程选择下一区块链节点208,并且在237,使区块链节点204向下一区块链节点208发送对替换块的请求。在238,区块链节点208验证区块链节点204,并发送区块链节点204请求的替换块的副本。在239中,在区块链节点204上执行的账本验证线程确认替换块的有效性,并在240替换损坏的块。
[0058] 图3示出了许可的区块链网络300的示例,其特征在于分布式的、分散的对等点体系结构以及管理用户角色和许可的证书颁发机构318。在该示例中,区块链用户302可以将事务提交至许可的区块链网络310。在该示例中,该事务可以是部署、调用或查询,并且可以通过利用SDK的客户端应用程序直接通过REST API等来发布。可信商业网络可以提供对诸如审计员(例如,美国股票市场中的证券事务委员会)之类的监管者系统314的访问。同时,节点312的区块链网络运营商系统管理成员许可,诸如将监管者系统310注册为“审计员”,并且将区块链用户302注册为“客户端”。审计员可能只限于查询账本,而客户可以被授权部署、调用和查询某些类型的链码。
[0059] 区块链开发者系统316编写链码和客户端应用程序。区块链开发者系统316可以通过REST接口将链码直接部署到网络。为了将来自传统数据源330的凭证包括在链码中,开发者系统316可以使用带外(out-of-band)连接来访问数据。在该示例中,区块链用户302通过对等节点312连接到网络。在进行任何事务之前,对等节点312从证书颁发机构318检索用户的注册和事务证书。在某些情况下,区块链用户必须拥有这些数字证书以便在许可的区块链网络310上进行事务。同时,尝试驱动链码的用户可能需要在传统数据源330上验证其凭据。为了确认用户的授权,链码可以使用通过传统处理平台320到该数据的带外连接。
[0060] 图4示出了根据示例实施例的账本校正过程的多个示例。在该示例中,区块链账本400由包括三个文件(即,文件1、2和3)的多个文件组成。在此示例中,账本验证线程检测到存储在第二文件(文件410)中的损坏的数据块(块A)。在诸如Hyperledger Fabric之类的区块链系统中,账本在物理上被组织为多个固定大小的文件,并且块以连续的方式存储在这些文件中。如图4的示例所示,第二文件410中的块A被检测为损坏的块。同时,块A’是已从另一个对等点检索并经过验证的正确块。如果块A的大小不等于块A'的大小,则简单地用块A'替换块A可能会覆盖块B或在块A和块B之间留出空隙(并导致除了块B之外的其他任何尾随块出现问题)。因此,账本校正过程可以首先确定/检查第二文件410的大小是否已经改变。
[0061] 如图4的示例所示,账本验证线程执行的账本校正过程可以替换第二文件410中块A之后的所有块。例如,在过程411中,账本校正过程替换块A,B和C,因为数据块A的大小小于应有的大小。同时,在过程412的示例中,账本校正过程替换了块A,B和C,因为数据块A的大小大于其应有的大小。否则,当数据块A的大小不变(并且不改变文件的整体大小)时,只有块A可以被覆盖。
[0062] 如将理解的,块被存储在文件系统中的文件中。通常,一个文件包含一系列连续的块。因此,如果恶意用户打开了包含块A的文件,并将该文件中的一些随机字节添加到块A所在的位置,则块A会变得更大,如进程412的情况。类似地,如果恶意用户删除了一些在该文件中的字节中,块A的大小将与过程411中的情况一样变小。用数据块A'替换数据块A时,块A和块A'需要从文件的相同偏移处开始,但是,块A'的大小大于块A的大小,并且块A和块B在原始账本文件中相邻。因此,如果仅用块A’代替块A,则块B的一部分将被块A′覆盖,这是不可接受的。
[0063] 作为另一示例,如果块A损坏并且变得更大,则仅用块A`替换块A会在块A`和块B之间留下文件孔,这也破坏了账本的完整性。此外,当块A损坏并变得更大或更小时,这将偏移文件中所有其后的块。因此,在这种情况下,尽管只有区块A遭到破坏,但该特定文件中的所有后续区块(即本例中的区块B和区块C)仍应替换以保证整个账本的完整性。因此,即使块B和C没有损坏,为了更正整个文件,也需要按照正确的顺序全部重写这些块,以保证文件的连续性。
[0064] 同时,在过程413的第三种情况下,块A损坏,但其大小不变。换句话说,块A’的大小等于块A的大小,并且此文件中所有其后的块的偏移保持不变。因此,仅用块A’替换块A即可修复损坏的块A。同时,不会覆盖块B,也不会在块A’和块B之间存在文件孔。
[0065] 图5示出了根据示例实施例的用于自校正分布式账本的损坏的数据块的方法500。例如,方法500可以由可以通过云平台、服务器、台式计算机、用户设备等实现的诸如区块链对等节点之类的计算节点来执行。参照图5,在510中,该方法可以包括经由账本验证线程来识别存储在分布式账本上的区块链内的损坏的数据块。例如,账本验证线程可以包括在内存中运行的程序,该程序具有与组成分布式账本的文件分开存储的已编译代码。分布式账本文件可以与与分布式账本交互的用户/节点隔离或隐藏。
[0066] 根据各个方面,可以通过各种方法中的任何一种来检测一个或多个损坏的数据块。例如,经由账本验证线程来识别损坏的数据块可以包括顺序地扫描分布式账本的数据块,并且基于在运行时生成的顺序扫描的数据块的各自的散列值来验证顺序扫描的数据块以标识损坏的数据块。作为另一个示例,经由账本验证线程来识别损坏的数据块可以包括:将分布式账本与分布式账本的备份副本进行逐位比较,以基于该逐位比特识别损坏的数据块。作为另一示例,经由账本验证线程来识别损坏的数据块可以包括:基于与当前从分布式leger中选择的数据块相关联的块访问模式,从分布式账本中预取数据块;以及基于预取数据块的各个散列值来预取数据块,以从预取数据块中识别出损坏的数据块。作为另一示例,经由账本验证线程来识别损坏的数据块可以包括:基于各个数据块的先前生成的校验和值来顺序地验证分布式账本的数据块,以基于校验和值来识别损坏的数据块。作为另一示例,经由账本验证线程来识别损坏的数据块可以包括:从分布式账本中随机选择数据块;以及基于随机选择的数据块的各个散列来验证随机选择的数据块,以从随机选择的数据块中识别损坏的数据块。
[0067] 在520中,该方法可以包括从可访问分布式账本的多个区块链对等点中选择一个区块链对等点,以及从所选择的对等点中检索替换数据块。可以随机选择对等点,或者可以基于一个或多个属性(例如当前吞吐量、位置、当前工作负载、区块链对等点的类型(例如,认可节点、组织节点、对等端节点等)等)选择对等点。在530中,该方法可以包括基于与区块链相关联的先前存储的验证块中的一个或多个来确定替换数据块是否有效,并且在540中,该方法可以包括:响应于确定替换数据块有效,在分布式账本上使用替换数据块替换损坏的数据块。在一些实施例中,先前存储的验证块可以是先前已经存储在执行账本验证线程的区块链节点的账本的备份副本中的块。作为另一示例,可以基于从区块链中的后续数据块获得的块的散列值来验证替换数据块。
[0068] 在一些实施例中,损坏的块可以改变原始块的大小,从而创建对账本的大小的改变。因此,简单地替换损坏的块可能会在账本中留下一个洞(即,当损坏的块较小时)或覆盖相邻块的一部分(即,当损坏的块较大时)。因此,在一些实施例中,该方法可以进一步包括:当确定损坏的数据块已经改变了其原始数据块的块大小时,为分布式账本上的区块链中的一个或多个后续数据块取回替换数据块。
[0069] 图6A示出了根据示例实施例的一种或多种示例操作方法的被配置为在区块链上执行各种操作的示例物理基础设施。参照图6A,示例性配置600A包括具有区块链620和智能合约640的物理基础设施610,其可以执行任何示例性实施例中包括的任何操作步骤612。步骤/操作612可以包括在一个或多个流程图和/或逻辑图中描述或描绘的一个或多个步骤。这些步骤可以表示从驻留在计算机系统配置的物理基础结构610上的一个或多个智能合约
640和/或区块链620写入或读取的输出或书面信息。可以从执行的智能合约640和/或区块链620输出数据。物理基础设施610可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。
[0070] 图6B示出了根据示例实施例的在缔约方和中介服务器之间的示例智能合约配置,其被配置为在区块链上强制执行智能合同条款。参照图6B,配置650B可以表示通信会话、资产转移会话或由智能合约640驱动的流程或过程,该智能合约640明确地标识一个或多个用户设备652和/或656。智能合约执行的执行、操作、结果可以由服务器654管理。智能合约640的内容可能需要由作为智能合约事务的各方的实体652和656中的一个或多个的数字签名。智能合约执行的结果可以作为区块链事务写入到区块链中。
[0071] 以上实施例可以以硬件、以处理器执行的计算机程序、以固件或以上述的组合来实现。计算机程序可以被嵌入在诸如存储介质的计算机可读介质上。例如,计算机程序可以驻留在随机存取存储器(“RAM”)、闪存、只读存储器(“ROM”)、可擦可编程只读存储器(“EPROM”)、电可擦可编程只读存储器(“EEPROM”),寄存器、硬盘、可移动磁盘、光盘只读存储器(“CD-ROM”)或本领域已知的任何其他形式的存储介质中。
[0072] 示例性存储介质可以被耦合到处理器,使得处理器可以从该存储介质读取信息,并且可以向该存储介质写入信息。或者,存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在专用集成电路(“ASIC”)中。在替代方案中,处理器和存储介质可作为分立组件驻留。例如,图7示出了示例计算机系统架构700,其可以表示或集成在任何上述组件中,等等。
[0073] 图7并非旨在暗示对本文所述应用程序的实施例的使用范围或功能的限制。无论如何,计算节点700能够被实现和/或执行以上阐述的任何功能。
[0074] 在计算节点700中,存在计算机系统/服务器702,该计算机系统/服务器702可与许多其他通用或专用计算系统环境或配置一起操作。可能适合与计算机系统/服务器702一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持或便携式设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统以及包括上述任何系统或设备的分布式云计算环境等。
[0075] 可在由计算机系统执行的计算机系统可执行指令(例如程序模块)的一般上下文中描述计算机系统/服务器702。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。可以在分布式云计算环境中实践计算机系统/服务器702,在分布式云计算环境中,任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于包括内存存储设备的本地和远程计算机系统存储介质中。
[0076] 如图7所示,云计算节点700中的计算机系统/服务器702以通用计算设备的形式示出。计算机系统/服务器702的组件可以包括但不限于一个或多个处理器或处理单元704、系统存储器706以及将包括系统存储器706的各种系统组件耦合到处理器704的总线。
[0077] 总线表示几种类型的总线结构(包括存储器总线或存储器控制器、外围总线、加速图形端口以及处理器或使用各种总线体系结构中的任何一种的本地总线)中的任何一种或多种。作为示例而非限制,这样的体系结构包括行业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线和外围组件互连(PCI)总线。
[0078] 计算机系统/服务器702通常包括各种计算机系统可读介质。这样的介质可以是计算机系统/服务器702可访问的任何可用介质,并且它包括易失性和非易失性介质、可移动和不可移动介质。在一个实施例中,系统存储器706实现其他附图的流程图。系统存储器706可以包括易失性存储器形式的计算机系统可读介质,诸如随机存取存储器(RAM)710和/或高速缓冲存储器712。计算机系统/服务器702可以进一步包括其他可移动/不可移动、易失性/非易失性计算机系统存储介质。仅作为示例,可以提供存储系统714以用于读取和写入不可移动的非易失性磁性介质(未示出并且通常称为“硬盘驱动器”)。尽管未示出,但是可以提供用于从可移动非易失性磁盘(例如“软盘”)进行读取和写入的磁盘驱动器,以及用于从可移动非易失性光盘进行读取或写入的光盘驱动器(诸如CD-ROM、DVD-ROM或其他光学介质)。在这种情况下,每一个都可以通过一个或多个数据媒体接口连接到总线。如将在下面进一步描绘和描述的,存储器706可以包括至少一个程序产品,该程序产品具有被配置为执行本申请的各种实施例的功能的一组程序模块(例如,至少一个)。
[0079] 具有一组(至少一个)程序模块718的程序/实用程序716,以及操作系统、一个或多个应用程序、其他程序模块和程序数据可以通过示例而非限制的方式存储在存储器706中。操作系统、一个或多个应用程序,其他程序模块以及程序数据的每一个或它们的某种组合中可以包括联网环境的实现。程序模块718通常执行本文所述的本申请的各种实施例的功能和/或方法。例如,一个或多个程序模块718可以实现本文所述的账本验证线程,以在检测到损坏的数据时对分布式账本进行验证和自校正。
[0080] 如本领域的技术人员将理解的,本申请的各方面可以体现为系统、方法或计算机程序产品。因此,本申请的各方面可以采取以下形式:完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或结合了软件和硬件方面的实施例(通常可以全部在本文中称为“电路”、“模块”或“系统”)。此外,本申请的方面可以采取包含在一个或多个计算机可读介质中的计算机程序产品的形式,所述计算机可读介质上包含有计算机可读程序代码。
[0081] 计算机系统/服务器702还可以与一个或多个外部设备720(例如键盘、指示设备,显示器722等)、一个或多个使用户能够与计算机系统/服务器702交互的设备、以及/或使计算机系统/服务器702与一个或多个其他计算设备进行通信的任何设备(例如,网卡、调制解调器等)通信。这样的通信可以经由I/O接口724发生。然而,计算机系统/服务器702仍然可以通过网络适配器726与一个或多个网络(例如局域网(LAN)、通用广域网(WAN)和/或公共网络(例如,因特网))通信。如图所示,网络适配器726通过总线与计算机系统/服务器702的其他组件通信。应当理解,尽管未示出,但是其他硬件和/或软件组件可以与计算机系统/服务器702结合使用。示例包括但不限于:微码、设备驱动器、冗余处理单元、外部磁盘驱动器阵列、RAID系统、磁带驱动器和数据档案存储系统等。
[0082] 根据各种实施例,存储器706可以存储分布式账本的本地副本,该分布式账本在诸如区块链对等点的区块链网络中的多个节点之间存储和复制。同时,处理器704可以被配置为经由账本验证线程识别存储在分布式账本上的区块链内的损坏的数据块,从具有对分布式占本访问的多个区块链对等点中选择区块链对等点,从所选对等点检索替换数据块,基于与该区块链相关联的先前存储的验证块中的一个或多个,确定替换数据块是否有效,以及响应于确定替换数据块有效,在分布式账本上将损坏的数据块替换为替换数据块。例如,处理器704可以执行账本验证线程,该账本验证线程控制处理器、操作系统、硬件(网络接口726等)以执行损坏的数据检测和替换过程。
[0083] 尽管在附图中示出,并且在前面的详细描述中进行了描述了系统、方法和非暂时性计算机可读介质中的至少一个的示例性实施例,但是应当理解,本申请不限于所公开的实施例,而是能够进行如由以下权利要求书所阐述和定义的许多重新布置、修改和替换。例如,各个附图的系统的能力可以由本文描述的模块或组件中的一个或多个或以分布式架构来执行,并且可以包括发射机、接收机或两者的对。例如,由各个模块执行的全部或部分功能可以由这些模块中的一个或多个来执行。此外,本文描述的功能可以在模块或组件内部或外部的各种时间并且与各种事件相关地执行。而且,可以经由以下各项中的至少一项在各个模块之间发送各种模块之间发送的信息:数据网络、互联网、语音网络、互联网协议网络、无线设备、有线设备和/或通过多种协议。而且可以直接和/或经由一个或多个其他模块来发送或接收由任何模块发送或接收的消息。
[0084] 本领域技术人员将意识到,“系统”可以体现为个人计算机、服务器、控制台、个人数字助理(PDA)、手机、平板计算设备、智能手机或任何其他合适的计算设备或设备的组合。将上述功能呈现为由“系统”执行并不旨在以任何方式限制本申请的范围,而是旨在提供许多实施例的一个示例。实际上,本文公开的方法、系统和装置可以以与计算技术一致的局部和分布式形式来实现。
[0085] 应该注意的是,在本说明书中描述的一些系统特征已经作为模块呈现,以便更特别地强调它们的实现独立性。例如,模块可以被实现为包括定制超大规模集成电路(VLSI)电路或门阵列、诸如逻辑芯片、晶体管或其他分立组件的现成半导体的硬件电路。模块也可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备、图形处理单元等的可编程硬件设备中实现。
[0086] 模块也可以至少部分地以由各种类型的处理器执行的软件来实现。所标识的可执行代码单元可以例如包括计算机指令的一个或多个物理或逻辑块,所述计算机指令可以例如被组织为对象、过程或功能。然而,所标识的模块的可执行文件不需要在物理上位于一起,而是可以包括存储在不同位置的不同指令,当这些指令在逻辑上结合在一起时,包括模块并实现模块的所述目的。此外,模块可以存储在计算机可读介质上,该计算机可读介质可以是例如硬盘驱动器、闪存设备、随机存取存储器(RAM)、磁带或用于存储数据的任何其他此类介质。
[0087] 实际上,可执行代码的模块可以是单个指令或多个指令,甚至可以分布在多个不同的代码段、不同的程序之间以及跨多个存储设备。类似地,在本文中操作数据可以在模块内被识别和示出,并且可以以任何合适的形式体现并且可以在任何合适的数据结构类型内组织。操作数据可以作为单个数据集收集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号存在。
[0088] 将容易理解,如本文的附图中一般性描述和图示的,本申请的组件可以以多种不同的配置来布置和设计。因此,实施例的详细描述并非旨在限制所要求保护的本申请的范围,而仅代表本申请的所选实施例。
[0089] 本领域普通技术人员将容易地理解,可以以不同顺序的步骤和/或以与所公开的配置不同的配置的硬件元件来实践以上内容。因此,尽管已经基于这些优选实施例描述了本申请,但是对于本领域技术人员而言显而易见的是,某些修改、变型和替代构造将是显而易见的。
[0090] 尽管已经描述了本申请的优选实施例,但是应当理解,所描述的实施例仅是示例性的,并且当考虑其全部等价物和修改(例如协议、硬件设备、软件平台等)时,本申请的范围仅由所附权利要求书限定。