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 :
( 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:
Ajouter la méthode migrate dans le nouveau contrat :
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.
10 J'aime
Récompense
10
7
Partager
Commentaire
0/400
CryptoNomics
· 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
HodlBeliever
· Il y a 16h
Aucun coefficient de risque de contrat, même le plus bas, ne doit être parié.
Voir l'originalRépondre0
SnapshotLaborer
· 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_Whisperer
· 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-beba108d
· Il y a 16h
Tout le monde peut faire cette mise à niveau !
Voir l'originalRépondre0
MemeCurator
· 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
WalletDivorcer
· Il y a 16h
J'ai perdu beaucoup d'argent, même la mise à niveau ne peut pas me sauver.
Techniques de mise à niveau des smart contracts Rust : méthodes de mise à jour sécurisée des contrats NEAR
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:
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)(), } }
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
Mettre en œuvre un contrôle d'accès, permettant uniquement aux développeurs ou à la DAO de mettre à niveau les smart contracts.
Il est recommandé de définir le propriétaire du contrat comme DAO, qui sera géré collectivement 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.
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,>