Dicas de atualização de contratos inteligentes Rust
Os contratos inteligentes, como um tipo de código de programa, inevitavelmente contêm defeitos e vulnerabilidades. Mesmo após testes e auditorias extensivas, ainda podem surgir problemas de segurança. Uma vez que uma vulnerabilidade do contrato é explorada por atacantes, isso pode resultar em perdas significativas de ativos dos usuários. Portanto, a atualização do contrato é crucial para corrigir vulnerabilidades e adicionar novas funcionalidades. Este artigo apresentará métodos de atualização de contratos inteligentes em Rust.
Métodos Comuns para Atualização de Contratos NEAR
Usando o projeto StatusMessage como exemplo, introduza os métodos comuns de atualização de contratos NEAR:
( a estrutura de dados do contrato não foi modificada
Se apenas adicionar novas funções, sem modificar a estrutura de dados, pode usar diretamente o comando near deploy para reimplementar o novo código. Os dados existentes podem ser lidos normalmente.
) A estrutura de dados do contrato foi modificada
Se a estrutura de dados for alterada, a reimplementação direta causará uma incompatibilidade entre a nova e a antiga estrutura de dados, impossibilitando a leitura normal dos dados. Neste caso, é necessário usar o método Migrate para realizar a atualização:
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.
11 Curtidas
Recompensa
11
7
Compartilhar
Comentário
0/400
CryptoNomics
· 17h atrás
*suspiro* deixe-me explicar usando matrizes de probabilidade estocástica por que a capacidade de atualização != segurança
Ver originalResponder0
HodlBeliever
· 08-01 07:16
Mesmo que o coeficiente de risco do contrato seja baixo, não se pode apostar.
Ver originalResponder0
SnapshotLaborer
· 08-01 07:16
Já estou envolvido em contratos inteligentes novamente, apenas dando uma olhada no saldo da Carteira.
Ver originalResponder0
MEV_Whisperer
· 08-01 07:11
A atualização do contrato é assim, o que há de tão importante?
Ver originalResponder0
GateUser-beba108d
· 08-01 07:09
Qualquer um pode fazer esse upgrade!
Ver originalResponder0
MemeCurator
· 08-01 07:07
Está tão perto que não me atrevo a escrever o contrato... medo de ser explorado.
Ver originalResponder0
WalletDivorcer
· 08-01 06:54
Perdi muito dinheiro, nem a atualização pode me salvar.
Dicas de atualização de contratos inteligentes Rust: Métodos de atualização segura para contratos NEAR
Dicas de atualização de contratos inteligentes Rust
Os contratos inteligentes, como um tipo de código de programa, inevitavelmente contêm defeitos e vulnerabilidades. Mesmo após testes e auditorias extensivas, ainda podem surgir problemas de segurança. Uma vez que uma vulnerabilidade do contrato é explorada por atacantes, isso pode resultar em perdas significativas de ativos dos usuários. Portanto, a atualização do contrato é crucial para corrigir vulnerabilidades e adicionar novas funcionalidades. Este artigo apresentará métodos de atualização de contratos inteligentes em Rust.
Métodos Comuns para Atualização de Contratos NEAR
Usando o projeto StatusMessage como exemplo, introduza os métodos comuns de atualização de contratos NEAR:
ferrugem #[near_bindgen] #[derive(BorshDeserialize, BorshSerialize)] pub struct StatusMessage { registros: LookupMap<string, string="">, }
impl Default para StatusMessage { Self { Self { records: LookupMap::new(b'r'.to_vec)((, } } }
#[near_bindgen] impl StatusMessage { pub fn set_status)&mut self, message: String) { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); }
Option { return self.records.get(\u0026account_id); } }
( a estrutura de dados do contrato não foi modificada
Se apenas adicionar novas funções, sem modificar a estrutura de dados, pode usar diretamente o comando near deploy para reimplementar o novo código. Os dados existentes podem ser lidos normalmente.
) A estrutura de dados do contrato foi modificada
Se a estrutura de dados for alterada, a reimplementação direta causará uma incompatibilidade entre a nova e a antiga estrutura de dados, impossibilitando a leitura normal dos dados. Neste caso, é necessário usar o método Migrate para realizar a atualização:
ferrugem #( #[init)ignore_state###] Self { let old_state: OldStatusMessage = env::state_read###[private].expect('failed'); Self { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)(), } }
perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate' \ --initArgs '{}'
--accountId statusmessage.example.testnet
Dessa forma, é possível migrar os dados antigos para a nova estrutura de dados.
Considerações de segurança na atualização de contratos
Implementar controle de permissões, permitindo apenas que desenvolvedores ou DAO atualizem contratos.
Recomenda-se definir o proprietário do contrato como DAO, gerido em conjunto através de propostas e votação.
Adicione #[init(ignore_state(] antes da função migrate.
Após a migração, delete a função migrate, garantindo que seja chamada apenas uma vez.
A nova estrutura de dados é inicializada durante a migração.
Através do método acima, é possível realizar a atualização de contratos inteligentes Rust de forma segura e eficiente.
![])https://img-cdn.gateio.im/webp-social/moments-af3fe22c1999da5db0e2853b8a271276.webp)\u003c/string\u003e\u003c/string,\u003e