Controle de permissões em contratos inteligentes Rust
Este artigo irá explorar a questão do controle de permissões em contratos inteligentes Rust sob dois aspectos:
Visibilidade dos métodos de contratos
Controle de acesso das funções de privilégio
Visibilidade de funções de contratos
No contrato inteligente Rust, o controle da visibilidade das funções é crucial. Tomando como exemplo o incidente de segurança que ocorreu na exchange Bancor Network em 2020, a configuração errada da função de transferência crítica como pública colocou os ativos dos usuários em risco.
Na Rust contratos inteligentes da NEAR, 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 internas no crate
Além disso, definir a função em um bloco impl que não é decorado com #[near_bindgen] também pode torná-la uma função interna.
Para a função de retorno, deve ser definida como pública, mas ao mesmo tempo deve ser restringida para que só possa ser chamada pelo próprio contrato. Pode-se usar a macro #[private] para implementar isso.
É importante notar que, por padrão, tudo em Rust é privado, exceto os itens em pub Trait e pub Enum.
Controle de Acesso às Funções Privilegiadas
Além da visibilidade da função, é necessário estabelecer um mecanismo de controle de acesso completo a partir da perspectiva semântica. Semelhante ao modificador onlyOwner em Solidity, podemos definir um trait semelhante em Rust:
Usar esse tipo de trait pode implementar o controle de acesso a funções privilegiadas, garantindo que apenas o proprietário do contrato possa chamar essas funções.
Com base neste princípio, podemos implementar um controle de acesso refinado para múltiplos utilizadores na lista branca ou múltiplos grupos de listas brancas através da personalização de traits mais complexos.
Além disso, também é possível implementar controle do momento da chamada, mecanismos de múltiplas assinaturas e outros métodos de controle de acesso para atender às necessidades de segurança em diferentes cenários.
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.
19 Curtidas
Recompensa
19
6
Repostar
Compartilhar
Comentário
0/400
WalletManager
· 08-01 21:48
O controle de permissões deve ser mais rigoroso.
Ver originalResponder0
HashBrownies
· 08-01 05:29
O controle de permissões é realmente incrível.
Ver originalResponder0
GasFeeCrier
· 07-30 19:25
A configuração de permissões deve ser feita com cuidado
Ver originalResponder0
TeaTimeTrader
· 07-30 19:21
O controle de permissões é realmente difícil de lidar.
Controle de permissões de contratos inteligentes Rust: visibilidade de funções e gestão de acesso privilegiado
Controle de permissões em contratos inteligentes Rust
Este artigo irá explorar a questão do controle de permissões em contratos inteligentes Rust sob dois aspectos:
Visibilidade de funções de contratos
No contrato inteligente Rust, o controle da visibilidade das funções é crucial. Tomando como exemplo o incidente de segurança que ocorreu na exchange Bancor Network em 2020, a configuração errada da função de transferência crítica como pública colocou os ativos dos usuários em risco.
Na Rust contratos inteligentes da NEAR, a visibilidade das funções é principalmente das seguintes formas:
Além disso, definir a função em um bloco impl que não é decorado com #[near_bindgen] também pode torná-la uma função interna.
Para a função de retorno, deve ser definida como pública, mas ao mesmo tempo deve ser restringida para que só possa ser chamada pelo próprio contrato. Pode-se usar a macro #[private] para implementar isso.
É importante notar que, por padrão, tudo em Rust é privado, exceto os itens em pub Trait e pub Enum.
Controle de Acesso às Funções Privilegiadas
Além da visibilidade da função, é necessário estabelecer um mecanismo de controle de acesso completo a partir da perspectiva semântica. Semelhante ao modificador onlyOwner em Solidity, podemos definir um trait semelhante em Rust:
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); }
Usar esse tipo de trait pode implementar o controle de acesso a funções privilegiadas, garantindo que apenas o proprietário do contrato possa chamar essas funções.
Com base neste princípio, podemos implementar um controle de acesso refinado para múltiplos utilizadores na lista branca ou múltiplos grupos de listas brancas através da personalização de traits mais complexos.
Além disso, também é possível implementar controle do momento da chamada, mecanismos de múltiplas assinaturas e outros métodos de controle de acesso para atender às necessidades de segurança em diferentes cenários.