Guia de Atualização de Contratos Inteligentes Rust
Contratos inteligentes, como um tipo de programa, inevitavelmente podem apresentar falhas. Mesmo após muitos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez que uma vulnerabilidade é explorada, pode causar sérias consequências, como a perda de ativos dos usuários. Portanto, a capacidade de atualização do contrato é muito importante, principalmente para corrigir vulnerabilidades e adicionar novas funcionalidades.
Método de atualização de contratos NEAR
Usando o projeto StatusMessage como exemplo, introduzirei os métodos comuns de atualização de contratos NEAR.
1. A estrutura de dados do contrato não foi 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 redeployar o novo código. Os dados do contrato original ainda podem ser lidos normalmente.
2. A estrutura de dados do contrato foi modificada
Se a estrutura de dados do contrato for alterada, a nova implementação direta pode resultar em uma incompatibilidade entre a nova estrutura de dados e o estado antigo, levando a erros.
3. Usar o método Migrate para atualizar
NEAR fornece o método Migrate para ajudar a atualizar contratos. Adicione o método migrate ao novo contrato:
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.
16 Curtidas
Recompensa
16
5
Compartilhar
Comentário
0/400
DAOTruant
· 2h atrás
Se deve ou não migrar os dados depende do humor.
Ver originalResponder0
0xSherlock
· 07-25 08:10
Olhar para isso dá uma dor de cabeça, não consigo estudar.
Ver originalResponder0
MEVHunterLucky
· 07-25 08:10
Para ser honesto, não há código disponível. Como é que eu aprendo?
Guia de atualização de contratos inteligentes Rust: Práticas de migração seguras na plataforma NEAR
Guia de Atualização de Contratos Inteligentes Rust
Contratos inteligentes, como um tipo de programa, inevitavelmente podem apresentar falhas. Mesmo após muitos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez que uma vulnerabilidade é explorada, pode causar sérias consequências, como a perda de ativos dos usuários. Portanto, a capacidade de atualização do contrato é muito importante, principalmente para corrigir vulnerabilidades e adicionar novas funcionalidades.
Método de atualização de contratos NEAR
Usando o projeto StatusMessage como exemplo, introduzirei os métodos comuns de atualização de contratos NEAR.
1. A estrutura de dados do contrato não foi 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 redeployar o novo código. Os dados do contrato original ainda podem ser lidos normalmente.
2. A estrutura de dados do contrato foi modificada
Se a estrutura de dados do contrato for alterada, a nova implementação direta pode resultar em uma incompatibilidade entre a nova estrutura de dados e o estado antigo, levando a erros.
3. Usar o método Migrate para atualizar
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 reimplantar:
perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet
Dessa forma, é possível implantar novos contratos e migrar dados antigos.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Considerações de segurança sobre a atualização de contratos
A função de atualização deve ter controle de permissões, geralmente só pode ser chamada por desenvolvedores ou DAO.
Sugere-se que o proprietário do contrato seja definido como DAO, gerido em conjunto através de propostas e votações.
Adicione #[init(ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.
Após a migração, elimine a função de migração, garantindo que seja chamada apenas uma vez.
A nova estrutura de dados é inicializada durante a migração.
Um mecanismo de atualização razoável pode proporcionar flexibilidade e manutenibilidade aos contratos, garantindo a segurança.