Este artigo irá explorar a questão do controle de acesso em contratos inteligentes Rust sob dois aspectos: a visibilidade dos métodos do contrato e o controle de acesso às funções privilegiadas.
1. Visibilidade das funções de contratos
Ao escrever contratos inteligentes, a visibilidade das funções pode ser especificada para controlar quem pode chamar funções específicas, protegendo assim partes críticas do contrato.
Como exemplo, considere o incidente de segurança que ocorreu em uma exchange em 18 de junho de 2020. Devido a uma configuração incorreta das permissões de acesso das funções críticas do contrato, os ativos dos usuários ficaram em risco. Este caso destaca a importância de configurar corretamente a visibilidade das funções do contrato.
Na Rust, a visibilidade das funções em contratos inteligentes é principalmente das seguintes formas:
pub fn: indica que este método é público, faz parte da interface do contrato e pode ser chamado por qualquer pessoa de fora.
fn: Se não for explicitamente indicado pub, significa que essa função só pode ser chamada por outras funções dentro do contrato.
pub(crate) fn: Restringir o método para ser chamado dentro do escopo do crate.
Outra maneira de definir o método como interno é definir no bloco de código impl Contract que não é decorado com #[near_bindgen].
Para a função de callback, deve ser definido como uma propriedade pública para que possa ser chamado através de function call. Além disso, é necessário garantir que a função de callback não possa ser chamada aleatoriamente, podendo usar o macro #[private] para implementar isso.
É importante notar que, por padrão, tudo em Rust é privado, exceto os sub-itens em pub Trait e as variáveis em pub Enum, que são públicas por padrão.
2. Controle de acesso das funções privilegiadas
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso do ponto de vista semântico. Algumas funções privilegiadas (como inicialização do contrato, ativação/desativação, etc.) só podem ser chamadas pelo proprietário do contrato.
Em contratos inteligentes Rust, é possível implementar uma funcionalidade semelhante ao modificador onlyOwner do Solidity:
Usar este método permite implementar o controle de acesso a funções privilegiadas, garantindo que apenas o proprietário do contrato possa executar completamente essas funções. Com base neste princípio, é possível estabelecer mecanismos de lista branca mais complexos, permitindo um controle de acesso em grupos mais refinado.
3. Outros métodos de controle de acesso
Além dos métodos mencionados, existem outras formas de controle de acesso em contratos inteligentes Rust, como controle do momento da chamada do contrato, mecanismo de chamadas multi-assinatura e a implementação de governança (DAO), entre outros. Estes conteúdos serão discutidos em detalhes em artigos futuros.
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
4
Partilhar
Comentar
0/400
ProxyCollector
· 2h atrás
Mais uma armadilha de configuração de permissões. Quem cai nela, azar!
Ver originalResponder0
SelfRugger
· 15h atrás
Mais uma vez, é um problema de permissão.
Ver originalResponder0
AllTalkLongTrader
· 15h atrás
Hehe, já vi aquele buraco da bolsa do ano passado novamente
Controle de acesso a contratos inteligentes Rust: visibilidade de funções e práticas de acesso privilegiado
Controle de Acesso em contratos inteligentes Rust
Este artigo irá explorar a questão do controle de acesso em contratos inteligentes Rust sob dois aspectos: a visibilidade dos métodos do contrato e o controle de acesso às funções privilegiadas.
1. Visibilidade das funções de contratos
Ao escrever contratos inteligentes, a visibilidade das funções pode ser especificada para controlar quem pode chamar funções específicas, protegendo assim partes críticas do contrato.
Como exemplo, considere o incidente de segurança que ocorreu em uma exchange em 18 de junho de 2020. Devido a uma configuração incorreta das permissões de acesso das funções críticas do contrato, os ativos dos usuários ficaram em risco. Este caso destaca a importância de configurar corretamente a visibilidade das funções do contrato.
Na Rust, a visibilidade das funções em contratos inteligentes é principalmente das seguintes formas:
Outra maneira de definir o método como interno é definir no bloco de código impl Contract que não é decorado com #[near_bindgen].
Para a função de callback, deve ser definido como uma propriedade pública para que possa ser chamado através de function call. Além disso, é necessário garantir que a função de callback não possa ser chamada aleatoriamente, podendo usar o macro #[private] para implementar isso.
É importante notar que, por padrão, tudo em Rust é privado, exceto os sub-itens em pub Trait e as variáveis em pub Enum, que são públicas por padrão.
2. Controle de acesso das funções privilegiadas
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso do ponto de vista semântico. Algumas funções privilegiadas (como inicialização do contrato, ativação/desativação, etc.) só podem ser chamadas pelo proprietário do contrato.
Em contratos inteligentes Rust, é possível implementar uma funcionalidade semelhante ao modificador onlyOwner do Solidity:
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 este método permite implementar o controle de acesso a funções privilegiadas, garantindo que apenas o proprietário do contrato possa executar completamente essas funções. Com base neste princípio, é possível estabelecer mecanismos de lista branca mais complexos, permitindo um controle de acesso em grupos mais refinado.
3. Outros métodos de controle de acesso
Além dos métodos mencionados, existem outras formas de controle de acesso em contratos inteligentes Rust, como controle do momento da chamada do contrato, mecanismo de chamadas multi-assinatura e a implementação de governança (DAO), entre outros. Estes conteúdos serão discutidos em detalhes em artigos futuros.