Detalhes sobre a atualização de contratos inteligentes Rust: Guia de atualização de segurança da plataforma NEAR

robot
Geração do resumo em andamento

Métodos de Atualização de Contratos Inteligentes em Rust

Contratos inteligentes são essencialmente programas e, inevitavelmente, podem ter falhas. Mesmo contratos inteligentes que passaram por muitos testes e auditorias ainda podem ter vulnerabilidades. Uma vez exploradas por atacantes, isso pode resultar em perdas de ativos para os usuários, com consequências graves. Portanto, a capacidade de atualização dos contratos é muito importante. Este artigo apresentará os métodos de atualização de contratos Rust.

A Necessidade de Upgrade de Contratos

A correção de vulnerabilidades e a adição de novas características aos contratos inteligentes geralmente precisam ser realizadas através da atualização do contrato. As principais razões são:

  1. Corrigir vulnerabilidades de segurança
  2. Adicionar novas funcionalidades
  3. Otimizar o desempenho dos contratos inteligentes
  4. Adaptar-se às novas necessidades de negócios

Método de atualização do contrato NEAR

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

1. Estrutura de dados do contrato não 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 reimplantar o novo código. Os dados originais ainda podem ser acessados normalmente.

2. A estrutura de dados do contrato foi modificada

Se a estrutura de dados do contrato for alterada, a nova implementação direta resultará em uma incompatibilidade entre a nova estrutura de dados e o estado antigo, causando um erro de deserialização.

3. Usar o método Migrate para atualizar

A NEAR fornece o método Migrate para ajudar na atualização de contratos. Adicione 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)((, } }

Chame o método migrate ao implantar:

near implementar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

Dessa forma, é possível migrar com sucesso os dados antigos para a nova estrutura de contratos.

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

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

  1. Controle de permissões - Apenas permite que desenvolvedores ou DAO atualizem contratos

  2. Recomenda-se definir o proprietário do contrato como DAO, gerenciado por propostas e votações.

  3. A função de migração usa #[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.

A atualização de contratos é um processo complexo que requer atenção cuidadosa a cada detalhe, garantindo a segurança dos dados e a continuidade dos negócios.

NEAR-1.26%
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
  • 4
  • Compartilhar
Comentário
0/400
Anon4461vip
· 07-14 08:32
Quem consegue aguentar isso~
Ver originalResponder0
rekt_but_not_brokevip
· 07-14 08:22
O near também foi atualizado?
Ver originalResponder0
LightningPacketLossvip
· 07-14 08:20
Depois de dois anos a programar em Rust, agora estou a aventurar-me no Web3!
Ver originalResponder0
MidnightMEVeatervip
· 07-14 08:18
A máquina de guilhotina nem se atreve a fazer as pessoas de parvas. Os desenvolvedores ainda voltarão?
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)