From 126fc269082e3b938cb38c99e4bc41cde166f248 Mon Sep 17 00:00:00 2001 From: Tim Man Date: Fri, 28 Jul 2023 14:23:42 +0800 Subject: [PATCH 1/8] fix: only show swaps button if not on a ledger account --- src/app/screens/home/index.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/screens/home/index.tsx b/src/app/screens/home/index.tsx index deb2453c3..c5eb26700 100644 --- a/src/app/screens/home/index.tsx +++ b/src/app/screens/home/index.tsx @@ -363,6 +363,8 @@ function Home() { ); + const showSwaps = !isLedgerAccount(selectedAccount); + return ( <> @@ -384,7 +386,7 @@ function Home() { - {/* */} + {showSwaps && } From b762a32a8fd6ec95861c6357298c815705b1cdbe Mon Sep 17 00:00:00 2001 From: Tim Man Date: Fri, 28 Jul 2023 15:27:31 +0800 Subject: [PATCH 2/8] fix: post condition info should display to/from depending on the swap --- src/app/screens/swap/swapConfirmation/stxInfoBlock/index.tsx | 2 +- src/locales/en.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/screens/swap/swapConfirmation/stxInfoBlock/index.tsx b/src/app/screens/swap/swapConfirmation/stxInfoBlock/index.tsx index f058cbb08..483259cc0 100644 --- a/src/app/screens/swap/swapConfirmation/stxInfoBlock/index.tsx +++ b/src/app/screens/swap/swapConfirmation/stxInfoBlock/index.tsx @@ -151,7 +151,7 @@ export default function StxInfoBlock({ type, swap }: StxInfoCardProps) { {` ~ $${token.fiatAmount} USD`} - {t('TO')} + {type === 'transfer' ? t('FROM') : t('TO')} diff --git a/src/locales/en.json b/src/locales/en.json index 15c74ff7a..ff3fd094f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -808,6 +808,7 @@ "YOU_WILL_RECEIVE": "You will receive", "AMOUNT": "Amount", "LESS_THAN_OR_EQUAL_TO": "Less than or equal to", + "FROM": "From", "TO": "To", "YOUR_ADDRESS": "Your address", "CANCEL": "Cancel", From baa87d3dae87db7c20e74d78b1de6d27f64eba1b Mon Sep 17 00:00:00 2001 From: victorkirov Date: Mon, 31 Jul 2023 12:34:12 +0300 Subject: [PATCH 3/8] fix: ensure we are sending the correct ordinal --- src/app/screens/sendOrdinal/index.tsx | 42 ++++++++++++++------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/app/screens/sendOrdinal/index.tsx b/src/app/screens/sendOrdinal/index.tsx index 2942f194f..09efd1cad 100644 --- a/src/app/screens/sendOrdinal/index.tsx +++ b/src/app/screens/sendOrdinal/index.tsx @@ -1,28 +1,28 @@ -import styled from 'styled-components'; -import { useTranslation } from 'react-i18next'; -import { useEffect, useMemo, useState } from 'react'; -import { useMutation } from '@tanstack/react-query'; -import { useLocation, useNavigate } from 'react-router-dom'; -import { ErrorCodes, ResponseError, UTXO } from '@secretkeylabs/xverse-core/types'; -import { validateBtcAddress } from '@secretkeylabs/xverse-core/wallet'; -import { - SignedBtcTx, - signOrdinalSendTransaction, -} from '@secretkeylabs/xverse-core/transactions/btc'; -import useWalletSelector from '@hooks/useWalletSelector'; +import ArrowLeft from '@assets/img/dashboard/arrow_left.svg'; +import AccountHeaderComponent from '@components/accountHeader'; import SendForm from '@components/sendForm'; -import TopRow from '@components/topRow'; import BottomBar from '@components/tabBar'; -import AccountHeaderComponent from '@components/accountHeader'; -import OrdinalImage from '@screens/ordinals/ordinalImage'; -import ArrowLeft from '@assets/img/dashboard/arrow_left.svg'; -import { getBtcFiatEquivalent } from '@secretkeylabs/xverse-core/currency'; +import TopRow from '@components/topRow'; import useNftDataSelector from '@hooks/stores/useNftDataSelector'; import useBtcClient from '@hooks/useBtcClient'; +import { useResetUserFlow } from '@hooks/useResetUserFlow'; import useTextOrdinalContent from '@hooks/useTextOrdinalContent'; -import { isLedgerAccount } from '@utils/helper'; +import useWalletSelector from '@hooks/useWalletSelector'; +import OrdinalImage from '@screens/ordinals/ordinalImage'; import { isOrdinalOwnedByAccount } from '@secretkeylabs/xverse-core/api'; -import { useResetUserFlow } from '@hooks/useResetUserFlow'; +import { getBtcFiatEquivalent } from '@secretkeylabs/xverse-core/currency'; +import { + SignedBtcTx, + signOrdinalSendTransaction, +} from '@secretkeylabs/xverse-core/transactions/btc'; +import { ErrorCodes, ResponseError, UTXO } from '@secretkeylabs/xverse-core/types'; +import { validateBtcAddress } from '@secretkeylabs/xverse-core/wallet'; +import { useMutation } from '@tanstack/react-query'; +import { isLedgerAccount } from '@utils/helper'; +import { useEffect, useMemo, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useLocation, useNavigate } from 'react-router-dom'; +import styled from 'styled-components'; const ScrollContainer = styled.div` display: flex; @@ -124,7 +124,9 @@ function SendOrdinal() { } = useMutation({ mutationFn: async (recipient) => { const addressUtxos = await btcClient.getUnspentUtxos(ordinalsAddress); - const ordUtxo = addressUtxos.find((utx) => utx.txid === selectedOrdinal?.tx_id); + const ordUtxo = addressUtxos.find( + (utx) => `${utx.txid}:${utx.vout}` === selectedOrdinal?.output, + ); setOrdinalUtxo(ordUtxo); if (ordUtxo) { const signedTx = await signOrdinalSendTransaction( From 6017c956a71c88f5b964a5584e8e92c2ee892d6d Mon Sep 17 00:00:00 2001 From: victorkirov Date: Mon, 31 Jul 2023 12:34:12 +0300 Subject: [PATCH 4/8] fix: ensure we are sending the correct ordinal --- src/app/screens/sendOrdinal/index.tsx | 74 ++++++++++++++------------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/src/app/screens/sendOrdinal/index.tsx b/src/app/screens/sendOrdinal/index.tsx index 804e221f8..4ec2d504d 100644 --- a/src/app/screens/sendOrdinal/index.tsx +++ b/src/app/screens/sendOrdinal/index.tsx @@ -1,28 +1,28 @@ -import styled from 'styled-components'; -import { useTranslation } from 'react-i18next'; -import { useEffect, useMemo, useState } from 'react'; -import { useMutation } from '@tanstack/react-query'; -import { useLocation, useNavigate } from 'react-router-dom'; -import { ErrorCodes, ResponseError, UTXO } from '@secretkeylabs/xverse-core/types'; -import { validateBtcAddress } from '@secretkeylabs/xverse-core/wallet'; -import { - SignedBtcTx, - signOrdinalSendTransaction, -} from '@secretkeylabs/xverse-core/transactions/btc'; -import useWalletSelector from '@hooks/useWalletSelector'; +import ArrowLeft from '@assets/img/dashboard/arrow_left.svg'; +import AccountHeaderComponent from '@components/accountHeader'; import SendForm from '@components/sendForm'; -import TopRow from '@components/topRow'; import BottomBar from '@components/tabBar'; -import AccountHeaderComponent from '@components/accountHeader'; -import OrdinalImage from '@screens/ordinals/ordinalImage'; -import ArrowLeft from '@assets/img/dashboard/arrow_left.svg'; -import { getBtcFiatEquivalent } from '@secretkeylabs/xverse-core/currency'; +import TopRow from '@components/topRow'; import useNftDataSelector from '@hooks/stores/useNftDataSelector'; import useBtcClient from '@hooks/useBtcClient'; +import { useResetUserFlow } from '@hooks/useResetUserFlow'; import useTextOrdinalContent from '@hooks/useTextOrdinalContent'; -import { isLedgerAccount } from '@utils/helper'; +import useWalletSelector from '@hooks/useWalletSelector'; +import OrdinalImage from '@screens/ordinals/ordinalImage'; import { isOrdinalOwnedByAccount } from '@secretkeylabs/xverse-core/api'; -import { useResetUserFlow } from '@hooks/useResetUserFlow'; +import { getBtcFiatEquivalent } from '@secretkeylabs/xverse-core/currency'; +import { + SignedBtcTx, + signOrdinalSendTransaction, +} from '@secretkeylabs/xverse-core/transactions/btc'; +import { ErrorCodes, ResponseError, UTXO } from '@secretkeylabs/xverse-core/types'; +import { validateBtcAddress } from '@secretkeylabs/xverse-core/wallet'; +import { useMutation } from '@tanstack/react-query'; +import { isLedgerAccount } from '@utils/helper'; +import { useEffect, useMemo, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useLocation, useNavigate } from 'react-router-dom'; +import styled from 'styled-components'; const ScrollContainer = styled.div` display: flex; @@ -119,23 +119,27 @@ function SendOrdinal() { data, error: txError, mutate, - } = useMutation({ mutationFn: async (recipient) => { - const addressUtxos = await btcClient.getUnspentUtxos(ordinalsAddress); - const ordUtxo = addressUtxos.find((utx) => utx.txid === selectedOrdinal?.tx_id); - setOrdinalUtxo(ordUtxo); - if (ordUtxo) { - const signedTx = await signOrdinalSendTransaction( - recipient, - ordUtxo, - btcAddress, - Number(selectedAccount?.id), - seedPhrase, - network.type, - [ordUtxo], + } = useMutation({ + mutationFn: async (recipient) => { + const addressUtxos = await btcClient.getUnspentUtxos(ordinalsAddress); + const ordUtxo = addressUtxos.find( + (utx) => `${utx.txid}:${utx.vout}` === selectedOrdinal?.output, ); - return signedTx; - } - } }); + setOrdinalUtxo(ordUtxo); + if (ordUtxo) { + const signedTx = await signOrdinalSendTransaction( + recipient, + ordUtxo, + btcAddress, + Number(selectedAccount?.id), + seedPhrase, + network.type, + [ordUtxo], + ); + return signedTx; + } + }, + }); useEffect(() => { if (txError) { From dd63f666e486f6bfb6afd69189edf15fb7846723 Mon Sep 17 00:00:00 2001 From: Tim Man Date: Mon, 31 Jul 2023 18:04:44 +0800 Subject: [PATCH 5/8] 0.14.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3dddab63..83516d421 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "xverse-web-extension", - "version": "0.14.0", + "version": "0.14.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "xverse-web-extension", - "version": "0.14.0", + "version": "0.14.1", "dependencies": { "@ledgerhq/hw-transport-webusb": "^6.27.13", "@react-spring/web": "^9.6.1", diff --git a/package.json b/package.json index 9ebae0e2f..8af64651e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "xverse-web-extension", "description": "A Bitcoin wallet for Web3", - "version": "0.14.0", + "version": "0.14.1", "private": true, "dependencies": { "@ledgerhq/hw-transport-webusb": "^6.27.13", From e2a803789ee70b5b143eec3d4d79321f36fa4652 Mon Sep 17 00:00:00 2001 From: Tim Man Date: Mon, 31 Jul 2023 17:17:17 +0800 Subject: [PATCH 6/8] fix: remove unnecessary nested BalanceAmountText --- src/app/screens/home/balanceCard/index.tsx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/app/screens/home/balanceCard/index.tsx b/src/app/screens/home/balanceCard/index.tsx index b5d5736c6..e563a8d7d 100644 --- a/src/app/screens/home/balanceCard/index.tsx +++ b/src/app/screens/home/balanceCard/index.tsx @@ -88,15 +88,13 @@ function BalanceCard(props: BalanceCardProps) { ) : ( - - {value}} - /> - + {value}} + /> )} ); From ab4e5cdb1e164fb58ab00e56974a076b55ddcb04 Mon Sep 17 00:00:00 2001 From: Tim Man Date: Mon, 31 Jul 2023 17:22:33 +0800 Subject: [PATCH 7/8] fix: use semantic html instead of all h1 --- src/app/screens/home/balanceCard/index.tsx | 6 +++--- src/app/screens/swap/swapTokenBlock/index.tsx | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app/screens/home/balanceCard/index.tsx b/src/app/screens/home/balanceCard/index.tsx index e563a8d7d..58ebb6e19 100644 --- a/src/app/screens/home/balanceCard/index.tsx +++ b/src/app/screens/home/balanceCard/index.tsx @@ -15,20 +15,20 @@ const RowContainer = styled.div((props) => ({ marginTop: props.theme.spacing(11), })); -const BalanceHeadingText = styled.h1((props) => ({ +const BalanceHeadingText = styled.h3((props) => ({ ...props.theme.headline_category_s, color: props.theme.colors.white['200'], textTransform: 'uppercase', opacity: 0.7, })); -const CurrencyText = styled.h1((props) => ({ +const CurrencyText = styled.label((props) => ({ ...props.theme.headline_category_s, color: props.theme.colors.white['0'], fontSize: 13, })); -const BalanceAmountText = styled.h1((props) => ({ +const BalanceAmountText = styled.p((props) => ({ ...props.theme.headline_xl, color: props.theme.colors.white['0'], })); diff --git a/src/app/screens/swap/swapTokenBlock/index.tsx b/src/app/screens/swap/swapTokenBlock/index.tsx index 84cb0623d..982632b58 100644 --- a/src/app/screens/swap/swapTokenBlock/index.tsx +++ b/src/app/screens/swap/swapTokenBlock/index.tsx @@ -16,17 +16,17 @@ export const RowContainer = styled.div({ alignItems: 'center', }); -const TitleText = styled.h1((props) => ({ +const TitleText = styled.h3((props) => ({ ...props.theme.body_medium_m, flex: 1, display: 'flex', })); -const Text = styled.h1((props) => ({ +const Text = styled.p((props) => ({ ...props.theme.body_medium_m, })); -const BalanceText = styled.h1((props) => ({ +const BalanceText = styled.label((props) => ({ ...props.theme.body_medium_m, color: props.theme.colors.white['400'], marginRight: props.theme.spacing(2), @@ -90,7 +90,7 @@ const CoinText = styled.div((props) => ({ color: props.theme.colors.white['0'], })); -export const EstimateUSDText = styled.h1((props) => ({ +export const EstimateUSDText = styled.p((props) => ({ ...props.theme.body_medium_m, color: props.theme.colors.white['400'], marginLeft: 'auto', From 791c8bd54a4b9a33b56fb4a95da0fadc69ba6722 Mon Sep 17 00:00:00 2001 From: Tim Man Date: Mon, 31 Jul 2023 19:17:41 +0800 Subject: [PATCH 8/8] fix: add a filter list to not display coins for swaps --- src/app/screens/swap/useSwap.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/screens/swap/useSwap.tsx b/src/app/screens/swap/useSwap.tsx index 1e13db0f7..f8db4af3c 100644 --- a/src/app/screens/swap/useSwap.tsx +++ b/src/app/screens/swap/useSwap.tsx @@ -121,8 +121,11 @@ export function useSwap(): UseSwap { } = useWalletSelector(); const { isSponsored } = useSponsoredTransaction(XVERSE_SPONSOR_2_URL); - const acceptableCoinList = - coinsList?.filter((c) => alexSDK.getCurrencyFrom(c.principal) != null) ?? []; + const acceptableCoinList = (coinsList || []) + .filter((c) => alexSDK.getCurrencyFrom(c.principal) != null) + // TODO tim: remove this once alexsdk fix issue here + // https://github.com/alexgo-io/alex-sdk/issues/2 + .filter((c) => c.assetName !== 'brc20-db20'); const [inputAmount, setInputAmount] = useState(''); const [slippage, setSlippage] = useState(0.04);