基于区块链的智能合约调用方法、装置及设备转让专利

申请号 : CN202111478999.7

文献号 : CN113888173B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭锐李辉忠范瑞彬张开翔

申请人 : 深圳前海微众银行股份有限公司

摘要 :

本公开实施例提供一种基于区块链的智能合约调用方法、装置及设备,该方法包括:接收客户端发送的交易信息,其中交易信息中包含交易信息对应的待执行的智能合约的路径信息;将接收到的各交易信息放入调度器以使调度器将各交易信息分发至不同的执行器;通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的;通过各执行器对交易信息执行智能合约,得到执行结果。不需要各执行器在并行执行交易时进行智能合约相关的CNS表数据的同步,提升了区块链在对交易信息并行执行智能合约的效率。

权利要求 :

1.一种基于区块链的智能合约调用方法,其特征在于,所述方法应用于所述区块链的任一节点,所述节点中设置有用于对交易信息进行调度分配的调度器、用于执行智能合约的执行器和用于存储智能合约的存储单元,所述方法包括:接收客户端发送的交易信息,其中所述交易信息中包含所述交易信息对应的待执行的智能合约的路径信息,其中所述路径信息对应唯一的智能合约存储路径;

将接收到的各交易信息放入调度器以使所述调度器将所述各交易信息分发至不同的执行器;

通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中所述存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的;

通过各执行器对所述交易信息执行所述智能合约,得到执行结果;

其中所述存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,具体为:存储单元中包含以存储表形式存储的目录资源和智能合约资源;其中每个目录资源下包含多个子资源,相同类型的智能合约资源属于同一个目录资源下最末端的子资源,智能合约资源中包含智能合约的代码段信息和状态信息。

2.根据权利要求1所述的方法,其特征在于,所述通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元中以获取各交易信息对应的智能合约,包括:对任一交易信息对应的待执行的智能合约的路径信息进行拆分,得到所述路径信息对应的各存储表名称;

根据所述各存储表名称依次访问存储单元中对应的各存储表,以获取所述路径信息对应的智能合约资源。

3.根据权利要求2所述的方法,其特征在于,所述根据所述各存储表名称依次访问存储单元中对应的各存储表,以获取所述路径信息对应的智能合约资源,包括:访问缓存,从所述缓存中依次读取名称为所述各存储表名称的各存储表;若能够从所述缓存中读取到各存储表,则从所述缓存中按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路径信息对应的智能合约资源;

若无法从所述缓存中读取各存储表,则从区块链的存储单元中按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路径信息对应的智能合约资源。

4.根据权利要求3所述的方法,其特征在于,所述按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路径信息对应的智能合约资源,包括:按照各存储表名称在所述路径信息中的级别,逐个依次查询各存储表名称对应的存储表以获取智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路径信息对应的智能合约资源。

5.根据权利要求1至4任一项所述的方法,其特征在于,还包括按照树形文件目录结构存储各智能合约的步骤,如下:

通过创建或查询,确定任一目录资源;

在所述目录资源中写入待创建的智能合约。

6.根据权利要求5所述的方法,其特征在于,所述通过创建或查询,确定任一目录资源,包括:

根据用户的输入生成任一目录资源的存储表名称;

判断所述目录资源的存储表名称是否已存在;

若不存在,则创建所述目录资源,其中所述目录资源包括目录的元信息;

若存在,则判断所述存储表名称是否为智能合约资源的表名,若不是,则返回所述目录资源已存在的提示。

7.根据权利要求5所述的方法,其特征在于,所述在所述目录资源中写入待创建的智能合约,包括:

根据用户的输入生成任一智能合约的存储表名称;

判断所述智能合约的存储表名称是否已存在;

若不存在,则获取所述目录资源,并启动虚拟机执行所述智能合约,若执行成功,则在所述目录资源中写入所述智能合约的代码段信息和状态信息。

8.一种基于区块链的智能合约调用装置,其特征在于,所述装置应用于所述区块链的任一节点,所述节点中设置有用于对交易信息进行调度分配的调度器、用于执行智能合约的执行器和用于存储智能合约的存储单元,所述装置包括:接收模块,用于接收客户端发送的交易信息,其中所述交易信息中包含所述交易信息对应的待执行的智能合约的路径信息,其中所述路径信息对应唯一的智能合约存储路径;

调度模块,用于将接收到的各交易信息放入调度器以使所述调度器将所述各交易信息分发至不同的执行器;

调度模块,用于通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中所述存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的;

