Skip to content

Commit d18f7bc

Browse files
committed
Merge branch 'feat/uniswap-v4' into aburkut/back-1881-uni-v4-event-based
2 parents d7e3271 + 5580993 commit d18f7bc

File tree

10 files changed

+93
-57
lines changed

10 files changed

+93
-57
lines changed

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@paraswap/dex-lib",
3-
"version": "4.1.9",
3+
"version": "4.1.10",
44
"main": "build/index.js",
55
"types": "build/index.d.ts",
66
"repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -54,7 +54,7 @@
5454
"@0x/utils": "^4.5.2",
5555
"@balancer-labs/balancer-maths": "^0.0.19",
5656
"@balancer-labs/sor": "4.1.3",
57-
"@bgd-labs/aave-address-book": "4.9.0",
57+
"@bgd-labs/aave-address-book": "4.15.1",
5858
"@ethersproject/abi": "^5.7.0",
5959
"@hashflow/sdk": "^2.2.7",
6060
"@hashflow/taker-js": "^0.3.7",

src/dex-helper/dummy-dex-helper.ts

+10
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ export class DummyDexHelper implements IDexHelper {
329329
rpcUrl ? rpcUrl : this.config.data.privateHttpProvider,
330330
network,
331331
);
332+
332333
this.web3Provider = new Web3(
333334
rpcUrl ? rpcUrl : this.config.data.privateHttpProvider,
334335
);
@@ -365,5 +366,14 @@ export class DummyDexHelper implements IDexHelper {
365366

366367
replaceProviderWithRPC(rpcUrl: string) {
367368
this.provider = new StaticJsonRpcProvider(rpcUrl, this.config.data.network);
369+
this.web3Provider = new Web3(rpcUrl);
370+
this.multiContract = new this.web3Provider.eth.Contract(
371+
multiABIV2 as any,
372+
this.config.data.multicallV2Address,
373+
);
374+
this.multiWrapper = new MultiWrapper(
375+
this.multiContract,
376+
this.getLogger(`MultiWrapper-${this.config.data.network}`),
377+
);
368378
}
369379
}

src/dex/aave-v3-stata-v2/aave-v3-stata-v2-e2e.test.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -264,28 +264,28 @@ describe('AaveV3Stata E2E', () => {
264264
});
265265

