diff --git a/package.json b/package.json index e329637..123e052 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/swap/components/Swap.tsx b/src/swap/components/Swap.tsx index 12ca0a5..cb5e941 100644 --- a/src/swap/components/Swap.tsx +++ b/src/swap/components/Swap.tsx @@ -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 ( diff --git a/src/swap/components/context/Dex.tsx b/src/swap/components/context/Dex.tsx index 14fa33c..42ff5ad 100644 --- a/src/swap/components/context/Dex.tsx +++ b/src/swap/components/context/Dex.tsx @@ -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 { + const { swapClient } = useDexContext(); + return useMemo( + () => swapClient.route(fromMint, toMint), + [swapClient, fromMint, toMint] + ); +} + type Orderbook = { bids: OrderbookSide; asks: OrderbookSide; diff --git a/yarn.lock b/yarn.lock index 4eb6d0a..a270048 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"