Diarios de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato en cuanto a la precisión de los cálculos
Este artículo abordará el control de permisos en los contratos inteligentes Rust desde dos aspectos:
Visibilidad de acceso/llamada a los métodos de contratos inteligentes
Control de acceso / división de responsabilidades de funciones privilegiadas
1. Visibilidad de las funciones del contrato
Establecer correctamente la visibilidad de las funciones del contrato es crucial para proteger la seguridad del contrato. Tomando como ejemplo el incidente de seguridad que ocurrió en el intercambio Bancor Network el 18 de junio de 2020, al configurar incorrectamente la función de transferencia clave como pública, se expusieron los activos de los usuarios a un riesgo grave.
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, cualquier persona puede llamar desde fuera del contrato
fn: privado por defecto, solo se puede llamar desde el interior del contrato
pub(crate) fn: restringir llamadas dentro de crate
Además, se pueden implementar métodos internos definiendo bloques impl que no lleven #[near_bindgen].
Para las funciones de retorno, deben ser públicas pero requieren control de acceso adicional:
óxido
#[private]
pub fn resolve_transfer(&mut self) {
env::log_str("Este es un callback");
}
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. Se puede personalizar Trait para lograr un efecto similar al modificador onlyOwner en Solidity:
De esta manera, se puede limitar que solo el owner pueda llamar a ciertas funciones privilegiadas. Con base en esto, 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.
En los contratos inteligentes de Rust también hay otros métodos de control de acceso, como el control del momento de la llamada y el mecanismo de múltiples firmas, que se presentarán 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.
17 me gusta
Recompensa
17
2
Compartir
Comentar
0/400
DAOdreamer
· 07-23 12:21
La revisión de la Lista de permitidos debe ser estricta.
Ver originalesResponder0
SchroedingerMiner
· 07-23 12:21
La lista de permitidos es una espada de doble filo
Seguridad de contratos inteligentes en Rust: Prácticas de visibilidad de funciones y control de acceso
Diarios de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato en cuanto a la precisión de los cálculos
Este artículo abordará el control de permisos en los contratos inteligentes Rust desde dos aspectos:
1. Visibilidad de las funciones del contrato
Establecer correctamente la visibilidad de las funciones del contrato es crucial para proteger la seguridad del contrato. Tomando como ejemplo el incidente de seguridad que ocurrió en el intercambio Bancor Network el 18 de junio de 2020, al configurar incorrectamente la función de transferencia clave como pública, se expusieron los activos de los usuarios a un riesgo grave.
En los contratos inteligentes de Rust, la visibilidad de las funciones se clasifica principalmente en las siguientes categorías:
Además, se pueden implementar métodos internos definiendo bloques impl que no lleven #[near_bindgen].
Para las funciones de retorno, deben ser públicas pero requieren control de acceso adicional:
óxido #[private] pub fn resolve_transfer(&mut self) { env::log_str("Este es un callback"); }
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. Se puede personalizar Trait para lograr un efecto similar al modificador onlyOwner en Solidity:
ó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 limitar que solo el owner pueda llamar a ciertas funciones privilegiadas. Con base en esto, 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.
En los contratos inteligentes de Rust también hay otros métodos de control de acceso, como el control del momento de la llamada y el mecanismo de múltiples firmas, que se presentarán en artículos posteriores.