@defisaver/positions-sdk 2.1.89 → 2.1.91

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.
@@ -38,16 +38,18 @@ const getBaseAssetPriceFunction = (asset) => {
38
38
  };
39
39
  const _getCompoundV3MarketsData = (provider, network, selectedMarket, defaultProvider) => __awaiter(void 0, void 0, void 0, function* () {
40
40
  const contract = (0, contracts_1.CompV3ViewContractViem)(provider, network);
41
- const [baseAssetPrice, compPrice, baseTokenInfo, collInfos] = yield Promise.all([
41
+ const [baseAssetPrice, compPrice, baseTokenInfo, collInfos, govInfo] = yield Promise.all([
42
42
  getBaseAssetPriceFunction(selectedMarket.baseAsset)(defaultProvider),
43
43
  (0, priceService_1.getCompPrice)(defaultProvider),
44
44
  contract.read.getFullBaseTokenInfo([selectedMarket.baseMarketAddress]),
45
45
  contract.read.getFullCollInfos([selectedMarket.baseMarketAddress]),
46
+ contract.read.getGovernanceInfoFull([selectedMarket.baseMarketAddress]),
46
47
  ]);
48
+ const { isSupplyPaused, isWithdrawPaused } = govInfo;
47
49
  const supportedAssetsAddresses = getSupportedAssetsAddressesForMarket(selectedMarket, network);
48
50
  const colls = collInfos
49
51
  .filter((coll) => supportedAssetsAddresses.includes(coll.tokenAddr.toLowerCase()))
50
- .map((coll) => (0, compoundHelpers_1.formatMarketData)(coll, network, baseAssetPrice));
52
+ .map((coll) => (0, compoundHelpers_1.formatMarketData)(coll, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused));
51
53
  for (const coll of colls) {
52
54
  if (staking_1.STAKING_ASSETS.includes(coll.symbol)) {
53
55
  coll.supplyIncentives.push({
@@ -58,7 +60,7 @@ const _getCompoundV3MarketsData = (provider, network, selectedMarket, defaultPro
58
60
  });
59
61
  }
60
62
  }
61
- const base = (0, compoundHelpers_1.formatBaseData)(baseTokenInfo, network, baseAssetPrice);
63
+ const base = (0, compoundHelpers_1.formatBaseData)(baseTokenInfo, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused);
62
64
  const payload = {};
63
65
  const baseObj = Object.assign(Object.assign({}, base), (yield (0, compoundHelpers_1.getIncentiveApys)(base, compPrice)));
64
66
  const allAssets = [baseObj, ...colls];
@@ -71,7 +73,9 @@ const _getCompoundV3MarketsData = (provider, network, selectedMarket, defaultPro
71
73
  .forEach((market, i) => {
72
74
  payload[market.symbol] = Object.assign(Object.assign({}, market), { sortIndex: i });
73
75
  });
74
- return { assetsData: payload };
76
+ return {
77
+ assetsData: payload, isMarketBorrowPaused: isWithdrawPaused, isMarketSupplyPaused: isSupplyPaused, isMarketWithdrawPaused: isWithdrawPaused,
78
+ };
75
79
  });
76
80
  exports._getCompoundV3MarketsData = _getCompoundV3MarketsData;
77
81
  const getCompoundV3MarketsData = (provider, network, selectedMarket, defaultProvider) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getCompoundV3MarketsData)((0, viem_1.getViemProvider)(provider, network), network, selectedMarket, (0, viem_1.getViemProvider)(defaultProvider, network)); });
@@ -1,7 +1,7 @@
1
1
  import { BaseAdditionalAssetData, CompoundAggregatedPositionData, CompoundMarketData, CompoundV2AssetsData, CompoundV2UsedAssets, CompoundV3AssetData, CompoundV3AssetsData, CompoundV3UsedAssets } from '../../types';
2
2
  import { EthAddress, EthereumProvider, IncentiveData, NetworkNumber } from '../../types/common';
3
- export declare const formatMarketData: (data: any, network: NetworkNumber, baseAssetPrice: string) => CompoundV3AssetData;
4
- export declare const formatBaseData: (data: any, network: NetworkNumber, baseAssetPrice: string) => CompoundV3AssetData & BaseAdditionalAssetData;
3
+ export declare const formatMarketData: (data: any, network: NetworkNumber, baseAssetPrice: string, isSupplyPaused: boolean, isWithdrawPaused: boolean) => CompoundV3AssetData;
4
+ export declare const formatBaseData: (data: any, network: NetworkNumber, baseAssetPrice: string, isSupplyPaused: boolean, isWithdrawPaused: boolean) => CompoundV3AssetData & BaseAdditionalAssetData;
5
5
  export declare const getIncentiveApys: (baseData: CompoundV3AssetData & BaseAdditionalAssetData, compPrice: string) => Promise<{
6
6
  supplyIncentives: IncentiveData[];
7
7
  borrowIncentives: IncentiveData[];
@@ -34,15 +34,15 @@ const staking_1 = require("../../staking");
34
34
  const common_1 = require("../../types/common");
35
35
  const contracts_1 = require("../../contracts");
36
36
  const viem_1 = require("../../services/viem");
37
- const formatMarketData = (data, network, baseAssetPrice) => {
37
+ const formatMarketData = (data, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused) => {
38
38
  const assetInfo = (0, tokens_1.getAssetInfoByAddress)(data.tokenAddr, network);
39
39
  const isWETH = assetInfo.symbol === 'WETH';
40
40
  const price = (0, utils_1.getEthAmountForDecimals)(data.price, 8);
41
- return (Object.assign(Object.assign({}, data), { borrowCollateralFactor: data.borrowCollateralFactor.toString(), liquidateCollateralFactor: data.liquidateCollateralFactor.toString(), liquidationFactor: data.liquidationFactor.toString(), supplyReserved: data.supplyReserved.toString(), priceInBaseAsset: (0, utils_1.getEthAmountForDecimals)(data.price, 8), price: new decimal_js_1.default(price).mul(baseAssetPrice).toString(), collateralFactor: (0, utils_1.getEthAmountForDecimals)(data.borrowCollateralFactor, 18), liquidationRatio: (0, utils_1.getEthAmountForDecimals)(data.liquidateCollateralFactor, 18), supplyCap: (0, utils_1.getEthAmountForDecimals)(data.supplyCap, assetInfo.decimals), totalSupply: (0, utils_1.getEthAmountForDecimals)(data.totalSupply, assetInfo.decimals), symbol: isWETH ? 'ETH' : assetInfo.symbol, supplyRate: '0', borrowRate: '0', canBeBorrowed: false, canBeSupplied: true, supplyIncentives: [], borrowIncentives: [] }));
41
+ return (Object.assign(Object.assign({}, data), { borrowCollateralFactor: data.borrowCollateralFactor.toString(), liquidateCollateralFactor: data.liquidateCollateralFactor.toString(), liquidationFactor: data.liquidationFactor.toString(), supplyReserved: data.supplyReserved.toString(), priceInBaseAsset: (0, utils_1.getEthAmountForDecimals)(data.price, 8), price: new decimal_js_1.default(price).mul(baseAssetPrice).toString(), collateralFactor: (0, utils_1.getEthAmountForDecimals)(data.borrowCollateralFactor, 18), liquidationRatio: (0, utils_1.getEthAmountForDecimals)(data.liquidateCollateralFactor, 18), supplyCap: (0, utils_1.getEthAmountForDecimals)(data.supplyCap, assetInfo.decimals), totalSupply: (0, utils_1.getEthAmountForDecimals)(data.totalSupply, assetInfo.decimals), symbol: isWETH ? 'ETH' : assetInfo.symbol, supplyRate: '0', borrowRate: '0', canBeBorrowed: false, canBeSupplied: !isSupplyPaused, canBeWithdrawn: !isWithdrawPaused, supplyIncentives: [], borrowIncentives: [] }));
42
42
  };
43
43
  exports.formatMarketData = formatMarketData;
44
44
  // TODO: maybe not hardcode decimals
45
- const formatBaseData = (data, network, baseAssetPrice) => {
45
+ const formatBaseData = (data, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused) => {
46
46
  const assetInfo = (0, tokens_1.getAssetInfoByAddress)(data.tokenAddr, network);
47
47
  const totalSupply = (0, utils_1.getEthAmountForDecimals)(new decimal_js_1.default(data.totalSupply).mul(data.supplyIndex).toString(), 15 + assetInfo.decimals);
48
48
  const totalBorrow = (0, utils_1.getEthAmountForDecimals)(new decimal_js_1.default(data.totalBorrow).mul(data.borrowIndex).toString(), 15 + assetInfo.decimals);
@@ -50,7 +50,7 @@ const formatBaseData = (data, network, baseAssetPrice) => {
50
50
  .toString()), borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(data.borrowRate).div(1e18).mul(constants_1.SECONDS_PER_YEAR).mul(100)
51
51
  .toString()), utilization: (0, utils_1.getEthAmountForDecimals)(data.utilization, 16), // utilization is totalSupply/totalBorrow in 1e18, but we need % so when we mul with 100 it's 16 decimals
52
52
  totalSupply,
53
- totalBorrow, marketLiquidity: new decimal_js_1.default(totalSupply).minus(totalBorrow).toString(), symbol: (0, utils_1.wethToEth)(assetInfo.symbol), priceInBaseAsset: (0, utils_1.getEthAmountForDecimals)(data.price, 8), price: baseAssetPrice, collateralFactor: '0', liquidationRatio: '0', canBeBorrowed: true, canBeSupplied: true, supplyCap: '0', rewardSupplySpeed: (0, utils_1.getEthAmountForDecimals)(data.baseTrackingSupplyRewardsSpeed, 15), rewardBorrowSpeed: (0, utils_1.getEthAmountForDecimals)(data.baseTrackingBorrowRewardsSpeed, 15), minDebt: (0, utils_1.getEthAmountForDecimals)(data.baseBorrowMin, assetInfo.decimals), isBase: true }));
53
+ totalBorrow, marketLiquidity: new decimal_js_1.default(totalSupply).minus(totalBorrow).toString(), symbol: (0, utils_1.wethToEth)(assetInfo.symbol), priceInBaseAsset: (0, utils_1.getEthAmountForDecimals)(data.price, 8), price: baseAssetPrice, collateralFactor: '0', liquidationRatio: '0', canBeBorrowed: !isWithdrawPaused, canBeSupplied: !isSupplyPaused, canBeWithdrawn: !isWithdrawPaused, supplyCap: '0', rewardSupplySpeed: (0, utils_1.getEthAmountForDecimals)(data.baseTrackingSupplyRewardsSpeed, 15), rewardBorrowSpeed: (0, utils_1.getEthAmountForDecimals)(data.baseTrackingBorrowRewardsSpeed, 15), minDebt: (0, utils_1.getEthAmountForDecimals)(data.baseBorrowMin, assetInfo.decimals), isBase: true }));
54
54
  };
