From 2754386a05e14b2b507b403232831503a8b5fb6f Mon Sep 17 00:00:00 2001 From: Connor Barr Date: Fri, 23 Aug 2024 18:43:25 +0100 Subject: [PATCH] Publish Stage (#3792) * In Given Out (#3773) * feat: initial in given out implementation * feat: inputs and relative buttons wired in to correct quotes * fix: route display * feat: functioning swaps for in given out * feat: working in given out * fix: improved swap denoms button * chore: remove logs * fix: missing dependencies for hook * fix: readded localstorage for swapped pairs, fixed asset page denoms for limit orders * fix: adjusted gas estimate loading state * fix: asset price chart advance view bg * fix: readded feature flag for limit orders * fix: flipped trade details ratio ordering * fix: limit order ratio shows current market * refactor: replicated disabled/loading state for old swap tool * feat: added out given in to buy/sell * fix: limit input with decimal start * fix: reset now resets output * feat: [WIP] swap exact amount out * fix: price formatting for buy/sell fiat inputs * feat: implemented default slippage for in-given-out * chore: removed log * feat: added new slippage defaults to swap tab * build: fix errors * fix: use swap hook infinite load * feat: added more amplitude events * fix: input starting with . for swap tab * feat: hide percent change when below 1% * feat: market price now shows 0% * chore: updated tooltips * chore: localizations * fix: spacing * fix: removed unused localization * fix: display values for new quote type * chore: localizations * fix: in given out refetch dropped to 10 seconds * fix: sell tab non focused display * feat: dynamic slippage for in-given-out * feat: added inGivenOut feature flag * fix: adjusted slippage resetting * fix: removed unused file * Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: renamed slippage variable and fixed comments * fix: added handler for alternate slippage error * feat: added handlers for slippage over balance * fix: loading state for buy/sell tab * refactor: moved amount with slippage calculation to a hook * refactor: cleaned up nonFocusedDisplayAmount * fix: reinstated balance query for exact amount out * fix: added number formatting for swap tab inputs * feat: added OCT to in given out * chore: localizations * refactor: useQueryRouterBestQuote changes --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * [In Given Out]: Feature Flag (#3781) * fix: improved inGivenOut FF disabled behavior * fix: clear inputs on swap * fix: added cases for if user has input and in given out ff is disabled * fix: swap inputs on empty value * Swap more OSMO to ATOM (#3782) * (Deposit/Withdraw) Display Keplr EVM correctly (#3771) * [In Given Out]: Default input adjustments (#3784) * fix: button disabled for limit * feat: default display for buy/sell tab * refactor: wrapped updating code in useEffect * fix: loading state for button * feat: added slippage warning for default too high (#3787) * Mattupham/fe 784 portfolio v2 open orders / limit orders (#3786) * open orders * Add base values for limit orders * Add open orders * Clean up styles * Clean up styles * Base i18n * i18n * Update quote asset * fix: remove logs and correct limit input amount (#3788) * feat: add account address to txn scan endpoint (#3783) * Restrict Orderbook Amount (#3791) * fix: limited orderbook pools for orders query * fix: restrict pools from SQS rather than in orderbook router --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: yakuramori <62520712+yury-dubinin@users.noreply.github.com> Co-authored-by: Jose Felix Co-authored-by: Matt Upham <30577966+mattupham@users.noreply.github.com> Co-authored-by: PaddyMc --- .../src/queries/blockaid/transaction.ts | 1 + .../src/queries/complex/orderbooks/pools.ts | 18 ++++---- packages/trpc/src/orderbook-router.ts | 4 +- .../complex/orders-history/index.tsx | 14 ++++--- .../web/hooks/limit-orders/use-orderbook.ts | 42 ++++++++++--------- packages/web/pages/api/transaction-scan.ts | 1 + 6 files changed, 47 insertions(+), 33 deletions(-) diff --git a/packages/server/src/queries/blockaid/transaction.ts b/packages/server/src/queries/blockaid/transaction.ts index 6518d5c46a..3372f16c9d 100644 --- a/packages/server/src/queries/blockaid/transaction.ts +++ b/packages/server/src/queries/blockaid/transaction.ts @@ -13,6 +13,7 @@ export interface TransactionScanRequest { * Tx hex bytes */ transaction: string; + account_address: string; metadata: { [key: string]: string }; } diff --git a/packages/server/src/queries/complex/orderbooks/pools.ts b/packages/server/src/queries/complex/orderbooks/pools.ts index 3119270d51..bbbd36a388 100644 --- a/packages/server/src/queries/complex/orderbooks/pools.ts +++ b/packages/server/src/queries/complex/orderbooks/pools.ts @@ -22,14 +22,16 @@ export function getOrderbookPools() { ttl: 1000 * 60 * 60, // 1 hour getFreshValue: () => queryCanonicalOrderbooks().then(async (data) => { - return data.map((orderbook) => { - return { - baseDenom: orderbook.base, - quoteDenom: orderbook.quote, - contractAddress: orderbook.contract_address, - poolId: orderbook.pool_id.toString(), - }; - }) as Orderbook[]; + return data + .filter((o) => o.pool_id < 2065) + .map((orderbook) => { + return { + baseDenom: orderbook.base, + quoteDenom: orderbook.quote, + contractAddress: orderbook.contract_address, + poolId: orderbook.pool_id.toString(), + }; + }) as Orderbook[]; }), }); } diff --git a/packages/trpc/src/orderbook-router.ts b/packages/trpc/src/orderbook-router.ts index f1385a1a30..b113d94886 100644 --- a/packages/trpc/src/orderbook-router.ts +++ b/packages/trpc/src/orderbook-router.ts @@ -63,7 +63,9 @@ export const orderbookRouter = createTRPCRouter({ getFreshItems: async () => { const { userOsmoAddress } = input; const pools = await getOrderbookPools(); - const contractAddresses = pools.map((p) => p.contractAddress); + const activePools = pools.filter((p) => parseInt(p.poolId) < 2065); + const contractAddresses = activePools.map((p) => p.contractAddress); + if (contractAddresses.length === 0 || userOsmoAddress.length === 0) return []; const promises = contractAddresses.map( diff --git a/packages/web/components/complex/orders-history/index.tsx b/packages/web/components/complex/orders-history/index.tsx index 93fffea1b8..19ed1e7447 100644 --- a/packages/web/components/complex/orders-history/index.tsx +++ b/packages/web/components/complex/orders-history/index.tsx @@ -84,6 +84,7 @@ export const OrderHistory = observer(() => { } = useOrderbookAllActiveOrders({ userAddress: wallet?.address ?? "", pageSize: 20, + refetchInterval: 15000, }); const groupedOrders = useMemo(() => groupOrdersByStatus(orders), [orders]); @@ -116,11 +117,14 @@ export const OrderHistory = observer(() => { paddingStart: 45, }); - const { claimAllOrders, count: filledOrdersCount } = - useOrderbookClaimableOrders({ - userAddress: wallet?.address ?? "", - disabled: isLoading || orders.length === 0 || isRefetching, - }); + const filledOrders = orders.filter((o) => o.status === "filled"); + const filledOrdersCount = filledOrders.length; + + const { claimAllOrders } = useOrderbookClaimableOrders({ + userAddress: wallet?.address ?? "", + disabled: isLoading || orders.length === 0 || isRefetching, + orders: filledOrders, + }); const claimOrders = useCallback(async () => { try { diff --git a/packages/web/hooks/limit-orders/use-orderbook.ts b/packages/web/hooks/limit-orders/use-orderbook.ts index 215c20d642..2cdfee8ade 100644 --- a/packages/web/hooks/limit-orders/use-orderbook.ts +++ b/packages/web/hooks/limit-orders/use-orderbook.ts @@ -291,6 +291,8 @@ export const useOrderbookAllActiveOrders = ({ getNextPageParam: (lastPage) => lastPage.nextCursor, initialCursor: 0, refetchInterval, + cacheTime: refetchInterval, + staleTime: refetchInterval, enabled: !!userAddress && addresses.length > 0, refetchOnMount: true, keepPreviousData: false, @@ -326,30 +328,32 @@ export const useOrderbookAllActiveOrders = ({ }; export const useOrderbookClaimableOrders = ({ - userAddress, - disabled = false, + userAddress: _, + disabled: __, + orders = [], }: { userAddress: string; disabled?: boolean; + orders: MappedLimitOrder[]; }) => { const { orderbooks } = useOrderbooks(); const { accountStore } = useStore(); const account = accountStore.getWallet(accountStore.osmosisChainId); const addresses = orderbooks.map(({ contractAddress }) => contractAddress); - const { - data: orders, - isLoading, - isFetching, - refetch, - } = api.edge.orderbooks.getClaimableOrders.useQuery( - { - userOsmoAddress: userAddress, - }, - { - enabled: !!userAddress && addresses.length > 0 && !disabled, - refetchOnMount: true, - } - ); + // const { + // data: orders, + // isLoading, + // isFetching, + // refetch, + // } = api.edge.orderbooks.getClaimableOrders.useQuery( + // { + // userOsmoAddress: userAddress, + // }, + // { + // enabled: !!userAddress && addresses.length > 0 && !disabled, + // refetchOnMount: true, + // } + // ); const claimAllOrders = useCallback(async () => { if (!account || !orders) return; @@ -379,14 +383,14 @@ export const useOrderbookClaimableOrders = ({ if (msgs.length > 0) { await account?.cosmwasm.sendMultiExecuteContractMsg("executeWasm", msgs); - await refetch(); + // await refetch(); } - }, [orders, account, addresses, refetch]); + }, [orders, account, addresses]); return { orders: orders ?? [], count: orders?.length ?? 0, - isLoading: isLoading || isFetching, + isLoading: false, claimAllOrders, }; }; diff --git a/packages/web/pages/api/transaction-scan.ts b/packages/web/pages/api/transaction-scan.ts index 71619c53d2..e05d1de9cb 100644 --- a/packages/web/pages/api/transaction-scan.ts +++ b/packages/web/pages/api/transaction-scan.ts @@ -37,6 +37,7 @@ export default async function transactionScanHandler( chain: "osmosis", transaction: unsignedTx, options: ["validation", "simulation"], + account_address: bech32Address, metadata: { type: "in_app", },