Métodos de atualização de contratos inteligentes Rust e considerações de segurança

robot
Geração do resumo em andamento

Métodos de atualização de contratos inteligentes Rust

A atualização de contratos é uma etapa importante no desenvolvimento de contratos inteligentes. Devido à característica de imutabilidade da blockchain, um contrato inteligente que foi implantado na cadeia não pode ser modificado diretamente. No entanto, na prática, os contratos muitas vezes precisam corrigir falhas ou adicionar novas funcionalidades, o que exige que a atualização seja realizada. Este artigo apresentará os métodos comuns de atualização de contratos inteligentes em Rust.

1. A necessidade de atualização dos contratos

Os contratos inteligentes, como código de programa, inevitavelmente terão vulnerabilidades. Mesmo após muitos testes e auditorias, ainda podem haver problemas não detectados. Uma vez que uma vulnerabilidade é explorada maliciosamente, pode causar perdas significativas de ativos. Portanto, a capacidade de atualização é muito importante para os contratos inteligentes, principalmente para:

  • Corrigir as vulnerabilidades de segurança encontradas
  • Adicionar novas funcionalidades
  • otimizar a lógica dos contratos, melhorar o desempenho

2. Método de atualização de contratos NEAR

A seguir, usando o projeto StatusMessage como exemplo, apresentamos o método de atualização dos contratos NEAR:

2.1 Estrutura de dados do contrato não modificada

Se apenas for necessário modificar a lógica do contrato, sem envolver alterações na estrutura dos dados, pode usar diretamente o comando near deploy para reimplementar o novo código. Exemplo:

bash perto de implantar
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

Neste caso, os dados no contrato original serão mantidos.

2.2 A estrutura de dados do contrato foi modificada

Se a estrutura de dados do contrato for modificada, a nova implantação direta causará um erro de incompatibilidade entre a nova e a antiga estrutura de dados. Nesse caso, é necessário usar um método de migração para fazer a atualização.

Adicionar 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)((, } }

Então, chame o método migrate durante a implantação:

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

Desta forma, os dados antigos podem ser migrados para a nova estrutura de dados.

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

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

Ao realizar a atualização do contrato, é necessário prestar atenção aos seguintes pontos:

  • Controle rigoroso dos privilégios de atualização, permitindo apenas que o proprietário do contrato ou o DAO realize a atualização.
  • Recomenda-se definir o proprietário do contrato como DAO, gerindo a atualização através de propostas e votações.
  • Adicione #[init(ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.
  • Após a migração, exclua a função de migração para evitar chamadas duplicadas
  • A nova estrutura de dados é inicializada durante a migração.

Um plano de atualização bem projetado e executado pode garantir a segurança dos contratos e dos ativos dos usuários, ao mesmo tempo que assegura a capacidade de atualização dos contratos.

INIT-7.86%
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
NFTArchaeologistvip
· 14h atrás
A atualização é a única verdade.
Ver originalResponder0
HappyToBeDumpedvip
· 07-29 02:04
Atualizar é igual a corrigir vulnerabilidades
Ver originalResponder0
NftBankruptcyClubvip
· 07-29 01:53
Sem mais delongas, é hora de agir.
Ver originalResponder0
NFTHoardervip
· 07-29 01:50
De fato, a segurança é o mais importante.
Ver originalResponder0
FundingMartyrvip
· 07-29 01:36
Eu escolho lutar até o fim com as taxas
Ver originalResponder0
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)