Prácticas de seguridad en contratos inteligentes Rust: explicación detallada de la visibilidad de funciones y el control de permisos

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 los contratos inteligentes Rust desde dos aspectos:

  • Visibilidad de acceso/llamada de métodos de contratos inteligentes
  • Control de acceso de funciones privilegiadas / División de responsabilidades

1. Visibilidad de funciones de contratos

Configurar la visibilidad de las funciones del contrato puede controlar los permisos de llamada de las funciones, protegiendo las partes críticas de accesos no autorizados. Tomando como ejemplo el intercambio Bancor Network, en junio de 2020 ocurrió un incidente de seguridad de activos debido a una configuración incorrecta de la visibilidad de funciones clave.

En los contratos inteligentes de Rust, la visibilidad de las funciones se controla de la siguiente manera:

  • pub fn: función pública, se puede llamar desde fuera del contrato
  • fn: función interna, solo se puede llamar dentro del contrato
  • pub(crate) fn: restringido a llamadas internas en crate

Otra forma de configurar métodos internos es definir bloques de código impl Contract independientes, sin utilizar el modificador #[near_bindgen].

La función de callback debe ser pública, pero debe asegurarse de que solo pueda ser llamada por el contrato mismo. Se puede implementar usando el macro #[private].

Rust por defecto hace que todo sea privado, pero los elementos secundarios en trait y enum son públicos por defecto.

2. Control de acceso de funciones privilegiadas

Además de establecer la visibilidad de las funciones, también es necesario establecer un mecanismo de lista blanca de control de acceso. Similar al modificador onlyOwner en Solidity, se pueden definir funciones privilegiadas que solo el propietario puede llamar.

En Rust se puede implementar un trait similar a Ownable:

óxido pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(\u0026mut self, owner: AccountId); }

Esto permite implementar un control de acceso a funciones privilegiadas. Se puede ampliar aún más configurando listas blancas de múltiples usuarios o múltiples grupos de listas blancas.

3. Otros métodos de control de acceso

También se puede lograr:

  • Control del momento de la llamada al contrato
  • Mecanismo de llamada a funciones de contratos inteligentes con múltiples firmas
  • Gobernanza ( DAO ) mecanismo

Para más detalles, por favor esté atento a las próximas publicaciones.

GET-0.08%
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
  • 4
  • Republicar
  • Compartir
Comentar
0/400
EthMaximalistvip
· 08-14 01:11
¿Ah, este no es el mismo fallo que causó el colapso de Bancor en su momento?
Ver originalesResponder0
HalfBuddhaMoneyvip
· 08-12 19:17
¡Wuhu! ¡Es hora de escribir bugs!
Ver originalesResponder0
GhostAddressMinervip
· 08-12 19:17
Este fallo en el contrato es demasiado básico, seguí de forma casual 276 billeteras de hackers y ya había notado que el flujo de fondos de bancor tenía trampa.
Ver originalesResponder0
CoconutWaterBoyvip
· 08-12 18:50
He estado trabajando en contratos durante varios años, y pub fn también ha fallado innumerables veces.
Ver originalesResponder0
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)