[发明专利]编译和执行智能合约的方法及装置有效
申请号: | 201910939504.2 | 申请日: | 2019-09-30 |
公开(公告)号: | CN110688122B | 公开(公告)日: | 2021-09-21 |
发明(设计)人: | 姚忠孝 | 申请(专利权)人: | 支付宝(杭州)信息技术有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F9/455;G06Q40/04 |
代理公司: | 北京亿腾知识产权代理事务所(普通合伙) 11309 | 代理人: | 陈霁;周良玉 |
地址: | 310000 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 编译 执行 智能 合约 方法 装置 | ||
1.一种编译智能合约的方法,通过编译器执行,该方法包括:
读取智能合约的源代码中的第一语句,其中该第一语句包括对第一外部函数的调用;
根据与所述第一外部函数对应的函数库,确定所述第一外部函数是否为预定类型函数,所述预定类型函数为执行所述智能合约的虚拟机侧提供的共享函数库中的函数,其实现代码由虚拟机提供或获取;
当所述第一外部函数为预定类型函数时,针对所述第一语句,生成对所述第一外部函数的调用指令,并将该调用指令转换为对应的字节码;
将所述调用指令对应的字节码包含在有待形成的合约模块的代码区段中,并将所述第一外部函数的函数声明信息包含在所述合约模块的导入区段中。
2.根据权利要求1所述的方法,其中,所述函数库为系统函数库或第三方函数库。
3.根据权利要求1所述的方法,其中,根据与所述第一外部函数对应的函数库,确定所述第一外部函数是否为预定类型函数,包括:
通过函数名在所述函数库中查询所述第一外部函数;
当所述函数库中针对所述第一外部函数标记有用于指示所述预定类型函数的预定标记时,确定所述第一外部函数为所述预定类型函数。
4.根据权利要求1所述的方法,其中,根据与所述第一外部函数对应的函数库,确定所述第一外部函数是否为预定类型函数,包括:
通过函数名在所述函数库中查询所述第一外部函数;
当所述函数库中针对所述第一外部函数仅记录有函数声明而不包含函数的实现代码时,确定所述第一外部函数为所述预定类型函数。
5.根据权利要求1所述的方法,其中,根据与所述第一外部函数对应的函数库,确定所述第一外部函数是否为预定类型函数,包括:
当确定所述函数库为专用于定义所述预定类型函数的函数库时,确定所述第一外部函数为预定类型函数。
6.根据权利要求1所述的方法,其中,针对所述第一语句,生成对所述第一外部函数的调用指令,包括:
从所述函数库查询获得所述第一外部函数的函数声明信息,所述函数声明信息包括参数类型、参数个数、返回类型中的至少一项;
核查所述第一语句中对所述第一外部函数的调用是否与所述函数声明信息相匹配;
在匹配的情况下,生成对所述第一外部函数的调用指令。
7.根据权利要求1所述的方法,其中,所述合约模块为WASM模块。
8.一种执行智能合约的方法,通过虚拟机执行,该方法包括:
获取智能合约对应的合约模块,所述合约模块包括代码区段和导入区段,所述导入区段中包括第一外部函数的函数声明信息;
解析所述代码区段的字节码,得到对所述第一外部函数的调用指令代码;
根据所述函数声明信息,从虚拟机所在平台的操作系统函数库中获取第一代码段,所述第一代码段包括用于实现所述第一外部函数的原生指令代码;
将所述调用指令代码链接到所述第一代码段,形成链接代码;
执行所述链接代码,以执行所述智能合约中的所述第一外部函数。
9.根据权利要求8所述的方法,其中,所述合约模块为WASM模块。
10.根据权利要求8所述的方法,还包括,根据所述第一外部函数的函数声明信息,确定所述第一外部函数为操作系统函数库中提供的函数。
11.根据权利要求8所述的方法,其中,将所述调用指令代码链接到所述第一代码段,包括,将执行所述调用指令代码的地址指向存储所述第一代码段的内存地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于支付宝(杭州)信息技术有限公司,未经支付宝(杭州)信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910939504.2/1.html,转载请声明来源钻瓜专利网。