mirror of https://github.com/certusone/oyster.git
style: run format
This commit is contained in:
parent
097dc95f5f
commit
453b7efb4e
|
@ -24,5 +24,5 @@ Any content produced by Solana, or developer resources that Solana provides, are
|
|||
|
||||
# TOP for tomorrow
|
||||
|
||||
* subscribe to all dex markets that are used by lending reserves
|
||||
* finish reserve overivew
|
||||
- subscribe to all dex markets that are used by lending reserves
|
||||
- finish reserve overivew
|
||||
|
|
|
@ -42,8 +42,7 @@ export const borrow = async (
|
|||
|
||||
exsistingObligation?: ParsedAccount<LendingObligation>,
|
||||
|
||||
obligationAccount?: PublicKey,
|
||||
|
||||
obligationAccount?: PublicKey
|
||||
) => {
|
||||
notify({
|
||||
message: "Borrowing funds...",
|
||||
|
@ -59,9 +58,9 @@ export const borrow = async (
|
|||
AccountLayout.span
|
||||
);
|
||||
|
||||
const obligation = exsistingObligation ?
|
||||
exsistingObligation.pubkey :
|
||||
createUninitializedObligation(
|
||||
const obligation = exsistingObligation
|
||||
? exsistingObligation.pubkey
|
||||
: createUninitializedObligation(
|
||||
instructions,
|
||||
wallet.publicKey,
|
||||
await connection.getMinimumBalanceForRentExemption(
|
||||
|
@ -70,18 +69,18 @@ export const borrow = async (
|
|||
signers
|
||||
);
|
||||
|
||||
const obligationMint = exsistingObligation ?
|
||||
exsistingObligation.info.tokenMint :
|
||||
createUninitializedMint(
|
||||
const obligationMint = exsistingObligation
|
||||
? exsistingObligation.info.tokenMint
|
||||
: createUninitializedMint(
|
||||
instructions,
|
||||
wallet.publicKey,
|
||||
await connection.getMinimumBalanceForRentExemption(MintLayout.span),
|
||||
signers
|
||||
);
|
||||
|
||||
const obligationTokenOutput = obligationAccount ?
|
||||
obligationAccount :
|
||||
createUninitializedAccount(
|
||||
const obligationTokenOutput = obligationAccount
|
||||
? obligationAccount
|
||||
: createUninitializedAccount(
|
||||
instructions,
|
||||
wallet.publicKey,
|
||||
accountRentExempt,
|
||||
|
@ -117,7 +116,6 @@ export const borrow = async (
|
|||
type: "warn",
|
||||
});
|
||||
|
||||
|
||||
signers = [];
|
||||
instructions = [];
|
||||
cleanupInstructions = [];
|
||||
|
|
|
@ -6,10 +6,7 @@ import {
|
|||
} from "@solana/web3.js";
|
||||
import { sendTransaction } from "../contexts/connection";
|
||||
import { notify } from "../utils/notifications";
|
||||
import {
|
||||
LendingReserve,
|
||||
withdrawInstruction,
|
||||
} from "./../models/lending";
|
||||
import { LendingReserve, withdrawInstruction } from "./../models/lending";
|
||||
import { AccountLayout, Token } from "@solana/spl-token";
|
||||
import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../constants/ids";
|
||||
import { findOrCreateAccountByMint } from "./account";
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
import React, { useCallback, useMemo, useState } from "react";
|
||||
import { useTokenName, useUserBalance, useUserObligationByReserve } from "../../hooks";
|
||||
import { BorrowAmountType, LendingReserve, LendingReserveParser } from "../../models";
|
||||
import {
|
||||
useTokenName,
|
||||
useUserBalance,
|
||||
useUserObligationByReserve,
|
||||
} from "../../hooks";
|
||||
import {
|
||||
BorrowAmountType,
|
||||
LendingReserve,
|
||||
LendingReserveParser,
|
||||
} from "../../models";
|
||||
import { TokenIcon } from "../TokenIcon";
|
||||
import { Button, Card } from "antd";
|
||||
import { cache, ParsedAccount } from "../../contexts/accounts";
|
||||
|
@ -38,7 +46,9 @@ export const BorrowInput = (props: {
|
|||
collateralReserve?.info.collateralMint
|
||||
);
|
||||
|
||||
const { userObligationsByReserve } = useUserObligationByReserve(borrowReserve.pubkey)
|
||||
const { userObligationsByReserve } = useUserObligationByReserve(
|
||||
borrowReserve.pubkey
|
||||
);
|
||||
|
||||
const onBorrow = useCallback(() => {
|
||||
if (!collateralReserve) {
|
||||
|
@ -56,13 +66,13 @@ export const BorrowInput = (props: {
|
|||
borrowReserve,
|
||||
collateralReserve,
|
||||
|
||||
userObligationsByReserve.length > 0 ?
|
||||
userObligationsByReserve[0].obligation :
|
||||
undefined,
|
||||
userObligationsByReserve.length > 0
|
||||
? userObligationsByReserve[0].obligation
|
||||
: undefined,
|
||||
|
||||
userObligationsByReserve.length > 0 ?
|
||||
userObligationsByReserve[0].userAccounts[0].pubkey :
|
||||
undefined
|
||||
userObligationsByReserve.length > 0
|
||||
? userObligationsByReserve[0].userAccounts[0].pubkey
|
||||
: undefined
|
||||
);
|
||||
}, [
|
||||
connection,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { } from "react";
|
||||
import React from "react";
|
||||
import { LendingReserve } from "../../models/lending";
|
||||
import { Card } from "antd";
|
||||
import { PublicKey } from "@solana/web3.js";
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
import React, { useEffect, useMemo, useRef } from "react";
|
||||
import { LendingReserve } from "../../models/lending";
|
||||
import echarts from "echarts";
|
||||
import { formatNumber, formatUSD, fromLamports, wadToLamports } from "../../utils/utils";
|
||||
import {
|
||||
formatNumber,
|
||||
formatUSD,
|
||||
fromLamports,
|
||||
wadToLamports,
|
||||
} from "../../utils/utils";
|
||||
import { useMint } from "../../contexts/accounts";
|
||||
|
||||
export const ReserveUtilizationChart = (props: {
|
||||
reserve: LendingReserve;
|
||||
}) => {
|
||||
export const ReserveUtilizationChart = (props: { reserve: LendingReserve }) => {
|
||||
const chartDiv = useRef<HTMLDivElement>(null);
|
||||
|
||||
// dispose chart
|
||||
|
@ -26,7 +29,10 @@ export const ReserveUtilizationChart = (props: {
|
|||
|
||||
const totalBorrows = useMemo(
|
||||
() =>
|
||||
fromLamports(wadToLamports(props.reserve.borrowedLiquidityWad), liquidityMint),
|
||||
fromLamports(
|
||||
wadToLamports(props.reserve.borrowedLiquidityWad),
|
||||
liquidityMint
|
||||
),
|
||||
[props.reserve, liquidityMint]
|
||||
);
|
||||
|
||||
|
@ -42,12 +48,12 @@ export const ReserveUtilizationChart = (props: {
|
|||
|
||||
const data = [
|
||||
{
|
||||
name: 'Available Liquidity',
|
||||
name: "Available Liquidity",
|
||||
value: avilableLiquidity,
|
||||
tokens: avilableLiquidity,
|
||||
},
|
||||
{
|
||||
name: 'Total Borrowed',
|
||||
name: "Total Borrowed",
|
||||
value: totalBorrows,
|
||||
tokens: totalBorrows,
|
||||
},
|
||||
|
@ -66,7 +72,7 @@ export const ReserveUtilizationChart = (props: {
|
|||
{
|
||||
name: "Liquidity",
|
||||
type: "pie",
|
||||
radius: ['50%', '70%'],
|
||||
radius: ["50%", "70%"],
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
|
@ -104,5 +110,5 @@ export const ReserveUtilizationChart = (props: {
|
|||
});
|
||||
}, [totalBorrows, avilableLiquidity]);
|
||||
|
||||
return <div ref={chartDiv} style={{ height: 300, width: 400 }} />
|
||||
}
|
||||
return <div ref={chartDiv} style={{ height: 300, width: 400 }} />;
|
||||
};
|
||||
|
|
|
@ -40,7 +40,7 @@ export function LendingProvider({ children = null as any }) {
|
|||
export const useLending = () => {
|
||||
const connection = useConnection();
|
||||
const [lendingAccounts, setLendingAccounts] = useState<any[]>([]);
|
||||
const precacheMarkets = usePrecacheMarket()
|
||||
const precacheMarkets = usePrecacheMarket();
|
||||
|
||||
// TODO: query for all the dex from reserves
|
||||
|
||||
|
@ -84,8 +84,7 @@ export const useLending = () => {
|
|||
.map((acc) => acc as ParsedAccount<LendingReserve>);
|
||||
|
||||
const toQuery = [
|
||||
...lendingReserves
|
||||
.map((acc) => {
|
||||
...lendingReserves.map((acc) => {
|
||||
const result = [
|
||||
cache.registerParser(
|
||||
acc?.info.collateralMint.toBase58(),
|
||||
|
|
|
@ -185,9 +185,12 @@ export function MarketProvider({ children = null as any }) {
|
|||
[marketByMint, accountsToObserve]
|
||||
);
|
||||
|
||||
const precacheMarkets = useCallback((mints: string[]) => {
|
||||
setMarketMints([...new Set([...marketMints, ...mints]).values()])
|
||||
}, [setMarketMints, marketMints]);
|
||||
const precacheMarkets = useCallback(
|
||||
(mints: string[]) => {
|
||||
setMarketMints([...new Set([...marketMints, ...mints]).values()]);
|
||||
},
|
||||
[setMarketMints, marketMints]
|
||||
);
|
||||
|
||||
return (
|
||||
<MarketsContext.Provider
|
||||
|
@ -239,7 +242,7 @@ export const useMidPriceInUSD = (mint: string) => {
|
|||
export const usePrecacheMarket = () => {
|
||||
const context = useMarkets();
|
||||
return context.precacheMarkets;
|
||||
}
|
||||
};
|
||||
|
||||
const getMidPrice = (marketAddress?: string, mintAddress?: string) => {
|
||||
const SERUM_TOKEN = TOKEN_MINTS.find(
|
||||
|
|
|
@ -4,9 +4,15 @@ import { LendingReserve } from "../models/lending";
|
|||
import { fromLamports } from "../utils/utils";
|
||||
import { useUserBalance } from "./useUserBalance";
|
||||
|
||||
export function useCollateralBalance(reserve?: LendingReserve, account?: PublicKey) {
|
||||
export function useCollateralBalance(
|
||||
reserve?: LendingReserve,
|
||||
account?: PublicKey
|
||||
) {
|
||||
const mint = useMint(reserve?.collateralMint);
|
||||
const { balanceLamports, accounts } = useUserBalance(reserve?.collateralMint, account);
|
||||
const { balanceLamports, accounts } = useUserBalance(
|
||||
reserve?.collateralMint,
|
||||
account
|
||||
);
|
||||
|
||||
const collateralRatioLamports =
|
||||
(reserve?.availableLiqudity.toNumber() || 0) *
|
||||
|
|
|
@ -9,7 +9,11 @@ export function useUserBalance(mint?: PublicKey, account?: PublicKey) {
|
|||
const mintInfo = useMint(mint);
|
||||
const accounts = useMemo(() => {
|
||||
return userAccounts
|
||||
.filter((acc) => mint?.equals(acc.info.mint) && (!account || account.equals(acc.pubkey)))
|
||||
.filter(
|
||||
(acc) =>
|
||||
mint?.equals(acc.info.mint) &&
|
||||
(!account || account.equals(acc.pubkey))
|
||||
)
|
||||
.sort((a, b) => b.info.amount.sub(a.info.amount).toNumber());
|
||||
}, [userAccounts, mint, account]);
|
||||
|
||||
|
|
|
@ -12,20 +12,21 @@ export function useUserDeposits() {
|
|||
return reserveAccounts.reduce((result, item) => {
|
||||
result.set(item.info.collateralMint.toBase58(), item);
|
||||
return result;
|
||||
}
|
||||
, new Map<string, ParsedAccount<LendingReserve>>())
|
||||
}, new Map<string, ParsedAccount<LendingReserve>>());
|
||||
}, [reserveAccounts]);
|
||||
|
||||
const userDeposits = useMemo(() => {
|
||||
return userAccounts
|
||||
.filter((acc) => reservesByCollateralMint.has(acc.info.mint.toBase58()))
|
||||
.map(item => ({
|
||||
.map((item) => ({
|
||||
account: item,
|
||||
reserve: reservesByCollateralMint.get(item.info.mint.toBase58()) as ParsedAccount<LendingReserve>,
|
||||
reserve: reservesByCollateralMint.get(
|
||||
item.info.mint.toBase58()
|
||||
) as ParsedAccount<LendingReserve>,
|
||||
}));
|
||||
}, [userAccounts, reservesByCollateralMint]);
|
||||
|
||||
return {
|
||||
userDeposits
|
||||
userDeposits,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import { LendingReserve } from "./reserve";
|
|||
|
||||
export enum BorrowAmountType {
|
||||
LiquidityBorrowAmount = 0,
|
||||
CollateralDepositAmount = 1
|
||||
CollateralDepositAmount = 1,
|
||||
}
|
||||
|
||||
/// Borrow tokens from a reserve by depositing collateral tokens. The number of borrowed tokens
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
import React from "react";
|
||||
import {
|
||||
useCollateralBalance,
|
||||
useTokenName,
|
||||
} from "../../hooks";
|
||||
import { useCollateralBalance, useTokenName } from "../../hooks";
|
||||
import { LendingReserve } from "../../models/lending";
|
||||
import { TokenIcon } from "../../components/TokenIcon";
|
||||
import { formatNumber } from "../../utils/utils";
|
||||
|
@ -15,10 +12,12 @@ export const DepositItem = (props: {
|
|||
reserve: ParsedAccount<LendingReserve>;
|
||||
account: TokenAccount;
|
||||
}) => {
|
||||
|
||||
const mintAddress = props.reserve.info.liquidityMint;
|
||||
const name = useTokenName(mintAddress);
|
||||
const { balance: collateralBalance } = useCollateralBalance(props.reserve.info, props.account.pubkey);
|
||||
const { balance: collateralBalance } = useCollateralBalance(
|
||||
props.reserve.info,
|
||||
props.account.pubkey
|
||||
);
|
||||
|
||||
return (
|
||||
<Card>
|
||||
|
@ -31,7 +30,7 @@ export const DepositItem = (props: {
|
|||
{formatNumber.format(collateralBalance)} {name}
|
||||
</div>
|
||||
<div>--</div>
|
||||
<div style={{ display: "flex", justifyContent: 'flex-end' }}>
|
||||
<div style={{ display: "flex", justifyContent: "flex-end" }}>
|
||||
<Link to={`/deposit/${props.reserve.pubkey.toBase58()}`}>
|
||||
<Button>
|
||||
<span>Deposit</span>
|
||||
|
|
|
@ -21,9 +21,9 @@ export const DashboardView = () => {
|
|||
<div>{LABELS.TABLE_TITLE_ACTION}</div>
|
||||
</div>
|
||||
)}
|
||||
{userDeposits.map(deposit => <DepositItem reserve={deposit.reserve} account={deposit.account} />)
|
||||
|
||||
}
|
||||
{userDeposits.map((deposit) => (
|
||||
<DepositItem reserve={deposit.reserve} account={deposit.account} />
|
||||
))}
|
||||
</div>
|
||||
<div className="dashboard-right">
|
||||
<span>{LABELS.DASHBOARD_TITLE_LOANS}</span>
|
||||
|
|
|
@ -36,7 +36,7 @@ export const ObligationItem = (props: {
|
|||
{formatNumber.format(borrowAmount)} {name}
|
||||
</div>
|
||||
<div>--</div>
|
||||
<div style={{ display: "flex", justifyContent: 'flex-end' }}>
|
||||
<div style={{ display: "flex", justifyContent: "flex-end" }}>
|
||||
<Link to={`/borrow/${borrowReserve.pubkey.toBase58()}`}>
|
||||
<Button>
|
||||
<span>Borrow</span>
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import React, { useMemo } from "react";
|
||||
import { useTokenName } from "../../hooks";
|
||||
import { calculateBorrowAPY, calculateDepositAPY, LendingReserve } from "../../models/lending";
|
||||
import {
|
||||
calculateBorrowAPY,
|
||||
calculateDepositAPY,
|
||||
LendingReserve,
|
||||
} from "../../models/lending";
|
||||
import { TokenIcon } from "../../components/TokenIcon";
|
||||
import {
|
||||
wadToLamports,
|
||||
|
@ -28,7 +32,10 @@ export const LendingReserveItem = (props: {
|
|||
|
||||
const totalBorrows = useMemo(
|
||||
() =>
|
||||
fromLamports(wadToLamports(props.reserve.borrowedLiquidityWad), liquidityMint),
|
||||
fromLamports(
|
||||
wadToLamports(props.reserve.borrowedLiquidityWad),
|
||||
liquidityMint
|
||||
),
|
||||
[props.reserve, liquidityMint]
|
||||
);
|
||||
|
||||
|
@ -40,7 +47,7 @@ export const LendingReserveItem = (props: {
|
|||
props.reserve,
|
||||
]);
|
||||
|
||||
const marketSize = availableLiqudity+totalBorrows;
|
||||
const marketSize = availableLiqudity + totalBorrows;
|
||||
|
||||
return (
|
||||
<Link to={`/reserve/${props.address.toBase58()}`}>
|
||||
|
@ -59,9 +66,7 @@ export const LendingReserveItem = (props: {
|
|||
<div title={depositAPY.toString()}>
|
||||
{formatPct.format(depositAPY)}
|
||||
</div>
|
||||
<div title={borrowAPY.toString()}>
|
||||
{formatPct.format(borrowAPY)}
|
||||
</div>
|
||||
<div title={borrowAPY.toString()}>{formatPct.format(borrowAPY)}</div>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
|
|
Loading…
Reference in New Issue