@paraswap/dex-lib 2.28.7-balancer-v2-multihop.0 → 2.28.7-balancer-v2-multihop.2

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.
@@ -1,53 +1,54 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.balancerV2Merge = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
4
8
  const constants_1 = require("../../constants");
5
9
  const config_1 = require("./config");
6
10
  function balancerV2Merge(or) {
7
- const fixSwap = (rawSwap, exchange, side) => {
8
- const exchangeLower = exchange.toLowerCase();
9
- const newBalancer = {
10
- exchange,
11
- srcAmount: '0',
12
- destAmount: '0',
13
- percent: 0,
14
- poolAddresses: [],
15
- data: {
16
- swaps: new Array(),
17
- gasUSD: '0',
18
- },
19
- };
20
- let optimizedSwap = new Array();
21
- rawSwap.forEach((_s) => {
22
- if (_s.exchange.toLowerCase() === exchangeLower) {
23
- const s = _s;
24
- newBalancer.srcAmount = (BigInt(newBalancer.srcAmount) + BigInt(s.srcAmount)).toString();
25
- newBalancer.destAmount = (BigInt(newBalancer.destAmount) + BigInt(s.destAmount)).toString();
26
- newBalancer.percent += s.percent;
27
- newBalancer.data.exchangeProxy = s.data.exchangeProxy;
28
- newBalancer.data.gasUSD = (parseFloat(newBalancer.data.gasUSD) + parseFloat(s.data.gasUSD)).toFixed(6);
29
- newBalancer.data.swaps.push({
30
- poolId: s.data.poolId,
31
- amount: side === constants_1.SwapSide.SELL ? s.srcAmount : s.destAmount,
11
+ const balancerForksList = Object.keys(config_1.BalancerConfig).map(b => b.toLowerCase());
12
+ const fixSwap = (rawRate, side) => {
13
+ let lastExchange = false;
14
+ let optimizedRate = new Array();
15
+ rawRate.forEach((s) => {
16
+ if (s.swapExchanges.length !== 1 ||
17
+ !balancerForksList.includes(s.swapExchanges[0].exchange.toLowerCase())) {
18
+ lastExchange = false;
19
+ optimizedRate.push(s);
20
+ }
21
+ else if (lastExchange &&
22
+ lastExchange.swapExchanges[0].exchange.toLowerCase() ===
23
+ s.swapExchanges[0].exchange.toLowerCase() &&
24
+ lodash_1.default.last(lastExchange.swapExchanges[0].data.path).tokenOut.toLowerCase() ===
25
+ s.swapExchanges[0].data.path[0].tokenIn.toLowerCase()) {
26
+ const [lastExchangeSwap] = lastExchange.swapExchanges;
27
+ const [currentSwap] = s.swapExchanges;
28
+ lastExchangeSwap.srcAmount = (BigInt(lastExchangeSwap.srcAmount) + BigInt(currentSwap.srcAmount)).toString();
29
+ lastExchangeSwap.destAmount = (BigInt(lastExchangeSwap.destAmount) + BigInt(currentSwap.destAmount)).toString();
30
+ lastExchangeSwap.percent += currentSwap.percent;
31
+ lastExchangeSwap.data.exchangeProxy = currentSwap.data.exchangeProxy;
32
+ lastExchangeSwap.data.gasUSD = (parseFloat(lastExchangeSwap.data.gasUSD) +
33
+ parseFloat(currentSwap.data.gasUSD)).toFixed(6);
34
+ lastExchangeSwap.data.swaps.push({
35
+ poolId: currentSwap.data.poolId,
36
+ amount: side === constants_1.SwapSide.SELL
37
+ ? currentSwap.srcAmount
38
+ : currentSwap.destAmount,
32
39
  });
33
- newBalancer.poolAddresses.push(s.poolAddresses[0]);
40
+ lastExchangeSwap.poolAddresses.push(currentSwap.poolAddresses[0]);
34
41
  }
35
42
  else {
36
- optimizedSwap.push(_s);
43
+ lastExchange = lodash_1.default.cloneDeep(s);
44
+ optimizedRate.push(lastExchange);
37
45
  }
38
46
  });
39
- if (newBalancer.data.swaps.length)
40
- optimizedSwap.push(newBalancer);
41
- return optimizedSwap;
47
+ return optimizedRate;
42
48
  };
43
49
  or.bestRoute = or.bestRoute.map(r => ({
44
50
  ...r,
45
- swaps: r.swaps.map(s => {
46
- return {
47
- ...s,
48
- swapExchanges: Object.keys(config_1.BalancerConfig).reduce((acc, exchange) => fixSwap(acc, exchange, or.side), s.swapExchanges),
49
- };
50
- }),
51
+ swaps: fixSwap(r.swaps, or.side),
51
52
  }));
52
53
  return or;
53
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/dex/balancer-v2/optimizer.ts"],"names":[],"mappings":";;;AAEA,+CAA2C;AAC3C,qCAA0C;AAE1C,SAAgB,eAAe,CAAC,EAAmB;IACjD,MAAM,OAAO,GAAG,CACd,OAAmC,EACnC,QAAgB,EAChB,IAAc,EACc,EAAE;QAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,WAAW,GAA6B;YAC5C,QAAQ;YACR,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,CAAC;YACV,aAAa,EAAE,EAAE;YACjB,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,KAAK,EAAkB;gBAClC,MAAM,EAAE,GAAG;aACZ;SACF,CAAC;QACF,IAAI,aAAa,GAAG,IAAI,KAAK,EAA4B,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,CAAC,EAA4B,EAAE,EAAE;YAC/C,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,aAAa,EAAE;gBAC/C,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,WAAW,CAAC,SAAS,GAAG,CACtB,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CACpD,CAAC,QAAQ,EAAE,CAAC;gBAEb,WAAW,CAAC,UAAU,GAAG,CACvB,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CACtD,CAAC,QAAQ,EAAE,CAAC;gBAEb,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;gBACtD,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CACxB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAChE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEb,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;oBACrB,MAAM,EAAE,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;iBAC5D,CAAC,CAAC;gBACH,WAAW,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,CAAC,aAAc,CAAC,CAAC,CAAC,CAAC,CAAC;aACtD;iBAAM;gBACL,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACxB;QACH,CAAC,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,IAAK,CAAC,KAAK,CAAC,MAAM;YAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpE,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,GAAG,CAAC;QACJ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO;gBACL,GAAG,CAAC;gBACJ,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,uBAAc,CAAC,CAAC,MAAM,CAC/C,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAClD,CAAC,CAAC,aAAa,CAChB;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,CAAC;AACZ,CAAC;AA9DD,0CA8DC"}
1
+ {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/dex/balancer-v2/optimizer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "2.28.7-balancer-v2-multihop.0",
3
+ "version": "2.28.7-balancer-v2-multihop.2",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -1,68 +1,68 @@
1
- import { UnoptimizedRate, OptimalSwapExchange } from '../../types';
2
- import { BalancerSwapV2 } from './types';
1
+ import _ from 'lodash';
2
+ import { UnoptimizedRate } from '../../types';
3
3
  import { SwapSide } from '../../constants';
4
4
  import { BalancerConfig } from './config';
5
+ import { OptimalSwap } from '@paraswap/core';
5
6
 
6
7
  export function balancerV2Merge(or: UnoptimizedRate): UnoptimizedRate {
7
- const fixSwap = (
8
- rawSwap: OptimalSwapExchange<any>[],
9
- exchange: string,
10
- side: SwapSide,
11
- ): OptimalSwapExchange<any>[] => {
12
- const exchangeLower = exchange.toLowerCase();
13
- const newBalancer: OptimalSwapExchange<any> = {
14
- exchange,
15
- srcAmount: '0',
16
- destAmount: '0',
17
- percent: 0,
18
- poolAddresses: [],
19
- data: {
20
- swaps: new Array<BalancerSwapV2>(),
21
- gasUSD: '0',
22
- },
23
- };
24
- let optimizedSwap = new Array<OptimalSwapExchange<any>>();
25
- rawSwap.forEach((_s: OptimalSwapExchange<any>) => {
26
- if (_s.exchange.toLowerCase() === exchangeLower) {
27
- const s = _s;
28
- newBalancer.srcAmount = (
29
- BigInt(newBalancer.srcAmount) + BigInt(s.srcAmount)
8
+ const balancerForksList = Object.keys(BalancerConfig).map(b =>
9
+ b.toLowerCase(),
10
+ );
11
+ const fixSwap = (rawRate: OptimalSwap[], side: SwapSide): OptimalSwap[] => {
12
+ let lastExchange: false | OptimalSwap = false;
13
+ let optimizedRate = new Array<OptimalSwap>();
14
+ rawRate.forEach((s: OptimalSwap) => {
15
+ if (
16
+ s.swapExchanges.length !== 1 ||
17
+ !balancerForksList.includes(s.swapExchanges[0].exchange.toLowerCase())
18
+ ) {
19
+ lastExchange = false;
20
+ optimizedRate.push(s);
21
+ } else if (
22
+ lastExchange &&
23
+ lastExchange.swapExchanges[0].exchange.toLowerCase() ===
24
+ s.swapExchanges[0].exchange.toLowerCase() &&
25
+ _.last(
26
+ <any[]>lastExchange.swapExchanges[0].data.path,
27
+ )!.tokenOut.toLowerCase() ===
28
+ s.swapExchanges[0].data.path[0].tokenIn.toLowerCase()
29
+ ) {
30
+ const [lastExchangeSwap] = lastExchange.swapExchanges;
31
+ const [currentSwap] = s.swapExchanges;
32
+ lastExchangeSwap.srcAmount = (
33
+ BigInt(lastExchangeSwap.srcAmount) + BigInt(currentSwap.srcAmount)
30
34
  ).toString();
31
35
 
32
- newBalancer.destAmount = (
33
- BigInt(newBalancer.destAmount) + BigInt(s.destAmount)
36
+ lastExchangeSwap.destAmount = (
37
+ BigInt(lastExchangeSwap.destAmount) + BigInt(currentSwap.destAmount)
34
38
  ).toString();
35
39
 
36
- newBalancer.percent += s.percent;
37
- newBalancer.data.exchangeProxy = s.data.exchangeProxy;
38
- newBalancer.data.gasUSD = (
39
- parseFloat(newBalancer.data.gasUSD) + parseFloat(s.data.gasUSD)
40
+ lastExchangeSwap.percent += currentSwap.percent;
41
+ lastExchangeSwap.data.exchangeProxy = currentSwap.data.exchangeProxy;
42
+ lastExchangeSwap.data.gasUSD = (
43
+ parseFloat(lastExchangeSwap.data.gasUSD) +
44
+ parseFloat(currentSwap.data.gasUSD)
40
45
  ).toFixed(6);
41
46
 
42
- newBalancer.data.swaps.push({
43
- poolId: s.data.poolId,
44
- amount: side === SwapSide.SELL ? s.srcAmount : s.destAmount,
47
+ lastExchangeSwap.data.swaps.push({
48
+ poolId: currentSwap.data.poolId,
49
+ amount:
50
+ side === SwapSide.SELL
51
+ ? currentSwap.srcAmount
52
+ : currentSwap.destAmount,
45
53
  });
46
- newBalancer.poolAddresses!.push(s.poolAddresses![0]);
54
+ lastExchangeSwap.poolAddresses!.push(currentSwap.poolAddresses![0]);
47
55
  } else {
48
- optimizedSwap.push(_s);
56
+ lastExchange = _.cloneDeep(s);
57
+ optimizedRate.push(lastExchange);
49
58
  }
50
59
  });
51
- if (newBalancer.data!.swaps.length) optimizedSwap.push(newBalancer);
52
- return optimizedSwap;
60
+ return optimizedRate;
53
61
  };
54
62
 
55
63
  or.bestRoute = or.bestRoute.map(r => ({
56
64
  ...r,
57
- swaps: r.swaps.map(s => {
58
- return {
59
- ...s,
60
- swapExchanges: Object.keys(BalancerConfig).reduce(
61
- (acc, exchange) => fixSwap(acc, exchange, or.side),
62
- s.swapExchanges,
63
- ),
64
- };
65
- }),
65
+ swaps: fixSwap(r.swaps, or.side),
66
66
  }));
67
67
  return or;
68
68
  }