解释执行智能合约指令的方法及装置制造方法及图纸

技术编号:24852580 阅读:19 留言:0更新日期:2020-07-10 19:06
本说明书实施例提供一种解释执行智能合约指令的方法和装置,方法通过虚拟机执行,包括:首先确定有待执行的第一合约中第一指令的第一内存地址,所述第一内存地址位于第一内存区域,所述第一内存区域与第二内存区域存在映射关系,所述第二内存区域用于存储第一合约的经过扩容的字节码。如果该第一内存地址中存储的是用于执行第一指令的第一模拟函数信息,则根据该第一模拟函数信息执行第一指令;如果第一内存地址中存储的是预定初始值,则根据映射关系,从第二内存区域中读取第一指令对应的第一字节码片段,根据第一字节码片段确定第一模拟函数信息,将其填充在第一内存地址对应的存储空间中。

【技术实现步骤摘要】
解释执行智能合约指令的方法及装置
本说明书一个或多个实施例涉及计算机领域,尤其涉及解释执行智能合约指令的方法和装置。
技术介绍
虚拟机(VirtualMachine)是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。由于虚拟机可以隔离底层硬件平台以及操作系统对上层应用的影响,因此非常有利于上层应用的开发。上层应用开发过程中无需关注底层平台的细节,只需要关注具体的业务逻辑。开发完成后,由虚拟机运行上层应用,负责将应用的代码转换为适于底层平台执行的代码。具体地,在许多场景中,上层应用由开发人员使用高级语言编写开发,之后通过编译器编译为字节码(bytecode)。字节码是一种包含执行程序,由一序列op代码(操作码)/数据对组成的二进制文件,是一种中间码。然后,虚拟机中的解释器对字节码代表的指令流进行解释和执行。另一方面,目前越来越多的区块链平台开始支持智能合约,以进行更为丰富的交易。智能合约是一种计算机程序代码实现的、可以自动执行的交易合约,需要虚拟机来执行。相应的,在支持智能合约的区块链应用场景中,可以在区块链网络的每个节点中部署虚拟机。例如,在以太坊中,每个节点中部署有以太坊虚拟机EVM。用户可以用高级语言编写智能合约,然后经由编译器编译为字节码之后,将该字节码包含在创建智能合约的交易中,发布到区块链网络中,也就是部署到区块链网络的各个节点中。在需要执行智能合约时,由各个节点中的虚拟机EVM对该字节码进行解释执行。由于智能合约往往会在各个节点的各个虚拟机中多次频繁执行,虚拟机解释器对智能合约字节码的解释执行速度,对区块链平台的整体性能来说至关重要。因此,希望能有改进的方案,进一步提高智能合约指令的执行效率。
技术实现思路
本说明书一个或多个实施例描述了一种解释执行智能合约指令的方法和装置,根据在另外分配的内存区域中填充的用于执行指令的模拟函数信息来执行指令,从而加快字节码指令的执行效率。根据第一方面,提供了一种解释执行智能合约指令的方法,通过虚拟机的解释器执行,包括:确定有待执行的第一合约中第一指令的第一内存地址,所述第一内存地址位于第一内存区域,所述第一内存区域与第二内存区域存在特定映射关系,所述第二内存区域用于存储所述第一合约的经过扩容的字节码;如果所述第一内存地址中存储的是用于执行所述第一指令的第一模拟函数信息,则根据所述第一模拟函数信息执行该第一指令;如果所述第一内存地址中存储的是预定初始值,则根据所述线性映射关系,从所述第二内存区域中读取所述第一指令对应的第一字节码片段,根据所述第一字节码片段确定所述第一模拟函数信息,将其填充在所述第一内存地址对应的存储空间中。根据一种实施方式,在确定有待执行的第一合约中第一指令的第一内存地址之前,还包括:在所述第二内存区域加载所述第一合约的经过扩容的字节码;为所述第一合约分配与所述第二内存区域等容量的第一内存区域,并记录所述第一内存区域和所述第二内存区域之间的线性映射关系;对所述第一内存区域进行初始化,使得其中所有存储位置均存储所述预定初始值。进一步的,在一个实施例中,在所述第二内存区域加载所述第一合约的经过扩容的字节码具体包括:读取所述第一合约中的第一原始字节码;在所述第一原始字节码后添加冗余码,以对第一原始字节码进行存储空间扩容,使得扩容后的存储空间足以容纳所述第一原始字节码对应的模拟函数信息;修改指令地址索引,使得其中各个索引值指向添加冗余字节码后各条指令的起始存储位置;将针对所述第一合约中各原始字节码扩容后的存储空间,作为所述第二内存区域。在另一实施例中,在所述第二内存区域加载所述第一合约的经过扩容的字节码,具体包括:读取所述第一合约中的第一扩容字节码,所述第一扩容字节码在所述第一合约编译阶段生成,所述第一扩容字节码包括第一原始字节码和冗余码,所述第一扩容字节码占用的存储空间足以容纳所述第一原始字节码对应的模拟函数信息;将所述第一扩容字节码填充到为其分配的存储空间;将存储所述第一合约中各扩容字节码的存储空间,作为所述第二内存区域。在一个实施例中,第一模拟函数信息可以是,存储第一模拟函数的可执行代码的第三内存地址,其中所述第一模拟函数用于执行所述第一指令;在这样的情况下,根据所述第一模拟函数信息执行该第一指令,具体包括:跳转到所述第三内存地址,以执行所述第一模拟函数。在一个例子中,上述预定初始值为,无效的地址值。在另一实施例中,第一模拟函数信息可以是,指向第一模拟函数的跳转指令,所述第一模拟函数为用于执行所述第一指令的模拟函数;在这样的情况下,根据所述第一模拟函数信息执行该第一指令,具体包括:执行所述跳转指令,从而跳转到所述第一模拟函数进行执行。在另一例子中,上述预定初始值为,系统异常指令。根据一种实施方式,可通过以下方式,将第一模拟函数信息填充在所述第一内存地址对应的存储空间中:根据所述线性映射关系,确定所述第二内存区域中与所述第一内存地址对应的第二内存地址;从所述第二内存地址读取所述第一字节码片段,该第一字节码片段包括第一操作码;查询操作码-模拟函数映射表,确定与所述第一操作码对应的第一模拟函数,得到所述第一模拟函数信息;将所述第一模拟函数信息填充在所述第一内存地址对应的存储空间中。进一步的,在一个实施例中,上述第一字节码片段还包括第一操作数;在这样的情况下,可以将所述第一操作数复制到所述存储空间中。根据一个实施例,在查询所述映射表时,可以首先在CPU中的高速缓存中查询所述映射表,若不命中,则在内存中查询所述映射表。根据第二方面,提供了一种解释执行智能合约指令的装置,部署在虚拟机中,包括:地址确定单元,配置为确定有待执行的第一合约中第一指令的第一内存地址,所述第一内存地址位于第一内存区域,所述第一内存区域与第二内存区域存在特定映射关系,所述第二内存区域用于存储所述第一合约的经过扩容的字节码;执行单元,配置为如果所述第一内存地址中存储的是用于执行所述第一指令的第一模拟函数信息,则根据所述第一模拟函数信息执行该第一指令;填充单元,配置为如果所述第一内存地址中存储的是预定初始值,则根据所述线性映射关系,从所述第二内存区域中读取所述第一指令对应的第一字节码片段,根据所述第一字节码片段确定所述第一模拟函数信息,将其填充在所述第一内存地址对应的存储空间中。。根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。根据本说明书实施例提供的方法和装置,在执行智能合约的指令时,如果在针对该合约另外分配的内存区域中已经存储该指令对应的模拟函数信息,则可以直接根据模拟函数信息执行指令;如果没有存储,则查表确定出对应的模拟函数信息,将其填充到上述内存区域。如此,当以后再一本文档来自技高网
...