执行模块,用于通过各执行器对所述交易信息执行所述智能合约,得到执行结果;

其中所述存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,具体为:存储单元中包含以存储表形式存储的目录资源和智能合约资源;其中每个目录资源下包含多个子资源,相同类型的智能合约资源属于同一个目录资源下最末端的子资源,智能合约资源中包含智能合约的代码段信息和状态信息。

9.一种服务设备,其特征在于,包括:处理器和存储器;

所述存储器存储计算机执行指令;

所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行如权利要求

1至7任一项所述的基于区块链的智能合约调用方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至7任一项所述的基于区块链的智能合约调用方法。

说明书 :

基于区块链的智能合约调用方法、装置及设备

技术领域

[0001] 本公开实施例涉及金融科技(Fintech)技术领域,尤其涉及一种基于区块链的智能合约调用方法、装置及设备。

背景技术

[0002] 随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,与区块链相关的智能合约技术也不例外,但由于金融行业的安
全性、实时性要求,也对智能合约技术提出了更高的要求。
[0003] 目前,现有的基于联盟区块链的智能合约管理过程中,通常是在区块链的节点中的执行智能合约的执行器(以太坊智能合约虚拟机)会维护一张CNS(Contract Name 
Service,合约命名服务)表,该CNS表格中存储了智能合约名称与智能合约地址的映射关
系,当执行器需要对得到的某个交易执行智能合约时,会访先问该CNS表格以查询对应的智
能合约地址,并从智能合约地址获取对应的智能合约,执行交易。
[0004] 然而,在某些场景下,区块链需要对交易并行执行处理,则需要区块链的多个执行器并行执行智能合约。这种情况下,需要每个执行器都维护了一张CNS表(智能合约名称与
智能合约地址的映射关系),当用户对某个执行器中的CNS表中的智能合约相关信息进行了
修改时,就必须将修改的CNS表的数据同步至其他的所有执行器,否则其他执行器会执行错
误的智能合约,因此导致执行器之间需要频繁的进行CNS表数据的同步,影响区块链并行执
行多个智能合约的处理效率。

发明内容

