logo
logo
Menu
Mejores Prácticas

Todo sobre los Contratos Proxy

8 minutos

Disponible en:

Aug 22nd, 2023 - 17:34 pm

Translated By:
bc1xbt.ethbc1xbt.eth
SHARE

Tal vez hayas escuchado hablar de un contrato proxy, y es posible que te hayan dicho que es peligroso o que "no se puede confiar en ellos". ¿Quién o por qué alguien usaría un contrato proxy? ¿Va en contra de la filosofía de web3? ¿Realmente es tan peligroso? En este artículo buscamos responder a estas preguntas y compartir información importante sobre los contratos proxy y cómo deberías pensar y tratar con ellos, como un usuario normal de web3. ¡Comencemos!

Pero Primero, ¿Qué es Exactamente un Contrato Proxy?

Normalmente, los contratos en Ethereum son inmutables, lo que significa que no se pueden actualizar una vez que se despliegan. Después de todo, las cadenas de bloques generalmente se definen como un "registro público inmutable", pero los desarrolladores pueden sortear estas limitaciones utilizando el modelo de contrato proxy. Un contrato proxy envía (o delega) toda su funcionalidad a otro contrato inteligente, llamado contrato de implementación.

El propio contrato de implementación (el contrato que contiene todo el código que "hace cosas") puede cambiarse o "actualizarse" según sea necesario. Los desarrolladores simplemente despliegan otra versión del contrato de implementación en la cadena de bloques y actualizan el contrato proxy para enviar todas las solicitudes recibidas al segundo contrato de implementación (diagrama abajo). Un ejemplo de una de esas solicitudes podría ser transferir un activo como un token o NFT.

Una buena analogía para un contrato proxy sería comprar un terreno. El terreno actúa como el contrato proxy, delegando todas las funciones útiles a la casa en sí, donde los propietarios son libres de cambiar el techo, remodelar la cocina, etc. Sin embargo, no importa cuánto remodelen o pongan una casa completamente nueva en el terreno, ¡la dirección no cambia!

ProxyHouse.jpg

Proyectos que Utilizan Contratos Proxy

¿Los contratos proxy son peligrosos? ¿Deberías invertir en proyectos de NFT que utilizan contratos proxy? ¿Y qué hay de los marketplaces, tokens o incluso protocolos DeFi? Antes de responder a esas preguntas, echemos un vistazo a un par de ejemplos de contratos proxy en acción:

10KTF - Este contrato inteligente es quizás uno de los contratos inteligentes de NFT más destacados que utiliza el modelo de contrato proxy para permitir la capacidad de actualización. Pueden actualizar sus contratos para integrar características como la delegación de billeteras, hacer cumplir royalties o aplicar nuevos elementos/estándares.

USDC - Una de las stablecoins más grandes, también utiliza el modelo de contrato proxy. De hecho, explicaron sus razones y la implementación en su blog de 2020 titulada "Actualización de un token ERC-20 de miles de millones de dólares". Expresaron sus preocupaciones de manera contundente en esta frase de la mencionada publicación: "La capitalización de mercado de USDC había crecido a $1.4 mil millones en el momento de la actualización y nuestras carreras estaban en juego: nadie quería pasar a la historia como el desarrollador que quemó mil millones de dólares".

Blur - Blur es un marketplace de NFT que utiliza contratos proxy en prácticamente todos sus contratos inteligentes desplegados, excepto el contrato del token $BLUR. Esto puede ser peligroso porque los usuarios ya han aprobado activos a la dirección del contrato proxy, y ahora un nuevo contrato de implementación tiene la capacidad de extraer esos activos de las billeteras de los usuarios. Si el nuevo contrato de implementación de Blur tiene errores, cientos de miles de NFT aprobados en el contrato proxy de Blur estarían en riesgo. Los estafadores podrían robar los NFT de las billeteras, lo que significaría el fin del mercado de NFT; este es un escenario de apocalipsis extremadamente improbable, ya que salvaguardias como funciones de interruptor de circuito, auditorías de contratos y hackers de sombrero blanco probablemente detendrían un ataque antes de que ocurriera.

Compound Finance - Si bien no está claro cuál es el proceso de gobernanza en torno a las actualizaciones de Blur y 10KTF, dado que son empresas privadas, es seguro decir que tal vez no sea tan riguroso (¡y ciertamente no tan transparente!) como los que se encuentran en DAOs más maduras. Un ejemplo notable es Compound Finance, una plataforma DeFi de préstamos con más de $1 mil millones en valor total bloqueado (TVL); es conocida por tener una gran atención a la seguridad. Su proceso de gobernanza, por ejemplo, no permite actualizaciones en el protocolo a menos que haya al menos una semana de anticipación, y esto se aplica mediante código.

