用于执行由区块链请求的动作的方法和系统与流程

文档序号:19792681发布日期:2020-01-24 14:38阅读:344来源:国知局
用于执行由区块链请求的动作的方法和系统与流程

本公开针对用于执行由区块链请求的动作的方法、系统和技术。



背景技术:

区块链是分布在计算机节点上并且本质上可以抵抗损坏和篡改的数据库和/或应用执行引擎。尽管最初用于比特币,但是区块链的应用范围远远超出了比特币和整个金融服务行业。



技术实现要素:

根据第一方面,提供了一种用于执行使用区块链请求的动作的方法,该方法包括:使用区块链指示组成区块链的一部分的一个或多个节点执行该动作,其中动作的执行无需区块链达成共识,并且将一个或多个节点执行的动作的最终结果添加到区块链上的区块。

一个或多个节点可以包括执行动作并将动作的结果返回给区块链的第一主节点,其中第一主节点将动作的中间结果返回给区块链,并且可以进一步包括根据中间结果确定最终结果。

该方法还可以包括:在区块链的区块形成期间,确定主节点是否已经返回了中间结果。

主节点可以返回结果作为数据结构的一部分,数据结构还可以包括主节点的数字签名、标识动作的任务标识符、标识区块链的链标识符以及指示主节点执行动作的区块链区块的哈希。

该方法还可以包括:确定数字签名、链标识符、任务标识符、结果格式以及主节点的状态是否有效;当数字签名、链标识符、任务标识符、结果格式以及主节点的状态均有效时,将结果标记为有效。

确定主节点的状态是否有效可以包括:确定主节点是否能够生成结果,主节点具有活动的心跳,以及主节点保持被第一区块链选择作为主节点。

该方法还可以包括:确定自从主节点被指示执行动作以来,主节点是否在设定的时间段和设定的区块数中的至少一个内返回结果;并且仅当主节点在设定的时间段和设定的区块数中的至少一个内返回结果时才接受结果。

该方法还可以包括:当结果未被标记为有效时:忽略第一主节点返回的结果;选择组成区块链的一部分的另一个节点作为第二主节点;并指示新的主节点执行该动作。

该方法还可以包括:在使用区块链来指示主节点之前:从组成区块链的一部分的至少两个节点接收信号,信号将至少两个节点视为要被选择作为第一主节点,以及选择至少两个节点中的一个作为第一主节点。

一个或多个节点包括多个集群节点,其中,集群节点中的每个执行动作并将动作的中间结果返回给区块链,并且该方法还可以包括将最终结果确定为集群节点返回的至少一些中间结果的平均值。

该方法可以进一步包括:在区块链的区块形成期间并且针对集群节点中的每一个,确定集群节点是否已经返回了中间结果。

集群节点中的每一个可以返回中间结果作为数据结构的一部分,数据结构还可以包括集群节点的数字签名、标识动作的任务标识符、标识区块链的链标识符,以及指示集群节点执行动作的区块链区块的哈希。

对于每个中间结果,该方法还可以包括:确定返回中间结果的集群节点的数字签名以及状态是否有效;以及确定中间结果的格式是否有效;当返回中间结果的集群节点的数字签名和状态以及中间结果的格式均有效时,将中间结果标记为有效。

确定返回中间结果的集群节点的状态是否有效可以包括:确定返回中间结果的集群节点能够生成结果,返回中间结果的集群节点具有活动的心跳,并且返回中间结果的集群节点保持被第一区块链选择作为集群节点。

该方法还可以包括针对每个中间结果:确定自从返回中间结果的集群节点被指示执行动作以来,返回中间结果的集群节点是否在设定的时间段和设定的区块数中的至少一个内返回中间结果;并且仅当返回中间结果的集群节点在设定的时间段和设定的区块数中的至少一个内返回中间结果时,才接受中间结果。

该方法可以进一步包括:从平均值中排除未被标记为有效的中间结果中的每一个。

该方法还可以包括:在使用区块链来指示集群节点之前:从组成区块链的一部分的多个节点接收信号,信号将至少两个节点视为要被选择作为集群节点;并选择至少两个节点作为集群节点。

动作可以包括需要第一资源集合的第一动作和需要与第一资源集合不同的第二资源集合的第二动作,其中,一个或多个节点可以包括有资格执行第一动作的第一节点和有资格执行第二动作的第二节点,其中,使用区块链指示一个或多个节点可以包括:指示第一节点执行第一动作;以及指示第二节点执行第二动作,以及其中最终结果可以包括根据第一节点返回的第一中间结果和第二节点返回的第二中间结果确定的第一最终结果。

区块链可以指示第一节点在区块链的第一区块高度处执行第一动作,并且可以指示第二节点在区块链的不同于第一区块的高度的第二区块的高度处执行第二动作。

根据另一方面,提供一种用于执行使用区块链请求的动作的系统,该系统包括第一节点,第一节点组成区块链的一部分,第一节点包括:用于与至少一个执行动作的其他节点对接的网络接口硬件;在其上已经存储了区块链的数据存储装置;以通信方式耦合到数据存储装置和网络接口硬件的处理器;和通信地耦合到处理器并且在其上存储了可由处理器执行的计算机程序代码的存储器,,并且当计算机程序代码由处理器执行时使处理器执行前述方面中的任何一个方面的方法或其合适的组合。

根据另一方面,提供了一种非暂时性计算机可读介质,在其上已经存储了可由处理器执行的计算机程序代码,并且计算机程序代码在由处理器执行时使处理器执行前述方面中任一项的方法或其适当的组合。

本发明内容不一定描述所有方面的整个范围。通过阅读以下对具体实施例的描述,其他方面、特征和优点对于本领域普通技术人员将是显而易见的。

附图说明

在说明一个或多个示例实施方式的附图中:

图1描绘了根据一个示例实施方式的用于促进区块链之间的数据传输的系统。

图2描绘了组成图1的系统的一部分的软件栈。

图3描绘了用于图1的系统的物理网络拓扑。

图4描绘了示出了根据图1的系统,使用归约器来执行动作以影响系统状态以及针对区块链达成共识的的流程图。

图5a和5b描绘了示出了根据图1的系统,两个区块链如何执行读联接的uml序列图。

图6描绘了示出了根据图1的系统,两个区块链如何执行写联接的框图。

图7a至7c描绘了示出了根据图6的框图,两个区块链如何执行写联接的uml序列图。

图8a描绘了根据另一示例实施方式的用于促进区块链之间的数据传输的系统。

图8b描绘了根据图8b的系统的管理程序和在其上运行的各种区块链的框图。

图9和图10描绘了根据另外的示例实施例的用于执行使用区块链请求的动作的方法。

具体实施方式

区块链的物理层包括其上共同存储分布式数据库的计算机节点。该数据库被存储为一般线性的“区块”的链,链中的每个随后的区块以加密安全的方式直接链接到链中紧接在前面的区块。添加到区块链的新区块被称为在区块链中比在它之前添加到区块链中的区块“更高”。区块链中的第一或最低区块被称为“创世区块”。因为区块链中的每个区块直接链接到其紧接在前面的区块,所以区块链中的任何区块都可以直接或间接地被追溯到创世区块。这是一种任何一个节点都能够检查区块链的有效性的方式。

