1+ import 'package:bb_mobile/core/seed/data/repository/seed_repository.dart' ;
12import 'package:bb_mobile/core/swaps/data/repository/boltz_swap_repository.dart' ;
3+ import 'package:bb_mobile/core/utils/logger.dart' ;
24import 'package:bb_mobile/core/wallet/data/repositories/wallet_repository.dart' ;
35import 'package:bb_mobile/core/wallet/domain/wallet_error.dart' ;
46
57class DeleteWalletUsecase {
68 final WalletRepository _walletRepository;
79 final BoltzSwapRepository _swapRepository;
10+ final SeedRepository _seedRepository;
811
912 DeleteWalletUsecase ({
1013 required this ._walletRepository,
1114 required this ._swapRepository,
15+ required this ._seedRepository,
1216 });
1317
1418 Future <void > execute ({required String walletId}) async {
@@ -30,6 +34,27 @@ class DeleteWalletUsecase {
3034 }
3135
3236 await _walletRepository.deleteWallet (walletId: walletId);
37+
38+ // Clean up the seed in secure storage once no remaining wallet
39+ // still references it. Bitcoin and Liquid default wallets share a
40+ // master fingerprint, so the seed is only deleted when the last
41+ // wallet derived from it is gone. Watch-only wallets have an empty
42+ // master fingerprint and never own a seed entry. Issue #2324.
43+ if (wallet.masterFingerprint.isNotEmpty) {
44+ final remaining = await _walletRepository.getWallets ();
45+ final stillUsed = remaining.any (
46+ (w) => w.masterFingerprint == wallet.masterFingerprint,
47+ );
48+ if (! stillUsed) {
49+ try {
50+ await _seedRepository.delete (wallet.masterFingerprint);
51+ } catch (e) {
52+ log.warning (
53+ 'DeleteWalletUsecase: failed to clean up seed for $walletId : $e ' ,
54+ );
55+ }
56+ }
57+ }
3358 } on WalletError {
3459 rethrow ;
3560 } catch (e) {
0 commit comments