Ethereum smart contract fuzzer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
echidna/CHANGELOG.md

9.4 KiB

TODO

2.0.5

  • Optimized constant generation (#898, #900)
  • Fixed how address are displayed in events (#891)
  • Update hevm to 0.50 (#884, #894, #896, #897, #901)
  • Added saving and loading of reproducers for every test (#858)
  • Added events and revert reasons for any failure in the constructor (#871)
  • Fixed uninitialized sender addresses from etheno transactions (#823)
  • Fixed crash when minimizing inputs during optimization tests (#837)
  • Refactored code and removed useless dependencies (#856, #857, #874, #878, #895, #903)

2.0.4

  • Added colored html for coverage output code (#816)
  • Fixed crash when parsing solc versions (#835)
  • Fixed long transactions and event lines in UI (#832)
  • Added Homebrew installation instructions (#848)
  • Moved all nix stuff to flake and use nix-bundle-exe for macOS release (#851)
  • Updated codebase to GHC 9.0.2 (#846)
  • Refactored code and removed useless dependencies (#854, #853, #829, #827, #828)

2.0.3

  • Clean up Docker containers (#706)
  • Avoid resetting accounts if there is a deployed contract (#795)
  • Fixed decoding non-utf8 strings from slither printer (#799)
  • Fixed generation and mutation of extreme signed integers (#791)
  • Removed fallback from signature map when it is not defined (#772)

2.0.2

  • Improved shrinking of dynamic arrays (#775)
  • Added support for deployment of certain contracts or bytecode in specific addresses (#758)
  • Fixed git attribute to support building docker containers in Windows (#773)
  • Fixed crash when the EVM execution triggers more than one query (#760)
  • Added support for detection and handling of ancient solc versions (#675)
  • Added explicit static flag and removed pthread one from ghc options (#768)

2.0.1

  • Optimized stateless mutators (#747)
  • Expanded and improved command-line help (#741)
  • Added dapptest support: compatibility mode to run foundry and dapptool fuzz tests (#733, #745)
  • Generate more values closer to the maximum (#736)
  • Fix TERMINFO path for Nix release builds (#731)
  • Mitigate large memory consumption when replaying corpus (#725)
  • Fix --shrink-limit to change shrink limit instead of test limit (#728)
  • Correctly show lines with multiple types of coverage
  • Restored nix support (#717, #743)

2.0.0

  • Refactored test internal data structures and code
  • Refactored unit test code and moved the related files to the tests directory
  • Added support to show events and custom errors when a property/assertion fails
  • Added support for catching assertion failure in Solidity 0.8.x
  • Added two new testing mode: optimization and overflow (only in Solidity 0.8.x)
  • Added optional checks for contract destruction
  • Added testMode option and removed related flags
  • Simplified contract deployer and property sender addresses to be easier to read
  • Updated hevm to 0.49.0

1.7.3

  • Removed old compilation artifacts before starting a new fuzzing campaign (#697)
  • Fixed incorrect function filtering when using assertion mode (#695)
  • Improved handling of negative constants (#683)
  • Updated hevm to 0.48.0 (#691)
  • Removed nix workaround for Slither (#680)
  • Fixed source printing when some lines are not covered (#678)

1.7.2

  • Fixed check-asserts and multi-abi cli switches (#665)
  • Updated to hevm 0.4.6 (#660)
  • Support for loading multiple files with compiled contracts from hardhat/brownie (#659)

1.7.1

  • Tweaked mutators and improved test stability (#628)
  • Documented known issues and limitations (#655)
  • Automatically initialize addresses when used (#657)
  • Improved coverage to count number of EVM frames (#624)
  • Avoid mutations to generate inputs outside their expected ABI range (#650)
  • Various small to run Vyper contracts (#645)
  • Improved integer generation to use small values (#644)
  • Added two CLI options: --corpus-dir and --check-asserts (#640)
  • Refactored shrinkSeq to improve readability (#639)
  • Fixed UI to fit long function calls (#635)
  • Refactor coverage types and added corpus size in UI (#627)
  • Fixed link to macOS binary in binaries.soliditylang.org (#629)
  • Fixed default.nix to use 1.7.0 as version (#623)
  • Refactored Test type (#622)

1.7.0

  • Refactored and improved etheno support to be more useful (#615)
  • Coverage filenames are not overwritten (#620)
  • Refactored the mutator code (#618)
  • More corpus and array mutations implemented (#372)
  • Source coverage is printed after fuzzing campaign (#516)
  • Nix improvements and fixes (#603, #604, #608, #612)
  • Simplified slither information parsing (#543)
  • Enabled use of coverage by default (#605)
  • Run echidna tests in parallel (#571)

1.6.1

  • Use a sensible default value for block.gaslimit (#596)
  • Use metadata to detect deployed contracts (#593)
  • Semver integration for improving testing with different solc versions (#594)
  • Added some performance improvement in property execution (#576)
  • Fixed wait bug when shrinking (#584)
  • Added funwithnumber example from Sabre (#565)
  • Improved function filtering to be more precise (#570)
  • Small fixes in the macOS CI (#597), the README (#590) and Nix (#581)

1.6.0

  • Slither is now a required dependency.
  • Made sure that gets mapped correctly, fixing #474 (#503)
  • Fix library timestamp/block delay issue (#510)
  • Make stack limit exceeded a revert (#517)
  • Add some default transaction constants (#532)
  • Make large constants work better with dictionaries (#523)
  • Fix "flanky" corpus tests (#537)
  • HEVM updated to 150dddc67b6cbad75fd4ae5a689452892f55ea26 (0.42) (#511)
    • this may introduce a slight performance hit as everything is partially symbolic
  • Improved shrinking and pretty printing (#518)
  • Integrate slither results (#451)
  • Disagreements about MonadState and MonadReader (#545, #513)
  • Simplified a bunch of code (#548, #549, #513)
  • Fix negative address bug (#552)
  • Various Github Actions improvements (#527, #554)
  • Allow to bypass EIP-170 and set up a custom max code size (#544)

1.5.1

  • Fix timestamp and block delays having the initial timestamp/block added to them (#460, #469)
  • Fix GitHub actions due to new macOS image (#468)
  • Relax package.yaml constraints (#466)
  • Fix extcodesize by creating contracts correctly (#453, #454, #465)
  • Refactor unit tests (#457)
  • Add seed to UI (#456)
  • Set an initial timestamp and block number (#455)
  • Better README (#450)
  • Code simplifications (#448)
  • Detect contract deployment failures (#447)
  • DockerHub containers in addition to GitHub (#445)
  • Brought back print reporting after exiting the UI (#441)
  • Refactor Tx (#437)

1.5.0

  • Switch to x.y.z versioning scheme
  • Refactor campaign-related code (#384)
  • Fixed hevm-related memory leak (#423)
  • Fixed array mutation memory leak (#442)
  • Benchmark mode to run without tests (#420, #409)
  • Migrated to GitHub actions (#414, #402)
  • Corpus mutation handling fixes (#395, #403)
  • Improved JSON output and reworked UI handling to better handle interactive and non-interactive mode (#405)
  • Use safe mutation parameters to favor purely random generation (#393)
  • Show address in hex using "0x" (#386)
  • Enable addresses shrinking (#385)
  • Fixed coverage counting when a contract is deployed multiple times (#410)
  • Prioritization to mutate each list of transactions from the corpus (#376, #395)
  • Improved array generation using generic mutations (#357)
  • Multiple coverage tracking according to the result of a transaction (#369)
  • Allow to control corpus mutation constans using a configuration file (#373)

1.4.0.1

1.4.0.0

  • Filtering functions either blacklisting or whitelisting functions to call during a fuzzing campaign (#341)
  • Support to collect, save and load a corpus of transactions in JSON (#352, #353)
  • Basic mutations based on collected corpus (#370)
  • Use of hlint as Github action to verify new PR (#366)

1.3.0.0

  • Gaining knowledge of contract-created contract addresses (#295)
  • Improved crytic-compile error handling when missing (#335)
  • Support testing from arbitrary blockchain state via etheno (#333)
  • Some shrinking improvements (#336)
  • UI improvements (#339)
  • UI updates are now threaded separately from fuzzing campaign (#345)
  • Tx rework to unify Echidna.RPC and Transaction (#346)
  • Adjustment of testsuite parameters (#347)
  • Multi-ABI support by fuzzing all known ABIs (#344)
  • Fix indefinite MVar blocking (#350)
  • AddressArrayExample (#348)
  • Tx JSON conversions (#352)
  • Smaller docker container, multi-stage build (#349)
  • Gas worst case estimation (#355)

1.2.0.0

  • Warn on unused config keys (#301)
  • default.yaml kept up to date via CI checks (#301)
  • Improved shrinking (#310)
  • Solidity ABIv2 support (#284, #303, #317)
  • Early termination on property falure (#323)
  • Timeouts (#320)
  • HEVM updated to 2cc059b49cae613025b925f0273b906e25484b68
  • Dictionary control (#312, #321)
  • Gas price fuzzing (#307)
  • Coverage bug fixed (#300)
  • Contract creation bug fixed (#293)
  • New startup message (#290)
  • Add --version flag (#285)
  • Support time/block delays (#282)
  • Support crytic arguments (#280)
  • Detect assertion failure (#276)
  • Use return values as constants (#262)
  • Reproducible testing with seeds (#254)

1.0.0.0

  • Initial stable release