Meilleures pratiques pour la mise à niveau des smart contracts Rust : apprendre à partir de l'exemple de contrat NEAR

Guide de mise à niveau des smart contracts Rust

Les smart contracts, en tant que type de programme, ne peuvent échapper à des défauts. Même après de nombreux tests et audits, il peut encore y avoir des vulnérabilités. Une fois 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, principalement 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.

Méthodes de mise à niveau des contrats NEAR

Prenons l'exemple du projet StatusMessage pour présenter 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 vous ne modifiez que la logique du contrat, sans changer la structure des données, vous pouvez déployer directement le nouveau code avec near deploy :

bash near déployer
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

Les données de contrat existantes peuvent être lues normalement.

2. Modification de la structure des données du contrat

Si la structure de données du contrat a été modifiée, le redéploiement direct entraînera un échec de la désérialisation de l'état. Dans ce cas, il est nécessaire d'utiliser la méthode migrate pour procéder à la mise à niveau:

rouille #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }

Appel de la méthode migrate lors du déploiement :

bash
near déployer \ --wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet

Cela permet de migrer l'ancien état vers le nouveau contrat.

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

Conseils de sécurité pour la mise à niveau des contrats

  1. La fonction de mise à niveau ajoute un contrôle d'accès, n'autorisant que le propriétaire à l'appeler.
  2. Définir le propriétaire comme DAO, gérer par des propositions et des votes.
  3. Ajouter la fonction de migration #[init(ignore_state)]
  4. Supprimez la fonction de migration après la migration terminée.
  5. La nouvelle structure de données est initialisée lors de la migration.

Une mise à niveau raisonnable peut permettre aux contrats de maintenir leur sécurité et leur évolutivité, ce qui est un élément important du développement des smart contracts.

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
  • 3
  • Partager
Commentaire
0/400
PumpBeforeRugvip
· Il y a 16h
Si vous ne pouvez pas prévenir les failles de base, à quoi bon jouer à la course à nu ?
Voir l'originalRépondre0
DegenWhisperervip
· Il y a 16h
Pas étonnant que ce soit rust, incroyable
Voir l'originalRépondre0
WalletWhisperervip
· Il y a 17h
Un nouveau projet arrive, cela a l'air intéressant.
Voir l'originalRépondre0
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)