Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
echidna — Fuzzer per smart contract Ethereum | Kitploit
Strumenti/GitHubGitHub/crytic/echidna
Analisi delle VulnerabilitàFuzzing
GitHubcrytic/echidna

echidna

Fuzzer per smart contract Ethereum

Vedi RepositorySito web
3.2k4326 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Echidna: Un Fuzzer Veloce per Smart Contract

Build Status

Echidna è una strana creatura che mangia bug ed è altamente elettrosensibile (con scuse a Jacob Stanley)

Più seriamente, Echidna è un programma Haskell progettato per il fuzzing/property-based testing di smart contract Ethereum. Utilizza sofisticate campagne di fuzzing basate su grammatiche a partire da un contratto ABI per falsificare predicati definiti dall'utente o asserzioni di Solidity. Abbiamo progettato Echidna con modularità in mente, in modo che possa essere facilmente esteso per includere nuove mutazioni o testare contratti specifici in casi specifici.

Features

  • Genera input su misura per il tuo codice effettivo
  • Raccolta facoltativa del corpus, mutazione e guida alla copertura per trovare bug più profondi
  • Alimentato da Slither per estrarre informazioni utili prima della campagna di fuzzing
  • Integrazione con il codice sorgente per identificare quali righe sono coperte dopo la campagna di fuzzing
  • Interfaccia utente interattiva nel terminale, output solo testo o JSON
  • Minimizzazione automatica dei casi di test per un triage rapido
  • Integrazione senza soluzione di continuità nel flusso di lavoro di sviluppo

.. e un bellissimo logo artigianale ad alta risoluzione.

Usage

Esecuzione del test runner

La funzionalità principale di Echidna è un eseguibile chiamato echidna, che prende in input un contratto e una lista di invarianti (proprietà che dovrebbero rimanere sempre vere). Per ogni invariante, genera sequenze casuali di chiamate al contratto e verifica se l'invariante è soddisfatta. Se riesce a trovare un modo per falsificare l'invariante, stampa la sequenza di chiamate che lo fa. Se non ci riesce, hai una certa garanzia che il contratto sia sicuro.

Scrivere invarianti

Le invarianti sono espresse come funzioni Solidity con nomi che iniziano con echidna_, non hanno argomenti e restituiscono un booleano. Ad esempio, se hai una variabile balance che non dovrebbe mai scendere sotto 20, puoi scrivere una funzione aggiuntiva nel tuo contratto come questa:```solidity function echidna_check_balance() public returns (bool) { return(balance >= 20); }

root@kitploit:~
Per verificare questi invarianti, esegui:```sh
$ echidna myContract.sol

Un esempio di contratto con test può essere trovato tests/solidity/basic/flags.sol. Per eseguirlo, dovresti eseguire:```sh $ echidna tests/solidity/basic/flags.sol

root@kitploit:~
Echidna dovrebbe trovare una sequenza di chiamate che falsifichi `echidna_sometimesfalse` e dovrebbe essere impossibilitata a trovare un input falsificante per `echidna_alwaystrue`.

### Modalità di test

L'esempio precedente usa la modalità predefinita **property**, ma Echidna supporta diverse modalità di test, configurabili tramite `testMode` nel file di configurazione o `--test-mode` nella riga di comando:

* **`property`** (predefinita): Testa le funzioni con prefisso `echidna_` che restituiscono `bool`.
* **`assertion`**: Rileva fallimenti di asserzione da `assert()` e dagli helper `assertX` di Foundry (`assertTrue`, `assertEq`, ecc.).
* **`foundry`**: Esegue test unitari in stile Foundry con prefisso `test` e invarianti stateful con prefisso `invariant_`.
* **`overflow`**: Rileva overflow/underflow interi (Solidity >= 0.8.0).
* **`optimization`**: Massimizza il valore di ritorno delle funzioni con prefisso `echidna_` che restituiscono `int256` (usa lo stesso prefisso configurabile della modalità property).
* **`exploration`**: Raccoglie copertura senza verificare proprietà.

### Raccolta e visualizzazione della copertura

Dopo aver terminato una campagna, Echidna può salvare un **corpus** di copertura massimizzata in una directory speciale specificata con l'opzione di configurazione `corpusDir`. Questa directory conterrà due voci: (1) una directory chiamata `coverage` con file JSON che possono essere riprodotti da Echidna e (2) un file di testo semplice chiamato `covered.txt`, una copia del codice sorgente con annotazioni di copertura.

Se si esegue l'esempio `tests/solidity/basic/flags.sol`, Echidna salverà alcuni file di transazioni serializzate nella directory `coverage` e un file `covered.$(date +%s).txt` con le seguenti righe:```text
*r  |  function set0(int val) public returns (bool){
*   |    if (val % 100 == 0)
*   |      flag0 = false;
  }

