Este artigo apresentará o controle de permissões em contratos inteligentes Rust a partir de duas perspetivas:
Visibilidade de acesso/chamada de métodos (funções) de contratos
Controle de acesso/funções de privilégio/divisão de responsabilidades
1. Visibilidade das funções (métodos) de contrato
O controle de visibilidade das funções de contrato é crucial para proteger partes críticas contra acessos ou manipulações acidentais. Tomando como exemplo o incidente de segurança da Bancor Network em 18 de junho de 2020, o evento ocorreu devido a uma configuração incorreta dos direitos de acesso às funções críticas do contrato.
Na Rust, a visibilidade das funções em contratos inteligentes tem as seguintes categorias:
pub fn: indica que este método é público, faz parte da interface do contrato e pode ser chamado a partir de fora do contrato.
fn: Se pub não for explicitamente especificado, isso significa que a função não pode ser chamada diretamente de fora do contrato, apenas pode ser chamada internamente no contrato.
pub(crate) fn: Restringir o método para ser chamado dentro do escopo interno do crate.
Outra forma de definir o método como interno é defini-lo dentro de um bloco de código impl Contract que não é decorado com #[near_bindgen].
Para a função de callback, deve ser definida como uma propriedade pública, mas é necessário garantir que só possa ser chamada pelo próprio contrato. Pode usar o macro #[private] para implementar isso.
2. Controle de Acesso de Funções Privilegiadas(mecanismo de lista branca)
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso do ponto de vista semântico. Algumas funções privilegiadas (, como a inicialização do contrato, ativação/desativação, etc., ) só podem ser chamadas pelo proprietário do contrato.
É possível implementar um Trait personalizado para controle de acesso, verificando se o chamador é o proprietário do contrato:
Com base neste princípio, pode-se configurar vários utilizadores ou várias listas brancas, para implementar um controlo de acesso em grupos mais refinado.
3. Mais métodos de controlo de acesso
Outros métodos de controle de acesso em contratos inteligentes Rust incluem:
Controle do momento da chamada do contrato
Mecanismo de chamada multi-assinatura de funções de contratos
Governança(DAO) da implementação
Este conteúdo será detalhado em artigos posteriores.
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.
11 Curtidas
Recompensa
11
2
Repostar
Compartilhar
Comentário
0/400
PumpBeforeRug
· 10h atrás
A falha do Bancor naquela vez também foi por não ter configurado bem as permissões, certo?
Ver originalResponder0
OffchainOracle
· 10h atrás
O incidente Bancor deve ser usado como um aviso em livros didáticos.
Segurança de contratos inteligentes em Rust: compreensão profunda do controle de acesso e gestão de permissões
Rust contratos inteligentes养成日记(7)合约安全之访问控制
Este artigo apresentará o controle de permissões em contratos inteligentes Rust a partir de duas perspetivas:
1. Visibilidade das funções (métodos) de contrato
O controle de visibilidade das funções de contrato é crucial para proteger partes críticas contra acessos ou manipulações acidentais. Tomando como exemplo o incidente de segurança da Bancor Network em 18 de junho de 2020, o evento ocorreu devido a uma configuração incorreta dos direitos de acesso às funções críticas do contrato.
Na Rust, a visibilidade das funções em contratos inteligentes tem as seguintes categorias:
Outra forma de definir o método como interno é defini-lo dentro de um bloco de código impl Contract que não é decorado com #[near_bindgen].
Para a função de callback, deve ser definida como uma propriedade pública, mas é necessário garantir que só possa ser chamada pelo próprio contrato. Pode usar o macro #[private] para implementar isso.
2. Controle de Acesso de Funções Privilegiadas(mecanismo de lista branca)
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso do ponto de vista semântico. Algumas funções privilegiadas (, como a inicialização do contrato, ativação/desativação, etc., ) só podem ser chamadas pelo proprietário do contrato.
É possível implementar um Trait personalizado para controle de acesso, verificando se o chamador é o proprietário do contrato:
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 neste princípio, pode-se configurar vários utilizadores ou várias listas brancas, para implementar um controlo de acesso em grupos mais refinado.
3. Mais métodos de controlo de acesso
Outros métodos de controle de acesso em contratos inteligentes Rust incluem:
Este conteúdo será detalhado em artigos posteriores.