[0005] 本公开实施例提供一种基于区块链的智能合约调用方法、装置及设备,以克服相关技术中执行器之间需要频繁的进行CNS表数据的同步,影响区块链并行执行多个智能合
约的处理效率的问题。
[0006] 第一方面,本公开实施例提供一种基于区块链的智能合约调用方法,所述方法应用于所述区块链的任一节点,所述节点中设置有用于对交易信息进行调度分配的调度器、
用于执行智能合约的执行器和用于存储智能合约的存储单元,所述方法包括:
[0007] 接收客户端发送的交易信息,其中所述交易信息中包含所述交易信息对应的待执行的智能合约的路径信息,其中所述路径信息对应唯一的智能合约存储路径;
[0008] 将接收到的各交易信息放入调度器以使所述调度器将所述各交易信息分发至不同的执行器;
[0009] 通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中所述存储单元中包含了按照树形文件目录结构
存储的各智能合约、且各个智能合约的存储路径是唯一的;
[0010] 通过各执行器对所述交易信息执行所述智能合约,得到执行结果。
[0011] 在一种可能的设计中,其中所述存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,具体为:存储单元中包含以存储表形式
存储的目录资源和智能合约资源;其中每个目录资源下包含多个子资源,相同类型的智能
合约资源属于同一个目录资源下最末端的子资源,智能合约资源中包含智能合约的代码段
信息和状态信息。
[0012] 在一种可能的设计中,述通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元中以获取各交易信息对应的智能合约,包括:对任一交易信息对
应的待执行的智能合约的路径信息进行拆分,得到所述路径信息对应的各存储表名称;根
据所述各存储表名称依次访问存储单元中对应的各存储表,以获取所述路径信息对应的智
能合约资源。
[0013] 在一种可能的设计中,所述根据所述各存储表名称依次访问存储单元中对应的各存储表,以获取所述路径信息对应的智能合约资源,包括:访问缓存,从所述缓存中依次读
取名称为所述各存储表名称的各存储表;若能够从所述缓存中读取到各存储表,则从所述
缓存中按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以
从智能合约资源对应的存储表中获取所述路径信息对应的智能合约资源;若无法从所述缓
存中读取各存储表,则从区块链的存储单元中按照所述各存储表名称依次查询各存储表直
至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路径信息
对应的智能合约资源。
[0014] 在一种可能的设计中,所述按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路径信息对应的智
能合约资源,包括:按照各存储表名称在所述路径信息中的级别,逐个依次查询各存储表名
称对应的存储表以获取智能合约资源对应的存储表,以从智能合约资源对应的存储表中获
取所述路径信息对应的智能合约资源。
[0015] 在一种可能的设计中,还包括按照树形文件目录结构存储各智能合约的步骤,如下:通过创建或查询,确定任一目录资源;在所述目录资源中写入待创建的智能合约。
[0016] 在一种可能的设计中,述通过创建或查询,确定任一目录资源,包括:
[0017] 根据用户的输入生成任一目录资源的存储表名称;判断所述目录资源的存储表名称是否已存在;若不存在,则创建所述目录资源,其中所述目录资源包括目录的元信息;若
存在,则判断所述存储表名称是否为智能合约资源的表名,若不是,则返回所述目录资源已
存在的提示。
[0018] 在一种可能的设计中,所述在所述目录资源中写入待创建的智能合约,包括:根据用户的输入生成任一智能合约的存储表名称;判断所述智能合约的存储表名称是否已存
在;若不存在,则获取所述目录资源,并启动虚拟机执行所述智能合约,若执行成功,则在所
述目录资源中写入所述智能合约的代码段信息和状态信息。
[0019] 第二方面,本公开实施例提供一种基于区块链的智能合约调用装置,所述装置应用于所述区块链的任一节点,所述节点中设置有用于对交易信息进行调度分配的调度器、
用于执行智能合约的执行器和用于存储智能合约的存储单元,所述装置包括:
[0020] 接收模块,用于接收客户端发送的交易信息,其中所述交易信息中包含所述交易信息对应的待执行的智能合约的路径信息,其中所述路径信息对应唯一的智能合约存储路
径;
[0021] 调度模块,用于将接收到的各交易信息放入调度器以使所述调度器将所述各交易信息分发至不同的执行器;
[0022] 调度模块,用于通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中所述存储单元中包含了按照树
形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的;
[0023] 执行模块,用于通过各执行器对所述交易信息执行所述智能合约,得到执行结果。
[0024] 第三方面,本公开实施例提供一种服务设备,包括:处理器和存储器;
[0025] 所述存储器存储计算机执行指令;
[0026] 所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行如上第一方面以及第一方面各种可能的设计所述的基于区块链的智能合约调用方法。
[0027] 第四方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以
及第一方面各种可能的设计所述的基于区块链的智能合约调用方法。
[0028] 本公开实施例提供的基于区块链的智能合约调用方法、装置及设备,区块链的的任一节点,通过在交易信息中携带交易信息对应的待执行的智能合约的路径信息,且该路
径信息对应唯一的智能合约存储路径;区块链各节点的存储单元中存储了包含了按照树形
文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,区块链节点的各
执行器根据路径信息访问存储单元按照唯一的智能合约存储路径获取对应的智能合约,并
根据智能合约执行交易信息,得到执行结果。由于存储单元中按照树形文件目录结构存储
的各智能合约在被不同的执行器调度时,是唯一的且是相互隔离的,因此不需要各执行器
在并行执行交易时进行智能合约相关的CNS表数据的同步,提升了区块链在对交易信息并
行执行智能合约的效率。

附图说明

[0029] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公
开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以
根据这些附图获得其他的附图。
[0030] 图1为本公开提供的基于区块链的智能合约调用方法的场景示意图;
[0031] 图2为本公开实施例提供的基于区块链的智能合约调用方法的流程示意图一;
[0032] 图3为本公开实施例提供的各智能合约按照树形文件目录结构存储的逻辑结构图;
[0033] 图4为本公开实施例提供的智能合约实际存储形式的示意图;
[0034] 图5为本公开实施例提供的基于区块链的智能合约调用方法的流程示意图二;
[0035] 图6为本公开实施例提供的基于区块链的智能合约调用装置的结构示意图一;
[0036] 图7为本公开实施例提供的基于区块链的智能合约调用装置的结构示意图二;
[0037] 图8为本公开实施例提供的服务设备的硬件结构示意图。

具体实施方式