*r  |  function set1(int val) public returns (bool){
*   |    if (val % 10 == 0 && !flag0)
*   |      flag1 = false;
  }

Il nostro strumento segnala ogni traccia di esecuzione nel corpus con il seguente "line marker":

  • * se un'esecuzione termina con uno STOP
  • r se un'esecuzione termina con un REVERT
  • o se un'esecuzione termina con un errore di out-of-gas
  • e se un'esecuzione termina con qualsiasi altro errore (divisione per zero, fallimento dell'asserzione, ecc.)

Supporto per sistemi di build di smart contract

Echidna può testare contratti compilati con diversi sistemi di build di smart contract, tra cui Foundry, Hardhat e Truffle, utilizzando crytic-compile. Per invocare Echidna con il framework di compilazione corrente, usa echidna ..

In aggiunta, Echidna supporta due modalità di test di contratti complessi. In primo luogo, è possibile sfruttare lo stato di rete esistente e usarlo come stato base per Echidna. In secondo luogo, Echidna può chiamare qualsiasi contratto con un ABI noto passando il corrispondente sorgente Solidity nella CLI. Usa allContracts: true nella tua configurazione per attivare questa funzionalità.

Corso accelerato su Echidna

Il nostro repository Building Secure Smart Contracts contiene un corso accelerato su Echidna, inclusi esempi, lezioni ed esercizi.

Utilizzare Echidna in un workflow di GitHub Actions

Esiste un'azione Echidna che può essere utilizzata per eseguire echidna come parte di un workflow di GitHub Actions. Fare riferimento al repository crytic/echidna-action per istruzioni ed esempi di utilizzo.

Opzioni di configurazione

La CLI di Echidna può essere utilizzata per scegliere il contratto da testare e caricare un file di configurazione.```sh $ echidna contract.sol --contract TEST --config config.yaml

root@kitploit:~
Il file di configurazione consente agli utenti di scegliere i parametri EVM e di generazione dei test. Un esempio di file di configurazione completo e annotato con le opzioni predefinite si trova in [tests/solidity/basic/default.yaml](https://github.com/crytic/echidna/blob/HEAD/tests/solidity/basic/default.yaml). Consultare la [documentazione](https://secure-contracts.com/program-analysis/echidna/configuration.html) per informazioni più dettagliate sulle opzioni di configurazione disponibili.

Echidna supporta tre diversi driver di output. Il driver predefinito `text`, un driver `json` e un driver `none`, che dovrebbe sopprimere tutto l'output `stdout`. Il driver JSON riporta l'intera campagna come segue.```
Campaign = {
  "success"      : bool,
  "error"        : string?,
  "tests"        : [Test],
  "seed"         : number,
  "coverage"     : Coverage
}
Test = {
  "contract"     : string,
  "name"         : string,
  "status"       : string,
  "error"        : string?,
  "testType"     : string,
  "transactions" : [Transaction]?
}
Transaction = {
  "contract"     : string,
  "function"     : string,
  "arguments"    : [string]?,
  "gas"          : number,
  "gasprice"     : number
}

Coverage è un dict che descrive alcune chiamate che aumentano la copertura. Queste interfacce sono soggette a modifiche per diventare leggermente più intuitive in una data futura. testType sarà uno tra property, assertion, optimization, exploration, o call, e status assume sempre uno tra fuzzing, shrinking, solved, passed, o error.

Diagnostica dei Problemi di Performance

