Blockchain (I): Las limitaciones del Algoritmo CPMM*

admin 7 comentarios

Por Marcelo Bagnulo, Angel Hernando-Veciana y Efthymios Smyrniotis.

Photo by Pierre Borthiry - Peiobty on Unsplash

Esta entrada es la primera de una serie de dos en la que vamos a hablar sobre un proyecto interdisciplinar que hemos desarrollado en colaboración entre investigadores de telemática y economía. El objetivo de este trabajo es explorar hasta qué punto los detalles técnicos del funcionamiento de la blockchain pueden utilizarse para diseñar sistemas económicos más eficientes. Pero, para entender nuestra aportación  (aquí), es conveniente comenzar con una breve introducción sobre el funcionamiento de la blockchain y, en particular, de blockchains como Ethereum, que permiten ejecutar contratos inteligentes. Este es el objeto de esta primera entrada.

Preliminares

Ethereum es una blockchain basada en una estructura de direcciones y contratos inteligentes. Las direcciones se usan para asignar propiedad a los dueños de esas direcciones, mientras que los contratos inteligentes permiten la creación de aplicaciones que realizan operaciones sobre estas direcciones. Un ejemplo de estas aplicaciones son los activos programables, también conocidos como tokens, que constituyen la mayor parte del comercio de criptomonedas en la actualidad. Un token es simplemente un contrato que lleva un registro de cuánto de un activo posee cada dirección. De esta forma, se puede representar digitalmente cualquier valor dentro de la blockchain.

Por ejemplo, el dólar estadounidense se representa dentro de Ethereum a través de un token como el USDT (Tether USD). Para ello, una compañía, Tether Ltd., se compromete a respaldar cada USDT con reservas equivalentes en dólares. Así, su emisión y redención dependen de cuántos dólares mantiene esta compañía. En este caso, el token tiene una contrapartida en un activo externo a la blockchain. Otros tokens, sin embargo, no tienen un equivalente en el mundo físico. Este es el caso del WETH (Wrapped Ether), que es una versión tokenizada de la moneda nativa de Ethereum, el ETH. En este caso, la tokenización supone una estandarización que facilita la incorporación del ETH a contratos inteligentes.

En principio, todos estos tokens podrían intercambiarse en mercados financieros tradicionales a través de operadores que trasladen los cambios de propiedad a la blockchain cada vez que sea necesario. Esto es, por ejemplo, lo que hacen compañías como Binance. Sin embargo, una de las grandes innovaciones de Ethereum es que esto es innecesario, ya que todo esto se puede hacer de forma descentralizada dentro de la propia blockchain a través de contratos inteligentes que automatizan todo el proceso.

Así, Ethereum se ha transformado en una alternativa a los sistemas financieros tradicionales, evitando algunos de sus inconvenientes. Por ejemplo, la disponibilidad global de Ethereum hace posible el acceso a servicios financieros sin necesidad de los requisitos burocráticos típicos de los bancos tradicionales. Algo bien conocido por aquellos de nosotros que hemos viajado al extranjero y hemos necesitado abrir una cuenta. Pero también abre nuevas posibilidades para la innovación financiera, que en principio podría dar acceso a instrumentos financieros sofisticados a cualquier persona con acceso a internet.

El algoritmo CPMM

En esta entrada nos centraremos en un tipo de contrato inteligente que facilita el intercambio de activos financieros representados por tokens dentro de la blockchain, eliminando la necesidad de intermediarios. Gracias a su eficiencia, estos contratos gestionan hoy en día la mayor parte del comercio de criptomonedas. Se trata de los llamados Automated Market Makers (AMMs).

Los AMMs operan a través de los pools de liquidez, que son reservas de los activos con los que trabajan (típicamente dos) y que se constituyen a partir de los depósitos realizados por los liquidity providers. Una vez constituidos los pools de liquidez, la forma en la que operan los AMMs es la siguiente: cuando un agente, un trader, necesita cambiar un token por otro, por ejemplo, WETH por USDT, envía sus WETH al AMM, y este determina, de acuerdo con las reservas que posee, cuántos USDT devolverá utilizando un algoritmo matemático predefinido y almacenado en el contrato. De esta forma, la intermediación típica de un mercado financiero se realiza de manera automática, sin necesidad de recurrir a ningún agente externo.

