@paraswap/dex-lib 3.8.38 → 3.8.39-1701-1507-1721

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/build/abi/USDM.json +807 -0
  2. package/build/abi/bebop/BebopSettlement.abi.json +2137 -0
  3. package/build/abi/wUSDM.json +757 -0
  4. package/build/config.js +16 -9
  5. package/build/config.js.map +1 -1
  6. package/build/dex/aave-v2/aave-v2.d.ts +1 -0
  7. package/build/dex/aave-v2/aave-v2.js +1 -0
  8. package/build/dex/aave-v2/aave-v2.js.map +1 -1
  9. package/build/dex/aave-v3/aave-v3.d.ts +1 -0
  10. package/build/dex/aave-v3/aave-v3.js +1 -0
  11. package/build/dex/aave-v3/aave-v3.js.map +1 -1
  12. package/build/dex/aave-v3-stata/aave-v3-stata.d.ts +1 -0
  13. package/build/dex/aave-v3-stata/aave-v3-stata.js +1 -0
  14. package/build/dex/aave-v3-stata/aave-v3-stata.js.map +1 -1
  15. package/build/dex/bancor/bancor.d.ts +1 -0
  16. package/build/dex/bancor/bancor.js +1 -0
  17. package/build/dex/bancor/bancor.js.map +1 -1
  18. package/build/dex/bebop/bebop.d.ts +55 -0
  19. package/build/dex/bebop/bebop.js +524 -0
  20. package/build/dex/bebop/bebop.js.map +1 -0
  21. package/build/dex/bebop/config.d.ts +3 -0
  22. package/build/dex/bebop/config.js +38 -0
  23. package/build/dex/bebop/config.js.map +1 -0
  24. package/build/dex/bebop/constants.d.ts +9 -0
  25. package/build/dex/bebop/constants.js +13 -0
  26. package/build/dex/bebop/constants.js.map +1 -0
  27. package/build/dex/bebop/rate-fetcher.d.ts +22 -0
  28. package/build/dex/bebop/rate-fetcher.js +80 -0
  29. package/build/dex/bebop/rate-fetcher.js.map +1 -0
  30. package/build/dex/bebop/types.d.ts +76 -0
  31. package/build/dex/bebop/types.js +3 -0
  32. package/build/dex/bebop/types.js.map +1 -0
  33. package/build/dex/bebop/validators.d.ts +4 -0
  34. package/build/dex/bebop/validators.js +42 -0
  35. package/build/dex/bebop/validators.js.map +1 -0
  36. package/build/dex/bebop/websocket-fetcher.d.ts +35 -0
  37. package/build/dex/bebop/websocket-fetcher.js +87 -0
  38. package/build/dex/bebop/websocket-fetcher.js.map +1 -0
  39. package/build/dex/compound/compound.d.ts +1 -0
  40. package/build/dex/compound/compound.js +1 -0
  41. package/build/dex/compound/compound.js.map +1 -1
  42. package/build/dex/curve-v1/curve-v1.d.ts +1 -0
  43. package/build/dex/curve-v1/curve-v1.js +1 -0
  44. package/build/dex/curve-v1/curve-v1.js.map +1 -1
  45. package/build/dex/dodo-v1/dodo-v1.d.ts +1 -0
  46. package/build/dex/dodo-v1/dodo-v1.js +1 -0
  47. package/build/dex/dodo-v1/dodo-v1.js.map +1 -1
  48. package/build/dex/hashflow/hashflow.d.ts +6 -4
  49. package/build/dex/hashflow/hashflow.js +183 -29
  50. package/build/dex/hashflow/hashflow.js.map +1 -1
  51. package/build/dex/hashflow/types.d.ts +2 -0
  52. package/build/dex/hashflow/types.js.map +1 -1
  53. package/build/dex/idex.d.ts +8 -1
  54. package/build/dex/index.js +2 -0
  55. package/build/dex/index.js.map +1 -1
  56. package/build/dex/jarvis-v6/jarvis-v6.d.ts +1 -0
  57. package/build/dex/jarvis-v6/jarvis-v6.js +1 -0
  58. package/build/dex/jarvis-v6/jarvis-v6.js.map +1 -1
  59. package/build/dex/lido/lido.d.ts +1 -0
  60. package/build/dex/lido/lido.js +1 -0
  61. package/build/dex/lido/lido.js.map +1 -1
  62. package/build/dex/lite-psm/lite-psm.d.ts +1 -0
  63. package/build/dex/lite-psm/lite-psm.js +1 -0
  64. package/build/dex/lite-psm/lite-psm.js.map +1 -1
  65. package/build/dex/maker-psm/maker-psm.d.ts +1 -0
  66. package/build/dex/maker-psm/maker-psm.js +1 -0
  67. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  68. package/build/dex/nerve/nerve.d.ts +1 -0
  69. package/build/dex/nerve/nerve.js +1 -0
  70. package/build/dex/nerve/nerve.js.map +1 -1
  71. package/build/dex/polygon-migrator/polygon-migrator.d.ts +1 -0
  72. package/build/dex/polygon-migrator/polygon-migrator.js +1 -0
  73. package/build/dex/polygon-migrator/polygon-migrator.js.map +1 -1
  74. package/build/dex/simple-exchange.d.ts +3 -1
  75. package/build/dex/simple-exchange.js +1 -0
  76. package/build/dex/simple-exchange.js.map +1 -1
  77. package/build/dex/smoothy/smoothy.d.ts +1 -0
  78. package/build/dex/smoothy/smoothy.js +1 -0
  79. package/build/dex/smoothy/smoothy.js.map +1 -1
  80. package/build/dex/spark/config.js +8 -0
  81. package/build/dex/spark/config.js.map +1 -1
  82. package/build/dex/spark/spark.d.ts +4 -1
  83. package/build/dex/spark/spark.js +20 -15
  84. package/build/dex/spark/spark.js.map +1 -1
  85. package/build/dex/spark/types.d.ts +9 -0
  86. package/build/dex/spark/types.js +8 -1
  87. package/build/dex/spark/types.js.map +1 -1
  88. package/build/dex/stable-pool/stable-pool.d.ts +3 -2
  89. package/build/dex/stable-pool/stable-pool.js +2 -1
  90. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  91. package/build/dex/swaap-v2/swaap-v2.d.ts +5 -3
  92. package/build/dex/swaap-v2/swaap-v2.js +112 -21
  93. package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
  94. package/build/dex/swaap-v2/types.d.ts +2 -0
  95. package/build/dex/swaap-v2/types.js.map +1 -1
  96. package/build/dex/trader-joe-v2.1/base.d.ts +1 -0
  97. package/build/dex/trader-joe-v2.1/base.js +1 -0
  98. package/build/dex/trader-joe-v2.1/base.js.map +1 -1
  99. package/build/dex/weth/weth.d.ts +1 -0
  100. package/build/dex/weth/weth.js +1 -0
  101. package/build/dex/weth/weth.js.map +1 -1
  102. package/build/dex/woo-fi-v2/woo-fi-v2-pool.d.ts +2 -2
  103. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js +30 -9
  104. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js.map +1 -1
  105. package/build/dex/woo-fi-v2/woo-fi-v2.js +1 -1
  106. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -1
  107. package/build/dex/wusdm/config.d.ts +3 -0
  108. package/build/dex/wusdm/config.js +29 -0
  109. package/build/dex/wusdm/config.js.map +1 -0
  110. package/build/dex/wusdm/types.d.ts +10 -0
  111. package/build/dex/wusdm/types.js +3 -0
  112. package/build/dex/wusdm/types.js.map +1 -0
  113. package/build/dex/wusdm/wusdm.d.ts +39 -0
  114. package/build/dex/wusdm/wusdm.js +212 -0
  115. package/build/dex/wusdm/wusdm.js.map +1 -0
  116. package/build/executor/Executor01BytecodeBuilder.d.ts +3 -3
  117. package/build/executor/Executor01BytecodeBuilder.js +65 -16
  118. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  119. package/build/executor/Executor02BytecodeBuilder.d.ts +4 -4
  120. package/build/executor/Executor02BytecodeBuilder.js +65 -18
  121. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  122. package/build/executor/Executor03BytecodeBuilder.d.ts +2 -2
  123. package/build/executor/Executor03BytecodeBuilder.js +52 -8
  124. package/build/executor/Executor03BytecodeBuilder.js.map +1 -1
  125. package/build/executor/ExecutorBytecodeBuilder.d.ts +5 -4
  126. package/build/executor/ExecutorBytecodeBuilder.js +4 -4
  127. package/build/executor/ExecutorBytecodeBuilder.js.map +1 -1
  128. package/build/executor/ExecutorDetector.js +2 -1
  129. package/build/executor/ExecutorDetector.js.map +1 -1
  130. package/build/executor/types.d.ts +1 -0
  131. package/build/executor/types.js +1 -0
  132. package/build/executor/types.js.map +1 -1
  133. package/build/generic-swap-transaction-builder.d.ts +2 -0
  134. package/build/generic-swap-transaction-builder.js +49 -11
  135. package/build/generic-swap-transaction-builder.js.map +1 -1
  136. package/build/implementations/local-paraswap-sdk.js +3 -1
  137. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  138. package/build/lib/fetcher/wsFetcher.d.ts +35 -0
  139. package/build/lib/fetcher/wsFetcher.js +87 -0
  140. package/build/lib/fetcher/wsFetcher.js.map +1 -0
  141. package/build/router/simpleswap.js +51 -13
  142. package/build/router/simpleswap.js.map +1 -1
  143. package/build/types.d.ts +2 -0
  144. package/package.json +4 -2
  145. package/src/abi/bebop/BebopSettlement.abi.json +2137 -0
  146. package/src/config.ts +17 -9
  147. package/src/dex/aave-v2/aave-v2.ts +2 -0
  148. package/src/dex/aave-v3/aave-v3.ts +2 -0
  149. package/src/dex/aave-v3-stata/aave-v3-stata.ts +2 -0
  150. package/src/dex/bancor/bancor.ts +2 -0
  151. package/src/dex/bebop/bebop-e2e.test.ts +195 -0
  152. package/src/dex/bebop/bebop-integration.test.ts +170 -0
  153. package/src/dex/bebop/bebop.ts +732 -0
  154. package/src/dex/bebop/config.ts +37 -0
  155. package/src/dex/bebop/constants.ts +9 -0
  156. package/src/dex/bebop/rate-fetcher.ts +138 -0
  157. package/src/dex/bebop/types.ts +81 -0
  158. package/src/dex/bebop/validators.ts +43 -0
  159. package/src/dex/compound/compound.ts +2 -0
  160. package/src/dex/curve-v1/curve-v1.ts +2 -0
  161. package/src/dex/dodo-v1/dodo-v1.ts +2 -0
  162. package/src/dex/hashflow/hashflow-e2e.test.ts +281 -28
  163. package/src/dex/hashflow/hashflow.ts +285 -54
  164. package/src/dex/hashflow/types.ts +2 -0
  165. package/src/dex/idex.ts +18 -1
  166. package/src/dex/index.ts +2 -0
  167. package/src/dex/jarvis-v6/jarvis-v6.ts +2 -0
  168. package/src/dex/lido/lido.ts +2 -0
  169. package/src/dex/lite-psm/lite-psm.ts +2 -0
  170. package/src/dex/maker-psm/maker-psm.ts +2 -0
  171. package/src/dex/nerve/nerve.ts +2 -0
  172. package/src/dex/polygon-migrator/polygon-migrator.ts +2 -0
  173. package/src/dex/simple-exchange.ts +4 -2
  174. package/src/dex/smoothy/smoothy.ts +2 -0
  175. package/src/dex/spark/config.ts +8 -1
  176. package/src/dex/spark/spark.ts +27 -18
  177. package/src/dex/spark/types.ts +10 -0
  178. package/src/dex/stable-pool/stable-pool.ts +4 -1
  179. package/src/dex/swaap-v2/swaap-v2-e2e.test.ts +13 -13
  180. package/src/dex/swaap-v2/swaap-v2.ts +217 -32
  181. package/src/dex/swaap-v2/types.ts +2 -0
  182. package/src/dex/trader-joe-v2.1/base.ts +2 -0
  183. package/src/dex/weth/weth.ts +2 -0
  184. package/src/dex/woo-fi-v2/woo-fi-v2-pool.ts +58 -27
  185. package/src/dex/woo-fi-v2/woo-fi-v2.ts +1 -2
  186. package/src/executor/Executor01BytecodeBuilder.ts +105 -11
  187. package/src/executor/Executor02BytecodeBuilder.ts +95 -8
  188. package/src/executor/Executor03BytecodeBuilder.ts +89 -5
  189. package/src/executor/ExecutorBytecodeBuilder.ts +6 -0
  190. package/src/executor/ExecutorDetector.ts +2 -1
  191. package/src/executor/types.ts +1 -0
  192. package/src/generic-swap-transaction-builder.ts +96 -24
  193. package/src/implementations/local-paraswap-sdk.ts +21 -10
  194. package/src/lib/fetcher/wsFetcher.ts +126 -0
  195. package/src/router/simpleswap.ts +94 -18
  196. package/src/types.ts +2 -0
  197. package/tests/constants-e2e.ts +2 -2
  198. package/tests/utils-e2e.ts +308 -2