¿Por qué los proyectos los utilizan?

Aunque hay muchas razones matizadas para utilizar contratos proxy, las principales razones son:

  • Actualización: Esta es la razón principal. El contrato de implementación puede actualizarse sin afectar al contrato proxy ni a los usuarios. Los proyectos no quieren perder usuarios al requerirles que vuelvan a aprobar activos ya aprobados, migrar fondos, etc. Los usuarios no se ven afectados por las actualizaciones del contrato de implementación porque el contrato proxy solo almacena la dirección del contrato de implementación, no su código. Por lo tanto, los usuarios pueden continuar interactuando con el contrato proxy como de costumbre, incluso si el contrato de implementación ha sido actualizado.
     
  • Ocultar futuras características: Tal vez el equipo tiene planes de agregar características al contrato con el tiempo, pero no están listos para hacerlas públicas. Pueden implementar gradualmente las características sin necesidad de crear métodos que apunten a otros contratos. Los contratos proxy son una forma sencilla de lanzar de repente nuevas características para proyectos en blockchain.
     
  • Prepararse para el futuro: Aunque se ha insinuado, nadie sabe qué depara el futuro para las criptomonedas. Tal vez un nuevo tipo de activo o NFT importante necesite ser gestionado de manera especial en Blur. Quizás se desarrollen nuevas características y elementos. Por ejemplo, los Cryptopunks se lanzaron antes del estándar ERC-721 y dependen de un contrato de "wrapping/envoltura" de terceros para poder comercializarse en plataformas como Opensea. Esto se debe a que el estándar ERC-721 no existía cuando se lanzaron los Cryptopunks. Los proyectos cripto quieren evitar tener múltiples versiones de contrato, ya que esto fragmenta la liquidez para DeFi y complica la procedencia de los NFT. Si hubieran estado utilizando un contrato proxy, los Cryptopunks simplemente podrían haberlo actualizado para tener en cuenta este cambio (¡en teoría!).

La mayoría de estas razones parecen decir lo mismo de diferentes maneras, pero las diferencias son matizadas. Para algunos proyectos, no es necesario tener la misma dirección de contrato exacta para su utilidad o proyecto; sus usuarios podrían interactuar con el contrato solo a través de una interfaz específica o un sitio web. ¡A menos que sus usuarios utilicen marcadores de contrato inteligente (una estrategia de seguridad enseñada en nuestra clase de Seguridad NFT 101), no se darían cuenta! Pero otros proyectos podrían necesitar la procedencia de su colección de tokens y uniformidad de sus tokens.

¿Cómo Determinar si un Contrato es Proxy?

Hay dos formas principales de determinar si algo es un contrato proxy. Por supuesto, existen todo tipo de herramientas de análisis de blockchain, pero recomendamos Etherscan para la mayoría de las personas.

Método 1: Primero, navega hasta el contrato en Etherscan. Para este ejemplo, vamos a usar un contrato proxy que a menudo mencionamos en nuestros ejemplos de la clase de Seguridad NFT 102, Helix.

Ve a la pestaña "Contrato". Verás dos botones que no encontrarás en la mayoría de los contratos, los botones son "Escribir como Proxy" y “Leer como Proxy

writeasproxy.png

Una captura de pantalla de un contrato que ha sido identificado por el Equipo de Etherscan como un Proxy Verificado.

Utiliza el botón "Escribir como Proxy" para interactuar con contratos proxy si alguna vez lo necesitas.

Método 2: La otra forma de reconocer un contrato proxy es cuando Etherscan dice que es un proxy, pero el desarrollador no ha elegido explícitamente poner a disposición los botones mencionados anteriormente en Etherscan. En su lugar, habrá un pequeño banner en la página del contrato que se verá así, indicando que "puede" ser un contrato proxy:

maybeproxy.png

Un contrato que Etherscan cree que es un proxy, pero el desarrollador no lo ha confirmado ni lo ha enviado a Etherscan como tal.

Riesgos de Utilizar Contratos Proxy

