Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança de Contratos: Controle de Acesso
Este artigo abordará o controle de permissões em contratos inteligentes Rust sob duas perspectivas:
Visibilidade de acesso/chamada de métodos de contratos
Controlo de acesso das funções privilegiadas/divisão de responsabilidades
1. Visibilidade da função do contrato
A configuração de visibilidade das funções de contratos é crucial para proteger partes críticas contra acessos ou manipulações acidentais. Tomando como exemplo o incidente de segurança da Bancor Network em junho de 2020, o fato de ter definido erroneamente a função de transferência crítica como public expôs os ativos dos usuários a riscos.
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: só pode ser chamado dentro do contrato
pub(crate) fn: restringir chamadas dentro do crate
Outra forma de definir o método internal é definir um bloco de código impl Contract independente, sem usar o modificador #[near_bindgen].
Para a função de retorno de chamada, deve ser definida como pública, mas ao mesmo tempo garantir que só pode ser chamada pelo próprio contrato. Pode-se usar o macro #[private] para implementar essa funcionalidade.
Deve-se notar que, por padrão, tudo em Rust é privado, exceto os itens em pub Trait e pub Enum.
2. Controle de acesso das funções privilegiadas
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista de permissões de acesso a partir da perspectiva semântica. Semelhante à função "onlyOwner" no Solidity, certas funções-chave só podem ser chamadas pelo proprietário do contrato.
Em contratos Rust, é possível implementar um Trait personalizado semelhante:
Dessa forma, é possível implementar o controle de acesso a funções privilegiadas, garantindo que apenas o proprietário do contrato possa chamá-las. Com base nesse princípio, também é possível configurar listas brancas mais complexas com múltiplos usuários ou várias listas brancas, permitindo um controle de acesso em grupos mais detalhado.
3. Outros métodos de controlo de acesso
Há também alguns outros métodos de controle de acesso, como:
Controle do momento da chamada do contrato
Mecanismo de chamada de múltiplas assinaturas para funções de contratos
Governança(DAO) da implementação
Esses conteúdos serão introduzidos no diário de desenvolvimento de contratos inteligentes.
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
5
Repostar
Compartilhar
Comentário
0/400
TheMemefather
· 08-18 14:36
Ah, este evento da Bancor é tão absurdo.
Ver originalResponder0
PancakeFlippa
· 08-18 11:42
Jogou Bancor? Rekt...
Ver originalResponder0
ReverseFOMOguy
· 08-16 02:20
o bug do bancor realmente não aguenta mais
Ver originalResponder0
BoredApeResistance
· 08-16 02:05
Ah, isso não é o bug que o Bancor teve problemas no passado?
Ver originalResponder0
rekt_but_not_broke
· 08-16 02:01
O caso de ataque é bastante novo, me fez suar frio.
Caminho da segurança dos contratos inteligentes Rust: Detalhes sobre controle de permissões e visibilidade de funções
Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança de Contratos: Controle de Acesso
Este artigo abordará o controle de permissões em contratos inteligentes Rust sob duas perspectivas:
1. Visibilidade da função do contrato
A configuração de visibilidade das funções de contratos é crucial para proteger partes críticas contra acessos ou manipulações acidentais. Tomando como exemplo o incidente de segurança da Bancor Network em junho de 2020, o fato de ter definido erroneamente a função de transferência crítica como public expôs os ativos dos usuários a riscos.
Em contratos inteligentes Rust, a visibilidade das funções é principalmente das seguintes formas:
Outra forma de definir o método internal é definir um bloco de código impl Contract independente, sem usar o modificador #[near_bindgen].
Para a função de retorno de chamada, deve ser definida como pública, mas ao mesmo tempo garantir que só pode ser chamada pelo próprio contrato. Pode-se usar o macro #[private] para implementar essa funcionalidade.
Deve-se notar que, por padrão, tudo em Rust é privado, exceto os itens em pub Trait e pub Enum.
2. Controle de acesso das funções privilegiadas
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista de permissões de acesso a partir da perspectiva semântica. Semelhante à função "onlyOwner" no Solidity, certas funções-chave só podem ser chamadas pelo proprietário do contrato.
Em contratos Rust, é possível implementar um Trait personalizado 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 a funções privilegiadas, garantindo que apenas o proprietário do contrato possa chamá-las. Com base nesse princípio, também é possível configurar listas brancas mais complexas com múltiplos usuários ou várias listas brancas, permitindo um controle de acesso em grupos mais detalhado.
3. Outros métodos de controlo de acesso
Há também alguns outros métodos de controle de acesso, como:
Esses conteúdos serão introduzidos no diário de desenvolvimento de contratos inteligentes.