- Added support for lcov coverage report
- Added a "coverageFormats" config option to choose which coverage reports to make
- Added missing space in ProcessorNotFound message (#977)
- Added measurement and log of external actions (#988)
- Avoid using cheat codes address to form fuzzing call sequences (#993)
- Implemented invariant testing from foundry (#989)
- hevm upgraded to 0.50.4 (#986)
- Cleaned and improved codebase (#990, #994, #995, #997)
- Make frequently modified fields strict (#1000)
- Force corpus evaluation (#1002)
- Text/headless UI was improved (#991, #1006, #1007, #1009)
- External contracts are now automatically fetched from Ethereum nodes during fuzzing (#927, #971)
- Added support for the FFI cheatcode (#750)
- Renamed multi-abi mode to allContracts, multi-abi still works but will be removed in future (#934)
- Fixed method filtering in multi-abi mode (#950, #954)
- Fixed config parsing for too large values (#935)
- Renamed echidna-test binary to echidna (#826)
- Added scrollbar to the UI (#915)
- Removed generation of negative seeds (#933)
- Added crash display to the UI (#944)
- Added human-friendly errors for panic codes (#965)
- Refactored code (#903, #906, #908, #924, #925, #928, #946, #956, #966, #968)
- Added limited Windows build (#943)
- Updated dependencies (#942, #948)
- Build and CI improvements (#912, #914, #917, #952, #967)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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
- 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)
- 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)
- 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)
- 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)
- 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)
- 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
andMonadReader
(#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)
- 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)
- 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)
- HEVM updated to af84e2ee0a0654fdaa91186384233cf1731ee7ce
- 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)
- 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 unifyEchidna.RPC
andTransaction
(#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)
- 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)
- Initial stable release