Update logic for creation receive and change addresses

M committed Jan 18, 2022 at 19:10 UTC 31a67fa30dba1e102847bcafd341aa00cf46a189
1 file changed +22 -10
cw_bitcoin/lib/electrum_wallet_addresses.dart
+22 -10
@@ -53,6 +53,14 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
53 .where((addr) => addr.isHidden && !addr.isUsed)
54 .toList();
55
56 + List<BitcoinAddressRecord> get totalReceiveAddresses => addresses
57 + .where((addr) => !addr.isHidden)
58 + .toList();
59 +
60 + List<BitcoinAddressRecord> get totalChangeAddresses => addresses
61 + .where((addr) => addr.isHidden)
62 + .toList();
63 +
64 Future<void> discoverAddresses() async {
65 await _discoverAddresses(mainHd, false);
66 await _discoverAddresses(sideHd, true);
@@ -64,11 +72,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
72 await _generateInitialAddresses();
73
74 if (receiveAddresses.isEmpty) {
67 - final count = currentReceiveAddressIndex + gap;
75 final newAddresses = await _createNewAddresses(
69 - count,
76 + gap,
77 hd: mainHd,
71 - startIndex: currentReceiveAddressIndex,
78 + startIndex: totalReceiveAddresses.length > 0
79 + ? totalReceiveAddresses.length - 1
80 + : 0,
81 isHidden: false);
82 _addAddresses(newAddresses);
83 } else if (currentReceiveAddressIndex >= receiveAddresses.length) {
@@ -82,11 +91,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
91 @action
92 Future<void> nextReceiveAddress() async {
93 if (receiveAddresses.isEmpty) {
85 - final count = currentReceiveAddressIndex + gap;
94 final newAddresses = await _createNewAddresses(
87 - count,
88 - hd: sideHd,
89 - startIndex: currentReceiveAddressIndex,
95 + gap,
96 + hd: mainHd,
97 + startIndex: totalReceiveAddresses.length > 0
98 + ? totalReceiveAddresses.length - 1
99 + : 0,
100 isHidden: false);
101 _addAddresses(newAddresses);
102 } else if (currentReceiveAddressIndex >= receiveAddresses.length) {
@@ -101,10 +111,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
111 @action
112 Future<String> getChangeAddress() async {
113 if (changeAddresses.isEmpty) {
104 - final count = currentChangeAddressIndex + gap;
114 final newAddresses = await _createNewAddresses(
106 - count,
107 - startIndex: currentChangeAddressIndex,
115 + gap,
116 + hd: sideHd,
117 + startIndex: totalChangeAddresses.length > 0
118 + ? totalChangeAddresses.length - 1
119 + : 0,
120 isHidden: true);
121 _addAddresses(newAddresses);
122 } else if (currentChangeAddressIndex >= changeAddresses.length) {