feat: always construct wallet addresses with 5+ sp addresses (#2487)
rafael_xmr committed
Aug 28, 2025 at 21:22 UTC
f450bae82ddbe89acf537031d2881c37a945c3ca
1 file changed
+17
-14
cw_bitcoin/lib/electrum_wallet_addresses.dart
+17
-14
@@ -80,7 +80,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
80
network: network,
81
);
82
83
- if (silentAddresses.length == 0) {
83
+ if (!silentAddresses.any((addr) => addr.index == 0 && addr.isHidden == false))
84
silentAddresses.add(BitcoinSilentPaymentAddressRecord(
85
silentAddress.toString(),
86
index: 0,
@@ -90,15 +90,17 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
90
network: network,
91
type: SilentPaymentsAddresType.p2sp,
92
));
93
- silentAddresses.add(BitcoinSilentPaymentAddressRecord(
94
- silentAddress!.toLabeledSilentPaymentAddress(0).toString(),
95
- index: 0,
96
- isHidden: true,
97
- name: "",
98
- silentPaymentTweak: BytesUtils.toHexString(silentAddress!.generateLabel(0)),
99
- network: network,
100
- type: SilentPaymentsAddresType.p2sp,
101
- ));
93
+ for (var i = 0; i < 5; i++) {
94
+ if (!silentAddresses.any((addr) => addr.index == i && addr.isHidden == (i == 0)))
95
+ silentAddresses.add(BitcoinSilentPaymentAddressRecord(
96
+ silentAddress!.toLabeledSilentPaymentAddress(i).toString(),
97
+ index: i,
98
+ isHidden: i == 0,
99
+ name: "",
100
+ silentPaymentTweak: BytesUtils.toHexString(silentAddress!.generateLabel(i)),
101
+ network: network,
102
+ type: SilentPaymentsAddresType.p2sp,
103
+ ));
104
}
105
}
106
@@ -151,12 +153,13 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
153
return silentAddress.toString();
154
}
155
154
- final typeMatchingAddresses = _addresses.where((addr) => !addr.isHidden && _isAddressPageTypeMatch(addr)).toList();
155
- final typeMatchingReceiveAddresses = typeMatchingAddresses.where((addr) => !addr.isUsed).toList();
156
+ final typeMatchingAddresses =
157
+ _addresses.where((addr) => !addr.isHidden && _isAddressPageTypeMatch(addr)).toList();
158
+ final typeMatchingReceiveAddresses =
159
+ typeMatchingAddresses.where((addr) => !addr.isUsed).toList();
160
161
if (!isEnabledAutoGenerateSubaddress) {
158
- if (previousAddressRecord != null &&
159
- previousAddressRecord!.type == addressPageType) {
162
+ if (previousAddressRecord != null && previousAddressRecord!.type == addressPageType) {
163
return previousAddressRecord!.address;
164
}
165