mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-29 04:49:51 +00:00
Revert removing isTestnet from other wallets [skip ci]
This commit is contained in:
parent
1434e5afbf
commit
8cd1693b6b
12 changed files with 84 additions and 113 deletions
|
@ -12,8 +12,10 @@ import 'package:cw_core/wallet_info.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
|
||||||
class LitecoinWalletService extends WalletService<BitcoinNewWalletCredentials,
|
class LitecoinWalletService extends WalletService<
|
||||||
BitcoinRestoreWalletFromSeedCredentials, BitcoinRestoreWalletFromWIFCredentials> {
|
BitcoinNewWalletCredentials,
|
||||||
|
BitcoinRestoreWalletFromSeedCredentials,
|
||||||
|
BitcoinRestoreWalletFromWIFCredentials> {
|
||||||
LitecoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource);
|
LitecoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource);
|
||||||
|
|
||||||
final Box<WalletInfo> walletInfoSource;
|
final Box<WalletInfo> walletInfoSource;
|
||||||
|
@ -23,7 +25,7 @@ class LitecoinWalletService extends WalletService<BitcoinNewWalletCredentials,
|
||||||
WalletType getType() => WalletType.litecoin;
|
WalletType getType() => WalletType.litecoin;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<LitecoinWallet> create(BitcoinNewWalletCredentials credentials) async {
|
Future<LitecoinWallet> create(BitcoinNewWalletCredentials credentials, {bool? isTestnet}) async {
|
||||||
final wallet = await LitecoinWalletBase.create(
|
final wallet = await LitecoinWalletBase.create(
|
||||||
mnemonic: await generateMnemonic(),
|
mnemonic: await generateMnemonic(),
|
||||||
password: credentials.password!,
|
password: credentials.password!,
|
||||||
|
@ -41,14 +43,12 @@ class LitecoinWalletService extends WalletService<BitcoinNewWalletCredentials,
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<LitecoinWallet> openWallet(String name, String password) async {
|
Future<LitecoinWallet> openWallet(String name, String password) async {
|
||||||
final walletInfo = walletInfoSource.values
|
final walletInfo = walletInfoSource.values.firstWhereOrNull(
|
||||||
.firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!;
|
(info) => info.id == WalletBase.idFor(name, getType()))!;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final wallet = await LitecoinWalletBase.open(
|
final wallet = await LitecoinWalletBase.open(
|
||||||
password: password,
|
password: password, name: name, walletInfo: walletInfo,
|
||||||
name: name,
|
|
||||||
walletInfo: walletInfo,
|
|
||||||
unspentCoinsInfo: unspentCoinsInfoSource);
|
unspentCoinsInfo: unspentCoinsInfoSource);
|
||||||
await wallet.init();
|
await wallet.init();
|
||||||
saveBackup(name);
|
saveBackup(name);
|
||||||
|
@ -56,9 +56,7 @@ class LitecoinWalletService extends WalletService<BitcoinNewWalletCredentials,
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
await restoreWalletFilesFromBackup(name);
|
await restoreWalletFilesFromBackup(name);
|
||||||
final wallet = await LitecoinWalletBase.open(
|
final wallet = await LitecoinWalletBase.open(
|
||||||
password: password,
|
password: password, name: name, walletInfo: walletInfo,
|
||||||
name: name,
|
|
||||||
walletInfo: walletInfo,
|
|
||||||
unspentCoinsInfo: unspentCoinsInfoSource);
|
unspentCoinsInfo: unspentCoinsInfoSource);
|
||||||
await wallet.init();
|
await wallet.init();
|
||||||
return wallet;
|
return wallet;
|
||||||
|
@ -67,16 +65,17 @@ class LitecoinWalletService extends WalletService<BitcoinNewWalletCredentials,
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> remove(String wallet) async {
|
Future<void> remove(String wallet) async {
|
||||||
File(await pathForWalletDir(name: wallet, type: getType())).delete(recursive: true);
|
File(await pathForWalletDir(name: wallet, type: getType()))
|
||||||
final walletInfo = walletInfoSource.values
|
.delete(recursive: true);
|
||||||
.firstWhereOrNull((info) => info.id == WalletBase.idFor(wallet, getType()))!;
|
final walletInfo = walletInfoSource.values.firstWhereOrNull(
|
||||||
|
(info) => info.id == WalletBase.idFor(wallet, getType()))!;
|
||||||
await walletInfoSource.delete(walletInfo.key);
|
await walletInfoSource.delete(walletInfo.key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> rename(String currentName, String password, String newName) async {
|
Future<void> rename(String currentName, String password, String newName) async {
|
||||||
final currentWalletInfo = walletInfoSource.values
|
final currentWalletInfo = walletInfoSource.values.firstWhereOrNull(
|
||||||
.firstWhereOrNull((info) => info.id == WalletBase.idFor(currentName, getType()))!;
|
(info) => info.id == WalletBase.idFor(currentName, getType()))!;
|
||||||
final currentWallet = await LitecoinWalletBase.open(
|
final currentWallet = await LitecoinWalletBase.open(
|
||||||
password: password,
|
password: password,
|
||||||
name: currentName,
|
name: currentName,
|
||||||
|
@ -95,12 +94,12 @@ class LitecoinWalletService extends WalletService<BitcoinNewWalletCredentials,
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<LitecoinWallet> restoreFromKeys(
|
Future<LitecoinWallet> restoreFromKeys(
|
||||||
BitcoinRestoreWalletFromWIFCredentials credentials) async =>
|
BitcoinRestoreWalletFromWIFCredentials credentials, {bool? isTestnet}) async =>
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<LitecoinWallet> restoreFromSeed(
|
Future<LitecoinWallet> restoreFromSeed(
|
||||||
BitcoinRestoreWalletFromSeedCredentials credentials) async {
|
BitcoinRestoreWalletFromSeedCredentials credentials, {bool? isTestnet}) async {
|
||||||
if (!validateMnemonic(credentials.mnemonic)) {
|
if (!validateMnemonic(credentials.mnemonic)) {
|
||||||
throw BitcoinMnemonicIsIncorrectException();
|
throw BitcoinMnemonicIsIncorrectException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,7 @@ import 'dart:io';
|
||||||
|
|
||||||
import 'package:bip39/bip39.dart';
|
import 'package:bip39/bip39.dart';
|
||||||
import 'package:cw_bitcoin_cash/cw_bitcoin_cash.dart';
|
import 'package:cw_bitcoin_cash/cw_bitcoin_cash.dart';
|
||||||
import 'package:cw_core/balance.dart';
|
|
||||||
import 'package:cw_core/pathForWallet.dart';
|
import 'package:cw_core/pathForWallet.dart';
|
||||||
import 'package:cw_core/transaction_history.dart';
|
|
||||||
import 'package:cw_core/transaction_info.dart';
|
|
||||||
import 'package:cw_core/unspent_coins_info.dart';
|
import 'package:cw_core/unspent_coins_info.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
import 'package:cw_core/wallet_info.dart';
|
import 'package:cw_core/wallet_info.dart';
|
||||||
|
@ -29,12 +26,9 @@ class BitcoinCashWalletService extends WalletService<BitcoinCashNewWalletCredent
|
||||||
File(await pathForWallet(name: name, type: getType())).existsSync();
|
File(await pathForWallet(name: name, type: getType())).existsSync();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<BitcoinCashWallet> create(credentials) async {
|
Future<BitcoinCashWallet> create(credentials, {bool? isTestnet}) async {
|
||||||
final strength = (credentials.seedPhraseLength == 12)
|
final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
|
||||||
? 128
|
|
||||||
: (credentials.seedPhraseLength == 24)
|
|
||||||
? 256
|
|
||||||
: 128;
|
|
||||||
final wallet = await BitcoinCashWalletBase.create(
|
final wallet = await BitcoinCashWalletBase.create(
|
||||||
mnemonic: await Mnemonic.generate(strength: strength),
|
mnemonic: await Mnemonic.generate(strength: strength),
|
||||||
password: credentials.password!,
|
password: credentials.password!,
|
||||||
|
@ -100,14 +94,14 @@ class BitcoinCashWalletService extends WalletService<BitcoinCashNewWalletCredent
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<BitcoinCashWallet> restoreFromKeys(credentials) {
|
Future<BitcoinCashWallet> restoreFromKeys(credentials, {bool? isTestnet}) {
|
||||||
// TODO: implement restoreFromKeys
|
// TODO: implement restoreFromKeys
|
||||||
throw UnimplementedError('restoreFromKeys() is not implemented');
|
throw UnimplementedError('restoreFromKeys() is not implemented');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<BitcoinCashWallet> restoreFromSeed(
|
Future<BitcoinCashWallet> restoreFromSeed(BitcoinCashRestoreWalletFromSeedCredentials credentials,
|
||||||
BitcoinCashRestoreWalletFromSeedCredentials credentials) async {
|
{bool? isTestnet}) async {
|
||||||
if (!validateMnemonic(credentials.mnemonic)) {
|
if (!validateMnemonic(credentials.mnemonic)) {
|
||||||
throw BitcoinCashMnemonicIsIncorrectException();
|
throw BitcoinCashMnemonicIsIncorrectException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,11 +9,11 @@ abstract class WalletService<N extends WalletCredentials, RFS extends WalletCred
|
||||||
RFK extends WalletCredentials> {
|
RFK extends WalletCredentials> {
|
||||||
WalletType getType();
|
WalletType getType();
|
||||||
|
|
||||||
Future<WalletBase> create(N credentials);
|
Future<WalletBase> create(N credentials, {bool? isTestnet});
|
||||||
|
|
||||||
Future<WalletBase> restoreFromSeed(RFS credentials);
|
Future<WalletBase> restoreFromSeed(RFS credentials, {bool? isTestnet});
|
||||||
|
|
||||||
Future<WalletBase> restoreFromKeys(RFK credentials);
|
Future<WalletBase> restoreFromKeys(RFK credentials, {bool? isTestnet});
|
||||||
|
|
||||||
Future<WalletBase> openWallet(String name, String password);
|
Future<WalletBase> openWallet(String name, String password);
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ class EthereumWalletService extends EVMChainWalletService<EthereumWallet> {
|
||||||
WalletType getType() => WalletType.ethereum;
|
WalletType getType() => WalletType.ethereum;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<EthereumWallet> create(EVMChainNewWalletCredentials credentials) async {
|
Future<EthereumWallet> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet}) async {
|
||||||
final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
|
final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
|
||||||
|
|
||||||
final mnemonic = bip39.generateMnemonic(strength: strength);
|
final mnemonic = bip39.generateMnemonic(strength: strength);
|
||||||
|
@ -83,7 +83,8 @@ class EthereumWalletService extends EVMChainWalletService<EthereumWallet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<EthereumWallet> restoreFromKeys(EVMChainRestoreWalletFromPrivateKey credentials) async {
|
Future<EthereumWallet> restoreFromKeys(EVMChainRestoreWalletFromPrivateKey credentials,
|
||||||
|
{bool? isTestnet}) async {
|
||||||
final wallet = EthereumWallet(
|
final wallet = EthereumWallet(
|
||||||
password: credentials.password!,
|
password: credentials.password!,
|
||||||
privateKey: credentials.privateKey,
|
privateKey: credentials.privateKey,
|
||||||
|
@ -99,8 +100,8 @@ class EthereumWalletService extends EVMChainWalletService<EthereumWallet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<EthereumWallet> restoreFromSeed(
|
Future<EthereumWallet> restoreFromSeed(EVMChainRestoreWalletFromSeedCredentials credentials,
|
||||||
EVMChainRestoreWalletFromSeedCredentials credentials) async {
|
{bool? isTestnet}) async {
|
||||||
if (!bip39.validateMnemonic(credentials.mnemonic)) {
|
if (!bip39.validateMnemonic(credentials.mnemonic)) {
|
||||||
throw EthereumMnemonicIsIncorrectException();
|
throw EthereumMnemonicIsIncorrectException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ abstract class EVMChainWalletService<T extends EVMChainWallet> extends WalletSer
|
||||||
WalletType getType();
|
WalletType getType();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<T> create(EVMChainNewWalletCredentials credentials);
|
Future<T> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<T> openWallet(String name, String password);
|
Future<T> openWallet(String name, String password);
|
||||||
|
@ -31,10 +31,10 @@ abstract class EVMChainWalletService<T extends EVMChainWallet> extends WalletSer
|
||||||
Future<void> rename(String currentName, String password, String newName);
|
Future<void> rename(String currentName, String password, String newName);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<T> restoreFromKeys(EVMChainRestoreWalletFromPrivateKey credentials);
|
Future<T> restoreFromKeys(EVMChainRestoreWalletFromPrivateKey credentials, {bool? isTestnet});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<T> restoreFromSeed(EVMChainRestoreWalletFromSeedCredentials credentials);
|
Future<T> restoreFromSeed(EVMChainRestoreWalletFromSeedCredentials credentials, {bool? isTestnet});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> isWalletExit(String name) async =>
|
Future<bool> isWalletExit(String name) async =>
|
||||||
|
|
|
@ -22,7 +22,10 @@ class HavenNewWalletCredentials extends WalletCredentials {
|
||||||
|
|
||||||
class HavenRestoreWalletFromSeedCredentials extends WalletCredentials {
|
class HavenRestoreWalletFromSeedCredentials extends WalletCredentials {
|
||||||
HavenRestoreWalletFromSeedCredentials(
|
HavenRestoreWalletFromSeedCredentials(
|
||||||
{required String name, required String password, required int height, required this.mnemonic})
|
{required String name,
|
||||||
|
required String password,
|
||||||
|
required int height,
|
||||||
|
required this.mnemonic})
|
||||||
: super(name: name, password: password, height: height);
|
: super(name: name, password: password, height: height);
|
||||||
|
|
||||||
final String mnemonic;
|
final String mnemonic;
|
||||||
|
@ -50,12 +53,14 @@ class HavenRestoreWalletFromKeysCredentials extends WalletCredentials {
|
||||||
final String spendKey;
|
final String spendKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
class HavenWalletService extends WalletService<
|
||||||
HavenRestoreWalletFromSeedCredentials, HavenRestoreWalletFromKeysCredentials> {
|
HavenNewWalletCredentials,
|
||||||
|
HavenRestoreWalletFromSeedCredentials,
|
||||||
|
HavenRestoreWalletFromKeysCredentials> {
|
||||||
HavenWalletService(this.walletInfoSource);
|
HavenWalletService(this.walletInfoSource);
|
||||||
|
|
||||||
final Box<WalletInfo> walletInfoSource;
|
final Box<WalletInfo> walletInfoSource;
|
||||||
|
|
||||||
static bool walletFilesExist(String path) =>
|
static bool walletFilesExist(String path) =>
|
||||||
!File(path).existsSync() && !File('$path.keys').existsSync();
|
!File(path).existsSync() && !File('$path.keys').existsSync();
|
||||||
|
|
||||||
|
@ -63,11 +68,13 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
WalletType getType() => WalletType.haven;
|
WalletType getType() => WalletType.haven;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<HavenWallet> create(HavenNewWalletCredentials credentials) async {
|
Future<HavenWallet> create(HavenNewWalletCredentials credentials, {bool? isTestnet}) async {
|
||||||
try {
|
try {
|
||||||
final path = await pathForWallet(name: credentials.name, type: getType());
|
final path = await pathForWallet(name: credentials.name, type: getType());
|
||||||
await haven_wallet_manager.createWallet(
|
await haven_wallet_manager.createWallet(
|
||||||
path: path, password: credentials.password!, language: credentials.language);
|
path: path,
|
||||||
|
password: credentials.password!,
|
||||||
|
language: credentials.language);
|
||||||
final wallet = HavenWallet(walletInfo: credentials.walletInfo!);
|
final wallet = HavenWallet(walletInfo: credentials.walletInfo!);
|
||||||
await wallet.init();
|
await wallet.init();
|
||||||
return wallet;
|
return wallet;
|
||||||
|
@ -99,9 +106,10 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
await repairOldAndroidWallet(name);
|
await repairOldAndroidWallet(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
await haven_wallet_manager.openWalletAsync({'path': path, 'password': password});
|
await haven_wallet_manager
|
||||||
final walletInfo = walletInfoSource.values
|
.openWalletAsync({'path': path, 'password': password});
|
||||||
.firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!;
|
final walletInfo = walletInfoSource.values.firstWhereOrNull(
|
||||||
|
(info) => info.id == WalletBase.idFor(name, getType()))!;
|
||||||
final wallet = HavenWallet(walletInfo: walletInfo);
|
final wallet = HavenWallet(walletInfo: walletInfo);
|
||||||
final isValid = wallet.walletAddresses.validate();
|
final isValid = wallet.walletAddresses.validate();
|
||||||
|
|
||||||
|
@ -118,10 +126,12 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
// TODO: Implement Exception for wallet list service.
|
// TODO: Implement Exception for wallet list service.
|
||||||
|
|
||||||
if ((e.toString().contains('bad_alloc') ||
|
if ((e.toString().contains('bad_alloc') ||
|
||||||
(e is WalletOpeningException &&
|
(e is WalletOpeningException &&
|
||||||
(e.message == 'std::bad_alloc' || e.message.contains('bad_alloc')))) ||
|
(e.message == 'std::bad_alloc' ||
|
||||||
|
e.message.contains('bad_alloc')))) ||
|
||||||
(e.toString().contains('does not correspond') ||
|
(e.toString().contains('does not correspond') ||
|
||||||
(e is WalletOpeningException && e.message.contains('does not correspond')))) {
|
(e is WalletOpeningException &&
|
||||||
|
e.message.contains('does not correspond')))) {
|
||||||
await restoreOrResetWalletFiles(name);
|
await restoreOrResetWalletFiles(name);
|
||||||
return openWallet(name, password);
|
return openWallet(name, password);
|
||||||
}
|
}
|
||||||
|
@ -146,9 +156,10 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> rename(String currentName, String password, String newName) async {
|
Future<void> rename(
|
||||||
final currentWalletInfo = walletInfoSource.values
|
String currentName, String password, String newName) async {
|
||||||
.firstWhere((info) => info.id == WalletBase.idFor(currentName, getType()));
|
final currentWalletInfo = walletInfoSource.values.firstWhere(
|
||||||
|
(info) => info.id == WalletBase.idFor(currentName, getType()));
|
||||||
final currentWallet = HavenWallet(walletInfo: currentWalletInfo);
|
final currentWallet = HavenWallet(walletInfo: currentWalletInfo);
|
||||||
|
|
||||||
await currentWallet.renameWalletFiles(newName);
|
await currentWallet.renameWalletFiles(newName);
|
||||||
|
@ -162,7 +173,8 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<HavenWallet> restoreFromKeys(HavenRestoreWalletFromKeysCredentials credentials) async {
|
Future<HavenWallet> restoreFromKeys(
|
||||||
|
HavenRestoreWalletFromKeysCredentials credentials, {bool? isTestnet}) async {
|
||||||
try {
|
try {
|
||||||
final path = await pathForWallet(name: credentials.name, type: getType());
|
final path = await pathForWallet(name: credentials.name, type: getType());
|
||||||
await haven_wallet_manager.restoreFromKeys(
|
await haven_wallet_manager.restoreFromKeys(
|
||||||
|
@ -185,7 +197,8 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<HavenWallet> restoreFromSeed(HavenRestoreWalletFromSeedCredentials credentials) async {
|
Future<HavenWallet> restoreFromSeed(
|
||||||
|
HavenRestoreWalletFromSeedCredentials credentials, {bool? isTestnet}) async {
|
||||||
try {
|
try {
|
||||||
final path = await pathForWallet(name: credentials.name, type: getType());
|
final path = await pathForWallet(name: credentials.name, type: getType());
|
||||||
await haven_wallet_manager.restoreFromSeed(
|
await haven_wallet_manager.restoreFromSeed(
|
||||||
|
@ -210,14 +223,16 @@ class HavenWalletService extends WalletService<HavenNewWalletCredentials,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final oldAndroidWalletDirPath = await outdatedAndroidPathForWalletDir(name: name);
|
final oldAndroidWalletDirPath =
|
||||||
|
await outdatedAndroidPathForWalletDir(name: name);
|
||||||
final dir = Directory(oldAndroidWalletDirPath);
|
final dir = Directory(oldAndroidWalletDirPath);
|
||||||
|
|
||||||
if (!dir.existsSync()) {
|
if (!dir.existsSync()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final newWalletDirPath = await pathForWalletDir(name: name, type: getType());
|
final newWalletDirPath =
|
||||||
|
await pathForWalletDir(name: name, type: getType());
|
||||||
|
|
||||||
dir.listSync().forEach((f) {
|
dir.listSync().forEach((f) {
|
||||||
final file = File(f.path);
|
final file = File(f.path);
|
||||||
|
|
|
@ -68,7 +68,7 @@ class MoneroWalletService extends WalletService<MoneroNewWalletCredentials,
|
||||||
WalletType getType() => WalletType.monero;
|
WalletType getType() => WalletType.monero;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MoneroWallet> create(MoneroNewWalletCredentials credentials) async {
|
Future<MoneroWallet> create(MoneroNewWalletCredentials credentials, {bool? isTestnet}) async {
|
||||||
try {
|
try {
|
||||||
final path = await pathForWallet(name: credentials.name, type: getType());
|
final path = await pathForWallet(name: credentials.name, type: getType());
|
||||||
|
|
||||||
|
@ -203,7 +203,8 @@ class MoneroWalletService extends WalletService<MoneroNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MoneroWallet> restoreFromKeys(MoneroRestoreWalletFromKeysCredentials credentials) async {
|
Future<MoneroWallet> restoreFromKeys(MoneroRestoreWalletFromKeysCredentials credentials,
|
||||||
|
{bool? isTestnet}) async {
|
||||||
try {
|
try {
|
||||||
final path = await pathForWallet(name: credentials.name, type: getType());
|
final path = await pathForWallet(name: credentials.name, type: getType());
|
||||||
await monero_wallet_manager.restoreFromKeys(
|
await monero_wallet_manager.restoreFromKeys(
|
||||||
|
@ -227,7 +228,8 @@ class MoneroWalletService extends WalletService<MoneroNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MoneroWallet> restoreFromSeed(MoneroRestoreWalletFromSeedCredentials credentials) async {
|
Future<MoneroWallet> restoreFromSeed(MoneroRestoreWalletFromSeedCredentials credentials,
|
||||||
|
{bool? isTestnet}) async {
|
||||||
// Restore from Polyseed
|
// Restore from Polyseed
|
||||||
if (Polyseed.isValidSeed(credentials.mnemonic)) {
|
if (Polyseed.isValidSeed(credentials.mnemonic)) {
|
||||||
return restoreFromPolyseed(credentials);
|
return restoreFromPolyseed(credentials);
|
||||||
|
|
|
@ -26,7 +26,7 @@ class NanoWalletService extends WalletService<NanoNewWalletCredentials,
|
||||||
WalletType getType() => WalletType.nano;
|
WalletType getType() => WalletType.nano;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<WalletBase> create(NanoNewWalletCredentials credentials) async {
|
Future<WalletBase> create(NanoNewWalletCredentials credentials, {bool? isTestnet}) async {
|
||||||
// nano standard:
|
// nano standard:
|
||||||
DerivationType derivationType = DerivationType.nano;
|
DerivationType derivationType = DerivationType.nano;
|
||||||
String seedKey = NanoSeeds.generateSeed();
|
String seedKey = NanoSeeds.generateSeed();
|
||||||
|
@ -79,7 +79,7 @@ class NanoWalletService extends WalletService<NanoNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<NanoWallet> restoreFromKeys(NanoRestoreWalletFromKeysCredentials credentials) async {
|
Future<NanoWallet> restoreFromKeys(NanoRestoreWalletFromKeysCredentials credentials, {bool? isTestnet}) async {
|
||||||
if (credentials.seedKey.contains(' ')) {
|
if (credentials.seedKey.contains(' ')) {
|
||||||
throw Exception("Invalid key!");
|
throw Exception("Invalid key!");
|
||||||
} else {
|
} else {
|
||||||
|
@ -113,7 +113,7 @@ class NanoWalletService extends WalletService<NanoNewWalletCredentials,
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<NanoWallet> restoreFromSeed(NanoRestoreWalletFromSeedCredentials credentials) async {
|
Future<NanoWallet> restoreFromSeed(NanoRestoreWalletFromSeedCredentials credentials, {bool? isTestnet}) async {
|
||||||
if (credentials.mnemonic.contains(' ')) {
|
if (credentials.mnemonic.contains(' ')) {
|
||||||
if (!bip39.validateMnemonic(credentials.mnemonic)) {
|
if (!bip39.validateMnemonic(credentials.mnemonic)) {
|
||||||
throw nm.NanoMnemonicIsIncorrectException();
|
throw nm.NanoMnemonicIsIncorrectException();
|
||||||
|
|
|
@ -19,7 +19,7 @@ class PolygonWalletService extends EVMChainWalletService<PolygonWallet> {
|
||||||
WalletType getType() => WalletType.polygon;
|
WalletType getType() => WalletType.polygon;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<PolygonWallet> create(EVMChainNewWalletCredentials credentials) async {
|
Future<PolygonWallet> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet}) async {
|
||||||
final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
|
final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
|
||||||
|
|
||||||
final mnemonic = bip39.generateMnemonic(strength: strength);
|
final mnemonic = bip39.generateMnemonic(strength: strength);
|
||||||
|
@ -70,7 +70,8 @@ class PolygonWalletService extends EVMChainWalletService<PolygonWallet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<PolygonWallet> restoreFromKeys(EVMChainRestoreWalletFromPrivateKey credentials) async {
|
Future<PolygonWallet> restoreFromKeys(EVMChainRestoreWalletFromPrivateKey credentials,
|
||||||
|
{bool? isTestnet}) async {
|
||||||
final wallet = PolygonWallet(
|
final wallet = PolygonWallet(
|
||||||
password: credentials.password!,
|
password: credentials.password!,
|
||||||
privateKey: credentials.privateKey,
|
privateKey: credentials.privateKey,
|
||||||
|
@ -86,8 +87,8 @@ class PolygonWalletService extends EVMChainWalletService<PolygonWallet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<PolygonWallet> restoreFromSeed(
|
Future<PolygonWallet> restoreFromSeed(EVMChainRestoreWalletFromSeedCredentials credentials,
|
||||||
EVMChainRestoreWalletFromSeedCredentials credentials) async {
|
{bool? isTestnet}) async {
|
||||||
if (!bip39.validateMnemonic(credentials.mnemonic)) {
|
if (!bip39.validateMnemonic(credentials.mnemonic)) {
|
||||||
throw PolygonMnemonicIsIncorrectException();
|
throw PolygonMnemonicIsIncorrectException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,24 +188,4 @@ class CWBitcoin extends Bitcoin {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<BitcoinReceivePageOption> getBitcoinReceivePageOptions() => BitcoinReceivePageOption.all;
|
List<BitcoinReceivePageOption> getBitcoinReceivePageOptions() => BitcoinReceivePageOption.all;
|
||||||
|
|
||||||
@override
|
|
||||||
Future<BitcoinWallet> create(WalletService service, WalletCredentials credentials,
|
|
||||||
{bool? isTestnet}) =>
|
|
||||||
(service as BitcoinWalletService)
|
|
||||||
.create(credentials as BitcoinNewWalletCredentials, isTestnet: isTestnet);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<BitcoinWallet> restoreFromKeys(WalletService service, WalletCredentials credentials,
|
|
||||||
{bool? isTestnet}) =>
|
|
||||||
(service as BitcoinWalletService).restoreFromKeys(
|
|
||||||
credentials as BitcoinRestoreWalletFromWIFCredentials,
|
|
||||||
isTestnet: isTestnet);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<BitcoinWallet> restoreFromSeed(WalletService service, WalletCredentials credentials,
|
|
||||||
{bool? isTestnet}) =>
|
|
||||||
(service as BitcoinWalletService).restoreFromSeed(
|
|
||||||
credentials as BitcoinRestoreWalletFromSeedCredentials,
|
|
||||||
isTestnet: isTestnet);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
|
||||||
import 'package:cake_wallet/di.dart';
|
import 'package:cake_wallet/di.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cw_core/wallet_info.dart';
|
import 'package:cw_core/wallet_info.dart';
|
||||||
|
@ -63,12 +62,7 @@ class WalletCreationService {
|
||||||
credentials.seedPhraseLength = settingsStore.seedPhraseLength.value;
|
credentials.seedPhraseLength = settingsStore.seedPhraseLength.value;
|
||||||
}
|
}
|
||||||
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
||||||
WalletBase? wallet;
|
final wallet = await _service!.create(credentials, isTestnet: isTestnet);
|
||||||
if (type == WalletType.bitcoin) {
|
|
||||||
wallet = await bitcoin!.create(_service!, credentials, isTestnet: isTestnet);
|
|
||||||
} else {
|
|
||||||
wallet = await _service!.create(credentials);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wallet.type == WalletType.monero) {
|
if (wallet.type == WalletType.monero) {
|
||||||
await sharedPreferences.setBool(
|
await sharedPreferences.setBool(
|
||||||
|
@ -83,12 +77,7 @@ class WalletCreationService {
|
||||||
final password = generateWalletPassword();
|
final password = generateWalletPassword();
|
||||||
credentials.password = password;
|
credentials.password = password;
|
||||||
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
||||||
WalletBase? wallet;
|
final wallet = await _service!.restoreFromKeys(credentials, isTestnet: isTestnet);
|
||||||
if (type == WalletType.bitcoin) {
|
|
||||||
wallet = await bitcoin!.restoreFromKeys(_service!, credentials, isTestnet: isTestnet);
|
|
||||||
} else {
|
|
||||||
wallet = await _service!.restoreFromKeys(credentials);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wallet.type == WalletType.monero) {
|
if (wallet.type == WalletType.monero) {
|
||||||
await sharedPreferences.setBool(
|
await sharedPreferences.setBool(
|
||||||
|
@ -103,12 +92,7 @@ class WalletCreationService {
|
||||||
final password = generateWalletPassword();
|
final password = generateWalletPassword();
|
||||||
credentials.password = password;
|
credentials.password = password;
|
||||||
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
||||||
WalletBase? wallet;
|
final wallet = await _service!.restoreFromSeed(credentials, isTestnet: isTestnet);
|
||||||
if (type == WalletType.bitcoin) {
|
|
||||||
wallet = await bitcoin!.restoreFromSeed(_service!, credentials, isTestnet: isTestnet);
|
|
||||||
} else {
|
|
||||||
wallet = await _service!.restoreFromSeed(credentials);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wallet.type == WalletType.monero) {
|
if (wallet.type == WalletType.monero) {
|
||||||
await sharedPreferences.setBool(
|
await sharedPreferences.setBool(
|
||||||
|
|
|
@ -72,14 +72,12 @@ import 'package:cw_bitcoin/electrum_wallet.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_unspent.dart';
|
import 'package:cw_bitcoin/bitcoin_unspent.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_mnemonic.dart';
|
import 'package:cw_bitcoin/bitcoin_mnemonic.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_transaction_priority.dart';
|
import 'package:cw_bitcoin/bitcoin_transaction_priority.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_wallet.dart';
|
|
||||||
import 'package:cw_bitcoin/bitcoin_wallet_service.dart';
|
import 'package:cw_bitcoin/bitcoin_wallet_service.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_wallet_creation_credentials.dart';
|
import 'package:cw_bitcoin/bitcoin_wallet_creation_credentials.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_address_record.dart';
|
import 'package:cw_bitcoin/bitcoin_address_record.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_transaction_credentials.dart';
|
import 'package:cw_bitcoin/bitcoin_transaction_credentials.dart';
|
||||||
import 'package:cw_bitcoin/litecoin_wallet_service.dart';
|
import 'package:cw_bitcoin/litecoin_wallet_service.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
|
||||||
import 'package:bitcoin_base/bitcoin_base.dart';
|
import 'package:bitcoin_base/bitcoin_base.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
""";
|
""";
|
||||||
|
@ -142,9 +140,6 @@ abstract class Bitcoin {
|
||||||
Future<void> setAddressType(Object wallet, dynamic option);
|
Future<void> setAddressType(Object wallet, dynamic option);
|
||||||
BitcoinReceivePageOption getSelectedAddressType(Object wallet);
|
BitcoinReceivePageOption getSelectedAddressType(Object wallet);
|
||||||
List<BitcoinReceivePageOption> getBitcoinReceivePageOptions();
|
List<BitcoinReceivePageOption> getBitcoinReceivePageOptions();
|
||||||
Future<BitcoinWallet> create(WalletService service, WalletCredentials credentials, {bool? isTestnet});
|
|
||||||
Future<BitcoinWallet> restoreFromKeys(WalletService service, WalletCredentials credentials, {bool? isTestnet});
|
|
||||||
Future<BitcoinWallet> restoreFromSeed(WalletService service, WalletCredentials credentials, {bool? isTestnet});
|
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue