Creador de Mercado Automático

Todo pool de liquidez se basa en un algoritmo de creación de mercado automático (AMM) que determina los precios y las cantidades de los tokens en cada operación de compraventa. Los GLP de Geminon utilizan un algoritmo propio derivado del AMM de producto constante que les confiere las capacidades de creación de liquidez de un LBP.

AMM de producto constante

La práctica totalidad de los protocolos de intercambio descentralizado (DEX) que existen hoy en día utilizan para sus pools de liquidez la conocida como fórmula de producto constante:

xy=kx \cdot y = k

Donde xx e yy son las cantidades del par de tokens en el pool y kk una constante que queda fijada cuando se añade la liquidez inicial durante su creación. El pool de liquidez crea un mercado automático para el par de tokens simplemente imponiendo la condición de que, tras todo intercambio, el producto de las cantidades de ambos tokens no puede ser inferior a la constante de liquidez:

(x+Δx)(y+Δy)k(x + \Delta x)(y + \Delta y ) \nless k

Dada una cantidad de tokens Δx\Delta x que se quieren intercambiar utilizando el pool de liquidez, la cantidad del token intercambiado a recibir, Δy- \Delta y se calcula como:

Δy=ykx+Δx- \Delta y = y - \frac {k}{x + \Delta x}

AMM de producto constante generalizado

La fórmula del AMM de producto constante puede generalizarse para un pool formado por n tokens con pesos wnw_n tales que nwn=1\sum_n w_n = 1:

nBnwn=k\prod_n B_n^{w_n} = k

Donde BnB_n es el balance del n-ésimo token en el pool. Desarrollando la fórmula anterior, se obtiene que para un intercambio de un par cualquiera de tokens del pool, dada la cantidad de entrada de un token Δx\Delta x, la cantidad recibida del segundo token viene dada por:

Δy=y(1(xx+Δx)wxwy)-\Delta y = y \Bigg(1 - \bigg(\frac {x} {x + \Delta x}\bigg)^{\frac{w_x}{w_y}}\Bigg)

De las ecuaciones anteriores se deriva que la cotización o precio relativo de un token en función de otro en el pool depende exclusivamente de los balances y los pesos relativos de ambos tokens en el pool:

Pxy=xwxywyP_x^y = \frac {\frac {x}{w_x}} {\frac {y}{w_y}}

Puede demostrarse fácilmente que estas ecuaciones se transforman en las ecuaciones para un pool de dos tokens vistas en el punto anterior haciendo wx=wyw_x = w_y.

AMM de Geminon

Las ecuaciones del AMM generalizadas del punto anterior son las que utiliza el protocolo Balancer para sus pools. En los LBP de Balancer es posible alterar los pesos relativos ww de los tokens en el pool, lo cual cambia el precio relativo de ambos tokens y también el valor de la constante de liquidez del pool kk.

El algoritmo de AMM desarrollado para los GLP de Geminon también altera el valor del invariante del pool kk, aunque emplea un mecanismo completamente diferente. Las principales diferencias son:

  • La variación de la constante de liquidez es completamente automática en los GLP: no es posible alterar manualmente los pesos de los tokens en el pool, y por tanto los precios.

  • La parametrización de la liquidez en un GLP varía en función de las operaciones realizadas, no en función del tiempo como sucede en los LBP.

  • El algoritmo del GLP no varía los pesos de los tokens en el pool sino el balance del token GEX.

Descripción del algoritmo

El AMM de Geminon funciona en dos pasos:

  1. Se calcula la cantidad del token de salida utilizando la fórmula del AMM de producto constante con la liquidez disponible en ese momento en el pool, es decir, en este paso el GLP se comporta exactamente igual que un pool de liquidez tipo Uniswap.

  2. En el segundo paso, se modifica el balance del token GEX en el pool acuñando o quemando tokens. La variación del suministro del token GEX se calcula a partir de la cantidad de tokens que el usuario ha recibido o entregado al pool, dependiendo de la operación realizada.

Para ayudar a reducir el deslizamiento de las operaciones, el cual impacta negativamente en el resultado del usuario, el pool divide automáticamente la cantidad de entrada en dos y ejecuta los pasos anteriores dos veces, de forma que en la segunda iteración el usuario se beneficia del incremento de liquidez que él mismo ha generado. Este mecanismo es especialmente efectivo cuando la liquidez del pool es muy baja.

Acuñación de tokens GEX (mintSwap)

Para una operación de compra (acuñación) de tokens GEX, inicialmente se calcula la cantidad de tokens GEX a recibir como si se tratara de un pool de liquidez tipo Uniswap. Si c0c_0 es el balance de colateral en el pool, y g0g_0 el balance de tokens GEX en el pool, el invariante del pool vale:

k0=c0g0=(c0+cin)(g0gout)k_0 = c_0 \cdot g_0 = (c_0 + c_{in})(g_0 - g_{out})

Y la cantidad de tokens recibida por el usuario, goutg_{out}, cuando este entrega una cantidad de colateral, cinc_{in}, se calcula despejando en la ecuación anterior del invariante:

gout=g0(1c0c0+cin)g_{out} = g_0 \bigg( 1 - \frac {c_0}{c_0 + c_{in}} \bigg)

Tras calcular la cantidad de tokens GEX de salida, se aplica el coeficiente de acuñación μ\mu, que incrementa el balance de tokens GEX en el pool:

g1=g0gout(1μ)g_1 = g_0 - g_{out}(1 - \mu)
c1=c0+cinc_1 = c_0 + c_{in}
k1=c1g1k_1 = c_1 \cdot g_1

