Controle de acesso de contratos inteligentes Rust: visibilidade de função e gerenciamento de acesso privilegiado

robot
Geração do resumo em andamento

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

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

  1. A visibilidade do acesso/chamada dos métodos do contrato
  2. Controle de acesso/funções privilegiadas/divisão de responsabilidades

1. Visibilidade das funções de contrato

Definir corretamente a visibilidade das funções do contrato é crucial para proteger partes críticas. Tomando como exemplo o incidente de segurança da Bancor Network em junho de 2020, a definição incorreta da função de transferência crítica como public resultou em riscos para os ativos dos usuários.

Na Rust contratos inteligentes, a visibilidade das funções é igualmente importante. O SDK NEAR define os seguintes atributos de visibilidade com a macro #[near_bindgen]:

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

Ainda é possível definir métodos internos através de blocos impl Contract que não são decorados com #[near_bindgen].

Para a função de callback, deve ser definida como pública, mas apenas permitida a chamada pelo próprio contrato. Pode-se usar o macro #[private] para implementar esta funcionalidade.

Deve-se notar que a visibilidade padrão em Rust é privada, mas os itens dentro de trait e enum são uma exceção.

2. Controle de Acesso a Funções Privilegiadas

Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso. Semelhante ao contrato Ownable do Solidity, algumas funções privilegiadas só podem ser chamadas pelo owner.

No contrato Rust, pode-se implementar o seguinte trait Ownable:

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

Com base nisso, pode-se implementar uma lista branca para o owner. Também é possível definir listas brancas de múltiplos utilizadores ou controle de acesso em grupos através de configurações de trait mais complexas personalizadas.

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
  • 6
  • Compartilhar
Comentário
0/400
CryptoTarotReadervip
· 07-16 04:56
Consegue prendê-lo?
Ver originalResponder0
FloorSweepervip
· 07-15 01:10
Não pode ser, temos que aprender tanto assim?
Ver originalResponder0
WhaleWatchervip
· 07-13 07:29
Primeiro, vamos falar sobre Ownable.
Ver originalResponder0
GateUser-e51e87c7vip
· 07-13 07:23
Ter mãos é suficiente, tão simples assim.
Ver originalResponder0
DecentralizeMevip
· 07-13 07:22
Uuuh lógica de base
Ver originalResponder0
ChainSpyvip
· 07-13 07:21
O controle de acesso é tão complexo que é melhor ser totalmente público.
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)