Analyse du code de contrat de la fabrique Sputnik DAO : logique centrale pour la création et la mise à niveau de DAO

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 du code des contrats de fabrication de la plateforme Sputnik DAO. Sputnik DAO utilise un 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.

1. Sputnik-DAO factory smart contracts

L'état principal du contrat de la fabrique Sputnik-DAO est composé de deux parties :

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

  • factory_manager: fournit la logique fonctionnelle interne pour créer/supprimer/mettre à jour les instances de DAO
  • daos : enregistre l'adresse du compte NEAR de toutes les instances de DAO créées sur cette plateforme.

2. Créer un DAO

Le contrat de l'usine fournit la méthode create() pour créer de nouvelles instances de DAO :

rouille #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { // Construire le compte de déploiement du contrat 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("Échec de la sérialisation");

// Appeler factory_manager pour créer des contrats intelligents
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() comprennent :

  1. Charger le code du modèle de contrat DAO
  2. Créer un compte de déploiement
  3. Fonds de départ pour le transfert
  4. Déployer le code du contrat
  5. Appeler la fonction d'initialisation du contrat
  6. Callback on_create() function

3. Mise à jour du DAO

Le contrat de l'usine fournit la méthode update() pour mettre à jour le contrat 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 par 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é

La sécurité du contrat de la fabrique Sputnik-DAO est principalement garantie par les aspects suivants :

  • Contrôle d'accès : la méthode view ne modifie pas l'état, les fonctions privilèges ne peuvent être appelées que par le propriétaire.
  • Gestion des erreurs : mettre en œuvre un mécanisme de gestion des erreurs raisonnable pour les situations exceptionnelles
  • Vérification des assertions : ajouter des vérifications d'assertion nécessaires aux opérations clés

Le contrat de l'usine avait une grave vulnérabilité de sécurité, qui pouvait permettre à n'importe quel utilisateur de mettre à niveau le contrat DAO. Cette vulnérabilité a été corrigée en ajoutant un mécanisme de vérification de liste blanche raisonnable.

GET-8.43%
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
  • 4
  • Partager
Commentaire
0/400
BearMarketMonkvip
· Il y a 5h
Un peu de bull, apprendre le rust et faire des contrats.
Voir l'originalRépondre0
AirdropChaservip
· Il y a 5h
Encore une autre analyse de code, je suis dizzy
Voir l'originalRépondre0
ProbablyNothingvip
· Il y a 5h
Je suis perdu en regardant le code du contrat, qu'est-ce qui est écrit là ?
Voir l'originalRépondre0
fren.ethvip
· Il y a 5h
C'est vraiment douloureux à regarder xd
Voir l'originalRépondre0
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)