Compound Protocol está formado por un conjunto de smart contracts de Ethereum que permiten a usuarios no técnicos, y también a desarrolladores de aplicaciones, interactuar con los mercados financieros de criptomonedas. Los usuarios del protocolo podrán, o bien tomar activos prestados, con el correspondiente pago de una tasa de interés variable, o bien suministrar activos al protocolo, con el cobro de una tasa de interés también variable. En el siguiente artículo vamos a profundizar en el protocolo Compound y a explicar en detalle cuál es su funcionamiento.
¿Qué es Compound Protocol?
En el white paper del proyecto, podemos ver que Compound Protocol es un protocolo desarrollado en la blockchain de Ethereum en el que se establecen mercados de activos, los cuales actúan como pools de activos con tasas de interés derivadas algorítmicamente, en función de la oferta y la demanda.
Tanto los usuarios que prestan los activos (Suppliers), así como los usuarios que piden prestado dichos activos (Borrowers), interactúan directamente con el protocolo, ganando o pagando un porcentaje de sus activos, el cual obedece a una tasa de interés variable.
Cada mercado es único para cada activo. Dichos activos estarán basados en Ethereum. Por ejemplo, existirá un mercado monetario para ETH (la moneda nativa de Ethereum), otro para DAI (la stablecoin de MakerDAO basada en Ethereum), y otro para REP (el utility token de Augur basado en Ethereum). Además, cada mercado contiene un ledger público y transparente que registra las transacciones realizadas y el histórico de las tasas de interés.
A través del siguiente enlace, se pueden consultar los mercados disponibles, las tasas de interés compuesto APY (Annual Percentage Yield) y los volúmenes de activos prestados y suministrados que gestiona Compound Protocol (Figura 1).

Figura 1. Mercados financieros soportados por Compound Protocol. Fuente
En la actualidad, Compound Protocol está desplegado en las siguientes redes de Ethereum: Mainnet, Ropsten, Kovan, Rinkeby, y Goerli. El lector que quiera acceder a las direcciones y los ABI de los smart contracts desplegados por el protocolo, para cada una de estas redes, puede hacerlo a través del siguiente enlace.
Suministrar activos a Compound Protocol (Supplying Assets)
Los usuarios de Compound Protocol que quieran suministrar al sistema activos, para poder obtener beneficios por ello, podrán hacerlo con el token nativo de Ethereum (ETH), o bien con otros activos que se ejecutan en la blockchain de Ethereum.
Cuando los usuarios y las aplicaciones suministran activos a Compound Protocol, comienzan a obtener al instante, un ingreso derivado del interés variable que corresponda a cada activo. El interés se acumula en cada bloque de Ethereum (interés compuesto), pudiendo los usuarios retirar su capital más los intereses generados en cualquier momento.
Cuando los usuarios suministran activos a Compound Protocol, reciben cTokens a cambio inmediatamente. Los cTokens son tokens ERC20 que representan el saldo en el protocolo, generan intereses con el tiempo, y sirven como colateral para poder coger prestado del protocolo activos. Además, pueden canjearse por sus activos subyacentes en cualquier momento. A medida que se acumulan intereses sobre los activos suministrados, los cTokens se pueden canjear a un tipo de cambio (relativo al activo subyacente) que aumenta constantemente con el tiempo, en función de la tasa de interés obtenida por el activo subyacente (Figura 2).

Figura 2. Supplying ETH en Compound Protocol. Fuente
El ratio de conversión entre el cToken y su activo subyacente se implementa mediante el «Protocol Math», el cual gestiona los decimales de los cTokens, de tal forma que siempre tendrán 8 decimales, independientemente de los decimales que tengan sus activos subyacentes (Figura 3). El lector que esté interesado en profundizar sobre el funcionamiento de «Protocol Math», puede hacerlo a través del siguiente enlace.

