@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.
- package/build/abi/idle-dao/idle-cdo-factory.json +38 -0
- package/build/abi/idle-dao/idle-cdo.json +1245 -0
- package/build/config.js +2 -0
- package/build/config.js.map +1 -1
- package/build/dex/aave-v3-stata/aave-v3-stata.js +1 -0
- package/build/dex/aave-v3-stata/aave-v3-stata.js.map +1 -1
- package/build/dex/idle-dao/config.d.ts +5 -0
- package/build/dex/idle-dao/config.js +25 -0
- package/build/dex/idle-dao/config.js.map +1 -0
- package/build/dex/idle-dao/idle-dao.d.ts +42 -0
- package/build/dex/idle-dao/idle-dao.js +260 -0
- package/build/dex/idle-dao/idle-dao.js.map +1 -0
- package/build/dex/idle-dao/token_list.d.ts +4 -0
- package/build/dex/idle-dao/token_list.js +289 -0
- package/build/dex/idle-dao/token_list.js.map +1 -0
- package/build/dex/idle-dao/tokens.d.ts +9 -0
- package/build/dex/idle-dao/tokens.js +68 -0
- package/build/dex/idle-dao/tokens.js.map +1 -0
- package/build/dex/idle-dao/types.d.ts +35 -0
- package/build/dex/idle-dao/types.js +11 -0
- package/build/dex/idle-dao/types.js.map +1 -0
- package/build/dex/idle-dao/utils.d.ts +8 -0
- package/build/dex/idle-dao/utils.js +149 -0
- package/build/dex/idle-dao/utils.js.map +1 -0
- package/build/dex/index.js +2 -0
- package/build/dex/index.js.map +1 -1
- package/build/generic-swap-transaction-builder.js +3 -1
- package/build/generic-swap-transaction-builder.js.map +1 -1
- package/build/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/abi/idle-dao/idle-cdo-factory.json +38 -0
- package/src/abi/idle-dao/idle-cdo.json +1245 -0
- package/src/config.ts +3 -0
- package/src/dex/aave-v3-stata/aave-v3-stata.ts +1 -0
- package/src/dex/idle-dao/config.ts +26 -0
- package/src/dex/idle-dao/idle-dao-e2e.test.ts +112 -0
- package/src/dex/idle-dao/idle-dao-integration.test.ts +155 -0
- package/src/dex/idle-dao/idle-dao.ts +402 -0
- package/src/dex/idle-dao/token_list.ts +287 -0
- package/src/dex/idle-dao/tokens.ts +99 -0
- package/src/dex/idle-dao/types.ts +43 -0
- package/src/dex/idle-dao/utils.ts +216 -0
- package/src/dex/index.ts +2 -0
- package/src/generic-swap-transaction-builder.ts +3 -1
- package/src/types.ts +1 -0
- 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,
|
|
@@ -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
|
+
});
|