From b76332835482e887a6d4bc925606af46ef756f22 Mon Sep 17 00:00:00 2001
From: Matthew Fosse <matt@fosse.co>
Date: Tue, 5 Mar 2024 09:21:08 -0800
Subject: [PATCH] review fixes

---
 assets/images/lightning_menu.png              | Bin 3152 -> 0 bytes
 cw_bitcoin/lib/bitcoin_wallet.dart            |   8 --
 cw_bitcoin/lib/electrum_wallet.dart           |  72 ++++++++----------
 cw_bitcoin/lib/litecoin_wallet.dart           |   8 --
 .../lib/src/bitcoin_cash_wallet.dart          |   8 --
 cw_lightning/lib/lightning_wallet.dart        |  22 +++---
 .../dashboard/widgets/menu_widget.dart        |   5 +-
 .../wallet_address_list_view_model.dart       |   2 +-
 8 files changed, 47 insertions(+), 78 deletions(-)
 delete mode 100644 assets/images/lightning_menu.png

diff --git a/assets/images/lightning_menu.png b/assets/images/lightning_menu.png
deleted file mode 100644
index 949f8d879abf8b093456baf8a48ecdda2fbc9ac5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3152
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

diff --git a/cw_bitcoin/lib/bitcoin_wallet.dart b/cw_bitcoin/lib/bitcoin_wallet.dart
index 3921d162b..84e565201 100644
--- a/cw_bitcoin/lib/bitcoin_wallet.dart
+++ b/cw_bitcoin/lib/bitcoin_wallet.dart
@@ -44,14 +44,6 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
           initialBalance: initialBalance,
           seedBytes: seedBytes,
           currency: CryptoCurrency.btc,
