缓存和执行智能合约的方法和装置制造方法及图纸

技术编号:23890046 阅读:48 留言:0更新日期:2020-04-22 06:05
本说明书实施例提供了一种智能合约缓存方法和装置,所述方法由区块链节点的虚拟机执行第一交易时执行,所述第一交易用于调用第一合约的第一函数,所述方法包括:确定内存中是否缓存有所述第一合约的WASM指令序列;在确定内存中缓存了所述第一合约的WASM指令序列的情况中,从内存中读取所述第一合约的WASM指令序列,以获取所述第一函数的WASM指令序列;基于所述第一交易中的数据字段解释执行所述第一函数的WASM指令序列。

【技术实现步骤摘要】
缓存和执行智能合约的方法和装置
本说明书一个或多个实施例涉及区块链
,更具体地,涉及在区块链中缓存和执行智能合约的方法和装置。
技术介绍
虚拟机(VirtualMachine)是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。由于虚拟机可以隔离底层硬件平台以及操作系统对上层应用的影响,因此非常有利于上层应用的开发。上层应用开发过程中无需关注底层平台的细节,只需要关注具体的业务逻辑。开发完成后,由虚拟机运行上层应用,负责将应用的代码转换为适于底层平台执行的代码。具体地,在许多场景中,上层应用由开发人员使用高级语言编写开发,之后通过编译器编译为字节码(bytecode)。字节码是一种执行程序,由一序列操作码(op码)-数据对组成的二进制文件,是一种中间码。然后,虚拟机中的解释器对字节码代表的指令流进行解释和执行。例如,在支持智能合约的区块链应用场景中,可以在区块链网络的每个节点中部署虚拟机。用户可以用高级语言编写智能合约,然后经由编译器编译为字节码之后,将该字节码包含在创建智能合约的交易中,发布到区块链本文档来自技高网...

【技术保护点】
1.一种智能合约执行方法,所述方法由区块链节点的虚拟机执行第一交易时执行,所述第一交易用于调用第一合约的第一函数,所述方法包括:/n确定内存中是否缓存有所述第一合约的WASM指令序列;/n在确定内存中缓存了所述第一合约的WASM指令序列的情况中,从内存中读取所述第一合约的WASM指令序列,以获取所述第一函数的WASM指令序列;/n基于所述第一交易中的数据字段解释执行所述第一函数的WASM指令序列。/n

【技术特征摘要】
1.一种智能合约执行方法,所述方法由区块链节点的虚拟机执行第一交易时执行,所述第一交易用于调用第一合约的第一函数,所述方法包括:
确定内存中是否缓存有所述第一合约的WASM指令序列;
在确定内存中缓存了所述第一合约的WASM指令序列的情况中,从内存中读取所述第一合约的WASM指令序列,以获取所述第一函数的WASM指令序列;
基于所述第一交易中的数据字段解释执行所述第一函数的WASM指令序列。


2.根据权利要求1所述的方法,还包括,
在确定内存中没有缓存所述第一合约的WASM指令序列的情况中,从所述节点本地存储介质中读取第一合约的指令序列,以获取所述第一合约的WASM指令序列;
将所述第一合约的WASM指令序列与所述第一合约的标识关联地缓存到内存中。


3.根据权利要求2所述的方法,其中,从所述节点本地存储介质中读取第一合约的指令序列,以获取所述第一合约的WASM指令序列包括,从节点本地存储介质中读取第一合约的经可变长编码的指令序列,通过对第一合约的经可变长编码的指令序列进行解码,获取所述第一合约的WASM指令序列。


4.根据权利要求2所述的方法,还包括,在获取第一合约的WASM指令序列之后,对第一合约的WASM指令序列进行预处理,以获取第一合约的经预处理的WASM指令序列,其中,将所述第一合约的WASM指令序列与所述第一合约的标识关联地缓存到内存中包括,将所述第一合约的经预处理的WASM指令序列与所述第一合约的标识关联地缓存到内存中。


5.根据权利要求4所述的方法,其中,对第一合约的WASM指令序列进行预处理包括,
基于所述第一合约的WASM指令序列确定全局变量标识范围;
对于所述第一合约的WASM指令序列中的每个指令,解析该指令是否为全局变量访问指令;
在解析出所述指令为全局变量访问指令的情况中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内;
在检查所述第一合约的各个全局变量访问指令中包括的全局变量标识都在所述全局变量标识范围内的情况中,获取所述第一合约的经全局变量越界检查的WASM指令序列。


6.根据权利要求4所述的方法,其中,对第一合约的WASM指令序列进行预处理包括,
确定所述WASM指令序列中是否包括预定连续指令,所述预定连续指令被预设有相应的合并指令,并且所述预定连续指令与其对应的合并指令具有相同的解释执行结果;
在确定所述指令序列中包括至少一组预定连续指令的情况中,将所述指令序列中的各组预定连续指令分别合并为对应的合并指令,从而获取所述第一合约的经指令融合的WASM指令序列。


7.根据权利要求2所述的方法,还包括,在将所述第一合约的WASM指令序列与所述第一合约的标识关联地缓存到内存中之后,基于所述第一交易中的数据字段解释执行所述第一函数的WASM指令序列。


8.根据权利要求2所述的方法,其中,将所述第一合约的WASM指令序列与第一合约的标识关联地缓存到内存中包括,将所述第一合约的WASM指令序列在内存中的存储地址与第一合约的合约地址的哈希值关联地存储到内存中。


9.一种智能合约执行方法,所述方法由区块链节点的虚拟机执行第一交易时执行,所述第一交易用于调用第一合约的第一函数,所述方法包括:
确定内存中是否缓存有所述第一函数的WASM指令序列;
在确定内存中缓存了所述第一函数的WASM指令序列的情况中,从内存中读取所述第一函数的WASM指令序列;
基于所述第一交易中的数据字段解释执行所述第一函数的WASM指令序列。


10.根据权利要求9所述的方法,还包括,
在确定内存中没有缓存所述第一函数的WASM指令序列的情况中,
从所述节点本地存储介质中读取所述第一合约的指令序列,以获取所述第一函数的WASM指令序列;
将所述第一函数的WASM指令序列与所述第一函数的标识关联地缓存到内存中。


11.根据权利要求10所述的方法,其中,将所述第一函数的WASM指令序列与所述第一函数的标识关联地缓存到内存中包括,将所述第一函数的WASM指令序列在内存中的存储地址与第一数据的哈希值关联地存储到内存中,其中,所述第一数据基于第一合约的合约地址和第一函数的名称获取。


12.一种智能合约执行装置,所述装置在区块链节点的虚拟机执行第一交易时部署,所述第一交易用于调用第一合约的第一函数,所述装置包括:
确定单元,配置为,确定内存中是否缓存有所述第一合约的WASM指令序列;

【专利技术属性】
技术研发人员:郭学鹏姚忠孝李东威林志平
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

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

1