mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
Cw 925 improve automatic subaddress generation behavior (#2217)
* fix: update usedAddresses for monero * fix: subaddresses generation for bitcoin * fix: minor fix * fix: update receive address UI when used * minor fix [skip ci]
This commit is contained in:
parent
b25cb527cb
commit
4448adb49d
3 changed files with 29 additions and 23 deletions
|
@ -1,4 +1,5 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'package:mobx/mobx.dart';
|
||||||
|
|
||||||
import 'package:bitcoin_base/bitcoin_base.dart';
|
import 'package:bitcoin_base/bitcoin_base.dart';
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ abstract class BaseBitcoinAddressRecord {
|
||||||
}) : _txCount = txCount,
|
}) : _txCount = txCount,
|
||||||
_balance = balance,
|
_balance = balance,
|
||||||
_name = name,
|
_name = name,
|
||||||
_isUsed = isUsed;
|
_isUsed = Observable(isUsed);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object o) => o is BaseBitcoinAddressRecord && address == o.address;
|
bool operator ==(Object o) => o is BaseBitcoinAddressRecord && address == o.address;
|
||||||
|
@ -27,7 +28,7 @@ abstract class BaseBitcoinAddressRecord {
|
||||||
int _txCount;
|
int _txCount;
|
||||||
int _balance;
|
int _balance;
|
||||||
String _name;
|
String _name;
|
||||||
bool _isUsed;
|
final Observable<bool> _isUsed;
|
||||||
BasedUtxoNetwork? network;
|
BasedUtxoNetwork? network;
|
||||||
|
|
||||||
int get txCount => _txCount;
|
int get txCount => _txCount;
|
||||||
|
@ -40,9 +41,9 @@ abstract class BaseBitcoinAddressRecord {
|
||||||
|
|
||||||
set balance(int value) => _balance = value;
|
set balance(int value) => _balance = value;
|
||||||
|
|
||||||
bool get isUsed => _isUsed;
|
bool get isUsed => _isUsed.value;
|
||||||
|
|
||||||
void setAsUsed() => _isUsed = true;
|
void setAsUsed() => _isUsed.value = true;
|
||||||
void setNewName(String label) => _name = label;
|
void setNewName(String label) => _name = label;
|
||||||
|
|
||||||
int get hashCode => address.hashCode;
|
int get hashCode => address.hashCode;
|
||||||
|
|
|
@ -144,27 +144,32 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||||
return silentAddress.toString();
|
return silentAddress.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
String receiveAddress;
|
final typeMatchingAddresses = _addresses.where((addr) => !addr.isHidden && _isAddressPageTypeMatch(addr)).toList();
|
||||||
|
final typeMatchingReceiveAddresses = typeMatchingAddresses.where((addr) => !addr.isUsed).toList();
|
||||||
|
|
||||||
final typeMatchingReceiveAddresses =
|
if (!isEnabledAutoGenerateSubaddress) {
|
||||||
receiveAddresses.where(_isAddressPageTypeMatch).where((addr) => !addr.isUsed);
|
if (previousAddressRecord != null &&
|
||||||
|
previousAddressRecord!.type == addressPageType) {
|
||||||
if ((isEnabledAutoGenerateSubaddress && receiveAddresses.isEmpty) ||
|
return previousAddressRecord!.address;
|
||||||
typeMatchingReceiveAddresses.isEmpty) {
|
|
||||||
receiveAddress = generateNewAddress().address;
|
|
||||||
} else {
|
|
||||||
final previousAddressMatchesType =
|
|
||||||
previousAddressRecord != null && previousAddressRecord!.type == addressPageType;
|
|
||||||
|
|
||||||
if (previousAddressMatchesType &&
|
|
||||||
typeMatchingReceiveAddresses.first.address != addressesByReceiveType.first.address) {
|
|
||||||
receiveAddress = previousAddressRecord!.address;
|
|
||||||
} else {
|
|
||||||
receiveAddress = typeMatchingReceiveAddresses.first.address;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeMatchingAddresses.isNotEmpty) {
|
||||||
|
return typeMatchingAddresses.first.address;
|
||||||
|
}
|
||||||
|
|
||||||
|
return generateNewAddress().address;
|
||||||
}
|
}
|
||||||
|
|
||||||
return receiveAddress;
|
if (typeMatchingAddresses.isEmpty || typeMatchingReceiveAddresses.isEmpty) {
|
||||||
|
return generateNewAddress().address;
|
||||||
|
}
|
||||||
|
|
||||||
|
final prev = previousAddressRecord;
|
||||||
|
if (prev != null && prev.type == addressPageType && !prev.isUsed) {
|
||||||
|
return prev.address;
|
||||||
|
}
|
||||||
|
|
||||||
|
return typeMatchingReceiveAddresses.first.address;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
|
|
|
@ -130,8 +130,8 @@ abstract class MoneroWalletAddressesBase extends WalletAddresses with Store {
|
||||||
final transactions = _moneroTransactionHistory.transactions.values.toList();
|
final transactions = _moneroTransactionHistory.transactions.values.toList();
|
||||||
|
|
||||||
transactions.forEach((element) {
|
transactions.forEach((element) {
|
||||||
final accountIndex = element.accountIndex;
|
final accountIndex = element.additionalInfo['accountIndex'] as int? ?? 0;
|
||||||
final addressIndex = element.addressIndex;
|
final addressIndex = element.additionalInfo['addressIndex'] as int? ?? 0;
|
||||||
usedAddresses.add(getAddress(accountIndex: accountIndex, addressIndex: addressIndex));
|
usedAddresses.add(getAddress(accountIndex: accountIndex, addressIndex: addressIndex));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue