@paraswap/dex-lib 3.7.7-skip-approval → 3.7.7-skip-approval.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.
Files changed (46) hide show
  1. package/build/abi/idle-dao/idle-cdo-factory.json +38 -0
  2. package/build/abi/idle-dao/idle-cdo.json +1245 -0
  3. package/build/config.js +2 -0
  4. package/build/config.js.map +1 -1
  5. package/build/dex/aave-v3-stata/aave-v3-stata.js +1 -0
  6. package/build/dex/aave-v3-stata/aave-v3-stata.js.map +1 -1
  7. package/build/dex/idle-dao/config.d.ts +5 -0
  8. package/build/dex/idle-dao/config.js +25 -0
  9. package/build/dex/idle-dao/config.js.map +1 -0
  10. package/build/dex/idle-dao/idle-dao.d.ts +42 -0
  11. package/build/dex/idle-dao/idle-dao.js +260 -0
  12. package/build/dex/idle-dao/idle-dao.js.map +1 -0
  13. package/build/dex/idle-dao/token_list.d.ts +4 -0
  14. package/build/dex/idle-dao/token_list.js +289 -0
  15. package/build/dex/idle-dao/token_list.js.map +1 -0
  16. package/build/dex/idle-dao/tokens.d.ts +9 -0
  17. package/build/dex/idle-dao/tokens.js +68 -0
  18. package/build/dex/idle-dao/tokens.js.map +1 -0
  19. package/build/dex/idle-dao/types.d.ts +35 -0
  20. package/build/dex/idle-dao/types.js +11 -0
  21. package/build/dex/idle-dao/types.js.map +1 -0
  22. package/build/dex/idle-dao/utils.d.ts +8 -0
  23. package/build/dex/idle-dao/utils.js +149 -0
  24. package/build/dex/idle-dao/utils.js.map +1 -0
  25. package/build/dex/index.js +2 -0
  26. package/build/dex/index.js.map +1 -1
  27. package/build/generic-swap-transaction-builder.js +3 -1
  28. package/build/generic-swap-transaction-builder.js.map +1 -1
  29. package/build/types.d.ts +1 -0
  30. package/package.json +1 -1
  31. package/src/abi/idle-dao/idle-cdo-factory.json +38 -0
  32. package/src/abi/idle-dao/idle-cdo.json +1245 -0
  33. package/src/config.ts +3 -0
  34. package/src/dex/aave-v3-stata/aave-v3-stata.ts +1 -0
  35. package/src/dex/idle-dao/config.ts +26 -0
  36. package/src/dex/idle-dao/idle-dao-e2e.test.ts +112 -0
  37. package/src/dex/idle-dao/idle-dao-integration.test.ts +155 -0
  38. package/src/dex/idle-dao/idle-dao.ts +402 -0
  39. package/src/dex/idle-dao/token_list.ts +287 -0
  40. package/src/dex/idle-dao/tokens.ts +99 -0
  41. package/src/dex/idle-dao/types.ts +43 -0
  42. package/src/dex/idle-dao/utils.ts +216 -0
  43. package/src/dex/index.ts +2 -0
  44. package/src/generic-swap-transaction-builder.ts +3 -1
  45. package/src/types.ts +1 -0
  46. package/tests/constants-e2e.ts +69 -3
