أمان العقود الذكية Rust: فهم عميق للتحكم في الوصول وإدارة الأذونات

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

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

ستتناول هذه المقالة التحكم في الصلاحيات في العقود الذكية بلغة Rust من وجهتي نظر.

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

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

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

في العقود الذكية بلغة Rust، توجد عدة أنواع من رؤية الدوال:

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

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

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

!

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

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

يمكنك تنفيذ Trait مخصص لتطبيق التحكم في الوصول، والتحقق مما إذا كان المتصل هو مالك العقد:

صدأ سمة الحانة مملوكة { الجبهة الوطنية 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-ca94a7442872cab9f91f2842feb96bad.webp(

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

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

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

سيتم تقديم هذه المحتويات بالتفصيل في المقالات اللاحقة.

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

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

! [])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(

GET7.03%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 2
  • إعادة النشر
  • مشاركة
تعليق
0/400
PumpBeforeRugvip
· منذ 9 س
كان فشل Bancor بسبب عدم إعداد الأذونات بشكل صحيح، أليس كذلك؟
شاهد النسخة الأصليةرد0
OffchainOraclevip
· منذ 9 س
يجب أن تكون حادثة Bancor هذه بمثابة تحذير نموذجي في الكتب الدراسية
شاهد النسخة الأصليةرد0
  • تثبيت