@defisaver/positions-sdk 2.1.166 → 2.1.168
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/cjs/aaveV2/index.js +8 -29
- package/cjs/aaveV3/index.js +2 -31
- package/cjs/aaveV4/index.d.ts +25 -0
- package/cjs/aaveV4/index.js +4 -1
- package/cjs/compoundV2/index.d.ts +1 -1
- package/cjs/compoundV2/index.js +2 -2
- package/cjs/curveUsd/index.d.ts +1 -1
- package/cjs/curveUsd/index.js +6 -1
- package/cjs/fluid/index.js +13 -12
- package/cjs/helpers/aaveBalances.d.ts +5 -0
- package/cjs/helpers/aaveBalances.js +51 -0
- package/cjs/helpers/fluidBalances.d.ts +6 -0
- package/cjs/helpers/fluidBalances.js +36 -0
- package/cjs/liquityV2/index.d.ts +8 -0
- package/cjs/liquityV2/index.js +3 -3
- package/cjs/llamaLend/index.d.ts +1 -1
- package/cjs/llamaLend/index.js +6 -1
- package/cjs/markets/morphoBlue/index.d.ts +0 -2
- package/cjs/markets/morphoBlue/index.js +3 -20
- package/cjs/morphoMidnight/index.d.ts +1 -1
- package/cjs/morphoMidnight/index.js +6 -1
- package/cjs/portfolio/index.d.ts +1 -0
- package/cjs/portfolio/index.js +3 -0
- package/cjs/portfolio/lendingSummaries.d.ts +7 -0
- package/cjs/portfolio/lendingSummaries.js +262 -0
- package/cjs/portfolio/lendingSummaryTransport.d.ts +8 -0
- package/cjs/portfolio/lendingSummaryTransport.js +109 -0
- package/cjs/spark/index.js +2 -31
- package/cjs/types/index.d.ts +1 -0
- package/cjs/types/index.js +1 -0
- package/cjs/types/lendingSummary.d.ts +34 -0
- package/cjs/types/lendingSummary.js +2 -0
- package/cjs/types/morphoBlue.d.ts +0 -1
- package/cjs/types/morphoBlue.js +0 -1
- package/esm/aaveV2/index.js +11 -32
- package/esm/aaveV3/index.js +3 -32
- package/esm/aaveV4/index.d.ts +25 -0
- package/esm/aaveV4/index.js +3 -1
- package/esm/compoundV2/index.d.ts +1 -1
- package/esm/compoundV2/index.js +2 -2
- package/esm/curveUsd/index.d.ts +1 -1
- package/esm/curveUsd/index.js +6 -1
- package/esm/fluid/index.js +13 -12
- package/esm/helpers/aaveBalances.d.ts +5 -0
- package/esm/helpers/aaveBalances.js +45 -0
- package/esm/helpers/fluidBalances.d.ts +6 -0
- package/esm/helpers/fluidBalances.js +28 -0
- package/esm/liquityV2/index.d.ts +8 -0
- package/esm/liquityV2/index.js +1 -1
- package/esm/llamaLend/index.d.ts +1 -1
- package/esm/llamaLend/index.js +6 -1
- package/esm/markets/morphoBlue/index.d.ts +0 -2
- package/esm/markets/morphoBlue/index.js +0 -16
- package/esm/morphoMidnight/index.d.ts +1 -1
- package/esm/morphoMidnight/index.js +6 -1
- package/esm/portfolio/index.d.ts +1 -0
- package/esm/portfolio/index.js +1 -0
- package/esm/portfolio/lendingSummaries.d.ts +7 -0
- package/esm/portfolio/lendingSummaries.js +256 -0
- package/esm/portfolio/lendingSummaryTransport.d.ts +8 -0
- package/esm/portfolio/lendingSummaryTransport.js +104 -0
- package/esm/spark/index.js +4 -33
- package/esm/types/index.d.ts +1 -0
- package/esm/types/index.js +1 -0
- package/esm/types/lendingSummary.d.ts +34 -0
- package/esm/types/lendingSummary.js +1 -0
- package/esm/types/morphoBlue.d.ts +0 -1
- package/esm/types/morphoBlue.js +0 -1
- package/package.json +1 -1
- package/src/aaveV2/index.ts +8 -48
- package/src/aaveV3/index.ts +2 -48
- package/src/aaveV4/index.ts +6 -1
- package/src/compoundV2/index.ts +2 -2
- package/src/curveUsd/index.ts +6 -1
- package/src/fluid/index.ts +13 -12
- package/src/helpers/aaveBalances.ts +41 -0
- package/src/helpers/fluidBalances.ts +34 -0
- package/src/liquityV2/index.ts +1 -1
- package/src/llamaLend/index.ts +6 -1
- package/src/markets/morphoBlue/index.ts +0 -16
- package/src/morphoMidnight/index.ts +6 -1
- package/src/portfolio/index.ts +2 -0
- package/src/portfolio/lendingSummaries.ts +216 -0
- package/src/portfolio/lendingSummaryTransport.ts +84 -0
- package/src/spark/index.ts +3 -49
- package/src/types/index.ts +2 -1
- package/src/types/lendingSummary.ts +41 -0
- package/src/types/morphoBlue.ts +0 -1
package/esm/aaveV4/index.d.ts
CHANGED
|
@@ -5,6 +5,31 @@ export { getAaveV4MerkleCampaigns } from './merkl';
|
|
|
5
5
|
export declare function _getAaveV4SpokeData(provider: Client, network: NetworkNumber, market: AaveV4SpokeInfo, blockNumber?: 'latest' | number): Promise<AaveV4SpokeData>;
|
|
6
6
|
export declare function getAaveV4SpokeData(provider: EthereumProvider, network: NetworkNumber, spoke: AaveV4SpokeInfo, blockNumber?: 'latest' | number): Promise<AaveV4SpokeData>;
|
|
7
7
|
export declare function _getAaveV4AccountData(provider: Client, network: NetworkNumber, spokeData: AaveV4SpokeData, address: EthAddress, blockNumber?: 'latest' | number): Promise<AaveV4AccountData>;
|
|
8
|
+
/** Shared raw read; no spoke metadata or market enrichment. */
|
|
9
|
+
export declare const _getAaveV4LoanBalances: (provider: Client, network: NetworkNumber, block: Blockish, address: EthAddress, spoke: EthAddress) => Promise<{
|
|
10
|
+
user: `0x${string}`;
|
|
11
|
+
riskPremium: bigint;
|
|
12
|
+
avgCollateralFactor: bigint;
|
|
13
|
+
healthFactor: bigint;
|
|
14
|
+
totalCollateralInUsd: bigint;
|
|
15
|
+
totalDebtInUsdRay: bigint;
|
|
16
|
+
activeCollateralCount: bigint;
|
|
17
|
+
borrowCount: bigint;
|
|
18
|
+
reserves: readonly {
|
|
19
|
+
reserveId: bigint;
|
|
20
|
+
assetId: number;
|
|
21
|
+
underlying: `0x${string}`;
|
|
22
|
+
supplied: bigint;
|
|
23
|
+
drawn: bigint;
|
|
24
|
+
premium: bigint;
|
|
25
|
+
totalDebt: bigint;
|
|
26
|
+
collateralFactor: number;
|
|
27
|
+
maxLiquidationBonus: number;
|
|
28
|
+
liquidationFee: number;
|
|
29
|
+
isUsingAsCollateral: boolean;
|
|
30
|
+
isBorrowing: boolean;
|
|
31
|
+
}[];
|
|
32
|
+
}>;
|
|
8
33
|
/**
|
|
9
34
|
* Lightweight existence check for Loan Shifter / UI discovery.
|
|
10
35
|
* Reads only `getLoanData(spoke, user)` and returns whether any reserve has
|
package/esm/aaveV4/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
11
|
import { assetAmountInEth, assetAmountInWei, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
12
|
-
import { getViemProvider } from '../services/viem';
|
|
12
|
+
import { getViemProvider, setViemBlockNumber } from '../services/viem';
|
|
13
13
|
import { IncentiveKind, } from '../types';
|
|
14
14
|
import { AaveV4ViewContractViem } from '../contracts';
|
|
15
15
|
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
@@ -251,6 +251,8 @@ export function _getAaveV4AccountData(provider_1, network_1, spokeData_1, addres
|
|
|
251
251
|
riskPremiumBps });
|
|
252
252
|
});
|
|
253
253
|
}
|
|
254
|
+
/** Shared raw read; no spoke metadata or market enrichment. */
|
|
255
|
+
export const _getAaveV4LoanBalances = (provider, network, block, address, spoke) => (AaveV4ViewContractViem(provider, network, block).read.getLoanData([spoke, address], setViemBlockNumber(block)));
|
|
254
256
|
/**
|
|
255
257
|
* Lightweight existence check for Loan Shifter / UI discovery.
|
|
256
258
|
* Reads only `getLoanData(spoke, user)` and returns whether any reserve has
|
|
@@ -17,7 +17,7 @@ export declare const EMPTY_COMPOUND_DATA: {
|
|
|
17
17
|
borrowStableSupplyUnstable: boolean;
|
|
18
18
|
exposure: string;
|
|
19
19
|
};
|
|
20
|
-
export declare const _getCompoundV2AccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
|
|
20
|
+
export declare const _getCompoundV2AccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, tokens?: EthAddress[]) => Promise<PositionBalances>;
|
|
21
21
|
export declare const getCompoundV2AccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
|
|
22
22
|
export declare const _getCompoundV2AccountData: (provider: Client, network: NetworkNumber, address: EthAddress, assetsData: CompoundV2AssetsData) => Promise<CompoundV2PositionData>;
|
|
23
23
|
export declare const getCompoundV2AccountData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, assetsData: CompoundV2AssetsData) => Promise<CompoundV2PositionData>;
|
package/esm/compoundV2/index.js
CHANGED
|
@@ -101,7 +101,7 @@ const getAllMarketAddresses = (provider, network, block) => __awaiter(void 0, vo
|
|
|
101
101
|
const contract = ComptrollerContractViem(provider, network);
|
|
102
102
|
return contract.read.getAllMarkets(setViemBlockNumber(block));
|
|
103
103
|
});
|
|
104
|
-
export const _getCompoundV2AccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () {
|
|
104
|
+
export const _getCompoundV2AccountBalances = (provider, network, block, addressMapping, address, tokens) => __awaiter(void 0, void 0, void 0, function* () {
|
|
105
105
|
let balances = {
|
|
106
106
|
collateral: {},
|
|
107
107
|
debt: {},
|
|
@@ -109,7 +109,7 @@ export const _getCompoundV2AccountBalances = (provider, network, block, addressM
|
|
|
109
109
|
if (!address) {
|
|
110
110
|
return balances;
|
|
111
111
|
}
|
|
112
|
-
const assets = yield getAllMarketAddresses(provider, network, block);
|
|
112
|
+
const assets = tokens || (yield getAllMarketAddresses(provider, network, block));
|
|
113
113
|
const assetInfo = assets.map(a => getAssetInfoByAddress(a, network));
|
|
114
114
|
const loanInfoContract = CompoundLoanInfoContractViem(provider, network, block);
|
|
115
115
|
const loanInfo = yield loanInfoContract.read.getTokenBalances([address, assets], setViemBlockNumber(block));
|
package/esm/curveUsd/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { CrvUSDGlobalMarketData, CrvUSDMarketData, CrvUSDUserData } from '../typ
|
|
|
3
3
|
import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
|
|
4
4
|
export declare const _getCurveUsdGlobalData: (provider: Client, network: NetworkNumber, selectedMarket: CrvUSDMarketData) => Promise<CrvUSDGlobalMarketData>;
|
|
5
5
|
export declare const getCurveUsdGlobalData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: CrvUSDMarketData) => Promise<CrvUSDGlobalMarketData>;
|
|
6
|
-
export declare const _getCrvUsdAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
|
|
6
|
+
export declare const _getCrvUsdAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress, includeDeposited?: boolean) => Promise<PositionBalances>;
|
|
7
7
|
export declare const getCrvUsdAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
|
|
8
8
|
/**
|
|
9
9
|
* @param borrowRate market borrow APY in % (`CrvUSDGlobalMarketData.borrowRate`); when omitted it is read from the view contract
|
package/esm/curveUsd/index.js
CHANGED
|
@@ -99,7 +99,7 @@ const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied, h
|
|
|
99
99
|
return CrvUSDStatus.SoftLiquidated; // or is fully soft liquidated
|
|
100
100
|
return CrvUSDStatus.Nonexistant;
|
|
101
101
|
};
|
|
102
|
-
export const _getCrvUsdAccountBalances = (
|
|
102
|
+
export const _getCrvUsdAccountBalances = (provider_1, network_1, block_1, addressMapping_1, address_1, controllerAddress_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, block_1, addressMapping_1, address_1, controllerAddress_1, ...args_1], void 0, function* (provider, network, block, addressMapping, address, controllerAddress, includeDeposited = false) {
|
|
103
103
|
let balances = {
|
|
104
104
|
collateral: {},
|
|
105
105
|
debt: {},
|
|
@@ -118,6 +118,11 @@ export const _getCrvUsdAccountBalances = (provider, network, block, addressMappi
|
|
|
118
118
|
[addressMapping ? getAssetInfo(wethToEth(selectedMarket.baseAsset), network).address.toLowerCase() : wethToEth(selectedMarket.baseAsset)]: data.debtAmount.toString(),
|
|
119
119
|
},
|
|
120
120
|
};
|
|
121
|
+
if (includeDeposited) {
|
|
122
|
+
balances.deposited = {
|
|
123
|
+
[addressMapping ? getAssetInfo(wethToEth(selectedMarket.baseAsset), network).address.toLowerCase() : wethToEth(selectedMarket.baseAsset)]: data.curveUsdCollateralAmount.toString(),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
121
126
|
return balances;
|
|
122
127
|
});
|
|
123
128
|
export const getCrvUsdAccountBalances = (provider, network, block, addressMapping, address, controllerAddress) => __awaiter(void 0, void 0, void 0, function* () { return _getCrvUsdAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, controllerAddress); });
|
package/esm/fluid/index.js
CHANGED
|
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
11
|
import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress, } from '@defisaver/tokens';
|
|
12
|
+
import { fluidTokenAmount } from '../helpers/fluidBalances';
|
|
12
13
|
import { IncentiveKind, NetworkNumber, } from '../types/common';
|
|
13
14
|
import { FluidVaultType, } from '../types';
|
|
14
15
|
import { BTCPriceFeedContractViem, DFSFeedRegistryContractViem, ETHPriceFeedContractViem, FeedRegistryContractViem, FluidViewContractViem, } from '../contracts';
|
|
@@ -925,8 +926,8 @@ const parseT1UserData = (userPositionData, vaultData) => {
|
|
|
925
926
|
const collAsset = getAssetInfo(marketData.collAsset0);
|
|
926
927
|
const debtAsset = getAssetInfo(marketData.debtAsset0);
|
|
927
928
|
// for T2 and T4 - this is the number of shares
|
|
928
|
-
const supplied =
|
|
929
|
-
const borrowed =
|
|
929
|
+
const supplied = fluidTokenAmount(userPositionData.supply, collAsset.decimals);
|
|
930
|
+
const borrowed = fluidTokenAmount(userPositionData.borrow, debtAsset.decimals);
|
|
930
931
|
const collUsedAsset = Object.assign(Object.assign({}, EMPTY_USED_ASSET), { symbol: collAsset.symbol, collateral: true, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[collAsset.symbol].price).toString(), isSupplied: new Dec(supplied).gt(0) });
|
|
931
932
|
const debtUsedAsset = Object.assign(Object.assign({}, EMPTY_USED_ASSET), { symbol: debtAsset.symbol, collateral: false, borrowed, borrowedUsd: new Dec(borrowed).mul(assetsData[debtAsset.symbol].price).toString(), isBorrowed: new Dec(borrowed).gt(0) });
|
|
932
933
|
const usedAssets = {
|
|
@@ -946,9 +947,9 @@ const parseT2UserData = (userPositionData, vaultData) => {
|
|
|
946
947
|
const collAsset1 = getAssetInfo(marketData.collAsset1);
|
|
947
948
|
const debtAsset = getAssetInfo(marketData.debtAsset0);
|
|
948
949
|
const supplyShares = getEthAmountForDecimals(userPositionData.supply.toString(), 18); // this is supplied in coll shares
|
|
949
|
-
const borrowed =
|
|
950
|
-
const supplied0 =
|
|
951
|
-
const supplied1 =
|
|
950
|
+
const borrowed = fluidTokenAmount(userPositionData.borrow, debtAsset.decimals); // this is actual token borrow
|
|
951
|
+
const supplied0 = fluidTokenAmount(userPositionData.supply, collAsset0.decimals, assetsData[collAsset0.symbol].tokenPerSupplyShare);
|
|
952
|
+
const supplied1 = fluidTokenAmount(userPositionData.supply, collAsset1.decimals, assetsData[collAsset1.symbol].tokenPerSupplyShare);
|
|
952
953
|
const collUsedAsset0 = {
|
|
953
954
|
symbol: collAsset0.symbol,
|
|
954
955
|
collateral: true,
|
|
@@ -991,10 +992,10 @@ const parseT3UserData = (userPositionData, vaultData) => {
|
|
|
991
992
|
const collAsset = getAssetInfo(marketData.collAsset0);
|
|
992
993
|
const debtAsset0 = getAssetInfo(marketData.debtAsset0);
|
|
993
994
|
const debtAsset1 = getAssetInfo(marketData.debtAsset1);
|
|
994
|
-
const supplied =
|
|
995
|
+
const supplied = fluidTokenAmount(userPositionData.supply, collAsset.decimals); // this is actual token supply
|
|
995
996
|
const borrowShares = getEthAmountForDecimals(userPositionData.borrow.toString(), 18); // this is actual token borrow
|
|
996
|
-
const borrowed0 =
|
|
997
|
-
const borrowed1 =
|
|
997
|
+
const borrowed0 = fluidTokenAmount(userPositionData.borrow, debtAsset0.decimals, assetsData[debtAsset0.symbol].tokenPerBorrowShare);
|
|
998
|
+
const borrowed1 = fluidTokenAmount(userPositionData.borrow, debtAsset1.decimals, assetsData[debtAsset1.symbol].tokenPerBorrowShare);
|
|
998
999
|
const collUsedAsset = {
|
|
999
1000
|
symbol: collAsset.symbol,
|
|
1000
1001
|
collateral: true,
|
|
@@ -1039,10 +1040,10 @@ const parseT4UserData = (userPositionData, vaultData) => {
|
|
|
1039
1040
|
const debtAsset1 = getAssetInfo(marketData.debtAsset1);
|
|
1040
1041
|
const supplyShares = getEthAmountForDecimals(userPositionData.supply.toString(), 18); // this is actual token supply
|
|
1041
1042
|
const borrowShares = getEthAmountForDecimals(userPositionData.borrow.toString(), 18); // this is actual token borrow
|
|
1042
|
-
const supplied0 =
|
|
1043
|
-
const supplied1 =
|
|
1044
|
-
const borrowed0 =
|
|
1045
|
-
const borrowed1 =
|
|
1043
|
+
const supplied0 = fluidTokenAmount(userPositionData.supply, collAsset0.decimals, assetsData[collAsset0.symbol].tokenPerSupplyShare);
|
|
1044
|
+
const supplied1 = fluidTokenAmount(userPositionData.supply, collAsset1.decimals, assetsData[collAsset1.symbol].tokenPerSupplyShare);
|
|
1045
|
+
const borrowed0 = fluidTokenAmount(userPositionData.borrow, debtAsset0.decimals, assetsData[debtAsset0.symbol].tokenPerBorrowShare);
|
|
1046
|
+
const borrowed1 = fluidTokenAmount(userPositionData.borrow, debtAsset1.decimals, assetsData[debtAsset1.symbol].tokenPerBorrowShare);
|
|
1046
1047
|
const collUsedAsset0 = {
|
|
1047
1048
|
symbol: collAsset0.symbol,
|
|
1048
1049
|
collateral: true,
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Client } from 'viem';
|
|
2
|
+
import { AaveMarketInfo, SparkMarketData } from '../types';
|
|
3
|
+
import { Blockish, EthAddress, NetworkNumber, PositionBalances } from '../types/common';
|
|
4
|
+
/** Raw token balances shared by Aave/Spark getters and lending previews. */
|
|
5
|
+
export declare function getAaveLikeBalances(client: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, market: Pick<AaveMarketInfo | SparkMarketData, 'providerAddress' | 'protocolData' | 'protocolDataAddress'>, view: 'AaveLoanInfoV2' | 'AaveV3View' | 'SparkView', tokens?: EthAddress[]): Promise<PositionBalances>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import Dec from 'decimal.js';
|
|
11
|
+
import { getAssetInfoByAddress } from '@defisaver/tokens';
|
|
12
|
+
import { createViemContractFromConfigFunc } from '../contracts';
|
|
13
|
+
import { setViemBlockNumber } from '../services/viem';
|
|
14
|
+
import { wethToEth, wethToEthByAddress } from '../services/utils';
|
|
15
|
+
/** Raw token balances shared by Aave/Spark getters and lending previews. */
|
|
16
|
+
export function getAaveLikeBalances(client, network, block, addressMapping, address, market, view, tokens) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const balances = { collateral: {}, debt: {} };
|
|
19
|
+
if (!address)
|
|
20
|
+
return balances;
|
|
21
|
+
let reserves;
|
|
22
|
+
if (tokens)
|
|
23
|
+
reserves = tokens.map(tokenAddress => ({ tokenAddress, symbol: getAssetInfoByAddress(tokenAddress, network).symbol }));
|
|
24
|
+
else {
|
|
25
|
+
if (!market.protocolData)
|
|
26
|
+
throw new Error('Missing protocol data provider');
|
|
27
|
+
reserves = [...yield createViemContractFromConfigFunc(market.protocolData, market.protocolDataAddress)(client, network)
|
|
28
|
+
.read.getAllReservesTokens(setViemBlockNumber(block))];
|
|
29
|
+
}
|
|
30
|
+
const addresses = reserves.map(token => token.tokenAddress);
|
|
31
|
+
const contract = createViemContractFromConfigFunc(view)(client, network, block);
|
|
32
|
+
const middle = tokens ? Math.ceil(addresses.length / 2) : Math.floor(addresses.length / 2);
|
|
33
|
+
// Preserve legacy V2 single-call and V3/Spark two-call behavior.
|
|
34
|
+
const parts = !tokens && view === 'AaveLoanInfoV2' ? [addresses] : [addresses.slice(0, middle), addresses.slice(middle)];
|
|
35
|
+
const data = (yield Promise.all((tokens ? parts.filter(part => part.length) : parts)
|
|
36
|
+
.map(part => contract.read.getTokenBalances([market.providerAddress, address, part], setViemBlockNumber(block))))).flat();
|
|
37
|
+
data.forEach((token, i) => {
|
|
38
|
+
// The views leave token.token unset; input order identifies the reserve.
|
|
39
|
+
const key = addressMapping ? wethToEthByAddress(reserves[i].tokenAddress, network).toLowerCase() : wethToEth(reserves[i].symbol);
|
|
40
|
+
balances.collateral[key] = token.balance.toString();
|
|
41
|
+
balances.debt[key] = new Dec(token.borrowsStable.toString()).add(token.borrowsVariable.toString()).toString();
|
|
42
|
+
});
|
|
43
|
+
return balances;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FluidUserPositionStructOutputStruct, FluidVaultDataStructOutputStruct } from '../types';
|
|
2
|
+
import { NetworkNumber, PositionBalances } from '../types/common';
|
|
3
|
+
/** Convert raw tokens, or raw 18-decimal shares with a human-readable token/share ratio. */
|
|
4
|
+
export declare const fluidTokenAmount: (amount: bigint, decimals: number, perShare?: string) => string;
|
|
5
|
+
/** The same token/share conversion used by the full Fluid user parsers, without prices or yield. */
|
|
6
|
+
export declare function parseFluidBalances(position: FluidUserPositionStructOutputStruct, vault: FluidVaultDataStructOutputStruct, network: NetworkNumber): PositionBalances;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Dec from 'decimal.js';
|
|
2
|
+
import { getAssetInfoByAddress } from '@defisaver/tokens';
|
|
3
|
+
/** Convert raw tokens, or raw 18-decimal shares with a human-readable token/share ratio. */
|
|
4
|
+
export const fluidTokenAmount = (amount, decimals, perShare) => (new Dec(amount.toString()).div(new Dec(10).pow(perShare === undefined ? decimals : 18)).mul(perShare !== null && perShare !== void 0 ? perShare : 1).toString());
|
|
5
|
+
/** The same token/share conversion used by the full Fluid user parsers, without prices or yield. */
|
|
6
|
+
export function parseFluidBalances(position, vault, network) {
|
|
7
|
+
const type = Number(vault.vaultType);
|
|
8
|
+
if (![10000, 20000, 30000, 40000].includes(type))
|
|
9
|
+
throw new Error('Unsupported Fluid vault');
|
|
10
|
+
const side = (amount, tokens, ratios) => {
|
|
11
|
+
const balances = {};
|
|
12
|
+
tokens.forEach((address, i) => {
|
|
13
|
+
const token = getAssetInfoByAddress(address, network);
|
|
14
|
+
if (!Number.isFinite(token.decimals) || !token.symbol)
|
|
15
|
+
throw new Error('Fluid token metadata unavailable');
|
|
16
|
+
const perShare = ratios ? fluidTokenAmount(ratios[i], token.decimals) : undefined;
|
|
17
|
+
const value = fluidTokenAmount(amount, token.decimals, perShare);
|
|
18
|
+
balances[token.symbol] = new Dec(balances[token.symbol] || 0).add(value).toString();
|
|
19
|
+
});
|
|
20
|
+
return balances;
|
|
21
|
+
};
|
|
22
|
+
const smartSupply = type === 20000 || type === 40000;
|
|
23
|
+
const smartDebt = type === 30000 || type === 40000;
|
|
24
|
+
return {
|
|
25
|
+
collateral: side(position.supply, smartSupply ? [vault.supplyToken0, vault.supplyToken1] : [vault.supplyToken0], smartSupply ? [vault.dexSupplyData.token0PerSupplyShare, vault.dexSupplyData.token1PerSupplyShare] : undefined),
|
|
26
|
+
debt: side(position.borrow, smartDebt ? [vault.borrowToken0, vault.borrowToken1] : [vault.borrowToken0], smartDebt ? [vault.dexBorrowData.token0PerBorrowShare, vault.dexBorrowData.token1PerBorrowShare] : undefined),
|
|
27
|
+
};
|
|
28
|
+
}
|
package/esm/liquityV2/index.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ export type SPYieldGainParameters = {
|
|
|
11
11
|
};
|
|
12
12
|
export declare const _getLiquityV2MarketData: (provider: Client, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo) => Promise<LiquityV2MarketData>;
|
|
13
13
|
export declare const getLiquityV2MarketData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo) => Promise<LiquityV2MarketData>;
|
|
14
|
+
export declare const nftContractCreationBlockMapping: {
|
|
15
|
+
liquityv2eth: number;
|
|
16
|
+
liquityv2wsteth: number;
|
|
17
|
+
liquityv2reth: number;
|
|
18
|
+
liquityv2ethlegacy: number;
|
|
19
|
+
liquityv2wstethlegacy: number;
|
|
20
|
+
liquityv2rethlegacy: number;
|
|
21
|
+
};
|
|
14
22
|
export declare const _getLiquityV2UserTroveIds: (provider: PublicClient, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, troveNFTAddress: EthAddress, limitBlocksForEventFetching: boolean, account: EthAddress) => Promise<{
|
|
15
23
|
troves: {
|
|
16
24
|
troveId: string;
|
package/esm/liquityV2/index.js
CHANGED
|
@@ -112,7 +112,7 @@ const getUserTroves = (provider_1, network_1, isLegacy_1, account_1, marketAddre
|
|
|
112
112
|
return { troves: existingTroves.filter((trove) => trove.ownedByUser), nextFreeTroveIndex };
|
|
113
113
|
return getUserTroves(provider, network, isLegacy, account, marketAddress, newStartIndex, newStartIndex + 100, existingTroves);
|
|
114
114
|
});
|
|
115
|
-
const nftContractCreationBlockMapping = {
|
|
115
|
+
export const nftContractCreationBlockMapping = {
|
|
116
116
|
[LiquityV2Versions.LiquityV2Eth]: 22516079,
|
|
117
117
|
[LiquityV2Versions.LiquityV2WstEth]: 22516099,
|
|
118
118
|
[LiquityV2Versions.LiquityV2REth]: 22516118,
|
package/esm/llamaLend/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { LlamaLendGlobalMarketData, LlamaLendMarketData, LlamaLendUserData } fro
|
|
|
3
3
|
import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
|
|
4
4
|
export declare const _getLlamaLendGlobalData: (provider: Client, network: NetworkNumber, selectedMarket: LlamaLendMarketData) => Promise<LlamaLendGlobalMarketData>;
|
|
5
5
|
export declare const getLlamaLendGlobalData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: LlamaLendMarketData) => Promise<LlamaLendGlobalMarketData>;
|
|
6
|
-
export declare const _getLlamaLendAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
|
|
6
|
+
export declare const _getLlamaLendAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress, includeDeposited?: boolean) => Promise<PositionBalances>;
|
|
7
7
|
export declare const getLlamaLendAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
|
|
8
8
|
export declare const _getLlamaLendUserData: (provider: Client, network: NetworkNumber, address: EthAddress, selectedMarket: LlamaLendMarketData, marketData: LlamaLendGlobalMarketData) => Promise<LlamaLendUserData>;
|
|
9
9
|
export declare const getLlamaLendUserData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, selectedMarket: LlamaLendMarketData, marketData: LlamaLendGlobalMarketData) => Promise<LlamaLendUserData>;
|
package/esm/llamaLend/index.js
CHANGED
|
@@ -153,7 +153,7 @@ const getStatusForUser = (bandRange, activeBand, debtSupplied, collSupplied, hea
|
|
|
153
153
|
return LlamaLendStatus.SoftLiquidated; // or is fully soft liquidated
|
|
154
154
|
return LlamaLendStatus.Nonexistant;
|
|
155
155
|
};
|
|
156
|
-
export const _getLlamaLendAccountBalances = (
|
|
156
|
+
export const _getLlamaLendAccountBalances = (provider_1, network_1, block_1, addressMapping_1, address_1, controllerAddress_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, block_1, addressMapping_1, address_1, controllerAddress_1, ...args_1], void 0, function* (provider, network, block, addressMapping, address, controllerAddress, includeDeposited = false) {
|
|
157
157
|
let balances = {
|
|
158
158
|
collateral: {},
|
|
159
159
|
debt: {},
|
|
@@ -172,6 +172,11 @@ export const _getLlamaLendAccountBalances = (provider, network, block, addressMa
|
|
|
172
172
|
[addressMapping ? getAssetInfo(wethToEth(selectedMarket.baseAsset), network).address.toLowerCase() : wethToEth(selectedMarket.baseAsset)]: data.debtAmount.toString(),
|
|
173
173
|
},
|
|
174
174
|
};
|
|
175
|
+
if (includeDeposited) {
|
|
176
|
+
balances.deposited = {
|
|
177
|
+
[addressMapping ? getAssetInfo(wethToEth(selectedMarket.baseAsset), network).address.toLowerCase() : wethToEth(selectedMarket.baseAsset)]: data.debtTokenCollateralAmount.toString(),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
175
180
|
return balances;
|
|
176
181
|
});
|
|
177
182
|
export const getLlamaLendAccountBalances = (provider, network, block, addressMapping, address, controllerAddress) => __awaiter(void 0, void 0, void 0, function* () { return _getLlamaLendAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, controllerAddress); });
|
|
@@ -46,7 +46,6 @@ export declare const MORPHO_BLUE_SUSDS_USDT_965: (networkId?: NetworkNumber) =>
|
|
|
46
46
|
export declare const MORPHO_BLUE_MORPHO_USDC_625: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
47
47
|
export declare const MORPHO_BLUE_LBTC_WBTC_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
48
48
|
export declare const MORPHO_BLUE_SWBTC_WBTC_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
49
|
-
export declare const MORPHO_BLUE_OSETH_ETH_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
50
49
|
export declare const MORPHO_BLUE_WOETH_ETH_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
51
50
|
export declare const MORPHO_BLUE_PTWEETH_USDA_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
52
51
|
export declare const MORPHO_BLUE_PRIME_PYUSD_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
@@ -156,7 +155,6 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
|
156
155
|
readonly morphobluersetheth_945: MorphoBlueMarketData;
|
|
157
156
|
readonly morphobluerswetheth_945: MorphoBlueMarketData;
|
|
158
157
|
readonly morphoblueweetheth_860: MorphoBlueMarketData;
|
|
159
|
-
readonly morphoblueosetheth_860: MorphoBlueMarketData;
|
|
160
158
|
readonly morphobluewoetheth_860: MorphoBlueMarketData;
|
|
161
159
|
readonly morphoblueptweethusda_860: MorphoBlueMarketData;
|
|
162
160
|
readonly morphoblueswbtcwbtc_945: MorphoBlueMarketData;
|
|
@@ -706,21 +706,6 @@ export const MORPHO_BLUE_SWBTC_WBTC_945 = (networkId = NetworkNumber.Eth) => ({
|
|
|
706
706
|
marketId: '0x514efda728a646dcafe4fdc9afe4ea214709e110ac1b2b78185ae00c1782cc82',
|
|
707
707
|
protocolName: 'morpho-blue',
|
|
708
708
|
});
|
|
709
|
-
export const MORPHO_BLUE_OSETH_ETH_860 = (networkId = NetworkNumber.Eth) => ({
|
|
710
|
-
chainIds: [NetworkNumber.Eth],
|
|
711
|
-
label: 'Morpho Blue',
|
|
712
|
-
shortLabel: 'osETH/ETH',
|
|
713
|
-
value: MorphoBlueVersions.MorphoBlueOsEthEth_860,
|
|
714
|
-
url: 'osethweth-d5211d0e',
|
|
715
|
-
loanToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
|
|
716
|
-
collateralToken: '0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38',
|
|
717
|
-
oracle: '0x224F2F1333b45E34fFCfC3bD01cE43C73A914498',
|
|
718
|
-
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
719
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
720
|
-
lltv: 0.86,
|
|
721
|
-
marketId: '0xd5211d0e3f4a30d5c98653d988585792bb7812221f04801be73a44ceecb11e89',
|
|
722
|
-
protocolName: 'morpho-blue',
|
|
723
|
-
});
|
|
724
709
|
export const MORPHO_BLUE_WOETH_ETH_860 = (networkId = NetworkNumber.Eth) => ({
|
|
725
710
|
chainIds: [NetworkNumber.Eth],
|
|
726
711
|
label: 'Morpho Blue',
|
|
@@ -1869,7 +1854,6 @@ export const MorphoBlueMarkets = (networkId) => ({
|
|
|
1869
1854
|
[MorphoBlueVersions.MorphoBlueRsEthEth_945]: MORPHO_BLUE_RSETH_ETH_945(networkId),
|
|
1870
1855
|
[MorphoBlueVersions.MorphoBlueRswEthEth_945]: MORPHO_BLUE_RSWETH_ETH_945(networkId),
|
|
1871
1856
|
[MorphoBlueVersions.MorphoBlueWeEthEth_860]: MORPHO_BLUE_WEETH_ETH_860(networkId),
|
|
1872
|
-
[MorphoBlueVersions.MorphoBlueOsEthEth_860]: MORPHO_BLUE_OSETH_ETH_860(networkId),
|
|
1873
1857
|
[MorphoBlueVersions.MorphoBlueWoEthEth_860]: MORPHO_BLUE_WOETH_ETH_860(networkId),
|
|
1874
1858
|
[MorphoBlueVersions.MorphoBluePTweETHUSDA_860]: MORPHO_BLUE_PTWEETH_USDA_860(networkId),
|
|
1875
1859
|
[MorphoBlueVersions.MorphoBlueSwBTCWBTC_945]: MORPHO_BLUE_SWBTC_WBTC_945(networkId),
|
|
@@ -5,7 +5,7 @@ export declare function _getMorphoMidnightMarketData(provider: Client, network:
|
|
|
5
5
|
export declare function getMorphoMidnightMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoMidnightMarketData): Promise<MorphoMidnightMarketInfo>;
|
|
6
6
|
export declare function _getMorphoMidnightAccountData(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoMidnightMarketData, marketInfo: MorphoMidnightMarketInfo): Promise<MorphoMidnightPositionData>;
|
|
7
7
|
export declare function getMorphoMidnightAccountData(provider: EthereumProvider, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoMidnightMarketData, marketInfo: MorphoMidnightMarketInfo): Promise<MorphoMidnightPositionData>;
|
|
8
|
-
export declare const _getMorphoMidnightAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoMidnightMarketData) => Promise<PositionBalances>;
|
|
8
|
+
export declare const _getMorphoMidnightAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoMidnightMarketData, includeCredit?: boolean) => Promise<PositionBalances>;
|
|
9
9
|
export declare const getMorphoMidnightAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoMidnightMarketData) => Promise<PositionBalances>;
|
|
10
10
|
export declare function getMorphoMidnightEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoMidnightMarketData, marketInfo: MorphoMidnightMarketInfo): Promise<{
|
|
11
11
|
apy: string;
|
|
@@ -210,7 +210,7 @@ export function getMorphoMidnightAccountData(provider, network, account, selecte
|
|
|
210
210
|
return _getMorphoMidnightAccountData(getViemProvider(provider, network), network, account, selectedMarket, marketInfo);
|
|
211
211
|
});
|
|
212
212
|
}
|
|
213
|
-
export const _getMorphoMidnightAccountBalances = (
|
|
213
|
+
export const _getMorphoMidnightAccountBalances = (provider_1, network_1, block_1, addressMapping_1, address_1, selectedMarket_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, block_1, addressMapping_1, address_1, selectedMarket_1, ...args_1], void 0, function* (provider, network, block, addressMapping, address, selectedMarket, includeCredit = false) {
|
|
214
214
|
const balances = { collateral: {}, debt: {} };
|
|
215
215
|
if (!address)
|
|
216
216
|
return balances;
|
|
@@ -230,6 +230,11 @@ export const _getMorphoMidnightAccountBalances = (provider, network, block, addr
|
|
|
230
230
|
collateral[addressMapping ? collInfo.address.toLowerCase() : wethToEth(collInfo.symbol)] = assetAmountInEth(rawAmount, wethToEth(collInfo.symbol));
|
|
231
231
|
});
|
|
232
232
|
balances.collateral = collateral;
|
|
233
|
+
if (includeCredit) {
|
|
234
|
+
balances.deposited = {
|
|
235
|
+
[addressMapping ? loanTokenInfo.address.toLowerCase() : wethToEth(loanTokenInfo.symbol)]: assetAmountInEth(positionInfo.credit.toString(), wethToEth(loanTokenInfo.symbol)),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
233
238
|
return balances;
|
|
234
239
|
});
|
|
235
240
|
export const getMorphoMidnightAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () { return _getMorphoMidnightAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, selectedMarket); });
|
package/esm/portfolio/index.d.ts
CHANGED
package/esm/portfolio/index.js
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
|
|
2
|
+
import { LendingSummaryOptions, WalletLendingSummaries } from '../types/lendingSummary';
|
|
3
|
+
/** Lending-only balances at one snapshot, valued with caller-supplied market prices.
|
|
4
|
+
* One shared client/limiter covers every wallet. Failed reads remain partial; cancellation
|
|
5
|
+
* discards results. Morpho Blue earn deposits, rewards and savings are excluded.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getWalletLendingSummaries(provider: EthereumProvider, network: NetworkNumber, walletAddresses: EthAddress[], options: LendingSummaryOptions): Promise<WalletLendingSummaries>;
|