Rust العقود الذكية安全:权限控制全面指南

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

Rust العقود الذكية养成日记(7)合约安全之权限控制

سيتناول هذا المقال موضوع التحكم في الأذونات في العقود الذكية بلغة Rust من زاويتين:

  • رؤية الوصول/الاستدعاء لطريقة العقد (الدالة)
  • التحكم في الوصول إلى وظيفة الامتياز / تقسيم المسؤوليات

1. رؤية دالة (طريقة) العقد

عند كتابة العقود الذكية، يمكن التحكم في صلاحيات استدعاء الدوال من خلال تحديد رؤية دوال العقد، مما يحمي الأجزاء الأساسية من العقد من الوصول أو التلاعب العشوائي.

على سبيل المثال، حدثت حادثة أمان للأصول في بورصة Bancor Network في 18 يونيو 2020 بسبب خطأ في إعداد صلاحيات الوصول لوظائف العقود الرئيسية. تم كتابة العقد بلغة Solidity، وتنقسم رؤية وظائف العقد إلى نوعين: public/external وprivate/internal. يسمح النوع الأول باستدعاء وظائف العقد من قبل المتصلين الخارجيين.

عند تعديل ثغرة أمان معينة، بسبب الإهمال، تم عن طريق الخطأ تعيين بعض دوال التحويل الأساسية في العقد كخصائص عامة، مما أدى إلى إمكانية أي شخص استدعاء هذه الدوال من خارج العقد لإجراء عمليات التحويل، مما عرض أصول المستخدمين بقيمة 590,000 دولار لخطر كبير.

!

في العقود الذكية بلغة Rust، يجب أيضًا إيلاء اهتمام خاص للتحكم في رؤية وظائف العقد. تحتوي وظائف العقود الذكية بلغة Rust التي تم تمييزها بواسطة ماكرو #[near_bindgen] المحدد في NEAR SDK على الخصائص المختلفة التالية لرؤية الوظائف:

  • pub fn: تعني أن هذه الطريقة عامة، وهي جزء من واجهة العقد، ويمكن استدعاؤها من خارج العقد.
  • fn: إذا لم يتم الإشارة صراحةً إلى pub، فهذا يعني أنه لا يمكن استدعاؤه مباشرةً من خارج العقد، بل يمكن استدعاؤه فقط من داخل العقد بواسطة دوال أخرى.
  • pub(crate) fn: تعادل pub(in crate)، مما يحد من استدعاء الطريقة داخل نطاق crate.

طريقة أخرى لتعيين طريقة العقد على أنها داخلية هي تعريف كتلة كود impl Contract مستقلة في العقد، حيث لا يتم تمييز هذا التنفيذ بـ #[near_bindgen].

بالنسبة لدالة (Callbacks)، يجب أن يتم تعيين تعريفها كخاصية عامة، ولكن يجب التأكد من أنه يمكن استدعاؤها فقط من قبل العقد نفسه. توفر NEAR SDK ماكرو #[private] لتحقيق هذه الوظيفة.

من المهم ملاحظة أن اللغة Rust تجعل كل شيء بشكل افتراضي خاص، باستثناء المشاريع الفرعية في Trait العامة والمتغيرات في Enum العامة التي تكون عامة بشكل افتراضي.

!

2. التحكم في الوصول إلى وظائف الامتياز ( آلية القائمة البيضاء )

بالإضافة إلى التحكم في رؤية الدوال، من الضروري إنشاء آلية قائمة بيضاء كاملة للتحكم في الوصول من منظور دلالات العقد. يمكن استدعاء بعض الدوال المميزة ( مثل تهيئة العقد، الفتح/الإيقاف، والتحويل الموحد، فقط من قبل مالك العقد )owner(، وتعرف هذه الدوال عادةً باسم "only owner".

على الرغم من أن هذه الوظائف الأساسية يجب تعيينها كخصائص عامة، إلا أنه يمكن تحديد قواعد التحكم في الوصول لها، بحيث يمكن تنفيذها بالكامل فقط عند تلبية القواعد المناسبة. في العقود الذكية Rust، يمكن تنفيذ Trait مخصص مشابه لـ onlyOwner modifier في Solidity:

صدأ سمة الحانة مملوكة { الجبهة الوطنية assert_owner)&self( { assert_eq!)env::p redecessor_account_id((, self.get_ owner)(). } fn get_owner)&self( -> AccountId; fn set_owner) & mut self ، المالك: AccountId(; }

! [])https://img-cdn.gateio.im/webp-social/moments-4c9e1911156dc6134b40fab37dd6c539.webp(

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

! [])https://img-cdn.gateio.im/webp-social/moments-b465966b93b04b1f687c676e62c39bc2.webp(

3. المزيد من طرق التحكم في الوصول

تشمل طرق التحكم في الوصول في العقود الذكية الأخرى بلغة Rust ما يلي:

  • التحكم في توقيت استدعاء العقد
  • آلية استدعاء توقيع متعدد لدالة العقد
  • حوكمة)DAO( للتنفيذ

ستتم مناقشة هذه المحتويات في المقالات اللاحقة من يوميات تنمية العقود الذكية في هذه السلسلة.

! [])https://img-cdn.gateio.im/webp-social/moments-6211a037604bd45f9d638f6f0a7ce5c2.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-7f9b5788662e38094194172212155bb5.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-2c64fb18a6182ccc014ef4c949213e7e.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-5b7fd87c1bbe1b57c40c5349716f6d7c.webp(

! [])https://img-cdn.gateio.im/social/moments-5c3bdf877fa7e4682689922229d94bebc(

! [])https://img-cdn.gateio.im/webp-social/moments-54c0aed04624592c740791245f01325a.webp(

GET-5.4%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 6
  • مشاركة
تعليق
0/400
CompoundPersonalityvip
· منذ 20 س
مرة أخرى سيتعين علينا مواجهة التحديات المتعلقة بالصلاحيات.
شاهد النسخة الأصليةرد0
MEVSupportGroupvip
· منذ 20 س
خطأ في الإذن ، خسرت الكثير. نتكاتف للتدفئة.
شاهد النسخة الأصليةرد0
MetaMaximalistvip
· منذ 20 س
آه، خطأ مبتدئ آخر بمستوى بانكور... هذه هي الأسباب التي تجعلنا بحاجة إلى التحقق الرسمي لجميع نشرات البروتوكول بصراحة.
شاهد النسخة الأصليةرد0
TokenomicsTherapistvip
· منذ 20 س
أنت لا تقول، لا أزال أتذكر موضوع Bancor، في تلك اللحظة عندما انهار السوق.
شاهد النسخة الأصليةرد0
TokenEconomistvip
· منذ 20 س
دعني أوضح الأمر - السيطرة على الوصول هي حرفياً الأبجدية الأساسية لأمان العقود smh
شاهد النسخة الأصليةرد0
Layer2Arbitrageurvip
· منذ 20 س
هههه تخيل كتابة عقود راست بدون التحكم المناسب في الوصول... لن أنجح حقًا
شاهد النسخة الأصليةرد0
  • تثبيت