以太坊合约可复用属性指南 - 提升智能合约安全的模糊测试技术
以太坊合约的可复用属性
随着智能合约安全技术的持续演进,基于属性的模糊测试已成为开发者和安全工程师的核心技术。该技术依赖于代码属性(通常称为不变量)的创建,这些属性描述了代码的预期行为。为帮助社区定义属性,我们发布了 168 个预构建属性集,可直接用于我们的智能合约模糊测试工具 Echidna,或通过单元测试调用。
属性覆盖范围
该资源库包含以下测试内容:
ABDKMath64x64 数学库
ERC-20 代币标准
ERC-4626 代币化金库标准
ERC20 属性
标准接口函数属性
基础合理性属性(例如:用户余额不应大于代币总供应量)
可销毁、可铸造和可暂停代币的扩展属性
ERC4626 属性
验证舍入方向符合规范的属性
必须永不回退的函数回退属性
差分测试属性(例如 deposit()必须匹配 previewDeposit()预测功能)
功能属性(例如 redeem()从正确账户扣除份额)
非规范安全属性(份额通胀攻击、代币授权检查等)
ABDKMath64x64
交换律、结合律、分配律和恒等属性
差分测试属性(例如 2^(-x) == 1/2^(x))
特定输入范围应回退的验证属性
不应回退的负向验证属性
区间属性(例如 min(x,y) <= avg(x,y) <= max(x,y))
实战工作坊
我们将通过两场直播提供实操指导:
3 月 7 日:ERC20 属性、示例用法和 Echidna 作弊码(Guillermo Larregay 主讲)
3 月 14 日:ERC4626 属性、示例用法和有效模糊测试技巧(Benjamin Samuels 主讲)
立即开始
安装步骤
安装 Echidna
将属性导入项目:
Hardhat 项目:
npm install https://github.com/crytic/properties.git
Foundry 项目:
forge install crytic/properties
根据文档创建测试合约
示例测试合约
Echidna 配置文件示例
运行命令:echidna-test . --contract CryticERC20ExternalHarness --config tests/echidna-external.yaml
未来计划
扩展对 PRBMath 等数学库的测试
增加更多 ERC 标准测试
创建 AMM 和流动性池等非标准合约的测试集
更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

评论