会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 智能合约 / 一种JVM智能合约执行引擎及智能合约执行方法

一种JVM智能合约执行引擎及智能合约执行方法

申请号 CN202310342124.7 申请日 2023-03-31 公开(公告)号 CN116880950A 公开(公告)日 2023-10-13
申请人 中国建设银行股份有限公司; 建信金融科技有限责任公司; 发明人 刘浩; 赵姚姚;
摘要 本申请提供一种JVM智能合约执行引擎及智能合约执行方法,属于区块链技术领域。所述JVM智能合约执行引擎至少包括:桥接模块、执行模块;桥接模块包括:合约管理器、交互子模块;执行模块包括:合约执行器、数据处理接口;合约管理器用于接收并根据交易指令通过交互子模块启动合约执行器;交互子模块包括cgo接口、java本地接口;合约执行器用于执行智能合约,对交易指令进行处理,得到目标交易数据;并调用数据处理接口将目标交易数据写入区块链数据库中;智能合约是基于java语言编写的智能合约。通过上述JVM智能合约执行引擎,可以在区块链中执行基于java语言编写的智能合约,降低智能合约的开发成本与开发难度。
权利要求

1.一种JVM智能合约执行引擎,其特征在于,所述JVM智能合约执行引擎至少包括:桥接模块、执行模块;

其中,所述桥接模块至少包括:合约管理器、交互子模块;所述执行模块至少包括:合约执行器、数据处理接口;

所述合约管理器用于接收交易指令,并根据所述交易指令通过所述交互子模块启动所述合约执行器;

所述交互子模块包括cgo接口、java本地接口;所述cgo接口、所述java本地接口用于区块链节点与所述JVM智能合约执行引擎的数据交互;

所述合约执行器用于执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。

2.根据权利要求1所述的执行引擎,其特征在于,所述执行模块还包括管理子模块,所述管理子模块用于管理所述合约执行器和所述数据处理接口。

3.根据权利要求1所述的执行引擎,其特征在于,所述交互子模块还用于暴露所述执行模块中的执行功能函数和加载功能函数;

相应的,所述合约执行器用于根据暴露后的执行功能函数和加载功能函数执行智能合约,对交易指令进行处理,得到目标交易数据。

4.根据权利要求1所述的执行引擎,其特征在于,所述桥接模块还包括上下文管理器;

所述上下文管理器用于存储和管理中间数据;其中,所述中间数据是执行智能合约的过程中产生的数据。

5.根据权利要求1所述的执行引擎,其特征在于,所述执行模块还包括类加载器;

所述类加载器用于获取初始类和初始包;并对初始类和初始包的功能进行裁剪,得到目标类和目标包;

所述类加载器还用于加载目标类和目标包;

相应的,所述合约执行器用于根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。

6.根据权利要求1所述的执行引擎,其特征在于,所述数据处理接口,包括:写入接口、检测接口;

所述调用所述数据处理接口将所述目标交易数据写入区块链数据库中,包括:调用写入接口将所述目标交易数据写入区块链数据库;

调用检测接口检测是否将所述目标交易数据写入区块链数据库。

7.根据权利要求1所述的执行引擎,其特征在于,所述合约执行器还用于在跨合约调用的情况下,创建多个数据子存储区;其中,所述跨合约调用为执行多个智能合约;所述多个智能合约和所述多个数据子存储区一一对应。

8.一种智能合约的执行方法,所述方法应用于JVM智能合约执行引擎,其特征在于,所述方法包括:接收交易指令;

根据交易指令,通过cgo接口、java本地接口启动合约执行器;

利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。

9.根据权利要求8所述的方法,其特征在于,所述交易指令中携带指令标识;

在利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据之前,所述方法还包括:将交易指令中的指令标识和多个智能合约的合约标识进行匹配;

将匹配结果一致的合约标识对应的智能合约作为目标智能合约;

