Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato y control de permisos
Este artículo presentará el control de permisos en contratos inteligentes Rust desde dos aspectos:
Visibilidad de acceso/llamada a métodos de contratos
Control de acceso a funciones privilegiadas / División de responsabilidades
1. Visibilidad de las funciones de contratos inteligentes
Configurar adecuadamente la visibilidad de las funciones del contrato es crucial para proteger las partes clave. Tomando como ejemplo el incidente de seguridad de la bolsa Bancor Network en junio de 2020, debido a que se configuró erróneamente la función de transferencia clave como pública, lo que expuso los activos de los usuarios a riesgos.
En los contratos inteligentes de Rust, la visibilidad de las funciones también es importante. El macro #[near_bindgen] en NEAR SDK define los siguientes atributos de visibilidad:
pub fn: función pública, se puede llamar desde fuera del contrato
fn: solo se puede llamar dentro del contrato
pub(crate) fn: restringir la llamada dentro de crate
También se pueden definir métodos internos a través de bloques impl Contract que no están decorados con #[near_bindgen].
Para las funciones de callback, deben ser públicas pero solo permitir que el contrato las llame. Se puede implementar esta funcionalidad con el macro #[private].
Es importante notar que la visibilidad predeterminada en Rust es privada, pero los elementos dentro de traits y enums son una excepción.
2. Control de acceso a funciones privilegiadas
Además de la visibilidad de la función, también es necesario establecer un mecanismo completo de lista blanca de control de acceso. Al igual que el contrato Ownable de Solidity, ciertas funciones privilegiadas solo pueden ser llamadas por el owner.
En el contrato Rust, se puede implementar el siguiente trait Ownable:
Con base en esto, se puede implementar una lista blanca para el owner. También se pueden establecer listas blancas de múltiples usuarios o controles de acceso por grupos mediante la configuración de traits más complejos personalizados.
Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 me gusta
Recompensa
10
4
Compartir
Comentar
0/400
WhaleWatcher
· 07-13 07:29
Primero hablemos de Ownable.
Ver originalesResponder0
GateUser-e51e87c7
· 07-13 07:23
Con tener manos es suficiente, tan simple.
Ver originalesResponder0
DecentralizeMe
· 07-13 07:22
Lógica subyacente de Wu Wu
Ver originalesResponder0
ChainSpy
· 07-13 07:21
El control de acceso es tan complicado que es mejor hacerlo todo público.
Control de acceso a contratos inteligentes en Rust: visibilidad de funciones y gestión de acceso privilegiado
Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato y control de permisos
Este artículo presentará el control de permisos en contratos inteligentes Rust desde dos aspectos:
1. Visibilidad de las funciones de contratos inteligentes
Configurar adecuadamente la visibilidad de las funciones del contrato es crucial para proteger las partes clave. Tomando como ejemplo el incidente de seguridad de la bolsa Bancor Network en junio de 2020, debido a que se configuró erróneamente la función de transferencia clave como pública, lo que expuso los activos de los usuarios a riesgos.
En los contratos inteligentes de Rust, la visibilidad de las funciones también es importante. El macro #[near_bindgen] en NEAR SDK define los siguientes atributos de visibilidad:
También se pueden definir métodos internos a través de bloques impl Contract que no están decorados con #[near_bindgen].
Para las funciones de callback, deben ser públicas pero solo permitir que el contrato las llame. Se puede implementar esta funcionalidad con el macro #[private].
Es importante notar que la visibilidad predeterminada en Rust es privada, pero los elementos dentro de traits y enums son una excepción.
2. Control de acceso a funciones privilegiadas
Además de la visibilidad de la función, también es necesario establecer un mecanismo completo de lista blanca de control de acceso. Al igual que el contrato Ownable de Solidity, ciertas funciones privilegiadas solo pueden ser llamadas por el owner.
En el contrato Rust, se puede implementar el siguiente trait Ownable:
óxido pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Con base en esto, se puede implementar una lista blanca para el owner. También se pueden establecer listas blancas de múltiples usuarios o controles de acceso por grupos mediante la configuración de traits más complejos personalizados.