fix: typos and apy calculation

This commit is contained in:
Justin Starry 2020-11-26 17:11:40 +08:00
parent 3c3ba90ffc
commit 9730fe8dae
12 changed files with 44 additions and 44 deletions

View File

@ -23,7 +23,7 @@ export const ReserveUtilizationChart = (props: { reserve: LendingReserve }) => {
const liquidityMint = useMint(props.reserve.liquidityMint); const liquidityMint = useMint(props.reserve.liquidityMint);
const avilableLiquidity = fromLamports( const avilableLiquidity = fromLamports(
props.reserve.availableLiqudity.toNumber(), props.reserve.availableLiquidity.toNumber(),
liquidityMint liquidityMint
); );

View File

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { useTokenName } from "./../../hooks"; import { useTokenName } from "./../../hooks";
import { calculateBorrowAPR, calculateDepositAPY, calculateUtilizationRatio, LendingReserve } from "../../models/lending"; import { calculateBorrowAPY, calculateDepositAPY, calculateUtilizationRatio, LendingReserve } from "../../models/lending";
import { TokenIcon } from "../../components/TokenIcon"; import { TokenIcon } from "../../components/TokenIcon";
import { formatNumber, formatPct, fromLamports, wadToLamports } from "../../utils/utils"; import { formatNumber, formatPct, fromLamports, wadToLamports } from "../../utils/utils";
import { Card, Typography } from "antd"; import { Card, Typography } from "antd";
@ -25,13 +25,13 @@ export const SideReserveOverview = (props: {
const name = useTokenName(reserve?.liquidityMint); const name = useTokenName(reserve?.liquidityMint);
const liquidityMint = useMint(reserve.liquidityMint); const liquidityMint = useMint(reserve.liquidityMint);
const availableLiqudity = fromLamports( const availableLiquidity = fromLamports(
reserve.availableLiqudity.toNumber(), reserve.availableLiquidity.toNumber(),
liquidityMint liquidityMint
); );
const depositApy = calculateDepositAPY(reserve); const depositApy = calculateDepositAPY(reserve);
const borrowApr = calculateBorrowAPR(reserve); const borrowApr = calculateBorrowAPY(reserve);
const utilizationRate = calculateUtilizationRatio(reserve); const utilizationRate = calculateUtilizationRatio(reserve);
const liquidiationThreshold = reserve.config.optimalUtilizationRate / 100; const liquidiationThreshold = reserve.config.optimalUtilizationRate / 100;
@ -44,7 +44,7 @@ export const SideReserveOverview = (props: {
<> <>
<div className="card-row"> <div className="card-row">
<Text type="secondary" className="card-cell "> <Text type="secondary" className="card-cell ">
{LABELS.TABLE_TITLE_DEPOSIT_APR}: {LABELS.TABLE_TITLE_DEPOSIT_APY}:
</Text> </Text>
<div className="card-cell ">{formatPct.format(depositApy)}</div> <div className="card-cell ">{formatPct.format(depositApy)}</div>
</div> </div>
@ -80,7 +80,7 @@ export const SideReserveOverview = (props: {
<> <>
<div className="card-row"> <div className="card-row">
<Text type="secondary" className="card-cell "> <Text type="secondary" className="card-cell ">
{LABELS.TABLE_TITLE_BORROW_APR}: {LABELS.TABLE_TITLE_BORROW_APY}:
</Text> </Text>
<div className="card-cell ">{formatPct.format(borrowApr)}</div> <div className="card-cell ">{formatPct.format(borrowApr)}</div>
</div> </div>
@ -122,7 +122,7 @@ export const SideReserveOverview = (props: {
Available liquidity: Available liquidity:
</Text> </Text>
<div className="card-cell "> <div className="card-cell ">
{formatNumber.format(availableLiqudity)} {name} {formatNumber.format(availableLiquidity)} {name}
</div> </div>
</div> </div>

View File

@ -25,13 +25,12 @@ export const LABELS = {
TABLE_TITLE_LOAN_BALANCE: "Your loan balance", TABLE_TITLE_LOAN_BALANCE: "Your loan balance",
TABLE_TITLE_DEPOSIT_BALANCE: "Your deposit balance", TABLE_TITLE_DEPOSIT_BALANCE: "Your deposit balance",
TABLE_TITLE_APY: "APY", TABLE_TITLE_APY: "APY",
TABLE_TITLE_APR: "APR", TABLE_TITLE_BORROW_APY: "Borrow APY",
TABLE_TITLE_BORROW_APR: "Borrow APR", TABLE_TITLE_DEPOSIT_APY: "Deposit APY",
TABLE_TITLE_DEPOSIT_APR: "Deposit APY",
TABLE_TITLE_TOTAL_BORROWED: "Total Borrowed", TABLE_TITLE_TOTAL_BORROWED: "Total Borrowed",
TABLE_TITLE_MARKET_SIZE: "Market Size", TABLE_TITLE_MARKET_SIZE: "Market Size",
TABLE_TITLE_ACTION: "Action", TABLE_TITLE_ACTION: "Action",
TABLE_TITLE_MAX_BORROW: "Available fro you", TABLE_TITLE_MAX_BORROW: "Available for you",
DASHBOARD_TITLE_LOANS: "Loans", DASHBOARD_TITLE_LOANS: "Loans",
DASHBOARD_TITLE_DEPOSITS: "Deposits", DASHBOARD_TITLE_DEPOSITS: "Deposits",
WITHDRAW_ACTION: "Withdraw", WITHDRAW_ACTION: "Withdraw",

View File

@ -15,7 +15,7 @@ export function useCollateralBalance(
); );
const collateralRatioLamports = const collateralRatioLamports =
(reserve?.availableLiqudity.toNumber() || 0) * (reserve?.availableLiquidity.toNumber() || 0) *
(balanceLamports / (reserve?.collateralMintSupply.toNumber() || 1)); (balanceLamports / (reserve?.collateralMintSupply.toNumber() || 1));
return { return {

View File

@ -111,27 +111,28 @@ export const borrowInstruction = (
// deposit APY utilization currentUtilizationRate * borrowAPY // deposit APY utilization currentUtilizationRate * borrowAPY
export const calculateBorrowAPR = (reserve: LendingReserve) => { export const calculateBorrowAPY = (reserve: LendingReserve) => {
const totalBorrows = reserve.borrowedLiquidityWad.div(WAD).toNumber(); const totalBorrows = reserve.borrowedLiquidityWad.div(WAD).toNumber();
const currentUtilization = const currentUtilization =
totalBorrows / (reserve.availableLiqudity.toNumber() + totalBorrows); totalBorrows / (reserve.availableLiquidity.toNumber() + totalBorrows);
const optimalUtilization = reserve.config.optimalUtilizationRate; const optimalUtilization = reserve.config.optimalUtilizationRate / 100;
let borrowAPR;
if (currentUtilization < optimalUtilization) { let borrowAPY;
const normalized_factor = currentUtilization / optimalUtilization; if (optimalUtilization == 1.0 || currentUtilization < optimalUtilization) {
const normalizedFactor = currentUtilization / optimalUtilization;
const optimalBorrowRate = reserve.config.optimalBorrowRate / 100; const optimalBorrowRate = reserve.config.optimalBorrowRate / 100;
const minBorrowRate = reserve.config.minBorrowRate / 100; const minBorrowRate = reserve.config.minBorrowRate / 100;
borrowAPR = borrowAPY =
normalized_factor * (optimalBorrowRate - minBorrowRate) + minBorrowRate; normalizedFactor * (optimalBorrowRate - minBorrowRate) + minBorrowRate;
} else { } else {
const normalized_factor = const normalizedFactor =
(currentUtilization - optimalUtilization) / (100 - optimalUtilization); (currentUtilization - optimalUtilization) / (1 - optimalUtilization);
const optimalBorrowRate = reserve.config.optimalBorrowRate / 100; const optimalBorrowRate = reserve.config.optimalBorrowRate / 100;
const maxBorrowRate = reserve.config.maxBorrowRate / 100; const maxBorrowRate = reserve.config.maxBorrowRate / 100;
borrowAPR = borrowAPY =
normalized_factor * (maxBorrowRate - optimalBorrowRate) + normalizedFactor * (maxBorrowRate - optimalBorrowRate) +
optimalBorrowRate; optimalBorrowRate;
} }
return borrowAPR; return borrowAPY;
}; };

View File

@ -8,7 +8,7 @@ import * as BufferLayout from "buffer-layout";
import { WAD } from "../../constants"; import { WAD } from "../../constants";
import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../../constants/ids"; import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../../constants/ids";
import * as Layout from "./../../utils/layout"; import * as Layout from "./../../utils/layout";
import { calculateBorrowAPR } from "./borrow"; import { calculateBorrowAPY } from "./borrow";
import { LendingInstruction } from "./lending"; import { LendingInstruction } from "./lending";
import { LendingReserve } from "./reserve"; import { LendingReserve } from "./reserve";
@ -66,8 +66,8 @@ export const depositInstruction = (
export const calculateDepositAPY = (reserve: LendingReserve) => { export const calculateDepositAPY = (reserve: LendingReserve) => {
const totalBorrows = reserve.borrowedLiquidityWad.div(WAD).toNumber(); const totalBorrows = reserve.borrowedLiquidityWad.div(WAD).toNumber();
const currentUtilization = const currentUtilization =
totalBorrows / (reserve.availableLiqudity.toNumber() + totalBorrows); totalBorrows / (reserve.availableLiquidity.toNumber() + totalBorrows);
const borrowAPY = calculateBorrowAPR(reserve); const borrowAPY = calculateBorrowAPY(reserve);
return currentUtilization * borrowAPY; return currentUtilization * borrowAPY;
}; };

View File

@ -48,7 +48,7 @@ export const LendingReserveLayout: typeof BufferLayout.Structure = BufferLayout.
Layout.uint128("cumulativeBorrowRateWad"), Layout.uint128("cumulativeBorrowRateWad"),
Layout.uint128("borrowedLiquidityWad"), Layout.uint128("borrowedLiquidityWad"),
Layout.uint64("availableLiqudity"), Layout.uint64("availableLiquidity"),
Layout.uint64("collateralMintSupply"), Layout.uint64("collateralMintSupply"),
] ]
); );
@ -86,7 +86,7 @@ export interface LendingReserve {
cumulativeBorrowRateWad: BN; cumulativeBorrowRateWad: BN;
borrowedLiquidityWad: BN; borrowedLiquidityWad: BN;
availableLiqudity: BN; availableLiquidity: BN;
collateralMintSupply: BN; collateralMintSupply: BN;
// Layout.uint128("cumulative_borrow_rate"), // Layout.uint128("cumulative_borrow_rate"),
@ -171,6 +171,6 @@ export const initReserveInstruction = (
}; };
export const calculateUtilizationRatio = (reserve: LendingReserve) => { export const calculateUtilizationRatio = (reserve: LendingReserve) => {
return reserve.availableLiqudity.toNumber() / return reserve.availableLiquidity.toNumber() /
(reserve.availableLiqudity.toNumber() + wadToLamports(reserve.borrowedLiquidityWad).toNumber()); (reserve.availableLiquidity.toNumber() + wadToLamports(reserve.borrowedLiquidityWad).toNumber());
} }

View File

@ -11,7 +11,7 @@ export const BorrowView = () => {
<div className="borrow-item deposit-header"> <div className="borrow-item deposit-header">
<div>{LABELS.TABLE_TITLE_ASSET}</div> <div>{LABELS.TABLE_TITLE_ASSET}</div>
<div>{LABELS.TABLE_TITLE_MAX_BORROW}</div> <div>{LABELS.TABLE_TITLE_MAX_BORROW}</div>
<div>{LABELS.TABLE_TITLE_APR}</div> <div>{LABELS.TABLE_TITLE_APY}</div>
<div>{LABELS.TABLE_TITLE_ACTION}</div> <div>{LABELS.TABLE_TITLE_ACTION}</div>
</div> </div>
{reserveAccounts.map((account) => ( {reserveAccounts.map((account) => (

View File

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { useCollateralBalance, useTokenName } from "../../hooks"; import { useCollateralBalance, useTokenName } from "../../hooks";
import { calculateBorrowAPR, LendingReserve } from "../../models/lending"; import { calculateBorrowAPY, LendingReserve } from "../../models/lending";
import { TokenIcon } from "../../components/TokenIcon"; import { TokenIcon } from "../../components/TokenIcon";
import { formatNumber, formatPct } from "../../utils/utils"; import { formatNumber, formatPct } from "../../utils/utils";
import { Button, Card } from "antd"; import { Button, Card } from "antd";
@ -17,7 +17,7 @@ export const BorrowItem = (props: {
// TODO: calculate avilable amount... based on total owned collateral across all the reserves // TODO: calculate avilable amount... based on total owned collateral across all the reserves
const { balance: collateralBalance } = useCollateralBalance(props.reserve); const { balance: collateralBalance } = useCollateralBalance(props.reserve);
const apr = calculateBorrowAPR(props.reserve); const apr = calculateBorrowAPY(props.reserve);
return ( return (
<Link to={`/borrow/${props.address.toBase58()}`}> <Link to={`/borrow/${props.address.toBase58()}`}>

View File

@ -31,7 +31,7 @@ export const DashboardView = () => {
<div className="dashboard-item dashboard-header"> <div className="dashboard-item dashboard-header">
<div>{LABELS.TABLE_TITLE_ASSET}</div> <div>{LABELS.TABLE_TITLE_ASSET}</div>
<div>{LABELS.TABLE_TITLE_LOAN_BALANCE}</div> <div>{LABELS.TABLE_TITLE_LOAN_BALANCE}</div>
<div>{LABELS.TABLE_TITLE_APR}</div> <div>{LABELS.TABLE_TITLE_APY}</div>
<div>{LABELS.TABLE_TITLE_ACTION}</div> <div>{LABELS.TABLE_TITLE_ACTION}</div>
</div> </div>
)} )}

View File

@ -15,8 +15,8 @@ export const HomeView = () => {
<div>{LABELS.TABLE_TITLE_ASSET}</div> <div>{LABELS.TABLE_TITLE_ASSET}</div>
<div>{LABELS.TABLE_TITLE_MARKET_SIZE}</div> <div>{LABELS.TABLE_TITLE_MARKET_SIZE}</div>
<div>{LABELS.TABLE_TITLE_TOTAL_BORROWED}</div> <div>{LABELS.TABLE_TITLE_TOTAL_BORROWED}</div>
<div>{LABELS.TABLE_TITLE_DEPOSIT_APR}</div> <div>{LABELS.TABLE_TITLE_DEPOSIT_APY}</div>
<div>{LABELS.TABLE_TITLE_BORROW_APR}</div> <div>{LABELS.TABLE_TITLE_BORROW_APY}</div>
</div> </div>
{reserveAccounts.map((account) => ( {reserveAccounts.map((account) => (
<LendingReserveItem reserve={account.info} address={account.pubkey} /> <LendingReserveItem reserve={account.info} address={account.pubkey} />

View File

@ -1,7 +1,7 @@
import React, { useMemo } from "react"; import React, { useMemo } from "react";
import { useTokenName } from "../../hooks"; import { useTokenName } from "../../hooks";
import { import {
calculateBorrowAPR, calculateBorrowAPY,
calculateDepositAPY, calculateDepositAPY,
LendingReserve, LendingReserve,
} from "../../models/lending"; } from "../../models/lending";
@ -25,8 +25,8 @@ export const LendingReserveItem = (props: {
const liquidityMint = useMint(props.reserve.liquidityMint); const liquidityMint = useMint(props.reserve.liquidityMint);
const availableLiqudity = fromLamports( const availableLiquidity = fromLamports(
props.reserve.availableLiqudity.toNumber(), props.reserve.availableLiquidity.toNumber(),
liquidityMint liquidityMint
); );
@ -39,7 +39,7 @@ export const LendingReserveItem = (props: {
[props.reserve, liquidityMint] [props.reserve, liquidityMint]
); );
const borrowAPY = useMemo(() => calculateBorrowAPR(props.reserve), [ const borrowAPY = useMemo(() => calculateBorrowAPY(props.reserve), [
props.reserve, props.reserve,
]); ]);
@ -47,7 +47,7 @@ export const LendingReserveItem = (props: {
props.reserve, props.reserve,
]); ]);
const marketSize = availableLiqudity + totalBorrows; const marketSize = availableLiquidity + totalBorrows;
return ( return (
<Link to={`/reserve/${props.address.toBase58()}`}> <Link to={`/reserve/${props.address.toBase58()}`}>