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.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
6 gostos
Recompensa
6
3
Partilhar
Comentar
0/400
PumpBeforeRug
· 5h 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.