Figura 3. Decimales utilizados en los cTokens por Protocol Math. Fuente
Para los lectores que quieran profundizar sobre el concepto de los cTokens, así como en el funcionamiento de los smart contracts que los gestionan, recomendamos la lectura de la documentación que se encuentra en el siguiente enlace.
En este contexto, existen diferentes casos en los que es atractivo suministrar activos al protocolo Compound. Uno de estos casos es el de aquellos inversores a largo plazo (los denominados holders) en activos crypto, como ETH u otros, que estén interesados en sacar un rendimiento adicional a sus inversiones sin asumir riesgos ni condiciones. Otro caso, sería el de aquellas aplicaciones, exchanges y mercados que manejen fondos de tokens y quieran nuevas fuentes de monetización para obtener unos mayores rendimientos de sus actividades mediante mecanismos como «Sweeping» o ZBA (Zero balance accounts).
Tomar activos de Compound Protocol (Borrowing Assets)
Compound Protocol permite a los usuarios del protocolo pedir préstamos del activo que deseen al instante, utilizando como colateral los cTokens. Para ello, cada mercado (dependiendo del activo que se quiera pedir prestado) tiene una tasa de interés variable que determinará el coste de pedir prestado dicho activo.
Además, cada mercado tiene un «Collateral Factor», que va del 0 a 1, y que representa la porción del valor del activo subyacente que puede ser prestado. Los activos poco líquidos, de pequeña capitalización, tienen valores bajos de este factor, mientas que los activos más líquidos, con alta capitalización suelen tener valores altos. Como consecuencia, la capacidad para pedir prestado un activo (capacidad de endeudamiento), por parte del usuario, será igual a la suma de los balances de las cuentas del activo subyacente multiplicado por el Collateral Factor. De esta manera, Compound Protocol se protege de posibles incumplimientos de los usuarios, ya que estos sólo pueden pedir prestada una cantidad de activos inferior o igual a su capacidad de endeudamiento (Figura 4).

