Camino hacia la seguridad de los contratos inteligentes en Rust: explicación detallada del control de permisos y la visibilidad de funciones

robot
Generación de resúmenes en curso

Diario de desarrollo de contratos inteligentes en Rust (7) Control de permisos en la seguridad de contratos

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

  1. Visibilidad de acceso/llamada a métodos de contratos
  2. Control de acceso de funciones privilegiadas / Distribución de responsabilidades

1. Visibilidad de las funciones del contrato

La configuración de la visibilidad de las funciones del contrato es crucial para proteger las partes clave contra accesos o manipulaciones accidentales. Tomemos como ejemplo el incidente de seguridad de la plataforma Bancor Network en junio de 2020, donde la función de transferencia crítica se configuró erróneamente como public, lo que expuso los activos de los usuarios a riesgos.

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, se puede llamar desde fuera del contrato
  • fn: solo puede ser llamado dentro del contrato
  • pub(crate) fn: restringido a llamadas internas en crate

Otra forma de configurar el método internal es definiendo un bloque de código impl Contract independiente y sin usar el modificador #[near_bindgen].

Para la función de retorno, debe ser pública pero asegurarse de que solo pueda ser llamada por el propio contrato. Se puede utilizar el macro #[private] para implementar esta funcionalidad.

Es importante tener en cuenta que en Rust, todo es privado por defecto, excepto los elementos en pub Trait y pub Enum.

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 desde el nivel semántico. Similar a la función "onlyOwner" en Solidity, ciertas funciones clave solo pueden ser llamadas por el propietario del contrato.

En un contrato de Rust, se puede implementar un Trait personalizado similar:

ó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 implementar el control de acceso a funciones privilegiadas, asegurando que solo el propietario del contrato pueda invocarlas. Basado en este principio, también 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.

3. Otras métodos de control de acceso

Hay algunos otros métodos de control de acceso, como:

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

Estos contenidos se presentarán en el diario de desarrollo de contratos inteligentes posterior.

PUBLIC-2.99%
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
  • 5
  • Republicar
  • Compartir
Comentar
0/400
TheMemefathervip
· 08-18 14:36
Ah, este evento de Bancor es demasiado absurdo.
Ver originalesResponder0
PancakeFlippavip
· 08-18 11:42
¿Has jugado con Bancor? Arruinado...
Ver originalesResponder0
ReverseFOMOguyvip
· 08-16 02:20
realmente no puedo aguantar el bug de bancor
Ver originalesResponder0
BoredApeResistancevip
· 08-16 02:05
Ah, esto no es el bug con el que bancor tuvo problemas en el pasado.
Ver originalesResponder0
rekt_but_not_brokevip
· 08-16 02:01
El caso de ataque es bastante nuevo, me hace sentir un sudor frío.
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)