55
55
  exports.formatBaseData = formatBaseData;
56
56
  const getIncentiveApys = (baseData, compPrice) => __awaiter(void 0, void 0, void 0, function* () {
@@ -60,6 +60,7 @@ export interface CompoundV3AssetData extends CompoundAssetData {
60
60
  liquidationRatio: string;
61
61
  supplyCap: string;
62
62
  priceInBaseAsset: string;
63
+ canBeWithdrawn: boolean;
63
64
  }
64
65
  export interface CompoundAssetsData<T> {
65
66
  [token: string]: T;
@@ -70,7 +71,11 @@ export type CompoundMarketsData<T> = {
70
71
  assetsData: T;
71
72
  };
72
73
  export type CompoundV2MarketsData = CompoundMarketsData<CompoundV2AssetsData>;
73
- export type CompoundV3MarketsData = CompoundMarketsData<CompoundV3AssetsData>;
74
+ export type CompoundV3MarketsData = CompoundMarketsData<CompoundV3AssetsData> & {
75
+ isMarketSupplyPaused: boolean;
76
+ isMarketWithdrawPaused: boolean;
77
+ isMarketBorrowPaused: boolean;
78
+ };
74
79
  export interface BaseAdditionalAssetData {
75
80
  totalBorrow: string;
76
81
  utilization: string;
@@ -32,16 +32,18 @@ const getBaseAssetPriceFunction = (asset) => {
32
32
  };
33
33
  export const _getCompoundV3MarketsData = (provider, network, selectedMarket, defaultProvider) => __awaiter(void 0, void 0, void 0, function* () {
34
34
  const contract = CompV3ViewContractViem(provider, network);
35
- const [baseAssetPrice, compPrice, baseTokenInfo, collInfos] = yield Promise.all([
35
+ const [baseAssetPrice, compPrice, baseTokenInfo, collInfos, govInfo] = yield Promise.all([
36
36
  getBaseAssetPriceFunction(selectedMarket.baseAsset)(defaultProvider),
37
37
  getCompPrice(defaultProvider),
38
38
  contract.read.getFullBaseTokenInfo([selectedMarket.baseMarketAddress]),
39
39
  contract.read.getFullCollInfos([selectedMarket.baseMarketAddress]),
40
+ contract.read.getGovernanceInfoFull([selectedMarket.baseMarketAddress]),
40
41
  ]);
42
+ const { isSupplyPaused, isWithdrawPaused } = govInfo;
41
43
  const supportedAssetsAddresses = getSupportedAssetsAddressesForMarket(selectedMarket, network);
42
44
  const colls = collInfos
43
45
  .filter((coll) => supportedAssetsAddresses.includes(coll.tokenAddr.toLowerCase()))
44
- .map((coll) => formatMarketData(coll, network, baseAssetPrice));
46
+ .map((coll) => formatMarketData(coll, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused));
45
47
  for (const coll of colls) {
46
48
  if (STAKING_ASSETS.includes(coll.symbol)) {
47
49
  coll.supplyIncentives.push({
@@ -52,7 +54,7 @@ export const _getCompoundV3MarketsData = (provider, network, selectedMarket, def
52
54
  });
53
55
  }
54
56
  }
55
- const base = formatBaseData(baseTokenInfo, network, baseAssetPrice);
57
+ const base = formatBaseData(baseTokenInfo, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused);
56
58
  const payload = {};
57
59
  const baseObj = Object.assign(Object.assign({}, base), (yield getIncentiveApys(base, compPrice)));
58
60
  const allAssets = [baseObj, ...colls];
@@ -65,7 +67,9 @@ export const _getCompoundV3MarketsData = (provider, network, selectedMarket, def
65
67
  .forEach((market, i) => {
66
68
  payload[market.symbol] = Object.assign(Object.assign({}, market), { sortIndex: i });
67
69
  });
68
- return { assetsData: payload };
70
+ return {
71
+ assetsData: payload, isMarketBorrowPaused: isWithdrawPaused, isMarketSupplyPaused: isSupplyPaused, isMarketWithdrawPaused: isWithdrawPaused,
72
+ };
69
73
  });
70
74
  export const getCompoundV3MarketsData = (provider, network, selectedMarket, defaultProvider) => __awaiter(void 0, void 0, void 0, function* () { return _getCompoundV3MarketsData(getViemProvider(provider, network), network, selectedMarket, getViemProvider(defaultProvider, network)); });
71
75
  export const EMPTY_COMPOUND_V3_DATA = {
@@ -1,7 +1,7 @@
1
1
  import { BaseAdditionalAssetData, CompoundAggregatedPositionData, CompoundMarketData, CompoundV2AssetsData, CompoundV2UsedAssets, CompoundV3AssetData, CompoundV3AssetsData, CompoundV3UsedAssets } from '../../types';
2
2
  import { EthAddress, EthereumProvider, IncentiveData, NetworkNumber } from '../../types/common';
3
- export declare const formatMarketData: (data: any, network: NetworkNumber, baseAssetPrice: string) => CompoundV3AssetData;
4
- export declare const formatBaseData: (data: any, network: NetworkNumber, baseAssetPrice: string) => CompoundV3AssetData & BaseAdditionalAssetData;
3
+ export declare const formatMarketData: (data: any, network: NetworkNumber, baseAssetPrice: string, isSupplyPaused: boolean, isWithdrawPaused: boolean) => CompoundV3AssetData;
4
+ export declare const formatBaseData: (data: any, network: NetworkNumber, baseAssetPrice: string, isSupplyPaused: boolean, isWithdrawPaused: boolean) => CompoundV3AssetData & BaseAdditionalAssetData;
5
5
  export declare const getIncentiveApys: (baseData: CompoundV3AssetData & BaseAdditionalAssetData, compPrice: string) => Promise<{
6
6
  supplyIncentives: IncentiveData[];
7
7
  borrowIncentives: IncentiveData[];
@@ -28,14 +28,14 @@ import { calculateNetApy, getStakingApy, STAKING_ASSETS } from '../../staking';
28
28
  import { IncentiveKind, LeverageType, NetworkNumber, } from '../../types/common';
29
29
  import { CompoundLoanInfoContractViem, CompV3ViewContractViem } from '../../contracts';
30
30
  import { getViemProvider } from '../../services/viem';
31
- export const formatMarketData = (data, network, baseAssetPrice) => {
31
+ export const formatMarketData = (data, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused) => {
32
32
  const assetInfo = getAssetInfoByAddress(data.tokenAddr, network);
33
33
  const isWETH = assetInfo.symbol === 'WETH';
34
34
  const price = getEthAmountForDecimals(data.price, 8);
35
- return (Object.assign(Object.assign({}, data), { borrowCollateralFactor: data.borrowCollateralFactor.toString(), liquidateCollateralFactor: data.liquidateCollateralFactor.toString(), liquidationFactor: data.liquidationFactor.toString(), supplyReserved: data.supplyReserved.toString(), priceInBaseAsset: getEthAmountForDecimals(data.price, 8), price: new Dec(price).mul(baseAssetPrice).toString(), collateralFactor: getEthAmountForDecimals(data.borrowCollateralFactor, 18), liquidationRatio: getEthAmountForDecimals(data.liquidateCollateralFactor, 18), supplyCap: getEthAmountForDecimals(data.supplyCap, assetInfo.decimals), totalSupply: getEthAmountForDecimals(data.totalSupply, assetInfo.decimals), symbol: isWETH ? 'ETH' : assetInfo.symbol, supplyRate: '0', borrowRate: '0', canBeBorrowed: false, canBeSupplied: true, supplyIncentives: [], borrowIncentives: [] }));
35
+ return (Object.assign(Object.assign({}, data), { borrowCollateralFactor: data.borrowCollateralFactor.toString(), liquidateCollateralFactor: data.liquidateCollateralFactor.toString(), liquidationFactor: data.liquidationFactor.toString(), supplyReserved: data.supplyReserved.toString(), priceInBaseAsset: getEthAmountForDecimals(data.price, 8), price: new Dec(price).mul(baseAssetPrice).toString(), collateralFactor: getEthAmountForDecimals(data.borrowCollateralFactor, 18), liquidationRatio: getEthAmountForDecimals(data.liquidateCollateralFactor, 18), supplyCap: getEthAmountForDecimals(data.supplyCap, assetInfo.decimals), totalSupply: getEthAmountForDecimals(data.totalSupply, assetInfo.decimals), symbol: isWETH ? 'ETH' : assetInfo.symbol, supplyRate: '0', borrowRate: '0', canBeBorrowed: false, canBeSupplied: !isSupplyPaused, canBeWithdrawn: !isWithdrawPaused, supplyIncentives: [], borrowIncentives: [] }));
36
36
  };
37
37
  // TODO: maybe not hardcode decimals
38
- export const formatBaseData = (data, network, baseAssetPrice) => {
38
+ export const formatBaseData = (data, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused) => {
39
39
  const assetInfo = getAssetInfoByAddress(data.tokenAddr, network);
40
40
  const totalSupply = getEthAmountForDecimals(new Dec(data.totalSupply).mul(data.supplyIndex).toString(), 15 + assetInfo.decimals);
41
41
  const totalBorrow = getEthAmountForDecimals(new Dec(data.totalBorrow).mul(data.borrowIndex).toString(), 15 + assetInfo.decimals);
@@ -43,7 +43,7 @@ export const formatBaseData = (data, network, baseAssetPrice) => {
43
43
  .toString()), borrowRate: aprToApy(new Dec(data.borrowRate).div(1e18).mul(SECONDS_PER_YEAR).mul(100)
44
44
  .toString()), utilization: getEthAmountForDecimals(data.utilization, 16), // utilization is totalSupply/totalBorrow in 1e18, but we need % so when we mul with 100 it's 16 decimals
45
45
  totalSupply,
46
- totalBorrow, marketLiquidity: new Dec(totalSupply).minus(totalBorrow).toString(), symbol: wethToEth(assetInfo.symbol), priceInBaseAsset: getEthAmountForDecimals(data.price, 8), price: baseAssetPrice, collateralFactor: '0', liquidationRatio: '0', canBeBorrowed: true, canBeSupplied: true, supplyCap: '0', rewardSupplySpeed: getEthAmountForDecimals(data.baseTrackingSupplyRewardsSpeed, 15), rewardBorrowSpeed: getEthAmountForDecimals(data.baseTrackingBorrowRewardsSpeed, 15), minDebt: getEthAmountForDecimals(data.baseBorrowMin, assetInfo.decimals), isBase: true }));
46
+ totalBorrow, marketLiquidity: new Dec(totalSupply).minus(totalBorrow).toString(), symbol: wethToEth(assetInfo.symbol), priceInBaseAsset: getEthAmountForDecimals(data.price, 8), price: baseAssetPrice, collateralFactor: '0', liquidationRatio: '0', canBeBorrowed: !isWithdrawPaused, canBeSupplied: !isSupplyPaused, canBeWithdrawn: !isWithdrawPaused, supplyCap: '0', rewardSupplySpeed: getEthAmountForDecimals(data.baseTrackingSupplyRewardsSpeed, 15), rewardBorrowSpeed: getEthAmountForDecimals(data.baseTrackingBorrowRewardsSpeed, 15), minDebt: getEthAmountForDecimals(data.baseBorrowMin, assetInfo.decimals), isBase: true }));
47
47
  };
48
48
  export const getIncentiveApys = (baseData, compPrice) => __awaiter(void 0, void 0, void 0, function* () {
49
49
  return ({
@@ -60,6 +60,7 @@ export interface CompoundV3AssetData extends CompoundAssetData {
60
60
  liquidationRatio: string;
61
61
  supplyCap: string;
62
62
  priceInBaseAsset: string;
63
+ canBeWithdrawn: boolean;
63
64
  }
64
65
  export interface CompoundAssetsData<T> {
65
66
  [token: string]: T;
@@ -70,7 +71,11 @@ export type CompoundMarketsData<T> = {
70
71
  assetsData: T;
71
72
  };
72
73
  export type CompoundV2MarketsData = CompoundMarketsData<CompoundV2AssetsData>;
73
- export type CompoundV3MarketsData = CompoundMarketsData<CompoundV3AssetsData>;
74
+ export type CompoundV3MarketsData = CompoundMarketsData<CompoundV3AssetsData> & {
75
+ isMarketSupplyPaused: boolean;
76
+ isMarketWithdrawPaused: boolean;
77
+ isMarketBorrowPaused: boolean;
78
+ };
74
79
  export interface BaseAdditionalAssetData {
75
80
  totalBorrow: string;
76
81
  utilization: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "2.1.89",
3
+ "version": "2.1.91",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -43,18 +43,21 @@ const getBaseAssetPriceFunction = (asset: string) => {
43
43
  export const _getCompoundV3MarketsData = async (provider: Client, network: NetworkNumber, selectedMarket: CompoundMarketData, defaultProvider: Client): Promise<CompoundV3MarketsData> => {
44
44
  const contract = CompV3ViewContractViem(provider, network);
45
45
 
46
- const [baseAssetPrice, compPrice, baseTokenInfo, collInfos] = await Promise.all([
46
+ const [baseAssetPrice, compPrice, baseTokenInfo, collInfos, govInfo] = await Promise.all([
47
47
  getBaseAssetPriceFunction(selectedMarket.baseAsset)(defaultProvider),
48
48
  getCompPrice(defaultProvider),
49
49
  contract.read.getFullBaseTokenInfo([selectedMarket.baseMarketAddress]),
50
50
  contract.read.getFullCollInfos([selectedMarket.baseMarketAddress]),
51
+ contract.read.getGovernanceInfoFull([selectedMarket.baseMarketAddress]),
51
52
  ]);
52
53
 
54
+ const { isSupplyPaused, isWithdrawPaused } = govInfo;
55
+
53
56
  const supportedAssetsAddresses = getSupportedAssetsAddressesForMarket(selectedMarket, network);
54
57
 
55
58
  const colls = collInfos
56
59
  .filter((coll: any) => supportedAssetsAddresses.includes(coll.tokenAddr.toLowerCase()))
57
- .map((coll: any) => formatMarketData(coll, network, baseAssetPrice)) as CompoundV3AssetData[];
60
+ .map((coll: any) => formatMarketData(coll, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused)) as CompoundV3AssetData[];
58
61
 
59
62
  for (const coll of colls) {
60
63
  if (STAKING_ASSETS.includes(coll.symbol)) {
@@ -66,7 +69,7 @@ export const _getCompoundV3MarketsData = async (provider: Client, network: Netwo
66
69
  });
67
70
  }
68
71
  }
69
- const base = formatBaseData(baseTokenInfo, network, baseAssetPrice);
72
+ const base = formatBaseData(baseTokenInfo, network, baseAssetPrice, isSupplyPaused, isWithdrawPaused);
70
73
 
71
74
  const payload: CompoundV3AssetsData = {};
72
75
 
@@ -84,7 +87,9 @@ export const _getCompoundV3MarketsData = async (provider: Client, network: Netwo
84
87
  payload[market.symbol] = { ...market, sortIndex: i };
85
88
  });
86
89
 
87
- return { assetsData: payload };
90
+ return {
91
+ assetsData: payload, isMarketBorrowPaused: isWithdrawPaused, isMarketSupplyPaused: isSupplyPaused, isMarketWithdrawPaused: isWithdrawPaused,
92
+ };
88
93
  };
89
94
 
90
95
  export const getCompoundV3MarketsData = async (provider: EthereumProvider, network: NetworkNumber, selectedMarket: CompoundMarketData, defaultProvider: EthereumProvider): Promise<CompoundV3MarketsData> => _getCompoundV3MarketsData(getViemProvider(provider, network), network, selectedMarket, getViemProvider(defaultProvider, network));
@@ -17,7 +17,7 @@ import {
17
17
  import { CompoundLoanInfoContractViem, CompV3ViewContractViem } from '../../contracts';
18
18
  import { getViemProvider } from '../../services/viem';
19
19
 
20
- export const formatMarketData = (data: any, network: NetworkNumber, baseAssetPrice: string): CompoundV3AssetData => {
20
+ export const formatMarketData = (data: any, network: NetworkNumber, baseAssetPrice: string, isSupplyPaused: boolean, isWithdrawPaused: boolean): CompoundV3AssetData => {
21
21
  const assetInfo = getAssetInfoByAddress(data.tokenAddr, network);
22
22
  const isWETH = assetInfo.symbol === 'WETH';
23
23
  const price = getEthAmountForDecimals(data.price, 8);
@@ -37,14 +37,15 @@ export const formatMarketData = (data: any, network: NetworkNumber, baseAssetPri
37
37
  supplyRate: '0',
38
38
  borrowRate: '0',
39
39
  canBeBorrowed: false,
40
- canBeSupplied: true,
40
+ canBeSupplied: !isSupplyPaused,
41
+ canBeWithdrawn: !isWithdrawPaused,
41
42
  supplyIncentives: [],
42
43
  borrowIncentives: [],
43
44
  });
44
45
  };
45
46
 
46
47
  // TODO: maybe not hardcode decimals
47
- export const formatBaseData = (data: any, network: NetworkNumber, baseAssetPrice: string): CompoundV3AssetData & BaseAdditionalAssetData => {
48
+ export const formatBaseData = (data: any, network: NetworkNumber, baseAssetPrice: string, isSupplyPaused: boolean, isWithdrawPaused: boolean): CompoundV3AssetData & BaseAdditionalAssetData => {
48
49
  const assetInfo = getAssetInfoByAddress(data.tokenAddr, network);
49
50
  const totalSupply = getEthAmountForDecimals(new Dec(data.totalSupply).mul(data.supplyIndex).toString(), 15 + assetInfo.decimals);
50
51
  const totalBorrow = getEthAmountForDecimals(new Dec(data.totalBorrow).mul(data.borrowIndex).toString(), 15 + assetInfo.decimals);
@@ -70,8 +71,9 @@ export const formatBaseData = (data: any, network: NetworkNumber, baseAssetPrice
70
71
  price: baseAssetPrice,
71
72
  collateralFactor: '0',
72
73
  liquidationRatio: '0',
73
- canBeBorrowed: true,
74
- canBeSupplied: true,
74
+ canBeBorrowed: !isWithdrawPaused,
75
+ canBeSupplied: !isSupplyPaused,
76
+ canBeWithdrawn: !isWithdrawPaused,
75
77
  supplyCap: '0',
76
78
  rewardSupplySpeed: getEthAmountForDecimals(data.baseTrackingSupplyRewardsSpeed, 15),
77
79
  rewardBorrowSpeed: getEthAmountForDecimals(data.baseTrackingBorrowRewardsSpeed, 15),
@@ -78,6 +78,7 @@ export interface CompoundV3AssetData extends CompoundAssetData {
78
78
  liquidationRatio: string,
79
79
  supplyCap: string,
80
80
  priceInBaseAsset: string,
81
+ canBeWithdrawn: boolean,
81
82
  }
82
83
 
83
84
  export interface CompoundAssetsData<T> {
@@ -88,7 +89,7 @@ export type CompoundV3AssetsData = CompoundAssetsData<CompoundV3AssetData>;
88
89
 
89
90
  export type CompoundMarketsData<T> = { assetsData: T };
90
91
  export type CompoundV2MarketsData = CompoundMarketsData<CompoundV2AssetsData>;
91
- export type CompoundV3MarketsData = CompoundMarketsData<CompoundV3AssetsData>;
92
+ export type CompoundV3MarketsData = CompoundMarketsData<CompoundV3AssetsData> & { isMarketSupplyPaused: boolean, isMarketWithdrawPaused: boolean, isMarketBorrowPaused: boolean };
92
93
 
93
94
  export interface BaseAdditionalAssetData {
94
95
  totalBorrow: string,