
Echidnaはバグを食べる奇妙な生き物で、非常に電気感受性が高いです(Jacob Stanleyに謝罪します)
より真面目に言うと、Echidnaはイーサリアムスマートコントラクトのファジング/プロパティベーステストのために設計されたHaskellプログラムです。これは、コントラクトABIに基づいた洗練された文法ベースのファジングキャンペーンを使用して、ユーザー定義の述語やSolidityアサーションを反証します。Echidnaはモジュール性を考慮して設計されているため、新しい突然変異を追加したり、特定のケースで特定のコントラクトをテストするために簡単に拡張できます。
.. そして美しい高解像度の手作りロゴ。
Echidnaのコア機能は echidna という実行可能ファイルで、入力としてコントラクトと不変条件のリスト(常に真であるべきプロパティ)を受け取ります。各不変条件に対して、コントラクトへの呼び出しのランダムなシーケンスを生成し、不変条件が成立するかチェックします。不変条件を反証する方法を見つけた場合、その呼び出しシーケンスを出力します。見つけられなかった場合、コントラクトが安全であるというある程度の保証が得られます。
不変条件は、名前が echidna_ で始まり、引数がなく、ブール値を返すSolidity関数として表現されます。例えば、balance 変数が 20 を下回ってはいけない場合、コントラクト内に次のような追加の関数を記述できます:```solidity
function echidna_check_balance() public returns (bool) {
return(balance >= 20);
}
これらの不変条件を確認するには、実行してください:```sh
$ echidna myContract.sol
テスト付きのサンプルコントラクトはtests/solidity/basic/flags.solにあります。実行するには、次のコマンドを実行してください:```sh $ echidna tests/solidity/basic/flags.sol
Echidnaは`echidna_sometimesfalse`を偽造する呼び出しシーケンスを見つけ、`echidna_alwaystrue`の偽造入力を発見できないはずです。
### テストモード
上記の例ではデフォルトの**property**モードを使用していますが、Echidnaは設定ファイルの`testMode`またはCLIの`--test-mode`を介して設定される複数のテストモードをサポートしています。
* **`property`**(デフォルト): `echidna_`プレフィックスが付いた`bool`を返す関数をテストします。
* **`assertion`**: `assert()`およびFoundryの`assertX`ヘルパー(`assertTrue`、`assertEq`など)からのアサーション失敗を検出します。
* **`foundry`**: Foundryスタイルの`test`プレフィックスが付いたユニットテストと`invariant_`プレフィックスが付いた状態不変条件を実行します。
* **`overflow`**: 整数のオーバーフロー/アンダーフローを検出します(Solidity >= 0.8.0)。
* **`optimization`**: `echidna_`プレフィックスが付いた`int256`を返す関数の戻り値を最大化します(propertyモードと同じ設定可能なプレフィックスを使用)。
* **`exploration`**: プロパティをチェックせずにカバレッジを収集します。
### カバレッジの収集と可視化
キャンペーン終了後、Echidnaは`corpusDir`設定オプションで指定された特別なディレクトリに、カバレッジを最大化する**コーパス**を保存できます。このディレクトリには2つのエントリが含まれます。(1) Echidnaで再生可能なJSONファイルを含む`coverage`というディレクトリ、(2) カバレッジ注釈付きのソースコードのコピーである`covered.txt`というプレーンテキストファイルです。
`tests/solidity/basic/flags.sol`の例を実行すると、Echidnaは`coverage`ディレクトリにシリアル化されたトランザクションのファイルをいくつか保存し、`covered.$(date +%s).txt`というファイルに以下の行を含むファイルを保存します。```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;
}
本ツールは、コーパス内の各実行トレースを次の「ラインマーカー」で示します:
* 実行がSTOPで終了した場合r 実行がREVERTで終了した場合o 実行がガス切れエラーで終了した場合e 実行がその他のエラー(ゼロ除算、アサーション失敗など)で終了した場合Echidnaは、Foundry、Hardhat、Truffleなど、さまざまなスマートコントラクトビルドシステムでコンパイルされたコントラクトを、crytic-compileを使用してテストできます。現在のコンパイルフレームワークでEchidnaを起動するには、echidna . を使用します。
さらに、Echidnaは複雑なコントラクトをテストする2つのモードをサポートしています。第一に、既存のネットワーク状態を活用し、それをEchidnaのベース状態として使用できます。第二に、EchidnaはCLIで対応するSolidityソースを渡すことで、既知のABIを持つ任意のコントラクトを呼び出すことができます。これを有効にするには、設定で allContracts: true を使用します。
当リポジトリBuilding Secure Smart Contractsには、Echidnaのクラッシュコースが含まれており、例、レッスン、演習が用意されています。
Echidnaアクションがあり、GitHub Actionsワークフローの一部としてechidnaを実行するために使用できます。使用方法と例については、crytic/echidna-actionリポジトリを参照してください。
EchidnaのCLIを使用して、テストするコントラクトを選択し、設定ファイルを読み込むことができます。```sh $ echidna contract.sol --contract TEST --config config.yaml
設定ファイルにより、ユーザーはEVMとテスト生成パラメータを選択できます。デフォルトオプションを含む完全な注釈付き設定ファイルの例は、[tests/solidity/basic/default.yaml](https://github.com/crytic/echidna/blob/HEAD/tests/solidity/basic/default.yaml)にあります。利用可能な設定オプションの詳細については、[ドキュメント](https://secure-contracts.com/program-analysis/echidna/configuration.html)を参照してください。
Echidnaは3つの異なる出力ドライバーをサポートしています。デフォルトの`text`ドライバー、`json`ドライバー、および`none`ドライバーがあります。`none`ドライバーはすべての`stdout`出力を抑制するはずです。JSONドライバーはキャンペーン全体を次のように報告します。```
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 は、特定のカバレッジ向上呼び出しを記述する dict です。これらのインターフェースは後日、よりユーザーフレンドリーになるよう変更される可能性があります。testType は property、assertion、optimization、exploration、または call のいずれかになり、status は常に fuzzing、shrinking、solved、passed、または error のいずれかを取ります。
Echidna のパフォーマンス問題を診断する一つの方法は、プロファイリングを有効にして echidna を実行することです。基本的なプロファイリングで Echidna を実行するには、元の echidna コマンドに +RTS -p -s を追加します:```sh
$ nix develop # alternatively nix-shell
$ cabal --enable-profiling run echidna -- ... +RTS -p -s
$ less echidna.prof
これにより、CPUおよびメモリ使用量が最も多い関数を示すレポートファイル(`echidna.prof`)が生成されます。
基本的なプロファイリングで効果がない場合は、より[高度なプロファイリング手法](https://haskell.foundation/hs-opt-handbook.github.io/src/Measurement_Observation/Haskell_Profiling/eventlog.html)を使用できます。
これまでに確認されたパフォーマンス問題の一般的な原因は次のとおりです。
- ホットパスで呼び出されるコストのかかる関数
- サンクを蓄積する遅延データコンストラクタ
- ホットパスで使用される非効率的なデータ構造
これらの確認は良い出発点になります。計算が遅延しすぎてメモリリークが疑われる場合は、`Control.DeepSeq` の `force` を使用して評価を強制できます。
## 制限事項と既知の問題
EVMのエミュレーションとテストは困難です。Echidnaには最新リリースにおいていくつかの制限があります。これらの一部は[hevm](https://github.com/argotorg/hevm)から継承されたものであり、一部は設計/パフォーマンス上の判断、または単にコードのバグによるものです。以下に、対応するIssueとステータス("wont fix"、 "on hold"、 "in review"、 "fixed")を記載します。"fixed"のものは次のEchidnaリリースに含まれる予定です。
| 説明 | Issue | ステータス |
| :--- | :---: | :---: |
| Vyperのサポートは限定的 | [#652](https://github.com/crytic/echidna/issues/652) | *wont fix* |
| テスト用のライブラリサポートは限定的 | [#651](https://github.com/crytic/echidna/issues/651) | *wont fix* |
## インストール
### プリコンパイル済みバイナリ
開始する前に、Slitherが[インストール](https://github.com/crytic/slither)されていることを確認してください(`pip3 install slither-analyzer --user`)。
LinuxまたはMacOSでEchidnaをすばやくテストしたい場合、[リリースページ](https://github.com/crytic/echidna/releases)で、Ubuntu上でビルドされた静的にリンクされたLinuxバイナリと、ほとんど静的なMacOSバイナリを提供しています。また、同じタイプのバイナリを[CIパイプライン](https://github.com/crytic/echidna/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)から入手することもできます。コミットをクリックして、LinuxまたはMacOS用のバイナリを見つけてください。
### Homebrew(macOS / Linux)
MacまたはLinuxマシンにHomebrewがインストールされている場合、`brew install echidna` を実行することでEchidnaとそのすべての依存関係(Slither、crytic-compile)をインストールできます。
また、`brew install --HEAD echidna` を実行することで、最新の `master` ブランチのコードをコンパイルしてインストールすることもできます。
詳細については、[`echidna` Homebrew Formula](https://formulae.brew.sh/formula/echidna)のページを参照してください。Formula自体は[homebrew-coreリポジトリ](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/echidna.rb)の一部として管理されています。
### Dockerコンテナ
プリビルドされたDockerコンテナを使用したい場合は、GitHub Actionsを介して自動ビルドされる[dockerパッケージ](https://github.com/orgs/crytic/packages?repo_name=echidna)を確認してください。`echidna`コンテナは`ubuntu:noble`をベースにしており、Echidnaを使用するための小さくて柔軟なイメージになるように設計されています。プリビルドバージョンの`echidna`に加えて、`slither`、`crytic-compile`、`solc-select`、`nvm`、`foundry`(`forge`、`cast`、`anvil`、`chisel`を含む)が200MB未満で提供されます。
コンテナイメージは現在、x86システム上でのみビルドされます。Mac M1システムなどのARMデバイスでの実行は、CPUエミュレーションによるパフォーマンス低下のため推奨されません。
Dockerコンテナイメージにはさまざまなタグが用意されています。
| タグ | ビルドタグ内の説明
|---------------|-------------
| `vx.y.z` | リリース `vx.y.z` に対応するビルド
| `latest` | 最新のEchidnaタグ付きリリース。
| `edge` | デフォルトブランチの最新コミット。
| `testing-foo` | `foo` ブランチに基づくテストビルド。
最新のEchidnaバージョンで対話的にコンテナを実行するには、次のようなコマンドを使用できます。現在のディレクトリをコンテナ内の `/src` としてマッピングし、`echidna` を使用できるシェルを提供します。```sh
$ docker run --rm -it -v "$(pwd)":/src ghcr.io/crytic/echidna/echidna
それ以外の場合、Echidnaの最新バージョンをローカルでビルドしたい場合は、Dockerを使用することをお勧めします。このリポジトリのクローン内から、以下のコマンドを実行してDockerコンテナイメージをビルドしてください:```sh $ docker build -t echidna -f docker/Dockerfile --target final-ubuntu .
その後、`echidna` イメージをローカルで実行できます。例えば、solc 0.5.7 をインストールして `tests/solidity/basic/flags.sol` をチェックするには、次のように実行します:```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"
Dockerイメージには、包括的なスマートコントラクト開発とテストのためのFoundryツールも含まれています。コンテナ内でforge、cast、anvil、chiselを直接使用できます:```sh
$ docker run -it -v "$(pwd)":/src echidna bash
$ forge --version $ cast --version $ anvil --version $ chisel --version
$ forge init my-project $ cd my-project $ forge build $ forge test
### Stackを使用したビルド
ソースからビルドしたい場合は、[Stack](https://docs.haskellstack.org/en/stable/)を使用してください。`stack install` で `echidna` が `~/.local/bin` にビルドおよびコンパイルされます。libreadline と libsecp256k1(リカバリ有効でビルド)に対してリンクする必要があります。これらはお好みのパッケージマネージャでインストールできます。また、[libff](https://github.com/scipr-lab/libff) の最新リリースをインストールする必要があります。ガイダンスについては、[CIテスト](https://github.com/crytic/echidna/blob/HEAD/.github/scripts/install-libff.sh)を参照してください。
一部のLinuxディストリビューション(例:Arch Linux)では、Haskellが必要とする特定の静的ライブラリが提供されていないため、`-static` フラグを使用しているために `stack build` がリンクエラーで失敗します。その場合は、`--flag echidna:-static` を使用して動的にリンクされたバイナリを生成してください。
リンクに関連するビルドエラーが発生する場合は、`--extra-include-dirs` や `--extra-lib-dirs` を調整してみてください。
### Nixを使用したビルド(Apple M1システムでネイティブ動作)
[Nixユーザー](https://nixos.org/download/)は、最新のEchidnaを次のコマンドでインストールできます:
```bash
nix-env -if https://github.com/crytic/echidna/tarball/master
``````sh
$ nix-env -i -f https://github.com/crytic/echidna/tarball/master
フレークが有効になっている場合、このリポジトリから直接Echidnaを実行できます:```sh $ nix run github:crytic/echidna # master $ nix run github:crytic/echidna/v2.1.1 # specific ref (tag/branch/commit)
Nixを使用しないmacOSシステム向けのスタンドアロンリリースをビルドするには、以下の手順でEchidnaをほぼ静的なバイナリとしてビルドします。この方法はLinuxシステムでも使用でき、完全に静的なバイナリを生成できます。```sh
$ nix build .#echidna-redistributable
Nixは、開発に必要なすべての依存関係(crytic-compileやsolcを含む)を自動的にインストールします。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
## Echidnaの公開利用
### プロパティテストスイート
以下は、Echidnaを使用してテストを行っているスマートコントラクトプロジェクトの一部です。
* [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)
### セキュリティレビュー
以下は、Echidnaを使用して脆弱性を発見した公開セキュリティレビューです。
- [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)
### トロフィー
以下は、Echidnaによって発見されたセキュリティ脆弱性です。このツールを使用してセキュリティ脆弱性を発見した場合は、関連情報を含むPRを提出してください。
| プロジェクト | 脆弱性 | 日付 |
|--|--|--|
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | 注文が履行できない場合、キャンセルもできない | 2019年10月
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | 注文がゼロで部分的に履行できる場合、1トークンで部分的に履行できる | 2019年10月
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | cobbdouglas関数は、有効な入力パラメータが使用されてもリバートしない | 2019年10月
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | 攻撃者はパブリックプールから資産を盗むことができない | 2020年1月
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | 攻撃者はjoinPoolで無料のプールトークンを生成できない | 2020年1月
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | joinPool-exitPoolを呼び出しても無料のプールトークンは発生しない | 2020年1月
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | exitswapExternAmountOutを呼び出しても無料の資産は発生しない | 2020年1月
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | [トローヴを閉じるには、発行されたLUSDの全額を保持する必要がある](https://github.com/liquity/dev/blob/echidna_ToB_final/packages/contracts/contracts/TestContracts/E2E.sol#L242-L298) | 2020年12月
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | [トローヴが不適切に削除される可能性がある](https://github.com/liquity/dev/blob/echidna_ToB_final/packages/contracts/contracts/TestContracts/E2E.sol#L242-L298) | 2020年12月
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | 初期の償還が予期せずリバートする可能性がある | 2020年12月
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | 償還がない状態での償還が成功を返す可能性がある | 2020年12月
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | ユーザーは自身が保有する以上のトークンを転送できる | 2020年11月
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | ユーザーの残高が総供給量を超える可能性がある | 2020年11月
[Yield Protocol](https://github.com/trailofbits/publications/blob/master/reviews/YieldProtocol.pdf) | トークンの売買に関する算術計算が不正確 | 2020年8月
### 研究
また、Echidnaを使用してスマートコントラクトファジングに関する論文の研究例を再現し、いかに迅速に解決策を見つけられるかを示すこともできます。これらはすべて、ラップトップ上で数秒から1〜2分で解決できます。
| ソース | コード
|--|--
[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)
### 学術発表
| 論文タイトル | 会議 | 発表日 |
| --- | --- | --- |
| [echidna-parade: Diverse multicore smart contract fuzzing](https://agroce.github.io/issta21.pdf) | [ISSTA 2021](https://conf.researchr.org/home/issta-2021) | 2021年7月 |
| [Echidna: Effective, usable, and fast fuzzing for smart contracts](https://agroce.github.io/issta20.pdf) | [ISSTA 2020](https://conf.researchr.org/home/issta-2020) | 2020年7月 |
| [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) | 2020年2月 |
学術研究でEchidnaを使用している場合は、[Crytic $10k Research Prize](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/)への応募をご検討ください。
## ヘルプを得る
Echidnaの使用や拡張についてのヘルプは、[Empire Hacking](https://slack.empirehacking.nyc/)の#ethereum Slackチャンネルにお気軽にお立ち寄りください。
* これらのシンプルな[Echidna不変条件](https://github.com/crytic/echidna/blob/HEAD/tests/solidity/basic/flags.sol)のレビューから始めましょう。
* より詳細な質問については、Echidna開発チームに直接[メール](mailto:[email protected])でお問い合わせください。
## ライセンス
Echidnaは[AGPLv3ライセンス](https://github.com/crytic/echidna/blob/master/LICENSE)の下でライセンスおよび配布されています。