سيتناول هذا المقال جانبي التحكم في الصلاحيات في العقود الذكية المكتوبة بلغة Rust:
رؤية الوصول / الاستدعاء لطريقة العقد
التحكم في الوصول إلى الدوال المميزة / توزيع الحقوق والمسؤوليات
1. رؤية وظيفة العقد
إن تعيين رؤية دوال العقود بشكل معقول أمر بالغ الأهمية لحماية أمان العقد. على سبيل المثال، في حادثة الأمان التي وقعت في 18 يونيو 2020 في بورصة Bancor Network، أدى تعيين دالة التحويل الرئيسية على أنها public عن طريق الخطأ إلى تعريض أصول المستخدمين لمخاطر خطيرة.
في العقود الذكية بلغة Rust، توجد الأنواع الرئيسية لرؤية الدوال كما يلي:
pub fn: دالة عامة، يمكن لأي شخص استدعاؤها من خارج العقد
fn: خاص بشكل افتراضي، يمكن استدعاؤه فقط داخل العقد
pub(crate) fn: يُقيَّد استدعاء داخل crate
بالإضافة إلى ذلك، يمكن تحقيق الطرق الداخلية من خلال تعريف كتلة impl دون #[near_bindgen].
بالنسبة لدالة الاسترجاع، يجب أن تكون عامة ولكن تحتاج إلى تحكم إضافي في الوصول:
صدأ
#[private]
pub fn resolve_transfer(&mut self) {
env::log_str("هذا هو رد الإجراء");
}
!
2. التحكم في الوصول إلى وظائف الامتياز
بالإضافة إلى رؤية الوظائف، يجب أيضًا إنشاء آلية كاملة لقائمة الوصول البيضاء. يمكن تخصيص Trait لتحقيق تأثير مشابه لمعدل onlyOwner في Solidity:
هذا يمكن أن يحد من إمكانية استدعاء بعض وظائف الامتياز فقط من قبل المالك. بناءً على ذلك، يمكن إعداد قوائم بيضاء متعددة أو قوائم بيضاء أكثر تعقيدًا، لتحقيق التحكم الدقيق في الوصول المجموعات.
توجد طرق أخرى للتحكم في الوصول في العقود الذكية بلغة Rust، مثل التحكم في توقيت الاستدعاء وآلية التوقيع المتعدد، سيتم تقديمها في المقالات التالية.
!
!
!
!
!
!
!
!
!
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
أمان العقود الذكية في Rust: ممارسات رؤية الوظائف والتحكم في الوصول
Rust العقود الذكية养成日记(7)合约安全之计算精度
سيتناول هذا المقال جانبي التحكم في الصلاحيات في العقود الذكية المكتوبة بلغة Rust:
1. رؤية وظيفة العقد
إن تعيين رؤية دوال العقود بشكل معقول أمر بالغ الأهمية لحماية أمان العقد. على سبيل المثال، في حادثة الأمان التي وقعت في 18 يونيو 2020 في بورصة Bancor Network، أدى تعيين دالة التحويل الرئيسية على أنها public عن طريق الخطأ إلى تعريض أصول المستخدمين لمخاطر خطيرة.
في العقود الذكية بلغة Rust، توجد الأنواع الرئيسية لرؤية الدوال كما يلي:
بالإضافة إلى ذلك، يمكن تحقيق الطرق الداخلية من خلال تعريف كتلة impl دون #[near_bindgen].
بالنسبة لدالة الاسترجاع، يجب أن تكون عامة ولكن تحتاج إلى تحكم إضافي في الوصول:
صدأ #[private] pub fn resolve_transfer(&mut self) { env::log_str("هذا هو رد الإجراء"); }
!
2. التحكم في الوصول إلى وظائف الامتياز
بالإضافة إلى رؤية الوظائف، يجب أيضًا إنشاء آلية كاملة لقائمة الوصول البيضاء. يمكن تخصيص Trait لتحقيق تأثير مشابه لمعدل onlyOwner في 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); }
هذا يمكن أن يحد من إمكانية استدعاء بعض وظائف الامتياز فقط من قبل المالك. بناءً على ذلك، يمكن إعداد قوائم بيضاء متعددة أو قوائم بيضاء أكثر تعقيدًا، لتحقيق التحكم الدقيق في الوصول المجموعات.
توجد طرق أخرى للتحكم في الوصول في العقود الذكية بلغة Rust، مثل التحكم في توقيت الاستدعاء وآلية التوقيع المتعدد، سيتم تقديمها في المقالات التالية.
!
!
!
!
!
!
!
!
!