Melhores práticas de atualização de contratos inteligentes Rust: aprendendo com casos de contratos NEAR

Guia de Atualização de Contratos Inteligentes Rust

Os contratos inteligentes, como um tipo de programa, inevitavelmente podem ter falhas. Mesmo após extensos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez exploradas por atacantes, podem resultar em perdas de ativos para os usuários, com consequências graves. Portanto, a capacidade de atualização dos contratos é extremamente necessária, principalmente para corrigir falhas e adicionar novas funcionalidades. Este artigo apresentará os métodos de atualização de contratos Rust.

Método de atualização de contratos NEAR

Usando o projeto StatusMessage como exemplo, introduza 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 near deploy para implantar o novo código:

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

Os dados do contrato original podem ser lidos normalmente.

2. Modificação da estrutura de dados do contrato

Se a estrutura de dados do contrato for modificada, a nova implantação resultará em falha na desserialização do estado. Neste caso, é necessário usar o método migrate para realizar a atualização:

ferrugem #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }

Chamar o método migrate ao implantar:

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

Dessa forma, é possível migrar o estado antigo para o novo contrato.

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

Sugestões de segurança para atualização de contratos

  1. A função de atualização adiciona controle de permissões, permitindo apenas que o owner a chame.
  2. Definir o owner como DAO, gerindo através de propostas e votos.
  3. Função de migração adicionada #[init(ignore_state)]
  4. Após a migração, elimine a função de migração
  5. A nova estrutura de dados é inicializada durante a migração.

Uma atualização razoável pode manter a segurança e a escalabilidade do contrato, sendo uma parte importante do desenvolvimento de contratos inteligentes.

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
  • 3
  • Compartilhar
Comentário
0/400
PumpBeforeRugvip
· 16h atrás
Se não conseguem evitar falhas básicas, que mais podem fazer?
Ver originalResponder0
DegenWhisperervip
· 16h atrás
Não é à toa que é rust, fantástico
Ver originalResponder0
WalletWhisperervip
· 16h atrás
Nova oportunidade chegou, parece interessante.
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)