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.
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
}
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.
18 J'aime
Récompense
18
7
Partager
Commentaire
0/400
AltcoinOracle
· Il y a 13h
les degens dorment sur sputnik... leur modèle de fabrication est littéralement une gouvernance web3 2.0
Voir l'originalRépondre0
not_your_keys
· Il y a 13h
Ce design est plutôt hardcore, wow.
Voir l'originalRépondre0
ImpermanentPhilosopher
· Il y a 13h
Développement modulaire sans réflexion, j'adore
Voir l'originalRépondre0
PensionDestroyer
· Il y a 13h
Le contrat de l'usine semble fiable.
Voir l'originalRépondre0
ImaginaryWhale
· Il y a 13h
Ce contrat a quelque chose de spécial.
Voir l'originalRépondre0
InfraVibes
· Il y a 13h
Le produit national peut aussi faire ce piège.
Voir l'originalRépondre0
BanklessAtHeart
· Il y a 13h
La sécurité des contrats de fabrication est effectivement cruciale.
Analyse approfondie des contrats de l'usine de la plateforme Sputnik DAO : conception, mise en œuvre et mécanismes de sécurité
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 :
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, }
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 :