El patrón de gobernanza que siguen muchas aplicaciones DeFi está fuertemente inspirado en la implementación de Compound Finance. Aunque no existe una Ethereum Improvement Proposal relacionada con la creación de una interfaz de gobernanza estándar, la mayoría de las implementaciones de gobernanza DeFi generalmente siguen el mismo conjunto de principios.
En última instancia, los contratos de gobernanza tienden a comportarse como billeteras multifirma con votos ponderados por los saldos de tokens de los votantes.
Una propuesta es una transacción de Ethereum: una dirección o lista de direcciones, y un calldata o lista de calldatas. La comunidad (los titulares de tokens que les otorgan el derecho a votar) propone transacciones de Ethereum y, basándose en el resultado de la votación, la transacción se ejecuta on chain, o es rechazada si no supera la elección.
Para las acciones que no se realizan on chain (como cambiar la licencia legal de un software), simplemente se firma un mensaje otorgando los derechos.
Términos útiles
Antes de comenzar a explicar los contratos, es útil conocer los términos técnicos de los contratos de gobernanza.
Propuesta
Cada votación comienza con una propuesta, que se describió anteriormente. Siempre es una transacción de Ethereum que puede ser firmada, es decir, tiene una o varias direcciones de destino y calldata(s).
Para prevenir el spam de propuestas, los contratos suelen tener algún tipo de filtro sobre quién puede crear la propuesta, generalmente una dirección que debe poseer un cierto porcentaje del suministro total del token de gobernanza.
Bajo el capó, una propuesta suele ser un struct de Solidity con algunos flags sobre su estado actual, los votos aplicados a ella y qué transacciones se ejecutarán si la propuesta es aprobada.
Voto
Como era de esperar, un voto es una transacción de Ethereum en la que el votante vota a favor o en contra de una propuesta. El voto suele ponderarse por la cantidad de tokens que la dirección poseía en el snapshot correspondiente.
Quórum
Si no se pudiera tomar ninguna acción a menos que votara el 100% de los titulares de tokens, es muy probable que nunca se lograra nada, ya que el sistema se paralizaría si un solo titular decidiera no participar. Por otro lado, si solo se requiriera el 1% de los votos para que una elección fuera válida, sería demasiado fácil aprobar propuestas indeseables.
Para decidir el destino de una propuesta, esta debe alcanzar un umbral de quórum (un porcentaje del total de votos posibles) dentro del período de votación.
Período de votación
Las propuestas no esperan indefinidamente a que se alcance el quórum. De lo contrario, la propuesta de gobernanza podría ejecutarse en un momento en el que las circunstancias que la motivaron hayan cambiado. Esta cuenta regresiva comienza tan pronto como se crea la propuesta y, si no se alcanza el quórum dentro del límite de tiempo, la propuesta es rechazada.
En cola y Ejecución
Si suficientes votos superan el umbral de quórum a favor de la propuesta antes de que expire el período de votación, se considera que la propuesta ha sido aprobada. Por razones de seguridad, suele haber un retraso de tiempo entre el momento en que una propuesta es aprobada y el momento en que realmente se ejecuta.
Timelock
No debe confundirse con el período de votación; este es un retraso entre el momento en que una propuesta ha sido aprobada y el momento en que la acción se ejecuta realmente.
Considera una situación en la que hay una propuesta controvertida en el contrato de gobernanza, y un subconjunto de usuarios disidentes retirará liquidez si la propuesta se promulga. El timelock les da una ventana de tiempo para salir después de ver que perdieron la votación.
Dar a los usuarios la oportunidad de tomar medidas contra propuestas desfavorables incentiva a los proponentes a incluir únicamente propuestas que no causarán una revuelta.
Las fases de la gobernanza
No existe una especificación universal sobre cómo se crea, vota y ejecuta una propuesta de gobernanza. Sin embargo, aproximadamente puedes esperar que siga alguna variación de estas transacciones:
Pending ⭢ Active ⭢ Defeated ⭢ Canceled
⮑ Succeeded ⭢ Queued ⭢ Executed
⮑----------⮑-------⮑ Expired
Aquí está el flujo de transición de estados de gobernanza de Compound Finance

https://docs.compound.finance/v2/governance
Y este es el de Uniswap

