$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
مدخلات الدراسة
في هذه الدراسة، تم استخدام عقدين ذكيين من Solidity كمدخلات تحقق. الأول كان عقدا على غرار Simple DAO استخدم كدراسة حالة للعودة. أما الثاني فكان عقد تحويل الحسابات/التحويل للحالة مصغر لاختبار القيود على مستوى العقد مقابل الإنفاق المزدوج. كان الشيفرة المصدرية الأصلية ل Solidity بمثابة مدخل لعمليات التجريد والتحقق المحددة في هذا البروتوكول. يتم توضيح عملية التحويل العامة المستخدمة في مثل هذه العقود في الشكل 1، الذي يوضح التحول التدريجي لشفرة مصدر Solidity إلى نماذج FSM وEvent-B وSMV أثناء التحقق.
حدود النمذجة
تركز النمذجة الرسمية على منطق التحكم وتدفق العقود الذكية، بما في ذلك سلوك دخول وخروج الدوال، التنفيذ الداخلي، وانتقالات الحالة على مستوى العقد. تم تمثيل رؤية الدوال (العامة، الخارجية، الداخلية، والخاصة) مع سلوك مكدس المكالمات المقابل المرتبط بتحليل إعادة الدخول. تم التعامل مع أنواع الانتقالات المجردة (الاتصال، الإرسال، النقل) كعمليات لنقل الأثيرات.
تم تعريف الثوابت على مستوى العقد لضمان تفرد المعاملات ومنع الإنفاق المزدوج ضمن حدود التجريد. لتمثيل متطلبات اختيار التحقق وسلامة الكتلة، تم تعريف طبقة تجريد البروتوكول والمنطق من حيث انتقالات الحالة على مستوى البروتوكول لكل من إثبات العمل وإثبات الرهان.
لم يشمل الحد التجريدي عناصر طبقة الشبكة، بما في ذلك جدولة الرسائل التي سيتم تسليمها والتأخيرات الناتجة عن عدد من القفزات، وحل التفرعات، واستخدام خصوم الشبكة لاستراتيجيات بيزنطية، ودلالات الآلة الافتراضية الإيثيريومية، ودلالات الغاز التي تتحكم بها عقد الشبكة، وانتشار الاستثناءات، والتنفيذ غير المتزامن، والسلوك الاحتياطي المعقد، والنهائية على مستوى الشبكة. لذا، فإن نتائج تحديد الإنفاق المزدوج تنطبق فقط على الثوابت على مستوى العقود ولا تشكل اتفاقا على مستوى الشبكة حول النهائية.
الأدوات والتكوين
استخدمت منصة رودان لنمذجة وتحسين وتوليد التزامات الإثبات، وتنفيذ نموذج Event-B (الإصدار 3.7.0)، مما مكن مبروكات PP وML وSMT وAtelier-B من إصدار البراهين تلقائيا وتفاعليا. تم تشغيل نسخة nuXmv 2.0.0 على نماذج SMV المولدة في وضع استكشاف CTL الكامل لإجراء فحص نماذج CTL.
تم تنفيذ جميع عمليات التحقق في بيئة حسابية مضبوطة باستخدام أوبونتو 22.04 LTS وOpenJDK 11 وبايثون 3.10.12. تم استخدام Web3 (7.6.0)، NetworkX (3.4.2)، Matplotlib (3.8.0)، Graphviz (0.20.3)، NumPy (1.26.4)، وPandas (2.2.2) لتنفيذ عناصر المحاكاة والتصور. ضمن هذا التصميم إمكانية إعادة إنتاج نتائج التحقق والمحاكاة الرسمية عند تنفيذها تحت نفس ظروف التنفيذ.
سير عمل التحول
تكونت عملية التحقق هذه من أربع مراحل. تمت ترجمة عقود الصلابة أولا إلى تمثيل آلة الحالة المنتهية (FSM-SC). تم ترميز نموذج FSM-SC لاحقا في Event-B، مع ثوابت محددة ودرجات تحسين واضحة. تمت ترجمة تجريد FSM-SC إلى نموذج SMV في nuXmv. تم الإبلاغ عن نتائج التحقق كإحصائيات حول إثبات الإعفاء من الالتزام وفحص نموذج CTL، وتم تقديم أمثلة مضادة كحالات.
بناء FSM
تم تجريد كل عقد كآلة حالة محدودة تعرف كما يلي:

