mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 11:39:22 +00:00
Cw 853 mweb utxos are not displayed in coin control screen (#1873)
* fix displaying mweb utxos * fallback for failed electrum UTXO updates * remove throwing uncaught exception and un needed try/catch --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
This commit is contained in:
parent
707395b71a
commit
d55e635f61
3 changed files with 47 additions and 47 deletions
|
@ -235,9 +235,9 @@ class ElectrumClient {
|
|||
return [];
|
||||
});
|
||||
|
||||
Future<List<Map<String, dynamic>>> getListUnspent(String scriptHash) =>
|
||||
call(method: 'blockchain.scripthash.listunspent', params: [scriptHash])
|
||||
.then((dynamic result) {
|
||||
Future<List<Map<String, dynamic>>> getListUnspent(String scriptHash) async {
|
||||
final result = await call(method: 'blockchain.scripthash.listunspent', params: [scriptHash]);
|
||||
|
||||
if (result is List) {
|
||||
return result.map((dynamic val) {
|
||||
if (val is Map<String, dynamic>) {
|
||||
|
@ -249,7 +249,7 @@ class ElectrumClient {
|
|||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
}
|
||||
|
||||
Future<List<Map<String, dynamic>>> getMempool(String scriptHash) =>
|
||||
call(method: 'blockchain.scripthash.get_mempool', params: [scriptHash])
|
||||
|
|
|
@ -1383,7 +1383,8 @@ abstract class ElectrumWalletBase
|
|||
|
||||
unspentCoins = updatedUnspentCoins;
|
||||
|
||||
final currentWalletUnspentCoins = unspentCoinsInfo.values.where((element) => element.walletId == id);
|
||||
final currentWalletUnspentCoins =
|
||||
unspentCoinsInfo.values.where((element) => element.walletId == id);
|
||||
|
||||
if (currentWalletUnspentCoins.length != updatedUnspentCoins.length) {
|
||||
unspentCoins.forEach((coin) => addCoinInfo(coin));
|
||||
|
@ -1450,10 +1451,9 @@ abstract class ElectrumWalletBase
|
|||
|
||||
@action
|
||||
Future<void> addCoinInfo(BitcoinUnspent coin) async {
|
||||
|
||||
// Check if the coin is already in the unspentCoinsInfo for the wallet
|
||||
final existingCoinInfo = unspentCoinsInfo.values.firstWhereOrNull(
|
||||
(element) => element.walletId == walletInfo.id && element == coin);
|
||||
final existingCoinInfo = unspentCoinsInfo.values
|
||||
.firstWhereOrNull((element) => element.walletId == walletInfo.id && element == coin);
|
||||
|
||||
if (existingCoinInfo == null) {
|
||||
final newInfo = UnspentCoinsInfo(
|
||||
|
@ -1475,19 +1475,18 @@ abstract class ElectrumWalletBase
|
|||
|
||||
Future<void> _refreshUnspentCoinsInfo() async {
|
||||
try {
|
||||
final List<dynamic> keys = <dynamic>[];
|
||||
final List<dynamic> keys = [];
|
||||
final currentWalletUnspentCoins =
|
||||
unspentCoinsInfo.values.where((element) => element.walletId.contains(id));
|
||||
unspentCoinsInfo.values.where((record) => record.walletId == id);
|
||||
|
||||
if (currentWalletUnspentCoins.isNotEmpty) {
|
||||
currentWalletUnspentCoins.forEach((element) {
|
||||
final existUnspentCoins = unspentCoins
|
||||
.where((coin) => element.hash.contains(coin.hash) && element.vout == coin.vout);
|
||||
for (final element in currentWalletUnspentCoins) {
|
||||
if (RegexUtils.addressTypeFromStr(element.address, network) is MwebAddress) continue;
|
||||
|
||||
final existUnspentCoins = unspentCoins.where((coin) => element == coin);
|
||||
|
||||
if (existUnspentCoins.isEmpty) {
|
||||
keys.add(element.key);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (keys.isNotEmpty) {
|
||||
|
@ -1499,7 +1498,8 @@ abstract class ElectrumWalletBase
|
|||
}
|
||||
|
||||
Future<void> cleanUpDuplicateUnspentCoins() async {
|
||||
final currentWalletUnspentCoins = unspentCoinsInfo.values.where((element) => element.walletId == id);
|
||||
final currentWalletUnspentCoins =
|
||||
unspentCoinsInfo.values.where((element) => element.walletId == id);
|
||||
final Map<String, UnspentCoinsInfo> uniqueUnspentCoins = {};
|
||||
final List<dynamic> duplicateKeys = [];
|
||||
|
||||
|
@ -1535,7 +1535,8 @@ abstract class ElectrumWalletBase
|
|||
final ownAddresses = walletAddresses.allAddresses.map((addr) => addr.address).toSet();
|
||||
|
||||
final receiverAmount = outputs
|
||||
.where((output) => !ownAddresses.contains(addressFromOutputScript(output.scriptPubKey, network)))
|
||||
.where((output) =>
|
||||
!ownAddresses.contains(addressFromOutputScript(output.scriptPubKey, network)))
|
||||
.fold<int>(0, (sum, output) => sum + output.amount.toInt());
|
||||
|
||||
if (receiverAmount == 0) {
|
||||
|
@ -1774,7 +1775,6 @@ abstract class ElectrumWalletBase
|
|||
} else {
|
||||
return key.signInput(txDigest, sigHash: sighash);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return PendingBitcoinTransaction(
|
||||
|
|
|
@ -154,7 +154,7 @@ class UnspentCoinsListFormState extends State<UnspentCoinsListForm> {
|
|||
SizedBox(height: 15),
|
||||
Expanded(
|
||||
child: unspentCoinsListViewModel.items.isEmpty
|
||||
? Center(child: Text('No unspent coins available\ntry to reconnect',textAlign: TextAlign.center))
|
||||
? Center(child: Text('No unspent coins available',textAlign: TextAlign.center))
|
||||
: ListView.separated(
|
||||
itemCount: unspentCoinsListViewModel.items.length,
|
||||
separatorBuilder: (_, __) => SizedBox(height: 15),
|
||||
|
|
Loading…
Reference in a new issue