@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.
Files changed (56) hide show
  1. package/dist/abis/aave/AaveOracle.d.ts +10 -0
  2. package/dist/abis/aave/AaveOracle.d.ts.map +1 -1
  3. package/dist/abis/aave/AaveOracle.js +13 -0
  4. package/dist/abis/oracle/AaveOracle.d.ts +10 -0
  5. package/dist/abis/oracle/AaveOracle.d.ts.map +1 -1
  6. package/dist/abis/oracle/AaveOracle.js +13 -0
  7. package/dist/assets/index.d.ts +4 -4
  8. package/dist/assets/index.d.ts.map +1 -1
  9. package/dist/assets/index.js +8 -8
  10. package/dist/assets/liquidityThresholds.d.ts +29 -0
  11. package/dist/assets/liquidityThresholds.d.ts.map +1 -0
  12. package/dist/assets/liquidityThresholds.js +51 -0
  13. package/dist/lending/aave-v2-type/publicCallParse.js +3 -3
  14. package/dist/lending/addresses/compoundV3.d.ts +1 -1
  15. package/dist/lending/addresses/compoundV3.d.ts.map +1 -1
  16. package/dist/lending/addresses/compoundV3.js +8 -7
  17. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
  18. package/dist/lending/user-data/aave-v2-type/userCallBuild.js +4 -23
  19. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
  20. package/dist/lending/user-data/aave-v2-type/userCallParse.js +23 -10
  21. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  22. package/dist/lending/user-data/aave-v3-type/userCallBuild.js +1 -16
  23. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
  24. package/dist/lending/user-data/aave-v3-type/userCallParse.js +13 -6
  25. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
  26. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +12 -6
  27. package/dist/lending/user-data/compound-v3/addresses.d.ts.map +1 -1
  28. package/dist/lending/user-data/compound-v3/addresses.js +8 -7
  29. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  30. package/dist/lending/user-data/compound-v3/userCallParse.js +2 -0
  31. package/dist/lending-pairs/computeLendingPairs.d.ts +11 -0
  32. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  33. package/dist/lending-pairs/computeLendingPairs.js +84 -5
  34. package/dist/prices/main-prices/fetchOracleData.d.ts +1 -1
  35. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  36. package/dist/prices/main-prices/fetchOracleData.js +11 -2
  37. package/dist/utils/parsing.d.ts.map +1 -1
  38. package/dist/utils/parsing.js +4 -2
  39. package/package.json +2 -2
  40. package/src/abis/aave/AaveOracle.ts +13 -0
  41. package/src/abis/oracle/AaveOracle.ts +13 -0
  42. package/src/assets/index.ts +70 -51
  43. package/src/assets/liquidityThresholds.ts +83 -0
  44. package/src/lending/aave-v2-type/publicCallParse.ts +3 -3
  45. package/src/lending/addresses/compoundV3.ts +29 -15
  46. package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -25
  47. package/src/lending/user-data/aave-v2-type/userCallParse.ts +23 -10
  48. package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -16
  49. package/src/lending/user-data/aave-v3-type/userCallParse.ts +15 -6
  50. package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +14 -6
  51. package/src/lending/user-data/compound-v3/addresses.ts +58 -39
  52. package/src/lending/user-data/compound-v3/userCallParse.ts +2 -2
  53. package/src/lending-pairs/computeLendingPairs.ts +135 -5
  54. package/src/prices/main-prices/fetchOracleData.ts +14 -2
  55. package/src/utils/parsing.ts +51 -51
  56. 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, chainId: string, isV2 = false): number => {
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, AAVE_V2_LENDERS.includes(details.fork as any))
272
+ prices[oracleId] = formatAavePrice(d[j].toString(), lowDecimalOracle(chainId, details.fork as any))
261
273
  })
262
274
  })
263
275
 
@@ -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
- if (!answer || answer === "0x") return "0"
9
- try {
10
- return (formatUnits(BigInt(answer ?? '0'), decimals ?? 18))
11
- } catch (e) {
12
- return "0"
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
- BLOCK,
18
- MS,
17
+ BLOCK,
18
+ MS,
19
19
  }
20
20
 
21
21
  const BLOCK_TIMES: { [chainId: string]: number } = {
22
- 5: 12,
23
- 1: 12,
24
- 56: 3,
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
- return (1 + apr / SECONDS_PER_YEAR) ** SECONDS_PER_YEAR - 1
33
- }
32
+ return (1 + apr / SECONDS_PER_YEAR) ** SECONDS_PER_YEAR - 1;
33
+ };
34
34
 
35
35
  export const apyToApr = (apy: number) => {
36
- return ((apy + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR
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
- if (!n) return 0
42
- return Number(formatEther(BigInt(n) / BigInt(1e7)))
43
- }
44
-
40
+ if (!n) return 0;
41
+ return Number(formatEther(BigInt(n) / BigInt(1e7)));
42
+ };
45
43
 
46
44
  export const calculateRateForCompound = (
47
- n: string,
48
- chainId: string,
49
- lender = Lender.COMPOUND_V3_USDCE,
45
+ n: string,
46
+ chainId: string,
47
+ lender = Lender.COMPOUND_V3_USDCE
50
48
  ): number => {
51
- let scale = TimeScale.MS
52
- if (isCompoundV3(lender) || Lender.COMPOUND_V2) {
53
- scale = TimeScale.BLOCK
54
- } else if (chainId === Chain.BNB_SMART_CHAIN_MAINNET) {
55
- scale = TimeScale.BLOCK
56
- }
57
- const rate = Number(formatEther(BigInt(n)))
58
- if (scale === TimeScale.BLOCK)
59
- return (Math.pow((rate * 60 * 60 * 24) / (BLOCK_TIMES[chainId] ?? 1) + 1, 365) - 1) * 100
60
-
61
- return (Math.pow(rate * 60 * 60 * 24 + 1, 365) - 1) * 100
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
- const apy = formatAaveYieldToNumber(raw)
65
- return apyToApr(apy / 100) * 100
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
- const rps = Number(ratePerSecond)
73
- if(isNaN(rps)) return 0
74
- return rps * 3600 * 24 * 365 * 100
75
- }
72
+ const rps = Number(ratePerSecond);
73
+ if (isNaN(rps)) return 0;
74
+ return rps * 3600 * 24 * 365 * 100;
75
+ };
@@ -104,19 +104,19 @@ describe(
104
104
 
105
105
 
106
106
  it(
107
- "should fetch user data for YLDR on Polygon",
107
+ "should fetch user data for AAVE V3 on Polygon",
108
108
  async () => {
109
109
  try {
110
- const { userData } = await getUserData(Chain.POLYGON_MAINNET, [Lender.YLDR]);
110
+ const { userData } = await getUserData(Chain.ARBITRUM_ONE, [Lender.AAVE_V3]);
111
111
 
112
- console.log("YLDR Polygon user data:", userData[Lender.YLDR]);
113
- console.log("YLDR Polygon user aprData:", userData[Lender.YLDR]);
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 YLDR Polygon data:", error);
119
+ console.log("Error fetching AAVE_V3 Polygon data:", error);
120
120
  }
121
121
  },
122
122
  { timeout: 30000 }