Cet article explorera le problème du 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 privilégiées
Visibilité des fonctions de contrat
Dans les smart contracts Rust, le contrôle de la visibilité des fonctions est crucial. Prenons l'exemple de l'incident de sécurité survenu en 2020 sur la plateforme d'échange Bancor Network, où le fait de définir par erreur la fonction de transfert clé comme publique a mis en danger les actifs des utilisateurs.
Dans les smart contracts Rust de NEAR, la visibilité des fonctions se décline principalement en plusieurs types :
pub fn: fonction publique, pouvant être appelée depuis l'extérieur du contrat
fn: ne peut être appelé que de l'intérieur du contrat
pub(crate) fn: limite d'appel à l'intérieur de crate
De plus, définir une fonction dans un bloc impl qui n'est pas annoté par #[near_bindgen] peut également la rendre fonction interne.
Pour les fonctions de rappel, elles doivent être définies comme publiques mais doivent également être limitées à un appel uniquement par le contrat lui-même. Vous pouvez utiliser la macro #[private] pour réaliser cela.
Il est à noter que, par défaut, tout dans Rust est privé, à l'exception des éléments dans pub Trait et pub Enum.
Contrôle d'accès des fonctions privilégiées
En plus de la visibilité des fonctions, il est également nécessaire d'établir un mécanisme de contrôle d'accès complet sur le plan sémantique. De manière similaire au modificateur onlyOwner dans Solidity, nous pouvons définir un trait similaire en Rust:
L'utilisation de ce trait permet de contrôler l'accès aux fonctions privilégiées, garantissant que seuls les propriétaires du contrat peuvent appeler ces fonctions.
Sur la base de ce principe, nous pouvons réaliser un contrôle d'accès granulaire pour plusieurs utilisateurs sur liste blanche ou plusieurs groupes de listes blanches en personnalisant des traits plus complexes.
En plus de cela, il est également possible de mettre en œuvre des contrôles de moment d'appel, des mécanismes de signatures multiples et d'autres méthodes de contrôle d'accès pour répondre aux besoins de sécurité dans différents scénarios.
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.
19 J'aime
Récompense
19
6
Reposter
Partager
Commentaire
0/400
WalletManager
· 08-01 21:48
Le contrôle des accès doit être strict.
Voir l'originalRépondre0
HashBrownies
· 08-01 05:29
Le contrôle des droits est vraiment incroyable.
Voir l'originalRépondre0
GasFeeCrier
· 07-30 19:25
La configuration des autorisations d'appel doit être effectuée avec prudence.
Voir l'originalRépondre0
TeaTimeTrader
· 07-30 19:21
Le contrôle des permissions est vraiment difficile à gérer.
Contrôle d'accès des smart contracts Rust : visibilité des fonctions et gestion des accès privilégiés
Contrôle d'accès dans les smart contracts Rust
Cet article explorera le problème du contrôle d'accès dans les smart contracts Rust sous deux aspects :
Visibilité des fonctions de contrat
Dans les smart contracts Rust, le contrôle de la visibilité des fonctions est crucial. Prenons l'exemple de l'incident de sécurité survenu en 2020 sur la plateforme d'échange Bancor Network, où le fait de définir par erreur la fonction de transfert clé comme publique a mis en danger les actifs des utilisateurs.
Dans les smart contracts Rust de NEAR, la visibilité des fonctions se décline principalement en plusieurs types :
De plus, définir une fonction dans un bloc impl qui n'est pas annoté par #[near_bindgen] peut également la rendre fonction interne.
Pour les fonctions de rappel, elles doivent être définies comme publiques mais doivent également être limitées à un appel uniquement par le contrat lui-même. Vous pouvez utiliser la macro #[private] pour réaliser cela.
Il est à noter que, par défaut, tout dans Rust est privé, à l'exception des éléments dans pub Trait et pub Enum.
Contrôle d'accès des fonctions privilégiées
En plus de la visibilité des fonctions, il est également nécessaire d'établir un mécanisme de contrôle d'accès complet sur le plan sémantique. De manière similaire au modificateur onlyOwner dans Solidity, nous pouvons définir un trait similaire en Rust:
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); }
L'utilisation de ce trait permet de contrôler l'accès aux fonctions privilégiées, garantissant que seuls les propriétaires du contrat peuvent appeler ces fonctions.
Sur la base de ce principe, nous pouvons réaliser un contrôle d'accès granulaire pour plusieurs utilisateurs sur liste blanche ou plusieurs groupes de listes blanches en personnalisant des traits plus complexes.
En plus de cela, il est également possible de mettre en œuvre des contrôles de moment d'appel, des mécanismes de signatures multiples et d'autres méthodes de contrôle d'accès pour répondre aux besoins de sécurité dans différents scénarios.