mars-v2-frontend/src/utils/resolvers.ts
Bob van der Helm 5392a4717c
Mp 3245 usehlsvaults hook (#541)
*  routing and pages for HLS

*  create hooks for fetching HLS vaults and Strategies

* Share accounts (#539)

* feat: do not redirect to wallet on portfolio page

* fix: use connected wallet for AccountMenu

* fix: fixed ghost AccountDetails

* feat: created ShareBar and share functionality

* fix: don’t show shareBar if no address is present

* fix: stupid 'next/navigation'

* tidy: format

* fix: fixed tests

*  routing and pages for HLS (#538)

* 🐛 use useAccountIds

* fix: fixed the tests

* fix: accountIds is now a suspense

---------

Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com>

* 🐛 fix build

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>
2023-10-16 10:45:57 +02:00

71 lines
2.3 KiB
TypeScript

import {
AssetParamsBaseForAddr as AssetParams,
AssetParamsBaseForAddr,
TotalDepositResponse,
} from 'types/generated/mars-params/MarsParams.types'
import { Market as RedBankMarket } from 'types/generated/mars-red-bank/MarsRedBank.types'
import { BN, getLeverageFromLTV } from 'utils/helpers'
export function resolveMarketResponse(
marketResponse: RedBankMarket,
assetParamsResponse: AssetParams,
assetCapResponse: TotalDepositResponse,
): Market {
return {
denom: marketResponse.denom,
borrowRate: Number(marketResponse.borrow_rate),
debtTotalScaled: marketResponse.debt_total_scaled,
collateralTotalScaled: marketResponse.collateral_total_scaled,
depositEnabled: assetParamsResponse.red_bank.deposit_enabled,
borrowEnabled: assetParamsResponse.red_bank.borrow_enabled,
cap: {
denom: assetCapResponse.denom,
used: BN(assetCapResponse.amount),
max: BN(assetParamsResponse.deposit_cap),
},
maxLtv: Number(assetParamsResponse.max_loan_to_value),
liquidityRate: Number(marketResponse.liquidity_rate),
liquidationThreshold: Number(assetParamsResponse.liquidation_threshold),
}
}
export function resolveHLSStrategies(
type: 'vault' | 'coin',
assets: AssetParamsBaseForAddr[],
): HLSStrategyNoCap[] {
const HLSStakingStrategies: HLSStrategyNoCap[] = []
assets.forEach((asset) => {
const correlations = asset.credit_manager.hls?.correlations.filter((correlation) => {
return type in correlation
})
let correlatedDenoms: string[] | undefined
if (type === 'coin') {
correlatedDenoms = correlations
?.map((correlation) => (correlation as { coin: { denom: string } }).coin.denom)
.filter((denoms) => !denoms.includes('gamm/pool/'))
} else {
correlatedDenoms = correlations?.map(
(correlation) => (correlation as { vault: { addr: string } }).vault.addr,
)
}
if (!correlatedDenoms?.length) return
correlatedDenoms.forEach((correlatedDenom) =>
HLSStakingStrategies.push({
apy: null,
maxLeverage: getLeverageFromLTV(+asset.credit_manager.hls!.max_loan_to_value),
maxLTV: +asset.credit_manager.hls!.max_loan_to_value,
denoms: {
deposit: correlatedDenom,
borrow: asset.denom,
},
}),
)
})
return HLSStakingStrategies
}