
مختبر العقود الذكية لإيثيريوم

إيكيدنا هو مخلوق غريب يأكل الحشرات وهو شديد الحساسية للكهرباء (مع اعتذار لجاكوب ستانلي)
بشكل أكثر جدية، إيكيدنا هو برنامج مكتوب بلغة هاسكل مصمم لاختبار التشويش/الاختبار القائم على الخصائص للعقود الذكية في إثيريوم. يستخدم حملات تشويش متطورة قائمة على القواعد النحوية بناءً على واجهة ABI للعقد لتزوير المسندات المحددة من قبل المستخدم أو تأكيدات Solidity. صممنا إيكيدنا مع مراعاة النمطية، بحيث يمكن توسيعه بسهولة ليشمل طفرات جديدة أو اختبار عقود محددة في حالات معينة.
.. وشعار جميل عالي الدقة مصنوع يدويًا.
الوظيفة الأساسية لإيكيدنا هي ملف تنفيذي يُسمى 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`.
### أوضاع الاختبار
المثال أعلاه يستخدم وضع **property** الافتراضي، لكن Echidna يدعم عدة أوضاع اختبار، يتم تكوينها عبر `testMode` في ملف الإعدادات أو `--test-mode` في سطر الأوامر:
* **`property`** (افتراضي): اختبار الدوال ذات البادئة `echidna_` التي ترجع `bool`.
* **`assertion`**: اكتشاف فشل التأكيدات من `assert()` ومساعدات Foundry `assertX` (`assertTrue`، `assertEq`، إلخ.).
* **`foundry`**: تشغيل اختبارات الوحدة ذات البادئة `test` على نمط Foundry والثوابت ذات الحالة ذات البادئة `invariant_`.
* **`overflow`**: اكتشاف تجاوز/نقص السعة الصحيحة (Solidity >= 0.8.0).
* **`optimization`**: تعظيم القيمة المرجعة للدوال ذات البادئة `echidna_` التي ترجع `int256` (تستخدم نفس البادئة القابلة للتكوين كوضع property).
* **`exploration`**: جمع التغطية دون التحقق من الخصائص.
### جمع التغطية وتصورها
بعد إنهاء حملة، يمكن لـ Echidna حفظ **corpus** معظِّم للتغطية في دليل خاص محدد بخيار الإعدادات `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;
}
أداتنا تشير إلى كل أثر تنفيذ في المجموعة باستخدام "علامة السطر" التالية:
* إذا انتهى التنفيذ بـ STOPr إذا انتهى التنفيذ بـ REVERTo إذا انتهى التنفيذ بخطأ نفاد الغازe إذا انتهى التنفيذ بأي خطأ آخر (القسمة على صفر، فشل التأكيد، إلخ)يمكن لـ Echidna اختبار العقود المترجمة بأنظمة بناء عقود ذكية مختلفة، بما في ذلك Foundry و Hardhat و Truffle، باستخدام crytic-compile. لاستدعاء Echidna مع إطار الترجمة الحالي، استخدم echidna ..
علاوة على ذلك، يدعم Echidna وضعين لاختبار العقود المعقدة. أولاً، يمكن الاستفادة من حالة الشبكة الحالية واستخدامها كحالة أساسية لـ Echidna. ثانيًا، يمكن لـ Echidna استدعاء أي عقد له ABI معروف عن طريق تمرير مصدر Solidity المقابل في واجهة سطر الأوامر. استخدم allContracts: true في إعداداتك لتفعيل ذلك.
يحتوي مستودعنا بناء عقود ذكية آمنة على دورة مكثفة حول Echidna، تتضمن أمثلة ودروسًا وتمارين.
يوجد إجراء Echidna يمكن استخدامه لتشغيل echidna كجزء من سير عمل GitHub Actions. يُرجى الرجوع إلى مستودع crytic/echidna-action للحصول على تعليمات الاستخدام والأمثلة.
يمكن استخدام واجهة سطر الأوامر الخاصة بـ Echidna لاختيار العقد المراد اختباره وتحميل ملف تهيئة.```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 هو قاموس يصف بعض المكالمات التي تزيد من التغطية. هذه الواجهات عرضة للتغيير لتصبح أكثر سهولة في الاستخدام في وقت لاحق. testType ستكون إحدى property، assertion، optimization، exploration، أو call، وstatus تأخذ دائماً إحدى fuzzing، shrinking، solved، passed، أو error.
إحدى طرق تشخيص مشاكل أداء Echidna هي تشغيل echidna مع تفعيل التنميط. لتشغيل Echidna مع التنميط الأساسي، أضف +RTS -p -s إلى أمر echidna الأصلي:```sh
$ nix develop # alternatively nix-shell
$ cabal --enable-profiling run echidna -- ... +RTS -p -s
$ less echidna.prof
ينتج عن ذلك ملف تقرير (`echidna.prof`)، يوضح الدوال التي تستهلك معظم استخدام وحدة المعالجة المركزية والذاكرة.
إذا لم يساعد التحليل الأساسي، يمكنك استخدام [تقنيات تحليل متقدمة](https://haskell.foundation/hs-opt-handbook.github.io/src/Measurement_Observation/Haskell_Profiling/eventlog.html).
الأسباب الشائعة لمشكلات الأداء التي لاحظناها:
- دوال مكلفة تُستدعى في المسارات الساخنة
- منشئات بيانات كسولة تتراكم فيها الكتل المؤجلة (thunks)
- هياكل بيانات غير فعالة تُستخدم في المسارات الساخنة
التحقق من هذه النقاط هو نقطة بداية جيدة. إذا كنت تشتبه في أن بعض العمليات الحسابية كسولة جدًا وتسرّب الذاكرة، يمكنك استخدام `force` من `Control.DeepSeq` للتأكد من تقييمها.
## القيود والمشكلات المعروفة
محاكاة EVM واختبارها أمر صعب. لدى Echidna بعض القيود في الإصدار الأخير. بعضها موروث من [hevm](https://github.com/argotorg/hevm) بينما البعض الآخر ناتج عن قرارات تصميمية/أداءية أو ببساطة أخطاء في الكود الخاص بنا. ندرجها هنا بما في ذلك المشكلة المقابلة والحالة ("لن يتم الإصلاح"، "قيد الانتظار"، "قيد المراجعة"، "تم الإصلاح"). المشكلات التي "تم إصلاحها" من المتوقع أن تُدرج في إصدار Echidna التالي.
| الوصف | المشكلة | الحالة |
| :--- | :---: | :---: |
| دعم Vyper محدود | [#652](https://github.com/crytic/echidna/issues/652) | *لن يتم الإصلاح* |
| دعم مكتبات محدود للاختبار | [#651](https://github.com/crytic/echidna/issues/651) | *لن يتم الإصلاح* |
## التثبيت
### الملفات الثنائية المبنية مسبقًا
قبل البدء، تأكد من تثبيت Slither ([رابط التثبيت](https://github.com/crytic/slither)) (`pip3 install slither-analyzer --user`). إذا كنت ترغب في اختبار Echidna بسرعة على Linux أو MacOS، فإننا نقدم ملفات ثنائية مرتبطة بشكل ثابت (statically linked) لنظام Linux تم بناؤها على Ubuntu، وملفات ثنائية شبه ثابتة لنظام 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)
إذا كان لديك Homebrew مثبتًا على جهاز Mac أو Linux، يمكنك تثبيت Echidna وجميع تبعياتها (Slither، crytic-compile) عن طريق تشغيل `brew install echidna`.
يمكنك أيضًا تجميع وتثبيت أحدث كود من الفرع `master` عن طريق تشغيل `brew install --HEAD echidna`
يمكنك الحصول على مزيد من المعلومات في صفحة [`echidna` Homebrew Formula](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 ميغابايت.
لاحظ أن صور الحاوية تُبنى حاليًا فقط على أنظمة x86. لا يُنصح بتشغيلها على أجهزة ARM، مثل أنظمة Mac M1، بسبب فقدان الأداء الناتج عن محاكاة وحدة المعالجة المركزية.
تتوفر علامات مختلفة لصورة حاوية 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) للحصول على إرشادات.
بعض توزيعات لينكس لا توفر مكتبات ثابتة لبعض الأشياء التي يحتاجها 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
مع تمكين flakes، يمكنك تشغيل Echidna مباشرة من هذا المستودع:```sh $ nix run github:crytic/echidna # master $ nix run github:crytic/echidna/v2.1.1 # specific ref (tag/branch/commit)
لبناء إصدار مستقل لأنظمة macOS غير Nix، سيقوم ما يلي ببناء 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)
### الجوائز (Trophies)
تم العثور على الثغرات الأمنية التالية بواسطة 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 لا تعود (revert) عند استخدام معلمات إدخال صالحة | 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) | [إغلاق troves يتطلب الاحتفاظ بالمبلغ الكامل من 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) | [يمكن إزالة troves بطريقة غير صحيحة](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) | الاسترداد الأولي (initial redeem) يمكن أن يعود بشكل غير متوقع | 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) | يوليو 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) | يوليو 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) | فبراير 2020 |
إذا كنت تستخدم Echidna في عمل أكاديمي، ففكر في التقدم بطلب للحصول على [جائزة Crytic للبحث بقيمة 10,000 دولار](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/).
## الحصول على المساعدة
لا تتردد في التوقف عند قناة #ethereum على Slack في [Empire Hacking](https://slack.empirehacking.nyc/) للحصول على مساعدة في استخدام أو توسيع Echidna.
* ابدأ بمراجعة [ثوابت Echidna البسيطة هذه](https://github.com/crytic/echidna/blob/HEAD/tests/solidity/basic/flags.sol)
* فكر في [مراسلة](mailto:[email protected]) فريق تطوير Echidna مباشرة للحصول على أسئلة أكثر تفصيلاً
## الترخيص
Echidna مرخص وموزع بموجب [ترخيص AGPLv3](https://github.com/crytic/echidna/blob/master/LICENSE).