feat: hide increase fee for txs with taproot input

This commit is contained in:
alter-eggo
2023-08-03 15:55:42 +04:00
committed by Anastasios
parent d4b1065b0b
commit a01071fa1f
4 changed files with 21 additions and 5 deletions

View File

@@ -22,12 +22,14 @@ import { createInscriptionInfoUrl } from '@app/query/bitcoin/ordinals/inscriptio
import { useInscriptionByOutput } from '@app/query/bitcoin/ordinals/use-inscription-by-output';
import { useCurrentAccountNativeSegwitAddressIndexZero } from '@app/store/accounts/blockchain/bitcoin/native-segwit-account.hooks';
import { CaptionDotSeparator } from '../caption-dot-separator';
import { TransactionItemLayout } from '../transaction-item/transaction-item.layout';
import { BitcoinTransactionCaption } from './bitcoin-transaction-caption';
import { BitcoinTransactionIcon } from './bitcoin-transaction-icon';
import { BitcoinTransactionInscriptionIcon } from './bitcoin-transaction-inscription-icon';
import { BitcoinTransactionStatus } from './bitcoin-transaction-status';
import { BitcoinTransactionValue } from './bitcoin-transaction-value';
import { containsTaprootInput } from './utils';
interface BitcoinTransactionItemProps extends BoxProps {
transaction: BitcoinTx;
@@ -73,9 +75,17 @@ export function BitcoinTransactionItem({ transaction, ...rest }: BitcoinTransact
};
const isOriginator = !isBitcoinTxInbound(bitcoinAddress, transaction);
const isEnabled = isOriginator && !transaction.status.confirmed;
const isEnabled =
isOriginator && !transaction.status.confirmed && !containsTaprootInput(transaction);
const txCaption = <BitcoinTransactionCaption>{caption}</BitcoinTransactionCaption>;
const txCaption = (
<CaptionDotSeparator>
<BitcoinTransactionCaption>{caption}</BitcoinTransactionCaption>
{inscriptionData ? (
<BitcoinTransactionCaption>{inscriptionData.mime_type}</BitcoinTransactionCaption>
) : null}
</CaptionDotSeparator>
);
const txValue = <BitcoinTransactionValue>{value}</BitcoinTransactionValue>;
const txIcon = inscriptionData ? (
<BitcoinTransactionInscriptionIcon
@@ -86,7 +96,7 @@ export function BitcoinTransactionItem({ transaction, ...rest }: BitcoinTransact
) : (
<BitcoinTransactionIcon transaction={transaction} btcAddress={bitcoinAddress} />
);
const title = inscriptionData ? 'Ordinal inscription' : 'Bitcoin';
const title = inscriptionData ? `Ordinal inscription #${inscriptionData.number}` : 'Bitcoin';
const increaseFeeButton = (
<IncreaseFeeButton
isEnabled={isEnabled}

View File

@@ -27,3 +27,7 @@ export function IconForTx(address: string, tx: BitcoinTx) {
if (isBitcoinTxInbound(address, tx)) return IconArrowDown;
return IconArrowUp;
}
export function containsTaprootInput(tx: BitcoinTx) {
return tx.vin.some(input => input.prevout.scriptpubkey_type === 'v1_p2tr');
}

View File

@@ -50,7 +50,7 @@ export function ActivityList() {
trBitcoinAddress,
]);
const bitcoinPendingTxs = useMemo(
() => [...nsPendingTxs, ...trPendingTxs],
() => uniqby([...nsPendingTxs, ...trPendingTxs], 'txid'),
[nsPendingTxs, trPendingTxs]
);

View File

@@ -6,8 +6,10 @@ import { useGetInscriptionByParamQuery } from './use-inscription-by-param.query'
export function useInscriptionByOutput(transaction: BitcoinTx) {
const inputsLength = transaction.vin.length;
const index = inputsLength === 1 ? 0 : inputsLength - 2;
const isPending = !transaction.status.confirmed;
const id = isPending ? transaction.vin[index].txid : transaction.txid;
return useGetInscriptionByParamQuery(`output=${transaction.txid}:${index}`, {
return useGetInscriptionByParamQuery(`output=${id}:${index}`, {
select(data) {
const inscription = data.results[0];
if (!inscription) return;