Les smart contracts sont essentiellement des programmes et ne peuvent éviter d'avoir des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore exister. Si elles sont 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. Cet article présentera les méthodes de mise à niveau des contrats Rust.
1. La nécessité de la mise à niveau des contrats
Les smart contracts, en tant que programmes, présentent inévitablement des défauts. La correction des vulnérabilités et l'ajout de nouvelles fonctionnalités doivent être réalisés par le biais de mises à jour de contrat.
2. Méthodes courantes de mise à niveau des contrats Solidity
Les smart contracts d'Ethereum ont une immutabilité, une fois déployés, ils ne peuvent pas être modifiés. La solution consiste à déployer un nouveau contrat, mais cela pose des défis tels que le changement d'adresse et la migration d'état. On utilise généralement une architecture de contrat proxy qui sépare les données et la logique, en améliorant uniquement le contrat logique, sans se soucier de la migration d'état.
3. Méthodes de mise à niveau des contrats NEAR
Prenons l'exemple du projet StatusMessage pour introduire la méthode de mise à niveau des contrats NEAR :
3.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 near deploy pour redéployer le nouveau code. Les données existantes peuvent toujours être lues normalement.
3.2 La structure des données des contrats a été modifiée
Si la structure des données 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.3 Utiliser la méthode Migrate pour la mise à niveau
NEAR fournit la méthode Migrate pour aider à la mise à niveau des contrats. Ajoutez la méthode migrate dans le nouveau contrat :
Il suffit d'appeler la méthode migrate lors du déploiement pour effectuer la migration des données.
4. Considérations de sécurité sur la mise à niveau des contrats
Mise à niveau du contrôle des autorisations, généralement uniquement par les développeurs ou le DAO.
Il est recommandé de définir le propriétaire du contrat comme DAO, géré 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 est initialisée lors de la migration.
La mise à niveau des contrats est un moyen important de garantir la sécurité et l'itération des fonctionnalités des contrats, nécessitant une conception et une mise en œuvre prudentes.
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
4
Partager
Commentaire
0/400
SandwichTrader
· Il y a 8h
Continuer à copier les devoirs ? Un autre contrat a été ouvert.
Mise à niveau des smart contracts Rust : garantir la sécurité et l'évolutivité
Rust smart contracts养成日记(9): 合约升级
Les smart contracts sont essentiellement des programmes et ne peuvent éviter d'avoir des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore exister. Si elles sont 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. Cet article présentera les méthodes de mise à niveau des contrats Rust.
1. La nécessité de la mise à niveau des contrats
Les smart contracts, en tant que programmes, présentent inévitablement des défauts. La correction des vulnérabilités et l'ajout de nouvelles fonctionnalités doivent être réalisés par le biais de mises à jour de contrat.
2. Méthodes courantes de mise à niveau des contrats Solidity
Les smart contracts d'Ethereum ont une immutabilité, une fois déployés, ils ne peuvent pas être modifiés. La solution consiste à déployer un nouveau contrat, mais cela pose des défis tels que le changement d'adresse et la migration d'état. On utilise généralement une architecture de contrat proxy qui sépare les données et la logique, en améliorant uniquement le contrat logique, sans se soucier de la migration d'état.
3. Méthodes de mise à niveau des contrats NEAR
Prenons l'exemple du projet StatusMessage pour introduire la méthode de mise à niveau des contrats NEAR :
3.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 near deploy pour redéployer le nouveau code. Les données existantes peuvent toujours être lues normalement.
3.2 La structure des données des contrats a été modifiée
Si la structure des données 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.3 Utiliser la méthode Migrate pour la mise à niveau
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)((, } }
Il suffit d'appeler la méthode migrate lors du déploiement pour effectuer la migration des données.
4. Considérations de sécurité sur la mise à niveau des contrats
La mise à niveau des contrats est un moyen important de garantir la sécurité et l'itération des fonctionnalités des contrats, nécessitant une conception et une mise en œuvre prudentes.