Skip to content

Commit 1416494

Browse files
committed
fix(restore): activity after CPFP (transfer) boost
1 parent 57fa923 commit 1416494

File tree

8 files changed

+44
-63
lines changed

8 files changed

+44
-63
lines changed

e2e/boost.e2e.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ d('Boost', () => {
129129
await waitFor(element(by.id('CPFPBoost')))
130130
.toBeVisible()
131131
.withTimeout(30000);
132-
await element(by.id('CostomFeeButton')).tap();
132+
await element(by.id('CustomFeeButton')).tap();
133133
await element(by.id('Plus')).tap();
134134
await element(by.id('Minus')).tap();
135135
await element(by.id('RecomendedFeeButton')).tap();
@@ -240,7 +240,7 @@ d('Boost', () => {
240240
await waitFor(element(by.id('RBFBoost')))
241241
.toBeVisible()
242242
.withTimeout(30000);
243-
await element(by.id('CostomFeeButton')).tap();
243+
await element(by.id('CustomFeeButton')).tap();
244244
await element(by.id('Plus')).tap();
245245
await element(by.id('Minus')).tap();
246246
await element(by.id('RecomendedFeeButton')).tap();

e2e/channels.e2e.js renamed to e2e/transfer.e2e.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ d('Transfer', () => {
199199

200200
// check channel status
201201
await element(by.id('NavigationClose')).tap();
202+
await sleep(1000);
202203
await element(by.id('Settings')).tap();
203204
await element(by.id('AdvancedSettings')).atIndex(0).tap();
204205
await element(by.id('Channels')).tap();
@@ -220,6 +221,27 @@ d('Transfer', () => {
220221
await element(by.id('ActivityShort-1')).tap();
221222
await expect(element(by.id('StatusTransfer'))).toBeVisible();
222223

224+
// boost the transfer
225+
await element(by.id('BoostButton')).tap();
226+
await waitFor(element(by.id('CPFPBoost')))
227+
.toBeVisible()
228+
.withTimeout(30000);
229+
await element(by.id('GRAB')).swipe('right', 'slow', 0.95, 0.5, 0.5); // Swipe to confirm
230+
231+
// check Activity
232+
await waitFor(element(by.id('BoostingIcon')))
233+
.toBeVisible()
234+
.withTimeout(30000);
235+
236+
// reset & restore again
237+
await restoreWallet(seed);
238+
239+
// check activity after restore
240+
await element(by.id('WalletsScrollView')).scrollTo('bottom', NaN, 0.85);
241+
await expect(element(by.id('BoostingIcon'))).toBeVisible();
242+
await element(by.id('ActivityShort-1')).tap();
243+
await expect(element(by.id('StatusBoosting'))).toBeVisible();
244+
223245
markComplete('transfer-1');
224246
});
225247

src/screens/Activity/ActivityDetail.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ const OnchainActivityDetail = ({
352352

353353
if (isBoosted) {
354354
status = (
355-
<View testID="StatusBoosting" style={styles.row}>
355+
<View style={styles.row} testID="StatusBoosting">
356356
<TimerIconAlt style={styles.rowIcon} color="yellow" height={14} />
357357
<BodySSB color="yellow">{t('activity_boosting')}</BodySSB>
358358
</View>
@@ -361,7 +361,7 @@ const OnchainActivityDetail = ({
361361

362362
if (confirmed) {
363363
status = (
364-
<View testID="StatusConfirmed" style={styles.row}>
364+
<View style={styles.row} testID="StatusConfirmed">
365365
<CheckCircleIcon style={styles.rowIcon} color="green" />
366366
<BodySSB color="green">{t('activity_confirmed')}</BodySSB>
367367
</View>
@@ -455,7 +455,7 @@ const OnchainActivityDetail = ({
455455
<Section
456456
title={t('activity_transfer_to_spending')}
457457
value={
458-
<View testID="ActivityAmount" style={styles.row}>
458+
<View style={styles.row} testID="ActivityAmount">
459459
<LightningHollow
460460
style={styles.rowIcon}
461461
width={16}
@@ -474,7 +474,7 @@ const OnchainActivityDetail = ({
474474
<Section
475475
title={t('activity_payment')}
476476
value={
477-
<View testID="ActivityAmount" style={styles.row}>
477+
<View style={styles.row} testID="ActivityAmount">
478478
<UserIcon
479479
style={styles.rowIcon}
480480
width={16}
@@ -494,7 +494,7 @@ const OnchainActivityDetail = ({
494494
<Section
495495
title={t('activity_fee')}
496496
value={
497-
<View testID="ActivityFee" style={styles.row}>
497+
<View style={styles.row} testID="ActivityFee">
498498
<TimerIcon style={styles.rowIcon} color="brand" />
499499
<Money
500500
sats={fees}

src/screens/Wallets/BoostPrompt.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ const BoostForm = ({
221221
title={t('boost')}
222222
description={duration}
223223
value={Number(boostFee.toFixed(0))}
224-
testID="CostomFeeButton"
224+
testID="CustomFeeButton"
225225
icon={<TimerIconAlt color="yellow" width={26} height={26} />}
226226
onPress={onSwitchView}
227227
/>

src/store/slices/activity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ const { actions, reducer } = activitySlice;
3131
export const {
3232
addActivityItem,
3333
addActivityItems,
34+
updateActivityItems,
3435
removeActivityItem,
3536
resetActivityState,
36-
updateActivityItems,
3737
} = actions;
3838

3939
export default reducer;

src/store/utils/activity.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export const updateOnChainActivityList = async (): Promise<Result<string>> => {
9191
);
9292
return ok('');
9393
}
94-
const { selectedNetwork, selectedWallet } = getCurrentWallet();
94+
const { selectedNetwork } = getCurrentWallet();
9595
const boostedTransactions =
9696
currentWallet.boostedTransactions[selectedNetwork];
9797

@@ -104,8 +104,6 @@ export const updateOnChainActivityList = async (): Promise<Result<string>> => {
104104
const boostFormattedItems = await formatBoostedActivityItems({
105105
items: activityItems,
106106
boostedTransactions,
107-
selectedWallet,
108-
selectedNetwork,
109107
});
110108
dispatch(updateActivityItems(boostFormattedItems));
111109

src/store/utils/backup.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ import {
2626
getWidgetsStore,
2727
} from '../helpers';
2828
import { getDefaultSettingsShape } from '../shapes/settings';
29-
import { addActivityItems, TActivity } from '../slices/activity';
29+
import {
30+
addActivityItems,
31+
resetActivityState,
32+
TActivity,
33+
} from '../slices/activity';
3034
import { backupError, backupStart, backupSuccess } from '../slices/backup';
3135
import { updateBlocktank } from '../slices/blocktank';
3236
import { initialMetadataState, updateMetadata } from '../slices/metadata';
@@ -45,6 +49,7 @@ import { TSlashtagsState } from '../types/slashtags';
4549
import { getDefaultWalletShape } from '../shapes/wallet';
4650
import { IWalletItem, TTransfer } from '../types/wallet';
4751
import { restoreBoostedTransactions, restoreTransfers } from '../slices/wallet';
52+
import { updateOnChainActivityList } from './activity';
4853

4954
export enum EBackupCategory {
5055
wallet = 'bitkit_wallet',
@@ -285,9 +290,13 @@ const performWalletRestore = async (): Promise<
285290
return ok({ backupExists: false });
286291
}
287292

293+
// because activity has been updated already before this point
294+
// we need to reset the activity state to show boosts correctly
295+
dispatch(resetActivityState());
288296
dispatch(restoreBoostedTransactions(backup.boostedTransactions));
289297
dispatch(restoreTransfers(backup.transfers));
290298
dispatch(backupSuccess({ category: EBackupCategory.wallet }));
299+
updateOnChainActivityList();
291300

292301
// Restore success
293302
return ok({ backupExists: true });

src/utils/boost.ts

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -50,42 +50,6 @@ export const getBoostedTransactionParents = ({
5050
});
5151
};
5252

53-
/**
54-
* Determines if a given txId has any boosted parents.
55-
* // TODO: Migrate to Beignet
56-
* @param {string} txId
57-
* @param {IBoostedTransactions} [boostedTransactions]
58-
* @param {TWalletName} [selectedWallet]
59-
* @param {EAvailableNetwork} [selectedNetwork]
60-
* @returns {boolean}
61-
*/
62-
export const hasBoostedParents = ({
63-
wallet,
64-
txId,
65-
boostedTransactions,
66-
selectedWallet = getSelectedWallet(),
67-
selectedNetwork = getSelectedNetwork(),
68-
}: {
69-
wallet: TWallet;
70-
txId: string;
71-
boostedTransactions?: IBoostedTransactions;
72-
selectedWallet?: TWalletName;
73-
selectedNetwork?: EAvailableNetwork;
74-
}): boolean => {
75-
if (!boostedTransactions) {
76-
boostedTransactions = getBoostedTransactions({
77-
selectedWallet,
78-
selectedNetwork,
79-
});
80-
}
81-
const boostedParents = getBoostedTransactionParents({
82-
wallet,
83-
txId,
84-
boostedTransactions,
85-
});
86-
return boostedParents.length > 0;
87-
};
88-
8953
/**
9054
* Returns the initially boosted transaction's activity item for a given txId.
9155
* @param {string} txId
@@ -99,21 +63,15 @@ const getRootParentActivity = async ({
9963
txId,
10064
items,
10165
boostedTransactions,
102-
selectedWallet = getSelectedWallet(),
103-
selectedNetwork = getSelectedNetwork(),
10466
}: {
10567
txId: string;
10668
items: TOnchainActivityItem[];
10769
boostedTransactions?: IBoostedTransactions;
108-
selectedWallet?: TWalletName;
109-
selectedNetwork?: EAvailableNetwork;
11070
}): Promise<TOnchainActivityItem | undefined> => {
11171
const wallet = await getOnChainWalletAsync();
72+
11273
if (!boostedTransactions) {
113-
boostedTransactions = getBoostedTransactions({
114-
selectedWallet,
115-
selectedNetwork,
116-
});
74+
boostedTransactions = getBoostedTransactions();
11775
}
11876
const boostedParents = getBoostedTransactionParents({
11977
wallet,
@@ -158,13 +116,9 @@ export const getParentsActivity = ({
158116
export const formatBoostedActivityItems = async ({
159117
items,
160118
boostedTransactions,
161-
selectedWallet,
162-
selectedNetwork,
163119
}: {
164120
items: TOnchainActivityItem[];
165121
boostedTransactions: IBoostedTransactions;
166-
selectedWallet: TWalletName;
167-
selectedNetwork: EAvailableNetwork;
168122
}): Promise<TOnchainActivityItem[]> => {
169123
const wallet = await getOnChainWalletAsync();
170124
const formattedItems: TOnchainActivityItem[] = [];
@@ -193,8 +147,6 @@ export const formatBoostedActivityItems = async ({
193147
txId,
194148
items,
195149
boostedTransactions,
196-
selectedWallet,
197-
selectedNetwork,
198150
});
199151

200152
// If no root parent (RBF), just add the item marked as boosted

0 commit comments

Comments
 (0)