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 de resumo em curso

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ú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.
  • Recompensa
  • 2
  • Partilhar
Comentar
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
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)