区块链可以通过多种方式实现。在一个用于比特币的区块链的示例实现中,区块链的每个区块包括那个区块的大小,以字节为单位;区块报头;交易计数器,表示存储在那个区块中的不同比特币交易的数量;以及交易数据,其是存储的交易。在相同的示例实现中,每个区块的区块报头包括版本信息;前一个区块哈希,其是对紧接在那个区块前面的区块的哈希的引用;merkle根,其是存储在那个区块中的交易的merkle根的哈希;时间戳,其是创建区块的时间;难度目标,其是在区块创建期间执行工作量证明操作时必须满足的最小难度;以及由工作量证明产生的随机数(nounce)。

在传统的区块链实现中,组成区块链一部分的不同节点通过执行至少满足每个新区块报头中指定的难度目标的工作量证明操作来竞争生成新区块。一旦生成,新区块就通过使用前一个区块哈希(以确认那个新区块的世系)和merkle根(以确认存储在那个新区块中的交易的有效性),被传播到区块链中的其他节点,并且其真实性被该其他节点独立地验证。一旦新区块已经被验证,它就被添加到区块链的顶部。典型地,区块链在任何给定时间都是具有由最高可能的累积工作量证明产生的区块的链。当节点关于哪个区块要被添加到区块链的顶部意见一致时,它们被称为已经达成“共识”。虽然区块链可能不时分叉,导致区块链的暂时竞争版本,但是每个区块都与其紧接在前面的区块加密链接的事实意味着远离区块链的顶部的区块实际上是不变的。

上述区块链的分布式和对等性质也与一些缺点相关联。例如,区块链的分布式性质的副作用是,组成区块链一部分的所有节点都可以访问存储在那个区块链上的所有数据,使得隐私保护变得困难。虽然区块链上的某些非报头数据可以被加密,但加密会带来技术开销,还会抑制可对数据做的事,例如将应用实现为智能合约。此外,当单个节点扩展并且同时是越来越多的区块链的节点时,那个节点所需的计算资源也线性地向上扩展,阻碍了该节点有效地成为大量区块链的成员的能力。

在此描述的实施方式在方法、系统和技术中描述以减轻至少一个前述问题。例如,在下面描述的至少一些实施方式中,数据可以通过在此称为“链联接”的过程在区块链之间安全地共享。使用联接,第一区块链可以与第二区块链安全地共享存储在第一区块链上的非报头数据的适当子集;这与被迫共享存储在第一区块链上的所有数据形成对比,这是组成第一区块链的所有节点之间所需要的。在此描述的至少一个实施方式中,当区块链用于实现比特币时,非报头数据代替存储在区块链上的交易数据。例如,在至少一些示例实施方式中,非报头数据包括由也作为被实现为智能合约并存储在区块链上的应用执行的动作,以及表示执行那个动作之后的结果应用状态的数据。在此描绘的实施方式中的每个动作包括json对象,尽管在不同的实施方式中,动作可以包括不同的数据结构。从第一区块链发送应用状态数据和由第一区块链执行导致应用状态的动作允许第二区块链独立地确定它从第一区块链接收的状态是否准确。

在至少一些示例实施方式中,区块链的非报头数据包括应用数据,该应用数据是与存储在区块链中的应用相关的数据,例如应用本身或应用状态数据。例如,在被配置为存储联系人列表的应用中,应用状态数据可以包括那些联系人的列表,应用状态数据的适当子集可以包括那个列表中的单个条目。在一些其他示例实施方式中,非报头数据可以与任何特定应用都无关,可以包括json对象或二进制文件。

此外,在下面描述的至少一些实施方式中,任何一个或多个节点在通过在一个或多个节点的每一个上运行的主机控制器来路由系统操作的同时,都可以使用管理程序来虚拟化(完全虚拟化或使用半虚拟化)一个或多个区块链。主机控制器本身可以是区块链(“主机区块链”)。主机控制器响应于来自在管理程序上运行的一个或多个区块链的请求来分配节点的至少一些硬件资源,主机控制器在该节点上运行;那些链中的每一个在此可互换地称为“客户区块链”。主机控制器基于例如资源可用性和任务优先级来执行资源分配。这允许不同的区块链有效地共享那个节点的硬件资源,从而便于扩展。此外,在包括主机区块链的实施方式中,客户区块链中的至少一个的计算机程序代码可以存储在主机区块链中。这允许主机区块链存储所有那些客户区块链的应用状态变化的列表,从而允许用户容易地将那些应用的状态改变为主机区块链中存储的任一先前状态。这对于调试和审计那个节点的活动中的至少一个可能特别有用。在包括主机区块链的实施方式中,客户区块链中的一个或多个可以存储在主机区块链中,而客户区块链中的不同的一个或多个可以存储在主机区块链之外;尽管如此所有客户区块链仍然都可以由主机区块链为它们分配资源,从而促进可扩展性。

现在参考图1,示出了根据一个示例实施方式的用于促进区块链之间的数据传输的系统100。系统100包括第一至第十二节点104a-1(概括来说,“节点104”),每个节点组成一个或多个区块链102a-g(概括来说,“区块链”或“链”102)的一部分。第一区块链102a包括第一至第四节点104a-d;第二区块链102b包括第五至第八节点104e-h;第三区块链包括第九至第十二节点104i-l。

如下文进一步详细讨论的,第一区块链102a“联接”到第四区块链102d(经由第二节点104b)和第五区块链102e(经由第三节点104c):这允许存储在第一区块链102a上的所有或一些数据被分别与第四和第五区块链102d、e安全共享。第二区块链102b类似地联接到第四区块链102e(经由第六节点104f)和第六区块链102f(经由第七节点104g),第三区块链102c类似地联接到第六区块链102f(经由第十节点104j)和第五区块链102e(经由第十一节点104k)。

同样如下面进一步详细讨论的,当第四区块链102d联接到第一和第二区块链102a、b时,第一和第二区块链102a、b可以经由第四区块链102d互相读写数据。类似地,第二和第三区块链102b、c可以经由第六区块链102f互相读写数据,第一和第三区块链102a、c可以经由第五区块链102e互相读写数据。因此,第四至第六区块链102d-f在此可互换地称为“传输区块链”,因为它们促进了第一至第三区块链102a-c之间的数据的选择性传输。

系统100中的第八区块链102g是“目录区块链”,其上存储了第一至第三区块链102a-c可自由访问的数据。

虽然在传统的比特币实现中,生成新区块包括应用工作量证明,但是在所描绘的实施方式中,在不应用工作量证明的情况下达成了共识。例如,在此所描绘的实施方式,共识是根据ethanbuchman的论文,2016年6月,universityofguelph,https://atrium.lib.uoguelph.ca/xmlui/handle/10214/9769中描述的方法来确定的。在不同的实施方式(未示出)中,共识可以使用工作量证明、利益证明或不同的方法来确定。

第二节点104b的结构在图1中突出显示了。系统100中的其他节点104a、c-l共享类似的结构,尽管在不同的实施方式(未示出)中,任何一个或多个节点104可以在结构上彼此不同。

