ستتناول هذه المقالة تحليلًا عميقًا لتصميم وتنفيذ نموذج المصنع في منصة Sputnik DAO (sputnikdao-factory).
1. عقد مصنع Sputnik-DAO
اعتمد Sputnik-DAO نمط تصميم المصنع الإنشائي لتحقيق الإنشاء الموحد والإدارة لمنظمة الحكم الذاتي اللامركزية (DAO) تحت هذا النظام الأساسي.
مستودع رمز المصدر للعقد المقابل يقع في:
!
2. مقدمة عن وظائف وحدة DAPP
يعرض صفحة DAPP في منصة Sputnik DAO كائنات DAO التي تم إنشاؤها ( عقد ) Sputnikdaov2. حتى مارس 2022، كان أكثر DAO نشاطًا على هذه المنصة هو news.sputnik-dao.near، حيث كان هناك 3051 اقتراحًا قيد التصويت أو قد انتهت.
جميع عقود الأمثلة DAO التي تم إنشاؤها على منصة Sputnik DAO يتم نشرها بشكل موحد تحت حسابات فرعية لحساب sputnik-dao.near ( عقد الساتبيتك داو-فابريك ) ، على سبيل المثال:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
يمكن للمنظمات استدعاء طريقة create() في عقد sputnikdao-factory على الشبكة الرئيسية NEAR لإنشاء مثيل DAO جديد.
!
3. تفسير كود عقد الساتليت داو - مصنع العقود
3.1 إنشاء DAO
حالة عقد السبيوتنيك داو - المصنع تتكون أساسًا من جزئين:
صدأ
حانة FN create_contract(
والذات،
code_hash: Base58CryptoHash ،
account_id: AccountId ،
new_method: &str ،
args: &[u8] ،
callback_method: & str ،
callback_args: &[u8] ،
) {
// تحميل كود العقد
// إنشاء الوعد
// إنشاء حساب
// تحويل
// نشر العقد
// استدعاء دالة التهيئة
// تعيين رد الاتصال
}
صدأ
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 Factory
يتم ضمان الأمان بشكل أساسي من الجوانب التالية:
التحكم في الوصول: طريقة view لا تعدل متغيرات الحالة
يمكن تنفيذ دالة الامتياز فقط بواسطة المالك
آلية معالجة الأخطاء المعقولة
!
!
!
!
!
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 18
أعجبني
18
7
مشاركة
تعليق
0/400
AltcoinOracle
· منذ 12 س
degens نائمون على سبيوتنيك... نموذج المصنع الخاص بهم هو حرفياً حوكمة ويب 3.0
العمق تحليل Sputnik DAO المنصة مصنع العقد: تصميم التنفيذ وآلية الأمان
Rust العقود الذكية养成日记(10-2):解析 مصنع DAO
ستتناول هذه المقالة تحليلًا عميقًا لتصميم وتنفيذ نموذج المصنع في منصة Sputnik DAO (sputnikdao-factory).
1. عقد مصنع Sputnik-DAO
اعتمد Sputnik-DAO نمط تصميم المصنع الإنشائي لتحقيق الإنشاء الموحد والإدارة لمنظمة الحكم الذاتي اللامركزية (DAO) تحت هذا النظام الأساسي.
مستودع رمز المصدر للعقد المقابل يقع في:
!
2. مقدمة عن وظائف وحدة DAPP
يعرض صفحة DAPP في منصة Sputnik DAO كائنات DAO التي تم إنشاؤها ( عقد ) Sputnikdaov2. حتى مارس 2022، كان أكثر DAO نشاطًا على هذه المنصة هو news.sputnik-dao.near، حيث كان هناك 3051 اقتراحًا قيد التصويت أو قد انتهت.
جميع عقود الأمثلة DAO التي تم إنشاؤها على منصة Sputnik DAO يتم نشرها بشكل موحد تحت حسابات فرعية لحساب sputnik-dao.near ( عقد الساتبيتك داو-فابريك ) ، على سبيل المثال:
يمكن للمنظمات استدعاء طريقة create() في عقد sputnikdao-factory على الشبكة الرئيسية NEAR لإنشاء مثيل DAO جديد.
!
3. تفسير كود عقد الساتليت داو - مصنع العقود
3.1 إنشاء DAO
حالة عقد السبيوتنيك داو - المصنع تتكون أساسًا من جزئين:
صدأ pub struct SputnikDAOFactory { factory_manager: مدير المصنع ، daos: UnorderedSet ، }
create()تعريف الطريقة:
صدأ #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!('{}. {}', name, env::current_account_id()) .parse() .unwrap(). دع callback_args = serde_json::to_vec(&json!({ 'account_id': account_id, 'attached_deposit': U128(env::attached_deposit()), 'predecessor_account_id': env::p redecessor_account_id() })) .expect('فشل في التسلسل'); self.factory_manager.create_contract( self.get_default_code_hash()، account_id، 'جديد', &args.0 ، 'on_create', &callback_args، ); }
!
factory_manager.create_contract التنفيذ:
صدأ حانة FN create_contract( والذات، code_hash: Base58CryptoHash ، account_id: AccountId ، new_method: &str ، args: &[u8] ، callback_method: & str ، callback_args: &[u8] ، ) { // تحميل كود العقد // إنشاء الوعد // إنشاء حساب // تحويل // نشر العقد // استدعاء دالة التهيئة // تعيين رد الاتصال }
!
on_create دالة الاسترجاع:
صدأ #[private] حانة FN on_create( &mut self ، account_id: AccountId ، attached_deposit: U128 ، predecessor_account_id: AccountId ، ) -> بول { إذا near_sdk::is_promise_success() { self.daos.insert(&account_id); صحيح } else { الوعد::new(predecessor_account_id).transfer(attached_deposit.0); خطأ } }
!
3.2 تحديث DAO
update()طريقة:
صدأ 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 Factory
يتم ضمان الأمان بشكل أساسي من الجوانب التالية:
!
!
!
!
!