From 26a757f1f0fabaa8028e967641a3f8d102bb5353 Mon Sep 17 00:00:00 2001 From: fossephate <matt.cfosse@gmail.com> Date: Tue, 29 Oct 2024 14:19:16 -0700 Subject: [PATCH] add peg in / out labels and make 6 confs only show up for peg in / out --- cw_bitcoin/lib/electrum_wallet.dart | 7 +++++++ cw_bitcoin/lib/litecoin_wallet.dart | 19 ++++++++++++++----- cw_core/lib/transaction_info.dart | 3 +-- .../dashboard/transaction_list_item.dart | 15 +++++++++++++-- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart index 98380bbf1..93a40cc33 100644 --- a/cw_bitcoin/lib/electrum_wallet.dart +++ b/cw_bitcoin/lib/electrum_wallet.dart @@ -2085,6 +2085,13 @@ abstract class ElectrumWalletBase final balances = await Future.wait(balanceFutures); + if (balances.isNotEmpty && balances.first['confirmed'] == null) { + // if we got null balance responses from the server, set our connection status to lost and return our last known balance: + print("got null balance responses from the server, setting connection status to lost"); + syncStatus = LostConnectionSyncStatus(); + return balance[currency] ?? ElectrumBalance(confirmed: 0, unconfirmed: 0, frozen: 0); + } + for (var i = 0; i < balances.length; i++) { final addressRecord = addresses[i]; final balance = balances[i]; diff --git a/cw_bitcoin/lib/litecoin_wallet.dart b/cw_bitcoin/lib/litecoin_wallet.dart index 55dfdf1fb..aece8524d 100644 --- a/cw_bitcoin/lib/litecoin_wallet.dart +++ b/cw_bitcoin/lib/litecoin_wallet.dart @@ -1042,15 +1042,18 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store { bool hasMwebInput = false; bool hasMwebOutput = false; + bool hasRegularInput = false; + bool hasRegularOutput = false; for (final output in transactionCredentials.outputs) { - if (output.extractedAddress?.toLowerCase().contains("mweb") ?? false) { + if (output.address.toLowerCase().contains("mweb") || + (output.extractedAddress?.toLowerCase().contains("mweb") ?? false)) { hasMwebOutput = true; break; } - if (output.address.toLowerCase().contains("mweb")) { - hasMwebOutput = true; - break; + if (!(output.address.toLowerCase().contains("mweb")) || + !(output.extractedAddress?.toLowerCase().contains("mweb") ?? false)) { + hasRegularOutput = true; } } @@ -1059,9 +1062,13 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store { if (utxo.utxo.scriptType == SegwitAddresType.mweb) { hasMwebInput = true; } + if (utxo.utxo.scriptType == SegwitAddresType.p2wpkh) { + hasRegularInput = true; + } } bool isPegIn = !hasMwebInput && hasMwebOutput; + bool isPegOut = hasMwebInput && hasRegularOutput; bool isRegular = !hasMwebInput && !hasMwebOutput; tx.changeAddressOverride = (await (walletAddresses as LitecoinWalletAddresses) .getChangeAddress(isPegIn: isPegIn || isRegular)) @@ -1136,7 +1143,9 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store { addressRecord.balance -= utxo.value.toInt(); }); transaction.inputAddresses?.addAll(addresses); - + print("isPegIn: $isPegIn, isPegOut: $isPegOut"); + transaction.additionalInfo["isPegIn"] = isPegIn; + transaction.additionalInfo["isPegOut"] = isPegOut; transactionHistory.addOne(transaction); await updateUnspent(); await updateBalance(); diff --git a/cw_core/lib/transaction_info.dart b/cw_core/lib/transaction_info.dart index 9d0c968d8..3e34af75f 100644 --- a/cw_core/lib/transaction_info.dart +++ b/cw_core/lib/transaction_info.dart @@ -25,6 +25,5 @@ abstract class TransactionInfo extends Object with Keyable { @override dynamic get keyIndex => id; - late Map<String, dynamic> additionalInfo; + Map<String, dynamic> additionalInfo = {}; } - diff --git a/lib/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart index f3f89c257..79d1d4548 100644 --- a/lib/view_model/dashboard/transaction_list_item.dart +++ b/lib/view_model/dashboard/transaction_list_item.dart @@ -69,9 +69,20 @@ class TransactionListItem extends ActionListItem with Keyable { } break; case WalletType.litecoin: - if (transaction.confirmations >= 0 && transaction.confirmations < 6) { - return ' (${transaction.confirmations}/6)'; + bool isPegIn = (transaction.additionalInfo["isPegIn"] as bool?) ?? false; + bool isPegOut = (transaction.additionalInfo["isPegOut"] as bool?) ?? false; + bool isPegInOut = isPegIn || isPegOut; + String str = ''; + if (isPegInOut && transaction.confirmations >= 0 && transaction.confirmations < 6) { + str = " (${transaction.confirmations}/6)"; } + if (isPegIn) { + str += " (Peg In)"; + } + if (isPegOut) { + str += " (Peg Out)"; + } + return str; default: return ''; }