package/src/config.ts CHANGED
@@ -31,6 +31,7 @@ type BaseConfig = {
31
31
  rpcPollingBlocksBackToTriggerUpdate: number;
32
32
  hashFlowAuthToken?: string;
33
33
  hashFlowDisabledMMs: string[];
34
+ idleDaoAuthToken?: string;
34
35
  swaapV2AuthToken?: string;
35
36
  dexalotAuthToken?: string;
36
37
  forceRpcFallbackDexs: string[];
@@ -72,6 +73,7 @@ const baseConfigs: { [network: number]: BaseConfig } = {
72
73
  rpcPollingBlocksBackToTriggerUpdate: 0,
73
74
  swaapV2AuthToken: process.env.API_KEY_SWAAP_V2_AUTH_TOKEN || '',
74
75
  hashFlowAuthToken: process.env.API_KEY_HASHFLOW_AUTH_TOKEN || '',
76
+ idleDaoAuthToken: process.env.API_KEY_IDLEDAO_AUTH_TOKEN || '',
75
77
  hashFlowDisabledMMs:
76
78
  process.env[`HASHFLOW_DISABLED_MMS_1`]?.split(',') || [],
77
79
  uniswapV3EventLoggingSampleRate: 0,
@@ -455,6 +457,7 @@ export function generateConfig(network: number): Config {
455
457
  rpcPollingBlocksBackToTriggerUpdate:
456
458
  baseConfig.rpcPollingBlocksBackToTriggerUpdate,
457
459
  hashFlowAuthToken: baseConfig.hashFlowAuthToken,
460
+ idleDaoAuthToken: baseConfig.idleDaoAuthToken,
458
461
  swaapV2AuthToken: baseConfig.swaapV2AuthToken,
459
462
  dexalotAuthToken: baseConfig.dexalotAuthToken,
460
463
  hashFlowDisabledMMs: baseConfig.hashFlowDisabledMMs,
@@ -427,6 +427,7 @@ export class AaveV3Stata
427
427
  exchangeData: swapData,
428
428
  targetExchange: exchange,
429
429
  returnAmountPos,
430
+ skipApproval: srcType === TokenType.STATA_TOKEN,
430
431
  };
431
432
  }
432
433
 
@@ -0,0 +1,26 @@
1
+ import { DexParams, IdleToken } from './types';
2
+ import { DexConfigMap, AdapterMappings } from '../../types';
3
+ import { Network, SwapSide } from '../../constants';
4
+
5
+ export const Config: DexConfigMap<DexParams> = {
6
+ IdleDao: {
7
+ [Network.MAINNET]: {
8
+ lendingGasCost: 328 * 1000,
9
+ factoryAddress: '0x3c9916bb9498f637e2fa86c2028e26275dc9a631',
10
+ },
11
+ },
12
+ };
13
+
14
+ export const Adapters: Record<number, AdapterMappings> = {
15
+ [Network.MAINNET]: {
16
+ [SwapSide.SELL]: [{ name: '', index: 0 }],
17
+ [SwapSide.BUY]: [{ name: '', index: 0 }],
18
+ },
19
+ };
20
+
21
+ export const endpoints: Record<number, string> = {
22
+ [Network.MAINNET]: 'https://api.idle.finance/pools',
23
+ [Network.POLYGON]: 'https://api-polygon.idle.finance/pools',
24
+ [Network.OPTIMISM]: 'https://api-optimism.idle.finance/pools',
25
+ [Network.ZKEVM]: 'https://api-zkevm.idle.finance/pools',
26
+ };
@@ -0,0 +1,112 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { testE2E } from '../../../tests/utils-e2e';
6
+ import { Tokens, Holders } from '../../../tests/constants-e2e';
7
+ import { Network, ContractMethod, SwapSide } from '../../constants';
8
+ import { StaticJsonRpcProvider } from '@ethersproject/providers';
9
+ import { generateConfig } from '../../config';
10
+
11
+ function testForNetwork(
12
+ network: Network,
13
+ dexKey: string,
14
+ tokenASymbol: string,
15
+ tokenBSymbol: string,
16
+ tokenAAmount: string,
17
+ tokenBAmount: string,
18
+ ) {
19
+ const provider = new StaticJsonRpcProvider(
20
+ generateConfig(network).privateHttpProvider,
21
+ network,
22
+ );
23
+ const tokens = Tokens[network];
24
+ const holders = Holders[network];
25
+
26
+ const sideToContractMethods = new Map([
27
+ [SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
28
+ [SwapSide.BUY, [ContractMethod.swapExactAmountOut]],
29
+ ]);
30
+
31
+ describe(`${network}`, () => {
32
+ sideToContractMethods.forEach((contractMethods, side) =>
33
+ describe(`${side}`, () => {
34
+ contractMethods.forEach((contractMethod: ContractMethod) => {
35
+ describe(`${contractMethod}`, () => {
36
+ it(`${tokenASymbol} -> ${tokenBSymbol} - ${tokenAAmount}`, async () => {
37
+ await testE2E(
38
+ tokens[tokenASymbol],
39
+ tokens[tokenBSymbol],
40
+ holders[tokenASymbol],
41
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
42
+ side,
43
+ dexKey,
44
+ contractMethod,
45
+ network,
46
+ provider,
47
+ );
48
+ });
49
+ it(`${tokenBSymbol} -> ${tokenASymbol} - ${tokenBAmount}`, async () => {
50
+ await testE2E(
51
+ tokens[tokenBSymbol],
52
+ tokens[tokenASymbol],
53
+ holders[tokenBSymbol],
54
+ side === SwapSide.SELL ? tokenBAmount : tokenAAmount,
55
+ side,
56
+ dexKey,
57
+ contractMethod,
58
+ network,
59
+ provider,
60
+ );
61
+ });
62
+ });
63
+ });
64
+ }),
65
+ );
66
+ });
67
+ }
68
+
69
+ describe('IdleDao E2E', () => {
70
+ const dexKey = 'IdleDao';
71
+
72
+ describe('Mainnet', () => {
73
+ const network = Network.MAINNET;
74
+ const tests = [
75
+ {
76
+ tokenASymbol: 'STETH',
77
+ tokenBSymbol: 'AA_wstETH',
78
+ tokenAAmount: '1000000000000000000',
79
+ tokenBAmount: '1000000000000000000',
80
+ },
81
+ {
82
+ tokenASymbol: 'USDC',
83
+ tokenBSymbol: 'AA_idle_cpPOR-USDC',
84
+ tokenAAmount: '1000000',
85
+ tokenBAmount: '1000000000000000000',
86
+ },
87
+ {
88
+ tokenASymbol: 'USDT',
89
+ tokenBSymbol: 'BB_idle_cpFAS-USDT',
90
+ tokenAAmount: '1000000',
91
+ tokenBAmount: '1000000000000000000',
92
+ },
93
+ {
94
+ tokenASymbol: 'WETH',
95
+ tokenBSymbol: 'BB_Re7WETH',
96
+ tokenAAmount: '100000000000000',
97
+ tokenBAmount: '100000000000000',
98
+ },
99
+ ];
100
+
101
+ tests.forEach(testData => {
102
+ testForNetwork(
103
+ network,
104
+ dexKey,
105
+ testData.tokenASymbol,
106
+ testData.tokenBSymbol,
107
+ testData.tokenAAmount,
108
+ testData.tokenBAmount,
109
+ );
110
+ });
111
+ });
112
+ });
@@ -0,0 +1,155 @@
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
3
+
4
+ import { DummyDexHelper } from '../../dex-helper/index';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { IdleDao } from './idle-dao';
7
+ import { checkPoolPrices, checkPoolsLiquidity } from '../../../tests/utils';
8
+ import { Tokens } from '../../../tests/constants-e2e';
9
+
10
+ async function testForIntegration(
11
+ network: Network,
12
+ dexKey: string,
13
+ tokenASymbol: string,
14
+ tokenBSymbol: string,
15
+ tokenAAmount: string,
16
+ tokenBAmount: string,
17
+ ) {
18
+ const TokenA = Tokens[network][tokenASymbol];
19
+ const TokenB = Tokens[network][tokenBSymbol];
20
+ const tokenAAmounts = [
21
+ 0n,
22
+ BigInt(tokenAAmount),
23
+ BigInt(tokenAAmount) * BigInt(2),
24
+ ];
25
+ const tokenBAmounts = [
26
+ 0n,
27
+ BigInt(tokenBAmount),
28
+ BigInt(tokenBAmount) * BigInt(2),
29
+ ];
30
+
31
+ describe('IdleDao', function () {
32
+ it('getPoolIdentifiers and getPricesVolume SELL', async function () {
33
+ const dexHelper = new DummyDexHelper(network);
34
+ const blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
35
+ const idleDao = new IdleDao(network, dexKey, dexHelper);
36
+
37
+ await idleDao.initializePricing(blocknumber);
38
+
39
+ const pools = await idleDao.getPoolIdentifiers(TokenA, TokenB);
40
+
41
+ expect(pools.length).toBeGreaterThan(0);
42
+
43
+ const poolPrices = await idleDao.getPricesVolume(
44
+ TokenA,
45
+ TokenB,
46
+ tokenAAmounts,
47
+ SwapSide.SELL,
48
+ blocknumber,
49
+ pools,
50
+ );
51
+
52
+ expect(poolPrices).not.toBeNull();
53
+ checkPoolPrices(poolPrices!, tokenAAmounts, SwapSide.SELL, dexKey);
54
+ });
55
+
56
+ it('getPoolIdentifiers and getPricesVolume BUY', async function () {
57
+ const dexHelper = new DummyDexHelper(network);
58
+ const blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
59
+ const idleDao = new IdleDao(network, dexKey, dexHelper);
60
+
61
+ await idleDao.initializePricing(blocknumber);
62
+
63
+ const pools = await idleDao.getPoolIdentifiers(TokenA, TokenB);
64
+
65
+ expect(pools.length).toBeGreaterThan(0);
66
+
67
+ const poolPrices = await idleDao.getPricesVolume(
68
+ TokenA,
69
+ TokenB,
70
+ tokenBAmounts,
71
+ SwapSide.BUY,
72
+ blocknumber,
73
+ pools,
74
+ );
75
+
76
+ expect(poolPrices).not.toBeNull();
77
+ checkPoolPrices(poolPrices!, tokenBAmounts, SwapSide.BUY, dexKey);
78
+ });
79
+
80
+ it('getTopPoolsForToken', async function () {
81
+ const dexHelper = new DummyDexHelper(network);
82
+ const idleDao = new IdleDao(network, dexKey, dexHelper);
83
+
84
+ const poolLiquidity = await idleDao.getTopPoolsForToken(
85
+ TokenA.address,
86
+ 10,
87
+ );
88
+
89
+ checkPoolsLiquidity(poolLiquidity, TokenA.address, dexKey);
90
+ });
91
+ });
92
+ }
93
+
94
+ describe('IdleDao Integration tests', () => {
95
+ const dexKey = 'IdleDao';
96
+
97
+ describe('Mainnet', () => {
98
+ const network = Network.MAINNET;
99
+ const tests = [
100
+ {
101
+ tokenASymbol: 'STETH',
102
+ tokenBSymbol: 'AA_wstETH',
103
+ tokenAAmount: '1000000000000000000',
104
+ tokenBAmount: '1000000000000000000',
105
+ },
106
+ {
107
+ tokenASymbol: 'USDC',
108
+ tokenBSymbol: 'AA_idle_cpPOR-USDC',
109
+ tokenAAmount: '1000000',
110
+ tokenBAmount: '1000000000000000000',
111
+ },
112
+ {
113
+ tokenASymbol: 'USDT',
114
+ tokenBSymbol: 'BB_idle_cpFAS-USDT',
115
+ tokenAAmount: '1000000',
116
+ tokenBAmount: '1000000000000000000',
117
+ },
118
+ {
119
+ tokenASymbol: 'WETH',
120
+ tokenBSymbol: 'BB_Re7WETH',
121
+ tokenAAmount: '100000000000000',
122
+ tokenBAmount: '100000000000000',
123
+ },
124
+ {
125
+ tokenASymbol: 'WETH',
126
+ tokenBSymbol: 'AA_Re7WETH',
127
+ tokenAAmount: '1000000000000000',
128
+ tokenBAmount: '1000000000000000',
129
+ },
130
+ {
131
+ tokenASymbol: 'STETH',
132
+ tokenBSymbol: 'AA_iETHv2',
133
+ tokenAAmount: '1000000000000000',
134
+ tokenBAmount: '1000000000000000',
135
+ },
136
+ {
137
+ tokenASymbol: 'STETH',
138
+ tokenBSymbol: 'BB_iETHv2',
139
+ tokenAAmount: '1000000000000000',
140
+ tokenBAmount: '1000000000000000',
141
+ },
142
+ ];
143
+
144
+ tests.forEach(testData => {
145
+ testForIntegration(
146
+ network,
147
+ dexKey,
148
+ testData.tokenASymbol,
149
+ testData.tokenBSymbol,
150
+ testData.tokenAAmount,
151
+ testData.tokenBAmount,
152
+ );
153
+ });
154
+ });
155
+ });