现在参考图3,示出了图1的系统100的物理网络拓扑。系统100包括第一至第三局域网(“lan”)306a-c,每个局域网由各自的防火墙304a-c保护。局域网306a-c通过广域网(“wan”)302,例如因特网通信地耦合在一起。第一至第三区块链102a-c分别位于第一至第三lan306a-c的本地;第四至第七区块链102d-g中的每一个通过防火墙304a-c中的至少两个以及wan302进行通信。

回到图1,第二节点104b包括控制节点104b的整体操作的处理器106。处理器106通信地耦合到若干子系统并控制它们。这些子系统包括用户输入设备108,用户输入设备108可以包括例如键盘、鼠标、触摸屏、语音控制中的任何一个或多个;随机存取存储器(“ram”)110,其存储由处理器106在运行时执行的计算机程序代码;非易失性存储器112,其存储运行时由ram110执行的计算机程序代码,并且还存储第二节点104b是其一部分的区块链102a、d,如就图2进一步详细讨论的;显示控制器114,其通信地耦合到显示器116并控制它;以及促进与其他节点104a、c-l进行网络通信的网络控制器118。

现在参考图2,示出了组成图1的系统100的一部分的软件栈200。软件堆栈200可以表达为计算机程序代码并存储在非易失性存储器112中,处理器106可以在运行时根据需要将那计算机程序代码的一些或全部加载到ram110中。软件堆栈200是基于node.js的,并相应地使用javascript202,特别是javascriptexpress204、redux206和react208库。javascript202用于实现区块链。javascriptexpress204、redux206、react208以及html和css210被用作应用开发的框架。虽然在本示例实施方式中使用了javascript202及其相关联的库204、206、208,但是在不同的示例实施方式(未示出)中,它们中的任何一个或多个可以不用于实现。例如,在某些不同的实施方式中,即使javascriptexpress204、redux206和react208库都没有被使用,应用状态仍然可以使用可加密验证的json对象来跟踪。

应用作为智能合约在系统100中的任何一个区块链102上运行。图4描绘了示出了根据图1的系统100,使用归约器来由系统100执行动作以影响系统状态以及通过如上所述应用共识来针对区块链102中的任何一个达成共识的流程图400。在系统100中,redux206存储存储应用的状态树,因此类似于应用的ram。在框402处在用户空间中创建动作,例如响应于经由用户输入设备108中的一个的用户输入,并且在框404处使用redux206dispatch()方法的异步变体将该动作分派到区块链结构(即,借助于区块链的对等性质,自动分派到组成区块链102的其他节点104)。该动作在框406处从用户空间转移到区块链结构,并且在框408处通过组成区块链102的节点104来传播。因此,区块链102的节点104中的每一个在框410处最终接收该动作的副本,并且节点104中的每一个在框414处通过用归约器来执行该动作,独立地评估那个动作对应用的当前状态的影响,该应用的当前状态是节点104中的每一个在框412处检索的。一旦节点104在框414处执行该动作,区块链102就在框416处就区块链102的后续状态达成共识。由那个共识产生的后续状态在框418处被节点104接受为正确的后续状态,并在框420处被发送到用户空间。

图8a描绘了用于促进区块链102之间的数据传输的系统100的另一示例实施方式。图8a的系统100包括第十三节点104m,其同时是六个区块链102h-m的成员:主机区块链102h和第八至第十二区块链102i-m。第八至第十二区块链102i-m还分别包括附加节点104n-r。区块链102h-m中的每一个半虚拟化在第十三节点104m上,尽管在不同的实施方式(未示出)中,区块链102h-m可以是完全虚拟化的,或者如下文进一步详细讨论的,既不是完全虚拟化的也不是半虚拟化的。图8b描绘了用于那半虚拟化的管理程序800,并示出了在管理程序800上运行的区块链102h-m。

在图8b中,第八、第十一和第十二区块链102i、l、m嵌套在主机区块链102h内,第九和第十区块链102j、k嵌套在第八区块链102i内(因此也嵌套在主机区块链102h内)。当父区块链102执行创建嵌套区块链102的应用时,并且当父区块链102相应地可以终止该嵌套区块链102时,一个区块链102“嵌套”在另一个区块链102(“父区块链102”)内。在所描绘的实施方式中,父区块链102和嵌套区块链102在其他方面是等效的。

管理程序800经由负责输入/输出操作的计算机硬件(“i/o硬件”)与物理世界804对接,例如向管理程序800提供用户输入的用户输入设备108,以及执行磁盘访问和网络通信功能的磁盘访问和网络接口硬件808。硬件808与各种第三方组件806(例如提供外部服务的服务器、应用编程接口和数据库)对接。

管理程序800以javascript202实现,包括动作队列816、路由器818和区块链102h-m的各种操作环境。路由器818通信地串行耦合到第一至第六分派模块820a-f,第一至第六分派模块820a-f又分别通信地耦合到区块链102h-m。区块链102h-m每个分别包括应用的存储812a-f,每个存储812a-f有效地充当那个区块链102h-m上的应用的ram。在至少一些示例实施方式中,存储在区块链上的应用不止包括智能合约。例如,应用可以包括智能合约,其表示返回值的函数;saga,其执行除返回值以外的操作,例如与硬件的交互;以及与智能合约和saga交互的动作。saga执行的动作,是使用区块链请求而其实际执行无需区块链达成共识,在此称为“副作用”。虽然该副作用或动作的实际执行不受共识的影响,但区块链做出的执行该副作用的决定受共识的影响,区块链做出的接受该副作用的结果的决定也受共识的影响。存储812a-f中的每个应用包括归约器,该归约器执行确定区块链状态的动作。另外,可以由归约器执行那动作产生的副作用,例如区块链102和硬件之间的交互,分别由存储812a-f的副作用管理器814a-f处理。

在一个示例实施方式中,可以使用图8b的管理程序800来实现图4的方法,如下所述。通过经由用户设备108中的一个提供输入来创建动作的用户在框402处生成动作,该动作被放置在动作队列816中。动作队列816还从副作用管理器814a-f接收动作。动作队列816最终将用户生成的动作分派到路由器818,路由器818将它路由到与那个动作相关的区块链102i-m;对于本示例来说,第八区块链102i是唯一受该动作影响的区块链102。路由器818将动作直接路由到第三分派模块820c。这对应于图4中的框406。一旦动作从硬件转换成动作,主机区块链102h就捕捉该动作;i/o硬件(用户输入设备108或硬件808)与主机区块链102h交互,因此甚至在动作被发送到动作队列816之前动作就被记录在主机区块链102h中。路由器818将动作队列816中的动作路由到适当的分派模块812a-f。路由器818以动作在动作队列816中放置的顺序将那些动作发送到链102i-m中的任何一个给定的链;然而,不同区块链102i-m的动作可以无序地被发送到那些区块链102i-m的分派模块812a-f。例如,如果动作队列816接收第八区块链102i的第一动作,然后第九区块链102j的第二动作,然后第八区块链102i的第三动作,路由器818可以在将第二动作发送到第九区块链102j之前,将第一和第三动作发送到第八区块链102i。然而,路由器可以不在第一动作之前将第三动作发送到第八区块链102i。