El algoritmo más utilizado es el llamado algoritmo de producto constante (Constant Product Market Maker o CPMM), propuesto por el fundador de Ethereum, Vitalik Buterin, cuyo post original puede encontrarse acá . Su primera implementación la realizó en 2017 Hayden Adams en su plataforma Uniswap. Actualmente, gestiona un volumen superior a los 500.000 millones de dólares y es la plataforma dominante entre los AMMs de Ethereum.

El CPMM determina las tasas de intercambio de forma que el producto de las reservas de los dos activos dentro del pool del AMM se mantenga constante. De esta forma, conforme el AMM dispone de una menor cantidad de un activo, su precio en términos del otro aumenta de forma automática.

Ejemplo. Supongamos un AMM con reservas de 100 WETH y 400.000 USDT que utiliza el algoritmo CPMM. Si un trader quiere cambiar 1 WETH por USDT, lo envía al AMM, y este calcula cuántos USDT devolver, Δy, resolviendo la ecuación:

100x400.000 = 99 (400.000 -Δy) 

De aquí se obtiene que Δy ≈ 3960 USDT. Sin embargo, si las reservas fueran 50 WETH y 400.000 USDT, el trader obtendría:

Δy ≈ 7843USDT

Es decir, el AMM pagaría un precio más alto al ser el WETH más escaso en relación con el USDT.

En general, los cálculos se pueden realizar con la fórmula

donde Δx es la cantidad de activo X enviado al AMM y Δy la cantidad de activo devuelto por el AMM, y x e y indican las reservas de X e Y , respectivamente, en el AMM. De esta fórmula puede también deducirse que la tasa marginal de intercambio limx→0ΔxΔy , o precio marginal, es igual al cociente entre las reservas de los activos en el pool del AMM, yx.

Los problemas del algoritmo CPMM

La ventaja de este algoritmo es que los precios reaccionan de forma automática a la oferta y la demanda, sin necesidad de un creador de mercado tradicional. Nuestro argumento (aquí) es que este algoritmo, y en general cualquier algoritmo que determina precios basados en las reservas del AMM, no utiliza de forma eficiente la información disponible en la blockchain. La segunda parte de esta entrada incluirá una propuesta sobre cómo mejorar el diseño, pero por ahora nos centraremos en explicar en qué sentido esto es problemático.

Para ello nos vamos a fijar en tres métricas. La primera es el arbitraje entre AMMs en Ethereum. Distintos AMMs pueden tener diferentes ratios de reservas y, por ello, precios distintos, los cuales solo se igualan tras operaciones de arbitraje. Sin embargo, estas operaciones representan un coste para el sistema, siendo la parte más significativa los beneficios que extraen los arbitrajistas.

Ejemplo métrica 1. Consideremos dos AMMs que utilizan el algoritmo CPMM, cada uno con un pool de liquidez que contiene 100 WETH y 400.000 USDT. Todos los cálculos se realizan utilizando (1).

Supongamos que un trader necesita 10 WETH. Puede obtenerlos del AMM 1 enviándole 44.444 USDT. Después de la operación, el pool de AMM 1 tendrá 90 WETH y 444.444 USDT.

Esta operación crea una diferencia entre los AMMs que da lugar a una oportunidad de arbitraje. Un arbitrajista que envía 5 WETH a AMM 1 obtiene 23.392 USDT y, luego, enviando 21.052 USDT a AMM 2, recupera los 5 WETH. Después de este arbitraje, las reservas de ambos CPMMs serán 95 WETH y 421.052 USDT, y el arbitrajista obtendrá un beneficio de 2.339 USDT.

Supongamos que, después de esta transacción, el trader quiere convertir los 10 WETH de vuelta a USDT. Puede enviarlos al AMM 1 para recibir solo 40.100 USDT. Como resultado, el pool de AMM 1 tendrá 105 WETH y 380.952 USDT. De nuevo, aparece una oportunidad de arbitraje que un arbitrajista aprovecha enviando 5 WETH a AMM 2 e intercambiando parte de los USDT recibidos en aquirir 5 WETH del AMM 1. Estas dos transacciones le generan una ganancia de 2.005 USDT. Después de estas operaciones, los pools de ambos AMMs vuelven a su estado inicial con 100 WETH y 400.000 USDT cada uno.

