fix: date on silent payments transactions (#2740)
* fix: date on silent payments transactions * fix: clear outdated Silent Payment Addresses during initialization * fix: streamline Silent Payments address handling by using the first record only
Konstantin Ullrich committed
Dec 20, 2025 at 00:58 UTC
c208e8b5ef64f7999b19242912e50554661daa75
2 files changed
+17
-19
cw_bitcoin/lib/electrum_wallet.dart
+5
-11
@@ -40,6 +40,7 @@ import 'package:cw_core/unspent_coins_info.dart';
40
import 'package:cw_core/utils/print_verbose.dart';
41
import 'package:cw_core/utils/proxy_wrapper.dart';
42
import 'package:cw_core/utils/socket_health_logger.dart';
43
+import 'package:cw_core/utils/tor/abstract.dart';
44
import 'package:cw_core/wallet_base.dart';
45
import 'package:cw_core/wallet_info.dart';
46
import 'package:cw_core/wallet_keys_file.dart';
@@ -3009,6 +3010,7 @@ class SyncResponse {
3010
Future<void> _handleScanSilentPayments(ScanData scanData) async {
3011
final shouldUpdateSyncStatus = scanData.rescanHeights == null || scanData.rescanHeights!.isEmpty;
3012
final hasForcedRescanHeights = !shouldUpdateSyncStatus;
3013
+ CakeTor.instance = await CakeTorInstance.getInstance();
3014
3015
var node = Uri.parse("tcp://electrs.cakewallet.com:50001");
3016
@@ -3204,19 +3206,12 @@ Future<void> _handleScanSilentPayments(ScanData scanData) async {
3206
// So, if blockDate exists, reuse
3207
if (isDateNow) {
3208
try {
3209
+ final rootURL = "https://cake.mempool.space";
3210
final tweakBlockHash = await ProxyWrapper()
3208
- .get(
3209
- clearnetUri: Uri.parse(
3210
- "https://mempool.cakewallet.com/api/v1/block-height/$tweakHeight",
3211
- ),
3212
- )
3211
+ .get(clearnetUri: Uri.parse("$rootURL/api/block-height/$tweakHeight"))
3212
.timeout(Duration(seconds: 15));
3213
final blockResponse = await ProxyWrapper()
3215
- .get(
3216
- clearnetUri: Uri.parse(
3217
- "https://mempool.cakewallet.com/api/v1/block/${tweakBlockHash.body}",
3218
- ),
3219
- )
3214
+ .get(clearnetUri: Uri.parse("$rootURL/api/block/${tweakBlockHash.body}"))
3215
.timeout(Duration(seconds: 15));
3216
3217
if (blockResponse.statusCode == 200 &&
@@ -3242,7 +3237,6 @@ Future<void> _handleScanSilentPayments(ScanData scanData) async {
3237
fee: 0,
3238
direction: TransactionDirection.incoming,
3239
isReplaced: false,
3245
- // TODO: fetch block data and get the date from it
3240
date: scanData.network == BitcoinNetwork.mainnet
3241
? (isDateNow ? getDateByBitcoinHeight(tweakHeight) : blockDate)
3242
: DateTime.now(),
cw_bitcoin/lib/electrum_wallet_addresses.dart
+12
-8
@@ -83,6 +83,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
83
network: network,
84
);
85
86
+ // Clean the Silent Payment Addresses if the initial addresses are the old SP Addresses
87
+ if (!silentAddresses
88
+ .any((addr) => addr.index == 0 && addr.address == silentAddress.toString())) {
89
+ silentAddresses.clear();
90
+ }
91
+
92
if (!silentAddresses.any((addr) => addr.index == 0 && addr.isHidden == false))
93
silentAddresses.add(BitcoinSilentPaymentAddressRecord(
94
silentAddress.toString(),
@@ -457,19 +463,17 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
463
addressesMap[address] = 'Active - P2WSH';
464
}
465
460
- silentAddresses.forEach((addressRecord) {
461
- if (addressRecord.type != SilentPaymentsAddresType.p2sp || addressRecord.isHidden) {
462
- return;
463
- }
466
+ final firstSilentAddressRecord = silentAddresses.firstOrNull;
467
+ if (firstSilentAddressRecord != null) {
468
465
- if (addressRecord.address != address) {
466
- addressesMap[addressRecord.address] = addressRecord.name.isEmpty
469
+ if (firstSilentAddressRecord.address != address) {
470
+ addressesMap[firstSilentAddressRecord.address] = firstSilentAddressRecord.name.isEmpty
471
? "Silent Payments"
468
- : "Silent Payments - " + addressRecord.name;
472
+ : "Silent Payments - ${firstSilentAddressRecord.name}";
473
} else {
474
addressesMap[address] = 'Active - Silent Payments';
475
}
472
- });
476
+ }
477
}
478
479
void addLitecoinAddressTypes() {