Skip to content

Commit 4acdabc

Browse files
fixup! feat: extend reporting for 'canceled' event in sendform
1 parent 8b5958c commit 4acdabc

File tree

5 files changed

+36
-48
lines changed

5 files changed

+36
-48
lines changed

Diff for: packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/TxDetailModal/CancelTransaction/CancelTransactionModal.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,7 @@ export const CancelTransactionModal = ({
7171
dispatch(composeCancelTransactionThunk({ account, tx, chainedTxs }))
7272
.unwrap()
7373
.then(precomposed => {
74-
setComposedCancelTx({
75-
...precomposed,
76-
prevTxToBeCanceledId: tx.txid,
77-
});
74+
setComposedCancelTx({ ...precomposed, rbfType: 'cancel', prevTxid: tx.txid });
7875
})
7976
.catch(setError);
8077
}, [account, tx, dispatch, chainedTxs]);

Diff for: packages/suite/src/middlewares/wallet/replaceByFeeErrorMiddleware.ts

+3-17
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,12 @@
11
import { MiddlewareAPI } from 'redux';
22

33
import { transactionsActions } from '@suite-common/wallet-core/';
4-
import { GeneralPrecomposedTransactionFinal } from '@suite-common/wallet-types';
5-
import { isRbfBumpFeeTransaction, isRbfCancelTransaction } from '@suite-common/wallet-utils';
4+
import { isRbfTransaction } from '@suite-common/wallet-utils';
65

76
import { Action, AppState, Dispatch } from 'src/types/suite';
87

98
import { replaceByFeeErrorThunk } from '../../actions/wallet/send/replaceByFeeErrorThunk';
109

11-
const getPrevTxid = (tx: GeneralPrecomposedTransactionFinal) => {
12-
if (isRbfBumpFeeTransaction(tx)) {
13-
return tx.prevTxid;
14-
}
15-
16-
if (isRbfCancelTransaction(tx)) {
17-
return tx.prevTxToBeCanceledId;
18-
}
19-
20-
return null;
21-
};
22-
2310
export const replaceByFeeErrorMiddleware =
2411
(api: MiddlewareAPI<Dispatch, AppState>) =>
2512
(next: Dispatch) =>
@@ -37,12 +24,11 @@ export const replaceByFeeErrorMiddleware =
3724
return action;
3825
}
3926

