Guide de mise à niveau des smart contracts Rust : pratiques de migration sécurisée sur la plateforme NEAR

robot
Création du résumé en cours

Guide de mise à niveau des smart contracts Rust

Les smart contracts, en tant que type de programme, ne peuvent éviter d'avoir des défauts. Même après de nombreux tests et audits, il peut encore exister des vulnérabilités. Une fois qu'une vulnérabilité est exploitée, cela peut entraîner des pertes d'actifs pour les utilisateurs et d'autres conséquences graves. Par conséquent, la capacité de mise à niveau des contrats est très importante, principalement pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités.

Méthode de mise à niveau des contrats NEAR

Prenons l'exemple du projet StatusMessage pour introduire les méthodes courantes de mise à niveau des contrats NEAR.

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 la commande near deploy pour redéployer le nouveau code. Les données de l'ancien contrat peuvent toujours être lues normalement.

2. La structure des 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é de la nouvelle structure de données avec l'ancien état, ce qui provoquera une erreur.

3. Utiliser la méthode Migrate pour mettre à niveau

NEAR propose une 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'); Auto { taglines : old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }

Appel de la méthode migrate lors du redé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 déployer avec succès un nouveau smart contract et de migrer les anciennes données.

![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)

Considérations de sécurité pour la mise à niveau des contrats

  1. La fonction de mise à niveau doit faire l'objet d'un contrôle d'accès, généralement elle ne peut être appelée que par le développeur ou le DAO.

  2. Il est conseillé de définir le propriétaire du contrat comme DAO, pour gérer ensemble par le biais de propositions et de votes.

  3. Ajouter #[init(ignore_state)] avant la fonction de migration pour s'assurer que l'état n'est pas chargé avant l'exécution.

  4. Supprimez la fonction de migration après la migration, assurez-vous qu'elle ne soit appelée qu'une seule fois.

  5. La nouvelle structure de données est initialisée lors de la migration.

Un mécanisme de mise à niveau raisonnable peut fournir flexibilité et maintenabilité aux contrats tout en garantissant la sécurité.

INIT-1.96%
Voir l'original
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.
  • Récompense
  • 5
  • Partager
Commentaire
0/400
DAOTruantvip
· Il y a 2h
C'est selon l'humeur si l'on doit migrer les données.
Voir l'originalRépondre0
0xSherlockvip
· 07-25 08:10
Regarder cela me donne mal à la tête, je ne peux plus étudier.
Voir l'originalRépondre0
MEVHunterLuckyvip
· 07-25 08:10
Honnêtement, il n'y a pas de code, alors comment apprendre ?
Voir l'originalRépondre0
blocksnarkvip
· 07-25 08:10
Le maître NEAR est venu enseigner.
Voir l'originalRépondre0
rugpull_survivorvip
· 07-25 08:00
Toujours entendre near stable ah
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)