Diario de desarrollo de contratos inteligentes en Rust (7) Control de acceso en la seguridad de contratos
Este artículo presentará el control de permisos en los contratos inteligentes de Rust desde dos aspectos:
La visibilidad de los métodos de contratos inteligentes
Control de acceso a funciones privilegiadas
1. Visibilidad de las funciones de contrato
Configurar correctamente la visibilidad de las funciones del contrato es crucial para proteger la seguridad del contrato. Tomando como ejemplo el incidente de junio de 2020 en el intercambio Bancor Network, la configuración incorrecta de la función de transferencia clave como public puso en riesgo los activos de los usuarios.
En los contratos inteligentes de Rust, hay varios tipos principales de visibilidad de funciones:
pub fn: función pública, se puede llamar desde fuera del contrato
fn: función interna predeterminada, solo se puede llamar dentro del contrato
pub(crate) fn: Restringe las llamadas desde el interior de la caja
Además, los métodos definidos en bloques impl que no están decorados con #[near_bindgen] son internos.
Para las funciones de retorno, se deben establecer como públicas, pero al mismo tiempo se debe realizar una verificación del llamador, se puede usar el macro #[private] para implementarlo.
Vale la pena señalar que todo en Rust es privado de forma predeterminada, excepto los elementos en pub trait y pub enum.
!
2. Control de acceso a funciones privilegiadas
Además de establecer la visibilidad de la función, también debe establecer un mecanismo de lista blanca de control de acceso. De forma similar al modificador onlyOwner en Solidity, puedes definir funciones privilegiadas a las que solo el propietario puede llamar.
En Rust, esto se puede lograr con rasgos personalizados:
Esto permite un control básico de los permisos del propietario. Se puede ampliar aún más a una lista blanca multiusuario o una lista blanca multigrupo para un control de acceso más granular.
!
!
!
Ver originales
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.
15 me gusta
Recompensa
15
5
Compartir
Comentar
0/400
NFT_Therapy
· 07-17 01:06
¡Es necesario tener control de permisos! De lo contrario, el contrato podría ser robado y eso sería el fin.
Ver originalesResponder0
PonziDetector
· 07-17 01:05
Rust yyds el más duro
Ver originalesResponder0
MetaMuskRat
· 07-17 01:02
Otra gestión de permisos, me voy, me voy.
Ver originalesResponder0
ser_we_are_early
· 07-17 00:46
Simple y directo, solo hay que añadir un control de permisos.
Ver originalesResponder0
MemeEchoer
· 07-17 00:40
Mirar me hace sentir cansado. ¿Alguien realmente lo ha aprendido?
Seguridad de contratos inteligentes en Rust: explicación detallada del control de acceso y la visibilidad de funciones
Diario de desarrollo de contratos inteligentes en Rust (7) Control de acceso en la seguridad de contratos
Este artículo presentará el control de permisos en los contratos inteligentes de Rust desde dos aspectos:
1. Visibilidad de las funciones de contrato
Configurar correctamente la visibilidad de las funciones del contrato es crucial para proteger la seguridad del contrato. Tomando como ejemplo el incidente de junio de 2020 en el intercambio Bancor Network, la configuración incorrecta de la función de transferencia clave como public puso en riesgo los activos de los usuarios.
En los contratos inteligentes de Rust, hay varios tipos principales de visibilidad de funciones:
Además, los métodos definidos en bloques impl que no están decorados con #[near_bindgen] son internos.
Para las funciones de retorno, se deben establecer como públicas, pero al mismo tiempo se debe realizar una verificación del llamador, se puede usar el macro #[private] para implementarlo.
Vale la pena señalar que todo en Rust es privado de forma predeterminada, excepto los elementos en pub trait y pub enum.
!
2. Control de acceso a funciones privilegiadas
Además de establecer la visibilidad de la función, también debe establecer un mecanismo de lista blanca de control de acceso. De forma similar al modificador onlyOwner en Solidity, puedes definir funciones privilegiadas a las que solo el propietario puede llamar.
En Rust, esto se puede lograr con rasgos personalizados:
óxido pub trait Ownable { fn assert_owner(\u0026self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, propietario: AccountId); }
Esto permite un control básico de los permisos del propietario. Se puede ampliar aún más a una lista blanca multiusuario o una lista blanca multigrupo para un control de acceso más granular.
!
!
!