Le Sputnik-DAO utilise un modèle de conception de type usine créatrice pour réaliser la création et la gestion unifiée de l'organisation autonome décentralisée (DAO) sur cette plateforme. Cet article présentera en détail la mise en œuvre de la conception du modèle d'usine Sputnik-DAO (sputnikdao-factory).
1. Structure du contrat d'usine
L'état du contrat d'usine se compose principalement de deux parties :
factory_manager: Fournir des méthodes pour créer/supprimer/met à jour des instances de DAO
daos : enregistre l'adresse du compte NEAR de tous les DAO créés
2. Créer un DAO
Créer une instance DAO en utilisant la méthode create() :
rouille
#[payable]
pub fn create(&mut self, name: AccountId, args: Base64VecU8) {
// Construire l'adresse du 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(\u0026json!({
"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 un contrat
self.factory_manager.create_contract(
self.get_default_code_hash(),
account_id,
"nouveau",
&args.0,
"on_create",
\u0026callback_args,
);
}
Les principales étapes de factory_manager.create_contract :
Charger le code du modèle de contrat d'instance DAO
Créer un suivi de promesse pour traiter les résultats
Créer un compte de déploiement
Fonds de départ pour le transfert
Déployer le code du contrat
Appeler la fonction d'initialisation du contrat
Rappel de la fonction on_create
Gestion de la fonction de rappel on_create :
Si la création réussit, enregistrez un nouveau compte DAO.
Si échoue, rembourser le capital initial
3. Mise à jour du DAO
Le contrat de l'usine fournit une mise à jour de l'interface ( 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 l'usine"
);
self.factory_manager
.update_contract)account_id, code_hash, "update"(;
}
La mise à jour du contrat ) appellera la fonction update() du contrat DAO pour effectuer la mise à niveau.
4. Analyse de la sécurité
Contrôle d'accès : la méthode view ne modifie pas l'état, les fonctions de privilège ne peuvent être appelées que par le propriétaire.
Gestion des erreurs : Les exceptions doivent avoir un mécanisme de gestion des erreurs raisonnable.
Correction d'une vulnérabilité permettant aux utilisateurs ordinaires de mettre à niveau arbitrairement le contrat DAO.
Le contrat de l'usine Sputnik-DAO garantit la sécurité du contrat grâce à des mécanismes de contrôle des accès, de gestion des erreurs, etc.
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.
18 J'aime
Récompense
18
6
Reposter
Partager
Commentaire
0/400
MysteryBoxBuster
· Il y a 13h
Le contrat d'usine est vraiment trop basique.
Voir l'originalRépondre0
ZkSnarker
· Il y a 13h
eh bien en fait... le modèle de fabrique de sputnik est en quelque sorte basé pour être honnête
Voir l'originalRépondre0
HalfBuddhaMoney
· Il y a 13h
Viens, développeur, explique-moi comment utiliser ce piège ?
Voir l'originalRépondre0
ForkTongue
· Il y a 13h
Ce code me semble familier.
Voir l'originalRépondre0
CantAffordPancake
· Il y a 13h
Quand on aura de l'argent, on en fera un. On regarde les contrats toute la journée.
Voir l'originalRépondre0
MissedTheBoat
· Il y a 13h
Je ne comprends pas le code, mais je suis un expert pour perdre de l'argent.
Contrat de l'usine Sputnik-DAO : Mécanisme central pour la création et la gestion unifiée des instances DAO.
Analyse du contrat de l'usine Sputnik-DAO
Le Sputnik-DAO utilise un modèle de conception de type usine créatrice pour réaliser la création et la gestion unifiée de l'organisation autonome décentralisée (DAO) sur cette plateforme. Cet article présentera en détail la mise en œuvre de la conception du modèle d'usine Sputnik-DAO (sputnikdao-factory).
1. Structure du contrat d'usine
L'état du contrat d'usine se compose principalement de deux parties :
rouille pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }
2. Créer un DAO
Créer une instance DAO en utilisant la méthode create() :
rouille #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { // Construire l'adresse du compte DAO let account_id: AccountId = format!("{}.{}", name, env::current_account_id()) .parse() .unwrap();
}
Les principales étapes de factory_manager.create_contract :
Gestion de la fonction de rappel on_create :
3. Mise à jour du DAO
Le contrat de l'usine fournit une mise à jour de l'interface ( 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 l'usine" ); self.factory_manager .update_contract)account_id, code_hash, "update"(; }
La mise à jour du contrat ) appellera la fonction update() du contrat DAO pour effectuer la mise à niveau.
4. Analyse de la sécurité
Le contrat de l'usine Sputnik-DAO garantit la sécurité du contrat grâce à des mécanismes de contrôle des accès, de gestion des erreurs, etc.