Control de permisos en contratos inteligentes de Rust
Este artículo explorará el problema del control de permisos en los contratos inteligentes de Rust desde dos aspectos:
La visibilidad de los métodos del contrato
Control de acceso a las funciones privilegiadas
Visibilidad de las funciones de contratos
En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es crucial. Tomando como ejemplo el incidente de seguridad que ocurrió en el intercambio de Bancor Network en 2020, se expusieron los activos de los usuarios debido a que se configuró incorrectamente una función de transferencia clave como pública.
En los contratos inteligentes de Rust en NEAR, las visibilidades de las funciones son principalmente las siguientes:
pub fn: función pública, puede ser llamada desde fuera del contrato
fn: solo se puede llamar dentro del contrato
pub(crate) fn: restringido a la llamada interna en crate
Además, definir funciones en un bloque impl que no está modificado por #[near_bindgen] también permite establecerlas como funciones internas.
Para la función de callback, debe establecerse como pública, pero al mismo tiempo debe restringirse para que solo pueda ser llamada por el propio contrato. Se puede utilizar el macro #[private] para lograr esto.
Es importante tener en cuenta que, en Rust, todo es privado por defecto, excepto los elementos en pub Trait y pub Enum.
Control de acceso a funciones privilegiadas
Además de la visibilidad de las funciones, también es necesario establecer un mecanismo de control de acceso completo desde el nivel semántico. Similar al modificador onlyOwner en Solidity, podemos definir un trait similar en Rust:
El uso de tal rasgo puede lograr el control de acceso a funciones privilegiadas, asegurando que solo el propietario del contrato pueda llamar a estas funciones.
Basado en este principio, podemos implementar un control de acceso detallado de múltiples usuarios en la lista blanca o varios grupos de listas blancas mediante la personalización de traits más complejos.
Además, se pueden implementar métodos de control de acceso adicionales, como el control del momento de la llamada y mecanismos de múltiples firmas, para satisfacer las necesidades de seguridad en diferentes escenarios.
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
19 me gusta
Recompensa
19
6
Republicar
Compartir
Comentar
0/400
WalletManager
· 08-01 21:48
El control de permisos debe ser estricto.
Ver originalesResponder0
HashBrownies
· 08-01 05:29
El control de permisos es realmente increíble.
Ver originalesResponder0
GasFeeCrier
· 07-30 19:25
La configuración de permisos debe hacerse con precaución.
Ver originalesResponder0
TeaTimeTrader
· 07-30 19:21
El control de permisos es realmente difícil de manejar.
Control de acceso a contratos inteligentes en Rust: visibilidad de funciones y gestión de acceso privilegiado
Control de permisos en contratos inteligentes de Rust
Este artículo explorará el problema del control de permisos en los contratos inteligentes de Rust desde dos aspectos:
Visibilidad de las funciones de contratos
En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es crucial. Tomando como ejemplo el incidente de seguridad que ocurrió en el intercambio de Bancor Network en 2020, se expusieron los activos de los usuarios debido a que se configuró incorrectamente una función de transferencia clave como pública.
En los contratos inteligentes de Rust en NEAR, las visibilidades de las funciones son principalmente las siguientes:
Además, definir funciones en un bloque impl que no está modificado por #[near_bindgen] también permite establecerlas como funciones internas.
Para la función de callback, debe establecerse como pública, pero al mismo tiempo debe restringirse para que solo pueda ser llamada por el propio contrato. Se puede utilizar el macro #[private] para lograr esto.
Es importante tener en cuenta que, en Rust, todo es privado por defecto, excepto los elementos en pub Trait y pub Enum.
Control de acceso a funciones privilegiadas
Además de la visibilidad de las funciones, también es necesario establecer un mecanismo de control de acceso completo desde el nivel semántico. Similar al modificador onlyOwner en Solidity, podemos definir un trait similar en Rust:
óxido pub trait Propietario { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
El uso de tal rasgo puede lograr el control de acceso a funciones privilegiadas, asegurando que solo el propietario del contrato pueda llamar a estas funciones.
Basado en este principio, podemos implementar un control de acceso detallado de múltiples usuarios en la lista blanca o varios grupos de listas blancas mediante la personalización de traits más complejos.
Además, se pueden implementar métodos de control de acceso adicionales, como el control del momento de la llamada y mecanismos de múltiples firmas, para satisfacer las necesidades de seguridad en diferentes escenarios.