عقد ذكي
آخر تحديث للصفحة: 22 أكتوبر 2025
العقود الذكية مصممة لتكون "بدون ثقة"، مما يعني أنه لا ينبغي للمستخدمين الوثوق بأطراف ثالثة (مثل المطورين والشركات) قبل التفاعل مع عقد. كشرط لعدم الثقة، يجب أن يكون المستخدمون والمطورون الآخرون قادرين على التحقق من الكود المصدر للعقد الذكي. كشرط لعدم الثقة، يجب أن يكون المستخدمون والمطورون الآخرون قادرين على التحقق من الكود المصدر للعقد الذكي.
من المهم التمييز بين "التحقق من النص البرمجي المصدر" و"التحقق الرسمي". يشير التحقق من النص البرمجي المصدر، الذي سيُشرح بالتفصيل أدناه، إلى التحقق من أن النص البرمجي المصدر المحدد لعقد ذكي بلغة عالية المستوى (مثل سوليديتي) يُجمَّع إلى نفس الـ bytecode الذي سيتم تنفيذه في عنوان العقد. ومع ذلك، فإن التحقق الرسمي يصف التحقق من صحة العقد الذكي، أي أن العقد يتصرف كما هو متوقع. على الرغم من اعتماد التحقق من العقد على السياق، فإنه يشير عادةً إلى التحقق من كود المصدر.
ما هو التحقق من الكود المصدر؟
قبل نشر عقد ذكي في آلة إيثريوم الافتراضية (EVM)، يُجمِّع المطورون النص البرمجي المصدر للعقد — وهي تعليمات مكتوبة بلغة سوليديتي أو لغة برمجة أخرى عالية المستوى — إلى bytecode. نظرًا لأن EVM لا يمكنه تفسير التعليمات عالية المستوى، فإن تجميع الكود المصدر إلى رمز ثنائي (أي تعليمات الآلة منخفضة المستوى) ضروري لتنفيذ منطق العقد في EVM.
التحقق من الكود المصدر هو مقارنة الكود المصدر للعقد الذكي مع الكود الثانوي المترجم المستخدم أثناء إنشاء العقد للكشف عن أي اختلافات. يعد التحقق من العقود الذكية أمرًا مهمًا لأن كود العقد المعلن عنه قد يكون مختلفًا عما يعمل على blockchain.
يتيح التحقق من العقد الذكي التحقق من عمل العقد من خلال اللغة الأعلى مستوى التي تمت كتابتها بها، دون الحاجة إلى قراءة الكود الآلي. يتيح التحقق من العقد الذكي التحقق من عمل العقد من خلال اللغة الأعلى مستوى التي تمت كتابتها بها، دون الحاجة إلى قراءة الكود الآلي. وهذا يجعل قراءة الكود أسهل بكثير. يتيح التحقق من المصدر أيضًا توثيق التعليمات البرمجية، حتى يتمكن المستخدمون النهائيون من معرفة ما تم تصميم العقد الذكي للقيام به.
ما هو التحقق الكامل؟
هناك بعض الأجزاء من الكود المصدر التي لا تؤثر على الكود الثانوي المترجم مثل التعليقات أو أسماء المتغيرات. وهذا يعني أن كودين مصدرين بأسماء متغيرات مختلفة وتعليقات مختلفة سيكونان قادرين على التحقق من نفس العقد. من خلال ذلك، يمكن للممثل الخبيث إضافة تعليقات خادعة أو إعطاء أسماء متغيرات مضللة داخل الكود المصدر والحصول على العقد الذي تم التحقق منه باستخدام كود مصدر مختلف عن الكود المصدر الأصلي.
من الممكن تجنب ذلك عن طريق إلحاق بيانات إضافية بـ bytecode لتكون بمثابة ضمان تشفير لدقة النص البرمجي المصدر، و_كبصمة_ لمعلومات التجميع. توجد المعلومات الضرورية في البيانات الوصفية لعقد سوليديتي (opens in a new tab)، ويتم إلحاق التجزئة (هاش) لهذا الملف بـ bytecode الخاص بالعقد. يمكنك رؤية ذلك عمليًا في ملعب بيانات التعريف (opens in a new tab)
يحتوي ملف البيانات الوصفية على معلومات حول تجميع العقد بما في ذلك ملفات المصدر وتجزئاتها. وهذا يعني أنه إذا تغيرت أي من إعدادات التجميع أو حتى بايت واحد في أحد ملفات المصدر، يتغير ملف البيانات الوصفية. وبالتالي، يتغير أيضًا تجزئة ملف البيانات الوصفية، الملحقة بالرمز الثنائي. هذا يعني أنه إذا تطابق البايت كود الخاص بالعقد + تجزئة البيانات الوصفية الملحقة مع كود المصدر وإعدادات التجميع المقدمة، فيمكننا التأكد من أن هذا هو نفس كود المصدر المستخدم في التجميع الأصلي، ولا يختلف حتى بايت واحد.
يُشار إلى هذا النوع من التحقق الذي يستفيد من التجزئة (هاش) للبيانات الوصفية باسم "التحقق الكامل (opens in a new tab)" (يُعرف أيضًا بـ "التحقق المثالي"). إذا لم تتطابق تجزئات البيانات الوصفية أو لم يتم أخذها في الاعتبار أثناء التحقق، فسيكون ذلك "تطابقًا جزئيًا"، وهو حاليًا الطريقة الأكثر شيوعًا للتحقق من العقود. من الممكن إدراج نص برمجي ضار (opens in a new tab) لن ينعكس في النص البرمجي المصدر المُتحقق منه بدون التحقق الكامل. معظم المطورين لا يدركون عملية التحقق الكاملة ولا يحتفظون بملف البيانات الوصفية للتجميع الخاص بهم، وبالتالي فإن التحقق الجزئي كان الطريقة الفعلية للتحقق من العقود حتى الآن.
لماذا يعد التحقق من الكود المصدر مهمًا؟
انعدام الثقة
يمكن القول إن انعدام الثقة هو أكبر فرضية للعقود الذكية والتطبيقات اللامركزية (dapps). العقود الذكية "غير قابلة للتغيير" ولا يمكن تغييرها؛ حيث سيقوم العقد فقط بتنفيذ منطق العمل المحدد في الكود في وقت النشر. وهذا يعني أن المطورين والشركات لا يمكنهم التلاعب بكود العقد بعد نشره على إيثريوم.
لكي يكون العقد الذكي خاليًا من الثقة، يجب أن يكون رمز العقد متاحًا للتحقق المستقل. في حين أن الكود الثنائي المجمّع لكل عقد ذكي متاح للعامة على blockchain، فإن اللغة منخفضة المستوى يصعب فهمها - لكل من المطورين والمستخدمين.
تعمل المشاريع على تقليل افتراضات الثقة من خلال نشر الكود المصدر لعقودها. لكن هذا يؤدي إلى مشكلة أخرى: من الصعب التحقق من أن الكود المصدر المنشور يتطابق مع الكود الثانوي للعقد. في هذا السيناريو، يتم فقدان قيمة عدم الثقة لأن المستخدمين يجب أن يثقوا في المطورين بعدم تغيير منطق أعمال العقد (أي عن طريق تغيير الكود الثنائي) قبل نشره على blockchain.
توفر أدوات التحقق من الكود المصدر ضمانات بأن ملفات الكود المصدر للعقد الذكي تتطابق مع كود التجميع. النتيجة هي نظام بيئي لا يعتمد على الثقة، حيث لا يثق المستخدمون في الأطراف الثالثة بشكل أعمى، بل يتحققون بدلاً من ذلك من الكود قبل إيداع الأموال في العقد.
سلامة المستخدم
مع العقود الذكية، عادة ما يكون هناك قدر كبير من المال على المحك. وهذا يتطلب ضمانات أمنية أعلى والتحقق من منطق العقد الذكي قبل استخدامه. المشكلة هي أن المطورين عديمي الضمير يمكنهم خداع المستخدمين عن طريق إدراج تعليمات برمجية ضارة في العقد الذكي. بدون التحقق، يمكن أن تحتوي العقود الذكية الخبيثة على أبواب خلفية (opens in a new tab)، وآليات للتحكم في الوصول مثيرة للجدل، وثغرات قابلة للاستغلال، وأشياء أخرى تعرض سلامة المستخدم للخطر قد تمر دون أن يتم اكتشافها.
إن نشر ملفات الكود المصدر للعقد الذكي يجعل من الأسهل على المهتمين، مثل المدققين، تقييم العقد بحثًا عن متجهات الهجوم المحتملة. بفضل قيام أطراف متعددة بالتحقق من العقد الذكي بشكل مستقل، يتمتع المستخدمون بضمانات أقوى فيما يتعلق بأمان العقد.
كيفية التحقق من النص البرمجي المصدر لعقود إيثريوم الذكية
يتطلب نشر عقد ذكي على إيثريوم إرسال معاملة مع حمولة بيانات (bytecode مُجمَّع) إلى عنوان خاص. يتم إنشاء حمولة البيانات عن طريق تجميع النص البرمجي المصدر، بالإضافة إلى وسائط المُنشئ (opens in a new tab) لمثيل العقد الملحقة بحمولة البيانات في المعاملة. التجميع حتمي، مما يعني أنه ينتج دائمًا نفس المخرجات (أي bytecode العقد) إذا تم استخدام نفس الملفات المصدر وإعدادات التجميع (مثل إصدار المترجم، والمحسن).
يتضمن التحقق من العقد الذكي الخطوات التالية بشكل أساسي:
-
قم بإدخال ملفات المصدر وإعدادات التجميع إلى المترجم.
-
قم بإدخال ملفات المصدر وإعدادات التجميع إلى المترجم.
-
احصل على الرمز الثنائي للعقد المنشور على عنوان معين
-
قم بمقارنة الكود الثنائي المنشور مع الكود الثنائي المعاد تجميعه. إذا تطابقت الرموز، فسيتم التحقق من العقد باستخدام كود المصدر وإعدادات التجميع المحددة.
-
إذا تطابقت الرموز، فسيتم التحقق من العقد باستخدام كود المصدر وإعدادات التجميع المحددة.
لاحظ أن هذا وصف مبسط للتحقق وهناك العديد من الاستثناءات التي لن تنجح معه مثل وجود متغيرات غير قابلة للتغيير (opens in a new tab).
أدوات التحقق من النص البرمجي المصدر
أدوات التحقق من كود المصدر ولهذا السبب لدينا أدوات للتحقق من الكود المصدر للعقود الذكية المنتشرة على إيثريوم. تعمل هذه الأدوات على أتمتة أجزاء كبيرة من التحقق من الكود المصدر وتقوم أيضًا بتنسيق العقود التي تم التحقق منها لصالح المستخدمين.
إيثرسكان
على الرغم من أنه معروف في الغالب بأنه مستكشف بلوكتشين إيثريوم، يوفر إيثرسكان أيضًا خدمة التحقق من النص البرمجي المصدر (opens in a new tab) لمطوري العقود الذكية ومستخدميها.
يتيح لك إيثرسكان إعادة تجميع البايت كود العقد من الحمولة الأصلية للبيانات (كود المصدر، عنوان المكتبة، إعدادات المترجم، عنوان العقد، وما إلى ذلك). إذا كان bytecode المعاد تجميعه مرتبطًا بـ bytecode (ومعلمات المُنشئ) للعقد الموجود على السلسلة، فعندئذٍ يتم التحقق من العقد (opens in a new tab).
بمجرد التحقق، يتلقى كود مصدر العقد الخاص بك علامة "تم التحقق منه" ويتم نشره على إيثرسكان ليتمكن الآخرون من تدقيقه. يُضاف أيضًا إلى قسم العقود المُتحقق منها (opens in a new tab) — وهو مستودع للعقود الذكية ذات النصوص البرمجية المصدر المُتحقق منها.
إيثرسكان هي الأداة الأكثر استخدامًا للتحقق من العقود. لكن، لدى التحقق من العقد في إيثرسكان عيبًا: فهو يفشل في مقارنة التجزئة (هاش) للبيانات الوصفية لـ bytecode الموجود على السلسلة و bytecode المعاد تجميعه. لذلك فإن المباريات في إيثرسكان هي مباريات جزئية.
المزيد عن التحقق من العقود على إيثرسكان (opens in a new tab).
بلوك سكوت
بلوك سكوت (opens in a new tab) هو مستكشف بلوكتشين مفتوح المصدر يوفر أيضًا خدمة التحقق من العقود (opens in a new tab) لمطوري العقود الذكية ومستخدميها. كبديل مفتوح المصدر، يوفر بلوك سكوت الشفافية في كيفية إجراء التحقق ويمكّن مساهمات المجتمع لتحسين عملية التحقق.
على غرار خدمات التحقق الأخرى، يسمح لك بلوك سكوت بالتحقق من الكود المصدر لعقدك عن طريق إعادة تجميع الكود الثنائي ومقارنته بالعقد المنشور. على غرار خدمات التحقق الأخرى، يسمح لك بلوك سكوت بالتحقق من الكود المصدر لعقدك عن طريق إعادة تجميع الكود الثنائي ومقارنته بالعقد المنشور. العقود المُتحقق منها مدرجة أيضًا في مستودع العقود المُتحقق منها (opens in a new tab) الخاص بـ بلوك سكوت لسهولة التصفح والاستكشاف.
سورسيفاي
سورسيفاي (opens in a new tab) هو أداة أخرى للتحقق من العقود وهي مفتوحة المصدر ولامركزية. إنه ليس مستكشف كتل ويتحقق فقط من العقود على شبكات مختلفة قائمة على EVM (opens in a new tab). يعمل كبنية تحتية عامة للأدوات الأخرى للبناء فوقها، ويهدف إلى تمكين تفاعلات العقود الأكثر سهولة للاستخدام البشري باستخدام واجهة التطبيق الثنائية (ABI) وتعليقات نات سبيك (opens in a new tab) الموجودة في ملف البيانات الوصفية.
على عكس إيثرسكان، يدعم سورسيفاي المطابقات الكاملة مع تجزئة البيانات الوصفية. تُقدَّم العقود المُتحقق منها في مستودعه العام (opens in a new tab) على HTTP و آي بي إف إس (opens in a new tab)، وهو تخزين لامركزي بعنونة المحتوى (opens in a new tab). يتيح هذا جلب ملف البيانات الوصفية لعقد عبر آي بي إف إس نظرًا لأن تجزئة البيانات الوصفية المضافة هي تجزئة آي بي إف إس.
بالإضافة إلى ذلك، يمكنك أيضًا استرداد ملفات التعليمات البرمجية المصدرية عبر آي بي إف إس، حيث يتم العثور على تجزئات آي بي إف إس لهذه الملفات أيضًا في البيانات الوصفية. يمكن التحقق من العقد من خلال توفير ملف البيانات الوصفية والملفات المصدر عبر واجهة برمجة التطبيقات (API) الخاصة به أو واجهة المستخدم (UI) (opens in a new tab)، أو باستخدام المكونات الإضافية. تستمع أداة مراقبة سورسيفاي أيضًا إلى عمليات إنشاء العقود على الكتل الجديدة وتحاول التحقق من العقود إذا تم نشر بياناتها الوصفية وملفات المصدر على آي بي إف إس.
المزيد عن التحقق من العقود على سورسيفاي (opens in a new tab).
تيندرلي
تتيح منصة تيندرلي (opens in a new tab) لمطوري ويب3 بناء العقود الذكية واختبارها ومراقبتها وتشغيلها. من خلال الجمع بين أدوات التصحيح مع إمكانية المراقبة وبناء البنية التحتية، يساعد تيندرلي المطورين على تسريع تطوير العقود الذكية. لتمكين ميزات تيندرلي بالكامل، يحتاج المطورون إلى إجراء التحقق من النص البرمجي المصدر (opens in a new tab) باستخدام عدة طرق.
من الممكن التحقق من العقد بشكل خاص أو عام. إذا تم التحقق منه بشكل خاص، فسيكون العقد الذكي مرئيًا لك فقط (وللأعضاء الآخرين في مشروعك). يؤدي التحقق من العقد علنًا إلى جعله مرئيًا للجميع الذين يستخدمون منصة تيندرلي.
يمكنك التحقق من عقودك باستخدام لوحة التحكم (opens in a new tab)، أو ملحق تيندرلي هارد هات (opens in a new tab)، أو واجهة سطر الأوامر (CLI) (opens in a new tab).
عند التحقق من العقود من خلال لوحة المعلومات، يتعين عليك استيراد ملف المصدر أو ملف البيانات الوصفية الذي تم إنشاؤه بواسطة مُجمِّع سوليديتي، والعنوان/الشبكة، وإعدادات المُجمِّع.
يسمح لك استخدام البرنامج الإضافي تيندرلي هارد هات بالتحكم بشكل أكبر في عملية التحقق بمجهود أقل، مما يتيح لك الاختيار بين التحقق التلقائي (بدون كود) والتحقق اليدوي (المستند إلى الكود).
