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.
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,
);
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.
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.
6 J'aime
Récompense
6
2
Reposter
Partager
Commentaire
0/400
MevHunter
· 08-09 23:48
Ah, ça m'a ébloui ! L'exemple est directement monté à plus de 3k.
Voir l'originalRépondre0
MetaverseVagrant
· 08-09 23:47
rust est si cool ! J'ai juste appris un peu par ennui.
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.
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 :
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)(;
}
![])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(
L'implémentation spécifique de factory_manager.create_contract :
on_create)(fonction de rappel:
![])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
![])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(