一种智能合约分簇并行的区块链实现方法及装置转让专利

申请号 : CN202110222612.5

文献号 : CN112598525B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张建钢

申请人 : 北京全息智信科技有限公司

摘要 :

本发明提供了一种智能合约分簇并行的区块链实现方法及装置,将没有依赖关系的智能合约分配进入不同的合约簇、每个合约簇有独立的待执行交易池、待执行交易序列、合约簇状态,以及独立的交易执行线程执行交易。同时修改区块构成将每个合约簇的交易序列的共识和执行结果的共识分开并异步进行,在做到支持任意长耗时的智能合约交易、无依赖关系的智能合约互不干扰的同时,通过区块生成和验证时交易执行无等待或短等待和分属不同合约簇的交易并行执行的方式,大幅度缩短区块链协议栈的整体时延,大大提高区块链协议栈的并发能力和吞吐能力。

权利要求 :

1.一种智能合约分簇并行的区块链实现方法,其特征在于,包括:区块链的节点并行地处理各个合约簇的待执行交易池中的交易,生成各个合约簇的交易处理信息和各个合约簇的世界状态;其中,每个合约簇包括一个智能合约或多个存在依赖关系的智能合约,所述区块链的节点为每个合约簇维护独立的待执行交易池、待执行交易序列和合约状态库,所述待执行交易序列从所述待执行交易池获取,所述各个合约状态库存储各个合约簇的世界状态;

所述区块链的节点根据所述各个合约簇的交易处理信息和所述各个合约簇的世界状态,生成或者验证第一区块;其中,所述各个合约簇的交易处理信息和所述各个合约簇的世界状态分别地记录在所述第一区块;所述区块链的世界状态,是所述区块链的每一个合约簇的世界状态的集合。

2.如权利要求1所述的方法,其特征在于,所述各个合约簇的交易处理信息,包括:各个合约簇的第一待执行交易队列的已执行交易信息;

所述各个合约簇的世界状态,包括:各个合约簇在执行所述第一待执行交易队列后达成的世界状态。

3.如权利要求1所述的方法,其特征在于,所述各个合约簇的交易处理信息,包括:所述第一区块包括的各个合约簇的第二待执行交易队列和第二区块包括的各个合约簇的第三待执行交易队列对应的已执行交易信息;其中,所述第二区块包括所述第一区块和在所述第一区块之前生成的区块,或者,所述第二区块包括在所述第一区块之前生成的区块;

所述各个合约簇的世界状态,包括:各个合约簇在执行所述第三待执行交易队列后达成的世界状态。

4.如权利要求3所述的方法,其特征在于,所述第一区块和所述第二区块间隔预设个数的区块;

所述第二待执行交易队列在生成或验证第三区块时执行,所述第三区块在所述第一区块之后生成,所述第三区块与所述第一区块间隔所述预设个数的区块。

5.如权利要求1所述的方法,其特征在于,还包括:所述区块链的节点接收第一交易;

所述区块链的节点获取所述第一交易包括的智能合约信息;

所述区块链的节点根据所述第一交易包括的智能合约信息,查询第一状态库,确定所述第一交易对应的合约簇;其中,所述第一状态库包括智能合约与合约簇的关系;

所述区块链的节点将所述第一交易放入所述第一交易对应的合约簇的待执行交易池。

6.如权利要求5所述的方法,其特征在于,所述第一状态库包括:智能合约标识和智能合约所属的合约簇标识;或者,智能合约标识、智能合约当前所属的合约簇标识和智能合约原先所属的合约簇标识。

7.如权利要求1所述的方法,其特征在于,还包括:所述区块链的节点接收第二交易;

所述区块链的节点获取所述第二交易包括的待部署智能合约的信息;

所述区块链的节点根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇;

所述区块链的节点根据所述待部署智能合约对应的合约簇部署所述待部署智能合约。

8.如权利要求7所述的方法,其特征在于,所述区块链的节点根据所述待部署智能合约对应的合约簇部署所述待部署智能合约之后,还包括:所述区块链的节点更新所述待部署智能合约对应的合约簇的第一状态库,以及,更新第二状态库;

其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。

9.如权利要求7所述的方法,其特征在于,所述区块链的节点根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇,包括:所述区块链的节点为所述待部署智能合约创建第一合约簇,将所述第一合约簇作为所述待部署智能合约对应的合约簇;或者,所述区块链的节点确定所述待部署智能合约仅与第二合约簇包括的智能合约存在依赖关系,将所述第二合约簇作为所述待部署智能合约对应的合约簇;或者,所述区块链的节点确定所述待部署智能合约与至少两个第三合约簇包括的智能合约存在依赖关系,合并所述至少两个第三合约簇,形成第四合约簇,将所述第四合约簇作为所述待部署智能合约对应的合约簇。

10.如权利要求9所述的方法,其特征在于,所述区块链的节点在合并所述至少两个第三合约簇之前,还包括:

所述区块链的节点将所述第二交易放入所述至少两个所述第三合约簇的待执行交易队列的队头。

11.如权利要求9所述的方法,其特征在于,所述区块链的节点合并所述至少两个第三合约簇,包括:

所述区块链的节点合并所述至少两个第三合约簇的待执行交易池、待执行交易队列、第二状态库,分别形成第四合约簇的待执行交易池、待执行交易队列、第二状态库;以及,根据所述待部署智能合约的信息更新第一状态库;

其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。

12.如权利要求1所述的方法,其特征在于,所述合约簇的标识根据所述合约簇包括的智能合约的地址按照预设规则形成。

13.如权利要求1所述的方法,其特征在于,所述区块链的节点预先为各个合约簇分配独立的进程或者线程,分别用于处理各个合约簇的交易。

14.如权利要求1所述的方法,其特征在于,还包括:所述区块链的节点触发区块回滚或区块修剪;

所述区块链的节点更新与回滚或修剪的区块关联的合约簇的待执行交易池和待执行交易队列;或者,所述区块链的节点更新与回滚或修剪的区块关联的合约簇的待执行交易池、待执行交易队列和第二状态库;

其中,所述第二状态库包括单个合约簇的智能合约信息和世界状态。

