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

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

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

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

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

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

(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN110688122A(43)申请公布日2020.01.14(21)申请号201910939504.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)权利要求书3页说明书11页附图5页(54)发明名称编译和执行智能合约的方法及装置(57)摘要本说明书实施例提供一种编译和执行智能合约的方法和装置,根据上述方法,在对智能合约进行编译而该智能合约依赖于外部函数时,不再将外部函数的实现代码纳入到合约中进行编译,而是将其转化为一条对该外部函数的调用指令,并将函数的声明信息添加到合约模块的导入区段中。如此生成的合约模块中仅包含外部函数的声明信息,而不包含该外部函数的实现代码。在执行该智能合约时,由虚拟机从本地的操作系统函数库中获取上述外部函数的实现代码,并将该实现代码与合约代码相链接,从而执行该外部函数。CN110688122ACN110688122A权利要求书1/3页1.一种编译智能合约的方法,通过编译器执行,该方法包括:读取智能合约的源代码中的第一语句,其中该第一语句包括对第一外部函数的调用;根据与所述第一外部函数对应的函数库,确定所述第一外部函数为预定类型函数,所述预定类型函数为在执行所述智能合约的虚拟机中实现的函数;针对所述第一语句,生成对所述第一外部函数的调用指令,并将该调用指令转换为对应的字节码;将所述调用指令对应的字节码包含在有待形成的合约模块的代码区段中,并将所述第一外部函数的函数声明信息包含在所述合约模块的导入区段中。2.根据权利要求1所述的方法,其中,所述函数库为系统函数库或第三方函数库。3.根据权利要求1所述的方法,其中,根据与所述第一外部函数对应的函数库,确定所述第一外部函数为预定类型函数,包括:通过函数名在所述函数库中查询所述第一外部函数;当所述函数库中针对所述第一外部函数标记有用于指示所述预定类型函数的预定标记时,确定所述第一外部函数为所述预定类型函数。4.根据权利要求1所述的方法,其中,根据与所述第一外部函数对应的函数库,确定所述第一外部函数为预定类型函数,包括:通过函数名在所述函数库中查询所述第一外部函数;当所述函数库中针对所述第一外部函数仅记录有函数声明而不包含函数的实现代码时,确定所述第一外部函数为所述预定类型函数。5.根据权利要求1所述的方法,其中,根据与所述第一外部函数对应的函数库,确定所述第一外部函数为预定类型函数,包括:当确定所述函数库为专用于定义所述预定类型函数的函数库时,确定所述第一外部函数为预定类型函数。6.根据权利要求1所述的方法,其中,针对所述第一语句,生成对所述第一外部函数的调用指令,包括:从所述函数库查询获得所述第一外部函数的函数声明信息,所述函数声明信息包括参数类型、参数个数、返回类型中的至少一项;核查所述第一语句中对所述第一外部函数的调用是否与所述函数声明信息相匹配;在匹配的情况下,生成对所述第一外部函数的调用指令。7.根据权利要求1所述的方法,其中,所述字节码模块为WASM模块。8.一种执行智能合约的方法,通过虚拟机执行,该方法包括:获取智能合约对应的合约模块,所述合约模块包括代码区段和导入区段,所述导入区段中包括第一外部函数的函数声明信息;解析所述代码区段的字节码,得到对所述第一外部函数的调用指令代码;根据所述函数声明信息,从虚拟机所在平台的操作系统函数库中获取第一代码段,所述第一代码段包括用于实现所述第一外部函数的原生指令代码;将所述调用指令代码链接到所述第一代码段,形成链接代码;执行所述链接代码,以执行所述智能合约中的所述第一外部函数。9.根据权利要求8所述的方法,其中,所述字节码模块为WASM模块。2CN110688122A权利要求书2/3页10.根据权利要求8所述的方法,还包括,根据所述第一外部函数的函数声明信息,确定所述第一外部函数为操作系统函数库中提供的函数。11.根据权利要求8所述的方法,其中,将所述调用指令代码链接到所述第一代码段,包括,将执行所述调用指令代码的地址指向存储所述第一代码段的内存地址。12.一种编译智能合约的装置,部署在编译器中,该装置包括:语句读取单元,配置为读取智能合约的源代码中的第一语句,其中该第一语句包括对第一外部函数的调用;确定单元,配置为根据与所述第一外部函数对应的函数库,确定所述第一外部函数为预定类型函数,所述预定类型函数为在执行所