lev-stake-sol/hooks/useLeverageMax.ts

35 lines
974 B
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(() => {
2024-02-20 04:59:49 -08:00
return group?.banksMapByName.get('USDC')?.[0]
}, [group])
const leverageMax = useMemo(() => {
2023-10-11 12:46:26 -07:00
if (!stakeBank || !borrowBank) return 0
2024-02-20 04:59:49 -08:00
const borrowInitLiabWeight = borrowBank.initLiabWeight
const stakeInitAssetWeight = stakeBank.initAssetWeight
if (!borrowInitLiabWeight || !stakeInitAssetWeight) return 1
2023-11-12 07:52:28 -08:00
const x = stakeInitAssetWeight.toNumber() / borrowInitLiabWeight.toNumber()
2024-02-20 04:59:49 -08:00
const leverageFactor = 1 / (1 - x)
2023-11-12 07:52:28 -08:00
2024-02-20 04:59:49 -08:00
const max = floorToDecimal(leverageFactor, 1).toNumber()
2023-11-10 07:17:21 -08:00
2023-11-08 16:52:12 -08:00
return max
}, [stakeBank, borrowBank])
return leverageMax
}