Estratégia de atualização de contratos inteligentes Rust: garantir segurança e manutenibilidade

Plano de atualização de contratos inteligentes Rust detalhado

Os contratos inteligentes são essencialmente programas e, inevitavelmente, podem conter falhas. Mesmo após extensos testes e auditorias, podem surgir 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 é extremamente necessária, principalmente para correção de falhas e adição de novas funcionalidades. Este artigo irá apresentar as formas comuns de atualização de contratos Rust.

Proposta de atualização de contratos Ethereum

Os contratos inteligentes do Ethereum possuem imutabilidade, não podem ser modificados após a implantação. Para resolver vulnerabilidades ou adicionar novas funcionalidades, uma prática comum é implantar um novo contrato. No entanto, isso leva a uma mudança de endereço do contrato, sendo necessário modificar todos os DApps que utilizam esse contrato. Além disso, também é necessário migrar os dados de estado do contrato antigo, o que é trabalhoso e propenso a erros.

Para isso, geralmente é adotada uma arquitetura de separação de dados e lógica: os dados são armazenados em contratos de estado, e toda a lógica é implementada em outro contrato lógico. Durante a atualização, é necessário apenas atualizar o contrato lógico, sem necessidade de migrar os dados de estado.

Na implementação específica, pode-se usar o contrato proxy (Proxy Contract). O contrato proxy armazena dados e chama o contrato lógico A através do deleGatecall. Durante a atualização, basta implantar um novo contrato lógico B e, em seguida, fazer com que o contrato proxy aponte para B.

Plano de atualização do contrato NEAR

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

estrutura de dados do contrato não foi modificada

Se apenas modificar a lógica do contrato, sem envolver mudanças na estrutura de dados, pode simplesmente usar near deploy para reimplantar o novo código. Os dados existentes ainda podem ser acessados normalmente.

A estrutura de dados do contrato foi alterada

Se a estrutura de dados do contrato for alterada, a reimplantação direta fará com que a nova e a antiga estrutura de dados não correspondam, impossibilitando o acesso normal aos dados.

usar o método Migrate para atualizar

A NEAR fornece o método Migrate para ajudar a atualizar contratos. Adicione o método migrate ao 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)((, } }

Chamar o método migrate ao implantar:

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

Desta forma, é possível migrar com sucesso os dados do contrato antigo para a nova estrutura.

![])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: a função de atualização deve ser uma função only owner, podendo ser chamada apenas pelo owner.

  2. Recomenda-se definir o owner como DAO, gerindo o contrato através de propostas e votações.

  3. Adicione #[init(ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.

  4. Após a migração, exclua a função de migração, garantindo que seja chamada apenas uma vez.

  5. A nova estrutura de dados é inicializada durante a migração.

A utilização razoável dessas soluções de atualização pode permitir a atualização e manutenção flexíveis dos contratos inteligentes, garantindo ao mesmo tempo a segurança.

ETH-2.06%
INIT-0.37%
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
  • 7
  • Compartilhar
Comentário
0/400
NFTArtisanHQvip
· 21h atrás
visão interessante... mas o padrão proxy não é exatamente o readymade de duchamp em forma de código, para ser sincero
Ver originalResponder0
rugdoc.ethvip
· 07-24 10:17
O Rystar ainda é um pouco problemático.
Ver originalResponder0
Hash_Banditvip
· 07-23 14:51
estive lá quando o btc foi minerado em portáteis... a capacidade de upgrade é fundamental, mas arriscada de facto
Ver originalResponder0
AllTalkLongTradervip
· 07-21 20:52
Está a falar de uma atualização novamente. Se me perguntarem, a opção mais segura ainda é desligar temporariamente e reabrir.
Ver originalResponder0
TestnetFreeloadervip
· 07-21 20:51
Os bugs devem ser aproveitados enquanto são novos! Aproveite uma onda.
Ver originalResponder0
ApeEscapeArtistvip
· 07-21 20:50
As falhas nunca acabam, é melhor não ter grandes esperanças.
Ver originalResponder0
GasWhisperervip
· 07-21 20:24
para ser honesto, contratos inteligentes são apenas bugs à espera de acontecer... a correspondência de padrões não te salvará de explorações, lmao
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)