Segurança de contratos inteligentes Rust: Detalhes sobre controle de acesso e gestão de permissões

robot
Geração do resumo em andamento

Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança de Contratos: Controle de Acesso

Este artigo apresentará o controle de permissões em contratos inteligentes Rust a partir de duas perspectivas:

  1. Visibilidade dos métodos de contratos inteligentes
  2. Controle de acesso de funções privilegiadas

1. Visibilidade da função do contrato

Em contratos inteligentes Rust, o controle de visibilidade de funções é muito importante. O SDK NEAR define os seguintes atributos de visibilidade com o macro #[near_bindgen]:

  • pub fn: função pública, pode ser chamada de fora do contrato
  • fn: função interna, só pode ser chamada dentro do contrato
  • pub(crate) fn: restringir chamadas dentro do crate

Além disso, é possível definir métodos internos através de um bloco de contrato impl independente:

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

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

Para a função de callback, deve ser definida como pub e usar o macro #[private] para garantir que só pode ser chamada pelo próprio contrato:

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

2. Controle de acesso das funções privilegiadas

Além da visibilidade das funções, é necessário estabelecer um mecanismo de lista branca de controle de acesso. Pode-se implementar um Trait personalizado:

ferrugem pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }

Na função de privilégio, chamar assert_owner() pode restringir que apenas o owner possa executar:

ferrugem impl Contract { pub fn privileged_function(&mut self) { self.assert_owner(); // Operações de privilégio } }

Desta forma, é possível implementar um mecanismo básico de lista branca, e ainda pode ser expandido para realizar controle de acesso complexo, como múltiplos usuários e múltiplas listas brancas.

A segurança dos contratos precisa ser considerada a partir de múltiplos aspectos, incluindo o controle do momento de chamada, mecanismos de múltiplas assinaturas, entre outros, que serão detalhados em artigos futuros.

GET7.41%
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • 9
  • Repostar
  • Compartilhar
Comentário
0/400
GasWastervip
· 07-24 14:55
Está a estudar coisas profundas novamente.
Ver originalResponder0
rugdoc.ethvip
· 07-24 12:22
Isso é muito clichê, não é?
Ver originalResponder0
GateUser-9ad11037vip
· 07-24 03:37
Deve-se adicionar um mecanismo de lista negra?
Ver originalResponder0
DefiPlaybookvip
· 07-23 10:17
Dados abrangentes mostram que a gestão de visitas continua a ser um dos três principais vazamentos de contratos.
Ver originalResponder0
SeeYouInFourYearsvip
· 07-21 20:27
rust é assim, não é?
Ver originalResponder0
OnchainDetectivevip
· 07-21 20:27
O controle de permissões é como uma farsa, já era hora de investigar as portas dos fundos.
Ver originalResponder0
rekt_but_resilientvip
· 07-21 20:21
Este mecanismo de segurança do contrato é fraco.
Ver originalResponder0
DarkPoolWatchervip
· 07-21 20:13
Escreveste bem, mas eu adormeci a olhar.
Ver originalResponder0
MEVSandwichVictimvip
· 07-21 20:11
Ponto importante, uau!
Ver originalResponder0
Ver projetos
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)