

Echidna एक अजीब प्राणी है जो बग खाता है और अत्यधिक इलेक्ट्रोसेंसिटिव है (जैकब स्टेनली से क्षमा सहित)
अधिक गंभीरता से, Echidna एक Haskell प्रोग्राम है जिसे Ethereum स्मार्ट अनुबंधों के फ़ज़िंग/गुण-आधारित परीक्षण के लिए डिज़ाइन किया गया है। यह उपयोगकर्ता-परिभाषित विधेय या Solidity अभिकथनों को गलत साबित करने के लिए अनुबंध ABI पर आधारित परिष्कृत व्याकरण-आधारित फ़ज़िंग अभियानों का उपयोग करता है। हमने Echidna को मॉड्यूलरिटी को ध्यान में रखते हुए डिज़ाइन किया है, ताकि इसे नए म्यूटेशन शामिल करने या विशिष्ट मामलों में विशिष्ट अनुबंधों का परीक्षण करने के लिए आसानी से विस्तारित किया जा सके।
.. और एक सुंदर उच्च-रिज़ॉल्यूशन हस्तनिर्मित लोगो।
Echidna की मुख्य कार्यक्षमता एक निष्पादन योग्य है जिसे echidna कहा जाता है, जो इनपुट के रूप में एक अनुबंध और अपरिवर्तनीयताओं (गुण जो हमेशा सत्य रहने चाहिए) की सूची लेता है। प्रत्येक अपरिवर्तनीयता के लिए, यह अनुबंध पर कॉल के यादृच्छिक अनुक्रम उत्पन्न करता है और जाँचता है कि अपरिवर्तनीयता कायम है या नहीं। यदि यह अपरिवर्तनीयता को गलत साबित करने का कोई तरीका ढूँढ सकता है, तो यह ऐसा करने वाले कॉल अनुक्रम को प्रिंट करता है। यदि यह नहीं कर सकता, तो आपको कुछ आश्वासन है कि अनुबंध सुरक्षित है।
अपरिवर्तनीयताओं को Solidity फ़ंक्शन के रूप में व्यक्त किया जाता है जिनके नाम echidna_ से शुरू होते हैं, कोई तर्क नहीं होते हैं, और एक बूलियन लौटाते हैं। उदाहरण के लिए, यदि आपके पास कुछ 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` के लिए कोई गलत साबित करने वाला इनपुट न ढूंढ पाए।
### परीक्षण मोड
उपरोक्त उदाहरण डिफ़ॉल्ट **प्रॉपर्टी** मोड का उपयोग करता है, लेकिन 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` लौटाते हैं (प्रॉपर्टी मोड के समान कॉन्फ़िगर करने योग्य उपसर्ग का उपयोग करता है)।
* **`exploration`**: बिना प्रॉपर्टी जाँच के कवरेज एकत्र करें।
### कवरेज एकत्र करना और विज़ुअलाइज़ करना
एक अभियान समाप्त करने के बाद, Echidna एक विशेष निर्देशिका में कवरेज-अधिकतम **कॉर्पस** सहेज सकता है, जिसे `corpusDir` कॉन्फ़िग विकल्प से निर्दिष्ट किया जाता है। इस निर्देशिका में दो प्रविष्टियाँ होंगी: (1) `coverage` नामक एक निर्देशिका जिसमें JSON फ़ाइलें होंगी जिन्हें Echidna द्वारा पुनः चलाया जा सकता है और (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 यदि निष्पादन out-of-gas त्रुटि के साथ समाप्त हुआe यदि निष्पादन किसी अन्य त्रुटि (शून्य विभाजन, अभिकथन विफलता, आदि) के साथ समाप्त हुआEchidna विभिन्न स्मार्ट कॉन्ट्रैक्ट बिल्ड सिस्टम के साथ संकलित कॉन्ट्रैक्ट का परीक्षण कर सकता है, जिसमें Foundry, Hardhat, और Truffle शामिल हैं, crytic-compile का उपयोग करके। वर्तमान संकलन ढांचे के साथ Echidna को लागू करने के लिए, echidna . का उपयोग करें।
इसके अलावा, Echidna जटिल कॉन्ट्रैक्ट के परीक्षण के दो मोड का समर्थन करता है। पहला, कोई मौजूदा नेटवर्क स्थिति का लाभ उठा सकता है और इसे 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 तीन अलग-अलग आउटपुट ड्राइवरों का समर्थन करता है। डिफ़ॉल्ट `text` ड्राइवर, एक `json` ड्राइवर, और एक `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
यह एक रिपोर्ट फ़ाइल (`echidna.prof`) उत्पन्न करता है, जो दिखाती है कि कौन से फ़ंक्शन सबसे अधिक CPU और मेमोरी उपयोग करते हैं।
यदि बुनियादी प्रोफाइलिंग मदद नहीं करती, तो आप अधिक [उन्नत प्रोफाइलिंग तकनीकों](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 फ़ॉर्मूला](https://formulae.brew.sh/formula/echidna) पृष्ठ पर और अधिक जानकारी प्राप्त कर सकते हैं। फ़ॉर्मूला स्वयं [homebrew-core रिपॉजिटरी](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/echidna.rb) के भाग के रूप में बनाए रखा जाता है।
### Docker कंटेनर
यदि आप पूर्व-निर्मित Docker कंटेनर का उपयोग करना पसंद करते हैं, तो हमारे [docker पैकेज](https://github.com/orgs/crytic/packages?repo_name=echidna) को देखें, जो GitHub Actions के माध्यम से स्वचालित रूप से बनाया जाता है। `echidna` कंटेनर `ubuntu:noble` पर आधारित है और इसे Echidna का उपयोग करने के लिए एक छोटी लेकिन पर्याप्त लचीली छवि बनाने का इरादा है। यह `echidna` के साथ-साथ `slither`, `crytic-compile`, `solc-select`, `nvm`, और `foundry` (जिसमें `forge`, `cast`, `anvil`, और `chisel` शामिल हैं) का पूर्व-निर्मित संस्करण 200 MB से कम में प्रदान करता है।
ध्यान दें कि कंटेनर इमेज वर्तमान में केवल x86 सिस्टम पर बनती हैं। उन्हें ARM उपकरणों, जैसे Mac M1 सिस्टम पर चलाने की अनुशंसा नहीं की जाती है, क्योंकि CPU एमुलेशन के कारण प्रदर्शन हानि होती है।
Docker कंटेनर छवि के लिए विभिन्न टैग उपलब्ध हैं:
| टैग | निर्माण में टैग
|---------------|-------------
| `vx.y.z` | Release `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"
डॉकर इमेज में व्यापक स्मार्ट कॉन्ट्रैक्ट विकास और परीक्षण के लिए फाउंड्री उपकरण भी शामिल हैं। आप कंटेनर में सीधे 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 वितरण Haskell को जिन चीजों की आवश्यकता है, उनके लिए स्थैतिक लाइब्रेरी नहीं भेजते हैं, जैसे Arch Linux, जो `stack build` को लिंकिंग त्रुटियों के साथ विफल कर देगा क्योंकि हम `-static` फ्लैग का उपयोग करते हैं। उस स्थिति में, एक गतिशील रूप से लिंक किया गया बाइनरी उत्पन्न करने के लिए `--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
फ्लेक्स सक्षम के साथ, आप इस रिपॉजिटरी से सीधे Echidna चला सकते हैं:```sh $ nix run github:crytic/echidna # master $ nix run github:crytic/echidna/v2.1.1 # specific ref (tag/branch/commit)
नॉन-निक्स मैकओएस सिस्टम के लिए एक स्टैंडअलोन रिलीज़ बनाने के लिए, निम्नलिखित विधि का उपयोग करके 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) | यदि कोई ऑर्डर भरा नहीं जा सकता, तो उसे रद्द नहीं किया जा सकता | Oct 2019
[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) | 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 का उपयोग स्मार्ट कॉन्ट्रैक्ट फ़ज़िंग पेपर्स से शोध उदाहरणों को पुन: प्रस्तुत करने के लिए भी कर सकते हैं ताकि यह दिखाया जा सके कि यह कितनी जल्दी समाधान ढूंढ सकता है। इन सभी को लैपटॉप कंप्यूटर पर कुछ सेकंड से एक या दो मिनट में हल किया जा सकता है।
| स्रोत | कोड
|--|--
[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) के तहत लाइसेंस प्राप्त और वितरित किया जाता है।