Echidna is a Haskell library designed for fuzzing/property-based testing of EVM code. It supports relatively sophisticated grammar-based fuzzing campaigns to falsify a variety of predicates.
Haskell 函数式编程语言!
Features: 1, 生成根据实际代码定制的输入 2, 可选的覆盖率知道,以发现更深层的bugs 3, 自动测试用例最小化快速分类 4, 无缝集成到开发工作中 5, 运行速度快 6, 强大的API接口
核心函数: echidna-test
一个不变量列表(始终保持为真的属性)作为输入 对于每个不变量,生成对smart contract 的随机调用序列,并检查不变量是否有效。
如果它能找到某种方法来伪造不变量,它就会打印出这样做的调用序列。
如果不行,这个contract就是安全的。
写invariants echidna_ 开头的,没有参数,并且返回boolean的函数。
e.g.假设有个balance变量 不应该低于20,就加一个extra function
function echidna_check_balance() {
return(balance >= 20);
}
## to check this invariant, run:
echidna-test myContract.sol
它的方法是 test oracle,
example中试图找到一个call sequence,该序列有时会使echidna_sometimesfalse出错,并且应无法找到echidna_alwaysture的伪造输入。
例如: 找到 integer overflow in the Metacoin Truffle box
$ cd examples/solidity/truffle/metacoin
$ echidna-test . TEST
...
echidna_convert: failed!
Call sequence:
mint(57896044618658097711785492504343953926634992332820282019728792003956564819968)
配置选项: 可以加载配置文件 配置文件可以允许用户选择EVM,测试生成参数。 default.yaml可以找到带注释的配置文件说明 https://github.com/crytic/echidna/blob/master/examples/solidity/basic/default.yaml
用coverage来控制的! coverage: false
Comments