Pratique de mise à niveau des smart contracts Rust
Les smart contracts sont essentiellement des programmes et il est inévitable qu'ils contiennent des défauts. Même après de nombreux tests et audits, il peut encore y avoir des vulnérabilités. Les failles des contrats, si elles sont exploitées, peuvent entraîner des pertes d'actifs pour les utilisateurs, avec des conséquences graves. La correction des vulnérabilités et l'ajout de nouvelles fonctionnalités nécessitent une mise à niveau du contrat. Par conséquent, la capacité de mise à niveau des contrats est très nécessaire. Cet article présentera les méthodes de mise à niveau des contrats Rust.
Méthodes de mise à niveau des contrats NEAR
Prenons l'exemple du projet StatusMessage pour introduire les méthodes courantes de mise à jour des contrats NEAR.
1. La structure des données du contrat n'a pas été modifiée.
Si vous modifiez uniquement la logique du contrat sans changer la structure des données, vous pouvez directement utiliser near deploy pour redéployer le nouveau code. Les données de l'ancien contrat peuvent être lues normalement.
2. La structure des données du contrat a été modifiée
Si la structure de données du contrat est modifiée, le redéploiement direct entraînera une incompatibilité entre les anciennes et les nouvelles structures de données, rendant impossible la lecture des données existantes.
3. Utiliser Migrate pour mettre à niveau les contrats smart.
NEAR fournit la méthode Migrate pour aider à la mise à niveau des contrats. Ajoutez la méthode migrate dans le nouveau contrat :
Considérations de sécurité sur la mise à niveau des contrats
La fonction de mise à niveau doit être une fonction only owner, assurant qu'elle ne peut être appelée que par le propriétaire.
Il est recommandé de définir le propriétaire du contrat comme DAO, géré collectivement par des propositions et des votes.
Ajoutez #[init(ignore_state)] avant la fonction de migration.
Supprimez la fonction de migration après la migration terminée.
La nouvelle structure de données sera initialisée lors de la migration.
La mise à niveau des contrats est un moyen important de garantir la sécurité des contrats, les développeurs doivent y prêter une attention particulière et s'assurer de la sécurité du processus de mise à niveau.
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.
9 J'aime
Récompense
9
2
Reposter
Partager
Commentaire
0/400
SandwichVictim
· Il y a 21h
Il y a tant de failles, cela me rend nerveux.
Voir l'originalRépondre0
BlockImposter
· Il y a 21h
On ne peut pas sortir du trou, que l'on mette à niveau ou non~
Guide complet sur la mise à niveau des smart contracts Rust : de NEAR aux considérations de sécurité
Pratique de mise à niveau des smart contracts Rust
Les smart contracts sont essentiellement des programmes et il est inévitable qu'ils contiennent des défauts. Même après de nombreux tests et audits, il peut encore y avoir des vulnérabilités. Les failles des contrats, si elles sont exploitées, peuvent entraîner des pertes d'actifs pour les utilisateurs, avec des conséquences graves. La correction des vulnérabilités et l'ajout de nouvelles fonctionnalités nécessitent une mise à niveau du contrat. Par conséquent, la capacité de mise à niveau des contrats est très nécessaire. Cet article présentera les méthodes de mise à niveau des contrats Rust.
Méthodes de mise à niveau des contrats NEAR
Prenons l'exemple du projet StatusMessage pour introduire les méthodes courantes de mise à jour des contrats NEAR.
1. La structure des données du contrat n'a pas été modifiée.
Si vous modifiez uniquement la logique du contrat sans changer la structure des données, vous pouvez directement utiliser near deploy pour redéployer le nouveau code. Les données de l'ancien contrat peuvent être lues normalement.
2. La structure des données du contrat a été modifiée
Si la structure de données du contrat est modifiée, le redéploiement direct entraînera une incompatibilité entre les anciennes et les nouvelles structures de données, rendant impossible la lecture des données existantes.
3. Utiliser Migrate pour mettre à niveau les contrats smart.
NEAR fournit la méthode Migrate pour aider à la mise à niveau des contrats. Ajoutez la méthode migrate dans le nouveau contrat :
rouille #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Self { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Appel de la méthode migrate lors du redéploiement :
near déployer
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm \ --initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet
Cela permet de migrer avec succès les données de l'ancien contrat vers le nouveau contrat.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Considérations de sécurité sur la mise à niveau des contrats
La fonction de mise à niveau doit être une fonction only owner, assurant qu'elle ne peut être appelée que par le propriétaire.
Il est recommandé de définir le propriétaire du contrat comme DAO, géré collectivement par des propositions et des votes.
Ajoutez #[init(ignore_state)] avant la fonction de migration.
Supprimez la fonction de migration après la migration terminée.
La nouvelle structure de données sera initialisée lors de la migration.
La mise à niveau des contrats est un moyen important de garantir la sécurité des contrats, les développeurs doivent y prêter une attention particulière et s'assurer de la sécurité du processus de mise à niveau.