デプス剖析Sputnik DAOプラットフォーム工場契約:設計実現と安全メカニズム

robot
概要作成中

Rustスマートコントラクト育成日記(10-2):Sputnik DAO ファクトリーコントラクト解析

本文はSputnik DAOプラットフォームのファクトリーモデル(sputnikdao-factory)の設計実装を深く解読します。

1. Sputnik-DAO ファクトリーコントラクト

Sputnik-DAOは、プラットフォーム下での分散型自治組織(DAO)の統一的な作成と管理を実現するために、創造型ファクトリーデザインパターンを採用しました。

対応するコントラクトのソースコードリポジトリは次の場所にあります:

!

2. DAPPモジュールの機能の紹介

Sputnik DAOプラットフォームのDAPPページは、作成されたDAOインスタンスオブジェクト(Sputnikdaov2契約)を表示しています。2022年3月現在、このプラットフォームで最も活発なDAOはnews.sputnik-dao.nearで、3051件の提案が投票中または終了しています。

すべてのSputnik DAOプラットフォームで作成されたDAOインスタンス契約は、sputnik-dao.nearアカウント(のsputnikdao-factory契約)によって、そのサブアカウントに統一してデプロイされます。例えば:

  • pcp.sputnik-dao.near (英語)
  • test-dao-bro.sputnik-dao.near (英語)
  • blaqkstereo.sputnik-dao.near (英語)

組織はNEARメインネットでsputnikdao-factoryコントラクトのcreate()メソッドを公開呼び出して新しいDAOインスタンスを作成できます。

!

3. スプートニクダオ-ファクトリー契約コードの解釈

3.1 DAOを作成する

sputnikdao-factoryのスマートコントラクトの状態は主に2つの部分で構成されています:

ルスト 公開構造体 SputnikDAOFactory { factory_manager:ファクトリーマネージャー、 daos: UnorderedSet, }

  • factory_manager:DAOインスタンスの作成/削除/更新を提供するメソッド
  • daos:作成されたDAOインスタンスのNEARアカウントアドレスを記録

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

!

factory_manager.create_contract の実装:

さび パブFN create_contract( &self や code_hash:Base58CryptoHash、 account_id: AccountId、 new_method: &str, 引数: &[u8], callback_method: &str, callback_args: &[u8], ) { // コントラクトコードを読み込む // プロミスを作成 // アカウントを作成する nan // コントラクトをデプロイする
初期化関数を呼び出す // コールバックを設定 }

!

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

!

3.2 アップデート 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、「更新」); }

!

4. スプートニク-DAOファクトリー契約セキュリティ分析

主要から以下のいくつかの側面で安全性を確保します:

  • 権限管理:viewメソッドは状態変数を変更しない
  • 特権関数はownerのみが実行できます
  • 妥当なエラーハンドリングメカニズム

!

!

!

!

!

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 7
  • 共有
コメント
0/400
AltcoinOraclevip
· 10時間前
デジェンズはスプートニクで眠っている... 彼らのファクトリーモデルは文字通りWeb3ガバナンス2.0だ
原文表示返信0
not_your_keysvip
· 10時間前
このデザインはかなりハードコアですね、わぁ
原文表示返信0
ImpermanentPhilosophervip
· 10時間前
無脳モジュール化開発、好きです
原文表示返信0
PensionDestroyervip
· 10時間前
ファクトリーコントラクトは信頼できそうです。
原文表示返信0
ImaginaryWhalevip
· 10時間前
この契約は面白いですね
原文表示返信0
InfraVibesvip
· 10時間前
国産でもこの罠ができるんだ
原文表示返信0
BanklessAtHeartvip
· 10時間前
工場契約の安全性は確かに重要です。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)