@@ -0,0 +1,524 @@
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.Bebop = void 0;
30
+ const ts_essentials_1 = require("ts-essentials");
31
+ const constants_1 = require("../../constants");
32
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
33
+ const utils_1 = require("../../utils");
34
+ const BebopSettlement_abi_json_1 = __importDefault(require("../../abi/bebop/BebopSettlement.abi.json"));
35
+ const simple_exchange_1 = require("../simple-exchange");
36
+ const config_1 = require("./config");
37
+ const utils_2 = require("ethers/lib/utils");
38
+ const rate_fetcher_1 = require("./rate-fetcher");
39
+ const constants_2 = require("./constants");
40
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
41
+ const bignumber_constants_1 = require("../../bignumber-constants");
42
+ const ethers_1 = require("ethers");
43
+ const qs_1 = __importDefault(require("qs"));
44
+ class Bebop extends simple_exchange_1.SimpleExchange {
45
+ constructor(network, dexKey, dexHelper, settlementAddress = config_1.BebopConfig['Bebop'][network]
46
+ .settlementAddress, settlementInterface = new utils_2.Interface(BebopSettlement_abi_json_1.default)) {
47
+ super(dexHelper, dexKey);
48
+ this.network = network;
49
+ this.dexKey = dexKey;
50
+ this.dexHelper = dexHelper;
51
+ this.settlementAddress = settlementAddress;
52
+ this.settlementInterface = settlementInterface;
53
+ this.hasConstantPriceLargeAmounts = false;
54
+ this.needWrapNative = false;
55
+ this.isFeeOnTransferSupported = false;
56
+ this.tokensMap = {};
57
+ this.logger = dexHelper.getLogger(dexKey);
58
+ this.tokensCacheKey = `tokens`;
59
+ this.pricesCacheKey = `prices`;
60
+ this.tokensAddrCacheKey = `tokens_addr`;
61
+ const token = this.dexHelper.config.data.bebopAuthToken;
62
+ if (!token) {
63
+ throw new Error('Bebop auth token is not set');
64
+ }
65
+ this.bebopAuthToken = token;
66
+ this.rateFetcher = new rate_fetcher_1.RateFetcher(this.dexHelper, this.dexKey, this.network, this.logger, {
67
+ rateConfig: {
68
+ tokensIntervalMs: constants_2.BEBOP_TOKENS_POLLING_INTERVAL_MS,
69
+ pricesCacheKey: this.pricesCacheKey,
70
+ pricesCacheTTLSecs: constants_2.BEBOP_PRICES_CACHE_TTL,
71
+ tokensCacheKey: this.tokensCacheKey,
72
+ tokensAddrCacheKey: this.tokensAddrCacheKey,
73
+ tokensCacheTTLSecs: constants_2.BEBOP_TOKENS_CACHE_TTL,
74
+ tokensReqParams: {
75
+ url: constants_2.BEBOP_API_URL +
76
+ `/pmm/${config_1.BebopConfig['Bebop'][network].chainName}/v3/token-info`,
77
+ },
78
+ pricesReqParams: {
79
+ url: constants_2.BEBOP_WS_API_URL +
80
+ `/pmm/${config_1.BebopConfig['Bebop'][network].chainName}/v3/pricing`,
81
+ headers: {
82
+ name: constants_2.BEBOP_AUTH_NAME,
83
+ authorization: this.bebopAuthToken,
84
+ },
85
+ },
86
+ },
87
+ });
88
+ }
89
+ async initializePricing(blockNumber) {
90
+ if (!this.dexHelper.config.isSlave) {
91
+ this.rateFetcher.start();
92
+ await sleep(constants_2.BEBOP_INIT_TIMEOUT_MS);
93
+ }
94
+ }
95
+ // Returns the list of contract adapters (name and index)
96
+ // for a buy/sell. Return null if there are no adapters.
97
+ getAdapters(side) {
98
+ return null;
99
+ }
100
+ getPoolIdentifier(base, quote) {
101
+ const identifier = `${this.dexKey}_${base.toLowerCase()}_${quote.toLowerCase()}`;
102
+ return identifier;
103
+ }
104
+ invertLevels(levels) {
105
+ return levels.map(([price, size]) => [1 / price, size * price]);
106
+ }
107
+ invertBook(book) {
108
+ return {
109
+ bids: this.invertLevels(book.asks),
110
+ asks: this.invertLevels(book.bids),
111
+ last_update_ts: book.last_update_ts,
112
+ };
113
+ }
114
+ // considers only swapside.sell
115
+ async calculateInstructions(srcToken, destToken, side) {
116
+ const prices = await this.getCachedPrices();
117
+ if (!prices) {
118
+ throw new Error('No prices available');
119
+ }
120
+ const directBook = prices[`${srcToken.address.toLowerCase()}/${destToken.address.toLowerCase()}`];
121
+ if (directBook) {
122
+ return [
123
+ {
124
+ pair: `${srcToken.address.toLowerCase()}/${destToken.address.toLowerCase()}`,
125
+ side,
126
+ book: directBook,
127
+ targetQuote: side == constants_1.SwapSide.BUY,
128
+ },
129
+ ];
130
+ }
131
+ const inverseBook = prices[`${destToken.address.toLowerCase()}/${srcToken.address.toLowerCase()}`];
132
+ if (inverseBook) {
133
+ const invertedBook = this.invertBook(inverseBook);
134
+ return [
135
+ {
136
+ pair: `${srcToken.address.toLowerCase()}/${destToken.address.toLowerCase()}`,
137
+ side,
138
+ book: invertedBook,
139
+ targetQuote: side == constants_1.SwapSide.BUY,
140
+ },
141
+ ];
142
+ }
143
+ for (const middleToken of config_1.BebopConfig['Bebop'][this.network].middleTokens) {
144
+ const baseMiddle = prices[`${srcToken.address.toLowerCase()}/${middleToken.toLowerCase()}`];
145
+ const quoteMiddle = prices[`${destToken.address.toLowerCase()}/${middleToken.toLowerCase()}`];
146
+ if (baseMiddle && quoteMiddle) {
147
+ if (side == constants_1.SwapSide.SELL) {
148
+ return [
149
+ {
150
+ pair: `${srcToken.address.toLowerCase()}/${middleToken.toLowerCase()}`,
151
+ side: side,
152
+ book: baseMiddle,
153
+ targetQuote: false,
154
+ },
155
+ {
156
+ pair: `${middleToken.toLowerCase()}/${destToken.address.toLowerCase()}`,
157
+ side: side,
158
+ book: this.invertBook(quoteMiddle),
159
+ targetQuote: false,
160
+ },
161
+ ];
162
+ }
163
+ else {
164
+ return [
165
+ {
166
+ pair: `${middleToken.toLowerCase()}/${destToken.address.toLowerCase()}`,
167
+ side: side,
168
+ book: this.invertBook(quoteMiddle),
169
+ targetQuote: true,
170
+ },
171
+ {
172
+ pair: `${srcToken.address.toLowerCase()}/${middleToken.toLowerCase()}`,
173
+ side: side,
174
+ book: baseMiddle,
175
+ targetQuote: true,
176
+ },
177
+ ];
178
+ }
179
+ }
180
+ }
181
+ return [];
182
+ }
183
+ // Returns list of pool identifiers that can be used
184
+ // for a given swap. poolIdentifiers must be unique
185
+ // across DEXes. It is recommended to use
186
+ // ${dexKey}_${poolAddress} as a poolIdentifier
187
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
188
+ if ((await this.calculateInstructions(srcToken, destToken, side)).length > 0) {
189
+ const identifier = this.getPoolIdentifier(srcToken.address, destToken.address);
190
+ return [identifier];
191
+ }
192
+ return [];
193
+ }
194
+ runInstruction(instruction, amount) {
195
+ let accumulated = (0, bignumber_js_1.default)(0);
196
+ let output = (0, bignumber_js_1.default)(0);
197
+ let filled = false;
198
+ for (const level of instruction.book.bids) {
199
+ const [price, size] = level;
200
+ const amountToAccumulate = instruction.targetQuote
201
+ ? (0, bignumber_js_1.default)(size).times(price)
202
+ : (0, bignumber_js_1.default)(size);
203
+ const afterAccumulated = accumulated.plus(amountToAccumulate);
204
+ if (afterAccumulated.lt(amount)) {
205
+ accumulated = accumulated.plus(amountToAccumulate);
206
+ const amountToAddToOutput = instruction.targetQuote
207
+ ? (0, bignumber_js_1.default)(size)
208
+ : (0, bignumber_js_1.default)(size).times(price);
209
+ output = output.plus(amountToAddToOutput);
210
+ if (accumulated.eq(amount)) {
211
+ filled = true;
212
+ break;
213
+ }
214
+ }
215
+ else {
216
+ const remaining = amount.minus(accumulated);
217
+ output = output.plus(instruction.targetQuote
218
+ ? remaining.div(price)
219
+ : remaining.times(price));
220
+ filled = true;
221
+ break;
222
+ }
223
+ }
224
+ if (filled) {
225
+ return output;
226
+ }
227
+ else {
228
+ return (0, bignumber_js_1.default)(0);
229
+ }
230
+ }
231
+ calculateOutput(instructions, srcToken, destToken, amounts, side) {
232
+ const outputs = [];
233
+ const inputDecimals = side == constants_1.SwapSide.SELL ? srcToken.decimals : destToken.decimals;
234
+ const outputDecimals = side == constants_1.SwapSide.SELL ? destToken.decimals : srcToken.decimals;
235
+ for (const amount of amounts) {
236
+ if (amount == 0n) {
237
+ outputs.push(0n);
238
+ continue;
239
+ }
240
+ const amountDecimals = (0, bignumber_js_1.default)(amount.toString()).div((0, bignumber_constants_1.getBigNumberPow)(inputDecimals));
241
+ let output = (0, bignumber_js_1.default)(0);
242
+ for (const instruction of instructions) {
243
+ output = this.runInstruction(instruction, output.gt(0) ? output : amountDecimals);
244
+ if (output.eq(0)) {
245
+ outputs.push(0n); // No liquidity at this size
246
+ continue;
247
+ }
248
+ }
249
+ if (output.gt(0)) {
250
+ outputs.push(BigInt(output.times((0, bignumber_constants_1.getBigNumberPow)(outputDecimals)).toFixed(0)));
251
+ }
252
+ }
253
+ return outputs;
254
+ }
255
+ // Returns pool prices for amounts.
256
+ // If limitPools is defined only pools in limitPools
257
+ // should be used. If limitPools is undefined then
258
+ // any pools can be used.
259
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
260
+ this.tokensMap = (await this.getCachedTokens()) || {};
261
+ try {
262
+ const pools = limitPools ??
263
+ (await this.getPoolIdentifiers(srcToken, destToken, side, blockNumber));
264
+ if (pools.length === 0) {
265
+ return null;
266
+ }
267
+ const instructions = await this.calculateInstructions(srcToken, destToken, side);
268
+ if (!instructions) {
269
+ return null;
270
+ }
271
+ const outputs = this.calculateOutput(instructions, srcToken, destToken, amounts, side);
272
+ // Up to 3bps deviation is expected in the output compared to the on-chain result
273
+ // On SwapSide.Sell, outputs compared to quoting are coming out: -0.1 bips -> USDC, -1 bips Alt -> Alt.
274
+ // On SwapSide.Buy, outputs compared to quoteing are coming out: 0.1 bips -> USDC, 1-3 bips Alt -> Alt.
275
+ const outDecimals = constants_1.SwapSide.SELL
276
+ ? destToken.decimals
277
+ : srcToken.decimals;
278
+ return [
279
+ {
280
+ prices: outputs,
281
+ unit: BigInt(outDecimals),
282
+ data: {},
283
+ poolIdentifier: pools[0],
284
+ exchange: this.dexKey,
285
+ gasCost: constants_2.BEBOP_GAS_COST,
286
+ poolAddresses: [this.settlementAddress],
287
+ },
288
+ ];
289
+ }
290
+ catch (e) {
291
+ this.logger.error(`Error_getPricesVolume ${srcToken.address || srcToken.symbol}, ${destToken.address || destToken.symbol}, ${side}:`, e);
292
+ return null;
293
+ }
294
+ }
295
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
296
+ getCalldataGasCost(poolPrices) {
297
+ // This relies heavily on exact quote. Can we note use Bebop Data to find this? either via pools or the data itself?
298
+ // This assumes that a single maker was used to fill this trade
299
+ // "order":{
300
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
301
+ // "expiry":"1725541751"
302
+ CALLDATA_GAS_COST.TIMESTAMP +
303
+ // "taker_address":"0x9008d19f58aabd9ed0d60971565aa8510560ab41"
304
+ CALLDATA_GAS_COST.ADDRESS +
305
+ // "maker_address":"0x807cf9a772d5a3f9cefbc1192e939d62f0d9bd38"
306
+ CALLDATA_GAS_COST.ADDRESS +
307
+ // "maker_nonce":"1725541661402362944"
308
+ CALLDATA_GAS_COST.UUID +
309
+ // "taker_token":"0x3429d03c6f7521aec737a0bbf2e5ddcef2c3ae31"
310
+ CALLDATA_GAS_COST.ADDRESS +
311
+ // "maker_token":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
312
+ CALLDATA_GAS_COST.ADDRESS +
313
+ // "taker_amount":"3789033775358849793876"
314
+ CALLDATA_GAS_COST.AMOUNT +
315
+ // "maker_amount":"199726023273987970"
316
+ CALLDATA_GAS_COST.AMOUNT +
317
+ // "receiver":"0x9008d19f58aabd9ed0d60971565aa8510560ab41"
318
+ CALLDATA_GAS_COST.ADDRESS +
319
+ // "packed_commands":"0"
320
+ CALLDATA_GAS_COST.wordNonZeroBytes(4) +
321
+ // "flags":"103712057072216206793253728668500811363805133225332165859664901734817333248000"
322
+ CALLDATA_GAS_COST.FULL_WORD +
323
+ // }
324
+ // "makerSignature":{
325
+ // "signatureBytes":"0x34e1fbda1d48296949f0a003d4194646ed750a4ccd408b52979f60c2e7332207190a91600a40396b25fd645422dde85bc0ff53f26b66202a985ac8b9da87b47e1c"
326
+ CALLDATA_GAS_COST.FULL_WORD +
327
+ // "flags":"1"
328
+ CALLDATA_GAS_COST.LENGTH_SMALL +
329
+ // }
330
+ // "filledTakerAmount":"0"
331
+ CALLDATA_GAS_COST.AMOUNT);
332
+ }
333
+ // Encode params required by the exchange adapter
334
+ // V5: Used for multiSwap, buy & megaSwap
335
+ // V6: Not used, can be left blank
336
+ // Hint: abiCoder.encodeParameter() could be useful
337
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
338
+ const { tx } = data;
339
+ if (!tx) {
340
+ throw new Error('No tx in data');
341
+ }
342
+ // Encode here the payload for adapter
343
+ const payload = tx.data;
344
+ return {
345
+ targetExchange: this.settlementAddress,
346
+ payload,
347
+ networkFee: '0',
348
+ };
349
+ }
350
+ // This is called once before getTopPoolsForToken is
351
+ // called for multiple tokens. This can be helpful to
352
+ // update common state required for calculating
353
+ // getTopPoolsForToken. It is optional for a DEX
354
+ // to implement this
355
+ async updatePoolState() {
356
+ const tokens = await this.getCachedTokens();
357
+ if (tokens) {
358
+ this.tokensMap = tokens;
359
+ }
360
+ }
361
+ getMaxLiquidity(levels) {
362
+ return levels.reduce((acc, [price, size]) => {
363
+ return acc + price * size;
364
+ }, 0);
365
+ }
366
+ // Returns list of top pools based on liquidity. Max
367
+ // limit number pools should be returned.
368
+ async getTopPoolsForToken(tokenAddress, limit) {
369
+ const prices = await this.getCachedPrices();
370
+ if (!prices) {
371
+ return [];
372
+ }
373
+ const pools = [];
374
+ for (const [pair, pairData] of Object.entries(prices)) {
375
+ let liquidityUSD = 0;
376
+ let token;
377
+ const [base, quote] = pair.split('/');
378
+ if (base.toLowerCase() == tokenAddress.toLowerCase()) {
379
+ const liquidityInQuote = this.getMaxLiquidity(pairData.bids);
380
+ token = {
381
+ address: quote,
382
+ decimals: this.tokensMap[quote.toLowerCase()].decimals,
383
+ };
384
+ const quoteTokenUsd = await this.dexHelper.getTokenUSDPrice(token, BigInt(Math.round(liquidityInQuote)));
385
+ liquidityUSD = liquidityInQuote * quoteTokenUsd;
386
+ }
387
+ else if (quote.toLowerCase() == tokenAddress.toLowerCase()) {
388
+ const liquidityInBase = this.getMaxLiquidity(pairData.asks);
389
+ token = {
390
+ address: base,
391
+ decimals: this.tokensMap[base.toLowerCase()].decimals,
392
+ };
393
+ const baseTokenUsd = await this.dexHelper.getTokenUSDPrice(token, BigInt(Math.round(liquidityInBase)));
394
+ liquidityUSD = liquidityInBase * baseTokenUsd;
395
+ }
396
+ if (liquidityUSD) {
397
+ pools.push({
398
+ exchange: this.dexKey,
399
+ address: this.settlementAddress,
400
+ connectorTokens: [
401
+ {
402
+ address: quote,
403
+ decimals: this.tokensMap[quote.toLowerCase()].decimals,
404
+ symbol: this.tokensMap[quote.toLowerCase()].ticker,
405
+ },
406
+ ],
407
+ liquidityUSD,
408
+ });
409
+ }
410
+ }
411
+ return pools
412
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
413
+ .slice(0, limit);
414
+ }
415
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
416
+ const { tx } = data;
417
+ (0, ts_essentials_1.assert)(tx !== undefined, `${this.dexKey}-${this.network}: tx undefined`);
418
+ return {
419
+ exchangeData: tx.data,
420
+ needWrapNative: this.needWrapNative,
421
+ dexFuncHasRecipient: false,
422
+ targetExchange: this.settlementAddress,
423
+ returnAmountPos: undefined,
424
+ };
425
+ }
426
+ async preProcessTransaction(optimalSwapExchange, srcToken, destToken, side, options) {
427
+ const isSell = side === constants_1.SwapSide.SELL;
428
+ const isBuy = side === constants_1.SwapSide.BUY;
429
+ const params = {
430
+ sell_tokens: ethers_1.utils.getAddress(srcToken.address),
431
+ buy_tokens: ethers_1.utils.getAddress(destToken.address),
432
+ sell_amounts: isSell ? optimalSwapExchange.srcAmount : undefined,
433
+ buy_amounts: isBuy ? optimalSwapExchange.destAmount : undefined,
434
+ taker_address: ethers_1.utils.getAddress(options.executionContractAddress),
435
+ receiver_address: ethers_1.utils.getAddress(options.executionContractAddress),
436
+ gasless: false,
437
+ skip_validation: true,
438
+ source: constants_2.BEBOP_AUTH_NAME,
439
+ };
440
+ try {
441
+ const response = await this.dexHelper.httpRequest.get(`${constants_2.BEBOP_API_URL}/pmm/${config_1.BebopConfig['Bebop'][this.network].chainName}/v3/quote?${qs_1.default.stringify(params)}`, constants_2.BEBOP_QUOTE_TIMEOUT_MS, {
442
+ 'source-auth': this.bebopAuthToken,
443
+ });
444
+ if (!response) {
445
+ throw new Error('Failed to get quote');
446
+ }
447
+ if (!response.tx ||
448
+ !response.buyTokens ||
449
+ !response.sellTokens ||
450
+ !response.expiry) {
451
+ throw new Error('Failed to get quote. No tx info');
452
+ }
453
+ if (side == constants_1.SwapSide.SELL) {
454
+ const requiredAmount = BigInt(optimalSwapExchange.destAmount);
455
+ const quoteAmount = BigInt(response.buyTokens[ethers_1.utils.getAddress(destToken.address)].amount);
456
+ const requiredAmountWithSlippage = new bignumber_js_1.default(requiredAmount.toString())
457
+ .times(options.slippageFactor)
458
+ .toFixed(0);
459
+ if (quoteAmount < BigInt(requiredAmountWithSlippage)) {
460
+ throw new Error(`Slipped, factor: ${quoteAmount.toString()} < ${requiredAmountWithSlippage}`);
461
+ }
462
+ }
463
+ else {
464
+ const requiredAmount = BigInt(optimalSwapExchange.srcAmount);
465
+ const quoteAmount = BigInt(response.sellTokens[ethers_1.utils.getAddress(srcToken.address)].amount);
466
+ const requiredAmountWithSlippage = new bignumber_js_1.default(requiredAmount.toString())
467
+ .times(options.slippageFactor)
468
+ .toFixed(0);
469
+ if (quoteAmount > BigInt(requiredAmountWithSlippage)) {
470
+ throw new Error(`Slipped, factor: ${options.slippageFactor} ${quoteAmount.toString()} > ${requiredAmountWithSlippage}`);
471
+ }
472
+ }
473
+ return [
474
+ {
475
+ ...optimalSwapExchange,
476
+ data: {
477
+ ...response,
478
+ },
479
+ },
480
+ { deadline: BigInt(response.expiry) },
481
+ ];
482
+ }
483
+ catch (e) {
484
+ const message = `${this.dexKey}-${this.network}: ${e}`;
485
+ this.logger.error(message);
486
+ throw new Error(message);
487
+ }
488
+ }
489
+ async getCachedPrices() {
490
+ const cachedPrices = await this.dexHelper.cache.get(this.dexKey, this.network, this.pricesCacheKey);
491
+ if (cachedPrices) {
492
+ return JSON.parse(cachedPrices);
493
+ }
494
+ return null;
495
+ }
496
+ async getCachedTokens() {
497
+ const cachedTokens = await this.dexHelper.cache.get(this.dexKey, this.network, this.tokensAddrCacheKey);
498
+ if (cachedTokens) {
499
+ return JSON.parse(cachedTokens);
500
+ }
501
+ return null;
502
+ }
503
+ getTokenFromAddress(address) {
504
+ const bebopToken = this.tokensMap[address.toLowerCase()];
505
+ return {
506
+ address,
507
+ decimals: bebopToken.decimals,
508
+ symbol: bebopToken.ticker,
509
+ };
510
+ }
511
+ // This is optional function in case if your implementation has acquired any resources
512
+ // you need to release for graceful shutdown. For example, it may be any interval timer
513
+ releaseResources() {
514
+ if (!this.dexHelper.config.isSlave) {
515
+ this.rateFetcher.stop();
516
+ }
517
+ }
518
+ }
519
+ exports.Bebop = Bebop;
520
+ Bebop.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.BebopConfig);
521
+ const sleep = (time) => new Promise(resolve => {
522
+ setTimeout(resolve, time);
523
+ });
524
+ //# sourceMappingURL=bebop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bebop.js","sourceRoot":"","sources":["../../../src/dex/bebop/bebop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ export declare const BebopConfig: DexConfigMap<DexParams>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BebopConfig = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.BebopConfig = {
6
+ Bebop: {
7
+ [constants_1.Network.MAINNET]: {
8
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
9
+ chainName: 'ethereum',
10
+ middleTokens: [
11
+ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
12
+ '0xdAC17F958D2ee523a2206206994597C13D831ec7',
13
+ '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
14
+ ],
15
+ },
16
+ [constants_1.Network.ARBITRUM]: {
17
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
18
+ chainName: 'arbitrum',
19
+ middleTokens: [
20
+ '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',
21
+ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
22
+ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',
23
+ '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', // WETH
24
+ ],
25
+ },
26
+ [constants_1.Network.BASE]: {
27
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
28
+ chainName: 'base',
29
+ middleTokens: ['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'],
30
+ },
31
+ [constants_1.Network.OPTIMISM]: {
32
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
33
+ chainName: 'optimism',
34
+ middleTokens: ['0x7F5c764cBc14f9669B88837ca1490cCa17c31607'],
35
+ },
36
+ },
37
+ };
38
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/bebop/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE7B,QAAA,WAAW,GAA4B;IAClD,KAAK,EAAE;QACL,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE;gBACZ,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C,EAAE,OAAO;aACtD;SACF;QACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;YAClB,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE;gBACZ,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C,EAAE,OAAO;aACtD;SACF;QACD,CAAC,mBAAO,CAAC,IAAI,CAAC,EAAE;YACd,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,MAAM;YACjB,YAAY,EAAE,CAAC,4CAA4C,CAAC;SAC7D;QACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;YAClB,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE,CAAC,4CAA4C,CAAC;SAC7D;KACF;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const BEBOP_INIT_TIMEOUT_MS = 5000;
2
+ export declare const BEBOP_PRICES_CACHE_TTL = 10;
3
+ export declare const BEBOP_TOKENS_CACHE_TTL = 60;
4
+ export declare const BEBOP_TOKENS_POLLING_INTERVAL_MS: number;
5
+ export declare const BEBOP_API_URL = "https://api.bebop.xyz";
6
+ export declare const BEBOP_WS_API_URL = "wss://api.bebop.xyz";
7
+ export declare const BEBOP_GAS_COST = 120000;
8
+ export declare const BEBOP_AUTH_NAME = "paraswap";
9
+ export declare const BEBOP_QUOTE_TIMEOUT_MS = 2000;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BEBOP_QUOTE_TIMEOUT_MS = exports.BEBOP_AUTH_NAME = exports.BEBOP_GAS_COST = exports.BEBOP_WS_API_URL = exports.BEBOP_API_URL = exports.BEBOP_TOKENS_POLLING_INTERVAL_MS = exports.BEBOP_TOKENS_CACHE_TTL = exports.BEBOP_PRICES_CACHE_TTL = exports.BEBOP_INIT_TIMEOUT_MS = void 0;
4
+ exports.BEBOP_INIT_TIMEOUT_MS = 5000;
5
+ exports.BEBOP_PRICES_CACHE_TTL = 10;
6
+ exports.BEBOP_TOKENS_CACHE_TTL = 60;
7
+ exports.BEBOP_TOKENS_POLLING_INTERVAL_MS = 30 * 1000;
8
+ exports.BEBOP_API_URL = 'https://api.bebop.xyz';
9
+ exports.BEBOP_WS_API_URL = 'wss://api.bebop.xyz';
10
+ exports.BEBOP_GAS_COST = 120000;
11
+ exports.BEBOP_AUTH_NAME = 'paraswap';
12
+ exports.BEBOP_QUOTE_TIMEOUT_MS = 2000;
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/bebop/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAC7B,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,QAAA,aAAa,GAAG,uBAAuB,CAAC;AACxC,QAAA,gBAAgB,GAAG,qBAAqB,CAAC;AACzC,QAAA,cAAc,GAAG,MAAO,CAAC;AACzB,QAAA,eAAe,GAAG,UAAU,CAAC;AAC7B,QAAA,sBAAsB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Network } from '../../constants';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { Logger } from '../../types';
4
+ import { BebopRateFetcherConfig } from './types';
5
+ export declare class RateFetcher {
6
+ private dexHelper;
7
+ private dexKey;
8
+ private network;
9
+ private logger;
10
+ private pricesFetcher;
11
+ private pricesCacheKey;
12
+ private pricesCacheTTL;
13
+ private tokensFetcher;
14
+ private tokensAddrCacheKey;
15
+ private tokensCacheKey;
16
+ private tokensCacheTTL;
17
+ constructor(dexHelper: IDexHelper, dexKey: string, network: Network, logger: Logger, config: BebopRateFetcherConfig);
18
+ start(): void;
19
+ stop(): void;
20
+ private handleTokensResponse;
21
+ private handlePricesResponse;
22
+ }