Ahora que sabes que algo es un contrato proxy, ¿cuáles son los riesgos para los usuarios? Insinuamos algunos de ellos en la sección "Proyectos que Utilizan Contratos Proxy", pero detallemos estos riesgos a continuación.

  1. La billetera de despliegue/administración del desarrollador podría ser comprometida, lo que permitiría desplegar una actualización maliciosa: Ha habido innumerables ejemplos de algunos de los desarrolladores más competentes, incluido uno de los desarrolladores principales más infames del protocolo Bitcoin, LukeDashJr, que ha visto su billetera comprometida. Los actores malintencionados pueden usar la dirección de despliegue de un contrato proxy para efectivamente destruir toda la colección, o incluso peor.
     
  2. El desarrollador podría actuar de manera maliciosa y desplegar una actualización malintencionada: Aunque la mayoría de los desarrolladores maliciosos tienden a simplemente robar los fondos y escapar (esto es lo que llamamos "rugpulls"), podrían causar incluso más daño al actualizar maliciosamente un contrato proxy. Podrían robar todos los activos aprobados para él utilizando un contrato de implementación de drenaje o podrían agregar funciones como una función de quema administrativa que incluso podría robar tokens que ya han sido "enviados" a las billeteras de los usuarios.
     
  3. Los desarrolladores podrían actualizar un contrato e introducir un error: Recientemente, Sushiswap desplegó una versión con errores en su contrato. Los atacantes utilizaron el error para vaciar $3.3 millones de las billeteras de usuarios de Sushiswap que usaron la plataforma en ese momento. Aunque Sushiswap NO estaba utilizando un contrato proxy, habría sido mucho peor si lo estuvieran haciendo. Una actualización de contrato con errores habría significado que cualquiera que haya hecho una aprobación en Sushiswap habría estado vulnerable a este mismo error. Los hackers habrían podido robar fondos de cualquiera que haya hecho aprobaciones de tokens en Sushiswap. ¡Esto habría sido probablemente la mayor explotación DeFi en 2023 si ese hubiera sido el caso!

Para un intercambio, no utilizar el modelo de contrato proxy tiene sentido; permite a los usuarios e instituciones que son un poco más cautelosos esperar cualquier problema potencial que los nuevos usuarios puedan enfrentar después de una actualización. Utilizar un contrato proxy para actualizar el contrato de implementación significa que todos los usuarios están sujetos a nuevos riesgos para cada token que hayan aprobado previamente a menos que revoquen esa aprobación.

Recomendaciones

Además de comprender los riesgos asociados con el uso de contratos proxy, hay algunas reglas generales que debes seguir cuando te encuentres con uno en el mundo real:

  1. Sé especialmente cauteloso con los contratos NFT que soliciten aprobaciones para activos que están fuera de su ecosistema. (Pero no te preocupes demasiado si no es así).

Por ejemplo, eres parte de un proyecto de NFT que tiene un contrato proxy desplegado para su colección. Si esa misma colección luego solicita una aprobación para tu ApeCoin o Wrapped Ethereum, debería considerarse de mayor riesgo. Blur a menudo se menciona como un ejemplo "inevitable" de esto, como mencionamos anteriormente, ya que Blur solo utiliza contratos proxy.

  1. Cuando apruebes NFT o tokens ERC-20, especialmente en marketplaces o intercambios, verifica si algo es un contrato proxy antes de hacerlo.

Siempre que uso un nuevo marketplace o DEX, me gusta verificar esto y tratar de averiguar si han hablado sobre por qué utilizan un contrato proxy, o cómo protegen y auditan nuevos despliegues antes de actualizar nuevas implementaciones.

  • Revoca aprobaciones a contratos proxy no utilizados o inactivos (o a todos los contratos en general) utilizando servicios como Revoke.cash o Approvals.xyz.

Los proyectos inactivos, especialmente aquellos con fundadores anónimos, podrían intentar usar tus aprobaciones en tu contra al desplegar código en un nuevo contrato de implementación con código que les permita tomar el control de los tokens aprobados. Para evitar esta posibilidad, mantén siempre tus aprobaciones limpias, recuerda establecer límites de gasto para las aprobaciones y realiza auditorías periódicas para mantener las aprobaciones innecesarias fuera de tu billetera.

Conclusiones

Los contratos proxy no son del todo malos, y sinceramente en la mayoría de los proyectos, especialmente aquellos que los utilizan para sus propios fines, dentro de su propio ecosistema o tokens, es una manera perfectamente sensata de garantizar la viabilidad a largo plazo de tu proyecto. Ayudará a mantenerse al día con los nuevos estándares ERC, tendencias y a poder integrar sin problemas nuevos elementos como la Delegación de Billeteras. Sin embargo, su uso reduce la previsibilidad y la inmutabilidad que los usuarios de blockchain han llegado a apreciar a lo largo de los años.

En última instancia, la decisión de si utilizar o no contratos proxy depende del usuario y de lo que les resulte cómodo. En la mayoría de los casos, los contratos proxy son una manera perfectamente sensata de garantizar la viabilidad a largo plazo de un proyecto. Sin embargo, en casos que involucren intercambios o marketplaces (Blur, Opensea, etc.), donde las actualizaciones deberían ser raras, el uso de contratos proxy puede no ser apropiado.

¿Tienes alguna pregunta o quieres aprender más sobre seguridad en web3 y mantenerte al día con la información de seguridad más actual, estafas y tácticas? Únete a nosotros en nuestro servidor de Discord en https://discord.gg/boringsecurity.