Discussion sur les méthodes de mise à niveau des smart contracts Rust
La mise à niveau des contrats est une étape importante dans le développement des smart contracts. En raison de la nature immuable de la blockchain, un smart contract déployé sur la chaîne ne peut pas être modifié directement. Cependant, dans les applications pratiques, les contrats nécessitent souvent des corrections de bugs ou l'ajout de nouvelles fonctionnalités, ce qui nécessite une mise à niveau. Cet article présentera les méthodes courantes de mise à niveau des smart contracts en Rust.
1. La nécessité de la mise à niveau des contrats
Les smart contracts, en tant que code programmatique, ne peuvent échapper à des vulnérabilités. Même après de nombreux tests et audits, des problèmes non découverts peuvent encore exister. Une fois qu'une vulnérabilité est exploitée de manière malveillante, cela peut entraîner des pertes d'actifs graves. Par conséquent, la capacité à être mis à jour est très importante pour les smart contracts, principalement utilisée pour:
Correction des vulnérabilités de sécurité détectées
Ajouter de nouvelles fonctionnalités
Optimiser la logique des contrats, améliorer les performances
2. Méthode de mise à niveau des contrats NEAR
Voici un exemple du projet StatusMessage, qui présente la méthode de mise à niveau des contrats NEAR :
2.1 La structure des données de contrat n'a pas été modifiée
Si vous ne modifiez que la logique du contrat et qu'il n'y a pas de changement de structure de données, vous pouvez utiliser directement la commande near deploy pour redéployer le nouveau code. Exemple:
bash
near déployer \
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Dans ce cas, les données de l'ancien contrat seront conservées.
2.2 La structure de données du contrat a été modifiée
Si la structure de données du contrat a été modifiée, le redéploiement direct entraînera une erreur de non correspondance entre les anciennes et nouvelles structures de données. Dans ce cas, il est nécessaire d'utiliser une méthode de migration pour effectuer la mise à niveau.
Ajouter la méthode migrate dans le nouveau contrat :
3. Considérations de sécurité concernant la mise à niveau des contrats
Lors de la mise à niveau des contrats, il est important de prendre en compte les points suivants :
Contrôle strict des droits de mise à niveau, uniquement autorisé pour le propriétaire du contrat ou le DAO pour effectuer des mises à niveau.
Il est recommandé de définir le propriétaire du contrat comme DAO, pour gérer les mises à niveau par le biais de propositions et de votes.
Ajoutez #[init(ignore_state)] avant la fonction de migration, assurez-vous de ne pas charger l'état avant l'exécution.
Supprimer la fonction de migration après la migration pour éviter les appels répétés.
La nouvelle structure de données est initialisée lors de la migration.
Une conception et une exécution raisonnables du plan de mise à niveau peuvent garantir la sécurité des contrats et des actifs des utilisateurs tout en assurant la capacité de mise à niveau des contrats.
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.
10 J'aime
Récompense
10
4
Partager
Commentaire
0/400
HappyToBeDumped
· Il y a 10h
La mise à niveau équivaut à corriger les vulnérabilités.
Méthodes de mise à niveau des smart contracts Rust et considérations de sécurité
Discussion sur les méthodes de mise à niveau des smart contracts Rust
La mise à niveau des contrats est une étape importante dans le développement des smart contracts. En raison de la nature immuable de la blockchain, un smart contract déployé sur la chaîne ne peut pas être modifié directement. Cependant, dans les applications pratiques, les contrats nécessitent souvent des corrections de bugs ou l'ajout de nouvelles fonctionnalités, ce qui nécessite une mise à niveau. Cet article présentera les méthodes courantes de mise à niveau des smart contracts en Rust.
1. La nécessité de la mise à niveau des contrats
Les smart contracts, en tant que code programmatique, ne peuvent échapper à des vulnérabilités. Même après de nombreux tests et audits, des problèmes non découverts peuvent encore exister. Une fois qu'une vulnérabilité est exploitée de manière malveillante, cela peut entraîner des pertes d'actifs graves. Par conséquent, la capacité à être mis à jour est très importante pour les smart contracts, principalement utilisée pour:
2. Méthode de mise à niveau des contrats NEAR
Voici un exemple du projet StatusMessage, qui présente la méthode de mise à niveau des contrats NEAR :
2.1 La structure des données de contrat n'a pas été modifiée
Si vous ne modifiez que la logique du contrat et qu'il n'y a pas de changement de structure de données, vous pouvez utiliser directement la commande near deploy pour redéployer le nouveau code. Exemple:
bash near déployer \ --accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Dans ce cas, les données de l'ancien contrat seront conservées.
2.2 La structure de données du contrat a été modifiée
Si la structure de données du contrat a été modifiée, le redéploiement direct entraînera une erreur de non correspondance entre les anciennes et nouvelles structures de données. Dans ce cas, il est nécessaire d'utiliser une méthode de migration pour effectuer la mise à niveau.
Ajouter 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)((, } }
Ensuite, appelez 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 statusmessage.testnet
Cela permet de migrer les anciennes données vers la nouvelle structure de données.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
3. Considérations de sécurité concernant la mise à niveau des contrats
Lors de la mise à niveau des contrats, il est important de prendre en compte les points suivants :
Une conception et une exécution raisonnables du plan de mise à niveau peuvent garantir la sécurité des contrats et des actifs des utilisateurs tout en assurant la capacité de mise à niveau des contrats.