Les smart contracts, en tant que type de programme, ne peuvent éviter d'avoir des défauts. Même après de nombreux tests et audits, il peut encore exister des vulnérabilités. Une fois qu'une vulnérabilité est exploitée, cela peut entraîner des pertes d'actifs pour les utilisateurs et d'autres conséquences graves. Par conséquent, la capacité de mise à niveau des contrats est très importante, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités.
Méthode de mise à niveau des contrats NEAR
Prenons l'exemple du projet StatusMessage pour introduire les méthodes courantes de mise à niveau des contrats NEAR.
1. La structure de données du contrat n'a pas été modifiée
Si seule la logique du contrat est modifiée sans changement de la structure des données, vous pouvez directement utiliser la commande near deploy pour redéployer le nouveau code. Les données de l'ancien contrat peuvent toujours ê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é de la nouvelle structure de données avec l'ancien état, ce qui provoquera une erreur.
3. Utiliser la méthode Migrate pour mettre à niveau
NEAR propose une méthode Migrate pour aider à mettre à niveau les 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');
Auto {
taglines : old_state.records,
bios: LookupMap::new(b'b'.to_vec)((,
}
}
Appel de la méthode migrate lors du redéploiement :
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.
16 J'aime
Récompense
16
5
Partager
Commentaire
0/400
DAOTruant
· Il y a 2h
C'est selon l'humeur si l'on doit migrer les données.
Voir l'originalRépondre0
0xSherlock
· 07-25 08:10
Regarder cela me donne mal à la tête, je ne peux plus étudier.
Voir l'originalRépondre0
MEVHunterLucky
· 07-25 08:10
Honnêtement, il n'y a pas de code, alors comment apprendre ?
Guide de mise à niveau des smart contracts Rust : pratiques de migration sécurisée sur la plateforme NEAR
Guide de mise à niveau des smart contracts Rust
Les smart contracts, en tant que type de programme, ne peuvent éviter d'avoir des défauts. Même après de nombreux tests et audits, il peut encore exister des vulnérabilités. Une fois qu'une vulnérabilité est exploitée, cela peut entraîner des pertes d'actifs pour les utilisateurs et d'autres conséquences graves. Par conséquent, la capacité de mise à niveau des contrats est très importante, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités.
Méthode de mise à niveau des contrats NEAR
Prenons l'exemple du projet StatusMessage pour introduire les méthodes courantes de mise à niveau des contrats NEAR.
1. La structure de données du contrat n'a pas été modifiée
Si seule la logique du contrat est modifiée sans changement de la structure des données, vous pouvez directement utiliser la commande near deploy pour redéployer le nouveau code. Les données de l'ancien contrat peuvent toujours ê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é de la nouvelle structure de données avec l'ancien état, ce qui provoquera une erreur.
3. Utiliser la méthode Migrate pour mettre à niveau
NEAR propose une méthode Migrate pour aider à mettre à niveau les 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'); Auto { taglines : old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Appel de la méthode migrate lors du redéploiement :
déployer près
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm \ --initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet
Cela permet de déployer avec succès un nouveau smart contract et de migrer les anciennes données.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Considérations de sécurité pour la mise à niveau des contrats
La fonction de mise à niveau doit faire l'objet d'un contrôle d'accès, généralement elle ne peut être appelée que par le développeur ou le DAO.
Il est conseillé de définir le propriétaire du contrat comme DAO, pour gérer ensemble par le biais de propositions et de votes.
Ajouter #[init(ignore_state)] avant la fonction de migration pour s'assurer que l'état n'est pas chargé avant l'exécution.
Supprimez la fonction de migration après la migration, assurez-vous qu'elle ne soit appelée qu'une seule fois.
La nouvelle structure de données est initialisée lors de la migration.
Un mécanisme de mise à niveau raisonnable peut fournir flexibilité et maintenabilité aux contrats tout en garantissant la sécurité.