Journal de développement de contrats intelligents en Rust (7) Précision des calculs pour la sécurité des contrats
Cet article présentera le contrôle d'accès dans les smart contracts Rust sous deux aspects :
La visibilité des méthodes de contrat
Contrôle d'accès des fonctions de privilège
1. Visibilité des fonctions de contrat
La visibilité des fonctions de contrat détermine qui peut appeler ces fonctions. Bien régler la visibilité est essentiel pour protéger les parties clés du contrat.
Dans les smart contracts Rust, la visibilité des fonctions se décline principalement en plusieurs types :
pub fn: fonction publique, peut être appelée depuis l'extérieur du contrat
fn: fonction interne, ne peut être appelée que dans le contrat
pub(crate) fn: restriction d'appel à l'intérieur de crate
De plus, il est possible de le définir comme méthode interne en définissant des méthodes dans un bloc de code impl Contract séparé :
Pour les fonctions de rappel, il est nécessaire de les définir comme pub et d'utiliser le macro #[private] pour limiter les appels uniquement à partir du contrat lui-même:
En plus de définir la visibilité des fonctions, il est également nécessaire d'établir un mécanisme de liste blanche de contrôle d'accès pour restreindre l'appel des fonctions privilégiées.
Il est possible de réaliser un trait Ownable similaire à ce qui suit :
Ensuite, dans la fonction de privilège, appelez assert_owner() pour vérifier l'identité de l'appelant :
rouille
impl Contrat {
pub fn privileged_function(&mut self) {
self.assert_owner();
// logique de fonction privilège
}
}
Cela permet de réaliser un contrôle de permission de base pour le propriétaire. Il peut être étendu à des listes blanches multi-utilisateurs ou à plusieurs groupes de listes blanches pour un contrôle d'accès plus précis.
En plus de cela, il convient également de considérer des solutions de contrôle d'accès plus complexes telles que le contrôle de moment d'appel et les mécanismes de multi-signature. Il est essentiel de définir correctement la visibilité des fonctions de contrat et le contrôle d'accès pour garantir la sécurité du 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.
23 J'aime
Récompense
23
5
Reposter
Partager
Commentaire
0/400
CryingOldWallet
· 07-28 07:37
Enfin, je vois quelque chose en rapport avec rust, codez, codez.
Voir l'originalRépondre0
PumpingCroissant
· 07-28 03:49
Encore une fois, je ne peux pas apprendre Rust.
Voir l'originalRépondre0
CryptoGoldmine
· 07-25 08:04
La profondeur technique est bonne, mais le ROI réel dépend de l'optimisation de la gestion du Pool de minage.
Voir l'originalRépondre0
SchrodingerAirdrop
· 07-25 08:01
Ce tutoriel pour débutants me donne mal à la tête, Rust est toujours en train de faire des trucs compliqués.
Voir l'originalRépondre0
GateUser-2fce706c
· 07-25 08:01
L'évolution est la seule vérité dure, la vague de chaînes Rust est en plein essor ! Restez prêts à vous positionner !
Pratiques de sécurité des smart contracts en Rust : contrôle d'accès et gestion des permissions
Journal de développement de contrats intelligents en Rust (7) Précision des calculs pour la sécurité des contrats
Cet article présentera le contrôle d'accès dans les smart contracts Rust sous deux aspects :
1. Visibilité des fonctions de contrat
La visibilité des fonctions de contrat détermine qui peut appeler ces fonctions. Bien régler la visibilité est essentiel pour protéger les parties clés du contrat.
Dans les smart contracts Rust, la visibilité des fonctions se décline principalement en plusieurs types :
De plus, il est possible de le définir comme méthode interne en définissant des méthodes dans un bloc de code impl Contract séparé :
rouille #[near_bindgen] impl Contrat { pub fn increment(&mut self) { self.internal_increment(); } }
impl Contrat { pub fn internal_increment(&mut self) { self.counter += 1; } }
Pour les fonctions de rappel, il est nécessaire de les définir comme pub et d'utiliser le macro #[private] pour limiter les appels uniquement à partir du contrat lui-même:
rouille #[near_bindgen] impl Contrat { #[private] pub fn resolve_transfer(&mut self) { // logique de rappel } }
2. Contrôle d'accès des fonctions privilégiées
En plus de définir la visibilité des fonctions, il est également nécessaire d'établir un mécanisme de liste blanche de contrôle d'accès pour restreindre l'appel des fonctions privilégiées.
Il est possible de réaliser un trait Ownable similaire à ce qui suit :
rouille pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Ensuite, dans la fonction de privilège, appelez assert_owner() pour vérifier l'identité de l'appelant :
rouille impl Contrat { pub fn privileged_function(&mut self) { self.assert_owner(); // logique de fonction privilège } }
Cela permet de réaliser un contrôle de permission de base pour le propriétaire. Il peut être étendu à des listes blanches multi-utilisateurs ou à plusieurs groupes de listes blanches pour un contrôle d'accès plus précis.
En plus de cela, il convient également de considérer des solutions de contrôle d'accès plus complexes telles que le contrôle de moment d'appel et les mécanismes de multi-signature. Il est essentiel de définir correctement la visibilité des fonctions de contrat et le contrôle d'accès pour garantir la sécurité du contrat.