【技术实现步骤摘要】
解释执行智能合约指令的方法及装置
本说明书一个或多个实施例涉及计算机领域,尤其涉及解释执行智能合约指令的方法和装置。
技术介绍
虚拟机(VirtualMachine)是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。由于虚拟机可以隔离底层硬件平台以及操作系统对上层应用的影响,因此非常有利于上层应用的开发。上层应用开发过程中无需关注底层平台的细节,只需要关注具体的业务逻辑。开发完成后,由虚拟机运行上层应用,负责将应用的代码转换为适于底层平台执行的代码。具体地,在许多场景中,上层应用由开发人员使用高级语言编写开发,之后通过编译器编译为字节码(bytecode)。字节码是一种包含执行程序,由一序列op代码(操作码)/数据对组成的二进制文件,是一种中间码。然后,虚拟机中的解释器对字节码代表的指令流进行解释和执行。另一方面,目前越来越多的区块链平台开始支持智能合约,以进行更为丰富的交易。智能合约是一种计算机程序代码实现的、可以自动执行的交易合约,需要虚拟机来执行。相应的,在支持智能合约的区块链应用场景中,可以在区块链网络的每个节点中部署虚拟机。例如,在以太坊中,每个节点中部署有以太坊虚拟机EVM。用户可以用高级语言编写智能合约,然后经由编译器编译为字节码之后,将该字节码包含在创建智能合约的交易中,发布到区块链网络中,也就是部署到区块链网络的各个节点中。在需要执行智能合约时,由各个节点中的虚拟机EVM对该字节码进行解释执行。由于智能合约往往会在各个节点的各个虚拟机中多次频繁执行,虚 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。