OpenZeppelin: Contratos Actualizables

Sabemos que todo en Blockchain es inmutable, es una de sus principales caracter铆sticas. Sin embargo, existe una manera de que un contrato pueda actualizarse si tenemos la necesidad.

Contratos Proxy

Llegado el caso de que nuestro contrato tenga un error de l贸gica o simplemente queramos actualizar la misma por un cambio en la regla de negocio, OpenZeppelin ofrece una serie de contratos denominados Proxy, o Patr贸n Proxy, para facilitar este prop贸sito.

Este tipo de contratos actuar谩n de intermediario entre las transacciones y el contrato principal de un proyecto que contiene la l贸gica del mismo.

Implementando un contrato Proxy

Todos los contratos que conoces de OpenZeppelin se encuentran replicados en un nuevo repositorio llamado openzeppelin-contracts-upgradeable donde se le agrega el sufijo Upgradeable a cada uno de ellos.

Es as铆 como encontrar谩s el contrato ERC721.sol y el ERC721Upgradeable.sol en el otro repositorio.

Diferencia ERC721 y ERC721Upgradeable

Cada contrato tiene, en lugar de un constructor, una funci贸n inicializadora a la cual debes llamar desde tu contrato para crear la instancia del contrato actualizable. La misma posee la forma __{ContractName}_init.

Inicializaci贸n contrato ERC721Upgradeable

El resto del contrato es exactamente igual al no actualizable, con la misma l贸gica.

Utilizar este tipo de contratos es una tarea dif铆cil. Requiere de un s贸lido conocimiento del patr贸n Proxy para evitar caer en problemas al actualizar un contrato.

TIP: Tanto los entornos de desarrollo de contratos inteligentes de Hardhat como Truffle ofrecen pluggins para realizar estas tareas de actualizaci贸n de forma m谩s sencilla.

El patr贸n Proxy permite que, por ejemplo, si el d铆a de ma帽ana se agregan nuevas funcionalidades al est谩ndar ERC20 o ERC721, estos contratos puedan actualizarse e incorporar esas funcionalidades.

T煤 puedes implementar tus contratos actualizables siguiendo este mismo patr贸n creando tu contrato MyContractUpgradeable.sol. De esta forma, podr谩s crear contratos que puedan actualizarse en el futuro.


Post creado en colaboraci贸n con el Curso de OpenZeppelin de Platzi.