@1delta/margin-fetcher 0.0.31 → 0.0.33
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/dist/abis/oracle/UniV3.d.ts +50 -0
- package/dist/abis/oracle/UniV3.d.ts.map +1 -0
- package/dist/abis/oracle/UniV3.js +63 -0
- package/dist/assets/index.d.ts +3 -8
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +12 -30
- package/dist/assets/liquidityThresholds.d.ts.map +1 -1
- package/dist/assets/liquidityThresholds.js +3 -3
- package/dist/flash-liquidity/assets.d.ts.map +1 -1
- package/dist/flash-liquidity/assets.js +22 -13
- package/dist/flash-liquidity/fetchLiquidity.d.ts +2 -2
- package/dist/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
- package/dist/flash-liquidity/fetchLiquidity.js +11 -10
- package/dist/flash-liquidity/utils.d.ts +3 -2
- package/dist/flash-liquidity/utils.d.ts.map +1 -1
- package/dist/flash-liquidity/utils.js +5 -5
- package/dist/lending/aave-v2-type/misc.d.ts +1 -1
- package/dist/lending/aave-v2-type/misc.d.ts.map +1 -1
- package/dist/lending/aave-v2-type/misc.js +7 -3
- package/dist/lending/aave-v2-type/publicCallBuild.d.ts +1 -1
- package/dist/lending/aave-v2-type/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/aave-v2-type/publicCallBuild.js +11 -11
- package/dist/lending/aave-v2-type/publicCallParse.d.ts +1 -1
- package/dist/lending/aave-v2-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v2-type/publicCallParse.js +5 -5
- package/dist/lending/aave-v3-type/publicCallBuild.d.ts +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.js +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.d.ts +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +5 -14
- package/dist/lending/addresses/aave.js +1 -1
- package/dist/lending/addresses/aaveV2.js +1 -1
- package/dist/lending/addresses/aurelius.js +1 -1
- package/dist/lending/addresses/compoundV3.d.ts +1 -1
- package/dist/lending/addresses/compoundV3.d.ts.map +1 -1
- package/dist/lending/addresses/compoundV3.js +5 -4
- package/dist/lending/addresses/contracts.d.ts +1 -1
- package/dist/lending/addresses/contracts.d.ts.map +1 -1
- package/dist/lending/addresses/contracts.js +1 -1
- package/dist/lending/addresses/hana.js +1 -1
- package/dist/lending/addresses/init.js +1 -1
- package/dist/lending/addresses/lendle.js +1 -1
- package/dist/lending/addresses/meridian.js +1 -1
- package/dist/lending/addresses/takotako.js +1 -1
- package/dist/lending/compound-v3/publicCallBuild.d.ts +1 -1
- package/dist/lending/compound-v3/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.d.ts +1 -1
- package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.js +3 -9
- package/dist/lending/fetchLender.d.ts +1 -1
- package/dist/lending/fetchLender.d.ts.map +1 -1
- package/dist/lending/fetchLender.js +1 -1
- package/dist/lending/fetchLenderAll.d.ts +1 -1
- package/dist/lending/fetchLenderAll.d.ts.map +1 -1
- package/dist/lending/fetchLenderAll.js +1 -1
- package/dist/lending/fetchLenderExt.d.ts +1 -1
- package/dist/lending/fetchLenderExt.d.ts.map +1 -1
- package/dist/lending/index.d.ts +1 -0
- package/dist/lending/index.d.ts.map +1 -1
- package/dist/lending/index.js +1 -0
- package/dist/lending/init/publicCallBuild.d.ts +1 -1
- package/dist/lending/init/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/init/publicCallParse.d.ts +4 -4
- package/dist/lending/init/publicCallParse.d.ts.map +1 -1
- package/dist/lending/init/publicCallParse.js +7 -7
- package/dist/lending/meta/index.d.ts +19 -0
- package/dist/lending/meta/index.d.ts.map +1 -0
- package/dist/lending/meta/index.js +83 -0
- package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallBuild.js +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts +2 -2
- package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallParse.js +44 -38
- package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParse.js +5 -5
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts +2 -2
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +15 -15
- package/dist/lending/user-data/abis.d.ts +1 -1
- package/dist/lending/user-data/abis.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallBuild.d.ts +1 -1
- package/dist/lending/user-data/compound-v3/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.js +4 -4
- package/dist/lending/user-data/init/userCallBuild.d.ts +2 -2
- package/dist/lending/user-data/init/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/init/userCallBuild.js +3 -3
- package/dist/lending/user-data/init/userCallParse.d.ts +1 -1
- package/dist/lending/user-data/init/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/init/userCallParse.js +4 -4
- package/dist/lending/user-data/morpho/userCallBuild.d.ts +1 -1
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallBuild.js +6 -4
- package/dist/lending/user-data/morpho/userCallParse.d.ts +1 -1
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.js +5 -5
- package/dist/lending/user-data/types.js +1 -1
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.js +6 -6
- package/dist/prices/defillama/index.d.ts.map +1 -1
- package/dist/prices/defillama/index.js +21 -0
- package/dist/prices/main-prices/addresses/api3.js +1 -1
- package/dist/prices/main-prices/addresses/chainlink.js +1 -1
- package/dist/prices/main-prices/fetchOracleData.d.ts +6 -0
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +80 -20
- package/dist/types/index.d.ts +8 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/utils/constants.js +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +29 -26
- package/dist/utils/parsing.d.ts +1 -1
- package/dist/utils/parsing.d.ts.map +1 -1
- package/dist/utils/parsing.js +9 -8
- package/dist/yields/index.d.ts.map +1 -1
- package/dist/yields/index.js +7 -3
- package/package.json +2 -2
- package/src/abis/oracle/UniV3.ts +63 -0
- package/src/assets/index.ts +26 -66
- package/src/assets/liquidityThresholds.ts +55 -43
- package/src/flash-liquidity/assets.ts +68 -44
- package/src/flash-liquidity/fetchLiquidity.ts +13 -14
- package/src/flash-liquidity/utils.ts +22 -16
- package/src/lending/aave-v2-type/misc.ts +7 -3
- package/src/lending/aave-v2-type/publicCallBuild.ts +28 -17
- package/src/lending/aave-v2-type/publicCallParse.ts +5 -5
- package/src/lending/aave-v3-type/publicCallBuild.ts +1 -1
- package/src/lending/aave-v3-type/publicCallParse.ts +4 -14
- package/src/lending/addresses/aave.ts +1 -1
- package/src/lending/addresses/aaveV2.ts +1 -1
- package/src/lending/addresses/aurelius.ts +1 -1
- package/src/lending/addresses/compoundV3.ts +5 -12
- package/src/lending/addresses/contracts.ts +1 -1
- package/src/lending/addresses/hana.ts +1 -1
- package/src/lending/addresses/init.ts +1 -1
- package/src/lending/addresses/lendle.ts +1 -1
- package/src/lending/addresses/meridian.ts +1 -1
- package/src/lending/addresses/takotako.ts +1 -1
- package/src/lending/compound-v3/publicCallBuild.ts +1 -1
- package/src/lending/compound-v3/publicCallParse.ts +3 -10
- package/src/lending/fetchLender.ts +1 -1
- package/src/lending/fetchLenderAll.ts +1 -1
- package/src/lending/fetchLenderExt.ts +1 -1
- package/src/lending/index.ts +1 -0
- package/src/lending/init/publicCallBuild.ts +1 -1
- package/src/lending/init/publicCallParse.ts +64 -48
- package/src/lending/meta/index.ts +124 -0
- package/src/lending/morpho/publicCallBuild.ts +0 -1
- package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -1
- package/src/lending/user-data/aave-v2-type/userCallParse.ts +181 -122
- package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -1
- package/src/lending/user-data/aave-v3-type/userCallParse.ts +7 -8
- package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +37 -34
- package/src/lending/user-data/abis.ts +1 -1
- package/src/lending/user-data/compound-v3/userCallBuild.ts +1 -1
- package/src/lending/user-data/compound-v3/userCallParse.ts +4 -6
- package/src/lending/user-data/fetchUserData.ts +1 -1
- package/src/lending/user-data/init/userCallBuild.ts +11 -7
- package/src/lending/user-data/init/userCallParse.ts +5 -5
- package/src/lending/user-data/morpho/userCallBuild.ts +7 -4
- package/src/lending/user-data/morpho/userCallParse.ts +8 -5
- package/src/lending/user-data/types.ts +1 -1
- package/src/lending-pairs/computeLendingPairs.ts +6 -12
- package/src/prices/defillama/index.ts +24 -0
- package/src/prices/main-prices/addresses/api3.ts +1 -1
- package/src/prices/main-prices/addresses/chainlink.ts +1 -1
- package/src/prices/main-prices/fetchOracleData.ts +118 -20
- package/src/types/index.ts +10 -4
- package/src/utils/constants.ts +1 -1
- package/src/utils/index.ts +48 -39
- package/src/utils/parsing.ts +37 -35
- package/src/yields/index.ts +7 -3
- package/test/flashLiquidity.test.ts +6 -6
- package/test/index.test.ts +1 -1
- package/test/lenderData.test.ts +10 -11
- package/test/lenderDataBasic.test.ts +1 -1
- package/test/mainPriceMB.test.ts +1 -1
- package/test/mainPrices.test.ts +16 -15
- package/test/morpho.test.ts +1 -1
- package/test/morphoPrice.test.ts +1 -1
- package/test/userData.test.ts +2 -1
- package/test/userDataAave.test.ts +1 -1
- package/test/userDataAaveMainnet.test.ts +1 -1
- package/test/userDataAll.test.ts +2 -1
- package/test/userDataCompound.test.ts +2 -1
- package/test/userDataMorpho.test.ts +2 -1
- package/test/userDataMorphoEthereum.test.ts +2 -1
- package/test/userDataMorphoKatana.test.ts +2 -1
- package/test/utils.ts +11 -1
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +0 -11
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +0 -1
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +0 -112
- package/dist/prices/main-prices/addresses/aaveOracles.d.ts +0 -300
- package/dist/prices/main-prices/addresses/aaveOracles.d.ts.map +0 -1
- package/dist/prices/main-prices/addresses/aaveOracles.js +0 -299
- package/dist/prices/main-prices/addresses/morpho.d.ts +0 -11
- package/dist/prices/main-prices/addresses/morpho.d.ts.map +0 -1
- package/dist/prices/main-prices/addresses/morpho.js +0 -2554
- package/src/lending/user-data/morpho/userCallParseNoDeploy.ts +0 -168
- package/src/prices/main-prices/addresses/aaveOracles.ts +0 -299
- package/src/prices/main-prices/addresses/morpho.ts +0 -2563
package/dist/utils/parsing.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { Chain
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Chain } from '@1delta/chain-registry';
|
|
2
|
+
import { Lender } from '@1delta/lender-registry';
|
|
3
|
+
import { formatEther, formatUnits } from 'viem';
|
|
4
|
+
import { isCompoundV3 } from '.';
|
|
4
5
|
export const BPS = 10000;
|
|
5
6
|
export const parseRawAmount = (answer, decimals = 18) => {
|
|
6
|
-
if (!answer || answer ===
|
|
7
|
-
return
|
|
7
|
+
if (!answer || answer === '0x')
|
|
8
|
+
return '0';
|
|
8
9
|
try {
|
|
9
|
-
return formatUnits(BigInt(answer ??
|
|
10
|
+
return formatUnits(BigInt(answer ?? '0'), decimals ?? 18);
|
|
10
11
|
}
|
|
11
12
|
catch (e) {
|
|
12
|
-
return
|
|
13
|
+
return '0';
|
|
13
14
|
}
|
|
14
15
|
};
|
|
15
16
|
export var TimeScale;
|
|
@@ -31,7 +32,7 @@ export const apyToApr = (apy) => {
|
|
|
31
32
|
return ((apy + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR;
|
|
32
33
|
};
|
|
33
34
|
export const apyToAprPercent = (apy) => {
|
|
34
|
-
return 100 * ((apy / 100 + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR;
|
|
35
|
+
return (100 * ((apy / 100 + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR);
|
|
35
36
|
};
|
|
36
37
|
export const formatAaveYieldToNumber = (n) => {
|
|
37
38
|
if (!n)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yields/index.ts"],"names":[],"mappings":"AAkGA,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,oBAAoB,EAAE,GAAG,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IACxD,aAAa,EAAE;QACb,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,CAAC,MAAM,EAAE,MAAM,GAAG;gBAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAA;aAAE,CAAA;SACzD,CAAA;KACF,CAAA;CACF;AAcD,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yields/index.ts"],"names":[],"mappings":"AAkGA,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,oBAAoB,EAAE,GAAG,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IACxD,aAAa,EAAE;QACb,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,CAAC,MAAM,EAAE,MAAM,GAAG;gBAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAA;aAAE,CAAA;SACzD,CAAA;KACF,CAAA;CACF;AAcD,eAAO,MAAM,kBAAkB,uCAgc9B,CAAA"}
|
package/dist/yields/index.js
CHANGED
|
@@ -120,8 +120,9 @@ export const fetchGeneralYields = async () => {
|
|
|
120
120
|
return aYield + (wstethRes ?? 0);
|
|
121
121
|
});
|
|
122
122
|
const stmaticPromise = safeFetch('STMATIC', async () => {
|
|
123
|
-
const res = await fetch(FeedData.STMATIC).then((r) => r.json())
|
|
124
|
-
return Number(res.apr) * 0.9
|
|
123
|
+
// const res = await fetch(FeedData.STMATIC).then((r) => r.json())
|
|
124
|
+
// return Number(res.apr) * 0.9
|
|
125
|
+
return 0;
|
|
125
126
|
});
|
|
126
127
|
const savaxPromise = safeFetch('SAVAX', async () => {
|
|
127
128
|
const res = await fetch(FeedData.SAVAX).then((r) => r.json());
|
|
@@ -183,7 +184,10 @@ export const fetchGeneralYields = async () => {
|
|
|
183
184
|
Object.entries(res).forEach(([addr, data]) => {
|
|
184
185
|
const key = addressToAssetYearn[addr.toLowerCase()];
|
|
185
186
|
if (key) {
|
|
186
|
-
const apr = ((data.apr.netAPR ?? 0) +
|
|
187
|
+
const apr = ((data.apr.netAPR ?? 0) +
|
|
188
|
+
(data.apr.extra.extrinsicYield ?? 0) +
|
|
189
|
+
(data.apr.extra.katanaNativeYield ?? 0)) *
|
|
190
|
+
100;
|
|
187
191
|
map[key] = apr;
|
|
188
192
|
}
|
|
189
193
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1delta/margin-fetcher",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.33",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@types/async-retry": "^1.4.9",
|
|
18
18
|
"async-retry": "^1.3.3",
|
|
19
19
|
"typescript": "^5.9.2",
|
|
20
|
-
"@1delta/providers": "0.0.
|
|
20
|
+
"@1delta/providers": "0.0.12"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "tsc",
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export const UniswapV3Abi = [
|
|
2
|
+
{
|
|
3
|
+
inputs: [],
|
|
4
|
+
name: 'protocolFees',
|
|
5
|
+
outputs: [
|
|
6
|
+
{
|
|
7
|
+
internalType: 'uint128',
|
|
8
|
+
name: 'token0',
|
|
9
|
+
type: 'uint128',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
internalType: 'uint128',
|
|
13
|
+
name: 'token1',
|
|
14
|
+
type: 'uint128',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
stateMutability: 'view',
|
|
18
|
+
type: 'function',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
inputs: [],
|
|
22
|
+
name: 'slot0',
|
|
23
|
+
outputs: [
|
|
24
|
+
{
|
|
25
|
+
internalType: 'uint160',
|
|
26
|
+
name: 'sqrtPriceX96',
|
|
27
|
+
type: 'uint160',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
internalType: 'int24',
|
|
31
|
+
name: 'tick',
|
|
32
|
+
type: 'int24',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
internalType: 'uint16',
|
|
36
|
+
name: 'observationIndex',
|
|
37
|
+
type: 'uint16',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
internalType: 'uint16',
|
|
41
|
+
name: 'observationCardinality',
|
|
42
|
+
type: 'uint16',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
internalType: 'uint16',
|
|
46
|
+
name: 'observationCardinalityNext',
|
|
47
|
+
type: 'uint16',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
internalType: 'uint8',
|
|
51
|
+
name: 'feeProtocol',
|
|
52
|
+
type: 'uint8',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
internalType: 'bool',
|
|
56
|
+
name: 'unlocked',
|
|
57
|
+
type: 'bool',
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
stateMutability: 'view',
|
|
61
|
+
type: 'function',
|
|
62
|
+
},
|
|
63
|
+
] as const
|
package/src/assets/index.ts
CHANGED
|
@@ -1,90 +1,50 @@
|
|
|
1
|
+
import { isAaveType, isCompoundV3 } from '../utils'
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
COMPOUND_V2_STYLE_RESERVE_ASSETS,
|
|
8
|
-
INIT_STYLE_RESERVE_ASSETS,
|
|
9
|
-
Lender,
|
|
10
|
-
SWAYLEND_RESERVE_ASSETS,
|
|
11
|
-
} from "@1delta/asset-registry";
|
|
12
|
-
import { isAaveType, isCompoundV3, isInit, isSwaylend } from "../utils";
|
|
3
|
+
aaveTokens,
|
|
4
|
+
aavePools,
|
|
5
|
+
aaveReserves,
|
|
6
|
+
compoundV3Reserves,
|
|
7
|
+
} from '@1delta/data-sdk'
|
|
13
8
|
|
|
14
9
|
/** No specific configuration */
|
|
15
|
-
export const LENDER_MODE_NO_MODE = 0
|
|
10
|
+
export const LENDER_MODE_NO_MODE = 0
|
|
16
11
|
|
|
17
12
|
export function getAaveStyleProtocolTokenMap(chainId: string, lender: string) {
|
|
18
|
-
return
|
|
13
|
+
return aaveTokens()?.[lender]?.[chainId] as any
|
|
19
14
|
}
|
|
20
15
|
|
|
21
16
|
export const getAaveAssets = (
|
|
22
17
|
chainId: string | undefined,
|
|
23
|
-
lendingProtocol: string
|
|
18
|
+
lendingProtocol: string | undefined,
|
|
24
19
|
): string[] => {
|
|
25
|
-
if (isAaveType(lendingProtocol))
|
|
26
|
-
return
|
|
27
|
-
return []
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export const getInitAssets = (
|
|
31
|
-
chainId: string | undefined,
|
|
32
|
-
lendingProtocol = Lender.INIT
|
|
33
|
-
): string[] => {
|
|
34
|
-
if (isInit(lendingProtocol))
|
|
35
|
-
return INIT_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId ?? "0"] ?? [];
|
|
36
|
-
return [];
|
|
37
|
-
};
|
|
20
|
+
if (isAaveType(lendingProtocol ?? ''))
|
|
21
|
+
return aaveReserves()?.[lendingProtocol ?? '']?.[chainId ?? ''] ?? []
|
|
22
|
+
return []
|
|
23
|
+
}
|
|
38
24
|
|
|
39
25
|
export const getCompoundV3Assets = (
|
|
40
26
|
chainId: string | undefined,
|
|
41
|
-
lendingProtocol
|
|
27
|
+
lendingProtocol: string | undefined,
|
|
42
28
|
): string[] => {
|
|
43
|
-
if (isCompoundV3(lendingProtocol))
|
|
44
|
-
return (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return [];
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export const getCompoundV2Assets = (
|
|
51
|
-
chainId: string | undefined,
|
|
52
|
-
lendingProtocol = Lender.VENUS
|
|
53
|
-
): string[] => {
|
|
54
|
-
if (isCompoundV3(lendingProtocol))
|
|
55
|
-
return (
|
|
56
|
-
COMPOUND_V2_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId ?? "0"] ?? []
|
|
57
|
-
);
|
|
58
|
-
return [];
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export const getSwaylendAssets = (
|
|
62
|
-
chainId: string | undefined,
|
|
63
|
-
lendingProtocol = Lender.SWAYLEND_USDC
|
|
64
|
-
): string[] => {
|
|
65
|
-
if (isSwaylend(lendingProtocol))
|
|
66
|
-
return SWAYLEND_RESERVE_ASSETS[lendingProtocol]?.[chainId ?? "0"] ?? [];
|
|
67
|
-
return [];
|
|
68
|
-
};
|
|
29
|
+
if (isCompoundV3(lendingProtocol ?? ''))
|
|
30
|
+
return compoundV3Reserves()?.[lendingProtocol ?? '']?.[chainId ?? '']
|
|
31
|
+
return []
|
|
32
|
+
}
|
|
69
33
|
|
|
70
34
|
export function getAaveTypePoolDataProviderAddress(
|
|
71
35
|
chainId: string,
|
|
72
|
-
lender: string
|
|
36
|
+
lender: string,
|
|
73
37
|
) {
|
|
74
38
|
// @ts-ignore
|
|
75
|
-
return
|
|
39
|
+
return aavePools()?.[lender]?.[chainId]?.protocolDataProvider
|
|
76
40
|
}
|
|
77
41
|
|
|
78
42
|
export function getAaveTypePoolAddress(
|
|
79
43
|
chainId: string,
|
|
80
|
-
lender: string
|
|
44
|
+
lender: string,
|
|
81
45
|
): string {
|
|
82
46
|
// @ts-ignore
|
|
83
|
-
return
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export function getAssetMeta(chainId: string, asset: string | undefined) {
|
|
87
|
-
return ASSET_META[chainId ?? "0"]?.[asset?.toLowerCase() ?? ""] as any;
|
|
47
|
+
return aavePools()?.[lender]?.[chainId]?.pool
|
|
88
48
|
}
|
|
89
49
|
|
|
90
50
|
/**
|
|
@@ -93,9 +53,9 @@ export function getAssetMeta(chainId: string, asset: string | undefined) {
|
|
|
93
53
|
* @returns SupportedAsset
|
|
94
54
|
*/
|
|
95
55
|
export const toOracleKey = (a: string) => {
|
|
96
|
-
return a
|
|
97
|
-
}
|
|
56
|
+
return a
|
|
57
|
+
}
|
|
98
58
|
|
|
99
59
|
export const toGenericPriceKey = (assetAddress: string, chainId: string) => {
|
|
100
|
-
return chainId +
|
|
101
|
-
}
|
|
60
|
+
return chainId + '-' + assetAddress
|
|
61
|
+
}
|
|
@@ -1,30 +1,32 @@
|
|
|
1
|
-
import { Chain } from
|
|
1
|
+
import { Chain } from '@1delta/chain-registry'
|
|
2
2
|
|
|
3
3
|
export interface LiquidityThresholds {
|
|
4
4
|
/** Minimum total deposits in USD */
|
|
5
|
-
minDepositsUSD: number
|
|
5
|
+
minDepositsUSD: number
|
|
6
6
|
/** Minimum total debt/borrows in USD */
|
|
7
|
-
minDebtUSD: number
|
|
7
|
+
minDebtUSD: number
|
|
8
8
|
/** Minimum total liquidity in USD */
|
|
9
|
-
minLiquidityUSD: number
|
|
9
|
+
minLiquidityUSD: number
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const DEFAULT_LIQUIDITY_THRESHOLDS: LiquidityThresholds = {
|
|
13
|
-
minDepositsUSD: 25_000,
|
|
14
|
-
minDebtUSD: 10_000,
|
|
15
|
-
minLiquidityUSD: 15_000,
|
|
16
|
-
}
|
|
13
|
+
minDepositsUSD: 25_000,
|
|
14
|
+
minDebtUSD: 10_000,
|
|
15
|
+
minLiquidityUSD: 15_000,
|
|
16
|
+
}
|
|
17
17
|
|
|
18
|
-
export const ASSET_GROUP_LIQUIDITY_THRESHOLDS: {
|
|
19
|
-
|
|
18
|
+
export const ASSET_GROUP_LIQUIDITY_THRESHOLDS: {
|
|
19
|
+
[assetGroup: string]: LiquidityThresholds
|
|
20
|
+
} = {
|
|
21
|
+
USDC: {
|
|
20
22
|
minDepositsUSD: 25_000,
|
|
21
23
|
minDebtUSD: 5_000,
|
|
22
24
|
minLiquidityUSD: 15_000,
|
|
23
25
|
},
|
|
24
|
-
}
|
|
26
|
+
}
|
|
25
27
|
|
|
26
28
|
export const CHAIN_THRESHOLD_MULTIPLIERS: { [chainId: string]: number } = {
|
|
27
|
-
[Chain.POLYGON_MAINNET]: 1.0,
|
|
29
|
+
[Chain.POLYGON_MAINNET]: 1.0,
|
|
28
30
|
[Chain.ARBITRUM_ONE]: 1.0,
|
|
29
31
|
[Chain.OP_MAINNET]: 1.0,
|
|
30
32
|
[Chain.BASE]: 1.0,
|
|
@@ -34,69 +36,79 @@ export const CHAIN_THRESHOLD_MULTIPLIERS: { [chainId: string]: number } = {
|
|
|
34
36
|
[Chain.SCROLL]: 0.8,
|
|
35
37
|
[Chain.TAIKO_ALETHIA]: 0.6,
|
|
36
38
|
[Chain.HEMI_NETWORK]: 0.6,
|
|
37
|
-
}
|
|
39
|
+
}
|
|
38
40
|
|
|
39
41
|
/**
|
|
40
42
|
* Asset based overrides (per chain)
|
|
41
43
|
* assetKey format: "chainId-assetAddress" (lowercase)
|
|
42
44
|
*/
|
|
43
|
-
export const ASSET_SPECIFIC_THRESHOLDS: {
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
export const ASSET_SPECIFIC_THRESHOLDS: {
|
|
46
|
+
[assetKey: string]: LiquidityThresholds
|
|
47
|
+
} = {}
|
|
49
48
|
|
|
50
49
|
export function getLiquidityThresholds(
|
|
51
|
-
chainId: string,
|
|
52
|
-
assetAddress: string,
|
|
53
|
-
assetGroup?:string,
|
|
50
|
+
chainId: string,
|
|
51
|
+
assetAddress: string,
|
|
52
|
+
assetGroup?: string,
|
|
54
53
|
): LiquidityThresholds {
|
|
55
54
|
// Check for asset overrides
|
|
56
|
-
const assetKey = `${chainId}-${assetAddress.toLowerCase()}
|
|
55
|
+
const assetKey = `${chainId}-${assetAddress.toLowerCase()}`
|
|
57
56
|
if (ASSET_SPECIFIC_THRESHOLDS[assetKey]) {
|
|
58
|
-
return ASSET_SPECIFIC_THRESHOLDS[assetKey]
|
|
57
|
+
return ASSET_SPECIFIC_THRESHOLDS[assetKey]
|
|
59
58
|
}
|
|
60
59
|
|
|
61
|
-
let baseThresholds =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
let baseThresholds =
|
|
61
|
+
assetGroup && ASSET_GROUP_LIQUIDITY_THRESHOLDS[assetGroup]
|
|
62
|
+
? ASSET_GROUP_LIQUIDITY_THRESHOLDS[assetGroup]
|
|
63
|
+
: DEFAULT_LIQUIDITY_THRESHOLDS
|
|
64
|
+
|
|
65
|
+
const chainMultiplier = CHAIN_THRESHOLD_MULTIPLIERS[chainId] ?? 1.0
|
|
66
|
+
|
|
67
67
|
return {
|
|
68
68
|
minDepositsUSD: Math.floor(baseThresholds.minDepositsUSD * chainMultiplier),
|
|
69
69
|
minDebtUSD: Math.floor(baseThresholds.minDebtUSD * chainMultiplier),
|
|
70
|
-
minLiquidityUSD: Math.floor(
|
|
71
|
-
|
|
70
|
+
minLiquidityUSD: Math.floor(
|
|
71
|
+
baseThresholds.minLiquidityUSD * chainMultiplier,
|
|
72
|
+
),
|
|
73
|
+
}
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
export function meetsLiquidityThresholds(
|
|
75
|
-
pool: {
|
|
76
|
-
|
|
77
|
+
pool: {
|
|
78
|
+
totalDepositsUSD: number
|
|
79
|
+
totalDebtUSD: number
|
|
80
|
+
totalLiquidityUSD: number
|
|
81
|
+
},
|
|
82
|
+
thresholds: LiquidityThresholds,
|
|
77
83
|
): boolean {
|
|
78
84
|
return (
|
|
79
85
|
pool.totalDepositsUSD >= thresholds.minDepositsUSD &&
|
|
80
86
|
pool.totalDebtUSD >= thresholds.minDebtUSD &&
|
|
81
87
|
pool.totalLiquidityUSD >= thresholds.minLiquidityUSD
|
|
82
|
-
)
|
|
88
|
+
)
|
|
83
89
|
}
|
|
84
90
|
|
|
85
91
|
export function meetsLiquidityThresholdsLong(
|
|
86
|
-
pool: {
|
|
87
|
-
|
|
92
|
+
pool: {
|
|
93
|
+
totalDepositsUSD: number
|
|
94
|
+
totalDebtUSD: number
|
|
95
|
+
totalLiquidityUSD: number
|
|
96
|
+
},
|
|
97
|
+
thresholds: LiquidityThresholds,
|
|
88
98
|
): boolean {
|
|
89
|
-
return
|
|
90
|
-
pool.totalDepositsUSD >= thresholds.minDepositsUSD
|
|
91
|
-
);
|
|
99
|
+
return pool.totalDepositsUSD >= thresholds.minDepositsUSD
|
|
92
100
|
}
|
|
93
101
|
|
|
94
102
|
export function meetsLiquidityThresholdsShort(
|
|
95
|
-
pool: {
|
|
96
|
-
|
|
103
|
+
pool: {
|
|
104
|
+
totalDepositsUSD: number
|
|
105
|
+
totalDebtUSD: number
|
|
106
|
+
totalLiquidityUSD: number
|
|
107
|
+
},
|
|
108
|
+
thresholds: LiquidityThresholds,
|
|
97
109
|
): boolean {
|
|
98
110
|
return (
|
|
99
111
|
pool.totalDebtUSD >= thresholds.minDebtUSD &&
|
|
100
112
|
pool.totalLiquidityUSD >= thresholds.minLiquidityUSD
|
|
101
|
-
)
|
|
113
|
+
)
|
|
102
114
|
}
|
|
@@ -1,61 +1,85 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
aaveReserves,
|
|
3
|
+
compoundV2Reserves,
|
|
4
|
+
compoundV3Reserves,
|
|
5
|
+
morphoPools,
|
|
6
|
+
} from '@1delta/data-sdk'
|
|
7
|
+
import {
|
|
8
|
+
BALANCER_V2_FORKS,
|
|
9
|
+
BALANCER_V3_FORKS,
|
|
10
|
+
UNISWAP_V4_FORKS,
|
|
11
|
+
} from '@1delta/dex-registry'
|
|
12
|
+
import { uniq } from 'lodash'
|
|
4
13
|
|
|
5
14
|
function createAssetArrayPerChain() {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
let assetsPerChain: { [chainId: string]: string[] } = {}
|
|
16
|
+
Object.entries(compoundV3Reserves() ?? {}).forEach(([lender, data]) => {
|
|
17
|
+
Object.entries(data).forEach(([chainId, assetArray]) => {
|
|
18
|
+
if (!assetsPerChain[chainId]) assetsPerChain[chainId] = []
|
|
19
|
+
assetsPerChain[chainId] = uniq([
|
|
20
|
+
...assetsPerChain[chainId],
|
|
21
|
+
...assetArray,
|
|
22
|
+
])
|
|
13
23
|
})
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
Object.entries(aaveReserves() ?? {}).forEach(([lender, data]) => {
|
|
27
|
+
Object.entries(data).forEach(([chainId, assetArray]) => {
|
|
28
|
+
if (!assetsPerChain[chainId]) assetsPerChain[chainId] = []
|
|
29
|
+
assetsPerChain[chainId] = uniq([
|
|
30
|
+
...assetsPerChain[chainId],
|
|
31
|
+
...assetArray,
|
|
32
|
+
])
|
|
20
33
|
})
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
Object.entries(compoundV2Reserves() ?? {}).forEach(([lender, data]) => {
|
|
37
|
+
Object.entries(data).forEach(([chainId, assetArray]) => {
|
|
38
|
+
if (!assetsPerChain[chainId]) assetsPerChain[chainId] = []
|
|
39
|
+
assetsPerChain[chainId] = uniq([
|
|
40
|
+
...assetsPerChain[chainId],
|
|
41
|
+
...assetArray,
|
|
42
|
+
])
|
|
27
43
|
})
|
|
28
|
-
|
|
44
|
+
})
|
|
45
|
+
return assetsPerChain
|
|
29
46
|
}
|
|
30
47
|
|
|
31
48
|
export const RELEVANT_LENDING_ASSETS = createAssetArrayPerChain()
|
|
32
49
|
|
|
33
|
-
|
|
34
50
|
interface PoolData {
|
|
35
|
-
|
|
36
|
-
|
|
51
|
+
pool: string
|
|
52
|
+
address: string
|
|
37
53
|
}
|
|
38
54
|
|
|
39
|
-
function createSimpleArrayPerChain(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
function createSimpleArrayPerChain(
|
|
56
|
+
fork: any,
|
|
57
|
+
field: undefined | string = undefined,
|
|
58
|
+
) {
|
|
59
|
+
let pools: { [chainId: string]: PoolData[] } = {}
|
|
60
|
+
Object.entries(fork ?? {}).forEach(([b2, data]: [string, any]) => {
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
Object.entries(field ? data[field] : data).forEach(
|
|
63
|
+
([chainId, address]: [string, any]) => {
|
|
64
|
+
if (!pools[chainId]) pools[chainId] = []
|
|
65
|
+
pools[chainId] = uniq([...pools[chainId], { address, pool: b2 }])
|
|
66
|
+
},
|
|
67
|
+
)
|
|
68
|
+
})
|
|
69
|
+
return pools
|
|
49
70
|
}
|
|
50
71
|
|
|
72
|
+
export const RELEVANT_BALANCER_V2_FORKS =
|
|
73
|
+
createSimpleArrayPerChain(BALANCER_V2_FORKS)
|
|
51
74
|
|
|
52
|
-
export const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
export const RELEVANT_MORPHOB_FORKS = createSimpleArrayPerChain(MORPHO_BLUE_POOL_DATA)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
export const RELEVANT_BALANCER_V3_FORKS = createSimpleArrayPerChain(BALANCER_V3_FORKS, "vault")
|
|
75
|
+
export const RELEVANT_MORPHOB_FORKS = createSimpleArrayPerChain(morphoPools())
|
|
59
76
|
|
|
77
|
+
export const RELEVANT_BALANCER_V3_FORKS = createSimpleArrayPerChain(
|
|
78
|
+
BALANCER_V3_FORKS,
|
|
79
|
+
'vault',
|
|
80
|
+
)
|
|
60
81
|
|
|
61
|
-
export const RELEVANT_UNISWAP_V4_FORKS = createSimpleArrayPerChain(
|
|
82
|
+
export const RELEVANT_UNISWAP_V4_FORKS = createSimpleArrayPerChain(
|
|
83
|
+
UNISWAP_V4_FORKS,
|
|
84
|
+
'pm',
|
|
85
|
+
)
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
getAaveTypePoolAddress,
|
|
4
|
-
getAssetMeta,
|
|
5
|
-
} from '../assets'
|
|
6
|
-
import { AAVES_PER_CHAIN } from '../utils'
|
|
1
|
+
import { getAaveStyleProtocolTokenMap, getAaveTypePoolAddress } from '../assets'
|
|
2
|
+
import { getAavesForChain } from '../utils'
|
|
7
3
|
import {
|
|
8
4
|
RELEVANT_BALANCER_V2_FORKS,
|
|
9
5
|
RELEVANT_BALANCER_V3_FORKS,
|
|
@@ -12,12 +8,12 @@ import {
|
|
|
12
8
|
RELEVANT_UNISWAP_V4_FORKS,
|
|
13
9
|
} from './assets'
|
|
14
10
|
import { Call } from '../utils/multicall'
|
|
15
|
-
import { MulticallRetryFunction } from '../types'
|
|
11
|
+
import { MulticallRetryFunction, TokenList } from '../types'
|
|
16
12
|
import { FlashAbi } from '../abis/flashloan-united/flashAbi'
|
|
17
13
|
import { FlashLiquiditiesOnChain, FlashLoanIds } from './types'
|
|
18
14
|
import { FLASH_LOAN_IDS } from '@1delta/dex-registry'
|
|
19
15
|
import { formatUnits, zeroAddress } from 'viem'
|
|
20
|
-
import { AAVE_V2_LENDERS, AAVE_V3_LENDERS } from '@1delta/
|
|
16
|
+
import { AAVE_V2_LENDERS, AAVE_V3_LENDERS } from '@1delta/lender-registry'
|
|
21
17
|
import _ from 'lodash'
|
|
22
18
|
import { MULTICALL_ADDRESS } from '../utils/constants'
|
|
23
19
|
|
|
@@ -39,13 +35,16 @@ function getFlashLoanEnabled(data: bigint): boolean {
|
|
|
39
35
|
export async function fetchFlashLiquidityForChain(
|
|
40
36
|
chain: string,
|
|
41
37
|
multicallRetry: MulticallRetryFunction,
|
|
38
|
+
list: TokenList = {},
|
|
42
39
|
) {
|
|
43
40
|
let callLengths: { [l: string]: number } = {}
|
|
44
41
|
let aaveAssets: { [l: string]: string[] } = {}
|
|
45
42
|
|
|
46
43
|
let aaveCalls: Call[] = []
|
|
47
44
|
|
|
48
|
-
const
|
|
45
|
+
const aaves = getAavesForChain()
|
|
46
|
+
|
|
47
|
+
const aaveProtocols = aaves[chain] ?? []
|
|
49
48
|
|
|
50
49
|
// we only ned to check aave flash liquidity for aave assets
|
|
51
50
|
aaveProtocols.forEach((aaveFork) => {
|
|
@@ -205,7 +204,7 @@ export async function fetchFlashLiquidityForChain(
|
|
|
205
204
|
currentOffset += callLen
|
|
206
205
|
|
|
207
206
|
aaveAssets[aave].forEach((asset, i) => {
|
|
208
|
-
const decimals =
|
|
207
|
+
const decimals = list[asset]?.decimals
|
|
209
208
|
const rawAmount = data[2 * i]
|
|
210
209
|
|
|
211
210
|
const config = data[2 * i + 1]
|
|
@@ -237,7 +236,7 @@ export async function fetchFlashLiquidityForChain(
|
|
|
237
236
|
currentOffset += callLen
|
|
238
237
|
|
|
239
238
|
otherAssets.forEach((asset, i) => {
|
|
240
|
-
const decimals =
|
|
239
|
+
const decimals = list[asset]?.decimals
|
|
241
240
|
const rawAmount = data[i]
|
|
242
241
|
if (rawAmount > 0n) {
|
|
243
242
|
if (!liquidity[asset]) liquidity[asset] = []
|
|
@@ -266,7 +265,7 @@ export async function fetchFlashLiquidityForChain(
|
|
|
266
265
|
const rawAmount = data[i]
|
|
267
266
|
if (rawAmount > 0n) {
|
|
268
267
|
if (!liquidity[asset]) liquidity[asset] = []
|
|
269
|
-
const decimals =
|
|
268
|
+
const decimals = list[asset]?.decimals
|
|
270
269
|
liquidity[asset].push({
|
|
271
270
|
id: FLASH_LOAN_IDS[morpho.pool],
|
|
272
271
|
name: morpho.pool,
|
|
@@ -289,7 +288,7 @@ export async function fetchFlashLiquidityForChain(
|
|
|
289
288
|
currentOffset += callLen
|
|
290
289
|
|
|
291
290
|
otherAssets.forEach((asset, i) => {
|
|
292
|
-
const decimals =
|
|
291
|
+
const decimals = list[asset]?.decimals
|
|
293
292
|
const rawAmount = data[i]
|
|
294
293
|
if (rawAmount > 0n) {
|
|
295
294
|
if (!liquidity[asset]) liquidity[asset] = []
|
|
@@ -315,7 +314,7 @@ export async function fetchFlashLiquidityForChain(
|
|
|
315
314
|
currentOffset += callLen
|
|
316
315
|
|
|
317
316
|
otherAssets.forEach((asset, i) => {
|
|
318
|
-
const decimals =
|
|
317
|
+
const decimals = list[asset]?.decimals
|
|
319
318
|
const rawAmount = data[i]
|
|
320
319
|
if (rawAmount > 0n) {
|
|
321
320
|
if (!liquidity[asset]) liquidity[asset] = []
|