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:
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.
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.
20 Curtidas
Recompensa
20
4
Repostar
Compartilhar
Comentário
0/400
EthMaximalist
· 08-14 01:11
Ah, não é esse o buraco que fez o bancor falhar na época?
Ver originalResponder0
HalfBuddhaMoney
· 08-12 19:17
Wuhu, é hora de escrever bugs novamente.
Ver originalResponder0
GhostAddressMiner
· 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
CoconutWaterBoy
· 08-12 18:50
Faz alguns anos que estou a trabalhar com contratos, e a função pub fn já falhou inúmeras vezes.
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:
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:
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:
Para mais detalhes, por favor, acompanhe as próximas comunicações.