Controle de acesso de contratos inteligentes Rust: visibilidade de funções e gestão de acesso privilegiado

robot
Geração do resumo em andamento

Controle de permissões em contratos inteligentes Rust

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

  1. Visibilidade dos métodos do contrato
  2. Controle de acesso da função de privilégio

1. Visibilidade das funções do contrato

No desenvolvimento de contratos inteligentes, é crucial definir corretamente a visibilidade das funções. Tomando como exemplo o incidente de segurança da Bancor Network em 18 de junho de 2020, a definição errada da função de transferência crítica como pública expôs os ativos dos usuários a riscos.

Na Rust, o controle de visibilidade das funções em contratos inteligentes é igualmente importante. O macro #[near_bindgen] no NEAR SDK define os seguintes tipos de visibilidade:

  • pub fn: função pública, pode ser chamada a partir de fora do contrato
  • fn: apenas pode ser chamado dentro do contrato
  • pub(crate) fn: restringir a chamada dentro do crate

Outra forma de definir o método internal é definir um bloco de código impl Contract separado, sem usar a anotação #[near_bindgen].

Para a função de retorno, é necessário defini-la como pública, mas ao mesmo tempo limitar a chamada apenas pelo próprio contrato. Pode-se usar a macro #[private] para alcançar esse objetivo.

É importante notar que, por padrão, tudo em Rust é privado, exceto os itens em pub Trait e pub Enum.

2. Controle de acesso das funções privilegiadas

Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de controle de acesso em lista branca. Semelhante ao modificador onlyOwner no Solidity, contratos em Rust também podem implementar um Trait personalizado para controlar o acesso a funções privilegiadas:

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

Dessa forma, é possível restringir que apenas o owner possa chamar certas funções privilegiadas. Com base nesse princípio, é possível configurar listas de permissões mais complexas e controle de acesso em grupos.

3. Outros métodos de controlo de acesso

Existem também outros métodos de controle de acesso, como o controle do momento da chamada do contrato, o mecanismo de chamada multi-assinatura, a implementação de DAO, entre outros, que serão apresentados em detalhes em artigos futuros.

GET-0.49%
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
MetaNomadvip
· 08-04 05:07
rust novato pergunta qual é mais seguro?
Ver originalResponder0
NftPhilanthropistvip
· 08-04 05:02
*suspiro* mais um problema de segurança porque alguém esqueceu permissões básicas... quando é que os desenvolvedores vão aprender a cunhar com atenção smh
Ver originalResponder0
BearMarketGardenervip
· 08-04 04:57
Se a gestão de permissões falhar, tudo estará perdido.
Ver originalResponder0
RuntimeErrorvip
· 08-04 04:45
Controlo de permissões não é padrão, venha Debug de joelhos.
Ver originalResponder0
  • Marcar
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)