ستتناول هذه المقالة جانبين من التحكم في الأذونات في العقود الذكية بلغة Rust:
رؤية الوصول/استدعاء طرق العقود
التحكم في الوصول لوظائف الامتياز/توزيع المسؤوليات
1. رؤية دوال العقود
تعيين رؤية دالة العقد بشكل معقول أمر بالغ الأهمية لحماية الأجزاء الأساسية. على سبيل المثال، في حادثة الأمان التي وقعت في يونيو 2020 في بورصة Bancor Network، أدى تعيين دالة التحويل الأساسية على أنها public عن طريق الخطأ إلى تعرض أصول المستخدمين للخطر.
في العقود الذكية بلغة Rust، تعتبر رؤية الدوال مهمة بنفس القدر. تحدد ماكرو #[near_bindgen] في NEAR SDK الخصائص المرئية كما يلي:
pub fn: دالة عامة، يمكن استدعاؤها من خارج العقد
fn: يمكن الاستدعاء فقط داخل العقد
pub(crate) fn: تقييد الاستدعاءات داخل crate
يمكن أيضًا تعريف الأساليب الداخلية من خلال كتلة عقد الـimpl التي لم يتم تمييزها بـ#[near_bindgen].
بالنسبة لدالة الاستدعاء، يجب تعيينها كـ public ولكن يسمح فقط للعقد باستدعائها. يمكن استخدام ماكرو #[private] لتحقيق هذه الوظيفة.
يجب ملاحظة أن الرؤية الافتراضية في Rust هي خاصة، لكن العناصر داخل الصنف وenum هي استثناء.
!
2. التحكم في الوصول إلى وظائف الامتياز
بخلاف رؤية الدوال، يجب إنشاء آلية قائمة على قائمة بيضاء للتحكم في الوصول بشكل كامل. مثل عقد Ownable في Solidity، فإن بعض الدوال المميزة يمكن استدعاؤها فقط من قبل المالك.
في عقود Rust، يمكن تنفيذ السمة Ownable على النحو التالي:
يمكن تحقيق قائمة بيضاء للمستخدمين المالكين بناءً على ذلك. يمكن أيضًا إعداد قوائم بيضاء متعددة المستخدمين أو التحكم في الوصول بناءً على مجموعات من خلال إعدادات خصائص أكثر تعقيدًا.
!
!
!
!
!
!
!
!
!
شاهد النسخة الأصلية
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
تسجيلات الإعجاب 10
أعجبني
10
4
مشاركة
تعليق
0/400
WhaleWatcher
· 07-13 07:29
دعنا نتحدث عن Ownable أولاً
شاهد النسخة الأصليةرد0
GateUser-e51e87c7
· 07-13 07:23
إذا كان لديك يد، فهذا يكفي، بهذه البساطة
شاهد النسخة الأصليةرد0
DecentralizeMe
· 07-13 07:22
منطق القاعدة
شاهد النسخة الأصليةرد0
ChainSpy
· 07-13 07:21
تحكم الوصول معقد للغاية، من الأفضل أن يكون كل شيء مفتوحًا.
تحكم في وصول العقود الذكية Rust: رؤية الدالة وإدارة الوصول المتميز
Rust العقود الذكية养成日记(7)合约安全之权限控制
ستتناول هذه المقالة جانبين من التحكم في الأذونات في العقود الذكية بلغة Rust:
1. رؤية دوال العقود
تعيين رؤية دالة العقد بشكل معقول أمر بالغ الأهمية لحماية الأجزاء الأساسية. على سبيل المثال، في حادثة الأمان التي وقعت في يونيو 2020 في بورصة Bancor Network، أدى تعيين دالة التحويل الأساسية على أنها public عن طريق الخطأ إلى تعرض أصول المستخدمين للخطر.
في العقود الذكية بلغة Rust، تعتبر رؤية الدوال مهمة بنفس القدر. تحدد ماكرو #[near_bindgen] في NEAR SDK الخصائص المرئية كما يلي:
يمكن أيضًا تعريف الأساليب الداخلية من خلال كتلة عقد الـimpl التي لم يتم تمييزها بـ#[near_bindgen].
بالنسبة لدالة الاستدعاء، يجب تعيينها كـ public ولكن يسمح فقط للعقد باستدعائها. يمكن استخدام ماكرو #[private] لتحقيق هذه الوظيفة.
يجب ملاحظة أن الرؤية الافتراضية في Rust هي خاصة، لكن العناصر داخل الصنف وenum هي استثناء.
!
2. التحكم في الوصول إلى وظائف الامتياز
بخلاف رؤية الدوال، يجب إنشاء آلية قائمة على قائمة بيضاء للتحكم في الوصول بشكل كامل. مثل عقد Ownable في Solidity، فإن بعض الدوال المميزة يمكن استدعاؤها فقط من قبل المالك.
في عقود Rust، يمكن تنفيذ السمة Ownable على النحو التالي:
صدأ سمة الحانة مملوكة { الجبهة الوطنية assert_owner(&self) { assert_eq!(env::p redecessor_account_id(), self.get_ owner()). } fn get_owner(&self) -> AccountId; fn set_owner( & mut self ، المالك: AccountId); }
يمكن تحقيق قائمة بيضاء للمستخدمين المالكين بناءً على ذلك. يمكن أيضًا إعداد قوائم بيضاء متعددة المستخدمين أو التحكم في الوصول بناءً على مجموعات من خلال إعدادات خصائص أكثر تعقيدًا.
!
!
!
!
!
!
!
!
!