Dicas de atualização de contratos inteligentes Rust: melhores práticas de Ethereum para NEAR

robot
Geração de resumo em curso

Diário de Desenvolvimento de Contratos Inteligentes Rust (9): Segurança de Contratos na Atualização de Contratos

Os contratos inteligentes, como uma forma de código de programa, inevitavelmente podem apresentar falhas e vulnerabilidades. Mesmo contratos que foram amplamente testados e auditados podem ter problemas não detectados. Uma vez que esses problemas potenciais sejam explorados, podem causar sérias consequências, como a perda de ativos dos usuários. Portanto, a capacidade de atualização dos contratos é extremamente importante para corrigir vulnerabilidades e adicionar novas funcionalidades. Este artigo irá apresentar os métodos de atualização de contratos Rust na plataforma NEAR.

1. A necessidade de atualização dos contratos

Os contratos inteligentes são essencialmente código de programa e, inevitavelmente, podem conter falhas. Mesmo após extensos testes e auditorias, ainda podem existir vulnerabilidades. Se essas vulnerabilidades forem exploradas por atacantes, podem causar sérias consequências, como a perda de ativos dos usuários. A correção de falhas geralmente requer uma atualização do contrato. Além disso, a adição de novas funcionalidades também exige a atualização do contrato. Portanto, a capacidade de atualização do contrato é extremamente necessária.

2. Formas comuns de atualização de contratos Ethereum

Os contratos inteligentes na Ethereum têm imutabilidade, uma vez implantados não podem ser modificados. Para resolver esse problema, normalmente se utiliza a abordagem de contratos proxy (Proxy Contract):

  • Os contratos de delegação são usados para armazenar dados e chamar contratos lógicos usando deleGatecall.
  • contratos inteligentes contêm lógica de negócios específica
  • Durante a atualização, basta implementar um novo contrato lógico e atualizar o contrato de proxy para que aponte.

Dessa forma, os dados originais podem ser mantidos, atualizando apenas a parte lógica.

3. Método de atualização dos contratos inteligentes NEAR

Segue-se um exemplo do projeto StatusMessage para apresentar o método de atualização de contratos NEAR:

3.1 A estrutura de dados do contrato não foi modificada

Se apenas modificar a lógica do contrato, sem envolver alterações na estrutura de dados, pode usar diretamente o comando near deploy para reimplantar o novo código. Os dados originais serão mantidos.

3.2 A estrutura de dados do contrato foi modificada

Se a estrutura de dados do contrato for alterada, a reimplementação direta resultará em uma incompatibilidade entre as estruturas de dados antiga e nova, impossibilitando a leitura normal dos dados existentes.

3.3 Usar o método Migrate para atualizar

A NEAR oferece o método Migrate para atualização de contratos. Adicione a função migrate no novo contrato:

ferrugem #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { taglines: old_state.records, bios: LookupMap::new(b"b".to_vec)((, } }

Chamar o método migrate durante a implantação:

perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

Dessa forma, a migração de dados pode ser concluída, mesmo que a estrutura de dados dos contratos antigos e novos seja inconsistente, a atualização pode ocorrer normalmente.

4. Considerações de segurança sobre a atualização de contratos

A atualização do contrato precisa considerar os seguintes fatores de segurança:

  • Controle rigoroso das permissões de atualização, permitindo apenas que desenvolvedores ou DAO realizem atualizações.
  • Recomenda-se definir o proprietário do contrato como DAO, gerindo através de propostas e votações.
  • Adicione #[init)ignore_state)] antes da função migrate
  • Após a migração, remova a função migrate, garantindo que seja chamada apenas uma vez
  • Nova estrutura de dados concluída a inicialização durante a migração

Com essas medidas, é possível garantir a segurança da atualização dos contratos, reduzindo os riscos durante o processo de atualização.

Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 5
  • Partilhar
Comentar
0/400
liquiditea_sippervip
· 20h atrás
Parece tão forte, mas ainda tenho medo de tentar.
Ver originalResponder0
NeverVoteOnDAOvip
· 20h atrás
A atualização é confiável? Sempre sinto que não fica limpo.
Ver originalResponder0
BrokenDAOvip
· 20h atrás
Permissão é igual a uma porta dos fundos, como podemos falar de segurança?
Ver originalResponder0
LayerZeroHerovip
· 20h atrás
Uma vez que a atualização esteja concluída, não há deus que possa controlar.
Ver originalResponder0
ser_ngmivip
· 21h atrás
teto do contrato rug
Ver originalResponder0
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)