lev-stake-sol/hooks/useBankRates.ts

70 lines
2.1 KiB
TypeScript
Raw Normal View History

2023-10-01 18:36:50 -07:00
import { useMemo } from 'react'
2023-09-20 18:33:18 -07:00
import useStakeRates from './useStakeRates'
import useMangoGroup from './useMangoGroup'
2023-10-01 18:36:50 -07:00
// import mangoStore from '@store/mangoStore'
import useLeverageMax from './useLeverageMax'
2023-09-20 18:33:18 -07:00
2023-10-01 18:36:50 -07:00
// const set = mangoStore.getState().set
2023-09-20 18:33:18 -07:00
export default function useBankRates(selectedToken: string, leverage: number) {
const { data: stakeRates } = useStakeRates()
const { group } = useMangoGroup()
2024-02-20 04:59:49 -08:00
2023-10-01 18:36:50 -07:00
// const estimatedMaxAPY = mangoStore((s) => s.estimatedMaxAPY.current)
const leverageMax = useLeverageMax(selectedToken)
2023-09-20 18:33:18 -07:00
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]
2023-09-20 18:33:18 -07:00
}, [group])
const stakeBankDepositRate = useMemo(() => {
return stakeBank ? stakeBank.getDepositRateUi() : 0
}, [stakeBank])
const borrowBankBorrowRate = useMemo(() => {
return borrowBank ? borrowBank.getBorrowRateUi() : 0
}, [borrowBank])
const borrowBankStakeRate = useMemo(() => {
return stakeRates ? stakeRates[selectedToken.toLowerCase()] * 100 : 0
}, [stakeRates, selectedToken])
const leveragedAPY = useMemo(() => {
return borrowBankStakeRate ? borrowBankStakeRate * leverage : 0
}, [borrowBankStakeRate, leverage])
const estimatedNetAPY = useMemo(() => {
return (
borrowBankStakeRate * leverage - borrowBankBorrowRate * (leverage - 1)
)
}, [borrowBankStakeRate, leverage, borrowBankBorrowRate])
2023-10-01 18:36:50 -07:00
// useEffect(() => {
// set((s) => {
// s.estimatedMaxAPY.current =
// borrowBankStakeRate * leverageMax -
// borrowBankBorrowRate * (leverageMax - 1)
// })
// }, [borrowBankStakeRate, borrowBankBorrowRate, leverageMax])
const estimatedMaxAPY = useMemo(() => {
return (
borrowBankStakeRate * leverageMax -
borrowBankBorrowRate * (leverageMax - 1)
)
}, [borrowBankStakeRate, borrowBankBorrowRate, leverageMax])
2023-09-20 18:33:18 -07:00
return {
stakeBankDepositRate,
borrowBankBorrowRate,
borrowBankStakeRate,
leveragedAPY,
estimatedNetAPY,
estimatedMaxAPY,
}
}