区块链JVM应用方法、设备和存储介质技术

技术编号:27367293 阅读:17 留言:0更新日期:2021-02-19 13:51
本发明专利技术提供一种区块链JVM应用方法、设备和存储介质,该方法包括:分别创建jvm执行线程和jvm查询线程,加载二级加载包;响应于jvm执行线程接收到第一交易的交易执行参数:阻塞第一线程;调用合约加载方法以判断是否曾加载对应的第一合约:否,则通过合约加载方法加载第一合约、缓存合约字节码,执行第一交易;是,则执行第一交易;返回第一线程;响应于接收若干查询请求,并发响应:调用合约加载方法以判断是否曾加载相应的第二合约:否,则通过合约加载方法加载第二合约、缓存合约字节码,jvm查询线程创建第二线程以通过第二合约查询并返回查询结果;是,则jvm查询线程创建第三线程以查询并返回查询结果。本发明专利技术实现了在JVM中灵活加载不同智能合约。加载不同智能合约。加载不同智能合约。

【技术实现步骤摘要】
区块链JVM应用方法、设备和存储介质


[0001]本申请涉及互联网
,具体涉及一种区块链JVM应用方法、设备和存储介质。

技术介绍

[0002]区块链的智能合约需要在虚拟机中执行,当前区块链智能合约虚拟机主要采用EVM。由于EVM是一种新型的虚拟机,其安全性,和开发语言的友好性有待提高,从事该门语言开发的程序员也不是很多,导致智能合约的发展受到了一定的限制。
[0003]Java虚拟机(Java Virtual Machine,以下简称为JVM),是一种能够运行Java bytecode的虚拟机,以堆栈结构机器来进行实做。最早由Sun微系统所研发并实现第一个实现版本,是Java平台的一部分,能够运行以Java语言写作的软件程序。
[0004]Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
[0005]在现有的JVM机制中,创建JVM时需要设置class-path(jar包的地址,例如.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib
ools.jar),而在JVM创建后,class-path是无法修改的。
[0006]对于将JVM应用在区块链系统中的方案而言,当智能合约以jar包的形式发布后,上述现有的JVM机制存在因为无法修改class-path导致无法加载不同智能合约的问题。

技术实现思路

