Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato en la precisión de cálculo
Este artículo presentará el control de permisos en contratos inteligentes Rust desde dos perspectivas:
Visibilidad de acceso/llamada a métodos de contratos
Control de acceso de funciones privilegiadas / División de responsabilidades
1. Visibilidad de las funciones del contrato
El control de la visibilidad de las funciones del contrato es importante para proteger las partes críticas de operaciones erróneas. Tomando como ejemplo el incidente de seguridad de Bancor Network el 18 de junio de 2020, se puso en riesgo el patrimonio de los usuarios por haber configurado erróneamente una función de transferencia clave como pública, lo que puso en riesgo 590,000 dólares en activos.
En los contratos inteligentes de Rust, la visibilidad de la función principal es:
pub fn: función pública, puede ser llamada desde fuera del contrato
fn: privado por defecto, solo se puede llamar dentro del contrato
pub(crate) fn: restringir la llamada dentro de crate
Otra forma de configurar el método internal es definiendo un bloque de código impl Contract independiente, sin añadir la anotación #[near_bindgen].
Para las funciones de retorno, deben ser públicas pero se debe limitar que solo puedan ser llamadas por el propio contrato. Se puede implementar utilizando el macro #[private].
Rust por defecto todo es privado, excepto los elementos en pub trait y pub enum.
2. Control de acceso a las funciones privilegiadas
Además de la visibilidad de funciones, también se debe establecer un mecanismo completo de lista blanca de control de acceso desde una perspectiva semántica. Similar al contrato Ownable de Solidity, ciertas funciones privilegiadas solo pueden ser llamadas por el owner.
En el contrato de Rust, se puede implementar un Trait personalizado:
Esto permite implementar el control de acceso a funciones privilegiadas. Con base en esto, también se pueden establecer listas blancas de múltiples usuarios o varios grupos de listas blancas.
3. Más métodos de control de acceso
Otros métodos de control de acceso incluyen:
Control del momento de llamada de contratos inteligentes
Mecanismo de llamada de múltiples firmas para funciones de contratos
Implementación de la gobernanza DAO
Estos contenidos se describirán en detalle en artículos posteriores.
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.
Detalles sobre la visibilidad de funciones y el control de permisos en contratos inteligentes de Rust
Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato en la precisión de cálculo
Este artículo presentará el control de permisos en contratos inteligentes Rust desde dos perspectivas:
1. Visibilidad de las funciones del contrato
El control de la visibilidad de las funciones del contrato es importante para proteger las partes críticas de operaciones erróneas. Tomando como ejemplo el incidente de seguridad de Bancor Network el 18 de junio de 2020, se puso en riesgo el patrimonio de los usuarios por haber configurado erróneamente una función de transferencia clave como pública, lo que puso en riesgo 590,000 dólares en activos.
En los contratos inteligentes de Rust, la visibilidad de la función principal es:
Otra forma de configurar el método internal es definiendo un bloque de código impl Contract independiente, sin añadir la anotación #[near_bindgen].
Para las funciones de retorno, deben ser públicas pero se debe limitar que solo puedan ser llamadas por el propio contrato. Se puede implementar utilizando el macro #[private].
Rust por defecto todo es privado, excepto los elementos en pub trait y pub enum.
2. Control de acceso a las funciones privilegiadas
Además de la visibilidad de funciones, también se debe establecer un mecanismo completo de lista blanca de control de acceso desde una perspectiva semántica. Similar al contrato Ownable de Solidity, ciertas funciones privilegiadas solo pueden ser llamadas por el owner.
En el contrato de Rust, se puede implementar un Trait personalizado:
ó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); }
Esto permite implementar el control de acceso a funciones privilegiadas. Con base en esto, también se pueden establecer listas blancas de múltiples usuarios o varios grupos de listas blancas.
3. Más métodos de control de acceso
Otros métodos de control de acceso incluyen:
Estos contenidos se describirán en detalle en artículos posteriores.