En total, en estas 6 operaciones, los CPMMs mantuvieron sus reservas iniciales intactas, mientras que el arbitrajista obtuvo una ganancia de 4.344 USDT, que corresponde exactamente al coste neto para el trader.

La siguiente tabla muestra, para distintos pares de tokens, los costes de arbitraje, medidos por los beneficios obtenidos a través del arbitraje, en comparación con los costes de provisión de liquidez al sistema, medidos como las tasas pagadas a los AMMs por los traders Es importante destacar cómo estos costes se concentran principalmente en pares de tokens menos líquidos, como WETH/ALCX, WETH/BLOCKS y WETH/VSP.

Tabla 1. Coste de arbitraje frente al coste de provisión de liquidez para distintos pares de tokens en diferentes momentos del tiempo. USDT es un token altamente líquido. (1) y (2) son momentos de alta volatilidad.

Fuente: Bagnulo et al. (2025)

La segunda métrica se refiere a la cantidad de manipulación de precios y, en particular, a las manipulaciones sandwich, la más común de todas. Este tipo de manipulación aprovecha la variación de precios con la que el algoritmo CPMM responde a una orden, especialmente a aquellas de mayor tamaño. Por ejemplo, un manipulador que detecta una orden grande de compra dirigida a un AMM y que sabe que aumentará el precio en este AMM puede beneficiarse insertando dos órdenes en el mismo: una que compra inmediatamente antes de la orden original y otra que vende inmediatamente después, cuando el precio ya ha subido. Las estimaciones indican que los costes extra (incluyendo tanto arbitraje como manipulación de precios) ascienden a aproximadamente $675M solo hasta 2022 (véase esto).

Ejemplo métrica 2. Consideremos un AMM que utiliza el algoritmo CPMM y que cuenta con un pool de liquidez con 100 WETH y 400.000 USDT. Supongamos que un trader interesado en convertir 40.000 USDT en WETH los envía al AMM. Un manipulador puede ejecutar un ataque sandwich enviando 60.000 USDT justo antes de que se ejecute la transacción de la víctima y vendiendo inmediatamente después los WETHs obtenidos. Esto se desarrollaría de la siguiente manera:

  • Frontrunning: La primera transacción del manipulador es enviar 60.000 USDT para recibir a cambio 13,0435 WETH, cambiando el vector de reservas del AMM a 86,9565 WETH y 460.000 USDT.
  • Transacción de la víctima: La víctima envía 40.000 USDT y recibe a cambio 6,9565 WETH. Las reservas resultantes del AMM son entonces 80 WETH y 500.000 USDT. Nótese que, en ausencia de la transacción de _frontrunning_, la víctima habría recibido 9,0909 WETH, o de manera equivalente, solo habría necesitado enviar 29.906 USDT para obtener 6.9565 WETH, lo que implica que paga un sobreprecio de 10.094 USDT.
  • Backrunning: La segunda transacción del manipulador es enviar 13,0435 WETH para recibir a cambio 70.094 USDT. Las reservas del AMM después de la operación son 110 WETH y 363.636 USDT. El manipulador obtiene un beneficio total de 10.094 USDT, que es exactamente igual al sobreprecio pagado por el trader.

La tercera y última métrica se refiere al fenómeno conocido como impermanent loss. Este se define como la pérdida de valor de los activos depositados en un AMM debido a que el algortimo CPMM vende a un precio bajo los activos que han subido de valor, hasta que finalmente los nuevos precios se reflejan en variaciones en las reservas de liquidez del AMM. El siguiente ejemplo ilustra su relevancia.

Ejemplo métrica 3. Consideremos dos AMMs, 1 y 2, que utilizan el algoritmo CPMM, cada uno con un pool de liquidez con 100 WETH y 400.000 USDT. En este caso, el precio marginal es de 4.000 WETH/USDT y ningún trader que valore los WETHs en 4.000 USDT tiene incentivos para comerciar con ninguno de los AMMs.

