CN116107578A - 一种执行智能合约的方法、装置、电子设备和存储介质 - Google Patents
一种执行智能合约的方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN116107578A CN116107578A CN202211557615.5A CN202211557615A CN116107578A CN 116107578 A CN116107578 A CN 116107578A CN 202211557615 A CN202211557615 A CN 202211557615A CN 116107578 A CN116107578 A CN 116107578A
- Authority
- CN
- China
- Prior art keywords
- machine code
- executing
- code
- byte
- machine
- 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.)
- Pending
Links
Images
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
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及区块链技术领域,提出一种执行智能合约的方法、装置、电子设备和存储介质。该方法包括:获取智能合约的字节码;将字节码直译为机器码,直译是指将字节码的指令逻辑映射为机器码的指令逻辑;执行机器码,得到智能合约的执行结果。本申请通过直译的方式完成编译,编译时间和编译结果大小受控于字节码本身的大小,使得合约编译能够在线性范围的时间内完成,且获得的编译结果大小可控。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种执行智能合约的方法、装置、电子设备和存储介质。
背景技术
在区块链技术领域,为了加速执行智能合约,通常会采用AOT(Ahead of TimeCompilation,预先编译)编译的方式,预先将智能合约的字节码编译为机器码,然后直接调用机器码执行。然而,现有技术一般是使用各类编译器将字节码编译为机器码,而现有的编译器普遍存在编译时间和编译结果大小不可控的问题。
发明内容
有鉴于此,本申请实施例提供了一种执行智能合约的方法、装置、电子设备和存储介质,能够解决将字节码编译为机器码时存在的编译时间和编译结果大小不可控的问题。
本申请实施例的第一方面提供了一种执行智能合约的方法,包括:
获取智能合约的字节码;
将所述字节码直译为机器码,所述直译指将字节码的指令逻辑映射为机器码的指令逻辑;
执行所述机器码,得到所述智能合约的执行结果。
在本申请实施例中,首先获取智能合约的字节码,然后通过直译的方式将字节码转换为机器码,这里的直译是指将字节码的指令逻辑映射为机器码的指令逻辑,最后再执行机器码,从而得到智能合约的执行结果。本申请实施例通过直译的方式完成编译,编译时间和编译结果大小受控于字节码本身的大小,使得合约编译能够在线性范围的时间内完成,且获得的编译结果大小可控。
在本申请实施例的一种实现方式中,所述将所述字节码直译为机器码,可以包括:
对所述字节码进行解析,得到所述字节码包含的所有方法体;
针对每个所述方法体,将所述方法体包含的字节码指令转换为机器码指令,得到所述方法体的机器码序列。
进一步的,所述将所述方法体包含的字节码指令转换为机器码指令,得到所述方法体的机器码序列,可以包括:
提取所述方法体包含的字节码指令序列;
依次将所述字节码指令序列包含的每个字节码指令的指令逻辑转换为机器码指令的指令逻辑,得到所述方法体的机器码序列。
在本申请实施例的一种实现方式中,在将所述字节码直译为机器码之后,还可以包括:
将所述字节码存储至区块链账本;
将所述机器码存储至缓存和/或数据库。
进一步的,所述执行所述机器码,可以包括:
若所述缓存中存在所述机器码,则从所述缓存中读取并执行所述机器码;
若所述缓存中不存在所述机器码,且所述数据库中存在所述机器码,则从所述数据库中读取并执行所述机器码。
更进一步的,所述执行所述机器码,还可以包括:
若所述数据库中不存在所述机器码,则从所述区块链账本中读取并执行所述字节码。
在本申请实施例的一种实现方式中,所述获取智能合约的字节码,可以包括:
当部署所述智能合约或者首次调用所述智能合约时,获取所述智能合约的字节码。
本申请实施例的第二方面提供了一种执行智能合约的装置,包括:
字节码获取模块,用于获取智能合约的字节码;
直译模块,用于将所述字节码直译为机器码,所述直译指将字节码的指令逻辑映射为机器码的指令逻辑;
机器码执行模块,用于执行所述机器码,得到所述智能合约的执行结果。
本申请实施例的第三方面提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例的第一方面提供的执行智能合约的方法。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本申请实施例的第一方面提供的执行智能合约的方法。
本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行如本申请实施例的第一方面提供的执行智能合约的方法。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种执行智能合约的方法的流程图;
图2是本申请实施例提供的将字节码直译为机器码的操作示意图;
图3是本申请实施例提供的一种部署智能合约的操作流程图;
图4是本申请实施例提供的一种调用智能合约的操作流程图;
图5是本申请实施例提供的一种执行智能合约的装置的结构示意图;
图6是本申请实施例提供的一种电子设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
AOT编译是指在程序运行之前将程序代码预先编译为机器码,然后执行机器码的技术。在区块链系统中,为了加速智能合约的执行效率,可以采用AOT编译的方式将智能合约的字节码编译为机器码,然后直接调用机器码执行。目前,通常使用各类编译器将字节码编译为机器码,然而现有的编译器普遍存在编译时间和编译结果大小不可控的问题。
有鉴于此,本申请实施例提供了一种执行智能合约的方法,能够通过直译的方式完成编译,从而解决编译时间和编译结果大小不可控的问题。关于本申请实施例更具体的技术实现细节,请参照下文所述的方法实施例。
请参阅图1,示出了本申请实施例提供的一种执行智能合约的方法,包括:
101、获取智能合约的字节码;
应当理解,本方法实施例的执行主体是区块链系统中的任意区块链节点。
首先,获取智能合约的字节码。用户可以在客户端本地通过高级编程语言编写需要部署的智能合约,将编写好的智能合约编译成字节码,然后将字节码发送至区块链节点。用户也可以直接在区块链节点采用高级编程语言编写需要部署的智能合约,然后将编写好的智能合约编译成字节码。字节码是一种序列二进制文件,通过对智能合约的源代码进行编译可以得到对应的字节码。一般来说,智能合约的字节码可以为WASM(WebAssembly)格式,WASM是一种新的字节码格式,具有性能高效和存储成本低等优点。
102、将字节码直译为机器码,所述直译指将字节码的指令逻辑映射为机器码的指令逻辑;
在获取到智能合约的字节码之后,可以将字节码直译为机器码,也即采用直译的方式将该字节码编译成对应的机器码,机器码是指计算机可以直接运行的二进制代码。这里所说的直译,是指将字节码的指令逻辑映射为机器码的指令逻辑(也即CPU的指令逻辑),与使用编译器完成编译不同,直译相当于对字节码的处理逻辑进行解析,然后按照设定规则将字节码转换成相同处理逻辑的机器码。
示例性的,假设一段WASM字节码如下:
(func$add(type 0)(param i32 i32)(result i32)
local.get 1
local.get 0
i32.add)
这四行字节码为WASM程序的wat格式中的一部分,具体表示一个add方法(即求和方法),这个add方法包含下面三条字节码指令:
local.get 1:表示从本地变量表中取出第二个值,将其Push到栈中;
local.get 0:表示从本地变量表中取出第一个值,将其Push到栈中;
i32.add:表示从栈中Pop出两个数值,对两个数值求和后将得到的结果Push到栈中。
在采用直译的方式对上面三条字节码指令进行编译后,可以得到如下的四条机器码指令:
MOVL[R14+0x8],AX:表示将第二个参数放入AX寄存器;
MOVL[R14+0x0],CX:表示将第一个参数放入CX寄存器;
ADDL CX,AX:表示执行加法,并将结果放入AX寄存器;
MOVL AX,[R14+0x0]:表示将加法结果写回栈。
其中,R14寄存器保存了栈的内存地址,通过MOVL指令可以将内存地址的值移动到AX寄存器。通过上面的四条机器码指令可以完成加法运算,并将结果推送至内存栈的栈顶。另外,在运行机器码指令之前,需要将相应的参数入栈。
在本申请实施例的一种实现方式中,所述将字节码直译为机器码,可以包括:
(1)对字节码进行解析,得到字节码包含的所有方法体;
(2)针对每个方法体,将该方法体包含的字节码指令转换为机器码指令,得到该方法体的机器码序列。
在直译的处理流程中,首先对获取到的字节码进行解析,得到该字节码包含的所有方法体(function body)。然后,遍历每个方法体,将方法体包含的每个字节码指令都转换为机器码指令,这些机器码指令即构成该方法体的机器码序列。在将各个方法体的机器码序列按顺序排列后,即成为最终直译得到的机器码。
进一步的,所述将该方法体包含的字节码指令转换为机器码指令,得到该方法体的机器码序列,可以包括:
(1)提取该方法体包含的字节码指令序列;
(2)依次将字节码指令序列包含的每个字节码指令的指令逻辑转换为机器码指令的指令逻辑,得到该方法体的机器码序列。
针对每个方法体,首先提取该方法体包含的所有字节码指令,这些字节码指令构成一个字节码指令序列。然后,依次将该字节码指令序列包含的每个字节码指令的指令逻辑转换为机器码指令的指令逻辑,也即将每个字节码指令分别按照各自的处理逻辑翻译成对应的机器码指令,最终得到的各个机器码指令即构成该方法体的机器码序列。
如图2所示,为本申请实施例提供的将字节码直译为机器码的操作示意图。首先,对字节码进行解析,得到字节码中的所有方法体;然后,遍历每个方法体,将其包含的每个字节码指令都转换为对应的机器码指令,从而得到每个方法体的机器码序列;在将所有方法体的机器码序列按顺序排列后,即可得到直译后的机器码。
103、执行机器码,得到智能合约的执行结果。
在将字节码直译为机器码之后,如果需要调用智能合约,则可以执行该机器码,从而得到该智能合约的执行结果。与执行字节码的方式相比,执行机器码能够有效提高智能合约的执行效率。
在本申请实施例的一种实现方式中,所述获取智能合约的字节码,可以包括:
当部署智能合约或者首次调用智能合约时,获取智能合约的字节码。
本申请实施例的字节码编译过程既可以发生在部署智能合约时,也可以发生在第一次调用智能合约时。例如,在部署智能合约时可以启动字节码的编译过程,此时获取智能合约的字节码,然后将字节码直译为机器码。又例如,在首次调用智能合约时,如果还未完成字节码的编译过程,此时也可以获取智能合约的字节码,然后将字节码直译为机器码。
在本申请实施例的一种实现方式中,在将所述字节码直译为机器码之后,还可以包括:
(1)将字节码存储至区块链账本;
(2)将机器码存储至缓存和/或数据库。
在将字节码直译得到机器码之后,可以将字节码和机器码都存储起来,以供后续调用智能合约时使用。在具体操作时,可以将字节码写入区块链账本中存储,区块链账本是区块链和与区块链同步的状态数据库的统称;可以将机器码存储到区块链节点的指定缓存和/或指定数据库。
如图3所示,为本申请实施例提供的一种部署智能合约的操作流程图。在图3中,当部署智能合约时,先对智能合约的字节码进行直译得到机器码,然后存储得到的机器码,具体可以将机器码存储至区块链节点的指定存储空间,例如缓存或者数据库。
在本申请实施例的一种实现方式中,所述执行机器码,可以包括:
(1)若缓存中存在机器码,则从缓存中读取并执行机器码;
(2)若缓存中不存在机器码,且数据库中存在机器码,则从数据库中读取并执行机器码。
当调用智能合约的时候,可以从区块链节点的指定缓存或者指定数据库中读取出相应的智能合约机器码,并执行该机器码以获得智能合约的执行结果。具体操作时,首先检测缓存中是否存在相应的机器码,如果存在则读取缓存中的机器码,然后执行该机器码得到智能合约的执行结果;如果缓存中不存在相应的机器码,则继续检测数据库中是否存在相应的机器码,如果存在则读取数据库中的机器码,然后执行该机器码得到智能合约的执行结果。另外,在从缓存或者数据库中读取到机器码之后,可以判断读取到的机器码是否为对应当前机器(即当前的区块链节点)可执行的机器码,如果是则执行该机器码,如果不是,则重新编译后再执行,也即重新将智能合约的字节码直译为机器码并执行。通过设置多种机器码的存储方式,能够提高智能合约调用过程的场景适应性。
进一步的,所述执行机器码还可以包括:
若数据库中不存在机器码,则从区块链账本中读取并执行字节码。
如果数据库中也不存在机器码,则表示智能合约的字节码还未完成编译或者编译得到的机器码没有成功存储。针对这种情况,如果在之前的步骤中已将智能合约的字节码存储至区块链账本,则此时可以从区块链账本中读取出字节码,一方面可以直接执行该字节码以获得智能合约的执行结果,另一方面可以继续将该字节码直译为机器码,然后执行该机器码以获得智能合约的执行结果。通过这样设置,能够有效提高智能合约调用的成功率和完善性。
如图4所示,为本申请实施例提供的一种调用智能合约的操作流程图。在图4中,当调用智能合约时,首先从区块链节点的指定存储空间(例如缓存或者数据库)中读取出相应的机器码,然后执行该机器码从而得到智能合约的执行结果,最终返回该执行结果。
在本申请实施例中,首先获取智能合约的字节码,然后通过直译的方式将字节码转换为机器码,这里的直译是指将字节码的指令逻辑映射为机器码的指令逻辑,最后再执行机器码,从而得到智能合约的执行结果。本申请实施例通过直译的方式完成编译,编译时间和编译结果大小受控于字节码本身的大小,使得合约编译能够在线性范围的时间内完成,且获得的编译结果大小可控。
应理解,上述各个实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
上面主要描述了一种执行智能合约的方法,下面将对一种执行智能合约的装置进行描述。
请参阅图5,本申请实施例中一种执行智能合约的装置的一个实施例包括:
字节码获取模块501,用于获取智能合约的字节码;
直译模块502,用于将所述字节码直译为机器码,所述直译指将字节码的指令逻辑映射为机器码的指令逻辑;
机器码执行模块503,用于执行所述机器码,得到所述智能合约的执行结果。
在本申请实施例的一种实现方式中,所述直译模块可以包括:
字节码解析单元,用于对所述字节码进行解析,得到所述字节码包含的所有方法体;
字节码转换单元,用于针对每个所述方法体,将所述方法体包含的字节码指令转换为机器码指令,得到所述方法体的机器码序列。
进一步的,所述字节码转换单元可以包括:
字节码指令提取子单元,用于提取所述方法体包含的字节码指令序列;
字节码指令转换子单元,用于依次将所述字节码指令序列包含的每个字节码指令的指令逻辑转换为机器码指令的指令逻辑,得到所述方法体的机器码序列。
在本申请实施例的一种实现方式中,所述执行智能合约的装置还可以包括:
字节码存储模块,用于将所述字节码存储至区块链账本;
机器码存储模块,用于将所述机器码存储至缓存和/或数据库。
进一步的,所述机器码执行模块可以包括:
第一执行单元,用于若所述缓存中存在所述机器码,则从所述缓存中读取并执行所述机器码;
第二执行单元,用于若所述缓存中不存在所述机器码,且所述数据库中存在所述机器码,则从所述数据库中读取并执行所述机器码。
更进一步的,所述机器码执行模块还可以包括:
第三执行单元,用于若所述数据库中不存在所述机器码,则从所述区块链账本中读取并执行所述字节码。
在本申请实施例的一种实现方式中,所述字节码获取模块可以包括:
字节码获取单元,用于当部署所述智能合约或者首次调用所述智能合约时,获取所述智能合约的字节码。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例所描述的执行智能合约的方法。
本申请实施例还提供一种计算机程序产品,当该计算机程序产品在电子设备上运行时,使得电子设备执行如上述任一实施例所描述的执行智能合约的方法。
图6是本申请一实施例提供的电子设备的示意图。如图6所示,该实施例的电子设备6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62。所述处理器60执行所述计算机程序62时实现上述各个执行智能合约的方法的实施例中的步骤,例如图1所示的步骤101至103。或者,所述处理器60执行所述计算机程序62时实现上述各装置实施例中各模块/单元的功能,例如图5所示模块501至503的功能。
所述计算机程序62可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器61中,并由所述处理器60执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述电子设备6中的执行过程。
所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61可以是所述电子设备6的内部存储单元,例如电子设备6的硬盘或内存。所述存储器61也可以是所述电子设备6的外部存储设备,例如所述电子设备6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述电子设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机程序以及所述电子设备所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括是电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种执行智能合约的方法,其特征在于,包括:
获取智能合约的字节码;
将所述字节码直译为机器码,所述直译指将字节码的指令逻辑映射为机器码的指令逻辑;
执行所述机器码,得到所述智能合约的执行结果。
2.如权利要求1所述的方法,其特征在于,所述将所述字节码直译为机器码,包括:
对所述字节码进行解析,得到所述字节码包含的所有方法体;
针对每个所述方法体,将所述方法体包含的字节码指令转换为机器码指令,得到所述方法体的机器码序列。
3.如权利要求2所述的方法,其特征在于,所述将所述方法体包含的字节码指令转换为机器码指令,得到所述方法体的机器码序列,包括:
提取所述方法体包含的字节码指令序列;
依次将所述字节码指令序列包含的每个字节码指令的指令逻辑转换为机器码指令的指令逻辑,得到所述方法体的机器码序列。
4.如权利要求1所述的方法,其特征在于,在将所述字节码直译为机器码之后,还包括:
将所述字节码存储至区块链账本;
将所述机器码存储至缓存和/或数据库。
5.如权利要求4所述的方法,其特征在于,所述执行所述机器码,包括:
若所述缓存中存在所述机器码,则从所述缓存中读取并执行所述机器码;
若所述缓存中不存在所述机器码,且所述数据库中存在所述机器码,则从所述数据库中读取并执行所述机器码。
6.如权利要求5所述的方法,其特征在于,所述执行所述机器码,还包括:
若所述数据库中不存在所述机器码,则从所述区块链账本中读取并执行所述字节码。
7.如权利要求1至6任一项所述的方法,其特征在于,所述获取智能合约的字节码,包括:
当部署所述智能合约或者首次调用所述智能合约时,获取所述智能合约的字节码。
8.一种执行智能合约的装置,其特征在于,包括:
字节码获取模块,用于获取智能合约的字节码;
直译模块,用于将所述字节码直译为机器码,所述直译指将字节码的指令逻辑映射为机器码的指令逻辑;
机器码执行模块,用于执行所述机器码,得到所述智能合约的执行结果。
9.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的执行智能合约的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的执行智能合约的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557615.5A CN116107578A (zh) | 2022-12-06 | 2022-12-06 | 一种执行智能合约的方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557615.5A CN116107578A (zh) | 2022-12-06 | 2022-12-06 | 一种执行智能合约的方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116107578A true CN116107578A (zh) | 2023-05-12 |
Family
ID=86266581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211557615.5A Pending CN116107578A (zh) | 2022-12-06 | 2022-12-06 | 一种执行智能合约的方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107578A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093227A (zh) * | 2023-10-10 | 2023-11-21 | 杭州趣链科技有限公司 | 一种用于执行智能合约的方法及装置 |
CN118394351A (zh) * | 2024-07-01 | 2024-07-26 | 杭州高新区(滨江)区块链与数据安全研究院 | 智能合约的编译方法、装置、终端设备及存储介质 |
-
2022
- 2022-12-06 CN CN202211557615.5A patent/CN116107578A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093227A (zh) * | 2023-10-10 | 2023-11-21 | 杭州趣链科技有限公司 | 一种用于执行智能合约的方法及装置 |
CN117093227B (zh) * | 2023-10-10 | 2024-04-02 | 杭州趣链科技有限公司 | 一种用于执行智能合约的方法及装置 |
CN118394351A (zh) * | 2024-07-01 | 2024-07-26 | 杭州高新区(滨江)区块链与数据安全研究院 | 智能合约的编译方法、装置、终端设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116107578A (zh) | 一种执行智能合约的方法、装置、电子设备和存储介质 | |
US11720344B2 (en) | Code hot-update method and device, storage medium, processor, and terminal | |
CN110414261B (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
CN103853532B (zh) | 用于函数调用的方法和装置 | |
CN111767056B (zh) | 一种源码编译方法、可执行文件运行方法及终端设备 | |
CN106960140A (zh) | 虚拟机指令的混淆方法及装置、虚拟机保护系统 | |
CN102867144A (zh) | 一种用于检测和清除计算机病毒的方法和装置 | |
CN103077062A (zh) | 一种代码改动的检测方法和装置 | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
CN117873483A (zh) | 一种编译智能合约的方法、装置、电子设备和存储介质 | |
CN113190576B (zh) | 数据处理方法、装置、计算机设备和可读存储介质 | |
CN108920179A (zh) | Java反射实现方法、装置和系统 | |
CN117762423A (zh) | Java智能合约的编译方法、装置、存储介质以及电子设备 | |
CN117492707A (zh) | 编译执行Solidity合约的方法、装置、存储介质以及电子设备 | |
CN109324838B (zh) | 单片机程序的执行方法、执行装置及终端 | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
CN116775599A (zh) | 数据迁移方法、装置、电子设备、存储介质 | |
CN107817972B (zh) | 缓存代码处理方法、装置、存储介质及电子设备 | |
CN116226921A (zh) | 一种脱敏处理方法及装置 | |
CN115291839A (zh) | Java卡虚方法类型api的本地化方法、电子设备及介质 | |
CN114816436A (zh) | 一种基于反汇编的源码解析装置 | |
CN113296827A (zh) | 不同语言的转换方法、装置及终端设备 | |
CN111367937A (zh) | 一种数据处理方法和装置 | |
CN111857816A (zh) | 寄存器分配方法、装置、电子设备及计算机存储介质 | |
CN114579135B (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 |