2021-12-24 12:37:24 +00:00
|
|
|
import 'package:cw_core/wallet_type.dart';
|
2020-07-06 20:09:03 +00:00
|
|
|
import 'package:mobx/mobx.dart';
|
|
|
|
import 'package:cake_wallet/generated/i18n.dart';
|
2021-12-24 12:37:24 +00:00
|
|
|
import 'package:cw_core/wallet_base.dart';
|
2020-07-06 20:09:03 +00:00
|
|
|
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
|
2021-12-30 17:20:00 +00:00
|
|
|
import 'package:cake_wallet/monero/monero.dart';
|
2022-03-30 15:57:04 +00:00
|
|
|
import 'package:cake_wallet/haven/haven.dart';
|
2023-03-15 15:30:06 +00:00
|
|
|
import 'package:cw_monero/api/wallet.dart' as monero_wallet;
|
2020-07-06 20:09:03 +00:00
|
|
|
|
|
|
|
part 'wallet_keys_view_model.g.dart';
|
|
|
|
|
|
|
|
class WalletKeysViewModel = WalletKeysViewModelBase with _$WalletKeysViewModel;
|
|
|
|
|
|
|
|
abstract class WalletKeysViewModelBase with Store {
|
|
|
|
WalletKeysViewModelBase(WalletBase wallet)
|
2023-01-13 18:47:02 +00:00
|
|
|
: title = wallet.type == WalletType.bitcoin ||
|
|
|
|
wallet.type == WalletType.litecoin ||
|
|
|
|
wallet.type == WalletType.ethereum
|
2022-06-23 13:36:50 +00:00
|
|
|
? S.current.wallet_seed
|
|
|
|
: S.current.wallet_keys,
|
2023-03-15 15:30:06 +00:00
|
|
|
_wallet = wallet,
|
|
|
|
_restoreHeight = wallet.walletInfo.restoreHeight,
|
2022-06-23 13:36:50 +00:00
|
|
|
items = ObservableList<StandartListItem>() {
|
2021-12-24 12:37:24 +00:00
|
|
|
if (wallet.type == WalletType.monero) {
|
2022-10-12 17:09:57 +00:00
|
|
|
final keys = monero!.getKeys(wallet);
|
2021-12-30 17:20:00 +00:00
|
|
|
items.addAll([
|
2022-10-12 17:09:57 +00:00
|
|
|
if (keys['publicSpendKey'] != null)
|
|
|
|
StandartListItem(title: S.current.spend_key_public, value: keys['publicSpendKey']!),
|
|
|
|
if (keys['privateSpendKey'] != null)
|
|
|
|
StandartListItem(title: S.current.spend_key_private, value: keys['privateSpendKey']!),
|
|
|
|
if (keys['publicViewKey'] != null)
|
|
|
|
StandartListItem(title: S.current.view_key_public, value: keys['publicViewKey']!),
|
|
|
|
if (keys['privateViewKey'] != null)
|
|
|
|
StandartListItem(title: S.current.view_key_private, value: keys['privateViewKey']!),
|
2022-03-30 15:57:04 +00:00
|
|
|
StandartListItem(title: S.current.wallet_seed, value: wallet.seed),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (wallet.type == WalletType.haven) {
|
2022-10-12 17:09:57 +00:00
|
|
|
final keys = haven!.getKeys(wallet);
|
2022-03-30 15:57:04 +00:00
|
|
|
items.addAll([
|
2022-10-12 17:09:57 +00:00
|
|
|
if (keys['publicSpendKey'] != null)
|
|
|
|
StandartListItem(title: S.current.spend_key_public, value: keys['publicSpendKey']!),
|
|
|
|
if (keys['privateSpendKey'] != null)
|
|
|
|
StandartListItem(title: S.current.spend_key_private, value: keys['privateSpendKey']!),
|
|
|
|
if (keys['publicViewKey'] != null)
|
|
|
|
StandartListItem(title: S.current.view_key_public, value: keys['publicViewKey']!),
|
|
|
|
if (keys['privateViewKey'] != null)
|
|
|
|
StandartListItem(title: S.current.view_key_private, value: keys['privateViewKey']!),
|
2021-12-30 17:20:00 +00:00
|
|
|
StandartListItem(title: S.current.wallet_seed, value: wallet.seed),
|
|
|
|
]);
|
2020-07-06 20:09:03 +00:00
|
|
|
}
|
|
|
|
|
2023-01-13 18:47:02 +00:00
|
|
|
if (wallet.type == WalletType.bitcoin ||
|
|
|
|
wallet.type == WalletType.litecoin ||
|
|
|
|
wallet.type == WalletType.ethereum) {
|
2020-07-06 20:09:03 +00:00
|
|
|
items.addAll([
|
2022-06-23 13:36:50 +00:00
|
|
|
StandartListItem(title: S.current.wallet_seed, value: wallet.seed),
|
2020-07-06 20:09:03 +00:00
|
|
|
]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
final ObservableList<StandartListItem> items;
|
2022-06-23 13:36:50 +00:00
|
|
|
|
|
|
|
final String title;
|
2023-03-15 15:30:06 +00:00
|
|
|
|
|
|
|
final WalletBase _wallet;
|
|
|
|
|
|
|
|
final int _restoreHeight;
|
|
|
|
|
|
|
|
Future<int?> currentHeight() async {
|
|
|
|
if (_wallet.type == WalletType.haven) {
|
|
|
|
return await haven!.getCurrentHeight();
|
|
|
|
}
|
|
|
|
if (_wallet.type == WalletType.monero) {
|
|
|
|
return monero_wallet.getCurrentHeight();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
String get _path {
|
|
|
|
switch (_wallet.type) {
|
|
|
|
case WalletType.monero:
|
|
|
|
return 'monero_wallet:';
|
|
|
|
case WalletType.bitcoin:
|
|
|
|
return 'bitcoin_wallet:';
|
|
|
|
case WalletType.litecoin:
|
|
|
|
return 'litecoin_wallet:';
|
|
|
|
case WalletType.haven:
|
|
|
|
return 'haven_wallet:';
|
|
|
|
default:
|
|
|
|
throw Exception('Unexpected wallet type: ${_wallet.toString()}');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<String?> get restoreHeight async {
|
|
|
|
if (_restoreHeight != 0) {
|
|
|
|
return _restoreHeight.toString();
|
|
|
|
}
|
|
|
|
final _currentHeight = await currentHeight();
|
|
|
|
if (_currentHeight == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return ((_currentHeight / 1000).floor() * 1000).toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<Map<String, String>> get _queryParams async {
|
|
|
|
final restoreHeightResult = await restoreHeight;
|
|
|
|
return {
|
|
|
|
'seed': _wallet.seed,
|
|
|
|
if (restoreHeightResult != null) ...{'height': restoreHeightResult}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<Uri> get url async {
|
|
|
|
return Uri(
|
|
|
|
path: _path,
|
|
|
|
queryParameters: await _queryParams,
|
|
|
|
);
|
|
|
|
}
|
2020-07-06 20:09:03 +00:00
|
|
|
}
|