* ✨ 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>
71 lines
2.3 KiB
TypeScript
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
|
|
}
|