diff --git a/components/AccountStats.tsx b/components/AccountStats.tsx index 2befd9a..e122e0f 100644 --- a/components/AccountStats.tsx +++ b/components/AccountStats.tsx @@ -1,13 +1,58 @@ +import useStakeRates from 'hooks/useStakeRates' import { formatTokenSymbol } from 'utils/tokens' +import SheenLoader from './shared/SheenLoader' +import { useMemo } from 'react' +import Decimal from 'decimal.js' +import useMangoGroup from 'hooks/useMangoGroup' +import FormatNumericValue from './shared/FormatNumericValue' const AccountStats = ({ token }: { token: string }) => { + const { data: stakeRates, isLoading: loadingRates } = useStakeRates() + const { group } = useMangoGroup() + + const solBank = useMemo(() => { + return group?.banksMapByName.get('SOL')?.[0] + }, [group, token]) + + const tokenBank = useMemo(() => { + return group?.banksMapByName.get(token)?.[0] + }, [group, token]) + + const solDeposits = useMemo(() => { + if (!solBank) return null + return solBank.uiDeposits() + }, [solBank]) + + const tokenDeposits = useMemo(() => { + if (!tokenBank) return null + return tokenBank.uiDeposits() + }, [tokenBank]) + + const solAvailable = useMemo(() => { + if (!solBank || !solDeposits) return 0 + const availableVaultBalance = group + ? group.getTokenVaultBalanceByMintUi(solBank.mint) - + solDeposits * solBank.minVaultToDepositsRatio + : 0 + return Decimal.max(0, availableVaultBalance.toFixed(solBank.mintDecimals)) + }, [solBank, solDeposits, group]) + return ( <>

{`Boosted ${formatTokenSymbol(token)}`}

-

Est. APR

- 14.89% +

Max Est. APY

+ + {loadingRates ? ( + +
+ + ) : stakeRates?.[token.toLowerCase()] ? ( + `${(stakeRates?.[token.toLowerCase()] * 100).toFixed(2)}%` + ) : null} + % SOL +

Max Leverage

@@ -15,11 +60,16 @@ const AccountStats = ({ token }: { token: string }) => {

Capacity Remaining

- 100,000 SOL + + SOL +

Total Staked

- {`100,000 ${token}`} + + {' '} + {token} +
diff --git a/components/Positions.tsx b/components/Positions.tsx index 3eb53b9..a6a472a 100644 --- a/components/Positions.tsx +++ b/components/Positions.tsx @@ -107,7 +107,7 @@ const Positions = ({
-

Est. APR

+

Est. APY

14.89%
diff --git a/components/StakeForm.tsx b/components/StakeForm.tsx index b9e87b9..99d044a 100644 --- a/components/StakeForm.tsx +++ b/components/StakeForm.tsx @@ -132,7 +132,7 @@ function DepositForm({ onSuccess, token: selectedToken }: DepositFormProps) { if (!solPrice || !stakePrice || !Number(inputAmount)) return 0 const priceDifference = (stakePrice - solPrice) / solPrice const borrowAmount = - (1 + priceDifference) * Number(inputAmount) * (leverage - 1) + (1 + priceDifference) * Number(inputAmount) * Math.min(leverage - 1, 1) return borrowAmount }, [leverage, solBank, stakeBank, inputAmount]) @@ -339,7 +339,7 @@ function DepositForm({ onSuccess, token: selectedToken }: DepositFormProps) {
-

{selectedToken} Leveraged APR

+

{selectedToken} Leveraged APY

SOL Borrow Rate

% diff --git a/components/TokenButton.tsx b/components/TokenButton.tsx index 2dd1c25..d0aa4fa 100644 --- a/components/TokenButton.tsx +++ b/components/TokenButton.tsx @@ -1,4 +1,4 @@ -import useStakeApr from 'hooks/useStakeAprs' +import useStakeRates from 'hooks/useStakeRates' import Image from 'next/image' import { formatTokenSymbol } from 'utils/tokens' import SheenLoader from './shared/SheenLoader' @@ -13,12 +13,12 @@ const TokenButton = ({ handleTokenSelect: (v: string) => void }) => { const { - data: stakeAprs, - isLoading: loadingStakeAprs, - isFetching: fetchingStakeAprs, - } = useStakeApr() + data: stakeRates, + isLoading: loadingStakeRates, + isFetching: fetchingStakeRates, + } = useStakeRates() - const loadingAprs = loadingStakeAprs || fetchingStakeAprs + const loadingRates = loadingStakeRates || fetchingStakeRates return (