Journal de développement des smart contracts Rust (9) : Sécurité des contrats et mise à niveau des contrats
Les smart contracts, en tant que forme de code programmatique, ne peuvent éviter d'avoir des défauts et des vulnérabilités. Même les contrats ayant été pleinement testés et audités peuvent présenter des problèmes non découverts. Une fois que ces problèmes potentiels sont exploités, ils peuvent entraîner des conséquences graves, telles que la perte d'actifs des utilisateurs. Par conséquent, la capacité de mise à niveau des contrats est très importante 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 sur la plateforme NEAR.
1. La nécessité de la mise à niveau des contrats
Les smart contracts sont essentiellement du code de programme et peuvent inévitablement contenir des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore exister. Si ces vulnérabilités sont exploitées par des attaquants, cela peut entraîner de graves conséquences, telles que la perte d'actifs des utilisateurs. La correction des vulnérabilités nécessite souvent une mise à jour du contrat. De plus, l'ajout de nouvelles fonctionnalités nécessite également une mise à jour du contrat. Par conséquent, la capacité de mise à jour des contrats est très nécessaire.
2. Méthodes courantes de mise à niveau des contrats Ethereum
Les smart contracts sur Ethereum ont une immutabilité, une fois déployés, ils ne peuvent pas être modifiés. Pour résoudre ce problème, on utilise généralement la méthode des contrats de proxy (Proxy Contract) :
Les contrats d代理 sont utilisés pour stocker des données et appeler des contrats logiques à l'aide de deleGatecall.
Les smart contracts contiennent une logique métier spécifique.
Lors de la mise à niveau, il suffit de déployer un nouveau smart contract et de mettre à jour le contrat proxy pour qu'il pointe vers.
Cette méthode permet de conserver les données d'origine tout en mettant à jour uniquement la partie logique.
3. Méthodes de mise à niveau des contrats NEAR
Voici un exemple du projet StatusMessage qui présente les méthodes de mise à niveau des contrats NEAR :
3.1 La structure des données de 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 directement utiliser la commande near deploy pour redéployer le nouveau code. Les données existantes seront conservées.
3.2 La structure des données des contrats 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 la lecture normale des données existantes.
3.3 Utiliser la méthode Migrate pour mettre à niveau
NEAR propose la méthode Migrate pour la mise à niveau des contrats. Ajoutez la fonction migrate dans le nouveau contrat :
Cela permet de réaliser la migration des données, même si la structure des données des anciens et des nouveaux contrats n'est pas cohérente, la mise à niveau peut se faire normalement.
4. Considérations de sécurité sur la mise à niveau des contrats
La mise à niveau des contrats doit prendre en compte les facteurs de sécurité suivants :
Contrôle strict des droits de mise à niveau, uniquement les développeurs ou le DAO sont autorisés à mettre à niveau.
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 migrate
Supprimez la fonction migrate après la migration, assurez-vous qu'elle n'est appelée qu'une seule fois.
Nouvelle structure de données initialisée lors de la migration
Grâce à ces mesures, la sécurité des mises à niveau des contrats peut être assurée et les risques pendant le processus de mise à niveau peuvent être réduits.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
11 J'aime
Récompense
11
5
Partager
Commentaire
0/400
liquiditea_sipper
· 07-13 07:37
Ça a l'air si puissant, mais je n'ose toujours pas essayer.
Voir l'originalRépondre0
NeverVoteOnDAO
· 07-13 07:37
La mise à niveau est-elle fiable ? J'ai toujours l'impression que ce n'est pas bien nettoyé.
Voir l'originalRépondre0
BrokenDAO
· 07-13 07:24
Les autorisations équivalent à une porte dérobée, que peut-on dire de la sécurité ?
Voir l'originalRépondre0
LayerZeroHero
· 07-13 07:24
Une fois la mise à niveau terminée, personne ne peut contrôler cela.
Techniques de mise à niveau des smart contracts Rust : meilleures pratiques pour passer d'Ethereum à NEAR
Journal de développement des smart contracts Rust (9) : Sécurité des contrats et mise à niveau des contrats
Les smart contracts, en tant que forme de code programmatique, ne peuvent éviter d'avoir des défauts et des vulnérabilités. Même les contrats ayant été pleinement testés et audités peuvent présenter des problèmes non découverts. Une fois que ces problèmes potentiels sont exploités, ils peuvent entraîner des conséquences graves, telles que la perte d'actifs des utilisateurs. Par conséquent, la capacité de mise à niveau des contrats est très importante 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 sur la plateforme NEAR.
1. La nécessité de la mise à niveau des contrats
Les smart contracts sont essentiellement du code de programme et peuvent inévitablement contenir des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore exister. Si ces vulnérabilités sont exploitées par des attaquants, cela peut entraîner de graves conséquences, telles que la perte d'actifs des utilisateurs. La correction des vulnérabilités nécessite souvent une mise à jour du contrat. De plus, l'ajout de nouvelles fonctionnalités nécessite également une mise à jour du contrat. Par conséquent, la capacité de mise à jour des contrats est très nécessaire.
2. Méthodes courantes de mise à niveau des contrats Ethereum
Les smart contracts sur Ethereum ont une immutabilité, une fois déployés, ils ne peuvent pas être modifiés. Pour résoudre ce problème, on utilise généralement la méthode des contrats de proxy (Proxy Contract) :
Cette méthode permet de conserver les données d'origine tout en mettant à jour uniquement la partie logique.
3. Méthodes de mise à niveau des contrats NEAR
Voici un exemple du projet StatusMessage qui présente les méthodes de mise à niveau des contrats NEAR :
3.1 La structure des données de 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 directement utiliser la commande near deploy pour redéployer le nouveau code. Les données existantes seront conservées.
3.2 La structure des données des contrats 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 la lecture normale des données existantes.
3.3 Utiliser la méthode Migrate pour mettre à niveau
NEAR propose la méthode Migrate pour la mise à niveau des contrats. Ajoutez la fonction 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 :
near deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}" \ --accountId statusmessage.blocksec_upgrade.testnet
Cela permet de réaliser la migration des données, même si la structure des données des anciens et des nouveaux contrats n'est pas cohérente, la mise à niveau peut se faire normalement.
4. Considérations de sécurité sur la mise à niveau des contrats
La mise à niveau des contrats doit prendre en compte les facteurs de sécurité suivants :
Grâce à ces mesures, la sécurité des mises à niveau des contrats peut être assurée et les risques pendant le processus de mise à niveau peuvent être réduits.