Plano de atualização de contratos inteligentes Rust detalhado
Os contratos inteligentes são essencialmente programas e, inevitavelmente, podem conter falhas. Mesmo após extensos testes e auditorias, podem surgir vulnerabilidades. Uma vez exploradas por atacantes, isso pode 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 correção de falhas e adição de novas funcionalidades. Este artigo irá apresentar as formas comuns de atualização de contratos Rust.
Proposta de atualização de contratos Ethereum
Os contratos inteligentes do Ethereum possuem imutabilidade, não podem ser modificados após a implantação. Para resolver vulnerabilidades ou adicionar novas funcionalidades, uma prática comum é implantar um novo contrato. No entanto, isso leva a uma mudança de endereço do contrato, sendo necessário modificar todos os DApps que utilizam esse contrato. Além disso, também é necessário migrar os dados de estado do contrato antigo, o que é trabalhoso e propenso a erros.
Para isso, geralmente é adotada uma arquitetura de separação de dados e lógica: os dados são armazenados em contratos de estado, e toda a lógica é implementada em outro contrato lógico. Durante a atualização, é necessário apenas atualizar o contrato lógico, sem necessidade de migrar os dados de estado.
Na implementação específica, pode-se usar o contrato proxy (Proxy Contract). O contrato proxy armazena dados e chama o contrato lógico A através do deleGatecall. Durante a atualização, basta implantar um novo contrato lógico B e, em seguida, fazer com que o contrato proxy aponte para B.
Plano de atualização do contrato NEAR
Usando o projeto StatusMessage como exemplo, apresentamos os métodos comuns de atualização dos contratos NEAR.
estrutura de dados do contrato não foi modificada
Se apenas modificar a lógica do contrato, sem envolver mudanças na estrutura de dados, pode simplesmente usar near deploy para reimplantar o novo código. Os dados existentes ainda podem ser acessados normalmente.
A estrutura de dados do contrato foi alterada
Se a estrutura de dados do contrato for alterada, a reimplantação direta fará com que a nova e a antiga estrutura de dados não correspondam, impossibilitando o acesso normal aos dados.
usar o método Migrate para atualizar
A NEAR fornece o método Migrate para ajudar a atualizar contratos. Adicione o método migrate ao novo contrato:
Considerações de segurança na atualização de contratos
Controle de permissões: a função de atualização deve ser uma função only owner, podendo ser chamada apenas pelo owner.
Recomenda-se definir o owner como DAO, gerindo o contrato através de propostas e votações.
Adicione #[init(ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.
Após a migração, exclua a função de migração, garantindo que seja chamada apenas uma vez.
A nova estrutura de dados é inicializada durante a migração.
A utilização razoável dessas soluções de atualização pode permitir a atualização e manutenção flexíveis dos contratos inteligentes, garantindo ao mesmo tempo a segurança.
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.
20 Curtidas
Recompensa
20
7
Compartilhar
Comentário
0/400
NFTArtisanHQ
· 21h atrás
visão interessante... mas o padrão proxy não é exatamente o readymade de duchamp em forma de código, para ser sincero
Ver originalResponder0
rugdoc.eth
· 07-24 10:17
O Rystar ainda é um pouco problemático.
Ver originalResponder0
Hash_Bandit
· 07-23 14:51
estive lá quando o btc foi minerado em portáteis... a capacidade de upgrade é fundamental, mas arriscada de facto
Ver originalResponder0
AllTalkLongTrader
· 07-21 20:52
Está a falar de uma atualização novamente. Se me perguntarem, a opção mais segura ainda é desligar temporariamente e reabrir.
Ver originalResponder0
TestnetFreeloader
· 07-21 20:51
Os bugs devem ser aproveitados enquanto são novos! Aproveite uma onda.
Ver originalResponder0
ApeEscapeArtist
· 07-21 20:50
As falhas nunca acabam, é melhor não ter grandes esperanças.
Ver originalResponder0
GasWhisperer
· 07-21 20:24
para ser honesto, contratos inteligentes são apenas bugs à espera de acontecer... a correspondência de padrões não te salvará de explorações, lmao
Estratégia de atualização de contratos inteligentes Rust: garantir segurança e manutenibilidade
Plano de atualização de contratos inteligentes Rust detalhado
Os contratos inteligentes são essencialmente programas e, inevitavelmente, podem conter falhas. Mesmo após extensos testes e auditorias, podem surgir vulnerabilidades. Uma vez exploradas por atacantes, isso pode 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 correção de falhas e adição de novas funcionalidades. Este artigo irá apresentar as formas comuns de atualização de contratos Rust.
Proposta de atualização de contratos Ethereum
Os contratos inteligentes do Ethereum possuem imutabilidade, não podem ser modificados após a implantação. Para resolver vulnerabilidades ou adicionar novas funcionalidades, uma prática comum é implantar um novo contrato. No entanto, isso leva a uma mudança de endereço do contrato, sendo necessário modificar todos os DApps que utilizam esse contrato. Além disso, também é necessário migrar os dados de estado do contrato antigo, o que é trabalhoso e propenso a erros.
Para isso, geralmente é adotada uma arquitetura de separação de dados e lógica: os dados são armazenados em contratos de estado, e toda a lógica é implementada em outro contrato lógico. Durante a atualização, é necessário apenas atualizar o contrato lógico, sem necessidade de migrar os dados de estado.
Na implementação específica, pode-se usar o contrato proxy (Proxy Contract). O contrato proxy armazena dados e chama o contrato lógico A através do deleGatecall. Durante a atualização, basta implantar um novo contrato lógico B e, em seguida, fazer com que o contrato proxy aponte para B.
Plano de atualização do contrato NEAR
Usando o projeto StatusMessage como exemplo, apresentamos os métodos comuns de atualização dos contratos NEAR.
estrutura de dados do contrato não foi modificada
Se apenas modificar a lógica do contrato, sem envolver mudanças na estrutura de dados, pode simplesmente usar near deploy para reimplantar o novo código. Os dados existentes ainda podem ser acessados normalmente.
A estrutura de dados do contrato foi alterada
Se a estrutura de dados do contrato for alterada, a reimplantação direta fará com que a nova e a antiga estrutura de dados não correspondam, impossibilitando o acesso normal aos dados.
usar o método Migrate para atualizar
A NEAR fornece o método Migrate para ajudar a atualizar contratos. Adicione o método migrate ao novo contrato:
ferrugem #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Self { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Chamar o método migrate ao implantar:
perto de implantar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate' \ --initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet
Desta forma, é possível migrar com sucesso os dados do contrato antigo para a nova estrutura.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Considerações de segurança na atualização de contratos
Controle de permissões: a função de atualização deve ser uma função only owner, podendo ser chamada apenas pelo owner.
Recomenda-se definir o owner como DAO, gerindo o contrato através de propostas e votações.
Adicione #[init(ignore_state)] antes da função de migração, garantindo que o estado não seja carregado antes da execução.
Após a migração, exclua a função de migração, garantindo que seja chamada apenas uma vez.
A nova estrutura de dados é inicializada durante a migração.
A utilização razoável dessas soluções de atualização pode permitir a atualização e manutenção flexíveis dos contratos inteligentes, garantindo ao mesmo tempo a segurança.