@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.
- package/dist/lending/aave-v2-type/types.d.ts +2 -0
- package/dist/lending/aave-v2-type/types.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.d.ts +4 -4
- package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.js +37 -22
- package/dist/lending/fetchLender.d.ts.map +1 -1
- package/dist/lending/fetchLender.js +25 -29
- package/dist/lending/fetchLenderAll.d.ts +2 -1
- package/dist/lending/fetchLenderAll.d.ts.map +1 -1
- package/dist/lending/fetchLenderAll.js +3 -3
- package/dist/lending/fetchLenderExt.d.ts +2 -1
- package/dist/lending/fetchLenderExt.d.ts.map +1 -1
- package/dist/lending/fetchLenderExt.js +28 -14
- package/dist/lending/index.d.ts +2 -0
- package/dist/lending/index.d.ts.map +1 -1
- package/dist/lending/index.js +2 -0
- package/dist/lending/morpho/convertPublic.d.ts +3 -5
- package/dist/lending/morpho/convertPublic.d.ts.map +1 -1
- package/dist/lending/morpho/convertPublic.js +16 -12
- package/dist/lending/morpho/fetchPublic.js +1 -1
- package/dist/lending/morpho/publicCallBuild.d.ts +1 -4
- package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/morpho/types.d.ts +2 -0
- package/dist/lending/morpho/types.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallBuild.js +4 -7
- package/dist/lending/user-data/abis.d.ts +88 -0
- package/dist/lending/user-data/abis.d.ts.map +1 -1
- package/dist/lending/user-data/abis.js +5 -1
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.js +3 -2
- package/dist/lending/user-data/fetchUserData.d.ts +4 -4
- package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
- package/dist/lending/user-data/fetchUserData.js +46 -25
- package/dist/lending/user-data/init/userCallParse.js +1 -1
- package/dist/lending/user-data/morpho/userCallBuild.d.ts +4 -5
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallBuild.js +15 -9
- package/dist/lending/user-data/morpho/userCallParse.d.ts +1 -2
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.js +15 -12
- package/dist/lending/user-data/types.d.ts +30 -19
- package/dist/lending/user-data/types.d.ts.map +1 -1
- package/dist/lending/user-data/types.js +12 -0
- package/dist/lending/user-data/utils/createGeneralUserState.d.ts +4 -4
- package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
- package/dist/lending/user-data/utils/createGeneralUserState.js +24 -17
- package/dist/utils/index.d.ts +5 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +20 -11
- package/dist/utils/parsing.d.ts +1 -0
- package/dist/utils/parsing.d.ts.map +1 -1
- package/dist/utils/parsing.js +3 -0
- package/dist/yields/index.d.ts.map +1 -1
- package/dist/yields/index.js +12 -5
- package/package.json +1 -1
- package/src/abis/morpho/blue.ts +99 -0
- package/src/abis/morpho/lens.ts +31 -0
- package/src/lending/aave-v2-type/types.ts +2 -0
- package/src/lending/compound-v3/publicCallParse.ts +93 -37
- package/src/lending/fetchLender.ts +86 -49
- package/src/lending/fetchLenderAll.ts +30 -0
- package/src/lending/fetchLenderExt.ts +82 -0
- package/src/lending/index.ts +3 -1
- package/src/lending/morpho/convertPublic.ts +153 -0
- package/src/lending/morpho/fetchPublic.ts +80 -0
- package/src/lending/morpho/publicCallBuild.ts +11 -0
- package/src/lending/morpho/types.ts +129 -0
- package/src/lending/user-data/aave-v3-type/userCallBuild.ts +2 -8
- package/src/lending/user-data/abis.ts +4 -1
- package/src/lending/user-data/compound-v3/userCallParse.ts +3 -2
- package/src/lending/user-data/fetchUserData.ts +114 -33
- package/src/lending/user-data/init/userCallParse.ts +1 -1
- package/src/lending/user-data/morpho/decoder.ts +71 -0
- package/src/lending/user-data/morpho/morphoLib.ts +61 -0
- package/src/lending/user-data/morpho/types.ts +12 -0
- package/src/lending/user-data/morpho/userCallBuild.ts +63 -0
- package/src/lending/user-data/morpho/userCallParse.ts +150 -0
- package/src/lending/user-data/morpho/userCallParseNoDeploy.ts +168 -0
- package/src/lending/user-data/types.ts +64 -42
- package/src/lending/user-data/utils/createGeneralUserState.ts +56 -32
- package/src/utils/index.ts +32 -14
- package/src/utils/parsing.ts +5 -0
- package/src/yields/index.ts +13 -4
- package/test/lenderData.test.ts +13251 -13649
- package/test/mainPrices.test.ts +1 -13
- package/test/morpho.test.ts +20 -0
- package/test/userDataMorpho.test.ts +79 -0
- 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
|
|
2
|
-
import { BaseYields, RewardsMap } from
|
|
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
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
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 = {
|
|
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
|
-
[
|
|
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
|
-
[
|
|
90
|
+
[poolId: string]: AavelendingPositions
|
|
78
91
|
}
|
|
79
|
-
}
|
|
92
|
+
}
|
|
80
93
|
rewards: UserRewardEntry
|
|
81
94
|
}
|
|
82
95
|
|
|
83
|
-
interface AavelendingPositions
|
|
96
|
+
interface AavelendingPositions {
|
|
84
97
|
// token amounts
|
|
85
|
-
deposits:
|
|
86
|
-
debt:
|
|
87
|
-
debtStable:
|
|
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
|
-
[
|
|
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
|
-
[
|
|
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
|
-
[
|
|
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
|
+
}
|