智能合约执行与跨合约调用方法、装置及存储介质转让专利

申请号 : CN202110916555.0

文献号 : CN113360251B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

申请人 : 北京微芯感知科技有限公司

摘要 :

本申请关于一种智能合约执行与跨合约调用方法、装置及存储介质。其中方法包括:创建一个容器,启动容器管理模块以及启动合约调用监听功能;所述容器管理模块接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒;所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒;所述容器管理模块处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端。本申请只需启动一个容器,在容器中为每个合约创建彼此隔离的合约运行沙盒,实现一个容器并行批量运行多个合约,以降低多容器启动的成本。更进一步的,在节点端加入合约监听模块,实现跨合约计算,达到跨合约调用的目的。

权利要求 :

1.一种智能合约执行与跨合约调用方法,其特征在于,包括:创建一个容器,启动容器管理模块进行容器相关设置以及启动合约调用监听功能;

所述容器管理模块接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒,并通知合约运行沙盒运行对应的合约;

所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒;

所述容器管理模块处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端,同时处理合约运行沙盒;

所述容器管理模块包括二级缓存,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒,包括如下步骤:S1,所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,在二级缓存中寻找合约调用请求对应的第二合约,响应于在二级缓存中寻找到合约调用请求对应的第二合约,转到步骤S3;响应于在二级缓存中未寻找到合约调用请求对应的第二合约,发送合约调用请求给节点端的合约监听模块,并转到步骤S2;

S2,所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;

S3,所述容器管理模块在第二合约运行沙盒中运行第二合约,并在二级缓存中记录第二合约信息,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约运行沙盒。

2.如权利要求1所述的方法,其特征在于,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒,包括:所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,发送合约调用请求给节点端的合约监听模块;

所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;

所述容器管理模块收到第二合约后,在第二合约运行沙盒中运行所述第二合约,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约运行沙盒。

3.如权利要求1或2所述的方法,其特征在于,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,还包括:当第一合约运行沙盒发出合约调用请求后,则其合约进程进入等待状态,当收到合约调用结果后,再次唤起;或者,

当第一合约运行沙盒发出合约调用请求后,则其合约进程立即结束,所述容器管理模块记录状态及相关信息,在合约调用进程结束后,再次运行第一合约运行沙盒;或者,当第一合约运行沙盒发出合约调用请求后,所述容器管理模块返回虚拟数据给第一合约运行沙盒,并记录状态及相关信息,在合约调用进程结束后,再次运行第一合约运行沙盒并附上合约调用结果。

4.如权利要求1所述的方法,其特征在于,所述二级缓存跟区块相关联,从节点端发出的一批合约属于一个区块,在一批合约执行过程中,二级缓存不断更新,待全部合约执行结束后,二级缓存重置;或者,所述二级缓存跟容器周期相关,在容器存在期间,二级缓存一直存在。

5.如权利要求1所述的方法,其特征在于,所述合约运行请求包括合约数据,所述合约数据包括合约可执行文件和合约运行参数,或者包括源码;当所述合约管理模块为每个合约运行请求分配一个合约运行沙盒之后,将合约数据放置在合约运行沙盒对应的文件目录下。

6.如权利要求1所述的方法,其特征在于,所述处理合约运行沙盒,包括:当所述合约运行沙盒为所述容器管理模块在进行容器相关设置时创建,所述容器管理模块在将合约运行结果返回节点端时,将重置合约运行沙盒的内部数据;或者,当所述合约运行沙盒为所述容器管理模块在接收到合约运行请求时创建,所述容器管理模块在将合约运行结果返回节点时,将直接清除合约运行沙盒。

7.一种基于容器的智能合约执行与调用装置,其特征在于,包括:创建模块,创建一个容器,启动容器管理模块进行容器相关设置,以及启动合约调用监听功能;

所述容器管理模块,用于在接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒,并通知合约运行沙盒运行对应的合约;

所述容器管理模块,还用于响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒;

所述容器管理模块,还用于处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端,同时处理合约运行沙盒;

所述容器管理模块包括二级缓存,所述响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒,包括如下步骤:S1,所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,在二级缓存中寻找合约调用请求对应的第二合约,响应于在二级缓存中寻找到合约调用请求对应的第二合约,转到步骤S3;响应于在二级缓存中未寻找到合约调用请求对应的第二合约,发送合约调用请求给节点端的合约监听模块,并转到步骤S2;

S2,所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;

S3,所述容器管理模块在第二合约运行沙盒中运行第二合约,并在二级缓存中记录第二合约信息,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约运行沙盒。

