可复用的以太坊合约属性库
随着智能合约安全技术发展,基于属性的模糊测试(property-based fuzzing)已成为开发者和安全工程师的核心技术。该技术依赖代码属性(通常称为不变量)的创建,这些属性描述代码的预期行为。为帮助社区定义属性,我们发布了包含168个预置属性的集合,可直接用于我们的智能合约模糊测试工具Echidna或通过单元测试调用。这些属性涵盖:
- 常见ERC代币接口的合规性检查
- 通用可测试安全属性
- 定点数学运算测试属性
实战研讨会安排
为帮助掌握这些工具,我们将举办两场直播:
- 3月7日:ERC20属性详解、Echidna作弊码使用(讲师:Guillermo Larregay)
- 3月14日:ERC4626属性解析与高效模糊测试技巧(讲师:Benjamin Samuels)
为什么需要这些属性?
该资源库及配套研讨会将展示模糊测试如何提供远超常规单元测试的安全保障。这些属性可轻松集成到使用常见标准或流行库的项目中,当前版本包含对以下标准的测试:
ERC20
- 标准接口函数属性
- 基础逻辑属性(如:用户余额不应大于代币总量)
- 可销毁/可铸造/可暂停等扩展功能属性
ERC4626
- 合规性舍入方向验证
- 禁止异常回退的函数属性
- 差分测试属性(如deposit()需符合previewDeposit()预期)
- 非标准安全属性(如份额通胀攻击检查)
ABDKMath64x64数学库
- 交换律/结合律/分配律等数学属性
- 差分测试(如2^(-x)应与1/2^x等价)
- 输入范围异常检测属性
实战案例:发现ABDKMath64x64库漏洞
快速开始指南
- 安装Echidna测试工具
- 集成属性库:
- Hardhat项目:
npm install https://github.com/crytic/properties.git
- Foundry项目:
forge install crytic/properties
- Hardhat项目:
- 创建测试合约(示例代码见原文)
- 配置Echidna参数文件
- 运行测试:
echidna-test . --contract CryticERC20ExternalHarness --config tests/echidna-external.yaml
未来规划
- 扩展对PRBMath等数学库的测试支持
- 增加更多ERC标准测试
- 开发AMM/流动性池等非标合约的测试集