Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/crytic/echidna
Vulnerability AnalysisFuzzing
GitHubcrytic/echidna

echidna

이더리움 스마트 계약 퍼저

저장소 보기웹사이트
3.2k4325일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Echidna: 빠른 스마트 계약 퍼저

Build Status

Echidna는 벌레를 먹고 높은 전기 감수성을 가진 이상한 생물입니다 (Jacob Stanley에게 사과드립니다)

좀 더 진지하게, Echidna는 이더리움 스마트 계약의 퍼징/속성 기반 테스트를 위해 설계된 Haskell 프로그램입니다. 이 프로그램은 계약 ABI를 기반으로 하는 정교한 문법 기반 퍼징 캠페인을 사용하여 사용자 정의 조건자 또는 Solidity 어설션을 위조합니다. Echidna는 모듈성을 염두에 두고 설계되었으므로 새로운 변형을 추가하거나 특정 경우에 특정 계약을 테스트하도록 쉽게 확장할 수 있습니다.

기능

  • 실제 코드에 맞게 조정된 입력 생성
  • 더 깊은 버그를 찾기 위한 선택적 코퍼스 수집, 변형 및 커버리지 안내
  • Slither를 기반으로 퍼징 캠페인 전에 유용한 정보 추출
  • 퍼징 캠페인 후 적용된 줄을 식별하는 소스 코드 통합
  • 대화형 터미널 UI, 텍스트 전용 또는 JSON 출력
  • 빠른 분류를 위한 자동 테스트 케이스 최소화
  • 개발 워크플로우에 원활한 통합

.. 그리고 아름다운 고해상도 수제 로고.

사용법

테스트 러너 실행

핵심 Echidna 기능은 echidna라는 실행 파일로, 계약과 불변 조건(항상 참이어야 하는 속성) 목록을 입력으로 사용합니다. 각 불변 조건에 대해 계약에 대한 임의의 호출 시퀀스를 생성하고 불변 조건이 유지되는지 확인합니다. 불변 조건을 위조할 방법을 찾으면 그렇게 하는 호출 시퀀스를 출력합니다. 찾지 못하면 계약이 안전하다는 일부 확신을 얻을 수 있습니다.

불변 조건 작성

불변 조건은 이름이 echidna_로 시작하고 인수가 없으며 부울을 반환하는 Solidity 함수로 표현됩니다. 예를 들어, 절대 20 아래로 내려가서는 안 되는 balance 변수가 있는 경우 다음과 같이 계약에 추가 함수를 작성할 수 있습니다:```solidity function echidna_check_balance() public returns (bool) { return(balance >= 20); }

root@kitploit:~
이 불변 조건들을 확인하려면, 실행하세요:```sh
$ echidna myContract.sol

테스트가 포함된 예제 컨트랙트는 tests/solidity/basic/flags.sol에서 찾을 수 있습니다. 실행하려면 다음을 실행하세요:```sh $ echidna tests/solidity/basic/flags.sol

root@kitploit:~
Echidna는 `echidna_sometimesfalse`를 거짓으로 만드는 호출 시퀀스를 찾아야 하며, `echidna_alwaystrue`에 대한 거짓 입력을 찾을 수 없어야 합니다.

### 테스트 모드

위 예제는 기본 **property** 모드를 사용하지만, Echidna는 설정 파일의 `testMode` 또는 CLI의 `--test-mode`를 통해 여러 테스트 모드를 지원합니다:

* **`property`** (기본값): `bool`을 반환하는 `echidna_` 접두사 함수를 테스트합니다.
* **`assertion`**: `assert()` 및 Foundry의 `assertX` 헬퍼(`assertTrue`, `assertEq` 등)에서 발생하는 단언 실패를 감지합니다.
* **`foundry`**: Foundry 스타일의 `test` 접두사 단위 테스트와 `invariant_` 접두사 상태 유지 불변 조건을 실행합니다.
* **`overflow`**: 정수 오버플로/언더플로를 감지합니다(Solidity >= 0.8.0).
* **`optimization`**: `int256`을 반환하는 `echidna_` 접두사 함수의 반환 값을 최대화합니다(property 모드와 동일한 설정 가능한 접두사를 사용합니다).
* **`exploration`**: 속성을 확인하지 않고 커버리지를 수집합니다.

### 커버리지 수집 및 시각화

캠페인을 완료한 후, Echidna는 `corpusDir` 설정 옵션으로 지정된 특수 디렉토리에 커버리지를 최대화하는 **코퍼스**를 저장할 수 있습니다. 이 디렉토리에는 두 가지 항목이 포함됩니다: (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 실행이 다른 오류(0으로 나누기, 어설션 실패 등)로 종료된 경우

스마트 계약 빌드 시스템 지원

Echidna는 crytic-compile을 사용하여 Foundry, Hardhat, Truffle 등 다양한 스마트 계약 빌드 시스템으로 컴파일된 계약을 테스트할 수 있습니다. 현재 컴파일 프레임워크로 Echidna를 호출하려면 echidna .을 사용하세요.

그 외에도 Echidna는 복잡한 계약을 테스트하는 두 가지 모드를 지원합니다. 첫째, 기존 네트워크 상태를 활용하여 Echidna의 기본 상태로 사용할 수 있습니다. 둘째, Echidna는 CLI에 해당 Solidity 소스를 전달하여 알려진 ABI를 가진 모든 계약을 호출할 수 있습니다. 이를 활성화하려면 구성에서 allContracts: true를 사용하세요.

Echidna용 단기 속성 코스

저희 Building Secure Smart Contracts 저장소에는 예제, 강의 및 연습 문제를 포함한 Echidna 단기 속성 코스가 포함되어 있습니다.

GitHub Actions 워크플로에서 Echidna 사용하기

GitHub Actions 워크플로의 일부로 echidna를 실행하는 데 사용할 수 있는 Echidna 액션이 있습니다. 사용 방법 및 예제는 crytic/echidna-action 저장소를 참조하세요.

구성 옵션

Echidna의 CLI를 사용하여 테스트할 계약을 선택하고 구성 파일을 로드할 수 있습니다.```sh $ echidna contract.sol --contract TEST --config config.yaml

