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()メソッドの定義:

さび #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { account_id: AccountId = format!('{} です。 {}', 名前, 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::p redecessor_account_id() })) .expect('シリアライズに失敗しました'); 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()関数の実装:

さび #[private] パブFN on_create( &mut self、 account_id: AccountId、 attached_deposit:U128、 predecessor_account_id: AccountId、 ) -> ブール { if near_sdk::is_promise_success() { self.daos.insert(&account_id); 真 } else { 約束::new(predecessor_account_id).transfer(attached_deposit.0); フォルス } }

!

2.2 の DAO の更新

ファクトリーコントラクトは、DAOコントラクトをアップグレードするための update() インターフェースを提供します:

さび pub fn update( self, account_id: AccountId, code_hash: Base58CryptoHash) { let 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 .update_contract(account_id、code_hash、「更新」); }

!

3. セキュリティ分析

スプートニクDAOファクトリー契約の安全性は、主に以下に反映されています。

  1. アクセス制御

    • viewメソッドは状態変数を変更しません
    • 特権関数はownerのみが呼び出すことができます
  2. エラー処理

    • DAOを作成する際に、すべてのステップが正常に実行されているか確認してください
  3. ホワイトリスト検証

    • factoryまたはDAO自身のみが更新を呼び出すことを許可します
  4. デフォルトのセキュリティ設定

    • 自動更新は、DAOコントラクトが初期化されると有効になります

全体的に見ると、Sputnik DAO Factory契約は比較的完璧なセキュリティメカニズムを実現していますが、引き続き関心を持ち、改善が必要です。

!

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 4
  • 共有
コメント
0/400
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
  • ピン
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)