https://docs.uniswap.org/contracts/v2/reference/Governance/governance-reference
Quién tiene la autoridad para crear una propuesta (y pasarla al estado pending) depende del protocolo. Un patrón común es que las billeteras que poseen suficientes tokens de gobernanza pueden crear una propuesta. De manera similar, quién puede cambiar el estado a “canceled” también depende del protocolo. No existe un estándar universal sobre quién tiene la autoridad para ejecutar estas acciones.
Cuando no estés seguro de cuándo puede ocurrir una transición de estado, lo mejor es simplemente leer el smart contract de gobernanza en Solidity directamente.
Governor Alpha y Bravo
Compound ha influenciado fuertemente la forma en que se lleva a cabo la gobernanza en DeFi. En 2021, Compound introdujo nuevas características a su diseño de smart contract de Gobernanza original. Este nuevo diseño fue llamado Governor Bravo, y otros protocolos DeFi siguieron su ejemplo en los cambios de diseño.
Esto es lo nuevo en Governor Bravo:
- Los votantes pueden abstenerse explícitamente en lugar de votar solo sí o no
- El contrato de gobernanza se convierte en un patrón proxy actualizable
- Los votantes pueden añadir una cadena de texto (string) con un motivo a sus votos
En la implementación Bravo de OpenZeppelin, el campo añadido para la abstención se puede ver en el struct de voto.
Un ejemplo del flujo de trabajo de la ejecución de una propuesta de gobernanza
El sitio web tally.xyz proporciona una interfaz muy agradable que muestra el flujo de trabajo de una propuesta de gobernanza.
Veamos la propuesta 9 de Uniswap, una propuesta exitosa para añadir un nivel de comisión de 1 punto básico a sus pools de liquidez.
Para aquellos que no están familiarizados con Uniswap, los proveedores de liquidez ganan una comisión cada vez que alguien que quiere intercambiar tokens ejecuta un swap contra la liquidez que los proveedores de liquidez crearon. Esta comisión se determina en el momento de la creación del pool, pero solo puede provenir de un conjunto fijo de tamaños de comisiones. La comunidad deseaba añadir una opción de comisión muy pequeña para ser competitivos frente a otros servicios DeFi de intercambio de tokens, y la propuesta fue aprobada.
Aquí está la visualización de tally del voto y la ejecución.

https://www.tally.xyz/gov/uniswap/proposal/9
La página debería ser en gran medida autoexplicativa, pero la explicaremos brevemente aquí por conveniencia.
Cada una de las acciones enumeradas aquí son acciones on chain. El lector puede hacer clic en el widget de los tres puntos para acceder a las transacciones respectivas en Etherscan.
Aquí está la transacción donde la propuesta se ejecutó realmente. https://etherscan.io/tx/0x5c84f89a67237db7500538b81af61ebd827c081302dd73a1c20c8f6efaaf4f3c#eventlog
Es evidente que el evento FeeAmountEnabled fue emitido por el contrato en 0x1f98431c8ad98523631ae4a59f267346ea31f984, que es la factory de Uniswap para crear pools.
Tally proporciona convenientemente el código sobre cuya ejecución votaban los votantes, y que finalmente fue ejecutado.
Ataques a la Gobernanza
A continuación se muestran algunos ejemplos de ataques a la gobernanza que los hackers ejecutaron con éxito.
Ataque de flash loan
El protocolo BeanStalk tenía una característica llamada emergencyCommit en la que una transacción podía ejecutarse inmediatamente si suficientes votantes apoyaban la transacción. Esto tenía el propósito de omitir el retraso de tiempo si había una propuesta de emergencia que necesitaba ser aprobada rápidamente. El atacante explotó esto solicitando un flashloan para obtener suficiente poder de voto, sortear los timelocks y ejecutar un comando que drenó los fondos del protocolo.
Ataque de bajo precio
Si el precio de un token es lo suficientemente bajo, entonces un atacante puede obtener económicamente los votos necesarios para aprobar cualquier propuesta que desee. Los protocolos que tienen activos significativos bloqueados en relación con la capitalización de mercado del token de gobernanza son especialmente susceptibles a este tipo de ataque. Este ataque se llevó a cabo contra True Seniorage Dollar, donde el atacante votó a favor de acuñar miles de millones de stablecoins para sí mismo y luego las vendió en otro exchange descentralizado. Debido a que los tokens de gobernanza tienen capitalizaciones de mercado relativamente bajas, la posibilidad de un ataque del 51% no es insignificante.
Ataques sociales o políticos
Al igual que en cualquier democracia, los votos pueden ser manipulados socialmente hasta cierto punto. Una campaña coordinada por un atacante bien equipado puede forzar la ejecución de propuestas indeseables.
Margen de mejora
No se ha establecido que el patrón actual de la gobernanza DeFi, descrito en este artículo, sea realmente la forma óptima. Vitalik Buterin ha criticado las prácticas actuales considerándolas generalmente perjudiciales para los pequeños votantes. Él propuso soluciones en su publicación de blog. Una solución que ganó algo de tracción es ponderar los votos por la raíz cuadrada de las tenencias, también conocido como “votación cuadrática”. Todavía existe un problema sin resolver, ya que un atacante puede dividir sus tenencias en múltiples direcciones para evitar que sus votos pierdan peso a causa de la función de raíz cuadrada.
Herramientas para configurar la gobernanza
Para aquellos que deseen configurar DAOs con gobernanza on chain, aquí hay algunos recursos para evitar escribir los contratos desde cero.
- https://wizard.openzeppelin.com/#governor
- https://www.tally.xyz/developers
- https://docs.alchemy.com/docs/how-to-create-a-dao-governance-token
Conclusión
Los contratos de gobernanza son el patrón actualmente aceptado para que los titulares de tokens de gobernanza voten sobre qué transacciones de Ethereum ejecutar. Aunque existe un patrón común que siguen muchos proyectos, llevar a cabo la gobernanza de manera segura y justa sigue siendo una pregunta de investigación abierta.
Más información
Consulta nuestro bootcamp de blockchain para aprender desarrollo de Ethereum y DeFi.
Publicado originalmente el 27 de febrero de 2023