ترقية العقود هي مرحلة مهمة في تطوير العقود الذكية. نظرًا لخاصية عدم القابلية للتلاعب في 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 تم تعديل هيكل بيانات العقود
إذا تم تعديل بنية بيانات العقد، فإن إعادة نشره مباشرة ستؤدي إلى خطأ في عدم توافق البنية القديمة والجديدة. في هذه الحالة، تحتاج إلى استخدام طريقة الترحيل للتحديث.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
طرق ترقية العقود الذكية Rust والاعتبارات الأمنية
مناقشة طرق ترقية العقود الذكية 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. اعتبارات الأمان لترقية العقود
عند إجراء ترقية للعقود الذكية، يجب الانتباه إلى النقاط التالية:
تصميم وتنفيذ خطة ترقية بشكل معقول، يمكن أن يضمن قابلية ترقية العقود في الوقت نفسه، وفي أقصى حد يضمن سلامة العقود وأصول المستخدمين.
!