Un modo per diagnosticare i problemi di performance di Echidna è eseguire echidna con la profilazione attivata. Per eseguire Echidna con la profilazione di base, aggiungi +RTS -p -s al comando originale echidna:```sh $ nix develop # alternatively nix-shell $ cabal --enable-profiling run echidna -- ... +RTS -p -s $ less echidna.prof

root@kitploit:~
Questo produce un file di report (`echidna.prof`) che mostra quali funzioni consumano più CPU e memoria.

Se la profilazione di base non aiuta, puoi utilizzare [tecniche di profilazione più avanzate](https://languages.oup.com/redirect?url=https://haskell.foundation/hs-opt-handbook.github.io/src/Measurement_Observation/Haskell_Profiling/eventlog.html).

Cause comuni per problemi di prestazioni che abbiamo osservato:

- Funzioni costose chiamate in percorsi critici (hot paths)
- Costruttori di dati pigri che accumulano thunk
- Strutture dati inefficienti utilizzate in percorsi critici

Verificare questi aspetti è un buon punto di partenza. Se sospetti che un calcolo sia troppo pigro e perda memoria, puoi usare `force` da `Control.DeepSeq` per assicurarti che venga valutato.

## Limiti e problemi noti

L'emulazione e il test di EVM sono difficili. Echidna ha alcune limitazioni nell'ultima versione. Alcune di queste sono ereditate da [hevm](https://github.com/argotorg/hevm) mentre altre sono il risultato di decisioni di progettazione/prestazioni o semplicemente bug nel nostro codice. Li elenchiamo qui inclusi i relativi issue e lo stato ("wont fix", "on hold", "in review", "fixed"). I problemi "fixed" dovrebbero essere inclusi nella prossima versione di Echidna.

| Descrizione | Issue | Stato |
| :---        | :---: | :---:  |
| Il supporto per Vyper è limitato | [#652](https://github.com/crytic/echidna/issues/652) | *wont fix* |
| Supporto limitato delle librerie per i test | [#651](https://github.com/crytic/echidna/issues/651) | *wont fix* |

## Installazione

### Binari precompilati

Prima di iniziare, assicurati che Slither sia [installato](https://github.com/crytic/slither) (`pip3 install slither-analyzer --user`).
Se vuoi testare rapidamente Echidna su Linux o MacOS, forniamo binari Linux staticamente collegati costruiti su Ubuntu e binari MacOS per lo più statici nella nostra [pagina delle release](https://github.com/crytic/echidna/releases). Puoi anche ottenere lo stesso tipo di binari dalla nostra [pipeline CI](https://github.com/crytic/echidna/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush), basta cliccare sul commit per trovare i binari per Linux o MacOS.

### Homebrew (macOS / Linux)

Se hai Homebrew installato sul tuo Mac o Linux, puoi installare Echidna e tutte le sue dipendenze (Slither, crytic-compile) eseguendo `brew install echidna`.

Puoi anche compilare e installare l'ultimo codice del branch `master` eseguendo `brew install --HEAD echidna`.

Puoi ottenere ulteriori informazioni nella pagina della [Formula Homebrew per `echidna`](https://formulae.brew.sh/formula/echidna). La formula stessa è mantenuta come parte del [repository homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/echidna.rb).

### Container Docker

Se preferisci utilizzare un container Docker pre-costruito, dai un'occhiata al nostro [pacchetto docker](https://github.com/orgs/crytic/packages?repo_name=echidna), che viene automaticamente costruito tramite GitHub Actions. Il container `echidna` è basato su `ubuntu:noble` ed è pensato per essere un'immagine piccola ma abbastanza flessibile per utilizzare Echidna. Fornisce una versione pre-costruita di `echidna`, così come `slither`, `crytic-compile`, `solc-select`, `nvm` e `foundry` (inclusi `forge`, `cast`, `anvil` e `chisel`) sotto i 200 MB.

Nota che le immagini del container attualmente vengono costruite solo su sistemi x86. Eseguirle su dispositivi ARM, come i sistemi Mac M1, non è consigliato a causa della perdita di prestazioni dovuta all'emulazione della CPU.

Sono disponibili diversi tag per l'immagine del container Docker:

| Tag           | Costruito nel tag
|---------------|-----------------
| `vx.y.z`      | Build corrispondente alla release `vx.y.z`
| `latest`      | Ultima release etichettata di Echidna.
| `edge`        | Commit più recente sul branch predefinito.
| `testing-foo` | Build di test basata sul branch `foo`.

Per eseguire il container con l'ultima versione di Echidna in modo interattivo, puoi usare un comando simile al seguente. Mapperà la directory corrente come `/src` all'interno del container e ti darà una shell in cui puoi usare `echidna`:```sh
$ docker run --rm -it -v "$(pwd)":/src ghcr.io/crytic/echidna/echidna

Altrimenti, se desideri compilare localmente l'ultima versione di Echidna, ti consigliamo di utilizzare Docker. All'interno di un clone di questo repository, esegui il seguente comando per creare l'immagine del container Docker:```sh $ docker build -t echidna -f docker/Dockerfile --target final-ubuntu .

