Techniques de mise à niveau des smart contracts Rust : méthodes de mise à jour sécurisée des contrats NEAR

robot
Création du résumé en cours

Techniques de mise à niveau des smart contracts Rust

Les smart contracts, en tant que type de code de programme, sont inévitablement sujets à des défauts et des vulnérabilités. Même après de nombreux tests et audits, des problèmes de sécurité peuvent encore survenir. 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 et d'autres conséquences graves. Par conséquent, la mise à niveau des contrats est essentielle pour corriger les vulnérabilités et ajouter de nouvelles fonctionnalités. Cet article présentera les méthodes de mise à niveau des smart contracts Rust.

Méthodes courantes 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 :

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

impl Default pour StatusMessage { Self { Self { records: LookupMap::new(b'r'.to_vec)((, } } }

#[near_bindgen] impl StatusMessage { pub fn set_status)&mut self, message: String) { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); }

Option { return self.records.get(&account_id); } }

( la structure de données des contrats n'a pas été modifiée

Si vous n'ajoutez que de nouvelles fonctions sans modifier la structure des données, vous pouvez utiliser directement la commande near deploy pour redéployer le nouveau code. Les données existantes peuvent être lues normalement.

) La structure des données du contrat a été modifiée

Si la structure des données est modifiée, le redéploiement direct entraînera une incompatibilité entre l'ancienne et la nouvelle structure des données, rendant la lecture des données impossible. Dans ce cas, il est nécessaire d'utiliser la méthode Migrate pour effectuer la mise à niveau:

  1. Ajouter la méthode migrate dans le nouveau contrat :

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

  1. Appeler la méthode migrate lors du déploiement:

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

Cela permet de migrer les anciennes données vers la nouvelle structure de données.

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

  1. Mettre en œuvre un contrôle d'accès, permettant uniquement aux développeurs ou à la DAO de mettre à niveau les smart contracts.

  2. Il est recommandé de définir le propriétaire du contrat comme DAO, qui sera géré collectivement par des propositions et des votes.

  3. Ajoutez #[init(ignore_state(] avant la fonction migrate.

  4. Supprimez la fonction migrate après la migration, assurez-vous qu'elle n'est appelée qu'une seule fois.

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

Grâce à la méthode ci-dessus, il est possible de réaliser la mise à jour des smart contracts Rust de manière sécurisée et efficace.

![])https://img-cdn.gateio.im/webp-social/moments-af3fe22c1999da5db0e2853b8a271276.webp)</string,>

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
  • 7
  • Partager
Commentaire
0/400
CryptoNomicsvip
· Il y a 4h
*soupir* laissez-moi expliquer en utilisant des matrices de probabilité stochastiques pourquoi l'upgradabilité != la sécurité
Voir l'originalRépondre0
HodlBelievervip
· Il y a 16h
Aucun coefficient de risque de contrat, même le plus bas, ne doit être parié.
Voir l'originalRépondre0
SnapshotLaborervip
· Il y a 16h
Encore en train de faire des smart contracts, je jette un œil au solde du Portefeuille.
Voir l'originalRépondre0
MEV_Whisperervip
· Il y a 16h
La mise à niveau du contrat est ainsi, qu'est-ce que ça a de spécial ?
Voir l'originalRépondre0
GateUser-beba108dvip
· Il y a 16h
Tout le monde peut faire cette mise à niveau !
Voir l'originalRépondre0
MemeCuratorvip
· Il y a 16h
C'est trop proche, je n'ose pas écrire de contrat... J'ai peur d'être tondu.
Voir l'originalRépondre0
WalletDivorcervip
· Il y a 16h
J'ai perdu beaucoup d'argent, même la mise à niveau ne peut pas me sauver.
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)