Seguridad de contratos inteligentes en Rust: comprensión profunda del control de acceso y la gestión de permisos

robot
Generación de resúmenes en curso

Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad del contrato: control de acceso

Este artículo introducirá el control de permisos en los contratos inteligentes de Rust desde dos perspectivas:

  1. La visibilidad de acceso/llamada a los métodos (funciones) del contrato
  2. Control de acceso de funciones privilegiadas / División de responsabilidades

1. Visibilidad de las funciones (métodos) del contrato

El control de la visibilidad de las funciones del contrato es crucial para proteger las partes clave de accesos o manipulaciones accidentales. Tomando como ejemplo el incidente de seguridad del intercambio Bancor Network del 18 de junio de 2020, este incidente ocurrió debido a un error en la configuración de los permisos de acceso a funciones clave del contrato.

En los contratos inteligentes de Rust, hay las siguientes visibilidades de funciones:

  • pub fn: indica que este método es público, forma parte de la interfaz del contrato y puede ser llamado desde fuera del contrato.
  • fn: Si no se indica explícitamente pub, significa que esta función no se puede llamar directamente desde fuera del contrato, solo se puede llamar desde dentro del contrato.
  • pub(crate) fn: Restringir el método a ser llamado dentro del alcance interno del crate.

Otra forma de establecer el método como interno es definirlo en un bloque de código impl Contract que no esté decorado con #[near_bindgen].

Para las funciones de retorno, deben establecerse como propiedades públicas, pero es necesario asegurarse de que solo puedan ser llamadas por el propio contrato. Se puede utilizar el macro #[private] para lograr esto.

2. Control de acceso a funciones privilegiadas(mecanismo de lista blanca)

Además de la visibilidad de las funciones, también es necesario establecer un mecanismo completo de lista blanca de control de acceso desde un nivel semántico. Ciertas funciones privilegiadas (, como la inicialización del contrato, activar/pausar, etc., ) solo pueden ser llamadas por el propietario del contrato.

Se pueden implementar Traits personalizados para el control de acceso, verificando si el llamador es el propietario del contrato:

ó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); }

Basado en este principio, se pueden establecer múltiples usuarios o varias listas blancas para lograr un control de acceso por grupos más detallado.

3. Más métodos de control de acceso

Otros métodos de control de acceso en contratos inteligentes de Rust incluyen:

  • Control del momento de la llamada al contrato
  • Mecanismo de llamada multisig para funciones de contratos inteligentes
  • Gobernanza(DAO) de la implementación

Estos contenidos se detallarán en artículos posteriores.

GET0.04%
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
  • 2
  • Republicar
  • Compartir
Comentar
0/400
PumpBeforeRugvip
· 08-09 06:44
La caída de Bancor también fue por no tener bien establecidos los permisos, ¿verdad?
Ver originalesResponder0
OffchainOraclevip
· 08-09 06:32
El incidente de Bancor debe ser utilizado como una advertencia de libro de texto.
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)