Estimados, quisiera codificar todos los pasos para el cálculo correcto de un saldo de pool según la lógica Uniswap V2.
Cualquiera que supiera ayudar puede escribir en cualquier lenguaje de programación (Python, Javascript, etc.), en este ejemplo usé R.
El proceso de equilibrio para un grupo de liquidez se puede ver aquí: ejemplo1 y ejemplo2 . Sin embargo, no está claro cómo hacerlo teniendo en cuenta la tarifa de Uniswap, que es del 0,3 % por cada operación.
library(tidyverse) ##### INITIAL PARAMETERS #Uniswap charges users a flat 0.30% fee for #every trade that takes place on the platform and #automatically sends it to a liquidity reserve Uniswap.fee <- 0.30 / 100 ETH.initial.price <- 100 ETH.pool.price <- 100 BNT.initial.price <- 1 BNT.pool.price <- 1 ##### INITIAL SITUATION BNT.units <- 1000 BNT.total <- BNT.units * BNT.initial.price ETH.units <- BNT.total / ETH.initial.price ETH.total <- ETH.units * ETH.initial.price Pool.Value <- BNT.total + ETH.total Pool.DF <- data.frame(Symbol = c("BNT", "ETH"), Share = c(BNT.total,ETH.total)) ggplot(Pool.DF, aes(x = Symbol, y=Share, fill=Symbol)) + geom_bar(width = 1, position = "dodge", stat="identity") + labs(title="Initial POOL") ##### FINAL SITUATION ETH.final.price <- 120 ETH.pool.price <- 100 BNT.final.price <- 1 BNT.pool.price <- 1 ##### Imbalanced.Pool Imbalanced.Pool <- data.frame(Symbol = c("BNT", "ETH"), Share = c(BNT.total,ETH.units * ETH.final.price )) ggplot(Imbalanced.Pool, aes(x = Symbol, y=Share, fill=Symbol)) + geom_bar(width = 1, position = "dodge", stat="identity")+ labs(title="Imbalanced POOL: ETH valorization") #### need to balance:... Ahora no sé cómo seguir los pasos para equilibrar correctamente y obtener los valores de pérdida impermanente y ganancia arbitraria.
Muchísimas gracias,
Para los protocolos DeFi que utilizan creadores de mercado automatizados, implementamos un grupo de un par de activos (por ejemplo, BTC-USDT), y fijamos el precio de los dos activos simplemente con:
b * u = constante
Aquí b es la cantidad de BTC en el grupo y u es la cantidad de USDT. Además, la constante a menudo se escribe como K en muchos artículos.
Ahora suponga que desea intercambiar una cantidad de b 'BTC a USDT. Le das el b 'BTC al protocolo DeFi, y el protocolo descubre que debe reducir la cantidad de USDT (que se te dará) para mantener b * u = constante. Luego, con cálculos simples, el grupo decide darle u' USDT de modo que: (b+b')*(u-u') = constante
Con esta transacción (suponiendo que no se acumule una comisión del 0,3 %), obtienes u' USDT dando b' BTC.
Luego se trata de la tarifa del 0,3%. Cuando le da b' BTC al grupo, el grupo actúa como si solo le diera la cantidad deducida b'' == 99.7% * b'. Entonces el grupo calcula u'' de modo que
(b+b'')*(u-u'') = constante
En el cálculo real siempre hay errores debido al número limitado de decimales (solo puede recibir 0,1272 USDT en lugar de 0,127272727272...). Por lo tanto, la constante afirmada puede aumentar lentamente a medida que se ejecutan más y más transacciones de intercambio. Esto aumenta lentamente el volumen del fondo de liquidez. Tenga en cuenta que la comisión acumulada del 0,3 % puede no servir como parte del fondo de liquidez.
Para los códigos, usaría los códigos de Flamingo como ejemplo.
Primero, inicializa un intercambio a través de FlamingoSwapRouter. Das tus tokens vendidos al enrutador https://github.com/flamingo-finance/flamingo-contract-swap/blob/74e61f8406f9e8ededed72f9cb7e0139091ae17c/Swap/flamingo-contract-swap/FlamingoSwapRouter/FlamingoSwapRouterContract.cs#L237
Luego, el enrutador SafeTransfer su token vendido a su contrato de intercambio de pares y llame al método de swap del contrato de intercambio para darle el token que compra.
https://github.com/flamingo-finance/flamingo-contract-swap/blob/74e61f8406f9e8ededed72f9cb7e0139091ae17c/Swap/flamingo-contract-swap/FlamingoSwapPair/FlamingoSwapPairContract.cs#L140
Puede ver el código var balance0Adjusted = balance0 * 1000 - amount0In * 3; que ajusta la cantidad asumida de token en el grupo de liquidez. Hay una cantidad ligeramente superior de token en el grupo de liquidez que son tarifas acumuladas, no parte de la liquidez.