@1delta/margin-fetcher 0.0.11 → 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 (83) 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/fetchLender.d.ts.map +1 -1
  4. package/dist/lending/fetchLender.js +25 -29
  5. package/dist/lending/fetchLenderAll.d.ts +2 -1
  6. package/dist/lending/fetchLenderAll.d.ts.map +1 -1
  7. package/dist/lending/fetchLenderAll.js +3 -3
  8. package/dist/lending/fetchLenderExt.d.ts +2 -1
  9. package/dist/lending/fetchLenderExt.d.ts.map +1 -1
  10. package/dist/lending/fetchLenderExt.js +28 -14
  11. package/dist/lending/index.d.ts +2 -0
  12. package/dist/lending/index.d.ts.map +1 -1
  13. package/dist/lending/index.js +2 -0
  14. package/dist/lending/morpho/convertPublic.d.ts +3 -5
  15. package/dist/lending/morpho/convertPublic.d.ts.map +1 -1
  16. package/dist/lending/morpho/convertPublic.js +16 -12
  17. package/dist/lending/morpho/fetchPublic.js +1 -1
  18. package/dist/lending/morpho/publicCallBuild.d.ts +1 -4
  19. package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -1
  20. package/dist/lending/morpho/types.d.ts +2 -0
  21. package/dist/lending/morpho/types.d.ts.map +1 -1
  22. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  23. package/dist/lending/user-data/aave-v3-type/userCallBuild.js +4 -7
  24. package/dist/lending/user-data/abis.d.ts +88 -0
  25. package/dist/lending/user-data/abis.d.ts.map +1 -1
  26. package/dist/lending/user-data/abis.js +5 -1
  27. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  28. package/dist/lending/user-data/compound-v3/userCallParse.js +1 -0
  29. package/dist/lending/user-data/fetchUserData.d.ts +4 -4
  30. package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
  31. package/dist/lending/user-data/fetchUserData.js +46 -25
  32. package/dist/lending/user-data/morpho/userCallBuild.d.ts +4 -5
  33. package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
  34. package/dist/lending/user-data/morpho/userCallBuild.js +15 -9
  35. package/dist/lending/user-data/morpho/userCallParse.d.ts +1 -2
  36. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  37. package/dist/lending/user-data/morpho/userCallParse.js +15 -12
  38. package/dist/lending/user-data/types.d.ts +30 -19
  39. package/dist/lending/user-data/types.d.ts.map +1 -1
  40. package/dist/lending/user-data/types.js +12 -0
  41. package/dist/lending/user-data/utils/createGeneralUserState.d.ts +4 -4
  42. package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
  43. package/dist/lending/user-data/utils/createGeneralUserState.js +24 -17
  44. package/dist/utils/index.d.ts +5 -3
  45. package/dist/utils/index.d.ts.map +1 -1
  46. package/dist/utils/index.js +20 -11
  47. package/dist/utils/parsing.d.ts +1 -0
  48. package/dist/utils/parsing.d.ts.map +1 -1
  49. package/dist/utils/parsing.js +3 -0
  50. package/dist/yields/index.d.ts.map +1 -1
  51. package/dist/yields/index.js +12 -5
  52. package/package.json +1 -1
  53. package/src/abis/morpho/blue.ts +99 -0
  54. package/src/abis/morpho/lens.ts +31 -0
  55. package/src/lending/aave-v2-type/types.ts +2 -0
  56. package/src/lending/fetchLender.ts +86 -49
  57. package/src/lending/fetchLenderAll.ts +30 -0
  58. package/src/lending/fetchLenderExt.ts +82 -0
  59. package/src/lending/index.ts +3 -1
  60. package/src/lending/morpho/convertPublic.ts +153 -0
  61. package/src/lending/morpho/fetchPublic.ts +80 -0
  62. package/src/lending/morpho/publicCallBuild.ts +11 -0
  63. package/src/lending/morpho/types.ts +129 -0
  64. package/src/lending/user-data/aave-v3-type/userCallBuild.ts +2 -8
  65. package/src/lending/user-data/abis.ts +4 -1
  66. package/src/lending/user-data/compound-v3/userCallParse.ts +1 -0
  67. package/src/lending/user-data/fetchUserData.ts +114 -33
  68. package/src/lending/user-data/morpho/decoder.ts +71 -0
  69. package/src/lending/user-data/morpho/morphoLib.ts +61 -0
  70. package/src/lending/user-data/morpho/types.ts +12 -0
  71. package/src/lending/user-data/morpho/userCallBuild.ts +63 -0
  72. package/src/lending/user-data/morpho/userCallParse.ts +150 -0
  73. package/src/lending/user-data/morpho/userCallParseNoDeploy.ts +168 -0
  74. package/src/lending/user-data/types.ts +64 -42
  75. package/src/lending/user-data/utils/createGeneralUserState.ts +56 -32
  76. package/src/utils/index.ts +32 -14
  77. package/src/utils/parsing.ts +5 -0
  78. package/src/yields/index.ts +13 -4
  79. package/test/lenderData.test.ts +13251 -13649
  80. package/test/mainPrices.test.ts +1 -13
  81. package/test/morpho.test.ts +20 -0
  82. package/test/userDataMorpho.test.ts +79 -0
  83. package/test/utils.ts +13 -0
