mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
* feat: initial hive -> SQLite Includes migration script and initial work done to remove dependency on hive generators. Also contains some refactoring to make sync code async. Features new dev screen that lists all SQLite tables Aspects that need testing: - backups (from this version, and from previous versions as well) - wallet loading / wallet list - almost everything else - renaming - deletion - sorting in wallet list - wallet groups - wallet seed/keys - wallet switching - wallet creation / restore - all methods - wallet address page - hardware wallet connection (and prompts from mall screens) - contacts - advanced settings in wallet creation - derivation paths - some minor wownero fixes - base, hardware wallets * fix: build errors * fix: Bad state: No element in backup restore * address comments from review * fix: HardwareWalletType
69 lines
2.3 KiB
Dart
69 lines
2.3 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:cw_core/pathForWallet.dart';
|
|
import 'package:cw_core/utils/file.dart';
|
|
import 'package:cw_core/wallet_base.dart';
|
|
import 'package:cw_core/wallet_credentials.dart';
|
|
import 'package:cw_core/wallet_type.dart';
|
|
|
|
abstract class WalletService<N extends WalletCredentials, RFS extends WalletCredentials,
|
|
RFK extends WalletCredentials, RFH extends WalletCredentials> {
|
|
WalletType getType();
|
|
|
|
Future<WalletBase> create(N credentials, {bool? isTestnet});
|
|
|
|
Future<WalletBase> restoreFromHardwareWallet(RFH credentials);
|
|
|
|
Future<WalletBase> restoreFromSeed(RFS credentials, {bool? isTestnet});
|
|
|
|
Future<WalletBase> restoreFromKeys(RFK credentials, {bool? isTestnet});
|
|
|
|
Future<WalletBase> openWallet(String name, String password);
|
|
|
|
Future<bool> isWalletExit(String name);
|
|
|
|
Future<void> remove(String wallet);
|
|
|
|
Future<void> rename(String currentName, String password, String newName);
|
|
|
|
Future<void> restoreWalletFilesFromBackup(String name) async {
|
|
final backupWalletDirPath = await pathForWalletDir(name: "$name.backup", type: getType());
|
|
final walletDirPath = await pathForWalletDir(name: name, type: getType());
|
|
|
|
if (File(backupWalletDirPath).existsSync()) {
|
|
await File(backupWalletDirPath).copy(walletDirPath);
|
|
}
|
|
}
|
|
|
|
Future<void> saveBackup(String name) async {
|
|
final backupWalletDirPath = await pathForWalletDir(name: "$name.backup", type: getType());
|
|
final walletDirPath = await pathForWalletDir(name: name, type: getType());
|
|
|
|
if (File(walletDirPath).existsSync()) {
|
|
await File(walletDirPath).copy(backupWalletDirPath);
|
|
}
|
|
}
|
|
|
|
Future<String> getSeeds(String name, String password, WalletType type) async {
|
|
try {
|
|
final path = await pathForWallet(name: name, type: type);
|
|
final jsonSource = await read(path: path, password: password);
|
|
try {
|
|
final data = json.decode(jsonSource) as Map;
|
|
return data['mnemonic'] as String? ?? '';
|
|
} catch (_) {
|
|
// if not a valid json
|
|
return jsonSource.substring(0, 200);
|
|
}
|
|
} catch (_) {
|
|
// if the file couldn't be opened or read
|
|
return '';
|
|
}
|
|
}
|
|
|
|
/// Check if the Wallet requires a hardware wallet to be connected during
|
|
/// the opening flow. (Currently only the case for Monero)
|
|
Future<bool> requireHardwareWalletConnection(String name) async => false;
|
|
}
|