CN112445543B - 智能合约的类调用方法、装置及电子设备 - Google Patents
智能合约的类调用方法、装置及电子设备 Download PDFInfo
- Publication number
- CN112445543B CN112445543B CN202011345713.3A CN202011345713A CN112445543B CN 112445543 B CN112445543 B CN 112445543B CN 202011345713 A CN202011345713 A CN 202011345713A CN 112445543 B CN112445543 B CN 112445543B
- Authority
- CN
- China
- Prior art keywords
- class
- function
- intelligent contract
- contract
- loader
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种智能合约的类调用方法、装置及电子设备,涉及区块链智能合约技术领域,其中,该方法包括:根据合约调用请求,确定待调用的第一智能合约,然后查找第一智能合约对应的第一类加载器,最后通过第一类加载器调用第一智能合约的目标类。其中,类加载器与智能合约一一对应,每个智能合约全部的类均由该智能合约对应的类加载器进行加载。本申请提供的技术方案可以为每个智能合约设置一个唯一对应的类加载器,使得不同智能合约的类可以独立加载,保证不同智能合约的类之间互不干扰,并且可以正常执行。
Description
技术领域
本申请涉及区块链技术,尤其涉及一种智能合约的类调用方法、装置及电子设备,属于区块链智能合约技术领域。
背景技术
区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,且信息不可伪造和篡改;区块链上的交易确认由区块链上的所有节点共同完成,通过共识算法保证其一致性;另外,区块链上会维护一个公共的账本,公共账本位于存储区块上并在任何节点都可见,从而保证其不可伪造和篡改。
智能合约是编程在区块链上的汇编语言,该术语是跨领域法律学者尼克·萨博提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”,换句话说,智能合约就是一个在计算机系统上,当一定条件被满足后,可以被自动执行的合约。
基于区块链的技术特征,智能合约需要在对应的虚拟机中才能被执行,例如,Java智能合约要在Java虚拟机中执行。Java智能合约在执行时需要用到不同的类,包括Java智能合约中的用户类和用户自定义的功能类。在实际使用时,Java虚拟机是通过Java虚拟机内部的类加载器将需要使用的类加载到缓存中,以执行Java智能合约。每个类加载器可以加载多个Java智能合约的类,但是,随着Java智能合约种类的增多,容易出现智能合约执行失败的情况。
发明内容
有鉴于此,本申请提供了一种智能合约的类调用方法、装置及电子设备,可以在Java智能合约种类增多时,保证Java智能合约正常执行。
为了实现上述目的,第一方面,本申请实施例提供一种智能合约的类调用方法,包括:
根据合约调用请求,确定待调用的第一智能合约;
查找第一智能合约对应的第一类加载器,其中,类加载器与智能合约一一对应,每个智能合约全部的类均由智能合约对应的类加载器进行加载;
通过第一类加载器调用第一智能合约的目标类。
可选的,合约调用请求包括第一智能合约的合约地址,查找第一智能合约对应的第一类加载器,包括:
根据第一智能合约的合约地址,查找第一类加载器。
可选的,在通过第一类加载器调用第一智能合约的目标类之前,该方法还包括:
若没有查找到第一类加载器,则创建第一类加载器。
可选的,该方法还包括:
若缓存第一类加载器的Java虚拟机的缓存超过阈值,则将Java虚拟机缓存中满足最近最少使用条件的类加载器删除。
可选的,目标类包括第一智能合约中预设的用户类,通过第一类加载器调用第一智能合约的目标类,包括:
根据用户类的全限定名,在第一类加载器的缓存中查找与用户类的全限定名相同的同名用户类;
若没有查找到同名用户类,则根据用户类的字节码,在第一类加载器的缓存中加载并调用用户类;
若查找到同名用户类,则调用同名用户类。
可选的,目标类包括用户自定义的功能类,合约调用请求包括功能类的字节码和全限定名,通过第一类加载器调用第一智能合约的目标类,包括:
根据功能类的全限定名,在第一类加载器的缓存中查找与功能类的全限定名相同的同名功能类;
若没有查找到同名功能类,则根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类;
若查找到同名功能类,则比对同名功能类的字节码和功能类的字节码是否一致;
若同名功能类的字节码和功能类的字节码一致,则调用同名功能类;
若同名功能类的字节码和功能类的字节码不一致,则删除同名功能类,并根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类。
可选的,该方法还包括:
根据合约部署请求,确定待部署的第二智能合约;
创建第二智能合约对应的第二类加载器;
通过第二类加载器调用第二智能合约的目标类。
第二方面,本申请实施例提供一种智能合约的类调用装置,包括:
确定模块,用于根据合约调用请求,确定待调用的第一智能合约,以及查找第一智能合约对应的第一类加载器,其中,类加载器与智能合约一一对应,每个智能合约全部的类均由智能合约对应的类加载器进行加载;
调用模块,用于通过第一类加载器调用第一智能合约的目标类。
可选的,合约调用请求包括第一智能合约的合约地址,确定模块具体用于:
根据第一智能合约的合约地址,查找第一类加载器。
可选的,该装置还包括:
创建模块,用于若没有查找到第一类加载器,则创建第一类加载器。
可选的,该装置还包括:
删除模块,用于若缓存第一类加载器的Java虚拟机的缓存超过阈值,则将Java虚拟机缓存中满足最近最少使用条件的类加载器删除。
可选的,目标类包括第一智能合约中预设的用户类,调用模块具体用于:
根据用户类的全限定名,在第一类加载器的缓存中查找与用户类的全限定名相同的同名用户类;
若没有查找到同名用户类,则根据用户类的字节码,在第一类加载器的缓存中加载并调用用户类;
若查找到同名用户类,则调用同名用户类。
可选的,目标类包括用户自定义的功能类,合约调用请求包括功能类的字节码和全限定名,调用模块具体用于:
根据功能类的全限定名,在第一类加载器的缓存中查找与功能类的全限定名相同的同名功能类;
若没有查找到同名功能类,则根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类;
若查找到同名功能类,则比对同名功能类的字节码和功能类的字节码是否一致;
若同名功能类的字节码和功能类的字节码一致,则调用同名功能类;
若同名功能类的字节码和功能类的字节码不一致,则删除同名功能类,并根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类。
可选的,该装置还包括:
确定模块还用于根据合约部署请求,确定待部署的第二智能合约,以及创建第二智能合约对应的第二类加载器;
调用模块还用于通过第二类加载器调用第二智能合约的目标类。
第三方面,本申请实施例提供一种电子设备,包括:存储器和处理器,存储器用于存储计算机程序;处理器用于在调用计算机程序时执行上述第一方面或第一方面的任一实施方式的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述第一方面或第一方面的任一实施方式的方法。
本申请实施例提供的一种智能合约的类调用方法、装置及电子设备,可以根据合约调用请求,确定待调用的第一智能合约,然后查找第一智能合约对应的第一类加载器,最后通过第一类加载器调用第一智能合约的目标类。其中,类加载器与智能合约一一对应,每个智能合约全部的类均由该智能合约对应的类加载器进行加载。本申请提供的技术方案通过为每个智能合约设置一个唯一对应的类加载器,使得不同智能合约的类可以独立加载,保证不同智能合约的类之间互不干扰,并且可以正常执行。
附图说明
图1为本申请实施例提供的调用智能合约的类调用方法的流程示意图;
图2为本申请实施例提供的类加载器的创建流程示意图;
图3为本申请实施例提供的哈希链表中第一次类加载器排序示意图;
图4为本申请实施例提供的哈希链表中第三次类加载器排序示意图;
图5为本申请实施例提供的哈希链表中第四次类加载器排序示意图;
图6为本申请实施例提供的用户类调用方法的流程示意图;
图7为本申请实施例提供的功能类调用方法的流程示意图;
图8为本申请实施例提供的部署智能合约的类调用方法的流程示意图;
图9为本申请实施例提供的智能合约的类调用装置的结构示意图;
图10为本申请实施例提供的电子设备的结构示意图。
具体实施方式
智能合约是编程在区块链上的汇编语言,也可以被理解为一个可以在区块链中运行的“应用程序”。智能合约在使用前需要在电子设备的虚拟机中进行部署,完成部署后电子设备就可以调用该智能合约。本申请实施例中的智能合约为Java智能合约(以下简称“智能合约”),因此,基于Java语言的技术特征,智能合约是通过执行类完成任务或需求的。智能合约的类均由类加载器负责加载,加载后的类会保存到类加载器的缓存中,当电子设备需要使用类时可以在缓存中调用该类完成任务。
在现有技术中,虚拟机中仅需要一两个类加载器即可满足不同的类的加载需求,但是,随着智能合约种类的增多,在一个虚拟机中运行多个智能合约时,不同智能合约的类可能均是由一个类加载器进行加载的,此时,不同的类均缓存在一个类加载器中。由于虚拟机是通过类的全限定名来区分类的,因此,当不同智能合约之间类的全限定名相同时,虚拟机将无法正确区分两个同名的类,进而导致智能合约无法正常执行。
有一种方案可以解决上述问题,即在每次调用新的智能合约时,虚拟机可以将类加载器中缓存的类全部删除,然后再加载新的智能合约的类。因为,每次调用新的智能合约时类加载器的缓存都会被清空,所以不会出现不同智能合约之间的类名冲突的问题。但是,本方案存在另一个问题,当用户频繁调用不同的智能合约时,虚拟机将不断重复清空和加载的动作,造成计算资源的浪费,影响执行效率。
另外,在智能合约技术中,类加载主要分根类加载器、扩展类加载器、系统类加载器和用户类加载器,其中,根类加载器、扩展类加载器和系统类加载器属于用户类加载器的上级(父类)加载器,用户类加载器为用户可以自定义的类加载器。需要说明的是,在本申请实施例中的类加载器均为用户类加载器,用户类加载器和父类加载器的工作原理在此不再赘述。
为了解决上述问题,本申请实施例提供一种智能合约的类调用方法,可以在不同智能合约之间的类的全限定名相同时,保证不同智能合约之间的类互不干扰,并且不影响执行效率。
本申请实施例提供的智能合约的类调用方法可以应用于计算机、笔记本或工作站等电子设备,本申请实施例对电子设备的具体类型不作任何限制。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1为本申请实施例提供的调用智能合约的类调用方法的流程示意图,如图1所示,该方法包括如下步骤:
S110、根据合约调用请求,确定待调用的第一智能合约。
用户可以在电子设备中发起第一智能合约(即在调用阶段的“目标智能合约”)的合约调用请求,其中,合约调用请求包括可以第一智能合约的合约地址(合约地址是每个智能合约的唯一标识,通过合约地址可以确定对应的智能合约),然后,电子设备可以根据合约调用请求中的合约地址,确定待调用的第一智能合约。
S120、查找第一智能合约对应的第一类加载器。
在本申请实施例中,电子设备可以为每个智能合约都提供一个与之唯一对应的类加载器,该智能合约的所有类都可以由对应的类加载器进行加载。由于每个智能合约的类都由各自对应的类加载器加载并缓存,所以本申请的方法可以保证不同智能合约的类之间互不干扰,并且可以正常高效的执行。
具体的,由于不同的智能合约对应不同的类加载器,因此在调用第一智能合约时,需要查找第一智能合约对应的第一类加载器。其中,类加载器与智能合约一一对应,智能合约全部的类均由智能合约对应的类加载器进行加载。电子设备可以根据第一智能合约的合约地址,查找第一类加载器。
需要说明的是,电子设备在创建第一类加载器时会将第一智能合约的合约地址与第一类加载器绑定,所以,电子设备可以根据第一智能合约的合约地址查找到第一类加载器。
S130、若没有查找到第一类加载器,则创建第一类加载器。
若没有查找到第一类加载器,则电子设备可以创建第一类加载器。图2为本申请实施例提供的类加载器的创建流程示意图,如图2所示,在没有查找到第一类加载器的情况下,电子设备可以先创建一个类加载器实例,然后解析智能合约的jar文件得到智能合约中所有类的全限定名、字节码,以及全限定名和字节码之间的映射关系,再对类的全限定名进行安全检查,安全检查通过后完成第一类加载器的初始化,此时第一类加载器创建完成。其中,安全检查是指将智能合约的类的全限定名与虚拟机中预设的类的全限定名进行对比,若存在同名现象则检查不通过,若不存在同名现象则检查通过。
进一步的,随着虚拟机不断调用新的智能合约,虚拟机缓存中的类加载器也越来越多,导致虚拟机的缓存大小不断上升,影响虚拟机的运行效率。为了保证虚拟机的缓存不会因不断调用新的智能合约而持续上升,电子设备可以采用最近最少使用算法(LeastRecently Used,LRU)控制缓存中类加载器的数量。其中,LRU算法是基于一种假设,该假设为长期不被使用的数据,在未来被用到的几率也不大。因此,当数据所占内存达到一定阈值时,电子设备可以移除掉最近最少使用的数据,保证虚拟机有足够的内存空间。
具体的,在每次缓存新的类加载器时,电子设备可以判断加载新的类加载器之后虚拟机的缓存是否超过预设的阈值,若缓存第一类加载器的虚拟机的缓存超过阈值,则将虚拟机缓存中满足最近最少使用条件的类加载器删除。其中,最近最少使用条件可以是未使用时间最长的类加载器。
例如,电子设备可以采用一个哈希链表表示各类加载器的使用情况,图3为本申请实施例提供的哈希链表中第一次类加载器排序示意图,如图3所示,虚拟机的缓存中已经缓存了3个类加载器,在哈希链表中从左到右的顺序依次是类加载器A1、类加载器A2和类加载器A3,其中,类加载器A1是最早被缓存的类加载器,然后是类加载器A2,接下来是类加载器A3。当电子设备调用了类加载器A2之后,类加载器A2将移动到哈希链表的最右端,然后,电子设备又调用了类加载器A1,类加载器A1将移动到哈希链表的最右端,参照图4,图4为本申请实施例提供的哈希链表中第三次类加载器排序示意图,此时,类加载器A3是未使用时间最长的类加载器,即满足最近最少使用条件。然后,电子设备在缓存中加载了类加载器A4,类加载器A4将增加到哈希链表的最右端,此时虚拟机的缓存大小已经超过了阈值,则电子设备可以将满足最近最少使用条件的类加载器A3从缓存中删除,参照图5,图5为本申请实施例提供的哈希链表中第四次类加载器排序示意图,此时,类加载器A2是未使用时间最长的类加载器。
S140、通过第一类加载器调用第一智能合约的目标类。
在查找到第一类加载器的情况下,电子设备可以通过第一类加载器调用第一智能合约的目标类。本申请实施例的类可以包括第一智能合约中预设的用户类和用户自定义的功能类。用户类的全限定名和字节码都存储在智能合约的jar文件中,第一类加载器创建的时候电子设备可以直接解析智能合约的jar文件获取用户类的全限定名和字节码。功能类为用户自定义的类,用户发起的合约调用请求中包括需要调用的功能类的全限定名和字节码。基于两种类不同的性质,其具体的调用流程也不一样。
在目标类为第一智能合约中预设的用户类的情况下,参照图6,图6为本申请实施例提供的用户类调用方法的流程示意图,由于用户类是智能合约预设的类,因此,用户类之间不会出现同名现象,所以,电子设备可以直接根据全限定名确定对应的用户类。电子设备可以根据预设的用户类的全限定名,在第一类加载器的缓存中查找与用户类的全限定名相同的同名用户类。若没有查找到同名用户类,则表示第一类加载器的缓存中没有该用户类,电子设备可以根据预设的用户类的字节码,在第一类加载器的缓存中加载并调用用户类;若查找到同名用户类,则表示第一类加载器的缓存中有该用户类,电子设备可以直接从缓存中调用该同名用户类。
在目标类为用户自定义的功能类的情况下,参照图7,图7为本申请实施例提供的功能类调用方法的流程示意图,由于功能类是用户自定义的类,因此,功能类和功能类之间、功能类和用户类之间可能会出现同名现象,所以,电子设备在根据全限定名确定对应的功能类之后,还需要根据字节码进行进一步的确定。用户发起的合约调用请求中包括功能类的字节码和全限定名,电子设备可以根据功能类的全限定名,在第一类加载器的缓存中查找与功能类的全限定名相同的同名功能类。若没有查找到同名功能类,则表示第一类加载器的缓存中没有该功能类,电子设备可以根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类;若查找到同名功能类,则电子设备需要进一步比对同名功能类的字节码和功能类的字节码是否一致;若该同名功能类的字节码和功能类的字节码一致,则表示第一类加载器的缓存中有该功能类,电子设备可以直接从缓存中调用该同名功能类;若该同名功能类的字节码和功能类的字节码不一致,则表示第一类加载器中出现了同名问题,此时电子设备可以删除该同名功能类,并根据功能类的字节码,在第一类加载器的缓存中加载并调用该功能类。
例如,用户需要调用功能类F1时,用户先发起了功能类F1的合约调用请求,该合约调用请求中包括功能类F1对应的合约地址、功能类F1的全限定名U1和字节码M1。电子设备根据该合约地址查找到了对应的第一类加载器A1,由于调用功能类F1之前需要先调用用户类C1,所以电子设备需要先在第一类加载器A1的缓存中查找用户类C1的同名用户类。电子设备找到了用户类C1的同名用户类,则直接调用该用户类C1的同名用户类,然后,电子设备根据全限定名U1在第一类加载器A1的缓存中查找功能类F1的同名功能类。电子设备找到了功能类F1的同名功能类F2,然后电子设备可以根据字节码M1进一步确定同名功能类F2的字节码是否与字节码M1相同。此时,同名功能类F2的字节码与字节码M1不相同,则电子设备先在第一类加载器A1的缓存中删除该同名功能类F2,再根据字节码M1加载功能类F1,并调用加载后的功能类F1。
图8为本申请实施例提供的部署智能合约的类调用方法的流程示意图,如图8所示,该方法包括如下步骤:
S210、根据合约部署请求,确定待部署的第二智能合约。
用户可以在电子设备中发起第二智能合约(即在部署阶段的“目标智能合约”)的合约部署请求,其中,合约部署请求包括可以第二智能合约的合约地址,然后,电子设备可以根据合约部署请求中的合约地址,确定待调用的第二智能合约。
S220、创建第二智能合约对应的第二类加载器。
由于第二智能合约是首次部署,所以虚拟机的缓存中没有第二类加载器,此时,电子设备可以直接创建第二智能合约对应的第二类加载器。具体的创建过程可以参考步骤S130的描述,在此不在赘述。
S230、通过第二类加载器调用第二智能合约的目标类。
由于第二智能合约是首次部署,所以虚拟机需要用到部分目标类,此时,电子设备可以通过第二类加载器调用第二智能合约的目标类。在实际应用时部署阶段主要是用到用户类,且由于部署时第二类加载器的缓存中没有加载过用户类,所以电子设备可以根据需求直接加载并调用用户类。
在本申请实施例中,电子设备可以根据合约调用请求,确定待调用的第一智能合约,然后查找第一智能合约对应的第一类加载器,最后通过第一类加载器调用第一智能合约的目标类。其中,类加载器与智能合约一一对应,智能合约全部的类均由该智能合约对应的类加载器进行加载。本申请可以为每个智能合约设置一个唯一对应的类加载器,使得不同智能合约的类可以独立加载,保证不同智能合约的类之间互不干扰,并且可以正常执行。
基于同一发明构思,作为对上述方法的实现,本申请实施例提供了一种智能合约的类调用装置,该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。
图9为本申请实施例提供的智能合约的类调用装置的结构示意图,如图9所示,本实施例提供的装置包括:
确定模块110,用于根据合约调用请求,确定待调用的第一智能合约,以及查找第一智能合约对应的第一类加载器,其中,类加载器与智能合约一一对应,每个智能合约全部的类均由智能合约对应的类加载器进行加载;
调用模块120,用于通过第一类加载器调用第一智能合约的目标类。
可选的,合约调用请求包括第一智能合约的合约地址,确定模块110具体用于:
根据第一智能合约的合约地址,查找第一类加载器。
可选的,该装置还包括:
创建模块130,用于若没有查找到第一类加载器,则创建第一类加载器。
可选的,该装置还包括:
删除模块140,用于若缓存第一类加载器的Java虚拟机的缓存超过阈值,则将Java虚拟机的缓存中满足最近最少使用条件的类加载器删除。
可选的,目标类包括第一智能合约中预设的用户类,调用模块120具体用于:
根据用户类的全限定名,在第一类加载器的缓存中查找与用户类的全限定名相同的同名用户类;
若没有查找到同名用户类,则根据用户类的字节码,在第一类加载器的缓存中加载并调用用户类;
若查找到同名用户类,则调用同名用户类。
可选的,目标类包括用户自定义的功能类,合约调用请求包括功能类的字节码和全限定名,调用模块120具体用于:
根据功能类的全限定名,在第一类加载器的缓存中查找与功能类的全限定名相同的同名功能类;
若没有查找到同名功能类,则根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类;
若查找到同名功能类,则比对同名功能类的字节码和功能类的字节码是否一致;
若同名功能类的字节码和功能类的字节码一致,则调用同名功能类;
若同名功能类的字节码和功能类的字节码不一致,则删除同名功能类,并根据功能类的字节码,在第一类加载器的缓存中加载并调用功能类。
可选的,该装置还包括:
确定模块110还用于根据合约部署请求,确定待部署的第二智能合约,以及创建第二智能合约对应的第二类加载器;
调用模块120还用于通过第二类加载器调用第二智能合约的目标类。
本实施例提供的智能合约的类调用装置可以执行上述方法实施例,其实现原理与技术效果类似,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
基于同一发明构思,本申请实施例还提供了一种电子设备。图10为本申请实施例提供的电子设备的结构示意图,如图10所示,本实施例提供的电子设备包括:存储器21和处理器20,存储器21用于存储计算机程序;处理器20用于在调用计算机程序22时执行上述方法实施例所述的方法。
本实施例提供的电子设备可以执行上述方法实施例,其实现原理与技术效果类似,此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例所述的方法。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读存储介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (9)
1.一种智能合约的类调用方法,其特征在于,包括:
根据合约调用请求,确定待调用的第一智能合约;
查找所述第一智能合约对应的第一类加载器,其中,类加载器与智能合约一一对应,每个智能合约全部的类均由所述智能合约对应的类加载器进行加载;
通过所述第一类加载器调用所述第一智能合约的目标类,其中,所述目标类包括用户自定义的功能类,所述合约调用请求包括所述功能类的字节码和全限定名;
所述通过所述第一类加载器调用所述第一智能合约的目标类,包括:
根据所述功能类的全限定名,在所述第一类加载器的缓存中查找与所述功能类的全限定名相同的同名功能类;
若没有查找到所述同名功能类,则根据所述功能类的字节码,在所述第一类加载器的缓存中加载并调用所述功能类;
若查找到所述同名功能类,则比对所述同名功能类的字节码和所述功能类的字节码是否一致;
若所述同名功能类的字节码和所述功能类的字节码一致,则调用所述同名功能类;
若所述同名功能类的字节码和所述功能类的字节码不一致,则删除所述同名功能类,并根据所述功能类的字节码,在所述第一类加载器的缓存中加载并调用所述功能类。
2.根据权利要求1所述的方法,其特征在于,所述合约调用请求包括所述第一智能合约的合约地址,所述查找所述第一智能合约对应的第一类加载器,包括:
根据所述第一智能合约的合约地址,查找所述第一类加载器。
3.根据权利要求1所述的方法,其特征在于,在所述通过所述第一类加载器调用所述第一智能合约的目标类之前,所述方法还包括:
若没有查找到所述第一类加载器,则创建所述第一类加载器。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若缓存所述第一类加载器的Java虚拟机的缓存超过阈值,则将所述Java虚拟机缓存中满足最近最少使用条件的类加载器删除。
5.根据权利要求1所述的方法,其特征在于,所述目标类包括所述第一智能合约中预设的用户类,所述通过所述第一类加载器调用所述第一智能合约的目标类,包括:
根据所述用户类的全限定名,在所述第一类加载器的缓存中查找与所述用户类的全限定名相同的同名用户类;
若没有查找到所述同名用户类,则根据所述用户类的字节码,在所述第一类加载器的缓存中加载并调用所述用户类;
若查找到所述同名用户类,则调用所述同名用户类。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
根据合约部署请求,确定待部署的第二智能合约;
创建所述第二智能合约对应的第二类加载器;
通过所述第二类加载器调用所述第二智能合约的目标类。
7.一种智能合约的类调用装置,其特征在于,包括:
确定模块,用于根据合约调用请求,确定待调用的第一智能合约,以及查找所述第一智能合约对应的第一类加载器,其中,类加载器与智能合约一一对应,每个智能合约全部的类均由所述智能合约对应的类加载器进行加载;
调用模块,用于通过所述第一类加载器调用所述第一智能合约的目标类,其中,所述目标类包括用户自定义的功能类,所述合约调用请求包括所述功能类的字节码和全限定名;
所述调用模块具体用于:
根据所述功能类的全限定名,在所述第一类加载器的缓存中查找与所述功能类的全限定名相同的同名功能类;
若没有查找到所述同名功能类,则根据所述功能类的字节码,在所述第一类加载器的缓存中加载并调用所述功能类;
若查找到所述同名功能类,则比对所述同名功能类的字节码和所述功能类的字节码是否一致;
若所述同名功能类的字节码和所述功能类的字节码一致,则调用所述同名功能类;
若所述同名功能类的字节码和所述功能类的字节码不一致,则删除所述同名功能类,并根据所述功能类的字节码,在所述第一类加载器的缓存中加载并调用所述功能类。
8.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于在调用所述计算机程序时执行如权利要求1-6任一项所述的方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011345713.3A CN112445543B (zh) | 2020-11-26 | 2020-11-26 | 智能合约的类调用方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011345713.3A CN112445543B (zh) | 2020-11-26 | 2020-11-26 | 智能合约的类调用方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112445543A CN112445543A (zh) | 2021-03-05 |
CN112445543B true CN112445543B (zh) | 2023-03-10 |
Family
ID=74738046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011345713.3A Active CN112445543B (zh) | 2020-11-26 | 2020-11-26 | 智能合约的类调用方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112445543B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392619A (zh) * | 2017-07-31 | 2017-11-24 | 众安信息技术服务有限公司 | 智能合约处理方法及装置 |
CN108874372A (zh) * | 2018-06-20 | 2018-11-23 | 北京连琪科技有限公司 | 一种基于Scala的区块链合约实现方法及系统 |
CN110297721A (zh) * | 2019-06-24 | 2019-10-01 | 杭州趣链科技有限公司 | 一种基于java的智能合约的跨合约调用方法 |
CN110392052A (zh) * | 2019-07-22 | 2019-10-29 | 中国工商银行股份有限公司 | 一种区块链智能合约处理系统及方法 |
CN110968437A (zh) * | 2019-11-27 | 2020-04-07 | 杭州趣链科技有限公司 | 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质 |
WO2020169123A2 (en) * | 2020-06-08 | 2020-08-27 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based smart contract pools |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100549957C (zh) * | 2007-08-31 | 2009-10-14 | 深圳市金蝶中间件有限公司 | 一种类装载隔离的方法及一种类装载隔离的装置 |
CN102902911B (zh) * | 2012-09-18 | 2015-08-19 | 北京深思数盾科技有限公司 | 一种在Java虚拟机中安全运行第三方代码的方法 |
CN105404524B (zh) * | 2014-09-15 | 2019-01-15 | 阿里巴巴集团控股有限公司 | Java应用中的类加载隔离方法及装置 |
CN105867928B (zh) * | 2016-03-30 | 2019-06-04 | 北京奇虎科技有限公司 | 一种在指定分布式系统中接入指定计算模型的方法和装置 |
CN108229148B (zh) * | 2016-12-21 | 2022-06-21 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及系统 |
CN111095338B (zh) * | 2019-06-28 | 2023-06-30 | 创新先进技术有限公司 | 用于执行不同类型区块链合约的系统和方法 |
CN111324359B (zh) * | 2020-02-27 | 2022-04-29 | 支付宝(杭州)信息技术有限公司 | 插件部署方法及装置 |
CN111443959B (zh) * | 2020-03-27 | 2023-04-25 | 北京金山云网络技术有限公司 | 任务的执行方法、装置和服务器 |
-
2020
- 2020-11-26 CN CN202011345713.3A patent/CN112445543B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392619A (zh) * | 2017-07-31 | 2017-11-24 | 众安信息技术服务有限公司 | 智能合约处理方法及装置 |
CN108874372A (zh) * | 2018-06-20 | 2018-11-23 | 北京连琪科技有限公司 | 一种基于Scala的区块链合约实现方法及系统 |
CN110297721A (zh) * | 2019-06-24 | 2019-10-01 | 杭州趣链科技有限公司 | 一种基于java的智能合约的跨合约调用方法 |
CN110392052A (zh) * | 2019-07-22 | 2019-10-29 | 中国工商银行股份有限公司 | 一种区块链智能合约处理系统及方法 |
CN110968437A (zh) * | 2019-11-27 | 2020-04-07 | 杭州趣链科技有限公司 | 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质 |
WO2020169123A2 (en) * | 2020-06-08 | 2020-08-27 | Alipay Labs (singapore) Pte. Ltd. | Blockchain-based smart contract pools |
Also Published As
Publication number | Publication date |
---|---|
CN112445543A (zh) | 2021-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107562513B (zh) | 一种基于java的智能合约生命周期的管理方法 | |
CN100492301C (zh) | 避免软件冲突的方法和系统 | |
CN111367659B (zh) | 一种Kubernetes中节点的资源管理方法、设备以及介质 | |
CN101446903B (zh) | 构件自动分类的方法 | |
CN112395322B (zh) | 一种基于分级缓存的列表数据显示方法、装置及终端设备 | |
CN106095483A (zh) | 服务的自动化部署方法及装置 | |
CN104573497A (zh) | 一种启动项的处理方法和装置 | |
WO2021194624A1 (en) | Shadow stack violation enforcement at module granularity | |
CN112966094A (zh) | 一种交易数据的处理方法、装置以及系统 | |
EP3121750B1 (en) | System and method for antivirus checking of native images of software assemblies | |
WO2024098888A1 (zh) | 模型存储优化方法及电子设备 | |
CN112445543B (zh) | 智能合约的类调用方法、装置及电子设备 | |
EP1280051A1 (en) | Information processing method and system | |
CN105550573A (zh) | 拦截捆绑软件的方法和装置 | |
CN112799588A (zh) | 使用外部存储加载容器集群应用数据时的数据存储方法 | |
KR100456512B1 (ko) | 커널 백도어 탐지 시스템, 이를 이용한 커널 백도어 탐지방법 및 커널 데이터 복구 방법 | |
CN110543357B (zh) | 管理应用程序对象的方法,相关装置及系统 | |
CN115809118A (zh) | 一种java进程动态防护方法、装置、设备及介质 | |
CN103729600B (zh) | 数据安全互联系统建立方法及数据安全互联系统 | |
CN115599295A (zh) | 一种存储系统的节点扩容方法和装置 | |
CN112698912A (zh) | 一种Java Card虚拟机运行环境及内存管理方法 | |
CN113360219B (zh) | 一种呼叫线路接入方法、装置、设备及可读存储介质 | |
CN103176915A (zh) | 一种管理内存的方法及装置 | |
CN113568683B (zh) | 资产数据流处理服务组件动态扩展的方法和装置 | |
CN116896587A (zh) | 重复网络请求的处理方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |