CN117093227B - 一种用于执行智能合约的方法及装置 - Google Patents
一种用于执行智能合约的方法及装置 Download PDFInfo
- Publication number
- CN117093227B CN117093227B CN202311305736.5A CN202311305736A CN117093227B CN 117093227 B CN117093227 B CN 117093227B CN 202311305736 A CN202311305736 A CN 202311305736A CN 117093227 B CN117093227 B CN 117093227B
- Authority
- CN
- China
- Prior art keywords
- instruction
- intermediate code
- type
- execution
- execution mode
- 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
- 238000000034 method Methods 0.000 title claims abstract description 153
- 238000012545 processing Methods 0.000 claims abstract description 50
- 230000008569 process Effects 0.000 claims abstract description 39
- 238000004590 computer program Methods 0.000 claims description 21
- 238000006243 chemical reaction Methods 0.000 abstract description 14
- 239000002699 waste material Substances 0.000 abstract description 8
- 230000006870 function Effects 0.000 description 16
- 230000014509 gene expression Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 6
- 230000004044 response Effects 0.000 description 4
- 101150071111 FADD gene Proteins 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013068 supply chain management Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请适用于区块链技术领域,提供了一种用于执行智能合约的方法及装置,包括:第一区块链节点获取部署在第一区块链节点的第一中间代码,第一中间代码是客户端节点在编译第一指令的过程中通过对字节码进行转换获得的;第一区块链节点基于当前的执行模式,利用第一中间代码进行执行处理,第一中间代码能够支持不同执行模式的运行,不同的执行模式包括解释执行模式和编译执行模式,第一区块链节点当前的执行模式为不同执行模式中的任一模式。本申请通过上述方式避免了智能合约在不同区块链节点上多次执行代码转换,以及避免字节码回退现象,提高了智能合约的执行效率,避免了计算资源浪费,从而提高了区块链系统的算力。
Description
技术领域
本申请属于区块链技术领域,尤其涉及一种用于执行智能合约的方法及装置。
背景技术
现如今伴随着区块链应用场景的不断扩展,对智能合约的执行效率的要求不断提高。现有的执行智能合约的方式是,使用虚拟化技术建立一种接近计算机硬件中央处理器(Central Processing Unit,CPU)的指令集,以将智能合约的代码转换为特定的指令集,从而适配不同的虚拟机的操作环境,确保在不同的操作环境中,该特定的指令集运行可以获得同样的效果。然而这种方式必然没有直接通过使用计算硬件CPU提供的指令集的执行效率高,例如一个加法操作,CPU指令集可以通过一个指令即可实现,而虚拟化的指令集需要通过操作数据栈的多条指令才能完成。使用虚拟化技术执行智能合约,存在智能合约执行效率太低,且浪费大量计算资源和内存资源的问题。
解决虚拟化技术带来的资源浪费的方式是,将智能合约的代码转换为机器能够理解并直接执行的代码,目前使用的转换方式是在获取智能合约的代码后,依据区块链各节点上的执行引擎类型,进行具体的机器码转换。然而这种方式智能合约的执行效率较低。
发明内容
本申请实施例提供了一种用于执行智能合约的方法及装置,在编译指令的过程中生成通用的中间代码,从而提高智能合约的执行效率。
第一方面,本申请实施例提供了一种用于执行智能合约的方法,所述方法应用于区块链系统,所述区块链系统包括第一区块链节点,所述方法包括:
所述第一区块链节点获取部署在所述第一区块链节点的第一中间代码,所述第一中间代码是客户端节点在编译第一指令的过程中通过对字节码进行转换获得的;
所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理,所述第一中间代码能够支持不同执行模式的运行,所述不同的执行模式包括解释执行模式和编译执行模式,所述第一区块链节点当前的执行模式为所述不同执行模式中的任一模式。
在本申请实施例中,通过在编译第一中间代码的过程中,收集编译和解释所需的信息,并添加进第一中间代码,并将生成的第一中间代码部署在区块链系统上。进而区块链系统中的区块链节点获取第一中间代码,并直接输入编译执行引擎和解释执行引擎中进行使用。相比于传统的将智能合约的字节码部署在区块链系统上,需要依据不同区块链节点上加载的执行引擎类型,将智能合约的字节码转换为适配不同执行引擎的要求的中间代码,才能供执行引擎使用的方式,本申请实施例提供的用于执行智能合约的方法,可以跳过依据执行引擎类型生成特定中间代码的步骤。进而,区块链系统无需花费大量时间和算力执行特定中间代码的转换,就可以确保智能合约在不同区块链节点上执行效果一致。并且由于第一中间代码具有普适性,也不会存在因编译处理后获得的机器码得不到硬件支持,造成字节码回退的现象。本申请实施例提供的方法可以有效提高智能合约的执行效率,并且避免了计算资源浪费。
在一种可能的实现方式中,在所述第一指令为加法类型指令的情况下,所述第一中间代码包括第一指令类型字段和/或第一操作数类型字段;其中所述第一指令类型字段用于表示加法类型指令的类型,所述第一操作数类型字段用于表示加法类型指令对应的方法参数类型。
在一种可能的实现方式中,在所述第一指令的类型为方法调用类型指令的情况下,所述第一中间代码包括第二指令类型字段和/或第二操作数类型字段;其中所述第二指令类型字段用于表示方法调用类型指令的类型,所述第二操作数类型字段用于表示方法调用类型指令对应的方法参数类型。
通过在生成第一中间代码的阶段,获取编译处理和解释处理所需的信息,并将该信息加入第一中间代码;在后续调用执行时,第一中间代码可支持多种执行引擎的运行,从而区块链节点执行第一中间代码时,可以通过内存偏移的方式直接读取所需的信息,跳过寄存器和内存之间的转换步骤,执行即时编译和预先编译。
在一种可能的实现方式中,所述第一区块链节点基于当前的执行模式,采用所述第一中间代码进行执行处理,包括:在当前的执行模式为编译执行模式的情况下,利用所述第一中间代码执行编译处理,所述编译执行模式包括:预先编译模式和/或即时编译模式。
在一种可能的实现方式中,在当前的执行模式为编译执行模式的情况下,所述利用所述第一中间代码执行编译处理,包括:调用编译执行接口,利用所述第一中间代码执行编译处理。在一种可能的实现方式中,所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理包括:在当前的执行模式为解释执行模式的情况下,利用所述第一中间代码执行解释执行处理。在一种可能的实现方式中,在当前的执行模式为解释执行模式的情况下,所述利用所述第一中间代码执行解释执行处理包括:调用解释执行接口,利用所述第一中间代码执行解释执行处理。
第一中间代码可以支持区块链节点上不同执行引擎的运行,这种方式可以避免智能合约依据执行引擎的类型进行多次转换,并且可以避免转换的中间代码无法执行,需要回退的情况,可以有效避免资源浪费。
第二方面,本申请实施例提供了一种用于执行智能合约的方法装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的模块(或单元)。
第三方面,本申请实施例提供了一种用于执行智能合约的装置,包括处理器和存储器,所述处理器和所述存储器耦合,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述装置执行本申请实施例第一方面中任意一种实现方式所述的用于执行智能合约的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述方法的步骤。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得内存测试装置执行上述第一方面或第一方面的任意可能的实现方式中的方法。可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
本申请实施例与现有技术相比存在的有益效果是:相较于传统的将智能合约的字节码部署在区块链系统上,需要依据不同区块链节点上加载的执行引擎类型,将智能合约的字节码转换为适配不同执行引擎的要求的中间代码,才能供执行引擎使用的方式,本申请实施例提供的用于执行智能合约的方法,通过在编译第一中间代码的过程中,收集编译和解释所需的信息,并添加进第一中间代码,并将生成的第一中间代码部署在区块链系统上;通过获取区块链系统中的第一区块链节点的具体执行模式,例如预先编译处理、即时编译处理、解释执行处理;第一区块链节点获取第一中间代码,并依据具体的执行模式,直接将第一中间代码输入编译执行引擎和/或解释执行引擎中进行使用。本申请实施例提供的用于执行智能合约的方法,可以跳过依据执行引擎类型生成特定中间代码的步骤。进而,区块链系统无需花费大量时间和算力执行特定中间代码的转换,就可以确保智能合约在不同区块链节点上执行效果一致。并且由于第一中间代码具有普适性,也不会存在因编译处理后获得的机器码得不到硬件支持,造成字节码回退的现象。本申请实施例提供的方法可以有效提高智能合约的执行效率,并且避免了计算资源浪费。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是现有智能合约的执行流程示意图;
图2是本申请实施例提供的一种用于执行智能合约的流程示意图;
图3是本申请实施例提供的一种用于执行智能合约的方法的流程示意图;
图4是本申请实施例提供的接口继承模式的示意图;
图5是本申请实施例提供的一种用于执行智能合约的装置的结构框图;
图6是本申请实施例提供的一种用于执行智能合约的装置的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
为了便于理解,在介绍本申请实施例之前,先对本申请实施例涉及到的一些术语或概念进行简单介绍。
区块链节点:区块链是一种由密码学算法、共识机制、点对点传输、数学、计算机编程等多种技术为基础而形成的分布式记账系统。区块链系统通常可包括至少一个区块链节点。区块链节点,是指运行在区块链系统上的独立计算机或服务器。区块链节点包括区块链虚拟机(或称为区块链虚拟计算机)。区块链虚拟机本质是区块链系统的一个代码运行环境,其具有存储单元和执行单元。区块链虚拟机用于保证区块链系统上各个区块链节点的代码运行结果一致性。以执行智能合约为例,在实际使用过程中,为确保不同区块链节点的执行效果一致,需要通过区块链节点上的区块链虚拟机来运行智能合约。目前常见的区块链虚拟机包括Java虚拟机和以太坊虚拟机(Ethereum Virtual Machine,EVM)。
Java虚拟机:一种虚构的计算机,可仿真模拟各种计算机功能。基于JVM,可将使用Java语言编写的智能合约转换为Java字节码,该Java字节码可在多种平台上无需重新编译的运行。
智能合约:一种完全自动化的、程序化的计算机协议,用于执行、控制、验证和使两个或多方之间的协议得以履行。智能合约是由高级程序语言编写,经编译器转换为各节点的虚拟机能够识别和运行的机器码,进而各节点对应的虚拟机才能够执行智能合约的内容。智能合约一旦开始运行便无法篡改或删除。目前智能合约的应用场景包括物联网、供应链管理、身份验证领域等。
需要说明的是,由于编译器在将高级语言转换为机器码的过程中,会结合具体的CPU支持的指令集进行优化,以便提升程序执行的速度。但不同虚拟机的CPU支持的指令集不一定相同,所以不同虚拟机的CPU执行的机器码可能不同。
预先编译(Ahead of Time,AOT)模式:一种在程序运行前,预先将程序代码转换为机器码的模式。目前采用AOT模式编译智能合约时,用于AOT模式的中间代码是在区块链节点执行智能合约时生成的。在本申请实施例中,用于AOT模式的中间代码是在客户端节点编译过程中生成的。
即时编译(Just in Time,JIT)模式:一种在程序运行过程中,动态编译机器码的模式。JIT模式可在智能合约运行的过程中,将区块链节点接收的智能合约的字节码动态编译为机器码。在本申请实施例中,JIT模式可在运行智能合约的同时,将第一中间代码编译为机器码。
解释执行模式:并非所有硬件都能支持将Java字节码转化为机器码进行执行,同时为确保区块链不同节点执行结果一致,需要使用解释器对字节码中的指令进行解释,并翻译为适用于当前虚拟机的机器码进行运行。
以下以Java语言编写的智能合约为例,结合图1的流程说明目前智能合约的执行流程。如图1所示,使用Java语言编写智能合约,并将生成的Java智能合约,利用Java编译器进行编译,得到Java字节码;进而,Java字节码被部署在区块链系统上,生成区块链合约;区块链上的区块链节点获取并执行区块链合约,具体的执行过程为:区块链节点上的解释执行器对区块链合约进行识别和解释,进而判断具体是采取AOT模式还是JIT模式执行编译。若采取AOT模式进行编译,则将区块链合约中的字节码转换为AOT中间代码(AOTIntermediate Representation,AOT IR);若采取JIT模式进行编译,则将区块链合约中的字节码转换为JIT中间代码(JIT Intermediate Representation,JIT IR)。此处之所以进行判断,是因为进行预先编译所需的信息和进行即时编译所需的信息并不同,即AOT IR并不能应用于JIT模式,JIT IR并不能用于AOT模式,AOT IR和JIT IR的记录形式和记录内容并不相同。也就是说,智能合约的字节码需要依据执行引擎类型,多次转换为不同类型的中间代码,进而得到机器码;而且若转换得到的机器码不能得到硬件支持,还将回退为字节码。这种方式不仅会造成大量计算资源的浪费,还会降低智能合约的执行效率。
有鉴于此,本申请实施例提出了一种用于执行智能合约的方法及装置。通过在客户端编译时,将智能合约的字节码转换为第一中间代码(或称作通用中间代码),进而将第一中间代码部署在区块链上。第一中间代码能够支持不同的执行引擎,具体例如:所述第一中间代码可直接用于解释执行引擎,也适用于预先编译引擎和即时编译引擎。在实际使用过程中,第一中间代码可依据当前区块链节点上加载的执行引擎,进行进一步的操作,例如将第一中间代码转换为机器码,或对第一中间代码所包含内容进行解释。基于本申请实施例提供的执行智能合约的方法,可以避免多次的中间代码转换,以及字节码回退现象,从而有效提高智能合约的执行效率,避免计算资源的浪费。
现结合图2对本申请实施例提供的中间代码执行方法进行简要说明。图2是本申请实施例提供的一种用于执行智能合约的流程示意图。为便于说明,此处仍以Java语言编写的智能合约为例进行说明。如图2所示,Java智能合约经编译器编译为Java字节码后,再经编译插件转换为第一中间代码,第一中间代码能够支持多种执行模式;在获得第一中间代码后,将第一中间代码部署在区块链系统上,生成智能合约;区块链上的多个区块链节点获取智能合约,并依据每个区块链节点上具备的可执行模式,执行智能合约(即对第一中间代码进行处理),其中该区块链节点上具备的可执行模式包括解释执行模式、预先编译模式、即时编译模式。
需要说明的是,图2与图1的不同之处在于:图2中的第一中间代码与图1中的IR的生成时机不同,图2中的第一中间代码在编译过程中就生成的,而图1中的AOT IR或JIT IR是在区块链节点执行智能合约阶段生成的;并且,本申请中的第一中间代码具备通用性,不需要针对AOT模式单独生成AOT IR,或针对JIT模式单独生成JIT IR。并且将本申请提供的第一中间代码部署在区块链系统上,在实际使用过程中,第一中间代码可直接输入多种执行引擎中进行运行,从而可以跳过使用解释执行器进行解释说明后,再判断执行引擎类型的步骤。
在一种可选地实现方式中,本申请实施例提供的一种用于执行智能合约的方法及装置,可用于区块链系统。所述区块链系统由多台计算机构成,每台计算机可以理解为区块链节点。区块链系统中的数据信息并不集中存储在某台设备,而是分散存储在每个区块链节点。其中,每个区块链节点可以不同的形式出现(例如,小型设备、普通计算机、大型服务器等等),并执行不同的任务。不同区块链节点之间通过智能合约建立联系,并在智能合约的规范下进行交易或执行其他操作。需要说明的是,区块链系统中存在多种智能合约。用户在发起交易或进行其他操作时,区块链节点会依据接收到请求类型,调用不同的智能合约,并依据该智能合约条款进行处理。
示例性地,区块链系统中包括第一区块链节点。其中,第一区块链节点用于接收上传的第一中间代码,并将生成的智能合约部署在区块链系统,以便于区块链系统中的节点获取并执行。
应理解,此处引入“第一区块链节点”是为了在下文以具体的区块节点为例,说明区块链系统上第一中间代码的执行过程,并不用于限制区块链系统中的区块链节点数量。区块链系统可包括多个区块链节点。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图3是本申请实施例提供的用于执行智能合约的方法一种用于执行智能合约的方法的流程示意图。如图3所示,所述方法包括以下步骤:
步骤110:所述第一区块链节点获取部署在所述第一区块链节点的第一中间代码,所述第一中间代码是客户端节点在编译第一指令的过程中通过对字节码进行转换获得的。
示例性地,开发人员在客户端节点上,使用高级程序语言(包括Java语言、Solidity语言、WASM语言等)编写智能合约,该智能合约的以字节码(Byte-code)的形式体现。字节码是一种包含执行程序的二进制文件。在获得智能合约的字节码后,再基于客户端节点,将智能合约的表达形式由字节码转换为第一中间代码。所述第一中间代码中包括智能合约的第一指令所要传达的信息。在完成第一中间代码的生成后,客户端节点向第一区块链节点发起创建智能合约请求,在第一区块链节点同意创建请求,向第一区块链节点上传第一中间代码(即智能合约)。第一区块链节点在接收到第一中间代码后,向区块链系统中的其他多个共识节点发起智能合约共识请求,在多个共识节点通过智能合约共识请求后,对第一中间代码进行存储,并生成第一中间代码的唯一标识。
可选地,在获得智能合约的字节码后,可以使用客户端节点上加载的中间代码转换插件(或称作编译插件),将智能合约的表达形式由字节码转换为第一中间代码。
应理解,本申请实施例并不限制上传第一中间代码的方式。在一种可能的实现方式中,可以通过数据包的方式,将第一中间代码上传或部署至第一区块链节点。通过数据包上传的方式,可以提高提交效率,并提高区块链系统的处理速度,从而节省计算机算力。
可选地,第一指令是Java指令。第一指令包括加法类型指令或方法调用指令。其中,根据操作对象的不同,加法类型的指令包括:整数加法类型指令(IAdd指令)、长整数加法类型指令(Ladd指令)、浮点数加法类型指令(FAdd指令)、定点数加法类型指令(DAdd指令)。以及,根据操作对象的不同,方法调用类型指令包括对象调用指令(InvokeVirtual指令)、特殊调用指令(InvokeSpecial指令)、类方法调用类型指令(InvokeStatic指令)、接口调用指令(InvokeIntrtface指令)。
示例性地,基于Java虚拟机,编写智能合约中的第一指令。具体地,基于Java虚拟机中的Java语言编译器(即Javac编译插件),将智能合约的表达形式从高级程序语言转换为字节码。所述字节码具有固定的数据结构,也具有Java虚拟机规范对Java指令的定义。
在一种可选地实现方式中,所述第一指令的固定数据结构可以描述为:
type instruction struct{
int opcode;
any operands;
}
其中,type字段用于记录第一指令的数据结构,opcode字段用于定义第一指令的指令类型,operands字段用于定义第一指令的操作数类型。
需要说明的是,此处引入“第一指令”是为了后续便于说明指令类型,而并非用于限制智能合约中的指令数量。智能合约中可包括多条相同类型或不同类型的指令。
进一步地,以Java指令为例,第一中间代码的生成过程可以概括为:
(1)获取Java字节码中的指令类型字段A和操作数类型字段;其中操作数类型字段用于表示该指令对应的操作对象的类型,或者说,操作数类型用于定义用于方法或函数的输入参数的类型。Java字节码的操作数类型包括常量池地址、数字(定点数、浮点数、十进制数)、字符、逻辑数。
需要说明的是,同一类型的指令数量可以是一条,也可以是多条。
(2)基于获取的指令类型字段A,筛选出相同类型的指令,并将相同类型的指令进行合并,生成第一中间代码。
示例性地,获取多条相同类型指令中的信息,例如调用方法路径信息、方法签名信息(包括方法名称、方法参数的数目、方法参数的数据类型和顺序)、对象属性信息;通过对所需信息中的共同属性和行为进行抽象化描述,生成类的信息,每个类对应唯一的标识;使用指令类型字段B记录指令的类型,并将原Java字节码中的操作数类型字段替换为类标识字段。需要说明的是,为明确指令所调用方法,第一中间代码除指令类型字段B和类标识字段以外,还会包括其他字段,用于辅助确定调用方法的位置。
需要说明的是,类(也称为Class)是一种人为定义的引用数据类型。每个类包含方法(对象可实现的功能)和属性(对象的客观描述)。类不可被直接操作,需要具化为对象时,才可进行操作。
应理解,此处的“指令类型字段A”对应的指令数量为一个,以及此处的“指令类型字段B”对应的指令数量可以是一个,也可以是多个。
需要说明的是,对于不同的指令类型,其对应的第一中间代码的表达形式不同。
为便于理解第一中间代码的生成过程,下面是以Java指令中两种指令类型(加法类型指令、方法调用类型指令)进行说明。应理解,其中涉及到的中间代码的转换过程也同样适用于其他类型的Java指令。比如,中间代码的转换过程包括:将后续执行编译模式所需的信息提前获取,并在编译阶段加入第一中间代码中。
在一种可选地实现方式中,在所述第一指令为加法类型指令的情况下,所述第一中间代码包括第一指令类型字段和/或第一操作数类型字段;其中所述第一指令类型字段用于表示加法类型指令的类型,所述第一操作数类型字段用于表示加法类型指令对应的方法参数类型。
示例性地,加法类型指令(即Add指令)所起的作用是将两个或两个以上的操作数相加,并将结果存储在目标操作数中。由于IAdd指令、Ladd指令、FAdd指令、DAdd指令的本质都是从操作栈中弹出两个数,所以在转换为第一中间代码时,可以将上述四种指令合并为一种中间代码的表达形式。
在一种可选地实现方式中,第一中间代码包括第一指令类型字段和/或第一操作数类型字段。所述第一操作数类型字段具体包括第一类标识字段,所述第一类标识字段用于表示加法类型指令对应的类。
示例性地,在所述第一指令为加法类型指令的情况下,所述第一中间代码的具体表达为:
type OperateAdd struct{
Type Number Type
}
其中,type字段记录所需操作的第一指令的数据结构,基于type字段还可以获取第一指令的指令类型。此处第一指令的指令类型为加法类型指令。并通过Type字段记录加法类型指令所对应的类标识,此处加法类型指令所对应的类标识为Number Type。
应理解,加法类型指令对应的第一中间代码包含了IAdd指令、Ladd指令、FAdd指令、DAdd指令所要表达的信息,可以直接用于解释执行,也可以直接用于AOT编译或JIT编译,从而获得从两个寄存器获取数值并相加,并将相加的结果存放入一个寄存器的执行效果。
在一种可选地实现方式中,在所述第一指令的类型为方法调用类型指令的情况下,所述第一中间代码包括第二指令类型字段和/或第二操作数类型字段;其中所述第二指令类型字段用于表示方法调用类型指令的类型,所述第二操作数类型字段用于表示方法调用类型指令对应的方法参数类型。
示例性地,由于InvokeVirtual指令、InvokeSpecial指令、InvokeStatic指令、InvokeIntrtface指令的本质都是在类的信息的范围内寻找目标方法,并在找到目标方法后新增一个栈帧调用。其中目标方法的入参(注:入参是指函数或方法要传递的参数)是上一个栈帧中操作数栈的数据。因此,可以将InvokeVirtual指令、InvokeSpecial指令、InvokeStatic指令、InvokeIntrtface指令合并为一种中间代码的表达形式。
其中,栈帧,也称为过程活动记录,本质为两个指针寄存器(寄存器ebp为栈,寄存器esp为帧),也可以理解为一个函数执行的环境。栈帧的内容调用函数的参数、局部变量、函数执行完返回到何处等。栈帧切换是指从当前栈帧切换到新的栈帧,也可以理解为将寄存器esp的值装入寄存器edp,并将装入寄存器edp的值作为栈帧起始位置。
在一种可选地实现方式中,可以通过类加载器读取类的信息。类加载器可以对.java后缀的文件进行编译,生成对应的.class后缀文件。当需要加载某个类时,Java虚拟机会使用类加载器读取.class文件,并创建对应的Class对象,以便进行操作。应理解,也可以使用其他的方式来读取类的信息,本申请实施例并不做具体的限制。
在一种可选地实现方式中,第一中间代码包括第二指令类型字段和/或第二操作数类型字段。所述第二操作数类型字段具体包括第二类标识字段、方法字段、位置字段。所述第二类标识字段用于表示方法调用类型指令对应的类,所述方法字段用于表示方法调用类型指令对应的类中所包括的方法类型,所述位置字段用于生成调用栈信息。
示例性地,在所述第一指令为方法调用类型指令的情况下,所述第一中间代码的具体表达形式如下:
type OperateInvoke struct{
ClassIDint 64
MthIDint64
PCint
}
其中,type字段记录指令类型(即OperateInvoke,操作方法调用类型指令),ClassID字段,即类标识字段,是Class数组的下标,用于将Class原本记录的常量池地址替换为ID标识,该ID标识具有唯一性,通常是在加载类时生成。通过ClassID字段,即可获取到OperateInvoke指令所需的Class信息。Class数组中的方法也是一个数组,而MthID字段为方法数组的下标。MthID字段,用于标记读取的Class中方法的顺序,MthID也具有唯一性。在后续执行解释说明处理,基于MthID字段,可以准确获取到需要执行的方法。PC字段记录的是第一指令在智能合约的指令集中的位置,用于生成调用栈信息。
第一指令中类的信息和方法是通过字节码的常量池地址中的字符串来表示,在编译第一中间代码期间,使用ClassID字段来替换原有的常量池地址(常量池地址用于读取类的信息),以及使用MthID字段来替换方法信息,在后续使用AOT编译或JIT编译时,可以直接通过ID索引的方式获取字节码中原Class信息和方法信息,从而区块链节点执行第一中间代码时,可以通过内存偏移的方式直接读取所需的信息,跳过寄存器和内存之间的转换步骤,执行即时编译和预先编译。
需要说明的是,第一中间代码包括AOT编译、JIT编译、解释执行需要的信息。此外,在生成第一中间代码的过程中,还会通过接口继承模式,使第一中间代码继承编译执行和解释执行的全部接口功能,从而可以根据实际需求执行接口转换,支持不同智能合约执行引擎的运行。接口继承模式是指允许子接口继承父接口中定义的行为,并对父接口定义的行为进行扩展。基于接口继承模式,可以实现代码复用,降低代码复杂度,从而增加开发时间、降低维护成本的效果。
现结合图4,对接口继承模式进行说明。图4是本申请实施例提供的接口继承模式的示意图。如图4所示,第一中间代码接口继承中间代码编译接口的全部功能,而中间代码编译接口继承第一指令接口的全部功能。并且,面对不同的执行引擎,第一中间代码接口,可以依据具体的执行引擎类型转换接口。例如,执行引擎为预先编译引擎或即时编译时,第一中间代码接口转换为编译接口;执行引擎为解释执行引擎时,第一中间代码接口转换为解释执行接口。
应理解,此处的“第一中间代码”仅为示例,所述“第一中间代码”也可以有其他的命名。例如,通用中间代码。对此,本申请不做具体限制。
相较于将智能合约的字节码上传至区块链,在具体的调用执行过程中,需要首先对部署的智能合约字节码进行识别和解释,进而判断具体的编译执行模式的方式,本申请实施例中是将第一中间代码部署在区块链系统,并且,无需进行解释说明和判断编译模式,就可直接用于不同编译引擎进行转换。
将步骤110中将第一中间代码上传至区块链系统后,步骤120将详细说明第一中间代码在区块链系统中的使用。应理解,第一中间代码是智能合约的其中一种表达形式。在区块链系统上执行第一中间代码,也可以理解为在区块链系统上执行智能合约。
步骤120:所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理,所述第一中间代码能够支持不同执行模式的运行,所述不同的执行模式包括解释执行模式和编译执行模式,所述第一区块链节点当前的执行模式为所述不同执行模式中的任一模式。
示例性地,区块链节点对应的虚拟机类型多样,其上加载的执行引擎也种类繁多。在执行第一中间代码时,需要确定区块链节点上具体加载的执行引擎类型,即确定第一执行模式。由于在编译指令的过程中已经提前收集了编译处理和解释处理所需的信息,并将所需信息加入了第一中间代码,所以将第一中间代码部署在区块链系统上后,第一中间代码可以直接用于区块链节点上加载的不同执行引擎。在执行引擎的工作模式是编译执行模式时,将第一中间代码转换为机器码;在执行引擎的工作模式为解释执行模式时,对第一中间代码的指令进行逐行解释说明。解释执行模式的应用,可以避免因转换得到的机器码不能得到硬件支持,造成字节码回退的现象。
可选地,区块链节点可以通过查看存储的引擎属性信息,或者向执行引擎发送查看属性信息信号的方式,获取第一执行模式。第一执行模式可以是解释执行模式或编译执行模式。
应理解,此处引入“第一执行模式”只是为了区分区块链节点上的执行模式,并不用于限制区块链节点上的执行引擎的数量。区块链节点上可具备一个或多个执行引擎。
应理解,本申请实施例并不限制具体的获取第一执行模式的方式。
在一种可选地实现方式中,所述第一区块链节点基于当前的执行模式,采用所述第一中间代码进行执行处理,包括:在当前的执行模式为编译执行模式的情况下,利用所述第一中间代码执行编译处理,所述编译执行模式包括:预先编译模式和/或即时编译模式。
示例性地,第一执行模式为编译执行模式。编译执行模式包括预先编译模式(AOT模式)和即时编译模式(JIT模式)。这两种编译模式可以将第一中间代码转换为机器码。机器码是智能合约在区块链系统上的一种表达形式,其可以被区块链系统上的节点理解并执行。
其中,在第一执行模式为AOT模式的情况下,在智能合约运行之前,AOT模式即可将第一中间代码转换为第一机器码。具体地,AOT编译可以以.class、.java module、.jar等为单位进行编译,编译结果为.so为后缀的文件(即第一机器码),生成的.so文件可以后续直接用于区块链节点所对应的虚拟机。
在第一执行模式为JIT模式的情况下,JIT模式可以在运行智能合约的同时进行第二机器码的编译。具体地,JIT执行引擎可以选择性的编译热点代码,并将热点代码转换得到的第二机器码进行存储,以便在下次执行时直接执行第二机器码。
需要说明的是,JIT编译和AOT编译所需的信息不同,JIT编译获得机器码和AOT编译获得机器码表达形式和所包含的内容,也不一定相同。
应理解,此处引入“第一机器码”、“第二机器码”,仅是为了区分不同编译模式下获得的机器码。
在一种可选地实现方式中,在当前的执行模式为编译执行模式的情况下,所述利用所述第一中间代码执行编译处理,包括:调用编译执行接口,利用所述第一中间代码执行编译处理。
示例性地,第一中间代码中包括编译执行的全部接口功能。在确定第一执行模式为编译执行模式时,可以通过调用第一中间代码中编译接口的方式,将第一中间代码发送给编译执行引擎进行处理。其中编译接口包括第一接口和第二接口,第一接口用于与预先编译引擎建立联系,第二接口用于与即时编译引擎建立联系。
具体地,在第一执行模式为AOT模式的情况下,调用第一接口,对所述第一中间代码执行预先编译处理,得到第一机器码。在第一执行模式为JIT模式的情况下,调用第二接口,对所述第一中间代码执行即时编译处理,得到第二机器码。
在一种可选地实现方式中,所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理包括:在当前的执行模式为解释执行模式的情况下,利用所述第一中间代码执行解释执行处理。
示例性地,第一执行模式为解释执行模式的情况下,区块链节点上的解释执行引擎获取第一中间代码,并对第一中间代码中指令进行逐行解释,每解释第一中间代码中的一行代码,虚拟机立即执行一句代码,并将执行结果进行反馈。解释执行处理可以确保智能合约在不同区块链节点上的执行结果一致。
在一种可选地实现方式中,在当前的执行模式为解释执行模式的情况下,所述利用所述第一中间代码执行解释执行处理包括:调用解释执行接口,利用所述第一中间代码执行解释执行处理。
示例性地,第一中间代码还包括解释执行的全部接口功能。在确定第一执行模式为解释执行模式时,可以通过调用第一中间代码中解释执行接口的方式,将第一中间代码发送给解释执行引擎进行处理。其中解释执行接口包括第三接口,第三接口用于与解释执行引擎建立联系。具体地,通过调用解释执行接口(即第三接口),对将第一中间代码发送给解释执行引擎进行逐行解释说明。
通过在生成第一中间代码的阶段,获取编译处理和解释处理所需的信息,并将该信息加入第一中间代码;在后续调用执行时,第一中间代码可支持多种执行引擎的运行。
在一种可选地实现方式中在一种可选地实现方式中在一种可选地实现方式中在一种可选地实现方式中本申请实施例提供的用于执行智能合约的方法,通过在编译第一中间代码的过程中,收集编译和解释所需的信息,并添加进第一中间代码,并将生成的第一中间代码部署在区块链系统上;通过获取区块链系统中的第一区块链节点的具体执行模式,例如预先编译处理、即时编译处理、解释执行处理;第一区块链节点获取第一中间代码,并依据具体的执行模式,直接将第一中间代码输入编译执行引擎和/或解释执行引擎中进行使用。
相较于传统的将智能合约的字节码部署在区块链系统上,需要依据不同区块链节点上加载的执行引擎类型,将智能合约的字节码转换为适配不同执行引擎的要求的中间代码,才能供执行引擎使用的方式,本申请实施例提供的用于执行智能合约的方法,可以跳过依据执行引擎类型生成特定中间代码的步骤。进而,区块链系统无需花费大量时间和算力执行特定中间代码的转换,就可以确保智能合约在不同区块链节点上执行效果一致。并且由于第一中间代码具有普适性,也不会存在因编译处理后获得的机器码得不到硬件支持,造成字节码回退的现象。本申请实施例提供的方法可以有效提高智能合约的执行效率,并且避免了计算资源浪费。
对应于上文实施例所述的用于执行智能合约的方法一种用于执行智能合约的方法,图5示出了本申请实施例提供的一种用于执行智能合约的装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
请参照图5,所述用于执行智能合约的装置2应用于区块链系统,所述区块链系统包括第一区块链节点,所述装置包括:获取单元21、执行单元22;
其中,所述获取单元21,用于所述第一区块链节点获取部署在所述第一区块链节点的第一中间代码,所述第一中间代码是客户端节点在编译第一指令的过程中通过对字节码进行转换获得的;
可选地,在所述第一指令为加法类型指令的情况下,所述第一中间代码包括第一指令类型字段和/或第一操作数类型字段;
其中所述第一指令类型字段用于表示加法类型指令的类型,所述第一操作数类型字段用于表示加法类型指令对应的方法参数类型。
可选地,在所述第一指令的类型为方法调用类型指令的情况下,所述第一中间代码包括第二指令类型字段和/或第二操作数类型字段;
其中所述第二指令类型字段用于表示方法调用类型指令的类型,所述第二操作数类型字段用于表示方法调用类型指令对应的方法参数类型。
所述执行单元22,用于所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理,所述第一中间代码能够支持不同执行模式的运行,所述不同的执行模式包括解释执行模式和编译执行模式,所述第一区块链节点当前的执行模式为所述不同执行模式中的任一模式。
可选地,所述执行单元22,包括:在当前的执行模式为编译执行模式的情况下,利用所述第一中间代码执行编译处理,所述编译执行模式包括:预先编译模式和/或即时编译模式。
可选地,所述执行单元22,包括:调用编译执行接口,利用所述第一中间代码执行编译处理。
可选地,所述执行单元22,还包括:在当前的执行模式为解释执行模式的情况下,利用所述第一中间代码执行解释执行处理。
可选地,所述执行单元22,还包括:调用解释执行接口,利用所述第一中间代码执行解释执行处理。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
图6为本申请一实施例提供的一种用于执行智能合约的装置的结构示意图。如图6所示,该实施例的用于执行智能合约的装置3包括:至少一个处理器30(图6中仅示出一个)处理器、存储器31以及存储在所述存储器31中并可在所述至少一个处理器30上运行的计算机程序32,所述处理器30执行所述计算机程序32时实现上述任意各个用于执行智能合约的方法实施例中的步骤。
所述用于执行智能合约的装置3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该中间代码的执行装置可包括,但不仅限于,处理器30、存储器31。本领域技术人员可以理解,图6仅仅是用于执行智能合约的装置3的举例,并不构成对用于执行智能合约的装置3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器30可以是中央处理单元(Central Processing Unit,CPU),该处理器30还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路 (Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器31在一些实施例中可以是所述用于执行智能合约的装置3的内部存储单元,例如用于执行智能合约的装置3的硬盘或内存。所述存储器31在另一些实施例中也可以是所述用于执行智能合约的装置3的外部存储设备,例如所述用于执行智能合约的装置3上配备的插接式硬盘,智能存储卡(Smart Media Card, SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器31还可以既包括所述用于执行智能合约的装置3的内部存储单元也包括外部存储设备。所述存储器31用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器31还可以用于暂时地存储已经输出或者将要输出的数据。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供了一种网络设备,该网络设备包括:至少一个处理器、存储器以及存储在所述存储器中并可在所述至少一个处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意各个方法实施例中的步骤。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述各个方法实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (8)
1.一种用于执行智能合约的方法,其特征在于,所述方法应用于区块链系统,所述区块链系统包括第一区块链节点,所述方法包括:
所述第一区块链节点获取部署在所述第一区块链节点的第一中间代码,所述第一中间代码是客户端节点在编译第一指令的过程中通过对字节码进行转换获得的;
其中,在所述第一指令为加法类型指令的情况下,所述第一中间代码包括第一指令类型字段和/或第一操作数类型字段;所述第一指令类型字段用于表示加法类型指令的类型,所述第一操作数类型字段用于表示加法类型指令对应的方法参数类型;
在所述第一指令的类型为方法调用类型指令的情况下,所述第一中间代码包括第二指令类型字段和/或第二操作数类型字段;所述第二指令类型字段用于表示方法调用类型指令的类型,所述第二操作数类型字段用于表示方法调用类型指令对应的方法参数类型;
所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理,所述第一中间代码能够支持不同执行模式的运行,所述不同的执行模式包括解释执行模式和编译执行模式,所述第一区块链节点当前的执行模式为所述不同执行模式中的任一模式。
2.如权利要求1所述的方法,其特征在于,所述第一区块链节点基于当前的执行模式,采用所述第一中间代码进行执行处理,包括:
在当前的执行模式为编译执行模式的情况下,利用所述第一中间代码执行编译处理,所述编译执行模式包括:预先编译模式和/或即时编译模式。
3.如权利要求2所述的方法,其特征在于,在当前的执行模式为编译执行模式的情况下,所述利用所述第一中间代码执行编译处理,包括:
调用编译执行接口,利用所述第一中间代码执行编译处理。
4.如权利要求1所述的方法,其特征在于,所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理包括:
在当前的执行模式为解释执行模式的情况下,利用所述第一中间代码执行解释执行处理。
5.如权利要求4所述的方法,其特征在于,在当前的执行模式为解释执行模式的情况下,所述利用所述第一中间代码执行解释执行处理包括:
调用解释执行接口,利用所述第一中间代码执行解释执行处理。
6.一种用于执行智能合约的装置,其特征在于,所述装置应用于区块链系统,所述区块链系统包括第一区块链节点,所述装置包括:获取单元、执行单元;
其中,所述获取单元,用于所述第一区块链节点获取部署在所述第一区块链节点的第一中间代码,所述第一中间代码是客户端节点在编译第一指令的过程中通过对字节码进行转换获得的;
其中,在所述第一指令为加法类型指令的情况下,所述第一中间代码包括第一指令类型字段和/或第一操作数类型字段;所述第一指令类型字段用于表示加法类型指令的类型,所述第一操作数类型字段用于表示加法类型指令对应的方法参数类型;
在所述第一指令的类型为方法调用类型指令的情况下,所述第一中间代码包括第二指令类型字段和/或第二操作数类型字段;所述第二指令类型字段用于表示方法调用类型指令的类型,所述第二操作数类型字段用于表示方法调用类型指令对应的方法参数类型;
所述执行单元,用于所述第一区块链节点基于当前的执行模式,利用所述第一中间代码进行执行处理,所述第一中间代码能够支持不同执行模式的运行,所述不同的执行模式包括解释执行模式和编译执行模式,所述第一区块链节点当前的执行模式为所述不同执行模式中的任一模式。
7.一种用于执行智能合约的装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述的方法。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311305736.5A CN117093227B (zh) | 2023-10-10 | 2023-10-10 | 一种用于执行智能合约的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311305736.5A CN117093227B (zh) | 2023-10-10 | 2023-10-10 | 一种用于执行智能合约的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117093227A CN117093227A (zh) | 2023-11-21 |
CN117093227B true CN117093227B (zh) | 2024-04-02 |
Family
ID=88770005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311305736.5A Active CN117093227B (zh) | 2023-10-10 | 2023-10-10 | 一种用于执行智能合约的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117093227B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527316A (zh) * | 2020-12-29 | 2021-03-19 | Oppo广东移动通信有限公司 | 代码编译方法、装置、电子设备及存储介质 |
CN112558984A (zh) * | 2020-12-29 | 2021-03-26 | Oppo广东移动通信有限公司 | 代码编译的方法、装置、电子设备以及服务器 |
CN113407198A (zh) * | 2021-06-07 | 2021-09-17 | 广东辰宜信息科技有限公司 | 智能合约部署方法和装置 |
CN114327477A (zh) * | 2021-12-26 | 2022-04-12 | 杭州趣链科技有限公司 | 智能合约执行方法、装置、电子装置和存储介质 |
CN116107578A (zh) * | 2022-12-06 | 2023-05-12 | 杭州趣链科技有限公司 | 一种执行智能合约的方法、装置、电子设备和存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2975843C (en) * | 2016-08-10 | 2023-06-13 | Peer Ledger Inc. | Apparatus, system, and methods for a blockchain identity translator |
EP3701383B1 (en) * | 2019-06-28 | 2021-08-04 | Advanced New Technologies Co., Ltd. | System and method for executing different types of blockchain contracts |
-
2023
- 2023-10-10 CN CN202311305736.5A patent/CN117093227B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527316A (zh) * | 2020-12-29 | 2021-03-19 | Oppo广东移动通信有限公司 | 代码编译方法、装置、电子设备及存储介质 |
CN112558984A (zh) * | 2020-12-29 | 2021-03-26 | Oppo广东移动通信有限公司 | 代码编译的方法、装置、电子设备以及服务器 |
CN113407198A (zh) * | 2021-06-07 | 2021-09-17 | 广东辰宜信息科技有限公司 | 智能合约部署方法和装置 |
CN114327477A (zh) * | 2021-12-26 | 2022-04-12 | 杭州趣链科技有限公司 | 智能合约执行方法、装置、电子装置和存储介质 |
CN116107578A (zh) * | 2022-12-06 | 2023-05-12 | 杭州趣链科技有限公司 | 一种执行智能合约的方法、装置、电子设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
众筹区块链上的智能合约设计;黄洁华;高灵超;许玉壮;白晓敏;胡凯;;信息安全研究(03);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117093227A (zh) | 2023-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9891900B2 (en) | Generation of specialized methods based on generic methods and type parameterizations | |
US7380242B2 (en) | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes | |
JP4562918B2 (ja) | インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成 | |
EP3350696B1 (en) | Overriding a migrated method of an updated type | |
JP4913302B2 (ja) | 言語サブセットの妥当性検査 | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
US20170010906A1 (en) | Conservative class preloading for real time java execution | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
CN110704064B (zh) | 编译和执行智能合约的方法及装置 | |
CA2362010A1 (en) | Token-based linking | |
US6412108B1 (en) | Method and apparatus for speeding up java methods prior to a first execution | |
CA2249042A1 (en) | Method for generating a java bytecode data flow graph | |
US10002010B2 (en) | Multi-byte compressed string representation | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
CN114116134A (zh) | 智能合约部署和执行方法、设备及存储介质 | |
CN111984263B (zh) | 在第一系统运行第二系统应用的方法、装置、设备及介质 | |
Wallentowitz et al. | Potential of webassembly for embedded systems | |
US7051323B2 (en) | Method and apparatus for initializing romized system classes at virtual machine build time | |
Luckow et al. | HVMTP: a time predictable and portable java virtual machine for hard real-time embedded systems | |
CN112631656A (zh) | 一种基于源代码的智能合约优化方法及装置 | |
CN117093227B (zh) | 一种用于执行智能合约的方法及装置 | |
CN113778564B (zh) | 一种高效执行evm智能合约的方法、设备及储存介质 | |
WO2001057654A2 (en) | Preprocessing of interfaces to allow fast call of native elements | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
Almajed et al. | Binary transformation of applications to run on bare PCs |
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 |