Les smart contracts, en tant que type de programme, ne peuvent échapper à des défauts. Même après de nombreux tests et audits, il peut encore y avoir des vulnérabilités. Une fois exploitées par des attaquants, cela peut entraîner des pertes d'actifs pour les utilisateurs, avec des conséquences graves. Par conséquent, la capacité de mise à niveau des contrats est très nécessaire, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités. 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 présenter 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 vous ne modifiez que la logique du contrat, sans changer la structure des données, vous pouvez déployer directement le nouveau code avec near deploy :
bash
near déployer
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Les données de contrat existantes peuvent être lues normalement.
2. Modification de la structure des données du contrat
Si la structure de données du contrat a été modifiée, le redéploiement direct entraînera un échec de la désérialisation de l'état. Dans ce cas, il est nécessaire d'utiliser la méthode migrate pour procéder à la mise à niveau:
Conseils de sécurité pour la mise à niveau des contrats
La fonction de mise à niveau ajoute un contrôle d'accès, n'autorisant que le propriétaire à l'appeler.
Définir le propriétaire comme DAO, gérer par des propositions et des votes.
Ajouter la fonction de migration #[init(ignore_state)]
Supprimez la fonction de migration après la migration terminée.
La nouvelle structure de données est initialisée lors de la migration.
Une mise à niveau raisonnable peut permettre aux contrats de maintenir leur sécurité et leur évolutivité, ce qui est un élément important du développement des smart contracts.
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
3
Partager
Commentaire
0/400
PumpBeforeRug
· Il y a 16h
Si vous ne pouvez pas prévenir les failles de base, à quoi bon jouer à la course à nu ?
Voir l'originalRépondre0
DegenWhisperer
· Il y a 16h
Pas étonnant que ce soit rust, incroyable
Voir l'originalRépondre0
WalletWhisperer
· Il y a 17h
Un nouveau projet arrive, cela a l'air intéressant.
Meilleures pratiques pour la mise à niveau des smart contracts Rust : apprendre à partir de l'exemple de contrat NEAR
Guide de mise à niveau des smart contracts Rust
Les smart contracts, en tant que type de programme, ne peuvent échapper à des défauts. Même après de nombreux tests et audits, il peut encore y avoir des vulnérabilités. Une fois exploitées par des attaquants, cela peut entraîner des pertes d'actifs pour les utilisateurs, avec des conséquences graves. Par conséquent, la capacité de mise à niveau des contrats est très nécessaire, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités. 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 présenter 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 vous ne modifiez que la logique du contrat, sans changer la structure des données, vous pouvez déployer directement le nouveau code avec near deploy :
bash near déployer
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Les données de contrat existantes peuvent être lues normalement.
2. Modification de la structure des données du contrat
Si la structure de données du contrat a été modifiée, le redéploiement direct entraînera un échec de la désérialisation de l'état. Dans ce cas, il est nécessaire d'utiliser la méthode migrate pour procéder à la mise à niveau:
rouille #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }
Appel de la méthode migrate lors du déploiement :
bash
near déployer \ --wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet
Cela permet de migrer l'ancien état vers le nouveau contrat.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Conseils de sécurité pour la mise à niveau des contrats
Une mise à niveau raisonnable peut permettre aux contrats de maintenir leur sécurité et leur évolutivité, ce qui est un élément important du développement des smart contracts.