Guia de Atualização de Contratos Inteligentes Rust
Os contratos inteligentes, como um tipo de programa, inevitavelmente podem ter falhas. Mesmo após extensos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez exploradas por atacantes, podem resultar em perdas de ativos para os usuários, com consequências graves. Portanto, a capacidade de atualização dos contratos é extremamente necessária, principalmente para corrigir falhas e adicionar novas funcionalidades. Este artigo apresentará os métodos de atualização de contratos Rust.
Método de atualização de contratos NEAR
Usando o projeto StatusMessage como exemplo, introduza 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 near deploy para implantar o novo código:
bash
perto de implantar
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Os dados do contrato original podem ser lidos normalmente.
2. Modificação da estrutura de dados do contrato
Se a estrutura de dados do contrato for modificada, a nova implantação resultará em falha na desserialização do estado. Neste caso, é necessário usar o método migrate para realizar a atualização:
Sugestões de segurança para atualização de contratos
A função de atualização adiciona controle de permissões, permitindo apenas que o owner a chame.
Definir o owner como DAO, gerindo através de propostas e votos.
Função de migração adicionada #[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.
Uma atualização razoável pode manter a segurança e a escalabilidade do contrato, sendo uma parte importante do desenvolvimento de contratos inteligentes.
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.
6 Curtidas
Recompensa
6
3
Compartilhar
Comentário
0/400
PumpBeforeRug
· 16h atrás
Se não conseguem evitar falhas básicas, que mais podem fazer?
Melhores práticas de atualização de contratos inteligentes Rust: aprendendo com casos de contratos NEAR
Guia de Atualização de Contratos Inteligentes Rust
Os contratos inteligentes, como um tipo de programa, inevitavelmente podem ter falhas. Mesmo após extensos testes e auditorias, ainda podem existir vulnerabilidades. Uma vez exploradas por atacantes, podem resultar em perdas de ativos para os usuários, com consequências graves. Portanto, a capacidade de atualização dos contratos é extremamente necessária, principalmente para corrigir falhas e adicionar novas funcionalidades. Este artigo apresentará os métodos de atualização de contratos Rust.
Método de atualização de contratos NEAR
Usando o projeto StatusMessage como exemplo, introduza 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 near deploy para implantar o novo código:
bash perto de implantar
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Os dados do contrato original podem ser lidos normalmente.
2. Modificação da estrutura de dados do contrato
Se a estrutura de dados do contrato for modificada, a nova implantação resultará em falha na desserialização do estado. Neste caso, é necessário usar o método migrate para realizar a atualização:
ferrugem #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }
Chamar o método migrate ao implantar:
bash
perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet
Dessa forma, é possível migrar o estado antigo para o novo contrato.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Sugestões de segurança para atualização de contratos
Uma atualização razoável pode manter a segurança e a escalabilidade do contrato, sendo uma parte importante do desenvolvimento de contratos inteligentes.