{"id":19830707,"url":"https://github.com/crytic/echidna-parade","last_synced_at":"2025-05-01T15:30:30.127Z","repository":{"id":46340214,"uuid":"380676069","full_name":"crytic/echidna-parade","owner":"crytic","description":null,"archived":true,"fork":false,"pushed_at":"2023-06-29T20:13:40.000Z","size":59,"stargazers_count":28,"open_issues_count":8,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-23T04:06:03.881Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crytic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-27T07:16:54.000Z","updated_at":"2025-02-18T09:32:58.000Z","dependencies_parsed_at":"2024-11-12T11:29:30.887Z","dependency_job_id":"648d0280-e278-4bee-989a-bd629540a67b","html_url":"https://github.com/crytic/echidna-parade","commit_stats":{"total_commits":27,"total_committers":5,"mean_commits":5.4,"dds":0.4444444444444444,"last_synced_commit":"827a8c28ababbbdf5e17734dc58b1fe0e47f709d"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crytic%2Fechidna-parade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crytic%2Fechidna-parade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crytic%2Fechidna-parade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crytic%2Fechidna-parade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crytic","download_url":"https://codeload.github.com/crytic/echidna-parade/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251898499,"owners_count":21661837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T11:24:58.433Z","updated_at":"2025-05-01T15:30:29.801Z","avatar_url":"https://github.com/crytic.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Echidna-Parade: A Tool for Diverse Multicore Smart Contract Fuzzing\n\nEchidna-parade is an experimental Python tool that uses configuration variance and a common corpus to try to throughly test smart contracts with the [Echidna smart-contract fuzzer](https://github.com/crytic/echidna).\n\nEchidna-parade is based on the original [code developed by Alex Groce at Northern Arizona University](https://github.com/agroce/echidna-parade/).\n\n## Features\n\n* Scale smart contract fuzzing using as many Echidna processes as you can run in your computer\n* Start, stop or resume large fuzzing campaigns\n* Leverage [swarm testing](https://agroce.github.io/issta12.pdf) and [transaction-length variation](https://agroce.github.io/ase08.pdf) to trigger deep corners of the contracts under testing\n* Automatic collection and handling of corpus across all the Echidna processes. \n\n## Usage\n\n## Before starting\n\nTake a look to the [Echidna README](https://github.com/crytic/echidna#echidna-a-fast-smart-contract-fuzzer-) to make sure you know how use. We also recommend to check our [Building Secure Smart Contracts](https://github.com/crytic/building-secure-contracts) repository contains a crash course on Echidna, including examples, lessons and exercises. You should [start here](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial).\n\n### Example\n\nThis repository contains a [small smart contract](examples/justlen.sol) to test echidna-parade:\n\n```\n$ echidna-parade examples/justlen.sol --config examples/justlen.yaml --contract TEST --timeout 120 --gen_time 30 --ncores 8 --always \"TEST.turn_on_length_checking()\" \"TEST.push_1()\" \"TEST.plus5()\" \"TEST.test_long_64()\" \"TEST.test_long_128()\"\nStarting echidna-parade with config=Config(files=['/Users/adg326/echidna-parade/examples/justlen.sol'], name='parade.82538', contract='TEST', config=\u003c_io.TextIOWrapper name='config.yaml' mode='r' encoding='UTF-8'\u003e, ncores=8, corpus_dir=None, timeout=120, gen_time=30, seed=None, minseqLen=10, maxseqLen=300, prob=0.5, always=['turn_on_length_checking', 'push_1', 'plus5', 'test_long_64', 'test_long_128'])\n\nResults will be written to: /Users/adg326/echidna-parade/examples/parade.82538\nIdentified 14 public functions: push_1, pop_1, double, plus5, halve, decimate, empty1, empty2, empty3, turn_on_length_checking, turn_off_length_checking, test_long_8, test_long_64, test_long_128\n\nRUNNING INITIAL CORPUS GENERATION\n- LAUNCHING echidna-test in parade.82538/initial blacklisting [  ] with seqLen 100\nparade.82538/initial FAILED\nNEW FAILURE: assertion in test_long_8: failed!💥  \n\nSWARM GENERATION #1: ELAPSED TIME 38.62 SECONDS / 120\n- LAUNCHING echidna-test in parade.82538/gen.1.0 blacklisting [ halve, decimate, empty3 ] with seqLen 100\n- LAUNCHING echidna-test in parade.82538/gen.1.1 blacklisting [ pop_1, halve, decimate, empty2, empty3, test_long_8 ] with seqLen 100\n- LAUNCHING echidna-test in parade.82538/gen.1.2 blacklisting [ pop_1, double, halve, decimate, empty1, empty2, empty3 ] with seqLen 239\n- LAUNCHING echidna-test in parade.82538/gen.1.3 blacklisting [ empty1, empty2, empty3, test_long_8 ] with seqLen 296\n- LAUNCHING echidna-test in parade.82538/gen.1.4 blacklisting [ double ] with seqLen 100\n- LAUNCHING echidna-test in parade.82538/gen.1.5 blacklisting [ empty1, turn_off_length_checking, test_long_8 ] with seqLen 208\n- LAUNCHING echidna-test in parade.82538/gen.1.6 blacklisting [ pop_1, decimate, empty2 ] with seqLen 100\n- LAUNCHING echidna-test in parade.82538/gen.1.7 blacklisting [ pop_1, double, halve, turn_off_length_checking, test_long_8 ] with seqLen 86\nparade.82538/gen.1.2 FAILED\nNEW FAILURE: assertion in test_long_64: failed!💥  \nNEW FAILURE: assertion in test_long_128: failed!💥  \nparade.82538/gen.1.0 FAILED\nparade.82538/gen.1.1 FAILED\nparade.82538/gen.1.4 FAILED\nparade.82538/gen.1.6 FAILED\n\nSWARM GENERATION #2: ELAPSED TIME 86.73 SECONDS / 120\n- LAUNCHING echidna-test in parade.82538/gen.2.0 blacklisting [ decimate, empty1, empty2, empty3 ] with seqLen 19\n- LAUNCHING echidna-test in parade.82538/gen.2.1 blacklisting [ pop_1, empty1, empty3, turn_off_length_checking, test_long_8 ] with seqLen 103\n- LAUNCHING echidna-test in parade.82538/gen.2.2 blacklisting [ halve, empty1, empty2, empty3, test_long_8 ] with seqLen 226\n- LAUNCHING echidna-test in parade.82538/gen.2.3 blacklisting [ halve, decimate, empty1, empty3 ] with seqLen 100\n- LAUNCHING echidna-test in parade.82538/gen.2.4 blacklisting [ pop_1, double, decimate, empty2, test_long_8 ] with seqLen 100\n- LAUNCHING echidna-test in parade.82538/gen.2.5 blacklisting [ double, empty1, turn_off_length_checking, test_long_8 ] with seqLen 20\n- LAUNCHING echidna-test in parade.82538/gen.2.6 blacklisting [ pop_1, halve, empty2, turn_off_length_checking, test_long_8 ] with seqLen 194\n- LAUNCHING echidna-test in parade.82538/gen.2.7 blacklisting [ halve, decimate, empty1, empty2, empty3, turn_off_length_checking ] with seqLen 100\nparade.82538/gen.2.4 FAILED\nparade.82538/gen.2.3 FAILED\nparade.82538/gen.2.7 FAILED\nparade.82538/gen.2.0 FAILED\nparade.82538/gen.2.1 FAILED\nparade.82538/gen.2.5 FAILED\nparade.82538/gen.2.2 FAILED\nparade.82538/gen.2.6 FAILED\nDONE!\n\nSOME TESTS FAILED\n\nProperty results:\n========================================\nassertion in test_long_8: failed!💥  \nFAILED 8 TIMES\nSee: parade.82538/initial/echidna.out, parade.82538/gen.1.2/echidna.out, parade.82538/gen.1.0/echidna.out, parade.82538/gen.1.4/echidna.out, parade.82538/gen.1.6/echidna.out, parade.82538/gen.2.3/echidna.out, parade.82538/gen.2.7/echidna.out, parade.82538/gen.2.0/echidna.out\n========================================\nassertion in test_long_64: failed!💥  \nFAILED 9 TIMES\nSee: parade.82538/gen.1.2/echidna.out, parade.82538/gen.2.4/echidna.out, parade.82538/gen.2.3/echidna.out, parade.82538/gen.2.7/echidna.out, parade.82538/gen.2.0/echidna.out, parade.82538/gen.2.1/echidna.out, parade.82538/gen.2.5/echidna.out, parade.82538/gen.2.2/echidna.out, parade.82538/gen.2.6/echidna.out\n========================================\nassertion in test_long_128: failed!💥  \nFAILED 11 TIMES\nSee: parade.82538/gen.1.2/echidna.out, parade.82538/gen.1.0/echidna.out, parade.82538/gen.1.1/echidna.out, parade.82538/gen.2.4/echidna.out, parade.82538/gen.2.3/echidna.out, parade.82538/gen.2.7/echidna.out, parade.82538/gen.2.0/echidna.out, parade.82538/gen.2.1/echidna.out, parade.82538/gen.2.5/echidna.out, parade.82538/gen.2.2/echidna.out, parade.82538/gen.2.6/echidna.out\n```\n\nA more detailed explanation on how to perform smart contract fuzzing at scale using echidna-parade is available [here](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/smart-contract-fuzzing-at-scale.md). \n\n## Installation\n\nBefore starting, make sure Echidna is [installed](https://github.com/crytic/echidna#installation). Then, just use pip to install echidna-parade:\n\n\n```\n$ pip3 install echidna-parade\n```\n\nor from this repository:\n\n```\n$ git clone https://github.com/crytic/echidna-parade\n$ cd echidna-parade\n$ pip3 install . --user\n```\n\n## Getting help\n\nFeel free to stop by our #ethereum slack channel in [Empire Hacking](https://empireslacking.herokuapp.com/) for help using or extending echidna-parade.\nAlso, considering [emailing](mailto:echidna-dev@trailofbits.com) the Echidna development team directly for more detailed questions\n\n## License\n\nEchidna-parade is licensed and distributed under the [AGPLv3 license](https://github.com/crytic/echidna-parade/blob/main/LICENSE).\n\n## Publications\n\n### Trail of Bits\n- [echidna-parade: A Tool for Diverse Multicore Smart Contract Fuzzing](https://agroce.github.io/issta21.pdf), Alex Groce, Gustavo Grieco- ISSTA '21\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrytic%2Fechidna-parade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrytic%2Fechidna-parade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrytic%2Fechidna-parade/lists"}