Métodos de atualização de contratos inteligentes Rust detalhados
Os contratos inteligentes, como uma forma de programa, inevitavelmente apresentam falhas e vulnerabilidades. Mesmo após extensos testes e auditorias, ainda podem surgir problemas. Uma vez que uma vulnerabilidade é explorada por um atacante, pode resultar em consequências graves, como a perda de ativos dos usuários. Portanto, a capacidade de atualização dos contratos é muito importante, e este artigo irá apresentar as maneiras de atualizar contratos Rust.
Métodos de atualização de contratos Ethereum
Os contratos inteligentes na Ethereum têm imutabilidade, e não podem ser modificados diretamente após a implantação. Normalmente, são utilizados os seguintes métodos para atualização:
Implantar um novo contrato, modificar o endereço do contrato na DApp. A desvantagem é que é necessário migrar os dados de estado do contrato antigo.
Arquitetura de separação de dados e lógica. Armazenar dados em contratos de estado, e implementar a lógica em outro contrato. Durante a atualização, basta atualizar o contrato lógico.
Usar contratos inteligentes. Os contratos inteligentes armazenam dados e chamam o contrato lógico através de deleGatecall; durante a atualização, basta atualizar o endereço do contrato lógico.
Método de atualização de contratos NEAR
Usando o projeto StatusMessage como exemplo, apresentamos o método 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. Os dados originais serão mantidos.
2. 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.
3. Usar o método Migrate para atualizar
NEAR fornece o método Migrate para ajudar na atualização:
Adicionar o método migrate no novo contrato
Chame o método migrate durante a implantação para realizar a migração de dados
Após a migração, a nova funcionalidade de contratos inteligentes poderá ser utilizada normalmente.
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.
Recomenda-se definir o owner como DAO, para evitar riscos de centralização
Use #[init(ignore_state)] para garantir que o estado não seja carregado antes da execução da migração
Apagar a função de migração após a migração, evitando chamadas duplicadas
A nova estrutura de dados é inicializada durante a migração.
Através do design razoável de um plano de atualização, é possível alcançar a escalabilidade do contrato, garantindo a segurança e melhorando a manutenibilidade a longo prazo do projeto.
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.
12 gostos
Recompensa
12
6
Partilhar
Comentar
0/400
FlatlineTrader
· 5h atrás
Vulnerabilidade é a carteira...
Ver originalResponder0
Deconstructionist
· 12h atrás
Sugiro adicionar um hot reload.
Ver originalResponder0
rekt_but_not_broke
· 12h atrás
Contratos inteligentes, afinal, são tão problemáticos assim?
Ver originalResponder0
LiquidityWizard
· 12h atrás
teoricamente falando, padrões de proxy são apenas mutações de estado revestidas com 73,4% mais gás... smh
Ver originalResponder0
SchrödingersNode
· 12h atrás
Mais uma vez a velha operação de alterar o endereço do contrato.
Detalhes sobre a atualização de contratos inteligentes Rust: as melhores práticas de Ethereum a NEAR
Métodos de atualização de contratos inteligentes Rust detalhados
Os contratos inteligentes, como uma forma de programa, inevitavelmente apresentam falhas e vulnerabilidades. Mesmo após extensos testes e auditorias, ainda podem surgir problemas. Uma vez que uma vulnerabilidade é explorada por um atacante, pode resultar em consequências graves, como a perda de ativos dos usuários. Portanto, a capacidade de atualização dos contratos é muito importante, e este artigo irá apresentar as maneiras de atualizar contratos Rust.
Métodos de atualização de contratos Ethereum
Os contratos inteligentes na Ethereum têm imutabilidade, e não podem ser modificados diretamente após a implantação. Normalmente, são utilizados os seguintes métodos para atualização:
Implantar um novo contrato, modificar o endereço do contrato na DApp. A desvantagem é que é necessário migrar os dados de estado do contrato antigo.
Arquitetura de separação de dados e lógica. Armazenar dados em contratos de estado, e implementar a lógica em outro contrato. Durante a atualização, basta atualizar o contrato lógico.
Usar contratos inteligentes. Os contratos inteligentes armazenam dados e chamam o contrato lógico através de deleGatecall; durante a atualização, basta atualizar o endereço do contrato lógico.
Método de atualização de contratos NEAR
Usando o projeto StatusMessage como exemplo, apresentamos o método 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. Os dados originais serão mantidos.
2. 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.
3. Usar o método Migrate para atualizar
NEAR fornece o método Migrate para ajudar na atualização:
Considerações de segurança na atualização de contratos
Através do design razoável de um plano de atualização, é possível alcançar a escalabilidade do contrato, garantindo a segurança e melhorando a manutenibilidade a longo prazo do projeto.