Merge pull request #7 from blockworks-foundation/collateralFeeUI

Collateral fee UI
This commit is contained in:
Finn Casey Fierro 2024-02-22 14:13:35 +00:00 committed by GitHub
commit d607e3a7de
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 11 deletions

View File

@ -91,10 +91,10 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
const { group } = useMangoGroup()
const groupLoaded = mangoStore((s) => s.groupLoaded)
const {
stakeBankDepositRate,
borrowBankBorrowRate,
leveragedAPY,
estimatedNetAPY,
collateralFeeAPY
} = useBankRates(selectedToken, leverage)
const leverageMax = useLeverageMax(selectedToken) * 0.95 // Multiplied by 0.975 becuase you cant actually get to the end of the inifinite geometric series?
@ -117,6 +117,7 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
return price
}, [stakeBank, borrowBank, leverage])
const tokenPositionsFull = useMemo(() => {
if (!stakeBank || !usedTokens.length || !totalTokens.length) return false
const hasTokenPosition = usedTokens.find(
@ -146,6 +147,7 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
return borrowAmount
}, [leverage, borrowBank, stakeBank, inputAmount])
const handleRefreshWalletBalances = useCallback(async () => {
if (!publicKey) return
const actions = mangoStore.getState().actions
@ -353,18 +355,18 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
</div>
<div className="flex justify-between">
<p className="text-th-fgd-4">
{formatTokenSymbol(selectedToken)} Deposit Rate
{formatTokenSymbol(selectedToken)} Collateral Fee APY
</p>
<span
className={`font-bold ${
stakeBankDepositRate > 0.01
? 'text-th-success'
collateralFeeAPY > 0.01
? 'text-th-error'
: 'text-th-bkg-4'
}`}
>
{stakeBankDepositRate > 0.01 ? '+' : ''}
{collateralFeeAPY > 0.01 ? '-' : ''}
<FormatNumericValue
value={stakeBankDepositRate}
value={collateralFeeAPY?.toString()}
decimals={2}
/>
%
@ -373,7 +375,7 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
{borrowBank ? (
<>
<div className="flex justify-between">
<p className="text-th-fgd-4">{`${borrowBank.name} Borrow Rate`}</p>
<p className="text-th-fgd-4">{`${borrowBank?.name} Borrow Rate`}</p>
<span
className={`font-bold ${
borrowBankBorrowRate > 0.01

View File

@ -37,11 +37,23 @@ export default function useBankRates(selectedToken: string, leverage: number) {
return borrowBankStakeRate ? borrowBankStakeRate * leverage : 0
}, [borrowBankStakeRate, leverage])
const estimatedMaxCollateralFee = useMemo(() => {
if(!stakeBank) return 0
return (stakeBank?.collateralFeePerDay * 365 * 100)
}, [stakeBank])
const collateralFeeAPY = useMemo(() => {
if (!stakeBank) return 0
const assetsCovered = ( (leverage - 1)) / leverage * Number(stakeBank?.maintAssetWeight)
const collateralFeeUI = estimatedMaxCollateralFee * assetsCovered * leverage
return collateralFeeUI
}, [stakeBank, leverage, estimatedMaxCollateralFee])
const estimatedNetAPY = useMemo(() => {
return (
borrowBankStakeRate * leverage - borrowBankBorrowRate * (leverage - 1)
borrowBankStakeRate * leverage - borrowBankBorrowRate * (leverage - 1) - collateralFeeAPY
)
}, [borrowBankStakeRate, leverage, borrowBankBorrowRate])
}, [borrowBankStakeRate, leverage, borrowBankBorrowRate, collateralFeeAPY])
// useEffect(() => {
// set((s) => {
@ -53,8 +65,7 @@ export default function useBankRates(selectedToken: string, leverage: number) {
const estimatedMaxAPY = useMemo(() => {
return (
borrowBankStakeRate * leverageMax -
borrowBankBorrowRate * (leverageMax - 1)
borrowBankStakeRate * leverageMax - borrowBankBorrowRate * (leverageMax - 1)
)
}, [borrowBankStakeRate, borrowBankBorrowRate, leverageMax])
@ -65,5 +76,6 @@ export default function useBankRates(selectedToken: string, leverage: number) {
leveragedAPY,
estimatedNetAPY,
estimatedMaxAPY,
collateralFeeAPY
}
}