mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
CW-1152-Enable-selecting-used-addresses (#2483)
* allow selecting used Electrum addresses * fix ci issue
This commit is contained in:
@@ -2147,6 +2147,7 @@ abstract class ElectrumWalletBase
|
||||
|
||||
if (history.isNotEmpty) {
|
||||
addressRecord.setAsUsed();
|
||||
walletAddresses.clearLockIfMatches(addressRecord.type, addressRecord.address);
|
||||
|
||||
await Future.wait(history.map((transaction) async {
|
||||
txid = transaction['tx_hash'] as String;
|
||||
@@ -2353,6 +2354,7 @@ abstract class ElectrumWalletBase
|
||||
addressRecord.balance = confirmed + unconfirmed;
|
||||
if (confirmed > 0 || unconfirmed > 0) {
|
||||
addressRecord.setAsUsed();
|
||||
walletAddresses.clearLockIfMatches(addressRecord.type, addressRecord.address);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
currentSilentAddressIndex = initialSilentAddressIndex,
|
||||
mwebAddresses =
|
||||
ObservableList<BitcoinAddressRecord>.of((initialMwebAddresses ?? []).toSet()),
|
||||
lockedReceiveAddressByType = ObservableMap<BitcoinAddressType, String>(),
|
||||
super(walletInfo) {
|
||||
if (masterHd != null) {
|
||||
silentAddress = SilentPaymentOwner.fromPrivateKeys(
|
||||
@@ -121,6 +122,9 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
final Bip32Slip10Secp256k1 sideHd;
|
||||
final bool isHardwareWallet;
|
||||
|
||||
@observable
|
||||
ObservableMap<BitcoinAddressType, String> lockedReceiveAddressByType;
|
||||
|
||||
@observable
|
||||
SilentPaymentOwner? silentAddress;
|
||||
|
||||
@@ -167,6 +171,9 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
return generateNewAddress().address;
|
||||
}
|
||||
|
||||
final locked = lockedReceiveAddressByType[addressPageType];
|
||||
if (locked != null) return locked;
|
||||
|
||||
final prev = previousAddressRecord;
|
||||
if (prev != null && prev.type == addressPageType && !prev.isUsed) {
|
||||
return prev.address;
|
||||
@@ -199,14 +206,31 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
(addressRecord) => addressRecord.address == addr,
|
||||
);
|
||||
|
||||
lockedReceiveAddressByType.remove(addressPageType);
|
||||
|
||||
previousAddressRecord = addressRecord;
|
||||
receiveAddresses.remove(addressRecord);
|
||||
receiveAddresses.insert(0, addressRecord);
|
||||
|
||||
if (isEnabledAutoGenerateSubaddress &&
|
||||
addressRecord.isUsed &&
|
||||
addressRecord.type == addressPageType) {
|
||||
lockedReceiveAddressByType[addressPageType] = addr;
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
printV("ElectrumWalletAddressBase: set address ($addr): $e");
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
void clearLockIfMatches(BitcoinAddressType type, String address) {
|
||||
final locked = lockedReceiveAddressByType[type];
|
||||
if (locked != null && locked == address) {
|
||||
lockedReceiveAddressByType.remove(type);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String get primaryAddress => getAddress(index: 0, hd: mainHd, addressType: addressPageType);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user