Для тех кто шарит:

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)