@paraswap/dex-lib 2.42.4-baseswap.2 → 2.42.4

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 (194) hide show
  1. package/.vscode/launch.json +16 -0
  2. package/build/dex/uniswap-v3/config.js +0 -14
  3. package/build/dex/uniswap-v3/config.js.map +1 -1
  4. package/build/test.js +26 -0
  5. package/package.json +1 -1
  6. package/src/dex/uniswap-v3/config.ts +0 -14
  7. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +0 -24
  8. package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +0 -375
  9. package/build/abi/kyberswap-elastic/IAntiSnipAttackPositionManager.json +0 -1276
  10. package/build/abi/kyberswap-elastic/IFactory.json +0 -550
  11. package/build/abi/kyberswap-elastic/IPool.json +0 -1042
  12. package/build/abi/kyberswap-elastic/IQuoterV2.json +0 -226
  13. package/build/abi/kyberswap-elastic/IRouter.json +0 -239
  14. package/build/abi/kyberswap-elastic/TicksFeesReader.json +0 -142
  15. package/build/abi/wombat/asset.json +0 -769
  16. package/build/abi/wombat/bmw.json +0 -1247
  17. package/build/abi/wombat/pool.json +0 -1364
  18. package/build/dex/baseswap-v3/baseswap-v3-factory.d.ts +0 -26
  19. package/build/dex/baseswap-v3/baseswap-v3-factory.js +0 -44
  20. package/build/dex/baseswap-v3/baseswap-v3-factory.js.map +0 -1
  21. package/build/dex/baseswap-v3/baseswap-v3-pool.d.ts +0 -46
  22. package/build/dex/baseswap-v3/baseswap-v3-pool.js +0 -312
  23. package/build/dex/baseswap-v3/baseswap-v3-pool.js.map +0 -1
  24. package/build/dex/baseswap-v3/baseswap-v3.d.ts +0 -71
  25. package/build/dex/baseswap-v3/baseswap-v3.js +0 -752
  26. package/build/dex/baseswap-v3/baseswap-v3.js.map +0 -1
  27. package/build/dex/baseswap-v3/config.d.ts +0 -9
  28. package/build/dex/baseswap-v3/config.js +0 -48
  29. package/build/dex/baseswap-v3/config.js.map +0 -1
  30. package/build/dex/baseswap-v3/constants.d.ts +0 -28
  31. package/build/dex/baseswap-v3/constants.js +0 -35
  32. package/build/dex/baseswap-v3/constants.js.map +0 -1
  33. package/build/dex/baseswap-v3/contract-math/BitMath.d.ts +0 -4
  34. package/build/dex/baseswap-v3/contract-math/BitMath.js +0 -93
  35. package/build/dex/baseswap-v3/contract-math/BitMath.js.map +0 -1
  36. package/build/dex/baseswap-v3/contract-math/FixedPoint128.d.ts +0 -3
  37. package/build/dex/baseswap-v3/contract-math/FixedPoint128.js +0 -8
  38. package/build/dex/baseswap-v3/contract-math/FixedPoint128.js.map +0 -1
  39. package/build/dex/baseswap-v3/contract-math/FixedPoint96.d.ts +0 -4
  40. package/build/dex/baseswap-v3/contract-math/FixedPoint96.js +0 -9
  41. package/build/dex/baseswap-v3/contract-math/FixedPoint96.js.map +0 -1
  42. package/build/dex/baseswap-v3/contract-math/FullMath.d.ts +0 -4
  43. package/build/dex/baseswap-v3/contract-math/FullMath.js +0 -19
  44. package/build/dex/baseswap-v3/contract-math/FullMath.js.map +0 -1
  45. package/build/dex/baseswap-v3/contract-math/LiquidityMath.d.ts +0 -3
  46. package/build/dex/baseswap-v3/contract-math/LiquidityMath.js +0 -22
  47. package/build/dex/baseswap-v3/contract-math/LiquidityMath.js.map +0 -1
  48. package/build/dex/baseswap-v3/contract-math/Oracle.d.ts +0 -10
  49. package/build/dex/baseswap-v3/contract-math/Oracle.js +0 -133
  50. package/build/dex/baseswap-v3/contract-math/Oracle.js.map +0 -1
  51. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.d.ts +0 -10
  52. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js +0 -91
  53. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js.map +0 -1
  54. package/build/dex/baseswap-v3/contract-math/SwapMath.d.ts +0 -8
  55. package/build/dex/baseswap-v3/contract-math/SwapMath.js +0 -70
  56. package/build/dex/baseswap-v3/contract-math/SwapMath.js.map +0 -1
  57. package/build/dex/baseswap-v3/contract-math/Tick.d.ts +0 -7
  58. package/build/dex/baseswap-v3/contract-math/Tick.js +0 -45
  59. package/build/dex/baseswap-v3/contract-math/Tick.js.map +0 -1
  60. package/build/dex/baseswap-v3/contract-math/TickBitMap.d.ts +0 -7
  61. package/build/dex/baseswap-v3/contract-math/TickBitMap.js +0 -84
  62. package/build/dex/baseswap-v3/contract-math/TickBitMap.js.map +0 -1
  63. package/build/dex/baseswap-v3/contract-math/TickMath.d.ts +0 -8
  64. package/build/dex/baseswap-v3/contract-math/TickMath.js +0 -162
  65. package/build/dex/baseswap-v3/contract-math/TickMath.js.map +0 -1
  66. package/build/dex/baseswap-v3/contract-math/UnsafeMath.d.ts +0 -3
  67. package/build/dex/baseswap-v3/contract-math/UnsafeMath.js +0 -10
  68. package/build/dex/baseswap-v3/contract-math/UnsafeMath.js.map +0 -1
  69. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.d.ts +0 -37
  70. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js +0 -393
  71. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js.map +0 -1
  72. package/build/dex/baseswap-v3/contract-math/utils.d.ts +0 -7
  73. package/build/dex/baseswap-v3/contract-math/utils.js +0 -42
  74. package/build/dex/baseswap-v3/contract-math/utils.js.map +0 -1
  75. package/build/dex/baseswap-v3/types.d.ts +0 -164
  76. package/build/dex/baseswap-v3/types.js +0 -9
  77. package/build/dex/baseswap-v3/types.js.map +0 -1
  78. package/build/dex/baseswap-v3/utils.d.ts +0 -6
  79. package/build/dex/baseswap-v3/utils.js +0 -65
  80. package/build/dex/baseswap-v3/utils.js.map +0 -1
  81. package/build/dex/hello/config.d.ts +0 -4
  82. package/build/dex/hello/config.js +0 -15
  83. package/build/dex/hello/config.js.map +0 -1
  84. package/build/dex/hello/hello-pool.d.ts +0 -39
  85. package/build/dex/hello/hello-pool.js +0 -64
  86. package/build/dex/hello/hello-pool.js.map +0 -1
  87. package/build/dex/hello/hello.d.ts +0 -37
  88. package/build/dex/hello/hello.js +0 -126
  89. package/build/dex/hello/hello.js.map +0 -1
  90. package/build/dex/hello/types.d.ts +0 -6
  91. package/build/dex/hello/types.js +0 -3
  92. package/build/dex/hello/types.js.map +0 -1
  93. package/build/dex/kyberswap-elastic/config.d.ts +0 -4
  94. package/build/dex/kyberswap-elastic/config.js +0 -80
  95. package/build/dex/kyberswap-elastic/config.js.map +0 -1
  96. package/build/dex/kyberswap-elastic/constants.d.ts +0 -17
  97. package/build/dex/kyberswap-elastic/constants.js +0 -42
  98. package/build/dex/kyberswap-elastic/constants.js.map +0 -1
  99. package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.d.ts +0 -4
  100. package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.js +0 -9
  101. package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.js.map +0 -1
  102. package/build/dex/kyberswap-elastic/contract-math/FullMath.d.ts +0 -5
  103. package/build/dex/kyberswap-elastic/contract-math/FullMath.js +0 -22
  104. package/build/dex/kyberswap-elastic/contract-math/FullMath.js.map +0 -1
  105. package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.d.ts +0 -3
  106. package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.js +0 -12
  107. package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.js.map +0 -1
  108. package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.d.ts +0 -3
  109. package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.js +0 -22
  110. package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.js.map +0 -1
  111. package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.d.ts +0 -5
  112. package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.js +0 -25
  113. package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.js.map +0 -1
  114. package/build/dex/kyberswap-elastic/contract-math/QuadMath.d.ts +0 -4
  115. package/build/dex/kyberswap-elastic/contract-math/QuadMath.js +0 -27
  116. package/build/dex/kyberswap-elastic/contract-math/QuadMath.js.map +0 -1
  117. package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.d.ts +0 -3
  118. package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.js +0 -14
  119. package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.js.map +0 -1
  120. package/build/dex/kyberswap-elastic/contract-math/SafeCast.d.ts +0 -8
  121. package/build/dex/kyberswap-elastic/contract-math/SafeCast.js +0 -30
  122. package/build/dex/kyberswap-elastic/contract-math/SafeCast.js.map +0 -1
  123. package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.d.ts +0 -10
  124. package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.js +0 -91
  125. package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.js.map +0 -1
  126. package/build/dex/kyberswap-elastic/contract-math/SwapMath.d.ts +0 -13
  127. package/build/dex/kyberswap-elastic/contract-math/SwapMath.js +0 -188
  128. package/build/dex/kyberswap-elastic/contract-math/SwapMath.js.map +0 -1
  129. package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.d.ts +0 -6
  130. package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.js +0 -41
  131. package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.js.map +0 -1
  132. package/build/dex/kyberswap-elastic/contract-math/TickMath.d.ts +0 -9
  133. package/build/dex/kyberswap-elastic/contract-math/TickMath.js +0 -165
  134. package/build/dex/kyberswap-elastic/contract-math/TickMath.js.map +0 -1
  135. package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.d.ts +0 -3
  136. package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.js +0 -10
  137. package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.js.map +0 -1
  138. package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.d.ts +0 -28
  139. package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.js +0 -502
  140. package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.js.map +0 -1
  141. package/build/dex/kyberswap-elastic/contract-math/utils.d.ts +0 -3
  142. package/build/dex/kyberswap-elastic/contract-math/utils.js +0 -16
  143. package/build/dex/kyberswap-elastic/contract-math/utils.js.map +0 -1
  144. package/build/dex/kyberswap-elastic/errors.d.ts +0 -2
  145. package/build/dex/kyberswap-elastic/errors.js +0 -6
  146. package/build/dex/kyberswap-elastic/errors.js.map +0 -1
  147. package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.d.ts +0 -80
  148. package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.js +0 -458
  149. package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.js.map +0 -1
  150. package/build/dex/kyberswap-elastic/kyberswap-elastic.d.ts +0 -53
  151. package/build/dex/kyberswap-elastic/kyberswap-elastic.js +0 -610
  152. package/build/dex/kyberswap-elastic/kyberswap-elastic.js.map +0 -1
  153. package/build/dex/kyberswap-elastic/types.d.ts +0 -134
  154. package/build/dex/kyberswap-elastic/types.js +0 -9
  155. package/build/dex/kyberswap-elastic/types.js.map +0 -1
  156. package/build/dex/kyberswap-elastic/utils/decoders.d.ts +0 -9
  157. package/build/dex/kyberswap-elastic/utils/decoders.js +0 -78
  158. package/build/dex/kyberswap-elastic/utils/decoders.js.map +0 -1
  159. package/build/dex/my-test-dex/config.d.ts +0 -4
  160. package/build/dex/my-test-dex/config.js +0 -15
  161. package/build/dex/my-test-dex/config.js.map +0 -1
  162. package/build/dex/my-test-dex/my-test-dex-pool.d.ts +0 -39
  163. package/build/dex/my-test-dex/my-test-dex-pool.js +0 -64
  164. package/build/dex/my-test-dex/my-test-dex-pool.js.map +0 -1
  165. package/build/dex/my-test-dex/my-test-dex.d.ts +0 -37
  166. package/build/dex/my-test-dex/my-test-dex.js +0 -126
  167. package/build/dex/my-test-dex/my-test-dex.js.map +0 -1
  168. package/build/dex/my-test-dex/types.d.ts +0 -6
  169. package/build/dex/my-test-dex/types.js +0 -3
  170. package/build/dex/my-test-dex/types.js.map +0 -1
  171. package/build/dex/solidly/forks-override/fvm.d.ts +0 -20
  172. package/build/dex/solidly/forks-override/fvm.js +0 -42
  173. package/build/dex/solidly/forks-override/fvm.js.map +0 -1
  174. package/build/dex/wombat/config.d.ts +0 -5
  175. package/build/dex/wombat/config.js +0 -36
  176. package/build/dex/wombat/config.js.map +0 -1
  177. package/build/dex/wombat/types.d.ts +0 -33
  178. package/build/dex/wombat/types.js +0 -3
  179. package/build/dex/wombat/types.js.map +0 -1
  180. package/build/dex/wombat/utils.d.ts +0 -9
  181. package/build/dex/wombat/utils.js +0 -66
  182. package/build/dex/wombat/utils.js.map +0 -1
  183. package/build/dex/wombat/wombat-bmw.d.ts +0 -40
  184. package/build/dex/wombat/wombat-bmw.js +0 -145
  185. package/build/dex/wombat/wombat-bmw.js.map +0 -1
  186. package/build/dex/wombat/wombat-pool.d.ts +0 -22
  187. package/build/dex/wombat/wombat-pool.js +0 -161
  188. package/build/dex/wombat/wombat-pool.js.map +0 -1
  189. package/build/dex/wombat/wombat-quoter.d.ts +0 -16
  190. package/build/dex/wombat/wombat-quoter.js +0 -176
  191. package/build/dex/wombat/wombat-quoter.js.map +0 -1
  192. package/build/dex/wombat/wombat.d.ts +0 -55
  193. package/build/dex/wombat/wombat.js +0 -292
  194. package/build/dex/wombat/wombat.js.map +0 -1
