[发明专利]一种适用于组合交易的智能合约形式化验证方法及系统有效
申请号: | 202210029440.4 | 申请日: | 2022-01-12 |
公开(公告)号: | CN114047928B | 公开(公告)日: | 2022-03-15 |
发明(设计)人: | 陈钟;关志;李青山;董宇;李悦;崔冬琪;陈子明 | 申请(专利权)人: | 北京大学;博雅正链(北京)科技有限公司 |
主分类号: | G06F8/51 | 分类号: | G06F8/51;G06Q20/38;G06Q40/04 |
代理公司: | 北京万象新悦知识产权代理有限公司 11360 | 代理人: | 黄凤茹 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 适用于 组合 交易 智能 合约 形式化 验证 方法 系统 | ||
1.一种适用于组合交易的智能合约形式化验证方法,组合交易是指场景中包含多笔交易或者一笔交易涉及多个合约的情形;其特征是,将需要验证的功能语义插入到智能合约中,基于以太坊智能合约源代码添加合约约束,包括组合交易场景中的跨函数和跨合约约束,再将添加合约约束后的源代码转换为中间验证语言中相对应的类型、语句、表达式和约束,通过验证器自动地对中间验证语言文件进行形式化验证;包括如下步骤:
1)基于以太坊智能合约的Solidity源代码添加合约约束,用来表示以太坊智能合约需要满足的功能属性;添加的合约约束包括:合约层的不变量约束;函数层的pre条件约束和post条件约束;循环不变量约束;数组或映射的总和;还包括组合交易场景中的跨函数约束和跨合约约束;
所述跨函数约束即多笔交易场景下对函数关系的约束;设计函数先后次序的约束形式和函数互斥关系的约束形式,并添加在合约的开头;
在跨合约场景下包含多个合约,所述跨合约约束即多个合约场景下的约束,可包括合约层的不变量约束、函数层的pre/post条件约束、跨函数约束;在其中一个合约中添加其他合约的函数约束或状态变量约束;
2)将添加合约约束后的Solidity源代码生成抽象语法树AST,遍历AST,将Solidity语法中的类型、语句、表达式和合约约束均转换为中间验证语言的语法中相对应的类型、语句、表达式和约束,对跨函数约束和跨合约约束进行特殊转换;其中,
2a)对于跨函数约束的转换,则在转换后的中间语言代码中增加两个procedure;具体包括:
2aa)设函数A与函数B有先后次序关系,函数A为先执行的函数,函数B为后执行的函数;即函数B的precondition包含函数A修改的状态变量;则转换后新增的一个procedure只调用函数B,另一个procedure按照执行关系进行调用,即调用A后再调用B;只有调用函数A后才能满足函数B的约束;
2ab)设函数A与函数B有互斥关系,函数A修改某个状态变量,函数B依赖该状态变量修改前的状态;则转换后新增的一个procedure同时调用函数A和B,另一个procedure只调用函数A或函数B;
2b)对于跨合约约束的转换,即在一个合约中增加对另一个合约的约束条件,之后调用另一个合约的函数时,需检验该函数是否满足约束的功能属性;实现方式为:识别定位另一个合约及其状态变量与函数,修改约束表达式,将约束插入到另一个合约的被调用函数的相应位置上;具体包括:
根据另一个合约的合约名定位到合约;再根据变量名或函数名,定位到具体的变量或函数,替换原约束中的跨合约变量或跨合约函数;替换之后,将该约束插入到第三方合约的对应位置上,即插入到被调用函数的约束中;如果是合约层的约束,则插入到被调用函数的约束中,使得进入函数和出函数时均满足该约束;如果是函数层的pre/post约束,则直接插入到被调用函数的约束中,pre/post属性保持不变;
3)将转换后的带有约束规范的中间验证语言代码保存到文件中;
4)对中间验证语言代码进行形式化,生成验证条件文件;
5)将验证条件文件输入到验证器中;验证器自动地对输入文件进行形式化验证,得出验证结果,并解析为可读结果,将结果返回给用户;
通过上述步骤,实现适用于组合交易的智能合约形式化验证。
2.如权利要求1所述适用于组合交易的智能合约形式化验证方法,其特征是,场景包含多笔交易是由合约调用者操纵的交易序列,对一个合约的不同函数按次序发起调用;场景涉及多个合约是由合约编写者编写的交易序列,一个合约对另一个合约中的函数发起调用。
3.如权利要求1所述适用于组合交易的智能合约形式化验证方法,其特征是,步骤1)中,所述跨函数约束中先后次序的约束形式表示为:
所述跨函数约束中互斥关系的约束形式表示为:
所述跨合约约束中的约束的书写形式与位置与合约自身的约束书写形式与位置相同,调用另一个合约的状态变量或者函数使用’.’的形式,’.’的左边是其他合约的合约名,右边是其他合约中的状态变量名与函数名。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学;博雅正链(北京)科技有限公司,未经北京大学;博雅正链(北京)科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210029440.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:电能计量方法、装置及电能表
- 下一篇:掩模层的重工方法及氮化硅蚀刻方法