@paraswap/dex-lib 2.33.3 → 2.33.4-balancer-v2-multihop.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.
@@ -1,2 +1,3 @@
1
1
  import { UnoptimizedRate } from '../../types';
2
+ export declare const AllBalancerV2Forks: string[];
2
3
  export declare function balancerV2Merge(or: UnoptimizedRate): UnoptimizedRate;
@@ -1,18 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.balancerV2Merge = void 0;
3
+ exports.balancerV2Merge = exports.AllBalancerV2Forks = void 0;
4
4
  const constants_1 = require("../../constants");
5
5
  const config_1 = require("./config");
6
- const MAX_UINT256 = '115792089237316195423570985008687907853269984665640564039457584007913129639935';
7
- const AllBalancerV2Forks = Object.keys(config_1.BalancerConfig);
6
+ exports.AllBalancerV2Forks = Object.keys(config_1.BalancerConfig);
8
7
  function balancerV2Merge(or) {
9
- const fixSwap = (rawSwap, side) => {
10
- const newBalancers = {};
8
+ const fixSwap = (rawSwap, accumulatedBalancers, side) => {
11
9
  let optimizedSwap = new Array();
10
+ const newBalancers = {};
12
11
  rawSwap.forEach((s) => {
13
12
  const exchangeKey = s.exchange.toLowerCase();
14
- if (AllBalancerV2Forks.some(d => d.toLowerCase() === exchangeKey)) {
15
- if (!(exchangeKey in newBalancers)) {
13
+ if (exports.AllBalancerV2Forks.some(d => d.toLowerCase() === exchangeKey)) {
14
+ if (!(exchangeKey in accumulatedBalancers)) {
16
15
  newBalancers[exchangeKey] = {
17
16
  exchange: s.exchange,
18
17
  srcAmount: '0',
@@ -24,18 +23,22 @@ function balancerV2Merge(or) {
24
23
  gasUSD: '0',
25
24
  },
26
25
  };
26
+ accumulatedBalancers[exchangeKey] = newBalancers[exchangeKey];
27
27
  }
28
- newBalancers[exchangeKey].srcAmount = (BigInt(newBalancers[exchangeKey].srcAmount) + BigInt(s.srcAmount)).toString();
29
- newBalancers[exchangeKey].destAmount = (BigInt(newBalancers[exchangeKey].destAmount) + BigInt(s.destAmount)).toString();
30
- newBalancers[exchangeKey].percent += s.percent;
31
- newBalancers[exchangeKey].data.exchangeProxy = s.data.exchangeProxy;
32
- newBalancers[exchangeKey].data.gasUSD = (parseFloat(newBalancers[exchangeKey].data.gasUSD) +
28
+ accumulatedBalancers[exchangeKey].srcAmount = (BigInt(accumulatedBalancers[exchangeKey].srcAmount) +
29
+ BigInt(s.srcAmount)).toString();
30
+ accumulatedBalancers[exchangeKey].destAmount = (BigInt(accumulatedBalancers[exchangeKey].destAmount) +
31
+ BigInt(s.destAmount)).toString();
32
+ accumulatedBalancers[exchangeKey].percent += s.percent;
33
+ accumulatedBalancers[exchangeKey].data.exchangeProxy =
34
+ s.data.exchangeProxy;
35
+ accumulatedBalancers[exchangeKey].data.gasUSD = (parseFloat(accumulatedBalancers[exchangeKey].data.gasUSD) +
33
36
  parseFloat(s.data.gasUSD)).toFixed(6);
34
- newBalancers[exchangeKey].data.swaps.push({
37
+ accumulatedBalancers[exchangeKey].data.swaps.push({
35
38
  poolId: s.data.poolId,
36
39
  amount: side === constants_1.SwapSide.SELL ? s.srcAmount : s.destAmount,
37
40
  });
38
- newBalancers[exchangeKey].poolAddresses.push(s.poolAddresses[0]);
41
+ accumulatedBalancers[exchangeKey].poolAddresses.push(s.poolAddresses[0]);
39
42
  }
40
43
  else {
41
44
  optimizedSwap.push(s);
@@ -44,13 +47,16 @@ function balancerV2Merge(or) {
44
47
  optimizedSwap = optimizedSwap.concat(Object.values(newBalancers));
45
48
  return optimizedSwap;
46
49
  };
47
- or.bestRoute = or.bestRoute.map(r => ({
48
- ...r,
49
- swaps: r.swaps.map(s => ({
50
- ...s,
51
- swapExchanges: fixSwap(s.swapExchanges, or.side),
52
- })),
53
- }));
50
+ or.bestRoute = or.bestRoute.map(r => {
51
+ const accumulatedBalancers = {};
52
+ return {
53
+ ...r,
54
+ swaps: r.swaps.map(s => ({
55
+ ...s,
56
+ swapExchanges: fixSwap(s.swapExchanges, accumulatedBalancers, or.side),
57
+ })),
58
+ };
59
+ });
54
60
  return or;
55
61
  }
56
62
  exports.balancerV2Merge = balancerV2Merge;
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/dex/balancer-v2/optimizer.ts"],"names":[],"mappings":"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"}
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.33.3",
3
+ "version": "2.33.4-balancer-v2-multihop.1",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -0,0 +1,226 @@
1
+ // import _ from 'lodash';
2
+ // import { balancerV2Merge, AllBalancerV2Forks } from './optimizer';
3
+ // import { UnoptimizedRate } from '../../types';
4
+ // import { SwapSide } from '@paraswap/core';
5
+ //
6
+ // describe('BalancerV2 optimizer', () => {
7
+ // These values are random and are not important. The only invariant here we need to make sure,
8
+ // that the optimizer does not change these values
9
+ // const baseUnoptimizedRate: UnoptimizedRate = {
10
+ // blockNumber: 99,
11
+ // network: 1,
12
+ // srcToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
13
+ // srcDecimals: 18,
14
+ // srcAmount: '1',
15
+ // destToken: '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
16
+ // destDecimals: 18,
17
+ // destAmount: '2',
18
+ // gasCostUSD: '12.178524',
19
+ // gasCost: '747300',
20
+ // side: SwapSide.SELL,
21
+ // tokenTransferProxy: '0x216b4b4ba9f3e719726886d34a177484278bfcae',
22
+ // contractAddress: '0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57',
23
+ // bestRoute: [],
24
+ // };
25
+ // it('balancerV2Merge swapExchanges: BalancerV2-BalancerV2Fork', () => {
26
+ // const testRate: UnoptimizedRate = _.cloneDeep(baseUnoptimizedRate);
27
+ // testRate.bestRoute = [
28
+ // {
29
+ // percent: 92,
30
+ // swaps: [
31
+ // {
32
+ // srcToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
33
+ // srcDecimals: 18,
34
+ // destToken: '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
35
+ // destDecimals: 18,
36
+ // swapExchanges: [
37
+ // {
38
+ // exchange: 'BalancerV2',
39
+ // srcAmount: '27001080000000000000',
40
+ // destAmount: '1663710383246524230443584',
41
+ // percent: 97.83,
42
+ // poolAddresses: ['0xcb0e14e96f2cefa8550ad8e4aea344f211e5061d'],
43
+ // data: {
44
+ // poolId:
45
+ // '0xcb0e14e96f2cefa8550ad8e4aea344f211e5061d00020000000000000000011a',
46
+ // gasUSD: '2.395615',
47
+ // },
48
+ // },
49
+ // {
50
+ // exchange: 'BeetsFi',
51
+ // srcAmount: '598920000000000000',
52
+ // destAmount: '36257151080030344235259',
53
+ // percent: 2.17,
54
+ // poolAddresses: ['0x458ae80894A0924Ac763C034977e330c565F1687'],
55
+ // data: {
56
+ // poolId:
57
+ // '0x87a867f5d240a782d43d90b6b06dea470f3f8f22000200000000000000000516',
58
+ // gasUSD: '2.395615',
59
+ // },
60
+ // },
61
+ // ],
62
+ // },
63
+ // ],
64
+ // },
65
+ // {
66
+ // percent: 8,
67
+ // swaps: [
68
+ // {
69
+ // srcToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
70
+ // srcDecimals: 18,
71
+ // destToken: '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
72
+ // destDecimals: 18,
73
+ // swapExchanges: [
74
+ // {
75
+ // exchange: 'Bancor',
76
+ // srcAmount: '2400000000000000000',
77
+ // destAmount: '9235411862479221870019',
78
+ // percent: 100,
79
+ // poolAddresses: ['0x4c9a2bD661D640dA3634A4988a9Bd2Bc0f18e5a9'],
80
+ // data: {
81
+ // path: [
82
+ // '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
83
+ // '0xb1CD6e4153B2a390Cf00A6556b0fC1458C4A5533',
84
+ // '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
85
+ // ],
86
+ // gasUSD: '3.259340',
87
+ // },
88
+ // },
89
+ // ],
90
+ // },
91
+ // {
92
+ // srcToken: '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
93
+ // srcDecimals: 18,
94
+ // destToken: '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
95
+ // destDecimals: 18,
96
+ // swapExchanges: [
97
+ // {
98
+ // exchange: 'Bancor',
99
+ // srcAmount: '9235411862479221870019',
100
+ // destAmount: '144326625204595711989170',
101
+ // percent: 100,
102
+ // poolAddresses: ['0xe950137942F446a93C8309B3a7c1407ef1975856'],
103
+ // data: {
104
+ // path: [
105
+ // '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
106
+ // '0xdD17F899D4Fa66249bfdba45F0c70817052559Ac',
107
+ // '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
108
+ // ],
109
+ // gasUSD: '3.259340',
110
+ // },
111
+ // },
112
+ // ],
113
+ // },
114
+ // ],
115
+ // },
116
+ // ];
117
+ //
118
+ // const optimizedRate = balancerV2Merge(testRate);
119
+ //
120
+ // const expectedRate: UnoptimizedRate = _.cloneDeep(baseUnoptimizedRate);
121
+ // expectedRate.bestRoute = [
122
+ // {
123
+ // percent: 92,
124
+ // swaps: [
125
+ // {
126
+ // srcToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
127
+ // srcDecimals: 18,
128
+ // destToken: '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
129
+ // destDecimals: 18,
130
+ // swapExchanges: [
131
+ // {
132
+ // exchange: 'BalancerV2',
133
+ // srcAmount: '27001080000000000000',
134
+ // destAmount: '1663710383246524230443584',
135
+ // percent: 97.83,
136
+ // poolAddresses: ['0xcb0e14e96f2cefa8550ad8e4aea344f211e5061d'],
137
+ // data: {
138
+ // poolId:
139
+ // '0xcb0e14e96f2cefa8550ad8e4aea344f211e5061d00020000000000000000011a',
140
+ // gasUSD: '2.395615',
141
+ // },
142
+ // },
143
+ // {
144
+ // exchange: 'BeetsFi',
145
+ // srcAmount: '598920000000000000',
146
+ // destAmount: '36257151080030344235259',
147
+ // percent: 2.17,
148
+ // poolAddresses: ['0x458ae80894A0924Ac763C034977e330c565F1687'],
149
+ // data: {
150
+ // poolId:
151
+ // '0x87a867f5d240a782d43d90b6b06dea470f3f8f22000200000000000000000516',
152
+ // gasUSD: '2.395615',
153
+ // },
154
+ // },
155
+ // ],
156
+ // },
157
+ // ],
158
+ // },
159
+ // {
160
+ // percent: 8,
161
+ // swaps: [
162
+ // {
163
+ // srcToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
164
+ // srcDecimals: 18,
165
+ // destToken: '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
166
+ // destDecimals: 18,
167
+ // swapExchanges: [
168
+ // {
169
+ // exchange: 'Bancor',
170
+ // srcAmount: '2400000000000000000',
171
+ // destAmount: '9235411862479221870019',
172
+ // percent: 100,
173
+ // poolAddresses: ['0x4c9a2bD661D640dA3634A4988a9Bd2Bc0f18e5a9'],
174
+ // data: {
175
+ // path: [
176
+ // '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
177
+ // '0xb1CD6e4153B2a390Cf00A6556b0fC1458C4A5533',
178
+ // '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
179
+ // ],
180
+ // gasUSD: '3.259340',
181
+ // },
182
+ // },
183
+ // ],
184
+ // },
185
+ // {
186
+ // srcToken: '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
187
+ // srcDecimals: 18,
188
+ // destToken: '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
189
+ // destDecimals: 18,
190
+ // swapExchanges: [
191
+ // {
192
+ // exchange: 'Bancor',
193
+ // srcAmount: '9235411862479221870019',
194
+ // destAmount: '144326625204595711989170',
195
+ // percent: 100,
196
+ // poolAddresses: ['0xe950137942F446a93C8309B3a7c1407ef1975856'],
197
+ // data: {
198
+ // path: [
199
+ // '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
200
+ // '0xdD17F899D4Fa66249bfdba45F0c70817052559Ac',
201
+ // '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
202
+ // ],
203
+ // gasUSD: '3.259340',
204
+ // },
205
+ // },
206
+ // ],
207
+ // },
208
+ // ],
209
+ // },
210
+ // ];
211
+ //
212
+ // expect(optimizedRate).toStrictEqual(expectedRate);
213
+ // });
214
+ //
215
+ // it('balancerV2Merge swapExchanges: No BalancerV2', () => {
216
+ // expect(true).toBe(true);
217
+ // });
218
+ //
219
+ // it('balancerV2Merge swaps: BalancerV2-BalancerV2Fork', () => {
220
+ // expect(true).toBe(true);
221
+ // });
222
+ //
223
+ // it('balancerV2Merge only one BalancerV2Fork in route', () => {
224
+ // expect(true).toBe(true);
225
+ // });
226
+ // });
@@ -3,22 +3,20 @@ import { BalancerSwapV2 } from './types';
3
3
  import { SwapSide } from '../../constants';
4
4
  import { BalancerConfig } from './config';
5
5
 
6
- const MAX_UINT256 =
7
- '115792089237316195423570985008687907853269984665640564039457584007913129639935';
8
-
9
- const AllBalancerV2Forks = Object.keys(BalancerConfig);
6
+ export const AllBalancerV2Forks = Object.keys(BalancerConfig);
10
7
 
11
8
  export function balancerV2Merge(or: UnoptimizedRate): UnoptimizedRate {
12
9
  const fixSwap = (
13
10
  rawSwap: OptimalSwapExchange<any>[],
11
+ accumulatedBalancers: { [key: string]: OptimalSwapExchange<any> },
14
12
  side: SwapSide,
15
13
  ): OptimalSwapExchange<any>[] => {
16
- const newBalancers: { [key: string]: OptimalSwapExchange<any> } = {};
17
14
  let optimizedSwap = new Array<OptimalSwapExchange<any>>();
15
+ const newBalancers: { [key: string]: OptimalSwapExchange<any> } = {};
18
16
  rawSwap.forEach((s: OptimalSwapExchange<any>) => {
19
17
  const exchangeKey = s.exchange.toLowerCase();
20
18
  if (AllBalancerV2Forks.some(d => d.toLowerCase() === exchangeKey)) {
21
- if (!(exchangeKey in newBalancers)) {
19
+ if (!(exchangeKey in accumulatedBalancers)) {
22
20
  newBalancers[exchangeKey] = {
23
21
  exchange: s.exchange,
24
22
  srcAmount: '0',
@@ -30,27 +28,33 @@ export function balancerV2Merge(or: UnoptimizedRate): UnoptimizedRate {
30
28
  gasUSD: '0',
31
29
  },
32
30
  };
31
+ accumulatedBalancers[exchangeKey] = newBalancers[exchangeKey];
33
32
  }
34
- newBalancers[exchangeKey].srcAmount = (
35
- BigInt(newBalancers[exchangeKey].srcAmount) + BigInt(s.srcAmount)
33
+ accumulatedBalancers[exchangeKey].srcAmount = (
34
+ BigInt(accumulatedBalancers[exchangeKey].srcAmount) +
35
+ BigInt(s.srcAmount)
36
36
  ).toString();
37
37
 
38
- newBalancers[exchangeKey].destAmount = (
39
- BigInt(newBalancers[exchangeKey].destAmount) + BigInt(s.destAmount)
38
+ accumulatedBalancers[exchangeKey].destAmount = (
39
+ BigInt(accumulatedBalancers[exchangeKey].destAmount) +
40
+ BigInt(s.destAmount)
40
41
  ).toString();
41
42
 
42
- newBalancers[exchangeKey].percent += s.percent;
43
- newBalancers[exchangeKey].data.exchangeProxy = s.data.exchangeProxy;
44
- newBalancers[exchangeKey].data.gasUSD = (
45
- parseFloat(newBalancers[exchangeKey].data.gasUSD) +
43
+ accumulatedBalancers[exchangeKey].percent += s.percent;
44
+ accumulatedBalancers[exchangeKey].data.exchangeProxy =
45
+ s.data.exchangeProxy;
46
+ accumulatedBalancers[exchangeKey].data.gasUSD = (
47
+ parseFloat(accumulatedBalancers[exchangeKey].data.gasUSD) +
46
48
  parseFloat(s.data.gasUSD)
47
49
  ).toFixed(6);
48
50
 
49
- newBalancers[exchangeKey].data.swaps.push({
51
+ accumulatedBalancers[exchangeKey].data.swaps.push({
50
52
  poolId: s.data.poolId,
51
53
  amount: side === SwapSide.SELL ? s.srcAmount : s.destAmount,
52
54
  });
53
- newBalancers[exchangeKey].poolAddresses!.push(s.poolAddresses![0]);
55
+ accumulatedBalancers[exchangeKey].poolAddresses!.push(
56
+ s.poolAddresses![0],
57
+ );
54
58
  } else {
55
59
  optimizedSwap.push(s);
56
60
  }
@@ -59,12 +63,17 @@ export function balancerV2Merge(or: UnoptimizedRate): UnoptimizedRate {
59
63
  return optimizedSwap;
60
64
  };
61
65
 
62
- or.bestRoute = or.bestRoute.map(r => ({
63
- ...r,
64
- swaps: r.swaps.map(s => ({
65
- ...s,
66
- swapExchanges: fixSwap(s.swapExchanges, or.side),
67
- })),
68
- }));
66
+ or.bestRoute = or.bestRoute.map(r => {
67
+ const accumulatedBalancers: {
68
+ [key: string]: OptimalSwapExchange<any>;
69
+ } = {};
70
+ return {
71
+ ...r,
72
+ swaps: r.swaps.map(s => ({
73
+ ...s,
74
+ swapExchanges: fixSwap(s.swapExchanges, accumulatedBalancers, or.side),
75
+ })),
76
+ };
77
+ });
69
78
  return or;
70
79
  }