Rust Smart Contract Diary (7) Controle de Acesso para Segurança de Contrato
Este artigo irá abordar o controle de permissões em contratos inteligentes Rust de duas maneiras:
Visibilidade dos métodos contratuais
Controlo de acesso a funções privilegiadas
1. Visibilidade das funções do contrato
Configurar corretamente a visibilidade das funções contratuais é essencial para manter o seu contrato seguro. Tomando como exemplo o incidente de troca da Rede Bancor em junho de 2020, os ativos dos usuários estavam em risco devido à função de transferência de chave ter sido erroneamente definida como pública.
Em contratos inteligentes Rust, a visibilidade das funções é principalmente das seguintes formas:
pub fn: função pública, pode ser chamada de fora do contrato
fn: função interna padrão, só pode ser chamada dentro do contrato
pub(crate) fn: restringir a chamada dentro do crate
Além disso, os métodos definidos em blocos impl não anotados com #[near_bindgen] são internos.
Para a função de retorno, deve ser definida como pública, mas ao mesmo tempo é necessário realizar uma verificação do chamador, podendo usar o macro #[private] para implementar.
Vale a pena notar que tudo em Rust é privado por padrão, exceto itens em pub trait e pub enum.
2. Controle de acesso das 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 em Solidity, é possível definir funções privilegiadas que só podem ser chamadas pelo proprietário.
Em Rust, isso pode ser alcançado com características personalizadas:
Desta forma, é possível implementar um controle básico de permissões de proprietário. Pode ser expandido para uma lista de permissões de múltiplos usuários ou múltiplos grupos, permitindo um controle de acesso mais refinado.
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.
17 Curtidas
Recompensa
17
6
Compartilhar
Comentário
0/400
ser_we_are_ngmi
· 2h atrás
É difícil de entender, vou sair.
Ver originalResponder0
NFT_Therapy
· 07-17 01:06
É necessário ter controle de permissões! Caso contrário, o contrato pode ser rasgado e será GG.
Ver originalResponder0
PonziDetector
· 07-17 01:05
Rust yyds é o mais hardcore
Ver originalResponder0
MetaMuskRat
· 07-17 01:02
Mais um com permissões de gestão, escapuliu.
Ver originalResponder0
ser_we_are_early
· 07-17 00:46
Simples e direto, é apenas adicionar um controle de permissões.
Segurança de contratos inteligentes Rust: Detalhes sobre controle de acesso e visibilidade de funções
Rust Smart Contract Diary (7) Controle de Acesso para Segurança de Contrato
Este artigo irá abordar o controle de permissões em contratos inteligentes Rust de duas maneiras:
1. Visibilidade das funções do contrato
Configurar corretamente a visibilidade das funções contratuais é essencial para manter o seu contrato seguro. Tomando como exemplo o incidente de troca da Rede Bancor em junho de 2020, os ativos dos usuários estavam em risco devido à função de transferência de chave ter sido erroneamente definida como pública.
Em contratos inteligentes Rust, a visibilidade das funções é principalmente das seguintes formas:
Além disso, os métodos definidos em blocos impl não anotados com #[near_bindgen] são internos.
Para a função de retorno, deve ser definida como pública, mas ao mesmo tempo é necessário realizar uma verificação do chamador, podendo usar o macro #[private] para implementar.
Vale a pena notar que tudo em Rust é privado por padrão, exceto itens em pub trait e pub enum.
2. Controle de acesso das 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 em Solidity, é possível definir funções privilegiadas que só podem ser chamadas pelo proprietário.
Em Rust, isso pode ser alcançado com características personalizadas:
ferrugem pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::p redecessor_account_id(), self.get_ owner()); } AccountId; fn set_owner(&mut self, proprietário: AccountId); }
Desta forma, é possível implementar um controle básico de permissões de proprietário. Pode ser expandido para uma lista de permissões de múltiplos usuários ou múltiplos grupos, permitindo um controle de acesso mais refinado.