Guia completo para a atualização de contratos inteligentes Rust: das considerações de segurança NEAR

Prática de atualização de contratos inteligentes Rust

Os contratos inteligentes são essencialmente programas, e inevitavelmente existem falhas. Mesmo após muitos testes e auditorias, ainda podem existir vulnerabilidades. As vulnerabilidades dos contratos podem ser atacadas, resultando em perdas de ativos para os usuários, com consequências graves. A correção de vulnerabilidades e a adição de novas funcionalidades exigem a atualização dos contratos. Portanto, a atualizabilidade dos contratos é extremamente necessária. Este artigo apresentará as maneiras de atualizar contratos em Rust.

Método de atualização de contratos inteligentes NEAR

Usando o projeto StatusMessage como exemplo, apresentamos os métodos comuns de atualização de contratos NEAR.

1. Estrutura de dados do contrato não modificada

Se apenas modificar a lógica do contrato, sem envolver alterações na estrutura de dados, pode usar diretamente o near deploy para reimplantar o novo código. Os dados no contrato original podem ser lidos normalmente.

2. A estrutura de dados do contrato foi modificada

Se a estrutura de dados do contrato for modificada, a reimplementação direta resultará em incompatibilidade entre a nova e a antiga estrutura de dados, impossibilitando a leitura dos dados originais.

3. Usar Migrate para atualizar contratos inteligentes

NEAR fornece o método Migrate para ajudar na atualização de contratos. Adicione o método 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)((, } }

Chame o método migrate ao reimplantar:

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

Desta forma, é possível migrar com sucesso os dados do contrato antigo para o novo contrato.

![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)

Considerações de segurança na atualização de contratos

  1. A função de atualização deve ser uma função only owner, garantindo que só possa ser chamada pelo owner.

  2. Recomenda-se definir o proprietário do contrato como DAO, gerindo-o em conjunto através de propostas e votações.

  3. Adicione #[init(ignore_state)] antes da função de migração

  4. Após a migração, eliminar a função de migração

  5. A nova estrutura de dados é inicializada durante a migração

A atualização de contratos é um meio importante para garantir a segurança dos contratos, os desenvolvedores precisam tratar isso com cautela, assegurando a segurança do processo de atualização.

INIT5.31%
Ver original
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.
  • Recompensa
  • 2
  • Repostar
  • Compartilhar
Comentário
0/400
SandwichVictimvip
· 5h atrás
Há tantos buracos que parece assustador.
Ver originalResponder0
BlockImpostervip
· 5h atrás
Se atualizar ou não, não sai do buraco~
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)