@paraswap/dex-lib 2.16.8-pancakeswapv3.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/build/abi/woo-fi/WooFeeManager.abi.json +318 -0
  9. package/build/abi/woo-fi/WooPP.abi.json +548 -0
  10. package/build/abi/woo-fi/Wooracle.abi.json +260 -0
  11. package/build/config.js +4 -4
  12. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  13. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  14. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  15. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  16. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  17. package/build/dex/balancer-v2/balancer-v2.d.ts +14 -19
  18. package/build/dex/balancer-v2/balancer-v2.js +27 -22
  19. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  20. package/build/dex/balancer-v2/config.d.ts +2 -7
  21. package/build/dex/balancer-v2/config.js +20 -30
  22. package/build/dex/balancer-v2/config.js.map +1 -1
  23. package/build/dex/balancer-v2/pools/balancer-v2-pool.d.ts +25 -0
  24. package/build/dex/balancer-v2/pools/balancer-v2-pool.js +107 -0
  25. package/build/dex/balancer-v2/pools/balancer-v2-pool.js.map +1 -0
  26. package/build/dex/balancer-v2/pools/linear/LinearMath.d.ts +20 -0
  27. package/build/dex/balancer-v2/pools/linear/LinearMath.js +179 -0
  28. package/build/dex/balancer-v2/pools/linear/LinearMath.js.map +1 -0
  29. package/build/dex/balancer-v2/pools/linear/LinearPool.d.ts +50 -0
  30. package/build/dex/balancer-v2/pools/linear/LinearPool.js +458 -0
  31. package/build/dex/balancer-v2/pools/linear/LinearPool.js.map +1 -0
  32. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.d.ts +10 -0
  33. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js +314 -0
  34. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js.map +1 -0
  35. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.d.ts +50 -0
  36. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js +367 -0
  37. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js.map +1 -0
  38. package/build/dex/balancer-v2/pools/stable/StableMath.d.ts +7 -0
  39. package/build/dex/balancer-v2/pools/stable/StableMath.js +111 -0
  40. package/build/dex/balancer-v2/pools/stable/StableMath.js.map +1 -0
  41. package/build/dex/balancer-v2/pools/stable/StablePool.d.ts +30 -0
  42. package/build/dex/balancer-v2/pools/stable/StablePool.js +129 -0
  43. package/build/dex/balancer-v2/pools/stable/StablePool.js.map +1 -0
  44. package/build/dex/balancer-v2/pools/weighted/WeightedMath.d.ts +6 -0
  45. package/build/dex/balancer-v2/pools/weighted/WeightedMath.js +61 -0
  46. package/build/dex/balancer-v2/pools/weighted/WeightedMath.js.map +1 -0
  47. package/build/dex/balancer-v2/pools/weighted/WeightedPool.d.ts +30 -0
  48. package/build/dex/balancer-v2/pools/weighted/WeightedPool.js +112 -0
  49. package/build/dex/balancer-v2/pools/weighted/WeightedPool.js.map +1 -0
  50. package/build/dex/balancer-v2/types.d.ts +1 -0
  51. package/build/dex/balancer-v2/types.js.map +1 -1
  52. package/build/dex/balancer-v2/utils.d.ts +3 -2
  53. package/build/dex/balancer-v2/utils.js +6 -4
  54. package/build/dex/balancer-v2/utils.js.map +1 -1
  55. package/build/dex/index.js +1 -1
  56. package/build/dex/index.js.map +1 -1
  57. package/build/dex/quickswap-v3.d.ts +21 -0
  58. package/build/dex/quickswap-v3.js +40 -0
  59. package/build/dex/quickswap-v3.js.map +1 -0
  60. package/build/dex/uniswap-v3/config.js +28 -0
  61. package/build/dex/uniswap-v3/config.js.map +1 -1
  62. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +2 -1
  63. package/build/dex/uniswap-v3/uniswap-v3-pool.js +3 -2
  64. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  65. package/build/dex/uniswap-v3/uniswap-v3.js +1 -1
  66. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  67. package/build/dex/{pancakeswap-v3 → woo-fi}/config.d.ts +2 -2
  68. package/build/dex/woo-fi/config.js +141 -0
  69. package/build/dex/woo-fi/config.js.map +1 -0
  70. package/build/dex/woo-fi/constants.d.ts +5 -0
  71. package/build/dex/woo-fi/constants.js +20 -0
  72. package/build/dex/woo-fi/constants.js.map +1 -0
  73. package/build/dex/woo-fi/types.d.ts +48 -0
  74. package/build/dex/woo-fi/types.js +3 -0
  75. package/build/dex/woo-fi/types.js.map +1 -0
  76. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  77. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  78. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  79. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  80. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  81. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  82. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  83. package/build/dex/woo-fi/woo-fi.js +480 -0
  84. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  85. package/package.json +1 -1
  86. package/src/config.ts +4 -4
  87. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +538 -225
  88. package/src/dex/balancer-v2/balancer-v2-integration.test.ts +305 -122
  89. package/src/dex/balancer-v2/balancer-v2.ts +60 -56
  90. package/src/dex/balancer-v2/config.ts +23 -35
  91. package/src/dex/balancer-v2/pools/balancer-v2-pool.ts +274 -0
  92. package/src/dex/balancer-v2/{LinearMath.ts → pools/linear/LinearMath.ts} +11 -10
  93. package/src/dex/balancer-v2/{LinearPool.ts → pools/linear/LinearPool.ts} +210 -6
  94. package/src/dex/balancer-v2/{StableMath.ts → pools/phantom-stable/PhantomStableMath.ts} +101 -21
  95. package/src/dex/balancer-v2/{PhantomStablePool.ts → pools/phantom-stable/PhantomStablePool.ts} +167 -12
  96. package/src/dex/balancer-v2/pools/stable/StableMath.ts +204 -0
  97. package/src/dex/balancer-v2/pools/stable/StablePool.ts +221 -0
  98. package/src/dex/balancer-v2/pools/weighted/WeightedMath.ts +84 -0
  99. package/src/dex/balancer-v2/pools/weighted/WeightedPool.ts +189 -0
  100. package/src/dex/balancer-v2/types.ts +1 -0
  101. package/src/dex/balancer-v2/utils.ts +7 -1
  102. package/src/dex/index.ts +1 -1
  103. package/src/dex/uniswap-v3/config.ts +32 -0
  104. package/src/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.ts +28 -0
  105. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +156 -0
  106. package/src/dex/uniswap-v3/uniswap-v3-events.test.ts +0 -4
  107. package/src/dex/uniswap-v3/uniswap-v3-pool.ts +2 -1
  108. package/src/dex/uniswap-v3/uniswap-v3.ts +1 -0
  109. package/tests/constants-e2e.ts +33 -8
  110. package/build/abi/pancakeswap-v3/PancakeV3StateMulticall.abi.json +0 -781
  111. package/build/abi/pancakeswap-v3/PancakeswapV3Pool.abi.json +0 -1039
  112. package/build/abi/pancakeswap-v3/PancakeswapV3Quoter.abi.json +0 -285
  113. package/build/abi/pancakeswap-v3/PancakeswapV3Router.abi.json +0 -583
  114. package/build/dex/pancakeswap-v3/config.js +0 -62
  115. package/build/dex/pancakeswap-v3/config.js.map +0 -1
  116. package/build/dex/pancakeswap-v3/constants.d.ts +0 -23
  117. package/build/dex/pancakeswap-v3/constants.js +0 -29
  118. package/build/dex/pancakeswap-v3/constants.js.map +0 -1
  119. package/build/dex/pancakeswap-v3/contract-math/BitMath.d.ts +0 -4
  120. package/build/dex/pancakeswap-v3/contract-math/BitMath.js +0 -93
  121. package/build/dex/pancakeswap-v3/contract-math/BitMath.js.map +0 -1
  122. package/build/dex/pancakeswap-v3/contract-math/FixedPoint128.d.ts +0 -3
  123. package/build/dex/pancakeswap-v3/contract-math/FixedPoint128.js +0 -8
  124. package/build/dex/pancakeswap-v3/contract-math/FixedPoint128.js.map +0 -1
  125. package/build/dex/pancakeswap-v3/contract-math/FixedPoint96.d.ts +0 -4
  126. package/build/dex/pancakeswap-v3/contract-math/FixedPoint96.js +0 -9
  127. package/build/dex/pancakeswap-v3/contract-math/FixedPoint96.js.map +0 -1
  128. package/build/dex/pancakeswap-v3/contract-math/FullMath.d.ts +0 -4
  129. package/build/dex/pancakeswap-v3/contract-math/FullMath.js +0 -19
  130. package/build/dex/pancakeswap-v3/contract-math/FullMath.js.map +0 -1
  131. package/build/dex/pancakeswap-v3/contract-math/LiquidityMath.d.ts +0 -3
  132. package/build/dex/pancakeswap-v3/contract-math/LiquidityMath.js +0 -22
  133. package/build/dex/pancakeswap-v3/contract-math/LiquidityMath.js.map +0 -1
  134. package/build/dex/pancakeswap-v3/contract-math/Oracle.d.ts +0 -10
  135. package/build/dex/pancakeswap-v3/contract-math/Oracle.js +0 -133
  136. package/build/dex/pancakeswap-v3/contract-math/Oracle.js.map +0 -1
  137. package/build/dex/pancakeswap-v3/contract-math/SqrtPriceMath.d.ts +0 -10
  138. package/build/dex/pancakeswap-v3/contract-math/SqrtPriceMath.js +0 -91
  139. package/build/dex/pancakeswap-v3/contract-math/SqrtPriceMath.js.map +0 -1
  140. package/build/dex/pancakeswap-v3/contract-math/SwapMath.d.ts +0 -8
  141. package/build/dex/pancakeswap-v3/contract-math/SwapMath.js +0 -70
  142. package/build/dex/pancakeswap-v3/contract-math/SwapMath.js.map +0 -1
  143. package/build/dex/pancakeswap-v3/contract-math/Tick.d.ts +0 -7
  144. package/build/dex/pancakeswap-v3/contract-math/Tick.js +0 -45
  145. package/build/dex/pancakeswap-v3/contract-math/Tick.js.map +0 -1
  146. package/build/dex/pancakeswap-v3/contract-math/TickBitMap.d.ts +0 -8
  147. package/build/dex/pancakeswap-v3/contract-math/TickBitMap.js +0 -87
  148. package/build/dex/pancakeswap-v3/contract-math/TickBitMap.js.map +0 -1
  149. package/build/dex/pancakeswap-v3/contract-math/TickMath.d.ts +0 -8
  150. package/build/dex/pancakeswap-v3/contract-math/TickMath.js +0 -162
  151. package/build/dex/pancakeswap-v3/contract-math/TickMath.js.map +0 -1
  152. package/build/dex/pancakeswap-v3/contract-math/UnsafeMath.d.ts +0 -3
  153. package/build/dex/pancakeswap-v3/contract-math/UnsafeMath.js +0 -10
  154. package/build/dex/pancakeswap-v3/contract-math/UnsafeMath.js.map +0 -1
  155. package/build/dex/pancakeswap-v3/contract-math/pancakeswap-v3-math.d.ts +0 -18
  156. package/build/dex/pancakeswap-v3/contract-math/pancakeswap-v3-math.js +0 -407
  157. package/build/dex/pancakeswap-v3/contract-math/pancakeswap-v3-math.js.map +0 -1
  158. package/build/dex/pancakeswap-v3/contract-math/utils.d.ts +0 -3
  159. package/build/dex/pancakeswap-v3/contract-math/utils.js +0 -16
  160. package/build/dex/pancakeswap-v3/contract-math/utils.js.map +0 -1
  161. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +0 -45
  162. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +0 -340
  163. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +0 -1
  164. package/build/dex/pancakeswap-v3/pancakeswap-v3.d.ts +0 -55
  165. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +0 -605
  166. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +0 -1
  167. package/build/dex/pancakeswap-v3/types.d.ts +0 -137
  168. package/build/dex/pancakeswap-v3/types.js +0 -9
  169. package/build/dex/pancakeswap-v3/types.js.map +0 -1
  170. package/build/dex/pancakeswap-v3/utils.d.ts +0 -6
  171. package/build/dex/pancakeswap-v3/utils.js +0 -65
  172. package/build/dex/pancakeswap-v3/utils.js.map +0 -1
  173. package/src/abi/pancakeswap-v3/PancakeV3StateMulticall.abi.json +0 -781
  174. package/src/abi/pancakeswap-v3/PancakeswapV3Pool.abi.json +0 -1039
  175. package/src/dex/balancer-v2/balancer-v2-pool.ts +0 -744
  176. package/src/dex/pancakeswap-v3/config.ts +0 -68
  177. package/src/dex/pancakeswap-v3/constants.ts +0 -35
  178. package/src/dex/pancakeswap-v3/contract-math/BitMath.ts +0 -90
  179. package/src/dex/pancakeswap-v3/contract-math/FixedPoint128.ts +0 -3
  180. package/src/dex/pancakeswap-v3/contract-math/FixedPoint96.ts +0 -4
  181. package/src/dex/pancakeswap-v3/contract-math/FullMath.ts +0 -30
  182. package/src/dex/pancakeswap-v3/contract-math/LiquidityMath.ts +0 -17
  183. package/src/dex/pancakeswap-v3/contract-math/Oracle.ts +0 -226
  184. package/src/dex/pancakeswap-v3/contract-math/SqrtPriceMath.ts +0 -226
  185. package/src/dex/pancakeswap-v3/contract-math/SwapMath.ts +0 -139
  186. package/src/dex/pancakeswap-v3/contract-math/Tick.ts +0 -82
  187. package/src/dex/pancakeswap-v3/contract-math/TickBitMap.ts +0 -128
  188. package/src/dex/pancakeswap-v3/contract-math/TickMath.ts +0 -211
  189. package/src/dex/pancakeswap-v3/contract-math/UnsafeMath.ts +0 -5
  190. package/src/dex/pancakeswap-v3/contract-math/pancakeswap-v3-math.ts +0 -691
  191. package/src/dex/pancakeswap-v3/contract-math/utils.ts +0 -11
  192. package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +0 -168
  193. package/src/dex/pancakeswap-v3/pancakeswap-v3-events.test.ts +0 -124
  194. package/src/dex/pancakeswap-v3/pancakeswap-v3-integration.test.ts +0 -338
  195. package/src/dex/pancakeswap-v3/pancakeswap-v3-pool.ts +0 -554
  196. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +0 -1000
  197. /package/src/abi/{pancakeswap-v3/PancakeswapV3Quoter.abi.json → uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json} +0 -0
  198. /package/src/abi/{pancakeswap-v3 → uniswap-v3/pancakeswap-v3}/PancakeswapV3Router.abi.json +0 -0
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addFee = exports.subtractFee = exports._calcTokensOutGivenExactBptIn = exports._calcTokenOutGivenExactBptIn = exports._calcBptInGivenExactTokensOut = exports._calcTokenInGivenExactBptOut = exports._calcBptOutGivenExactTokensIn = exports._calcInGivenOut = exports._calcOutGivenIn = exports._calculateInvariant = void 0;
4
+ const bigint_constants_1 = require("../../../../bigint-constants");
5
+ const balancer_v2_math_1 = require("../../balancer-v2-math");
6
+ const AMP_PRECISION = bigint_constants_1.BI_POWS[3];
7
+ function _calculateInvariant(amp, balances, roundUp) {
8
+ /**********************************************************************************************
9
+ // invariant //
10
+ // D = invariant D^(n+1) //
11
+ // A = amplification coefficient A n^n S + D = A D n^n + ----------- //
12
+ // S = sum of balances n^n P //
13
+ // P = product of balances //
14
+ // n = number of tokens //
15
+ *********x************************************************************************************/
16
+ // We support rounding up or down.
17
+ let sum = 0n;
18
+ const numTokens = balances.length;
19
+ for (let i = 0; i < numTokens; i++) {
20
+ sum = sum + balances[i];
21
+ }
22
+ if (sum == 0n) {
23
+ return 0n;
24
+ }
25
+ let prevInvariant = 0n;
26
+ let invariant = sum;
27
+ const ampTimesTotal = amp * BigInt(numTokens);
28
+ for (let i = 0; i < 255; i++) {
29
+ let P_D = balances[0] * BigInt(numTokens);
30
+ for (let j = 1; j < numTokens; j++) {
31
+ P_D = balancer_v2_math_1.MathSol.div(balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.mul(P_D, balances[j]), BigInt(numTokens)), invariant, roundUp);
32
+ }
33
+ prevInvariant = invariant;
34
+ invariant = balancer_v2_math_1.MathSol.div(balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.mul(BigInt(numTokens), invariant), invariant) +
35
+ balancer_v2_math_1.MathSol.div(balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.mul(ampTimesTotal, sum), P_D), AMP_PRECISION, roundUp), balancer_v2_math_1.MathSol.mul(BigInt(numTokens + 1), invariant) +
36
+ // No need to use checked arithmetic for the amp precision, the amp is guaranteed to be at least 1
37
+ balancer_v2_math_1.MathSol.div(balancer_v2_math_1.MathSol.mul(ampTimesTotal - AMP_PRECISION, P_D), AMP_PRECISION, !roundUp), roundUp);
38
+ if (invariant > prevInvariant) {
39
+ if (invariant - prevInvariant <= 1) {
40
+ return invariant;
41
+ }
42
+ }
43
+ else if (prevInvariant - invariant <= 1) {
44
+ return invariant;
45
+ }
46
+ }
47
+ throw new Error('Errors.STABLE_INVARIANT_DIDNT_CONVERGE');
48
+ }
49
+ exports._calculateInvariant = _calculateInvariant;
50
+ // PairType = 'token->token'
51
+ // SwapType = 'swapExactIn'
52
+ function _calcOutGivenIn(amp, balances, tokenIndexIn, tokenIndexOut, amountIn, invariant) {
53
+ /**************************************************************************************************************
54
+ // outGivenIn token x for y - polynomial equation to solve //
55
+ // ay = amount out to calculate //
56
+ // by = balance token out //
57
+ // y = by - ay (finalBalanceOut) //
58
+ // D = invariant D D^(n+1) //
59
+ // A = amplification coefficient y^2 + ( S - ---------- - D) * y - ------------- = 0 //
60
+ // n = number of tokens (A * n^n) A * n^2n * P //
61
+ // S = sum of final balances but y //
62
+ // P = product of final balances but y //
63
+ **************************************************************************************************************/
64
+ balances = [...balances];
65
+ // Given that we need to have a greater final balance out, the invariant needs to be rounded up
66
+ if (!invariant)
67
+ invariant = _calculateInvariant(amp, balances, true);
68
+ const initBalance = balances[tokenIndexIn];
69
+ balances[tokenIndexIn] = initBalance + amountIn;
70
+ const finalBalanceOut = _getTokenBalanceGivenInvariantAndAllOtherBalances(amp, balances, invariant, tokenIndexOut);
71
+ return balances[tokenIndexOut] - finalBalanceOut - 1n;
72
+ }
73
+ exports._calcOutGivenIn = _calcOutGivenIn;
74
+ function _calcInGivenOut(amp, balances, tokenIndexIn, tokenIndexOut, amountOut, fee, invariant) {
75
+ /**************************************************************************************************************
76
+ // inGivenOut token x for y - polynomial equation to solve //
77
+ // ax = amount in to calculate //
78
+ // bx = balance token in //
79
+ // x = bx + ax (finalBalanceIn) //
80
+ // D = invariant D D^(n+1) //
81
+ // A = amplification coefficient x^2 + ( S - ---------- - D) * x - ------------- = 0 //
82
+ // n = number of tokens (A * n^n) A * n^2n * P //
83
+ // S = sum of final balances but x //
84
+ // P = product of final balances but x //
85
+ **************************************************************************************************************/
86
+ // Given that we need to have a greater final balance in, the invariant needs to be rounded up
87
+ balances = [...balances];
88
+ if (!invariant)
89
+ invariant = _calculateInvariant(amp, balances, true);
90
+ balances[tokenIndexOut] = balancer_v2_math_1.MathSol.sub(balances[tokenIndexOut], amountOut);
91
+ const finalBalanceIn = _getTokenBalanceGivenInvariantAndAllOtherBalances(amp, balances, invariant, tokenIndexIn);
92
+ let amountIn = balancer_v2_math_1.MathSol.add(balancer_v2_math_1.MathSol.sub(finalBalanceIn, balances[tokenIndexIn]), 1n);
93
+ amountIn = addFee(amountIn, fee);
94
+ return amountIn;
95
+ }
96
+ exports._calcInGivenOut = _calcInGivenOut;
97
+ function _calcBptOutGivenExactTokensIn(amp, balances, amountsIn, bptTotalSupply, invariant) {
98
+ if (!invariant)
99
+ invariant = _calculateInvariant(amp, balances, true);
100
+ // BPT out, so we round down overall.
101
+ // First loop calculates the sum of all token balances, which will be used to calculate
102
+ // the current weights of each token, relative to this sum
103
+ let sumBalances = 0n;
104
+ for (let i = 0; i < balances.length; i++) {
105
+ sumBalances = sumBalances + balances[i];
106
+ }
107
+ // Calculate the weighted balance ratio without considering fees
108
+ const balanceRatiosWithFee = new Array(amountsIn.length);
109
+ // The weighted sum of token balance ratios with fee
110
+ let invariantRatioWithFees = 0n;
111
+ for (let i = 0; i < balances.length; i++) {
112
+ const currentWeight = balancer_v2_math_1.MathSol.divDownFixed(balances[i], sumBalances);
113
+ balanceRatiosWithFee[i] = balancer_v2_math_1.MathSol.divDownFixed(balances[i] + amountsIn[i], balances[i]);
114
+ invariantRatioWithFees =
115
+ invariantRatioWithFees +
116
+ balancer_v2_math_1.MathSol.mulDownFixed(balanceRatiosWithFee[i], currentWeight);
117
+ }
118
+ // Second loop calculates new amounts in, taking into account the fee on the percentage excess
119
+ const newBalances = new Array(balances.length);
120
+ for (let i = 0; i < balances.length; i++) {
121
+ let amountInWithoutFee;
122
+ // Check if the balance ratio is greater than the ideal ratio to charge fees or not
123
+ if (balanceRatiosWithFee[i] > invariantRatioWithFees) {
124
+ const nonTaxableAmount = balancer_v2_math_1.MathSol.mulDownFixed(balances[i], invariantRatioWithFees - balancer_v2_math_1.MathSol.ONE);
125
+ const taxableAmount = amountsIn[i] - nonTaxableAmount;
126
+ // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%
127
+ // amountInWithoutFee =
128
+ // nonTaxableAmount +
129
+ // MathSol.mulDownFixed(
130
+ // taxableAmount,
131
+ // MathSol.ONE - swapFeePercentage
132
+ // );
133
+ amountInWithoutFee = nonTaxableAmount + taxableAmount;
134
+ }
135
+ else {
136
+ amountInWithoutFee = amountsIn[i];
137
+ }
138
+ newBalances[i] = balances[i] + amountInWithoutFee;
139
+ }
140
+ // Get current and new invariants, taking swap fees into account
141
+ const currentInvariant = _calculateInvariant(amp, balances, true);
142
+ const newInvariant = _calculateInvariant(amp, newBalances, false);
143
+ const invariantRatio = balancer_v2_math_1.MathSol.divDownFixed(newInvariant, currentInvariant);
144
+ // If the invariant didn't increase for any reason, we simply don't mint BPT
145
+ if (invariantRatio > balancer_v2_math_1.MathSol.ONE) {
146
+ return balancer_v2_math_1.MathSol.mulDownFixed(bptTotalSupply, invariantRatio - balancer_v2_math_1.MathSol.ONE);
147
+ }
148
+ else {
149
+ return 0n;
150
+ }
151
+ }
152
+ exports._calcBptOutGivenExactTokensIn = _calcBptOutGivenExactTokensIn;
153
+ function _calcTokenInGivenExactBptOut(amp, balances, tokenIndexIn, bptAmountOut, bptTotalSupply, fee, invariant) {
154
+ if (!invariant)
155
+ invariant = _calculateInvariant(amp, balances, true);
156
+ const newInvariant = balancer_v2_math_1.MathSol.mulUpFixed(balancer_v2_math_1.MathSol.divUpFixed(balancer_v2_math_1.MathSol.add(bptTotalSupply, bptAmountOut), bptTotalSupply), invariant);
157
+ const newBalanceTokenIndex = _getTokenBalanceGivenInvariantAndAllOtherBalances(amp, balances, newInvariant, tokenIndexIn);
158
+ const amountInWithoutFee = balancer_v2_math_1.MathSol.sub(newBalanceTokenIndex, balances[tokenIndexIn]);
159
+ let sumBalances = BigInt(0);
160
+ for (let i = 0; i < balances.length; i++) {
161
+ sumBalances = balancer_v2_math_1.MathSol.add(sumBalances, balances[i]);
162
+ }
163
+ // We can now compute how much extra balance is being deposited
164
+ // and used in virtual swaps, and charge swap fees accordingly.
165
+ const currentWeight = balancer_v2_math_1.MathSol.divDownFixed(balances[tokenIndexIn], sumBalances);
166
+ const taxablePercentage = balancer_v2_math_1.MathSol.complementFixed(currentWeight);
167
+ const taxableAmount = balancer_v2_math_1.MathSol.mulUpFixed(amountInWithoutFee, taxablePercentage);
168
+ const nonTaxableAmount = balancer_v2_math_1.MathSol.sub(amountInWithoutFee, taxableAmount);
169
+ return balancer_v2_math_1.MathSol.add(nonTaxableAmount, balancer_v2_math_1.MathSol.divUpFixed(taxableAmount, balancer_v2_math_1.MathSol.sub(balancer_v2_math_1.MathSol.ONE, fee)));
170
+ }
171
+ exports._calcTokenInGivenExactBptOut = _calcTokenInGivenExactBptOut;
172
+ /*
173
+ Flow of calculations:
174
+ amountsTokenOut -> amountsOutProportional ->
175
+ amountOutPercentageExcess -> amountOutBeforeFee -> newInvariant -> amountBPTIn
176
+ */
177
+ function _calcBptInGivenExactTokensOut(amp, balances, amountsOut, bptTotalSupply, swapFeePercentage, invariant) {
178
+ if (!invariant)
179
+ invariant = _calculateInvariant(amp, balances, true);
180
+ // BPT in, so we round up overall.
181
+ // First loop calculates the sum of all token balances, which will be used to calculate
182
+ // the current weights of each token relative to this sum
183
+ let sumBalances = 0n;
184
+ for (let i = 0; i < balances.length; i++) {
185
+ sumBalances = sumBalances + balances[i];
186
+ }
187
+ // Calculate the weighted balance ratio without considering fees
188
+ const balanceRatiosWithoutFee = new Array(amountsOut.length);
189
+ let invariantRatioWithoutFees = 0n;
190
+ for (let i = 0; i < balances.length; i++) {
191
+ const currentWeight = balancer_v2_math_1.MathSol.divUpFixed(balances[i], sumBalances);
192
+ balanceRatiosWithoutFee[i] = balancer_v2_math_1.MathSol.divUpFixed(balances[i] - amountsOut[i], balances[i]);
193
+ invariantRatioWithoutFees =
194
+ invariantRatioWithoutFees +
195
+ balancer_v2_math_1.MathSol.mulUpFixed(balanceRatiosWithoutFee[i], currentWeight);
196
+ }
197
+ // Second loop calculates new amounts in, taking into account the fee on the percentage excess
198
+ const newBalances = new Array(balances.length);
199
+ for (let i = 0; i < balances.length; i++) {
200
+ // Swap fees are typically charged on 'token in', but there is no 'token in' here, so we apply it to
201
+ // 'token out'. This results in slightly larger price impact.
202
+ let amountOutWithFee;
203
+ if (invariantRatioWithoutFees > balanceRatiosWithoutFee[i]) {
204
+ const nonTaxableAmount = balancer_v2_math_1.MathSol.mulDownFixed(balances[i], balancer_v2_math_1.MathSol.complementFixed(invariantRatioWithoutFees));
205
+ const taxableAmount = amountsOut[i] - nonTaxableAmount;
206
+ // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%
207
+ amountOutWithFee =
208
+ nonTaxableAmount +
209
+ balancer_v2_math_1.MathSol.divUpFixed(taxableAmount, balancer_v2_math_1.MathSol.ONE - swapFeePercentage);
210
+ }
211
+ else {
212
+ amountOutWithFee = amountsOut[i];
213
+ }
214
+ newBalances[i] = balances[i] - amountOutWithFee;
215
+ }
216
+ // Get current and new invariants, taking into account swap fees
217
+ const currentInvariant = _calculateInvariant(amp, balances, true);
218
+ const newInvariant = _calculateInvariant(amp, newBalances, false);
219
+ const invariantRatio = balancer_v2_math_1.MathSol.divDownFixed(newInvariant, currentInvariant);
220
+ // return amountBPTIn
221
+ return balancer_v2_math_1.MathSol.mulUpFixed(bptTotalSupply, balancer_v2_math_1.MathSol.complementFixed(invariantRatio));
222
+ }
223
+ exports._calcBptInGivenExactTokensOut = _calcBptInGivenExactTokensOut;
224
+ function _calcTokenOutGivenExactBptIn(amp, balances, tokenIndex, bptAmountIn, bptTotalSupply, invariant) {
225
+ if (!invariant)
226
+ invariant = _calculateInvariant(amp, balances, true);
227
+ // Token out, so we round down overall.
228
+ // Get the current and new invariants. Since we need a bigger new invariant, we round the current one up.
229
+ const currentInvariant = _calculateInvariant(amp, balances, true);
230
+ const newInvariant = balancer_v2_math_1.MathSol.mulUpFixed(balancer_v2_math_1.MathSol.divUpFixed(bptTotalSupply - bptAmountIn, bptTotalSupply), currentInvariant);
231
+ // Calculate amount out without fee
232
+ const newBalanceTokenIndex = _getTokenBalanceGivenInvariantAndAllOtherBalances(amp, balances, newInvariant, tokenIndex);
233
+ const amountOutWithoutFee = balances[tokenIndex] - newBalanceTokenIndex;
234
+ // First calculate the sum of all token balances, which will be used to calculate
235
+ // the current weight of each token
236
+ let sumBalances = 0n;
237
+ for (let i = 0; i < balances.length; i++) {
238
+ sumBalances = sumBalances + balances[i];
239
+ }
240
+ // We can now compute how much excess balance is being withdrawn as a result of the virtual swaps, which result
241
+ // in swap fees.
242
+ const currentWeight = balancer_v2_math_1.MathSol.divDownFixed(balances[tokenIndex], sumBalances);
243
+ const taxablePercentage = balancer_v2_math_1.MathSol.complementFixed(currentWeight);
244
+ // Swap fees are typically charged on 'token in', but there is no 'token in' here, so we apply it
245
+ // to 'token out'. This results in slightly larger price impact. Fees are rounded up.
246
+ const taxableAmount = balancer_v2_math_1.MathSol.mulUpFixed(amountOutWithoutFee, taxablePercentage);
247
+ const nonTaxableAmount = amountOutWithoutFee - taxableAmount;
248
+ // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%
249
+ return nonTaxableAmount + taxableAmount;
250
+ }
251
+ exports._calcTokenOutGivenExactBptIn = _calcTokenOutGivenExactBptIn;
252
+ function _calcTokensOutGivenExactBptIn(balances, bptAmountIn, bptTotalSupply) {
253
+ /**********************************************************************************************
254
+ // exactBPTInForTokensOut //
255
+ // (per token) //
256
+ // aO = tokenAmountOut / bptIn \ //
257
+ // b = tokenBalance a0 = b * | --------------------- | //
258
+ // bptIn = bptAmountIn \ bptTotalSupply / //
259
+ // bpt = bptTotalSupply //
260
+ **********************************************************************************************/
261
+ // Since we're computing an amount out, we round down overall. This means rounding down on both the
262
+ // multiplication and division.
263
+ const bptRatio = balancer_v2_math_1.MathSol.divDownFixed(bptAmountIn, bptTotalSupply);
264
+ const amountsOut = new Array(balances.length);
265
+ for (let i = 0; i < balances.length; i++) {
266
+ amountsOut[i] = balancer_v2_math_1.MathSol.mulDownFixed(balances[i], bptRatio);
267
+ }
268
+ return amountsOut;
269
+ }
270
+ exports._calcTokensOutGivenExactBptIn = _calcTokensOutGivenExactBptIn;
271
+ function _getTokenBalanceGivenInvariantAndAllOtherBalances(amp, balances, invariant, tokenIndex) {
272
+ // Rounds result up overall
273
+ const ampTimesTotal = amp * BigInt(balances.length);
274
+ let sum = balances[0];
275
+ let P_D = balances[0] * BigInt(balances.length);
276
+ for (let j = 1; j < balances.length; j++) {
277
+ P_D = balancer_v2_math_1.MathSol.divDown(balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.mul(P_D, balances[j]), BigInt(balances.length)), invariant);
278
+ sum = sum + balances[j];
279
+ }
280
+ // No need to use safe math, based on the loop above `sum` is greater than or equal to `balances[tokenIndex]`
281
+ sum = sum - balances[tokenIndex];
282
+ const inv2 = balancer_v2_math_1.MathSol.mul(invariant, invariant);
283
+ // We remove the balance fromm c by multiplying it
284
+ const c = balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.divUp(inv2, balancer_v2_math_1.MathSol.mul(ampTimesTotal, P_D)), AMP_PRECISION), balances[tokenIndex]);
285
+ const b = sum + balancer_v2_math_1.MathSol.mul(balancer_v2_math_1.MathSol.divDown(invariant, ampTimesTotal), AMP_PRECISION);
286
+ // We iterate to find the balance
287
+ let prevTokenBalance = 0n;
288
+ // We multiply the first iteration outside the loop with the invariant to set the value of the
289
+ // initial approximation.
290
+ let tokenBalance = balancer_v2_math_1.MathSol.divUp(inv2 + c, invariant + b);
291
+ for (let i = 0; i < 255; i++) {
292
+ prevTokenBalance = tokenBalance;
293
+ tokenBalance = balancer_v2_math_1.MathSol.divUp(balancer_v2_math_1.MathSol.mul(tokenBalance, tokenBalance) + c, balancer_v2_math_1.MathSol.mul(tokenBalance, 2n) + b - invariant);
294
+ if (tokenBalance > prevTokenBalance) {
295
+ if (tokenBalance - prevTokenBalance <= 1) {
296
+ return tokenBalance;
297
+ }
298
+ }
299
+ else if (prevTokenBalance - tokenBalance <= 1) {
300
+ return tokenBalance;
301
+ }
302
+ }
303
+ throw new Error('Errors.STABLE_GET_BALANCE_DIDNT_CONVERGE');
304
+ }
305
+ function subtractFee(amount, fee) {
306
+ const feeAmount = balancer_v2_math_1.MathSol.mulUpFixed(amount, fee);
307
+ return amount - feeAmount;
308
+ }
309
+ exports.subtractFee = subtractFee;
310
+ function addFee(amount, fee) {
311
+ return balancer_v2_math_1.MathSol.divUpFixed(amount, balancer_v2_math_1.MathSol.complementFixed(fee));
312
+ }
313
+ exports.addFee = addFee;
314
+ //# sourceMappingURL=PhantomStableMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhantomStableMath.js","sourceRoot":"","sources":["../../../../../src/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { BigNumber } from '@ethersproject/bignumber';
3
+ import { BasePool } from '../balancer-v2-pool';
4
+ import { SubgraphPoolBase, PoolState, callData } from '../../types';
5
+ import { SwapSide } from '../../../../constants';
6
+ declare enum PairTypes {
7
+ BptToToken = 0,
8
+ TokenToBpt = 1,
9
+ TokenToToken = 2
10
+ }
11
+ declare type PhantomStablePoolPairData = {
12
+ tokens: string[];
13
+ balances: bigint[];
14
+ indexIn: number;
15
+ indexOut: number;
16
+ scalingFactors: bigint[];
17
+ bptIndex: number;
18
+ swapFee: bigint;
19
+ amp: bigint;
20
+ actualSupply: bigint | undefined;
21
+ };
22
+ export declare class PhantomStablePool extends BasePool {
23
+ private isComposable;
24
+ MAX_TOKEN_BALANCE: BigNumber;
25
+ vaultAddress: string;
26
+ vaultInterface: Interface;
27
+ poolInterface: Interface;
28
+ constructor(vaultAddress: string, vaultInterface: Interface, isComposable?: boolean);
29
+ onSell(amounts: bigint[], poolPairData: PhantomStablePoolPairData): bigint[];
30
+ onBuy(amounts: bigint[], poolPairData: PhantomStablePoolPairData): bigint[];
31
+ removeBPT(balances: bigint[], tokenIndexIn: number, tokenIndexOut: number, bptIndex: number): {
32
+ balances: bigint[];
33
+ indexIn: number;
34
+ indexOut: number;
35
+ };
36
+ _swapGivenOut(tokenAmountsOut: bigint[], tokens: string[], balances: bigint[], indexIn: number, indexOut: number, bptIndex: number, scalingFactors: bigint[], swapFeePercentage: bigint, amplificationParameter: bigint, actualSupply: bigint | undefined): bigint[];
37
+ _swapGivenIn(tokenAmountsIn: bigint[], tokens: string[], balances: bigint[], indexIn: number, indexOut: number, bptIndex: number, scalingFactors: bigint[], swapFeePercentage: bigint, amplificationParameter: bigint, actualSupply: bigint | undefined): bigint[];
38
+ _onSwapGivenOut(tokenAmountsOut: bigint[], balances: bigint[], indexIn: number, indexOut: number, _amplificationParameter: bigint, virtualBptSupply: bigint, pairType: PairTypes): bigint[];
39
+ _onSwapGivenIn(tokenAmountsIn: bigint[], balances: bigint[], indexIn: number, indexOut: number, _amplificationParameter: bigint, virtualBptSupply: bigint, pairType: PairTypes): bigint[];
40
+ parsePoolPairData(pool: SubgraphPoolBase, poolState: PoolState, tokenIn: string, tokenOut: string): PhantomStablePoolPairData;
41
+ getOnChainCalls(pool: SubgraphPoolBase): callData[];
42
+ decodeOnChainCalls(pool: SubgraphPoolBase, data: {
43
+ success: boolean;
44
+ returnData: any;
45
+ }[], startIndex: number): [{
46
+ [address: string]: PoolState;
47
+ }, number];
48
+ getSwapMaxAmount(poolPairData: PhantomStablePoolPairData, side: SwapSide): bigint;
49
+ }
50
+ export {};