40-
const prevTxId = getPrevTxid(precomposedTx);
41-
if (prevTxId === null) {
27+
if (!isRbfTransaction(precomposedTx)) {
4228
return action;
4329
}
4430

45-
const addedTransaction = transactions.find(tx => tx.txid === prevTxId);
31+
const addedTransaction = transactions.find(tx => tx.txid === precomposedTx.prevTxid);
4632

4733
if (addedTransaction !== undefined && addedTransaction.blockHeight !== undefined) {
4834
api.dispatch(replaceByFeeErrorThunk());

Diff for: suite-common/wallet-core/src/send/sendFormThunks.ts

+18-19
Original file line numberDiff line numberDiff line change
@@ -533,27 +533,26 @@ export const enhancePrecomposedTransactionThunk = createThunk<
533533
(!hasDecreasedOutput && nativeRbfAvailable) ||
534534
(hasDecreasedOutput && decreaseOutputAvailable);
535535

536-
const enhancedPrecomposedTransaction: GeneralPrecomposedTransactionFinal = {
537-
...precomposedTransaction,
536+
const createGeneralPrecomposedTransactionFinal = (): GeneralPrecomposedTransactionFinal => {
537+
if (!isCardanoTx(selectedAccount, precomposedTransaction) && formValues.rbfParams) {
538+
const enhancedRbfPrecomposedTx: PrecomposedTransactionFinalBumpFeeRbf = {
539+
...precomposedTransaction,
540+
rbfType: 'bump-fee',
541+
prevTxid: formValues.rbfParams.txid,
542+
feeDifference: new BigNumber(precomposedTransaction.fee)
543+
.minus(formValues.rbfParams.baseFee)
544+
.toFixed(),
545+
useNativeRbf: !!useNativeRbf,
546+
useDecreaseOutput: !!hasDecreasedOutput,
547+
};
548+
549+
return enhancedRbfPrecomposedTx;
550+
}
551+
552+
return precomposedTransaction;
538553
};
539554

540-
if (!isCardanoTx(selectedAccount, enhancedPrecomposedTransaction)) {
541-
if (formValues.rbfParams) {
542-
(enhancedPrecomposedTransaction as PrecomposedTransactionFinalBumpFeeRbf).prevTxid =
543-
formValues.rbfParams.txid;
544-
(
545-
enhancedPrecomposedTransaction as PrecomposedTransactionFinalBumpFeeRbf
546-
).feeDifference = new BigNumber(precomposedTransaction.fee)
547-
.minus(formValues.rbfParams.baseFee)
548-
.toFixed();
549-
(
550-
enhancedPrecomposedTransaction as PrecomposedTransactionFinalBumpFeeRbf
551-
).useNativeRbf = !!useNativeRbf;
552-
(
553-
enhancedPrecomposedTransaction as PrecomposedTransactionFinalBumpFeeRbf
554-
).useDecreaseOutput = !!hasDecreasedOutput;
555-
}
556-
}
555+
const enhancedPrecomposedTransaction = createGeneralPrecomposedTransactionFinal();
557556

558557
if (
559558
!isCardanoTx(selectedAccount, enhancedPrecomposedTransaction) &&

Diff for: suite-common/wallet-types/src/transaction.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export type PrecomposedTransactionNonFinal = PrecomposedTransactionConnectRespon
103103
};
104104

105105
// base of PrecomposedTransactionFinal
106-
type TxFinal = PrecomposedTransactionConnectResponseFinal & {
106+
type PrecomposedTransactionBase = PrecomposedTransactionConnectResponseFinal & {
107107
max?: string;
108108
feeLimit?: string;
109109
estimatedFeeLimit?: string;
@@ -120,21 +120,23 @@ export type PrecomposedTransactionCardanoFinal =
120120
token?: TokenInfo;
121121
};
122122

123-
export type PrecomposedTransactionFinalBumpFeeRbf = TxFinal & {
123+
export type PrecomposedTransactionFinalBumpFeeRbf = PrecomposedTransactionBase & {
124+
rbfType: 'bump-fee';
124125
prevTxid: string;
125126
feeDifference: string;
126127
// Native RBF is a firmware feature to recognize an RBF transaction and simplify transaction review flow.
127128
useNativeRbf: boolean;
128129
useDecreaseOutput: boolean;
129130
};
130131

131-
export type PrecomposedTransactionFinalCancelRbf = TxFinal & {
132-
prevTxToBeCanceledId: string;
132+
export type PrecomposedTransactionFinalCancelRbf = PrecomposedTransactionBase & {
133+
rbfType: 'cancel';
134+
prevTxid: string;
133135
};
134136

135137
// Strict distinction between Normal-Tx and Bump-Fee-Tx / Cancel-Tx
136138
export type PrecomposedTransactionFinal =
137-
| TxFinal
139+
| PrecomposedTransactionBase
138140
| PrecomposedTransactionFinalBumpFeeRbf
139141
| PrecomposedTransactionFinalCancelRbf;
140142

Diff for: suite-common/wallet-utils/src/transactionUtils.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,18 @@ export const isPending = (tx: WalletAccountTransaction | AccountTransaction) =>
6363
return !!tx && (!tx.blockHeight || tx.blockHeight < 0);
6464
};
6565

66+
export const isRbfTransaction = (
67+
tx: GeneralPrecomposedTransactionFinal,
68+
): tx is PrecomposedTransactionFinalBumpFeeRbf | PrecomposedTransactionFinalCancelRbf =>
69+
'rbfType' in tx;
70+
6671
export const isRbfBumpFeeTransaction = (
6772
tx: GeneralPrecomposedTransactionFinal,
68-
): tx is PrecomposedTransactionFinalBumpFeeRbf => 'prevTxid' in tx && tx.prevTxid !== undefined;
73+
): tx is PrecomposedTransactionFinalBumpFeeRbf => isRbfTransaction(tx) && tx.rbfType === 'bump-fee';
6974

7075
export const isRbfCancelTransaction = (
7176
tx: GeneralPrecomposedTransactionFinal,
72-
): tx is PrecomposedTransactionFinalCancelRbf =>
73-
'prevTxToBeCanceledId' in tx && tx.prevTxToBeCanceledId !== undefined;
77+
): tx is PrecomposedTransactionFinalCancelRbf => isRbfTransaction(tx) && tx.rbfType === 'cancel';
7478

7579
/* Convert date to string in YYYY-MM-DD format */
7680
const generateTransactionDateKey = (d: Date) =>

0 commit comments

Comments
 (0)