Pass through account data to swap client for perf

This commit is contained in:
armaniferrante 2021-05-15 12:27:13 -07:00
parent 359f2428f7
commit aa82a660fb
No known key found for this signature in database
GPG Key ID: 58BEF301E91F7828
4 changed files with 40 additions and 11 deletions

View File

@ -10,7 +10,7 @@
"@project-serum/anchor": "^0.5.1-beta.2",
"@project-serum/serum": "^0.13.34",
"@project-serum/sol-wallet-adapter": "^0.2.0",
"@project-serum/swap": "^0.1.0-alpha.3",
"@project-serum/swap": "^0.1.0-alpha.4",
"@solana/spl-token": "^0.1.4",
"@solana/spl-token-registry": "^0.2.86",
"@solana/web3.js": "^1.10.1",

View File

@ -13,7 +13,13 @@ import {
} from "@material-ui/core";
import { ExpandMore } from "@material-ui/icons";
import { SwapContextProvider, useSwapContext } from "./context/Swap";
import { DexContextProvider, useDexContext } from "./context/Dex";
import {
DexContextProvider,
useDexContext,
useOpenOrders,
useRoute,
useMarket,
} from "./context/Dex";
import { MintContextProvider, useMint } from "./context/Mint";
import { TokenListContextProvider, useTokenList } from "./context/TokenList";
import { TokenContextProvider, useOwnedTokenAccount } from "./context/Token";
@ -255,6 +261,10 @@ function SwapButton() {
const { swapClient } = useDexContext();
const fromMintInfo = useMint(fromMint);
const toMintInfo = useMint(toMint);
const openOrders = useOpenOrders();
const route = useRoute(fromMint, toMint);
const fromMarket = useMarket(route[0]);
const toMarket = useMarket(route[1]);
const sendSwapTransaction = async () => {
if (!fromMintInfo || !toMintInfo) {
@ -264,11 +274,23 @@ function SwapButton() {
const minExpectedSwapAmount = new BN(
(toAmount * (100 - slippage)) / 100
).muln(10 ** toMintInfo.decimals);
const fromOpenOrders = fromMarket
? openOrders.get(fromMarket?.address.toString())
: undefined;
const toOpenOrders = toMarket
? openOrders.get(toMarket?.address.toString())
: undefined;
await swapClient.swap({
fromMint,
toMint,
amount,
minExpectedSwapAmount,
// Pass in the below parameters so that the client doesn't perform
// wasteful network requests when we already have the data.
fromMarket,
toMarket,
fromOpenOrders: fromOpenOrders ? fromOpenOrders[0].address : undefined,
toOpenOrders: toOpenOrders ? toOpenOrders[0].address : undefined,
});
};
return (

View File

@ -223,11 +223,7 @@ export function useFairRoute(
fromMint: PublicKey,
toMint: PublicKey
): number | undefined {
const { swapClient } = useDexContext();
const route = useMemo(
() => swapClient.route(fromMint, toMint),
[swapClient, fromMint, toMint]
);
const route = useRoute(fromMint, toMint);
const fromFair = useFair(route[0]);
const fromMarket = useMarket(route[0]);
const toFair = useFair(route[1]);
@ -248,6 +244,17 @@ export function useFairRoute(
return toFair / fromFair;
}
export function useRoute(
fromMint: PublicKey,
toMint: PublicKey
): Array<PublicKey> {
const { swapClient } = useDexContext();
return useMemo(
() => swapClient.route(fromMint, toMint),
[swapClient, fromMint, toMint]
);
}
type Orderbook = {
bids: OrderbookSide;
asks: OrderbookSide;

View File

@ -1588,10 +1588,10 @@
bs58 "^4.0.1"
eventemitter3 "^4.0.4"
"@project-serum/swap@^0.1.0-alpha.3":
version "0.1.0-alpha.3"
resolved "https://registry.yarnpkg.com/@project-serum/swap/-/swap-0.1.0-alpha.3.tgz#f400b646b2c40f41d34a4a273054be1051576296"
integrity sha512-pjk+uo2llyOhJnf7NCXkunm8dPlDOUbDWx97Xq/R7G/qDckBgbXuJxTE+5w0kxr6f2FwecglHDpfnfwXFJdFKQ==
"@project-serum/swap@^0.1.0-alpha.4":
version "0.1.0-alpha.4"
resolved "https://registry.yarnpkg.com/@project-serum/swap/-/swap-0.1.0-alpha.4.tgz#f5035218173d7f8ccb0d53c637c10f50b4734c3f"
integrity sha512-5O6rJjLmaZTiPJUZq5iHBV1c3LQ11ZBv4wD1ol5rIPxDkHlmxqfH23XQVkC3aEJXIry5ffRf7hL/e1VgSW5C3A==
dependencies:
"@project-serum/anchor" "^0.5.1-beta.2"
"@project-serum/serum" "^0.13.34"