From dcd978eb38f370fce975d23517d73aa4728df0f3 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 4 Mar 2025 03:58:56 +0200 Subject: [PATCH] CW-924-Don't-prompt-to-save-to-address-book-on-standard-Bitcoin-Litecoin-Bitcoin-Cash-addresses (#2043) * don't prompt regular btc ltc bch address * minor fix --- lib/core/address_validator.dart | 3 +++ lib/src/screens/send/send_page.dart | 36 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 65c9faff9..888be1768 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -281,6 +281,9 @@ class AddressValidator extends TextValidator { } } + static String get silentPaymentAddressPattern => SilentPaymentAddress.regex.pattern; + static String get mWebAddressPattern => MwebAddress.regex.pattern; + static String? getAddressFromStringPattern(CryptoCurrency type) { String? pattern = null; diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 6e9178cda..d3c741c0c 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/bitcoin/bitcoin.dart'; +import 'package:cake_wallet/core/address_validator.dart'; import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/core/execution_state.dart'; @@ -544,6 +545,10 @@ class SendPage extends BasePage { ); newContactAddress = newContactAddress ?? sendViewModel.newContactAddress(); + if (newContactAddress?.address != null && isRegularElectrumAddress(newContactAddress!.address)) { + newContactAddress = null; + } + if (sendViewModel.coinTypeToSpendFrom != UnspentCoinType.any) newContactAddress = null; if (newContactAddress != null && sendViewModel.showAddressBookPopup) { @@ -664,4 +669,35 @@ class SendPage extends BasePage { ), context: context); } + + bool isRegularElectrumAddress(String address) { + final supportedTypes = [CryptoCurrency.btc, CryptoCurrency.ltc, CryptoCurrency.bch]; + final excludedPatterns = [ + RegExp(AddressValidator.silentPaymentAddressPattern), + RegExp(AddressValidator.mWebAddressPattern) + ]; + + final trimmed = address.trim(); + + bool isValid = false; + for (var type in supportedTypes) { + final addressPattern = AddressValidator.getAddressFromStringPattern(type); + if (addressPattern != null) { + final regex = RegExp('^$addressPattern\$'); + if (regex.hasMatch(trimmed)) { + isValid = true; + break; + } + } + } + + for (var pattern in excludedPatterns) { + if (pattern.hasMatch(trimmed)) { + return false; + } + } + + return isValid; + } + }