Techniques de mise à niveau des smart contracts Rust : meilleures pratiques pour passer d'Ethereum à NEAR

robot
Création du résumé en cours

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 :

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 :

  • 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.

Voir l'original
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.
  • Récompense
  • 5
  • Partager
Commentaire
0/400
liquiditea_sippervip
· 07-13 07:37
Ça a l'air si puissant, mais je n'ose toujours pas essayer.
Voir l'originalRépondre0
NeverVoteOnDAOvip
· 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
BrokenDAOvip
· 07-13 07:24
Les autorisations équivalent à une porte dérobée, que peut-on dire de la sécurité ?
Voir l'originalRépondre0
LayerZeroHerovip
· 07-13 07:24
Une fois la mise à niveau terminée, personne ne peut contrôler cela.
Voir l'originalRépondre0
ser_ngmivip
· 07-13 07:09
le plafond des contrats rug
Voir l'originalRépondre0
  • Épingler
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)