Figura 4. Borrowing DAI en Compound Protocol utilizando como colateral ETH . Fuente
Para entender mejor lo anteriormente expuesto, pongamos el siguiente ejemplo. Supongamos que un usuario de Compound Protocol, llamado Antonio, suministra a Compound Protocol 10 ETH, recibiendo 10 cETH. Supongamos también, que el Collateral Factor, en el momento de realizar el cálculo, para el mercado de ETH, es de 0,5. Entonces, la capacidad para pedir un préstamo por parte de Antonio, en el mercado ETH, será igual a: 10 ETH (balance del activo subyacente) * 0,5 (Collateral Factor) = 5 ETH.
En este contexto, existen diferentes casos en los que es atractivo pedir prestados activos al protocolo Compound. Pasemos a señalar algunos de ellos. Uno de estos casos es el de aquellas dApps que necesiten financiación para usar dentro de la propia cadena de Ethereum sin tener que recurrir a opciones de financiación off-chain, como por ejemplo, adquirir recursos computaciones en la red de Golem. Otro caso de uso es el de aquellos comerciantes e inversores que quieran adquirir financiación para invertir en nuevos proyectos en el ecosistema crypto usando como colateral sus propias carteras de cryptoactivos, en lugar de recurrir a divisas fiduciarias. Otro caso, puede ser el de los traders de cryptoactivos que quieran realizar operaciones de compra/venta de activos de Ethereum previendo que el valor de las ganancias obtenidas en las operaciones realizadas sea superior a la tasa de interés pagado por pedir prestado dichos activos en Compound Protocol.
Modelo de gestión de las tasas de interés
A diferencia de otros sistemas de préstamos tradicionales, en los que las partes implicadas, entre otras condiciones, deben negociar las tasas de interés aplicadas, Compound Protocol tiene un modelo de tasas de interés prefijado de antemano, público y que obedece, en última instancia, a la gobernanza del protocolo.
El modelo de tasas de interés de Compound Protocol obedece a un sistema de interés compuesto o acumulado que pretende alcanzar un equilibrio, en cada mercado monetario, que obedezca a la oferta y la demanda de cada activo. De esta forma, se intenta llevar a cabo la teoría económica que indica que la tasa de interés debe aumentar en función de la demanda. Cuando la demanda es baja, la tasa de interés baja. En cambio, cuando la demanda es alta, la tasa de interés sube.
El protocolo, por sí mismo, no garantiza la liquidez de los mercados de los activos con los que trabaja, pero utiliza un modelo de tasas de interés que procura que la liquidez sea óptima. Para ello, en periodos de extrema demanda de un activo, las tasas de interés aumentan, incentivando la oferta (supplying) y desincentivando los préstamos (borrowing).
El ratio de utilización de un activo «U», para cada mercado «a», definido por la variable «Ua» intenta unificar la oferta y la demanda mediante la siguiente expresión: Ua = Borrowsa / (Casha + Borrowsa)
La curva de la demanda se codifica a través de la gobernanza y se expresa en función de la utilización de cada activo. Como consecuencia, las tasas de interés por pedir prestado deberán obedecer a expresione similares a la siguiente: Borrowing Interest Rate a = 2.5% + Ua * 20%
Por otro lado, las tasas de interés, para cada mercado, asociadas a los activos prestados (Supplyin Assets) obedecerán a la siguiente expresión: Supplying Interest Rate a = Borrowing Interest Rate a * Ua
Es importante entender que las tasas de interés, para cada mercado de activos, se actualizan en cada nuevo bloque creado de la red de Ethereum, siempre que la relación entre los activos prestados y los activos suministrados en el protocolo haya cambiado desde el bloque anterior.
La cantidad que cambian las tasas de interés, para cada mercado, obedece sólo a dos factores: al modelo de tasas de interés que esté definido por los smart contract que gestionan cada mercado (que puede ser cambiado mediante la gobernanza del protocolo), y a la cantidad que haya cambiado el ratio entre los activos suministrados y los prestados.
Los lectores que quieran profundizar sobre los modelos de tasas de interés que se aplican en los distintos mercados, pueden hacerlo a través del siguiente enlace. Además, se puede consultar un histórico de las tasas de interés aplicadas, a través de la siguiente API.
Aunque los «suppliers» perciben un interés en cada nuevo bloque creado en la cadena de Ethereum, el interés se compone, en cada mercado, para todos los «suppliers» y «borrowers», cuando las cuentas de Ethereum interaccionan con los smart contracts que gestionan los cTokens, a través de las llamadas a las funciones mint (acuñar nuevos tokens), redeem (realizar canjes), borrow (pedir prestado) y repay (pagar o liquidar activos). Es decir, la correcta ejecución de estas funciones dispara el método «accrueInterest», el cual hace que se agregue interés al saldo subyacente de cada «supplier» y «borrower» en el mercado.
La historia de cada tasa de interés, para cada mercado monetario, es capturada por un índice de tasa de interés (Interest Rate Index), que se calcula cada vez que cambia una tasa de interés. Este cálculo o actualización del Interest Rate Index se realiza para componer el interés desde el índice anterior, utilizando el interés para el período calculado.
Con el fin de que queden asentados los conceptos vistos en el presente apartado, pongamos el siguiente ejemplo práctico. Imaginemos que un usuario de Compound Protocol, llamémosle Antonio, decide aportar 1 ETH al protocolo. En este caso, Antonio es un «supplier». En el momento en el que Antonio ha realizado la aportación al protocolo (invocando la función «mint» del smart contract de cETH), el supplyRatePerBlock para el mercado de ETH es de 0,000000001000000000 ETH. Es decir, la recompensa, que va a recibir Antonio en cada nuevo bloque que se cree en la red de Ethereum es de 0,000000001000000000 ETH por cada ETH aportado. Durante los siguientes 2 nuevos bloques creados en Ethereum, nadie en Compound Protocol interacciona con el smart contract cETH invocando las funciones antes vistas. En el siguiente nuevo bloque (el tercero), otro usuario de Compound Protocol, llamémosle Javier, pide prestado 1 ETH a Maker Protocol invocando la función «borrow» en el smart contract cETH. En ese momento, el balance subyacente de Antonio es de 1,000000003000000000 ETH (0,000000001000000000 ETH por 3 bloques, más el balance inicial de 1 ETH). A partir de este momento, se ejecuta la función «accrueInterest» y como consecuencia el interés compuesto se calculará sobre el nuevo balance de ETH subyacente de Antonio de 1,000000003000000000 ETH, en lugar del anterior de 1 ETH.
Cálculo de la APY y del coste de Gas
Como hemos visto anteriormente, en Compound Protocol, cada mercado de activos tiene una tasa de interés compuesto que es variable. A dicha tasa se la denomina APY (Annual Percentage Yield), y puede calcularse, tanto para el caso en el que se presta (Supply APY), como para el caso en el que se pide prestado (Borrow APY), mediante una fórmula en la que intervienen los valores de «supplyRatePerBlock», y «borrowRatePerBlock» respectivamente, los cuales varian en el tiempo. Dicha fórmula, para el caso de Supply APY, se puede ver en la Figura 5.

