Les smart contracts, en tant que type de programme, peuvent inévitablement avoir des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore exister. Si elles sont exploitées par des attaquants, cela peut entraîner une perte d'actifs pour les utilisateurs, avec des conséquences graves. La correction des vulnérabilités nécessite souvent une mise à niveau du contrat. En outre, l'ajout de nouvelles fonctionnalités nécessite également une mise à niveau du contrat. Par conséquent, la capacité de mise à niveau des contrats est très nécessaire. 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 des données du contrat n'a pas été modifiée
Si vous modifiez uniquement la logique du contrat sans toucher à la structure des données, vous pouvez utiliser directement la commande near deploy pour redéployer le nouveau code. Par exemple, ajouter une nouvelle fonction :
Considérations de sécurité pour la mise à niveau des contrats
Contrôle des autorisations : la fonction de mise à niveau doit être une fonction only owner, afin de garantir qu'elle ne peut être appelée que par le propriétaire.
Il est recommandé de définir le propriétaire du contrat comme DAO, afin de gérer collectivement par le biais de propositions et de votes.
Ajoutez #[init)ignore_state)] avant la fonction de migration pour s'assurer que l'état n'est pas chargé avant l'exécution.
Supprimez la fonction de migration 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.
En suivant les principes ci-dessus, il est possible de mettre à niveau et de maintenir les smart contracts en toute sécurité.
</string,></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.
8 J'aime
Récompense
8
5
Reposter
Partager
Commentaire
0/400
GweiWatcher
· Il y a 23h
Le joueur de contrat a rugi: C'est à toi de décider de monter ou non!
Voir l'originalRépondre0
ContractHunter
· Il y a 23h
Ah ah ah, je suis encore tombé dans le piège de la mise à niveau de Rust que je connais bien.
Voir l'originalRépondre0
NFTRegretter
· Il y a 23h
Mince, il faut encore mettre à jour, ça m'énerve.
Voir l'originalRépondre0
TokenVelocity
· Il y a 23h
Il y a tellement de vulnérabilités, qui oserait y toucher ?
Voir l'originalRépondre0
DuskSurfer
· Il y a 23h
Des vulnérabilités dans les contrats se produisent tous les jours, cela rend vraiment énervé.
Guide de mise à niveau des smart contracts Rust : mises à jour de sécurité et migration des données des contrats NEAR
Guide de mise à niveau des smart contracts Rust
Les smart contracts, en tant que type de programme, peuvent inévitablement avoir des défauts. Même après de nombreux tests et audits, des vulnérabilités peuvent encore exister. Si elles sont exploitées par des attaquants, cela peut entraîner une perte d'actifs pour les utilisateurs, avec des conséquences graves. La correction des vulnérabilités nécessite souvent une mise à niveau du contrat. En outre, l'ajout de nouvelles fonctionnalités nécessite également une mise à niveau du contrat. Par conséquent, la capacité de mise à niveau des contrats est très nécessaire. 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 des données du contrat n'a pas été modifiée
Si vous modifiez uniquement la logique du contrat sans toucher à la structure des données, vous pouvez utiliser directement la commande near deploy pour redéployer le nouveau code. Par exemple, ajouter une nouvelle fonction :
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 redéploiement, les données de l'ancien contrat peuvent toujours être lues avec succès.
( 2. La structure des données de contrat a été modifiée
Si la structure de données d'origine a été modifiée, par exemple :
rouille #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct StatusMessage { taglines: LookupMap<string, string="">, bios: LookupMap<string, string="">, }
Le redéploiement direct entraînera une erreur de désérialisation de l'état du contrat.
( 3. Utiliser la méthode Migrate pour mettre à niveau
NEAR propose la méthode Migrate pour aider à la mise à niveau des contrats. 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)(), } }
Appel de 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
Cela permettra de mettre à niveau le contrat avec succès et de migrer les anciennes données.
ignore_state)] avant la fonction de migration pour s'assurer que l'état n'est pas chargé avant l'exécution.
Supprimez la fonction de migration 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.
En suivant les principes ci-dessus, il est possible de mettre à niveau et de maintenir les smart contracts en toute sécurité.