mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 19:49:22 +00:00
f8b0c0ad2a
* subaddress fix * fix subaddress generation * rewrite usedAddresses for xmr and wow * [skip ci] remove print statements * refactor address handling * do not remove manual addresses, just mark them * monero display latest address on receive page when autogenerate is enabled [skip ci] * WIP subaddresses, hidden addresses, and UI improvements for monero * update configure script * fix subaddress generation, display latest address * Update lib/core/wallet_loading_service.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * Exclude manually created addresses Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * don't call .save function multiple times Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * - revert usedAddress functinality - add mutex to prevent crashes - fix UI flashing in tx screen - fixes from comments * account index fixes added code to wownero code comment * - added subaddress index - fixed received count also accounting for change (we don't want that) - fix bad state: no element - fix search - fix automatic generation * prevent crashes by acquiring mutex before setting the pointer * - fix ttDetails generation in larger/restored wallets - show manual add icon in monero/wownero even when autogeneration is enabled - disable colors on non-debug builds - cache getAddress call in xmr/wow [skip ci] * fix: silent payment error in address setter enable fancy new features only for xmr / wow * refresh subaddress list, when we add new address fix manual addresses marking * add toggle to hide and show address * update transaction details after restore * show only one address in address book for xmr, wow and haven * fix address book reset address only when autogenerate is on * enable isEnabledAutoGenerateSubaddress on new wallets * hide addresses after exchange only for XMR and WOW * fix: bad-state no element * Update cw_monero/lib/monero_wallet_addresses.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * Update cw_monero/lib/monero_wallet_addresses.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * improvements to performance * 0, 0 -> accountIndex, addressIndex * make constant variables final * Update cw_wownero/lib/wownero_wallet_addresses.dart [skip ci] * Update cw_wownero/lib/wownero_wallet_addresses.dart [skip ci] * Update cw_monero/lib/monero_wallet.dart [skip ci] * fix potential exception * fix after removing late * remove orElse, replaced it with a try catch block. fix strings * fix valid seed function * fix null check error [skip ci] * fix updateSubaddressList for wow and haven --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
93 lines
2.5 KiB
Dart
93 lines
2.5 KiB
Dart
import 'package:cw_core/wallet_addresses_with_account.dart';
|
|
import 'package:cw_core/wallet_info.dart';
|
|
import 'package:cw_core/account.dart';
|
|
import 'package:cw_haven/api/wallet.dart';
|
|
import 'package:cw_haven/haven_account_list.dart';
|
|
import 'package:cw_haven/haven_subaddress_list.dart';
|
|
import 'package:cw_core/subaddress.dart';
|
|
import 'package:mobx/mobx.dart';
|
|
|
|
part 'haven_wallet_addresses.g.dart';
|
|
|
|
class HavenWalletAddresses = HavenWalletAddressesBase
|
|
with _$HavenWalletAddresses;
|
|
|
|
abstract class HavenWalletAddressesBase extends WalletAddressesWithAccount<Account> with Store {
|
|
HavenWalletAddressesBase(WalletInfo walletInfo)
|
|
: accountList = HavenAccountList(),
|
|
subaddressList = HavenSubaddressList(),
|
|
address = '',
|
|
super(walletInfo);
|
|
|
|
@override
|
|
@observable
|
|
String address;
|
|
|
|
// @override
|
|
@observable
|
|
Account? account;
|
|
|
|
@observable
|
|
Subaddress? subaddress;
|
|
|
|
HavenSubaddressList subaddressList;
|
|
|
|
HavenAccountList accountList;
|
|
|
|
@override
|
|
Future<void> init() async {
|
|
accountList.update();
|
|
account = accountList.accounts.isEmpty ? Account(id: 0, label: "Primary address") : accountList.accounts.first;
|
|
updateSubaddressList(accountIndex: account?.id ?? 0);
|
|
await updateAddressesInBox();
|
|
}
|
|
|
|
@override
|
|
Future<void> updateAddressesInBox() async {
|
|
try {
|
|
final _subaddressList = HavenSubaddressList();
|
|
|
|
addressesMap.clear();
|
|
|
|
accountList.accounts.forEach((account) {
|
|
_subaddressList.update(accountIndex: account.id);
|
|
_subaddressList.subaddresses.forEach((subaddress) {
|
|
addressesMap[subaddress.address] = subaddress.label;
|
|
});
|
|
});
|
|
|
|
await saveAddressesInBox();
|
|
} catch (e) {
|
|
print(e.toString());
|
|
}
|
|
}
|
|
|
|
bool validate() {
|
|
accountList.update();
|
|
final accountListLength = accountList.accounts.length;
|
|
|
|
if (accountListLength <= 0) {
|
|
return false;
|
|
}
|
|
|
|
subaddressList.update(accountIndex: accountList.accounts.first.id);
|
|
final subaddressListLength = subaddressList.subaddresses.length;
|
|
|
|
if (subaddressListLength <= 0) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void updateSubaddressList({required int accountIndex}) {
|
|
subaddressList.update(accountIndex: accountIndex);
|
|
address = subaddressList.subaddresses.isNotEmpty
|
|
? subaddressList.subaddresses.first.address
|
|
: getAddress();
|
|
}
|
|
|
|
@override
|
|
bool containsAddress(String address) =>
|
|
addressInfos[account?.id ?? 0]?.any((it) => it.address == address) ?? false;
|
|
}
|