8.一种电子设备,其特征在于,包括:处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现如权利要求1‑6中任一项所述的智能合约执行与跨合约调用方法。

9.一种存储介质,当所述存储介质中的指令由处理器执行时,以实现如权利要求1‑6中任一项所述的智能合约执行与跨合约调用方法。

说明书 :

智能合约执行与跨合约调用方法、装置及存储介质

技术领域

[0001] 本申请涉及区块链技术领域,尤其涉及智能合约执行与跨合约调用方法、装置及存储介质。

背景技术

[0002] Fabric是由IBM贡献的超级账本框架。它是一个利用现有成熟的技术来组合而成的一个区块链技术的实现。它具有强大的容器技术,来承载各种主流语言来编写的智能合
约。
[0003] Fabric在执行智能合约时,动态地为每个合约创建一个新的docker容器,合约在容器中运行完毕后,删除这个容器。针对Fabric运行合约的方案,存在启动成本高的问题;
同时合约运行时如果需要调用其他合约,存在不能实现跨合约调用的问题。

发明内容

[0004] 本申请提供一种智能合约执行与跨合约调用方法、装置及存储介质,以至少解决相关技术中容器启动成本高以及跨合约调用的问题。本申请的技术方案如下:
[0005] 根据本申请实施例的第一方面,提供一种智能合约执行与跨合约调用方法,包括:
[0006] 创建一个容器,启动容器管理模块进行容器相关设置,以及启动合约调用监听功能;
[0007] 所述容器管理模块接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒,并通知合约运行沙盒运行对应的合约;
[0008] 所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将运行结
果回调给第一合约运行沙盒;;
[0009] 所述容器管理模块处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端,同时处理合约运行沙盒。
[0010] 在本申请的一些实施例中,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行
所述第二合约,再将运行结果回调给第一合约运行沙盒,包括:
[0011] 所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,发送合约调用请求给节点端的合约监听模块;
[0012] 所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;
[0013] 所述容器管理模块收到第二合约后,在第二合约运行沙盒中运行所述第二合约,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约运行沙盒。
[0014] 在本申请的一些实施例中,所述容器管理模块包括二级缓存,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合
约,并分配第二合约运行沙盒运行所述第二合约,再将运行结果回调给第一合约运行沙盒,
包括如下步骤:
[0015] S1,所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,在二级缓存中寻找合约调用请求对应的第二合约,响应于在二级缓存中寻找到合约调用请求对应的
第二合约,转到步骤S3;响应于在二级缓存中未寻找到合约调用请求对应的第二合约,发送
合约调用请求给节点端的合约监听模块,并转到步骤S2;
[0016] S2,所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;
[0017] S3,所述容器管理模块在第二合约运行沙盒中运行第二合约,并在二级缓存中记录第二合约信息,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约运
行沙盒。
[0018] 在本申请的一些实施例中,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,包括:
[0019] 当第一合约运行沙盒发出合约调用请求后,则其合约进程进入等待状态,当收到合约调用结果后,再次唤起;或者,
[0020] 当第一合约运行沙盒发出合约调用请求后,则其合约进程立即结束,所述容器管理模块记录状态及相关信息,在合约调用进程结束后,再次运行第一合约运行沙盒;或者,
[0021] 当第一合约运行沙盒发出合约调用请求后,所述容器管理模块返回虚拟数据给第一合约运行沙盒,并记录状态及相关信息,在合约调用进程结束后,再次运行第一合约运行
沙盒并附上合约调用结果。
[0022] 在本申请的一些实施例中,所述二级缓存跟区块相关联,从节点端发出的一批合约属于一个区块,在一批合约执行过程中,二级缓存不断更新,待全部合约执行结束后,二
级缓存重置;或者,所述二级缓存跟容器周期相关,在容器存在期间,二级缓存一直存在。
[0023] 在本申请的一些实施例中,所述合约运行请求包括合约数据,所述合约数据包括合约可执行文件和合约运行参数,或者包括源码;当所述合约管理模块为每个合约运行请
求分配一个合约运行沙盒之后,将合约数据放置在合约运行沙盒对应的文件目录下。
[0024] 在本申请的一些实施例中,所述处理合约运行沙盒,包括:
[0025] 当所述合约运行沙盒为所述容器管理模块在进行容器相关设置时创建,所述容器管理模块在将合约运行结果返回节点端时,将重置合约运行沙盒的内部数据;或者,
[0026] 当所述合约运行沙盒为所述容器管理模块在接收到合约运行请求时创建,所述容器管理模块在将合约运行结果返回节点时,将直接清除合约运行沙盒。
[0027] 根据本申请实施例的第二方面,提供一种基于容器的智能合约执行与调用装置,包括:
[0028] 创建模块,创建一个容器,启动容器管理模块进行容器相关设置,以及启动合约调用监听功能;
[0029] 所述容器管理模块,用于在接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒,并通知合约运行沙盒运行对应的合约;
[0030] 所述容器管理模块,还用于响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再
将运行结果回调给第一合约运行沙盒;
[0031] 所述容器管理模块,还用于处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端,同时处理合约运行沙盒。
[0032] 根据本申请实施例的第三方面,提供另一种电子设备,包括:
[0033] 处理器;
[0034] 用于存储所述处理器可执行指令的存储器;
[0035] 其中,所述处理器被配置为执行所述指令,以实现上述第一方面所述的智能合约执行与跨合约调用方法。
[0036] 根据本申请实施例的第四方面,提供一种存储介质,当所述存储介质中的指令由基于容器的智能合约执行装置的处理器执行时,使得所述基于容器的智能合约执行装置能
够执行上述第一方面所述的智能合约执行与跨合约调用方法。
[0037] 本申请的实施例提供的技术方案至少带来以下有益效果:
[0038] 只需创建一个镜像文件,只需启动一个容器,在容器中,为每个合约创建彼此隔离的合约运行沙盒,实现一个容器可以并行,批量运行多个合约,以此降低多容器启动的成
本。同时,将合约运行限制在同一容器的进程范围,以此来降低通信成本。更进一步的,在节
点端加入合约监听模块,实现跨合约计算,达到跨合约调用的目的。
[0039] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

