Control de permisos en contratos inteligentes Rust
Este artículo presentará el control de permisos en 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 funciones de contratos
En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es muy importante. Tomando como ejemplo el incidente de seguridad de la exchange Bancor Network en junio de 2020, debido a que se configuró erróneamente una función de transferencia clave como pública, los activos de los usuarios se vieron en riesgo.
En los contratos inteligentes de Rust, hay las siguientes visibilidades de función:
pub fn: función pública, se puede llamar desde fuera del contrato
fn: solo puede ser llamado internamente en el contrato
pub(crate) fn: sólo se puede llamar desde dentro de crate
También se pueden implementar funciones internas definiendo métodos en bloques impl no decorados con #[near_bindgen].
Para la función de retorno, debe establecerse como pública, pero al mismo tiempo, debe asegurarse de que solo pueda ser llamada por el propio contrato. Se puede usar el macro #[private] para lograr esto.
Es importante tener en cuenta que, en Rust, todo es privado por defecto, lo cual es diferente al public por defecto de algunas versiones antiguas de Solidity.
2. Control de acceso a funciones privilegiadas
Además de la visibilidad de las funciones, también es necesario establecer un mecanismo completo de lista blanca de control de acceso desde un nivel semántico.
Similar al modificador onlyOwner en Solidity, podemos implementar un Trait personalizado en Rust:
De esta manera, solo el propietario puede llamar a ciertas funciones privilegiadas.
Basado en este principio, se puede establecer una lista blanca más compleja para implementar un control de acceso por grupos más específico.
Más métodos de control de acceso, como el control del momento de la llamada y el mecanismo de múltiples firmas, se presentarán en artículos posteriores.
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.
10 me gusta
Recompensa
10
5
Republicar
Compartir
Comentar
0/400
Rugman_Walking
· 08-09 05:50
Otra vez el viejo pozo de Bancor, casi pierdo hasta los pantalones.
Ver originalesResponder0
TokenToaster
· 08-07 12:36
bancor es realmente un ejemplo de discapacidad intelectual
Ver originalesResponder0
MevTears
· 08-06 06:28
He visto ese de Bancor, realmente es malo.
Ver originalesResponder0
OnlyOnMainnet
· 08-06 06:26
Tsk tsk, lo de Bancor aún me da miedo.
Ver originalesResponder0
0xLuckbox
· 08-06 06:18
¿Por qué siempre hay alguien que confunde la configuración de permisos?
Control de acceso en contratos inteligentes de Rust: visibilidad de funciones del contrato y acceso privilegiado
Control de permisos en contratos inteligentes Rust
Este artículo presentará el control de permisos en contratos inteligentes de Rust desde dos aspectos:
1. Visibilidad de funciones de contratos
En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es muy importante. Tomando como ejemplo el incidente de seguridad de la exchange Bancor Network en junio de 2020, debido a que se configuró erróneamente una función de transferencia clave como pública, los activos de los usuarios se vieron en riesgo.
En los contratos inteligentes de Rust, hay las siguientes visibilidades de función:
También se pueden implementar funciones internas definiendo métodos en bloques impl no decorados con #[near_bindgen].
Para la función de retorno, debe establecerse como pública, pero al mismo tiempo, debe asegurarse de que solo pueda ser llamada por el propio contrato. Se puede usar el macro #[private] para lograr esto.
Es importante tener en cuenta que, en Rust, todo es privado por defecto, lo cual es diferente al public por defecto de algunas versiones antiguas de Solidity.
2. Control de acceso a funciones privilegiadas
Además de la visibilidad de las funciones, también es necesario establecer un mecanismo completo de lista blanca de control de acceso desde un nivel semántico.
Similar al modificador onlyOwner en Solidity, podemos implementar un Trait personalizado en Rust:
óxido pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } fn get_owner(&self) -> AccountId; fn set_owner(&mut self, owner: AccountId); }
De esta manera, solo el propietario puede llamar a ciertas funciones privilegiadas.
Basado en este principio, se puede establecer una lista blanca más compleja para implementar un control de acceso por grupos más específico.
Más métodos de control de acceso, como el control del momento de la llamada y el mecanismo de múltiples firmas, se presentarán en artículos posteriores.