@1delta/margin-fetcher 0.0.10 → 0.0.13

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 (89) hide show
  1. package/dist/lending/aave-v2-type/types.d.ts +2 -0
  2. package/dist/lending/aave-v2-type/types.d.ts.map +1 -1
  3. package/dist/lending/compound-v3/publicCallParse.d.ts +4 -4
  4. package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
  5. package/dist/lending/compound-v3/publicCallParse.js +37 -22
  6. package/dist/lending/fetchLender.d.ts.map +1 -1
  7. package/dist/lending/fetchLender.js +25 -29
  8. package/dist/lending/fetchLenderAll.d.ts +2 -1
  9. package/dist/lending/fetchLenderAll.d.ts.map +1 -1
  10. package/dist/lending/fetchLenderAll.js +3 -3
  11. package/dist/lending/fetchLenderExt.d.ts +2 -1
  12. package/dist/lending/fetchLenderExt.d.ts.map +1 -1
  13. package/dist/lending/fetchLenderExt.js +28 -14
  14. package/dist/lending/index.d.ts +2 -0
  15. package/dist/lending/index.d.ts.map +1 -1
  16. package/dist/lending/index.js +2 -0
  17. package/dist/lending/morpho/convertPublic.d.ts +3 -5
  18. package/dist/lending/morpho/convertPublic.d.ts.map +1 -1
  19. package/dist/lending/morpho/convertPublic.js +16 -12
  20. package/dist/lending/morpho/fetchPublic.js +1 -1
  21. package/dist/lending/morpho/publicCallBuild.d.ts +1 -4
  22. package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -1
  23. package/dist/lending/morpho/types.d.ts +2 -0
  24. package/dist/lending/morpho/types.d.ts.map +1 -1
  25. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  26. package/dist/lending/user-data/aave-v3-type/userCallBuild.js +4 -7
  27. package/dist/lending/user-data/abis.d.ts +88 -0
  28. package/dist/lending/user-data/abis.d.ts.map +1 -1
  29. package/dist/lending/user-data/abis.js +5 -1
  30. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  31. package/dist/lending/user-data/compound-v3/userCallParse.js +3 -2
  32. package/dist/lending/user-data/fetchUserData.d.ts +4 -4
  33. package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
  34. package/dist/lending/user-data/fetchUserData.js +46 -25
  35. package/dist/lending/user-data/init/userCallParse.js +1 -1
  36. package/dist/lending/user-data/morpho/userCallBuild.d.ts +4 -5
  37. package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
  38. package/dist/lending/user-data/morpho/userCallBuild.js +15 -9
  39. package/dist/lending/user-data/morpho/userCallParse.d.ts +1 -2
  40. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  41. package/dist/lending/user-data/morpho/userCallParse.js +15 -12
  42. package/dist/lending/user-data/types.d.ts +30 -19
  43. package/dist/lending/user-data/types.d.ts.map +1 -1
  44. package/dist/lending/user-data/types.js +12 -0
  45. package/dist/lending/user-data/utils/createGeneralUserState.d.ts +4 -4
  46. package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
  47. package/dist/lending/user-data/utils/createGeneralUserState.js +24 -17
  48. package/dist/utils/index.d.ts +5 -3
  49. package/dist/utils/index.d.ts.map +1 -1
  50. package/dist/utils/index.js +20 -11
  51. package/dist/utils/parsing.d.ts +1 -0
  52. package/dist/utils/parsing.d.ts.map +1 -1
  53. package/dist/utils/parsing.js +3 -0
  54. package/dist/yields/index.d.ts.map +1 -1
  55. package/dist/yields/index.js +12 -5
  56. package/package.json +1 -1
  57. package/src/abis/morpho/blue.ts +99 -0
  58. package/src/abis/morpho/lens.ts +31 -0
  59. package/src/lending/aave-v2-type/types.ts +2 -0
  60. package/src/lending/compound-v3/publicCallParse.ts +93 -37
  61. package/src/lending/fetchLender.ts +86 -49
  62. package/src/lending/fetchLenderAll.ts +30 -0
  63. package/src/lending/fetchLenderExt.ts +82 -0
  64. package/src/lending/index.ts +3 -1
  65. package/src/lending/morpho/convertPublic.ts +153 -0
  66. package/src/lending/morpho/fetchPublic.ts +80 -0
  67. package/src/lending/morpho/publicCallBuild.ts +11 -0
  68. package/src/lending/morpho/types.ts +129 -0
  69. package/src/lending/user-data/aave-v3-type/userCallBuild.ts +2 -8
  70. package/src/lending/user-data/abis.ts +4 -1
  71. package/src/lending/user-data/compound-v3/userCallParse.ts +3 -2
  72. package/src/lending/user-data/fetchUserData.ts +114 -33
  73. package/src/lending/user-data/init/userCallParse.ts +1 -1
  74. package/src/lending/user-data/morpho/decoder.ts +71 -0
  75. package/src/lending/user-data/morpho/morphoLib.ts +61 -0
  76. package/src/lending/user-data/morpho/types.ts +12 -0
  77. package/src/lending/user-data/morpho/userCallBuild.ts +63 -0
  78. package/src/lending/user-data/morpho/userCallParse.ts +150 -0
  79. package/src/lending/user-data/morpho/userCallParseNoDeploy.ts +168 -0
  80. package/src/lending/user-data/types.ts +64 -42
  81. package/src/lending/user-data/utils/createGeneralUserState.ts +56 -32
  82. package/src/utils/index.ts +32 -14
  83. package/src/utils/parsing.ts +5 -0
  84. package/src/yields/index.ts +13 -4
  85. package/test/lenderData.test.ts +13251 -13649
  86. package/test/mainPrices.test.ts +1 -13
  87. package/test/morpho.test.ts +20 -0
  88. package/test/userDataMorpho.test.ts +79 -0
  89. package/test/utils.ts +13 -0
