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

robot
Geração de resumo em curso

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.

INIT3.09%
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.
  • Recompensa
  • 6
  • Partilhar
Comentar
0/400
SignatureAnxietyvip
· 19h atrás
a situação atual dos jogadores está gg
Ver originalResponder0
DAOTruantvip
· 07-27 00:44
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
  • 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)