Métodos de atualização de contratos inteligentes Rust
A atualização de contratos é uma etapa importante no desenvolvimento de contratos inteligentes. Devido à característica de imutabilidade da blockchain, um contrato inteligente que foi implantado na cadeia não pode ser modificado diretamente. No entanto, na prática, os contratos muitas vezes precisam corrigir falhas ou adicionar novas funcionalidades, o que exige que a atualização seja realizada. Este artigo apresentará os métodos comuns de atualização de contratos inteligentes em Rust.
1. A necessidade de atualização dos contratos
Os contratos inteligentes, como código de programa, inevitavelmente terão vulnerabilidades. Mesmo após muitos testes e auditorias, ainda podem haver problemas não detectados. Uma vez que uma vulnerabilidade é explorada maliciosamente, pode causar perdas significativas de ativos. Portanto, a capacidade de atualização é muito importante para os contratos inteligentes, principalmente para:
Corrigir as vulnerabilidades de segurança encontradas
Adicionar novas funcionalidades
otimizar a lógica dos contratos, melhorar o desempenho
2. Método de atualização de contratos NEAR
A seguir, usando o projeto StatusMessage como exemplo, apresentamos o método de atualização dos contratos NEAR:
2.1 Estrutura de dados do contrato não modificada
Se apenas for necessário modificar a lógica do contrato, sem envolver alterações na estrutura dos dados, pode usar diretamente o comando near deploy para reimplementar o novo código. Exemplo:
bash
perto de implantar
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Neste caso, os dados no contrato original serão mantidos.
2.2 A estrutura de dados do contrato foi modificada
Se a estrutura de dados do contrato for modificada, a nova implantação direta causará um erro de incompatibilidade entre a nova e a antiga estrutura de dados. Nesse caso, é necessário usar um método de migração para fazer a atualização.
3. Considerações de segurança sobre a atualização de contratos
Ao realizar a atualização do contrato, é necessário prestar atenção aos seguintes pontos:
Controle rigoroso dos privilégios de atualização, permitindo apenas que o proprietário do contrato ou o DAO realize a atualização.
Recomenda-se definir o proprietário do contrato como DAO, gerindo a atualização 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, exclua a função de migração para evitar chamadas duplicadas
A nova estrutura de dados é inicializada durante a migração.
Um plano de atualização bem projetado e executado pode garantir a segurança dos contratos e dos ativos dos usuários, ao mesmo tempo que assegura a capacidade de atualização dos contratos.
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.
Métodos de atualização de contratos inteligentes Rust e considerações de segurança
Métodos de atualização de contratos inteligentes Rust
A atualização de contratos é uma etapa importante no desenvolvimento de contratos inteligentes. Devido à característica de imutabilidade da blockchain, um contrato inteligente que foi implantado na cadeia não pode ser modificado diretamente. No entanto, na prática, os contratos muitas vezes precisam corrigir falhas ou adicionar novas funcionalidades, o que exige que a atualização seja realizada. Este artigo apresentará os métodos comuns de atualização de contratos inteligentes em Rust.
1. A necessidade de atualização dos contratos
Os contratos inteligentes, como código de programa, inevitavelmente terão vulnerabilidades. Mesmo após muitos testes e auditorias, ainda podem haver problemas não detectados. Uma vez que uma vulnerabilidade é explorada maliciosamente, pode causar perdas significativas de ativos. Portanto, a capacidade de atualização é muito importante para os contratos inteligentes, principalmente para:
2. Método de atualização de contratos NEAR
A seguir, usando o projeto StatusMessage como exemplo, apresentamos o método de atualização dos contratos NEAR:
2.1 Estrutura de dados do contrato não modificada
Se apenas for necessário modificar a lógica do contrato, sem envolver alterações na estrutura dos dados, pode usar diretamente o comando near deploy para reimplementar o novo código. Exemplo:
bash perto de implantar
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Neste caso, os dados no contrato original serão mantidos.
2.2 A estrutura de dados do contrato foi modificada
Se a estrutura de dados do contrato for modificada, a nova implantação direta causará um erro de incompatibilidade entre a nova e a antiga estrutura de dados. Nesse caso, é necessário usar um método de migração para fazer a atualização.
Adicionar 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)((, } }
Então, chame o método migrate durante a implantação:
bash perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.testnet
Desta forma, os dados antigos podem ser migrados para a nova estrutura de dados.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
3. Considerações de segurança sobre a atualização de contratos
Ao realizar a atualização do contrato, é necessário prestar atenção aos seguintes pontos:
Um plano de atualização bem projetado e executado pode garantir a segurança dos contratos e dos ativos dos usuários, ao mesmo tempo que assegura a capacidade de atualização dos contratos.