Détails de la solution de mise à niveau des smart contracts Rust
Les smart contracts sont essentiellement des programmes, et il est inévitable qu'ils présentent des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore apparaître. Une fois exploitées par des attaquants, elles peuvent 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 absolument nécessaire, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités. Cet article présentera les méthodes courantes de mise à niveau des contrats Rust.
Proposition de mise à niveau des contrats Ethereum
Les smart contracts d'Ethereum sont immuables et ne peuvent pas être modifiés une fois déployés. Pour résoudre les vulnérabilités ou ajouter de nouvelles fonctionnalités, il est courant de redéployer un nouveau contrat. Cependant, cela entraîne un changement d'adresse de contrat, ce qui nécessite de modifier toutes les DApps utilisant ce contrat. De plus, il est nécessaire de migrer les données d'état de l'ancien contrat, ce qui représente un travail important et sujette à des erreurs.
Pour cela, une architecture de séparation des données et de la logique est généralement adoptée : les données sont stockées dans des contrats d'état, et toute la logique est implémentée dans un autre contrat logique. Lors de la mise à niveau, il suffit de mettre à jour le contrat logique, sans avoir besoin de migrer les données d'état.
Dans la mise en œuvre spécifique, vous pouvez utiliser le contrat proxy (Proxy Contract). Le contrat proxy stocke des données et appelle le contrat logique A via deleGatecall. Lors de la mise à niveau, il suffit de déployer un nouveau contrat logique B, puis de faire pointer le contrat proxy vers B.
Plan de mise à niveau des contrats NEAR
Prenons le projet StatusMessage comme exemple pour introduire les méthodes courantes de mise à niveau des contrats NEAR.
La structure des données du contrat n'a pas été modifiée
Si vous ne modifiez que la logique du contrat, sans toucher à la structure des données, vous pouvez simplement utiliser near deploy pour redéployer le nouveau code. Les données existantes restent accessibles normalement.
La structure de 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 l'accès normal aux données.
utilise la méthode Migrate pour mettre à niveau
NEAR propose la méthode Migrate pour aider à mettre à niveau les contrats. Ajoutez la méthode migrate dans le nouveau contrat :
Considérations de sécurité pour la mise à niveau des contrats
Contrôle des autorisations : la fonction de mise à niveau doit être une fonction only owner, pouvant être appelée uniquement par le owner.
Il est recommandé de définir le propriétaire comme DAO, et de gérer le contrat 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 que la migration soit terminée, 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.
L'utilisation raisonnable de ces solutions de mise à niveau permet de mettre à jour et de maintenir les smart contracts de manière flexible tout en garantissant la sécurité.
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.
20 J'aime
Récompense
20
7
Partager
Commentaire
0/400
NFTArtisanHQ
· Il y a 20h
point de vue intéressant... mais le modèle proxy n'est pas exactement le ready-made de Duchamp sous forme de code pour être honnête
Voir l'originalRépondre0
rugdoc.eth
· 07-24 10:17
Rester est quand même un peu pénible.
Voir l'originalRépondre0
Hash_Bandit
· 07-23 14:51
été là quand le btc était miné sur des ordinateurs portables... la capacité de mise à niveau est clé mais risquée af tbh
Voir l'originalRépondre0
AllTalkLongTrader
· 07-21 20:52
Encore en train de parler de mise à niveau. Si je dois dire, la solution la plus sûre reste de se déconnecter temporairement et de redémarrer.
Voir l'originalRépondre0
TestnetFreeloader
· 07-21 20:51
Les failles doivent être exploitées dès que possible ! On peut en profiter un peu.
Voir l'originalRépondre0
ApeEscapeArtist
· 07-21 20:50
Les failles ne se corrigent jamais complètement, il vaut mieux ne pas trop espérer.
Voir l'originalRépondre0
GasWhisperer
· 07-21 20:24
honnêtement, les smart contracts ne sont que des bugs en attente de se produire... le pattern matching ne te sauvera pas des exploits lmao
Stratégie de mise à niveau des smart contracts Rust : assurer la sécurité et la maintenabilité
Détails de la solution de mise à niveau des smart contracts Rust
Les smart contracts sont essentiellement des programmes, et il est inévitable qu'ils présentent des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore apparaître. Une fois exploitées par des attaquants, elles peuvent 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 absolument nécessaire, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités. Cet article présentera les méthodes courantes de mise à niveau des contrats Rust.
Proposition de mise à niveau des contrats Ethereum
Les smart contracts d'Ethereum sont immuables et ne peuvent pas être modifiés une fois déployés. Pour résoudre les vulnérabilités ou ajouter de nouvelles fonctionnalités, il est courant de redéployer un nouveau contrat. Cependant, cela entraîne un changement d'adresse de contrat, ce qui nécessite de modifier toutes les DApps utilisant ce contrat. De plus, il est nécessaire de migrer les données d'état de l'ancien contrat, ce qui représente un travail important et sujette à des erreurs.
Pour cela, une architecture de séparation des données et de la logique est généralement adoptée : les données sont stockées dans des contrats d'état, et toute la logique est implémentée dans un autre contrat logique. Lors de la mise à niveau, il suffit de mettre à jour le contrat logique, sans avoir besoin de migrer les données d'état.
Dans la mise en œuvre spécifique, vous pouvez utiliser le contrat proxy (Proxy Contract). Le contrat proxy stocke des données et appelle le contrat logique A via deleGatecall. Lors de la mise à niveau, il suffit de déployer un nouveau contrat logique B, puis de faire pointer le contrat proxy vers B.
Plan de mise à niveau des contrats NEAR
Prenons le projet StatusMessage comme exemple pour introduire les méthodes courantes de mise à niveau des contrats NEAR.
La structure des données du contrat n'a pas été modifiée
Si vous ne modifiez que la logique du contrat, sans toucher à la structure des données, vous pouvez simplement utiliser near deploy pour redéployer le nouveau code. Les données existantes restent accessibles normalement.
La structure de 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 l'accès normal aux données.
utilise la méthode Migrate pour mettre à niveau
NEAR propose la 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'); Self { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Appel de la méthode migrate lors du dé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 migrer avec succès les données de l'ancien contrat vers la nouvelle structure.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Considérations de sécurité pour la mise à niveau des contrats
Contrôle des autorisations : la fonction de mise à niveau doit être une fonction only owner, pouvant être appelée uniquement par le owner.
Il est recommandé de définir le propriétaire comme DAO, et de gérer le contrat 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 que la migration soit terminée, 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.
L'utilisation raisonnable de ces solutions de mise à niveau permet de mettre à jour et de maintenir les smart contracts de manière flexible tout en garantissant la sécurité.