[0040] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理,并不构成对本申请的不当限定。
[0041] 图1是根据一示例性实施例示出的一种智能合约执行与跨合约调用方法的流程图。
[0042] 图2是根据一示例性实施例示出的容器内部结构框图。
[0043] 图3是根据一示例性实施例示出的一种基于容器的智能合约执行装置框图。
[0044] 图4是根据一示例性实施例示出的一种电子设备的框图。

具体实施方式

[0045] 为了使本领域普通人员更好地理解本申请的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
[0046] 需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或 
描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本申请相
一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面
相一致的装置和方法的例子。
[0047] 图1是根据一示例性实施例示出的智能合约执行与跨合约调用方法的流程图,如图1所示,所述方法包括以下步骤。
[0048] S101,创建一个容器,启动容器管理模块进行容器相关设置,以及启动合约调用监听功能;
[0049] 所述容器管理模块启动合约调用监听功能,用于监听合约运行沙盒的合约调用请求,并与节点端的合约监听模块进行通信,完成合约调用程序。
[0050] 所述合约监听模块,位于节点端,用于监听容器管理模块的合约调用监听功能发出的合约调用请求,并从链上获取对应的合约并将其返回到所述容器管理模块。
[0051] 在一个实施例中,在节点端需要运行智能合约的时候,会创建一个容器,启动容器管理模块进行容器相关设置,至少包括:
[0052] 创建控制组件来限制合约运行能力,包括但不限于通过创建CGroup来控制进程CPU, 内存等表现。
[0053] 其中,Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最
初由google的工程师提出,后来被整合进Linux内核。
[0054] 启动网络服务,监听节点端发送的合约运行请求,其中,所述合约运行请求包括合约数据,所述合约数据主要包括合约可执行文件和合约运行参数,或者包括源码(源码会在
沙盒中进行编译)。
[0055] 其中,容器管理模块启动网络服务,与节点端进行通信,通信内容包括:
[0056] a)监听节点端发送来的交易运行请求(合约运行请求),交易运行请求主要包括所需合约可执行文件或者源码,交易运行参数。
[0057] b)发送给节点端交易运行结果。
[0058] c)发送合约调用请求。
[0059] d)监听合约调用结果,合约调用结果主要包括合约可执行文件或者源码,根据实际情况可做适当调整。
[0060] 在一些实施例中,容器管理模块进行容器相关设置,还包括创建二级缓存,所述二级缓存用于记录当前区块内所有交易的读写集或者容器周期内所有交易的读写集。
[0061] 读写集:在区块链中,数据一般以key‑value的形式存储。每一笔交易运行时,大多都会用到已经存在的数据,并且会储存、更新一些新的数据到区块链上。在交易运行时,记
录交易读取和更改的数据,即为读写集。
[0062] 其中,二级缓存可以有以下两种分类:
[0063] 二级缓存跟区块相关:从节点端发过来的一批交易,这些交易属于一个区块。在一批交易执行过程中,二级缓存不断更新。待全部交易结束后,二级缓存重置。或者,
[0064] 二级缓存跟容器周期相关:在容器存在期间,二级缓存一直存在。可以用自己设置的缓存,相关缓存插件,或者是状态数据库来实现。
[0065] 可以根据具体的情况选择二级缓存的种类,从而决定二级缓存周期。
[0066] 在一个实施例中,可选择在容器管理模块进行容器相关设置时创建合约运行沙盒,形成沙盒池,等待合约运行请求的合约数据;或者,在一个实施例中,也可以先不创建合
约运行沙盒,在合约运行请求到来时,再创建合约运行沙盒。合约运行沙盒的创建时间选择
可以根据具体的情况做适当的调整。
[0067] 所述合约运行沙盒之间彼此隔离,每个所述合约运行沙盒以进程为单位,通过进程资源管理技术,使合约运行沙盒拥有以下特点:
[0068] 1.有限的读写范围:可以但不限于,通过为进程设置不同的UID(User Identification用户身份证明),GID(Group Identification群体身份),其中UID等于GID;
为每个进程创建独立的文件目录,设置其用户权限为700(类似于Andriod系统为每个应用
程序分配一个UID)。同时对于公共文件系统增加权限:例如,将/tmp文件权限改为755等。
[0069] 2.没有网络能力:可以但不限于:
[0070] 1)为进程创建新的Network Namespace网络命名空间,默认情况下,新的进程没有任何网络能力;
[0071] 2)采用防火墙策略,封锁该进程的网络能力;
[0072] 3)采用防火墙 + UID/GID,封锁该进程的网络能力。
[0073] 3.沙盒之间不可通信:可以但不限于:
[0074] 智能合约执行系统为进程创建新的IPC Namespace,结合用户权限,禁止沙盒之间的通信。
[0075] 其中,Ipc namespace的作用是使划分到不同ipc namespace的进程组通信上隔离,无法通过消息队列、共享内存、信号量方式通信,但没有对所述所有IPC通信方式隔离。
[0076] 其中,合约管理模块拥有读写其他合约运行沙盒的数据的能力,比如,以Root身份运行。
[0077] S102,所述容器管理模块接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒,并通知合约运行沙盒运行对应的合约;图2所示为容器内部结
构框图。
[0078] 合约管理模块为每个合约运行请求分配一个合约运行沙盒,将合约数据放在合约运行沙盒对应的文件目录下。
[0079] 其中,在合约运行期间,利用进程间通信实现容器管理模块和合约执行进程的通信。例如,可以通过UNIX DOMAIN SOCKET,共享内存等方式进行进程间通信。
[0080] 其中,UNIX DOMAIN SOCKET 又叫 IPC(inter‑process communication 进程间通信) socket,用于实现同一主机上的进程间通信。合约运行时如果需要相关数据,则向容器
管理模块发出请求,容器管理模块向节点端发出请求。待节点端在链上获取到相关数据后,
返回给容器管理模块,容器管理模块返回给正在运行的合约执行进程。
[0081] S103,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,获取与合约调用请求对应的第二合约,并分配第二合约运行沙盒运行所述第二合约,再将
运行结果回调给第一合约运行沙盒;
[0082] 在一些实施例中,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,进入合约调用程序,并将合约调用结果返回第一合约运行沙盒,包括:
[0083] 所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,发送合约调用请求给节点端的合约监听模块;
[0084] 所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;
[0085] 所述容器管理模块收到第二合约后,在第二合约运行沙盒中运行所述第二合约,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约运行沙盒。
[0086] 在一些实施例中,所述容器管理模块包括二级缓存,所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求,进入合约调用程序,并将合约调用结果返回
第一合约运行沙盒,包括如下步骤:
[0087] 步骤1,所述容器管理模块收到第一合约运行沙盒发出的合约调用请求后,在二级缓存中寻找合约调用请求对应的第二合约,响应于在二级缓存中寻找到合约调用请求对应
的第二合约,转到步骤3;响应于在二级缓存中未寻找到合约调用请求对应的第二合约,发
送合约调用请求给节点端的合约监听模块,并转到步骤2;
[0088] 步骤2,所述合约监听模块收到合约调用请求后,在链上获取合约调用请求对应的第二合约,并将第二合约返回给所述容器管理模块;
[0089] 步骤3,所述容器管理模块在第二合约运行沙盒中运行第二合约,并在二级缓存中记录第二合约信息,待收到第二合约运行沙盒的运行结果后,将运行结果回调给第一合约
运行沙盒。
[0090] 其中,所述容器管理模块收到节点端返回的第二合约或者从二级缓存提取第二合约后,在第二合约运行沙盒中运行此第二合约,并给定第二合约运行所需方法,参数等。
[0091] 在一些实施例中,当所述容器管理模块响应于监听到第一合约运行沙盒发出的合约调用请求后,所述第一合约运行沙盒的运行状态包括:
[0092] 当第一合约运行沙盒发出合约调用请求后,则其合约进程进入等待状态,当收到合约调用结果后,再次唤起;或者,
[0093] 当第一合约运行沙盒发出合约调用请求后,则其合约进程立即结束,所述容器管理模块记录状态及相关信息,在合约调用进程结束后,再次运行第一合约运行沙盒;或者,
[0094] 当第一合约运行沙盒发出合约调用请求后,所述容器管理模块返回虚拟数据给第一合约运行沙盒,并记录状态及相关信息,在合约调用进程结束后,再次运行第一合约运行
沙盒并附上合约调用结果。
[0095] S104,所述容器管理模块处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端,同时处理合约运行沙盒。
[0096] 在一个实施例中,根据合约运行沙盒的创建时间不同,将合约运行结果返回节点端的同时对合约运行沙盒的处理也不同,具体为:
[0097] 当所述合约运行沙盒为容器管理模块在容器相关设置时创建,容器管理模块在将合约运行结果返回节点端时,将重置合约运行沙盒的内部数据;或者,
[0098] 当所述合约运行沙盒为容器管理模块在接收到合约运行请求时创建,容器管理模块在将合约运行结果返回节点时,将直接清除合约运行沙盒。
[0099] 本申请的智能合约执行与跨合约调用方法,通过一个容器,实现一个容器可以并行,批量运行多个合约,以此降低多容器启动的成本。更进一步的,在节点端加入合约监听
模块,实现跨合约计算,达到跨合约调用的目的。
[0100] 图3是根据一示例性实施例示出的一种基于容器的智能合约执行装置框图。参照图3,该装置包括创建模块310和容器管理模块320。
[0101] 具体地,创建模块,创建一个容器,启动容器管理模块320进行容器相关设置,以及启动合约调用监听功能;
[0102] 所述容器管理模块320,用于在接收到节点端发送的合约运行请求后,为每个合约运行请求分配一个合约运行沙盒,并通知合约运行沙盒运行对应的合约;
[0103] 所述容器管理模块320,还用于响应于监听到第一合约运行沙盒发出的合约调用请求,进入合约调用程序,并将合约调用结果返回第一合约运行沙盒;;
[0104] 所述容器管理模块320,还用于处理合约运行沙盒返回的合约运行结果,并将合约运行结果返回节点端,同时处理合约运行沙盒。
[0105] 关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0106] 图4是根据一示例性实施例示出的一种电子设备的框图。例如,电子设备400可以是服务器,计算机等。
[0107] 参照图4,电子设备400可以包括以下一个或多个组件:处理器410,存储器420,I/O接口430,以及通信接口440。
[0108] 处理器410通常控制电子设备400的整体操作,诸如与显示,数据通信以及记录操作相关联的操作。处理器410执行指令以完成上述的方法的全部或部分步骤。
[0109] 存储器420被配置为存储各种类型的数据以支持在电子设备400的操作。这些数据的示例包括用于在电子设备400上操作的任何应用程序或方法的指令,联系人数据,电话簿
数据,消息,图片,视频等。存储器420可以由任何类型的易失性或非易失性存储设备或者它
们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦
除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快
闪存储器,磁盘或光盘。
[0110] I/O接口430为处理器410和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定
按钮。
[0111] 通信接口440被配置为便于电子设备400和其他设备之间有线或无线方式的通信。电子设备400可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示
例性实施例中,通信接口440经由广播信道接收来自外部广播管理系统的广播信号或广播
相关信息。在一个示例性实施例中,所述通信接口440还包括近场通信(NFC)模块,以促进短
程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带
(UWB)技术,蓝牙(BT)技术和其他技术来实现。
[0112] 在示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列
(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述智能合约执行方
法。
[0113] 在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器420,上述指令可由电子设备400的处理器410执行以完成上述方法。例
如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD‑ROM、磁带、软
盘和光数据存储设备等。
[0114] 一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备400的处理器执行时,使得电子设备400能够执行上述实施例所述的智能合约执行与跨合约调用
方法。
[0115] 还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中
提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
[0116] 本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或
者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识
或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的
权利要求指出。
[0117] 应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。