fix generate new electrum address (#1294)

* add side address validation * Remove auto size text [skip ci] --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>

Serhii committed Feb 8, 2024 at 00:10 UTC 0832e62719bbf413985c8df0e6e644548730a10a
4 files changed +17 -7
cw_bitcoin/lib/bitcoin_address_record.dart
+1 -1
@@ -28,7 +28,7 @@ class BitcoinAddressRecord {
28 }
29
30 final String address;
31 - final bool isHidden;
31 + bool isHidden;
32 final int index;
33 int _txCount;
34 int _balance;
cw_bitcoin/lib/electrum_wallet_addresses.dart
+14 -1
@@ -53,7 +53,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
53 String get address {
54 if (isEnabledAutoGenerateSubaddress) {
55 if (receiveAddresses.isEmpty) {
56 - final newAddress = generateNewAddress().address;
56 + final newAddress = generateNewAddress(hd: mainHd).address;
57 return walletInfo.type == WalletType.bitcoinCash ? toCashAddr(newAddress) : newAddress;
58 }
59 final receiveAddress = receiveAddresses.first.address;
@@ -215,6 +215,13 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
215 List<BitcoinAddressRecord> addrs;
216
217 if (addresses.isNotEmpty) {
218 +
219 +
220 + if(!isHidden) {
221 + final receiveAddressesList = addresses.where((addr) => !addr.isHidden).toList();
222 + validateSideHdAddresses(receiveAddressesList);
223 + }
224 +
225 addrs = addresses.where((addr) => addr.isHidden == isHidden).toList();
226 } else {
227 addrs = await _createNewAddresses(
@@ -296,4 +303,10 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
303 final transactionHistory = await electrumClient.getHistory(sh);
304 return transactionHistory.isNotEmpty;
305 }
306 +
307 + void validateSideHdAddresses(List<BitcoinAddressRecord> addrWithTransactions) {
308 + addrWithTransactions.forEach((element) {
309 + if (element.address != getAddress(index: element.index, hd: mainHd)) element.isHidden = true;
310 + });
311 + }
312 }
lib/bitcoin/cw_bitcoin.dart
+1 -1
@@ -65,7 +65,7 @@ class CWBitcoin extends Bitcoin {
65 @override
66 Future<void> generateNewAddress(Object wallet, String label) async {
67 final bitcoinWallet = wallet as ElectrumWallet;
68 - await bitcoinWallet.walletAddresses.generateNewAddress(label: label);
68 + await bitcoinWallet.walletAddresses.generateNewAddress(label: label, hd: bitcoinWallet.hd);
69 await wallet.save();
70 }
71
lib/src/screens/receive/widgets/qr_widget.dart
+1 -4
@@ -1,4 +1,3 @@
1 -import 'package:auto_size_text/auto_size_text.dart';
1 import 'package:cake_wallet/entities/qr_view_data.dart';
2 import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
3 import 'package:cake_wallet/routes.dart';
@@ -7,7 +6,6 @@ import 'package:cake_wallet/src/screens/receive/widgets/currency_input_field.dar
6 import 'package:cake_wallet/utils/brightness_util.dart';
7 import 'package:cake_wallet/utils/show_bar.dart';
8 import 'package:cake_wallet/utils/show_pop_up.dart';
10 -import 'package:cw_core/wallet_type.dart';
9 import 'package:flutter/material.dart';
10 import 'package:flutter/services.dart';
11 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -146,10 +144,9 @@ class QRWidget extends StatelessWidget {
144 crossAxisAlignment: CrossAxisAlignment.start,
145 children: <Widget>[
146 Expanded(
149 - child: AutoSizeText(
147 + child: Text(
148 addressListViewModel.address.address,
149 textAlign: TextAlign.center,
152 - maxLines: addressListViewModel.wallet.type == WalletType.monero ? 2 : 1,
150 style: TextStyle(
151 fontSize: 15,
152 fontWeight: FontWeight.w500,