@paraswap/dex-lib 3.11.5 → 3.11.6

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 (187) 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/prettier.xml +7 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/build/abi/{inception/inception-ineth-pool.json → cables/CablesMainnetRFQ.json} +511 -490
  10. package/build/abi/fluid-dex/resolver.abi.json +731 -4
  11. package/build/abi/integral/factory.json +333 -0
  12. package/build/abi/integral/oracle.json +501 -0
  13. package/build/abi/integral/pool.json +1041 -0
  14. package/build/abi/{wombat/pool.json → integral/relayer.json} +720 -473
  15. package/build/dex/aave-v1/aave-v1.d.ts +1 -2
  16. package/build/dex/aave-v1/aave-v1.js +0 -23
  17. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  18. package/build/dex/cables/cables.d.ts +59 -0
  19. package/build/dex/cables/cables.js +599 -0
  20. package/build/dex/cables/cables.js.map +1 -0
  21. package/build/dex/cables/config.d.ts +4 -0
  22. package/build/dex/cables/config.js +15 -0
  23. package/build/dex/cables/config.js.map +1 -0
  24. package/build/dex/cables/constants.d.ts +20 -0
  25. package/build/dex/cables/constants.js +24 -0
  26. package/build/dex/cables/constants.js.map +1 -0
  27. package/build/dex/cables/rate-fetcher.d.ts +34 -0
  28. package/build/dex/cables/rate-fetcher.js +106 -0
  29. package/build/dex/cables/rate-fetcher.js.map +1 -0
  30. package/build/dex/cables/types.d.ts +113 -0
  31. package/build/dex/cables/types.js +19 -0
  32. package/build/dex/cables/types.js.map +1 -0
  33. package/build/dex/cables/validators.d.ts +5 -0
  34. package/build/dex/cables/validators.js +49 -0
  35. package/build/dex/cables/validators.js.map +1 -0
  36. package/build/dex/fluid-dex/config.js +1 -1
  37. package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +49 -0
  38. package/build/dex/fluid-dex/fluid-dex-generate-pool.js +104 -0
  39. package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +1 -0
  40. package/build/dex/fluid-dex/fluid-dex-liquidity-proxy.js +28 -1
  41. package/build/dex/fluid-dex/fluid-dex-liquidity-proxy.js.map +1 -1
  42. package/build/dex/fluid-dex/fluid-dex.d.ts +19 -10
  43. package/build/dex/fluid-dex/fluid-dex.js +213 -55
  44. package/build/dex/fluid-dex/fluid-dex.js.map +1 -1
  45. package/build/dex/fluid-dex/types.d.ts +22 -2
  46. package/build/dex/integral/config.d.ts +4 -0
  47. package/build/dex/integral/config.js +20 -0
  48. package/build/dex/integral/config.js.map +1 -0
  49. package/build/dex/integral/context.d.ts +40 -0
  50. package/build/dex/integral/context.js +158 -0
  51. package/build/dex/integral/context.js.map +1 -0
  52. package/build/dex/integral/integral-factory.d.ts +24 -0
  53. package/build/dex/integral/integral-factory.js +95 -0
  54. package/build/dex/integral/integral-factory.js.map +1 -0
  55. package/build/dex/integral/integral-pool.d.ts +50 -0
  56. package/build/dex/integral/integral-pool.js +149 -0
  57. package/build/dex/integral/integral-pool.js.map +1 -0
  58. package/build/dex/integral/integral-pricing.d.ts +18 -0
  59. package/build/dex/integral/integral-pricing.js +114 -0
  60. package/build/dex/integral/integral-pricing.js.map +1 -0
  61. package/build/dex/integral/integral-relayer.d.ts +42 -0
  62. package/build/dex/integral/integral-relayer.js +192 -0
  63. package/build/dex/integral/integral-relayer.js.map +1 -0
  64. package/build/dex/integral/integral-token.d.ts +27 -0
  65. package/build/dex/integral/integral-token.js +59 -0
  66. package/build/dex/integral/integral-token.js.map +1 -0
  67. package/build/dex/integral/integral.d.ts +41 -0
  68. package/build/dex/integral/integral.js +376 -0
  69. package/build/dex/integral/integral.js.map +1 -0
  70. package/build/dex/integral/types.d.ts +85 -0
  71. package/build/dex/integral/types.js +9 -0
  72. package/build/dex/integral/types.js.map +1 -0
  73. package/build/dex/integral/utils-e2e.d.ts +9 -0
  74. package/build/dex/integral/utils-e2e.js +131 -0
  75. package/build/dex/integral/utils-e2e.js.map +1 -0
  76. package/build/dex/integral/utils.d.ts +17 -0
  77. package/build/dex/integral/utils.js +94 -0
  78. package/build/dex/integral/utils.js.map +1 -0
  79. package/build/dex/jarvis.d.ts +1 -2
  80. package/build/dex/jarvis.js +0 -58
  81. package/build/dex/jarvis.js.map +1 -1
  82. package/build/dex/platypus/platypus.d.ts +1 -2
  83. package/build/dex/platypus/platypus.js +0 -45
  84. package/build/dex/platypus/platypus.js.map +1 -1
  85. package/build/dex/stable-pool.js +8 -1
  86. package/build/dex/stable-pool.js.map +1 -1
  87. package/build/dex/swaap-v1/swaap-v1.d.ts +1 -2
  88. package/build/dex/swaap-v1/swaap-v1.js +0 -14
  89. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  90. package/build/dex/trader-joe-v2.1/optimizer.d.ts +2 -0
  91. package/build/dex/trader-joe-v2.1/optimizer.js +47 -0
  92. package/build/dex/trader-joe-v2.1/optimizer.js.map +1 -0
  93. package/build/dex/zerox/index.d.ts +26 -4
  94. package/build/dex/zerox/index.js +42 -50
  95. package/build/dex/zerox/index.js.map +1 -1
  96. package/build/dex/zerox/types.d.ts +0 -29
  97. package/build/dex/zerox/types.js +1 -8
  98. package/build/dex/zerox/types.js.map +1 -1
  99. package/build/executor/Executor03BytecodeBuilder.js +8 -3
  100. package/build/executor/Executor03BytecodeBuilder.js.map +1 -1
  101. package/package.json +1 -1
  102. package/src/abi/fluid-dex/resolver.abi.json +731 -4
  103. package/src/dex/fluid-dex/config.ts +1 -1
  104. package/src/dex/fluid-dex/fluid-dex-e2e.test.ts +157 -6
  105. package/src/dex/fluid-dex/fluid-dex-events.test.ts +2 -4
  106. package/src/dex/fluid-dex/fluid-dex-integration.test.ts +69 -9
  107. package/src/dex/fluid-dex/fluid-dex-liquidity-proxy.ts +33 -0
  108. package/src/dex/fluid-dex/fluid-dex.ts +311 -89
  109. package/src/dex/fluid-dex/types.ts +25 -1
  110. package/src/executor/Executor03BytecodeBuilder.ts +10 -2
  111. package/.vscode/launch.json +0 -53
  112. package/.vscode/settings.json +0 -2
  113. package/.vscode/tasks.json +0 -15
  114. package/build/abi/inception/inception-ratio-feed.json +0 -329
  115. package/build/abi/inception/inception-vault.json +0 -991
  116. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
  117. package/build/dex/aave-v2/tokens-avalanche.json +0 -44
  118. package/build/dex/aave-v2/tokens-mainnet.json +0 -188
  119. package/build/dex/aave-v2/tokens-polygon.json +0 -44
  120. package/build/dex/balancer-v3/abi/balancerBatchRouter.d.ts +0 -729
  121. package/build/dex/balancer-v3/abi/balancerBatchRouter.js +0 -732
  122. package/build/dex/balancer-v3/abi/balancerBatchRouter.js.map +0 -1
  123. package/build/dex/balancer-v3/abi/balancerRouter.d.ts +0 -1406
  124. package/build/dex/balancer-v3/abi/balancerRouter.js +0 -1175
  125. package/build/dex/balancer-v3/abi/balancerRouter.js.map +0 -1
  126. package/build/dex/balancer-v3/abi/vaultExtension.V3.d.ts +0 -2081
  127. package/build/dex/balancer-v3/abi/vaultExtension.V3.js +0 -1851
  128. package/build/dex/balancer-v3/abi/vaultExtension.V3.js.map +0 -1
  129. package/build/dex/balancer-v3/balancer-v3-pool.d.ts +0 -76
  130. package/build/dex/balancer-v3/balancer-v3-pool.js +0 -383
  131. package/build/dex/balancer-v3/balancer-v3-pool.js.map +0 -1
  132. package/build/dex/balancer-v3/balancer-v3.d.ts +0 -57
  133. package/build/dex/balancer-v3/balancer-v3.js +0 -373
  134. package/build/dex/balancer-v3/balancer-v3.js.map +0 -1
  135. package/build/dex/balancer-v3/config.d.ts +0 -8
  136. package/build/dex/balancer-v3/config.js +0 -24
  137. package/build/dex/balancer-v3/config.js.map +0 -1
  138. package/build/dex/balancer-v3/getOnChainState.d.ts +0 -10
  139. package/build/dex/balancer-v3/getOnChainState.js +0 -158
  140. package/build/dex/balancer-v3/getOnChainState.js.map +0 -1
  141. package/build/dex/balancer-v3/getPoolsApi.d.ts +0 -2
  142. package/build/dex/balancer-v3/getPoolsApi.js +0 -81
  143. package/build/dex/balancer-v3/getPoolsApi.js.map +0 -1
  144. package/build/dex/balancer-v3/getTopPoolsApi.d.ts +0 -13
  145. package/build/dex/balancer-v3/getTopPoolsApi.js +0 -62
  146. package/build/dex/balancer-v3/getTopPoolsApi.js.map +0 -1
  147. package/build/dex/balancer-v3/types.d.ts +0 -63
  148. package/build/dex/balancer-v3/types.js +0 -3
  149. package/build/dex/balancer-v3/types.js.map +0 -1
  150. package/build/dex/inception/config.d.ts +0 -4
  151. package/build/dex/inception/config.js +0 -109
  152. package/build/dex/inception/config.js.map +0 -1
  153. package/build/dex/inception/inception-event-pool.d.ts +0 -16
  154. package/build/dex/inception/inception-event-pool.js +0 -49
  155. package/build/dex/inception/inception-event-pool.js.map +0 -1
  156. package/build/dex/inception/inception.d.ts +0 -43
  157. package/build/dex/inception/inception.js +0 -180
  158. package/build/dex/inception/inception.js.map +0 -1
  159. package/build/dex/inception/tokens.d.ts +0 -9
  160. package/build/dex/inception/tokens.js +0 -28
  161. package/build/dex/inception/tokens.js.map +0 -1
  162. package/build/dex/inception/types.d.ts +0 -22
  163. package/build/dex/inception/types.js +0 -3
  164. package/build/dex/inception/types.js.map +0 -1
  165. package/build/dex/inception/utils.d.ts +0 -7
  166. package/build/dex/inception/utils.js +0 -58
  167. package/build/dex/inception/utils.js.map +0 -1
  168. package/build/dex/maker-psm/scripts/gem.abi.json +0 -136
  169. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  170. package/build/dex/maker-psm/scripts/validate-state.js +0 -185
  171. package/build/dex/maker-psm/scripts/validate-state.js.map +0 -1
  172. package/build/dex/maker-psm/scripts/vat.abi.json +0 -243
  173. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +0 -1
  174. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
  175. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
  176. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
  177. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
  178. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
  179. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
  180. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
  181. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
  182. package/build/dex/uniswap-v3/uniswap-v3-pricing.d.ts +0 -4
  183. package/build/dex/uniswap-v3/uniswap-v3-pricing.js +0 -43
  184. package/build/dex/uniswap-v3/uniswap-v3-pricing.js.map +0 -1
  185. package/build/dex/uniswap-v3/uniswap-v3-worker.d.ts +0 -1
  186. package/build/dex/uniswap-v3/uniswap-v3-worker.js +0 -10
  187. package/build/dex/uniswap-v3/uniswap-v3-worker.js.map +0 -1
