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

robot
Geração de resumo em curso

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-0.56%
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
  • 4
  • Partilhar
Comentar
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
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)