@@ -1,610 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.KyberswapElastic = void 0;
30
- const abi_1 = require("@ethersproject/abi");
31
- const solidity_1 = require("@ethersproject/solidity");
32
- const lodash_1 = __importDefault(require("lodash"));
33
- const types_1 = require("../../lib/tokens/types");
34
- const constants_1 = require("../../constants");
35
- const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
36
- const utils_1 = require("../../utils");
37
- const balancer_fetcher_1 = require("../../lib/tokens/balancer-fetcher");
38
- const simple_exchange_1 = require("../simple-exchange");
39
- const multi_v2_json_1 = __importDefault(require("../../abi/multi-v2.json"));
40
- const IRouter_json_1 = __importDefault(require("../../abi/kyberswap-elastic/IRouter.json"));
41
- const IQuoterV2_json_1 = __importDefault(require("../../abi/kyberswap-elastic/IQuoterV2.json"));
42
- const types_2 = require("./types");
43
- const config_1 = require("./config");
44
- const constants_2 = require("./constants");
45
- const kyberswap_elastic_pool_1 = require("./kyberswap-elastic-pool");
46
- const kyberswap_elastic_math_1 = require("./contract-math/kyberswap-elastic-math");
47
- const errors_1 = require("./errors");
48
- const CLEAN_NOT_EXISTING_POOL_TTL_MS = 60 * 60 * 24 * 1000; // 24 hours
49
- const CLEAN_NOT_EXISTING_POOL_INTERVAL_MS = 30 * 60 * 1000; // Once in 30 minutes
50
- class KyberswapElastic extends simple_exchange_1.SimpleExchange {
51
- constructor(network, dexKey, dexHelper, adapters = config_1.Adapters[network] || {}, config = config_1.KyberswapElasticConfig[dexKey][network]) {
52
- super(dexHelper, dexKey);
53
- this.network = network;
54
- this.dexKey = dexKey;
55
- this.dexHelper = dexHelper;
56
- this.adapters = adapters;
57
- this.config = config;
58
- this.eventPools = {};
59
- this.hasConstantPriceLargeAmounts = false;
60
- this.needWrapNative = true;
61
- this.isFeeOnTransferSupported = false;
62
- this.routerIface = new abi_1.Interface(IRouter_json_1.default);
63
- this.quoterIface = new abi_1.Interface(IQuoterV2_json_1.default);
64
- this.logger = dexHelper.getLogger(dexKey + '-' + network);
65
- // To receive revert reasons
66
- this.dexHelper.web3Provider.eth.handleRevert = false;
67
- // Normalise once all config addresses and use across all scenarios
68
- this.config = this._toLowerForAllConfigAddresses();
69
- this.multicall = new this.dexHelper.web3Provider.eth.Contract(multi_v2_json_1.default, this.dexHelper.config.data.multicallV2Address);
70
- this.notExistingPoolSetKey =
71
- `${constants_1.CACHE_PREFIX}_${network}_${dexKey}_not_existings_pool_set`.toLowerCase();
72
- }
73
- get supportedFees() {
74
- return this.config.supportedFees;
75
- }
76
- // Initialize pricing is called once in the start of
77
- // pricing service. It is intended to setup the integration
78
- // for pricing requests. It is optional for a DEX to
79
- // implement this function
80
- async initializePricing(blockNumber) {
81
- if (!this.dexHelper.config.isSlave) {
82
- const cleanExpiredNotExistingPoolsKeys = async () => {
83
- const maxTimestamp = Date.now() - CLEAN_NOT_EXISTING_POOL_TTL_MS;
84
- await this.dexHelper.cache.zremrangebyscore(this.notExistingPoolSetKey, 0, maxTimestamp);
85
- };
86
- this._intervalTask = setInterval(cleanExpiredNotExistingPoolsKeys.bind(this), CLEAN_NOT_EXISTING_POOL_INTERVAL_MS);
87
- }
88
- }
89
- // Returns the list of contract adapters (name and index)
90
- // for a buy/sell. Return null if there are no adapters.
91
- getAdapters(side) {
92
- return this.adapters[side] ? this.adapters[side] : null;
93
- }
94
- // Build an event based pool with all the info to create inside
95
- // a cache key name poolKey
96
- async addMasterPool(poolKey, blockNumber) {
97
- const _pairs = await this.dexHelper.cache.hget(this.dexmapKey, poolKey);
98
- if (!_pairs) {
99
- this.logger.warn(`did not find poolConfig in for key ${this.dexmapKey} ${poolKey}`);
100
- return false;
101
- }
102
- const poolInfo = JSON.parse(_pairs);
103
- const pool = await this._getPool(poolInfo.token0, poolInfo.token1, BigInt(poolInfo.swapFeeUnits), blockNumber);
104
- if (!pool) {
105
- return false;
106
- }
107
- return true;
108
- }
109
- // Returns list of pool identifiers that can be used
110
- // for a given swap. poolIdentifiers must be unique
111
- // across DEXes. It is recommended to use
112
- // ${dexKey}_${poolAddress} as a poolIdentifier
113
- async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
114
- const _srcToken = this.dexHelper.config.wrapETH(srcToken);
115
- const _destToken = this.dexHelper.config.wrapETH(destToken);
116
- const [_srcAddress, _destAddress] = this._getLoweredAddresses(_srcToken, _destToken);
117
- if (_srcAddress === _destAddress)
118
- return [];
119
- const pools = (await Promise.all(this.supportedFees.map(async (swapFeeUnits) => this._getPool(_srcAddress, _destAddress, swapFeeUnits, blockNumber)))).filter(pool => pool);
120
- if (pools.length === 0)
121
- return [];
122
- return pools.map(pool => this._getPoolIdentifier(_srcAddress, _destAddress, pool.swapFeeUnits));
123
- }
124
- // Returns pool prices for amounts.
125
- // If limitPools is defined only pools in limitPools
126
- // should be used. If limitPools is undefined then
127
- // any pools can be used.
128
- async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
129
- try {
130
- const _srcToken = this.dexHelper.config.wrapETH(srcToken);
131
- const _destToken = this.dexHelper.config.wrapETH(destToken);
132
- const [_srcAddress, _destAddress] = this._getLoweredAddresses(_srcToken, _destToken);
133
- if (_srcAddress === _destAddress)
134
- return null;
135
- let selectedPools = [];
136
- if (!limitPools) {
137
- selectedPools = (await Promise.all(this.supportedFees.map(async (swapFeeUnits) => {
138
- const locallyFoundPool = this.eventPools[this._getPoolIdentifier(_srcAddress, _destAddress, swapFeeUnits)];
139
- if (locallyFoundPool)
140
- return locallyFoundPool;
141
- const newlyFetchedPool = await this._getPool(_srcAddress, _destAddress, swapFeeUnits, blockNumber);
142
- return newlyFetchedPool;
143
- }))).filter(utils_1.isTruthy);
144
- }
145
- else {
146
- const pairIdentifierWithoutFee = this._getPoolIdentifier(_srcAddress, _destAddress, 0n).slice(0, -1);
147
- const poolIdentifiers = limitPools.filter(identifier => identifier.startsWith(pairIdentifierWithoutFee));
148
- selectedPools = (await Promise.all(poolIdentifiers.map(async (identifier) => {
149
- let locallyFoundPool = this.eventPools[identifier];
150
- if (locallyFoundPool)
151
- return locallyFoundPool;
152
- const [, srcAddress, destAddress, swapFeeUnits] = identifier.split('_');
153
- const newlyFetchedPool = await this._getPool(srcAddress, destAddress, BigInt(swapFeeUnits), blockNumber);
154
- return newlyFetchedPool;
155
- }))).filter(utils_1.isTruthy);
156
- }
157
- if (selectedPools.length === 0)
158
- return null;
159
- const poolsToUse = selectedPools.reduce((acc, pool) => {
160
- let state = pool.getState(blockNumber);
161
- if (state === null) {
162
- this.logger.trace(`${this.dexKey}: State === null. Fallback to rpc ${pool.name}`);
163
- acc.poolWithoutState.push(pool);
164
- }
165
- else {
166
- acc.poolWithState.push(pool);
167
- }
168
- return acc;
169
- }, {
170
- poolWithState: [],
171
- poolWithoutState: [],
172
- });
173
- const rpcResultsPromise = this._getPricingFromRpc(_srcToken, _destToken, amounts, side, poolsToUse.poolWithoutState);
174
- const states = poolsToUse.poolWithState.map(p => p.getState(blockNumber));
175
- const unitAmount = (0, utils_1.getBigIntPow)(side == constants_1.SwapSide.SELL ? _srcToken.decimals : _destToken.decimals);
176
- const _amounts = [...amounts.slice(1)];
177
- const [token0] = this._sortTokens(_srcAddress, _destAddress);
178
- const isToken0 = token0 === _srcAddress ? true : false;
179
- const result = await Promise.all(poolsToUse.poolWithState.map(async (pool, i) => {
180
- const state = states[i];
181
- if (state.poolData.baseL <= 0n) {
182
- this.logger.trace(`pool have 0 liquidity`);
183
- return null;
184
- }
185
- const balanceDestToken = _destAddress === pool.token0 ? state.balance0 : state.balance1;
186
- const unitResult = this._getOutputs(state, [unitAmount], isToken0, side, balanceDestToken);
187
- const pricesResult = this._getOutputs(state, _amounts, isToken0, side, balanceDestToken);
188
- if (!unitResult || !pricesResult) {
189
- this.logger.debug('Prices or unit is not calculated');
190
- return null;
191
- }
192
- const prices = [0n, ...pricesResult.outputs];
193
- const gasCost = [
194
- 0,
195
- ...pricesResult.outputs.map((p, index) => {
196
- if (p == 0n) {
197
- return 0;
198
- }
199
- else {
200
- return (constants_2.KS_ELASTIC_POOL_SEARCH_OVERHEAD +
201
- constants_2.KS_ELASTIC_TICK_BASE_OVERHEAD +
202
- pricesResult.tickCounts[index] * constants_2.KS_ELASTIC_TICK_GAS_COST);
203
- }
204
- }),
205
- ];
206
- return {
207
- unit: unitResult.outputs[0],
208
- prices,
209
- data: {
210
- path: [
211
- {
212
- tokenIn: _srcAddress,
213
- tokenOut: _destAddress,
214
- swapFeeUnits: pool.swapFeeUnits.toString(),
215
- },
216
- ],
217
- },
218
- poolIdentifier: this._getPoolIdentifier(pool.token0, pool.token1, pool.swapFeeUnits),
219
- exchange: this.dexKey,
220
- gasCost: gasCost,
221
- poolAddresses: [pool.poolAddress],
222
- };
223
- }));
224
- const rpcResults = await rpcResultsPromise;
225
- const notNullResult = result.filter(res => res !== null);
226
- if (rpcResults) {
227
- rpcResults.forEach(r => {
228
- if (r) {
229
- notNullResult.push(r);
230
- }
231
- });
232
- }
233
- return notNullResult;
234
- }
235
- catch (e) {
236
- this.logger.error(`Error_getPricesVolume ${srcToken.symbol || srcToken.address}, ${destToken.symbol || destToken.address}, ${side}:`, e);
237
- return null;
238
- }
239
- }
240
- // Returns estimated gas cost of calldata for this DEX in multiSwap
241
- getCalldataGasCost(poolPrices) {
242
- // TODO: update if there is any payload in getAdapterParam
243
- return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
244
- }
245
- // Returns a pool identifier that can be used
246
- // for a given swap. Use:
247
- // ${dexKey}_${poolAddress} as a poolIdentifier
248
- _getPoolIdentifier(srcAddress, destAddress, swapFeeUnits) {
249
- const tokenAddresses = this._sortTokens(srcAddress, destAddress).join('_');
250
- return `${this.dexKey}_${tokenAddresses}_${swapFeeUnits.toString()}`;
251
- }
252
- // Encode params required by the exchange adapter
253
- // Used for multiSwap, buy & megaSwap
254
- // Hint: abiCoder.encodeParameter() could be useful
255
- getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
256
- const { path: rawPath } = data;
257
- const path = this._encodePath(rawPath, side);
258
- const payload = this.abiCoder.encodeParameter({
259
- ParentStruct: {
260
- path: 'bytes',
261
- deadline: 'uint256',
262
- },
263
- }, {
264
- path,
265
- deadline: (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
266
- });
267
- return {
268
- targetExchange: this.config.router,
269
- payload,
270
- networkFee: '0',
271
- };
272
- }
273
- // Encode call data used by simpleSwap like routers
274
- // Used for simpleSwap & simpleBuy
275
- // Hint: this.buildSimpleParamWithoutWETHConversion
276
- // could be useful
277
- async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
278
- const swapFunction = side === constants_1.SwapSide.SELL
279
- ? types_2.KyberElasticFunctions.quoteExactInputSingle
280
- : types_2.KyberElasticFunctions.quoteExactOutputSingle;
281
- const path = this._encodePath(data.path, side);
282
- const swapFunctionParams = side === constants_1.SwapSide.SELL
283
- ? {
284
- recipient: this.augustusAddress,
285
- deadline: (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
286
- amountIn: srcAmount,
287
- amountOutMinimum: destAmount,
288
- path,
289
- }
290
- : {
291
- recipient: this.augustusAddress,
292
- deadline: (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
293
- amountOut: destAmount,
294
- amountInMaximum: srcAmount,
295
- path,
296
- };
297
- const swapData = this.routerIface.encodeFunctionData(swapFunction, [
298
- swapFunctionParams,
299
- ]);
300
- return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, this.config.router);
301
- }
302
- // Returns list of top pools based on liquidity. Max
303
- // limit number pools should be returned.
304
- async getTopPoolsForToken(tokenAddress, limit) {
305
- const _tokenAddress = tokenAddress.toLowerCase();
306
- const res = await this._querySubgraph(`query ($token: Bytes!, $count: Int) {
307
- pools0: pools(first: $count, orderBy: totalValueLockedUSD, orderDirection: desc, where: {token0: $token}) {
308
- id
309
- token0 {
310
- id
311
- decimals
312
- }
313
- token1 {
314
- id
315
- decimals
316
- }
317
- totalValueLockedUSD
318
- }
319
- pools1: pools(first: $count, orderBy: totalValueLockedUSD, orderDirection: desc, where: {token1: $token}) {
320
- id
321
- token0 {
322
- id
323
- decimals
324
- }
325
- token1 {
326
- id
327
- decimals
328
- }
329
- totalValueLockedUSD
330
- }
331
- }`, {
332
- token: _tokenAddress,
333
- count: limit,
334
- });
335
- if (!(res && res.pools0 && res.pools1)) {
336
- this.logger.error(`Error_${this.dexKey}_Subgraph: couldn't fetch the pools from the subgraph`);
337
- return [];
338
- }
339
- const pools0 = lodash_1.default.map(res.pools0, pool => ({
340
- exchange: this.dexKey,
341
- address: pool.id.toLowerCase(),
342
- connectorTokens: [
343
- {
344
- address: pool.token1.id.toLowerCase(),
345
- decimals: parseInt(pool.token1.decimals),
346
- },
347
- ],
348
- liquidityUSD: parseFloat(pool.totalValueLockedUSD) * constants_2.KS_ELASTIC_EFFICIENCY_FACTOR,
349
- }));
350
- const pools1 = lodash_1.default.map(res.pools1, pool => ({
351
- exchange: this.dexKey,
352
- address: pool.id.toLowerCase(),
353
- connectorTokens: [
354
- {
355
- address: pool.token0.id.toLowerCase(),
356
- decimals: parseInt(pool.token0.decimals),
357
- },
358
- ],
359
- liquidityUSD: parseFloat(pool.totalValueLockedUSD) * constants_2.KS_ELASTIC_EFFICIENCY_FACTOR,
360
- }));
361
- const pools = lodash_1.default.slice(lodash_1.default.sortBy(lodash_1.default.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]), 0, limit);
362
- return pools;
363
- }
364
- async _querySubgraph(query, variables, timeout = 30000) {
365
- try {
366
- const res = await this.dexHelper.httpRequest.post(this.config.subgraphURL, { query, variables }, undefined, { timeout: timeout });
367
- return res.data;
368
- }
369
- catch (e) {
370
- this.logger.error(`${this.dexKey}: can not query subgraph: `, e);
371
- return {};
372
- }
373
- }
374
- releaseResources() {
375
- if (this._intervalTask !== undefined) {
376
- clearInterval(this._intervalTask);
377
- this._intervalTask = undefined;
378
- }
379
- }
380
- _sortTokens(srcAddress, destAddress) {
381
- return [srcAddress, destAddress].sort((a, b) => (a < b ? -1 : 1));
382
- }
383
- async _getPool(srcAddress, destAddress, swapFeeUnits, blockNumber) {
384
- let pool = this.eventPools[this._getPoolIdentifier(srcAddress, destAddress, swapFeeUnits)];
385
- if (pool === undefined) {
386
- const [token0, token1] = this._sortTokens(srcAddress, destAddress);
387
- const key = `${token0}_${token1}_${swapFeeUnits}`.toLowerCase();
388
- // Check if the pool key is in the notExistingPool set,
389
- // if yes, return null without initialize a new pool instance.
390
- const notExistingPoolScore = await this.dexHelper.cache.zscore(this.notExistingPoolSetKey, key);
391
- const poolDoesNotExist = notExistingPoolScore !== null;
392
- if (poolDoesNotExist) {
393
- this.eventPools[this._getPoolIdentifier(srcAddress, destAddress, swapFeeUnits)] = null;
394
- return null;
395
- }
396
- // Store this pool
397
- await this.dexHelper.cache.hset(this.dexmapKey, key, JSON.stringify({
398
- token0,
399
- token1,
400
- swapFeeUnits: swapFeeUnits.toString(),
401
- }));
402
- this.logger.trace(`Starting to listen to new pool: ${key}`);
403
- pool = new kyberswap_elastic_pool_1.KyberswapElasticEventPool(this.dexKey, this.network, this.dexHelper, this.logger, this.config, swapFeeUnits, token0, token1);
404
- try {
405
- await pool.initialize(blockNumber, {
406
- initCallback: (state) => {
407
- // Really hacky, we need to push poolAddress so that we subscribeToLogs in StatefulEventSubscriber
408
- pool.addressesSubscribed[0] = state.pool;
409
- pool.poolAddress = state.pool;
410
- },
411
- });
412
- }
413
- catch (e) {
414
- if (e instanceof Error &&
415
- (e.message.endsWith(errors_1.ERR_POOL_DOES_NOT_EXIST) ||
416
- e.message.search(errors_1.ERR_DECODE) != -1)) {
417
- // No need to await here, we push the pool into the notExistingPool set without blocking
418
- this.dexHelper.cache.zadd(this.notExistingPoolSetKey, [Date.now(), key], 'NX');
419
- // Pool does not exist for this swapFeeUnits, so we can set it to null,
420
- // to prevent more requests for this pool
421
- pool = null;
422
- this.logger.trace(`${this.dexHelper}: Pool: srcAddress=${srcAddress}, destAddress=${destAddress}, swapFeeUnits=${swapFeeUnits} not found`, e);
423
- }
424
- else {
425
- // Unexpected Error. Break execution. Do not save the pool in this.eventPools
426
- this.logger.error(`${this.dexKey}: Can not generate pool state for srcAddress=${srcAddress}, destAddress=${destAddress}, swapFeeUnits=${swapFeeUnits} pool`, e);
427
- throw new Error('Cannot generate pool state');
428
- }
429
- }
430
- if (pool !== null) {
431
- const allEventPools = Object.values(this.eventPools);
432
- this.logger.info(`Starting to listen to new non-null pool: ${key}. Already following ${allEventPools
433
- // Not that I like this reduce, but since it is done only on initialization, expect this to be ok
434
- .reduce((acc, curr) => (curr !== null ? ++acc : acc), 0)} non-null pools or ${allEventPools.length} total pools`);
435
- }
436
- this.eventPools[this._getPoolIdentifier(srcAddress, destAddress, swapFeeUnits)] = pool;
437
- }
438
- return pool;
439
- }
440
- async _getPricingFromRpc(from, to, amounts, side, pools) {
441
- if (pools.length === 0) {
442
- return null;
443
- }
444
- this.logger.warn(`fallback to rpc for ${pools.length} pool(s)`);
445
- const requests = pools.map(pool => ({
446
- owner: pool.poolAddress,
447
- asset: side == constants_1.SwapSide.SELL ? from.address : to.address,
448
- assetType: types_1.AssetType.ERC20,
449
- ids: [
450
- {
451
- id: types_1.DEFAULT_ID_ERC20,
452
- spenders: [],
453
- },
454
- ],
455
- }), []);
456
- const balances = await (0, balancer_fetcher_1.getBalances)(this.dexHelper.multiWrapper, requests);
457
- pools = pools.filter((pool, index) => {
458
- const balance = balances[index].amounts[types_1.DEFAULT_ID_ERC20_AS_STRING];
459
- if (balance >= amounts[amounts.length - 1]) {
460
- return true;
461
- }
462
- this.logger.warn(`[${this.network}][${pool.parentName}] have no balance ${pool.poolAddress} ${from.address} ${to.address}. (Balance: ${balance})`);
463
- return false;
464
- });
465
- pools.forEach(pool => {
466
- this.logger.warn(`[${this.network}][${pool.parentName}] fallback to rpc for ${pool.name}`);
467
- });
468
- const unitVolume = (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? from : to).decimals);
469
- const chunks = amounts.length - 1;
470
- const _width = Math.floor(chunks / this.config.chunksCount);
471
- const _amounts = [unitVolume].concat(Array.from(Array(this.config.chunksCount).keys()).map(i => amounts[(i + 1) * _width]));
472
- const calldata = pools.map(pool => _amounts.map(_amount => ({
473
- target: this.config.quoter,
474
- gasLimit: constants_2.KS_ELASTIC_QUOTE_GASLIMIT,
475
- callData: side === constants_1.SwapSide.SELL
476
- ? this.quoterIface.encodeFunctionData(types_2.KyberElasticFunctions.quoteExactInputSingle, [
477
- {
478
- tokenIn: from.address,
479
- tokenOut: to.address,
480
- amountIn: _amount,
481
- feeUnits: pool.swapFeeUnits,
482
- limitSqrtP: 0n,
483
- },
484
- ])
485
- : this.quoterIface.encodeFunctionData(types_2.KyberElasticFunctions.quoteExactOutputSingle, [
486
- {
487
- tokenIn: from.address,
488
- tokenOut: to.address,
489
- amount: _amount,
490
- feeUnits: pool.swapFeeUnits,
491
- limitSqrtP: 0n,
492
- },
493
- ]),
494
- })));
495
- const data = await this.multicall.methods.multicall(calldata.flat()).call();
496
- const decode = (j) => {
497
- if (!data.returnData[j].success) {
498
- return 0n;
499
- }
500
- const decoded = abi_1.defaultAbiCoder.decode(['uint256'], data.returnData[j].returnData);
501
- return BigInt(decoded[0][1].toString());
502
- };
503
- let i = 0;
504
- const result = pools.map(pool => {
505
- const _rates = _amounts.map(() => decode(i++));
506
- const unit = _rates[0];
507
- const prices = (0, utils_1.interpolate)(_amounts.slice(1), _rates.slice(1), amounts, side);
508
- return {
509
- prices,
510
- unit,
511
- data: {
512
- path: [
513
- {
514
- tokenIn: from.address,
515
- tokenOut: to.address,
516
- swapFeeUnits: pool.swapFeeUnits.toString(),
517
- },
518
- ],
519
- },
520
- poolIdentifier: this._getPoolIdentifier(pool.token0, pool.token1, pool.swapFeeUnits),
521
- exchange: this.dexKey,
522
- gasCost: prices.map(p => (p === 0n ? 0 : constants_2.KS_ELASTIC_QUOTE_GASLIMIT)),
523
- poolAddresses: [pool.poolAddress],
524
- };
525
- });
526
- return result;
527
- }
528
- // Normalise KyberswapElasticConfig
529
- _toLowerForAllConfigAddresses() {
530
- const newConfig = {
531
- router: this.config.router.toLowerCase(),
532
- quoter: this.config.quoter.toLowerCase(),
533
- factory: this.config.factory.toLowerCase(),
534
- positionManager: this.config.positionManager.toLowerCase(),
535
- ticksFeesReader: this.config.ticksFeesReader.toLowerCase(),
536
- tokenPositionDescriptor: this.config.tokenPositionDescriptor.toLowerCase(),
537
- supportedFees: this.config.supportedFees,
538
- chunksCount: this.config.chunksCount,
539
- poolInitHash: this.config.poolInitHash,
540
- subgraphURL: this.config.subgraphURL,
541
- };
542
- return newConfig;
543
- }
544
- // Returns addresses in lower case
545
- _getLoweredAddresses(srcToken, destToken) {
546
- return [srcToken.address.toLowerCase(), destToken.address.toLowerCase()];
547
- }
548
- // Returns encoded path of a trade to call to the router contract
549
- _encodePath(path, side) {
550
- if (path.length === 0) {
551
- this.logger.error(`${this.dexKey}: Received invalid path=${path} for side=${side} to encode`);
552
- return '0x';
553
- }
554
- const { _path, types } = path.reduce(({ _path, types }, curr, index) => {
555
- if (index === 0) {
556
- return {
557
- types: ['address', 'uint24', 'address'],
558
- _path: [curr.tokenIn, curr.swapFeeUnits, curr.tokenOut],
559
- };
560
- }
561
- else {
562
- return {
563
- types: [...types, 'uint24', 'address'],
564
- _path: [..._path, curr.swapFeeUnits, curr.tokenOut],
565
- };
566
- }
567
- }, { _path: [], types: [] });
568
- return side === constants_1.SwapSide.BUY
569
- ? (0, solidity_1.pack)(types.reverse(), _path.reverse())
570
- : (0, solidity_1.pack)(types, _path);
571
- }
572
- _getOutputs(state, amounts, isToken0, side, destTokenBalance) {
573
- try {
574
- const outputsResult = kyberswap_elastic_math_1.ksElasticMath.queryOutputs(state, amounts, isToken0, side);
575
- if (side === constants_1.SwapSide.SELL) {
576
- if (outputsResult.outputs[0] > destTokenBalance) {
577
- return null;
578
- }
579
- for (let i = 0; i < outputsResult.outputs.length; i++) {
580
- if (outputsResult.outputs[i] > destTokenBalance) {
581
- outputsResult.outputs[i] = 0n;
582
- outputsResult.tickCounts[i] = 0;
583
- }
584
- }
585
- }
586
- else {
587
- if (amounts[0] > destTokenBalance) {
588
- return null;
589
- }
590
- // This may be improved by first checking outputs and requesting outputs
591
- // only for amounts that makes more sense, but I don't think this is really
592
- // important now
593
- for (let i = 0; i < amounts.length; i++) {
594
- if (amounts[i] > destTokenBalance) {
595
- outputsResult.outputs[i] = 0n;
596
- outputsResult.tickCounts[i] = 0;
597
- }
598
- }
599
- }
600
- return outputsResult;
601
- }
602
- catch (e) {
603
- this.logger.debug(`${this.dexKey}: received error in _getOutputs while calculating outputs`, e);
604
- return null;
605
- }
606
- }
607
- }
608
- exports.KyberswapElastic = KyberswapElastic;
609
- KyberswapElastic.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.KyberswapElasticConfig);
610
- //# sourceMappingURL=kyberswap-elastic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kyberswap-elastic.js","sourceRoot":"","sources":["../../../src/dex/kyberswap-elastic/kyberswap-elastic.ts"],"names":[],"mappings":"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"}