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) {