Sputnik DAO工廠合約:統一創建與管理DAO的設計實現

robot
摘要生成中

Sputnik DAO 工廠合約解析

Sputnik DAO 採用工廠設計模式實現了平台下DAO的統一創建與管理。本文將詳細介紹 Sputnik DAO 平台工廠模式的設計實現。

1. DAPP 功能介紹

Sputnik DAO 平台已有多個DAO實例被創建。截至2022年3月,最活躍的DAO爲 news.sputnik-dao.near,已有3051個提案。

所有基於 Sputnik DAO 創建的DAO實例合約都部署在 sputnik-dao.near 的子帳戶下,例如:

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

用戶可以通過調用 sputnikdao-factory 合約的 create() 方法來創建新的DAO實例。

2. 工廠合約代碼解讀

2.1 創建 DAO

sputnikdao-factory 合約狀態主要包含:

  • factory_manager: 提供創建/刪除/更新DAO實例的方法
  • daos: 記錄所有已創建DAO實例的帳戶地址

create() 方法定義:

rust #[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()), 'predecessor_account_id': env::predecessor_account_id() })) .expect('Failed to serialize'); self.factory_manager.create_contract( self.get_default_code_hash(), account_id, 'new', &args.0, 'on_create', &callback_args, ); }

create_contract() 方法實現了:

  1. 載入DAO合約模板代碼
  2. 創建部署DAO合約的帳戶
  3. 轉帳NEAR代幣
  4. 部署合約代碼
  5. 調用合約初始化函數
  6. 回調 on_create() 函數

on_create() 函數實現:

rust #[private] pub fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, ) -> bool { if near_sdk::is_promise_success() { self.daos.insert(&account_id); true } else { Promise::new(predecessor_account_id).transfer(attached_deposit.0); false } }

2.2 更新 DAO

工廠合約提供 update() 接口用於升級DAO合約:

rust 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, 'Must be updated by the factory owner or the DAO itself' ); assert!( self.daos.contains(&account_id), 'Must be contract created by factory' ); self.factory_manager .update_contract(account_id, code_hash, 'update'); }

3. 安全性分析

Sputnik DAO Factory合約的安全性主要體現在:

  1. 權限控制

    • view方法不修改狀態變量
    • 特權函數只能由owner調用
  2. 錯誤處理

    • 創建DAO時檢查所有步驟是否正常執行
  3. 白名單校驗

    • 只允許factory或DAO自身調用更新
  4. 默認安全配置

    • DAO合約初始化時開啓自動更新

總的來說,Sputnik DAO Factory合約實現了較爲完善的安全機制,但仍需持續關注和改進。

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 4
  • 分享
留言
0/400
gas_fee_therapistvip
· 15小時前
漂亮!又一个工厂狗来了
回復0
retroactive_airdropvip
· 15小時前
又是工厂设计模式 老掉牙了吧
回復0
Solidity Strugglervip
· 16小時前
又是工厂合约 啥时候能写明白
回復0
链上资深福尔摩斯vip
· 16小時前
懂了懂了 这合约看着挺香
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)