本申请涉及区块链,尤其涉及一种编译智能合约的方法、装置、电子设备和存储介质。
背景技术:
1、在区块链技术领域,为了加速执行智能合约,通常可以采用aot(ahead of timecompilation,预先编译)线性编译的方式,预先将智能合约的字节码按顺序地编译为机器码,然后直接调用机器码执行。然而,在采用aot线性编译的基础上,如何进一步提高智能合约的执行效率,成为本领域技术人员需要考虑的技术问题。
技术实现思路
1、有鉴于此,本申请实施例提供了一种编译智能合约的方法、装置、电子设备和存储介质,能够在采用aot线性编译的基础上,进一步提高智能合约的执行效率。
2、本申请实施例的第一方面提供了一种编译智能合约的方法,包括:
3、获取智能合约的字节码序列;
4、对字节码序列进行解析,得到对应的中间表示ir序列;
5、将ir序列编译为使用寄存器的汇编代码序列;
6、将汇编代码序列转换为对应的机器码序列。
7、在本申请实施例中,首先对智能合约的字节码序列进行解析得到对应的ir序列,然后将ir序列编译为对应的汇编代码序列,最后将汇编代码序列转换为对应的机器码序列。在将ir序列编译为对应的汇编代码序列的过程中,会将ir序列尽量编译为使用寄存器的汇编代码序列。由于cpu访问寄存器的速度要比访问内存的速度快很多,因此这样获得的汇编代码序列具有更高的执行效率,进而通过该汇编代码序列转换得到的机器码序列也具有更高的执行效率,最终实现了在采用aot线性编译的基础上,进一步提高智能合约的执行效率。
8、在本申请实施例的一种实现方式中,将ir序列编译为使用寄存器的汇编代码序列,包括:
9、针对ir序列中包含的任一ir单元,将该任一ir单元编译为使用目标寄存器的汇编代码,并将目标寄存器的标识写入栈结构;其中,该任一ir单元的数据操作结果存储于目标寄存器中;
10、在对ir序列中包含的需要使用数据操作结果的下一ir单元进行编译时,从栈结构中读取标识,根据标识查找到目标寄存器,并从目标寄存器中读取数据操作结果。
11、在本申请实施例的一种实现方式中,目标寄存器通过以下方式确定:
12、根据当前的机器架构,确定所有的通用寄存器;
13、从所有的通用寄存器中,选取可用的任一通用寄存器作为目标寄存器。
14、在本申请实施例的一种实现方式中,从所有的通用寄存器中,选取可用的任一通用寄存器作为目标寄存器,包括:
15、从预设的map数据结构中,查找所有的通用寄存器中被标记为未使用的候选寄存器;其中,map数据结构标记所有的通用寄存器中的每个寄存器的使用状态;
16、从候选寄存器中,选取目标寄存器。
17、在本申请实施例的一种实现方式中,在从候选寄存器中,选取目标寄存器之后,还包括:
18、在map数据结构中将目标寄存器标记为已使用;
19、在从目标寄存器中读取数据操作结果之后,还包括:
20、在map数据结构中将目标寄存器标记为未使用。
21、在本申请实施例的一种实现方式中,将该任一ir单元编译为使用目标寄存器的汇编代码,具体为:
22、在存在可用的通用寄存器的情况下,将该任一ir单元编译为使用目标寄存器的汇编代码;其中,目标寄存器为可用的通用寄存器中的任一寄存器;
23、该方法还包括:
24、在不存在可用的通用寄存器的情况下,将该任一ir单元编译为使用内存的汇编代码。
25、在本申请实施例的一种实现方式中,将ir序列编译为使用寄存器的汇编代码序列,包括:
26、根据当前的机器架构,初始化对应的编译实例;
27、通过编译实例,将ir序列中包含的每个ir单元分别编译为使用寄存器的汇编代码,得到汇编代码序列。
28、本申请实施例的第二方面提供了一种编译智能合约的装置,包括:
29、字节码获取模块,用于获取智能合约的字节码序列;
30、字节码解析模块,用于对字节码序列进行解析,得到对应的中间表示ir序列;
31、编译模块,用于将ir序列编译为使用寄存器的汇编代码序列;
32、转换模块,用于将汇编代码序列转换为对应的机器码序列。
33、本申请实施例的第三方面提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例的第一方面提供的编译智能合约的方法。
34、本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本申请实施例的第一方面提供的编译智能合约的方法。
35、本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行如本申请实施例的第一方面提供的编译智能合约的方法。
36、可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
1.一种编译智能合约的方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述将所述ir序列编译为使用寄存器的汇编代码序列,包括:
3.如权利要求2所述的方法,其特征在于,所述目标寄存器通过以下方式确定:
4.如权利要求3所述的方法,其特征在于,所述从所述所有的通用寄存器中,选取可用的任一通用寄存器作为所述目标寄存器,包括:
5.如权利要求4所述的方法,其特征在于,在所述从所述候选寄存器中,选取所述目标寄存器之后,还包括:
6.如权利要求2所述的方法,其特征在于,所述将所述任一ir单元编译为使用目标寄存器的汇编代码,具体为:
7.如权利要求1至6任一项所述的方法,其特征在于,所述将所述ir序列编译为使用寄存器的汇编代码序列,包括:
8.一种编译智能合约的装置,其特征在于,包括:
9.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的编译智能合约的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的编译智能合约的方法。