تخطي إلى المحتوى الرئيسي

قائمة التحقق من دمج الرموز المميزة

Solidity
العقود الذكية
الأمان
الرموز المميزة
متوسط
تريل أوف بيتس
13 أغسطس 2020
5 دقيقة للقراءة

اتبع قائمة التحقق هذه عند التفاعل مع أي رموز مميزة عشوائية. تأكد من فهمك للمخاطر المرتبطة بكل عنصر، وبرر أي استثناءات لهذه القواعد.

للراحة، يمكن تشغيل جميع أدوات (opens in a new tab) سليذر مباشرة على عنوان الرمز المميز، مثل:

برنامج تعليمي حول استخدام سليذر

slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken

لاتباع قائمة التحقق هذه، ستحتاج إلى الحصول على هذه المخرجات من سليذر للرمز المميز:

- slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER]
- slither [target] --print human-summary
- slither [target] --print contract-summary
- slither-prop . --contract ContractName # يتطلب التكوين، واستخدام إيكيدنا ومانتيكور

اعتبارات عامة

  • يخضع العقد لمراجعة أمنية. تجنب التفاعل مع العقود التي تفتقر إلى مراجعة أمنية. تحقق من مدة التقييم (المعروفة أيضًا باسم "مستوى الجهد")، وسمعة الشركة الأمنية، وعدد النتائج وخطورتها.
  • لقد تواصلت مع المطورين. قد تحتاج إلى تنبيه فريقهم إلى وقوع حادث. ابحث عن جهات الاتصال المناسبة في جهات اتصال أمان سلسلة الكتل (opens in a new tab).
  • لديهم قائمة بريدية أمنية للإعلانات الهامة. يجب على فريقهم إبلاغ المستخدمين (مثلك!) عند العثور على مشكلات حرجة أو عند حدوث ترقيات.

التوافق مع ERC

يتضمن سليذر أداة، slither-check-erc (opens in a new tab)، والتي تراجع توافق الرمز المميز مع العديد من معايير ERC ذات الصلة. استخدم slither-check-erc لمراجعة ما يلي:

  • تُرجع دالتي transfer و transferFrom قيمة منطقية (boolean). العديد من الرموز المميزة لا تُرجع قيمة منطقية في هذه الدوال. ونتيجة لذلك، قد تفشل استدعاءاتها في العقد.
  • دوال name و decimals و symbol موجودة إذا تم استخدامها. هذه الدوال اختيارية في معيار ERC-20 وقد لا تكون موجودة.
  • تُرجع دالة decimals نوع uint8. العديد من الرموز المميزة تُرجع بشكل غير صحيح نوع uint256. إذا كان الأمر كذلك، فتأكد من أن القيمة المُرجعة أقل من 255.
  • يخفف الرمز المميز من حالة السباق المعروفة في ERC-20 (opens in a new tab). يحتوي معيار ERC-20 على حالة سباق (race condition) معروفة يجب التخفيف منها لمنع المهاجمين من سرقة الرموز المميزة.
  • الرمز المميز ليس من نوع ERC-777 ولا يحتوي على استدعاء دالة خارجية في transfer و transferFrom. يمكن أن تؤدي الاستدعاءات الخارجية في دوال التحويل إلى هجمات إعادة الدخول (reentrancies).

يتضمن سليذر أداة، slither-prop (opens in a new tab)، والتي تُنشئ اختبارات الوحدة وخصائص الأمان التي يمكنها اكتشاف العديد من عيوب ERC الشائعة. استخدم slither-prop لمراجعة ما يلي:

أخيرًا، هناك خصائص معينة يصعب تحديدها تلقائيًا. راجع هذه الشروط يدويًا:

  • يجب ألا تفرض transfer و transferFrom رسومًا. يمكن أن تؤدي الرموز المميزة الانكماشية (Deflationary tokens) إلى سلوك غير متوقع.
  • يتم أخذ الفائدة المحتملة المكتسبة من الرمز المميز في الاعتبار. توزع بعض الرموز المميزة فائدة على حاملي الرموز المميزة. قد تُحتجز هذه الفائدة في العقد إذا لم يتم أخذها في الاعتبار.

