Seguridad de contratos inteligentes en Rust: Explicación detallada del control de acceso y gestión de permisos

robot
Generación de resúmenes en curso

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

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

  1. La visibilidad de los métodos del contrato
  2. Control de acceso a las funciones privilegiadas

1. Visibilidad de funciones de contratos

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

  • 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 para llamar dentro de crate

Además, se pueden definir métodos internos a través de bloques de impl Contract independientes:

óxido #[near_bindgen] impl Contract { pub fn increment(&mut self) { self.internal_increment(); } }

impl Contrato { pub fn internal_increment(&mut self) { self.counter += 1; } }

Para la función de retorno, debe configurarse como pub y utilizar el macro #[private] para asegurarse de que solo puede ser llamado por el contrato mismo:

óxido #[near_bindgen] impl Contrato { #[private] pub fn resolve_transfer(&mut self) { // Lógica de callback } }

2. Control de acceso a funciones privilegiadas

Además de la visibilidad de las funciones, también es necesario establecer un mecanismo de lista blanca de control de acceso. Se puede implementar mediante Trait personalizado:

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

En la función de privilegios, la llamada a assert_owner() puede limitar la ejecución solo al propietario.

óxido impl Contract { pub fn privileged_function(&mut self) { self.assert_owner(); // Operaciones privilegiadas } }

Esto permite implementar un mecanismo básico de lista blanca y también se puede expandir para realizar controles de acceso más complejos, como múltiples usuarios y múltiples listas blancas.

La seguridad de los contratos debe considerarse desde múltiples aspectos, incluyendo el control del momento de la llamada, mecanismos de múltiples firmas, etc., que se detallarán en artículos posteriores.

GET7.02%
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
  • 9
  • Republicar
  • Compartir
Comentar
0/400
GasWastervip
· 07-24 14:55
Ya estás investigando cosas profundas otra vez.
Ver originalesResponder0
rugdoc.ethvip
· 07-24 12:22
Esto es demasiado común, ¿no?
Ver originalesResponder0
GateUser-9ad11037vip
· 07-24 03:37
¿Deberíamos complementar el mecanismo de la lista negra?
Ver originalesResponder0
DefiPlaybookvip
· 07-23 10:17
Los datos integrales muestran que el control de visitas sigue siendo uno de los tres principales errores de contrato.
Ver originalesResponder0
SeeYouInFourYearsvip
· 07-21 20:27
rust es así.
Ver originalesResponder0
OnchainDetectivevip
· 07-21 20:27
El control de permisos es solo un formalismo, ya debería haberse revisado la puerta trasera.
Ver originalesResponder0
rekt_but_resilientvip
· 07-21 20:21
Este mecanismo de seguridad del contrato es agua.
Ver originalesResponder0
DarkPoolWatchervip
· 07-21 20:13
Está bastante bien escrito, pero me quedé dormido al leerlo.
Ver originalesResponder0
MEVSandwichVictimvip
· 07-21 20:11
He destacado un punto, ¡vale!
Ver originalesResponder0
Ver más
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)