Для тех кто шарит:
Constant Product Automated Market Maker формула, впервые использованая Uniswap:
tokenA_balance(p) * tokenB_balance(p) = k
который переводится в ⇒
$$ x * y = k $$
функция цены равна первой производной
$$ x * y = k ⇒ y = k / x ⇒ dy/dx = - k / x^2 $$
amm(tokenA, tokenB):
k = tokenA * tokenB
d_tokenB = k / (tokenA ^ 2)
return d_tokenB
чтобы найти ликвидность, необходимую для поддержания определенной цены в пуле, мы можем использовать рекурсивный алгоритм, который вы можете увидеть ниже. Эта формула позволяет нам рассчитать необходимое количество usd_liquidity для поддержания desired_price с учетом mytoken_supply.
пример использования
desired_price = [1, 2, 3, 4]
mytoken_supply = [111, 222, 333, 444]
usd_liquidity = []
for i in range(0, 4):
usd_liquidity.append((adjust_liquidity(desired_price[i], 2, 1,
mytoken_supply[i])))
print(usd_liqudity)
если ваша программа сработала корректно вы получите
$$ [110.99465880497492, 443.99219575220167, 998.985104895405, 1775.9875068669867] $$
С помощью этого метода вы можете моделировать потоки ликвидности на основе ваших прогнозируемых доходов
*для повышения точности мы можем установить более низкие критерии настройки, я советую не делать этого, может быть только если цена токена сильно ниже десятичных знаков. Если вы столкнулись с ошибкой рекурсии или хотите получить очень точную информацию, используйте это (я не несу ответственность за ваш компьютер!)
# to fix the error
import sys
sys.setrecursionlimit(50000)
# to ger precision
import os
os.nice(-19)