@@ -0,0 +1,63 @@
1
+ import { Chain, Lender, MORPHO_BLUE_POOL_DATA } from '@1delta/asset-registry'
2
+ import { Call } from '../../../utils/multicall'
3
+ import { chunk } from 'lodash'
4
+
5
+ const MORPHO_LENS: { [c: string]: string } = {
6
+ [Chain.BASE]: '0x98542B95B44a4732EffB1F4F01A696F1546236d3',
7
+ [Chain.POLYGON_MAINNET]: '0x105eb87D2b3127f43B1b4C0F125dbEb0EDF3d6C6',
8
+ [Chain.OP_MAINNET]: '0xd184c5315B728c1C990f59dDD275c8155f8e255c',
9
+ [Chain.ARBITRUM_ONE]: '0xF64F862Fb7D687411585e06C08711B612e156530',
10
+ }
11
+
12
+ const getBaseMorphoCalls = (
13
+ lender: string,
14
+ chainId: string,
15
+ account: string,
16
+ marketsToQuery: string[],
17
+ ) => {
18
+ return marketsToQuery.flatMap(id => [
19
+ {
20
+ // @ts-ignore
21
+ address: MORPHO_BLUE_POOL_DATA[lender][chainId],
22
+ name: 'position',
23
+ params: ["0x" + id.split("_")[1], account],
24
+ },
25
+ {
26
+ // @ts-ignore
27
+ address: MORPHO_BLUE_POOL_DATA[lender][chainId],
28
+ name: 'market',
29
+ params: ["0x" + id.split("_")[1]],
30
+ },
31
+ ])
32
+ }
33
+
34
+ export const buildMorphoUserCall = (
35
+ chainId: string,
36
+ account: string,
37
+ lender: Lender,
38
+ marketsToQuery: string[],
39
+ ): Call[] => {
40
+ const calls = getBaseMorphoCalls(lender, chainId, account, marketsToQuery)
41
+
42
+ return calls
43
+ }
44
+
45
+ export const buildMorphoUserCallWithLens = (
46
+ chainId: string,
47
+ account: string,
48
+ lender: Lender,
49
+ marketsToQuery: string[],
50
+ ): Call[] => {
51
+ // 100 per call
52
+ const marketSlices = chunk(marketsToQuery, 100)
53
+ return marketSlices.flatMap((marketsInChunk) => ({
54
+ address: MORPHO_LENS[chainId],
55
+ name: 'getUserDataCompact',
56
+ params: [
57
+ marketsInChunk.map(a=> a.replace("MORPHO_BLUE_", "0x")),
58
+ account,
59
+ // @ts-ignore
60
+ MORPHO_BLUE_POOL_DATA[lender][chainId],
61
+ ],
62
+ }))
63
+ }
@@ -0,0 +1,150 @@
1
+ import { Lender } from "@1delta/asset-registry"
2
+ import { getAssetMeta, toGenericPriceKey, toOracleKey } from "../../../assets"
3
+ import { MorphoUserReserveResponse } from "../types"
4
+ import { createBaseTypeUserState } from "../utils"
5
+ import { parseRawAmount } from "../../../utils/parsing"
6
+ import { MorphoMarket } from "../../morpho/types"
7
+ import { BalanceInfo, decodePackedDataset } from "./decoder"
8
+
9
+ export const getMorphoUserDataConverterWithlens = (
10
+ lender: Lender,
11
+ chainId: string,
12
+ account: string,
13
+ markets: string[],
14
+ prices: { [asset: string]: number },
15
+ pricesHist: { [asset: string]: number },
16
+ lenderData: any
17
+ ): [(data: any[]) => { [market: string]: MorphoUserReserveResponse } | undefined, number] => {
18
+
19
+ const expectedNumberOfCalls = markets.length * 2
20
+ return [
21
+ (data: any[]) => {
22
+ // chunksizes depend on markets
23
+ const slices = Math.ceil(markets.length / 100)
24
+ if (data.length !== slices) {
25
+ return undefined
26
+ }
27
+ // de-chunk the calldata
28
+ const returnDatas = data.flatMap(d => decodePackedDataset(d))
29
+
30
+ let datas: { [market: string]: MorphoUserReserveResponse } = {}
31
+ for (let i = 0; i < returnDatas.length; i++) {
32
+
33
+ let totalDebt24h = 0
34
+ let totalDeposits24h = 0
35
+ const balanceData = returnDatas[i]
36
+ const markeId = markets[balanceData.index]
37
+ const market = lenderData[markeId]?.params?.market
38
+ const {
39
+ dataForMarket,
40
+ addedDebt,
41
+ addedDeposits
42
+ } = createMorphoEntryFromMarketWithLens(
43
+ i,
44
+ balanceData,
45
+ chainId,
46
+ market,
47
+ prices,
48
+ pricesHist,
49
+ )
50
+ if (!dataForMarket) continue;
51
+
52
+ totalDebt24h += addedDebt
53
+ totalDeposits24h += addedDeposits
54
+
55
+ const payload = {
56
+ chainId,
57
+ account,
58
+ lendingPositions: { "0": dataForMarket },
59
+ rewards: {},
60
+ userEMode : 0,
61
+ }
62
+
63
+ const userData = createBaseTypeUserState(payload, lenderData[markeId].data, totalDeposits24h, totalDebt24h)
64
+
65
+ datas[market.lender] = {
66
+ ...payload,
67
+ ...userData,
68
+ id: market.id
69
+ }
70
+
71
+ }
72
+ return datas
73
+ },
74
+ expectedNumberOfCalls,
75
+ ]
76
+ }
77
+
78
+ function createMorphoEntryFromMarketWithLens(
79
+ i: number,
80
+ balanceInfo: BalanceInfo,
81
+ chainId: string,
82
+ market: MorphoMarket,
83
+ prices: any,
84
+ pricesHist: any,
85
+ ) {
86
+
87
+ const loanAddress = market.loanAddress.toLowerCase()
88
+ const loanMeta = getAssetMeta(chainId, loanAddress)
89
+
90
+ const loanKey = toOracleKey(loanMeta?.assetGroup) ?? toGenericPriceKey(loanAddress, chainId)
91
+ // prices
92
+ const priceLoan = prices[loanKey] ?? 1
93
+ const priceHistLoan = pricesHist?.[loanKey] ?? priceLoan
94
+
95
+ const deposits = balanceInfo.supplyAssets
96
+ const borrow = balanceInfo.borrowAssets
97
+ const depositDec = parseRawAmount(deposits.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18)
98
+ const borrowDec = parseRawAmount(borrow.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18)
99
+
100
+ const dataForLoanAsset = {
101
+ poolId: loanAddress,
102
+ underlying: loanAddress,
103
+ deposits: parseRawAmount(deposits.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18),
104
+ depositsRaw: deposits.toString(),
105
+ debtStable: "0",
106
+ debt: borrowDec,
107
+ depositsUSD: Number(depositDec) * priceLoan,
108
+ debtStableUSD: 0,
109
+ debtUSD: Number(borrowDec) * priceLoan,
110
+ stableBorrowRate: "0",
111
+ collateralActive: true,
112
+ claimableRewards: 0,
113
+ }
114
+
115
+
116
+ const collateralAddress = market.collateralAddress.toLowerCase()
117
+ const assetMeta = getAssetMeta(chainId, collateralAddress)
118
+ const decimals = market.collateralDecimals ?? assetMeta?.decimals ?? 18
119
+
120
+ const collateralDec = parseRawAmount(balanceInfo.collateral.toString(), decimals)
121
+
122
+ const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(collateralAddress, chainId)
123
+ // prices
124
+ const price = prices[key] ?? 1
125
+ const priceHist = pricesHist?.[key] ?? price
126
+
127
+ const dataForCollateralAsset = {
128
+ poolId: collateralAddress,
129
+ underlying: collateralAddress,
130
+ deposits: collateralDec,
131
+ depositsRaw: balanceInfo.collateral.toString(),
132
+ debtStable: "0",
133
+ debt: "0",
134
+ depositsUSD: Number(collateralDec) * price,
135
+ debtStableUSD: 0,
136
+ debtUSD: 0,
137
+ stableBorrowRate: "0",
138
+ collateralActive: true,
139
+ claimableRewards: 0,
140
+ }
141
+
142
+ return {
143
+ dataForMarket: {
144
+ [loanAddress]: dataForLoanAsset,
145
+ [collateralAddress]: dataForCollateralAsset
146
+ },
147
+ addedDeposits: Number(depositDec) * priceHistLoan + Number(collateralDec) * priceHist,
148
+ addedDebt: Number(borrowDec) * priceHistLoan
149
+ }
150
+ }
@@ -0,0 +1,168 @@
1
+ import { Lender } from "@1delta/asset-registry"
2
+ import { getAssetMeta, toGenericPriceKey, toOracleKey } from "../../../assets"
3
+ import { MorphoUserReserveResponse } from "../types"
4
+ import { createBaseTypeUserState } from "../utils"
5
+ import { MorphoPositionParams } from "./types"
6
+ import { parseRawAmount } from "../../../utils/parsing"
7
+ import { MorphoMarket } from "../../morpho/types"
8
+ import { toAssetsDown } from "./morphoLib"
9
+
10
+ export const getMorphoUserDataConverter = (
11
+ lender: Lender,
12
+ chainId: string,
13
+ account: string,
14
+ markets: MorphoMarket[],
15
+ prices: { [asset: string]: number },
16
+ pricesHist: { [asset: string]: number },
17
+ lenderData: any
18
+ ): [(data: any[]) => { [market: string]: MorphoUserReserveResponse } | undefined, number] => {
19
+
20
+ const expectedNumberOfCalls = markets.length * 2
21
+ return [
22
+ (data: any[]) => {
23
+ if (data.length !== expectedNumberOfCalls) {
24
+ return undefined
25
+ }
26
+
27
+ let datas: { [market: string]: MorphoUserReserveResponse } = {}
28
+ for (let i = 0; i < markets.length; i++) {
29
+
30
+ let totalDebt24h = 0
31
+ let totalDeposits24h = 0
32
+ const market = markets[i]
33
+ const {
34
+ dataForMarket,
35
+ addedDebt,
36
+ addedDeposits
37
+ } = createMorphoEntryFromMarket(
38
+ i,
39
+ data,
40
+ chainId,
41
+ market,
42
+ prices,
43
+ pricesHist,
44
+ )
45
+ if (!dataForMarket) continue;
46
+
47
+ totalDebt24h += addedDebt
48
+ totalDeposits24h += addedDeposits
49
+
50
+ const payload = {
51
+ chainId,
52
+ account,
53
+ lendingPositions: { "0": dataForMarket },
54
+ rewards: {},
55
+ }
56
+
57
+ const userData = createBaseTypeUserState(payload, lenderData, totalDeposits24h, totalDebt24h)
58
+
59
+ datas[market.lender] = {
60
+ ...payload,
61
+ ...userData,
62
+ id: market.id
63
+ }
64
+
65
+ }
66
+ return datas
67
+ },
68
+ expectedNumberOfCalls,
69
+ ]
70
+ }
71
+
72
+ function createMorphoEntryFromMarket(
73
+ i: number,
74
+ data: any[],
75
+ chainId: string,
76
+ market: MorphoMarket,
77
+ prices: any,
78
+ pricesHist: any,
79
+ ) {
80
+ const userPosition = data[2 * i]
81
+ const marketData = data[2 * i + 1]
82
+ const collateralBalance = userPosition[MorphoPositionParams.collateral]?.toString()
83
+ const currentLendShares = userPosition[MorphoPositionParams.supplyShares]?.toString()
84
+ const currentBorrowShares = userPosition[MorphoPositionParams.borrowShares]?.toString()
85
+
86
+ const totalSupplyShares = BigInt(marketData[MorphoPositionParams.collateral]?.toString() ?? 0n)
87
+ const totalSupplyAssets = BigInt(marketData[MorphoPositionParams.supplyShares]?.toString() ?? 0n)
88
+ const totalBorrowShares = BigInt(marketData[MorphoPositionParams.borrowShares]?.toString() ?? 0n)
89
+ const totalBorrowAssets = BigInt(marketData[MorphoPositionParams.borrowShares]?.toString() ?? 0n)
90
+
91
+ if (
92
+ currentLendShares === "0" &&
93
+ currentBorrowShares === "0" &&
94
+ collateralBalance === "0"
95
+ ) {
96
+ return {
97
+ dataForMarket: undefined,
98
+ addedDeposits: 0,
99
+ addedDebt: 0
100
+ }
101
+ }
102
+
103
+ const loanMeta = getAssetMeta(chainId, market.loanAddress)
104
+
105
+ const loanKey = toOracleKey(loanMeta?.assetGroup) ?? toGenericPriceKey(market.loanAddress, chainId)
106
+ // prices
107
+ const priceLoan = prices[loanKey] ?? 1
108
+ const priceHistLoan = pricesHist?.[loanKey] ?? priceLoan
109
+
110
+ const deposits = toAssetsDown(currentLendShares, totalSupplyAssets, totalSupplyShares)
111
+ const borrow = toAssetsDown(currentBorrowShares, totalBorrowAssets, totalBorrowShares)
112
+ const depositDec = parseRawAmount(deposits.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18)
113
+ const borrowDec = parseRawAmount(borrow.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18)
114
+
115
+
116
+ const dataForLoanAsset = {
117
+ poolId: market.loanAddress,
118
+ underlying: market.loanAddress,
119
+ deposits: parseRawAmount(deposits.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18),
120
+ depositsRaw: deposits.toString(),
121
+ debtStable: "0",
122
+ debt: borrowDec,
123
+ depositsUSD: Number(depositDec) * priceLoan,
124
+ debtStableUSD: 0,
125
+ debtUSD: Number(borrowDec) * priceLoan,
126
+ stableBorrowRate: "0",
127
+ collateralActive: true,
128
+ claimableRewards: 0,
129
+ }
130
+
131
+
132
+ const assetMeta = getAssetMeta(chainId, market.collateralAddress)
133
+ const decimals = market.collateralDecimals ?? assetMeta?.decimals ?? 18
134
+
135
+ const collateralDec = parseRawAmount(collateralBalance, decimals)
136
+
137
+ const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(market.collateralAddress, chainId)
138
+ // prices
139
+ const price = prices[key] ?? 1
140
+ const priceHist = pricesHist?.[key] ?? price
141
+
142
+ const dataForCollateralAsset = {
143
+ poolId: market.collateralAddress,
144
+ underlying: market.collateralAddress,
145
+ deposits: collateralDec,
146
+ depositsRaw: collateralBalance,
147
+ debtStable: "0",
148
+ debt: "0",
149
+ depositsUSD: Number(collateralDec) * price,
150
+ debtStableUSD: 0,
151
+ debtUSD: 0,
152
+ stableBorrowRate: "0",
153
+ collateralActive: true,
154
+ claimableRewards: 0,
155
+ }
156
+
157
+ return {
158
+ dataForMarket: {
159
+ [market.loanAddress]: dataForLoanAsset,
160
+ [market.collateralAddress]: dataForCollateralAsset
161
+ },
162
+ addedDeposits: Number(depositDec) * priceHistLoan + Number(collateralDec) * priceHist,
163
+ addedDebt: Number(borrowDec) * priceHistLoan
164
+ }
165
+ }
166
+
167
+
168
+
@@ -1,21 +1,32 @@
1
- import { Lender } from "@1delta/asset-registry"
2
- import { BaseYields, RewardsMap } from "../aave-v3-type/types"
1
+ import { Lender } from '@1delta/asset-registry'
2
+ import { BaseYields, RewardsMap } from '../aave-v3-type/types'
3
3
 