一旦动作到达第八区块链102i,第十三节点104m就将动作广播到组成那个区块链102i的一部分的任何其他节点104,如图8a所示那个区块链102i包括附加节点104n;这对应于图4中的框408和410。第十三节点104m经由主机区块链102h通信,主机区块链102h按照需要与磁盘访问和网络接口硬件808对接以与附加节点104n通信。附加节点104n最终在框414处在其归约器处接收并执行该动作。回到第十三节点104m,组成第二存储812b的一部分的归约器执行该动作,并且再次经由主机区块链102h将它确定的新状态共享给附加节点104n。第八区块链102i最终达到共识,这对应于图4的框416,涉及管理程序800在其上运行的节点104m的通信经由主机区块链102h再次发生。一旦达到共识,第八区块链102i就在框418处稳定在它的新状态,并且经由用户输入硬件108再次经由主机区块链102h将这新状态中继给用户,这对应于框420。

归约器执行动作时,可能需要硬件操作形式的副作用。管理程序800响应于来自主机区块链108h的指令执行任何硬件操作;因此,主机区块链108h知道并记录其区块中的所有硬件操作和相关动作。主机区块链108h还记录执行那个动作的结果,这是接收到动作的区块链102的新应用状态。每个区块链108在执行动作后还返回“成功”或“失败”指示符,该指示符指示动作是否被成功执行,主机区块链108h也记录该指示符。

在所描绘的示例实施方式中,主机区块链108h还监视和处理用于满足处理器时间和处理器强度阈值中的至少一个的计算操作(不使用i/o硬件但确实需要节点104m的处理器的操作)的资源分配。这允许主机区块链108h为计算特别密集的任务,例如某些加密任务,分配和存储处理器资源。

虽然在图8a和8b中,第十三节点104m被描述为经由磁盘访问和网络接口硬件808与附加节点104n-r通信,但是在不同的实施方式中(未示出),通信可以在托管在相同的节点104上,甚至运行在相同的管理程序800上的区块链102之间进行。在那些示例实施方式中,与需要通过硬件808进行通信的时候相比,区块链102之间的通信可以以更低的等待时间和更低的传输时间来进行。

区块链102h-m上的应用被配置成使得与区块链102i-m中的任何一个的所有硬件交互都经由主机区块链102h发生。例如,经由磁盘访问和网络接口硬件808发生的所有网络通信以及经由用户输入设备108发生的用户交互,由第八至第十二区块链102i-m经由主机区块链102h来执行。主机区块链108h相应地被配置成按照嵌套在其中的任何区块链108i-m的指示与所有硬件交互。主机区块链102h在其区块中记录所有硬件操作(请求和响应,以及经由硬件传送的用户输入)和在那些嵌套的区块链102i-m中的每一个上运行的应用的应用状态。在一些不同的实施方式中(未示出),主机区块链102h可以记录涉及i/o硬件的操作中的一些而不是所有。主机区块链102h还记录至少借助于通过路由器818路由那些动作(并且如果那些动作需要使用i/o硬件,则也借助于那个方式)而被路由到区块链102i-m的所有动作。这允许用户访问所有那些嵌套区块链102i-m的整个状态历史和硬件操作。因此,那个用户能够恢复到区块链102i-m中任何一个的先前应用状态,并调整动作队列816中的动作顺序,以模拟管理程序800和区块链102i-m在动作以不同于它们实际接收的原始顺序的顺序到达时会如何反应;在一个示例用例中,这是在应用出错时进行的。这允许系统100借助于允许模拟系统100可能经历的不同定时错误而被彻底测试。嵌套区块链102i-m中的每个的区块是包含在主机区块链102h的区块内的数据的子集。在调试或测试期间,用户可以从动作队列816中选择任何一个动作,来经由路由器818路由到区块链102i-m,而不管动作队列818接收动作的顺序如何。输入/输出操作是程序化和确定性的;因此,硬件以相同的方式响应动作,而不管它何时接收到那个动作,这有助于在调试或测试期间改变动作的顺序。

另一个节点可以连接到主机区块链108h,并且可以响应于来自那另一个节点的输入来进行应用到较早状态的恢复。例如,这其他节点可以是提供技术支持的第三供应者的节点。

虽然所描绘的示例实施方式将区块链102h-m示为半虚拟化在管理程序800上,但是在不同的实施方式中(未示出),既不需要使用完全虚拟化也不需要使用半虚拟化。在这些不同实施方式中的一些实施方式中,一些节点104使用管理程序800完全虚拟化或半虚拟化区块链102h-m,而其他节点没有。此外,在其中节点104中的至少一个使用管理程序800进行完全虚拟化或半虚拟化的那些不同实施方式中的一些中,区块链102h-m中的一些或全部可以被完全虚拟化或半虚拟化。例如,虽然图4的流程图400可以使用图8b的管理程序800来实现,但是在不同的实施方式中(未示出),虚拟化不需要用于其实现。

链联接

虽然区块链102中任何一个给定的区块链上的所有节点104都可以访问存储在区块链102上的所有数据,但是不同的区块链102默认情况下不在彼此之间共享数据。下面描述的链联接方法允许数据在不同的区块链102之间共享。

图5a和5b描绘了示出了根据图1的系统100,两个区块链102a、b如何执行读联接的uml序列图500。虽然图500中使用了第一和第二区块链102a、b,但是可以在任何两个区块链102之间执行读联接。例如,虽然第一和第二区块链102a、b不共享任何节点104,但是可以在共享节点104以及,在一些示例实施方式中,使用例如管理程序800在相同节点104中的至少一些上虚拟化(完全或半虚拟化)的区块链102之间执行读联接。

在图500中,第二区块链102b从第一区块链102a读取数据;对于图500来说,第二区块链102b相应地可互换地称为“消费者链102b”,第一区块链相应地可互换地称为“供应者链102a”。

在操作502处,供应者链102a更新其联接管理例程。用户通过经由组成供应者链102a的节点104a-d中的一个的用户输入设备108中的一个提供输入来开始这事。路由器818将用户输入作为动作(“@@chain_share_state”)分派给那个节点104上的供应者链102a,以由那链102a的归约器来执行。该动作的净荷是数字签名的,因此它是可加密验证的(也就是说,任何篡改都可以被检测到)。动作的净荷包括消费者链102b的链标识符(“<chainid>”)、标识要由消费者链102b读取的供应者链102a的状态数据的适当子集的路径(“statepath:‘/foo/’”)、以及标识这特定链联接的别名(“joinname:‘foojoin’”)。在图500中,供应者链102a可用的状态信息使用目录树来表示。具有路径“/”的树的根代表供应者链102a可用的所有状态数据;子目录,例如“/foo/”,表示那状态数据的适当子集或“切片”。

链标识符是唯一的,是通过对值进行数字签名生成的,该值组成被修改为包含随机种子的供应者链102a的创世区块。随机种子确保唯一性。在读联接期间的任何时间,供应者链102a都可以使用链标识符来确认消费者链102b的身份,并且仅当确认那身份的尝试成功时,才向消费者链102b发送状态数据切片。