@@ -4,7 +4,7 @@ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, PoolL
4
4
  import { SwapSide, Network } from '../../constants';
5
5
  import { Context, IDex } from '../../dex/idex';
6
6
  import { IDexHelper } from '../../dex-helper/idex-helper';
7
- import { FluidDexData, FluidDexPool, Pool } from './types';
7
+ import { CollateralReserves, DebtReserves, FluidDexData, FluidDexPool, Pool, DexLimits, TokenLimit } from './types';
8
8
  import { SimpleExchange } from '../simple-exchange';
9
9
  import { FluidDexFactory } from './fluid-dex-factory';
10
10
  import { MultiResult } from '../../lib/multi-wrapper';
@@ -50,7 +50,7 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
50
50
  * @param outDecimals - The number of decimals for the output token.
51
51
  * @returns The calculated output amount (as a BigInt).
52
52
  */
53
- private swapIn;
53
+ swapIn(swap0To1: boolean, amountIn: bigint, colReserves: CollateralReserves, debtReserves: DebtReserves, inDecimals: number, outDecimals: number, fee: bigint, currentLimits: DexLimits, syncTime: number): bigint;
54
54
  /**
55
55
  * Calculates the output amount for a given input amount in a swap operation.
56
56
  * @param swap0To1 - Direction of the swap. True if swapping token0 for token1, false otherwise.
@@ -59,8 +59,14 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
59
59
  * @param debtReserves - The reserves of the debt pool.
60
60
  * @returns The calculated output amount.
61
61
  */
