ممارسات أمان العقود الذكية باستخدام Rust: شرح تفصيلي لرؤية الدوال والتحكم في الأذونات

Rust العقود الذكية养成日记(7)合约安全之计算精度

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

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

1. رؤية دوال العقود

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

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

  • pub fn: دالة عامة، يمكن استدعاؤها من خارج العقد
  • fn: دالة داخلية، يمكن استدعاؤها فقط داخل العقد
  • pub(crate) fn: تقييد الاستدعاء داخل crate

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

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

بشكل افتراضي، تكون جميع المحتويات في Rust خاصة، ولكن العناصر الفرعية في السمة (trait) والتعداد (enum) تكون عامة بشكل افتراضي.

!

2. التحكم في وصول وظائف الامتياز

بالإضافة إلى تعيين رؤية الوظائف، يجب أيضًا إنشاء آلية قائمة التحكم في الوصول. مشابهة لـ onlyOwner modifier في Solidity، يمكن تعريف الوظائف المميزة التي يمكن للمالك فقط استدعاؤها.

يمكن تنفيذ خاصية Ownable مشابهة في Rust:

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

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

!

3. طرق التحكم في الوصول الأخرى

يمكن أيضًا تحقيق:

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

يرجى متابعة الإشعارات المستقبلية لمزيد من التفاصيل.

!

!

!

!

!

!

!

!

GET-1.05%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 4
  • إعادة النشر
  • مشاركة
تعليق
0/400
EthMaximalistvip
· 08-14 01:11
آها، ألا وهو الثغرة التي أدت إلى فشل بانكور في ذلك العام؟
شاهد النسخة الأصليةرد0
HalfBuddhaMoneyvip
· 08-12 19:17
武湖 لقد حان وقت كتابة الأخطاء مرة أخرى
شاهد النسخة الأصليةرد0
GhostAddressMinervip
· 08-12 19:17
هذه الثغرة في العقد بسيطة جداً، لقد تابعت 276 محفظة هاكر بسهولة، وقد اكتشفت منذ فترة طويلة أن هناك شيئاً مريباً في تدفق الأموال من بانكور.
شاهد النسخة الأصليةرد0
CoconutWaterBoyvip
· 08-12 18:50
لقد كنت أعمل في العقود لعدة سنوات، وpub fn تعرضت للعديد من النكسات.
شاهد النسخة الأصليةرد0
  • تثبيت