【技术实现步骤摘要】
一种形式验证Solidity智能合约的方法
本专利技术涉及区块链技术、智能合约技术、形式验证、Solidity合约语言、Boogie模型语言、Z3定理证明器,尤其涉及形式验证Solidity智能合约的方法。
技术介绍
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。2008年由中本聪提出区块链的概念,在随后几年中,成为了电子货币比特币的核心组成部分。到2014年,区块链2.0成为关于去中心化区块链数据库的术语。作为第二代可编程区块链,它的主要特点是允许用户写出更精密和智能的协议,也就是所谓的智能合约。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约相对传统合约能自动执行原定协议,减少其他交易成本。但是由于区块链上的智能合约是所有用户都能看见的,并且一旦部署无法篡改,所以如果智能合约本身存在漏洞,那么就可能被人发现并进行攻击。这样的攻击往往难以迅速解决,例如著名的TheDao攻击造成了5000万美元的损失,当维护人员试图解决漏洞时黑客已经成功完成了资金回收。很明显,如何编写安全的智能合约已经成为区块链应用开发者关心的问题。传统的流程测试和静态检验确实是一种发现漏洞的有效手段,但它们只能查找漏洞,却无法证明没有漏洞。形式验证是一种从数学上完备地证明或验证某一模型是否实现了规范所述功能的方法,它可以成为保障智能合约安全的一个有效手段。形式验证可以对指定描述的所有可能的情况进行验证,借用数学上的方法将程序和规范直接进行比较,发现问题或证明没有问题。形式验证方法分为等价性验证、模型验证和定理证明等。但 ...
【技术保护点】
1.一种形式验证Solidity智能合约的方法,其特征在于,该方法具体包括如下步骤:S1:首先利用Anltr4语法设计Solidity Model Language规范,所述的规范包括SML语句规、SML函数规范和SML循环规范,SML语句规范以符号'//@'开头,后跟假设语句或断言语句;SML函数规范以符号'//@'开头,后跟规范体;或者以符号'/*@'开头,后跟规范体,最后以符号'*/'结尾;所述的规范体包括前置条件语句、后置条件语句、修改权限语句;SML循环规范以符号'//@'开头,后跟循环语句。所述的假设语句、断言语句、前置条件语句、后置条件语句、修改权限语句和循环语句都由相应语句的关键字和谓词组成。S2:按照S1所述的SML语法规范在Solidity智能合约中添加详细的注解规范。S3:如果智能合约开发者进行形式化验证的智能合约的目标文件依赖其他多个Solidity智能合约文件时,首先将依赖文件和目标文件合并成一个文件。S4:将S3的合并后的文件中的代码由Solidity转化为Boogie,采用弱化继承、弱化封装、增强多态、去可见性的方式以去除面向对象的语言特性,并将Solid ...
【技术特征摘要】
1.一种形式验证Solidity智能合约的方法,其特征在于,该方法具体包括如下步骤:S1:首先利用Anltr4语法设计SolidityModelLanguage规范,所述的规范包括SML语句规、SML函数规范和SML循环规范,SML语句规范以符号'//@'开头,后跟假设语句或断言语句;SML函数规范以符号'//@'开头,后跟规范体;或者以符号'/*@'开头,后跟规范体,最后以符号'*/'结尾;所述的规范体包括前置条件语句、后置条件语句、修改权限语句;SML循环规范以符号'//@'开头,后跟循环语句。所述的假设语句、断言语句、前置条件语句、后置条件语句、修改权限语句和循环语句都由相应语句的关键字和谓词组成。S2:按照S1所述的SML语法规范在Solidity智能合约中添加详细的注解规范。S3:如果智能合约开发者进行形式化验证的智能合约的目标文件依赖其他多个Solidity智能合约文件时,首先将依赖文件和目标文件合并成一个文件。S4:将S3的合并后的文件中的代码由Solidity转化为Boogie,采用弱化继承、弱化封装、增强多态、去可见性的方式以去除面向对象的语言特性,并将Solidity语法中的类型、语句和表达式转换为Boogie语法中相对应的类型、语句和表达式。S5:采用S4中同样的方法将S2中为Solidity智能合约添加的注解规范转换为Boogie语法的规范;S6:将通过S4和S5转换后的带有详细注解规范的Boogie代码保存在文件名后缀为.bpl的文件中;S7:利用集成Boogie编译器和Z3定理证明器的Boogie工具对S6获得的文件进行验证,获得验证结果;S8:读取验证结果,并将其解析为更为可读的结果,并将更为可读的结果返回给Solidity智能合约开发者。2.根据权利要求1所述的形式验证Solidity智能合约的方法,其特征在于,所述的S3中将依赖文件和目标文件合并成一个文件的具体操作为:对所有`*.sol`文件,获取文件import信息,将其替换为合约名所对应的源码,确保最终所有文件都不再有import信息,否则重复以上操作直至所有文件不再包含import信息;若合并过程中存在同名的合约、库、接口,则将其按照一定规则修改为不同名的合约、库、接口,同时相应的使用该合约、库、接口处也修改为对应名称;并将以上名称修改操作进行记录,后续步骤能够对以上修改进行反向查找。3.根据权利要求1所述的形式验证Solidity智能合约的方法,其特征在于,所述的弱化继承,即采用去继承的方式将父合约中的状态变量声明、结构体定义、构造函数定义、修饰器定义、函数定义和枚举定义写入到子合约中;所述的去继承的方式是指去掉子合约与父合约语法之间的继承关系,对于父合约中的状态变量声明,若不与子合约中的状态变量产生命名冲突,则直接写入子合约;若存在命名冲突,则按照`父合约名称`+`$`+`相关名称`的方式写入子合约中;Solidity中结构体定义及枚举定义直接写入子合约当中;函数定义及构造函数定义,若不存在命名冲突,则直接写入子合约中,当存在命名冲突,则按照`父合约名称`+`$`+`相关名称`的方式进行命名写入子合约中;修饰器定义,若子合约中无同名修饰器,则将修饰器定义写入子合约中,否则不做操作。4.根据权利要求1所述的形式验证Solidity智能合约的方法,其特征在于,所述的弱化封装,即指首先在Boogie中定义指针类型typeRef=int及范型域类型typeFieldT,通过堆的方式对Solidity中对象进行管理varHeap:[Ref]<T>[FieldT]T,将所有智能合约中的域都直接暴露在文件内成为状态变量、函数、构造函数、修饰器、结构体、枚举。5.根据权利要求1所述的形式验证Solidity智能合约的方法,其特征在于,所述的增强多态包括多态定义和多态实现两步,即在该合约实例c的构造函...
【专利技术属性】
技术研发人员:张丁文,曹辉,梁秀波,邱炜伟,李伟,李启雷,尹可挺,
申请(专利权)人:杭州趣链科技有限公司,
类型:发明
国别省市:浙江,33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。