Atualização de contratos inteligentes Rust: garantir segurança e escalabilidade

robot
Geração do resumo em andamento

Diário de Desenvolvimento de Contratos Inteligentes Rust (9): Atualização de Contrato

Contratos inteligentes são essencialmente programas e, inevitavelmente, podem conter defeitos. Mesmo após extensos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez que sejam exploradas por atacantes, podem resultar em perdas de ativos dos usuários, com consequências graves. Portanto, a capacidade de atualização dos contratos é extremamente necessária, e este artigo apresentará as formas de atualização de contratos Rust.

1. A necessidade de atualização de contratos

Contratos inteligentes como programas, inevitavelmente, possuem defeitos. A correção de vulnerabilidades e a adição de novas funcionalidades precisam ser realizadas através da atualização do contrato.

2. Formas comuns de atualização de contratos Solidity

Os contratos inteligentes do Ethereum possuem imutabilidade, não podem ser alterados após a implantação. A solução é implantar um novo contrato, mas enfrenta desafios como a mudança de endereço e a migração de estado. Normalmente, adota-se uma arquitetura de contrato proxy com separação de dados e lógica, atualizando apenas o contrato lógico, sem se preocupar com a migração de estado.

3. Método de atualização de contratos inteligentes NEAR

Usando o projeto StatusMessage como exemplo, apresentamos o método de atualização dos contratos NEAR:

3.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 near deploy para reimplantar o novo código. Os dados originais ainda podem ser lidos normalmente.

3.2 Estrutura de dados de contratos inteligentes foi modificada

Se a estrutura de dados for modificada, a reimplantação direta fará com que a nova e a antiga estrutura de dados não correspondam, impossibilitando a leitura dos dados originais.

3.3 Usar o método Migrate para atualizar

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

A migração de dados pode ser concluída chamando o método migrate durante a implantação.

4. Considerações de segurança sobre a atualização de contratos

  • Atualização do controle de permissões, geralmente só pode ser feita pelos desenvolvedores ou pela DAO.
  • Recomenda-se definir o owner do contrato como DAO, gerindo através de propostas e votos.
  • Adicione #[init)ignore_state)] antes da função de migração
  • Eliminar a função de migração após a migração estar concluída
  • Nova estrutura de dados concluída a inicialização durante a migração

A atualização de contratos é um meio importante para garantir a segurança e a iteração de funcionalidades dos contratos, necessitando de um design e implementação cuidadosos.

INIT-4.28%
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
SandwichTradervip
· 19h atrás
Continuar a copiar os trabalhos de casa? Já trocaram o contrato e começaram a jogar novamente.
Ver originalResponder0
BoredRiceBallvip
· 19h atrás
Confiável, teste antes de usar
Ver originalResponder0
SigmaValidatorvip
· 19h atrás
Alguém atacou os meus contratos inteligentes!
Ver originalResponder0
BoredApeResistancevip
· 19h atrás
A agência tem uma nova forma de jogar.
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)