15.一种区块链的节点装置,其特征在于,包括:交易处理模块,用于并行地处理各个合约簇的待执行交易池中的交易,生成各个合约簇的交易处理信息和各个合约簇的世界状态;其中,每个合约簇包括一个智能合约或多个存在依赖关系的智能合约,所述区块链的节点为每个合约簇维护独立的待执行交易池、待执行交易序列和合约状态库,所述待执行交易序列从所述待执行交易池获取,所述各个合约状态库存储各个合约簇的世界状态;

区块处理模块,用于根据所述各个合约簇的交易处理信息和所述各个合约簇的世界状态,生成或者验证第一区块;其中,所述各个合约簇的交易处理信息和所述各个合约簇的世界状态分别地记录在所述第一区块;所述区块链的世界状态,是所述区块链的每一个合约簇的世界状态的集合。

16.如权利要求15所述的装置,其特征在于,所述各个合约簇的交易处理信息,包括:各个合约簇的第一待执行交易队列的已执行交易信息;

所述各个合约簇的世界状态,包括:各个合约簇在执行所述第一待执行交易队列后达成的世界状态。

17.如权利要求15所述的装置,其特征在于,所述各个合约簇的交易处理信息,包括:所述第一区块包括的各个合约簇的第二待执行交易队列和第二区块包括的各个合约簇的第三待执行交易队列对应的已执行交易信息;其中,所述第二区块包括所述第一区块和在所述第一区块之前生成的区块,或者,所述第二区块包括在所述第一区块之前生成的区块;

所述各个合约簇的世界状态,包括:各个合约簇在执行所述第三待执行交易队列后达成的世界状态。

18.如权利要求17所述的装置,其特征在于,所述第一区块和所述第二区块间隔预设个数的区块;

所述区块处理模块还用于在生成或验证第三区块时执行所述第二待执行交易队列,所述第三区块在所述第一区块之后生成,所述第三区块与所述第一区块间隔所述预设个数的区块。

19.如权利要求15所述的装置,其特征在于,还包括交易接收模块,用于:接收第一交易;

获取所述第一交易包括的智能合约信息;

根据所述第一交易包括的智能合约信息,查询第一状态库,确定所述第一交易对应的合约簇;其中,所述第一状态库包括智能合约与合约簇的关系;

将所述第一交易放入所述第一交易对应的合约簇的待执行交易池。

20.如权利要求19所述的装置,其特征在于,所述第一状态库包括:智能合约标识和智能合约所属的合约簇标识;或者,智能合约标识、智能合约当前所属的合约簇标识和智能合约原先所属的合约簇标识。

21.如权利要求15所述的装置,其特征在于,还包括智能合约部署模块,用于:接收第二交易;

获取所述第二交易包括的待部署智能合约的信息;

根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇;

根据所述待部署智能合约对应的合约簇部署所述待部署智能合约。

22.如权利要求21所述的装置,其特征在于,所述智能合约部署模块还用于:在根据所述待部署智能合约对应的合约簇部署所述待部署智能合约之后,更新所述待部署智能合约对应的合约簇的第一状态库,以及,更新第二状态库;

其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。

23.如权利要求21所述的装置,其特征在于,所述智能合约部署模块用于根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇时,具体用于:为所述待部署智能合约创建第一合约簇,将所述第一合约簇作为所述待部署智能合约对应的合约簇;或者,

确定所述待部署智能合约仅与第二合约簇包括的智能合约存在依赖关系,将所述第二合约簇作为所述待部署智能合约对应的合约簇;或者,确定所述待部署智能合约与至少两个第三合约簇包括的智能合约存在依赖关系,合并所述至少两个第三合约簇,形成第四合约簇,将所述第四合约簇作为所述待部署智能合约对应的合约簇。

24.如权利要求23所述的装置,其特征在于,所述智能合约部署模块还用于:在合并所述至少两个第三合约簇之前,将所述第二交易放入所述至少两个所述第三合约簇的待执行交易队列的队头。

25.如权利要求23所述的装置,其特征在于,所述智能合约部署模块用于合并所述至少两个第三合约簇时,具体用于:合并所述至少两个第三合约簇的待执行交易池、待执行交易队列、第二状态库,分别形成第四合约簇的待执行交易池、待执行交易队列、第二状态库;以及,根据所述待部署智能合约的信息更新第一状态库;

其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。

26.如权利要求15所述的装置,其特征在于,所述合约簇的标识根据所述合约簇包括的智能合约的地址按照预设规则形成。

27.如权利要求15所述的装置,其特征在于,所述交易处理模块预先为各个合约簇分配独立的进程或者线程,分别用于处理各个合约簇的交易。

28.如权利要求15所述的装置,其特征在于,还包括区块异常处理模块,用于:触发区块回滚或区块修剪;

更新与回滚或修剪的区块关联的合约簇的待执行交易池和待执行交易队列;或者,所述区块链的节点更新与回滚或修剪的区块关联的合约簇的待执行交易池、待执行交易队列和第二状态库;

其中,所述第二状态库包括单个合约簇的智能合约信息和世界状态。

29.一种电子设备,包括存储器和处理器,所述存储器用于存储计算机指令,其特征在于,所述计算机指令被所述处理器执行以实现如权利要求1‑14的任一项所述的方法。

30.一种可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令被处理器执行时实现如权利要求1‑14的任一项所述的方法。

说明书 :

一种智能合约分簇并行的区块链实现方法及装置

技术领域

[0001] 本发明涉及区块链技术领域,尤其是区块组成、区块生成、区块验证和智能合约交易执行这一技术领域。

背景技术

[0002] 无论基于什么共识算法,一个区块链网络上的区块生成节点在生成区块时,会从执行上一区块中的交易序列达成的世界状态开始,从等待交易池中选择一批待执行交易予
以执行,然后把这些交易、执行这些交易达成的新的世界状态(或其哈希值),上一个区块的
哈希值,连同其他必要信息,生成新的区块并把该区块发送给区块链网络上的其他节点,进
而对该区块完成显式或隐式的共识。
[0003] 一个区块链网络上的区块验证节点在收到一个新区块时,会初步验证该区块和其中的交易的有效性,然后从执行上一区块中的交易达成的世界状态开始,执行区块中包含
的所有交易并达成的新的世界状态(或其哈希值),然后与区块中声称的新的世界状态进行
比较。比较成功之后,该区块链节点会依共识流程对该区块完成显式或隐式的共识(即接受
或拒绝该区块)。
[0004] 在区块生成和验证时,执行交易需要的时间在整个区块共识全流程所需总时间中占据很大一部分,从而直接影响了区块链网络的并发和吞吐能力。而且,现实场景通常比较
复杂、交易执行的耗时甚至可能超过区块生成、验证和共识可能允许的最大交易执行时长,
甚至导致这样的场景不被区块链协议栈直接支持。还有,如果区块链网络上的各个节点软
硬件配置和负载不完全相同,在给定的时间敏感的共识机制下,一个长耗时的交易可能在
一组节点上能够完成运行,但在另一组节点上则不能,从而因为出现本应避免的不确定性
而造成区块链协议栈的瘫痪。
[0005] 还有,一个区块链网络上部署的智能合约,经常互不关联。不相关的智能合约相互干扰,降低了区块链网络的整体吞吐能力。

