Analyse du contrat de l'usine Sputnik DAO : mise en œuvre en Rust pour créer et gérer une organisation autonome décentralisée.

robot
Création du résumé en cours

Journal de développement des smart contracts Rust (10-2) Analyse du contrat de l'usine Sputnik DAO

Cet article analysera en profondeur la mise en œuvre du contrat de fabrique sputnikdao-factory sur la plateforme Sputnik DAO. Ce contrat utilise un modèle de fabrique pour créer et gérer de manière unifiée les organisations autonomes décentralisées (DAO) sur la plateforme.

1. Sputnik-DAO smart contracts

Sputnik-DAO utilise le modèle de conception de fabrique pour la création et la gestion de DAO. Le code source du contrat de fabrique s'appelle sputnikdao-factory et se trouve à l'adresse :

2. Fonctionnalités du module DAPP

La plateforme Sputnik DAO a déjà plusieurs instances de DAO créées. Le DAO le plus actif est news.sputnik-dao.near, avec 3051 propositions. Tous les contrats d'instances de DAO sont déployés de manière uniforme par le contrat de l'usine du compte sputnik-dao.near (, en tant que sous-comptes.

Les utilisateurs peuvent créer de nouvelles instances de DAO en appelant la méthode create)( du contrat de fabrication.

![])https://img-cdn.gateio.im/webp-social/moments-78921e045e487159a6dd01b0f3466573.webp(

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

) 3.1 Créer un DAO

L'état du contrat de l'usine comprend principalement :

  • factory_manager: implémenter la logique principale pour créer/supprimer/mettre à jour des instances de DAO
  • daos : enregistre les adresses de compte de tous les instances de DAO créées

create###( méthode définition :

rouille #) pub fn create[payable]&mut self, name: AccountId, args: Base64VecU8( { // Construire l'adresse du sous-compte DAO let account_id: AccountId = format!)'{}.{}', name, env::current_account_id(() .parse)( .unwrap)(;

// Construire les paramètres de rappel  
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'(;

// Appel à factory_manager pour créer un contrat d'instance DAO
self.factory_manager.create_contract)
    self.get_default_code_hash((,
    account_id,
    'nouveau',
    &args.0,
    'on_create',
    &callback_args,
);

}

![])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(

L'implémentation spécifique de factory_manager.create_contract :

  1. Charger le code du modèle de contrat intelligent DAO
  2. Construire une promesse pour suivre les étapes suivantes
  3. Créer un compte pour déployer une instance de DAO
  4. Transférer à un nouveau compte
  5. Déployer le code du contrat
  6. Appeler la fonction d'initialisation new)(
  7. Fonction de rappel on_create)(

on_create)(fonction de rappel:

  • Si l'exécution réussit, enregistrez le nouveau compte d'instance DAO.
  • En cas d'échec, rembourser le transfert de l'utilisateur

![])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(

) mise à jour 3.2 DAO

Le contrat d'usine fournit une interface de mise à jour ###( pour mettre à jour 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 une usine' ); self.factory_manager .update_contract)account_id, code_hash, 'update'(; }

Appeler la fonction update)( du contrat d'instance DAO pour effectuer la mise à jour.

![])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(

4. Analyse de la sécurité des contrats

  • Contrôle d'accès : la méthode view ne modifie pas l'état, les fonctions privilégiées ne peuvent être appelées que par le propriétaire.
  • Gestion des erreurs : les situations exceptionnelles ont un mécanisme de traitement raisonnable
  • Les vulnérabilités d'autorisation précédemment existantes ont été corrigées.

![])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(

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
  • 2
  • Reposter
  • Partager
Commentaire
0/400
MevHuntervip
· 08-09 23:48
Ah, ça m'a ébloui ! L'exemple est directement monté à plus de 3k.
Voir l'originalRépondre0
MetaverseVagrantvip
· 08-09 23:47
rust est si cool ! J'ai juste appris un peu par ennui.
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)