[0007]鉴于现有技术中的上述缺陷或不足,期望提供一种可以在JVM中灵活加载不同智能合约以执行交易或查询的区块链JVM应用方法、设备和存储介质。
[0008]第一方面,本专利技术提供一种适用于区块链节点的区块链JVM应用方法,JVM中配置有自定义的二级加载包,该方法包括:
[0009]分别创建jvm执行线程和jvm查询线程,加载二级加载包;
[0010]响应于jvm执行线程接收到区块链执行模块的第一线程所发送的第一交易的交易执行参数:
[0011]阻塞第一线程;
[0012]jvm执行线程调用二级加载包的合约加载方法以根据交易执行参数判断是否曾加载并缓存第一交易对应的第一合约:
[0013]否,则通过合约加载方法加载第一合约、缓存第一合约的字节码,并通过第一合约执行第一交易;
[0014]是,则通过第一合约执行第一交易;
[0015]返回第一线程;
[0016]响应于接收到若干查询请求,通过以下步骤并发响应各查询请求:
[0017]调用合约加载方法以根据第一查询请求判断是否曾加载并缓存相应的第二合约:
[0018]否,则通过合约加载方法加载第二合约、缓存第二合约的字节码,jvm查询线程创建第二线程,第二线程通过第二合约执行第一查询请求所请求的查询并返回查询结果;
[0019]是,则jvm查询线程创建第三线程,第三线程通过第二合约执行第一查询请求所请求的查询并返回查询结果。
[0020]第二方面,本专利技术还提供一种设备,包括一个或多个处理器和存储器,其中存储器包含可由该一个或多个处理器执行的指令以使得该一个或多个处理器执行根据本专利技术各实施例提供的区块链JVM应用方法。
[0021]第三方面,本专利技术还提供一种存储有计算机程序的存储介质,该计算机程序使计算机执行根据本专利技术各实施例提供的区块链JVM应用方法。
[0022]本专利技术诸多实施例提供的区块链JVM应用方法、设备和存储介质通过在jvm中自定义配置具有合约加载方法的二级加载包,并在创建jvm时加载该二级加载包,从而在收到待执行交易的交易执行参数或查询请求时可以调用该二级加载包的合约加载方法灵活加载智能合约,实现了在JVM中灵活加载不同智能合约以执行交易或查询;此外,还通过缓存已加载合约的字节码,避免了JVM对同一合约的重复加载,减少了系统执行每笔交易的平均时间,提升了系统的TPS;
[0023]本专利技术一些实施例提供的区块链JVM应用方法、设备和存储介质进一步通过在区块链节点的java编译器中配置原生类型的区块链接口,降低了开发人员开发java智能合约的开发难度。
附图说明
[0024]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0025]图1为本专利技术一实施例提供的一种区块链JVM应用方法的流程图。
[0026]图2为本专利技术一实施例提供的一种设备的结构示意图。
具体实施方式
[0027]下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与专利技术相关的部分。
[0028]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0029]图1为本专利技术一实施例提供的一种区块链JVM应用方法的流程图。
[0030]如图1所示,在本实施例中,本专利技术提供一种适用于区块链节点的区块链JVM应用方法,JVM中配置有自定义的二级加载包,该方法包括:
[0031]S11:分别创建jvm执行线程和jvm查询线程,加载二级加载包;
[0032]响应于jvm执行线程接收到区块链执行模块的第一线程所发送的第一交易的交易执行参数:
[0033]S121:阻塞第一线程;
[0034]S122:jvm执行线程调用二级加载包的合约加载方法以根据交易执行参数判断是否曾加载并缓存第一交易对应的第一合约:
[0035]否,则执行步骤S123:通过合约加载方法加载第一合约、缓存第一合约的字节码,并通过第一合约执行第一交易;
[0036]是,则执行步骤S124:通过第一合约执行第一交易;
[0037]S125:返回第一线程;
[0038]响应于接收到若干查询请求,通过以下步骤并发响应各查询请求:
[0039]S131:调用合约加载方法以根据第一查询请求判断是否曾加载并缓存相应的第二合约:
[0040]否,则执行步骤S132:通过合约加载方法加载第二合约、缓存第二合约的字节码,jvm查询线程创建第二线程,第二线程通过第二合约执行第一查询请求所请求的查询并返回查询结果;
[0041]是,则执行步骤S133:jvm查询线程创建第三线程,第三线程通过第二合约执行第一查询请求所请求的查询并返回查询结果。
[0042]以下以区块链节点A通过上述方法通过JVM执行交易、查询数据为例,对上述方法进行示例性的阐述。
[0043]在本实施例中,各区块链节点的java编译器中配置有原生类型的区块链接口,这些区块链接口包括账户类型接口、状态数据库类型接口和本地数据库类型接口。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种区块链JVM应用方法,其特征在于,JVM中配置有自定义的二级加载包,所述方法适用于区块链节点,所述方法包括:分别创建jvm执行线程和jvm查询线程,加载所述二级加载包;响应于所述jvm执行线程接收到区块链执行模块的第一线程所发送的第一交易的交易执行参数:阻塞所述第一线程;所述jvm执行线程调用所述二级加载包的合约加载方法以根据所述交易执行参数判断是否曾加载并缓存所述第一交易对应的第一合约:否,则通过所述合约加载方法加载所述第一合约、缓存所述第一合约的字节码,并通过所述第一合约执行所述第一交易;是,则通过所述第一合约执行所述第一交易;返回所述第一线程;响应于接收到若干查询请求,通过以下步骤并发响应各所述查询请求:调用所述合约加载方法以根据第一查询请求判断是否曾加载并缓存相应的第二合约:否,则通过所述合约加载方法加载所述第二合约、缓存所述第二合约的字节码,所述jvm查询线程创建第二线程,所述第二线程通过所述第二合约执行所述第一查询请求所请求的查询并返回查询结果;...

【专利技术属性】
技术研发人员:何正军王志文吴思进
申请(专利权)人:杭州复杂美科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1