62
- private swapInAdjusted;
63
- applyFee(amount: bigint, fee: bigint): bigint;
62
+ swapInAdjusted(swap0To1: boolean, amountToSwap: bigint, colReserves: CollateralReserves, debtReserves: DebtReserves, fee: bigint, outDecimals: number, currentLimits: DexLimits, syncTime: number): bigint;
63
+ /**
64
+ * Calculates the currently available swappable amount for a token limit considering expansion since last syncTime.
65
+ * @param syncTime - timestamp in seconds when the limits were synced
66
+ * @param limit - token limit object containing available amount, expandsTo amount, and expandDuration
67
+ * @returns The calculated available swappable amount (borrowable or withdrawable)
68
+ */
69
+ getExpandedLimit(syncTime: number, limit: TokenLimit): bigint;
64
70
  /**
65
71
  * Given an input amount of asset and pair reserves, returns the maximum output amount of the other asset.
66
72
  * @param amountIn - The amount of input asset.
@@ -68,7 +74,7 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
68
74
  * @param iReserveOut - Imaginary token reserve of output amount.
69
75
  * @returns The maximum output amount of the other asset.
70
76
  */
71
- private getAmountOut;
77
+ getAmountOut(amountIn: bigint, iReserveIn: bigint, iReserveOut: bigint): bigint;
72
78
  /**
73
79
  * Given an output amount of asset and pair reserves, returns the input amount of the other asset
74
80
  * @param amountOut - Desired output amount of the asset.
@@ -76,7 +82,7 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
76
82
  * @param iReserveOut - Imaginary token reserve of output amount.
77
83
  * @returns The input amount of the other asset.
78
84
  */
79
- private getAmountIn;
85
+ getAmountIn(amountOut: bigint, iReserveIn: bigint, iReserveOut: bigint): bigint;
80
86
  /**
81
87
  * Calculates how much of a swap should go through the collateral pool for output amount.
82
88
  * @param t - Total amount out.
@@ -89,7 +95,7 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
89
95
  * @note If a > t then entire trade route through col pool and col pool arbitrage with debt pool.
90
96
  * @note If a > 0 & a < t then swap will route through both pools.
91
97
  */
92
- private swapRoutingOut;
98
+ swapRoutingOut(t: bigint, x: bigint, y: bigint, x2: bigint, y2: bigint): bigint;
93
99
  /**
94
100
  * Calculates how much of a swap should go through the collateral pool.
95
101
  * @param t - Total amount in.
@@ -102,7 +108,7 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
102
108
  * @note If a > t then entire trade route through col pool and col pool arbitrage with debt pool.
103
109
  * @note If a > 0 & a < t then swap will route through both pools.
104
110
  */
105
- private swapRoutingIn;
111
+ swapRoutingIn(t: bigint, x: bigint, y: bigint, x2: bigint, y2: bigint): bigint;
106
112
  /**
107
113
  * Calculates the input amount for a given output amount in a swap operation.
108
114
  * @param {boolean} swap0to1 - Direction of the swap. True if swapping token0 for token1, false otherwise.
@@ -114,7 +120,7 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
114
120
  * @param {number} fee - The fee for the swap. 1e4 = 1%
115
121
  * @returns {bigint} amountIn - The calculated input amount required for the swap.
116
122
  */
117
- private swapOut;
123
+ swapOut(swap0to1: boolean, amountOut: bigint, colReserves: CollateralReserves, debtReserves: DebtReserves, inDecimals: number, outDecimals: number, fee: bigint, currentLimits: DexLimits, syncTime: number): bigint;
118
124
  /**
119
125
  * Calculates the input amount for a given output amount in a swap operation.
120
126
  * @param {boolean} swap0to1 - Direction of the swap. True if swapping token0 for token1, false otherwise.
@@ -123,5 +129,8 @@ export declare class FluidDex extends SimpleExchange implements IDex<FluidDexDat
123
129
  * @param {DebtReserves} debtReserves - The reserves of the debt pool.
124
130
  * @returns {bigint} The calculated input amount required for the swap.
125
131
  */