حيث:
S = مجموعة الحالات
S₀ = الحالة الابتدائية
T = علاقة انتقالية
V = رسم الرؤية
G = مسندات الحماية
A = تحديثات الإجراءات/الحالة.
الخوارزمية 1: بناء FSM من Solidity
الإدخال: كود المصدر Solidity
المخرج: FSM-SC
1) تحليل شجرة النحو المجردة لعقد الصلابة.
2) إنشاء الحالة الابتدائية S₀ من تعريف المنشئ.
3) لكل دالة صلابة f، أنشئ حالة تحكم مميزة S_f وسجل رؤية V(f) ∈ {عامة، خارجية، داخلية، خاصة}.
4) لكل بيان ضمن الدالة f، اشتق انتقال t عن طريق استخراج مسندات الحراسة من شروط الطلب/التأكيد والإجراءات من تحديثات متغيرات الحالة.
5) أضف الانتقال t إلى T.
6) إنشاء أنواع انتقال صريحة لعمليات نقل الإيثر (استدعاء، إرسال، نقل)، والاستدعاءات الداخلية والخارجية، واستدعاء التفويض، والتدمير الذاتي، واستخدام tx.origin، والفروع الشروطية، وتركيبات الحلقات.
7) إعادة FSM-SC = (S, S₀, T, V, G, A).
وكل دالة صلبة مرتبطة بحالة تحكم مختلفة في FSM. لفهم الثغرات، تم تجريد تدفقات التنفيذ ذات الصلة بالثغرات، مثل تلك التدفقات التي تتضمن استدعاءات خارجية تليها تحديثات توازن، بشكل صريح إلى انتقالات مرتبة. يصف الشكل 2 نموذجا لمخطط FSM-SC لعقد على نمط SimpleDAO، موضحا كيف تم تجريد حالات الدخول، وانتقالات الاستدعاء الخارجي، وتسلسلات تحديث الحالة خلال هذه المرحلة من البناء.
ترميز FSM إلى الحدث-B
تم تمثيل انتقال FSM كهياكل حدث ب. جميع الانتقالات تتوافق مع أحداث الحدث ب، بما في ذلك الحراس والإجراءات الخاصة.
خوارزمية 2: ترميز FSM إلى الحدث B
الإدخال: FSM-SC
المخرج: آلة الحدث-ب والسياق
1) تعريف STATE_SET والوظيفة في سياق العقد.
2) إعلان المتغيرات التي تمثل حالة التحكم في FSM وحالة على مستوى العقد.
3) تمثيل كل حالة تحكم FSM s ∈ S باستخدام current_state ∈ STATE_SET.
4) لكل انتقال (s →s′, g, a)، أنشئ حدث-ب حدث E_t مع:
5) حيث current_state = s ∧ g
6) ثم current_state := s′ ∥ ينطبق (a)
7) ترميز قيود الرؤية باستخدام حراس مشتقة من V(f).
8) تعريف الثوابت inv1–inv9 لالتقاط خصائص السلامة والاتساق.
9) تعريف التهيئة عن طريق تعيين قيم S₀ والقيم الافتراضية.
مجموعة الحالات، الحالة الحالية، رؤية الدالة، مكدس الاستدعاءات، ختم المعاملات، حالة نقل الأثير، علم الاستدعاء، علم التدمير الذاتي، وحالة التحقق هي بعض المتغيرات التي تم التقاطها في نموذج الحدث B. الثوابت (inv1-inv9) وإجراءات التهيئة (act1-act6) تتطابق مع تلك الموجودة في المواصفة الرسمية. يوفر الشكل 3 أيضا تمثيلا بيانيا لكيفية الحفاظ على الأحداث الرئيسية ذات الصلة بالثغرات، خاصة الانتقالات المتعلقة بإعادة الدخول، في ترميز الحدث B. يشرح هذا الشكل كيف يتم رسم الأنماط الهيكلية لنموذج FSM-SC الموضحة في الشكل 2 إلى أحداث حدث-ب قابلة للتحقق.
استراتيجية التنقية
تم تنفيذ مستويين من التحسين. تم تمثيل تدفق التحكم التعاقدي عالي المستوى والثوابت الأساسية على المستوى المجرد. أضاف المستوى المحسن قيودا خاصة بالعقود، بما في ذلك قيود مكدس النداءات، وقيود الرؤية، وشروط منع العودة إلى المكان.
الخوارزمية 3: التحسين والتفريغ بالإثبات
الإدخال: آلة مجردة وآلة مكررة
النتائج: التزامات وإحصائيات إثبات الإسفاء
1) توليد التزامات إثبات للآلة المجردة في رودان.
2) تنفيذ الإثباتات التلقائية الممكنة وتسجيل نتائج التفريغ.
3) توليد التزامات مقاومة للتحسين للآلة المكررة.
4) تطبيق الإثباتات التلقائية على التزامات التحسن.
5) الوفاء بالالتزامات المتبقية بشكل تفاعلي عند الضرورة.
6) إحصائيات إثبات التصدير وتقارير الحالة.
شملت تقارير الإثبات عدد الثواب، مستويات التنقية، التزامات الإثبات المولدة، معدل التفريغ التلقائي، معدل التفريغ التفاعلي، ومعدل التفريغ النهائي.
مواصفات خصائص CTL وفحص النماذج
تمت ترجمة تجريد FSM-SC إلى نموذج SMV للتحقق الزمني المتفرع في nuXmv.
الخوارزمية 4: التحقق من FSM إلى SMV وCTL
المخرج: نتيجة التحقق من PASS/FAIL وتتبع الأمثلة المضادة (إن وجدت)
1. تسجيل حالات التحكم في FSM كحالة متغيرة SMV معدودة.
2. تحويل انتقالات FSM إلى تعيينات محمية للولايات التالية.
3. الحفاظ على العلامات المتعلقة بالحالات المتعلقة بالثغرات، مثل المكالمات الخارجية وتحديثات التوازن.
4. ترميز خصائص CTL في nuXmv وإجراء فحص النماذج.
5. إذا فشلت خاصية، قم بتوليد مسارات الأمثلة المضادة التي تمثل تسلسلات انتقال FSM.
شمل فحص CTL متطلبات أوامر إعادة الدخول، وإنهاء تحديثات الحالة بعد عمليات النقل، والحد من الدخول المتكرر غير المقيد إلى الأقسام الحرجة، وتجنب الجمود.
خصائص الأمان تم التحقق منها
تم تأكيد عقد Simple DAO الذي يمنع العودة إلى الداخل من خلال ضمان ترتيب آمن بين المكالمات الخارجية وتحديثات الحالة عبر الثوابت وقيود CTL. وعندما يسمح ذلك، كان هؤلاء الحراس يفحصون قيود التحكم في الوصول، لضمان تقييد الانتقالات غير المصرح بها بواسطة الثابتات. وقد تحقق نموذج السجل المختصر من ثوابت تفرد المعاملات واتساقها على مستوى الوقاية داخل العقد.
المخرجات المبلغ عنها
يوفر قسم النتائج تقارير حول مقاييس هيكلية FSM، ومقاييس نموذج الحدث B، والإحصائيات لإثبات الالتزام والتحقق من CTL. تقدم نتائج الإثبات الرسمي، ونتائج التحقق من نموذج CTL، بشكل منفصل للتمييز بين ضمانات صحة الأدلة بواسطة الثوابت وأدلة التحقق الزمني باستخدام التحقق الزمني.