Práticas de segurança em contratos inteligentes Rust: explicação detalhada sobre visibilidade de funções e controle de permissões

Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança do Contrato em Precisão de Cálculo

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

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

1. Visibilidade das funções do contrato

Definir a visibilidade das funções do contrato pode controlar os direitos de chamada das funções, protegendo partes-chave de acessos não autorizados. Tomando como exemplo a exchange Bancor Network, em junho de 2020, ocorreu um incidente de segurança de ativos devido a uma configuração errada da visibilidade de funções chave.

Na Rust, a visibilidade das funções em contratos inteligentes é controlada da seguinte forma:

  • 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

Outra forma de definir métodos internos é definir blocos de código impl Contract independentes, sem usar o modificador #[near_bindgen].

A função de retorno deve ser definida como pub, mas deve garantir que só possa ser chamada pelo próprio contrato. Pode-se usar a macro #[private] para implementar isso.

Por padrão, tudo em Rust é privado, mas os itens dentro de traits e enums são públicos por padrão.

2. Controle de Acesso de Funções Privilegiadas

Além de definir a visibilidade das funções, é necessário estabelecer um mecanismo de lista branca de controle de acesso. Semelhante ao modificador onlyOwner no Solidity, pode-se definir funções privilegiadas que só o proprietário pode chamar.

Em Rust, pode-se implementar um trait Ownable semelhante:

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 implementar o controle de acesso às funções privilegiadas. É possível expandir ainda mais configurando uma lista de permissões de múltiplos usuários ou vários grupos de listas de permissões.

3. Outros métodos de controlo de acesso

Ainda é possível realizar:

  • Controle do momento da chamada do contrato
  • Mecanismo de chamada de múltiplas assinaturas de funções de contrato
  • Governança (DAO) mecanismo

Para mais detalhes, por favor, acompanhe as próximas comunicações.

GET0.04%
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
  • Repostar
  • Compartilhar
Comentário
0/400
EthMaximalistvip
· 08-14 01:11
Ah, não é esse o buraco que fez o bancor falhar na época?
Ver originalResponder0
HalfBuddhaMoneyvip
· 08-12 19:17
Wuhu, é hora de escrever bugs novamente.
Ver originalResponder0
GhostAddressMinervip
· 08-12 19:17
Esta vulnerabilidade do contrato é simplesmente demasiado básica, segui 276 carteiras de hackers e já tinha percebido que o fluxo de fundos da bancor tinha algo de suspeito.
Ver originalResponder0
CoconutWaterBoyvip
· 08-12 18:50
Faz alguns anos que estou a trabalhar com contratos, e a função pub fn já falhou inúmeras vezes.
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)