عمليات تدقيق العقود الذكية: ما يتحقق منه المدققون - وما لا يضمنه التدقيق

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

يمكن للتدقيق تقليل عدم اليقين، لكنه لا يجعل العقد خاليًا من المخاطر. تصف إرشادات Ethereum الأمنية الرسمية التدقيق بأنه مراجعة إضافية، لا حلًا سحريًا يكتشف كل خطأ.

هذه المقالة لأغراض تعليمية فقط. لا يضمن التدقيق الأمان أو استرداد الأموال أو تحقيق عوائد.

النطاق أولًا

يحدد التقرير المفيد بدقة ما خضع للمراجعة:

  • المستودع و commit hash؛
  • الملفات والعقود؛
  • إصدار المترجم وإعدادات البناء؛
  • التبعيات؛
  • البنية والأدوار ذات الامتيازات؛
  • الفرع أو الإصدار؛
  • الاستثناءات والقيود والافتراضات؛
  • تاريخ المراجعة.

هذا مهم لأن التدقيق الحقيقي قد يغطي إصدارًا قديمًا أو نشرًا مختلفًا أو جزءًا واحدًا فقط من نظام أكبر.

ما الذي يفحصه المدققون عادةً

1. السلوك المقصود والثوابت

يقارن المدققون الشفرة بمواصفاتها:

  • من يحق له استدعاء كل دالة؛
  • كيفية حساب المبالغ والرسوم؛
  • متى تحدث تغييرات الحالة؛
  • الخصائص التي يجب أن تظل صحيحة دائمًا؛
  • كيفية التعامل مع الحالات الحدية والأعطال.

إذا أغفلت المواصفات متطلبًا مهمًا، فقد تنفذ شفرة صحيحة تقنيًا تصميمًا غير آمن أو غير مرغوب فيه.

2. التحكم في الوصول

يفحص المراجعون أدوار المالك والمسؤول والمشغل وغيرها من الأدوار المميزة، بما في ذلك صلاحيات:

  • منح الصلاحيات أو إلغاؤها؛
  • إيقاف النظام مؤقتًا؛
  • تغيير الرسوم والحدود؛
  • سكّ الرموز؛
  • سحب الأصول؛
  • ترقية التنفيذ.

كما ينظرون فيما إذا كان مفتاح واحد يستطيع إجراء تغيير حرج، وما إذا كانت ضوابط مثل multisig أو timelock جزءًا من التصميم.

3. الاستدعاءات الخارجية وإعادة الدخول

قد ينقل عقدٌ التحكم إلى عقد آخر أثناء التنفيذ. ويمكن أن يتيح ذلك إعادة الدخول، إذ يعاود العقد الخارجي الاستدعاء قبل اكتمال انتقال الحالة الأصلي. توصي إرشادات Solidity الرسمية بترتيب عمليات التحقق وتأثيرات الحالة والتفاعلات الخارجية بعناية حيثما يلزم.

4. العمليات الحسابية والوحدات

يبحث المدققون عن:

  • التقريب وفقدان الدقة؛
  • عدم تطابق المنازل العشرية للرموز؛
  • ترتيب غير صحيح للعمليات؛
  • القيم الحدية؛
  • القسمة على صفر؛
  • غير آمن غير محدد الحساب.
  • الاختلافات بين الوحدات الداخلية والمعروضة.

5. حجب الخدمة ورسوم gas

قد تجعل الحلقات غير المحدودة أو المصفوفات المتنامية أو الاستدعاءات الخارجية الفاشلة أو العمليات المكلفة تنفيذ الدالة غير عملي. يختبر المراجعون ما إذا كان التصميم يظل قابلًا للاستخدام مع نمو البيانات وفي حالات الإدخال غير المعتادة.

6. عقود الوكيل والترقيات

في الأنظمة القابلة للترقية، ينبغي أن تشمل المراجعة:

  • عقود proxy والتنفيذ؛
  • صلاحيات القائم بالترقية أو المسؤول؛
  • التهيئة؛
  • توافق تخطيط التخزين؛
  • مسارات ترقية غير مصرح بها؛
  • أثر تغيير المنطق بعد التدقيق.

يمكن لعقد الوكيل إبقاء العنوان نفسه ظاهرًا للمستخدم مع تفويض منطق جديد. لذلك يجب التحقق من ادعاء «العقد لا يمكن أن يتغير» بالرجوع إلى البنية الفعلية.

7. عمليات التكامل

قد تعتمد العقود على الرموز أو أوراكل الأسعار أو الجسور أو منصات DEX أو التوقيعات أو عقود أخرى. ويفحص المدققون الافتراضات المتعلقة بهذه التبعيات والبيانات القديمة والسلوك غير المعتاد للرموز وأنماط الفشل الخارجية.

8. الأحداث والمراقبة

قد يتحقق المراجعون مما إذا كانت الأحداث تكشف بدقة الإجراءات المهمة، مثل تغييرات الأدوار والترقيات وعمليات الإيقاف والتحويلات. تدعم الأحداث المراقبة، لكنها لا تستبدل فحص الحالة.

الأساليب المستخدمة في التدقيق