发明内容

[0006] 为了解决上述技术问题中的至少一个,本发明提供了一种智能合约分簇并行的区块链实现方法及装置。
[0007] 本发明的第一方面,提供了一种智能合约分簇并行的区块链实现方法,包括:
[0008] 区块链的节点并行地处理各个合约簇的待执行交易池中的交易,生成各个合约簇的交易处理信息和各个合约簇的世界状态;其中,每个合约簇包括一个智能合约或多个存
在依赖关系的智能合约;
[0009] 所述区块链的节点根据所述交易处理信息和所述世界状态,生成或者验证第一区块。
[0010] 可选地,所述交易处理信息,包括:
[0011] 第一待执行交易队列的已执行交易信息;
[0012] 所述世界状态,包括:
[0013] 执行所述第一待执行交易队列后达成的世界状态。
[0014] 本发明实施例中,一个区块包含了多个合约簇的待执行交易队列和执行该区块的待执行交易队列之后达至的世界状态。
[0015] 可选地,所述交易处理信息,包括:
[0016] 第二待执行交易队列和第二区块包括的第三待执行交易队列对应的已执行交易信息;其中,所述第二区块包括所述第一区块和在所述第一区块之前生成的区块,或者,所
述第二区块包括在所述第一区块之前生成的区块;
[0017] 所述世界状态,包括:
[0018] 执行所述第三待执行交易队列后达成的世界状态。
[0019] 区别于上一个实施例,本发明实施例中,一个区块包含的世界状态是执行完成该区块或该区块之前的某一个区块内的全部或部分的待执行交易队列之后达至的世界状态,
与此同时,区块内不仅包含一组当前生成的待执行交易队列,还包含了在先的区块的待执
行交易队列对应的已执行交易信息。
[0020] 可选地,所述第一区块和所述第二区块间隔预设个数的区块;
[0021] 所述第二待执行交易队列在生成或验证第三区块时执行,所述第三区块在所述第一区块之后生成,所述第三区块与所述第一区块间隔所述预设个数的区块。
[0022] 可选地,方法还包括:
[0023] 所述区块链的节点接收第一交易;
[0024] 所述区块链的节点获取所述第一交易包括的智能合约信息;
[0025] 所述区块链的节点根据所述第一交易包括的智能合约信息,查询第一状态库,确定所述第一交易对应的合约簇;其中,所述第一状态库包括智能合约与合约簇的关系;
[0026] 所述区块链的节点将所述第一交易放入所述第一交易对应的合约簇的待执行交易池。
[0027] 可选地,所述第一状态库包括:
[0028] 智能合约标识和智能合约所属的合约簇标识;或者,
[0029] 智能合约标识、智能合约当前所属的合约簇标识和智能合约原先所属的合约簇标识。
[0030] 可选地,方法还包括:
[0031] 所述区块链的节点接收第二交易;
[0032] 所述区块链的节点获取所述第二交易包括的待部署智能合约的信息;
[0033] 所述区块链的节点根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇;
[0034] 所述区块链的节点根据所述待部署智能合约对应的合约簇部署所述待部署智能合约。
[0035] 可选地,所述区块链的节点根据所述待部署智能合约对应的合约簇部署所述待部署智能合约之后,还包括:
[0036] 所述区块链的节点更新所述待部署智能合约对应的合约簇的第一状态库,以及,更新第二状态库;
[0037] 其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。
[0038] 可选地,所述区块链的节点根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇,包括:
[0039] 所述区块链的节点为所述待部署智能合约创建第一合约簇,将所述第一合约簇作为所述待部署智能合约对应的合约簇;或者,
[0040] 所述区块链的节点确定所述待部署智能合约仅与第二合约簇包括的智能合约存在依赖关系,将所述第二合约簇作为所述待部署智能合约对应的合约簇;或者,
[0041] 所述区块链的节点确定所述待部署智能合约与至少两个第三合约簇包括的智能合约存在依赖关系,合并所述至少两个第三合约簇,形成第四合约簇,将所述第四合约簇作
为所述待部署智能合约对应的合约簇。
[0042] 可选地,所述区块链的节点在合并所述至少两个第三合约簇之前,还包括:
[0043] 所述区块链的节点将所述第二交易放入所述至少两个所述第三合约簇的待执行交易队列的队头。
[0044] 可选地,所述区块链的节点合并所述至少两个第三合约簇,包括:
[0045] 所述区块链的节点合并所述至少两个第三合约簇的待执行交易池、待执行交易队列、第二状态库,分别形成第四合约簇的待执行交易池、待执行交易队列、第二状态库;以
及,根据所述待部署智能合约的信息更新第一状态库;
[0046] 其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。
[0047] 可选地,所述合约簇的标识根据所述合约簇包括的智能合约的地址按照预设规则形成。
[0048] 可选地,所述区块链的节点预先为各个合约簇分配独立的进程或者线程,分别用于处理各个合约簇的交易。
[0049] 可选地,方法还包括:
[0050] 所述区块链的节点触发区块回滚或区块修剪;
[0051] 所述区块链的节点更新与回滚或修剪的区块关联的合约簇的待执行交易池和待执行交易队列;或者,所述区块链的节点更新与回滚或修剪的区块关联的合约簇的待执行
交易池、待执行交易队列和第二状态库;
[0052] 其中,所述第二状态库包括单个合约簇的智能合约信息和世界状态。
[0053] 本发明的第二方面,提供了一种区块链的节点装置,包括:
[0054] 交易处理模块,用于并行地处理各个合约簇的待执行交易池中的交易,生成各个合约簇的交易处理信息和各个合约簇的世界状态;其中,每个合约簇包括一个智能合约或
多个存在依赖关系的智能合约;
[0055] 区块处理模块,用于根据所述交易处理信息和所述世界状态,生成或者验证第一区块。
[0056] 可选地,所述交易处理信息,包括:
[0057] 第一待执行交易队列的已执行交易信息;
[0058] 所述世界状态,包括:
[0059] 执行所述第一待执行交易队列后达成的世界状态。
[0060] 可选地,所述交易处理信息,包括:
[0061] 第二待执行交易队列和第二区块包括的第三待执行交易队列对应的已执行交易信息;其中,所述第二区块包括所述第一区块和在所述第一区块之前生成的区块,或者,所
述第二区块包括在所述第一区块之前生成的区块;
[0062] 所述世界状态,包括:
[0063] 执行所述第三待执行交易队列后达成的世界状态。
[0064] 可选地,所述第一区块和所述第二区块间隔预设个数的区块;
[0065] 所述区块处理模块还用于在生成或验证第三区块时执行所述第二待执行交易队列,所述第三区块在所述第一区块之后生成,所述第三区块与所述第一区块间隔所述预设
个数的区块。
[0066] 可选地,装置还包括交易接收模块,用于:
[0067] 接收第一交易;
[0068] 获取所述第一交易包括的智能合约信息;
[0069] 根据所述第一交易包括的智能合约信息,查询第一状态库,确定所述第一交易对应的合约簇;其中,所述第一状态库包括智能合约与合约簇的关系;
[0070] 将所述第一交易放入所述第一交易对应的合约簇的待执行交易池。
[0071] 可选地,所述第一状态库包括:
[0072] 智能合约标识和智能合约所属的合约簇标识;或者,
[0073] 智能合约标识、智能合约当前所属的合约簇标识和智能合约原先所属的合约簇标识。
[0074] 可选地,装置还包括智能合约部署模块,用于:
[0075] 接收第二交易;
[0076] 获取所述第二交易包括的待部署智能合约的信息;
[0077] 根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇;
[0078] 根据所述待部署智能合约对应的合约簇部署所述待部署智能合约。
[0079] 可选地,所述智能合约部署模块还用于:
[0080] 在根据所述待部署智能合约对应的合约簇部署所述待部署智能合约之后,更新所述待部署智能合约对应的合约簇的第一状态库,以及,更新第二状态库;
[0081] 其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。
[0082] 可选地,所述智能合约部署模块用于根据所述待部署智能合约的信息,确定所述待部署智能合约对应的合约簇时,具体用于:
[0083] 为所述待部署智能合约创建第一合约簇,将所述第一合约簇作为所述待部署智能合约对应的合约簇;或者,
[0084] 确定所述待部署智能合约仅与第二合约簇包括的智能合约存在依赖关系,将所述第二合约簇作为所述待部署智能合约对应的合约簇;或者,
[0085] 确定所述待部署智能合约与至少两个第三合约簇包括的智能合约存在依赖关系,合并所述至少两个第三合约簇,形成第四合约簇,将所述第四合约簇作为所述待部署智能
合约对应的合约簇。
[0086] 可选地,所述智能合约部署模块还用于:
[0087] 在合并所述至少两个第三合约簇之前,将所述第二交易放入所述至少两个所述第三合约簇的待执行交易队列的队头。
[0088] 可选地,所述智能合约部署模块用于合并所述至少两个第三合约簇时,具体用于:
[0089] 合并所述至少两个第三合约簇的待执行交易池、待执行交易队列、第二状态库,分别形成第四合约簇的待执行交易池、待执行交易队列、第二状态库;以及,根据所述待部署
智能合约的信息更新第一状态库;
[0090] 其中,所述第一状态库包括智能合约与合约簇的关系;所述第二状态库包括单个合约簇的智能合约信息和世界状态。
[0091] 可选地,所述合约簇的标识根据所述合约簇包括的智能合约的地址按照预设规则形成。
[0092] 可选地,所述交易处理模块预先为各个合约簇分配独立的进程或者线程,分别用于处理各个合约簇的交易。
[0093] 可选地,装置还包括区块异常处理模块,用于:
[0094] 触发区块回滚或区块修剪;
[0095] 更新与回滚或修剪的区块关联的合约簇的待执行交易池和待执行交易队列;或者,更新与回滚或修剪的区块关联的合约簇的待执行交易池、待执行交易队列和第二状态
库;
[0096] 其中,所述第二状态库包括单个合约簇的智能合约信息和世界状态。
[0097] 本发明的第三方面,提供了一种电子设备,包括存储器和处理器,所述存储器用于存储计算机指令,所述计算机指令被所述处理器执行以实现如本发明第一方面所述的方
法。
[0098] 本发明的第四方面,提供了一种可读存储介质,其上存储有计算机指令,所述计算机指令被处理器执行时实现本发明第一方面所述的方法。
[0099] 本发明实施例,将智能合约按依赖关系分簇(合约簇),每个合约簇有各自独立的待执行交易池、待执行交易序列、合约状态库以及交易执行线程并行处理、互不干扰,提高
了包括多个智能合约的区块链的交易管理效率。进一步地,修改区块组成,将交易序列和结
果状态按合约簇分组,把每个合约簇的交易排序的共识(交易计入区块)和结果状态的共识
(状态哈希计入区块)异步处理、区块生成/验证/共识过程和交易执行过程并行处理,确保
合约簇的世界状态“用时即有”,在做到不相关的智能合约交易互不干扰、完全消除区块链
对智能合约交易耗时的显式或隐式限制的同时,大大提高区块链的并发和吞吐能力。

