استراتيجية ترقية العقود الذكية Rust: ضمان الأمان وقابلية الصيانة

خطة ترقية العقود الذكية Rust بالتفصيل

العقود الذكية في جوهرها هي برامج، ومن المحتمل أن تحتوي على عيوب. حتى بعد إجراء اختبارات وتدقيقات مكثفة، قد تظهر ثغرات. بمجرد استغلالها من قبل المهاجمين، قد تؤدي إلى خسائر في أصول المستخدمين، مما قد تكون له عواقب وخيمة. لذلك، فإن قابلية ترقية العقود ضرورية للغاية، وتستخدم بشكل رئيسي لإصلاح الثغرات وإضافة ميزات جديدة. ستتناول هذه المقالة الطرق الشائعة لترقية عقود Rust.

خطة ترقية عقد الإيثيريوم

تتميز العقود الذكية على الإيثيريوم بعدم قابليتها للتغيير، فلا يمكن تعديلها بعد نشرها. لحل الثغرات أو إضافة ميزات جديدة، فإن الممارسة الشائعة هي إعادة نشر عقد جديد. ولكن هذا يؤدي إلى تغيير عنوان العقد، مما يتطلب تعديل جميع تطبيقات DApp التي تستخدم ذلك العقد. بالإضافة إلى ذلك، يجب ترحيل بيانات الحالة من العقد القديم، وهو عمل شاق وعرضة للأخطاء.

لهذا، عادة ما يتم استخدام بنية تفصل بين البيانات والمنطق: يتم تخزين البيانات في العقود الذكية، بينما يتم تنفيذ جميع المنطق في عقد منطقي آخر. عند الترقية، يكفي تحديث العقد المنطقي، دون الحاجة إلى نقل بيانات الحالة.

يمكن استخدام عقد الوكالة (Proxy Contract) في التنفيذ الفعلي. يقوم عقد الوكالة بتخزين البيانات، ويستدعي عقد المنطق A من خلال deleGatecall. عند الترقية، يكفي نشر عقد المنطق الجديد B، ثم توجيه عقد الوكالة إلى B.

!

خطة ترقية عقد NEAR

باستخدام مشروع StatusMessage كمثال ، سنقدم طرق الترقية الشائعة لعقود NEAR.

بيانات هيكل العقد لم تتغير

إذا تم تعديل منطق العقد فقط، دون تغيير في هيكل البيانات، يمكن استخدام near deploy لإعادة نشر الكود الجديد مباشرة. ستظل البيانات الأصلية قابلة للوصول بشكل طبيعي.

تم تعديل بنية بيانات العقود

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

استخدم طريقة Migrate للتحديث

توفر NEAR طريقة Migrate لمساعدة في ترقية العقود. قم بإضافة طريقة migrate في العقد الجديد:

صدأ #[private] #[init(ignore_state)] pub fn migrate() -> Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); الذات { الشعارات: old_state.records, السير الذاتية: LookupMap::new(b'b'.to_vec()), } }

استدعاء طريقة migrate عند النشر:

near نشر
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'ترحيل'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet

بهذه الطريقة يمكن نقل بيانات العقد القديم إلى الهيكل الجديد بنجاح.

!

اعتبارات أمان ترقية العقود

  1. التحكم في الأذونات: يجب أن تكون وظيفة الترقية عبارة عن وظيفة only owner، يمكن استدعاؤها فقط من قبل المالك.

  2. يُوصى بتعيين المالِك كـ DAO، من خلال الاقتراحات والتصويت لإدارة العقد.

  3. أضف #[init(ignore_state)] قبل دالة الانتقال، تأكد من عدم تحميل الحالة قبل التنفيذ.

  4. بعد الانتهاء من النقل، احذف دالة النقل لضمان استدعائها مرة واحدة فقط.

  5. يتم الانتهاء من تهيئة بنية البيانات الجديدة عند الترحيل.

يمكن أن يؤدي الاستخدام المعقول لهذه الحلول الترقوية إلى ترقية وصيانة العقود الذكية بشكل مرن مع ضمان الأمان.

!

ETH1.25%
INIT2.83%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 7
  • مشاركة
تعليق
0/400
NFTArtisanHQvip
· 07-24 20:20
وجهة نظر مثيرة للاهتمام... لكن نمط البروكسي ليس بالضبط شكل دوتشامب الجاهز في الكود بصراحة
شاهد النسخة الأصليةرد0
rugdoc.ethvip
· 07-24 10:17
ريست لا يزال قليلاً محبطاً
شاهد النسخة الأصليةرد0
Hash_Banditvip
· 07-23 14:51
كنت هناك عندما تم تعدين البيتكوين على أجهزة الكمبيوتر المحمولة... قابلية الترقيات هي المفتاح ولكنها محفوفة بالمخاطر بصراحة
شاهد النسخة الأصليةرد0
AllTalkLongTradervip
· 07-21 20:52
مرة أخرى تتحدث عن الترقية. إذا كان علي أن أقول، فإن الأكثر أمانًا هو أن تتوقف مؤقتًا و تعيد التشغيل.
شاهد النسخة الأصليةرد0
TestnetFreeloadervip
· 07-21 20:51
استغل الثغرات مبكرًا! يمكنك الاستفادة من هذه الفرصة.
شاهد النسخة الأصليةرد0
ApeEscapeArtistvip
· 07-21 20:50
الثغرات لا تنتهي، من الأفضل ألا تتوقع الكثير.
شاهد النسخة الأصليةرد0
GasWhisperervip
· 07-21 20:24
بصراحة، العقود الذكية ليست سوى أخطاء تنتظر الحدوث... مطابقة الأنماط لن تنقذك من الاستغلالات، لول
شاهد النسخة الأصليةرد0
  • تثبيت