Analyse des contrats de l'usine SputnikDAO : création et gestion en masse de DAO sur la chaîne Near

robot
Création du résumé en cours

Journal de développement des smart contracts Rust (10-2) : Analyse du code du contrat de la fabrique SputnikDAO

Cet article présentera en détail la mise en œuvre du modèle d'usine de la plateforme Sputnik-DAO ( sputnikdao-factory).

1. Sputnik-DAO smart contracts

Sputnik-DAO utilise le modèle de conception de fabrique de création pour réaliser la création et la gestion unifiée de l'organisation autonome décentralisée (DAO) sur cette plateforme.

2. Introduction aux fonctionnalités du module DAPP

La page DAPP de la plateforme Sputnik DAO montre qu'un certain nombre de DAO ont déjà créé des objets d'instance sur cette plateforme. En date de mars 2022, le DAO le plus actif est news.sputnik-dao.near, avec 3051 propositions en cours de vote public ou déjà clôturées.

Tous les contrats d'instance DAO créés sur la plateforme Sputnik DAO sont déployés sous le sous-compte du compte sputnik-dao.near, par exemple :

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

Les organisations peuvent appeler la méthode create() du contrat sputnikdao-factory sur le réseau principal NEAR pour créer de nouvelles instances de DAO.

3. Interprétation du code du contrat sputnikdao-factory

3.1 créer DAO

L'état du contrat sputnikdao-factory est principalement composé des deux parties suivantes :

rouille pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }

  • factory_manager: fournit des méthodes pour créer/supprimer/mettre à jour des instances de DAO
  • daos : enregistre toutes les adresses de compte NEAR des instances DAO créées.

La méthode de création d'une instance de DAO create() est définie comme suit :

rouille #[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('Échec de la sérialisation'); self.factory_manager.create_contract( self.get_default_code_hash(), account_id, 'new', &args.0, 'on_create', &callback_args, ); }

la mise en œuvre spécifique de factory_manager.create_contract:

rouille pub fn create_contract( &self, code_hash: Base58CryptoHash,
account_id: AccountId, new_method: &str, args: [u8], callback_method: &str, callback_args: &[u8], ) { // 1. Charger le code du modèle de contrat // 2. Construire une Promesse // 3. Créer un compte de déploiement // 4. Transférer NEAR // 5. Déployer le contrat // 6. Appeler la fonction d'initialisation new() // 7. rappel on_create() }

Logique de traitement de la fonction de rappel on_create :

  • Si les étapes 3-6 échouent, rembourser NEAR
  • Si l'exécution réussit, enregistrez la nouvelle adresse du compte de l'instance DAO

3.2 mise à jour DAO

Le contrat de l'usine fournit l'interface update() pour mettre à niveau le DAO:

rouille 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, 'Doit être mis à jour par le propriétaire de l'usine ou le DAO lui-même' ); assert!( self.daos.contains(&account_id), 'Doit être un contrat créé par la fabrique' ); self.factory_manager .update_contract(account_id, code_hash, 'update'); }

4. Analyse de la sécurité des contrats de la Fabrique Sputnik-DAO

  • Contrôle d'accès : les méthodes de type view ne modifient pas les variables d'état
  • Contrôle d'accès : Les fonctions privilégiées ne peuvent être exécutées que par le propriétaire du contrat ou un compte DAO.
  • Gestion des erreurs : mettre en œuvre un mécanisme de gestion des erreurs raisonnable pour les situations exceptionnelles

Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • 5
  • Partager
Commentaire
0/400
ChainSpyvip
· Il y a 6h
Le modèle de fabrique mérite d'être étudié
Voir l'originalRépondre0
AirdropSweaterFanvip
· Il y a 6h
Débutant débutant incontournable tutoriel
Voir l'originalRépondre0
SandwichVictimvip
· Il y a 6h
Le modèle de fabrique est vraiment bien.
Voir l'originalRépondre0
RuntimeErrorvip
· Il y a 6h
Le modèle de fabrique est très classique.
Voir l'originalRépondre0
Web3ExplorerLinvip
· Il y a 6h
Intéressant design de DAOfactory
Voir l'originalRépondre0
  • Épingler
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)