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:
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.
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.
10 Curtidas
Recompensa
10
4
Compartilhar
Comentário
0/400
SandwichTrader
· 19h atrás
Continuar a copiar os trabalhos de casa? Já trocaram o contrato e começaram a jogar novamente.
Atualização de contratos inteligentes Rust: garantir segurança e escalabilidade
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
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.