تكوين العقد

  • يتجنب العقد التعقيد غير الضروري. يجب أن يكون الرمز المميز عقدًا بسيطًا؛ يتطلب الرمز المميز ذو التعليمات البرمجية المعقدة معيارًا أعلى من المراجعة. استخدم طابعة الملخص البشري (human-summary printer) (opens in a new tab) الخاصة بسليذر لتحديد التعليمات البرمجية المعقدة.
  • يستخدم العقد SafeMath. تتطلب العقود التي لا تستخدم SafeMath معيارًا أعلى من المراجعة. افحص العقد يدويًا للتحقق من استخدام SafeMath.
  • يحتوي العقد على عدد قليل فقط من الدوال غير المرتبطة بالرموز المميزة. تزيد الدوال غير المرتبطة بالرموز المميزة من احتمالية حدوث مشكلة في العقد. استخدم طابعة ملخص العقد (contract-summary printer) (opens in a new tab) الخاصة بسليذر لمراجعة التعليمات البرمجية المستخدمة في العقد بشكل عام.
  • يحتوي الرمز المميز على عنوان واحد فقط. يمكن للرموز المميزة ذات نقاط الدخول المتعددة لتحديثات الرصيد أن تكسر مسك الدفاتر الداخلي بناءً على العنوان (على سبيل المثال، قد لا يعكس balances[token_address][msg.sender] الرصيد الفعلي).

امتيازات المالك

  • الرمز المميز غير قابل للترقية. قد تغير العقود القابلة للترقية قواعدها بمرور الوقت. استخدم طابعة الملخص البشري (opens in a new tab) الخاصة بسليذر لتحديد ما إذا كان العقد قابلاً للترقية.
  • يتمتع المالك بقدرات سك محدودة. يمكن للملاك الخبثاء أو المخترقين إساءة استخدام قدرات السك. استخدم طابعة الملخص البشري (opens in a new tab) الخاصة بسليذر لمراجعة قدرات السك، وفكر في مراجعة التعليمات البرمجية يدويًا.
  • الرمز المميز غير قابل للإيقاف المؤقت. يمكن للملاك الخبثاء أو المخترقين الإيقاع بالعقود التي تعتمد على رموز مميزة قابلة للإيقاف المؤقت. حدد التعليمات البرمجية القابلة للإيقاف المؤقت يدويًا.
  • لا يمكن للمالك إدراج العقد في القائمة السوداء. يمكن للملاك الخبثاء أو المخترقين الإيقاع بالعقود التي تعتمد على رموز مميزة تحتوي على قائمة سوداء. حدد ميزات القائمة السوداء يدويًا.
  • الفريق الذي يقف وراء الرمز المميز معروف ويمكن تحميله مسؤولية إساءة الاستخدام. يجب أن تتطلب العقود ذات فرق التطوير المجهولة، أو التي تتواجد في ملاذات قانونية، معيارًا أعلى من المراجعة.

ندرة الرموز المميزة

تتطلب مراجعات مشكلات ندرة الرموز المميزة مراجعة يدوية. تحقق من هذه الشروط:

  • لا يمتلك أي مستخدم معظم المعروض. إذا كان عدد قليل من المستخدمين يمتلكون معظم الرموز المميزة، فيمكنهم التأثير على العمليات بناءً على إعادة توزيع الرمز المميز.
  • إجمالي المعروض كافٍ. يمكن التلاعب بسهولة بالرموز المميزة ذات إجمالي المعروض المنخفض.
  • تتواجد الرموز المميزة في أكثر من بضع منصات تداول. إذا كانت جميع الرموز المميزة في منصة تداول واحدة، فإن اختراق المنصة يمكن أن يعرض العقد الذي يعتمد على الرمز المميز للخطر.
  • يفهم المستخدمون المخاطر المرتبطة بالأموال الكبيرة أو القروض الخاطفة (flash loans). يجب أن تأخذ العقود التي تعتمد على رصيد الرمز المميز في الاعتبار بعناية المهاجمين الذين يمتلكون أموالاً كبيرة أو الهجمات من خلال القروض الخاطفة.
  • الرمز المميز لا يسمح بالسك الخاطف (flash minting). يمكن أن يؤدي السك الخاطف إلى تقلبات كبيرة في الرصيد وإجمالي المعروض، مما يستلزم فحوصات صارمة وشاملة لتجاوز السعة في تشغيل الرمز المميز.