@paraswap/dex-lib 3.8.14 → 3.8.16

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 (211) hide show
  1. package/build/abi/concentrator/arUSD.json +568 -0
  2. package/build/abi/concentrator/arUSD5115.json +1746 -0
  3. package/build/abi/fx-protocol/FxMarket.json +1284 -0
  4. package/build/abi/{wombat/pool.json → fx-protocol/FxUSD.json} +541 -603
  5. package/build/abi/fx-protocol/weETHOralce.json +676 -0
  6. package/build/abi/inception/inception-ineth-pool.json +1062 -0
  7. package/build/abi/inception/inception-ineth.json +609 -0
  8. package/build/abi/inception/inception-ratio-feed.json +93 -0
  9. package/build/abi/inception/inception-vault.json +991 -0
  10. package/build/abi/infusion/InfusionFactory.json +147 -0
  11. package/build/abi/infusion/InfusionPair.json +658 -0
  12. package/build/abi/infusion/InfusionRouter.json +442 -0
  13. package/build/abi/oswap/oswap.abi.json +452 -0
  14. package/build/dex/aave-v1/aave-v1.js +0 -1
  15. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  16. package/build/dex/angle-transmuter/angle-transmuter.js +1 -1
  17. package/build/dex/angle-transmuter/angle-transmuter.js.map +1 -1
  18. package/build/dex/concentrator-arusd/concentrator-arusd-event.d.ts +17 -0
  19. package/build/dex/concentrator-arusd/concentrator-arusd-event.js +66 -0
  20. package/build/dex/concentrator-arusd/concentrator-arusd-event.js.map +1 -0
  21. package/build/dex/concentrator-arusd/concentrator-arusd.d.ts +41 -0
  22. package/build/dex/concentrator-arusd/concentrator-arusd.js +188 -0
  23. package/build/dex/concentrator-arusd/concentrator-arusd.js.map +1 -0
  24. package/build/dex/concentrator-arusd/config.d.ts +3 -0
  25. package/build/dex/concentrator-arusd/config.js +14 -0
  26. package/build/dex/concentrator-arusd/config.js.map +1 -0
  27. package/build/dex/concentrator-arusd/types.d.ts +14 -0
  28. package/build/dex/concentrator-arusd/types.js +3 -0
  29. package/build/dex/concentrator-arusd/types.js.map +1 -0
  30. package/build/dex/concentrator-arusd/utils.d.ts +4 -0
  31. package/build/dex/concentrator-arusd/utils.js +27 -0
  32. package/build/dex/concentrator-arusd/utils.js.map +1 -0
  33. package/build/dex/fx-protocol-rusd/config.d.ts +3 -0
  34. package/build/dex/fx-protocol-rusd/config.js +15 -0
  35. package/build/dex/fx-protocol-rusd/config.js.map +1 -0
  36. package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.d.ts +18 -0
  37. package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.js +71 -0
  38. package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.js.map +1 -0
  39. package/build/dex/fx-protocol-rusd/fx-protocol-rusd.d.ts +39 -0
  40. package/build/dex/fx-protocol-rusd/fx-protocol-rusd.js +201 -0
  41. package/build/dex/fx-protocol-rusd/fx-protocol-rusd.js.map +1 -0
  42. package/build/dex/fx-protocol-rusd/types.d.ts +13 -0
  43. package/build/dex/fx-protocol-rusd/types.js +3 -0
  44. package/build/dex/fx-protocol-rusd/types.js.map +1 -0
  45. package/build/dex/fx-protocol-rusd/utils.d.ts +4 -0
  46. package/build/dex/fx-protocol-rusd/utils.js +26 -0
  47. package/build/dex/fx-protocol-rusd/utils.js.map +1 -0
  48. package/build/dex/idex.d.ts +11 -7
  49. package/build/dex/idle-dao/idle-dao-pool.d.ts +56 -0
  50. package/build/dex/idle-dao/idle-dao-pool.js +176 -0
  51. package/build/dex/idle-dao/idle-dao-pool.js.map +1 -0
  52. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +16 -0
  53. package/build/dex/idle-dao/idle-dao-pooling-pool.js +57 -0
  54. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +1 -0
  55. package/build/dex/idle-dao/scripts.d.ts +9 -0
  56. package/build/dex/idle-dao/scripts.js +552 -0
  57. package/build/dex/idle-dao/scripts.js.map +1 -0
  58. package/build/dex/inception/config.d.ts +5 -0
  59. package/build/dex/inception/config.js +112 -0
  60. package/build/dex/inception/config.js.map +1 -0
  61. package/build/dex/inception/inception-event-pool.d.ts +23 -0
  62. package/build/dex/inception/inception-event-pool.js +34 -0
  63. package/build/dex/inception/inception-event-pool.js.map +1 -0
  64. package/build/dex/inception/inception-native.d.ts +43 -0
  65. package/build/dex/inception/inception-native.js +131 -0
  66. package/build/dex/inception/inception-native.js.map +1 -0
  67. package/build/dex/inception/inception-pool.d.ts +18 -0
  68. package/build/dex/inception/inception-pool.js +32 -0
  69. package/build/dex/inception/inception-pool.js.map +1 -0
  70. package/build/dex/inception/inception-price-feed.d.ts +19 -0
  71. package/build/dex/inception/inception-price-feed.js +51 -0
  72. package/build/dex/inception/inception-price-feed.js.map +1 -0
  73. package/build/dex/inception/inception.d.ts +44 -0
  74. package/build/dex/inception/inception.js +162 -0
  75. package/build/dex/inception/inception.js.map +1 -0
  76. package/build/dex/inception/tokens.d.ts +9 -0
  77. package/build/dex/inception/tokens.js +28 -0
  78. package/build/dex/inception/tokens.js.map +1 -0
  79. package/build/dex/inception/types.d.ts +22 -0
  80. package/build/dex/inception/types.js +3 -0
  81. package/build/dex/inception/types.js.map +1 -0
  82. package/build/dex/inception/utils.d.ts +7 -0
  83. package/build/dex/inception/utils.js +58 -0
  84. package/build/dex/inception/utils.js.map +1 -0
  85. package/build/dex/index.js +4 -0
  86. package/build/dex/index.js.map +1 -1
  87. package/build/dex/infusion/config.d.ts +4 -0
  88. package/build/dex/infusion/config.js +25 -0
  89. package/build/dex/infusion/config.js.map +1 -0
  90. package/build/dex/infusion/infusion-stable-pool.d.ts +4 -0
  91. package/build/dex/infusion/infusion-stable-pool.js +74 -0
  92. package/build/dex/infusion/infusion-stable-pool.js.map +1 -0
  93. package/build/dex/infusion/infusion.d.ts +54 -0
  94. package/build/dex/infusion/infusion.js +510 -0
  95. package/build/dex/infusion/infusion.js.map +1 -0
  96. package/build/dex/infusion/types.d.ts +47 -0
  97. package/build/dex/infusion/types.js +3 -0
  98. package/build/dex/infusion/types.js.map +1 -0
  99. package/build/dex/infusion/utils/isStablePair.d.ts +2 -0
  100. package/build/dex/infusion/utils/isStablePair.js +18 -0
  101. package/build/dex/infusion/utils/isStablePair.js.map +1 -0
  102. package/build/dex/oswap/config.d.ts +5 -0
  103. package/build/dex/oswap/config.js +31 -0
  104. package/build/dex/oswap/config.js.map +1 -0
  105. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  106. package/build/dex/oswap/oswap-pool.js +150 -0
  107. package/build/dex/oswap/oswap-pool.js.map +1 -0
  108. package/build/dex/oswap/oswap.d.ts +46 -0
  109. package/build/dex/oswap/oswap.js +263 -0
  110. package/build/dex/oswap/oswap.js.map +1 -0
  111. package/build/dex/oswap/types.d.ts +20 -0
  112. package/build/dex/oswap/types.js +3 -0
  113. package/build/dex/oswap/types.js.map +1 -0
  114. package/build/dex/platypus/platypus.js +3 -17
  115. package/build/dex/platypus/platypus.js.map +1 -1
  116. package/build/dex/swaap-v1/swaap-v1.js +0 -4
  117. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  118. package/build/dex/weth/config.js +3 -0
  119. package/build/dex/weth/config.js.map +1 -1
  120. package/package.json +1 -1
  121. package/src/abi/concentrator/arUSD.json +568 -0
  122. package/src/abi/concentrator/arUSD5115.json +1746 -0
  123. package/src/abi/fx-protocol/FxMarket.json +1284 -0
  124. package/src/abi/fx-protocol/FxUSD.json +1227 -0
  125. package/src/abi/fx-protocol/weETHOralce.json +676 -0
  126. package/src/dex/angle-transmuter/angle-transmuter.ts +1 -1
  127. package/src/dex/concentrator-arusd/concentrator-arusd-e2e.test.ts +92 -0
  128. package/src/dex/concentrator-arusd/concentrator-arusd-event.ts +100 -0
  129. package/src/dex/concentrator-arusd/concentrator-arusd-integration.test.ts +104 -0
  130. package/src/dex/concentrator-arusd/concentrator-arusd.ts +269 -0
  131. package/src/dex/concentrator-arusd/concetrator-arusd-events.test.ts +97 -0
  132. package/src/dex/concentrator-arusd/config.ts +13 -0
  133. package/src/dex/concentrator-arusd/types.ts +16 -0
  134. package/src/dex/concentrator-arusd/utils.ts +36 -0
  135. package/src/dex/fx-protocol-rusd/config.ts +14 -0
  136. package/src/dex/fx-protocol-rusd/fx-protocol-e2e.test.ts +96 -0
  137. package/src/dex/fx-protocol-rusd/fx-protocol-events.test.ts +101 -0
  138. package/src/dex/fx-protocol-rusd/fx-protocol-integration.test.ts +104 -0
  139. package/src/dex/fx-protocol-rusd/fx-protocol-rusd-event.ts +112 -0
  140. package/src/dex/fx-protocol-rusd/fx-protocol-rusd.ts +282 -0
  141. package/src/dex/fx-protocol-rusd/types.ts +16 -0
  142. package/src/dex/fx-protocol-rusd/utils.ts +47 -0
  143. package/src/dex/idex.ts +48 -41
  144. package/src/dex/index.ts +4 -0
  145. package/src/dex/weth/config.ts +3 -0
  146. package/src/dex/weth/weth-e2e.test.ts +156 -0
  147. package/src/dex/wsteth/wsteth-integration.test.ts +0 -1
  148. package/tests/constants-e2e.ts +10 -0
  149. package/.vscode/launch.json +0 -53
  150. package/.vscode/settings.json +0 -2
  151. package/.vscode/tasks.json +0 -15
  152. package/build/abi/maverick-v2/MaverickV2Router.json +0 -778
  153. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
  154. package/build/dex/aave-v2/tokens-avalanche.json +0 -44
  155. package/build/dex/aave-v2/tokens-mainnet.json +0 -188
  156. package/build/dex/aave-v2/tokens-polygon.json +0 -44
  157. package/build/dex/bProtocol.d.ts +0 -18
  158. package/build/dex/bProtocol.js +0 -39
  159. package/build/dex/bProtocol.js.map +0 -1
  160. package/build/dex/bancor.d.ts +0 -26
  161. package/build/dex/bancor.js +0 -58
  162. package/build/dex/bancor.js.map +0 -1
  163. package/build/dex/compound.d.ts +0 -18
  164. package/build/dex/compound.js +0 -46
  165. package/build/dex/compound.js.map +0 -1
  166. package/build/dex/curve-v2.d.ts +0 -58
  167. package/build/dex/curve-v2.js +0 -180
  168. package/build/dex/curve-v2.js.map +0 -1
  169. package/build/dex/dodo-v1.d.ts +0 -33
  170. package/build/dex/dodo-v1.js +0 -63
  171. package/build/dex/dodo-v1.js.map +0 -1
  172. package/build/dex/lido.d.ts +0 -19
  173. package/build/dex/lido.js +0 -42
  174. package/build/dex/lido.js.map +0 -1
  175. package/build/dex/maker-psm/scripts/gem.abi.json +0 -136
  176. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  177. package/build/dex/maker-psm/scripts/validate-state.js +0 -185
  178. package/build/dex/maker-psm/scripts/validate-state.js.map +0 -1
  179. package/build/dex/maker-psm/scripts/vat.abi.json +0 -243
  180. package/build/dex/onebit.d.ts +0 -25
  181. package/build/dex/onebit.js +0 -42
  182. package/build/dex/onebit.js.map +0 -1
  183. package/build/dex/smoothy.d.ts +0 -26
  184. package/build/dex/smoothy.js +0 -48
  185. package/build/dex/smoothy.js.map +0 -1
  186. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +0 -1
  187. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
  188. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
  189. package/build/dex/stable-pool.d.ts +0 -28
  190. package/build/dex/stable-pool.js +0 -55
  191. package/build/dex/stable-pool.js.map +0 -1
  192. package/build/dex/trader-joe-v2.1/base.d.ts +0 -18
  193. package/build/dex/trader-joe-v2.1/base.js +0 -99
  194. package/build/dex/trader-joe-v2.1/base.js.map +0 -1
  195. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +0 -7
  196. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +0 -20
  197. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +0 -1
  198. package/build/dex/trader-joe-v2.1/trader-joe-v2.2.d.ts +0 -7
  199. package/build/dex/trader-joe-v2.1/trader-joe-v2.2.js +0 -20
  200. package/build/dex/trader-joe-v2.1/trader-joe-v2.2.js.map +0 -1
  201. package/build/dex/trader-joe-v2.1.d.ts +0 -43
  202. package/build/dex/trader-joe-v2.1.js +0 -79
  203. package/build/dex/trader-joe-v2.1.js.map +0 -1
  204. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
  205. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
  206. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
  207. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
  208. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
  209. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
  210. package/config.ts +0 -1946
  211. package/src/dex/dexs.txt +0 -58
