Guide de mise à niveau des smart contracts Rust : Méthodes de mise à jour de sécurité de 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 et des vulnérabilités. Même après de nombreux tests et audits, il peut encore y avoir des problèmes non découverts. Une fois qu'une vulnérabilité de contrat est exploitée par un attaquant, 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 cruciale, tant pour corriger les vulnérabilités que pour ajouter de nouvelles fonctionnalités. Cet article présentera les méthodes de mise à niveau des contrats Rust sur la plateforme NEAR.

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 des 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 directement utiliser la commande near deploy pour redéployer le nouveau code. Par exemple, nous ajoutons une nouvelle fonction à la base du contrat original :

rouille #[near_bindgen] impl StatusMessage { Option { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); return self.records.get(&account_id); } }

Après compilation, utilisez near deploy pour redéployer. Les données dans le contrat d'origine 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 un échec de la désérialisation de l'état. Par exemple, nous modifions la structure du contrat comme suit :

rouille #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct StatusMessage { taglines: LookupMap<string, string="">, bios: LookupMap<string, string="">, }

Dans ce cas, il est nécessaire d'utiliser la méthode Migrate pour effectuer la mise à niveau. Ajoutez la méthode migrate dans le nouveau contrat :

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

Ensuite, appelez 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

Ainsi, il est possible de mettre à niveau avec succès les contrats intelligents 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. Contrôle des autorisations : la fonction de mise à jour doit être définie comme une fonction only owner, pour garantir qu'elle ne peut être appelée que par le propriétaire.

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

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

  4. Après la migration, supprimez la fonction de migration pour garantir qu'elle ne soit appelée qu'une seule fois.

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

La mise à niveau des contrats est un processus complexe qui nécessite une approche prudente. Grâce à une conception appropriée et à des tests rigoureux, il est possible de réaliser une mise à niveau sécurisée et fiable des contrats.

</string,></string,>

NEAR-0.56%
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
  • 2
  • Partager
Commentaire
0/400
WalletDetectivevip
· Il y a 21h
Ça a l'air assez hardcore.
Voir l'originalRépondre0
MetaverseVagrantvip
· Il y a 21h
Encore en train de s'enrouler dans des smart contracts.
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)