01月23, 2020

Echidna

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

本文链接:https://harry.ren/post/echidna.html

-- EOF --

Comments