root@kitploit:~
Quindi, puoi eseguire l'immagine `echidna` localmente. Ad esempio, per installare solc 0.5.7 e controllare `tests/solidity/basic/flags.sol`, puoi eseguire:```sh
$ docker run -it -v "$(pwd)":/src echidna bash -c "solc-select install 0.5.7 && solc-select use 0.5.7 && echidna /src/tests/solidity/basic/flags.sol"

L'immagine Docker include anche gli strumenti Foundry per lo sviluppo e il test completi di smart contract. È possibile utilizzare forge, cast, anvil e chisel direttamente nel contenitore:```sh

Run an interactive shell with Foundry tools available

$ docker run -it -v "$(pwd)":/src echidna bash

Inside the container, you can use Foundry commands:

$ forge --version $ cast --version $ anvil --version $ chisel --version

Example: Initialize a new Foundry project

$ forge init my-project $ cd my-project $ forge build $ forge test

root@kitploit:~
### Compilare con Stack

Se preferisci compilare dal codice sorgente, usa [Stack](https://docs.haskellstack.org/en/stable/). `stack install` dovrebbe compilare e produrre `echidna` in `~/.local/bin`. Dovrai linkare contro libreadline e libsecp256k1 (compilato con recovery abilitato), che dovrebbero essere installati con il gestore di pacchetti di tua scelta. Dovrai anche installare l'ultima release di [libff](https://github.com/scipr-lab/libff). Fai riferimento ai nostri [test CI](https://github.com/crytic/echidna/blob/HEAD/.github/scripts/install-libff.sh) per una guida.

Alcune distribuzioni Linux non includono librerie statiche per alcune cose di cui Haskell ha bisogno, ad esempio Arch Linux, il che farà fallire `stack build` con errori di linking perché usiamo il flag `-static`. In tal caso, usa `--flag echidna:-static` per produrre un binario linkato dinamicamente.

Se ottieni errori di compilazione relativi al linking, prova a modificare `--extra-include-dirs` e `--extra-lib-dirs`.

### Compilare con Nix (funziona nativamente su sistemi Apple M1)

[Gli utenti di Nix](https://nixos.org/download/) possono installare l'ultima Echidna con:

nix-env -i -f https://github.com/crytic/echidna/tarball/master

root@kitploit:~
$ nix-env -i -f https://github.com/crytic/echidna/tarball/master
```
Con flakes abilitato, puoi eseguire Echidna direttamente da questo repo:```sh
$ nix run github:crytic/echidna # master
$ nix run github:crytic/echidna/v2.1.1 # specific ref (tag/branch/commit)
```
Per creare una release standalone per sistemi macOS non-Nix, il seguente procedimento compilerà Echidna in un binario per lo più statico. Questo può essere utilizzato anche su sistemi Linux per produrre un binario completamente statico.```sh
$ nix build .#echidna-redistributable
```
Nix installerà automaticamente tutte le dipendenze necessarie per lo sviluppo, incluse `crytic-compile` e `solc`. Un modo rapido per iniziare a sviluppare Echidna:```sh
$ git clone https://github.com/crytic/echidna
$ cd echidna
$ nix develop # alternatively nix-shell
[nix-shell]$ cabal run echidna
[nix-shell]$ cabal run tests
[nix-shell]$ cabal new-repl
```
## Uso pubblico di Echidna

### Suite di testing delle proprietà

Questo è un elenco parziale di progetti di smart contract che utilizzano Echidna per i test:

* [Curvance](https://github.com/curvance/Curvance-CantinaCompetition/tree/CodeFAQAndAdjustments/tests/fuzzing)
* [Primitive](https://github.com/primitivefinance/rmm-core/tree/main/contracts/crytic)
* [Uniswap-v3](https://github.com/search?q=org%3AUniswap+echidna&type=commits)
* [Balancer](https://github.com/balancer/balancer-core/tree/master/echidna)
* [MakerDAO vest](https://github.com/makerdao/dss-vest/pull/16)
* [Optimism DAI Bridge](https://github.com/makerdao/optimism-dai-bridge/blob/master/contracts/test/DaiEchidnaTest.sol)
* [WETH10](https://github.com/WETH10/WETH10/tree/main/contracts/fuzzing)
* [Yield](https://github.com/yieldprotocol/fyDai/pull/312)
* [Convexity Protocol](https://github.com/opynfinance/ConvexityProtocol/tree/dev/contracts/echidna)
* [Aragon Staking](https://github.com/aragon/staking/blob/82bf54a3e11ec4e50d470d66048a2dd3154f940b/packages/protocol/contracts/test/lib/EchidnaStaking.sol)
* [Centre Token](https://github.com/circlefin/stablecoin-evm/tree/release-2024-03-15T223309/echidna_tests)
* [Tokencard](https://github.com/tokencard/contracts/tree/master/tools/echidna)
* [Minimalist USD Stablecoin](https://github.com/usmfum/USM/pull/41)

### Revisioni di sicurezza

Di seguito sono riportate le revisioni di sicurezza pubbliche che hanno utilizzato Echidna per scoprire vulnerabilità

- [Advanced Blockchain](https://github.com/trailofbits/publications/blob/master/reviews/AdvancedBlockchain.pdf)
- [Amp](https://github.com/trailofbits/publications/blob/master/reviews/amp.pdf)
- [Ampleforth](https://github.com/trailofbits/publications/blob/master/reviews/ampleforth.pdf)
- [Atlendis](https://github.com/trailofbits/publications/blob/master/reviews/2023-03-atlendis-atlendissmartcontracts-securityreview.pdf)
- [Balancer](https://github.com/trailofbits/publications/blob/master/reviews/2021-04-balancer-balancerv2-securityreview.pdf)
- [Basis](https://github.com/trailofbits/publications/blob/master/reviews/basis.pdf)
- [Dai](https://github.com/trailofbits/publications/blob/master/reviews/mc-dai.pdf)
- [Frax](https://github.com/trailofbits/publications/blob/master/reviews/FraxQ22022.pdf)
- [Liquity](https://github.com/trailofbits/publications/blob/master/reviews/LiquityProtocolandStabilityPoolFinalReport.pdf)
- [LooksRare](https://github.com/trailofbits/publications/blob/master/reviews/LooksRare.pdf)
- [Maple](https://github.com/trailofbits/publications/blob/master/reviews/2022-03-maplefinance-securityreview.pdf)
- [Optimism](https://github.com/trailofbits/publications/blob/master/reviews/2022-11-optimism-securityreview.pdf)
- [Opyn](https://github.com/trailofbits/publications/blob/master/reviews/Opyn.pdf)
- [Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf)
- [Origin](https://github.com/trailofbits/publications/blob/master/reviews/origin.pdf)
- [Paxos](https://github.com/trailofbits/publications/blob/master/reviews/paxos.pdf)
- [Primitive](https://github.com/trailofbits/publications/blob/master/reviews/Primitive.pdf)
- [RocketPool](https://github.com/trailofbits/publications/blob/master/reviews/RocketPool.pdf)
- [Seaport](https://github.com/trailofbits/publications/blob/master/reviews/SeaportProtocol.pdf)
- [Set Protocol](https://github.com/trailofbits/publications/blob/master/reviews/setprotocol.pdf)
- [Shell protocol](https://github.com/trailofbits/publications/blob/master/reviews/ShellProtocolv2.pdf)
- [Sherlock](https://github.com/trailofbits/publications/blob/master/reviews/Sherlockv2.pdf)
- [Pegasys Pantheon](https://github.com/trailofbits/publications/blob/master/reviews/pantheon.pdf)
- [TokenCard](https://github.com/trailofbits/publications/blob/master/reviews/TokenCard.pdf)
- [Uniswap](https://github.com/trailofbits/publications/blob/master/reviews/UniswapV3Core.pdf)
- [Yearn](https://github.com/trailofbits/publications/blob/master/reviews/YearnV2Vaults.pdf)
- [Yield](https://github.com/trailofbits/publications/blob/master/reviews/YieldProtocol.pdf)
- [88mph](https://github.com/trailofbits/publications/blob/master/reviews/88mph.pdf)
- [0x](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf)

### Trofei

Le seguenti vulnerabilità di sicurezza sono state trovate da Echidna. Se hai trovato una vulnerabilità di sicurezza utilizzando il nostro strumento, invia una PR con le informazioni pertinenti.

| Progetto | Vulnerabilità | Data |
|--|--|--|
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | Se un ordine non può essere evaso, non può essere annullato | Ott 2019
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | Se un ordine può essere parzialmente evaso con zero, può essere parzialmente evaso con un token | Ott 2019
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | La funzione cobbdouglas non esegue il revert quando vengono utilizzati parametri di input validi | Ott 2019
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | Un utente malintenzionato non può rubare asset da un pool pubblico | Gen 2020
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | Un utente malintenzionato non può generare pool token gratuiti con joinPool | Gen 2020
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | Chiamare joinPool-exitPool non porta a pool token gratuiti | Gen 2020
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) |  Chiamare exitswapExternAmountOut non porta ad asset gratuiti | Gen 2020
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | [Chiudere i troves richiede di detenere l'intero importo di LUSD coniato](https://github.com/liquity/dev/blob/echidna_ToB_final/packages/contracts/contracts/TestContracts/E2E.sol#L242-L298) | Dic 2020
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | [I troves possono essere rimossi in modo improprio](https://github.com/liquity/dev/blob/echidna_ToB_final/packages/contracts/contracts/TestContracts/E2E.sol#L242-L298) | Dic 2020
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | Il riscatto iniziale può restituire un revert inaspettato | Dic 2020
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | Il riscatto senza rimborsi potrebbe comunque restituire successo | Dic 2020
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | Gli utenti possono trasferire più token di quanti ne abbiano | Nov 2020
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | I saldi degli utenti possono essere superiori alla fornitura totale | Nov 2020
[Yield Protocol](https://github.com/trailofbits/publications/blob/master/reviews/YieldProtocol.pdf) | Il calcolo aritmetico per l'acquisto e la vendita di token è impreciso | Ago 2020

### Ricerca

Possiamo anche usare Echidna per riprodurre esempi di ricerca da articoli sul fuzzing di smart contract per mostrare quanto velocemente possa trovare la soluzione. Tutti questi possono essere risolti in pochi secondi o uno o due minuti su un computer portatile.

| Fonte | Codice
|--|--
[Using automatic analysis tools with MakerDAO contracts](https://forum.openzeppelin.com/t/using-automatic-analysis-tools-with-makerdao-contracts/1021) | [SimpleDSChief](https://github.com/crytic/echidna/blob/master/tests/solidity/research/vera_dschief.sol)
[Integer precision bug in Sigma Prime](https://github.com/muellerberndt/sabre#example-2-integer-precision-bug) | [VerifyFunWithNumbers](https://github.com/crytic/echidna/blob/master/tests/solidity/research/solcfuzz_funwithnumbers.sol)
[Learning to Fuzz from Symbolic Execution with Application to Smart Contracts](https://files.sri.inf.ethz.ch/website/papers/ccs19-ilf.pdf) | [Crowdsale](https://github.com/crytic/echidna/blob/master/tests/solidity/research/ilf_crowdsale.sol)
[Harvey: A Greybox Fuzzer for Smart Contracts](https://arxiv.org/abs/1905.06944) | [Foo](https://github.com/crytic/echidna/blob/master/tests/solidity/research/harvey_foo.sol), [Baz](https://github.com/crytic/echidna/blob/master/tests/solidity/research/harvey_baz.sol)

### Pubblicazioni Accademiche

| Titolo del documento | Sede | Data di pubblicazione |
| --- | --- | --- |
| [echidna-parade: Diverse multicore smart contract fuzzing](https://agroce.github.io/issta21.pdf) | [ISSTA 2021](https://conf.researchr.org/home/issta-2021) | Luglio 2021 |
| [Echidna: Effective, usable, and fast fuzzing for smart contracts](https://agroce.github.io/issta20.pdf) | [ISSTA 2020](https://conf.researchr.org/home/issta-2020) | Luglio 2020 |
| [Echidna: A Practical Smart Contract Fuzzer](https://github.com/trailofbits/publications/blob/master/papers/echidna_fc_poster.pdf) | [FC 2020](https://fc20.ifca.ai/program.html) | Feb 2020 |

Se stai utilizzando Echidna per lavori accademici, considera di candidarti al [Crytic $10k Research Prize](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/).

## Come ottenere aiuto

Sentiti libero di passare dal nostro canale slack #ethereum in [Empire Hacking](https://slack.empirehacking.nyc/) per ricevere aiuto sull'uso o l'estensione di Echidna.

* Inizia rivedendo questi semplici [invarianti di Echidna](https://github.com/crytic/echidna/blob/HEAD/tests/solidity/basic/flags.sol)

* Valuta di [inviare un'email](mailto:[email protected]) al team di sviluppo di Echidna per domande più dettagliate

## Licenza

Echidna è concesso in licenza e distribuito sotto la [licenza AGPLv3](https://github.com/crytic/echidna/blob/master/LICENSE).
Scarica lo strumento