@paraswap/dex-lib 3.11.0 → 3.11.1

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 (41) hide show
  1. package/build/dex/algebra/algebra-pool-v1_1.js +5 -5
  2. package/build/dex/algebra/algebra-pool-v1_1.js.map +1 -1
  3. package/build/dex/algebra/lib/AlgebraMath.js +4 -4
  4. package/build/dex/algebra/lib/AlgebraMath.js.map +1 -1
  5. package/build/dex/balancer-v3/abi/balancerBatchRouter.d.ts +729 -0
  6. package/build/dex/balancer-v3/abi/balancerBatchRouter.js +732 -0
  7. package/build/dex/balancer-v3/abi/balancerBatchRouter.js.map +1 -0
  8. package/build/dex/balancer-v3/abi/balancerRouter.d.ts +1406 -0
  9. package/build/dex/balancer-v3/abi/balancerRouter.js +1175 -0
  10. package/build/dex/balancer-v3/abi/balancerRouter.js.map +1 -0
  11. package/build/dex/balancer-v3/abi/vaultExtension.V3.d.ts +2081 -0
  12. package/build/dex/balancer-v3/abi/vaultExtension.V3.js +1851 -0
  13. package/build/dex/balancer-v3/abi/vaultExtension.V3.js.map +1 -0
  14. package/build/dex/balancer-v3/balancer-v3-pool.d.ts +76 -0
  15. package/build/dex/balancer-v3/balancer-v3-pool.js +383 -0
  16. package/build/dex/balancer-v3/balancer-v3-pool.js.map +1 -0
  17. package/build/dex/balancer-v3/balancer-v3.d.ts +57 -0
  18. package/build/dex/balancer-v3/balancer-v3.js +373 -0
  19. package/build/dex/balancer-v3/balancer-v3.js.map +1 -0
  20. package/build/dex/balancer-v3/config.d.ts +8 -0
  21. package/build/dex/balancer-v3/config.js +24 -0
  22. package/build/dex/balancer-v3/config.js.map +1 -0
  23. package/build/dex/balancer-v3/getOnChainState.d.ts +10 -0
  24. package/build/dex/balancer-v3/getOnChainState.js +158 -0
  25. package/build/dex/balancer-v3/getOnChainState.js.map +1 -0
  26. package/build/dex/balancer-v3/getPoolsApi.d.ts +2 -0
  27. package/build/dex/balancer-v3/getPoolsApi.js +81 -0
  28. package/build/dex/balancer-v3/getPoolsApi.js.map +1 -0
  29. package/build/dex/balancer-v3/getTopPoolsApi.d.ts +13 -0
  30. package/build/dex/balancer-v3/getTopPoolsApi.js +62 -0
  31. package/build/dex/balancer-v3/getTopPoolsApi.js.map +1 -0
  32. package/build/dex/balancer-v3/types.d.ts +63 -0
  33. package/build/dex/balancer-v3/types.js +3 -0
  34. package/build/dex/balancer-v3/types.js.map +1 -0
  35. package/build/dex/bebop/bebop.json +72 -0
  36. package/build/dex/fluid-dex/fluid-dex.js +1 -1
  37. package/build/dex/fluid-dex/fluid-dex.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/dex/algebra/algebra-pool-v1_1.ts +5 -5
  40. package/src/dex/algebra/lib/AlgebraMath.ts +5 -5
  41. package/src/dex/fluid-dex/fluid-dex.ts +0 -1