【技术保护点】
1.一种解释执行智能合约指令的方法,通过虚拟机的解释器执行,包括:/n确定有待执行的第一合约中第一指令的第一内存地址,所述第一内存地址位于第一内存区域,所述第一内存区域与第二内存区域存在特定映射关系,所述第二内存区域用于存储所述第一合约的经过扩容的字节码;/n如果所述第一内存地址中存储的是用于执行所述第一指令的第一模拟函数信息,则根据所述第一模拟函数信息执行该第一指令;/n如果所述第一内存地址中存储的是预定初始值,则执行转换逻辑,所述转换逻辑包括,根据所述特定映射关系,从所述第二内存区域中读取所述第一指令对应的第一字节码片段,根据所述第一字节码片段确定所述第一模拟函数信息,将其填充在所述第一内存地址对应的存储空间中。/n

【技术特征摘要】
1.一种解释执行智能合约指令的方法,通过虚拟机的解释器执行,包括:
确定有待执行的第一合约中第一指令的第一内存地址,所述第一内存地址位于第一内存区域,所述第一内存区域与第二内存区域存在特定映射关系,所述第二内存区域用于存储所述第一合约的经过扩容的字节码;
如果所述第一内存地址中存储的是用于执行所述第一指令的第一模拟函数信息,则根据所述第一模拟函数信息执行该第一指令;
如果所述第一内存地址中存储的是预定初始值,则执行转换逻辑,所述转换逻辑包括,根据所述特定映射关系,从所述第二内存区域中读取所述第一指令对应的第一字节码片段,根据所述第一字节码片段确定所述第一模拟函数信息,将其填充在所述第一内存地址对应的存储空间中。