Supongamos que cambian las creencias en el mercado y que los traders creen que la tasa de intercambio debería ser de 3.000 USDT/WETH, es decir se produce una caída del 25% del precio del WETH en términos de USDT. Como resultado, los distintos traders venden WETH a cada uno de los dos AMMs hasta que el nuevo precio marginal se ajusta a 3.000 USDT/WETH en ambos AMMs. Resolviendo el sistema

podemos calcular que las nuevas reservas para cada AMM después de las transacciones serán 115,47 WETH y 346.410,16 USDT.

Calculamos la impermament loss (IL) de cada AMM como la diferencia entre el valor en USDT de las reservas originales del CPMM valoradas al nuevo precio (V0i) y las reservas actuales valoradas al nuevo precio (Vi), normalizado por el valor original, es decir,

Por ello, los liquidity providers han pérdido un 1,03% del valor invertido en el AMM respecto a la opción de mantener sus reservas en sus propios monederos electrónicos.

En la siguiente entrada mostraremos como una pequeña modificación del CPMM puede reducir tanto los costes de arbitraje, como los ataques sandwhich y las impermanent losses.

*This research is part of the project I+D+i TED2021-131844B-I00, funded by MCIN/ AEI/10.13039/501100011033 and the European Union NextGeneration EU/PRTR. This work was partially funded by the European Union through NGI Sargasso’s GMM project under Horizon Europe (Grant Agreement No. 101092887).

Gracias por leer nuestro blog. Nada es Gratis se financia en parte con las cuotas de los socios de la asociación homónima, pero para llevar a cabo sus actividades necesita la aportación desinteresada de todos aquellos que deseen apoyar su labor.
Dona aquí.
Hay 7 comentarios
  • Muchas gracias por la entrada. Realmente interesante. Me surge una duda (que quizás comentéis en el segundo post, por lo que pido disculpas si fuera así). ¿Cuál es el papel de las comisiones, las gas fees, en todo esto? ¿Podrían reducir el problema o son irrelevantes?

    • Gracias por tu interés. En el análisis final dejamos de lado las fees y gas cost. Nuestra visión es que no alteran sustancialmente nuestro análisis y es fácil hacer pequeñas modificaciones para compensar las distorsiones que pudieran introducir las fees y gas cost. Una pregunta a la que dedicamos mucho tiempo pero que al final dejamos fuera del artículo es hasta qué punto se pueden usar las fees para hacer más rico el conjunto de algoritmos considerados. Aunque es verdad que jugar con las fees permite algoritmos más complejos, llegamos a la conclusión que iba a ser una distracción del punto que queríamos hacer (y del quehablaremos la semana que viene).

  • En su paper de 2021 (The Conceptual Flaws of Constant Product Automated Market Making), Park argumentaba que una "market maker pricing rule" tradicional - a diferencia del CPMM - minimiza las oportunidades de arbitraje. ¿Ustedes comparten esta visión?

  • Creo que Park se refiera a los ataques sandwich, y respecto a ellos estamos de acuerdo.

  • Si he entendido bien, al final los proveedores de liquidez son los que pagan de su bolsillo los beneficios que pueden obtener los agentes si explotan mediante arbitraje la asimetría de precios que se produce entre diferentes pools de liquidez, diferencia de precios que, a su vez, se deriva del mecanismo de fijación de precios de intercambio implementado en el algoritmo CPMM, cuyo objetivo es mantener constante el nivel de reservas. No entiendo, en tal caso, por qué no quiebra el sistema, porque parece que los agentes enseguida empezarían a explotarlo masivamente (y cada vez más agentes) y los proveedores de liquidez verían que esta actividad de proveer liquidez les hace perder dinero sin parar...

    • Gracias por tu interés. En el artículo mostramos que los beneficios del arbitraje se traducen en peores precios para los traders que comercian con el AMM. Sin embargo, tienes razón que en nuestro artículo no explicamos que interés pueden tener los liquidity providers en depositar su liquidez en el AMM. El beneficio que obtienen son las comisiones que pagan los traders por usar el AMM y que nosotros por no complicar más el análisis no hemos considerado de forma explícita.

Los comentarios están cerrados.