Analyse des contrats de l'usine Sputnik DAO : création, mise à jour et conception de la sécurité

robot
Création du résumé en cours

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

Cet article analysera en profondeur la mise en œuvre de la conception du modèle de fabrique de la plateforme Sputnik-DAO (sputnikdao-factory).

1. Contrat de fabrique Sputnik-DAO

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

L'état du contrat de l'usine est principalement composé de deux parties :

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

  • factory_manager: implémentation de la logique fonctionnelle interne principale du contrat, fournissant des méthodes pour créer/supprimer/mettre à jour des instances de DAO.
  • daos : enregistre les adresses de compte NEAR de toutes les instances de DAO créées dans l'historique de la plateforme.

2. Créer un DAO

Créer une instance de DAO en utilisant la méthode create() :

rouille #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!("{}.{}", name, env::current_account_id()) .parse() .unwrap(); // ... self.factory_manager.create_contract( self.get_default_code_hash(), account_id, "new", &args.0, "on_create", &callback_args, ); }

Les principales étapes de la méthode create_contract() :

  1. Charger le code du modèle de contrat intelligent de l'instance DAO
  2. Construire une promesse pour suivre le traitement des résultats
  3. Créer un compte pour déployer le contrat d'instance DAO
  4. Transférer des tokens NEAR
  5. Déployer le code du contrat
  6. Appeler la fonction d'initialisation new()
  7. Fonction de rappel on_create()

3. Mise à jour du DAO

Vous pouvez mettre à jour le contrat DAO via la méthode update() :

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" ); // ... self.factory_manager .update_contract(account_id, code_hash, "update"); }

4. Analyse de la sécurité

  • Contrôle d'accès : la méthode view ne modifie pas l'état, la fonction privilégiée ne peut être exécutée que par le propriétaire.
  • Gestion des erreurs : mise en place d'un mécanisme de traitement raisonnable pour les situations exceptionnelles
  • Correction d'une vulnérabilité de sécurité permettant à n'importe quel utilisateur de mettre à jour le contrat DAO

Le contrat d'usine Sputnik-DAO garantit la sécurité du contrat grâce à ces mécanismes.

GET0.72%
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
JustHereForAirdropsvip
· 07-25 18:43
Il a été étudié que créer un DAO sera aussi simple que de construire un site web.
Voir l'originalRépondre0
GateUser-4745f9cevip
· 07-22 23:42
La gestion des autorisations, c'est tout !
Voir l'originalRépondre0
New_Ser_Ngmivip
· 07-22 23:41
Le code est bien écrit.
Voir l'originalRépondre0
PebbleHandervip
· 07-22 23:36
La gestion semble assez stricte.
Voir l'originalRépondre0
GateUser-1a2ed0b9vip
· 07-22 23:33
L'analyse des contrats est plutôt intéressante
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)