@@ -0,0 +1,71 @@
1
+ export interface BalanceInfo {
2
+ index: number; // uint16 (2 bytes)
3
+ supplyShares: bigint; // uint256 (32 bytes)
4
+ borrowShares: bigint; // uint128 (16 bytes)
5
+ supplyAssets: bigint; // uint256 (32 bytes)
6
+ borrowAssets: bigint; // uint256 (32 bytes)
7
+ collateral: bigint; // uint128 (16 bytes)
8
+ }
9
+
10
+ const WORD = 32;
11
+ const HALF = 16;
12
+
13
+ /** Read `len` bytes at `off` as a big‐endian BigInt. */
14
+ function readBigIntBE(buf: Uint8Array, off: number, len: number): bigint {
15
+ let v = 0n;
16
+ for (let i = 0; i < len; i++) {
17
+ v = (v << 8n) | BigInt(buf[off + i]);
18
+ }
19
+ return v;
20
+ }
21
+
22
+ /**
23
+ * Decode:
24
+ * [ uint256 count (32 bytes) ]
25
+ * then for each of `count` records:
26
+ * uint16 index (2 bytes),
27
+ * uint256 supplyShares (32 bytes),
28
+ * uint128 borrowShares (16 bytes),
29
+ * uint256 supplyAssets (32 bytes),
30
+ * uint256 borrowAssets (32 bytes),
31
+ * uint128 collateral (16 bytes)
32
+ */
33
+ export function decodePackedDataset(hex: string): BalanceInfo[] {
34
+ if (hex.startsWith("0x")) hex = hex.slice(2);
35
+ const buf = Uint8Array.from(hex.match(/.{1,2}/g)!.map((b) => parseInt(b, 16)));
36
+
37
+ // 1) count (uint256)
38
+ const count = Number(readBigIntBE(buf, 0, 2));
39
+ const out: BalanceInfo[] = [];
40
+
41
+ let off = 2;
42
+ for (let i = 0; i < count; i++) {
43
+ // 2) index (uint16)
44
+ const index = Number(readBigIntBE(buf, off, 2));
45
+ off += 2;
46
+
47
+ // 3) supplyShares (uint256)
48
+ const supplyShares = readBigIntBE(buf, off, WORD);
49
+ off += WORD;
50
+
51
+ // 4) borrowShares (uint128)
52
+ const borrowShares = readBigIntBE(buf, off, HALF);
53
+ off += HALF;
54
+
55
+ // 5) supplyAssets (uint256)
56
+ const supplyAssets = readBigIntBE(buf, off, WORD);
57
+ off += WORD;
58
+
59
+ // 6) borrowAssets (uint256)
60
+ const borrowAssets = readBigIntBE(buf, off, WORD);
61
+ off += WORD;
62
+
63
+ // 7) collateral (uint128)
64
+ const collateral = readBigIntBE(buf, off, HALF);
65
+ off += HALF;
66
+
67
+ out.push({ index, supplyShares, borrowShares, supplyAssets, borrowAssets, collateral });
68
+ }
69
+
70
+ return out;
71
+ }
@@ -0,0 +1,61 @@
1
+ // Constants
2
+ const VIRTUAL_SHARES = 10n ** 6n;
3
+ const VIRTUAL_ASSETS = 1n;
4
+
5
+
6
+ function mulDivDown(x: bigint, y: bigint, d: bigint): bigint {
7
+ return (x * y) / d;
8
+ }
9
+
10
+ function mulDivUp(x: bigint, y: bigint, d: bigint): bigint {
11
+ return (x * y + (d - 1n)) / d;
12
+ }
13
+
14
+
15
+ export function toSharesDown(
16
+ assets: bigint,
17
+ totalAssets: bigint,
18
+ totalShares: bigint
19
+ ): bigint {
20
+ return mulDivDown(
21
+ assets,
22
+ totalShares + VIRTUAL_SHARES,
23
+ totalAssets + VIRTUAL_ASSETS
24
+ );
25
+ }
26
+
27
+ export function toAssetsDown(
28
+ shares: bigint,
29
+ totalAssets: bigint,
30
+ totalShares: bigint
31
+ ): bigint {
32
+ return mulDivDown(
33
+ shares,
34
+ totalAssets + VIRTUAL_ASSETS,
35
+ totalShares + VIRTUAL_SHARES
36
+ );
37
+ }
38
+
39
+ export function toSharesUp(
40
+ assets: bigint,
41
+ totalAssets: bigint,
42
+ totalShares: bigint
43
+ ): bigint {
44
+ return mulDivUp(
45
+ assets,
46
+ totalShares + VIRTUAL_SHARES,
47
+ totalAssets + VIRTUAL_ASSETS
48
+ );
49
+ }
50
+
51
+ export function toAssetsUp(
52
+ shares: bigint,
53
+ totalAssets: bigint,
54
+ totalShares: bigint
55
+ ): bigint {
56
+ return mulDivUp(
57
+ shares,
58
+ totalAssets + VIRTUAL_ASSETS,
59
+ totalShares + VIRTUAL_SHARES
60
+ );
61
+ }
@@ -0,0 +1,12 @@
1
+ export enum MorphoPositionParams {
2
+ supplyShares = 0,
3
+ borrowShares,
4
+ collateral,
5
+ }
6
+
7
+ export enum MorphoMarketParams {
8
+ totalSupplyAssets = 0,
9
+ totalSupplyShares,
10
+ totalBorrowAssets,
11
+ totalBorrowShares,
12
+ }
@@ -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
+