Blockchain

A imutabilidade dos contratos inteligentes é uma farsa

Project

Ei, eu sei que o título deste artigo confundiu você, seria doloroso descobrir que algo que acreditamos ser uma farsa, mas felizmente os contratos inteligentes são imutáveis, os conceitos de atualizável e migração não matam a imutabilidade do contrato inteligente, eles ajudam muito quando você quiser usar o mesmo endereço para outro contrato ou para obter dados de um contrato para outro, vamos entender o que é e como funciona.

Contratos inteligentes atualizáveis

Os contratos inteligentes da Ethereum são imutáveis por padrão, uma vez que os criamos, não há como modificá-los.

Em certos casos isso pode causar problemas, imagine que uma vulnerabilidade seja descoberta em um contrato inteligente, o que pode ser feito? Para resolver esse tipo de problema, é utilizado o conceito de contratos inteligentes atualizáveis, existem 2 métodos para isso:

  • Migração
  • Proxies

Migration

É quando você implanta seu novo contrato não conectado ao contrato antigo de forma alguma, por convenção social, você diz a todos que implantou um novo contrato. É mais fiel aos valores do blockchain, mas nem sempre eficiente, em caso de vulnerabilidade por exemplo, o contrato vulnerável ainda estará ativo no mesmo endereço, e este endereço pode ser conhecido e estar sendo utilizado por contratos de terceiros que também não podem ser atualizados.

Como realizar a migração

É importante estar preparado para migrar o contrato a qualquer momento, pois o contrato pode sofrer atualizações e etc.

Uma migração é baseada em 2 etapas:

  • Recuperando os dados para migrar
  • Escrever os dados do contracto antigo no novo

Etapa 1: Recuperação de dados

A recuperação de dados é feita por meio dos métodos getters do contrato, mas os dados privados podem ser usados por meio da função getStorageAt. É importante usar eventos nos dados para melhor rastreamento durante a recuperação. Uma maneira fácil de recuperar dados é utilizar o Google BigQuery API ou utilizar a ferramenta ethereum-etl.

Etapa 2: Gravação de dados

Depois de recuperar os dados, você precisa iniciar um novo contrato. Para variáveis simples, você pode definir os valores por meio do construtor de contrato.

Preocupações migratórias

Ao migrar um contrato, surgem duas grandes preocupações: Quanto custará a migração? Qual o impacto nas negociações?

Proxies - Upgradable Smart Contracts

Um contrato inteligente atualizável usa um padrão de proxy. O último envolve a implantação de contratos de proxy e contratos de implementação:

Upgradable Smart Contract

Você pode ver na imagem que o usuário interage com um proxy, e o proxy encaminha as chamadas para um contrato, apenas o proprietário do contrato de proxy pode alterar o endereço do contrato para o qual as chamadas são encaminhadas. É assim que funciona o conceito de contratos atualizáveis por proxy, você implanta um contrato e um contrato de proxy que encaminha as chamadas para o seu contrato. Se você tiver um problema com seu contrato, basta implantar outro e atualizar o endereço do contrato dentro do contrato de proxy, para que você nem precise divulgar o novo contrato ao público.

Migration Upgrade VS Proxy Upgrade

Pronto, agora que você conhece os 2 métodos para lidar com contratos quebrados, é hora de saber qual método usar. Qual método usar depende muito da situação, cada método é aplicável sob certas condições.

A migração de contrato é mais segura e confiável, por isso é melhor usá-la na maioria dos casos, mas nos casos em que o contrato precisa de atualizações frequentes e um endereço fixo, você deve usar atualização de proxy, apesar de gastar mais taxas de gás.

E chegamos no fim deste artigo, espero que tenha te ajudado a entender sobre isso.

November 18, 2022

Compartilhar

Artigos Relacionados

Blockchain

Introdução à Segurança de Blockchain