预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共18页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN110704064A(43)申请公布日2020.01.17(21)申请号201910940201.2(22)申请日2019.09.30(71)申请人支付宝(杭州)信息技术有限公司地址310000浙江省杭州市西湖区西溪路556号8层B段801-11(72)发明人姚忠孝(74)专利代理机构北京亿腾知识产权代理事务所(普通合伙)11309代理人陈霁周良玉(51)Int.Cl.G06F8/41(2018.01)G06F9/455(2006.01)G06Q40/04(2012.01)权利要求书2页说明书11页附图4页(54)发明名称编译和执行智能合约的方法及装置(57)摘要本说明书实施例提供一种编译和执行智能合约的方法和装置,根据上述方法,在对智能合约进行编译而该智能合约依赖于外部函数时,不再将外部函数的实现代码纳入到合约中进行编译,而是将其转化为一条对该外部函数的调用指令,并将函数的声明信息添加到合约模块的导入区段中。如此生成的合约模块中仅包含外部函数的声明信息,而不包含该外部函数的实现代码。在执行该智能合约时,由虚拟机从本地的模块库中确定出用于实现该外部函数的字节码模块,进而获取到与该字节码模块对应的可执行代码块,并将该代码段与合约代码相链接,从而执行该外部函数。CN110704064ACN110704064A权利要求书1/2页1.一种执行智能合约的方法,通过虚拟机执行,该方法包括:获取智能合约对应的合约模块,所述合约模块包括代码区段和导入区段,所述导入区段中包括第一外部函数的函数声明信息;解析所述代码区段中的字节码,得到对所述第一外部函数的调用指令代码;根据所述第一外部函数的函数声明信息,从虚拟机本地的模块库中确定用于实现所述第一外部函数的字节码模块,并获取解析所述字节码模块得到的第一代码段;将所述调用指令代码链接到所述第一代码段,得到链接代码;执行所述链接代码,以执行所述智能合约中的所述第一外部函数。2.根据权利要求1所述的方法,还包括,在获取智能合约对应的合约模块之前:接收第一交易,所述第一交易的目标地址字段指向所述智能合约的合约地址,以请求调用所述智能合约。3.根据权利要求1所述的方法,其中,所述字节码模块为WASM模块。4.根据权利要求1所述的方法,还包括,根据所述第一外部函数的函数声明信息,确定所述第一外部函数为本地模块库中提供的函数。5.根据权利要求1所述的方法,其中,所述字节码模块为虚拟机中包含的原生合约的合约模块,所述第一外部函数为该原生合约的导出函数。6.根据权利要求1所述的方法,其中,获取解析所述字节码模块得到的第一代码段包括:加载并解析所述字节码模块中的字节码,得到所述第一代码段。7.根据权利要求1所述的方法,其中,获取解析所述字节码模块得到的第一代码段包括:从内存中获取已加载的、通过解析所述字节码模块中的字节码而生成的所述第一代码段。8.根据权利要求1所述的方法,其中,将所述调用指令代码链接到所述第一代码段,包括,将执行所述调用指令代码的地址指向存储所述第一代码段的内存地址。9.一种执行智能合约的装置,部署在虚拟机中,该装置包括:模块获取单元,配置为获取智能合约对应的合约模块,所述合约模块包括代码区段和导入区段,所述导入区段中包括第一外部函数的函数声明信息;解析单元,配置为解析所述代码区段中的字节码,得到对所述第一外部函数的调用指令代码;代码获取单元,配置为根据所述第一外部函数的函数声明信息,从虚拟机本地的模块库中确定用于实现所述第一外部函数的字节码模块,并获取解析所述字节码模块得到的第一代码段;链接单元,配置为将所述调用指令代码链接到所述第一代码段,得到链接代码;执行单元,配置为执行所述链接代码,以执行所述智能合约中的所述第一外部函数。10.根据权利要求9所述的装置,还包括接收单元,配置为:接收第一交易,所述第一交易的目标地址字段指向所述智能合约的合约地址,以请求调用所述智能合约。11.根据权利要求9所述的装置,其中,所述字节码模块为WASM模块。12.根据权利要求9所述的装置,还包括确定单元,配置为根据所述第一外部函数的函数声明信息,确定所述第一外部函数为本地模块库中提供的函数。2CN110704064A权利要求书2/2页13.根据权利要求9所述的装置,其中,所述字节码模块为虚拟机中包含的原生合约的合约模块,所述第一外部函数为该原生合约的导出函数。14.根据权利要求9所述的装置,其中,所述代码获取单元配置为:加载并解析所述字节码模块中的字节码,得到所述第一代码段。15.根据权利要求9所述的装置,其中,所述代码获取单元配置为:从内存中获取已加载的、通过解析所述字节码模块中的字节码而生成的所述第一代码段。16.根据权利要求9所述的