《Lolisa:用于Solidity编程语言子集的形式化语法和语义》
1. 引言
区块链平台作为新兴技术,能解决诸如加密货币、分布式存储等诸多问题,目前已受到金融领域的关注。以太坊是应用广泛的区块链系统,它实现了灵活的通用图灵完备编程语言Solidity,基于此可开发在以太坊虚拟机(EVM)中运行的智能合约,这些智能合约在医疗、金融等关键领域广泛应用。然而,随着智能合约的使用增加,其安全性受到更多审视,存在如交易顺序依赖、异常处理不当等细微漏洞,可能导致经济损失,像对去中心化自治组织(DAO)和平等钱包(Parity wallet)合约的攻击就广为人知。
为解决这些问题,提出了一种名为Lolisa的中间规范语言,用于在Coq中对基于以太坊的智能合约进行形式化验证。Lolisa具有以下特点:
- 一致性 :依据Solidity文档对其大部分类型、运算符和机制进行形式化,Solidity程序可与Lolisa程序逐行对应转换,无需重建或抽象,保证了一致性。
- 静态类型系统 :使用广义代数数据类型(GADTs)定义形式语法,为所有值和表达式赋予静态类型注解,比Solidity有更强的静态类型系统来检查程序构造。
- 可执行和可证明 :形式语义基于GERM框架结合EVI定义,理论上基于以太坊且用Lolisa编写的智能合约可在高阶逻辑定理证明辅助工具中进行符号执行并自动验证其属性。
- 机械化和验证 :语法和语义使用Coq证明辅助工具进行机械化,开发了形式验证解释器来验证Lolisa是否满足上述特性以及语义的元属性。 <