Finalmente, las comisiones por acuñación del protocolo se deducen de la cantidad de tokens GEX a enviar al usuario.

El coeficiente de acuñación μ\mu toma sus valores en el intervalo [1,2][1,2], lo cual hace que pueda deducirse el comportamiento del GLP en las operaciones de acuñación de tokens GEX:

1. En una operación de acuñación la liquidez siempre aumenta: al estar los valores del coeficiente de acuñación restringidos (μ[1,2]\mu \in [1,2]) la diferencia 1μ1-\mu es siempre menor o igual a 0, lo que implica que g1g0g_1 \ge g_0, el balance final de GEX en el pool será siempre igual o mayor al inicial. Como además c1>c0c_1 > c_0 por tratarse de una operación de acuñación, k1>k0k_1 > k_0, luego el producto de liquidez del pool tras la operación será siempre estrictamente mayor que el inicial.

2. El resultado de una operación en el GLP se acerca más al obtenido en un pool de liquidez tipo Uniswap cuanto más bajo sea el importe de la operación. Si se desarrolla la ecuación del invariante k1k_1 para expresarlo únicamente en función de la cantidad de entrada se tiene:

k1=(c0+cin)g0(1(1μ)(1c0c0+cin))k_1 = (c_0 + c_{in}) \cdot g_0 \Bigg(1 - (1-\mu) \bigg(1- \frac {c_0}{c_0 + c_{in}} \bigg) \Bigg)

Es fácil ver que la expresión anterior converge al valor del invariante inicial k0=c0g0k_0 = c_0 \cdot g_0 cuanto más bajo sea el valor de entrada cinc_{in}, o más formalmente:

limcin0k1=k0\lim_{c_{in} \rarr 0} k_1 = k_0

3. El precio final del token GEX en el pool tras la transacción es inferior al precio que se obtendría en un pool de producto constante puro. Es fácil de ver intuitivamente que, al incrementar el balance de tokens GEX en el pool, el precio relativo de este frente al otro token debe descender:

P1g=c1g1=c0+cing0gout+μgout<c0+cing0goutP_1^g = \frac{c_1}{g_1} = \frac{c_0 + c_{in}}{g_0 - g_{out} + \mu g_{out}} < \frac{c_0 + c_{in}}{g_0 - g_{out}}

Esto supone que las transacciones en un GLP no son reversibles incluso sin tener en cuenta las comisiones del protocolo: si se realiza una operación de acuñación e inmediatamente después se realiza la contraria, canjeando los tokens en el pool, se obtendrá una cantidad inferior en función de lo alejado que esté el producto de liquidez k1k_1 del inicial k0k_0. Como se ha visto en la segunda propiedad, los invariantes coinciden en cero y se separan conforme aumenta el importe de la operación cinc_{in}, o más concretamente la relación c0/cinc_0/c_{in} que determina el deslizamiento que produce la operación en el precio del pool. Cuanto mayor es el deslizamiento (entropía) que genera una operación en el pool, más irreversible es dicha operación. Dicha entropía es capturada por el GLP incrementando el valor del token GEX, motivo por el cual se denomina a los GLP máquinas de captura de entropía.

La irreversibilidad de las operaciones presenta importantes ventajas para la seguridad del protocolo Geminon, ya que implica que no se pueden realizar ataques mediante préstamo flash a un GLP: al no poder devolverse la cantidad prestada en su totalidad, la transacción revertirá. En general, cualquier ataque que implique manipulación de precios en un GLP utilizando transacciones de gran importe que deban deshacerse en un intervalo breve de tiempo, supondrá una pérdida económica para el atacante a favor del protocolo.

Canjeo de tokens GEX (redeemSwap)

Las ecuaciones para el canjeo de token GEX son muy similares a las de acuñación. La principal diferencia entre ambos procesos es que durante el canjeo la comisión del protocolo se deduce de la cantidad de entrada de tokens GEX. La cantidad de colateral de salida coutc_{out}, dada una cantidad de entrada (descontada la comisión) ging_{in}' vale:

cout=c0(1g0g0+gin)c_{out} = c_0 \bigg( 1 - \frac {g_0}{g_0 + g_{in}'} \bigg)

Y los nuevos balances que determinan el producto de liquidez del pool:

c1=c0coutc_1 = c_0 - c_{out}
g1=g0+gin(1ρ)g_1 = g_0 + g_{in}'(1 - \rho)

Curva de precios

En un pool de liquidez de producto constante, el precio de un token respecto a su par es el cociente de las reservas de ambos. Utilizando la relación del producto constante xy=kxy = k se obtiene:

Py=x2kP_y = \frac{x^2}{k}

El precio de un token en un pool de liquidez es una función parabólica de la cantidad del segundo token en el pool. En un GLP en cambio el valor de kk no es constante, sino que su valor varía con la cantidad de colateral en el pool. La función de precio del token GEX en un GLP puede escribirse como:

Pg=c2k(c)P_g = \frac{c^2}{k(c)}

Donde k(c)k(c) es una función que varía linealmente con la cantidad de tokens de colateral. Como consecuencia, la función de precio de los GLP para el token GEX no varía de forma cuadrática con la cantidad de colateral como sucede en un pool tipo Uniswap, sino linealmente. El objetivo de este diseño es reducir la volatilidad del token GEX.

Para una discusión detallada sobre la influencia del ratio de acuñación en el valor de kk, consultar la siguiente página "Control del suministro".

Última actualización