lfglabs-dev/verity

GitHub: lfglabs-dev/verity

Verity 是一个使用 Lean 4 形式化验证的智能合约编译器,为以太坊合约提供全路径数学正确性保证。

Stars: 87 | Forks: 8

Verity

Verity

一个用 Lean 4 编写的形式化验证智能合约编译器,面向以太坊。
文档:veritylang.com  ·  论文:verity.pdf  ·  由 LFG Labs 构建

Verity documentation MIT License Built with Lean 4 Verification status Verify

**Verity** 是一个用 [Lean 4](https://lean-lang.org/) 编写的形式化验证智能合约编译器。你可以在一个嵌入式 DSL 中编写合约,声明它们应该做什么,证明这些属性成立,并编译成 EVM 字节码。编译器本身被证明在三个验证层中都保持语义一致。完整文档位于 [**veritylang.com**](https://veritylang.com)。 | 指标 | 值 | |--------|-------| | 定理 | 283 (283 已证明, 0 sorry) | | 公理 | 0 | | Foundry 测试 | 522 (239 属性) | | 已验证合约 | 12 | | 核心 EDSL | 649 行 | | Lean | 4.22.0 | 以上每个数字都从代码库中提取,并在每次提交时进行验证。`0 sorry` 表示没有未完成的证明。`0 axioms` 表示编译器栈中没有未证明的假设。 ## 什么是经过验证的 Verity 证明编译在三个阶段保留了行为。每一层都是一个经过机器检查的 Lean 定理。 **第 1 层**(EDSL 到 CompilationModel):`verity_contract` 宏从一个定义生成一个可执行的 Lean 程序和一个面向编译器的模型。每个合约的桥接定理证明它们是一致的。 **第 2 层**(CompilationModel 到 IR):一个通用的全合约定理覆盖了支持的片段,且没有公理。不需要为每个合约单独证明。 **第 3 层**(IR 到 Yul):所有语句类型都被证明是等价的。调度桥接是一个显式的定理假设,而不是公理。 Yul 到字节码的步骤由 `solc`(v0.8.33,已固定版本)处理,并且没有被 Verity 验证。完整的信任边界请参见 [TRUST_ASSUMPTIONS.md](TRUST_ASSUMPTIONS.md)。 ## 工作原理 ``` verity_contract Counter where storage count : Uint256 := slot 0 function increment () : Unit := do let current <- getStorage count setStorage count (add current 1) ``` ``` theorem increment_correct (s : ContractState) : let s' := ((increment).run s).snd s'.storage 0 = add (s.storage 0) 1 := by rfl ``` 证明通过 `rfl`(自反性)通过:Lean 的内核计算两边并确认它们在定义上相等。没有外部求解器,没有有界模型检查器,除了 Lean 的类型论之外不信任任何东西。 ## 快速开始 ``` curl https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh -sSf | sh source ~/.elan/env git clone https://github.com/lfglabs-dev/verity.git && cd verity lake build # verify all proofs (~20 min first build) make check # run full CI validation suite FOUNDRY_PROFILE=difftest forge test # differential tests: EDSL vs EVM ``` ## Verity 的对比 | | Certora | Halmos | Verity | |---|---|---|---| | **方法** | 有界模型检查 | 符号执行 | 在 Lean 4 中进行定理证明 | | **证明范围** | 有界(可配置深度) | 有界(路径爆炸) | 无界(所有输入,所有路径) | | **编译器信任** | 完全信任 solc | 完全信任 solc | 验证 3 个编译层 | | **最适合** | 大规模生产审计 | 在 Foundry 中查找 bug | 高保障合约 | Verity 与这些工具是互补的。它适用于你需要跨越所有输入和所有执行路径的数学确定性的场景。 ## 文档 | 资源 | 描述 | |----------|-------------| | [veritylang.com](https://veritylang.com/) | 完整文档站点 | | [Solidity 到 Verity](https://veritylang.com/guides/solidity-to-verity) | 用于 Solidity 移植的实用语法和语义映射 | | [生产 Solidity 模式](https://veritylang.com/guides/production-solidity-patterns) | 生产移植的代理指南、可重用的 Verity 特性以及预言机/规范边界 | | [docs/VERIFICATION_STATUS.md](docs/VERIFICATION_STATUS.md) | 定理计数、证明状态、测试覆盖率 | | [TRUST_ASSUMPTIONS.md](TRUST_ASSUMPTIONS.md) | 哪些是经过验证的,哪些是被信任的 | | [AXIOMS.md](AXIOMS.md) | 已记录的公理(当前为 0) | | [AUDIT.md](AUDIT.md) | 信任边界审计证据和 CI 防护 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 贡献指南 | ### 研究 - [Verity: 一个形式化验证的智能合约编译器](https://lfglabs.dev/papers/verity.pdf) - [Verity 基准测试:AI 驱动的证明生成](https://lfglabs.dev/research/verity-benchmark) - [什么是形式化证明?](https://lfglabs.dev/research/what-is-a-formal-proof) ## 支持 Verity 是一项公益项目。如果你想支持该项目,可以通过 Giveth 捐款: [verity: AI 时代的智能合约安全](https://giveth.io/project/verity:-smart-contracts-security-for-the-age-of-ai)
标签:EVM, Lean 4, Web3, 以太坊, 区块链, 区块链安全, 去中心化应用, 去中心化金融, 安全性, 形式化方法, 形式化验证, 数学证明, 智能合约, 智能合约安全, 正确性, 编程语言, 编译器, 编译器设计, 软件验证, 领域特定语言