lev-stake-sol/hooks/useBankRates.ts

59 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-09-26 13:09:44 -07:00
import { useEffect, useMemo } from 'react'
2023-09-20 18:33:18 -07:00
import useStakeRates from './useStakeRates'
import useMangoGroup from './useMangoGroup'
import mangoStore from '@store/mangoStore'
const set = mangoStore.getState().set
export default function useBankRates(selectedToken: string, leverage: number) {
const { data: stakeRates } = useStakeRates()
const { group } = useMangoGroup()
2023-09-26 13:09:44 -07:00
const estimatedMaxAPY = mangoStore((s) => s.estimatedMaxAPY.current)
2023-09-20 18:33:18 -07:00
const stakeBank = useMemo(() => {
return group?.banksMapByName.get(selectedToken)?.[0]
}, [selectedToken, group])
const borrowBank = useMemo(() => {
return group?.banksMapByName.get('SOL')?.[0]
}, [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-09-26 13:09:44 -07:00
useEffect(() => {
2023-09-20 18:33:18 -07:00
set((s) => {
s.estimatedMaxAPY.current =
borrowBankStakeRate * 3 - borrowBankBorrowRate * 2
})
}, [borrowBankStakeRate, borrowBankBorrowRate])
return {
stakeBankDepositRate,
borrowBankBorrowRate,
borrowBankStakeRate,
leveragedAPY,
estimatedNetAPY,
estimatedMaxAPY,
}
}