¿Actualizar un smart contract sin perder datos?

Esto se puede realizar gracias al Patrón Proxy

¿Qué es el pratón proxy?

El Patrón Proxy permite modificar la funcionalidad de un smart contract sin cambiar su address en la blockchain.

¿Cómo funciona?

El patrón divide la lógica en dos contratos:

1. Proxy Contract: Actúa como intermediario y almacena los datos.

2. Implementation Contract: Contiene la lógica del contrato, que puede ser actualizada sin afectar los datos.

Lo que sucede es que cuando un usuario interactúa con  el contrato, en realidad está llamando al "Proxy", que utiliza "delegatecall", que ejecuta la lógica en contrato de implementación.

Con lo cual, nos permite modificar la lógica de nuestros smart contract de forma transparente al usuario, sin perder nada de información!

Pro y contras de usar el patrón proxy:

- Pros:

* Facil actualización del código, para hacer mejorar o solucionar bugs. Desde mi punto de vista, es la única ventaja

- Contras:

* Complejidad. Añade una capa adicional de gestión y seguridad. Solo tú deberias poder actualizarlo

* Hay riesgo de seguridad, esta ligado con el primer punto, un mal uso del "delegatecalle" puede generar vulnerabilidades...

* Consumo un poco más elevado del gas para poder interactuar con el Smart contract

Algunas de estas contras que veo de este patrón, se pueden solucionar fácilmente con el uso de librería OpenZeppelin (https://docs.openzeppelin.com/upgrades-plugins/writing-upgradeable), el cual nos facilita el poder desplegar nuestros contrato actualizables de forma sencilla. Además, nos ofrece tres posibles soluciones:

- Transparent Proxy. Digamos que es el básico, separa logica y los datos

- UUPS (Universal Upgradable Proxy Standard). Es una versión mejorada del Transparent proxy, ayuda por ejemplo evitar colisiones entre dos funciones.

- Beacon Proxy. Nos permite gestionar múltiples proxies

Ejemplo:

en el siguiente link, te dejo un ejemplo donde inicialmente, tienes un smart contract que solo el usuario puede indicar su numero favorito y SOLO él lo puede saber. En la actualización,

el desarrolador, añade una nueva función, donde cualquier persona puede ver el numero favorito de otro usuario.

https://github.com/PauMB85/patron-proxy

Conclusión:

Es un patrón muy utilizado en el mundo blockchain, ya que permite el poder evolucionar los smart contract de forma transparente al usuario y desde mi punto de vista, puede ser un peligroso, porque el usuario puede ser que no sea consciente si han realizado algún cambio, a que me refiero, en el ejemplo que paso en el primer smart contract solo el usuario puede ver su numero favorito y en la actualización,

lo puede ver cualquier, ahora cambia tu numero favorito por tu token favorito y en lugar de poderlo ver en poderlo transferir!! Por eso soy partidario, que si se actualiza el propio usuario es mejor que hago

los cambios e ir al nuevo smart contract y darle la totalidad de poderlo gestionarlo el mismo!

info:

- https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern

- https://blog.openzeppelin.com/proxy-patterns

#web3 #solidity #smartcontract #blockchain #bitcoin #ethereum

Reply to this note

Please Login to reply.

Discussion

No replies yet.