From 720914727ed621d0e8b8352f79748ef3b2e2d6a8 Mon Sep 17 00:00:00 2001
From: Matthew Fosse <matt@fosse.co>
Date: Thu, 11 Jul 2024 17:22:35 -0700
Subject: [PATCH] fix txCount for addresses

---
 cw_bitcoin/lib/litecoin_wallet.dart | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/cw_bitcoin/lib/litecoin_wallet.dart b/cw_bitcoin/lib/litecoin_wallet.dart
index b45e7dec4..81b354e7a 100644
--- a/cw_bitcoin/lib/litecoin_wallet.dart
+++ b/cw_bitcoin/lib/litecoin_wallet.dart
@@ -161,11 +161,6 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
       if (syncStatus is FailedSyncStatus) return;
       final height = await electrumClient.getCurrentBlockChainTip() ?? 0;
       final resp = await _stub.status(StatusRequest());
-      // print("stats:");
-      // print("???????????????????");
-      // print(resp.blockHeaderHeight);
-      // print(resp.mwebUtxosHeight);
-      // print(height);
       if (resp.blockHeaderHeight < height) {
         int h = resp.blockHeaderHeight;
         syncStatus = SyncingSyncStatus(height - h, h / height);
@@ -288,12 +283,6 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
     final req = UtxosRequest(scanSecret: hex.decode(scanSecret), fromHeight: restoreHeight);
     bool initDone = false;
 
-    // reset address balances and tx counts:
-    walletAddresses.allAddresses.forEach((addressRecord) {
-      addressRecord.balance = 0;
-      addressRecord.txCount = 0;
-    });
-
     for (final utxo in mwebUtxosBox.values) {
       if (utxo.address.isEmpty) {
         initDone = true;
@@ -338,7 +327,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
 
       final mwebAddrs = (walletAddresses as LitecoinWalletAddresses).mwebAddrs;
 
-      if (!mwebAddrs.contains(utxo.address) && utxo.address.isNotEmpty) {
+      if (utxo.address.isNotEmpty && !mwebAddrs.contains(utxo.address)) {
         continue;
       }
 
@@ -495,7 +484,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
 
     // update unspent balances:
 
-    // reset coin balances to 0:
+    // reset coin balances and txCount to 0:
     unspentCoins.forEach((coin) {
       if (coin.bitcoinAddressRecord is! BitcoinSilentPaymentAddressRecord)
         coin.bitcoinAddressRecord.balance = 0;
@@ -523,6 +512,20 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
       }
     });
 
+    // update the txCount for each address:
+    for (var tx in transactionHistory.transactions.values) {
+      if (tx.isPending) continue;
+      final txAddresses = tx.inputAddresses! + tx.outputAddresses!;
+      for (var address in txAddresses) {
+        final addressRecord = walletAddresses.allAddresses
+            .firstWhereOrNull((addressRecord) => addressRecord.address == address);
+        if (addressRecord == null) {
+          continue;
+        }
+        addressRecord.txCount++;
+      }
+    }
+
     return ElectrumBalance(confirmed: confirmed, unconfirmed: unconfirmed, frozen: balance.frozen);
   }