@paraswap/dex-lib 2.35.7-worker-pool.3 → 2.36.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.
- package/build/abi/aerodrome/aerodrome-pool-factory.json +586 -0
- package/build/abi/api3-proxy.json +7 -0
- package/build/config.js +2 -2
- package/build/dex/algebra/algebra.js +5 -4
- package/build/dex/algebra/algebra.js.map +1 -1
- package/build/dex/balancer-v2/config.js +10 -2
- package/build/dex/balancer-v2/config.js.map +1 -1
- package/build/dex/index.js +2 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/maverick-v1/config.js +9 -0
- package/build/dex/maverick-v1/config.js.map +1 -1
- package/build/dex/maverick-v1/maverick-v1.js +11 -2
- package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
- package/build/dex/pancakeswap-v3/config.js +17 -0
- package/build/dex/pancakeswap-v3/config.js.map +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js +7 -6
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
- package/build/dex/quick-perps/pool.js +21 -6
- package/build/dex/quick-perps/pool.js.map +1 -1
- package/build/dex/quick-perps/quick-perps.js +34 -28
- package/build/dex/quick-perps/quick-perps.js.map +1 -1
- package/build/dex/solidly/config.js +22 -1
- package/build/dex/solidly/config.js.map +1 -1
- package/build/dex/solidly/forks-override/aerodrome.d.ts +14 -0
- package/build/dex/solidly/forks-override/aerodrome.js +48 -0
- package/build/dex/solidly/forks-override/aerodrome.js.map +1 -0
- package/build/dex/solidly/solidly.js +1 -0
- package/build/dex/solidly/solidly.js.map +1 -1
- package/build/dex/uniswap-v3/config.js +12 -0
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.js +5 -4
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex/woo-fi-v2/config.js +13 -0
- package/build/dex/woo-fi-v2/config.js.map +1 -1
- package/build/dex-helper/dummy-dex-helper.d.ts +0 -1
- package/build/dex-helper/dummy-dex-helper.js +0 -3
- package/build/dex-helper/dummy-dex-helper.js.map +1 -1
- package/build/dex-helper/idex-helper.d.ts +0 -1
- package/build/lib/api3-feed.d.ts +4 -0
- package/build/lib/api3-feed.js +18 -0
- package/build/lib/api3-feed.js.map +1 -1
- package/package.json +1 -1
- package/src/abi/aerodrome/aerodrome-pool-factory.json +586 -0
- package/src/abi/api3-proxy.json +7 -0
- package/src/config.ts +2 -2
- package/src/dex/algebra/algebra.ts +10 -10
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +120 -1
- package/src/dex/balancer-v2/config.ts +11 -2
- package/src/dex/index.ts +2 -0
- package/src/dex/maverick-v1/config.ts +10 -0
- package/src/dex/maverick-v1/maverick-v1-e2e.test.ts +115 -1
- package/src/dex/maverick-v1/maverick-v1.ts +12 -2
- package/src/dex/pancakeswap-v3/config.ts +19 -0
- package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +114 -0
- package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +12 -12
- package/src/dex/quick-perps/pool.ts +42 -7
- package/src/dex/quick-perps/quick-perps-events.test.ts +0 -1
- package/src/dex/quick-perps/quick-perps.ts +45 -35
- package/src/dex/solidly/config.ts +24 -1
- package/src/dex/solidly/forks-override/aerodrome.ts +53 -0
- package/src/dex/solidly/solidly-e2e.test.ts +88 -0
- package/src/dex/solidly/solidly-integration.test.ts +66 -0
- package/src/dex/solidly/solidly.ts +1 -0
- package/src/dex/uniswap-v3/config.ts +12 -0
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +24 -9
- package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +140 -0
- package/src/dex/uniswap-v3/uniswap-v3.ts +10 -10
- package/src/dex/woo-fi-v2/config.ts +13 -0
- package/src/dex/woo-fi-v2/woo-fi-v2-e2e.test.ts +64 -0
- package/src/dex-helper/dummy-dex-helper.ts +0 -15
- package/src/dex-helper/idex-helper.ts +0 -7
- package/src/lib/api3-feed.ts +35 -0
- package/tests/constants-e2e.ts +30 -0
- package/tests/utils-e2e.ts +1 -0
|
@@ -641,14 +641,14 @@ export class UniswapV3
|
|
|
641
641
|
const balanceDestToken =
|
|
642
642
|
_destAddress === pool.token0 ? state.balance0 : state.balance1;
|
|
643
643
|
|
|
644
|
-
const unitResult =
|
|
644
|
+
const unitResult = this._getOutputs(
|
|
645
645
|
state,
|
|
646
646
|
[unitAmount],
|
|
647
647
|
zeroForOne,
|
|
648
648
|
side,
|
|
649
649
|
balanceDestToken,
|
|
650
650
|
);
|
|
651
|
-
const pricesResult =
|
|
651
|
+
const pricesResult = this._getOutputs(
|
|
652
652
|
state,
|
|
653
653
|
_amounts,
|
|
654
654
|
zeroForOne,
|
|
@@ -1071,20 +1071,20 @@ export class UniswapV3
|
|
|
1071
1071
|
return newConfig;
|
|
1072
1072
|
}
|
|
1073
1073
|
|
|
1074
|
-
private
|
|
1074
|
+
private _getOutputs(
|
|
1075
1075
|
state: DeepReadonly<PoolState>,
|
|
1076
1076
|
amounts: bigint[],
|
|
1077
1077
|
zeroForOne: boolean,
|
|
1078
1078
|
side: SwapSide,
|
|
1079
1079
|
destTokenBalance: bigint,
|
|
1080
|
-
):
|
|
1080
|
+
): OutputResult | null {
|
|
1081
1081
|
try {
|
|
1082
|
-
const outputsResult =
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
)
|
|
1082
|
+
const outputsResult = uniswapV3Math.queryOutputs(
|
|
1083
|
+
state,
|
|
1084
|
+
amounts,
|
|
1085
|
+
zeroForOne,
|
|
1086
|
+
side,
|
|
1087
|
+
);
|
|
1088
1088
|
|
|
1089
1089
|
if (side === SwapSide.SELL) {
|
|
1090
1090
|
if (outputsResult.outputs[0] > destTokenBalance) {
|
|
@@ -64,6 +64,16 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
64
64
|
decimals: 6,
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
|
+
[Network.BASE]: {
|
|
68
|
+
wooPPV2Address: '0xb130a49065178465931d4f887056328CeA5D723f',
|
|
69
|
+
wooOracleV2Address: '0x2Fe5E5D341cFFa606a5d9DA1B6B646a381B0f7ec',
|
|
70
|
+
integrationHelperAddress: '0xC4E9B633685461E7B7A807D12a246C81f96F31B8',
|
|
71
|
+
// USDbC
|
|
72
|
+
quoteToken: {
|
|
73
|
+
address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA',
|
|
74
|
+
decimals: 6,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
67
77
|
},
|
|
68
78
|
};
|
|
69
79
|
|
|
@@ -84,4 +94,7 @@ export const Adapters: Record<number, AdapterMappings> = {
|
|
|
84
94
|
[Network.AVALANCHE]: {
|
|
85
95
|
[SwapSide.SELL]: [{ name: 'AvalancheAdapter01', index: 12 }],
|
|
86
96
|
},
|
|
97
|
+
[Network.BASE]: {
|
|
98
|
+
[SwapSide.SELL]: [{ name: 'BaseAdapter01', index: 5 }],
|
|
99
|
+
},
|
|
87
100
|
};
|
|
@@ -213,4 +213,68 @@ describe('WooFiV2 E2E', () => {
|
|
|
213
213
|
tokenQuoteAmount,
|
|
214
214
|
);
|
|
215
215
|
});
|
|
216
|
+
|
|
217
|
+
describe('Base', () => {
|
|
218
|
+
const network = Network.BASE;
|
|
219
|
+
|
|
220
|
+
const baseATokenSymbol = 'USDbC';
|
|
221
|
+
const baseBTokenSymbol = 'ETH';
|
|
222
|
+
|
|
223
|
+
const tokenBaseAAmount = '100000000';
|
|
224
|
+
const tokenBaseBAmount = '1000000000000000000';
|
|
225
|
+
|
|
226
|
+
const tokens = Tokens[network];
|
|
227
|
+
const holders = Holders[network];
|
|
228
|
+
|
|
229
|
+
const provider = new StaticJsonRpcProvider(
|
|
230
|
+
generateConfig(network).privateHttpProvider,
|
|
231
|
+
network,
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const sideToContractMethods = new Map([
|
|
235
|
+
[
|
|
236
|
+
SwapSide.SELL,
|
|
237
|
+
[
|
|
238
|
+
ContractMethod.simpleSwap,
|
|
239
|
+
ContractMethod.multiSwap,
|
|
240
|
+
ContractMethod.megaSwap,
|
|
241
|
+
],
|
|
242
|
+
],
|
|
243
|
+
]);
|
|
244
|
+
|
|
245
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
246
|
+
describe(`${side}`, () => {
|
|
247
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
248
|
+
describe(`${contractMethod}`, () => {
|
|
249
|
+
it(`${baseATokenSymbol} -> ${baseBTokenSymbol}`, async () => {
|
|
250
|
+
await testE2E(
|
|
251
|
+
tokens[baseATokenSymbol],
|
|
252
|
+
tokens[baseBTokenSymbol],
|
|
253
|
+
holders[baseATokenSymbol],
|
|
254
|
+
tokenBaseAAmount,
|
|
255
|
+
side,
|
|
256
|
+
dexKey,
|
|
257
|
+
contractMethod,
|
|
258
|
+
network,
|
|
259
|
+
provider,
|
|
260
|
+
);
|
|
261
|
+
});
|
|
262
|
+
it(`${baseBTokenSymbol} -> ${baseATokenSymbol}`, async () => {
|
|
263
|
+
await testE2E(
|
|
264
|
+
tokens[baseBTokenSymbol],
|
|
265
|
+
tokens[baseATokenSymbol],
|
|
266
|
+
holders[baseBTokenSymbol],
|
|
267
|
+
tokenBaseBAmount,
|
|
268
|
+
side,
|
|
269
|
+
dexKey,
|
|
270
|
+
contractMethod,
|
|
271
|
+
network,
|
|
272
|
+
provider,
|
|
273
|
+
);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
}),
|
|
278
|
+
);
|
|
279
|
+
});
|
|
216
280
|
});
|
|
@@ -246,12 +246,6 @@ export class DummyDexHelper implements IDexHelper {
|
|
|
246
246
|
getLogger: LoggerConstructor;
|
|
247
247
|
web3Provider: Web3;
|
|
248
248
|
getTokenUSDPrice: (token: Token, amount: bigint) => Promise<number>;
|
|
249
|
-
executeOnWorkerPool: (
|
|
250
|
-
network: number,
|
|
251
|
-
dexKeys: string,
|
|
252
|
-
methodSelector: string,
|
|
253
|
-
payload: unknown[],
|
|
254
|
-
) => Promise<unknown>;
|
|
255
249
|
|
|
256
250
|
constructor(network: number, rpcUrl?: string) {
|
|
257
251
|
this.config = new ConfigHelper(false, generateConfig(network), 'is');
|
|
@@ -287,15 +281,6 @@ export class DummyDexHelper implements IDexHelper {
|
|
|
287
281
|
5,
|
|
288
282
|
this.getLogger(`PromiseScheduler-${network}`),
|
|
289
283
|
);
|
|
290
|
-
|
|
291
|
-
this.executeOnWorkerPool = async (
|
|
292
|
-
network: number,
|
|
293
|
-
dexKey: string,
|
|
294
|
-
methodSelector: string,
|
|
295
|
-
payload: unknown[],
|
|
296
|
-
) => {
|
|
297
|
-
return null;
|
|
298
|
-
};
|
|
299
284
|
}
|
|
300
285
|
|
|
301
286
|
replaceProviderWithRPC(rpcUrl: string) {
|
|
@@ -21,12 +21,5 @@ export interface IDexHelper {
|
|
|
21
21
|
web3Provider: Web3;
|
|
22
22
|
blockManager: IBlockManager;
|
|
23
23
|
getLogger: LoggerConstructor;
|
|
24
|
-
executeOnWorkerPool: (
|
|
25
|
-
network: number,
|
|
26
|
-
dexKey: string,
|
|
27
|
-
methodSelector: string,
|
|
28
|
-
payload: unknown[],
|
|
29
|
-
// For POC it is ok to have this unknown
|
|
30
|
-
) => Promise<unknown>;
|
|
31
24
|
getTokenUSDPrice: (token: Token, amount: bigint) => Promise<number>;
|
|
32
25
|
}
|
package/src/lib/api3-feed.ts
CHANGED
|
@@ -51,6 +51,14 @@ export class Api3FeedSubscriber<State> extends PartialEventSubscriber<
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
static getDapiNameHashMultiCallInput(proxy: Address): MultiCallInput {
|
|
55
|
+
return {
|
|
56
|
+
target: proxy,
|
|
57
|
+
callData:
|
|
58
|
+
Api3FeedSubscriber.proxyInterface.encodeFunctionData('dapiNameHash'),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
54
62
|
static getDataFeedId(proxy: Address): MultiCallInput {
|
|
55
63
|
return {
|
|
56
64
|
target: proxy,
|
|
@@ -59,6 +67,33 @@ export class Api3FeedSubscriber<State> extends PartialEventSubscriber<
|
|
|
59
67
|
};
|
|
60
68
|
}
|
|
61
69
|
|
|
70
|
+
static getFeedIdFromDapiNameHash(
|
|
71
|
+
api3Server: Address,
|
|
72
|
+
dapiNameHash: string,
|
|
73
|
+
): MultiCallInput {
|
|
74
|
+
return {
|
|
75
|
+
target: api3Server,
|
|
76
|
+
callData: Api3FeedSubscriber.api3ServerV1Iface.encodeFunctionData(
|
|
77
|
+
'dapiNameHashToDataFeedId',
|
|
78
|
+
[dapiNameHash],
|
|
79
|
+
),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static decodeFeedIdFromDapiNameHash(multicallOutput: MultiCallOutput) {
|
|
84
|
+
return Api3FeedSubscriber.api3ServerV1Iface.decodeFunctionResult(
|
|
85
|
+
'dapiNameHashToDataFeedId',
|
|
86
|
+
multicallOutput,
|
|
87
|
+
)[0];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
static decodeDapiNameHash(multicallOutput: MultiCallOutput) {
|
|
91
|
+
return Api3FeedSubscriber.proxyInterface.decodeFunctionResult(
|
|
92
|
+
'dapiNameHash',
|
|
93
|
+
multicallOutput,
|
|
94
|
+
)[0];
|
|
95
|
+
}
|
|
96
|
+
|
|
62
97
|
static decodeDataFeedId(multicallOutput: MultiCallOutput) {
|
|
63
98
|
return Api3FeedSubscriber.proxyInterface.decodeFunctionResult(
|
|
64
99
|
'dataFeedId',
|
package/tests/constants-e2e.ts
CHANGED
|
@@ -892,6 +892,30 @@ export const Tokens: {
|
|
|
892
892
|
address: '0x4200000000000000000000000000000000000006',
|
|
893
893
|
decimals: 18,
|
|
894
894
|
},
|
|
895
|
+
MAV: {
|
|
896
|
+
address: '0x64b88c73A5DfA78D1713fE1b4c69a22d7E0faAa7',
|
|
897
|
+
decimals: 18,
|
|
898
|
+
},
|
|
899
|
+
USDC: {
|
|
900
|
+
address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
|
|
901
|
+
decimals: 6,
|
|
902
|
+
},
|
|
903
|
+
USDbC: {
|
|
904
|
+
address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA',
|
|
905
|
+
decimals: 6,
|
|
906
|
+
},
|
|
907
|
+
DAI: {
|
|
908
|
+
address: '0x50c5725949a6f0c72e6c4a641f24049a917db0cb',
|
|
909
|
+
decimals: 18,
|
|
910
|
+
},
|
|
911
|
+
BAL: {
|
|
912
|
+
address: '0x4158734d47fc9692176b5085e0f52ee0da5d47f1',
|
|
913
|
+
decimals: 18,
|
|
914
|
+
},
|
|
915
|
+
GOLD: {
|
|
916
|
+
address: '0xbeFD5C25A59ef2C1316c5A4944931171F30Cd3E4',
|
|
917
|
+
decimals: 18,
|
|
918
|
+
},
|
|
895
919
|
ETH: { address: ETHER_ADDRESS, decimals: 18 },
|
|
896
920
|
},
|
|
897
921
|
};
|
|
@@ -1117,6 +1141,12 @@ export const Holders: {
|
|
|
1117
1141
|
WETH: '0x4bb6b2efe7036020ba6f02a05602546c9f25bf28',
|
|
1118
1142
|
PRIME: '0x956bcc6b56c99db382d9d97a30ba5f1402144b3e',
|
|
1119
1143
|
ETH: '0xdd9176ea3e7559d6b68b537ef555d3e89403f742',
|
|
1144
|
+
MAV: '0x7499785aa5d1bdf0a0ac862c1ef3698d3cba6568',
|
|
1145
|
+
USDC: '0xaac391f166f33cdaefaa4afa6616a3bea66b694d',
|
|
1146
|
+
USDbC: '0xc9d05a1c3c8e01dcb701d6185cdc21a5bb94becb',
|
|
1147
|
+
DAI: '0x20f03e26968b179025f65c1f4afadfd3959c8d03',
|
|
1148
|
+
BAL: '0x854b004700885a61107b458f11ecc169a019b764',
|
|
1149
|
+
GOLD: '0x1374c25b3710758c326ee0c70ec48b595d5ccf8c',
|
|
1120
1150
|
},
|
|
1121
1151
|
};
|
|
1122
1152
|
|
package/tests/utils-e2e.ts
CHANGED
|
@@ -86,6 +86,7 @@ const MULTISIG: { [nid: number]: string } = {
|
|
|
86
86
|
[Network.AVALANCHE]: '0x1e2ECA5e812D08D2A7F8664D69035163ff5BfEC2',
|
|
87
87
|
[Network.OPTIMISM]: '0xf01121e808F782d7F34E857c27dA31AD1f151b39',
|
|
88
88
|
[Network.ARBITRUM]: '0x90DfD8a6454CFE19be39EaB42ac93CD850c7f339',
|
|
89
|
+
[Network.BASE]: '0x6C674c8Df1aC663b822c4B6A56B4E5e889379AE0',
|
|
89
90
|
};
|
|
90
91
|
|
|
91
92
|
class APIParaswapSDK implements IParaSwapSDK {
|