@paraswap/dex-lib 4.5.10 → 4.5.12-fluid-dex-lite.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 (199) hide show
  1. package/build/abi/bunni-v2/BunniHook.abi.json +1921 -0
  2. package/build/abi/bunni-v2/BunniHub.abi.json +1598 -0
  3. package/build/abi/bunni-v2/BunniToken.abi.json +833 -0
  4. package/build/abi/bunni-v2/FeeOverrideHooklet.abi.json +1947 -0
  5. package/build/abi/bunni-v2/FloodPlain.abi.json +1195 -0
  6. package/build/abi/bunni-v2/PoolManager.abi.json +1366 -0
  7. package/build/abi/bunni-v2/V4Quoter.abi.json +637 -0
  8. package/build/abi/fluid-dex-lite/FluidDexLite.abi.json +262 -0
  9. package/build/abi/miro-migrator/MiroMigrator.abi.json +19 -36
  10. package/build/abi/pangolin-v3/PangolinV3StateMulticall.abi.json +796 -0
  11. package/build/abi/ring-v2/few-wrapped-token.json +587 -0
  12. package/build/abi/ring-v2/ring-v2-factory.json +125 -0
  13. package/build/abi/ring-v2/ring-v2-pool.json +461 -0
  14. package/build/abi/ring-v2/ring-v2-router.json +332 -0
  15. package/build/abi/uniswap-v4/hooks/cabalcoin-hook.abi.json +682 -0
  16. package/build/abi/uniswap-v4/hooks/fee-hook.abi.json +1335 -0
  17. package/build/config.js +13 -13
  18. package/build/dex/balancer-v3/config.d.ts +1 -1
  19. package/build/dex/balancer-v3/config.js +23 -1
  20. package/build/dex/balancer-v3/config.js.map +1 -1
  21. package/build/dex/bunni-v2/bunni-v2-pool.d.ts +61 -0
  22. package/build/dex/bunni-v2/bunni-v2-pool.js +495 -0
  23. package/build/dex/bunni-v2/bunni-v2-pool.js.map +1 -0
  24. package/build/dex/bunni-v2/bunni-v2.d.ts +49 -0
  25. package/build/dex/bunni-v2/bunni-v2.js +435 -0
  26. package/build/dex/bunni-v2/bunni-v2.js.map +1 -0
  27. package/build/dex/bunni-v2/config.d.ts +3 -0
  28. package/build/dex/bunni-v2/config.js +130 -0
  29. package/build/dex/bunni-v2/config.js.map +1 -0
  30. package/build/dex/bunni-v2/encoder.d.ts +19 -0
  31. package/build/dex/bunni-v2/encoder.js +400 -0
  32. package/build/dex/bunni-v2/encoder.js.map +1 -0
  33. package/build/dex/bunni-v2/getOnChainState.d.ts +25 -0
  34. package/build/dex/bunni-v2/getOnChainState.js +455 -0
  35. package/build/dex/bunni-v2/getOnChainState.js.map +1 -0
  36. package/build/dex/bunni-v2/hook/BunniSwapMath.d.ts +7 -0
  37. package/build/dex/bunni-v2/hook/BunniSwapMath.js +198 -0
  38. package/build/dex/bunni-v2/hook/BunniSwapMath.js.map +1 -0
  39. package/build/dex/bunni-v2/hook/SwapMath.d.ts +8 -0
  40. package/build/dex/bunni-v2/hook/SwapMath.js +65 -0
  41. package/build/dex/bunni-v2/hook/SwapMath.js.map +1 -0
  42. package/build/dex/bunni-v2/hooklet/FeeOverrideHooklet.d.ts +33 -0
  43. package/build/dex/bunni-v2/hooklet/FeeOverrideHooklet.js +33 -0
  44. package/build/dex/bunni-v2/hooklet/FeeOverrideHooklet.js.map +1 -0
  45. package/build/dex/bunni-v2/hooklet/index.d.ts +21 -0
  46. package/build/dex/bunni-v2/hooklet/index.js +64 -0
  47. package/build/dex/bunni-v2/hooklet/index.js.map +1 -0
  48. package/build/dex/bunni-v2/ldf/CarpetedDoubleGeometricDistribution.d.ts +70 -0
  49. package/build/dex/bunni-v2/ldf/CarpetedDoubleGeometricDistribution.js +277 -0
  50. package/build/dex/bunni-v2/ldf/CarpetedDoubleGeometricDistribution.js.map +1 -0
  51. package/build/dex/bunni-v2/ldf/CarpetedGeometricDistribution.d.ts +64 -0
  52. package/build/dex/bunni-v2/ldf/CarpetedGeometricDistribution.js +262 -0
  53. package/build/dex/bunni-v2/ldf/CarpetedGeometricDistribution.js.map +1 -0
  54. package/build/dex/bunni-v2/ldf/DoubleGeometricDistribution.d.ts +60 -0
  55. package/build/dex/bunni-v2/ldf/DoubleGeometricDistribution.js +224 -0
  56. package/build/dex/bunni-v2/ldf/DoubleGeometricDistribution.js.map +1 -0
  57. package/build/dex/bunni-v2/ldf/GeometricDistribution.d.ts +56 -0
  58. package/build/dex/bunni-v2/ldf/GeometricDistribution.js +489 -0
  59. package/build/dex/bunni-v2/ldf/GeometricDistribution.js.map +1 -0
  60. package/build/dex/bunni-v2/ldf/LDFType.d.ts +5 -0
  61. package/build/dex/bunni-v2/ldf/LDFType.js +10 -0
  62. package/build/dex/bunni-v2/ldf/LDFType.js.map +1 -0
  63. package/build/dex/bunni-v2/ldf/ShiftMode.d.ts +7 -0
  64. package/build/dex/bunni-v2/ldf/ShiftMode.js +19 -0
  65. package/build/dex/bunni-v2/ldf/ShiftMode.js.map +1 -0
  66. package/build/dex/bunni-v2/ldf/UniformDistribution.d.ts +55 -0
  67. package/build/dex/bunni-v2/ldf/UniformDistribution.js +291 -0
  68. package/build/dex/bunni-v2/ldf/UniformDistribution.js.map +1 -0
  69. package/build/dex/bunni-v2/ldf/index.d.ts +15 -0
  70. package/build/dex/bunni-v2/ldf/index.js +21 -0
  71. package/build/dex/bunni-v2/ldf/index.js.map +1 -0
  72. package/build/dex/bunni-v2/lib/AmAmmPayload.d.ts +4 -0
  73. package/build/dex/bunni-v2/lib/AmAmmPayload.js +10 -0
  74. package/build/dex/bunni-v2/lib/AmAmmPayload.js.map +1 -0
  75. package/build/dex/bunni-v2/lib/BitMath.d.ts +4 -0
  76. package/build/dex/bunni-v2/lib/BitMath.js +24 -0
  77. package/build/dex/bunni-v2/lib/BitMath.js.map +1 -0
  78. package/build/dex/bunni-v2/lib/Constants.d.ts +14 -0
  79. package/build/dex/bunni-v2/lib/Constants.js +18 -0
  80. package/build/dex/bunni-v2/lib/Constants.js.map +1 -0
  81. package/build/dex/bunni-v2/lib/ExpMath.d.ts +5 -0
  82. package/build/dex/bunni-v2/lib/ExpMath.js +121 -0
  83. package/build/dex/bunni-v2/lib/ExpMath.js.map +1 -0
  84. package/build/dex/bunni-v2/lib/FeeMath.d.ts +2 -0
  85. package/build/dex/bunni-v2/lib/FeeMath.js +27 -0
  86. package/build/dex/bunni-v2/lib/FeeMath.js.map +1 -0
  87. package/build/dex/bunni-v2/lib/FixedPointMath.d.ts +3 -0
  88. package/build/dex/bunni-v2/lib/FixedPointMath.js +15 -0
  89. package/build/dex/bunni-v2/lib/FixedPointMath.js.map +1 -0
  90. package/build/dex/bunni-v2/lib/FullMathX96.d.ts +4 -0
  91. package/build/dex/bunni-v2/lib/FullMathX96.js +21 -0
  92. package/build/dex/bunni-v2/lib/FullMathX96.js.map +1 -0
  93. package/build/dex/bunni-v2/lib/IdleBalance.d.ts +11 -0
  94. package/build/dex/bunni-v2/lib/IdleBalance.js +33 -0
  95. package/build/dex/bunni-v2/lib/IdleBalance.js.map +1 -0
  96. package/build/dex/bunni-v2/lib/LiquidityAmounts.d.ts +6 -0
  97. package/build/dex/bunni-v2/lib/LiquidityAmounts.js +25 -0
  98. package/build/dex/bunni-v2/lib/LiquidityAmounts.js.map +1 -0
  99. package/build/dex/bunni-v2/lib/Math.d.ts +28 -0
  100. package/build/dex/bunni-v2/lib/Math.js +169 -0
  101. package/build/dex/bunni-v2/lib/Math.js.map +1 -0
  102. package/build/dex/bunni-v2/lib/Oracle.d.ts +27 -0
  103. package/build/dex/bunni-v2/lib/Oracle.js +180 -0
  104. package/build/dex/bunni-v2/lib/Oracle.js.map +1 -0
  105. package/build/dex/bunni-v2/lib/QueryLDF.d.ts +12 -0
  106. package/build/dex/bunni-v2/lib/QueryLDF.js +90 -0
  107. package/build/dex/bunni-v2/lib/QueryLDF.js.map +1 -0
  108. package/build/dex/bunni-v2/lib/QueryTwap.d.ts +2 -0
  109. package/build/dex/bunni-v2/lib/QueryTwap.js +13 -0
  110. package/build/dex/bunni-v2/lib/QueryTwap.js.map +1 -0
  111. package/build/dex/bunni-v2/lib/SqrtPriceMath.d.ts +8 -0
  112. package/build/dex/bunni-v2/lib/SqrtPriceMath.js +84 -0
  113. package/build/dex/bunni-v2/lib/SqrtPriceMath.js.map +1 -0
  114. package/build/dex/bunni-v2/lib/TickMath.d.ts +11 -0
  115. package/build/dex/bunni-v2/lib/TickMath.js +100 -0
  116. package/build/dex/bunni-v2/lib/TickMath.js.map +1 -0
  117. package/build/dex/bunni-v2/lib/VaultMath.d.ts +2 -0
  118. package/build/dex/bunni-v2/lib/VaultMath.js +11 -0
  119. package/build/dex/bunni-v2/lib/VaultMath.js.map +1 -0
  120. package/build/dex/bunni-v2/logic/AmAmm.d.ts +11 -0
  121. package/build/dex/bunni-v2/logic/AmAmm.js +156 -0
  122. package/build/dex/bunni-v2/logic/AmAmm.js.map +1 -0
  123. package/build/dex/bunni-v2/logic/BunniHookLogic.d.ts +10 -0
  124. package/build/dex/bunni-v2/logic/BunniHookLogic.js +298 -0
  125. package/build/dex/bunni-v2/logic/BunniHookLogic.js.map +1 -0
  126. package/build/dex/bunni-v2/logic/BunniHubLogic.d.ts +5 -0
  127. package/build/dex/bunni-v2/logic/BunniHubLogic.js +245 -0
  128. package/build/dex/bunni-v2/logic/BunniHubLogic.js.map +1 -0
  129. package/build/dex/bunni-v2/logic/BunniQuoter.d.ts +12 -0
  130. package/build/dex/bunni-v2/logic/BunniQuoter.js +201 -0
  131. package/build/dex/bunni-v2/logic/BunniQuoter.js.map +1 -0
  132. package/build/dex/bunni-v2/subgraph.d.ts +7 -0
  133. package/build/dex/bunni-v2/subgraph.js +184 -0
  134. package/build/dex/bunni-v2/subgraph.js.map +1 -0
  135. package/build/dex/bunni-v2/types.d.ts +256 -0
  136. package/build/dex/bunni-v2/types.js +3 -0
  137. package/build/dex/bunni-v2/types.js.map +1 -0
  138. package/build/dex/bunni-v2/utils.d.ts +12 -0
  139. package/build/dex/bunni-v2/utils.js +181 -0
  140. package/build/dex/bunni-v2/utils.js.map +1 -0
  141. package/build/dex/fluid-dex-lite/config.d.ts +3 -0
  142. package/build/dex/fluid-dex-lite/config.js +12 -0
  143. package/build/dex/fluid-dex-lite/config.js.map +1 -0
  144. package/build/dex/fluid-dex-lite/fluid-dex-lite-math.d.ts +63 -0
  145. package/build/dex/fluid-dex-lite/fluid-dex-lite-math.js +543 -0
  146. package/build/dex/fluid-dex-lite/fluid-dex-lite-math.js.map +1 -0
  147. package/build/dex/fluid-dex-lite/fluid-dex-lite-pool.d.ts +31 -0
  148. package/build/dex/fluid-dex-lite/fluid-dex-lite-pool.js +105 -0
  149. package/build/dex/fluid-dex-lite/fluid-dex-lite-pool.js.map +1 -0
  150. package/build/dex/fluid-dex-lite/fluid-dex-lite.d.ts +45 -0
  151. package/build/dex/fluid-dex-lite/fluid-dex-lite.js +461 -0
  152. package/build/dex/fluid-dex-lite/fluid-dex-lite.js.map +1 -0
  153. package/build/dex/fluid-dex-lite/types.d.ts +54 -0
  154. package/build/dex/fluid-dex-lite/types.js +3 -0
  155. package/build/dex/fluid-dex-lite/types.js.map +1 -0
  156. package/build/dex/fluid-dex-lite/utils.d.ts +12 -0
  157. package/build/dex/fluid-dex-lite/utils.js +51 -0
  158. package/build/dex/fluid-dex-lite/utils.js.map +1 -0
  159. package/build/dex/index.js +2 -0
  160. package/build/dex/index.js.map +1 -1
  161. package/build/dex/miro-migrator/config.js +10 -3
  162. package/build/dex/miro-migrator/config.js.map +1 -1
  163. package/build/dex/miro-migrator/constants.d.ts +1 -2
  164. package/build/dex/miro-migrator/constants.js +2 -3
  165. package/build/dex/miro-migrator/constants.js.map +1 -1
  166. package/build/dex/miro-migrator/miro-migrator-pool.d.ts +5 -9
  167. package/build/dex/miro-migrator/miro-migrator-pool.js +30 -49
  168. package/build/dex/miro-migrator/miro-migrator-pool.js.map +1 -1
  169. package/build/dex/miro-migrator/miro-migrator-state.d.ts +27 -0
  170. package/build/dex/miro-migrator/miro-migrator-state.js +89 -0
  171. package/build/dex/miro-migrator/miro-migrator-state.js.map +1 -0
  172. package/build/dex/miro-migrator/miro-migrator.d.ts +4 -5
  173. package/build/dex/miro-migrator/miro-migrator.js +83 -41
  174. package/build/dex/miro-migrator/miro-migrator.js.map +1 -1
  175. package/build/dex/miro-migrator/types.d.ts +4 -2
  176. package/build/dex/miro-migrator/types.js +2 -1
  177. package/build/dex/miro-migrator/types.js.map +1 -1
  178. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.d.ts +4 -0
  179. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js +56 -0
  180. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js.map +1 -0
  181. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.d.ts +7 -0
  182. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js +28 -0
  183. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js.map +1 -0
  184. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.d.ts +0 -0
  185. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js +2 -0
  186. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js.map +1 -0
  187. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.d.ts +7 -0
  188. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js +28 -0
  189. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js.map +1 -0
  190. package/build/dex/uniswap-v4/hooks/fee-hook/types.d.ts +0 -0
  191. package/build/dex/uniswap-v4/hooks/fee-hook/types.js +2 -0
  192. package/build/dex/uniswap-v4/hooks/fee-hook/types.js.map +1 -0
  193. package/build/dex/uniswap-v4/hooks/index.d.ts +2 -0
  194. package/build/dex/uniswap-v4/hooks/index.js +8 -0
  195. package/build/dex/uniswap-v4/hooks/index.js.map +1 -0
  196. package/build/dex/usdc-transmuter/usdc-transmuter-pool.d.ts +26 -0
  197. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js +75 -0
  198. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js.map +1 -0
  199. package/package.json +1 -1
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FluidDexLiteEventPool = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
9
+ const FluidDexLite_abi_json_1 = __importDefault(require("../../abi/fluid-dex-lite/FluidDexLite.abi.json"));
10
+ const fluid_dex_lite_math_1 = require("./fluid-dex-lite-math");
11
+ const utils_1 = require("./utils");
12
+ const utils_2 = require("../../utils");
13
+ // Storage slot constants from DexLiteSlotsLink
14
+ const DEX_LITE_DEXES_LIST_SLOT = 1;
15
+ const DEX_LITE_DEX_VARIABLES_SLOT = 2;
16
+ const DEX_LITE_CENTER_PRICE_SHIFT_SLOT = 3;
17
+ const DEX_LITE_RANGE_SHIFT_SLOT = 4;
18
+ const DEX_LITE_THRESHOLD_SHIFT_SLOT = 5;
19
+ class FluidDexLiteEventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
20
+ parentName;
21
+ network;
22
+ dexHelper;
23
+ fluidDexLiteIface;
24
+ fluidDexLiteAddress;
25
+ decoder = (log) => this.fluidDexLiteIface.parseLog(log);
26
+ handlers = {};
27
+ logDecoder;
28
+ addressesSubscribed;
29
+ poolParams;
30
+ constructor(parentName, network, dexHelper, logger, mapKey, fluidDexLiteIface = new abi_1.Interface(FluidDexLite_abi_json_1.default), poolParams, fluidDexLiteAddress) {
31
+ super(parentName, `${mapKey}`, dexHelper, logger);
32
+ this.parentName = parentName;
33
+ this.network = network;
34
+ this.dexHelper = dexHelper;
35
+ this.fluidDexLiteIface = fluidDexLiteIface;
36
+ this.fluidDexLiteAddress = fluidDexLiteAddress;
37
+ this.poolParams = poolParams;
38
+ this.logDecoder = (log) => this.fluidDexLiteIface.parseLog(log);
39
+ this.addressesSubscribed = [fluidDexLiteAddress];
40
+ // Add handlers for all events that update state
41
+ this.handlers['LogSwap'] = this.handleLogSwap.bind(this);
42
+ }
43
+ /**
44
+ * The function is called every time any of the subscribed
45
+ * addresses release log. The function accepts the current
46
+ * state, updates the state according to the log, and returns
47
+ * the updated state.
48
+ */
49
+ processLog(state, log, blockHeader) {
50
+ try {
51
+ const event = this.logDecoder(log);
52
+ if (event.name in this.handlers) {
53
+ return this.handlers[event.name](event, state, log, blockHeader);
54
+ }
55
+ }
56
+ catch (e) {
57
+ (0, utils_2.catchParseLogError)(e, this.logger);
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * The function generates state using on-chain calls.
63
+ */
64
+ async generateState(blockNumber) {
65
+ const dexIdBytes = this.poolParams.dexId;
66
+ const slots = [
67
+ DEX_LITE_DEX_VARIABLES_SLOT,
68
+ DEX_LITE_CENTER_PRICE_SHIFT_SLOT,
69
+ DEX_LITE_RANGE_SHIFT_SLOT,
70
+ DEX_LITE_THRESHOLD_SHIFT_SLOT,
71
+ ].map(slot => (0, utils_1.calculateMappingStorageSlot)(slot, dexIdBytes));
72
+ const calls = slots.map(slot => (0, utils_1.readFromStorageCall)(this.fluidDexLiteAddress, this.fluidDexLiteIface, slot));
73
+ const [{ returnData: dexVariables }, { returnData: centerPriceShift }, { returnData: rangeShift }, { returnData: thresholdShift },] = await this.dexHelper.multiWrapper.tryAggregate(false, calls, blockNumber);
74
+ const lastInteractionTimestamp = (centerPriceShift >>
75
+ BigInt(fluid_dex_lite_math_1.BITS_DEX_LITE_CENTER_PRICE_SHIFT_LAST_INTERACTION_TIMESTAMP)) &
76
+ fluid_dex_lite_math_1.X33;
77
+ return {
78
+ dexVariables,
79
+ centerPriceShift,
80
+ rangeShift,
81
+ thresholdShift,
82
+ lastInteractionTimestamp,
83
+ };
84
+ }
85
+ // Event handlers
86
+ handleLogSwap(event, state, log, blockHeader) {
87
+ const dexId = (0, utils_1.normalizeDexId)(this.poolParams.dexId);
88
+ const swapData = event.args.swapData;
89
+ if (!swapData)
90
+ return state;
91
+ // Extract first 64 bits (8 bytes) as dexId
92
+ const extractedDexId = (BigInt(swapData) & fluid_dex_lite_math_1.X64).toString(16);
93
+ const eventDexId = (0, utils_1.normalizeDexId)(extractedDexId);
94
+ if (eventDexId !== dexId) {
95
+ // Not for this pool, skip silently
96
+ return state;
97
+ }
98
+ return {
99
+ ...state,
100
+ dexVariables: BigInt(event.args.dexVariables),
101
+ };
102
+ }
103
+ }
104
+ exports.FluidDexLiteEventPool = FluidDexLiteEventPool;
105
+ //# sourceMappingURL=fluid-dex-lite-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid-dex-lite-pool.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex-lite/fluid-dex-lite-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, DexExchangeParam, NumberAsString } from '../../types';
2
+ import { SwapSide, Network } from '../../constants';
3
+ import { IDex } from '../../dex/idex';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { FluidDexLiteData, PoolParams } from './types';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { FluidDexLiteEventPool } from './fluid-dex-lite-pool';
8
+ import { Interface } from '@ethersproject/abi';
9
+ export declare class FluidDexLite extends SimpleExchange implements IDex<FluidDexLiteData> {
10
+ readonly network: Network;
11
+ readonly dexKey: string;
12
+ readonly dexHelper: IDexHelper;
13
+ protected eventPools: {
14
+ [key: string]: FluidDexLiteEventPool | null;
15
+ };
16
+ pools: PoolParams[];
17
+ readonly hasConstantPriceLargeAmounts = false;
18
+ readonly needWrapNative = true;
19
+ readonly isFeeOnTransferSupported = false;
20
+ static dexKeysWithNetwork: {
21
+ key: string;
22
+ networks: Network[];
23
+ }[];
24
+ logger: Logger;
25
+ fluidDexLiteIface: Interface;
26
+ dexLiteAddress: Address;
27
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
28
+ initializePricing(blockNumber: number): Promise<void>;
29
+ private loadDexesList;
30
+ private initializeEventPools;
31
+ private getPoolForTokens;
32
+ private getEventPool;
33
+ private getGasCost;
34
+ getAdapters(side: SwapSide): {
35
+ name: string;
36
+ index: number;
37
+ }[] | null;
38
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
39
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<FluidDexLiteData>>;
40
+ getCalldataGasCost(poolPrices: PoolPrices<FluidDexLiteData>): number | number[];
41
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: FluidDexLiteData, side: SwapSide): AdapterExchangeParam;
42
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: FluidDexLiteData, side: SwapSide): DexExchangeParam;
43
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: FluidDexLiteData, side: SwapSide): Promise<SimpleExchangeParam>;
44
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
45
+ }
@@ -0,0 +1,461 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FluidDexLite = void 0;
40
+ const constants_1 = require("../../constants");
41
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
42
+ const utils_1 = require("../../utils");
43
+ const fluid_dex_lite_math_1 = require("./fluid-dex-lite-math");
44
+ const simple_exchange_1 = require("../simple-exchange");
45
+ const config_1 = require("./config");
46
+ const fluid_dex_lite_pool_1 = require("./fluid-dex-lite-pool");
47
+ const FluidDexLite_abi_json_1 = __importDefault(require("../../abi/fluid-dex-lite/FluidDexLite.abi.json"));
48
+ const abi_1 = require("@ethersproject/abi");
49
+ const abi_2 = require("@ethersproject/abi");
50
+ const web3_utils_1 = require("web3-utils");
51
+ const fluid_dex_lite_math_2 = require("./fluid-dex-lite-math");
52
+ const utils_2 = require("../../executor/utils");
53
+ const bigint_constants_1 = require("../../bigint-constants");
54
+ const utils_3 = require("./utils");
55
+ // Storage slot constants
56
+ const DEX_LITE_DEXES_LIST_SLOT = 1;
57
+ class FluidDexLite extends simple_exchange_1.SimpleExchange {
58
+ network;
59
+ dexKey;
60
+ dexHelper;
61
+ eventPools = {};
62
+ pools = [];
63
+ hasConstantPriceLargeAmounts = false;
64
+ needWrapNative = true;
65
+ isFeeOnTransferSupported = false;
66
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.FluidDexLiteConfig);
67
+ logger;
68
+ fluidDexLiteIface;
69
+ dexLiteAddress;
70
+ constructor(network, dexKey, dexHelper) {
71
+ super(dexHelper, dexKey);
72
+ this.network = network;
73
+ this.dexKey = dexKey;
74
+ this.dexHelper = dexHelper;
75
+ this.logger = dexHelper.getLogger(dexKey);
76
+ this.fluidDexLiteIface = new abi_1.Interface(FluidDexLite_abi_json_1.default);
77
+ const config = config_1.FluidDexLiteConfig[dexKey][network];
78
+ if (!config) {
79
+ throw new Error(`No config found for ${dexKey} on network ${network}`);
80
+ }
81
+ this.dexLiteAddress = config.dexLiteAddress;
82
+ }
83
+ // Initialize pricing is called once in the start of
84
+ // pricing service. It is intended to setup the integration
85
+ // for pricing requests.
86
+ async initializePricing(blockNumber) {
87
+ try {
88
+ // Step 1: Read the _dexesList array from storage
89
+ await this.loadDexesList(blockNumber);
90
+ // Step 2: Initialize event pools for each dex
91
+ await this.initializeEventPools(blockNumber);
92
+ this.logger.info(`FluidDexLite: Initialized ${this.pools.length} pools`);
93
+ }
94
+ catch (error) {
95
+ this.logger.error('FluidDexLite: Failed to initialize pricing', error);
96
+ throw error;
97
+ }
98
+ }
99
+ // Load all dex pools from the _dexesList storage array
100
+ async loadDexesList(blockNumber) {
101
+ try {
102
+ const [lengthResult] = await this.dexHelper.multiWrapper.tryAggregate(false, [
103
+ (0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(DEX_LITE_DEXES_LIST_SLOT)),
104
+ ], blockNumber);
105
+ const arrayLength = Number(lengthResult.returnData);
106
+ if (arrayLength === 0) {
107
+ this.logger.info(`${this.dexKey}: No dex pools found in _dexesList`);
108
+ return;
109
+ }
110
+ const arrayBaseSlot = (0, web3_utils_1.keccak256)(abi_2.defaultAbiCoder.encode(['uint256'], [DEX_LITE_DEXES_LIST_SLOT]));
111
+ const callDataList = [];
112
+ for (let i = 0; i < arrayLength; i++) {
113
+ const baseIndex = BigInt(arrayBaseSlot) + BigInt(i * 3);
114
+ callDataList.push((0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(baseIndex)), // token0
115
+ (0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(baseIndex + 1n)), // token1
116
+ (0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(baseIndex + 2n)));
117
+ }
118
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, callDataList, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
119
+ const dexesList = [];
120
+ for (let i = 0; i < arrayLength; i++) {
121
+ const resultIndex = i * 3;
122
+ if (resultIndex + 2 >= results.length) {
123
+ this.logger.warn(`${this.dexKey}: Missing results for pool ${i}, skipping`);
124
+ continue;
125
+ }
126
+ const token0 = results[resultIndex].returnData;
127
+ const token1 = results[resultIndex + 1].returnData;
128
+ const salt = results[resultIndex + 2].returnData;
129
+ if (token0 === 0n || token1 === 0n) {
130
+ this.logger.debug(`${this.dexKey}: Invalid token addresses for pool ${i}, skipping`);
131
+ continue;
132
+ }
133
+ dexesList.push({
134
+ token0: '0x' + token0.toString(16).padStart(40, '0'),
135
+ token1: '0x' + token1.toString(16).padStart(40, '0'),
136
+ salt: '0x' + salt.toString(16).padStart(64, '0'),
137
+ });
138
+ }
139
+ this.pools = dexesList.map(dexKey => ({
140
+ dexId: (0, utils_3.calculateDexId)(dexKey),
141
+ dexKey,
142
+ }));
143
+ this.logger.info(`${this.dexKey}: Loaded ${this.pools.length} dex pools`);
144
+ }
145
+ catch (error) {
146
+ this.logger.error(`${this.dexKey}: Failed to load dexes list`, error);
147
+ throw error;
148
+ }
149
+ }
150
+ // Initialize event pools for tracking state changes
151
+ async initializeEventPools(blockNumber) {
152
+ for (const pool of this.pools) {
153
+ const mapKey = `${pool.dexKey.token0}_${pool.dexKey.token1}_${pool.dexKey.salt}`.toLowerCase();
154
+ try {
155
+ const eventPool = new fluid_dex_lite_pool_1.FluidDexLiteEventPool(this.dexKey, this.network, this.dexHelper, this.logger, mapKey, this.fluidDexLiteIface, pool, this.dexLiteAddress);
156
+ await eventPool.initialize(blockNumber);
157
+ this.eventPools[mapKey] = eventPool;
158
+ this.logger.debug(`${this.dexKey}: Initialized event pool for ${mapKey}`);
159
+ }
160
+ catch (error) {
161
+ this.eventPools[mapKey] = null;
162
+ this.logger.error(`${this.dexKey}: Failed to initialize event pool for ${pool.dexId}, ${error}`);
163
+ }
164
+ }
165
+ }
166
+ // Helper function to get pool by token addresses
167
+ getPoolForTokens(srcToken, destToken) {
168
+ const srcAddr = srcToken.toLowerCase();
169
+ const destAddr = destToken.toLowerCase();
170
+ return (this.pools.find(pool => {
171
+ const token0 = pool.dexKey.token0.toLowerCase();
172
+ const token1 = pool.dexKey.token1.toLowerCase();
173
+ return ((token0 === srcAddr && token1 === destAddr) ||
174
+ (token0 === destAddr && token1 === srcAddr));
175
+ }) || null);
176
+ }
177
+ // Helper function to get event pool
178
+ getEventPool(pool) {
179
+ const mapKey = `${pool.dexKey.token0}_${pool.dexKey.token1}_${pool.dexKey.salt}`.toLowerCase();
180
+ return this.eventPools[mapKey] || null;
181
+ }
182
+ // Get estimated gas cost for a swap
183
+ getGasCost() {
184
+ // Default gas cost estimate for FluidDexLite swaps
185
+ // This should be calibrated based on actual gas usage
186
+ return 10000;
187
+ }
188
+ // Legacy: was only used for V5
189
+ // Returns the list of contract adapters (name and index)
190
+ // for a buy/sell. Return null if there are no adapters.
191
+ getAdapters(side) {
192
+ return null;
193
+ }
194
+ // Returns list of pool identifiers that can be used
195
+ // for a given swap. poolIdentifiers must be unique
196
+ // across DEXes.
197
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
198
+ const pool = this.getPoolForTokens(srcToken.address, destToken.address);
199
+ if (!pool) {
200
+ return [];
201
+ }
202
+ // Check if pool has liquidity
203
+ const eventPool = this.getEventPool(pool);
204
+ if (!eventPool) {
205
+ return [];
206
+ }
207
+ try {
208
+ const state = eventPool.getState(blockNumber);
209
+ if (!state) {
210
+ return [];
211
+ }
212
+ // Check if pool has sufficient liquidity
213
+ if (state.dexVariables === 0n) {
214
+ return [];
215
+ }
216
+ return [`${this.dexKey}_${pool.dexId}`.toLowerCase()];
217
+ }
218
+ catch (error) {
219
+ this.logger.debug(`FluidDexLite: Error getting pool state for ${pool.dexId}`, error);
220
+ return [];
221
+ }
222
+ }
223
+ // Returns pool prices for amounts.
224
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
225
+ try {
226
+ const pool = this.getPoolForTokens(srcToken.address, destToken.address);
227
+ if (!pool)
228
+ return null;
229
+ const poolIdentifier = `${this.dexKey}_${pool.dexId}`.toLowerCase();
230
+ if (limitPools?.length && !limitPools.includes(poolIdentifier))
231
+ return null;
232
+ const eventPool = this.getEventPool(pool);
233
+ const state = eventPool?.getState(blockNumber);
234
+ if (!state || state.dexVariables === 0n)
235
+ return null;
236
+ const swap0To1 = pool.dexKey.token0.toLowerCase() === srcToken.address.toLowerCase();
237
+ // Initialize result arrays with zero for index 0
238
+ const prices = [0n];
239
+ const gasCost = [0];
240
+ // Compute swap results for all amounts (except the 0th)
241
+ for (let i = 1; i < amounts.length; i++) {
242
+ try {
243
+ const { amountIn, amountOut } = (0, fluid_dex_lite_math_2.calculateSwap)(state, swap0To1, amounts[i], side);
244
+ prices.push(side === constants_1.SwapSide.SELL ? amountOut : amountIn);
245
+ gasCost.push(this.getGasCost());
246
+ }
247
+ catch (err) {
248
+ this.logger.error(`${this.dexKey}: Error calculating swap for amount ${amounts[i]}`, err);
249
+ prices.push(0n);
250
+ gasCost.push(0);
251
+ }
252
+ }
253
+ // Get unit amount (1 token with proper decimals)
254
+ const unitAmount = bigint_constants_1.BI_POWS[side === constants_1.SwapSide.SELL ? srcToken.decimals : destToken.decimals];
255
+ let unit = 0n;
256
+ try {
257
+ const { amountIn, amountOut } = (0, fluid_dex_lite_math_2.calculateSwap)(state, swap0To1, unitAmount, side);
258
+ unit = side === constants_1.SwapSide.SELL ? amountOut : amountIn;
259
+ }
260
+ catch (err) {
261
+ this.logger.debug(`${this.dexKey}: Error calculating unit price`, err);
262
+ }
263
+ return [
264
+ {
265
+ prices,
266
+ unit,
267
+ gasCost,
268
+ exchange: this.dexKey,
269
+ poolIdentifier,
270
+ data: {
271
+ exchange: this.dexLiteAddress,
272
+ dexKey: pool.dexKey,
273
+ swap0To1,
274
+ },
275
+ poolAddresses: [this.dexLiteAddress],
276
+ },
277
+ ];
278
+ }
279
+ catch (error) {
280
+ this.logger.error(`${this.dexKey}: Error in getPricesVolume`, error);
281
+ return null;
282
+ }
283
+ }
284
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
285
+ getCalldataGasCost(poolPrices) {
286
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
287
+ }
288
+ // Encode params required by the exchange adapter
289
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
290
+ const { exchange } = data;
291
+ // Encode here the payload for adapter
292
+ const payload = '';
293
+ return {
294
+ targetExchange: exchange,
295
+ payload,
296
+ networkFee: '0',
297
+ };
298
+ }
299
+ // Step 4: Generate calldata for Augustus to swap through FluidDexLite
300
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
301
+ const { dexKey, swap0To1 } = data;
302
+ const { token0, token1, salt } = dexKey;
303
+ const [t0, t1, s] = [token0, token1, salt].map(t => t.toLowerCase());
304
+ const [src, dest] = [srcToken, destToken].map(t => t.toLowerCase());
305
+ // Ensure the pool exists
306
+ const poolExists = this.pools.some(p => p.dexKey.token0.toLowerCase() === t0 &&
307
+ p.dexKey.token1.toLowerCase() === t1 &&
308
+ p.dexKey.salt.toLowerCase() === s);
309
+ if (!poolExists) {
310
+ throw new Error(`${this.dexKey}: Pool not found for tokens ${token0}/${token1} with salt ${salt}`);
311
+ }
312
+ // Validate the swap direction matches the token addresses
313
+ if (swap0To1 !== (src === t0)) {
314
+ throw new Error(`${this.dexKey}: Swap direction mismatch. Expected swap0To1: ${src === t0}, got: ${swap0To1}`);
315
+ }
316
+ // Validate that srcToken and destToken are actually part of this pool
317
+ if (![t0, t1].includes(src) || ![t0, t1].includes(dest)) {
318
+ throw new Error(`${this.dexKey}: Tokens ${srcToken}/${destToken} are not part of pool ${token0}/${token1}`);
319
+ }
320
+ // Determine swap amount and limits based on side
321
+ let amountSpecified;
322
+ let amountLimit;
323
+ if (side === constants_1.SwapSide.SELL) {
324
+ // Exact input: positive amountSpecified, amountLimit is minimum output
325
+ amountSpecified = srcAmount;
326
+ amountLimit = destAmount;
327
+ }
328
+ else {
329
+ // Exact output: negative amountSpecified, amountLimit is maximum input
330
+ amountSpecified = `-${destAmount}`;
331
+ amountLimit = srcAmount;
332
+ }
333
+ // Encode swapSingle function call
334
+ const swapData = this.fluidDexLiteIface.encodeFunctionData('swapSingle', [
335
+ dexKey, // DexKey calldata dexKey_
336
+ swap0To1, // bool swap0To1_
337
+ amountSpecified, // int256 amountSpecified_
338
+ amountLimit, // uint256 amountLimit_
339
+ recipient, // address to_
340
+ false, // bool isCallback_ (set to false for now)
341
+ '0x', // bytes calldata callbackData_ (empty)
342
+ '0x', // bytes calldata extraData_ (empty)
343
+ ]);
344
+ return {
345
+ needWrapNative: this.needWrapNative, // FluidDexLite can handle ETH directly
346
+ dexFuncHasRecipient: true, // Has to_ parameter for recipient
347
+ exchangeData: swapData, // Encoded swapSingle call
348
+ targetExchange: this.dexLiteAddress, // FluidDexLite contract address
349
+ spender: this.dexLiteAddress, // Approve tokens to FluidDexLite contract
350
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.fluidDexLiteIface, 'swapSingle', 'amountUnspecified_'),
351
+ };
352
+ }
353
+ // Legacy compatibility method for SimpleExchange
354
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
355
+ const { dexKey, swap0To1 } = data;
356
+ // Determine swap amount and limits based on side
357
+ let amountSpecified;
358
+ let amountLimit;
359
+ if (side === constants_1.SwapSide.SELL) {
360
+ // Exact input: positive amountSpecified, amountLimit is minimum output
361
+ amountSpecified = srcAmount;
362
+ amountLimit = destAmount;
363
+ }
364
+ else {
365
+ // Exact output: negative amountSpecified, amountLimit is maximum input
366
+ amountSpecified = `-${destAmount}`;
367
+ amountLimit = srcAmount;
368
+ }
369
+ // Encode swapSingle function call with Augustus as recipient
370
+ const swapData = this.fluidDexLiteIface.encodeFunctionData('swapSingle', [
371
+ dexKey, // DexKey calldata dexKey_
372
+ swap0To1, // bool swap0To1_
373
+ amountSpecified, // int256 amountSpecified_
374
+ amountLimit, // uint256 amountLimit_
375
+ this.augustusAddress, // address to_ (Augustus for simple swaps)
376
+ false, // bool isCallback_ (set to false for now)
377
+ '0x', // bytes calldata callbackData_ (empty)
378
+ '0x', // bytes calldata extraData_ (empty)
379
+ ]);
380
+ return {
381
+ callees: [this.dexLiteAddress],
382
+ calldata: [swapData],
383
+ values: ['0'],
384
+ networkFee: '0',
385
+ };
386
+ }
387
+ // Returns list of top pools based on liquidity.
388
+ async getTopPoolsForToken(tokenAddress, limit) {
389
+ try {
390
+ const normalizedTokenAddress = tokenAddress.toLowerCase();
391
+ const relevantPools = this.pools.filter(pool => pool.dexKey.token0.toLowerCase() === normalizedTokenAddress ||
392
+ pool.dexKey.token1.toLowerCase() === normalizedTokenAddress);
393
+ const poolLiquidity = [];
394
+ const currentBlock = await this.dexHelper.web3Provider.eth.getBlockNumber();
395
+ for (const pool of relevantPools.slice(0, limit * 2)) {
396
+ // Fetch more to filter out inactive ones
397
+ const eventPool = this.getEventPool(pool);
398
+ if (!eventPool)
399
+ continue;
400
+ try {
401
+ const state = eventPool.getState(currentBlock);
402
+ if (!state || state.dexVariables === 0n) {
403
+ // Skip pools with no liquidity
404
+ continue;
405
+ }
406
+ // Unpack dex variables to get token supplies
407
+ const unpackedVars = (0, fluid_dex_lite_math_1.unpackDexVariables)(state.dexVariables);
408
+ // Calculate liquidity based on adjusted total supplies
409
+ // These represent the actual liquidity available in the pool
410
+ const token0Supply = unpackedVars.token0TotalSupplyAdjusted;
411
+ const token1Supply = unpackedVars.token1TotalSupplyAdjusted;
412
+ if (token0Supply === 0n || token1Supply === 0n) {
413
+ // Skip pools with no liquidity
414
+ continue;
415
+ }
416
+ // Get decimals for proper scaling
417
+ const token0Decimals = Number(unpackedVars.token0Decimals);
418
+ const token1Decimals = Number(unpackedVars.token1Decimals);
419
+ // Calculate geometric mean of liquidity as a proxy for USD value
420
+ // Convert to 18 decimal standard for calculation
421
+ const token0LiquidityNormalized = token0Supply * 10n ** (18n - BigInt(token0Decimals));
422
+ const token1LiquidityNormalized = token1Supply * 10n ** (18n - BigInt(token1Decimals));
423
+ // Simple geometric mean calculation (sqrt(a * b))
424
+ const geometricMeanSquared = token0LiquidityNormalized * token1LiquidityNormalized;
425
+ const liquidityUSD = Number((0, fluid_dex_lite_math_1.sqrt)(geometricMeanSquared) / 10n ** 18n);
426
+ // Log liquidity result for debugging
427
+ this.logger.debug(`Pool ${pool.dexId} liquidity: $${liquidityUSD.toLocaleString()}`);
428
+ // Determine connector token (the other token in the pair)
429
+ const connectorToken = pool.dexKey.token0.toLowerCase() === normalizedTokenAddress
430
+ ? {
431
+ address: pool.dexKey.token1,
432
+ decimals: token1Decimals,
433
+ }
434
+ : {
435
+ address: pool.dexKey.token0,
436
+ decimals: token0Decimals,
437
+ };
438
+ poolLiquidity.push({
439
+ exchange: this.dexKey,
440
+ address: this.dexLiteAddress,
441
+ connectorTokens: [connectorToken],
442
+ liquidityUSD,
443
+ });
444
+ }
445
+ catch (error) {
446
+ this.logger.debug(`FluidDexLite: Error getting liquidity for pool ${pool.dexId}`, error);
447
+ }
448
+ }
449
+ // Sort by liquidity and return top pools
450
+ return poolLiquidity
451
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
452
+ .slice(0, limit);
453
+ }
454
+ catch (error) {
455
+ this.logger.error('FluidDexLite: Error in getTopPoolsForToken', error);
456
+ return [];
457
+ }
458
+ }
459
+ }
460
+ exports.FluidDexLite = FluidDexLite;
461
+ //# sourceMappingURL=fluid-dex-lite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid-dex-lite.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex-lite/fluid-dex-lite.ts"],"names":[],"mappings":"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"}