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 :
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() :
Les principales étapes de la méthode create_contract() :
Charger le code du modèle de contrat intelligent de l'instance DAO
Construire une promesse pour suivre le traitement des résultats
Créer un compte pour déployer le contrat d'instance DAO
Transférer des tokens NEAR
Déployer le code du contrat
Appeler la fonction d'initialisation new()
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.
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.
19 J'aime
Récompense
19
5
Partager
Commentaire
0/400
JustHereForAirdrops
· 07-25 18:43
Il a été étudié que créer un DAO sera aussi simple que de construire un site web.
Analyse des contrats de l'usine Sputnik DAO : création, mise à jour et conception de la sécurité
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, }
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() :
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é
Le contrat d'usine Sputnik-DAO garantit la sécurité du contrat grâce à ces mécanismes.