ستتناول هذه المقالة تحليلًا عميقًا لتصميم وتنفيذ نموذج المصنع في منصة 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، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 26
أعجبني
26
10
إعادة النشر
مشاركة
تعليق
0/400
NFTArchaeologis
· 07-17 22:24
ما أروعه، المنظمة الذكية تنبع من أناقة العقد الإبداعي
شاهد النسخة الأصليةرد0
WalletDivorcer
· 07-17 01:29
يبدو أن dao هو فخ جديد؟
شاهد النسخة الأصليةرد0
SmartMoneyWallet
· 07-16 13:17
ما هي الآمال التي يمكن أن نعلقها؟ هناك الكثير من الأخطاء في العقود داخل السلسلة، دعنا نتحقق منها أولاً.
شاهد النسخة الأصليةرد0
AltcoinOracle
· 07-14 23:16
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
يتم ضمان الأمان بشكل أساسي من الجوانب التالية:
!
!
!
!
!