fix: stop resetting coin control on swap (#3433)

Konstantin Ullrich committed Jul 22, 2026 at 16:08 UTC 8056cfec860f60bba4f72e0d098d020409ba1d1f
2 files changed +8 -13
cw_bitcoin/lib/electrum_wallet.dart
+6 -10
@@ -18,7 +18,6 @@ import 'package:cw_bitcoin/bitcoin_address_record.dart';
18 import 'package:cw_bitcoin/bitcoin_transaction_credentials.dart';
19 import 'package:cw_bitcoin/bitcoin_transaction_priority.dart';
20 import 'package:cw_bitcoin/bitcoin_unspent.dart';
21 -import 'package:cw_bitcoin/bitcoin_wallet.dart';
21 import 'package:cw_bitcoin/bitcoin_wallet_keys.dart';
22 import 'package:cw_bitcoin/electrum.dart' as electrum;
23 import 'package:cw_bitcoin/electrum_balance.dart';
@@ -27,25 +26,20 @@ import 'package:cw_bitcoin/electrum_transaction_history.dart';
26 import 'package:cw_bitcoin/electrum_transaction_info.dart';
27 import 'package:cw_bitcoin/electrum_wallet_addresses.dart';
28 import 'package:cw_bitcoin/exceptions.dart';
30 -import 'package:cw_bitcoin/litecoin_wallet.dart';
29 import 'package:cw_bitcoin/pending_bitcoin_transaction.dart';
30 import 'package:cw_bitcoin/utils.dart';
31 import 'package:cw_core/amount/money.dart';
32 import 'package:cw_core/crypto_currency.dart';
33 import 'package:cw_core/encryption_file_utils.dart';
34 import 'package:cw_core/get_height_by_date.dart';
37 -import 'package:cw_core/hardware/hardware_wallet_service.dart';
35 import 'package:cw_core/node.dart';
36 import 'package:cw_core/output_info.dart';
37 import 'package:cw_core/pending_transaction.dart';
41 -import 'package:cw_core/root_dir.dart';
38 import 'package:cw_core/sync_status.dart';
39 import 'package:cw_core/transaction_direction.dart';
40 import 'package:cw_core/transaction_priority.dart';
41 import 'package:cw_core/unspent_coin_type.dart';
42 import 'package:cw_core/unspent_coins_info.dart';
47 -import 'package:cw_core/utils/print_verbose.dart';
48 -import 'package:cw_core/utils/proxy_wrapper.dart';
43 import 'package:cw_core/utils/socket_health_logger.dart';
44 import 'package:cw_core/utils/tor/abstract.dart';
45 import 'package:cw_core/wallet_base.dart';
@@ -57,7 +51,6 @@ import 'package:hex/hex.dart';
51 import 'package:hive/hive.dart';
52 import 'package:mobx/mobx.dart';
53 import 'package:rxdart/subjects.dart';
60 -import 'package:shared_preferences/shared_preferences.dart';
54 import 'package:sp_scanner/sp_scanner.dart';
55
56 part 'electrum_wallet.g.dart';
@@ -1984,8 +1977,12 @@ abstract class ElectrumWalletBase
1977 @action
1978 Future<void> addCoinInfo(BitcoinUnspent coin) async {
1979 // Check if the coin is already in the unspentCoinsInfo for the wallet
1987 - final existingCoinInfo = unspentCoinsInfo.values
1988 - .firstWhereOrNull((element) => element.walletId == walletInfo.id && element == coin);
1980 + final existingCoinInfo = unspentCoinsInfo.values.firstWhereOrNull(
1981 + (element) =>
1982 + element.walletId == walletInfo.id &&
1983 + element.hash == coin.hash &&
1984 + element.vout == coin.vout,
1985 + );
1986
1987 if (existingCoinInfo == null) {
1988 final newInfo = UnspentCoinsInfo(
@@ -3681,7 +3678,6 @@ abstract class ElectrumWalletBase
3678 syncStatus = ConnectingSyncStatus();
3679 }
3680 break;
3684 - default:
3681 }
3682 }
3683
lib/view_model/send/send_view_model.dart
+2 -3
@@ -3,7 +3,6 @@ import 'dart:async';
3 import 'package:cake_wallet/bitcoin/bitcoin.dart';
4 import 'package:cake_wallet/core/address_resolver/parsed_address.dart';
5 import 'package:cake_wallet/core/address_resolver/address_resolver_service.dart';
6 -import 'package:cake_wallet/di.dart';
6 import 'package:cake_wallet/core/address_validator.dart';
7 import 'package:cake_wallet/core/amount_parsing_proxy.dart';
8 import 'package:cake_wallet/core/amount_validator.dart';
@@ -128,8 +127,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
127 outputs.add(Output(wallet, _appStore, _fiatConversationStore, _outputCryptoCurrencyHandler));
128
129 unspentCoinsListViewModel
131 - .initialSetup()
132 - .then((_) => unspentCoinsListViewModel.resetUnspentCoinsInfoSelections());
130 + .initialSetup();
131 + // .then((_) => unspentCoinsListViewModel.resetUnspentCoinsInfoSelections());
132
133 reaction((_) {
134 if (isEVMCompatibleChain(wallet.type)) {