Controle de permissões em contratos inteligentes Rust
Este artigo apresentará o controle de permissões em contratos inteligentes Rust de duas perspectivas:
Visibilidade dos métodos do contrato
Controle de acesso da função de privilégio
1. Visibilidade das funções do contrato
No desenvolvimento de contratos inteligentes, é crucial definir corretamente a visibilidade das funções. Tomando como exemplo o incidente de segurança da Bancor Network em 18 de junho de 2020, a definição errada da função de transferência crítica como pública expôs os ativos dos usuários a riscos.
Na Rust, o controle de visibilidade das funções em contratos inteligentes é igualmente importante. O macro #[near_bindgen] no NEAR SDK define os seguintes tipos de visibilidade:
pub fn: função pública, pode ser chamada a partir de fora do contrato
fn: apenas pode ser chamado dentro do contrato
pub(crate) fn: restringir a chamada dentro do crate
Outra forma de definir o método internal é definir um bloco de código impl Contract separado, sem usar a anotação #[near_bindgen].
Para a função de retorno, é necessário defini-la como pública, mas ao mesmo tempo limitar a chamada apenas pelo próprio contrato. Pode-se usar a macro #[private] para alcançar esse objetivo.
É importante 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 controle de acesso em lista branca. Semelhante ao modificador onlyOwner no Solidity, contratos em Rust também podem implementar um Trait personalizado para controlar o acesso a funções privilegiadas:
Dessa forma, é possível restringir que apenas o owner possa chamar certas funções privilegiadas. Com base nesse princípio, é possível configurar listas de permissões mais complexas e controle de acesso em grupos.
3. Outros métodos de controlo de acesso
Existem também outros métodos de controle de acesso, como o controle do momento da chamada do contrato, o mecanismo de chamada multi-assinatura, a implementação de DAO, entre outros, que serão apresentados em detalhes em artigos futuros.
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
4
Compartilhar
Comentário
0/400
MetaNomad
· 08-04 05:07
rust novato pergunta qual é mais seguro?
Ver originalResponder0
NftPhilanthropist
· 08-04 05:02
*suspiro* mais um problema de segurança porque alguém esqueceu permissões básicas... quando é que os desenvolvedores vão aprender a cunhar com atenção smh
Ver originalResponder0
BearMarketGardener
· 08-04 04:57
Se a gestão de permissões falhar, tudo estará perdido.
Ver originalResponder0
RuntimeError
· 08-04 04:45
Controlo de permissões não é padrão, venha Debug de joelhos.
Controle de acesso de contratos inteligentes Rust: visibilidade de funções e gestão de acesso privilegiado
Controle de permissões em contratos inteligentes Rust
Este artigo apresentará o controle de permissões em contratos inteligentes Rust de duas perspectivas:
1. Visibilidade das funções do contrato
No desenvolvimento de contratos inteligentes, é crucial definir corretamente a visibilidade das funções. Tomando como exemplo o incidente de segurança da Bancor Network em 18 de junho de 2020, a definição errada da função de transferência crítica como pública expôs os ativos dos usuários a riscos.
Na Rust, o controle de visibilidade das funções em contratos inteligentes é igualmente importante. O macro #[near_bindgen] no NEAR SDK define os seguintes tipos de visibilidade:
Outra forma de definir o método internal é definir um bloco de código impl Contract separado, sem usar a anotação #[near_bindgen].
Para a função de retorno, é necessário defini-la como pública, mas ao mesmo tempo limitar a chamada apenas pelo próprio contrato. Pode-se usar a macro #[private] para alcançar esse objetivo.
É importante 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 controle de acesso em lista branca. Semelhante ao modificador onlyOwner no Solidity, contratos em Rust também podem implementar um Trait personalizado para controlar o acesso a funções privilegiadas:
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 restringir que apenas o owner possa chamar certas funções privilegiadas. Com base nesse princípio, é possível configurar listas de permissões mais complexas e controle de acesso em grupos.
3. Outros métodos de controlo de acesso
Existem também outros métodos de controle de acesso, como o controle do momento da chamada do contrato, o mecanismo de chamada multi-assinatura, a implementação de DAO, entre outros, que serão apresentados em detalhes em artigos futuros.