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.
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:
É 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.
É 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:
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.
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.
Ao migrar um contrato, surgem duas grandes preocupações: Quanto custará a migração? Qual o impacto nas negociações?
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:
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.
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.