在操作504处,相同或不同的用户经由组成消费链102b的节点104e-h中的一个的用户输入设备108中的一个提供输入。路由器818将用户输入作为动作(“@@chain_read_state”)分派给那个节点104上的消费者链102b,以由那链102b的归约器来执行。动作的净荷是供应者链102a的加密安全链标识符(“<chainid>”)、标识状态数据要被存储在哪里的路径(“mount:‘/mnt/foo’”,由消费者链102b读取的状态数据是使用所安装的文件系统的模型来存储的)、标识这特定链联接的别名(“joinname:‘foojoin’”)以及用于读联接的各种选项。示例选项包括数据年龄限制,该数据年龄限制要求正经由读联接传输的数据小于某个年龄,以可用于所有或一些操作;频率阈值,其定义多快读联接将重复以更新消费链102b上的状态数据;和最大大小限制,如果读联接传输的数据超过最大限制其设置标志。

一旦操作502和504已经执行,读联接就初始化。操作502和504可以同时执行,或者操作502、504中的一个可以在操作502、504中的另一个之前执行。

一旦读联接初始化,供应者链102a就进入包括操作506和508的循环,该循环对链102a上的每个区块执行。每次向供应者链102a添加新区块时,都会生成动作(“@@chain_block_created”)。新区块创建包括供应者链102a应用决定创建块,这触发副作用,该副作用在使用管理程序800时是由副作用管理器814处理的。该动作的净荷是那个新区块的区块高度(“currentblockheight:1234”)、那个新区块报头的哈希(“currentblockhash:block1234hash”)和标识那个区块创建的时间的时间戳(“currentblocktime:12374433543”)。在一些示例实施方式中,时间戳被省略。在操作508处,供应者链102a向消费者链102b发送@@chain_block_created动作的形式的更新,通知消费者链102b新区块已经创建。更新包括那个新区块的高度和报头哈希。消费者链102b可以选择接受并接收由新创建的区块存储的状态数据切片的副本,或者跳过更新。

当消费者链102b选择从供应者链102a接收更新时,对每个更新执行操作510、512、514和516。在框510处,消费者链102b生成动作(“@@read_join_diff_req”),该动作具有净荷,该净荷包含由数据传输将在其处开始的供应者链102a的起始区块高度(“startblockheight:1200”),消费者链102b从操作504(上次设置它)中知道该起始区块高度并且消费者链102b将在如下所述的操作516处更新该起始区块高度;起始区块高度处的区块报头的哈希(图5b中未示出);以及该联接的别名(“joinnames:[foojoin]”)。在操作512处,消费者链102b通过向供应者链102a发送@@read_join_dif_req动作,向供应者链102a请求更新的状态数据切片。

