Controle de permissões em contratos inteligentes Rust
Este artigo abordará o controle de permissões em contratos inteligentes Rust de duas maneiras:
Visibilidade dos métodos do contrato
Controle de acesso da função de privilégio
1. Visibilidade de funções de contratos
No contrato inteligente Rust, o controle de visibilidade das funções é muito importante. Tomando como exemplo o incidente de segurança da bolsa Bancor Network em junho de 2020, a definição errada da função de transferência crítica como pública levou a riscos para os ativos dos usuários.
Em contratos inteligentes Rust, a visibilidade das funções pode ser das seguintes formas:
pub fn: função pública, pode ser chamada de fora do contrato
fn: apenas chamável internamente no contrato
pub(crate) fn: apenas pode ser chamado dentro de crate
Também é possível implementar funções internas definindo métodos em blocos impl que não são decorados com #[near_bindgen].
Para funções de callback, é necessário definir como public, mas ao mesmo tempo garantir que só possam ser chamadas pelo próprio contrato. Pode-se usar o macro #[private] para implementar isso.
É importante notar que, por padrão, tudo em Rust é privado, o que é diferente do público padrão em algumas versões antigas do Solidity.
2. Controle de acesso das 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 modificador onlyOwner em Solidity, podemos implementar um Trait personalizado em Rust:
Desta forma, só o owner pode chamar certas funções de privilégio.
Com base neste princípio, é possível configurar listas de permissões mais complexas para implementar um controle de acesso em grupos mais refinado.
Mais métodos de controle de acesso, como controle de tempo de chamada e mecanismos de múltiplas assinaturas, serão apresentados em artigos posteriores.
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.
10 gostos
Recompensa
10
5
Republicar
Partilhar
Comentar
0/400
Rugman_Walking
· 08-09 05:50
É mais uma armadilha do Bancor, quase perdi tudo.
Ver originalResponder0
TokenToaster
· 08-07 12:36
bancor é realmente um exemplo de falta de inteligência
Ver originalResponder0
MevTears
· 08-06 06:28
bancor eu já vi isso, realmente é fraco
Ver originalResponder0
OnlyOnMainnet
· 08-06 06:26
Uau, ainda tenho medo do que aconteceu com o Bancor.
Ver originalResponder0
0xLuckbox
· 08-06 06:18
Por que é que há sempre pessoas a confundir as configurações de permissões?
Controle de permissões em contratos inteligentes Rust: visibilidade de funções de contrato e acesso privilegiado
Controle de permissões em contratos inteligentes Rust
Este artigo abordará o controle de permissões em contratos inteligentes Rust de duas maneiras:
1. Visibilidade de funções de contratos
No contrato inteligente Rust, o controle de visibilidade das funções é muito importante. Tomando como exemplo o incidente de segurança da bolsa Bancor Network em junho de 2020, a definição errada da função de transferência crítica como pública levou a riscos para os ativos dos usuários.
Em contratos inteligentes Rust, a visibilidade das funções pode ser das seguintes formas:
Também é possível implementar funções internas definindo métodos em blocos impl que não são decorados com #[near_bindgen].
Para funções de callback, é necessário definir como public, mas ao mesmo tempo garantir que só possam ser chamadas pelo próprio contrato. Pode-se usar o macro #[private] para implementar isso.
É importante notar que, por padrão, tudo em Rust é privado, o que é diferente do público padrão em algumas versões antigas do Solidity.
2. Controle de acesso das 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 modificador onlyOwner em Solidity, podemos implementar um Trait personalizado 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); }
Desta forma, só o owner pode chamar certas funções de privilégio.
Com base neste princípio, é possível configurar listas de permissões mais complexas para implementar um controle de acesso em grupos mais refinado.
Mais métodos de controle de acesso, como controle de tempo de chamada e mecanismos de múltiplas assinaturas, serão apresentados em artigos posteriores.