Control de permisos de contratos inteligentes en Rust: visibilidad de funciones y gestión de acceso privilegiado

robot
Generación de resúmenes en curso

Control de permisos en contratos inteligentes de Rust

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

  1. Visibilidad de los métodos del contrato
  2. Control de acceso a funciones privilegiadas

1. Visibilidad de las funciones de contratos

En el desarrollo de contratos inteligentes, configurar correctamente la visibilidad de las funciones es crucial. Tomando como ejemplo el incidente de seguridad de Bancor Network el 18 de junio de 2020, se presentó un riesgo para los activos de los usuarios debido a que se configuró incorrectamente una función clave de transferencia como pública.

En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es igualmente importante. El macro #[near_bindgen] en NEAR SDK define las siguientes visibilidades:

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

Otra forma de configurar el método internal es definir un bloque de código impl Contract por separado, sin usar el decorador #[near_bindgen].

Para la función de retorno, debe configurarse como pública, pero al mismo tiempo restringirla para que solo pueda ser llamada por el propio contrato. Se puede utilizar el macro #[private] para lograr este objetivo.

Es importante tener en cuenta que, por defecto, todo en Rust es privado, 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. Al igual que el modificador onlyOwner en Solidity, en los contratos de Rust también se puede implementar un Trait personalizado para controlar el acceso a las funciones privilegiadas:

ó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 puede restringir que solo el owner pueda llamar a ciertas funciones privilegiadas. Basado en este principio, se pueden establecer listas blancas y controles de acceso por grupos más complejos.

3. Otros métodos de control de acceso

También se presentarán otros métodos de control de acceso, como el control del momento de la llamada al contrato, el mecanismo de llamadas múltiples y la implementación de DAO, que se explicarán en detalle en artículos posteriores.

GET-0.6%
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
MetaNomadvip
· 08-04 05:07
rust novato pregunta ¿cuál es más seguro?
Ver originalesResponder0
NftPhilanthropistvip
· 08-04 05:02
*suspiro* otro lío de seguridad porque alguien olvidó los permisos básicos... ¿cuándo aprenderán los desarrolladores a acuñar con cuidado? smh
Ver originalesResponder0
BearMarketGardenervip
· 08-04 04:57
La gestión de permisos fracasará y todo estará perdido.
Ver originalesResponder0
RuntimeErrorvip
· 08-04 04:45
Control de permisos no estándar, ven a depurar de rodillas.
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)