Diario de desarrollo de contratos inteligentes en Rust (7) Control de permisos en la seguridad de contratos
Este artículo presentará el control de permisos en los contratos inteligentes Rust desde dos perspectivas:
Visibilidad de acceso/llamada a métodos de contratos
Control de acceso de funciones privilegiadas / Distribución de responsabilidades
1. Visibilidad de las funciones del contrato
La configuración de la visibilidad de las funciones del contrato es crucial para proteger las partes clave contra accesos o manipulaciones accidentales. Tomemos como ejemplo el incidente de seguridad de la plataforma Bancor Network en junio de 2020, donde la función de transferencia crítica se configuró erróneamente como public, lo que expuso los activos de los usuarios a riesgos.
En los contratos inteligentes de Rust, la visibilidad de las funciones se clasifica principalmente en las siguientes categorías:
pub fn: función pública, se puede llamar desde fuera del contrato
fn: solo puede ser llamado dentro del contrato
pub(crate) fn: restringido a llamadas internas en crate
Otra forma de configurar el método internal es definiendo un bloque de código impl Contract independiente y sin usar el modificador #[near_bindgen].
Para la función de retorno, debe ser pública pero asegurarse de que solo pueda ser llamada por el propio contrato. Se puede utilizar el macro #[private] para implementar esta funcionalidad.
Es importante tener en cuenta que en Rust, todo es privado por defecto, excepto los elementos en pub Trait y pub Enum.
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 el nivel semántico. Similar a la función "onlyOwner" en Solidity, ciertas funciones clave solo pueden ser llamadas por el propietario del contrato.
En un contrato de Rust, se puede implementar un Trait personalizado similar:
De esta manera, se puede implementar el control de acceso a funciones privilegiadas, asegurando que solo el propietario del contrato pueda invocarlas. Basado en este principio, también se pueden establecer listas blancas de múltiples usuarios más complejas o múltiples listas blancas, logrando un control de acceso agrupado más detallado.
3. Otras métodos de control de acceso
Hay algunos otros métodos de control de acceso, como:
Control del momento de la llamada al contrato
Mecanismo de llamada múltiple de funciones de contratos inteligentes
Gobernanza(DAO) de la implementación
Estos contenidos se presentarán en el diario de desarrollo de contratos inteligentes posterior.
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.
17 me gusta
Recompensa
17
5
Republicar
Compartir
Comentar
0/400
TheMemefather
· 08-18 14:36
Ah, este evento de Bancor es demasiado absurdo.
Ver originalesResponder0
PancakeFlippa
· 08-18 11:42
¿Has jugado con Bancor? Arruinado...
Ver originalesResponder0
ReverseFOMOguy
· 08-16 02:20
realmente no puedo aguantar el bug de bancor
Ver originalesResponder0
BoredApeResistance
· 08-16 02:05
Ah, esto no es el bug con el que bancor tuvo problemas en el pasado.
Ver originalesResponder0
rekt_but_not_broke
· 08-16 02:01
El caso de ataque es bastante nuevo, me hace sentir un sudor frío.
Camino hacia la seguridad de los contratos inteligentes en Rust: explicación detallada del control de permisos y la visibilidad de funciones
Diario de desarrollo de contratos inteligentes en Rust (7) Control de permisos en la seguridad de contratos
Este artículo presentará el control de permisos en los contratos inteligentes Rust desde dos perspectivas:
1. Visibilidad de las funciones del contrato
La configuración de la visibilidad de las funciones del contrato es crucial para proteger las partes clave contra accesos o manipulaciones accidentales. Tomemos como ejemplo el incidente de seguridad de la plataforma Bancor Network en junio de 2020, donde la función de transferencia crítica se configuró erróneamente como public, lo que expuso los activos de los usuarios a riesgos.
En los contratos inteligentes de Rust, la visibilidad de las funciones se clasifica principalmente en las siguientes categorías:
Otra forma de configurar el método internal es definiendo un bloque de código impl Contract independiente y sin usar el modificador #[near_bindgen].
Para la función de retorno, debe ser pública pero asegurarse de que solo pueda ser llamada por el propio contrato. Se puede utilizar el macro #[private] para implementar esta funcionalidad.
Es importante tener en cuenta que en Rust, todo es privado por defecto, excepto los elementos en pub Trait y pub Enum.
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 el nivel semántico. Similar a la función "onlyOwner" en Solidity, ciertas funciones clave solo pueden ser llamadas por el propietario del contrato.
En un contrato de Rust, se puede implementar un Trait personalizado similar:
ó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); }
De esta manera, se puede implementar el control de acceso a funciones privilegiadas, asegurando que solo el propietario del contrato pueda invocarlas. Basado en este principio, también se pueden establecer listas blancas de múltiples usuarios más complejas o múltiples listas blancas, logrando un control de acceso agrupado más detallado.
3. Otras métodos de control de acceso
Hay algunos otros métodos de control de acceso, como:
Estos contenidos se presentarán en el diario de desarrollo de contratos inteligentes posterior.