[0038] 为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员
在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0039] 技术名词解释:
[0040] 区块链:区块链系统可以理解是一种由多个节点共同维护的及信任的分布式存储系统。区块链底层是由一系列区块组成的一条链,每个块上除了记录本块的数据还会记录
上一块的哈希值,通过这种方式组成链式的数据结构。一个区块由块头和块体组成,其中块
头定义包括该区块高度、上一个区块的哈希值等重要字段,而块体主要存储交易数据。区块
链利用密码学的方式保证数据传输和访问的安全,并利用链式结构保证链上数据不可被篡
改。
[0041] 智能合约:智能合约指以数字形式定义的能自动执行条款的合约,数字形式意味着合约必须用计算机代码实现,因为只要参与方达成协定,智能合约建立的权利和义务,就
会被自动执行,且结果不能被否认。在区块链应用中,当部署智能合约的交易在大多数节点
中达成共识,就可以认为智能合约已嵌入区块链系统中。
[0042] 以太坊虚拟机(智能合约的执行器):当智能合约被编译成二进制文件后,被部署到区块链的节点上。用户通过调用智能合约的接口,来触发智能合约的执行操作。以太坊虚
拟机作为智能合约代码的执行器执行智能合约的代码,修改当前区块链上的数据(状态)。
被修改的数据,会被共识,确保一致性。
[0043] 参考图1,图1为本公开提供的基于区块链的智能合约调用方法的场景示意图。在该场景中,包括:客户端101和区块链节点102,可以安装SDK(Software Development Kit,
软件开发工具包),用于发起交易,并产生交易信息。其中客户端101,可以是个人电脑、移动
终端或其他服务器等设备。
[0044] 其中,区块链节点102,可以是区块链系统中任一节点,例如可以是区块链中参与共识过程的任一节点,或者是共识节点中选举产生一个领导节点,对此本公开不作任何限
制。区块链节点102,用于接收客户端发送的交易信息,并获取交易信息对应的智能合约,基
于智能合约利用以太坊虚拟机(执行器)执行交易信息,得到执行结果,对执行结果过在区
块链中进行共识,共识完成后进行区块链上链存储。
[0045] 目前,基于联盟区块链的智能合约管理调用中,通常是在区块链的节点中的执行智能合约的执行器(以太坊智能合约虚拟机)会维护一张CNS表,当执行器需要对得到的某
个交易执行智能合约时,会访先问该CNS表格以查询对应的智能合约地址,并从智能合约地
址获取对应的智能合约,执行交易。但是,若区块链需要对交易并行执行处理时,则需要区
块链的多个执行器并行执行智能合约,当用户对某个执行器中的CNS表中的智能合约相关
信息进行了修改时,就必须将修改的CNS表的数据同步至其他的所有执行器,否则其他执行
器会执行错误的智能合约,因此导致执行器之间需要频繁的进行CNS表数据的同步,影响区
块链并行执行多个智能合约的处理效率。
[0046] 为了解决上述技术问题,本公开提供了如下技术方案:在交易信息中携带交易信息对应的待执行的智能合约的路径信息,且该路径信息对应唯一的智能合约存储路径;区
块链各节点的存储单元中存储了包含了按照树形文件目录结构存储的各智能合约、且各个
智能合约的存储路径是唯一的,区块链节点的各执行器根据路径信息访问存储单元按照唯
一的智能合约存储路径获取对应的智能合约,并根据智能合约执行交易信息,得到执行结
果。由于存储单元中按照树形文件目录结构存储的各智能合约在被不同的执行器调度时,
是唯一的且是相互隔离的,因此不需要各执行器在并行执行交易时进行CNS表数据的同步,
使得区块链在对交易信息并行执行智能合约时效率得到大大提升。
[0047] 参考图2,图2为本公开实施例提供的基于区块链的智能合约调用方法的流程示意图一。本实施例应用于图1所示的区块链的任一节点,该节点中设置有用于对交易信息进行
调度分配的调度器、用于执行智能合约的执行器和用于存储智能合约的存储单元,上述方
法详述如下:
[0048] S201:接收客户端发送的交易信息,其中交易信息中包含交易信息对应的待执行的智能合约的路径信息,其中路径信息对应唯一的智能合约存储路径。
[0049] 在本公开实施例中,客户端可以为任一发生交易行为的客户端,客户端根据交易行为生产交易信息,并发送至区块链的任一节点上。例如,用户在网上商城购买商品,通过
客户端完成交易,客户端将购买商品的交易信息发送至区块链的任一节点。在本实施例中,
区块链的任一节点为区块链中的共识节点中的任一节点。领导节点由区块链的共识节点中
选举产生。任一共识节点既可以是领导节点,也可以是副本节点。
[0050] 在公开实施例中,客户端根据交易行为生产交易信息同时,用户可以在客户端指定该交易信息对应的待执行的智能合约,并在交易信息中添加该待执行的智能合约的路径
信息。其中,路径信息对应唯一的智能合约存储路径,根据该路径信息通过唯一的智能合约
存储路径获取对应的智能合约。
[0051] S202:将接收到的各交易信息放入调度器以使调度器将各交易信息分发至不同的执行器。
[0052] 在本公开实施例中,调度器为设置在区块链的节点中的虚拟调度器,该虚拟调度器按照预设规则将可并行执行智能合约的各交易信息分发至不同的执行器。
[0053] 其中,预设规则可以是将各交易信息平均分配至各个执行器。例如,交易信息为10个,执行器为2个,可以将5个交易信息分配给一个执行器,另5个交易信息分配给另一个执
行器。
[0054] S203:通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中存储单元中包含了按照树形文件目录结
构存储的各智能合约、且各个智能合约的存储路径是唯一的。
[0055] 在本公开实施例中, 存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,具体为:存储单元中包含以存储表形式存储的目
录资源和智能合约资源;其中每个目录资源下包含多个子资源,相同类型的智能合约资源
属于同一个目录资源下最末端的子资源,智能合约资源中包含智能合约的代码段信息和状
态信息。
[0056] 参考图3,图3为本公开实施例提供的各智能合约按照树形文件目录结构存储的逻辑结构图。其中,“/”为根目录,根目录中包含多个目录资源,如图3中所示的“sys”、“usr”、
“apps”、“tables”均为目录资源,分别为系统类目录资源、用户类目录资源、应用类目录资
源、表类目录资源。其中,每个目录资源中包括多个子资源,该子资源可以是当前目录资源
的下一级的目录资源,也可以直接是智能合约资源。如图3中所示的“sys”中包含的“sys1”
和“sys2”的子资源为目录资源的下一级的目录资源,“sys1”和“sys2”中各包含两个系统智
能合约资源,其中,“sys1”中包含“系统智能合约资源1”、“系统智能合约资源2”;“sys2”中
包含“系统智能合约资源3”、“系统智能合约资源4”。其他的“usr”、“apps”、“tables”均为目
录资源,其对应的子资源直接为智能合约资源;其中,“usr”中包含“用户智能合约资源1”、
“用户智能合约资源2”;“apps”中包含“应用智能合约资源1”、“应用智能合约资源2”;
“tables”中包含“表智能合约资源1”、“表智能合约资源2”。在本实施例中,上述各“资源”可
以是以文件或表格的形式存储,对此本公开不作任何限制。
[0057] 参考图4,图4为本公开实施例提供的智能合约实际存储形式的示意图。存储单元中包含以存储表形式存储的目录资源和智能合约资源。如图4所示,存储表名称为:“/
tables”的存储表为目录资源,其包含的智能合约资源的存储表名称分别为“/tables/
table1”和“/tables/table2”。其中,存储表名称为“/tables”的存储表描述了智能合约资
源的元信息,存储表名称为“/tables/table1”的存储表和“/tables/table2”的存储表中分
别包含了表智能合约“table1”和“table2”的数据。
[0058] 具体地,通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元中以获取各交易信息对应的智能合约,包括:
[0059] 对任一交易信息对应的待执行的智能合约的路径信息进行拆分,得到路径信息对应的各存储表名称;根据各存储表名称依次访问存储单元中对应的各存储表,以获取路径
信息对应的智能合约资源。
[0060] 在本公开实施例中,以路径信息“/apps/Hello1”为例,进行说明:
[0061] 将路径信息“/apps/Hello1”拆分为“/”、“/apps”和“/apps/Hello1”;“/”、“/apps”和“/apps/Hello1”分别对应一个存储表名称,其中“/”为根目录资源的存储表名称,“/
apps”为目录资源的存储表名称,/apps/Hello1”为智能合约资源的存储表名称。
[0062] 具体地,根据各存储表名称依次访问存储单元中对应的各存储表,以获取路径信息对应的智能合约资源,包括:访问缓存,从缓存中依次读取名称为各存储表名称的各存储
表;若能够从缓存中读取到各存储表,则从缓存中按照各存储表名称依次查询各存储表直
至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取路径信息对应
的智能合约资源;若无法从缓存中读取各存储表,则从区块链的存储单元中按照各存储表
名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存
储表中获取路径信息对应的智能合约资源。
[0063] 其中,按照各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取路径信息对应的智能合约资源,包括:按照各存
储表名称在路径信息中的级别,逐个依次查询各存储表名称对应的存储表以获取智能合约
资源对应的存储表,以从智能合约资源对应的存储表中获取路径信息对应的智能合约资
源。
[0064] 在本公开实施例中,可并行执行智能合约的各交易信息分发至不同的执行器后,每个执行器会先读取缓存,如果该执行器之前已经执行过相同的智能合约,那么该执行器
就会缓存智能合约对应的数据,智能合约对应的数据包括智能合约所存储路径对应的各存
储表。
[0065] 以任一执行器执行路径信息分别为“/apps/Hello1”和“/tables/table1”两个智能合约为例,进行说明:
[0066] 该执行器会先从缓存中读取存储表名称分别为“/apps”的存储表和“/tables”的存储表;然后再根据“/apps”的存储表和“/tables”的存储表读取存储表名称分别为“/
apps/Hello1”的存储表和“/tables/table1”的存储表,其中“/apps/Hello1”的存储表和“/
tables/table1”的存储表中分别包含了“Hello1”智能合约和“table1”智能合约的智能合
约资源。
[0067] 若该执行器会没有从缓存中读取到上述各存储表格,则从存储单元中获取对应上述各存储表格,并将从存储单元中获取的各存储表格写入执行器中,该写入过程为慢写入,
相较于直接从缓冲读取耗时较长。
[0068] 需要说明的是:智能合约的各存储表在存储单元可以支持数据的分布式存储,这样使得执行器从存储单元中加载各存储表格时,所有数据都是分散的。
[0069] 参考图3和图4,可以理解的是,执行器从存储单元中加载智能合约时,每个目录资源下的子资源都不能是同名的,因此,从根目录向下到每个智能合约资源的路径都是唯一
的,使得执行器加载的智能合约具有唯一性。此外,执行器从存储单元中加载智能合约时,
不同路径的智能合约可以被不同的执行器执行,使得不同的智能合约是相互隔离的。
[0070] 在本公开的一个实施例中,执行器从存储单元中加载智能合约时,也可以指定某个目录资源的路径,将该目录资源下的所有智能合约都加载至同一个执行器,使得不同执
行器加载的目录资源是不同的,从而达到目录资源级别的智能合约的隔离性。
[0071] S204:通过各执行器对交易信息执行智能合约,得到执行结果。
[0072] 在本公开实施例中,执行器对交易信息执行智能合约,得到交易信息的执行结果,然后将交易信息的执行结果发送至区块链中其他的共识节点进行共识,当完成了对交易信
息的执行结果的共识后,将该交易信息的执行结果在区块链中进行上链存储。
[0073] 从上述描述可知,通过在交易信息中携带交易信息对应的待执行的智能合约的路径信息,且该路径信息对应唯一的智能合约存储路径;区块链各节点的存储单元中存储了
包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,
区块链节点的各执行器根据路径信息访问存储单元按照唯一的智能合约存储路径获取对
应的智能合约,并根据智能合约执行交易信息,得到执行结果。由于存储单元中按照树形文
件目录结构存储的各智能合约在被不同的执行器调度时,是唯一的且是相互隔离的,因此
不需要各执行器在并行执行交易时进行智能合约相关的CNS表数据的同步,提升了区块链
在对交易信息并行执行智能合约的效率。
[0074] 参考图5,图5为本公开实施例提供的基于区块链的智能合约调用方法的流程示意图二。本实施例还描述了如何按照树形文件目录结构存储各智能合约的步骤,详述如下:
[0075] S501:通过创建或查询,确定任一目录资源。
[0076] 具体地,通过创建或查询,确定任一目录资源,包括:
[0077] 根据用户的输入生成任一目录资源的存储表名称;
[0078] 判断目录资源的存储表名称是否已存在;
[0079] 若不存在,则创建目录资源,并在目录资源写入目录的元信息;
[0080] 若存在,则判断存储表名称是否为智能合约资源的表名,若不是,则返回目录资源已存在的提示。
[0081] 在本公开实施例中,用户可以在任意现有的目录资源下创建新的目录资源。
[0082] 以创建“/apps/Hello”的目录资源为例,进行说明:
[0083] 生成“/apps/Hello/World”的存储表名称;
[0084] 判断“/apps/Hello/World”是否已存在;
[0085] 若不存在,则创建目录“/apps/Hello/”,并创建“/apps/Hello/World”存储表,并在“/apps/Hello/World”存储表写入目录的元信息,得到“/apps/Hello/”的目录资源,并返
回目录创建成功的提示;
[0086] 若存在,则访问目录“/apps/Hello/”的存储表“/apps/Hello/World”,并判断“/apps/Hello/World”存储表类型;若该存储表类型为目录资源,则返回目录资源已存在的提
示;若该存储表类型为智能合约资源,则返回智能合约资源已存在的提示。
[0087] S502:在目录资源中写入待创建的智能合约。
[0088] 具体地,在目录资源中写入待创建的智能合约,包括:
[0089] 根据用户的输入生成任一智能合约的存储表名称;
[0090] 判断智能合约的存储表名称是否已存在;
[0091] 若不存在,则获取目录资源,并启动虚拟机执行智能合约,若执行成功,则在目录资源中写入智能合约的代码段信息和状态信息。
[0092] 在本公开实施例中,部署合约时,将会预先确定该级目录父目录均已经存在且可以写入信息,然后启动虚拟机执行部署创建合约操作;虚拟机执行成功后,创建合约的表,
并将虚拟机执行后的合约代码段、ABI、状态数据等写入合约表,最后在父目录的数据表中
记录新部署的合约的元信息。
[0093] 以“/apps/Hello”的智能合约test1为例,进行说明:
[0094] 部署智能合约“/apps/Hello/test1”的存储表名称;
[0095] 判断存储表名称“/apps/Hello/test1”是否已存在;
[0096] 若不存在,则获取目录资源“/apps/Hello”,并启动虚拟机执行待部署的智能合约test1,若执行成功,则在目录资源中写入智能合约test1的代码段信息和状态信息,并反馈
部署成功的提示;若执行失败,则返回执行失败的提示;
[0097] 若存在,则返回智能合约“/apps/Hello/test1”已存在的提示。
[0098] 需要说明的是:用户可以通过接口访问任意路径下的资源(目录资源和智能合约资源)的元信息。在访问时,预先判断该路径是否存在资源,如果存在则访问上一级目录资
源的存储表,查看该路径下的目标资源是智能合约资源还是目录资源。如果是智能合约资
源,则返回智能合约的元信息;如果是目录资源类型,则返回目录资源的元信息,并返回该
路径下所有子资源(其中包含了所有的智能合约的元信息)。
[0099] 参考图6,图6为本公开实施例提供的基于区块链的智能合约调用装置的结构示意图一。如图6所示,该基于区块链的智能合约调用装置60,应用于所述区块链的任一节点,所
述节点中设置有用于对交易信息进行调度分配的调度器、用于执行智能合约的执行器和用
于存储智能合约的存储单元,所述装置包括:接收模块601、调度模块602、处理模块603和执
行模块604。
[0100] 其中,接收模块601,用于接收客户端发送的交易信息,其中所述交易信息中包含所述交易信息对应的待执行的智能合约的路径信息,其中所述路径信息对应唯一的智能合
约存储路径;
[0101] 调度模块602,用于将接收到的各交易信息放入调度器以使所述调度器将所述各交易信息分发至不同的执行器;
[0102] 处理模块603,用于通过各执行器基于各交易信息对应的待执行的智能合约的路径信息,查询存储单元以获取各交易信息对应的智能合约,其中所述存储单元中包含了按
照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的;
[0103] 执行模块604,用于通过各执行器对所述交易信息执行所述智能合约,得到执行结果。
[0104] 通过在交易信息中携带交易信息对应的待执行的智能合约的路径信息,且该路径信息对应唯一的智能合约存储路径;区块链各节点的存储单元中存储了包含了按照树形文
件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,区块链节点的各执
行器根据路径信息访问存储单元按照唯一的智能合约存储路径获取对应的智能合约,并根
据智能合约执行交易信息,得到执行结果。由于存储单元中按照树形文件目录结构存储的
各智能合约在被不同的执行器调度时,是唯一的且是相互隔离的,因此不需要各执行器在
并行执行交易时进行智能合约相关的CNS表数据的同步,提升了区块链在对交易信息并行
执行智能合约的效率。
[0105] 在本公开的一个或多个实施例中,所述存储单元中包含了按照树形文件目录结构存储的各智能合约、且各个智能合约的存储路径是唯一的,具体为:存储单元中包含以存储
表形式存储的目录资源和智能合约资源;其中每个目录资源下包含多个子资源,相同类型
的智能合约资源属于同一个目录资源下最末端的子资源,智能合约资源中包含智能合约的
代码段信息和状态信息。
[0106] 在本公开的一个或多个实施例中,所述调度模块602,具体用于:对任一交易信息对应的待执行的智能合约的路径信息进行拆分,得到所述路径信息对应的各存储表名称;
根据所述各存储表名称依次访问存储单元中对应的各存储表,以获取所述路径信息对应的
智能合约资源。
[0107] 在本公开的一个或多个实施例中,所述调度模块602,具体用于所述根据所述各存储表名称依次访问存储单元中对应的各存储表,以获取所述路径信息对应的智能合约资源
的过程,包括:访问缓存,从所述缓存中依次读取名称为所述各存储表名称的各存储表;若
能够从所述缓存中读取到各存储表,则从所述缓存中按照所述各存储表名称依次查询各存
储表直至确定智能合约资源对应的存储表,以从智能合约资源对应的存储表中获取所述路
径信息对应的智能合约资源;若无法从所述缓存中读取各存储表,则从区块链的存储单元
中按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智
能合约资源对应的存储表中获取所述路径信息对应的智能合约资源。
[0108] 在本公开的一个或多个实施例中,所述调度模块602,具体用于所述按照所述各存储表名称依次查询各存储表直至确定智能合约资源对应的存储表,以从智能合约资源对应
的存储表中获取所述路径信息对应的智能合约资源的过程,包括:按照各存储表名称在所
述路径信息中的级别,逐个依次查询各存储表名称对应的存储表以获取智能合约资源对应
的存储表,以从智能合约资源对应的存储表中获取所述路径信息对应的智能合约资源。
[0109] 本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
[0110] 参考图7,图7为本公开实施例提供的基于区块链的智能合约调用装置的结构示意图二。如图7所示,该基于区块链的智能合约调用装置60,还包括:
[0111] 目录创建模块605,用于通过创建或查询,确定任一目录资源;
[0112] 合约创建模块606,用于在所述目录资源中写入待创建的智能合约。
[0113] 在本公开的一个或多个实施例中,所述目录创建模块605,具体用于根据用户的输入生成任一目录资源的存储表名称;判断所述目录资源的存储表名称是否已存在;若不存
在,则创建所述目录资源,其中所述目录资源包括目录的元信息;若存在,则判断所述存储
表名称是否为智能合约资源的表名,若不是,则返回所述目录资源已存在的提示。
[0114] 在本公开的一个或多个实施例中,所述目录创建模块606,具体用于根据用户的输入生成任一智能合约的存储表名称;判断所述智能合约的存储表名称是否已存在;若不存
在,则获取所述目录资源,并启动虚拟机执行所述智能合约,若执行成功,则在所述目录资
源中写入所述智能合约的代码段信息和状态信息。
[0115] 本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
[0116] 参考图8,图8为本公开实施例提供的服务设备的硬件结构示意图。如图8所示,本实施例的服务设备80包括:处理器801以及存储器802;其中
[0117] 存储器802,用于存储计算机执行指令;
[0118] 处理器801,用于执行存储器存储的计算机执行指令,以实现上述实施例中服务端的区块链所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
[0119] 可选地,存储器802既可以是独立的,也可以跟处理器801集成在一起。
[0120] 当存储器802独立设置时,该基于服务设备还包括总线803,用于连接所述存储器802和处理器801。
[0121] 本公开实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上所述的基于区块链的
智能合约调用方法。
[0122] 本公开实施例还提供一种计算机程序产品,所述计算机程序被处理器执行时,实现如上所述的基于区块链的智能合约调用方法。
[0123] 在本公开所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅
仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者
可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之
间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连
接,可以是电性,机械或其它的形式。
[0124] 所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案。
[0125] 另外,在本公开各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的
单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0126] 上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机
设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本公开各个实施例所述
方法的部分步骤。
[0127] 应理解,上述处理器可以是中央处理单元(Central Processing Unit,简称CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,简称DSP)、专用
集成电路(Application Specific Integrated Circuit,简称ASIC)等。通用处理器可以是
微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以
直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
[0128] 存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
[0129] 总线可以是工业标准体系结构(Industry Standard Architecture,简称ISA)总线、外部设备互连(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准
体系结构(Extended Industry Standard Architecture,简称EISA)总线等。总线可以分为
地址总线、数据总线、控制总线等。为便于表示,本公开附图中的总线并不限定仅有一根总
线或一种类型的总线。
[0130] 上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程
只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,
磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
[0131] 一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存
储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称ASIC)
中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
[0132] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程
序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或
者光盘等各种可以存储程序代码的介质。
[0133] 最后应说明的是:以上各实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述各实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依
然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进
行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术
方案的范围。