أفضل الممارسات لترقية العقود الذكية في Rust: التعلم من حالة عقد NEAR

دليل ترقية العقود الذكية Rust

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

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

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

1. هيكل بيانات العقد لم يتم تعديله

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

باش نير نشر
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

يمكن قراءة بيانات العقد الأصلية بشكل طبيعي.

!

2. تعديل هيكل بيانات العقد

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

صدأ #[private] #[init(ignore_state)] pub fn migrate() -> Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); الذات { new_field: LookupMap::new(b"n".to_vec()), old_field: old_state.old_field ، } }

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

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

يمكن أن يؤدي ذلك إلى نقل الحالة القديمة إلى العقد الجديد.

!

نصائح أمان ترقية العقود

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

يمكن أن يؤدي الترقية المعقولة إلى الحفاظ على أمان العقد وقابليته للتوسع، وهو جزء مهم من تطوير العقود الذكية.

!

شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 3
  • مشاركة
تعليق
0/400
PumpBeforeRugvip
· منذ 13 س
إذا لم تستطع الحماية من الثغرات البسيطة، فما الفائدة من اللعب في سباق عاري؟
شاهد النسخة الأصليةرد0
DegenWhisperervip
· منذ 13 س
لا عجب أن يكون رست رائع
شاهد النسخة الأصليةرد0
WalletWhisperervip
· منذ 13 س
الميدان الجديد هنا، يبدو مثيراً للاهتمام
شاهد النسخة الأصليةرد0
  • تثبيت