Figura 5. Fórmula para Supply APY. Fuente
Compound Protocol, en su documentación, indica que el coste el gas que se produce como consecuencia de la invocación de las funciones que se encuentran en los smart contracts de su protocolo, puede fluctuar según el mercado y el usuario, llegando incluso a usar una cantidad arbitraria de gas. Aún así, se indica que si bien puede ser difícil proporcionar garantías sobre los costes de las transacciones, se puede utilizar la tabla que muestra la Figura 6 como guía.

Liquidación de activos
Cuando el balance de endeudamiento de un usuario supera el valor total de su colateral, el protocolo lanza la función «liquidateBorrow», la cual intercambia el activo prestado por el valor del colateral a un precio ligeramente mejor que el del mercado. Esta circunstancia puede suceder cuando la valoración del activo usado como colateral baja, o la valoración del activo prestado sube.
Para que la liquidación de activos funcione de forma correcta, Compound Protocol utiliza la herramienta «Comptroller», la cual trabaja en la capa de gestión de riesgos y se encarga de determinar cuánta garantía de colateral deben mantener los usuarios, la capacidad de endeudamiento, así como en que momento deben liquidarse sus préstamos. Cada vez que un usuario interactúa con un cToken, se le pide al Comptroller que apruebe o rechace la transacción. Además, el Comptroller se encarga de determinar la valoración de los activos de los usuarios según los precios de mercado utilizando el sistema «Price Oracle» que delega la capacidad de establecer el valor de los activos a un comité que agrupa los precios de los diez principales exchanges.
Para los lectores interesados en conocer más en profundidad cómo funciona Comptroller pueden acceder al contenido del siguiente enlace.
Para los lectores interesados en saber más en detalle como funciona la liquidación de activos, les recomendamos acceder al siguiente enlace, en el que se explica el funcionamiento de la función «liquidateBorrow», la cual se encarga de gestionar las liquidaciones de los préstamos realizados en el protocolo.
Gobernanza de Compound Protocol
Compound Protocol comenzó a gobernarse de manera centralizada a través de un administrador, pero con el claro objetivo de hacer una transición hacia un modelo descentralizado en el que los propietarios de los tokens de gobernanza (COMP) tomasen las riendas del futuro del sistema. De esta manera, el 16 de Abril del 2020, Robert Leshner (Full-stack founder of Compound) anunció en el siguiente artículo, que el mecanismo de gobernanza descentralizada de Compound Protocol empezaba a andar, pretendiendo así que el protocolo escale con el crecimiento del ecosistema criptográfico, que no tenga puntos débiles identificables, y que evolucione hacia una infraestructura económica resistente.
Compound Protocol sólo puede ser actualizado por los titulares del token COMP y sus delegados, a través de la votación de propuestas de cambio o actualización del protocolo. Cada token COMP corresponde con el derecho a un voto, que puede ejercer el propietario del token o un delegado que elija el propietario del mismo. Es decir, los propietarios de COMP podrán delegarse a si mismos los derechos de voto o a otra dirección de Ethereum para poder votar o crear nuevas propuestas.
Para poder realizar una propuesta, el usuario que la lance deberá tener delegados al menos el 1% de todos los COMP. Es decir, como el suministro total de COMP es de 10.000.000, deberá tener 100.000 COMP delegados.
Entre las funciones de gobernanza que tienen los poseedores del token COMP están las de decidir añadir nuevos mercados de cToken y actualizar los modelos de tasas de interés.
Todo el proceso de gobernanza está gestionado por smart contracts desplegados en la red de Ethereum, cuyo código es público y accesible, pudiéndose consultar en el siguiente enlace.
Si el lector desea profundizar en cómo funciona el proceso de votación de las propuestas de actualización del protocolo, recomendamos la lectura del siguiente artículo.
Si el lector desea ver las propuestas de actualización del protocolo y cual ha sido su resultado, así como los votantes y delegados, puede hacerlo a través del siguiente enlace.
Para los lectores que tengan dudas de alguno de los aspectos vistos anteriormente en este apartado, o quieren ahondar aún más en el proceso de gobernanza de Compound Protocol, recomendamos leer el siguiente artículo.
Herramientas para interactuar con Compound Protocol
Los usuarios no técnicos pueden interactuar con Compound Protocol utilizando la herramienta app.compound.finance (Figura 7). Con dicha herramienta, los usuarios podrán conectar sus carteras de activos, gestionadas mediante Metamask, Ledger, o Coinbase Wallet, a Compound Protocol. Una vez realizada dicha conexión, los usuarios podrán realizar Supplying, Borrowing, o participar de la gobernanza del protocolo si disponen de tokens COMP.
Figura 7. Dashboard de app.compound.finance. Fuente
Por otro lado, los usuarios técnicos pueden desarrollar sus propias aplicaciones que interactúen con los contratos inteligentes de Compound Protocol. En la bibliografía dejamos varios enlaces que ayudarán a los interesados en este aspecto.
En conclusión
Compound Protocol implementa un mercado de activos en Ethereum que permite a los usuarios ganar intereses, o pedir prestados dichos activos mediante el depósito de un colateral que se utilice como garantía. Cualquiera puede suministrar activos al fondo de liquidez de Compound e inmediatamente comenzar a ganar intereses compuestos continuamente. Las tasas de interés se ajustan automáticamente según la oferta y la demanda. Los saldos de activos suministrados están representados por cTokens, los cuales son representaciones del activo subyacente que devengan intereses y sirven como garantía. Los usuarios pueden agregar o eliminar fondos en cualquier momento, pero si su deuda se vuelve poco garantizada, cualquiera puede liquidarla.
Como consecuencia de lo anterior, Compound Protocol ofrece una serie de características con un gran potencial que puede revolucionar los modelos de negocio en el ámbito financiero construidos sobre el ecosistema de Ethereum, permitiendo a los desarrolladores crear productos innovadores en el ecosistema DeFi.
Referencias
- Compound: The Money Market Protocol. White Paper. https://compound.finance/documents/Compound.Whitepaper.pdf
- Compound Protocol. Github. https://github.com/compound-finance/compound-protocol
- «Setting up an Ethereum Development Environment
«. https://medium.com/compound-finance/setting-up-an-ethereum-development-environment-7c387664c5fe - «Supplying Assets to the Compound Protocol«. https://medium.com/compound-finance/supplying-assets-to-the-compound-protocol-ec2cf5df5aa
- «Borrowing Assets from the Compound Protocol«. https://medium.com/compound-finance/borrowing-assets-from-compound-quick-start-guide-f5e69af4b8f4
- «Create a Compound Smart Contract API with Infura». https://medium.com/compound-finance/compound-ethereum-api-with-infura-1f5c555fd4a2
- «Building a Governance Interface«. https://medium.com/compound-finance/building-a-governance-interface-474fc271588c
- «Compound Governance». https://medium.com/compound-finance/compound-governance-5531f524cf68
- Compound Protocol Docs:
- cTokens: https://compound.finance/docs/ctokens
- Comptroller: https://compound.finance/docs/comptroller
- Governance: https://compound.finance/docs/governance
- One Price Feed: https://compound.finance/docs/prices
- API: https://compound.finance/docs/api
- Security: https://compound.finance/docs/security

