[发明专利]基于Solidity智能合约的语法信息提取方法、设备和存储介质在审
申请号: | 202010297066.7 | 申请日: | 2020-04-15 |
公开(公告)号: | CN111538504A | 公开(公告)日: | 2020-08-14 |
发明(设计)人: | 李伟;张帅;蔡亮;匡立中;邱炜伟 | 申请(专利权)人: | 杭州趣链科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F16/27 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 310051 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 solidity 智能 合约 语法 信息 提取 方法 设备 存储 介质 | ||
1.一种基于Solidity智能合约的语法信息提取方法,其特征在于,包括:
调用第一索引算法构建当前语法节点对应的第一业务类同时在当前节点的父节点的第二业务类中保存当前语法节点的语法信息的索引关系;重复执行上述调用步骤为子节点建立对应语法业务类,直到出现叶子语法节点,其中,第一业务类的构建参数包括所述当前语法节点的语法信息和所述第二语法业务类;
调用语法填充算法填充当前第一业务类的语法信息,同时完成变量的类型追溯和确定变量的作用域;调用下一层语法节点业务类以进行下一层业务类对应的语法信息的填充,直到所有业务类全部填充完成;
对合约的继承顺序排序以获取每个合约的继承线信息从而准确实现合约中各表达式类型的追溯。
2.根据权利要求1所述的方法,其特征在于,调用第一索引算法构建当前语法节点对应的第一业务类包括:
判断当前语法节点是否有子语法节点:
是,则根据当前语法节点信息和所述第二语业务类构建所述第一业务类。
3.根据权利要求1或2所述的方法,其特征在于,所述调用第一索引算法和调用语法填充算法的对应操作均从语法树的根节点采用递归的方式执行。
4.根据权利要求3所述的方法,其特征在于,所述同时完成变量的类型追溯和确定变量的作用域包括:
判断当前语法节点中是否含有变量定义的语法节点:是,则从当前语法节点向上遍历以获取所述变量的类型信息;
将当前语法节点业务类的父语法节点业务类的第一变量类型表复制存储为当前语法节点的第二变量类型表,并根据所述第二变量类型表更新当前语法节点的所包含的变量定义类型。
5.根据权利要求4所述的方法,其特征在于,所述调用语法填充算法填充当前第一业务类的语法信息包括以下至少一项:如编译版本、合约导入、合约定义、枚举定义、结构体定义、函数定义、库定义、修饰器定义、变量名、变量可见性、代码块、代码语句、表达式。
6.根据权利要求4或5所述的方法,其特征在于:所述对合约的继承顺序排序以获取每个合约的继承线信息从而准确实现合约中各表达式类型的追溯包括:
根据调用语法填充算法填充的合约定义信息获得每个合约的直接继承信息,即当前合约直接继承哪些合约,在合约的inheritanceSpecifier中指定,最后获得每个合约继承的所有合约信息;
在进行表达式追溯时,如果当前表达式节点包含下一层语法节点,根据确定其子表达式节点信息,并根据运算的结果来确定当前表达式的类型信息;
则根据索引关系调用新建好的子语法节点的表达式类型追溯的方法,使当前表达式业务类递归填充下一层表达式类型信息直到确定合约中的所有表达式都得到具体的类型。
7.根据权利要求6所述的方法,其特征在于,应用Solidity合约多继承机制遵循的C3继承法,使用MRO算法对合约的继承顺序进行排序,获得合约的继承线信息。
8.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1-7中任一项所述的方法。
9.一种存储有计算机程序的存储介质,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州趣链科技有限公司,未经杭州趣链科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010297066.7/1.html,转载请声明来源钻瓜专利网。