تجمع المراجعة عادةً بين:

  • تحليل يدوي للشفرة والبنية؛
  • اختبارات الوحدات والتكامل؛
  • التحليل الساكن والديناميكي؛
  • اختبارات fuzzing بمدخلات مولّدة؛
  • اختبارات قائمة على الخصائص؛
  • فحوص فئات الثغرات المعروفة؛
  • مراجعة البناء والنشر؛
  • وأحيانًا التحقق الشكلي من خصائص مختارة.

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

كيف ينبغي للمستخدم قراءة تقرير التدقيق

1. طابِق النسخة التي خضعت للمراجعة

اعثر على تجزئة الالتزام وحدد:

  • ما إذا كان التنفيذ الحالي قد بُني من تلك الشفرة؛
  • ما إذا كانت ترقيات قد حدثت بعد تاريخ التقرير؛
  • ما إذا كانت السلسلة والعناوين المنشورة متطابقة؛
  • ما إذا كانت التبعيات الحرجة مشمولة في النطاق.

إذا تعذر إثبات ذلك، فلن يقدم التقرير سوى أدلة محدودة عن النسخة المنشورة فعليًا.

2. اقرأ النتائج، لا الملخص وحده

راجع لكل نتيجة:

  • مستوى الخطورة والسيناريو؛
  • الشفرة المتأثرة؛
  • التوصية؛
  • استجابة المطور؛
  • الحالة الحالية؛
  • ما إذا كان المدقق قد أعاد اختبار الإصلاح.

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

3. اقرأ القيود

قد تستبعد التقارير:

  • أنظمة الواجهة الأمامية والخلفية؛
  • إدارة المفاتيح؛
  • التصميم الاقتصادي؛
  • عقود الجهات الخارجية؛
  • بنية النشر؛
  • إعدادات بيئة الإنتاج؛
  • المشكلات القانونية والتشغيلية.

يتفاعل المستخدمون مع النظام بأكمله، لا مع ملفات Solidity وحدها.

4. راجع المخاطر الإدارية

اسأل:

  • من يتحكم في الترقيات؛
  • ما إذا كان يمكن إيقاف العمليات مؤقتًا؛
  • ما إذا كانت الرسوم أو العناوين المرتبطة قابلة للتغيير؛
  • ما إذا كان timelock موجودًا؛
  • ما إذا كان multisig مستخدمًا؛
  • كيفية إبلاغ المستخدمين بالتغييرات.

تظل هذه أسئلة تتعلق بالحوكمة والثقة حتى إذا لم تُكتشف ثغرة في الشفرة.

5. راقب الأمان بعد التدقيق

تشمل المقاييس المستمرة المفيدة ما يلي:

  • اختبار كل إصدار؛
  • مراجعة الترقيات المهمة؛
  • برنامج مكافآت اكتشاف الأخطاء؛
  • مراقبة الأدوار وعمليات التنفيذ؛
  • إجراءات الاستجابة للحوادث؛
  • الحد من حجم الأصول المعرّضة للمخاطر.

ما لا يضمنه التدقيق

لا يضمن التدقيق ما يلي:

  • غياب جميع الأخطاء؛
  • أمان الشفرة التي تغيرت بعد المراجعة؛
  • أمان الموقع أو المحفظة أو DNS أو الخوادم؛
  • أمان المفاتيح ذات الامتيازات؛
  • سلامة الرموز الخارجية و oracles والجسور؛
  • مقاومة جميع الهجمات الاقتصادية؛
  • نزاهة الفريق؛
  • الامتثال القانوني؛
  • سيولة الرمز؛
  • إعادة الأموال؛
  • عوائد ثابتة أو أي عوائد أخرى.

أسئلة ينبغي للمستخدم الحذر طرحها

هل يكفي شعار المدقق؟
لا، ابحث عن التقرير من المصدر الخاص بالمدقق وتحقق من نطاقه والتزامه وتاريخه ونتائجه.

إذا تم إصلاح كل النتائج، فهل العقد آمن؟
وهذا يعني أن النتائج المذكورة قد تم تناولها في نسخة معلنة. لا تزال هناك مشكلات غير معروفة ومخاطر خارج النطاق.

هل عمليات التدقيق المتعددة أفضل تلقائيًا؟
العد وحده يقول القليل. تعتبر التغطية والجودة والاستقلالية والحداثة ومطابقة الإصدارات أكثر أهمية.

هل لا يزال التدقيق مطبقًا بعد ترقية الوكيل؟
فقط إذا تمت تغطية التنفيذ والتكوين الجديدين بواسطة الإصدار الذي تمت مراجعته.

قائمة التحقق من التقرير

  • التقرير متاح من جهة التدقيق.
  • ذُكر المستودع وتجزئة الالتزام.
  • العقود والتبعيات المهمة ضمن نطاق المراجعة.
  • تطابق النسخة التي خضعت للمراجعة النسخة المنشورة فعليًا.
  • يشمل النطاق عقد الوكيل والتنفيذ والمسؤول.
  • حالة النتائج وإعادة الاختبار موثقتان.
  • تمت قراءة الافتراضات والاستثناءات.
  • تم تقييم المخاطر خارج الشفرة بصورة منفصلة.

المصادر وقراءات إضافية

  1. موقع ايثريوم.org — أمان العقود الذكية
  2. موقع ايثريوم.org — اختبار العقود الذكية
  3. موقع ايثريوم.org — التحقق الرسمي من العقود الذكية
  4. توثيق الصلابة — اعتبارات الأمان
  5. مستندات OpenZeppelin — نمط ترقية عقد الوكيل