From 26820015140eb62e079741aa09736de76d27b569 Mon Sep 17 00:00:00 2001 From: bartosz-lipinski <264380+bartosz-lipinski@users.noreply.github.com> Date: Mon, 30 Nov 2020 14:57:45 -0600 Subject: [PATCH] feat: fix collateral display --- src/App.less | 1 + src/contexts/lending.tsx | 2 +- src/contexts/market.tsx | 10 +++++++--- src/hooks/useCollateralBalance.ts | 4 ++-- src/models/lending/borrow.ts | 4 ++-- src/models/lending/deposit.ts | 4 ++-- src/models/lending/reserve.ts | 8 ++++++++ src/views/home/index.tsx | 7 +++---- 8 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/App.less b/src/App.less index 141e18a..c56d258 100644 --- a/src/App.less +++ b/src/App.less @@ -215,6 +215,7 @@ body { .ant-layout-content { display: flex; + overflow: auto; } .flexColumn { diff --git a/src/contexts/lending.tsx b/src/contexts/lending.tsx index 1432d26..4a94602 100644 --- a/src/contexts/lending.tsx +++ b/src/contexts/lending.tsx @@ -76,7 +76,7 @@ export const useLending = () => { reserveAccounts.map((reserve) => reserve.info.liquidityMint.toBase58()) ); } - }, [reserveAccounts]); + }, [reserveAccounts, precacheMarkets]); // initial query useEffect(() => { diff --git a/src/contexts/market.tsx b/src/contexts/market.tsx index 907af3f..6299e68 100644 --- a/src/contexts/market.tsx +++ b/src/contexts/market.tsx @@ -89,7 +89,7 @@ export function MarketProvider({ children = null as any }) { allMarkets.filter((a) => cache.get(a) === undefined), "single" ).then(({ keys, array }) => { - allMarkets.forEach(() => {}); + allMarkets.forEach(() => { }); return array.map((item, index) => { const marketAddress = keys[index]; @@ -158,7 +158,7 @@ export function MarketProvider({ children = null as any }) { const info = marketByMint.get(mintAddress); const market = cache.get(info?.marketInfo.address.toBase58() || ""); if (!market) { - return () => {}; + return () => { }; } // TODO: get recent volume @@ -187,7 +187,11 @@ export function MarketProvider({ children = null as any }) { const precacheMarkets = useCallback( (mints: string[]) => { - setMarketMints([...new Set([...marketMints, ...mints]).values()]); + const newMints = [...new Set([...marketMints, ...mints]).values()]; + + if (marketMints.length !== newMints.length) { + setMarketMints(newMints); + } }, [setMarketMints, marketMints] ); diff --git a/src/hooks/useCollateralBalance.ts b/src/hooks/useCollateralBalance.ts index 8994593..5db3b2a 100644 --- a/src/hooks/useCollateralBalance.ts +++ b/src/hooks/useCollateralBalance.ts @@ -1,6 +1,6 @@ import { PublicKey } from "@solana/web3.js"; import { useMint } from "../contexts/accounts"; -import { LendingReserve } from "../models/lending"; +import { LendingReserve, reserveMarketCap } from "../models/lending"; import { fromLamports } from "../utils/utils"; import { useUserBalance } from "./useUserBalance"; @@ -15,7 +15,7 @@ export function useCollateralBalance( ); const collateralRatioLamports = - (reserve?.availableLiquidity.toNumber() || 0) * + reserveMarketCap(reserve) * (balanceLamports / (reserve?.collateralMintSupply.toNumber() || 1)); return { diff --git a/src/models/lending/borrow.ts b/src/models/lending/borrow.ts index 17e9593..8e51f33 100644 --- a/src/models/lending/borrow.ts +++ b/src/models/lending/borrow.ts @@ -7,7 +7,7 @@ import { import BN from "bn.js"; import * as BufferLayout from "buffer-layout"; import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../../constants/ids"; -import { WAD } from "../../constants/math"; +import { wadToLamports } from "../../utils/utils"; import * as Layout from "./../../utils/layout"; import { LendingInstruction } from "./lending"; import { LendingReserve } from "./reserve"; @@ -112,7 +112,7 @@ export const borrowInstruction = ( // deposit APY utilization currentUtilizationRate * borrowAPY export const calculateBorrowAPY = (reserve: LendingReserve) => { - const totalBorrows = reserve.borrowedLiquidityWad.div(WAD).toNumber(); + const totalBorrows = wadToLamports(reserve.borrowedLiquidityWad).toNumber(); const currentUtilization = totalBorrows / (reserve.availableLiquidity.toNumber() + totalBorrows); const optimalUtilization = reserve.config.optimalUtilizationRate / 100; diff --git a/src/models/lending/deposit.ts b/src/models/lending/deposit.ts index c2312e7..1df7ce8 100644 --- a/src/models/lending/deposit.ts +++ b/src/models/lending/deposit.ts @@ -5,8 +5,8 @@ import { } from "@solana/web3.js"; import BN from "bn.js"; import * as BufferLayout from "buffer-layout"; -import { WAD } from "../../constants"; import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../../constants/ids"; +import { wadToLamports } from "../../utils/utils"; import * as Layout from "./../../utils/layout"; import { calculateBorrowAPY } from "./borrow"; import { LendingInstruction } from "./lending"; @@ -64,7 +64,7 @@ export const depositInstruction = ( }; export const calculateDepositAPY = (reserve: LendingReserve) => { - const totalBorrows = reserve.borrowedLiquidityWad.div(WAD).toNumber(); + const totalBorrows = wadToLamports(reserve.borrowedLiquidityWad).toNumber(); const currentUtilization = totalBorrows / (reserve.availableLiquidity.toNumber() + totalBorrows); diff --git a/src/models/lending/reserve.ts b/src/models/lending/reserve.ts index dacd3a8..6738df8 100644 --- a/src/models/lending/reserve.ts +++ b/src/models/lending/reserve.ts @@ -175,3 +175,11 @@ export const calculateUtilizationRatio = (reserve: LendingReserve) => { (reserve.availableLiquidity.toNumber() + borrowedLiquidity) ); }; + +export const reserveMarketCap = (reserve?: LendingReserve ) => { + const available = (reserve?.availableLiquidity.toNumber() || 0) ; + const borrowed = wadToLamports(reserve?.borrowedLiquidityWad).toNumber() ; + const total = available + borrowed; + + return total; +} \ No newline at end of file diff --git a/src/views/home/index.tsx b/src/views/home/index.tsx index c31b672..1a61c5e 100644 --- a/src/views/home/index.tsx +++ b/src/views/home/index.tsx @@ -4,7 +4,8 @@ import { LABELS } from "../../constants"; import { cache, ParsedAccount } from "../../contexts/accounts"; import { useMarkets } from "../../contexts/market"; import { useLendingReserves } from "../../hooks"; -import { formatUSD, fromLamports, wadToLamports } from "../../utils/utils"; +import { reserveMarketCap } from "../../models"; +import { formatUSD, fromLamports } from "../../utils/utils"; import { LendingReserveItem } from "./item"; import "./itemStyle.less"; @@ -13,12 +14,10 @@ export const HomeView = () => { const [totalMarketSize, setTotalMarketSize] = useState(0); const { marketEmitter, midPriceInUSD } = useMarkets(); - useEffect(() => { const refreshTotalMarketSize = () => { const total = reserveAccounts.reduce((result, item) => { - const marketCapLamports = item.info.availableLiquidity.toNumber() + - wadToLamports(item.info.borrowedLiquidityWad).toNumber(); + const marketCapLamports = reserveMarketCap(item.info); const localCache = cache; const mint = localCache.get(item.info.liquidityMint.toBase58()) as ParsedAccount;