附图说明

[0100] 附图示出了本发明的示例性实施方式,并与其说明一起用于解释本发明的原理,其中包括了这些附图以提供对本发明的进一步理解,并且附图包括在本说明书中并构成本
说明书的一部分。
[0101] 图 1是本发明之前的区块链中第x个区块(Bx)的组成示例图,其中对应世界状态WSx。
[0102] 图 2是本发明实施例的区块链中第x个区块(Bx)的组成示例图,其中有每一个合约簇的待执行交易序列和已执行交易达至的世界状态(合约簇状态)的哈希值。
[0103] 图3 是本发明实施例的区块链协议栈的主要模块及其关联架构。

具体实施方式

[0104] 下面结合附图和实施方式对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施方式仅用于解释相关内容,而非对本发明的限定。另外还需要说明的是,为
了便于描述,附图中仅示出了与本发明相关的部分。
[0105] 需要说明的是,在不冲突的情况下,本发明中的实施方式及实施方式中的特征可以相互组合。下面将参考附图并结合实施方式来详细说明。
[0106] 本发明实施例提供了一种智能合约分簇并行、区块链区块组成、区块执行(生成及验证)的方法。该方法将交易执行和世界状态按智能合约分组(合约簇),并在区块中包含每
一个合约的合约簇(有新的未执行交易序列或已执行交易序列的合约簇)的新的未执行交
易序列、已执行交易序列及达至的合约簇的世界状态(合约簇状态)的哈希值。整个区块链
的世界状态,是该区块链网络上每一个合约簇状态的集合。
[0107] 如果一个智能合约A在执行交易的过程中,可能读写另一个智能合约B的状态,则智能合约A依赖智能合约B。分属不同合约簇的任意两个智能合约之间没有依赖关系,即相
互不读写对方的状态。一个智能合约,或者单独组成合约簇(即不依赖其他任何智能合约、
也不被其他任何智能合约依赖),或者依赖其所属合约簇内的一个或多个其他智能合约,或
被其所属合约簇内的一个或多个其他智能合约依赖。智能合约在部署时可以声明其对其他
智能合约的依赖,区块链协议栈可以自动对违反依赖关系的交易和智能合约以失败处理或
自动更新依赖关系。
[0108] 每个区块链节点为每个合约簇维护一个独立的待执行交易池、待执行交易队列和合约状态库(合约簇状态),并分配一个独立的交易执行线程。待执行交易池,存放应用程序
提交的或从同一区块链网络上的其他区块链节点同步过来的目标为本合约簇中的智能合
约的交易。
[0109] 在区块生成时,区块生成节点从每一个合约簇获取在当前账本分支上的、新的未汇报状态的已执行的交易序列及其世界状态的哈希值(无需等待),以及新一组的待执行的
交易序列,然后将其“打包”生成新区块。每一个合约簇将其提供给新区块的待执行交易序
列添加到该合约簇的待执行交易队列,以便该合约簇的交易执行线程顺次执行交易。
[0110] 在区块验证时,区块验证节点针对区块中的每一个合约簇,将区块中的该合约簇的未执行交易序列、已执行交易序列和合约簇状态的哈希值,交由该合约簇。因为新区块中
的已执行交易序列,是以待执行交易序列的形式包含在本区块之前的区块中的,本地节点
在收到那些区块时,已经提交给该合约簇的交易执行线程异步执行了,所以该合约簇很大
可能已经在本地完全执行了新区块中的已执行交易序列(如果还没有全部执行,则完成该
序列中剩余的交易)实现合约簇的状态“用时即有”、无需等待,该合约簇只要验证本地状态
与区块中的状态是否相符即可。如果相符,就将新区块中的、属于该合约簇的待执行交易序
列添加到该合约簇的待执行交易队列,等待该合约簇的交易执行线程异步执行。
[0111] 在进行可能的区块回滚、账本分支修剪等操作时,区块链的共识机制只要通知需要剔除的区块内包含的每一个合约簇将相关的待执行交易序列、已执行交易序列和合约簇
状态清除即可。
[0112] 本发明将没有依赖关系的智能合约分配进入不同的合约簇、每个合约簇有独立的交易执行线程执行交易,并独自维护其待执行交易池、待执行交易队列、已执行交易序列及
结果状态,同时修改区块组成将每个合约簇的交易序列的共识和执行结果的共识分开并异
步进行,在做到支持任意长耗时的智能合约交易、无依赖关系的智能合约互不干扰的同时,
通过区块生成和验证时交易执行无等待或短等待和分属不同合约簇的交易并行执行的方
式,大幅度缩短区块链协议栈的整体时延,提高区块链协议栈的并发能力和吞吐能力。
[0113] 本发明的具体实施方式通过以下几个方面进行阐述。
[0114] 一、问题的提出。
[0115] 区块链技术中最著名的数据结构,应该就是“分布式账本”了。分布式账本,是一个区块列表,其中的每一个区块都包含一组交易、执行完该区块的交易之后达成的世界状态
的哈希值、前一区块哈希值等信息。如图1中图块100所示,在本发明之前,第x个区块(即Bx)
包含以下信息:
[0116] (1)前一个区块(即Bx‑1)的哈希值,用BHx‑1表示(图块101);
[0117] (2)一个交易列表,其中每个交易均有发起方签名。如TX1 (图块 102) & TXn (图块 103);
[0118] (3)执行完成Bx中的交易之后达成的世界状态的哈希值,用WSx (图块 104);
[0119] (4)其他与具体的区块链技术相关的信息,如区块签名。
[0120] 在生成第x个区块,即Bx时,一个区块链网络上的区块生成节点,基于执行上一区块中的交易达成的世界状态(WSx‑1)开始,首先从等待交易池中选择一组待执行的交易,执
行并达成新的世界状态(WSx),然后生成Bx,发送其到整个区块链网络并与其他节点一起完
成共识流程。
[0121] 在验证第x个区块,即Bx时,一个区块链网络上的区块验证节点,在完成初步的区块正确性校验之后,从执行上一区块中的交易达成的世界状态(WSx‑1)出发,执行区块中的
交易,并达成新的世界状态(WSx)并与该区块中声称的世界状态比较。如果一致,再参与完
成后续的共识流程。
[0122] 在区块生成和验证时执行交易需要的时间,占据整个区块链共识流程所需要的时间的相当大一部分。而且,现实场景通常比较复杂、交易执行的耗时甚至可能超过区块生
成、验证和共识可能允许的最大交易执行时长,直接导致这样的场景不被区块链协议栈支
持。还有,如果区块链网络上的各个节点软硬件配置和负载不完全相同,在给定的时间敏感
的共识机制下,一个长耗时的交易可能在一组节点上能够完成运行,但在另一组节点上则
不能,从而因为出现本应避免的不确定性而可能造成区块链协议栈的瘫痪。
[0123] 还有,一个区块链网络上部署的智能合约,经常互不关联。不相关的智能合约应该最大限度的避免相互干扰和并行处理交易,以提高区块链网络的整体性能和稳定性。
[0124] 在区块链网络中,最小化区块中的交易的执行时间对共识过程的影响并支持长耗时的应用场景,对提高区块链的性能和对现实场景的适用性,至关重要。
[0125] 二、合约依赖和合约分簇。
[0126] 在一个区块链网络上部署的智能合约之间,可能存在依赖关系。如果一个智能合约A在初始化或执行交易时,可能需要读写另一个智能合约B的状态,则智能合约A依赖智能
合约B,即智能合约A和B相关。合约依赖可以在部署时由部署方声明或区块链协议栈在运行
时发现。
[0127] 有依赖关系的两个智能合约,因为其状态存在关联,所以其交易原则上只能进入同一个队列顺次执行以确保确定性。相反,没有依赖关系的两个智能合约,因为其状态互不
关联,所以分属不同智能合约的交易可以并行执行。有鉴于此,本发明将一个区块链网络上
部署的智能合约按其相关性分簇,称为合约簇。
[0128] 同一个合约簇内的智能合约之间,存在直接或间接的依赖关系。分属不同合约簇的任意两个智能合约,不存在直接或间接的依赖关系。比如,智能合约A,B,C,D。如果D在执
行交易时不读写任何其他智能合约的状态,C在执行交易时可能会读取B的状态、而B在执行
交易时可能读写A的状态,则A,B,C必须进入同一个合约簇,D进入一个只有D组成的另外一
个合约簇。
[0129] 一个合约簇的标识,可以有多种方式定义。为简单起见,本发明定义一个合约簇的标识由组成该合约簇的智能合约的区块链地址按确定顺序进行字节连接然后取SHA256哈
希得到。比如,智能合约A,B,C的区块链地址分别是0xA…A、0xB…B、0xC…C,则由A,B,C组成
的合约簇的标识为:SHA256(0xA…AB…BC…C)。
[0130] 三、并行执行和状态隔离。
[0131] 因为各个合约簇之间互不依赖,基于本发明的区块链协议栈可以在交易执行时为每个合约簇分配各自的交易执行线程,分属不同合约簇的交易执行线程并行执行各自的待
执行交易序列,而无需互相等待和彼此干扰,这样可以大大提高交易执行的并发和吞吐能
力。
[0132] 因为每个合约簇的世界状态(合约簇状态)都独立于其他的合约簇,所以基于本发明的区块链协议栈可以为每个合约簇分配独享的合约状态库以存储该合约簇的世界状态,
以实现跨合约簇的状态隔离。这样在交易执行时无需和其他合约簇的交易执行线程竞争状
态库的访问权,能够进一步提高各个合约簇的交易执行线程的效率。
[0133] 合约簇之间的互不依赖和状态隔离,使在区块生成、验证和共识过程中做到各个合约簇间基本上互不制约、互不等待成为可能。
[0134] 四、单个交易序列和单个结果状态异步共识。
[0135] 传统的区块链协议栈的区块构成,如图1所示,包含了一个交易序列(图块102、图块103)和从前一个区块的交易序列执行结束达至的世界状态出发执行该区块的交易序列
之后的世界状态WSx(图块104)。传统的区块链协议栈,在对每一个区块进行共识的过程中,
同时共识该区块包含的交易序列以及执行该交易序列之后的结果状态,所以在区块生成和
验证时需要等待该区块的交易序列执行结束。
[0136] 其实完全可以修改区块的定义,使其包含的结果状态(哈希值)不是对应执行完成该区块交易序列之后达至的世界状态,而是执行完成该区块或该区块之前的某一个区块内
的全部或部分交易序列之后达至的世界状态。比如,第x个区块包含的世界状态,不是执行
完成第x个区块包含的交易序列之后达至的世界状态,而是包含执行完成第(x‑d)个区块中
的第m个交易之后达至的世界状态。这样,如果交易序列的执行线程和区块的生成/验证/传
播/共识线程是并行进行,则在生成第x个区块时,交易执行线程已经完成执行第(x‑d)个区
块中的第m个交易并达至相应的世界状态,在第x块中只要填入该世界状态(的哈希值)即
可,无需等待。在区块验证中,亦是如此(当然如果本地区块链节点还没有完成执行,则需稍
稍等待)。
[0137] 五、多个交易序列和多个结果状态异步共识。
[0138] 注意到不同的合约簇互不依赖、状态隔离、可以并行,本发明修改区块的构成,使之对每一个当前活跃的合约簇(在当前账本分支上有新的待执行交易或新的结果状态的合
约簇),分别包含其(待执行的)交易序列和(已执行交易序列达至的)结果状态。本发明的第
x个区块的构成如图2的图块200所示,图块201是前一区块的哈希,图块202、图块203是该区
块包含的属于合约簇C1的交易序列的第一个和最后一个交易,图块204、图块205是该区块
包含的属于合约簇C2的交易序列的第一个和最后一个交易。图块206是合约簇u在执行完成
第m个区块中该合约簇的第i个交易之后达至的该合约簇的世界状态(用WSu:m:i表示,实现
中可以是一个编程结构体),图块207是合约簇v在执行完成第n个区块中该合约簇的第j个
交易之后达至的该合约簇的世界状态(用WSv:n:j表示)。
[0139] 这样,每个合约簇的交易执行线程可以并行运行,各自执行其待执行交易序列并达至相应的结果状态。
[0140] 在区块生成时,区块生成节点的区块链协议栈的区块生成模块,从每一个活跃的合约簇无需等待、直接获取新的待执行交易序列和新的已执行交易序列及达至的结果状
态,生成区块即可。在区块验证时,区块验证节点的区块链协议栈的区块验证模块,向区块
中包含的每一个合约簇的合约簇管理器,提交区块中的属于该合约簇的待执行交易序列和
已执行交易序列及结果状态。合约簇的合约簇管理器,检查区块中的合约簇状态对应的交
易序列是否已经执行完成(如果没有,则等待其完成)。完成之后,验证本地状态和区块中的
合约簇状态是否匹配。如果不匹配,则验证失败。如果匹配,则将新的待执行交易序列附加
到其待执行交易队列的队尾,以便该合约簇的交易执行线程异步执行。
[0141] 六、总体架构。
[0142] 如图3所示,基于本发明的区块链协议栈(图块316)包括以下几个逻辑模块:
[0143] (一)网络服务(图块312)。
[0144] 提供面向客户端的网络接口(比如基于HTTPS的JSONRPC),以便接受并响应来自客户端应用程序(图块314)的交易提交、状态查询和消息订阅请求;提供面向区块链网络上其
他区块链节点的网络接可(比如交易TCP或TLS的P2P网络),以便实现区块链节点组网,向其
他区块链节点请求/同步交易、区块和状态等信息,或响应来自其他节点的交易、区块和状
态等信息请求。
[0145] (二)共识机制(图块310)。
[0146] 实现共识算法。基于共识算法,当本地节点作为区块生成节点时触发区块生成(图块307)、作为区块验证节点时触发区块验证(图块309)、共识过程中触发区块回滚和账本分
支修剪,以及通过网络服务(图块312)与其他区块链节点同步交易、区块、状态等信息,实现
全链共识,并将共识区块计入区块链账本(图块308)。
[0147] (三)分簇状态库(图块313):保存每个智能合约的依赖关系,及所属的合约簇。由每个合约簇的交易执行线程(图块302)在成功完成合约部署(或取消部署)时更新。分簇机
制(图块311)读取分簇状态库以确定一个交易的目标合约簇。每个合约簇在分簇状态库中
有一条以该合约簇的ID为索引的记录(合约簇组成记录),记录内容至少包括:原合约簇ID
(如果没有,则为空)、智能合约列表。每个智能合约在分簇状态库中有一条以该智能合约地
址为索引的记录(智能合约簇属记录),记录内容至少包括:原合约簇ID(如果没有,则为
空)、当前合约簇ID。
[0148] (四)分簇机制(图块311):通过网络服务(图块312)收到智能合约部署交易或业务交易时,根据被部署智能合约或目标智能合约的依赖关系,查询分簇状态库(图块313)决定
所属的目标合约簇。在部署时,如果所属的目标合约簇不存在,则创建一个新的合约簇作为
目标合约簇,然后将智能合约部署交易或业务交易转发给所属目标合约簇的待执行交易池
(图块304)。
[0149] (五)区块链账本(图块308):分布式的区块链账本,包括从创世区块开始的所有确认区块和交易等信息。从创世区块开始执行每一笔交易能够重构所有的状态信息。
[0150] (六)区块生成(图块307):响应共识机制(图块310)的触发,从每一合约簇获取一个待执行交易序列,以及在当前账本分支上已执行的交易序列的最后一笔交易(用交易所
在的区块号、区块哈希和交易在该区块内的该合约簇的待执行交易序列的位置表示),及达
至的合约簇的世界状态,然后将这些信息连同前一个区块的哈希等其他信息,生成新区块
并交给共识机制模块(图块301)参与共识流程。
[0151] (七)区块验证(图块309):在收到来自其他区块链节点的区块时,响应共识机制(图块310)的触发,验证该区块:针对区块中的每一个合约簇,将区块中的该合约簇的未执
行交易序列、已执行交易序列及其达至的合约簇状态的哈希值,交由该合约簇验证并返回
验证结果(验证成功或者验证失败)。
[0152] (八)一个或多个合约簇(图块300):每个合约簇拥有自己独立于其他合约簇的待执行交易池(图块304)、待执行交易序列(图块301)、合约状态库(图块306)、一个或多个智
能合约(图块303)、交易执行线程(图块302)和合约簇管理器(图块305)。
[0153] (九)待执行交易池(图块304):用于接收客户端应用程序(图块314)和其他区块链节点(图块315)通过网络服务(图块312)发来的目标智能合约属于该合约簇的交易。
[0154] (十)合约簇管理器(图块305):在生成区块时,应区块生成模块(图块307)的请求从该合约簇的待执行交易池(图块304)获取一个待执行交易序列,以及从该合约簇的合约
状态库(图块306)获取在当前账本分支上已执行的交易序列的最后一笔交易(用交易所在
的区块号、区块哈希和交易在该区块内的该合约簇的待执行交易序列的位置表示),及达至
的合约簇的世界状态,然后返回这些信息给区块生成模块。在验证区块时,应区块验证模块
(图块309)的请求,从该合约簇的合约状态库(图块306)获取该合约簇在当前账本分支上、
待验证区块中指定的已执行的交易序列的最后一笔交易达至的合约簇的世界状态,并与区
块中声称的合约簇的状态进行比对。因为新区块中的已执行交易序列,是以待执行交易序
列的形式包含在本区块之前的区块中的,本地节点在收到那些区块时,已经提交给该合约
簇的交易执行线程异步执行了,所以该合约簇很大可能已经在本地完全执行了新区块中的
已执行交易序列,无需等待状态就绪(如果还没有全部执行,则等待完成该序列中剩余的交
易)。如果二者不同,则返回匹配失败给区块验证模块。如果匹配相同,则将区块中的该合约
簇的待执行交易序列添加到该合约簇的待执行交易队列的队尾,以便该合约簇的交易执行
线程(图块302)适时执行。合约簇管理器,也应共识机制模块(图块310)的请求,回滚、修剪
作废的区块,并相应的更新该合约簇的待执行交易池、待执行交易队列和合约状态库(如果
需要的话)。
[0155] (十一)合约状态库(图块306):按账本分支,存储该合约簇的每个已执行交易达至的该合约簇的世界状态,以及该合约簇的组成信息,包括合约簇ID、智能合约列表、原合约
簇ID(如果没有,则为空)等。通常以默克尔树的形式实现。
[0156] (十二)待执行交易队列(图块301):是一个先进先出的交易队列。在队尾接收区块中的待执行交易序列。
[0157] (十三)交易执行线程(图块302):从待执行交易队列的队头提取待执行交易。如果待执行交易是部署交易则部署该智能合约,并更新分簇状态库(图块313)。如果是业务交
易,则调用相应的目标智能合约(图块303)执行该交易。交易执行线程由合约簇管理器(图
块305)在待执行交易队列不为空时启动、在待执行交易队列为空时暂停或终止。实现上,交
易执行线程可以以操作系统线程、操作系统进程等方式实现。
[0158] (十四)一个或多个智能合约(图块303):由区块链协议栈触发、执行交易、读写合约状态库(图块306)以完成业务逻辑并记录结果状态。
[0159] 七、关键流程。
[0160] (一)交易接收。
[0161] 基于本发明的区块链协议栈接收交易的流程如下:
[0162] (1)本地区块链节点的网络服务从应用程序(图块314)或区块链网络上的其他区块链节点(图块315),或者以从本地存储读取的方式,接收然后验证交易;
[0163] (2)交易转发给分簇机制模块(图块311);
[0164] (3)如果是部署交易,则读取交易中的待部署智能合约的依赖列表,选定第一个被依赖的智能合约所在的合约簇为目标合约簇。如果没有依赖列表,则创建一个新的合约簇
作为目标合约簇;如果是业务交易,分簇机制模块,根据交易的目标智能合约地址,从分簇
状态库(图块313)查询其目标合约簇;
[0165] (4)如果找到目标合约簇,则将交易存入该合约簇的待执行交易池(图块304);否则,丢弃该交易。
[0166] (二)合约部署。
[0167] 基于本发明的合约部署流程如下:
[0168] (1)一个合约簇的交易执行线程(图块302)从其待执行交易队列提取到一个智能合约部署交易;
[0169] (2)如果该合约簇是待部署智能合约的目标合约簇,即该合约簇是为该待部署合约新创建的或者是其第一个被依赖的智能合约所在的合约簇,则该合约簇的交易执行线
程,安装启动智能合约。如果该合约簇是待合并合约簇(即该合约簇不是待部署智能合约的
目标合约簇但是其依赖的智能合约的所属合约簇),则停止终止交易执行线程等待合并;
[0170] (3)目标合约簇成功安装启动智能合约之后,将该部署交易转发到该智能合约的待合并合约簇的待执行交易序列(图块301)的队头以便该合约簇第一时间接收并停止其交
易执行线程,即以上的第(1)和(2)步;
[0171] (4)目标合约簇等待这些待合并合约簇的交易执行线程停止运行之后,以确定的方式合并其待执行交易池、合约状态库和待执行交易队列到目标合约簇,然后在分簇状态
库中更新合约簇组成记录和智能合约簇属记录。
[0172] (三)区块生成。
[0173] 基于本发明的区块生成流程如下:
[0174] (1)共识机制(图块310)基于共识逻辑触发区块生成模块(图块307);
[0175] (2)区块生成模块从每一个合约簇获取新的未汇报状态的已执行的交易序列(当前账本分支上未汇报的第一个已执行交易所在的区块号码、区块哈希和该交易在该区块中
该合约簇的待执行交易序列中的序号,当前账本分支上未汇报的最后一个已执行交易所在
的区块号码、区块哈希和该交易在该区块中该合约簇的待执行交易序列中的序号)及其世
界状态的哈希值(无需等待),以及新一组的待执行的交易序列(交易ID的列表)。
[0176] (3)每一个合约簇将其提供给新区块的待执行交易序列添加到该合约簇的待执行交易队列(区块301),以便该合约簇的交易执行线程顺次执行交易。
[0177] (4)区块生成模块,将每个活跃合约簇提供的待执行交易序列、已执行交易序列及达至的合约簇的世界状态“打包”生成新区块。
[0178] (四)区块验证。
[0179] 基于本发明的区块验证流程如下:
[0180] (1)共识机制(图块310)基于共识逻辑触发区块验证模块(图块309);
[0181] (2)区块验证模块,向区块中包含的每一个合约簇的合约簇管理器(图块305),提交区块中的属于该合约簇的待执行交易序列和已执行交易序列及结果状态。
[0182] (3)每个约簇的合约簇管理器,检查区块中的合约簇状态对应的交易序列是否已经执行完成。因为新区块中的已执行交易序列,是以待执行交易序列的形式包含在本区块
之前的区块中的,本地节点在收到那些区块时,已经提交给该合约簇的交易执行线程异步
执行了,所以该合约簇很大可能已经在本地完全执行了新区块中的已执行交易序列,所以
合约簇的状态很大可能是“用时即有”、无需等待,可以立即验证本地状态和区块中的合约
簇状态是否匹配(即便等待也是短时等待以完成执行该序列中剩余的交易);
[0183] (4)如果不匹配,则验证失败。如果匹配,则将新的待执行交易序列附加到其待执行交易队列的队尾,以便该合约簇的交易执行线程异步执行。
[0184] 八、概要总结。
[0185] 本发明将智能合约按依赖关系分簇(合约簇)、每个合约簇有各自独立的待执行交易池、待执行交易序列、合约状态库以及交易执行线程并行处理、互不干扰。同时修改区块
组成,将交易序列和结果状态按合约簇分组,把每个合约簇的交易排序的共识(交易计入区
块)和结果状态的共识(状态哈希计入区块)异步处理、区块生成/验证/共识过程和交易执
行过程并行处理确保合约簇的世界状态“用时即有”,在做到不相关的智能合约交易互不干
扰、完全消除区块链对智能合约交易耗时的显式或隐式限制的同时,大大提高区块链的并
发和吞吐能力。
[0186] 应当理解,这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒
介,例如软盘、CD‑ROM、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指
令)的形式,其中当程序被载入诸如计算机之类的机器,并被该机器执行时,该机器变成实
践本发明的设备。
[0187] 在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至
少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器
中存储的该程序代码中的指令,执行本发明的各种方法。
[0188] 以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、
数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调
制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传
递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。
[0189] 本领域那些技术人员应当理解在本文所发明的示例中的设备的模块或模块或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备
不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个
子模块。
[0190] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或模
块或组件组合成一个模块或模块或组件,以及此外可以把它们分成多个子模块或子模块或
子组件。除了这样的特征和/或过程或者模块中的至少一些是相互排斥之外,可以采用任何
组合对本说明书(包括伴随的权利要求、摘要和附图)中发明的所有特征以及如此发明的任
何方法或者设备的所有过程或模块进行组合。除非另外明确陈述,本说明书(包括伴随的权
利要求、摘要和附图)中发明的每个特征可以由提供相同、等同或相似目的的替代特征来代
替。
[0191] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的
范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一
都可以以任意的组合方式来使用。
[0192] 尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,
本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限
定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本
技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本
发明所做的发明是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。