SputnikDAO Fabrika Sözleşmesi Analizi: Near on-chain DAO Toplu Oluşturma ve Yönetim

robot
Abstract generation in progress

Rust akıllı sözleşmeler yetiştirme günlüğü (10-2): Sputnik DAO fabrika sözleşmesi kodu analizi

Bu makalede Sputnik-DAO platformunun fabrika modelinin ( sputnikdao-factory) tasarımının uygulanması detaylı bir şekilde anlatılacaktır.

1. Sputnik-DAO fabrika akıllı sözleşmeleri

Sputnik-DAO, merkeziyetsiz otonom organizasyon (DAO)'ın birleşik oluşturulması ve yönetimi için bir fabrika tasarım modeli kullanmıştır.

2. DAPP Modül Fonksiyon Tanıtımı

Sputnik DAO platform DAPP sayfasında, bu platformda birçok DAO'nun örnek nesneler oluşturduğu görülmektedir. 2022 Mart itibarıyla, en aktif DAO news.sputnik-dao.near olup, 3051 öneri kamu oylamasında veya sonuçlanmış durumdadır.

Sputnik DAO platformunda oluşturulan tüm DAO örnek sözleşmeleri, sputnik-dao.near hesabının alt hesaplarında dağıtılmıştır, örneğin:

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.sputnik-dao.near
  • octopode-dao.sputnik-dao.near

Organizasyonlar NEAR ana ağında sputnikdao-factory akıllı sözleşmesinin create() yöntemini çağırarak yeni bir DAO örneği oluşturabilir.

3. sputnikdao-factory akıllı sözleşmeler kodu açıklaması

3.1 DAO oluşturma

sputnikdao-factory akıllı sözleşmeler durumu esasen iki bölümden oluşmaktadır:

pas pub struct SputnikDAOFactory { factory_manager: FactoryManager, daolar: SırasızKüme\u003chesapid\u003e, }

  • factory_manager: DAO örneklerini oluşturma/silme/güncelleme yöntemlerini sağladı
  • daos: Tüm oluşturulan DAO örneklerinin NEAR hesap adreslerini kaydeder.

DAO örneğinin create() yöntemi tanımı aşağıdaki gibidir:

pas #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!('{}.{}', name, env::current_account_id()) .parse() .unwrap(); let callback_args = serde_json::to_vec(&json!({ 'account_id': account_id, 'attached_deposit': U128(env::attached_deposit()), 'önceki_hesap_id': env::önceki_hesap_id() })) .expect('Serileştirme başarısız'); self.factory_manager.create_contract( self.get_default_code_hash(), hesap_id, 'yeni', &args.0, 'on_create', &callback_args, ); }

factory_manager.create_contract'ın spesifik implementasyonu:

pas pub fn create_contract( &self, code_hash: Base58CryptoHash,
account_id: AccountId, yeni_yöntem: &str, args: [u8], callback_method: &str, callback_args: [u8], ) { // 1. Akıllı sözleşmeler şablon kodunu yükle // 2. Promise'i inşa et // 3. Dağıtım hesabı oluştur // 4. NEAR transfer // 5. Sözleşmeyi dağıt // 6. Başlatma fonksiyonu çağrılıyor new() // 7. on_create geri çağırma() }

on_create geri çağırma fonksiyonunun işleme mantığı:

  • Adım 3-6 başarısız olursa, NEAR iade edilir
  • Eğer başarıyla yürütülürse, yeni DAO örneği hesap adresini kaydedin.

3.2 DAO'yu Güncelle

Fabrika akıllı sözleşmeleri, DAO'yu yükseltmek için update() arayüzünü sağlar:

pas pub fn update(&self, account_id: AccountId, code_hash: Base58CryptoHash) { let caller_id = env::predecessor_account_id(); assert!( caller_id == self.get_owner() || caller_id == account_id, 'Fabrika sahibi veya DAO tarafından güncellenmesi gerekir' ); assert!( self.daos.contains(\u0026account_id), 'Fabrika tarafından oluşturulmuş bir sözleşme olmalıdır' ); self.factory_manager .update_contract(hesap_id, kod_hash, 'update'); }

4. Sputnik-DAO Fabrikası akıllı sözleşmeler güvenlik analizi

  • Yetki kontrolü: view türü yöntemler durum değişkenlerini değiştirmez
  • Yetki kontrolü: Ayrıcalıklı fonksiyonlar yalnızca sözleşme sahibi veya DAO hesabı tarafından icra edilebilir.
  • Hata yönetimi: İstisnai durumlar için makul bir hata yönetim mekanizması uygulamak

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • 5
  • Share
Comment
0/400
ChainSpyvip
· 6h ago
Fabrika deseni araştırmaya değer
View OriginalReply0
AirdropSweaterFanvip
· 6h ago
Çaylak acemi必看教程
View OriginalReply0
SandwichVictimvip
· 6h ago
Fabrika modeli gerçekten güzel
View OriginalReply0
RuntimeErrorvip
· 6h ago
Fabrika modeli çok klasik.
View OriginalReply0
Web3ExplorerLinvip
· 6h ago
İlginç DAO fabrikası tasarımı
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)