126
- private swapOutAdjusted;
132
+ swapOutAdjusted(swap0to1: boolean, amountOut: bigint, colReserves: CollateralReserves, debtReserves: DebtReserves, fee: bigint, outDecimals: number, currentLimits: DexLimits, syncTime: number): bigint;
133
+ private applyFeeForBuy;
134
+ private applyFeeForSell;
135
+ private abs;
127
136
  }
@@ -98,8 +98,6 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
98
98
  // across DEXes. It is recommended to use
99
99
  // ${dexKey}_${poolAddress} as a poolIdentifier
100
100
  async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
101
- if (side === constants_1.SwapSide.BUY)
102
- return [];
103
101
  const pool = this.getPoolByTokenPair(srcToken.address, destToken.address);
104
102
  return pool ? [pool.id] : [];
105
103
  }
@@ -125,8 +123,6 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
125
123
  try {
126
124
  if (srcToken.address.toLowerCase() === destToken.address.toLowerCase())
127
125
  return null;
128
- if (side === constants_1.SwapSide.BUY)
129
- return null;
130
126
  // Get the pool to use.
131
127
  const pool = this.getPoolByTokenPair(srcToken.address, destToken.address);
132
128
  if (!pool)
@@ -136,15 +132,21 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
136
132
  return null;
137
133
  const liquidityProxyState = await this.liquidityProxy.getStateOrGenerate(blockNumber);
138
134
  const currentPoolReserves = liquidityProxyState.poolsReserves.find(poolReserve => poolReserve.pool.toLowerCase() === pool.address.toLowerCase());
139
- if (!currentPoolReserves)
135
+ if (!currentPoolReserves) {
140
136
  return null;
137
+ }
141
138
  const prices = amounts.map(amount => {
142
- return this.swapIn(srcToken.address.toLowerCase() === pool.token0.toLowerCase(), amount, currentPoolReserves.collateralReserves, currentPoolReserves.debtReserves, srcToken.decimals, destToken.decimals, BigInt(currentPoolReserves.fee));
139
+ if (side === constants_1.SwapSide.SELL) {
140
+ return this.swapIn(srcToken.address.toLowerCase() === pool.token0.toLowerCase(), amount, currentPoolReserves.collateralReserves, currentPoolReserves.debtReserves, srcToken.decimals, destToken.decimals, BigInt(currentPoolReserves.fee), currentPoolReserves.dexLimits, Math.floor(Date.now() / 1000));
141
+ }
142
+ else {
143
+ return this.swapOut(srcToken.address.toLowerCase() === pool.token0.toLowerCase(), amount, currentPoolReserves.collateralReserves, currentPoolReserves.debtReserves, srcToken.decimals, destToken.decimals, BigInt(currentPoolReserves.fee), currentPoolReserves.dexLimits, Math.floor(Date.now() / 1000));
144
+ }
143
145
  });
144
146
  return [
145
147
  {
146
148
  prices: prices,
147
- unit: (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? destToken : srcToken).decimals),
149
+ unit: (0, utils_1.getBigIntPow)(destToken.decimals),
148
150
  data: {},
149
151
  exchange: this.dexKey,
150
152
  poolIdentifier: pool.id,
@@ -167,8 +169,6 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
167
169
  // V6: Not used, can be left blank
168
170
  // Hint: abiCoder.encodeParameter() could be useful
169
171
  getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
170
- if (side === constants_1.SwapSide.BUY)
171
- throw new Error(`Buy not supported`);
172
172
  // Encode here the payload for adapter
173
173
  const payload = '';
174
174
  const pool = this.getPoolByTokenPair(srcToken, destToken);
@@ -185,18 +185,26 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
185
185
  return [];
186
186
  }
187
187
  async getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side, context, executorAddress) {
188
- if (side === constants_1.SwapSide.BUY)
189
- throw new Error(`Buy not supported`);
190
188
  let args;
191
189
  let returnAmountPos;
192
- const method = 'swapIn';
193
- returnAmountPos = (0, utils_2.extractReturnAmountPosition)(this.fluidDexPoolIface, method, 'amountOut_');
190
+ const method = side === constants_1.SwapSide.SELL ? 'swapIn' : 'swapOut';
191
+ returnAmountPos = (0, utils_2.extractReturnAmountPosition)(this.fluidDexPoolIface, method, side === constants_1.SwapSide.SELL ? 'amountOut_' : 'amountIn_');
194
192
  const pool = this.getPoolByTokenPair(srcToken, destToken);
195
- if (pool.token0.toLowerCase() !== srcToken.toLowerCase()) {
196
- args = [false, BigInt(srcAmount), BigInt(destAmount), recipient];
193
+ if (side === constants_1.SwapSide.SELL) {
194
+ if (pool.token0.toLowerCase() !== srcToken.toLowerCase()) {
195
+ args = [false, BigInt(srcAmount), BigInt(destAmount), recipient];
196
+ }
197
+ else {
198
+ args = [true, BigInt(srcAmount), BigInt(destAmount), recipient];
199
+ }
197
200
  }
198
201
  else {
199
- args = [true, BigInt(srcAmount), BigInt(destAmount), recipient];
202
+ if (pool.token0.toLowerCase() !== srcToken.toLowerCase()) {
203
+ args = [false, BigInt(destAmount), BigInt(srcAmount), recipient];
204
+ }
205
+ else {
206
+ args = [true, BigInt(destAmount), BigInt(srcAmount), recipient];
207
+ }
200
208
  }
201
209
  const swapData = this.fluidDexPoolIface.encodeFunctionData(method, args);
202
210
  return {
@@ -205,6 +213,7 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
205
213
  exchangeData: swapData,
206
214
  targetExchange: pool.address,
207
215
  returnAmountPos,
216
+ sendEthButSupportsInsertFromAmount: true,
208
217
  };
209
218
  }
210
219
  /**
@@ -217,7 +226,7 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
217
226
  * @param outDecimals - The number of decimals for the output token.
218
227
  * @returns The calculated output amount (as a BigInt).
219
228
  */
220
- swapIn(swap0To1, amountIn, colReserves, debtReserves, inDecimals, outDecimals, fee) {
229
+ swapIn(swap0To1, amountIn, colReserves, debtReserves, inDecimals, outDecimals, fee, currentLimits, syncTime) {
221
230
  if (amountIn === 0n) {
222
231
  return 0n; // Return 0 if input amount is 0
223
232
  }
@@ -226,10 +235,8 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
226
235
  return 0n;
227
236
  }
228
237
  const amountInAdjusted = (amountIn * BigInt(10 ** 12)) / BigInt(10 ** inDecimals);
229
- const amountOut = this.swapInAdjusted(swap0To1, amountInAdjusted, // Convert back to number for internal calculations
230
- colReserves, debtReserves, fee);
231
- const result = (amountOut * BigInt(10 ** outDecimals)) / BigInt(10 ** 12);
232
- return result;
238
+ const amountOut = this.swapInAdjusted(swap0To1, amountInAdjusted, colReserves, debtReserves, fee, outDecimals, currentLimits, syncTime);
239
+ return (amountOut * BigInt(10 ** outDecimals)) / BigInt(10 ** 12);
233
240
  }
234
241
  /**
235
242
  * Calculates the output amount for a given input amount in a swap operation.
@@ -239,21 +246,22 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
239
246
  * @param debtReserves - The reserves of the debt pool.
240
247
  * @returns The calculated output amount.
241
248
  */
242
- swapInAdjusted(swap0To1, amountToSwap, colReserves, debtReserves, fee) {
249
+ swapInAdjusted(swap0To1, amountToSwap, colReserves, debtReserves, fee, outDecimals, currentLimits, syncTime) {
243
250
  const { token0RealReserves, token1RealReserves, token0ImaginaryReserves, token1ImaginaryReserves, } = colReserves;
244
251
  const { token0RealReserves: debtToken0RealReserves, token1RealReserves: debtToken1RealReserves, token0ImaginaryReserves: debtToken0ImaginaryReserves, token1ImaginaryReserves: debtToken1ImaginaryReserves, } = debtReserves;
245
252
  // Check if all reserves of collateral pool are greater than 0
246
- const colPoolEnabled = token0RealReserves > BigInt(0) &&
247
- token1RealReserves > BigInt(0) &&
248
- token0ImaginaryReserves > BigInt(0) &&
249
- token1ImaginaryReserves > BigInt(0);
253
+ const colPoolEnabled = token0RealReserves > 0 &&
254
+ token1RealReserves > 0 &&
255
+ token0ImaginaryReserves > 0 &&
256
+ token1ImaginaryReserves > 0;
250
257
  // Check if all reserves of debt pool are greater than 0
251
- const debtPoolEnabled = debtToken0RealReserves > BigInt(0) &&
252
- debtToken1RealReserves > BigInt(0) &&
253
- debtToken0ImaginaryReserves > BigInt(0) &&
254
- debtToken1ImaginaryReserves > BigInt(0);
258
+ const debtPoolEnabled = debtToken0RealReserves > 0 &&
259
+ debtToken1RealReserves > 0 &&
260
+ debtToken0ImaginaryReserves > 0 &&
261
+ debtToken1ImaginaryReserves > 0;
255
262
  let colReserveIn, colReserveOut, debtReserveIn, debtReserveOut;
256
263
  let colIReserveIn, colIReserveOut, debtIReserveIn, debtIReserveOut;
264
+ let borrowable, withdrawable;
257
265
  if (swap0To1) {
258
266
  colReserveIn = token0RealReserves;
259
267
  colReserveOut = token1RealReserves;
@@ -263,6 +271,8 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
263
271
  debtReserveOut = debtToken1RealReserves;
264
272
  debtIReserveIn = debtToken0ImaginaryReserves;
265
273
  debtIReserveOut = debtToken1ImaginaryReserves;
274
+ borrowable = this.getExpandedLimit(syncTime, currentLimits.borrowableToken1);
275
+ withdrawable = this.getExpandedLimit(syncTime, currentLimits.withdrawableToken1);
266
276
  }
267
277
  else {
268
278
  colReserveIn = token1RealReserves;
@@ -273,46 +283,121 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
273
283
  debtReserveOut = debtToken0RealReserves;
274
284
  debtIReserveIn = debtToken1ImaginaryReserves;
275
285
  debtIReserveOut = debtToken0ImaginaryReserves;
286
+ borrowable = this.getExpandedLimit(syncTime, currentLimits.borrowableToken0);
287
+ withdrawable = this.getExpandedLimit(syncTime, currentLimits.withdrawableToken0);
276
288
  }
289
+ // bring borrowable and withdrawable from token decimals to 1e12 decimals, same as amounts
290
+ borrowable = (borrowable * BigInt(10 ** 12)) / BigInt(10 ** outDecimals);
291
+ withdrawable =
292
+ (withdrawable * BigInt(10 ** 12)) / BigInt(10 ** outDecimals);
277
293
  let a;
278
294
  if (colPoolEnabled && debtPoolEnabled) {
279
295
  a = this.swapRoutingIn(amountToSwap, colIReserveOut, colIReserveIn, debtIReserveOut, debtIReserveIn);
280
296
  }
281
297
  else if (debtPoolEnabled) {
282
- a = BigInt(-1); // Route from debt pool
298
+ a = -1n; // Route from debt pool
283
299
  }
284
300
  else if (colPoolEnabled) {
285
- a = amountToSwap + BigInt(1); // Route from collateral pool
301
+ a = amountToSwap + 1n; // Route from collateral pool
286
302
  }
287
303
  else {
288
304
  throw new Error('No pools are enabled');
289
305
  }
290
- let amountOutCollateral = BigInt(0);
291
- let amountOutDebt = BigInt(0);
292
- if (a <= BigInt(0)) {
306
+ let amountOutCollateral = 0n;
307
+ let amountOutDebt = 0n;
308
+ let amountInCollateral = 0n;
309
+ let amountInDebt = 0n;
310
+ if (a <= 0n) {
293
311
  // Entire trade routes through debt pool
294
- amountOutDebt = this.getAmountOut(this.applyFee(amountToSwap, fee), debtIReserveIn, debtIReserveOut);
312
+ amountInDebt = amountToSwap;
313
+ amountOutDebt = this.getAmountOut(this.applyFeeForSell(amountToSwap, fee), debtIReserveIn, debtIReserveOut);
295
314
  }
296
315
  else if (a >= amountToSwap) {
297
316
  // Entire trade routes through collateral pool
298
- amountOutCollateral = this.getAmountOut(this.applyFee(amountToSwap, fee), colIReserveIn, colIReserveOut);
317
+ amountInCollateral = amountToSwap;
318
+ amountOutCollateral = this.getAmountOut(this.applyFeeForSell(amountToSwap, fee), colIReserveIn, colIReserveOut);
299
319
  }
300
320
  else {
301
321
  // Trade routes through both pools
302
- amountOutCollateral = this.getAmountOut(this.applyFee(a, fee), colIReserveIn, colIReserveOut);
303
- amountOutDebt = this.getAmountOut(this.applyFee(amountToSwap - a, fee), debtIReserveIn, debtIReserveOut);
322
+ amountInCollateral = a;
323
+ amountOutCollateral = this.getAmountOut(this.applyFeeForSell(a, fee), colIReserveIn, colIReserveOut);
324
+ amountInDebt = amountToSwap - a;
325
+ amountOutDebt = this.getAmountOut(this.applyFeeForSell(amountInDebt, fee), debtIReserveIn, debtIReserveOut);
304
326
  }
305
327
  if (amountOutDebt > debtReserveOut) {
306
328
  return 0n;
307
329
  }
330
+ if (amountOutDebt > borrowable) {
331
+ return 0n;
332
+ }
308
333
  if (amountOutCollateral > colReserveOut) {
309
334
  return 0n;
310
335
  }
336
+ if (amountOutCollateral > withdrawable) {
337
+ return 0n;
338
+ }
339
+ // For price calculations, we'll use a precision factor for bigint division
340
+ const PRECISION = 1000000000000000000000000000n; // 1e27
341
+ let oldPrice;
342
+ let newPrice;
343
+ if (amountInCollateral > amountInDebt) {
344
+ // new pool price from col pool
345
+ oldPrice = swap0To1
346
+ ? (colIReserveOut * PRECISION) / colIReserveIn
347
+ : (colIReserveIn * PRECISION) / colIReserveOut;
348
+ newPrice = swap0To1
349
+ ? ((colIReserveOut - amountOutCollateral) * PRECISION) /
350
+ (colIReserveIn + amountInCollateral)
351
+ : ((colIReserveIn + amountInCollateral) * PRECISION) /
352
+ (colIReserveOut - amountOutCollateral);
353
+ }
354
+ else {
355
+ // new pool price from debt pool
356
+ oldPrice = swap0To1
357
+ ? (debtIReserveOut * PRECISION) / debtIReserveIn
358
+ : (debtIReserveIn * PRECISION) / debtIReserveOut;
359
+ newPrice = swap0To1
360
+ ? ((debtIReserveOut - amountOutDebt) * PRECISION) /
361
+ (debtIReserveIn + amountInDebt)
362
+ : ((debtIReserveIn + amountInDebt) * PRECISION) /
363
+ (debtIReserveOut - amountOutDebt);
364
+ }
365
+ // Calculate price difference using bigint arithmetic
366
+ const MAX_PRICE_DIFF = 5n; // 5%
367
+ const priceDiff = oldPrice > newPrice ? oldPrice - newPrice : newPrice - oldPrice;
368
+ const maxAllowedDiff = (oldPrice * MAX_PRICE_DIFF) / 100n;
369
+ if (priceDiff > maxAllowedDiff) {
370
+ return 0n;
371
+ }
311
372
  const totalAmountOut = amountOutCollateral + amountOutDebt;
312
373
  return totalAmountOut;
313
374
  }
314
- applyFee(amount, fee) {
315
- return (amount * (this.FEE_100_PERCENT - fee)) / this.FEE_100_PERCENT;
375
+ /**
376
+ * Calculates the currently available swappable amount for a token limit considering expansion since last syncTime.
377
+ * @param syncTime - timestamp in seconds when the limits were synced
378
+ * @param limit - token limit object containing available amount, expandsTo amount, and expandDuration
379
+ * @returns The calculated available swappable amount (borrowable or withdrawable)
380
+ */
381
+ getExpandedLimit(syncTime, limit) {
382
+ const currentTime = Math.floor(Date.now() / 1000); // convert milliseconds to seconds
383
+ const elapsedTime = currentTime - syncTime;
384
+ limit.expandsDuration = limit.expandsDuration || 0n;
385
+ if (elapsedTime < 10n) {
386
+ // if almost no time has elapsed, return available amount
387
+ return limit.available;
388
+ }
389
+ if (elapsedTime >= limit.expandsDuration) {
390
+ // if duration has passed, return max amount
391
+ return limit.expandsTo;
392
+ }
393
+ // Calculate expansion ratio using bigint arithmetic
394
+ // Multiply by a large factor for precision in integer arithmetic
395
+ const PRECISION = 1000000;
396
+ const ratio = BigInt(elapsedTime * PRECISION) / limit.expandsDuration;
397
+ // Calculate expanded amount with precision factor
398
+ const expansion = ((limit.expandsTo - limit.available) * ratio) / BigInt(PRECISION);
399
+ const expandedAmount = limit.available + expansion;
400
+ return expandedAmount;
316
401
  }
317
402
  /**
318
403
  * Given an input amount of asset and pair reserves, returns the maximum output amount of the other asset.
@@ -357,8 +442,8 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
357
442
  */
358
443
  swapRoutingOut(t, x, y, x2, y2) {
359
444
  // Adding 1e18 precision
360
- const xyRoot = BigInt(Math.floor(Math.sqrt(Number(x * y * BigInt(10n ** 18n)))));
361
- const x2y2Root = BigInt(Math.floor(Math.sqrt(Number(x2 * y2 * BigInt(10n ** 18n)))));
445
+ const xyRoot = (0, utils_3.sqrt)(ethers_1.BigNumber.from(x).mul(y).mul(BigInt(1e18))).toBigInt();
446
+ const x2y2Root = (0, utils_3.sqrt)(ethers_1.BigNumber.from(x2).mul(y2).mul(BigInt(1e18))).toBigInt();
362
447
  // 1e18 precision gets cancelled out in division
363
448
  const numerator = t * xyRoot + y * x2y2Root - y2 * xyRoot;
364
449
  const denominator = xyRoot + x2y2Root;
@@ -397,13 +482,14 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
397
482
  * @param {number} fee - The fee for the swap. 1e4 = 1%
398
483
  * @returns {bigint} amountIn - The calculated input amount required for the swap.
399
484
  */
400
- swapOut(swap0to1, amountOut, colReserves, debtReserves, inDecimals, outDecimals, fee) {
485
+ swapOut(swap0to1, amountOut, colReserves, debtReserves, inDecimals, outDecimals, fee, currentLimits, syncTime) {
401
486
  const amountOutAdjusted = (amountOut * BigInt(10 ** 12)) / BigInt(10 ** outDecimals);
402
- const amountIn = this.swapOutAdjusted(swap0to1, amountOutAdjusted, colReserves, debtReserves);
403
- const FEE_100_PERCENT = BigInt(1e6); // Assuming this constant is defined elsewhere
404
- const result = ((amountIn * FEE_100_PERCENT) / (FEE_100_PERCENT - fee)) *
405
- BigInt(10 ** (inDecimals - 12));
406
- return result;
487
+ const amountIn = this.swapOutAdjusted(swap0to1, amountOutAdjusted, colReserves, debtReserves, fee, outDecimals, currentLimits, syncTime);
488
+ if (amountIn == 2n ** 256n - 1n) {
489
+ return amountIn;
490
+ }
491
+ const ans = (amountIn * BigInt(10 ** inDecimals)) / BigInt(10 ** 12);
492
+ return ans;
407
493
  }
408
494
  /**
409
495
  * Calculates the input amount for a given output amount in a swap operation.
@@ -413,7 +499,10 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
413
499
  * @param {DebtReserves} debtReserves - The reserves of the debt pool.
414
500
  * @returns {bigint} The calculated input amount required for the swap.
415
501
  */
416
- swapOutAdjusted(swap0to1, amountOut, colReserves, debtReserves) {
502
+ swapOutAdjusted(swap0to1, amountOut, colReserves, debtReserves, fee, outDecimals, currentLimits, syncTime) {
503
+ if (amountOut === 0n) {
504
+ return 0n; // Return 0 if output amount is 0
505
+ }
417
506
  const { token0RealReserves, token1RealReserves, token0ImaginaryReserves, token1ImaginaryReserves, } = colReserves;
418
507
  const { token0RealReserves: debtToken0RealReserves, token1RealReserves: debtToken1RealReserves, token0ImaginaryReserves: debtToken0ImaginaryReserves, token1ImaginaryReserves: debtToken1ImaginaryReserves, } = debtReserves;
419
508
  // Check if all reserves of collateral pool are greater than 0
@@ -428,6 +517,7 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
428
517
  debtToken1ImaginaryReserves > 0n;
429
518
  let colReserveIn, colReserveOut, debtReserveIn, debtReserveOut;
430
519
  let colIReserveIn, colIReserveOut, debtIReserveIn, debtIReserveOut;
520
+ let borrowable, withdrawable;
431
521
  if (swap0to1) {
432
522
  colReserveIn = token0RealReserves;
433
523
  colReserveOut = token1RealReserves;
@@ -437,6 +527,8 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
437
527
  debtReserveOut = debtToken1RealReserves;
438
528
  debtIReserveIn = debtToken0ImaginaryReserves;
439
529
  debtIReserveOut = debtToken1ImaginaryReserves;
530
+ borrowable = this.getExpandedLimit(syncTime, currentLimits.borrowableToken1);
531
+ withdrawable = this.getExpandedLimit(syncTime, currentLimits.withdrawableToken1);
440
532
  }
441
533
  else {
442
534
  colReserveIn = token1RealReserves;
@@ -447,7 +539,13 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
447
539
  debtReserveOut = debtToken0RealReserves;
448
540
  debtIReserveIn = debtToken1ImaginaryReserves;
449
541
  debtIReserveOut = debtToken0ImaginaryReserves;
542
+ borrowable = this.getExpandedLimit(syncTime, currentLimits.borrowableToken0);
543
+ withdrawable = this.getExpandedLimit(syncTime, currentLimits.withdrawableToken0);
450
544
  }
545
+ // bring borrowable and withdrawable from token decimals to 1e12 decimals, same as amounts
546
+ borrowable = (borrowable * BigInt(10 ** 12)) / BigInt(10 ** outDecimals);
547
+ withdrawable =
548
+ (withdrawable * BigInt(10 ** 12)) / BigInt(10 ** outDecimals);
451
549
  let a;
452
550
  if (colPoolEnabled && debtPoolEnabled) {
453
551
  a = this.swapRoutingOut(amountOut, colIReserveIn, colIReserveOut, debtIReserveIn, debtIReserveOut);
@@ -463,31 +561,91 @@ class FluidDex extends simple_exchange_1.SimpleExchange {
463
561
  }
464
562
  let amountInCollateral = 0n;
465
563
  let amountInDebt = 0n;
564
+ let amountOutCollateral = 0n;
565
+ let amountOutDebt = 0n;
466
566
  if (a <= 0n) {
467
567
  // Entire trade routes through debt pool
568
+ amountOutDebt = amountOut;
468
569
  amountInDebt = this.getAmountIn(amountOut, debtIReserveIn, debtIReserveOut);
570
+ amountInDebt = this.applyFeeForBuy(amountInDebt, fee);
469
571
  if (amountOut > debtReserveOut) {
470
- return 2n ** 64n - 1n; // BigInt max value
572
+ return 2n ** 256n - 1n;
573
+ }
574
+ if (amountOut > borrowable) {
575
+ return 2n ** 256n - 1n;
471
576
  }
472
577
  }
473
578
  else if (a >= amountOut) {
474
579
  // Entire trade routes through collateral pool
580
+ amountOutCollateral = amountOut;
475
581
  amountInCollateral = this.getAmountIn(amountOut, colIReserveIn, colIReserveOut);
582
+ amountInCollateral = this.applyFeeForBuy(amountInCollateral, fee);
476
583
  if (amountOut > colReserveOut) {
477
- return 2n ** 64n - 1n; // BigInt max value
584
+ return 2n ** 256n - 1n;
585
+ }
586
+ if (amountOut > withdrawable) {
587
+ return 2n ** 256n - 1n;
478
588
  }
479
589
  }
480
590
  else {
481
591
  // Trade routes through both pools
592
+ amountOutCollateral = a;
482
593
  amountInCollateral = this.getAmountIn(a, colIReserveIn, colIReserveOut);
483
- amountInDebt = this.getAmountIn(amountOut - a, debtIReserveIn, debtIReserveOut);
484
- if (amountOut - a > debtReserveOut || a > debtReserveOut) {
485
- return 2n ** 64n - 1n; // BigInt max value
594
+ const amountOutDebtAdjusted = amountOut - a;
595
+ amountInCollateral = this.applyFeeForBuy(amountInCollateral, fee);
596
+ amountInDebt = this.getAmountIn(amountOutDebtAdjusted, debtIReserveIn, debtIReserveOut);
597
+ amountInDebt = this.applyFeeForBuy(amountInDebt, fee);
598
+ if (amountOutDebt > debtReserveOut || a > colReserveOut) {
599
+ return 2n ** 256n - 1n;
600
+ }
601
+ if (amountOutDebt > borrowable || a > withdrawable) {
602
+ return 2n ** 256n - 1n;
486
603
  }
487
604
  }
605
+ let oldPrice;
606
+ let newPrice;
607
+ const SCALE = BigInt(1e27);
608
+ // from whatever pool higher amount of swap is routing we are taking that as final price, does not matter much because both pools final price should be same
609
+ if (amountOutCollateral > amountOutDebt) {
610
+ // new pool price from col pool
611
+ oldPrice = swap0to1
612
+ ? (colIReserveOut * SCALE) / colIReserveIn
613
+ : (colIReserveIn * SCALE) / colIReserveOut;
614
+ newPrice = swap0to1
615
+ ? ((colIReserveOut - amountOutCollateral) * SCALE) /
616
+ (colIReserveIn + amountInCollateral)
617
+ : ((colIReserveIn + amountInCollateral) * SCALE) /
618
+ (colIReserveOut - amountOutCollateral);
619
+ }
620
+ else {
621
+ // new pool price from debt pool
622
+ oldPrice = swap0to1
623
+ ? (debtIReserveOut * SCALE) / debtIReserveIn
624
+ : (debtIReserveIn * SCALE) / debtIReserveOut;
625
+ newPrice = swap0to1
626
+ ? ((debtIReserveOut - amountOutDebt) * SCALE) /
627
+ (debtIReserveIn + amountInDebt)
628
+ : ((debtIReserveIn + amountInDebt) * SCALE) /
629
+ (debtIReserveOut - amountOutDebt);
630
+ }
631
+ const MAX_PRICE_DIFF = BigInt(5); // 5%
632
+ if (this.abs(oldPrice - newPrice) >
633
+ (oldPrice / BigInt(100)) * MAX_PRICE_DIFF) {
634
+ // if price diff is > 5% then swap would revert.
635
+ return 2n ** 256n - 1n;
636
+ }
488
637
  const totalAmountIn = amountInCollateral + amountInDebt;
489
638
  return totalAmountIn;
490
639
  }
640
+ applyFeeForBuy(amount, fee) {
641
+ return (amount * 10n ** 6n) / (10n ** 6n - fee);
642
+ }
643
+ applyFeeForSell(amount, fee) {
644
+ return (amount * (10n ** 6n - fee)) / 10n ** 6n;
645
+ }
646
+ abs(value) {
647
+ return value < 0 ? -value : value;
648
+ }
491
649
  }
492
650
  exports.FluidDex = FluidDex;
493
651
  FluidDex.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.FluidDexConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"fluid-dex.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex/fluid-dex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fluid-dex.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex/fluid-dex.ts"],"names":[],"mappings":"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"}