style: run format

This commit is contained in:
bartosz-lipinski 2020-11-26 00:05:24 -06:00
parent 097dc95f5f
commit 453b7efb4e
18 changed files with 142 additions and 114 deletions

View File

@ -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

View File

@ -42,8 +42,7 @@ export const borrow = async (
exsistingObligation?: ParsedAccount<LendingObligation>,
obligationAccount?: PublicKey,
obligationAccount?: PublicKey
) => {
notify({
message: "Borrowing funds...",
@ -59,34 +58,34 @@ export const borrow = async (
AccountLayout.span
);
const obligation = exsistingObligation ?
exsistingObligation.pubkey :
createUninitializedObligation(
instructions,
wallet.publicKey,
await connection.getMinimumBalanceForRentExemption(
LendingObligationLayout.span
),
signers
);
const obligation = exsistingObligation
? exsistingObligation.pubkey
: createUninitializedObligation(
instructions,
wallet.publicKey,
await connection.getMinimumBalanceForRentExemption(
LendingObligationLayout.span
),
signers
);
const obligationMint = exsistingObligation ?
exsistingObligation.info.tokenMint :
createUninitializedMint(
instructions,
wallet.publicKey,
await connection.getMinimumBalanceForRentExemption(MintLayout.span),
signers
);
const obligationMint = exsistingObligation
? exsistingObligation.info.tokenMint
: createUninitializedMint(
instructions,
wallet.publicKey,
await connection.getMinimumBalanceForRentExemption(MintLayout.span),
signers
);
const obligationTokenOutput = obligationAccount ?
obligationAccount :
createUninitializedAccount(
instructions,
wallet.publicKey,
accountRentExempt,
signers
);
const obligationTokenOutput = obligationAccount
? obligationAccount
: createUninitializedAccount(
instructions,
wallet.publicKey,
accountRentExempt,
signers
);
let toAccount = await findOrCreateAccountByMint(
wallet.publicKey,
@ -110,14 +109,13 @@ export const borrow = async (
type: "success",
});
}
notify({
message: "Adding Liquidity...",
description: "Please review transactions to approve.",
type: "warn",
});
signers = [];
instructions = [];
cleanupInstructions = [];
@ -130,7 +128,7 @@ export const borrow = async (
let amountLamports: number = 0;
let fromLamports: number = 0;
if (amountType === BorrowAmountType.LiquidityBorrowAmount) {
// approve max transfer
// approve max transfer
// TODO: improve contrain by using dex market data
const approvedAmount = from.info.amount.toNumber();

View File

@ -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";

View File

@ -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,

View File

@ -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";

View File

@ -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 }} />;
};

View File

@ -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
@ -78,31 +78,30 @@ export const useLending = () => {
.filter((item) => item !== undefined);
const lendingReserves = accounts
.filter(
(acc) => (acc?.info as LendingReserve).lendingMarket !== undefined
)
.map((acc) => acc as ParsedAccount<LendingReserve>);
.filter(
(acc) => (acc?.info as LendingReserve).lendingMarket !== undefined
)
.map((acc) => acc as ParsedAccount<LendingReserve>);
const toQuery = [
...lendingReserves
.map((acc) => {
const result = [
cache.registerParser(
acc?.info.collateralMint.toBase58(),
MintParser
),
cache.registerParser(
acc?.info.liquidityMint.toBase58(),
MintParser
),
// ignore dex if its not set
cache.registerParser(
acc?.info.dexMarketOption ? acc?.info.dexMarket.toBase58() : "",
DexMarketParser
),
].filter((_) => _);
return result;
}),
...lendingReserves.map((acc) => {
const result = [
cache.registerParser(
acc?.info.collateralMint.toBase58(),
MintParser
),
cache.registerParser(
acc?.info.liquidityMint.toBase58(),
MintParser
),
// ignore dex if its not set
cache.registerParser(
acc?.info.dexMarketOption ? acc?.info.dexMarket.toBase58() : "",
DexMarketParser
),
].filter((_) => _);
return result;
}),
].flat() as string[];
// This will pre-cache all accounts used by pools

View File

@ -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(

View File

@ -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) *

View File

@ -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]);

View File

@ -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 => ({
account: item,
reserve: reservesByCollateralMint.get(item.info.mint.toBase58()) as ParsedAccount<LendingReserve>,
.map((item) => ({
account: item,
reserve: reservesByCollateralMint.get(
item.info.mint.toBase58()
) as ParsedAccount<LendingReserve>,
}));
}, [userAccounts, reservesByCollateralMint]);
return {
userDeposits
userDeposits,
};
}

View File

@ -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

View File

@ -4,4 +4,4 @@ export * from "./obligation";
export * from "./lending";
export * from "./borrow";
export * from "./deposit";
export * from "./withdraw";
export * from "./withdraw";

View File

@ -47,4 +47,4 @@ export const withdrawInstruction = (
programId: LENDING_PROGRAM_ID,
data,
});
};
};

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>