Diário de Crescimento de Contratos Inteligentes em Rust (7) Segurança do Contrato em Relação à Precisão dos Cálculos
Este artigo abordará o controle de permissões em contratos inteligentes Rust sob duas perspectivas:
Visibilidade de acesso/chamada de métodos de contrato
Controle de acesso/função de privilégio/divisão de responsabilidades
1. Visibilidade da função do contrato
O controle de visibilidade das funções do contrato é importante para proteger partes críticas de operações acidentais. Tomando como exemplo o incidente de segurança da exchange Bancor Network em 18 de junho de 2020, onde uma função de transferência crítica foi acidentalmente definida como pública, resultando em um risco para os ativos de 590 mil dólares dos usuários.
Na Rust, a visibilidade das funções em contratos inteligentes é principalmente:
pub fn: função pública, pode ser chamada de fora do contrato
fn: privado por padrão, só pode ser chamado dentro do contrato
pub(crate) fn: restringir chamadas dentro do crate
Outra forma de definir o método internal é criar um bloco de código impl Contract independente, sem adicionar a anotação #[near_bindgen].
Para a função de callback, deve ser definida como pública, mas limitada para ser chamada apenas pelo próprio contrato. Pode ser implementada usando o macro #[private].
Por padrão, todo o conteúdo em Rust é privado, exceto os itens em pub trait e pub enum.
2. Controle de Acesso a Funções Privilegiadas
Além da visibilidade da função, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso a partir da perspectiva semântica. Semelhante ao contrato Ownable do Solidity, certas funções privilegiadas só podem ser chamadas pelo owner.
Em contratos Rust, é possível implementar Traits personalizados:
Dessa forma, é possível implementar o controle de acesso a funções privilegiadas. Com base nisso, também é possível definir uma lista de permissões multiusuário ou vários grupos de listas de permissões.
3. Mais métodos de controlo de acesso
Outras metodologias de controle de acesso incluem:
Controle do momento de chamada do contrato
Mecanismo de chamada de múltiplas assinaturas de funções de contratos
Implementação da governança DAO
Este conteúdo será detalhado em artigos posteriores.
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
Explicação detalhada sobre a visibilidade de funções e controle de permissões em contratos inteligentes Rust
Diário de Crescimento de Contratos Inteligentes em Rust (7) Segurança do Contrato em Relação à Precisão dos Cálculos
Este artigo abordará o controle de permissões em contratos inteligentes Rust sob duas perspectivas:
1. Visibilidade da função do contrato
O controle de visibilidade das funções do contrato é importante para proteger partes críticas de operações acidentais. Tomando como exemplo o incidente de segurança da exchange Bancor Network em 18 de junho de 2020, onde uma função de transferência crítica foi acidentalmente definida como pública, resultando em um risco para os ativos de 590 mil dólares dos usuários.
Na Rust, a visibilidade das funções em contratos inteligentes é principalmente:
Outra forma de definir o método internal é criar um bloco de código impl Contract independente, sem adicionar a anotação #[near_bindgen].
Para a função de callback, deve ser definida como pública, mas limitada para ser chamada apenas pelo próprio contrato. Pode ser implementada usando o macro #[private].
Por padrão, todo o conteúdo em Rust é privado, exceto os itens em pub trait e pub enum.
2. Controle de Acesso a Funções Privilegiadas
Além da visibilidade da função, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso a partir da perspectiva semântica. Semelhante ao contrato Ownable do Solidity, certas funções privilegiadas só podem ser chamadas pelo owner.
Em contratos Rust, é possível implementar Traits personalizados:
ferrugem pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(\u0026mut self, owner: AccountId); }
Dessa forma, é possível implementar o controle de acesso a funções privilegiadas. Com base nisso, também é possível definir uma lista de permissões multiusuário ou vários grupos de listas de permissões.
3. Mais métodos de controlo de acesso
Outras metodologias de controle de acesso incluem:
Este conteúdo será detalhado em artigos posteriores.