2.根据权利要求1所述的方法,在确定有待执行的第一合约中第一指令的第一内存地址之前,还包括:
在所述第二内存区域加载所述第一合约的经过扩容的字节码;
为所述第一合约分配与所述第二内存区域等容量的第一内存区域,并记录所述第一内存区域和所述第二内存区域之间的映射关系作为所述特定映射关系;
对所述第一内存区域进行初始化,使得其中所有存储位置均存储所述预定初始值。


3.根据权利要求2所述的方法,其中,在所述第二内存区域加载所述第一合约的经过扩容的字节码,包括:
读取所述第一合约中的第一原始字节码;
在所述第一原始字节码后添加冗余码,以对第一原始字节码进行存储空间扩容,使得扩容后的存储空间足以容纳所述第一原始字节码对应的模拟函数信息;
修改指令地址索引,使得其中各个索引值指向添加冗余字节码后各条指令的起始存储位置;
将针对所述第一合约中各原始字节码扩容后的存储空间,作为所述第二内存区域。


4.根据权利要求2所述的方法,其中,在所述第二内存区域加载所述第一合约的经过扩容的字节码,包括:
读取所述第一合约中的第一扩容字节码,所述第一扩容字节码在所述第一合约编译阶段生成,所述第一扩容字节码包括第一原始字节码和冗余码,所述第一扩容字节码占用的存储空间足以容纳所述第一原始字节码对应的模拟函数信息;
将所述第一扩容字节码填充到为其分配的存储空间;
将存储所述第一合约中各扩容字节码的存储空间,作为所述第二内存区域。


5.根据权利要求1所述的方法,其中,所述第一模拟函数信息为,存储第一模拟函数的可执行代码的第三内存地址,其中所述第一模拟函数用于执行所述第一指令;
根据所述第一模拟函数信息执行该第一指令,包括:跳转到所述第三内存地址,以执行所述第一模拟函数。


6.根据权利要求5所述的方法,其中,所述预定初始值为,无效的地址值。


7.根据权利要求1所述的方法,其中,所述第一模拟函数信息为,指向第一模拟函数的跳转指令,所述第一模拟函数为用于执行所述第一指令的模拟函数;
根据所述第一模拟函数信息执行该第一指令,包括:执行所述跳转指令,从而跳转到所述第一模拟函数进行执行。


8.根据权利要求7所述的方法,其中,所述预定初始值为,系统异常指令,且所述系统异常指令导致所述转换逻辑的执行。


9.根据权利要求1所述的方法,其中,从所述第二内存区域中读取所述第一指令对应的第一字节码片段,根据所述第一字节码片段确定所述第一模拟函数信息,将其填充在所述第一内存地址对应的存储空间中,具体包括:
根据所述特定映射关系,确定所述第二内存区域中与所述第一内存地址对应的第二内存地址;
从所述第二内存地址读取所述第一字节码片段,该第一字节码片段包括第一操作码;
查询操作码-模拟函数映射表,确定与所述第一操作码对应的第一模拟函数,得到所述第一模拟函数信息;
将所述第一模拟函数信息填充在所述第一内存地址对应的存储空间中。


10.根据权利要求9所述的方法,其中,所述第一字节码片段还包括第一操作数;
在将所述第一模拟函数信息填充在所述第一内存地址对应的存储空间中之后,还包括,将所述第一操作数复制到所述存储空间中。


11.根据权利要求9所述的方法,其中,所述特定映射关系为,具有一定地址偏移量的线性映射关系;
根据所述特定映射关系,确定所述第二内存区域中与所述第一内存地址对应的第二内存地址,包括:基于所述第一内存地址加上或减去所述地址偏移量,得到所述第二内存地址。


12.一种解释执行智能合约指令的装置,部...

【专利技术属性】
技术研发人员:刘晓建
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

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

1