用途:本技能指导在各语言中进行属性测试(PBT),用于发现示例测试难以覆盖的安全边界问题,重点涉及溢出/下溢、反序列化往返、访问控制不变量与状态机违规。适用场景包括审计加密原语、解析器或序列化库,审查智能合约算术不变量,输入域巨大或无边界的函数,调试崩溃并获取最小可复现输入,以及为曾出现安全缺陷的函数补充回归覆盖。
主要能力:按属性强度层级列举不变量,从弱到强依次为不抛异常、类型保持、不变量、幂等、往返;提供 Python(Hypothesis)、Rust(proptest)、JavaScript/TypeScript(fast-check)、Solidity(Foundry fuzz)、Go(testing/quick)的框架安装与测试写法;建议迭代次数,安全审查推荐最少 500–10,000(Foundry 可 1,000–50,000);失败时自动缩小反例并分类,区分测试逻辑错误与真实缺陷;修复后用固定反例做回归测试。
使用方式:安装对应框架,例如 Python 用 pip install hypothesis,Rust 在 Cargo.toml 添加 proptest = "1",JavaScript 用 npm install --save-dev fast-check,Solidity 用 curl -L https://foundry.paradigm.xyz | bash 和 foundryup,Go 使用标准库 testing/quick。可配置输入变量 PBT_TARGET_FILE(必填)、PBT_LANGUAGE(必填)、PBT_ITERATIONS、PBT_OUTPUT_DIR、PBT_SEED。Foundry 可运行 forge test --match-contract PropertyTest --fuzz-runs 10000 -v。
限制与注意事项:属性强度层级是排序参考而非硬规则。策略过宽可能生成违反前置条件的输入,需用 assume()、vm.assume() 或 fc.filter() 收紧;100 次通过不代表安全,稀有输入区域可能失败。Hypothesis 可能报 HealthCheck.too_slow。Foundry 的不变量测试(invariant_*)与模糊测试不同,更适合有状态协议级不变量。其他收费、价格、平台支持等信息资料暂未提供。