عقد ذكي
آخر تحديث للصفحة: 21 أكتوبر 2025
العقود الذكية على إيثريوم هي برامج ذاتية التنفيذ تعمل في إيثريوم Virtual Machine (EVM). تعتبر هذه البرامج غير قابلة للتغيير من حيث التصميم، مما يمنع إجراء أي تحديثات لمنطق العمل بمجرد نشر العقد.
في حين أن الثبات ضروري لعدم الثقة واللامركزية وأمان العقود الذكية، إلا أنه قد يكون عيبًا في بعض الحالات. على سبيل المثال، قد يجعل الكود غير القابل للتغيير من المستحيل على المطورين إصلاح العقود المعرضة للخطر.
ومع ذلك، أدى البحث المتزايد في تحسين العقود الذكية إلى تقديم العديد من أنماط الترقية. تتيح أنماط الترقية هذه للمطورين ترقية العقود الذكية (مع الحفاظ على الثبات) عن طريق وضع منطق الأعمال في عقود مختلفة.
المتطلبات الأساسية
يجب أن يكون لديك فهم جيد لـ العقود الذكية وتشريح العقود الذكية وآلة إيثريوم الافتراضية (EVM). يفترض هذا الدليل أيضًا أن القراء لديهم فهم لبرمجة العقود الذكية.
ما هو ترقية العقد الذكي؟ ما هو تطوير العقد الذكي؟
تتضمن ترقية العقد الذكي تغيير منطق الأعمال الخاص بالعقد الذكي مع الحفاظ على حالة العقد. من المهم توضيح أن إمكانية الترقية والقدرة على التغيير ليسا الشيء نفسه، خاصة في سياق العقود الذكية.
لا يزال من غير الممكن تغيير البرنامج المنشور على عنوان على شبكة إيثريوم. ولكن يمكنك تغيير الكود الذي يتم تنفيذه عندما يتفاعل المستخدمون مع عقد ذكي.
يمكن القيام بذلك عبر الطرق التالية:
-
إنشاء إصدارات متعددة من العقد الذكي ونقل الحالة (أي البيانات) من العقد القديم إلى نسخة جديدة من العقد.
-
إنشاء عقود منفصلة لتخزين منطق العمل والحالة.
-
استخدام أنماط الوكيل لتفويض استدعاءات الوظائف من عقد وكيل غير قابل للتغيير إلى عقد منطقي قابل للتعديل.
-
إنشاء عقد رئيسي غير قابل للتغيير يتفاعل مع عقود الأقمار الصناعية المرنة ويعتمد عليها لتنفيذ وظائف محددة.
-
استخدام نمط الماس لتفويض استدعاءات الوظائف من عقد الوكيل إلى العقود المنطقية.
آلية التطوير رقم 1: ترحيل العقود
تعتمد عملية ترحيل العقود على الإصدارات - فكرة إنشاء وإدارة حالات فريدة للبرنامج نفسه. تتضمن عملية ترحيل العقد نشر نسخة جديدة من عقد ذكي موجود ونقل التخزين والأرصدة إلى العقد الجديد.
سيحتوي العقد الذي تم نشره حديثًا على مساحة تخزين فارغة، مما يسمح لك باسترداد البيانات من العقد القديم وكتابتها في التنفيذ الجديد. Afterward, you will need to update all contracts that interacted with the old contract to reflect the new address.
الخطوة الأخيرة في نقل العقد هي إقناع المستخدمين بالتبديل إلى استخدام العقد الجديد. سوف يحتفظ إصدار العقد الجديد بأرصدة المستخدمين وعناوينهم، مما يحافظ على ثبات العقد. إذا كان العقد يعتمد على الرمز المميز، فسوف تحتاج أيضًا إلى الاتصال بالبورصات للتخلص من العقد القديم واستخدام العقد الجديد.
تُعد ترحيل العقود إجراءً مباشرًا وآمنًا نسبيًا لترقية العقود الذكية دون كسر تفاعلات المستخدم. ومع ذلك، فإن نقل مساحة تخزين المستخدم وأرصدته يدويًا إلى العقد الجديد يستغرق وقتًا طويلاً وقد يؤدي إلى تكاليف غاز عالية.
المزيد عن ترحيل العقود. (opens in a new tab)
آلية التطوير رقم 2: فصل البيانات
طريقة أخرى لترقية العقود الذكية هي فصل منطق الأعمال وتخزين البيانات في عقود منفصلة. وهذا يعني أن المستخدمين يتفاعلون مع العقد المنطقي، بينما يتم تخزين البيانات في عقد التخزين.
يحتوي العقد المنطقي على الكود الذي يتم تنفيذه عند تفاعل المستخدمين مع التطبيق. يحتوي العقد المنطقي على الكود الذي يتم تنفيذه عند تفاعل المستخدمين مع التطبيق.
وفي الوقت نفسه، يحتفظ عقد التخزين بالحالة المرتبطة بالعقد الذكي، مثل أرصدة المستخدمين وعناوينهم. لاحظ أن عقد التخزين مملوك للعقد المنطقي وتم تكوينه باستخدام عنوان الأخير عند النشر. يؤدي هذا إلى منع العقود غير المصرح بها من استدعاء عقد التخزين أو تحديث بياناته.
بشكل افتراضي، يكون عقد التخزين غير قابل للتغيير، ولكن يمكنك استبدال العقد المنطقي الذي يشير إليه بتنفيذ جديد. سيؤدي هذا إلى تغيير الكود الذي يتم تشغيله في EVM، مع الحفاظ على التخزين والأرصدة سليمة.
يتطلب استخدام طريقة الترقية هذه تحديث عنوان العقد المنطقي في عقد التخزين. يجب عليك أيضًا تكوين العقد المنطقي الجديد باستخدام عنوان عقد التخزين للأسباب التي تم شرحها سابقًا.
يمكن القول إن نمط فصل البيانات أسهل في التنفيذ مقارنة بهجرة العقد. ومع ذلك، سيتعين عليك إدارة عقود متعددة وتنفيذ مخططات ترخيص معقدة لحماية العقود الذكية من الترقيات الضارة.
آلية التطوير رقم 3: أنماط الوكيل
يستخدم نمط الوكيل أيضًا فصل البيانات للحفاظ على منطق العمل والبيانات في عقود منفصلة. ومع ذلك، في نمط الوكيل، يقوم عقد التخزين (المسمى بالوكيل) باستدعاء العقد المنطقي أثناء تنفيذ التعليمات البرمجية. وهذا عكس طريقة فصل البيانات، حيث يستدعي العقد المنطقي عقد التخزين.
وهذا ما يحدث في نمط الوكيل:
-
يتفاعل المستخدمون مع عقد الوكيل، الذي يخزن البيانات، لكنه لا يحمل منطق الأعمال.
-
يخزن عقد الوكيل عنوان عقد المنطق ويفوض جميع استدعاءات الوظائف إلى عقد المنطق (الذي يحمل منطق الأعمال) باستخدام دالة
delegatecall. -
بعد إعادة توجيه المكالمة إلى العقد المنطقي، يتم استرداد البيانات المسترجعة من العقد المنطقي وإعادتها إلى المستخدم.
يتطلب استخدام أنماط الوكيل فهم دالة delegatecall. بشكل أساسي، delegatecall هو رمز تشغيلي يسمح لعقد باستدعاء عقد آخر، بينما يحدث تنفيذ النص البرمجي الفعلي في سياق العقد المستدعي. أحد الآثار المترتبة على استخدام delegatecall في أنماط الوكيل هو أن عقد الوكيل يقرأ ويكتب في تخزينه وينفذ المنطق المخزن في عقد المنطق كما لو كان يستدعي دالة داخلية.
من توثيق سوليديتي (opens in a new tab):
يوجد متغير خاص لاستدعاء الرسالة، يُدعى delegatecall وهو مطابق لاستدعاء الرسالة بصرف النظر عن حقيقة أن النص البرمجي في العنوان المستهدف يُنفذ في سياق (أي، في عنوان) العقد المستدعي وأن
msg.senderوmsg.valueلا تغيران قيمهما. وهذا يعني أن العقد يمكنه تحميل النص البرمجي ديناميكيًا من عنوان مختلف في وقت التشغيل. لا تزال مساحة التخزين والعنوان الحالي والرصيد تشير إلى العقد المستدعي، ويتم أخذ النص البرمجي فقط من العنوان المستدعى._
يعرف عقد الوكيل كيفية استدعاء delegatecall كلما استدعى مستخدم دالة لأنه يحتوي على دالة fallback مدمجة فيه. في برمجة سوليديتي، تُنفذ الدالة البديلة (opens in a new tab) عندما لا يتطابق استدعاء دالة مع الدوال المحددة في العقد.
يتطلب جعل نمط الوكيل يعمل كتابة دالة احتياطية مخصصة تحدد كيفية تعامل عقد الوكيل مع استدعاءات الوظيفة التي لا يدعمها. في هذه الحالة، تتم برمجة وظيفة الوكيل الاحتياطية لبدء استدعاء المفوض وإعادة توجيه طلب المستخدم إلى تنفيذ عقد المنطق الحالي.
يعد عقد الوكيل غير قابل للتغيير بشكل افتراضي، ولكن من الممكن إنشاء عقود منطقية جديدة بمنطق أعمال محدث. يعد إجراء الترقية بعد ذلك مسألة تغيير عنوان العقد المنطقي المشار إليه في عقد الوكيل.
من خلال توجيه عقد الوكيل إلى عقد منطقي جديد، يتغير الكود الذي يتم تنفيذه عندما يستدعي المستخدمون وظيفة عقد الوكيل. يتيح لنا هذا ترقية منطق العقد دون مطالبة المستخدمين بالتفاعل مع عقد جديد.
تُعد أنماط الوكيل طريقة شائعة لترقية العقود الذكية لأنها تعمل على إزالة الصعوبات المرتبطة بهجرة العقود. ومع ذلك، فإن استخدام أنماط الوكيل أكثر تعقيدًا ويمكن أن تُدخل عيوبًا خطيرة، مثل تعارض محددات الدوال (opens in a new tab)، إذا استُخدمت بشكل غير صحيح.
المزيد عن أنماط الوكيل (opens in a new tab).
آلية التطوير رقم 4: نمط الاستراتيجية
تتأثر هذه التقنية بـ نمط الاستراتيجية (opens in a new tab)، الذي يشجع على إنشاء برامج تتفاعل مع برامج أخرى لتنفيذ ميزات محددة. إن تطبيق نمط الإستراتيجية على تطوير الإيثريوم يعني بناء عقد ذكي يستدعي وظائف من عقود أخرى.
يحتوي العقد الرئيسي في هذه الحالة على منطق العمل الأساسي، لكنه يتفاعل مع عقود ذكية أخرى ("عقود الأقمار الصناعية") لتنفيذ وظائف معينة. يخزن هذا العقد الرئيسي أيضًا عنوان كل عقد قمر صناعي ويمكنه التبديل بين التنفيذات المختلفة لعقد القمر الصناعي.
يمكنك إنشاء عقد قمر صناعي جديد وتكوين العقد الرئيسي بالعنوان الجديد. يتيح لك هذا تغيير الاستراتيجيات (أي، تنفيذ منطق جديد) لعقد ذكي.
على الرغم من تشابه نمط الوكيل مع نمط الوكيل الذي ناقشناه سابقًا، فإن نمط الإستراتيجية مختلف لأن العقد الرئيسي، الذي يتفاعل معه المستخدمون، يحمل منطق الأعمال. يتيح لك استخدام هذا النمط فرصة إدخال تغييرات محدودة على العقد الذكي دون التأثير على البنية التحتية الأساسية.
العيب الرئيسي هو أن هذا النمط مفيد في الغالب لطرح ترقيات بسيطة. بالإضافة إلى ذلك، إذا تم اختراق العقد الرئيسي (على سبيل المثال، عن طريق الاختراق)، فلن تتمكن من استخدام طريقة الترقية هذه.
آلية التطوير رقم 5: النمط الماسي
يمكن اعتبار نمط الماس بمثابة تحسين لنمط الوكيل. تختلف أنماط الماس عن أنماط الوكيل لأن عقد الوكيل الماسي يمكنه تفويض استدعاءات الوظيفة إلى أكثر من عقد منطقي واحد.
تُعرف العقود المنطقية في النمط الماسي باسم الأوجه. لجعل النمط الماسي يعمل، تحتاج إلى إنشاء تخطيط في عقد الوكيل يربط محددات الدوال (opens in a new tab) بعناوين أوجه مختلفة.
عندما يقوم المستخدم بإجراء استدعاء وظيفة، يتحقق عقد الوكيل من التعيين للعثور على الجانب المسؤول عن تنفيذ تلك الوظيفة. ثم يستدعي delegatecall (باستخدام الدالة البديلة) ويعيد توجيه الاستدعاء إلى العقد المنطقي المناسب.
يتمتع نمط ترقية الماس ببعض المزايا مقارنة بأنماط ترقية الوكيل التقليدية:
-
إنه يسمح لك بترقية جزء صغير من العقد دون تغيير الكود بأكمله. يتطلب استخدام نمط الوكيل للترقيات إنشاء عقد منطقي جديد تمامًا، حتى بالنسبة للترقيات البسيطة.
-
تحتوي جميع العقود الذكية (بما في ذلك العقود المنطقية المستخدمة في أنماط الوكيل) على حد حجم يبلغ 24 كيلوبايت، والذي يمكن أن يشكل قيدًا - خاصة بالنسبة للعقود المعقدة التي تتطلب المزيد من الوظائف. يجعل نمط الماس من السهل حل هذه المشكلة عن طريق تقسيم الوظائف عبر عقود منطقية متعددة.
-
تعتمد أنماط الوكيل على نهج شامل للتحكم في الوصول. يمكن للكيان الذي لديه حق الوصول إلى دوال التطوير تغيير العقد بأكمله. لكن نمط الماس يتيح نهج الأذونات المعيارية، حيث يمكنك تقييد الكيانات لترقية وظائف معينة ضمن عقد ذكي.
المزيد عن النمط الماسي (opens in a new tab).
إيجابيات وسلبيات تطوير العقود الذكية
| الإيجابيات | السلبيات |
|---|---|
| يمكن أن يؤدي ترقية العقد الذكي إلى تسهيل إصلاح الثغرات الأمنية التي تم اكتشافها في مرحلة ما بعد النشر. | يمكن أن تؤدي ترقية العقد الذكي إلى تسهيل إصلاح الكأس الأمنية التي تم اكتشافها في مرحلة ما بعد النشر. |
| يمكن للمطورين استخدام الترقيات المنطقية لإضافة ميزات جديدة إلى التطبيقات اللامركزية. | يتعين على المستخدمين أن يثقوا في المطورين بعدم تعديل العقود الذكية بشكل تعسفي. |
| يمكن أن تؤدي ترقيات العقود الذكية إلى تحسين السلامة للمستخدمين النهائيين نظرًا لإمكانية إصلاح الأخطاء بسرعة. | تضيف وظيفة ترقية البرمجة في العقود الذكية طبقة أخرى من التعقيد وتزيد من احتمالية حدوث عيوب خطيرة. |
| تتيح ترقيات العقد للمطورين مساحة أكبر لتجربة ميزات مختلفة وتحسين التطبيقات اللامركزية بمرور الوقت. | إن فرصة ترقية العقود الذكية قد تشجع المطورين على إطلاق المشاريع بشكل أسرع دون الحاجة إلى بذل العناية الواجبة أثناء مرحلة التطوير. |
| إن عدم الأمان في التحكم في الوصول أو المركزية في العقود الذكية قد يجعل من السهل على الجهات الخبيثة إجراء ترقيات غير مصرح بها. |
اعتبارات لتطوير العقود الذكية
-
استخدم آليات التحكم في الوصول/التفويض الآمنة لمنع ترقيات العقود الذكية غير المصرح بها، خاصةً إذا كنت تستخدم أنماط الوكيل أو أنماط الاستراتيجية أو فصل البيانات. ومن الأمثلة على ذلك تقييد الوصول إلى وظيفة الترقية، بحيث لا يتمكن سوى مالك العقد من استدعائها.
-
يعد ترقية العقود الذكية نشاطًا معقدًا ويتطلب مستوى عالٍ من العناية لمنع إدخال الثغرات الأمنية.
-
تقليل افتراضات الثقة من خلال اللامركزية في عملية تنفيذ الترقيات. تتضمن الاستراتيجيات المحتملة استخدام عقد محفظة متعدد التوقيع للتحكم في عمليات التطوير، أو مطالبة أعضاء داو بالتصويت على الموافقة على التطوير.
-
كن على دراية بالتكاليف المترتبة على ترقية العقود. على سبيل المثال، قد تتطلب عملية نسخ الحالة (مثل أرصدة المستخدم) من عقد قديم إلى عقد جديد أثناء ترحيل العقد أكثر من معاملة واحدة، مما يعني المزيد من رسوم الغاز.
-
فكر في تنفيذ الأقفال الزمنية لحماية المستخدمين. يشير القفل الزمني إلى التأخير المفروض على التغييرات التي تطرأ على النظام. يمكن دمج الأقفال الزمنية مع نظام حوكمة متعدد التوقيعات للتحكم في الترقيات: إذا وصل الإجراء المقترح إلى حد الموافقة المطلوب، فلن يتم تنفيذه حتى تنقضي فترة التأخير المحددة مسبقًا.
تتيح الأقفال الزمنية للمستخدمين بعض الوقت للخروج من النظام إذا كانوا لا يوافقون على التغيير المقترح (على سبيل المثال، ترقية المنطق أو مخططات الرسوم الجديدة). بدون قيود زمنية، يحتاج المستخدمون إلى الثقة في المطورين حتى لا يقوموا بتنفيذ تغييرات تعسفية في العقد الذكي دون إشعار مسبق. العيب هنا هو أن الأقفال الزمنية تقيد القدرة على تصحيح الثغرات الأمنية بسرعة.
مصدر
ملحقات تطوير أوبن زبلين - مجموعة من الأدوات لنشر وتأمين العقود الذكية القابلة للتطوير.
دروس تعليمية
- تطوير عقودك الذكية | فيديو تعليمي على يوتيوب (opens in a new tab) من باتريك كولينز
- دليل تعليمي لترحيل العقود الذكية على إيثريوم (opens in a new tab) بقلم أوستن جريفيث
- استخدام نمط وكيل UUPS لتطوير العقود الذكية (opens in a new tab) بقلم برانيش أ.س
- دليل ويب3 التعليمي: كتابة عقد ذكي قابل للتطوير (وكيل) باستخدام أوبن زبلين (opens in a new tab) بقلم fangjun.eth
قراءة إضافية
- حالة تطوير العقود الذكية (opens in a new tab) بقلم سانتياغو بالادينو
- طرق متعددة لتطوير عقد سوليديتي ذكي (opens in a new tab) - مدونة Crypto Market Pool
- تعلَّم: تطوير العقود الذكية (opens in a new tab) - توثيق أوبن زبلين
- أنماط الوكيل لقابلية تطوير عقود سوليديتي: الوكلاء الشفافون مقابل وكلاء UUPS (opens in a new tab) بقلم نافين ساهو
- كيف تعمل تطويرات النمط الماسي (opens in a new tab) بقلم نيك مادج