Guia de atualização de contratos inteligentes Rust: Detalhes sobre o método de atualização de segurança da plataforma NEAR

robot
Geração do resumo em andamento

Guia de Atualização de Contratos Inteligentes em Rust

Os contratos inteligentes, como um tipo de programa, inevitavelmente terão defeitos e vulnerabilidades. Mesmo após muitos testes e auditorias, ainda podem existir problemas não descobertos. Uma vez que uma vulnerabilidade do contrato seja explorada por atacantes, pode resultar em perdas de ativos dos usuários, com consequências graves. Portanto, a capacidade de atualização do contrato é crucial, podendo ser utilizada tanto para corrigir vulnerabilidades quanto para adicionar novas funcionalidades. Este artigo apresentará os métodos de atualização de contratos Rust na plataforma NEAR.

Método de atualização do contrato NEAR

Usando o projeto StatusMessage como exemplo, apresentamos os métodos comuns de atualização dos contratos NEAR.

1. 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 comando near deploy para reimplantar o novo código. Por exemplo, vamos adicionar uma nova função ao contrato original:

ferrugem #[near_bindgen] impl StatusMessage { Option { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); return self.records.get(&account_id); } }

Depois de compilar, use near deploy para reimplantar. Os dados no contrato original ainda podem ser lidos normalmente.

( 2. A estrutura de dados do contrato foi modificada

Se a estrutura de dados do contrato for modificada, a reimplantação direta resultará em falha na desserialização do estado. Por exemplo, modificamos a estrutura do contrato da seguinte forma:

ferrugem #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct StatusMessage { taglines: LookupMap<string, string="">, bios: LookupMap<string, string="">, }

Neste caso, é necessário usar o método Migrate para realizar a atualização. Adicione o método migrate no novo contrato:

ferrugem #( #[init)ignore_state[private]] 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:

perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

Dessa forma, é possível atualizar o contrato com sucesso e migrar os dados antigos.

![](https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp(

Considerações de segurança sobre a atualização de contratos

  1. Controle de permissões: a função de atualização deve ser definida como função only owner, garantindo que só possa ser chamada pelo owner.

  2. Recomenda-se definir o owner do contrato como DAO, gerindo o contrato através de propostas e votações.

  3. Adicione #[init)ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.

  4. Após a migração ser concluída, exclua a função de migração, garantindo que seja chamada apenas uma vez.

  5. A nova estrutura de dados é inicializada durante a migração.

A atualização de contratos é um processo complexo que deve ser tratado com cautela. Com um design razoável e testes rigorosos, é possível realizar uma atualização de contratos segura e confiável.

</string,></string,>

NEAR3.77%
Ver original
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.
  • Recompensa
  • 2
  • Compartilhar
Comentário
0/400
WalletDetectivevip
· 07-20 23:00
Uau, isso é bem hardcore!
Ver originalResponder0
MetaverseVagrantvip
· 07-20 22:55
Já está a envolver-se em contratos inteligentes.
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)