root@kitploit:~
설정 파일은 사용자가 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는 세 가지 출력 드라이버를 지원합니다. 기본 `text` 드라이버, `json` 드라이버, 그리고 모든 `stdout` 출력을 억제하는 `none` 드라이버가 있습니다. 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는 특정 커버리지 증가 호출을 설명하는 딕셔너리입니다. 이러한 인터페이스는 향후 조금 더 사용자 친화적으로 변경될 수 있습니다. 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

root@kitploit:~
이것은 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)에서 계승되었으며, 일부는 설계/성능 결정 또는 단순히 코드의 버그로 인한 결과입니다. 여기에 해당 이슈와 상태("wont fix", "on hold", "in review", "fixed")를 함께 나열합니다. "fixed"인 이슈는 다음 Echidna 릴리스에 포함될 예정입니다.

| 설명 | 이슈 | 상태 |
| :---        | :---: | :---:  |
| 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를 빠르게 테스트하려면, Ubuntu에서 빌드된 정적으로 링크된 Linux 바이너리와 대부분 정적으로 링크된 MacOS 바이너리를 [릴리스 페이지](https://github.com/crytic/echidna/releases)에서 제공합니다. [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를 사용하기에 작지만 충분히 유연한 이미지입니다. 200MB 미만의 크기로 사전 빌드된 `echidna` 버전과 `slither`, `crytic-compile`, `solc-select`, `nvm`, `foundry`(`forge`, `cast`, `anvil`, `chisel` 포함)를 제공합니다.

컨테이너 이미지는 현재 x86 시스템에서만 빌드됩니다. CPU 에뮬레이션으로 인한 성능 저하가 발생하므로 Mac M1 시스템과 같은 ARM 장치에서 실행하는 것은 권장되지 않습니다.

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 .

root@kitploit:~
그런 다음, `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

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:~
### 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를 설치할 수 있습니다:```sh
$ nix-env -i -f https://github.com/crytic/echidna/tarball/master

flakes가 활성화된 상태에서, 이 저장소에서 바로 Echidna를 실행할 수 있습니다:```sh $ nix run github:crytic/echidna # master $ nix run github:crytic/echidna/v2.1.1 # specific ref (tag/branch/commit)

root@kitploit:~
non-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

root@kitploit:~
## 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) | 주문이 채워질 수 없으면 취소될 수도 없음 | Oct 2019
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | 주문이 0으로 부분 채워질 수 있으면, 하나의 토큰으로 부분 채워질 수도 있음 | Oct 2019
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | cobbdouglas 함수가 유효한 입력 매개변수를 사용해도 되돌아가지 않음 | Oct 2019
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | 공격자가 공개 풀에서 자산을 도난할 수 없음 | Jan 2020
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | 공격자가 joinPool로 무료 풀 토큰을 생성할 수 없음 | Jan 2020
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | joinPool-exitPool 호출이 무료 풀 토큰을 생성하지 않음 | Jan 2020
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | exitswapExternAmountOut 호출이 무료 자산을 생성하지 않음 | Jan 2020
[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) | Dec 2020
[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) | Dec 2020
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | 초기 상환이 예기치 않게 되돌아갈 수 있음 | Dec 2020
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | 상환 없이 상환해도 성공을 반환할 수 있음 | Dec 2020
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | 사용자가 보유한 것보다 더 많은 토큰을 전송할 수 있음 | Nov 2020
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | 사용자 잔액이 총 공급량보다 클 수 있음 | Nov 2020
[Yield Protocol](https://github.com/trailofbits/publications/blob/master/reviews/YieldProtocol.pdf) | 토큰 매매에 대한 산술 계산이 부정확함 | Aug 2020

### 연구

또한 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) | July 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) | July 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 |

Echidna를 학술 작업에 사용하고 계신다면, [Crytic $10k 연구 상](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/)에 지원해 보세요.

## 도움 받기

Echidna 사용 또는 확장에 대한 도움을 위해 [Empire Hacking](https://slack.empirehacking.nyc/)의 #ethereum 슬랙 채널에 방문해 주세요.

* 이러한 간단한 [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)에 따라 사용 허가 및 배포됩니다.
도구 다운로드