diff --git a/src/api/hls/getHLSStakingAssets.ts b/src/api/hls/getHLSStakingAssets.ts new file mode 100644 index 00000000..ea2a73b5 --- /dev/null +++ b/src/api/hls/getHLSStakingAssets.ts @@ -0,0 +1,28 @@ +import { getParamsQueryClient } from 'api/cosmwasm-client' +import getAssetParams from 'api/params/getAssetParams' +import { BN } from 'utils/helpers' +import { resolveHLSStrategies } from 'utils/resolvers' + +export default async function getHLSStakingAssets() { + const assetParams = await getAssetParams() + const client = await getParamsQueryClient() + const HLSAssets = assetParams.filter((asset) => asset.credit_manager.hls) + const strategies = resolveHLSStrategies('coin', HLSAssets) + + const depositCaps$ = strategies.map((strategy) => + client.totalDeposit({ denom: strategy.denoms.deposit }), + ) + + return Promise.all(depositCaps$).then((depositCaps) => { + return depositCaps.map((depositCap, index) => { + return { + ...strategies[index], + depositCap: { + denom: depositCap.denom, + used: BN(depositCap.amount), + max: BN(depositCap.cap), + }, + } as HLSStrategy + }) + }) +} diff --git a/src/api/hls/getHLSVaults.ts b/src/api/hls/getHLSVaults.ts new file mode 100644 index 00000000..2b09a9b3 --- /dev/null +++ b/src/api/hls/getHLSVaults.ts @@ -0,0 +1,34 @@ +import { getCreditManagerQueryClient } from 'api/cosmwasm-client' +import getAssetParams from 'api/params/getAssetParams' +import { getVaultConfigs } from 'api/vaults/getVaultConfigs' +import { BN } from 'utils/helpers' +import { resolveHLSStrategies } from 'utils/resolvers' + +export default async function getHLSVaults() { + const assetParams = await getAssetParams() + const client = await getCreditManagerQueryClient() + const vaultConfigs = await getVaultConfigs() + const HLSAssets = assetParams.filter((asset) => asset.credit_manager.hls) + const strategies = resolveHLSStrategies('vault', HLSAssets) + + const vaultUtilizations$ = strategies.map((strategy) => + client.vaultUtilization({ vault: { address: strategy.denoms.deposit } }), + ) + + return Promise.all(vaultUtilizations$).then((vaultUtilizations) => + vaultUtilizations.map( + (utilization, index) => + ({ + ...strategies[index], + depositCap: { + denom: utilization.vault.address, + used: BN(utilization.utilization.amount), + max: BN( + vaultConfigs.find((config) => config.addr === utilization.vault.address)?.deposit_cap + .amount || 0, + ), + }, + }) as HLSStrategy, + ), + ) +} diff --git a/src/components/HLS/AvailableHLSStakingAssets.tsx b/src/components/HLS/AvailableHLSStakingAssets.tsx new file mode 100644 index 00000000..f230a3fa --- /dev/null +++ b/src/components/HLS/AvailableHLSStakingAssets.tsx @@ -0,0 +1,3 @@ +export default function AvailableHlsStakingAssets() { + return null +} diff --git a/src/components/HLS/AvailableHLSVaults.tsx b/src/components/HLS/AvailableHLSVaults.tsx new file mode 100644 index 00000000..5b4fca4c --- /dev/null +++ b/src/components/HLS/AvailableHLSVaults.tsx @@ -0,0 +1,3 @@ +export default function AvailableHlsVaults() { + return null +} diff --git a/src/hooks/useHLSStakingAssets.ts b/src/hooks/useHLSStakingAssets.ts new file mode 100644 index 00000000..b7e55603 --- /dev/null +++ b/src/hooks/useHLSStakingAssets.ts @@ -0,0 +1,10 @@ +import useSWR from 'swr' + +import getHLSStakingAssets from 'api/hls/getHLSStakingAssets' + +export default function useHLSStakingAssets() { + return useSWR('hls-staking', getHLSStakingAssets, { + fallbackData: [], + revalidateOnFocus: false, + }) +} diff --git a/src/hooks/useHLSVaults.ts b/src/hooks/useHLSVaults.ts new file mode 100644 index 00000000..42106fc6 --- /dev/null +++ b/src/hooks/useHLSVaults.ts @@ -0,0 +1,10 @@ +import useSWR from 'swr' + +import getHLSVaults from 'api/hls/getHLSVaults' + +export default function useHLSVaults() { + return useSWR('hls-vaults', getHLSVaults, { + fallbackData: [], + revalidateOnFocus: false, + }) +} diff --git a/src/pages/HLSFarmPage.tsx b/src/pages/HLSFarmPage.tsx index d386ee30..9007be37 100644 --- a/src/pages/HLSFarmPage.tsx +++ b/src/pages/HLSFarmPage.tsx @@ -1,4 +1,5 @@ import Tab from 'components/Earn/Tab' +import AvailableHLSVaults from 'components/HLS/AvailableHLSVaults' import MigrationBanner from 'components/MigrationBanner' import { HLS_TABS } from 'constants/pages' @@ -7,6 +8,7 @@ export default function HLSFarmPage() {