相应的,利用合约执行器执行所述目标智能合约,对交易指令进行处理,得到目标交易数据。

10.根据权利要求8所述的方法,其特征在于,所述方法还包括:获取初始类和初始包;

对初始类和初始包的功能进行裁剪,得到目标类和目标包;

加载目标类和目标包;

相应的,所述合约执行器根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。

11.根据权利要求10所述的方法,其特征在于,对初始类和初始包的功能进行裁剪,得到目标类和目标包,包括:检测初始类和初始包对应的代码中是否存在关键字段;

在确定初始类和初始包对应的代码中存在关键字段的情况下,从初始类和初始包对应的代码中删除关键字段所对应的代码,得到目标类和目标包。

12.一种智能合约的执行装置,其特征在于,所述装置包括:接收模块,用于接收交易指令;

启动模块,用于根据交易指令,通过cgo接口、java本地接口启动合约执行器;

处理模块,用于利用合约执行器调用执行接口执行智能合约,对交易指令进行处理,得到目标交易数据;并将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。

13.一种服务器,其特征在于,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现权利要求8至11中任意一项所述方法的步骤。

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

15.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求8至11中任一项所述方法的步骤。

说明书全文

一种JVM智能合约执行引擎及智能合约执行方法

技术领域

[0001] 本申请属于区块链技术领域,尤其涉及一种JVM智能合约执行引擎及智能合约执行方法。

背景技术

[0002] 在区块链技术领域中,智能合约是存储在区块链节点中的一段代码,代码的逻辑定义了合约的规则。智能合约用于按照预先设定好的规则执行交易操作,处理交易信息。
[0003] 在现有技术中,有Solidity智能合约语言。Solidity智能合约语言的适用范围较小,开发者需要重新学习Solidity智能合约语言,因此增加了开发难度与开发周期。
[0004] java是一种被广泛应用的、面向对象的编程语言,具备“一次编写,处处执行”的跨平台特性。利用java语言编写智能合约,可以降低智能合约的开发成本与开发难度。但是,java语言编写的智能合约无法直接在区块链上运行。
[0005] 针对上述技术问题,目前尚未提出有效的解决方案。

发明内容

