20 #include <ripple/app/misc/AMMHelpers.h>
28 Issue const& lptIssue)
30 auto const tokens =
root2(asset1 * asset2);
49 Number const r = asset1Deposit / asset1Balance;
50 auto const c =
root2(f2 * f2 + r / f1) - f2;
51 auto const t = lptAMMBalance * (r - c) / (1 + c);
75 auto const t1 = lpTokens / lptAMMBalance;
76 auto const t2 = 1 + t1;
77 auto const d = f2 - t1 / t2;
78 auto const a = 1 / (t2 * t2);
79 auto const b = 2 * d / t2 - 1 / f1;
80 auto const c = d * d - f2 * f2;
96 Number const fr = asset1Withdraw / asset1Balance;
97 auto const f1 =
getFee(tfee);
98 auto const c = fr * f1 + 2 - f1;
99 auto const t = lptAMMBalance * (c -
root2(c * c - 4 * fr)) / 2;
120 auto const f =
getFee(tfee);
121 Number const t1 = lpTokens / lptAMMBalance;
122 auto const b = assetBalance * (t1 * t1 - t1 * (2 - f)) / (t1 * f - 1);
142 return (lptAMMBalance + lpTokens) - lptAMMBalance;
143 return (lpTokens - lptAMMBalance) + lptAMMBalance;
156 auto const lpTokensActual =
159 if (lpTokensActual == beast::zero)
161 auto const amount2Opt =
166 if (lpTokensActual < lpTokens)
171 Number const fr = lpTokensActual / lpTokens;
173 auto const amount2Actual =
176 amountActual < amount ? amountActual : amount,
177 amount2Actual < amount2 ? amount2Actual : amount2,
182 auto const amountActual = [&]() {
185 amountBalance, lptAMMBalance, lpTokensActual, tfee);
188 amountBalance, lptAMMBalance, lpTokens, tfee);
190 return amountActual < amount
195 assert(lpTokensActual == lpTokens);
197 return {amount, amount2, lpTokensActual};
203 return (-b +
root2(b * b - 4 * a * c)) / (2 * a);