العقود الذكية في جوهرها هي برامج، ومن المحتمل أن تحتوي على عيوب. حتى العقود الذكية التي تم اختبارها وتدقيقها بشكل مكثف قد تحتوي على ثغرات. بمجرد استغلالها من قبل المهاجمين، قد تتسبب في خسائر في أصول المستخدمين، مما يؤدي إلى عواقب وخيمة. لذلك، فإن قابلية ترقية العقد مهمة للغاية. ستتناول هذه المقالة طرق ترقية العقود المكتوبة بلغة Rust.
ضرورة ترقية العقود
إصلاح ثغرات العقود الذكية وإضافة ميزات جديدة غالبًا ما يتطلب إجراء ترقية للعقد. الأسباب الرئيسية هي:
إصلاح ثغرات الأمان
إضافة ميزات جديدة
تحسين أداء العقود الذكية
التكيف مع متطلبات الأعمال الجديدة
!
طرق ترقية العقود الذكية NEAR
باستخدام مشروع StatusMessage كمثال، نقدم طرق الترقية الشائعة لعقود NEAR:
1. هيكل بيانات العقد لم يتغير
إذا تم تعديل منطق العقد فقط، دون تغيير بنية البيانات، يمكن استخدام أمر near deploy لإعادة نشر الكود الجديد مباشرة. ستظل البيانات الأصلية متاحة للوصول بشكل طبيعي.
2. تم تعديل بنية بيانات العقود
إذا تم تعديل بنية بيانات العقد، فإن إعادة نشره مباشرة ستؤدي إلى عدم تطابق البنية الجديدة مع الحالة القديمة، مما يؤدي إلى حدوث خطأ في فك تسلسل البيانات.
3. استخدم طريقة Migrate للتحديث
يوفر NEAR طريقة Migrate لمساعدة العقود في الترقية. قم بإضافة طريقة migrate في العقد الجديد:
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 13
أعجبني
13
4
مشاركة
تعليق
0/400
Anon4461
· 07-14 08:32
من يستطيع تحمل هذا~
شاهد النسخة الأصليةرد0
rekt_but_not_broke
· 07-14 08:22
هل تم ترقية near أيضًا؟
شاهد النسخة الأصليةرد0
LightningPacketLoss
· 07-14 08:20
قضيت عامين في برمجة rust ثم انتقلت للغوص في web3!
شاهد النسخة الأصليةرد0
MidnightMEVeater
· 07-14 08:18
حتى آلة الإعدام لا تجرؤ على خداع الناس لتحقيق الربح، هل سيعود المطورون؟
تفاصيل تحديث العقود الذكية Rust: دليل تحديث الأمان على منصة NEAR
طرق ترقية العقود الذكية باستخدام Rust
العقود الذكية في جوهرها هي برامج، ومن المحتمل أن تحتوي على عيوب. حتى العقود الذكية التي تم اختبارها وتدقيقها بشكل مكثف قد تحتوي على ثغرات. بمجرد استغلالها من قبل المهاجمين، قد تتسبب في خسائر في أصول المستخدمين، مما يؤدي إلى عواقب وخيمة. لذلك، فإن قابلية ترقية العقد مهمة للغاية. ستتناول هذه المقالة طرق ترقية العقود المكتوبة بلغة Rust.
ضرورة ترقية العقود
إصلاح ثغرات العقود الذكية وإضافة ميزات جديدة غالبًا ما يتطلب إجراء ترقية للعقد. الأسباب الرئيسية هي:
!
طرق ترقية العقود الذكية NEAR
باستخدام مشروع StatusMessage كمثال، نقدم طرق الترقية الشائعة لعقود NEAR:
1. هيكل بيانات العقد لم يتغير
إذا تم تعديل منطق العقد فقط، دون تغيير بنية البيانات، يمكن استخدام أمر near deploy لإعادة نشر الكود الجديد مباشرة. ستظل البيانات الأصلية متاحة للوصول بشكل طبيعي.
2. تم تعديل بنية بيانات العقود
إذا تم تعديل بنية بيانات العقد، فإن إعادة نشره مباشرة ستؤدي إلى عدم تطابق البنية الجديدة مع الحالة القديمة، مما يؤدي إلى حدوث خطأ في فك تسلسل البيانات.
3. استخدم طريقة 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 عند النشر:
قريباً نشر
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "ترحيل"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
يمكن أن يؤدي ذلك إلى نقل البيانات القديمة بنجاح إلى هيكل العقد الجديد.
!
اعتبارات الأمان لترقية العقود
التحكم في الأذونات - السماح فقط للمطورين أو DAO بترقية العقود
يُوصى بتعيين مالك العقد على أنه DAO، من خلال الاقتراحات والتصويتات لإدارة
تستخدم دالة الهجرة #[init(ignore_state)]
بعد الانتهاء من الهجرة، قم بحذف دالة الهجرة
إكمال تهيئة هيكل البيانات الجديد أثناء النقل
ترقية العقود هي عملية معقدة، تتطلب التعامل بحذر مع كل التفاصيل، لضمان أمان البيانات واستمرارية الأعمال.
!