[0006] 本申请提供了一种JVM智能合约执行引擎及智能合约执行方法,能够解决现有方法中存在的智能合约的开发成本较高、开发难度较大的问题。
[0007] 本申请实施例的目的是提供一种JVM智能合约执行引擎,所述JVM智能合约执行引擎至少包括:桥接模块、执行模块;
[0008] 其中,所述桥接模块至少包括:合约管理器、交互子模块;所述执行模块至少包括:合约执行器、数据处理接口;
[0009] 所述合约管理器用于接收交易指令,并根据所述交易指令通过所述交互子模块启动所述合约执行器;
[0010] 所述交互子模块包括cgo接口、java本地接口;所述cgo接口、所述java本地接口用于区块链节点与所述JVM智能合约执行引擎的数据交互;
[0011] 所述合约执行器用于执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0012] 进一步地,所述执行引擎的另一个实施例中,所述执行模块还包括管理子模块,所述管理子模块用于管理所述合约执行器和所述数据处理接口。
[0013] 进一步地,所述执行引擎的另一个实施例中,所述交互子模块还用于暴露所述执行模块中的执行功能函数和加载功能函数;
[0014] 相应的,所述合约执行器用于根据暴露后的执行功能函数和加载功能函数执行智能合约,对交易指令进行处理,得到目标交易数据。
[0015] 进一步地,所述执行引擎的另一个实施例中,所述桥接模块还包括上下文管理器;所述上下文管理器用于存储和管理中间数据;其中,所述中间数据是执行智能合约的过程中产生的数据。
[0016] 进一步地,所述执行引擎的另一个实施例中,所述执行模块还包括类加载器;
[0017] 所述类加载器用于获取初始类和初始包;并对初始类和初始包的功能进行裁剪,得到目标类和目标包;
[0018] 所述类加载器还用于加载目标类和目标包;
[0019] 相应的,所述合约执行器用于根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。
[0020] 进一步地,所述执行引擎的另一个实施例中,所述数据处理接口,包括:写入接口、检测接口;
[0021] 所述调用所述数据处理接口将所述目标交易数据写入区块链数据库中,包括:
[0022] 调用写入接口将所述目标交易数据写入区块链数据库;
[0023] 调用检测接口检测是否将所述目标交易数据写入区块链数据库。
[0024] 进一步地,所述执行引擎的另一个实施例中,所述合约执行器还用于在跨合约调用的情况下,创建多个数据子存储区;其中,所述跨合约调用为执行多个智能合约;所述多个智能合约和所述多个数据子存储区一一对应。
[0025] 另一方面,本申请提供了一种智能合约的执行方法,所述方法应用于JVM智能合约执行引擎,包括:
[0026] 接收交易指令;
[0027] 根据交易指令,通过cgo接口、java本地接口启动合约执行器;
[0028] 利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0029] 进一步地,所述方法的另一个实施例中,所述交易指令中携带指令标识;在利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据之前,所述方法还包括:
[0030] 将交易指令中的指令标识和多个智能合约的合约标识进行匹配;
[0031] 将匹配结果一致的合约标识对应的智能合约作为目标智能合约;
[0032] 相应的,利用合约执行器执行所述目标智能合约,对交易指令进行处理,得到目标交易数据。
[0033] 进一步地,所述方法还包括:
[0034] 获取初始类和初始包;
[0035] 对初始类和初始包的功能进行裁剪,得到目标类和目标包;
[0036] 加载目标类和目标包;
[0037] 相应的,所述合约执行器根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。
[0038] 进一步地,所述方法的另一个实施例中,所述对初始类和初始包的功能进行裁剪,得到目标类和目标包,包括:
[0039] 检测初始类和初始包对应的代码中是否存在关键字段;
[0040] 在确定初始类和初始包对应的代码中存在关键字段的情况下,从初始类和初始包对应的代码中删除关键字段所对应的代码,得到目标类和目标包。
[0041] 另一方面,本申请提供了一种智能合约的执行装置,包括:
[0042] 接收模块,用于接收交易指令;
[0043] 启动模块,用于根据交易指令,通过cgo接口、java本地接口启动合约执行器;
[0044] 处理模块,用于利用合约执行器调用执行接口执行智能合约,对交易指令进行处理,得到目标交易数据;并将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0045] 另一方面,本申请提供了一种服务器,包括至少一个处理器及用于存储处理器可执行指令的存储器,所述处理器执行所述指令时实现本申请实施例中任意一个方法实施例的步骤。
[0046] 另一方面,本申请提供了一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现本申请实施例中任意一个方法实施例的步骤。
[0047] 另一方面,本申请提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现本申请实施例中任意一个方法实施例的步骤。
[0048] 基于本申请提供的一种JVM智能合约执行引擎及智能合约执行方法,在具体实施时,通过cgo接口、java本地接口实现桥接模块和执行模块之间的交互,并启动合约执行器;利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。可以为java智能合约提供全生命周期的管理功能,并实现在区块链节点上运行java智能合约,降低了开发难度;还可以为智能合约提供独立的隔离的运行环境,提升处理交易时的安全性。

附图说明

[0049] 为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0050] 图1是本申请提供的一种JVM智能合约执行引擎一个实施例的流程示意图;
[0051] 图2是本申请提供的一种智能合约执行方法流程示意图;
[0052] 图3是本申请提供的一种智能合约执行装置的一个实施例的模块结构示意图;
[0053] 图4是本申请提供的一种服务器的一个实施例的硬件结构框图;
[0054] 图5是本申请提供的一种JVM智能合约执行引擎启动与调用一个实施例的流程示意图。

具体实施方式

