العقود الذكية كنوع من البرامج، لا مفر من وجود عيوب. حتى بعد إجراء اختبارات ومراجعات مكثفة، قد لا تزال هناك ثغرات. بمجرد استغلالها من قبل المهاجمين، قد يتسبب ذلك في خسارة أصول المستخدمين، مما يؤدي إلى عواقب وخيمة. لذلك، فإن قابلية ترقية العقود ضرورية للغاية، وتستخدم أساسًا لإصلاح الثغرات وإضافة ميزات جديدة. ستتناول هذه المقالة طرق ترقية العقود المكتوبة بلغة Rust.
طرق ترقية العقود الذكية NEAR
خذ مشروع StatusMessage كمثال لتقديم طرق الترقية الشائعة لعقود NEAR.
1. هيكل بيانات العقد لم يتم تعديله
إذا كنت ستقوم فقط بتعديل منطق العقد دون تغيير هيكل البيانات، يمكنك استخدام near deploy لنشر كود جديد مباشرة:
باش
نير نشر
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
يمكن قراءة بيانات العقد الأصلية بشكل طبيعي.
!
2. تعديل هيكل بيانات العقد
إذا تم تعديل هيكل بيانات العقد، فإن إعادة النشر مباشرة ستؤدي إلى فشل في إعادة تسلسل الحالة. في هذه الحالة، تحتاج إلى استخدام طريقة migrate للترقية:
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 6
أعجبني
6
3
مشاركة
تعليق
0/400
PumpBeforeRug
· منذ 13 س
إذا لم تستطع الحماية من الثغرات البسيطة، فما الفائدة من اللعب في سباق عاري؟
أفضل الممارسات لترقية العقود الذكية في 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
يمكن أن يؤدي ذلك إلى نقل الحالة القديمة إلى العقد الجديد.
!
نصائح أمان ترقية العقود
يمكن أن يؤدي الترقية المعقولة إلى الحفاظ على أمان العقد وقابليته للتوسع، وهو جزء مهم من تطوير العقود الذكية.
!