@@ -0,0 +1,510 @@
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.Infusion = exports.InfusionRouterFunctions = void 0;
7
+ const uniswap_v2_1 = require("../uniswap-v2/uniswap-v2");
8
+ const constants_1 = require("../../constants");
9
+ const erc20_json_1 = __importDefault(require("../../abi/erc20.json"));
10
+ const utils_1 = require("../../utils");
11
+ const InfusionFactory_json_1 = __importDefault(require("../../abi/infusion/InfusionFactory.json"));
12
+ const InfusionPair_json_1 = __importDefault(require("../../abi/infusion/InfusionPair.json"));
13
+ const InfusionRouter_json_1 = __importDefault(require("../../abi/infusion/InfusionRouter.json"));
14
+ const lodash_1 = __importDefault(require("lodash"));
15
+ const core_1 = require("@paraswap/core");
16
+ const abi_1 = require("@ethersproject/abi");
17
+ const infusion_stable_pool_1 = require("./infusion-stable-pool");
18
+ const uniswap_v2_constant_product_pool_1 = require("../uniswap-v2/uniswap-v2-constant-product-pool");
19
+ const config_1 = require("./config");
20
+ const token_transfer_fee_1 = require("../../lib/token-transfer-fee");
21
+ const isStablePair_1 = require("./utils/isStablePair");
22
+ var InfusionRouterFunctions;
23
+ (function (InfusionRouterFunctions) {
24
+ InfusionRouterFunctions["sellExactEth"] = "swapExactETHForTokens";
25
+ InfusionRouterFunctions["sellExactToken"] = "swapExactTokensForETH";
26
+ InfusionRouterFunctions["swapExactIn"] = "swapExactTokensForTokens";
27
+ })(InfusionRouterFunctions = exports.InfusionRouterFunctions || (exports.InfusionRouterFunctions = {}));
28
+ const VelodromeFactoryABI = [
29
+ {
30
+ inputs: [{ internalType: 'bool', name: '_stable', type: 'bool' }],
31
+ name: 'getFee',
32
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
33
+ stateMutability: 'view',
34
+ type: 'function',
35
+ },
36
+ ];
37
+ const velodromeFactoryIface = new abi_1.Interface(VelodromeFactoryABI);
38
+ const erc20Iface = new abi_1.Interface(erc20_json_1.default);
39
+ const infusionPairIface = new abi_1.Interface(InfusionPair_json_1.default);
40
+ const defaultAbiCoder = new abi_1.AbiCoder();
41
+ class Infusion extends uniswap_v2_1.UniswapV2 {
42
+ constructor(network, dexKey, dexHelper, isDynamicFees = true, factoryAddress, subgraphURL, initCode, feeCode, poolGasCost, routerAddress) {
43
+ super(network, dexKey, dexHelper, isDynamicFees, factoryAddress !== undefined
44
+ ? factoryAddress
45
+ : config_1.InfusionConfig[dexKey][network].factoryAddress, subgraphURL === ''
46
+ ? undefined
47
+ : subgraphURL !== undefined
48
+ ? subgraphURL
49
+ : config_1.InfusionConfig[dexKey][network].subgraphURL, initCode !== undefined
50
+ ? initCode
51
+ : config_1.InfusionConfig[dexKey][network].initCode, feeCode !== undefined ? feeCode : config_1.InfusionConfig[dexKey][network].feeCode, poolGasCost !== undefined
52
+ ? poolGasCost
53
+ : config_1.InfusionConfig[dexKey][network].poolGasCost, infusionPairIface, config_1.Adapters[network] || undefined);
54
+ this.network = network;
55
+ this.dexHelper = dexHelper;
56
+ this.pairs = {};
57
+ this.isFeeOnTransferSupported = true;
58
+ this.SRC_TOKEN_DEX_TRANSFERS = 1;
59
+ this.DEST_TOKEN_DEX_TRANSFERS = 1;
60
+ this.stableFee = config_1.InfusionConfig[dexKey][network].stableFee;
61
+ this.volatileFee = config_1.InfusionConfig[dexKey][network].volatileFee;
62
+ this.factory = new dexHelper.web3Provider.eth.Contract(InfusionFactory_json_1.default, factoryAddress !== undefined
63
+ ? factoryAddress
64
+ : config_1.InfusionConfig[dexKey][network].factoryAddress);
65
+ this.router =
66
+ routerAddress !== undefined
67
+ ? routerAddress
68
+ : config_1.InfusionConfig[dexKey][network].router || '';
69
+ this.feeFactor =
70
+ config_1.InfusionConfig[dexKey][network].feeFactor || this.feeFactor;
71
+ // this.exchangeRouterInterface = new Interface(infusionRouterABI);
72
+ }
73
+ async findInfusionPair(from, to, stable) {
74
+ if (from.address.toLowerCase() === to.address.toLowerCase())
75
+ return null;
76
+ const [token0, token1] = from.address.toLowerCase() < to.address.toLowerCase()
77
+ ? [from, to]
78
+ : [to, from];
79
+ const typePostfix = this.poolPostfix(stable);
80
+ const key = `${token0.address.toLowerCase()}-${token1.address.toLowerCase()}-${typePostfix}`;
81
+ let pair = this.pairs[key];
82
+ if (pair)
83
+ return pair;
84
+ let exchange = await this.factory.methods
85
+ // Infusion has additional boolean parameter "StablePool"
86
+ // At first we look for uniswap-like volatile pool
87
+ .getPair(token0.address, token1.address, stable)
88
+ .call();
89
+ if (exchange === constants_1.NULL_ADDRESS) {
90
+ pair = { token0, token1, stable };
91
+ }
92
+ else {
93
+ pair = { token0, token1, exchange, stable };
94
+ }
95
+ this.pairs[key] = pair;
96
+ return pair;
97
+ }
98
+ async batchCatchUpPairs(pairs, blockNumber) {
99
+ if (!blockNumber)
100
+ return;
101
+ const pairsToFetch = [];
102
+ for (const _pair of pairs) {
103
+ for (const stable of [false, true]) {
104
+ const pair = await this.findInfusionPair(_pair[0], _pair[1], stable);
105
+ if (!(pair && pair.exchange))
106
+ continue;
107
+ if (!pair.pool) {
108
+ pairsToFetch.push(pair);
109
+ }
110
+ else if (!pair.pool.getState(blockNumber)) {
111
+ pairsToFetch.push(pair);
112
+ }
113
+ }
114
+ }
115
+ if (!pairsToFetch.length)
116
+ return;
117
+ const reserves = await this.getManyPoolReserves(pairsToFetch, blockNumber);
118
+ if (reserves.length !== pairsToFetch.length) {
119
+ this.logger.error(`Error_getManyPoolReserves didn't get any pool reserves`);
120
+ }
121
+ for (let i = 0; i < pairsToFetch.length; i++) {
122
+ const pairState = reserves[i];
123
+ const pair = pairsToFetch[i];
124
+ if (!pair.pool) {
125
+ await this.addPool(pair, pairState.reserves0, pairState.reserves1, pairState.feeCode, blockNumber);
126
+ }
127
+ else
128
+ pair.pool.setState(pairState, blockNumber);
129
+ }
130
+ }
131
+ async getManyPoolReserves(pairs, blockNumber) {
132
+ try {
133
+ const multiCallFeeData = pairs.map(pair => this.getFeesMultiCallData(pair));
134
+ const calldata = pairs
135
+ .map((pair, i) => {
136
+ let calldata = [
137
+ {
138
+ target: pair.token0.address,
139
+ callData: erc20Iface.encodeFunctionData('balanceOf', [
140
+ pair.exchange,
141
+ ]),
142
+ },
143
+ {
144
+ target: pair.token1.address,
145
+ callData: erc20Iface.encodeFunctionData('balanceOf', [
146
+ pair.exchange,
147
+ ]),
148
+ },
149
+ ];
150
+ if (this.isDynamicFees)
151
+ calldata.push(multiCallFeeData[i].callEntry);
152
+ return calldata;
153
+ })
154
+ .flat();
155
+ const data = await this.dexHelper.multiContract.methods
156
+ .aggregate(calldata)
157
+ .call({}, blockNumber);
158
+ const returnData = lodash_1.default.chunk(data.returnData, this.isDynamicFees ? 3 : 2);
159
+ return pairs.map((pair, i) => ({
160
+ reserves0: defaultAbiCoder
161
+ .decode(['uint256'], returnData[i][0])[0]
162
+ .toString(),
163
+ reserves1: defaultAbiCoder
164
+ .decode(['uint256'], returnData[i][1])[0]
165
+ .toString(),
166
+ feeCode: this.isDynamicFees
167
+ ? multiCallFeeData[i].callDecoder(returnData[i][2])
168
+ : (pair.stable ? this.stableFee : this.volatileFee) || this.feeCode,
169
+ }));
170
+ }
171
+ catch (e) {
172
+ this.logger.error(`Error_getManyPoolReserves could not get reserves with error:`, e);
173
+ return [];
174
+ }
175
+ }
176
+ async getSellPrice(priceParams, srcAmount) {
177
+ return priceParams.stable
178
+ ? infusion_stable_pool_1.InfusionStablePool.getSellPrice(priceParams, srcAmount, this.feeFactor)
179
+ : uniswap_v2_constant_product_pool_1.Uniswapv2ConstantProductPool.getSellPrice(priceParams, srcAmount, this.feeFactor);
180
+ }
181
+ async getBuyPrice(priceParams, srcAmount) {
182
+ if (priceParams.stable)
183
+ throw new Error(`Buy not supported`);
184
+ return uniswap_v2_constant_product_pool_1.Uniswapv2ConstantProductPool.getBuyPrice(priceParams, srcAmount, this.feeFactor);
185
+ }
186
+ async getPricesVolume(_from, _to, amounts, side, blockNumber,
187
+ // list of pool identifiers to use for pricing, if undefined use all pools
188
+ limitPools, transferFees = {
189
+ srcFee: 0,
190
+ destFee: 0,
191
+ srcDexFee: 0,
192
+ destDexFee: 0,
193
+ }) {
194
+ try {
195
+ if (side === core_1.SwapSide.BUY)
196
+ return null; // Buy side not implemented yet
197
+ const from = this.dexHelper.config.wrapETH(_from);
198
+ const to = this.dexHelper.config.wrapETH(_to);
199
+ if (from.address.toLowerCase() === to.address.toLowerCase()) {
200
+ return null;
201
+ }
202
+ const tokenAddress = [
203
+ from.address.toLowerCase(),
204
+ to.address.toLowerCase(),
205
+ ]
206
+ .sort((a, b) => (a > b ? 1 : -1))
207
+ .join('_');
208
+ await this.batchCatchUpPairs([[from, to]], blockNumber);
209
+ const resultPromises = [false, true].map(async (stable) => {
210
+ // We don't support fee on transfer for stable pools yet
211
+ if (stable &&
212
+ (transferFees.srcFee !== 0 || transferFees.srcDexFee !== 0)) {
213
+ return null;
214
+ }
215
+ const poolIdentifier = `${this.dexKey}_${tokenAddress}` + this.poolPostfix(stable);
216
+ if (limitPools && limitPools.every(p => p !== poolIdentifier))
217
+ return null;
218
+ const isSell = side === core_1.SwapSide.SELL;
219
+ const pairParam = await this.getInfusionPairOrderedParams(from, to, blockNumber, stable, transferFees.srcDexFee);
220
+ if (!pairParam)
221
+ return null;
222
+ const unitAmount = (0, utils_1.getBigIntPow)(
223
+ // @ts-expect-error Buy side is not implemented yet
224
+ side === core_1.SwapSide.BUY ? to.decimals : from.decimals);
225
+ const [unitVolumeWithFee, ...amountsWithFee] = (0, token_transfer_fee_1.applyTransferFee)([unitAmount, ...amounts], side, isSell ? transferFees.srcFee : transferFees.destFee, isSell ? constants_1.SRC_TOKEN_PARASWAP_TRANSFERS : constants_1.DEST_TOKEN_PARASWAP_TRANSFERS);
226
+ const unit =
227
+ // @ts-expect-error Buy side is not implemented yet
228
+ side === core_1.SwapSide.BUY
229
+ ? await this.getBuyPricePath(unitVolumeWithFee, [pairParam])
230
+ : await this.getSellPricePath(unitVolumeWithFee, [pairParam]);
231
+ const prices =
232
+ // @ts-expect-error Buy side is not implemented yet
233
+ side === core_1.SwapSide.BUY
234
+ ? await Promise.all(amountsWithFee.map(amount => amount === 0n
235
+ ? 0n
236
+ : this.getBuyPricePath(amount, [pairParam])))
237
+ : await Promise.all(amountsWithFee.map(amount => amount === 0n
238
+ ? 0n
239
+ : this.getSellPricePath(amount, [pairParam])));
240
+ const [unitOutWithFee, ...outputsWithFee] = (0, token_transfer_fee_1.applyTransferFee)([unit, ...prices], side,
241
+ // This part is confusing, because we treat differently SELL and BUY fees
242
+ // If Buy, we should apply transfer fee on srcToken on top of dexFee applied earlier
243
+ // But for Sell we should apply only one dexFee
244
+ isSell ? transferFees.destDexFee : transferFees.srcFee, isSell ? this.DEST_TOKEN_DEX_TRANSFERS : constants_1.SRC_TOKEN_PARASWAP_TRANSFERS);
245
+ return {
246
+ prices: outputsWithFee,
247
+ unit: unitOutWithFee,
248
+ data: {
249
+ router: this.router,
250
+ path: [from.address.toLowerCase(), to.address.toLowerCase()],
251
+ factory: this.factoryAddress,
252
+ initCode: this.initCode,
253
+ feeFactor: this.feeFactor,
254
+ isFeeTokenInRoute: Object.values(transferFees).some(f => f !== 0),
255
+ pools: [
256
+ {
257
+ address: pairParam.exchange,
258
+ fee: parseInt(pairParam.fee),
259
+ direction: pairParam.direction,
260
+ },
261
+ ],
262
+ },
263
+ exchange: this.dexKey,
264
+ poolIdentifier,
265
+ gasCost: this.poolGasCost,
266
+ poolAddresses: [pairParam.exchange],
267
+ };
268
+ });
269
+ const resultPools = (await Promise.all(resultPromises));
270
+ const resultPoolsFiltered = resultPools.filter(item => !!item); // filter null elements
271
+ return resultPoolsFiltered.length > 0 ? resultPoolsFiltered : null;
272
+ }
273
+ catch (e) {
274
+ if (blockNumber === 0)
275
+ this.logger.error(`Error_getPricesVolume: Aurelius block manager not yet instantiated`);
276
+ this.logger.error(`Error_getPrices:`, e);
277
+ return null;
278
+ }
279
+ }
280
+ async getTopPoolsForToken(tokenAddress, count) {
281
+ if (!this.subgraphURL)
282
+ return [];
283
+ let stableFieldKey = 'isStable';
284
+ // if (this.dexKey.toLowerCase() === 'infusion') {
285
+ // stableFieldKey = 'stable';
286
+ // } else if (this.dexKey.toLowerCase() !== 'infusionv2') {
287
+ // stableFieldKey = 'isStable';
288
+ // }
289
+ const query = `query ($token: Bytes!, $count: Int) {
290
+ pools0: pairs(first: $count, orderBy: reserveUSD, orderDirection: desc, where: {token0: $token, reserve0_gt: 1, reserve1_gt: 1}) {
291
+ id
292
+ ${stableFieldKey}
293
+ token0 {
294
+ id
295
+ decimals
296
+ }
297
+ token1 {
298
+ id
299
+ decimals
300
+ }
301
+ reserveUSD
302
+ }
303
+ pools1: pairs(first: $count, orderBy: reserveUSD, orderDirection: desc, where: {token1: $token, reserve0_gt: 1, reserve1_gt: 1}) {
304
+ id
305
+ ${stableFieldKey}
306
+ token0 {
307
+ id
308
+ decimals
309
+ }
310
+ token1 {
311
+ id
312
+ decimals
313
+ }
314
+ reserveUSD
315
+ }
316
+ }`;
317
+ const { data } = await this.dexHelper.httpRequest.post(this.subgraphURL, {
318
+ query,
319
+ variables: { token: tokenAddress.toLowerCase(), count },
320
+ }, constants_1.SUBGRAPH_TIMEOUT);
321
+ if (!(data && data.pools0 && data.pools1))
322
+ throw new Error("Couldn't fetch the pools from the subgraph");
323
+ const pools0 = lodash_1.default.map(data.pools0, pool => ({
324
+ exchange: this.dexKey,
325
+ stable: pool[stableFieldKey],
326
+ address: pool.id.toLowerCase(),
327
+ connectorTokens: [
328
+ {
329
+ address: pool.token1.id.toLowerCase(),
330
+ decimals: parseInt(pool.token1.decimals),
331
+ },
332
+ ],
333
+ liquidityUSD: parseFloat(pool.reserveUSD),
334
+ }));
335
+ const pools1 = lodash_1.default.map(data.pools1, pool => ({
336
+ exchange: this.dexKey,
337
+ stable: pool[stableFieldKey],
338
+ address: pool.id.toLowerCase(),
339
+ connectorTokens: [
340
+ {
341
+ address: pool.token0.id.toLowerCase(),
342
+ decimals: parseInt(pool.token0.decimals),
343
+ },
344
+ ],
345
+ liquidityUSD: parseFloat(pool.reserveUSD),
346
+ }));
347
+ return lodash_1.default.slice(lodash_1.default.sortBy(lodash_1.default.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]), 0, count);
348
+ }
349
+ // Same as at uniswap-v2-pool.json, but extended with decimals and stable
350
+ async getInfusionPairOrderedParams(from, to, blockNumber, stable, tokenDexTransferFee) {
351
+ const pair = await this.findInfusionPair(from, to, stable);
352
+ if (!(pair && pair.pool && pair.exchange))
353
+ return null;
354
+ const pairState = pair?.pool.getState(blockNumber);
355
+ if (!pairState) {
356
+ this.logger.error(`Error_orderPairParams expected reserves, got none (maybe the pool doesn't exist) ${from.symbol || from.address} ${to.symbol || to.address}`);
357
+ return null;
358
+ }
359
+ const fee = (pairState.feeCode + tokenDexTransferFee).toString();
360
+ const pairReversed = pair.token1.address.toLowerCase() === from.address.toLowerCase();
361
+ if (pairReversed) {
362
+ return {
363
+ tokenIn: from.address,
364
+ tokenOut: to.address,
365
+ reservesIn: pairState.reserves1,
366
+ reservesOut: pairState.reserves0,
367
+ fee,
368
+ direction: false,
369
+ exchange: pair.exchange,
370
+ decimalsIn: from.decimals,
371
+ decimalsOut: to.decimals,
372
+ stable,
373
+ };
374
+ }
375
+ return {
376
+ tokenIn: from.address,
377
+ tokenOut: to.address,
378
+ reservesIn: pairState.reserves0,
379
+ reservesOut: pairState.reserves1,
380
+ fee,
381
+ direction: true,
382
+ exchange: pair.exchange,
383
+ decimalsIn: from.decimals,
384
+ decimalsOut: to.decimals,
385
+ stable,
386
+ };
387
+ }
388
+ async getPoolIdentifiers(_from, _to, side, blockNumber) {
389
+ if (side === core_1.SwapSide.BUY)
390
+ return [];
391
+ const from = this.dexHelper.config.wrapETH(_from);
392
+ const to = this.dexHelper.config.wrapETH(_to);
393
+ if (from.address.toLowerCase() === to.address.toLowerCase()) {
394
+ return [];
395
+ }
396
+ const tokenAddress = [from.address.toLowerCase(), to.address.toLowerCase()]
397
+ .sort((a, b) => (a > b ? 1 : -1))
398
+ .join('_');
399
+ const poolIdentifier = `${this.dexKey}_${tokenAddress}`;
400
+ const poolIdentifierUniswap = poolIdentifier + this.poolPostfix(false);
401
+ const poolIdentifierStable = poolIdentifier + this.poolPostfix(true);
402
+ return [poolIdentifierUniswap, poolIdentifierStable];
403
+ }
404
+ poolPostfix(stable) {
405
+ return stable ? 'S' : 'V';
406
+ }
407
+ async getSimpleParam(src, dest, srcAmount, destAmount, data, side) {
408
+ if (side === core_1.SwapSide.BUY)
409
+ throw new Error(`Buy not supported`);
410
+ let routerMethod;
411
+ let routerArgs;
412
+ const stable = (0, isStablePair_1.isStablePair)(this.network, src, dest);
413
+ const from = (0, utils_1.isETHAddress)(src)
414
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
415
+ : src;
416
+ const to = (0, utils_1.isETHAddress)(dest)
417
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
418
+ : dest;
419
+ routerMethod = (0, utils_1.isETHAddress)(src)
420
+ ? InfusionRouterFunctions.sellExactEth
421
+ : InfusionRouterFunctions.swapExactIn;
422
+ routerMethod = (0, utils_1.isETHAddress)(dest)
423
+ ? InfusionRouterFunctions.sellExactToken
424
+ : routerMethod;
425
+ routerArgs = (0, utils_1.isETHAddress)(src)
426
+ ? [
427
+ destAmount,
428
+ [{ from, to, stable }],
429
+ this.augustusAddress,
430
+ Math.floor(new Date().getTime()) + 120,
431
+ ]
432
+ : [
433
+ srcAmount,
434
+ destAmount,
435
+ [{ from, to, stable }],
436
+ this.augustusAddress,
437
+ Math.floor(new Date().getTime()) + 120,
438
+ ];
439
+ // console.log('routerMethod', routerMethod, 'routerArgs', routerArgs);
440
+ const swapData = new abi_1.Interface(InfusionRouter_json_1.default).encodeFunctionData(routerMethod, routerArgs);
441
+ return this.buildSimpleParamWithoutWETHConversion(src, srcAmount, dest, destAmount, swapData, data.router);
442
+ }
443
+ getAdapterParam(srcToken, destToken, srcAmount, toAmount, // required for buy case
444
+ data, side) {
445
+ return {
446
+ targetExchange: data.router,
447
+ payload: '',
448
+ networkFee: '0',
449
+ };
450
+ }
451
+ getDexParam(src, dest, srcAmount, destAmount, recipient, data, side) {
452
+ if (side === core_1.SwapSide.BUY)
453
+ throw new Error(`Buy not supported`);
454
+ let routerMethod;
455
+ let routerArgs;
456
+ const stable = (0, isStablePair_1.isStablePair)(this.network, src, dest);
457
+ const from = (0, utils_1.isETHAddress)(src)
458
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
459
+ : src;
460
+ const to = (0, utils_1.isETHAddress)(dest)
461
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
462
+ : dest;
463
+ routerMethod = (0, utils_1.isETHAddress)(src)
464
+ ? InfusionRouterFunctions.sellExactEth
465
+ : InfusionRouterFunctions.swapExactIn;
466
+ routerMethod = (0, utils_1.isETHAddress)(dest)
467
+ ? InfusionRouterFunctions.sellExactToken
468
+ : routerMethod;
469
+ routerArgs = (0, utils_1.isETHAddress)(src)
470
+ ? [
471
+ destAmount,
472
+ [{ from, to, stable }],
473
+ recipient,
474
+ Math.floor(new Date().getTime()) + 120,
475
+ ]
476
+ : [
477
+ srcAmount,
478
+ destAmount,
479
+ [{ from, to, stable }],
480
+ recipient,
481
+ Math.floor(new Date().getTime()) + 120,
482
+ ];
483
+ const exchangeData = new abi_1.Interface(InfusionRouter_json_1.default).encodeFunctionData(routerMethod, routerArgs);
484
+ return {
485
+ needWrapNative: this.needWrapNative,
486
+ dexFuncHasRecipient: true,
487
+ exchangeData,
488
+ targetExchange: data.router,
489
+ returnAmountPos: undefined,
490
+ };
491
+ }
492
+ getFeesMultiCallData(pair) {
493
+ const callEntry = {
494
+ target: this.factoryAddress,
495
+ callData: velodromeFactoryIface.encodeFunctionData('getFee', [
496
+ pair.stable,
497
+ ]),
498
+ };
499
+ const callDecoder = (values) => parseInt(velodromeFactoryIface
500
+ .decodeFunctionResult('getFee', values)[0]
501
+ .toString());
502
+ return {
503
+ callEntry,
504
+ callDecoder,
505
+ };
506
+ }
507
+ }
508
+ exports.Infusion = Infusion;
509
+ Infusion.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(lodash_1.default.pick(config_1.InfusionConfig, ['Infusion']));
510
+ //# sourceMappingURL=infusion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infusion.js","sourceRoot":"","sources":["../../../src/dex/infusion/infusion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { UniswapV2Data, UniswapV2PoolOrderedParams, DexParams as UniswapV2DexParams, UniswapPool } from '../uniswap-v2/types';
2
+ import { UniswapV2Pair } from '../uniswap-v2/uniswap-v2';
3
+ export declare type PoolState = {
4
+ reserves0: string;
5
+ reserves1: string;
6
+ feeCode: number;
7
+ };
8
+ export interface InfusionPoolOrderedParams extends UniswapV2PoolOrderedParams {
9
+ decimalsIn: number;
10
+ decimalsOut: number;
11
+ stable: boolean;
12
+ }
13
+ export declare type InfusionData = UniswapV2Data & {
14
+ isFeeTokenInRoute: boolean;
15
+ };
16
+ export declare type InfusionPool = UniswapPool;
17
+ export interface DexParams extends Omit<UniswapV2DexParams, 'feeCode'> {
18
+ feeCode: number;
19
+ stableFee?: number;
20
+ volatileFee?: number;
21
+ feeFactor?: number;
22
+ }
23
+ export interface InfusionPair extends UniswapV2Pair {
24
+ stable: boolean;
25
+ }
26
+ export declare type InfusionParam = SellOnInfusionParam | SellETHOnInfusionParam;
27
+ export declare type SellOnInfusionParam = [
28
+ amountIn: string,
29
+ amountOutMin: string,
30
+ routes: {
31
+ from: string;
32
+ to: string;
33
+ stable: boolean;
34
+ }[],
35
+ to: string,
36
+ deadline: number
37
+ ];
38
+ export declare type SellETHOnInfusionParam = [
39
+ amountOutMin: string,
40
+ routes: {
41
+ from: string;
42
+ to: string;
43
+ stable: boolean;
44
+ }[],
45
+ to: string,
46
+ deadline: number
47
+ ];
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/infusion/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const stablecoins: Record<number, string[]>;
2
+ export declare function isStablePair(chainId: number, tokenA: string, tokenB: string): boolean;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isStablePair = exports.stablecoins = void 0;
4
+ const constants_1 = require("../../../constants");
5
+ exports.stablecoins = {
6
+ [constants_1.Network.BASE]: [
7
+ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'.toLowerCase(),
8
+ '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'.toLowerCase(),
9
+ '0xEB466342C4d449BC9f53A865D5Cb90586f405215'.toLowerCase(), // axelar usdc
10
+ ],
11
+ };
12
+ function isStablePair(chainId, tokenA, tokenB) {
13
+ const stables = exports.stablecoins[chainId];
14
+ return (stables.includes(tokenA.toLocaleLowerCase()) &&
15
+ stables.includes(tokenB.toLocaleLowerCase()));
16
+ }
17
+ exports.isStablePair = isStablePair;
18
+ //# sourceMappingURL=isStablePair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isStablePair.js","sourceRoot":"","sources":["../../../../src/dex/infusion/utils/isStablePair.ts"],"names":[],"mappings":";;;AAAA,kDAA6C;AAEhC,QAAA,WAAW,GAA6B;IACnD,CAAC,mBAAO,CAAC,IAAI,CAAC,EAAE;QACd,4CAA4C,CAAC,WAAW,EAAE;QAC1D,4CAA4C,CAAC,WAAW,EAAE;QAC1D,4CAA4C,CAAC,WAAW,EAAE,EAAE,cAAc;KAC3E;CACF,CAAC;AAEF,SAAgB,YAAY,CAAC,OAAe,EAAE,MAAc,EAAE,MAAc;IAC1E,MAAM,OAAO,GAAG,mBAAW,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAC7C,CAAC;AACJ,CAAC;AAPD,oCAOC"}
@@ -0,0 +1,5 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap, AdapterMappings } from '../../types';
3
+ export declare const OSWAP_GAS_COST = 80000;
4
+ export declare const OSwapConfig: DexConfigMap<DexParams>;
5
+ export declare const Adapters: Record<number, AdapterMappings>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Adapters = exports.OSwapConfig = exports.OSWAP_GAS_COST = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.OSWAP_GAS_COST = 80000;
6
+ // Important:
7
+ // - All addresses should be lower case.
8
+ // - Only tokens with 18 decimals are supported.
9
+ exports.OSwapConfig = {
10
+ OSwap: {
11
+ [constants_1.Network.MAINNET]: {
12
+ pools: [
13
+ {
14
+ id: 'OSwap_0x85b78aca6deae198fbf201c82daf6ca21942acc6',
15
+ address: '0x85b78aca6deae198fbf201c82daf6ca21942acc6',
16
+ token0: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
17
+ token1: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84', // STETH
18
+ },
19
+ ],
20
+ },
21
+ },
22
+ };
23
+ exports.Adapters = {
24
+ [constants_1.Network.MAINNET]: {
25
+ // Note: We re-use the SmarDex adapters since it implements
26
+ // an Uniswap V2 router compatible interface, which OSwap supports.
27
+ [constants_1.SwapSide.SELL]: [{ name: 'Adapter04', index: 6 }],
28
+ [constants_1.SwapSide.BUY]: [{ name: 'BuyAdapter02', index: 2 }],
29
+ },
30
+ };
31
+ //# sourceMappingURL=config.js.map