Detalles sobre la visibilidad de funciones y el control de permisos en contratos inteligentes de Rust

robot
Generación de resúmenes en curso

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:

ó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:

  • 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.
  • Recompensa
  • Comentar
  • Compartir
Comentar
0/400
Sin comentarios
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)