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

robot
Geração de resumo em curso

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-1.62%
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
  • 5
  • Partilhar
Comentar
0/400
NFTArchaeologistvip
· 6h atrás
A atualização é a única verdade.
Ver originalResponder0
HappyToBeDumpedvip
· 23h atrás
Atualizar é igual a corrigir vulnerabilidades
Ver originalResponder0
NftBankruptcyClubvip
· 23h atrás
Sem mais delongas, é hora de agir.
Ver originalResponder0
NFTHoardervip
· 23h atrás
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
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)