Merge pull request #7 from blockworks-foundation/collateralFeeUI
Collateral fee UI
This commit is contained in:
commit
d607e3a7de
|
@ -91,10 +91,10 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
|
||||||
const { group } = useMangoGroup()
|
const { group } = useMangoGroup()
|
||||||
const groupLoaded = mangoStore((s) => s.groupLoaded)
|
const groupLoaded = mangoStore((s) => s.groupLoaded)
|
||||||
const {
|
const {
|
||||||
stakeBankDepositRate,
|
|
||||||
borrowBankBorrowRate,
|
borrowBankBorrowRate,
|
||||||
leveragedAPY,
|
leveragedAPY,
|
||||||
estimatedNetAPY,
|
estimatedNetAPY,
|
||||||
|
collateralFeeAPY
|
||||||
} = useBankRates(selectedToken, leverage)
|
} = 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?
|
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
|
return price
|
||||||
}, [stakeBank, borrowBank, leverage])
|
}, [stakeBank, borrowBank, leverage])
|
||||||
|
|
||||||
|
|
||||||
const tokenPositionsFull = useMemo(() => {
|
const tokenPositionsFull = useMemo(() => {
|
||||||
if (!stakeBank || !usedTokens.length || !totalTokens.length) return false
|
if (!stakeBank || !usedTokens.length || !totalTokens.length) return false
|
||||||
const hasTokenPosition = usedTokens.find(
|
const hasTokenPosition = usedTokens.find(
|
||||||
|
@ -146,6 +147,7 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
|
||||||
return borrowAmount
|
return borrowAmount
|
||||||
}, [leverage, borrowBank, stakeBank, inputAmount])
|
}, [leverage, borrowBank, stakeBank, inputAmount])
|
||||||
|
|
||||||
|
|
||||||
const handleRefreshWalletBalances = useCallback(async () => {
|
const handleRefreshWalletBalances = useCallback(async () => {
|
||||||
if (!publicKey) return
|
if (!publicKey) return
|
||||||
const actions = mangoStore.getState().actions
|
const actions = mangoStore.getState().actions
|
||||||
|
@ -353,18 +355,18 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between">
|
<div className="flex justify-between">
|
||||||
<p className="text-th-fgd-4">
|
<p className="text-th-fgd-4">
|
||||||
{formatTokenSymbol(selectedToken)} Deposit Rate
|
{formatTokenSymbol(selectedToken)} Collateral Fee APY
|
||||||
</p>
|
</p>
|
||||||
<span
|
<span
|
||||||
className={`font-bold ${
|
className={`font-bold ${
|
||||||
stakeBankDepositRate > 0.01
|
collateralFeeAPY > 0.01
|
||||||
? 'text-th-success'
|
? 'text-th-error'
|
||||||
: 'text-th-bkg-4'
|
: 'text-th-bkg-4'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
{stakeBankDepositRate > 0.01 ? '+' : ''}
|
{collateralFeeAPY > 0.01 ? '-' : ''}
|
||||||
<FormatNumericValue
|
<FormatNumericValue
|
||||||
value={stakeBankDepositRate}
|
value={collateralFeeAPY?.toString()}
|
||||||
decimals={2}
|
decimals={2}
|
||||||
/>
|
/>
|
||||||
%
|
%
|
||||||
|
@ -373,7 +375,7 @@ function StakeForm({ token: selectedToken }: StakeFormProps) {
|
||||||
{borrowBank ? (
|
{borrowBank ? (
|
||||||
<>
|
<>
|
||||||
<div className="flex justify-between">
|
<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
|
<span
|
||||||
className={`font-bold ${
|
className={`font-bold ${
|
||||||
borrowBankBorrowRate > 0.01
|
borrowBankBorrowRate > 0.01
|
||||||
|
|
|
@ -37,11 +37,23 @@ export default function useBankRates(selectedToken: string, leverage: number) {
|
||||||
return borrowBankStakeRate ? borrowBankStakeRate * leverage : 0
|
return borrowBankStakeRate ? borrowBankStakeRate * leverage : 0
|
||||||
}, [borrowBankStakeRate, leverage])
|
}, [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(() => {
|
const estimatedNetAPY = useMemo(() => {
|
||||||
return (
|
return (
|
||||||
borrowBankStakeRate * leverage - borrowBankBorrowRate * (leverage - 1)
|
borrowBankStakeRate * leverage - borrowBankBorrowRate * (leverage - 1) - collateralFeeAPY
|
||||||
)
|
)
|
||||||
}, [borrowBankStakeRate, leverage, borrowBankBorrowRate])
|
}, [borrowBankStakeRate, leverage, borrowBankBorrowRate, collateralFeeAPY])
|
||||||
|
|
||||||
// useEffect(() => {
|
// useEffect(() => {
|
||||||
// set((s) => {
|
// set((s) => {
|
||||||
|
@ -53,8 +65,7 @@ export default function useBankRates(selectedToken: string, leverage: number) {
|
||||||
|
|
||||||
const estimatedMaxAPY = useMemo(() => {
|
const estimatedMaxAPY = useMemo(() => {
|
||||||
return (
|
return (
|
||||||
borrowBankStakeRate * leverageMax -
|
borrowBankStakeRate * leverageMax - borrowBankBorrowRate * (leverageMax - 1)
|
||||||
borrowBankBorrowRate * (leverageMax - 1)
|
|
||||||
)
|
)
|
||||||
}, [borrowBankStakeRate, borrowBankBorrowRate, leverageMax])
|
}, [borrowBankStakeRate, borrowBankBorrowRate, leverageMax])
|
||||||
|
|
||||||
|
@ -65,5 +76,6 @@ export default function useBankRates(selectedToken: string, leverage: number) {
|
||||||
leveragedAPY,
|
leveragedAPY,
|
||||||
estimatedNetAPY,
|
estimatedNetAPY,
|
||||||
estimatedMaxAPY,
|
estimatedMaxAPY,
|
||||||
|
collateralFeeAPY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue