Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança do Contrato em Relação à Precisão dos Cálculos
Este artigo irá abordar o controlo de permissões em contratos inteligentes Rust sob duas perspetivas:
A visibilidade de acesso/chamadas de métodos de contratos
Controle de acesso de funções privilegiadas/divisão de responsabilidades
1. Visibilidade das funções de contratos
Definir corretamente a visibilidade das funções do contrato é crucial para proteger a segurança do contrato. Como exemplo, o incidente de segurança que ocorreu na exchange Bancor Network em 18 de junho de 2020, onde a configuração incorreta da função de transferência crítica como public resultou em sérios riscos para os ativos dos usuários.
Em contratos inteligentes Rust, a visibilidade das funções é principalmente das seguintes maneiras:
pub fn: função pública, qualquer pessoa pode chamar a partir do exterior do contrato
fn: privado por padrão, só pode ser chamado dentro do contrato
pub(crate) fn: restringir chamadas internas no crate
Além disso, é possível implementar métodos internos definindo um bloco impl sem #[near_bindgen].
Para funções de retorno, devem ser definidas como públicas, mas precisam de controle de acesso adicional:
ferrugem
#[private]
pub fn resolve_transfer(&mut self) {
env::log_str("Este é um callback");
}
2. Controle de Acesso a Funções Privilegiadas
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso. É possível personalizar um Trait para implementar um efeito semelhante ao modificador onlyOwner no Solidity:
Dessa forma, é possível restringir que apenas o owner possa chamar certas funções privilegiadas. Com base nisso, podem ser configuradas listas de permissões multiusuário mais complexas ou várias listas de permissões, implementando um controle de acesso mais refinado.
No Rust, existem outros métodos de controle de acesso em contratos inteligentes, como controle de tempo de chamada, mecanismos de múltiplas assinaturas, etc., que serão apresentados em artigos futuros.
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.
14 gostos
Recompensa
14
2
Partilhar
Comentar
0/400
DAOdreamer
· 07-23 12:21
A revisão da lista de permissões deve ser rigorosa
Rust contratos inteligentes segurança: práticas de visibilidade de funções e controle de acesso
Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança do Contrato em Relação à Precisão dos Cálculos
Este artigo irá abordar o controlo de permissões em contratos inteligentes Rust sob duas perspetivas:
1. Visibilidade das funções de contratos
Definir corretamente a visibilidade das funções do contrato é crucial para proteger a segurança do contrato. Como exemplo, o incidente de segurança que ocorreu na exchange Bancor Network em 18 de junho de 2020, onde a configuração incorreta da função de transferência crítica como public resultou em sérios riscos para os ativos dos usuários.
Em contratos inteligentes Rust, a visibilidade das funções é principalmente das seguintes maneiras:
Além disso, é possível implementar métodos internos definindo um bloco impl sem #[near_bindgen].
Para funções de retorno, devem ser definidas como públicas, mas precisam de controle de acesso adicional:
ferrugem #[private] pub fn resolve_transfer(&mut self) { env::log_str("Este é um callback"); }
2. Controle de Acesso a Funções Privilegiadas
Além da visibilidade das funções, é necessário estabelecer um mecanismo completo de lista branca de controle de acesso. É possível personalizar um Trait para implementar um efeito semelhante ao modificador onlyOwner no 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); }
Dessa forma, é possível restringir que apenas o owner possa chamar certas funções privilegiadas. Com base nisso, podem ser configuradas listas de permissões multiusuário mais complexas ou várias listas de permissões, implementando um controle de acesso mais refinado.
No Rust, existem outros métodos de controle de acesso em contratos inteligentes, como controle de tempo de chamada, mecanismos de múltiplas assinaturas, etc., que serão apresentados em artigos futuros.