266266
// no tokens yet deployed
267-
describe.skip('Optimism', () => {
267+
describe('Optimism', () => {
268268
const network = Network.OPTIMISM;
269269

270270
const pairs: { name: string; amount: string; skipBuy?: boolean }[][] = [
271271
[
272272
{
273-
name: 'USDT',
273+
name: 'USDC',
274274
amount: '100000',
275275
},
276276
{
277-
name: 'stataUSDT',
277+
name: 'stataUSDC',
278278
amount: '100000',
279279
},
280280
],
281281
[
282282
{
283-
name: 'aaveUSDT',
283+
name: 'aOptUSDCn',
284284
amount: '100000',
285285
skipBuy: true,
286286
},
287287
{
288-
name: 'stataUSDT',
288+
name: 'stataUSDC', // no holders
289289
amount: '100000',
290290
},
291291
],

src/dex/aave-v3-stata-v2/aave-v3-stata-v2.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export class AaveV3StataV2
103103

104104
let tokenList = await fetchTokenList(
105105
this.dexHelper.web3Provider,
106-
this.config.factoryAddresses,
106+
this.config,
107107
this.dexHelper.multiWrapper,
108108
blockNumber,
109109
);
@@ -216,7 +216,7 @@ export class AaveV3StataV2
216216
true,
217217
[
218218
{
219-
target: this.config.pool,
219+
target: stataToken.pool,
220220
callData: AaveV3StataV2.pool.encodeFunctionData(
221221
'getReserveNormalizedIncome',
222222
[stataToken.underlying],

src/dex/aave-v3-stata-v2/config.ts

+31-24
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,36 @@ import {
1212

1313
export const AaveV3StataConfig: DexConfigMap<DexParams> = {
1414
AaveV3StataV2: {
15-
[Network.MAINNET]: {
16-
factoryAddresses: [
17-
AaveV3Ethereum.STATA_FACTORY,
18-
AaveV3EthereumLido.STATA_FACTORY,
19-
],
20-
pool: AaveV3Ethereum.POOL,
21-
},
22-
[Network.GNOSIS]: {
23-
factoryAddresses: [AaveV3Gnosis.STATA_FACTORY],
24-
pool: AaveV3Gnosis.POOL,
25-
},
26-
// Waiting for BalancerV3 to get released on Optimism
27-
// [Network.OPTIMISM]: {
28-
// factoryAddresses: [AaveV3Optimism.STATA_FACTORY],
29-
// pool: AaveV3Optimism.POOL,
30-
// },
31-
[Network.ARBITRUM]: {
32-
factoryAddresses: [AaveV3Arbitrum.STATA_FACTORY],
33-
pool: AaveV3Arbitrum.POOL,
34-
},
35-
[Network.BASE]: {
36-
factoryAddresses: [AaveV3Base.STATA_FACTORY],
37-
pool: AaveV3Base.POOL,
38-
},
15+
[Network.MAINNET]: [
16+
{ factory: AaveV3Ethereum.STATA_FACTORY, pool: AaveV3Ethereum.POOL },
17+
{
18+
factory: AaveV3EthereumLido.STATA_FACTORY,
19+
pool: AaveV3EthereumLido.POOL,
20+
},
21+
],
22+
[Network.GNOSIS]: [
23+
{
24+
factory: AaveV3Gnosis.STATA_FACTORY,
25+
pool: AaveV3Gnosis.POOL,
26+
},
27+
],
28+
[Network.OPTIMISM]: [
29+
{
30+
factory: AaveV3Optimism.STATA_FACTORY,
31+
pool: AaveV3Optimism.POOL,
32+
},
33+
],
34+
[Network.ARBITRUM]: [
35+
{
36+
factory: AaveV3Arbitrum.STATA_FACTORY,
37+
pool: AaveV3Arbitrum.POOL,
38+
},
39+
],
40+
[Network.BASE]: [
41+
{
42+
factory: AaveV3Base.STATA_FACTORY,
43+
pool: AaveV3Base.POOL,
44+
},
45+
],
3946
},
4047
};

src/dex/aave-v3-stata-v2/types.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ export enum TokenType {
88
}
99

1010
export type DexParams = {
11-
factoryAddresses: string[];
11+
factory: string;
1212
pool: string;
13-
};
13+
}[];
1414

1515
export type AaveV3StataV2Data = {
1616
exchange: Address;
@@ -24,6 +24,7 @@ export type StataToken = {
2424
underlyingAToken: string;
2525
stataSymbol: string;
2626
decimals: number;
27+
pool: string;
2728
};
2829

2930
export enum StataFunctions {

src/dex/aave-v3-stata-v2/utils.ts

+18-10
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,26 @@ import { Interface } from '@ethersproject/abi';
66
import Web3 from 'web3';
77
import { MultiCallParams, MultiWrapper } from '../../lib/multi-wrapper';
88
import { stringDecode, uint8ToNumber, addressDecode } from '../../lib/decoders';
9-
import { StataToken } from './types';
9+
import { StataToken, DexParams } from './types';
1010
import FactoryABI from '../../abi/aavev3statav2/Factory.json';
1111
import TokenABI from '../../abi/aavev3statav2/Token.json';
1212
import { AbiItem } from 'web3-utils';
1313

14+
type PoolAndToken = {
15+
token: string;
16+
pool: string;
17+
};
18+
1419
// const stataInterface = new Interface(IStaticATokenLM_ABI);
1520
const statav2Interface = new Interface(TokenABI);
1621

1722
async function getTokenMetaData(
18-
stataTokens: string[],
23+
stataTokens: PoolAndToken[],
1924
multiWrapper: MultiWrapper,
2025
blockNumber?: number,
2126
): Promise<StataToken[]> {
2227
const calls: MultiCallParams<any>[] = stataTokens
23-
.map(token => {
28+
.map(({ token }) => {
2429
return [
2530
{
2631
target: token,
@@ -54,7 +59,8 @@ async function getTokenMetaData(
5459
let tokenList: StataToken[] = [];
5560
for (let i = 0, x = 0; i < stataTokens.length; ++i, x += 4) {
5661
tokenList.push({
57-
address: stataTokens[i].toLowerCase(),
62+
address: stataTokens[i].token.toLowerCase(),
63+
pool: stataTokens[i].pool.toLowerCase(),
5864
stataSymbol: results[x] as string,
5965
decimals: results[x + 1] as number,
6066
underlying: (results[x + 2] as string).toLowerCase(),
@@ -66,22 +72,24 @@ async function getTokenMetaData(
6672

6773
export const fetchTokenList = async (
6874
web3Provider: Web3,
69-
factoryAddresses: string[],
75+
config: DexParams,
7076
multiWrapper: MultiWrapper,
7177
blockNumber?: number,
7278
): Promise<StataToken[]> => {
73-
let stataList: string[] = (
79+
let stataList: PoolAndToken[] = (
7480
(await Promise.all(
75-
factoryAddresses.map(async factoryAddress => {
81+
config.map(async ({ factory, pool }) => {
7682
let factoryContract = new web3Provider.eth.Contract(
7783
FactoryABI as AbiItem[],
7884
// IStaticATokenFactory_ABI as any,
79-
factoryAddress,
85+
factory,
8086
);
8187

82-
return await factoryContract.methods.getStataTokens().call();
88+
return (
89+
(await factoryContract.methods.getStataTokens().call()) as string[]
90+
).map(address => ({ token: address, pool }));
8391
}),
84-
)) as string[][]
92+
)) as PoolAndToken[][]
8593
).flat();
8694

8795
return getTokenMetaData(stataList, multiWrapper, blockNumber);

src/dex/aave-v3-stata/config.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,28 @@ import {
1717
export const AaveV3StataConfig: DexConfigMap<DexParams> = {
1818
AaveV3Stata: {
1919
[Network.MAINNET]: {
20-
factoryAddress: AaveV3Ethereum.STATIC_A_TOKEN_FACTORY,
20+
factoryAddress: AaveV3Ethereum.LEGACY_STATIC_A_TOKEN_FACTORY,
2121
},
2222
[Network.POLYGON]: {
23-
factoryAddress: AaveV3Polygon.STATIC_A_TOKEN_FACTORY,
23+
factoryAddress: AaveV3Polygon.LEGACY_STATIC_A_TOKEN_FACTORY,
2424
},
2525
[Network.AVALANCHE]: {
26-
factoryAddress: AaveV3Avalanche.STATIC_A_TOKEN_FACTORY,
26+
factoryAddress: AaveV3Avalanche.LEGACY_STATIC_A_TOKEN_FACTORY,
2727
},
2828
[Network.ARBITRUM]: {
29-
factoryAddress: AaveV3Arbitrum.STATIC_A_TOKEN_FACTORY,
29+
factoryAddress: AaveV3Arbitrum.LEGACY_STATIC_A_TOKEN_FACTORY,
3030
},
3131
[Network.OPTIMISM]: {
32-
factoryAddress: AaveV3Optimism.STATIC_A_TOKEN_FACTORY,
32+
factoryAddress: AaveV3Optimism.LEGACY_STATIC_A_TOKEN_FACTORY,
3333
},
3434
[Network.BASE]: {
35-
factoryAddress: AaveV3Base.STATIC_A_TOKEN_FACTORY,
35+
factoryAddress: AaveV3Base.LEGACY_STATIC_A_TOKEN_FACTORY,
3636
},
3737
[Network.BSC]: {
38-
factoryAddress: AaveV3BNB.STATIC_A_TOKEN_FACTORY,
38+
factoryAddress: AaveV3BNB.LEGACY_STATIC_A_TOKEN_FACTORY,
3939
},
4040
[Network.GNOSIS]: {
41-
factoryAddress: AaveV3Gnosis.STATIC_A_TOKEN_FACTORY,
41+
factoryAddress: AaveV3Gnosis.LEGACY_STATIC_A_TOKEN_FACTORY,
4242
},
4343
// [Network.Scroll]: {
4444
// factoryAddress: AaveV3Scroll.STATIC_A_TOKEN_FACTORY,

tests/constants-e2e.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1411,6 +1411,14 @@ export const Tokens: {
14111411
address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
14121412
decimals: 6,
14131413
},
1414+
stataUSDC: {
1415+
address: '0x41B334E9F2C0ED1f30fD7c351874a6071C53a78E',
1416+
decimals: 6,
1417+
},
1418+
aOptUSDCn: {
1419+
address: '0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5',
1420+
decimals: 6,
1421+
},
14141422
USDT: {
14151423
address: '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58',
14161424
decimals: 6,
@@ -2093,6 +2101,7 @@ export const Holders: {
20932101
POPS: '0x3cbd9044aaabef08ce93a68448e093cff405ad76',
20942102
USDCe: '0xdecc0c09c3b5f6e92ef4184125d5648a66e35298',
20952103
USDC: '0x8aF3827a41c26C7F32C81E93bb66e837e0210D5c',
2104+
aOptUSDCn: '0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5',
20962105
USDT: '0xf977814e90da44bfa03b6295a0616a897441acec',
20972106
OP: '0xEBb8EA128BbdFf9a1780A4902A9380022371d466',
20982107
aOptWETH: '0x7B7D80C40415F744864f051B806b466e2fbB8E68',
@@ -2112,6 +2121,7 @@ export const Holders: {
21122121
LUSD: '0xf0a9abb11958a071e168f2ee5bcbacf1abbde9cf',
21132122
GRAI: '0x92b051204816DC4fbA7AC1A68a2cf319A9a387CB',
21142123
stataUSDT: '0xd55263b84685Ced7e10a77607C7fFD763D495B6e',
2124+
stataUSDC: '0x450C01300B83bE379113256038b4Dd3b45d23B5e',
21152125
aaveUSDT: '0x1Fd458C52fEb7Bb35097ebd9566DB6C269341FDD',
21162126
tBTC: '0xf7b4531e52211CC44379102F719cad29411dB053',
21172127
PSTAKE: '0xc45398444B83183b2018e0224B3D332b42D492Af',

yarn.lock

+4-4
Original file line numberDiff line numberDiff line change
@@ -365,10 +365,10 @@
365365
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
366366
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
367367

368-
"@bgd-labs/aave-address-book@4.9.0":
369-
version "4.9.0"
370-
resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-4.9.0.tgz#b4b1be4bf14fb7f3e76be0dd8583bbdaf09b564c"
371-
integrity sha512-abw6Z1p8Kt0DSlXXWs8kiiadONS49KgcOIn6WW7fSMzFRFZ3HYoRUt/hu6uNfEmbQ5cO9Qe+leAp2O+o9oovWw==
368+
"@bgd-labs/aave-address-book@4.15.1":
369+
version "4.15.1"
370+
resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-4.15.1.tgz#6a4804be31b03e1904e8d7a7f150c9b7658a8b02"
371+
integrity sha512-fHhrrR1bOsIGgZwoenBQjD0chEhLBqxpId8GND1Z/s59SSezZg2yWgVtvRN4xyCGEaGmeYpdPgRclMVWzNb5og==
372372

373373
"@cspotcode/source-map-support@^0.8.0":
374374
version "0.8.1"

0 commit comments

Comments
 (0)