Seguridad de contratos inteligentes en Rust: explicación detallada del control de acceso y la visibilidad de funciones

robot
Generación de resúmenes en curso

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

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

  1. La visibilidad de los métodos de contratos inteligentes
  2. Control de acceso a funciones privilegiadas

1. Visibilidad de las funciones de contrato

Configurar correctamente la visibilidad de las funciones del contrato es crucial para proteger la seguridad del contrato. Tomando como ejemplo el incidente de junio de 2020 en el intercambio Bancor Network, la configuración incorrecta de la función de transferencia clave como public puso en riesgo los activos de los usuarios.

En los contratos inteligentes de Rust, hay varios tipos principales de visibilidad de funciones:

  • pub fn: función pública, se puede llamar desde fuera del contrato
  • fn: función interna predeterminada, solo se puede llamar dentro del contrato
  • pub(crate) fn: Restringe las llamadas desde el interior de la caja

Además, los métodos definidos en bloques impl que no están decorados con #[near_bindgen] son internos.

Para las funciones de retorno, se deben establecer como públicas, pero al mismo tiempo se debe realizar una verificación del llamador, se puede usar el macro #[private] para implementarlo.

Vale la pena señalar que todo en Rust es privado de forma predeterminada, excepto los elementos en pub trait y pub enum.

!

2. Control de acceso a funciones privilegiadas

Además de establecer la visibilidad de la función, también debe establecer un mecanismo de lista blanca de control de acceso. De forma similar al modificador onlyOwner en Solidity, puedes definir funciones privilegiadas a las que solo el propietario puede llamar.

En Rust, esto se puede lograr con rasgos personalizados:

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

Esto permite un control básico de los permisos del propietario. Se puede ampliar aún más a una lista blanca multiusuario o una lista blanca multigrupo para un control de acceso más granular.

!

!

!

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
  • 7
  • Compartir
Comentar
0/400
BTCRetirementFundvip
· Hace28m
La seguridad del contrato es el primer peso pesado
Ver originalesResponder0
ser_we_are_ngmivip
· hace10h
Es muy difícil de entender, me voy, me voy.
Ver originalesResponder0
NFT_Therapyvip
· 07-17 01:06
¡Es necesario tener control de permisos! De lo contrario, el contrato podría ser robado y eso sería el fin.
Ver originalesResponder0
PonziDetectorvip
· 07-17 01:05
Rust yyds el más duro
Ver originalesResponder0
MetaMuskRatvip
· 07-17 01:02
Otra gestión de permisos, me voy, me voy.
Ver originalesResponder0
ser_we_are_earlyvip
· 07-17 00:46
Simple y directo, solo hay que añadir un control de permisos.
Ver originalesResponder0
MemeEchoervip
· 07-17 00:40
Mirar me hace sentir cansado. ¿Alguien realmente lo ha aprendido?
Ver originalesResponder0
  • Anclado
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)