refactor: Enhance currency matching logic for address book and fix overlap for eth and base. (#2883)

David Adegoke committed Feb 10, 2026 at 15:56 UTC fbf121f3f20938c2f12586740857fcf0eb6665eb
1 file changed +25 -6
lib/view_model/contact_list/contact_list_view_model.dart
+25 -6
@@ -6,13 +6,13 @@ import 'package:cake_wallet/entities/contact_base.dart';
6 import 'package:cake_wallet/entities/contact_record.dart';
7 import 'package:cake_wallet/entities/wallet_contact.dart';
8 import 'package:cake_wallet/entities/wallet_list_order_types.dart';
9 -import 'package:cake_wallet/generated/i18n.dart';
9 import 'package:cake_wallet/evm/evm.dart';
10 +import 'package:cake_wallet/generated/i18n.dart';
11 import 'package:cake_wallet/reactions/wallet_connect.dart';
12 import 'package:cake_wallet/store/settings_store.dart';
13 import 'package:cake_wallet/utils/mobx.dart';
14 +import 'package:cake_wallet/utils/token_utilities.dart';
15 import 'package:cw_core/crypto_currency.dart';
15 -import 'package:cw_core/erc20_token.dart';
16 import 'package:cw_core/currency_for_wallet_type.dart';
17 import 'package:cw_core/wallet_info.dart';
18 import 'package:cw_core/wallet_type.dart';
@@ -150,10 +150,29 @@ abstract class ContactListViewModelBase with Store {
150 isWalletContact &&
151 (element.type == CryptoCurrency.btc || element.type == CryptoCurrency.ltc)) return false;
152
153 - return element.type == _currency ||
154 - (element.type.tag != null && _currency.tag != null && element.type.tag == _currency.tag) ||
155 - _currency.toString() == element.type.tag ||
156 - _currency.tag == element.type.toString();
153 + final currencyMatches = element.type == _currency;
154 +
155 + final tagsMatch =
156 + element.type.tag != null && _currency.tag != null && element.type.tag == _currency.tag;
157 +
158 + final tagMatchesTitle = _currency.tag != null && _currency.tag == element.type.title;
159 +
160 + final titleMatchesTag = _currency.title == element.type.tag;
161 +
162 + var matches = currencyMatches || tagsMatch || tagMatchesTitle || titleMatchesTag;
163 +
164 + if (matches && isWalletContact && element is WalletContact && element.walletType != null) {
165 + final walletType = element.walletType!;
166 +
167 + if (isEVMCompatibleChain(walletType)) {
168 + final currencyChainId = TokenUtilities.getChainId(_currency);
169 + final walletChainId = evm!.getChainIdByWalletType(walletType);
170 +
171 + if (currencyChainId != walletChainId) matches = false;
172 + }
173 + }
174 +
175 + return matches;
176 }
177
178 void dispose() => _subscription?.cancel();