@1delta/margin-fetcher 0.0.7 → 0.0.9
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/aave/AaveOracle.d.ts +10 -0
- package/dist/abis/aave/AaveOracle.d.ts.map +1 -1
- package/dist/abis/aave/AaveOracle.js +13 -0
- package/dist/abis/oracle/AaveOracle.d.ts +10 -0
- package/dist/abis/oracle/AaveOracle.d.ts.map +1 -1
- package/dist/abis/oracle/AaveOracle.js +13 -0
- package/dist/assets/index.d.ts +4 -4
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +8 -8
- package/dist/assets/liquidityThresholds.d.ts +29 -0
- package/dist/assets/liquidityThresholds.d.ts.map +1 -0
- package/dist/assets/liquidityThresholds.js +51 -0
- package/dist/lending/aave-v2-type/publicCallParse.js +3 -3
- 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 +8 -7
- package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallBuild.js +4 -23
- package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallParse.js +23 -10
- package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallBuild.js +1 -16
- package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParse.js +13 -6
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +12 -6
- package/dist/lending/user-data/compound-v3/addresses.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/addresses.js +8 -7
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.js +2 -0
- package/dist/lending-pairs/computeLendingPairs.d.ts +11 -0
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.js +84 -5
- package/dist/prices/main-prices/fetchOracleData.d.ts +1 -1
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +11 -2
- package/dist/utils/parsing.d.ts.map +1 -1
- package/dist/utils/parsing.js +4 -2
- package/package.json +2 -2
- package/src/abis/aave/AaveOracle.ts +13 -0
- package/src/abis/oracle/AaveOracle.ts +13 -0
- package/src/assets/index.ts +70 -51
- package/src/assets/liquidityThresholds.ts +83 -0
- package/src/lending/aave-v2-type/publicCallParse.ts +3 -3
- package/src/lending/addresses/compoundV3.ts +29 -15
- package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -25
- package/src/lending/user-data/aave-v2-type/userCallParse.ts +23 -10
- package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -16
- package/src/lending/user-data/aave-v3-type/userCallParse.ts +15 -6
- package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +14 -6
- package/src/lending/user-data/compound-v3/addresses.ts +58 -39
- package/src/lending/user-data/compound-v3/userCallParse.ts +2 -2
- package/src/lending-pairs/computeLendingPairs.ts +135 -5
- package/src/prices/main-prices/fetchOracleData.ts +14 -2
- package/src/utils/parsing.ts +51 -51
- package/test/userdata.test.ts +5 -5
|
@@ -15,7 +15,7 @@ import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles'
|
|
|
15
15
|
import { AAVES_PER_CHAIN } from '../../utils'
|
|
16
16
|
import { GetEvmClientFunction } from '../../types'
|
|
17
17
|
|
|
18
|
-
export const formatAavePrice = (price: string,
|
|
18
|
+
export const formatAavePrice = (price: string, isV2 = false): number => {
|
|
19
19
|
return Number(formatEther(BigInt(price ?? '0') * (
|
|
20
20
|
// 10^(18 - decimals)
|
|
21
21
|
10n ** (isV2 ? 0n : 10n)
|
|
@@ -242,6 +242,18 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
function lowDecimalOracle(chainId: string, fork: string) {
|
|
246
|
+
// some chains only have high decimal oracles
|
|
247
|
+
if (
|
|
248
|
+
chainId === Chain.AVALANCHE_C_CHAIN ||
|
|
249
|
+
chainId === Chain.MODE) {
|
|
250
|
+
return false
|
|
251
|
+
}
|
|
252
|
+
// otherwise, it depends on whether it is aave V3
|
|
253
|
+
return AAVE_V2_LENDERS.includes(fork as any)
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
245
257
|
/**
|
|
246
258
|
* Parser for aave results in ulticall slice
|
|
247
259
|
* @param chainId network
|
|
@@ -257,7 +269,7 @@ const parseAaveResults = (chainId: string, data: any[], queries: QueryAave[]) =>
|
|
|
257
269
|
const details = queries[i]
|
|
258
270
|
details.assets.forEach((a, j) => {
|
|
259
271
|
const oracleId = ASSET_META[chainId][a]?.assetGroup ?? ASSET_META[chainId]?.[a]?.symbol ?? chainId + "-" + a
|
|
260
|
-
prices[oracleId] = formatAavePrice(d[j].toString(), chainId,
|
|
272
|
+
prices[oracleId] = formatAavePrice(d[j].toString(), lowDecimalOracle(chainId, details.fork as any))
|
|
261
273
|
})
|
|
262
274
|
})
|
|
263
275
|
|
package/src/utils/parsing.ts
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { Chain, Lender } from "@1delta/asset-registry"
|
|
2
|
-
import { formatEther, formatUnits } from "viem"
|
|
3
|
-
import { isCompoundV3 } from "."
|
|
1
|
+
import { Chain, Lender } from "@1delta/asset-registry";
|
|
2
|
+
import { formatEther, formatUnits } from "viem";
|
|
3
|
+
import { isCompoundV3 } from ".";
|
|
4
4
|
|
|
5
|
-
export const BPS = 10000
|
|
5
|
+
export const BPS = 10000;
|
|
6
6
|
|
|
7
7
|
export const parseRawAmount = (answer?: string, decimals = 18): string => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
8
|
+
if (!answer || answer === "0x") return "0";
|
|
9
|
+
try {
|
|
10
|
+
return formatUnits(BigInt(answer ?? "0"), decimals ?? 18);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
return "0";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
15
|
|
|
16
16
|
export enum TimeScale {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
BLOCK,
|
|
18
|
+
MS,
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const BLOCK_TIMES: { [chainId: string]: number } = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
22
|
+
5: 12,
|
|
23
|
+
1: 12,
|
|
24
|
+
56: 3,
|
|
25
|
+
};
|
|
26
26
|
|
|
27
27
|
// Converters from apy to apr and reversed
|
|
28
28
|
|
|
29
|
-
const SECONDS_PER_YEAR = 31536000
|
|
29
|
+
const SECONDS_PER_YEAR = 31536000;
|
|
30
30
|
|
|
31
31
|
export const aprToApy = (apr: number) => {
|
|
32
|
-
|
|
33
|
-
}
|
|
32
|
+
return (1 + apr / SECONDS_PER_YEAR) ** SECONDS_PER_YEAR - 1;
|
|
33
|
+
};
|
|
34
34
|
|
|
35
35
|
export const apyToApr = (apy: number) => {
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
36
|
+
return ((apy + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR;
|
|
37
|
+
};
|
|
39
38
|
|
|
40
39
|
export const formatAaveYieldToNumber = (n?: string | bigint): number => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
40
|
+
if (!n) return 0;
|
|
41
|
+
return Number(formatEther(BigInt(n) / BigInt(1e7)));
|
|
42
|
+
};
|
|
45
43
|
|
|
46
44
|
export const calculateRateForCompound = (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
n: string,
|
|
46
|
+
chainId: string,
|
|
47
|
+
lender = Lender.COMPOUND_V3_USDCE
|
|
50
48
|
): number => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
49
|
+
let scale = TimeScale.MS;
|
|
50
|
+
if (isCompoundV3(lender) || Lender.COMPOUND_V2) {
|
|
51
|
+
scale = TimeScale.BLOCK;
|
|
52
|
+
} else if (chainId === Chain.BNB_SMART_CHAIN_MAINNET) {
|
|
53
|
+
scale = TimeScale.BLOCK;
|
|
54
|
+
}
|
|
55
|
+
const rate = Number(formatEther(BigInt(n)));
|
|
56
|
+
if (scale === TimeScale.BLOCK)
|
|
57
|
+
return (
|
|
58
|
+
(Math.pow((rate * 60 * 60 * 24) / (BLOCK_TIMES[chainId] ?? 1) + 1, 365) -
|
|
59
|
+
1) *
|
|
60
|
+
100
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
return (Math.pow(rate * 60 * 60 * 24 + 1, 365) - 1) * 100;
|
|
64
|
+
};
|
|
63
65
|
export const formatAaveRawApyToApr = (raw: bigint | string | undefined) => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
const apy = formatAaveYieldToNumber(raw);
|
|
67
|
+
return apyToApr(apy / 100) * 100;
|
|
68
|
+
};
|
|
69
69
|
|
|
70
70
|
// converts rate per second to rate per year
|
|
71
71
|
export const convertRateToApr = (ratePerSecond: number | string) => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
72
|
+
const rps = Number(ratePerSecond);
|
|
73
|
+
if (isNaN(rps)) return 0;
|
|
74
|
+
return rps * 3600 * 24 * 365 * 100;
|
|
75
|
+
};
|
package/test/userdata.test.ts
CHANGED
|
@@ -104,19 +104,19 @@ describe(
|
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
it(
|
|
107
|
-
"should fetch user data for
|
|
107
|
+
"should fetch user data for AAVE V3 on Polygon",
|
|
108
108
|
async () => {
|
|
109
109
|
try {
|
|
110
|
-
const { userData } = await getUserData(Chain.
|
|
110
|
+
const { userData } = await getUserData(Chain.ARBITRUM_ONE, [Lender.AAVE_V3]);
|
|
111
111
|
|
|
112
|
-
console.log("
|
|
113
|
-
console.log("
|
|
112
|
+
console.log("AAVE_V3 Polygon user data:", userData[Lender.AAVE_V3][TEST_ADDRESS.toLowerCase()].lendingPositions);
|
|
113
|
+
console.log("AAVE_V3 Polygon user aprData:", userData[Lender.AAVE_V3]);
|
|
114
114
|
|
|
115
115
|
// Basic validation
|
|
116
116
|
expect(userData).toBeDefined();
|
|
117
117
|
expect(typeof userData).toBe("object");
|
|
118
118
|
} catch (error) {
|
|
119
|
-
console.log("Error fetching
|
|
119
|
+
console.log("Error fetching AAVE_V3 Polygon data:", error);
|
|
120
120
|
}
|
|
121
121
|
},
|
|
122
122
|
{ timeout: 30000 }
|