@@ -0,0 +1,373 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.BalancerV3 = void 0;
27
+ const constants_1 = require("../../constants");
28
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
29
+ const utils_1 = require("../../utils");
30
+ const simple_exchange_1 = require("../simple-exchange");
31
+ const config_1 = require("./config");
32
+ const balancer_v3_pool_1 = require("./balancer-v3-pool");
33
+ const balancer_maths_1 = require("@balancer-labs/balancer-maths");
34
+ const abi_1 = require("@ethersproject/abi");
35
+ const balancerRouter_1 = require("./abi/balancerRouter");
36
+ const utils_2 = require("../../executor/utils");
37
+ const getTopPoolsApi_1 = require("./getTopPoolsApi");
38
+ const balancerBatchRouter_1 = require("./abi/balancerBatchRouter");
39
+ const MAX_UINT256 = '115792089237316195423570985008687907853269984665640564039457584007913129639935';
40
+ const POOL_UPDATE_TTL = 5 * 60; // 5mins
41
+ const RATE_UPDATE_TTL = 30 * 60; // 30mins
42
+ class BalancerV3 extends simple_exchange_1.SimpleExchange {
43
+ constructor(network, dexKey, dexHelper) {
44
+ super(dexHelper, dexKey);
45
+ this.network = network;
46
+ this.dexKey = dexKey;
47
+ this.dexHelper = dexHelper;
48
+ this.hasConstantPriceLargeAmounts = false;
49
+ // TODO: vault can handle native
50
+ this.needWrapNative = true;
51
+ this.isFeeOnTransferSupported = false;
52
+ this.logger = dexHelper.getLogger(dexKey);
53
+ this.eventPools = new balancer_v3_pool_1.BalancerV3EventPool(dexKey, network, dexHelper, this.logger);
54
+ this.balancerRouter = new abi_1.Interface(balancerRouter_1.balancerRouterAbi);
55
+ this.balancerBatchRouter = new abi_1.Interface(balancerBatchRouter_1.balancerBatchRouterAbi);
56
+ }
57
+ // Initialize pricing is called once in the start of
58
+ // pricing service. It is intended to setup the integration
59
+ // for pricing requests. It is optional for a DEX to
60
+ // implement this function
61
+ async initializePricing(blockNumber) {
62
+ await this.eventPools.initialize(blockNumber);
63
+ // This will periodically query API and add any new pools to pool state
64
+ if (!this.updateNewPoolsTimer) {
65
+ this.updateNewPoolsTimer = setInterval(async () => {
66
+ try {
67
+ await this.updatePoolState();
68
+ }
69
+ catch (e) {
70
+ this.logger.error(`${this.dexKey}: Failed to update pool state:`, e);
71
+ }
72
+ }, POOL_UPDATE_TTL * 1000);
73
+ }
74
+ // This will periodically refresh tokenRates with onchain state
75
+ if (!this.updateRatesTimer) {
76
+ this.updateRatesTimer = setInterval(async () => {
77
+ try {
78
+ await this.updateStatePoolRates();
79
+ }
80
+ catch (e) {
81
+ this.logger.error(`${this.dexKey}: Failed to update pool rates:`, e);
82
+ }
83
+ }, RATE_UPDATE_TTL * 1000);
84
+ }
85
+ }
86
+ getAdapters(side) {
87
+ return null;
88
+ }
89
+ // Returns list of pool identifiers that can be used
90
+ // for a given swap. poolIdentifiers must be unique
91
+ // across DEXes. It is recommended to use
92
+ // ${dexKey}_${poolAddress} as a poolIdentifier
93
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
94
+ const _from = this.dexHelper.config.wrapETH(srcToken);
95
+ const _to = this.dexHelper.config.wrapETH(destToken);
96
+ const poolState = this.eventPools.getState(blockNumber);
97
+ if (poolState === null)
98
+ return [];
99
+ return this.findPoolAddressesWithTokens(poolState, _from.address, _to.address);
100
+ }
101
+ findPoolAddressesWithTokens(pools, tokenA, tokenB) {
102
+ return Object.entries(pools)
103
+ .filter(([, poolState]) => {
104
+ return this.hasTokens(poolState, [tokenA, tokenB]);
105
+ })
106
+ .map(([address]) => address);
107
+ }
108
+ /**
109
+ * Filter pools that have tokens from/to and are in limitPool list
110
+ * @param pools
111
+ * @param from
112
+ * @param to
113
+ * @param limitPools
114
+ * @returns Array of PoolState
115
+ */
116
+ filterPools(pools, from, to, limitPools) {
117
+ return Object.entries(pools)
118
+ .filter(([address, poolState]) => {
119
+ const hasRequiredTokens = this.hasTokens(poolState, [from, to]);
120
+ const isAllowedPool = !limitPools || limitPools.includes(address);
121
+ return hasRequiredTokens && isAllowedPool;
122
+ })
123
+ .map(([_, poolState]) => poolState);
124
+ }
125
+ hasTokens(pool, tokens) {
126
+ return tokens.every(token => pool.tokens.includes(token) || pool.tokensUnderlying.includes(token));
127
+ }
128
+ // Returns pool prices for amounts.
129
+ // If limitPools is defined only pools in limitPools
130
+ // should be used. If limitPools is undefined then
131
+ // any pools can be used.
132
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
133
+ try {
134
+ const _from = this.dexHelper.config.wrapETH(srcToken);
135
+ const _to = this.dexHelper.config.wrapETH(destToken);
136
+ if (_from.address === _to.address) {
137
+ return null;
138
+ }
139
+ // get up to date pools and state
140
+ const allPoolState = this.eventPools.getState(blockNumber);
141
+ if (allPoolState === null) {
142
+ this.logger.error(`getState returned null`);
143
+ return null;
144
+ }
145
+ // filter for pools with tokens and to only use limit pools
146
+ const allowedPools = this.filterPools(allPoolState, _from.address, _to.address, limitPools);
147
+ if (!allowedPools.length)
148
+ return null;
149
+ const swapKind = side === constants_1.SwapSide.SELL ? balancer_maths_1.SwapKind.GivenIn : balancer_maths_1.SwapKind.GivenOut;
150
+ const tokenIn = _from.address;
151
+ const tokenOut = _to.address;
152
+ // Gets the single unit amount based off token decimals, e.g. for USDC its 1e6
153
+ const unitAmount = (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? _from : _to).decimals);
154
+ const poolPrices = [];
155
+ // For each pool we calculate swap result using balancer maths
156
+ for (let i = 0; i < allowedPools.length; i++) {
157
+ const pool = {
158
+ ...allowedPools[i],
159
+ };
160
+ const tokenInInfo = this.eventPools.getTokenInfo(pool, tokenIn);
161
+ const tokenOutInfo = this.eventPools.getTokenInfo(pool, tokenOut);
162
+ if (!tokenInInfo || !tokenOutInfo) {
163
+ continue;
164
+ }
165
+ const steps = this.eventPools.getSteps(pool, tokenInInfo, tokenOutInfo);
166
+ try {
167
+ // This is the max amount the pool can swap
168
+ const maxSwapAmount = this.eventPools.getMaxSwapAmount(pool, tokenInInfo, tokenOutInfo, swapKind);
169
+ let unit = 0n;
170
+ if (unitAmount < maxSwapAmount)
171
+ unit = this.eventPools.getSwapResult(steps, unitAmount, swapKind);
172
+ const poolExchangePrice = {
173
+ prices: new Array(amounts.length).fill(0n),
174
+ unit,
175
+ data: {
176
+ steps: steps,
177
+ },
178
+ exchange: this.dexKey,
179
+ gasCost: 1,
180
+ poolAddresses: [pool.address],
181
+ poolIdentifier: `${this.dexKey}_${pool.address}`,
182
+ };
183
+ for (let j = 0; j < amounts.length; j++) {
184
+ if (amounts[j] < maxSwapAmount) {
185
+ // Uses balancer maths to calculate swap
186
+ poolExchangePrice.prices[j] = this.eventPools.getSwapResult(steps, amounts[j], swapKind);
187
+ }
188
+ }
189
+ poolPrices.push(poolExchangePrice);
190
+ }
191
+ catch (err) {
192
+ this.logger.error(`error fetching prices for pool`);
193
+ this.logger.error(err);
194
+ }
195
+ }
196
+ return poolPrices;
197
+ }
198
+ catch (err) { }
199
+ return null;
200
+ }
201
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
202
+ getCalldataGasCost(poolPrices) {
203
+ // TODO: update if there is any payload in getAdapterParam
204
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
205
+ }
206
+ // Not used for V6
207
+ getAdapterParam() {
208
+ return {
209
+ targetExchange: '0x',
210
+ payload: '0x',
211
+ networkFee: '0',
212
+ };
213
+ }
214
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
215
+ if (side === constants_1.SwapSide.SELL) {
216
+ return this.getExactInParam(srcToken, destToken, srcAmount, data);
217
+ }
218
+ else {
219
+ return this.getExactOutParam(srcToken, destToken, destAmount, data);
220
+ }
221
+ }
222
+ getExactInParam(srcToken, destToken, srcAmount, data) {
223
+ if (data.steps.length === 1) {
224
+ const exchangeData = this.balancerRouter.encodeFunctionData('swapSingleTokenExactIn', [
225
+ data.steps[0].pool,
226
+ srcToken,
227
+ destToken,
228
+ srcAmount,
229
+ '0',
230
+ MAX_UINT256,
231
+ this.needWrapNative,
232
+ '0x',
233
+ ]);
234
+ return {
235
+ needWrapNative: this.needWrapNative,
236
+ dexFuncHasRecipient: false,
237
+ exchangeData,
238
+ // This router handles single swaps
239
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerRouterAddress,
240
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.balancerRouter, 'swapSingleTokenExactIn'),
241
+ };
242
+ }
243
+ else {
244
+ // for each step:
245
+ // if tokenIn == pool router uses removeLiquidity SINGLE_TOKEN_EXACT_IN
246
+ // if tokenOut == pool router uses addLiquidity UNBALANCED
247
+ const exchangeData = this.balancerBatchRouter.encodeFunctionResult('swapExactIn', [
248
+ [
249
+ {
250
+ tokenIn: srcToken,
251
+ steps: data.steps.map(step => ({
252
+ pool: step.pool,
253
+ tokenOut: step.tokenOut,
254
+ isBuffer: step.isBuffer,
255
+ })),
256
+ exactAmountIn: srcAmount,
257
+ minAmountOut: '0', // This should be limit for min amount out. Assume this is set elsewhere via Paraswap contract.
258
+ },
259
+ ],
260
+ MAX_UINT256,
261
+ this.needWrapNative,
262
+ '0x',
263
+ ]);
264
+ return {
265
+ needWrapNative: this.needWrapNative,
266
+ dexFuncHasRecipient: false,
267
+ exchangeData,
268
+ // This router handles single swaps
269
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerBatchRouterAddress,
270
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.balancerBatchRouter, 'swapExactIn'),
271
+ };
272
+ }
273
+ }
274
+ getExactOutParam(srcToken, destToken, destAmount, data) {
275
+ if (data.steps.length === 1) {
276
+ const exchangeData = this.balancerRouter.encodeFunctionData('swapSingleTokenExactOut', [
277
+ data.steps[0].pool,
278
+ srcToken,
279
+ destToken,
280
+ destAmount,
281
+ MAX_UINT256,
282
+ MAX_UINT256,
283
+ this.needWrapNative,
284
+ '0x',
285
+ ]);
286
+ return {
287
+ needWrapNative: this.needWrapNative,
288
+ dexFuncHasRecipient: false,
289
+ exchangeData,
290
+ // Single swaps are submitted via Balancer Router
291
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerRouterAddress,
292
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.balancerRouter, 'swapSingleTokenExactOut'),
293
+ };
294
+ }
295
+ else {
296
+ // for each step:
297
+ // if tokenIn == pool use removeLiquidity SINGLE_TOKEN_EXACT_OUT
298
+ // if tokenOut == pool use addLiquidity SINGLE_TOKEN_EXACT_OUT
299
+ const exchangeData = this.balancerBatchRouter.encodeFunctionResult('swapExactOut', [
300
+ [
301
+ {
302
+ tokenIn: srcToken,
303
+ steps: data.steps.map(step => ({
304
+ pool: step.pool,
305
+ tokenOut: step.tokenOut,
306
+ isBuffer: step.isBuffer,
307
+ })),
308
+ exactAmountOut: destAmount,
309
+ maxAmountIn: MAX_UINT256, // This should be limit for min amount out. Assume this is set elsewhere via Paraswap contract.
310
+ },
311
+ ],
312
+ MAX_UINT256,
313
+ this.needWrapNative,
314
+ '0x',
315
+ ]);
316
+ return {
317
+ needWrapNative: this.needWrapNative,
318
+ dexFuncHasRecipient: false,
319
+ exchangeData,
320
+ // This router handles single swaps
321
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerBatchRouterAddress,
322
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.balancerBatchRouter, 'swapExactIn'),
323
+ };
324
+ }
325
+ }
326
+ /**
327
+ * Uses multicall to get onchain token rate for each pool then updates pool state
328
+ */
329
+ async updateStatePoolRates() {
330
+ await this.eventPools.updateStatePoolRates();
331
+ }
332
+ // This is called once before getTopPoolsForToken is
333
+ // called for multiple tokens. This can be helpful to
334
+ // update common state required for calculating
335
+ // getTopPoolsForToken. It is optional for a DEX
336
+ // to implement this
337
+ async updatePoolState() {
338
+ await this.eventPools.updateStatePools();
339
+ }
340
+ // Returns list of top pools based on liquidity. Max
341
+ // limit number pools should be returned.
342
+ async getTopPoolsForToken(tokenAddress, count) {
343
+ const poolsWithToken = Object.entries(this.eventPools.getStaleState() || {})
344
+ .filter(([, poolState]) => {
345
+ return this.hasTokens(poolState, [tokenAddress]);
346
+ })
347
+ .map(([address]) => address);
348
+ const topPools = await (0, getTopPoolsApi_1.getTopPoolsApi)(this.network, poolsWithToken, count);
349
+ return topPools.map(pool => {
350
+ return {
351
+ exchange: this.dexKey,
352
+ address: pool.address,
353
+ liquidityUSD: parseFloat(pool.dynamicData.totalLiquidity),
354
+ connectorTokens: pool.poolTokens.filter(t => t.address !== tokenAddress),
355
+ };
356
+ });
357
+ }
358
+ releaseResources() {
359
+ if (this.updateNewPoolsTimer) {
360
+ clearInterval(this.updateNewPoolsTimer);
361
+ this.updateNewPoolsTimer = undefined;
362
+ this.logger.info(`${this.dexKey}: cleared updateNewPoolsTimer before shutting down`);
363
+ }
364
+ if (this.updateRatesTimer) {
365
+ clearInterval(this.updateRatesTimer);
366
+ this.updateRatesTimer = undefined;
367
+ this.logger.info(`${this.dexKey}: cleared updateRatesTimer before shutting down`);
368
+ }
369
+ }
370
+ }
371
+ exports.BalancerV3 = BalancerV3;
372
+ BalancerV3.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.BalancerV3Config);
373
+ //# sourceMappingURL=balancer-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balancer-v3.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/balancer-v3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ export declare enum SUPPORTED_POOLS {
4
+ WEIGHTED = "WEIGHTED",
5
+ STABLE = "STABLE"
6
+ }
7
+ export declare const apiUrl = "https://test-api-v3.balancer.fi/";
8
+ export declare const BalancerV3Config: DexConfigMap<DexParams>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BalancerV3Config = exports.apiUrl = exports.SUPPORTED_POOLS = void 0;
4
+ const constants_1 = require("../../constants");
5
+ // These map to the Balancer API poolType. Only Balancer supported pools will be added
6
+ var SUPPORTED_POOLS;
7
+ (function (SUPPORTED_POOLS) {
8
+ SUPPORTED_POOLS["WEIGHTED"] = "WEIGHTED";
9
+ SUPPORTED_POOLS["STABLE"] = "STABLE";
10
+ })(SUPPORTED_POOLS = exports.SUPPORTED_POOLS || (exports.SUPPORTED_POOLS = {}));
11
+ // Balancer API - aggregatorSpecific query serves all useful static pool data
12
+ exports.apiUrl = 'https://test-api-v3.balancer.fi/';
13
+ // TODO Full config added after V3 release
14
+ exports.BalancerV3Config = {
15
+ BalancerV3: {
16
+ [constants_1.Network.SEPOLIA]: {
17
+ vaultAddress: '0x30AF3689547354f82C70256894B07C9D0f067BB6',
18
+ apiNetworkName: 'SEPOLIA',
19
+ balancerRouterAddress: '0x77eDc69766409C599F06Ef0B551a0990CBfe13A7',
20
+ balancerBatchRouterAddress: '0x16Cf31c5c4f92ad6185D583080C84FEeb6074c78',
21
+ },
22
+ },
23
+ };
24
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/config.ts"],"names":[],"mappings":";;;AAEA,+CAAoD;AAEpD,sFAAsF;AACtF,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B;AAED,6EAA6E;AAChE,QAAA,MAAM,GAAG,kCAAkC,CAAC;AAEzD,0CAA0C;AAC7B,QAAA,gBAAgB,GAA4B;IACvD,UAAU,EAAE;QACV,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,YAAY,EAAE,4CAA4C;YAC1D,cAAc,EAAE,SAAS;YACzB,qBAAqB,EAAE,4CAA4C;YACnE,0BAA0B,EAAE,4CAA4C;SACzE;KACF;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ImmutablePoolStateMap, PoolStateMap } from './types';
2
+ import { Interface, Result } from '@ethersproject/abi';
3
+ import { IDexHelper } from '../../dex-helper';
4
+ export declare function decodeThrowError(contractInterface: Interface, functionName: string, resultEntry: {
5
+ success: boolean;
6
+ returnData: any;
7
+ }, poolAddress: string): Result;
8
+ export declare function getOnChainState(network: number, immutablePoolStateMap: ImmutablePoolStateMap, dexHelper: IDexHelper, interfaces: {
9
+ [name: string]: Interface;
10
+ }, blockNumber?: number): Promise<PoolStateMap>;
@@ -0,0 +1,158 @@
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.getOnChainState = exports.decodeThrowError = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const config_1 = require("./config");
9
+ // Encoding & Decoding for onchain calls to fetch mutable pool data
10
+ // Each supported pool type should have its own specific calls if needed
11
+ const poolOnChain = {
12
+ ['COMMON']: {
13
+ count: 6,
14
+ ['encode']: (network, contractInterface, address) => {
15
+ return [
16
+ {
17
+ target: config_1.BalancerV3Config.BalancerV3[network].vaultAddress,
18
+ callData: contractInterface.encodeFunctionData('getPoolTokenRates', [
19
+ address,
20
+ ]),
21
+ },
22
+ {
23
+ target: config_1.BalancerV3Config.BalancerV3[network].vaultAddress,
24
+ callData: contractInterface.encodeFunctionData('getCurrentLiveBalances', [address]),
25
+ },
26
+ {
27
+ target: config_1.BalancerV3Config.BalancerV3[network].vaultAddress,
28
+ callData: contractInterface.encodeFunctionData('getPoolConfig', [
29
+ address,
30
+ ]),
31
+ },
32
+ {
33
+ target: config_1.BalancerV3Config.BalancerV3[network].vaultAddress,
34
+ callData: contractInterface.encodeFunctionData('totalSupply', [
35
+ address,
36
+ ]),
37
+ },
38
+ {
39
+ target: config_1.BalancerV3Config.BalancerV3[network].vaultAddress,
40
+ callData: contractInterface.encodeFunctionData('isPoolPaused', [
41
+ address,
42
+ ]),
43
+ },
44
+ {
45
+ target: config_1.BalancerV3Config.BalancerV3[network].vaultAddress,
46
+ callData: contractInterface.encodeFunctionData('getHooksConfig', [
47
+ address,
48
+ ]),
49
+ },
50
+ ];
51
+ },
52
+ ['decode']: (contractInterface, poolAddress, data, startIndex) => {
53
+ const resultTokenRates = decodeThrowError(contractInterface, 'getPoolTokenRates', data[startIndex++], poolAddress);
54
+ if (!resultTokenRates)
55
+ throw new Error(`Failed to get result for getPoolTokenRates for ${poolAddress}`);
56
+ const resultLiveBalances = decodeThrowError(contractInterface, 'getCurrentLiveBalances', data[startIndex++], poolAddress);
57
+ if (!resultLiveBalances)
58
+ throw new Error(`Failed to get result for getCurrentLiveBalances for ${poolAddress}`);
59
+ const resultGetPoolConfig = decodeThrowError(contractInterface, 'getPoolConfig', data[startIndex++], poolAddress);
60
+ if (!resultGetPoolConfig)
61
+ throw new Error(`Failed to get result for getPoolConfig for ${poolAddress}`);
62
+ const resultTotalSupply = decodeThrowError(contractInterface, 'totalSupply', data[startIndex++], poolAddress);
63
+ if (!resultTotalSupply)
64
+ throw new Error(`Failed to get result for totalSupply for ${poolAddress}`);
65
+ const resultIsPoolPaused = decodeThrowError(contractInterface, 'isPoolPaused', data[startIndex++], poolAddress);
66
+ if (!resultIsPoolPaused)
67
+ throw new Error(`Failed to get result for isPoolPaused for ${poolAddress}`);
68
+ const resultHooksConfig = decodeThrowError(contractInterface, 'getHooksConfig', data[startIndex++], poolAddress);
69
+ if (!resultHooksConfig)
70
+ throw new Error(`Failed to get result for resultHooksConfig for ${poolAddress}`);
71
+ return {
72
+ tokenRates: resultTokenRates.tokenRates.map((r) => BigInt(r)),
73
+ balancesLiveScaled18: resultLiveBalances.balancesLiveScaled18.map((b) => BigInt(b)),
74
+ swapFee: BigInt(resultGetPoolConfig[0].staticSwapFeePercentage),
75
+ aggregateSwapFee: BigInt(resultGetPoolConfig[0].aggregateSwapFeePercentage),
76
+ totalSupply: BigInt(resultTotalSupply[0]),
77
+ scalingFactors: resultTokenRates.decimalScalingFactors.map((r) => BigInt(r)),
78
+ isPoolPaused: resultIsPoolPaused[0],
79
+ hasHook: resultHooksConfig[0].hooksContract !==
80
+ '0x0000000000000000000000000000000000000000',
81
+ };
82
+ },
83
+ },
84
+ ['WEIGHTED']: {
85
+ count: 0,
86
+ ['encode']: (network, contractInterface, address) => {
87
+ return [];
88
+ },
89
+ ['decode']: (contractInterface, poolAddress, data, startIndex) => {
90
+ return {};
91
+ },
92
+ },
93
+ ['STABLE']: {
94
+ count: 1,
95
+ ['encode']: (network, contractInterface, address) => {
96
+ return [
97
+ {
98
+ target: address,
99
+ callData: contractInterface.encodeFunctionData('getAmplificationParameter'),
100
+ },
101
+ ];
102
+ },
103
+ ['decode']: (contractInterface, poolAddress, data, startIndex) => {
104
+ const resultAmp = decodeThrowError(contractInterface, 'getAmplificationParameter', data[startIndex++], poolAddress);
105
+ if (!resultAmp)
106
+ throw new Error(`Failed to get result for getAmplificationParameter for ${poolAddress}`);
107
+ // TODO requested SC to add view to stable pool to get amp update state if it is currently updating
108
+ return {
109
+ amp: resultAmp[0].toBigInt(),
110
+ ampIsUpdating: !!resultAmp[1],
111
+ ampStartTime: 0n,
112
+ ampStopTime: 0n,
113
+ ampStartValue: 0n,
114
+ ampEndValue: 0n,
115
+ };
116
+ },
117
+ },
118
+ };
119
+ function decodeThrowError(contractInterface, functionName, resultEntry, poolAddress) {
120
+ if (!resultEntry.success)
121
+ throw new Error(`Failed to execute ${functionName} for ${poolAddress}`);
122
+ return contractInterface.decodeFunctionResult(functionName, resultEntry.returnData);
123
+ }
124
+ exports.decodeThrowError = decodeThrowError;
125
+ // Any data from API will be immutable. Mutable data such as balances, etc will be fetched via onchain/event state.
126
+ async function getOnChainState(network, immutablePoolStateMap, dexHelper, interfaces, blockNumber) {
127
+ const multiCallData = Object.entries(immutablePoolStateMap)
128
+ .map(([address, pool]) => {
129
+ return [
130
+ ...poolOnChain['COMMON'].encode(network, interfaces['VAULT'], address),
131
+ ...poolOnChain[pool.poolType].encode(network, interfaces[pool.poolType], address),
132
+ ];
133
+ })
134
+ .flat();
135
+ // 500 is an arbitrary number chosen based on the blockGasLimit
136
+ const slicedMultiCallData = lodash_1.default.chunk(multiCallData, 500);
137
+ const multicallData = (await Promise.all(slicedMultiCallData.map(async (_multiCallData) => dexHelper.multiContract.methods
138
+ .tryAggregate(false, _multiCallData)
139
+ .call({}, blockNumber)))).flat();
140
+ let i = 0;
141
+ const poolStateMap = Object.fromEntries(Object.entries(immutablePoolStateMap).map(([address, pool]) => {
142
+ const commonMutableData = poolOnChain['COMMON'].decode(interfaces['VAULT'], address, multicallData, i);
143
+ i = i + poolOnChain['COMMON'].count;
144
+ const poolMutableData = poolOnChain[pool.poolType].decode(interfaces[pool.poolType], address, multicallData, i);
145
+ i = i + poolOnChain[pool.poolType].count;
146
+ return [
147
+ address,
148
+ {
149
+ ...pool,
150
+ ...commonMutableData,
151
+ ...poolMutableData,
152
+ },
153
+ ];
154
+ }));
155
+ return poolStateMap;
156
+ }
157
+ exports.getOnChainState = getOnChainState;
158
+ //# sourceMappingURL=getOnChainState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOnChainState.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getOnChainState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { ImmutablePoolStateMap } from './types';
2
+ export declare function getPoolsApi(network: number, timestamp?: number): Promise<ImmutablePoolStateMap>;