Rust العقود الذكية养成日记(10-2): تحليل عقود مصنع Sputnik DAO
ستقوم هذه المقالة بتفسير عميق لكود تنفيذ العقود الذكية الخاصة بمنصة Sputnik DAO. اعتمدت Sputnik DAO نمط تصميم المصنع الإنشائي لتحقيق الوحدة في إنشاء وإدارة منظمات الحكم الذاتي اللامركزية (DAO).
1. عقد مصنع Sputnik-DAO
يتكون الوضع الرئيسي لعقد مصنع Sputnik-DAO من جزئين:
factory_manager: يوفر منطق الوظيفة الداخلية لإنشاء/حذف/تحديث مثيلات DAO
daos: تسجل عنوان حساب NEAR لجميع نماذج DAO التي تم إنشاؤها على هذه المنصة
!
2. إنشاء DAO
يوفر عقد المصنع طريقة create() لإنشاء مثيل جديد من DAO:
صدأ
#[payable]
pub fn create(&mut self, name: AccountId, args: Base64VecU8) {
// بناء حساب نشر عقد DAO
let account_id: AccountId = format!("{}. {}", name, env::current_account_id())
.parse()
.unwrap().
تشمل الخطوات الرئيسية لطريقة create_contract() ما يلي:
تحميل كود نموذج عقد DAO
إنشاء حساب نشر
تحويل رأس المال الابتدائي
نشر كود العقد
استدعاء دالة تهيئة العقد
استدعاء on_create() وظيفة
!
3. تحديث DAO
يوفر عقد المصنع طريقة update() لترقية عقد DAO:
صدأ
pub fn update(& self, account_id: AccountId, code_hash: Base58CryptoHash) {
دع caller_id = env::p redecessor_account_id();
أكد!(
caller_id == self.get_owner() || caller_id == account_id ،
"يجب أن يتم تحديثها من قبل مالك المصنع أو DAO نفسه"
);
أكد!(
self.daos.contains(&account_id) ،
"يجب أن يكون العقد الذي أنشأه المصنع"
);
self.factory_manager
.تحديث_العقد(معرّف_الحساب, رمز_الشيفرة, "تحديث");
}
!
4. تحليل الأمان
تضمن أمان عقد مصنع Sputnik-DAO بشكل رئيسي من الجوانب التالية:
التحكم في الأذونات: لا تعدل طريقة العرض الحالة، يمكن استدعاء الوظائف المميزة فقط بواسطة المالك
معالجة الأخطاء: تنفيذ آلية معالجة الأخطاء المعقولة للحالات الاستثنائية
التحقق من التأكيد: إضافة التحقق اللازم للاختبارات الأساسية
كان هناك ثغرة أمنية خطيرة في عقد المصنع، قد تؤدي إلى ترقية أي مستخدم لعقد DAO. تم إصلاح هذه الثغرة من خلال إضافة آلية تحقق من القائمة البيضاء المعقولة.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 15
أعجبني
15
4
مشاركة
تعليق
0/400
BearMarketMonk
· منذ 5 س
لديها بعض الثور ، أتعلم rust وأعمل على العقود
شاهد النسخة الأصليةرد0
AirdropChaser
· منذ 5 س
مقالة تحليل الشيفرة جديدة تأتي مرة أخرى ، أشعر بالدوار
تحليل كود عقد مصنع Sputnik DAO: منطق إنشاء وترقية DAO الأساسي
Rust العقود الذكية养成日记(10-2): تحليل عقود مصنع Sputnik DAO
ستقوم هذه المقالة بتفسير عميق لكود تنفيذ العقود الذكية الخاصة بمنصة Sputnik DAO. اعتمدت Sputnik DAO نمط تصميم المصنع الإنشائي لتحقيق الوحدة في إنشاء وإدارة منظمات الحكم الذاتي اللامركزية (DAO).
1. عقد مصنع Sputnik-DAO
يتكون الوضع الرئيسي لعقد مصنع Sputnik-DAO من جزئين:
صدأ pub struct SputnikDAOFactory { factory_manager: مدير المصنع ، daos: UnorderedSet ، }
!
2. إنشاء DAO
يوفر عقد المصنع طريقة create() لإنشاء مثيل جديد من DAO:
صدأ #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { // بناء حساب نشر عقد DAO let account_id: AccountId = format!("{}. {}", name, env::current_account_id()) .parse() .unwrap().
}
تشمل الخطوات الرئيسية لطريقة create_contract() ما يلي:
!
3. تحديث DAO
يوفر عقد المصنع طريقة update() لترقية عقد DAO:
صدأ pub fn update(& self, account_id: AccountId, code_hash: Base58CryptoHash) { دع caller_id = env::p redecessor_account_id(); أكد!( caller_id == self.get_owner() || caller_id == account_id ، "يجب أن يتم تحديثها من قبل مالك المصنع أو DAO نفسه" ); أكد!( self.daos.contains(&account_id) ، "يجب أن يكون العقد الذي أنشأه المصنع" ); self.factory_manager .تحديث_العقد(معرّف_الحساب, رمز_الشيفرة, "تحديث"); }
!
4. تحليل الأمان
تضمن أمان عقد مصنع Sputnik-DAO بشكل رئيسي من الجوانب التالية:
كان هناك ثغرة أمنية خطيرة في عقد المصنع، قد تؤدي إلى ترقية أي مستخدم لعقد DAO. تم إصلاح هذه الثغرة من خلال إضافة آلية تحقق من القائمة البيضاء المعقولة.
!
!
!
!
!
!
!
!