lev-stake-sol/hooks/useLeverageMax.ts

40 lines
1.2 KiB
TypeScript
Raw Normal View History

import { useMemo } from 'react'
import useMangoGroup from './useMangoGroup'
2023-09-25 18:47:58 -07:00
import { floorToDecimal } from 'utils/numbers'
export default function useLeverageMax(selectedToken: string) {
const { group } = useMangoGroup()
const stakeBank = useMemo(() => {
return group?.banksMapByName.get(selectedToken)?.[0]
}, [selectedToken, group])
const borrowBank = useMemo(() => {
return group?.banksMapByName.get('SOL')?.[0]
}, [group])
const leverageMax = useMemo(() => {
2023-10-11 12:46:26 -07:00
if (!stakeBank || !borrowBank) return 0
const borrowInitLiabWeight = borrowBank.scaledInitLiabWeight(
borrowBank.price,
)
const stakeInitAssetWeight = stakeBank.scaledInitAssetWeight(
stakeBank.price,
)
if (!borrowInitLiabWeight || !stakeInitAssetWeight) return 1
2023-09-28 15:43:28 -07:00
const x = floorToDecimal(stakeInitAssetWeight.toNumber(), 2).div(
floorToDecimal(borrowInitLiabWeight.toNumber(), 2),
)
const conversionRate = borrowBank.uiPrice / stakeBank.uiPrice
2023-09-28 15:43:28 -07:00
const y =
1 -
conversionRate *
floorToDecimal(stakeInitAssetWeight.toNumber(), 2).toNumber()
return 1 + x.toNumber() / y
}, [stakeBank, borrowBank])
return leverageMax
}