Pass through account data to swap client for perf
This commit is contained in:
parent
359f2428f7
commit
aa82a660fb
|
@ -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",
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue