Guia de atualização de contratos inteligentes Rust: Práticas de migração seguras na plataforma NEAR

robot
Geração do resumo em andamento

Guia de Atualização de Contratos Inteligentes Rust

Contratos inteligentes, como um tipo de programa, inevitavelmente podem apresentar falhas. Mesmo após muitos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez que uma vulnerabilidade é explorada, pode causar sérias consequências, como a perda de ativos dos usuários. Portanto, a capacidade de atualização do contrato é muito importante, principalmente para corrigir vulnerabilidades e adicionar novas funcionalidades.

Método de atualização de contratos NEAR

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

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 redeployar o novo código. Os dados do contrato original ainda podem ser lidos normalmente.

2. A estrutura de dados do contrato foi modificada

Se a estrutura de dados do contrato for alterada, a nova implementação direta pode resultar em uma incompatibilidade entre a nova estrutura de dados e o estado antigo, levando a erros.

3. Usar o método Migrate para atualizar

NEAR fornece o método Migrate para ajudar a atualizar contratos. Adicione o método migrate ao 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 ao reimplantar:

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

Dessa forma, é possível implantar novos contratos e migrar dados antigos.

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

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

  1. A função de atualização deve ter controle de permissões, geralmente só pode ser chamada por desenvolvedores ou DAO.

  2. Sugere-se que o proprietário do contrato seja definido como DAO, gerido em conjunto através de propostas e votações.

  3. Adicione #[init(ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.

  4. Após a migração, elimine a função de migração, garantindo que seja chamada apenas uma vez.

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

Um mecanismo de atualização razoável pode proporcionar flexibilidade e manutenibilidade aos contratos, garantindo a segurança.

INIT-1.96%
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
  • 5
  • Compartilhar
Comentário
0/400
DAOTruantvip
· 2h atrás
Se deve ou não migrar os dados depende do humor.
Ver originalResponder0
0xSherlockvip
· 07-25 08:10
Olhar para isso dá uma dor de cabeça, não consigo estudar.
Ver originalResponder0
MEVHunterLuckyvip
· 07-25 08:10
Para ser honesto, não há código disponível. Como é que eu aprendo?
Ver originalResponder0
blocksnarkvip
· 07-25 08:10
O mestre NEAR veio ensinar
Ver originalResponder0
rugpull_survivorvip
· 07-25 08:00
Ouço sempre perto de forma estável.
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)