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:
Corrigir vulnerabilidades de segurança
Adicionar novas funcionalidades
Otimizar o desempenho dos contratos inteligentes
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:
Considerações de segurança na atualização de contratos
Controle de permissões - Apenas permite que desenvolvedores ou DAO atualizem contratos
Recomenda-se definir o proprietário do contrato como DAO, gerenciado por propostas e votações.
A função de migração usa #[init(ignore_state)]
Após a migração, elimine a função de migração
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.
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.
13 gostos
Recompensa
13
4
Partilhar
Comentar
0/400
Anon4461
· 07-14 08:32
Quem consegue aguentar isso~
Ver originalResponder0
rekt_but_not_broke
· 07-14 08:22
O near também foi atualizado?
Ver originalResponder0
LightningPacketLoss
· 07-14 08:20
Depois de dois anos a programar em Rust, agora estou a aventurar-me no Web3!
Ver originalResponder0
MidnightMEVeater
· 07-14 08:18
A máquina de guilhotina nem se atreve a fazer as pessoas de parvas. Os desenvolvedores ainda voltarão?
Detalhes sobre a atualização de contratos inteligentes Rust: Guia de atualização de segurança da plataforma NEAR
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:
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
Controle de permissões - Apenas permite que desenvolvedores ou DAO atualizem contratos
Recomenda-se definir o proprietário do contrato como DAO, gerenciado por propostas e votações.
A função de migração usa #[init(ignore_state)]
Após a migração, elimine a função de migração
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.