From 23199cd8b9317c120ddc74cafddd26e88ba35d84 Mon Sep 17 00:00:00 2001
From: Matthew Fosse <matt@fosse.co>
Date: Mon, 22 Jul 2024 17:34:23 -0700
Subject: [PATCH] fix litecoin address book

---
 cw_bitcoin/lib/electrum_wallet_addresses.dart | 139 ++++++++++--------
 1 file changed, 79 insertions(+), 60 deletions(-)

diff --git a/cw_bitcoin/lib/electrum_wallet_addresses.dart b/cw_bitcoin/lib/electrum_wallet_addresses.dart
index c90d7a1dd..f2173adf6 100644
--- a/cw_bitcoin/lib/electrum_wallet_addresses.dart
+++ b/cw_bitcoin/lib/electrum_wallet_addresses.dart
@@ -329,6 +329,65 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
           BitcoinAddressType? addressType}) async =>
       getAddress(index: index, hd: hd, addressType: addressType);
 
+  void addBitcoinAddressTypes() {
+    final lastP2wpkh = _addresses
+        .where((addressRecord) =>
+            _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2wpkh))
+        .toList()
+        .last;
+    if (lastP2wpkh.address != address) {
+      addressesMap[lastP2wpkh.address] = 'P2WPKH';
+    } else {
+      addressesMap[address] = 'Active - P2WPKH';
+    }
+
+    final lastP2pkh = _addresses.firstWhere(
+        (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, P2pkhAddressType.p2pkh));
+    if (lastP2pkh.address != address) {
+      addressesMap[lastP2pkh.address] = 'P2PKH';
+    } else {
+      addressesMap[address] = 'Active - P2PKH';
+    }
+
+    final lastP2sh = _addresses.firstWhere((addressRecord) =>
+        _isUnusedReceiveAddressByType(addressRecord, P2shAddressType.p2wpkhInP2sh));
+    if (lastP2sh.address != address) {
+      addressesMap[lastP2sh.address] = 'P2SH';
+    } else {
+      addressesMap[address] = 'Active - P2SH';
+    }
+
+    final lastP2tr = _addresses.firstWhere(
+        (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2tr));
+    if (lastP2tr.address != address) {
+      addressesMap[lastP2tr.address] = 'P2TR';
+    } else {
+      addressesMap[address] = 'Active - P2TR';
+    }
+
+    final lastP2wsh = _addresses.firstWhere(
+        (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2wsh));
+    if (lastP2wsh.address != address) {
+      addressesMap[lastP2wsh.address] = 'P2WSH';
+    } else {
+      addressesMap[address] = 'Active - P2WSH';
+    }
+
+    silentAddresses.forEach((addressRecord) {
+      if (addressRecord.type != SilentPaymentsAddresType.p2sp || addressRecord.isHidden) {
+        return;
+      }
+
+      if (addressRecord.address != address) {
+        addressesMap[addressRecord.address] = addressRecord.name.isEmpty
+            ? "Silent Payments"
+            : "Silent Payments - " + addressRecord.name;
+      } else {
+        addressesMap[address] = 'Active - Silent Payments';
+      }
+    });
+  }
+
   @override
   Future<void> updateAddressesInBox() async {
     try {
@@ -340,70 +399,30 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
         allAddressesMap[addressRecord.address] = addressRecord.name;
       });
 
-      final lastP2wpkh = _addresses
-          .where((addressRecord) =>
-              _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2wpkh))
-          .toList()
-          .last;
-      if (lastP2wpkh.address != address) {
-        addressesMap[lastP2wpkh.address] = 'P2WPKH';
-      } else {
-        addressesMap[address] = 'Active - P2WPKH';
+      if (walletInfo.type == WalletType.bitcoin) {
+        addBitcoinAddressTypes();
       }
 
-      final lastP2pkh = _addresses.firstWhere(
-          (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, P2pkhAddressType.p2pkh));
-      if (lastP2pkh.address != address) {
-        addressesMap[lastP2pkh.address] = 'P2PKH';
-      } else {
-        addressesMap[address] = 'Active - P2PKH';
-      }
-
-      final lastP2sh = _addresses.firstWhere((addressRecord) =>
-          _isUnusedReceiveAddressByType(addressRecord, P2shAddressType.p2wpkhInP2sh));
-      if (lastP2sh.address != address) {
-        addressesMap[lastP2sh.address] = 'P2SH';
-      } else {
-        addressesMap[address] = 'Active - P2SH';
-      }
-
-      final lastP2tr = _addresses.firstWhere(
-          (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2tr));
-      if (lastP2tr.address != address) {
-        addressesMap[lastP2tr.address] = 'P2TR';
-      } else {
-        addressesMap[address] = 'Active - P2TR';
-      }
-
-      final lastP2wsh = _addresses.firstWhere(
-          (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2wsh));
-      if (lastP2wsh.address != address) {
-        addressesMap[lastP2wsh.address] = 'P2WSH';
-      } else {
-        addressesMap[address] = 'Active - P2WSH';
-      }
-
-      final lastMweb = _addresses.firstWhere(
-          (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.mweb));
-      if (lastMweb.address != address) {
-        addressesMap[lastP2wsh.address] = 'MWEB';
-      } else {
-        addressesMap[address] = 'Active - MWEB';
-      }
-
-      silentAddresses.forEach((addressRecord) {
-        if (addressRecord.type != SilentPaymentsAddresType.p2sp || addressRecord.isHidden) {
-          return;
-        }
-
-        if (addressRecord.address != address) {
-          addressesMap[addressRecord.address] = addressRecord.name.isEmpty
-              ? "Silent Payments"
-              : "Silent Payments - " + addressRecord.name;
+      if (walletInfo.type == WalletType.litecoin) {
+        final lastP2wpkh = _addresses
+            .where((addressRecord) =>
+                _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.p2wpkh))
+            .toList()
+            .last;
+        if (lastP2wpkh.address != address) {
+          addressesMap[lastP2wpkh.address] = 'P2WPKH';
         } else {
-          addressesMap[address] = 'Active - Silent Payments';
+          addressesMap[address] = 'Active - P2WPKH';
         }
-      });
+        
+        final lastMweb = _addresses.firstWhere(
+            (addressRecord) => _isUnusedReceiveAddressByType(addressRecord, SegwitAddresType.mweb));
+        if (lastMweb.address != address) {
+          addressesMap[lastMweb.address] = 'MWEB';
+        } else {
+          addressesMap[address] = 'Active - MWEB';
+        }
+      }
 
       await saveAddressesInBox();
     } catch (e) {