عقد مصنع سبوتنيك DAO: تنفيذ التصميم الموحد لإنشاء وإدارة DAO

robot
إنشاء الملخص قيد التقدم

تحليل عقد مصنع سبيوتنيك DAO

اعتمد Sputnik DAO نمط تصميم المصنع لتحقيق إنشاء وإدارة موحدة لـ DAO في المنصة. ستقدم هذه المقالة تفاصيل حول تصميم وتنفيذ نمط المصنع لمنصة Sputnik DAO.

1. تقديم وظائف DAPP

لقد تم إنشاء العديد من أمثلة DAO على منصة Sputnik DAO. حتى مارس 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

يمكن للمستخدمين إنشاء مثيل DAO جديد من خلال استدعاء طريقة create() لعقد sputnikdao-factory.

!

2. تفسير كود عقد المصنع

2.1 إنشاء DAO

حالة عقد sputnikdao-factory تتضمن بشكل رئيسي:

  • factory_manager: يوفر طرق لإنشاء/حذف/تحديث DAO
  • daos: تسجيل جميع عناوين حسابات DAO التي تم إنشاؤها

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، ); }

create_contract() طريقة التنفيذ:

  1. تحميل كود قالب عقد DAO
  2. إنشاء حساب لنشر عقد DAO
  3. تحويل رموز NEAR
  4. نشر كود العقد
  5. استدعاء دالة تهيئة العقد
  6. استدعاء on_create() دالة

!

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); خطأ } }

!

2.2 تحديث 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 .تحديث_العقد(معرف_الحساب، تجزئة_الكود، 'تحديث')؛ }

!

3. تحليل الأمان

تتجلى أمان عقد Sputnik DAO Factory أساسًا في:

  1. التحكم في الأذونات

    • طريقة view لا تعدل متغيرات الحالة
    • يمكن استدعاء دالة الامتياز فقط من قبل المالك
  2. معالجة الأخطاء

    • تحقق من جميع الخطوات عند إنشاء DAO للتأكد من تنفيذها بشكل صحيح
  3. التحقق من قائمة البيض

    • يسمح فقط لـ factory أو DAO نفسه باستدعاء التحديث
  4. التكوين الأمني الافتراضي

    • يتم تفعيل التحديث التلقائي عند تهيئة عقد DAO

بشكل عام، فإن عقد مصنع Sputnik DAO قد نفذ آلية أمان متكاملة، لكنه لا يزال يحتاج إلى متابعة مستمرة وتحسين.

!

شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 7
  • مشاركة
تعليق
0/400
GasFeeTearsvip
· 08-06 00:58
呵 又一个工厂模式يُستغل بغباء.
شاهد النسخة الأصليةرد0
0xSoullessvip
· 08-05 17:59
مجرد أداة dao تُستغل بغباء أخرى
شاهد النسخة الأصليةرد0
MetaverseMigrantvip
· 08-05 06:24
هذه المصنع قوي نوعًا ما
شاهد النسخة الأصليةرد0
gas_fee_therapistvip
· 08-03 07:53
جميل! جاء كلب مصنع آخر
شاهد النسخة الأصليةرد0
retroactive_airdropvip
· 08-03 07:46
نموذج تصميم المصنع مرة أخرى، لقد أصبح قديمًا جدًا.
شاهد النسخة الأصليةرد0
SolidityStrugglervip
· 08-03 07:31
مرة أخرى عقد المصنع متى يمكن توضيحه بشكل واضح
شاهد النسخة الأصليةرد0
OnchainDetectivevip
· 08-03 07:31
فهمت فهمت، يبدو أن هذا العقد مغري جدًا.
شاهد النسخة الأصليةرد0
  • تثبيت