Analyse approfondie des contrats de l'usine de la plateforme Sputnik DAO : conception, mise en œuvre et mécanismes de sécurité

robot
Création du résumé en cours

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

Cet article approfondira la conception et la mise en œuvre du modèle d'usine de la plateforme Sputnik DAO (sputnikdao-factory).

1. Sputnik-DAO factory smart contracts

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

Le référentiel de code source du contrat correspondant est situé à :

2. Introduction aux fonctionnalités du module DAPP

La page DAPP de la plateforme Sputnik DAO affiche les instances DAO créées ( contrat Sputnikdaov2 ). En mars 2022, le DAO le plus actif sur cette plateforme est news.sputnik-dao.near, avec 3051 propositions en cours de vote ou déjà terminées.

Tous les contrats d'instance de DAO créés sur la plateforme Sputnik DAO sont déployés de manière uniforme sous ses sous-comptes par le contrat sputnikdao-factory du compte sputnik-dao.near (, par exemple :

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.sputnik-dao.near

Les organisations peuvent appeler publiquement la méthode create)( du contrat sputnikdao-factory sur le réseau principal NEAR pour créer de nouvelles instances de DAO.

![])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 sputnikdao-factory est principalement composé de deux parties :

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

  • factory_manager: fournit des méthodes pour créer/supprimer/mettre à jour des instances de DAO
  • daos: enregistre l'adresse du compte NEAR ayant créé une instance de DAO

create###( méthode définition:

rouille #) pub fn create[payable]&mut self, name: AccountId, args: Base64VecU8( { let account_id: AccountId = format!)'{}.{}', name, env::current_account_id(() .parse)( .unwrap)(; 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)'Failed to serialize'(; self.factory_manager.create_contract) self.get_default_code_hash((, account_id, 'nouveau', &args.0, 'on_create', &callback_args, ); }

![])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(

L'implémentation spécifique de factory_manager.create_contract:

rouille pub fn create_contract) &self, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: (, callback_method: &str, callback_args: &[u8], [u8] { // Charger le code du contrat // Créer une promesse // Créer un compte // Transfert // Déployer le contrat // Appel de la fonction d'initialisation // Définir le rappel }

![])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(

on_create fonction de rappel :

rouille #) pub fn on_create[private] &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { si near_sdk::is_promise_success() { self.daos.insert(\u0026account_id); vrai } else { Promise::new(predecessor_account_id).transfer(attached_deposit.0); faux } }

( mise à jour 3.2 DAO

update)### méthode:

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

4. Analyse de la sécurité des contrats de la Fabrique Sputnik-DAO

Assurer la sécurité principalement sous plusieurs aspects :

  • Contrôle d'accès : la méthode view ne modifie pas les variables d'état
  • Les fonctions de privilège ne peuvent être exécutées que par le propriétaire
  • Mécanisme de gestion des erreurs raisonnable

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
  • 7
  • Partager
Commentaire
0/400
AltcoinOraclevip
· Il y a 12h
les degens dorment sur sputnik... leur modèle de fabrication est littéralement une gouvernance web3 2.0
Voir l'originalRépondre0
not_your_keysvip
· Il y a 12h
Ce design est plutôt hardcore, wow.
Voir l'originalRépondre0
ImpermanentPhilosophervip
· Il y a 12h
Développement modulaire sans réflexion, j'adore
Voir l'originalRépondre0
PensionDestroyervip
· Il y a 12h
Le contrat de l'usine semble fiable.
Voir l'originalRépondre0
ImaginaryWhalevip
· Il y a 12h
Ce contrat a quelque chose de spécial.
Voir l'originalRépondre0
InfraVibesvip
· Il y a 12h
Le produit national peut aussi faire ce piège.
Voir l'originalRépondre0
BanklessAtHeartvip
· Il y a 13h
La sécurité des contrats de fabrication est effectivement cruciale.
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)