Explicação detalhada sobre a visibilidade de funções e controle de permissões em contratos inteligentes Rust

robot
Geração de resumo em curso

Diário de Crescimento de Contratos Inteligentes em Rust (7) Segurança do Contrato em Relação à Precisão dos Cálculos

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

  • Visibilidade de acesso/chamada de métodos de contrato
  • Controle de acesso/função de privilégio/divisão de responsabilidades

1. Visibilidade da função do contrato

O controle de visibilidade das funções do contrato é importante para proteger partes críticas de operações acidentais. Tomando como exemplo o incidente de segurança da exchange Bancor Network em 18 de junho de 2020, onde uma função de transferência crítica foi acidentalmente definida como pública, resultando em um risco para os ativos de 590 mil dólares dos usuários.

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

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

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

Para a função de callback, deve ser definida como pública, mas limitada para ser chamada apenas pelo próprio contrato. Pode ser implementada usando o macro #[private].

Por padrão, todo o conteúdo em Rust é privado, exceto os itens em pub trait e pub enum.

2. Controle de Acesso a Funções Privilegiadas

Além da visibilidade da função, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso a partir da perspectiva semântica. Semelhante ao contrato Ownable do Solidity, certas funções privilegiadas só podem ser chamadas pelo owner.

Em contratos Rust, é possível implementar Traits personalizados:

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

Dessa forma, é possível implementar o controle de acesso a funções privilegiadas. Com base nisso, também é possível definir uma lista de permissões multiusuário ou vários grupos de listas de permissões.

3. Mais métodos de controlo de acesso

Outras metodologias de controle de acesso incluem:

  • Controle do momento de chamada do contrato
  • Mecanismo de chamada de múltiplas assinaturas de funções de contratos
  • Implementação da governança DAO

Este conteúdo será detalhado em artigos posteriores.

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Partilhar
Comentar
0/400
Nenhum comentário
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)