ستتناول هذه المقالة التحكم في الصلاحيات في العقود الذكية بلغة Rust من وجهتي نظر.
رؤية الوصول / استدعاء طرق العقد (الدوال)
التحكم في الوصول إلى وظائف الامتياز / تقسيم المسؤوليات
1. رؤية دالة العقد (الطريقة)
تعتبر السيطرة على رؤية وظائف العقد أمرًا بالغ الأهمية لحماية الأجزاء الحيوية من الوصول أو التلاعب غير المقصود. على سبيل المثال، حدث أمني في بورصة Bancor Network في 18 يونيو 2020، وكان ذلك نتيجة خطأ في إعداد أذونات الوصول لوظائف العقد الأساسية.
في العقود الذكية بلغة Rust، توجد عدة أنواع من رؤية الدوال:
pub fn: تشير هذه الطريقة إلى أنها عامة، وهي جزء من واجهة العقد، ويمكن استدعاؤها من خارج العقد.
fn: إذا لم يتم تحديد pub صراحة، فهذا يعني أن هذه الدالة لا يمكن استدعاؤها مباشرة من خارج العقد، بل يمكن استدعاؤها فقط من داخل العقد.
pub(crate) fn: يحدد طريقة الاتصال ضمن نطاق داخلي للcrate.
طريقة أخرى لجعل الطريقة داخلية هي تعريفها داخل كتلة كود impl Contract التي لم يتم تزيينها ب #[near_bindgen].
بالنسبة لدالة الاسترجاع، يجب تعيينها كخاصية عامة، ولكن يجب التأكد من أنه يمكن استدعاؤها فقط من قبل العقد نفسه. يمكن استخدام الماكرو #[private] لتحقيق ذلك.
!
2. التحكم في الوصول إلى وظائف الامتياز(آلية القائمة البيضاء)
بالإضافة إلى رؤية الدالة، يجب أيضًا إنشاء آلية قائمة بيضاء كاملة للتحكم في الوصول من الناحية الدلالية. يمكن استدعاء بعض الدوال المميزة ( مثل تهيئة العقد، وفتح/إيقاف، وما إلى ذلك، فقط من قبل مالك العقد.
يمكنك تنفيذ Trait مخصص لتطبيق التحكم في الوصول، والتحقق مما إذا كان المتصل هو مالك العقد:
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 11
أعجبني
11
2
إعادة النشر
مشاركة
تعليق
0/400
PumpBeforeRug
· منذ 9 س
كان فشل Bancor بسبب عدم إعداد الأذونات بشكل صحيح، أليس كذلك؟
شاهد النسخة الأصليةرد0
OffchainOracle
· منذ 9 س
يجب أن تكون حادثة Bancor هذه بمثابة تحذير نموذجي في الكتب الدراسية
أمان العقود الذكية Rust: فهم عميق للتحكم في الوصول وإدارة الأذونات
Rust العقود الذكية养成日记(7)合约安全之访问控制
ستتناول هذه المقالة التحكم في الصلاحيات في العقود الذكية بلغة Rust من وجهتي نظر.
1. رؤية دالة العقد (الطريقة)
تعتبر السيطرة على رؤية وظائف العقد أمرًا بالغ الأهمية لحماية الأجزاء الحيوية من الوصول أو التلاعب غير المقصود. على سبيل المثال، حدث أمني في بورصة Bancor Network في 18 يونيو 2020، وكان ذلك نتيجة خطأ في إعداد أذونات الوصول لوظائف العقد الأساسية.
في العقود الذكية بلغة Rust، توجد عدة أنواع من رؤية الدوال:
طريقة أخرى لجعل الطريقة داخلية هي تعريفها داخل كتلة كود 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 ما يلي:
سيتم تقديم هذه المحتويات بالتفصيل في المقالات اللاحقة.
! [])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(