4
4
  export type SerializedBigNumber = string
5
5
  export type SerializedNumber = string
6
6
 
7
7
  export interface LenderUserQuery {
8
- lender: Lender
8
+ /** the lender enum (Note that for multi-market ones, it is not the lender but the group) */
9
+ lender: any
10
+ /** user address */
9
11
  account: string
12
+ /** custom parameters for fetching e.g. multi-market lenders */
13
+ params?: any[]
10
14
  }
11
15
 
12
- export interface AllowanceData {
13
- allowanceWithdrawal: string
14
- allowanceBorrowingVariable: string
15
- allowanceBorrowingStable: string
16
+
17
+ /** Filter all morphos into one for querying */
18
+ export function organizeUserQueries(queries: LenderUserQuery[]) {
19
+ const morphos = queries.filter((q) => q.lender.startsWith('MORPHO_BLUE'))
20
+ const nonMorphos = queries.filter((q) => !q.lender.startsWith('MORPHO_BLUE'))
21
+ const morphosCollapsed = {
22
+ lender: Lender.MORPHO_BLUE,
23
+ account: queries[0].account,
24
+ params: morphos.map((p) => p.lender),
25
+ }
26
+ return [...nonMorphos, morphosCollapsed]
16
27
  }
17
28
 
18
- export interface UserLendingPosition extends AllowanceData {
29
+ export interface UserLendingPosition {
19
30
  // token amounts
20
31
  deposits: number
21
32
  debt: number
@@ -29,14 +40,16 @@ export interface UserLendingPosition extends AllowanceData {
29
40
  claimableRewards: number
30
41
  }
31
42
 
32
- export type UserRewardEntry = { [asset: string]: { totalRewards: number, claimableRewards: number } }
43
+ export type UserRewardEntry = {
44
+ [asset: string]: { totalRewards: number; claimableRewards: number }
45
+ }
33
46
 
34
47
  export interface LenderUserResponse {
35
48
  chainId: string
36
49
  account: string
37
50
  lendingPositions: {
38
51
  [lender: string]: {
39
- [tokenSymbol: string]: UserLendingPosition
52
+ [poolId: string]: UserLendingPosition
40
53
  }
41
54
  }
42
55
  rewards: UserRewardEntry
@@ -74,17 +87,17 @@ export interface AaveV2UserReserveResponse {
74
87
  account: string
75
88
  lendingPositions: {
76
89
  [id: string]: {
77
- [tokenSymbol: string]: AavelendingPositions
90
+ [poolId: string]: AavelendingPositions
78
91
  }
79
- },
92
+ }
80
93
  rewards: UserRewardEntry
81
94
  }
82
95
 
83
- interface AavelendingPositions extends AllowanceData {
96
+ interface AavelendingPositions {
84
97
  // token amounts
85
- deposits: number
86
- debt: number
87
- debtStable: number
98
+ deposits: string
99
+ debt: string
100
+ debtStable: string
88
101
  // usd amounts
89
102
  depositsUSD: number
90
103
  debtUSD: number
@@ -98,7 +111,7 @@ export interface AaveV3UserReserveResponse {
98
111
  chainId: string
99
112
  lendingPositions: {
100
113
  [id: string]: {
101
- [tokenSymbol: string]: AavelendingPositions
114
+ [poolId: string]: AavelendingPositions
102
115
  }
103
116
  }
104
117
  userEMode: number
@@ -106,10 +119,22 @@ export interface AaveV3UserReserveResponse {
106
119
  account: string
107
120
  }
108
121
 
122
+ export interface MorphoUserReserveResponse {
123
+ chainId: string
124
+ lendingPositions: {
125
+ [id: string]: {
126
+ [poolId: string]: AavelendingPositions
127
+ }
128
+ }
129
+ id: string
130
+ rewards?: any
131
+ account: string
132
+ }
133
+
109
134
  export interface CompoundV3UserReserveResponse {
110
135
  lendingPositions: {
111
136
  [id: string]: {
112
- [tokenSymbol: string]: {
137
+ [poolId: string]: {
113
138
  // tokens
114
139
  deposits: number
115
140
  debt: number
@@ -121,11 +146,11 @@ export interface CompoundV3UserReserveResponse {
121
146
 
122
147
  collateralActive: boolean
123
148
  // user collateral raw (to withdraw max)
124
- depositsRaw: SerializedBigNumber;
149
+ depositsRaw: SerializedBigNumber
125
150
  isAllowed: boolean
126
151
  }
127
152
  }
128
- },
153
+ }
129
154
  chainId: string
130
155
  baseAsset: string
131
156
  rewards: UserRewardEntry
@@ -133,7 +158,6 @@ export interface CompoundV3UserReserveResponse {
133
158
  }
134
159
 
135
160
  export interface AaveV3Public extends LenderPublicBase {
136
-
137
161
  lastUpdateTimestamp?: number
138
162
 
139
163
  // flags of reserve state
@@ -158,7 +182,6 @@ export interface AaveV3Public extends LenderPublicBase {
158
182
  * Interface shared by all lenders
159
183
  */
160
184
  export interface LenderPublicBase extends LenderYields, LenderTotalAmounts {
161
-
162
185
  // borrow enabled flag
163
186
  borrowingEnabled: boolean
164
187
 
@@ -201,9 +224,9 @@ export interface LenderConfigMap {
201
224
  * The Mode-specific configuration for a lender asset
202
225
  */
203
226
  export interface LenderConfigData {
204
- category: number;
205
- borrowCollateralFactor: number;
206
- collateralFactor: number;
227
+ category: number
228
+ borrowCollateralFactor: number
229
+ collateralFactor: number
207
230
  borrowFactor: number
208
231
  }
209
232
 
@@ -213,9 +236,9 @@ export interface ModeBase {
213
236
  }
214
237
 
215
238
  export interface EModeData extends ModeBase {
216
- borrowCollateralFactor: number;
217
- collateralFactor: number;
218
- priceSource: string;
239
+ borrowCollateralFactor: number
240
+ collateralFactor: number
241
+ priceSource: string
219
242
  }
220
243
 
221
244
  export interface AaveV2Public extends LenderPublicBase {
@@ -234,8 +257,8 @@ export interface AaveV2Public extends LenderPublicBase {
234
257
  }
235
258
 
236
259
  export interface CompoundV3Public extends LenderPublicBase {
237
- supplyCap: number;
238
- utilization: number;
260
+ supplyCap: number
261
+ utilization: number
239
262
  }
240
263
 
241
264
  export interface UserApr {
@@ -249,14 +272,14 @@ export interface InitUserReserveResponse {
249
272
  lendingPositions: {
250
273
  // positionId is the NFT id
251
274
  [posId: string]: {
252
- mode: any;
253
- [tokenSymbol: string]: {
275
+ mode: any
276
+ [poolId: string]: {
254
277
  deposits: number
255
- debt: number,
278
+ debt: number
256
279
  depositsUSD: number
257
- debtUSD: number,
258
- debtStable: 0,
259
- debtStableUSD: 0,
280
+ debtUSD: number
281
+ debtStable: '0'
282
+ debtStableUSD: 0
260
283
  collateralActive: boolean
261
284
  isAllowed: boolean
262
285
  }
@@ -268,11 +291,10 @@ export interface InitUserReserveResponse {
268
291
 
269
292
  export interface InitPublic extends LenderPublicBase {
270
293
  // flags of reserve state
271
- usageAsCollateralEnabled?: boolean;
294
+ usageAsCollateralEnabled?: boolean
272
295
 
273
296
  // limits
274
- debtCeiling: number;
275
- supplyCap: number;
276
- borrowCap: number;
277
-
278
- }
297
+ debtCeiling: number
298
+ supplyCap: number
299
+ borrowCap: number
300
+ }