响应于该请求,供应者链102a执行动作(“@@read_join_diff_resp”)来生成对该请求的响应。响应于该动作,供应者链102a检索每个区块的报头(不管是否从那个区块发送状态数据切片,因为报头用于验证世系)(区块1200至1234)。每个报头包括链102a中紧接在前面的区块的报头的哈希(“previousblockhash:‘block1199hash’”);那个块整个应用状态的哈希,即使只传输那状态数据的切片(“payloadhash:‘payloadhash’”);第一区块链的节点的用来确定针对那个区块达到共识的足够数量的数字签名;以及指示链配置的方面是否已经改变的标志(即,当影响验证区块世系的能力的方面改变时),例如当加密方法(例如,哈希类型)已经改变时,当有权就共识投票的节点列表改变时,当使用的数字签名改变时,以及当报头格式改变时(“configchanged:false”)。该动作也会生成区块报头的哈希(“blockhash:‘block1200hash”),该区块报头的哈希不组成报头本身的一部分。链102a还确定从起始区块高度(1200)到当前区块高度(1234)的状态数据上的差异(“statediff:{//providercreatesdifffrom1200to1234}”),从而避免向消费者链102b发送不必要的数据。供应者链102a还确定merkle证明(“merkleproof”),该merkle证明包括一个或多个哈希值,该一个或多个哈希值被选择来允许消费者链102b确定merkle路径,该merkle路径是从被发送到第二区块链的应用数据的哈希到merkle根的,在本示例中,该merkle证明在payloadhash字段中。在操作514处,供应者链102a向消费者链102b发送响应于@@read_join_diff_resp动作而生成的数据。

在本示例实施方式中,该应用数据的哈希是merkle根,包括用于制作区块的所有动作以及由应用按顺序执行所有那些动作产生的最后状态。在不同的示例实施方式中,该区块可以存储由执行每个动作产生的每个状态,或者那些状态的子集。对于每个正被传输的区块,那个区块的哈希和紧接在那个区块下面的区块的报头的哈希、那个区块的应用数据的哈希和数字签名的哈希共同表示世系验证数据的一个示例,消费者链102b可以使用该世系验证数据来验证回到链的创世区块的那个区块的世系。

在本示例实施方式中,merkleproof字段是有效性验证数据的一个示例,该有效性验证数据允许消费者链102b验证它从供应者链102a接收的应用数据的有效性。虽然在本示例中使用了merkle树,但merkle树只是加密证明的一种示例形式。还有其他可能的方法。该证明机制允许单个根哈希,以及在某些结构中使用的一系列其他哈希,从而允许通过将一段数据关联回根哈希来验证该数据,而不泄露任何不打算共享的其他数据。例如,可以使用的其他数据结构包括patricia树、radix树和分块连接。

消费者链102b随后在操作516处验证它接收的数据的真实性。更具体地,它使用世系验证数据来验证所传输的区块的世系,使用有效性验证数据来验证它接收的状态数据的适当子集的有效性,并且将新区块添加到消费者链102b。更具体地,消费者链102b验证供应者链102a的数字签名;使用哈希的报头信息验证每个所传输的区块的世系;使用数据的merkle树检查所传输的状态数据的有效性;验证使用的共识方法的类型,该类型可以使用如上所述的configchange字段进行更改;通过检查投票赞成共识的节点的签名,验证足够数量的节点104已经就该区块的共识做出了贡献;以及根据链102a使用的加密方法验证该区块的加密有效性。

然后消费者链102b更新其存储状态信息的安装目录(/mnt/foo),该状态信息本身组成用新区块的非报头数据向它自己添加那个新区块的消费者链102b,那个新区块的非报头数据包括从供应者链102a接收的数据(即世系验证数据、状态数据的适当子集和有效性验证数据)。

总之,读联接允许消费者链102b的用户读取存储在供应者链102a上的状态数据切片,就好像那数据被本地安装在消费者链102b上一样。

现在参考图6,描绘了示出了根据图1的系统100,两个区块链如何执行写联接的框图600。与图5a和5b一样,尽管在图6的示例中使用了第一和第二区块链102a、b,但是可以在任何两个区块链102之间执行写联接,而不管它们是否具有重叠的节点104,也不管是否有任何节点是使用管理程序800的虚拟化链。在图6中,第一区块链102a将数据写入第二区块链102b;第一区块链102a相应地可互换地称为“发送者链”102a,第二区块链102b相应地可互换地称为“接收者链”102b。

发送者链102a包括分派模块802a,分派模块802a将动作分派给归约器602a。如下面就图7a至7c进一步详细讨论的,归约器602a将某些动作的执行委托给联接管理器604b,联接管理器604b控制哪些动作在未决动作队列606a中排队以传输到接收者链102b。动作经由读联接被发送到接收者链102b。发送者链102a还包括,经由读联接,读取接收者链102b已经完成的动作的列表的动作状态队列608a。

接收者链102b类似地包括经由读联接从发送者链102a的未决动作队列606a接收动作的未决动作队列606b。接收的动作被发送到联接管理器604b,联接管理器604b将它们转发到分派模块820b并更新动作状态队列608b以指示动作是未决的。分派模块820b将那些动作转发给归约器602b,归约器602b执行它们,从而改变接收者链102b的状态数据并执行写操作。联接管理器604b还在归约器602b执行动作之后,更新动作状态队列608b以指示动作已经完成。动作状态队列608b中的状态经由读联接被发送到发送者链102a的动作状态队列。因此,图6的写联接是使用两个读联接来实现的。

图7a至7c描绘了示出了根据图6的框图600系统,两个区块链102a、b如何执行写联接的uml序列图700。图中的对象是发送者和接收者链102a、b、发送者链102b的联接管理器604a和接收者链102b的联接管理器604b。虽然联接管理器604a、b被示为不同于链102a、b的对象,但是这样做仅仅是为了方便,并且管理器604a、b组成由链102a、b执行的应用逻辑的一部分。

在操作702处,接收者链102b的联接管理器604b执行具有净荷的动作(“@@chain_authorize_actions”),该净荷包括标识发送者链102a的加密安全链标识符(“<senderchainid>”),并枚举了允许发送者链102a让接收者链102b执行的动作(“permittedactions:[‘create_foo’;‘create_bar’]”)。加密安全的链标识符以类似于图5a的链标识符的方式生成。此后,接收者链102b的未决动作队列606b能够从发送者链102a的未决动作队列606a读取动作,并且发送者链102a的动作状态队列608a能够从接收者链102b的动作状态队列608b读取动作的状态。在队列606a、b和608a、b能够通信之后,写联接建立。在所描述的实施方式中,发送者链102a默认被授权执行从接收者链102b接收的某些动作,因此授权没有在图7a至7c中明确示出。

对于发送者链102a希望发送给接收者链102的每个动作,发送者链102a执行操作704和706。对于每个动作,发送者链102a创建允许的枚举类型中的一个的动作(“type:‘create_foo’”)。归约器602a创建的动作可以与分派给它的动作相同或不相同。然后,归约器602a在操作704处将动作委托给联接管理器604a,随后联接管理器604a在操作706处生成那个动作的标识符并将它放置在未决动作队列606a中。该动作在操作708处,经由读联接,从发送者链102a的未决动作队列606a传输到接收者链102b的未决动作队列606b。

为了有效利用伴随每个读联接的开销,例如密码检查和共识所需的开销,多个动作可以在发送者链102a的未决动作队列606a中排队并经由单个读联接来传输。

对于接收者链102b接收的每个动作,它执行操作710、711、712、714和716。接收者链102b的联接管理器604b在操作710处从未决动作队列606b中移除未决动作,在操作711处将该动作分派给归约器602b,并更新动作状态队列608b以指示该动作正在进行中。归约器602b执行该动作,在操作714处通知联接管理器604b,并且联接管理器604b在操作716处更新动作状态队列608b以指示该动作完成。

在操作717处,发送者链102a的动作状态队列608a经由读联接被更新以与接收者链102b的动作状态队列608b一致。

对于每个更新的动作状态,发送者链102a执行操作718、720和722。在操作718处,联接管理器604a将动作状态队列608a中的动作状态与该动作的先前状态进行比较。在操作720处它更新最初将该动作分派给归约器602a的分派,向用户返回在该动作完成后要返回的任何信息(例如,给用户的指示动作已经完成的通知)。然后,联接管理器604a在操作722处从未决动作队列606a中移除完成的动作。

在操作724处,链102a、b的未决动作队列606a、b使用读联接来同步,随后接收者链102b的联接管理器604b从未决动作队列606b中移除该动作。在该动作被移除之后,动作状态队列608a、b在操作728处使用读联接来同步。

发送者链102a经由读联接从接收者链102b接收动作,该读联接是该动作在接收者链102b处是未决的(操作717)以及该动作已经由接收者链102b执行了(操作728)。对于每个读联接,发送者链102a还接收类似于上面就图5a和5b所述的世系验证数据和有效性验证数据。

图7a至7c的图500、700描绘了动作在链102之间传输。尽管在那些图中没有明确示出,但是每个动作是在第一链102已经达到共识的区块中发送的,所以接收该动作的第二链102可以验证该动作实际上来自第一链并且没有被篡改。

副作用

在至少一些示例实施例中,存储在区块链上的应用程序不仅包括智能合约。例如,应用程序可以包括智能合约,它代表返回值的函数;saga,除了返回值外还执行其他动作,例如与硬件的交互;以及与智能合约和saga交互的动作。saga执行的动作(使用区块链进行请求,而其实际执行无需区块链达成共识)在本文中称为“副作用”。虽然副作用或动作的实际执行不受共识的约束,但区块链做出的执行副作用的决定受共识的约束,而区块链接受副作用的结果的决定也受共识的约束。

区块链102可能执行副作用的一种方式是在区块链102上设置标志,并让特定的区块链102节点104监视区块链102以检测该标志是否已设置。如果该节点104检测到标志,则其执行相关联的动作并将结果返回到区块链。然而,这种方法的一个问题是,如果已被选择执行动作的特定节点104发生故障,则导致区块链102总体无法执行动作。

因此,在本文的至少一些示例实施例中,区块链102选择并指示其一个或多个节点104执行动作,并将由那些一个或多个节点确定的动作的结果作为最终结果存储在区块链上。该动作可以在“主模式”或“集群模式”中执行。在图9中描绘了示例实施例的主模式下,区块链102选择其节点104中的单个节点来执行动作,并且,如果该节点无法及时返回区块链102确定有效的中间结果,则在至少一些示例实施例中,区块链102能够选择其节点104中的不同节点。主节点返回的及时且有效的中间结果被存储在区块链102上作为最终结果。在集群模式中,针对其在图10中示出了示例实施例,区块链102选择其多个节点104以执行动作,并且平均那些节点及时返回的有效中间结果。这些中间结果的平均值作为最终结果存储在区块链102中。与主模式一样,如果集群节点中的任何一个不能返回及时且有效的结果,则在至少一些示例实施例中,区块链102能够选择替换节点。

现在参考图9和图10,示出了根据另外的示例实施例的用于执行使用区块链102请求的动作的方法900、1000。在图9中,第一区块链102a用作示例区块链,并且第一节点104a用作示例主节点。类似地,在图10中,第一区块链102a也被用作示例区块链,并且第一至第四节点104a-d被用作示例集群节点。然而,在不同的示例实施例中,除这些以外的区块链和节点可以用于实现图9和图10的方法900、1000。方法900、1000中的每一个都可以表示为计算机程序代码并存储在非暂时性计算机可读介质中,例如非易失性存储器112,以供节点104的处理器106执行。更具体地,在至少一些示例实施例中,计算机程序代码可以存储或引用在区块链102a上,并且对执行动作的区块链102a的引用导致处理器106执行该计算机程序代码的至少一部分。当代码实际上组成区块链的一部分时,区块链称为“存储”代码,而当区块链存储对存储在区块链之外的代码的引用时,则称为“引用”代码。在区块链仅引用代码的至少一些示例实施例中,该代码仍然可以存储在组成该区块链而不是组成该区块链的一部分的节点上。在至少一些示例实施例中,对代码的引用是密码安全的引用。

如上所述,图9的方法900描绘了“主模式”的示例。方法900在框902处开始,并且进行到框904,其中区块链102a选择节点104a-d中的特定一个作为主节点。区块链102a可以应用任何合适的选择方法来确定节点104a-d中的哪个将充当主节点。例如,节点104a-d中的至少两个节点可以向区块链102a发送信号,每个节点都希望被考虑选择作为主节点,并且选择方法可以包括随机地选择发送信号的节点104a-d中的任何一个作为主节点。附加地或替代地,不同的节点104a-d可以被配置为能够执行不同类型的动作;例如,第一节点104a能够以比其他节点104b-d更高的传输速率进行通信,并且区块链102a因此可以选择第一节点104a作为主节点,因为要执行的动作需要相对较高的带宽。为了描述方法900的框906-916,假定在框904处区块链102a在其第一次执行方法900时选择第一节点104a作为主节点。在该示例实施例中,第一节点104a是当第一区块链102a确定其是否已经达成共识时能够投票的节点;然而,在至少一些不同的示例实施例中,被选择执行动作的节点,无论是在主模式还是集群模式下,都无需具有投票权。如下面进一步详细讨论的,不同的节点104a-d可以被配置为执行需要不同的硬件资源、软件资源或两者的不同动作,并且区块链102a可以从节点104a-d中选择多个主节点,每个主节点都执行需要该节点的特定资源的动作。

不管选择方法如何,一旦区块链102a选择第一节点104a作为主节点,它就前进到框906,其中它指示第一节点104a执行动作。如上所述,该动作的执行不受区块链102a共识的要求的约束;动作的示例包括联系外部系统,例如web服务;与现实世界的任何交互,例如在显示器116上显示图像或发出声音;以及使用网络控制器118进行的任何类型的通信。

在接收到动作之后,第一节点104a执行动作,并且在框908处确定第一节点104a是否已经将及时的动作结果返回给了区块链102a。在方法900的此阶段返回的结果是“中间”结果,因为尚未被区块链102a验证或证实为及时接收到。为了确定第一节点104a是否已经返回了中间结果,区块链102a在区块形成过程中并且在对该潜在区块达成共识之前检查每个潜在区块,以确定第一节点104a是否已经将结果添加到了区块链102a,直到区块链102a确定中间结果实际上已经返回为止。在至少一些示例实施例中,例如图9的实施例,自从第一区块链102a指示第一节点104a执行动作开始,第一区块链102a仅在设定的时间段或设定的区块数中等待中间结果。如果第一节点104a在该区块数或该时间段内返回了中间结果,则方法900接受该中间结果,并进行到框910,其中评估中间结果的有效性。如果在该区块数或该时间段内没有接收到中间结果,则方法900进行到框912,其中,将第一节点104a取消选择为主节点,并且方法900随后在框916处结束。在方法900的随后迭代中,当执行框904时,区块链102a可以使用第一节点104a无法及时返回中间结果的信息来选择不同的节点104b-d作为主节点。

在框910处,区块链102a确定所接收的及时中间结果是否有效。至少在示例实施例中并且如上所述,第一节点104a以json对象数据结构的形式返回中间结果;并且然而,在不同的示例实施例中,结果可以组成不同数据结构的一部分。json对象还包括第一节点104a的数字签名;任务标识符,该任务标识符可以是数字,标识执行的动作;标识第一区块链102a的链标识符;第一个区块链102a的区块的哈希,该区块存储了执行以使区块链102a请求动作执行的计算机程序代码。为了确定结果的有效性,第一区块链102a确定第一节点104a的数字签名是否有效(例如,使用公共密钥密码术,基于令牌的密码术或任何其他合适的加密方法);任务标识符是否有效(例如,它是否与第一区块链102a在将动作发送给第一节点104a执行之前分配给该动作的任务标识符相对应);链标识符是否有效(例如,它是否与第一区块链102a的链标识符匹配;在至少一些示例实施例中,区块链的链标识符是该区块链的创世区块的哈希,尽管在不同的示例实施例中,链标识符可以采用不同的形式);结果的格式是否有效(例如,是否与预期格式匹配);第一节点104a的状态是否有效。在确定第一节点104a的状态是否有效时,第一区块链102a确定第一节点104a是否能够生成中间结果(例如,第一节点104a是否可以访问硬件资源、软件资源或两者以产生中间结果),并且第一节点104a具有活动心跳。第一区块链102a还确定第一节点104a是否仍然被第一区块链102a选择为主节点;也就是说,从第一区块链102a请求第一节点104a执行动作起,第一区块链102a可能已经选择了另一个节点104b-d成为主节点。例如,在框908处,第一节点104a可能未及时返回中间结果,并且在执行方法900的后续迭代时,在框904处,第一区块链102a可能已选择第二节点104b作为主节点。

当数字签名、链标识符、任务标识符、结果的格式以及主节点的状态中的任何一个无效时,中间结果都不会标记为有效,因此将被忽略。第一区块链102a前进到框912,并且取消选择第一节点102a作为主节点。然后,方法900在框916处结束。如上所述,在方法900的后续迭代中,第一区块链102a可以选择节点104b-d中的另一个作为新的主节点,并指示该新的主节点执行相同或不同的动作。

当数字签名、链标识符、任务标识符、结果的格式以及主节点的状态均有效时,将中间结果标记为有效,方法900进行至框914,其中,中间结果被作为动作的最终结果对待,并通过受共识约束并传递共识来更新区块链的102a状态。

现在参考图10,并且如上所述,图10的方法1000描绘了“集群模式”的示例。方法1000在框1002处开始,并且进行到框1004,其中,第一区块链102a选择集群节点。类似于图9的框904,在框1004处,第一区块链102a应用任何合适的选择方法来确定节点104a-d中的哪个节点将充当集群节点。例如,节点104a-d中的至少两个可以向区块链102a发送信号,每个节点都希望被考虑选择为集群节点,并且选择方法可以包括选择发送该信号的所有节点104a-d,或随机选择那些节点104a-d中的至少两个。如在框904处所描述的,选择可以附加地或替代地基于节点104a-d能够执行的动作的类型,并且当第一区块链102a试图达成共识时,所选择的节点104a-d可能具有或不具有投票权。

不管选择方法如何,一旦区块链102a选择第一至第四节点104a-d作为集群节点,它就前进到框1006,其中指示每个节点104a-d执行该动作。然后,节点104a-d中的每一个都以类似于关于框906所描述的方式执行动作。

与在主模式下一样,每个群节点返回的结果称为“中间结果”。对于每个集群节点,区块链102a以类似于区块链102a如何在框908处对主节点进行该确定的方式,在框1008处确定是否及时接收了中间结果;在框1010处对于及时接收到的中间结果,以类似于区块链102a如何在框910处确定主模式的方式确定结果是否有效。在框1012处对于没有返回及时中间结果或返回无效的中间结果的集群节点,则区块链102a以类似于区块链102a在框912处取消选择主节点的方式取消选择该集群节点。在主模式下,在方法1000的后续迭代中,在框1012取消选择的任何集群节点可以在框1004之前再次申请为集群节点。

在框1014处,集群模式与主模式不相似。在框1014处,区块链102a对在框1010处区块链102a确定的有效的所有中间结果取平均值。例如,平均值取决于实施例可以是均值、众数或中位数。在中间结果是数字的示例实施例中(例如,每个中间结果是由于访问天气网络服务而导致的预期天气温度),平均值可以是有效中间结果的平均值、众数和中值中的任何一个。在中间结果是非数字的示例实施例中(例如,每个中间结果是天气模式),平均值可以是中位数或众数。

一旦在框1014处确定平均值,则在框1016处使用该平均值以类似于主模式的框914的方式来更新区块链102a的状态,然后方法1000在框1018处结束。

在至少一些示例实施例中,不管是否正在使用主模式或集群模式,当执行动作时,第一区块链102a可以在节点104a-d中的至少两个之间切换。当区块链102a在其每个区块上执行存储或引用为计算机程序代码的指令时,区块链102a可将不同类型的动作分配给不同类型的节点104a-d,并根据不同类型的动作在不同的节点104a-d之间进行切换。例如,在主模式下,区块链102a可以向有权访问那些资源的节点104a-d中的第一个节点发送需要第一类资源(硬件、软件或两者)的第一类动作并且向有权访问那些资源的节点104a-d中的第二个节点发送需要第二类资源(硬件、软件或两者)的第二类动作。并且例如在集群模式下,区块链102a可向有权访问那些资源的节点中的至少两个节点104a-d发送需要第一类型的资源(硬件、软件或两者)的第一类型的动作,并向有权访问那些资源的节点中的至少两个节点104a-d发送需要第二类型的资源(硬件、软件或两者)的第二类型的动作。如果该节点有权访问执行该动作所需的资源,则该节点被称为具有执行动作的“资格”。

例如,一种类型的动作可能要求节点具有网络访问权限(例如,第三节点104c),而另一种类型的动作可能要求节点(例如,第四节点104d)具有最小的计算能力。区块链102a的第一高度处的第一区块可以请求需要第三节点104c进行网络访问的第一动作;高于第一高度的区块链102a的第二高度处的第二区块可以随后请求第二动作,该第二动作需要第三节点104c的网络访问;高于第二高度的区块链102a的第三高度处的第三区块可以随后请求第三动作,该第三动作需要第四节点104c的计算能力;并且高于第三高度的区块链102a的第四高度处的第四区块可以随后再次请求需要第三节点104c的网络访问的第四动作。在该示例中,区块链102a至少通过第一区块切换到第三节点104c,并且第三节点104c执行第一动作。在到达第二区块之前,区块链102a切换到第四节点104d。当区块链102a到达第二区块时,第四节点104d不执行第二动作,这是因为第四节点104d不具有执行第二动作的资格(即,它没有网络访问权限)。当区块链102a到达第三区块时,第四节点104d有资格执行并且因此执行第三动作。当区块链102a到达第四区块时,它切换回第三节点104c,并且第三节点104c执行与最后一次被区块链102a使用执行动作的时间相对应的区块和当前区块高度之间存在于区块链102a上的其有资格执行的所有动作。在该示例中,第三节点104c在第二区块处执行第二动作,由于没有资格执行第三动作而不执行第三动作,然后执行第四动作。虽然在此示例中,第一到第四动作处于四个不同的区块高度,但是在不同的示例中,处于特定高度的任何单个区块都可以包含许多动作,并且这些动作中的不同动作可以发送到有权访问不同资源的不同节点;即,可以在单个区块内完成切换。

以上已经参考方法、装置、系统和计算机程序产品的流程、序列和框图描述了实施方式。在这点上,所描绘的流程、序列和框图说明了各种实施方式的实现的架构、功能和操作。例如,流程和框图的每个框以及序列图中的操作可以表示代码的模块、段或部分,其包括用于实现指定动作的一个或多个可执行指令。在一些替代实施方式中,在那个框或操作中提到的动作可以以与那些图中提到的顺序不同的顺序发生。例如,在一些实施方式中,连续示出的两个框或操作可以基本上同时执行,或者这些框或操作有时可以以相反的顺序执行,这取决于所涉及的功能。前面已经提到了一些前述具体的示例,但是那些提到的示例不一定是仅有的示例。流程图和框图的每个框以及序列图的操作,以及这些框和操作的组合,可以由执行指定功能或行为的基于专用硬件的系统,或者专用硬件和计算机指令的组合来实现。

在此使用的术语仅仅是为了描述特定的实施方式,而不是旨在限制。因此,如在此所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文清楚地另有指示。还要理解的是,当在本说明书中使用时,术语“包括(comprises)”和“包括(comprising)”指定一个或多个所述特征、整数、步骤、操作、元件和组件的存在,但是不排除一个或多个其他特征、整数、步骤、操作、元件、组件和组的存在或添加。诸如“顶部”、“底部”、“向上”、“向下”、“垂直”和“横向”之类的方向性术语在以下描述中仅用于提供相对参考的目的,并不旨在对任何物品在使用期间如何定位、如何安装在组合中或如何相对于环境提出任何限制。此外,除非另有说明,否则本说明书中使用的术语“耦合”及其变形如“耦合(coupled)”、“耦合(couples)”和“耦合(coupling)”旨在包括间接和直接连接。例如,如果第一设备耦合到第二设备,则该耦合可以是通过直接连接或者通过经由其他设备和连接的间接连接的。类似地,如果第一设备通信地耦合到第二设备,则通信可以是通过直接连接或者通过经由其他设备和连接的间接连接的。

在本说明书(包括权利要求书)中使用术语“包含”、“包含”,“包含”或“包含”中的任何一个或全部时,应将其解释为指定存在所述特征、整数、步骤或组件,但不排除存在一个或多个其他特征、整数、步骤或组件。

可以预期的是,本说明书中讨论的任何方面或实施方式的任何部分都可以实现或与本说明书中讨论的任何其他方面或实施方式的任何部分结合。

在解释权利要求时,要理解的是,至少在权利要求中肯定地陈述了计算机设备的存在或使用的情况下使用那个计算机设备,例如处理器,来实现在此描述的实施方式是必要的。还要理解的是,实现区块链固有地需要计算机设备,例如用于创建和认证新区块的处理器、用于存储区块链的存储器以及用于允许节点之间的通信的网络接口,这是达成共识所必需的。

一个或多个示例实施方式已经通过只是说明的方式描述了。本说明书是出于说明和描述的目的而提出的,而不是旨在是无遗漏的或受限于所公开的形式。对于本领域技术人员来说显而易见的是,许多变化和修改可以在不脱离权利要求书的范围的情况下做出。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1