طرق ترقية العقود الذكية Rust والاعتبارات الأمنية

robot
إنشاء الملخص قيد التقدم

مناقشة طرق ترقية العقود الذكية Rust

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

1. ضرورة ترقية العقود

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

  • إصلاح الثغرات الأمنية المكتشفة
  • إضافة ميزات جديدة
  • تحسين منطق العقد, زيادة الأداء

!

2. طرق ترقية العقود الذكية NEAR

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

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

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

باش قريب من النشر
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

في هذه الحالة، ستظل البيانات الموجودة في العقد الأصلي محفوظة.

2.2 تم تعديل هيكل بيانات العقود

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

إضافة طريقة 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 عند النشر:

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

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

!

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

عند إجراء ترقية للعقود الذكية، يجب الانتباه إلى النقاط التالية:

  • التحكم الصارم في صلاحيات الترقية، والسماح فقط لمالك العقد أو DAO بالترقية
  • يُوصى بتعيين مالك العقد كـ DAO، من خلال الاقتراحات والتصويت لإدارة التحديثات
  • أضف #[init(ignore_state)] قبل دالة الهجرة، تأكد من عدم تحميل الحالة قبل التنفيذ
  • بعد اكتمال النقل، قم بحذف دالة النقل لتجنب الاستدعاء المتكرر
  • تم استكمال تهيئة الهيكل البيانات الجديد أثناء الترحيل

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

!

INIT-1.62%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • مشاركة
تعليق
0/400
NFTArchaeologistvip
· منذ 6 س
التحديث هو الحقيقة الصعبة
شاهد النسخة الأصليةرد0
HappyToBeDumpedvip
· منذ 23 س
الترقية تعني إصلاح الثغرات
شاهد النسخة الأصليةرد0
NftBankruptcyClubvip
· منذ 23 س
لا مزيد من الحديث، فقط افعلها
شاهد النسخة الأصليةرد0
NFTHoardervip
· منذ 23 س
بالفعل الأمان هو الأهم
شاهد النسخة الأصليةرد0
FundingMartyrvip
· 07-29 01:36
أختار أن أتمسك بالرسوم
شاهد النسخة الأصليةرد0
  • تثبيت