假设以太坊:以太坊项目的假设库。
hypothesis-ethereum的Python项目详细描述
#以太坊智能中枢的假设整合 使用pytest执行测试
https://hypothesis.works/articles/how-not-to-die-hard-with-hypothesis/https://hypothesis.readthedocs.io/en/latest/stateful.html
##这个模糊器是如何工作的
这个fuzzer引擎接受一个已编译的契约,并利用abi来计算契约的“调用空间”。 调用空间基本上是允许修改底层状态的外部可用协定方法。 每个方法的调用空间由每个方法的输入变量进一步参数化,因此总的调用空间是 基本上所有可用的状态修改方法都包含所有可能的输入变量组合。 以太坊契约包含非常大的变量,例如256位整数,这可能真的很大!
fuzzer通常从调用空间中随机抽取样本,以减少正在进行的调用的数量 减少用于探索呼叫空间的时间和资源量。这个模糊引擎特别尝试 调用空间中的一系列调用,试图找到用户感兴趣的异常情况。
此模糊引擎检查以下异常情况: 一。排气异常(使用可配置的限制) 2.意外的恢复,例如无效的操作码、堆栈溢出/下溢、无效的跳转目标或资金不足。 三。自定义不变量,由用户使用合同的公共只读api指定
##稳健性与完整性
这个绒毛是“健全的”,但不是“完整的”。 如果您不熟悉这些概念,这基本上意味着fuzzer测试可能不完全 识别所有的bug(由于随机搜索契约的调用空间),但是它查找的任何bug 是存在于应用程序中的“真实”bug(事实上它是一个bug被充分地识别)。
未来的工作将通过“灰盒”技术缩小合同的通话空间, 或者换言之,内省契约以识别调用空间中可能显示错误的部分, 把注意力集中在这些部分,以便更快地识别错误。这样,我们的目标是使模糊器的技术 more完成(更快地识别更多的bug),但不牺牲可靠性(所有bug仍然是真正的bug)。