تم التحديث في ١٤ سبتمبر ٢٠٢٦. يمكن أن تكون مراجعة العقود الذكية دليلاً مفيداً، لكنها ليست شهادة أمان. السؤال الأهم ليس "هل خضع هذا المشروع للمراجعة؟" بل "ما الذي تمت مراجعته تحديداً، وأي إصدار تمت مراجعته، وما الذي بقي دون حل، وهل لا يزال الكود المنشور متوافقاً مع النظام الذي تمت مراجعته؟"
تُحذّر إرشادات أمان إيثيريوم صراحةً من أن عمليات التدقيق ليست حلاً سحرياً ولا يمكنها كشف جميع الثغرات. وبالمثل، يتعامل نظام التدقيق في OpenZeppelin مع نطاق التدقيق، والنتائج، وخطورته، وحالة المعالجة، ومراجعة الإصلاحات كعناصر منفصلة في الصورة الأمنية. لذا، فإن الهدف العملي للمشتري هو قراءة التقرير كوثيقة تقييم مخاطر، وليس كشعار تسويقي.
قائمة سريعة للتحقق من العلامات الحمراء
| ما الذي يجب فحصه؟ |
إشارة انخفاض المخاطر |
علامة حمراء |
| نِطَاق |
تم إدراج المستودعات والملفات والعقود والشبكات والاستثناءات بدقة. |
يُزعم أن مصطلح "مدقق" لا يتضمن نطاقاً واضحاً. |
| إصدار |
يتم تحديد رمز التجزئة أو الوسم أو إصدار الكود الدقيق. |
لم يتم إجراء أي تغيير على الكود المنشور أو الالتزام به بعد التدقيق. |
| نتائج حرجة / عالية |
تم حل المشكلة وإعادة فحصها بشكل مستقل. |
مراجعة مفتوحة، أو تم حلها جزئياً، أو تم قبولها دون تقديم حل مقنع، أو مراجعة بدون إصلاح. |
| صلاحيات الإدارة |
يتم توثيق الأدوار وحمايتها بواسطة التوقيع المتعدد/القفل الزمني عند الاقتضاء. |
يمكن لمحفظة واحدة إنشاء أو إيقاف أو تفريغ أو ترقية أو تغيير المعلمات على الفور. |
| قابلية الترقية |
نموذج الوكيل وسلطة الترقية مشمولان في النطاق وموثقان بشكل واضح. |
يمكن استبدال التنفيذ الذي خضع للتدقيق بعد التدقيق دون تأخير أو مراجعة ذات مغزى. |
| التبعيات والبيانات المرجعية |
يتم تحديد افتراضات الثقة والأنظمة الخارجية. |
يستثني التقرير عنصرًا يتحكم في التسعير أو الحفظ أو الجسور أو سلوك البروتوكول الأساسي. |
| عمر التدقيق |
حديثة بما يكفي لقاعدة التعليمات البرمجية الحالية، مع إجراء مراجعات متابعة بعد التغييرات الرئيسية. |
تمت إعادة استخدام التدقيق القديم كدليل لمنتج مختلف تمامًا. |
الخطوة الأولى: التأكد من أن التقرير حقيقي وصادر عن المدقق
التعليق: ابدأ بهوية التقرير وتاريخه والمدقق وملخص الخطورة قبل قراءة النتائج الفردية.
تم التحقق: عادةً ما تُحدد تقارير التدقيق الموثوقة المشروع، وفترة التقييم، والمدقق، والرمز البرمجي الذي تمت مراجعته. تتضمن تقارير OpenZeppelin المنشورة وتقارير Consensys Diligence عادةً قسمًا خاصًا بنطاق العمل ومراجعة الرمز البرمجي. على سبيل المثال، يُحدد تقرير USDKG الخاص بـ Consensys رمز التجزئة (commit hash) الذي تمت مراجعته بدقة، بينما تُحدد تقارير OpenZeppelin بشكل روتيني المستودع ورمز الدمج أو طلب السحب ضمن نطاق العمل.
مفهوم خاطئ: يُعتبر ملف PDF الذي يرفعه المشروع موثوقًا به تلقائيًا لمجرد احتوائه على شعار مدقق حسابات. هذا غير كافٍ. فقد تكون الملفات قديمة أو معدلة أو منفصلة عن سياقها الأصلي.
الإجراء: ابحث عن التقرير من خلال موقع المدقق أو مستودعه كلما أمكن ذلك. قارن اسم المشروع وتاريخ التقرير وعنوان URL وتفاصيل الإصدار مع النسخة التي شاركها فريق الرموز.
المراجع الأساسية: وثائق تدقيق OpenZeppelin وتدقيق Consensys Diligence USDKG .
الخطوة الثانية: اقرأ نطاق البحث قبل النتائج
التعليق: شارة التدقيق أقل أهمية من النطاق: تحديد العقود والمكونات التي تمت مراجعتها بدقة.
لا يغطي التدقيق إلا ما هو ضمن نطاقه. قد يستعرض التقرير عقدًا للرمز المميز ولكنه يستثني التخزين، والجسور، والخزائن، والحوكمة، والبنية التحتية للواجهة الأمامية، والتبعيات الخارجية، أو أي ترقية لاحقة.
تم التحقق: يُفصّل تقرير التدقيق الشامل لـ OpenZeppelin نطاقه، ويشير أيضًا إلى توزيع الإصلاحات على مستودعات مختلفة. ويذكر تقرير آخر لـ OpenZeppelin حول مُحاكي EVM صراحةً أنه تم تدقيق التغييرات في طلب سحب مُحدد فقط، وليس الملفات كاملةً. تُبيّن هذه الأمثلة لماذا قد يكون استنتاج "تم تدقيق المشروع" استنتاجًا مُبالغًا فيه.
مفهوم خاطئ: إذا تم تدقيق عقد واحد في النظام البيئي، فإن البروتوكول بأكمله مشمول. هذا غير صحيح.
الإجراء: دوّن جميع المكونات التي يمكنها الاحتفاظ بالأموال، أو تحويلها، أو تحديد الأسعار، أو تغيير الصلاحيات، أو إصدار الرموز، أو ترقية العقود. ثم حدد ما إذا كان كل مكون منها يقع ضمن نطاق التدقيق. أي فراغ مهم يمثل سؤالًا للمتابعة.
أمثلة للمراجع: تدقيق OpenZeppelin Panoptic وتدقيق OpenZeppelin EVM Emulator .
الخطوة 3: مطابقة رمز الالتزام مع الكود الذي تم نشره فعليًا
التعليق: يرتبط التقرير بمراجعة الكود؛ تحقق من أن المراجعة التي تمت مراجعتها لا تزال تتوافق مع العقود المنشورة.
هذا أحد أكثر الفحوصات التي يتم إغفالها. قد تكون عملية التدقيق ممتازة، ومع ذلك قد يكون المشروع قد غيّر الكود بعد ذلك.
تم التحقق: تشير وثائق مدقق الكود في OpenZeppelin إلى أن التقارير مرتبطة بعملية إيداع محددة، وتوضح إرشادات التحقق من العقود في Ethereum أن الكود المصدري الذي تم التحقق منه يساعد المستخدمين على التأكد من أن المصدر المنشور يتوافق مع الكود البرمجي المنشور.
مفهوم خاطئ: عبارة "تمت مراجعته الشهر الماضي" تعني أن العقد المُطبق اليوم هو العقد الذي تمت مراجعته. لا يثبت ذلك الوقت وحده.
الإجراء: حدد موقع رمز الالتزام أو الوسم أو طلب السحب في التقرير. ثم تحقق من وثائق نشر المشروع والمصدر المُوثَّق في مستكشف الكتل ذي الصلة. إذا كان التنفيذ المنشور أحدث، فابحث عن تدقيق لاحق أو مراجعة موثقة للاختلافات.
المراجع الأساسية: وثائق OpenZeppelin Code Inspector ودليل التحقق من العقود على موقع Ethereum.org .
الخطوة الرابعة: تعامل مع حالة النتائج بجدية تضاهي خطورة الحالة
التعليق: "حرج" أو "عالي" أو "متوسط" ليس سوى نصف القصة؛ تحقق مما إذا كانت كل مشكلة قد تم حلها أو تم حلها جزئيًا أو لا تزال مفتوحة.
تُشير درجة الخطورة إلى الأهمية المحتملة للاكتشاف. أما الحالة فتُشير إلى ما حدث بعد ذلك. تُميّز أدوات التدقيق في OpenZeppelin بين حالات مثل: تم الحل، تم الحل جزئيًا، تم الإقرار بعدم الحل، ولم يتم تلقي أي رد.
مفهوم خاطئ: عبارة "اكتمل التدقيق" تعني أن المشروع قد أصلح كل شيء. هذا غير صحيح. يمكن أن يكتمل التدقيق بينما تبقى النتائج قيد الدراسة.
الإجراء: أنشئ قائمة مختصرة بجميع المشكلات الحرجة والعالية، ثم سجّل حالتها النهائية ودليل مراجعة الإصلاح. بالنسبة للمشكلات المتوسطة، انتبه جيدًا عندما تشير عدة مشكلات إلى نفس نقطة الضعف في التصميم، مثل التحكم في الوصول، أو التلاعب بالأسعار، أو الأخطاء المحاسبية.
لا تتجاهل النتائج الأقل خطورة تلقائيًا. تعتمد أهميتها على سياق النظام، وتداخلها مع المشكلات الأخرى، وكيفية استخدام الجهات الفاعلة ذات الصلاحيات للوظائف المتأثرة.
الخطوة الخامسة: اقرأ النتائج، والأثر، والشروط المسبقة، والحلول المقترحة - وليس العنوان فقط
التعليق: تُعدّ تصنيفات الخطورة نقطة انطلاق؛ يجب فهم ظروف الاستغلال والأصول المتأثرة ومنطق المدقق.
عادةً ما توضح النتائج المفيدة ما يمكن أن يحدث من أخطاء، ولماذا هو مهم، ومسار التعليمات البرمجية ذي الصلة، والشروط المسبقة، والتوصية. وقد تمثل النتائج "الخطيرة" التي تتطلب وجود مسؤول مخترق خطرًا عمليًا مختلفًا عن استغلال ثغرة أمنية بدون صلاحيات يمكن لأي مستخدم استغلالها.
تم التحقق: يصف موقع OpenZeppelin خطورة المشكلة بأنها تعكس عوامل مثل التأثير، والاحتمالية، وصعوبة الاستغلال. كما كشف تحليل Trail of Bits لـ 246 نتيجة متعلقة بالعقود الذكية أن المشكلات الخطيرة تظهر في فئات متعددة، وليس فقط في فئات الأخطاء المعروفة مثل إعادة الدخول. وقد سلطت بياناتهم الضوء على التحكم في الوصول، والمصادقة، والتوقيت، والبيانات الرقمية، والتحقق، وفئات أخرى كمصادر مهمة للمخاطر.
مفهوم خاطئ: إعادة الدخول هي الخلل الوحيد في العقود الذكية الذي يستحق القلق. هذا غير صحيح. منطق الأعمال، والتحكم في الوصول، والتحقق من الصحة، وتصميم أوراكل، والمحاسبة، كلها أمور لا تقل أهمية.
الإجراء: لكل اكتشاف خطير، أجب عن أربعة أسئلة: من يمكنه التسبب فيه؟ ما الذي يمكن أن يكسبه أو يفسده؟ ما الافتراضات المطلوبة؟ هل تمت مراجعة الحل المحدد؟
المراجع الأساسية: نموذج مشكلة التدقيق في OpenZeppelin ، وتحليل Trail of Bits لنتائج التدقيق ، واعتبارات أمان Solidity .
الخطوة 6: فحص الأدوار المميزة، ومفاتيح المسؤول، وحقوق الإيقاف المؤقت، وحقوق سك العملات، وحقوق الترقية
التعليق: تستحق الوظائف ذات الامتيازات اهتمامًا خاصًا لأن مسار التعليمات البرمجية الآمن لا يزال يحمل مخاطر الحوكمة أو إدارة المفاتيح.
تتضمن العديد من البروتوكولات أدوارًا ذات امتيازات خاصة عن قصد. هذا لا يجعلها غير آمنة تلقائيًا، ولكنه يغير نموذج الثقة.
تم التحقق: تحذر إرشادات أمان العقود الذكية في إيثيريوم من أن المالك الواحد قد يصبح نقطة ضعف مركزية. وتصف هذه الإرشادات التحكم في الوصول القائم على الأدوار والتحكم في التوقيعات المتعددة كوسائل للحد من هذا الخطر. كما توضح وثائق القفل الزمني في OpenZeppelin أن التنفيذ المؤجل يمنح المستخدمين وقتًا كافيًا لمراجعة إجراءات الصيانة والخروج عند الاقتضاء.
مفهوم خاطئ: "عدم وجود ثغرات أمنية خطيرة" يعني أن المسؤولين لا يستطيعون إلحاق الضرر بالمستخدمين. إن خطورة التدقيق وسلطة الحوكمة مسألتان مختلفتان.
الإجراء: ابحث في التقرير عن مصطلحات مثل ownerو adminو roleو multisigو timelockو pauseو و و . ثم حدد من يشغل mintكل منصب اليوم ومدى سرعة قدرة هذا المنصب على العمل.upgradeblacklistwithdraw
المراجع الأساسية: إرشادات أمان العقود الذكية في إيثيريوم ووثائق التحكم في الوصول في أوبن زيبيلين .
الخطوة 7: التحقق من إمكانية الترقية، وقواعد البيانات، والجسور، وافتراضات الثقة الخارجية الأخرى
التعليق: قم بمراجعة حدود الثقة، وليس فقط ملفات Solidity - يمكن للوكلاء، والوسطاء، والجسور، والتبعيات الخارجية أن تغير المخاطر الحقيقية.
يمكن للوكيل القابل للتحديث الاحتفاظ بنفس العنوان العام مع تغيير منطق التنفيذ. ويمكن لوسطاء البيانات (Oracles) تزويدنا بأسعار تحدد عمليات التصفية. ويمكن للجسور (Bridges) إدخال افتراضات منفصلة بشأن الحفظ أو التحقق. ويمكن للمكتبات والبروتوكولات الخارجية أن تفشل بشكل مستقل.
تم التحقق: تُوثّق OpenZeppelin أن الأنظمة القائمة على الوكيل تفصل عنوان الوكيل الثابت عن كود التنفيذ القابل للتغيير. كما تُحذّر وثائقها من أن إمكانية الترقية تتطلب ترخيصًا دقيقًا. يشرح دليل أمان إيثيريوم مخاطر التلاعب بالبيانات الوسيطة، ويشير إلى أن إدخالات الأسعار غير الصحيحة قد تتسبب في تنفيذ العقود بناءً على بيانات خاطئة.
مفهوم خاطئ: يُثبت التحقق من صحة الكود المصدري على عنوان الوكيل أن السلوك المستقبلي لا يمكن تغييره. بالنسبة للأنظمة القابلة للتحديث، هذا ليس صحيحًا بالضرورة.
الإجراء: تحديد ما إذا كان العقد قابلاً للتحديث، ومن يُصرّح بالتحديثات، وما إذا كانت التحديثات متأخرة، وما إذا كان التنفيذ الحالي مُدقّقاً. ثمّ سرد جميع الأنظمة الخارجية التي قد يؤثر تعطلها على أموال المستخدم.
المراجع الأساسية: وثائق وكيل OpenZeppelin وإرشادات أمان العقود الذكية في Ethereum .
الخطوة 8: اتخاذ قرار الشراء / التجنب / التحقيق بناءً على المخاطر المتبقية
التعليق: يجب أن يعكس القرار النهائي المخاطر التي تبقى بعد الإصلاحات، وليس وجود شارة تدقيق.
حتى بعد الإصلاحات، يبقى الخطر قائمًا. وقد صرّحت شركة OpenZeppelin صراحةً في تقارير التدقيق المنشورة بأنّ المراجعات محدودة المدة لا تضمن اكتشاف جميع الأخطاء أو المخاطر. ففي تدقيق Audius، على سبيل المثال، أوصى المدققون بإجراء اختبار تجريبي، وتقديم مكافأة لاكتشاف الأخطاء، وإعادة التدقيق لاحقًا بعد رصد عدد كبير من النتائج الخطيرة. وفي تدقيق Panoptic، أوصوا بمراقبة إضافية وإجراء تدقيق آخر بعد إجراء تغييرات جوهرية في الكود.
مفهوم خاطئ: عمليات التدقيق المتعددة تقلل مخاطر العقود الذكية إلى الصفر. هذا غير صحيح. فهي تُحسّن مستوى الأمان، لكن الأمن يعتمد أيضاً على دقة النشر، والعمليات التشغيلية، وأمان مفتاح الإدارة، والمراقبة، والاستجابة للحوادث، والافتراضات الاقتصادية، والتحديثات المستقبلية.
الإجراء: تصنيف المشروع إلى إحدى الفئات الثلاث التالية:
- شراء / مواصلة البحث: الكود المنشور حاليًا يتطابق مع النطاق الذي تمت مراجعته؛ تم حل النتائج الخطيرة وإعادة فحصها؛ الصلاحيات المميزة مقبولة وشفافة؛ التبعيات الخارجية مفهومة.
- مزيد من التحقيق: المعلومات الرئيسية مفقودة، أو أن التدقيق يسبق التحديثات الرئيسية، أو أن بعض المشكلات المتوسطة/العالية لم يتم حلها أو الاعتراف بها بشكل كامل.
- تجنب في الوقت الحالي: لا تزال المشكلات الحرجة/العالية دون حل، ولا يتطابق النشر مع المراجعة المدققة، وكانت العقود الأساسية خارج النطاق، أو أن المسؤولين لديهم سيطرة أحادية الجانب على أموال المستخدم بشكل سيئ.
كيفية تفسير عبارات التدقيق الشائعة
| عبارة |
ما يعنيه عادةً |
خطوتك التالية |
| "لم يتم العثور على أي مشاكل حرجة" |
لم يحدد التقرير أي نتيجة حاسمة ضمن نطاقه وإطاره الزمني. |
لا يزال بإمكانك قراءة "عالي"، "متوسط"، "افتراضات الثقة"، "الاستثناءات"، و"صلاحيات الإدارة". |
| "تم الحل" |
قام المشروع بتغيير الكود وقبل المدقق التصحيح في مجموعة الإصلاحات التي تمت مراجعتها. |
تأكد من أن الإصلاح جزء من الكود المنشور. |
| "معترف به" |
يقبل الفريق المشكلة أو يعترف بها، لكنه قد لا يكون قد غيّر الكود. |
اقرأ الأساس المنطقي؛ لا تتعامل مع هذا على أنه مكافئ للثابت. |
| "تم حلها جزئياً" |
يقلل هذا الإجراء من المخاطر ولكنه لا يقضي على النتيجة تمامًا. |
فهم مسار الاستغلال المتبقي أو الافتراض. |
| "خارج النطاق" |
لم يقم المدقق بتقييم ذلك العنصر. |
لا تستنتج مستوى الأمان من التقرير الخاص بهذا المكون. |
| "يفترض أنه موثوق به" |
يعتمد نموذج التدقيق على أن يتصرف ذلك الفاعل أو التابع بشكل صحيح. |
قرر ما إذا كنت على استعداد لقبول افتراض الثقة هذا. |
خمس علامات تحذيرية تستدعي التوقف الفوري
- لا يمكن للمشروع عرض التقرير الأصلي المُستضاف من قِبل المدقق. ولا تكفي لقطة الشاشة أو الشعار.
- يفتقر التقرير إلى نطاق أو إصدار قابل للتكرار. وبدون تحديد الالتزام أو الوسم أو الملفات المحددة، يصعب معرفة ما تمت مراجعته.
- تبقى القضايا الحرجة أو عالية الخطورة مفتوحة دون وجود مبرر قوي وموثق.
- البروتوكول قابل للتحديث، لكن التقرير بالكاد يناقش سلطة التحديث أو الأدوار المميزة.
- تغيرت عملية النشر بشكل جوهري بعد التدقيق، ولا توجد مراجعة متابعة متاحة.
إذا ظهر أي من هذه الأمور، فإن الخطوة الأكثر أماناً هي عدم تبريرها. توقف عن اتخاذ قرار الاستثمار واطلب أدلة حديثة.
تقرير تدقيق ما قبل الشراء لمدة 10 دقائق
- افتح التقرير من الموقع الرسمي للمدقق.
- سجل تاريخ التقرير، والمستودع، والنطاق، ورمز التجزئة للالتزام.
- تأكد من العقود المنشورة وعناوين التنفيذ.
- اقرأ جميع النتائج الحرجة والعالية.
- تحقق من الحالة النهائية لكل مشكلة خطيرة.
- البحث عن أدوار مميزة وصلاحيات طارئة.
- تحديد ترقيات البروكسي ومن يتحكم بها.
- تحديد مصادر المعلومات، والجسور، وأنظمة الحفظ، والتبعيات الخارجية.
- ابحث عن التغييرات التي تم إجراؤها بعد عملية الالتزام المدققة.
- حدد مستوى المخاطرة المتبقية التي تقبلها قبل الشراء.
الخلاصة
تُعدّ مراجعة العقود الذكية دليلاً على المراجعة، وليست برهاناً على السلامة. إنّ أقوى مؤشر ليس شعار المدقق، بل سلسلة الأدلة التي تربط بين نطاق محدد بوضوح، ومراجعة دقيقة للشيفرة، ونتائج هامة، وإصلاحات موثقة، وشيفرة بايت برمجية منشورة، وضوابط تشغيلية شفافة.
أخطر خطأ في قراءة المعلومات هو التوقف عند كلمة "مدقق". السؤال الأهم هو: ما الذي قد يحدث بعد هذا التدقيق؟ إذا استطعت الإجابة على هذا السؤال بوضوح، وكنت مرتاحًا للمخاطر المتبقية، فأنت تتخذ قرارًا مدروسًا. أما إذا كان نطاق التدقيق، أو حالة الإصلاح، أو صلاحيات المسؤول، أو الإصدار المُستخدم غير واضح، فالإجراء الصحيح هو التحقق قبل الشراء.
المصادر الأولية
هذه المقالة لأغراض إعلامية فقط، ولا تُعدّ نصيحة مالية. لا يمكن للتدقيق أن يُزيل مخاطر العقود الذكية، أو الحوكمة، أو التنبؤات، أو المخاطر الاقتصادية، أو التشغيلية، أو مخاطر السوق.