Controle de acesso a contratos inteligentes Rust: visibilidade de funções e práticas de acesso privilegiado

robot
Geração do resumo em andamento

Controle de Acesso em contratos inteligentes Rust

Este artigo irá explorar a questão do controle de acesso em contratos inteligentes Rust sob dois aspectos: a visibilidade dos métodos do contrato e o controle de acesso às funções privilegiadas.

1. Visibilidade das funções de contratos

Ao escrever contratos inteligentes, a visibilidade das funções pode ser especificada para controlar quem pode chamar funções específicas, protegendo assim partes críticas do contrato.

Como exemplo, considere o incidente de segurança que ocorreu em uma exchange em 18 de junho de 2020. Devido a uma configuração incorreta das permissões de acesso das funções críticas do contrato, os ativos dos usuários ficaram em risco. Este caso destaca a importância de configurar corretamente a visibilidade das funções do contrato.

Na Rust, a visibilidade das funções em contratos inteligentes é principalmente das seguintes formas:

  • pub fn: indica que este método é público, faz parte da interface do contrato e pode ser chamado por qualquer pessoa de fora.
  • fn: Se não for explicitamente indicado pub, significa que essa função só pode ser chamada por outras funções dentro do contrato.
  • pub(crate) fn: Restringir o método para ser chamado dentro do escopo do crate.

Outra maneira de definir o método como interno é definir no bloco de código impl Contract que não é decorado com #[near_bindgen].

Para a função de callback, deve ser definido como uma propriedade pública para que possa ser chamado através de function call. Além disso, é necessário garantir que a função de callback não possa ser chamada aleatoriamente, podendo usar o macro #[private] para implementar isso.

É importante notar que, por padrão, tudo em Rust é privado, exceto os sub-itens em pub Trait e as variáveis em pub Enum, que são públicas por padrão.

2. Controle de acesso das funções privilegiadas

Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso do ponto de vista semântico. Algumas funções privilegiadas (como inicialização do contrato, ativação/desativação, etc.) só podem ser chamadas pelo proprietário do contrato.

Em contratos inteligentes Rust, é possível implementar uma funcionalidade semelhante ao modificador onlyOwner do Solidity:

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

Usar este método permite implementar o controle de acesso a funções privilegiadas, garantindo que apenas o proprietário do contrato possa executar completamente essas funções. Com base neste princípio, é possível estabelecer mecanismos de lista branca mais complexos, permitindo um controle de acesso em grupos mais refinado.

3. Outros métodos de controle de acesso

Além dos métodos mencionados, existem outras formas de controle de acesso em contratos inteligentes Rust, como controle do momento da chamada do contrato, mecanismo de chamadas multi-assinatura e a implementação de governança (DAO), entre outros. Estes conteúdos serão discutidos em detalhes em artigos futuros.

GET-5.42%
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
  • 4
  • Compartilhar
Comentário
0/400
ProxyCollectorvip
· 5h atrás
Mais uma armadilha de configuração de permissões. Quem cai nela, azar!
Ver originalResponder0
SelfRuggervip
· 18h atrás
Mais uma vez, é um problema de permissão.
Ver originalResponder0
AllTalkLongTradervip
· 18h atrás
Hehe, já vi aquele buraco da bolsa do ano passado novamente
Ver originalResponder0
PermabullPetevip
· 18h atrás
A permissão não foi controlada e quase deu ruim.
Ver originalResponder0
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)