[0055] 为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0056] 在区块链技术领域中,智能合约是存储在区块链节点中的一段代码,代码的逻辑定义了合约的规则。智能合约用于按照预先设定好的规则执行交易操作,处理交易信息。
[0057] 考虑到在现有技术中,有Solidity智能合约语言。Solidity智能合约语言的适用范围较小,大多数开发者并不熟悉Solidity智能合约语言,因此想要使用Solidity智能合约语言就需要从头学习,增加了开发难度与开发周期。
[0058] 进一步,还考虑到java是一种被广泛应用的、面向对象的编程语言,具备“一次编写,处处执行”的跨平台特性。利用java语言编写智能合约,可以降低智能合约的开发成本与开发难度。但是,java语言编写的智能合约无法直接在区块链上运行。
[0059] 针对现有方法存在的上述问题以及产生上述问题的具体原因,本申请考虑引入一种JVM智能合约执行引擎,通过JVM智能合约执行引擎就可以在区块链上运行使用java语言编写的智能合约。
[0060] 基于上述思路,参阅图1所示,本申请提出一种JVM智能合约执行引擎,所述JVM智能合约执行引擎至少包括:桥接模块、执行模块;其中,所述桥接模块至少包括:合约管理器、交互子模块;所述执行模块至少包括:合约执行器、数据处理接口;所述合约管理器用于接收交易指令,并根据所述交易指令通过所述交互子模块启动所述合约执行器;所述交互子模块包括cgo接口、java本地接口;所述cgo接口、所述java本地接口用于区块链节点与所述JVM智能合约执行引擎的数据交互;所述合约执行器用于执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0061] 需要说明的是,本申请中所涉及到的与用户相关的信息数据均为在用户知晓且同意的前提下获取和使用的。并且,对于上述信息数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
[0062] 在一些实施例中,JVM(JavaVirtualMachine)指java虚拟机,是java语言的运行环境。在具体应用时,首先将java程序翻译为java字节码,然后利用JVM解译java字节码,达到在不同的底层平台(Linux、Windows、MacOS)运行java程序的技术效果。本申请将JVM与智能合约执行引擎结合得到JVM智能合约执行引擎,通过JVM智能合约执行引擎就可以在区块链上运行使用java语言编写的智能合约。
[0063] 在一些实施例中,智能合约事先部署在区块链的节点上,区块链的节点上通常会部署多个智能合约,每个智能合约可以对应一个合约标识。
[0064] 在一些实施例中,交易指令中可以携带有原始交易数据和指令标识。在接收到交易指令后,可以提取出交易指令中的指令标识,并将指令标识和上述多个合约标识进行匹配,将匹配成功的合约标识对应的智能合约筛选出来,作为后续需要执行的智能合约。
[0065] 在一些实施例中,所述合约管理器也可以称为ContractManger,合约管理器是桥接模块的入口,合约管理器中绑定了智能合约生命周期方法的实现。合约管理器一旦接收到交易指令,就会去通过交互子模块中的cgo接口、java本地接口去启动合约执行器。交互子模块可以为一种引擎代理(EngineProxy)。执行模块和桥接模块之间的交互也通过cgo接口、java本地接口进行。
[0066] 在一些实施例中,合约管理器还可以包括升级子模块、冻结子模块、解冻子模块、销毁子模块;升级子模块用于对智能合约进行功能升级;冻结子模块用于在智能合约遭到外部非法篡改时冻结只能合约;解冻子模块用于在智能合约的外部环境安全的情况下解冻智能合约;销毁子模块用于在接收到销毁指令时销毁智能合约,或者,用于在智能合约被非法篡改时销毁该智能合约。
[0067] 在一些实施例中,在确定出后续需要执行的智能合约时,区块链节点启动,此时会初始化合约管理器。初始化后的合约管理器会启动专属协程通过交互子模块来启动合约执行器。
[0068] 在一些实施例中,还需要通过java调用非java代码的接口,这个过程需要利用native方法来实现;具体的,可以将数据处理接口通过cgo接口、java本地接口链接native方法到交互子模块。基于上述方式,可以使得JVM智能合约执行引擎在执行的过程中调用一些已经被go语言、c语言实现的方法,实现了java语言和其他编程语言的协作使用,提高程序运行的效率。在一些实施例中,区块链所能识别的语言是go语言,在go语言的使用过程中需要去调用部分c语言的功能,go语言与c语言之间的调用通过cgo接口来实现。java本地接口用于实现java语言和go语言的转换以及java语言和c语言的转换。因此,通过cgo接口、java本地接口就可以实现区块链节点与JVM智能合约执行引擎之间的数据交互。
[0069] 在一些实施例中,启动后的合约执行器(Executor)执行上述匹配成功的智能合约,处理交易指令中的原始交易数据,得到目标交易数据。
[0070] 在一些实施例中,合约执行器可以使用call方法处理交易指令中的原始交易数据,得到目标交易数据;合约执行器还可以在使用call方法之前,使用load方法检测智能合约的代码是否合法,在合法的情况下,再使用call方法;具体的,可以使用load方法来检测智能合约的代码中是否包括生成随机数的代码,如果包括,那么生成的随机数可能会导致智能合约每次运行的结果不一致,此时,认为智能合约的代码不合法;在智能合约的代码不合法的情况下,可以生成报错提醒,以提醒用户进行修改,删除其中生成随机数的代码。
[0071] 在一些实施例中,合约执行器还可以使用getSyscallStub方法返回使用的区块链调用对象,并利用getSyscallStub方法获取目标交易数据的状态。
[0072] 在一些实施例中,在执行智能合约的过程中还会产生大量的中间数据;所述桥接模块还包括上下文管理器(ContextManger),上下文管理器用于存储和管理中间数据。
[0073] 在一些实施例中,每个中间数据对应一个时间戳,该时间戳记录了该中间数据的生成时间;在智能合约执行报错的情况下,可以利用中间数据及中间数据的时间戳,定位发生错误的智能合约代码;在智能合约无报错、执行完成的情况下,上下文管理器可以删除中间数据及时间戳,以释放更多资源。
[0074] 在一些实施例中,数据处理接口(SyscallStub)用于合约执行器与区块链节点的交互;所述数据处理接口,包括:写入接口、检测接口;所述调用所述数据处理接口将所述目标交易数据写入区块链数据库中,包括:调用写入接口将所述目标交易数据写入区块链数据库;调用检测接口检测是否将所述目标交易数据写入区块链数据库;其中,所述区块链数据库部署在区块链节点上。
[0075] 在一些实施例中,上述写入接口可以为putState方法对应的接口,上述检测接口可以为getState方法对应的接口。
[0076] 在一些实施例中,具体的,在使用写入接口之后,可以返回一个目标交易数据的写入位置路径;然后,使用检测接口根据目标交易数据的写入位置路径,检测该写入位置路径对应的数据写入区是否为空,在确定为空的情况下,认为目标交易数据没有被写入区块链数据库中。
[0077] 在一些实施例中,所述执行模块还包括管理子模块(Engine),所述管理子模块用于管理所述合约执行器和所述数据处理接口;所述管理子模块可以为执行模块的入口,管理子模块可以对数据处理接口进行增加、删除等操作;管理子模块还可以把数据处理接口的实例注入到智能合约当中。
[0078] 在一些实施例中,在启动合约执行器时,可以通过合约管理器调用管理子模块,管理子模块通过交互子模块来启动合约执行器。
[0079] 在一些实施例中,每执行一次智能合约,管理子模块可以创建一个Executabled对象,Executabled对象封装上述执行智能合约的过程。
[0080] 在一些实施例中,所述交互子模块还用于暴露所述执行模块中的执行功能函数和加载功能函数;相应的,所述合约执行器用于根据暴露后的执行功能函数和加载功能函数执行智能合约,对交易指令进行处理,得到目标交易数据。
[0081] 在一些实施例中,在将交易指令中的指令标识和智能合约的合约标识进行匹配时,如果指令标识有多个,那么就会成功匹配到多个智能合约,在后续执行时需要执行多个智能合约,此时的情况可以称为跨合约调用。在跨合约调用时,每个智能合约产生的数据都是隔离的,所以需要创建多个数据子存储区来存储这些数据,每个智能合约产生的数据对应一个数据子存储区。
[0082] 在一些实施例中,所述合约执行器还用于在跨合约调用的情况下,创建多个数据子存储区;其中,所述跨合约调用为执行多个智能合约;所述多个智能合约和所述多个数据子存储区一一对应。
[0083] 通过上述实施例,JVM智能合约执行引擎仅提供隔离环境下的运算功能,JVM智能合约执行引擎不会长久的保存数据,所有目标交易数据都会上传到区块链数据库中,这使得智能合约的交互效率更高。
[0084] 在一些实施例中,所述执行模块还包括类加载器;所述类加载器用于获取初始类和初始包;并对初始类和初始包的功能进行裁剪,得到目标类和目标包;所述类加载器还用于加载目标类和目标包;相应的,所述合约执行器用于根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。
[0085] 在一些实施例中,初始类为java中功能完整的默认类;初始包为java中功能完整的默认工具包。
[0086] 在一些实施例中,如果在获取到初始类和初始包之后,不做功能裁剪就直接使用它们,可能会造成智能合约的执行结果不一致。例如,java中的随机数包,产生的随机数每次都是不同的,因此,随机数包不能被使用在智能合约的执行过程中,需要将随机数包裁剪出去。
[0087] 在一些实施例中,初始包还可以包括多线程包,利用多线程包进行多线程操作,即多核CPU共同操作某个共享变量,可能会导致结果的不可预知;因此,需要利用类加载器将多线程包裁剪出去。
[0088] 在一些实施例中,还有一些初始类和初始包,它们中的部分功能会导致执行结果不一致,因此只需要将导致执行结果不一致的功能裁剪出去,将其余部分保留,就得到了目标类和目标包;例如,当使用IO操作包时,存在多个进程同时向同一个文件写入数据的情况,此时就会导致每次智能合约的执行结果不一致;可以利用类加载器裁剪掉IO操作包中的写入功能,而只保留IO操作包中的只读访问功能,就得到了IO操作包所对应的目标包,利用上述目标包所有的进程都只执行只读操作而不向文件写入任何数据,因此可以保证执行结果的一致性;又例如,某个初始包中包括生成随机数功能的代码,此时可以将生成随机数功能的代码从初始包的代码中删除,就得到了目标包;基于类加载器可以使得智能合约的执行过程更加安全可控。
[0089] 在一些实施例中,所述桥接模块,还包括实现子模块(SyscallSkeleton);实现子模块导出实际的区块链系统调用实现,在区块链节点启动时绑定到执行模块中的数据处理接口上。
[0090] 在一些实施例中,在智能节约的执行过程中,会通过数据处理接口中链接的native方法调用交互子模块,再利用交互子模块区调用上下文管理器,从而最终保存目标交易数据到区块链数据库中,整个执行过程JVM智能合约执行引擎仅提供运行环境与计算,JVM智能合约执行引擎的内部不保存数据也不保存数据的状态,这使得智能合约的交互更加高效。
[0091] 在一些实施例中,JVM智能合约执行引擎为智能合约提供全生命周期的管理功能,全生命周期的管理功能包括:合约的部署、执行、升级、冻结、解冻以及销毁等,JVM智能合约执行引擎还为智能合约提供独立的隔离的运行环境。
[0092] 参阅图2所示,本申请提出一种智能合约的执行方法,所述智能合约的执行方法应用于上述JVM智能合约执行引擎,所述方法包括:
[0093] S201:接收交易指令;
[0094] S202:根据交易指令,通过cgo接口、java本地接口启动合约执行器;
[0095] S203:利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0096] 在一些实施例中,所述交易指令中携带指令标识;在利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据之前,所述方法还包括:将交易指令中的指令标识和多个智能合约的合约标识进行匹配;将匹配结果一致的合约标识对应的智能合约作为目标智能合约;相应的,利用合约执行器执行所述目标智能合约,对交易指令进行处理,得到目标交易数据。
[0097] 在一些实施例中,所述方法还包括:
[0098] S1:获取初始类和初始包;
[0099] S2:对初始类和初始包的功能进行裁剪,得到目标类和目标包;
[0100] S3:加载目标类和目标包;
[0101] S4:相应的,所述合约执行器根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。
[0102] 在一些实施例中,对初始类和初始包的功能进行裁剪,得到目标类和目标包,包括:
[0103] S1:检测初始类和初始包对应的代码中是否存在关键字段;
[0104] S2:在确定初始类和初始包对应的代码中存在关键字段的情况下,从初始类和初始包对应的代码中删除关键字段所对应的代码,得到目标类和目标包。
[0105] 在一些实施例中,可以将关键字段设定为Random,Random表示生成随机数功能;在检测到初始类和初始包对应的代码中存在Random的情况下,删除Random所对应的具有生成随机数功能的代码,得到目标类和目标包。在一些实施例中,在实施智能合约的执行方法之前,所述步骤还包括:开发智能合约、部署智能合约。
[0106] 在一些实施例中,开发智能合约包括:通过在本地IDE中新建java项目,引入合约开发依赖包进行合约开发,得到智能合约;然后,将智能合约打包成jar文件。
[0107] 在一些实施例中,部署智能合约包括:将jar文件上传到区块链的节点中,区块链的节点会对jar文件进行初始化,生成一个唯一的合约地址,并将交易地址返回给用户;交易地址用于调用智能合约。
[0108] 在一个具体的场景实例中,参阅图5所示,图5中的①表示JVM智能合约执行引擎的启动流程,②表示JVM智能合约执行引擎的调用流程。
[0109] 参阅图5所示,图5中的①JVM智能合约执行引擎的启动流程具体包括如下步骤:
[0110] 步骤1:区块链节点启动时,初始化桥接模块中的上下文管理器;
[0111] 步骤2:合约管理器初始化时会启动专属的协程,通过交互子模块(具体是通过交互子模块中的cgo接口、java本地接口)来启动执行模块;
[0112] 步骤3:在执行模块中的数据处理接口中链接native方法(native方法可用于对目标交易数据进行状态读写或者获取目标交易数据)到交互子模块(具体是通过交互子模块中的cgo接口、java本地接口来实现);并且SyscallSkeleton绑定到执行模块中的数据处理接口上。
[0113] 参阅图5所示,图5中的②JVM智能合约执行引擎的调用流程具体包括如下步骤:
[0114] 步骤1:外部模块统一通过合约管理器暴露的接口进行调用;
[0115] 步骤2:通过合约管理器(具体是通过交互子模块中的cgo接口、java本地接口来实现)调用执行模块中的合约执行器执行智能合约;
[0116] 步骤3:执行过程中的获取目标交易数据或者针对目标交易数据进行的状态读写,会通过数据处理接口中链接的native方法调用交互子模块,再利用交互子模块区执行上下文管理器,从而最终保存目标交易数据到区块链数据库中,整个执行过程中JVM智能合约执行引擎仅提供运行环境与计算。
[0117] 虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
[0118] 基于上述一种智能合约的执行方法,本申请一个或多个实施例还提供一种智能合约的执行装置。所述的装置可以包括使用了本申请实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置。基于同一创新构思,本申请实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本申请实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0119] 具体地,图3是本申请提供的一种智能合约的执行装置的一个实施例的模块结构示意图,参阅图3所示,本申请提供的一种图片下载装置可以包括:接收模块301,启动模块302,处理模块303。
[0120] 接收模块301,用于接收交易指令;
[0121] 启动模块302,用于根据交易指令,通过cgo接口、java本地接口启动合约执行器;
[0122] 处理模块303,用于利用合约执行器调用执行接口执行智能合约,对交易指令进行处理,得到目标交易数据;并将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0123] 在一些实施例中,上述智能合约的执行装置具体实施时,还可以用于将交易指令中的指令标识和多个智能合约的合约标识进行匹配;将匹配结果一致的合约标识对应的智能合约作为目标智能合约;相应的,利用合约执行器执行所述目标智能合约,对交易指令进行处理,得到目标交易数据。
[0124] 在一些实施例中,上述智能合约的执行装置具体实施时,还可以用于获取初始类和初始包;对初始类和初始包的功能进行裁剪,得到目标类和目标包;加载目标类和目标包;相应的,所述合约执行器根据加载后的目标类和目标包执行智能合约,对交易指令进行处理,得到目标交易数据。
[0125] 需要说明的,上述所述的装置根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
[0126] 本申请还提供一种服务器,包括至少一个处理器及用于存储处理器可执行指令的存储器,所述处理器执行所述指令时可以实现上述任意一项方法实施例。例如,所述指令被所述处理器执行时实现包括以下步骤:接收交易指令;根据交易指令,通过cgo接口、java本地接口启动合约执行器;利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0127] 需要说明的,上述所述的服务器或客户端根据方法或装置实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
[0128] 具体地,图4是本申请提供的一种服务器的一个实施例的硬件结构框图。如图4所示,服务器10可以包括一个或多个(图中仅示出一个)处理器100(处理器100可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器200、以及用于通信功能的传输模块300。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器10还可包括比图4中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如数据库或多级缓存、GPU,或者具有与图4所示不同的配置。
[0129] 存储器200可用于存储应用软件的软件程序以及模块,如本申请实施例中的图片下载方法对应的程序指令/模块,处理器100通过运行存储在存储器200内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器200可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器200可进一步包括相对于处理器100远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0130] 传输模块300用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输模块300包括一个网络适配器(NetworkInterfaceController,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块300可以为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
[0131] 本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序指令,在所述计算机程序指令被执行时实现:接收交易指令;根据交易指令,通过cgo接口、java本地接口启动合约执行器;利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0132] 本申请还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现:接收交易指令;根据交易指令,通过cgo接口、java本地接口启动合约执行器;利用合约执行器执行智能合约,对交易指令进行处理,得到目标交易数据;并调用所述数据处理接口将所述目标交易数据写入区块链数据库中;所述智能合约是基于java语言编写的智能合约。
[0133] 上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0134] 本申请提供的上述实施例所述的方法或装置可以通过计算机程序实现业务逻辑并记录在存储介质上,所述的存储介质可以计算机读取并执行,实现本申请实施例所描述方案的效果。所述存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。所述存储介质可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。
[0135] 本申请提供的上述数据处理方法或装置实施例可以在计算机中由处理器执行相应的程序指令来实现,如使用windows操作系统的c++语言在PC端实现、linux系统实现,或其他例如使用android、iOS系统程序设计语言在智能终端实现,以及基于量子计算机的处理逻辑实现等。
[0136] 需要说明的是本申请上述所述的装置、设备根据相关方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照对应方法实施例的描述,在此不作一一赘述。
[0137] 本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0138] 为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请一个或多个时可以把部分模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。
[0139] 本发明是参照根据本发明实施例的方法、装置、设备的流程图和/或方框图来描述的。应理解可由计算机程序指令实现,可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0140] 本领域技术人员应明白,本申请一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本申请一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。
[0141] 虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。