-          balanceFactory: (
-              {required int confirmed, required int unconfirmed, required int frozen}) {
-            return ElectrumBalance(
-              confirmed: confirmed,
-              unconfirmed: unconfirmed,
-              frozen: frozen,
-            );
-          },
         ) {
     walletAddresses = BitcoinWalletAddresses(
       walletInfo,
diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart
index 4054de11e..873fe2977 100644
--- a/cw_bitcoin/lib/electrum_wallet.dart
+++ b/cw_bitcoin/lib/electrum_wallet.dart
@@ -23,7 +23,6 @@ import 'package:cw_bitcoin/litecoin_network.dart';
 import 'package:cw_bitcoin/pending_bitcoin_transaction.dart';
 import 'package:cw_bitcoin/script_hash.dart';
 import 'package:cw_bitcoin/utils.dart';
-import 'package:cw_core/balance.dart';
 import 'package:cw_core/crypto_currency.dart';
 import 'package:cw_core/node.dart';
 import 'package:cw_core/pathForWallet.dart';
@@ -36,6 +35,7 @@ import 'package:cw_core/utils/file.dart';
 import 'package:cw_core/wallet_base.dart';
 import 'package:cw_core/wallet_info.dart';
 import 'package:flutter/foundation.dart';
+import 'package:hex/hex.dart';
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:rxdart/subjects.dart';
@@ -45,8 +45,9 @@ part 'electrum_wallet.g.dart';
 
 class ElectrumWallet = ElectrumWalletBase with _$ElectrumWallet;
 
-abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT extends ElectrumTransactionInfo>
-    extends WalletBase<BalanceT, ElectrumTransactionHistory, TxInfoT> with Store {
+abstract class ElectrumWalletBase
+    extends WalletBase<ElectrumBalance, ElectrumTransactionHistory, ElectrumTransactionInfo>
+    with Store {
   ElectrumWalletBase(
       {required String password,
       required WalletInfo walletInfo,
@@ -54,15 +55,9 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
       required this.networkType,
       required this.mnemonic,
       required Uint8List seedBytes,
-      required BalanceT Function({
-        required int confirmed,
-        required int unconfirmed,
-        required int frozen,
-      }) this.balanceFactory,
-      // required TxInfoT Function(Map<String, dynamic> json) TxInfoFactory,
       List<BitcoinAddressRecord>? initialAddresses,
       ElectrumClient? electrumClient,
-      BalanceT? initialBalance,
+      ElectrumBalance? initialBalance,
       CryptoCurrency? currency})
       : hd = currency == CryptoCurrency.bch
             ? bitcoinCashHDWallet(seedBytes)
@@ -74,8 +69,12 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
         isEnabledAutoGenerateSubaddress = true,
         unspentCoins = [],
         _scripthashesUpdateSubject = {},
-        balance = ObservableMap<CryptoCurrency, BalanceT>.of(
-            currency != null ? {currency: initialBalance ?? balanceFactory(confirmed: 0, unconfirmed: 0, frozen: 0)} : {}),
+        balance = ObservableMap<CryptoCurrency, ElectrumBalance>.of(currency != null
+            ? {
+                currency:
+                    initialBalance ?? const ElectrumBalance(confirmed: 0, unconfirmed: 0, frozen: 0)
+              }
+            : {}),
         this.unspentCoinsInfo = unspentCoinsInfo,
         this.network = networkType == bitcoin.bitcoin
             ? BitcoinNetwork.mainnet
@@ -97,11 +96,6 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
 
   final bitcoin.HDWallet hd;
   final String mnemonic;
-  final BalanceT Function({
-    required int confirmed,
-    required int unconfirmed,
-    required int frozen,
-  }) balanceFactory;
 
   @override
   @observable
@@ -115,7 +109,7 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
 
   @override
   @observable
-  late ObservableMap<CryptoCurrency, BalanceT> balance;
+  late ObservableMap<CryptoCurrency, ElectrumBalance> balance;
 
   @override
   @observable
@@ -291,7 +285,7 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
 
     final totalAmount = amount + fee;
 
-    if (totalAmount > (balance[currency]!.confirmed as int)) {
+    if (totalAmount > balance[currency]!.confirmed) {
       throw BitcoinTransactionWrongBalanceException(currency);
     }
 
@@ -629,16 +623,23 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
     final ins = <bitcoin_base.BtcTransaction>[];
 
     for (final vin in original.inputs) {
-      final txHex = await electrumClient.getTransactionHex(hash: vin.txId);
-      final tx = bitcoin_base.BtcTransaction.fromRaw(txHex);
-      ins.add(tx);
+      try {
+        final id = HEX.encode(HEX.decode(vin.txId).reversed.toList());
+        final txHex = await electrumClient.getTransactionHex(hash: id);
+        final tx = bitcoin_base.BtcTransaction.fromRaw(txHex);
+        ins.add(tx);
+      } catch (_) {
+        ins.add(bitcoin_base.BtcTransaction.fromRaw(
+          await electrumClient.getTransactionHex(hash: vin.txId),
+        ));
+      }
     }
 
     return ElectrumTransactionBundle(original,
         ins: ins, time: time, confirmations: confirmations, height: height);
   }
 
-  Future<TxInfoT?> fetchTransactionInfo(
+  Future<ElectrumTransactionInfo?> fetchTransactionInfo(
       {required String hash,
       required int height,
       required Set<String> myAddresses,
@@ -646,7 +647,7 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
     try {
       return ElectrumTransactionInfo.fromElectrumBundle(
           await getTransactionExpanded(hash: hash, height: height), walletInfo.type, network,
-          addresses: myAddresses, height: height) as TxInfoT;
+          addresses: myAddresses, height: height);
     } catch (e) {
       if (e is FormatException && retryOnFailure == true) {
         await Future.delayed(const Duration(seconds: 2));
@@ -657,9 +658,9 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
   }
 
   @override
-  Future<Map<String, TxInfoT>> fetchTransactions() async {
+  Future<Map<String, ElectrumTransactionInfo>> fetchTransactions() async {
     try {
-      final Map<String, TxInfoT> historiesWithDetails = {};
+      final Map<String, ElectrumTransactionInfo> historiesWithDetails = {};
       final addressesSet = walletAddresses.allAddresses.map((addr) => addr.address).toSet();
       final currentHeight = await electrumClient.getCurrentBlockChainTip() ?? 0;
 
@@ -699,10 +700,10 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
     }
   }
 
-  Future<Map<String, TxInfoT>> _fetchAddressHistory(
+  Future<Map<String, ElectrumTransactionInfo>> _fetchAddressHistory(
       BitcoinAddressRecord addressRecord, Set<String> addressesSet, int currentHeight) async {
     try {
-      final Map<String, TxInfoT> historiesWithDetails = {};
+      final Map<String, ElectrumTransactionInfo> historiesWithDetails = {};
 
       final history = await electrumClient
           .getHistory(addressRecord.scriptHash ?? addressRecord.updateScriptHash(network));
@@ -723,7 +724,7 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
               storedTx.isPending = storedTx.confirmations == 0;
             }
 
-            historiesWithDetails[txid] = storedTx as TxInfoT;
+            historiesWithDetails[txid] = storedTx;
           } else {
             final tx = await fetchTransactionInfo(
                 hash: txid, height: height, myAddresses: addressesSet, retryOnFailure: true);
@@ -787,7 +788,7 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
     });
   }
 
-  Future<BalanceT> _fetchBalances() async {
+  Future<ElectrumBalance> _fetchBalances() async {
     final addresses = walletAddresses.allAddresses.toList();
     final balanceFutures = <Future<Map<String, dynamic>>>[];
     for (var i = 0; i < addresses.length; i++) {
@@ -827,15 +828,8 @@ abstract class ElectrumWalletBase<BalanceT extends ElectrumBalance, TxInfoT exte
       }
     }
 
-    // return balanceFactory()
-    //   ..confirmed = totalConfirmed
-    //   ..unconfirmed = totalUnconfirmed
-    //   ..frozen = totalFrozen;
-    return balanceFactory(
-      confirmed: totalConfirmed,
-      unconfirmed: totalUnconfirmed,
-      frozen: totalFrozen,
-    );
+    return ElectrumBalance(
+        confirmed: totalConfirmed, unconfirmed: totalUnconfirmed, frozen: totalFrozen);
   }
 
   Future<void> updateBalance() async {
diff --git a/cw_bitcoin/lib/litecoin_wallet.dart b/cw_bitcoin/lib/litecoin_wallet.dart
index 925a2778b..80f6fc6a0 100644
--- a/cw_bitcoin/lib/litecoin_wallet.dart
+++ b/cw_bitcoin/lib/litecoin_wallet.dart
@@ -42,14 +42,6 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
           initialBalance: initialBalance,
           seedBytes: seedBytes,
           currency: CryptoCurrency.ltc,
-          balanceFactory: (
-              {required int confirmed, required int unconfirmed, required int frozen}) {
-            return ElectrumBalance(
-              confirmed: confirmed,
-              unconfirmed: unconfirmed,
-              frozen: frozen,
-            );
-          },
         ) {
     walletAddresses = LitecoinWalletAddresses(
       walletInfo,
diff --git a/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet.dart b/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet.dart
index 9fe280640..604a9756b 100644
--- a/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet.dart
+++ b/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet.dart
@@ -49,14 +49,6 @@ abstract class BitcoinCashWalletBase extends ElectrumWallet with Store {
           initialBalance: initialBalance,
           seedBytes: seedBytes,
           currency: CryptoCurrency.bch,
-          balanceFactory: (
-              {required int confirmed, required int unconfirmed, required int frozen}) {
-            return ElectrumBalance(
-              confirmed: confirmed,
-              unconfirmed: unconfirmed,
-              frozen: frozen,
-            );
-          },
         ) {
     walletAddresses = BitcoinCashWalletAddresses(
       walletInfo,
diff --git a/cw_lightning/lib/lightning_wallet.dart b/cw_lightning/lib/lightning_wallet.dart
index 2ba558de4..ca60d00f4 100644
--- a/cw_lightning/lib/lightning_wallet.dart
+++ b/cw_lightning/lib/lightning_wallet.dart
@@ -32,8 +32,7 @@ part 'lightning_wallet.g.dart';
 
 class LightningWallet = LightningWalletBase with _$LightningWallet;
 
-abstract class LightningWalletBase
-    extends ElectrumWalletBase<LightningBalance, LightningTransactionInfo> with Store {
+abstract class LightningWalletBase extends ElectrumWallet with Store {
   bool _isTransactionUpdating;
 
   @override
@@ -53,6 +52,7 @@ abstract class LightningWalletBase
     Map<String, int>? initialChangeAddressIndex,
   })  : _isTransactionUpdating = false,
         syncStatus = NotConnectedSyncStatus(),
+        _balance = ObservableMap<CryptoCurrency, LightningBalance>(),
         super(
           mnemonic: mnemonic,
           password: password,
@@ -63,15 +63,9 @@ abstract class LightningWalletBase
           initialBalance: initialBalance,
           seedBytes: seedBytes,
           currency: CryptoCurrency.btcln,
-          balanceFactory: (
-              {required int confirmed, required int unconfirmed, required int frozen}) {
-            return LightningBalance(
-              confirmed: confirmed,
-              unconfirmed: unconfirmed,
-              frozen: frozen,
-            );
-          },
         ) {
+    _balance[CryptoCurrency.btcln] =
+        initialBalance ?? LightningBalance(confirmed: 0, unconfirmed: 0, frozen: 0);
     walletAddresses = BitcoinWalletAddresses(
       walletInfo,
       electrumClient: electrumClient,
@@ -95,6 +89,12 @@ abstract class LightningWalletBase
     });
   }
 
+  late final ObservableMap<CryptoCurrency, LightningBalance> _balance;
+
+  @override
+  @computed
+  ObservableMap<CryptoCurrency, LightningBalance> get balance => _balance;
+
   static Future<LightningWallet> create(
       {required String mnemonic,
       required String password,
@@ -186,7 +186,7 @@ abstract class LightningWalletBase
 
     sdk.nodeStateStream.listen((event) {
       if (event == null) return;
-      balance[CryptoCurrency.btcln] = LightningBalance(
+      _balance[CryptoCurrency.btcln] = LightningBalance(
         confirmed: event.maxPayableMsat ~/ 1000,
         unconfirmed: event.maxReceivableMsat ~/ 1000,
         frozen: 0,
diff --git a/lib/src/screens/dashboard/widgets/menu_widget.dart b/lib/src/screens/dashboard/widgets/menu_widget.dart
index 1b85943c1..a44ee5476 100644
--- a/lib/src/screens/dashboard/widgets/menu_widget.dart
+++ b/lib/src/screens/dashboard/widgets/menu_widget.dart
@@ -27,7 +27,7 @@ class MenuWidgetState extends State<MenuWidget> {
         this.fromBottomEdge = 25,
         this.moneroIcon = Image.asset('assets/images/monero_menu.png'),
         this.bitcoinIcon = Image.asset('assets/images/bitcoin_menu.png'),
-        this.lightningIcon = Image.asset('assets/images/lightning_menu.png'),
+        this.lightningIcon = Image.asset('assets/images/lightning_logo.png'),
         this.litecoinIcon = Image.asset('assets/images/litecoin_menu.png'),
         this.havenIcon = Image.asset('assets/images/haven_menu.png'),
         this.ethereumIcon = Image.asset('assets/images/eth_icon.png'),
@@ -100,8 +100,7 @@ class MenuWidgetState extends State<MenuWidget> {
         color: Theme.of(context).extension<CakeMenuTheme>()!.iconColor);
     bitcoinIcon = Image.asset('assets/images/bitcoin_menu.png',
         color: Theme.of(context).extension<CakeMenuTheme>()!.iconColor);
-    lightningIcon = Image.asset('assets/images/lightning_menu.png',
-        color: Theme.of(context).extension<CakeMenuTheme>()!.iconColor);
+    lightningIcon = Image.asset('assets/images/lightning_logo.png');
 
     return Row(
       mainAxisSize: MainAxisSize.max,
diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
index 4ccb3ee3b..7f54cee6a 100644
--- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
+++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
@@ -87,7 +87,7 @@ class LightningURI extends PaymentURI {
 
   @override
   String toString() {
-    throw Exception('TODO: Not implemented');
+    throw Exception('N/A for lightning wallets (need to make a bolt11 invoice).');
   }
 }