Implement restore wallet from seed functionality

This commit is contained in:
OmarHatem 2023-01-05 23:11:10 +02:00
parent e1639cdc34
commit 1e4fe9e327
5 changed files with 2091 additions and 2063 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,11 @@
import 'dart:io';
import 'package:cw_core/balance.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/wallet_base.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:cw_ethereum/ethereum_mnemonics.dart';
import 'package:cw_ethereum/ethereum_wallet.dart';
import 'package:cw_ethereum/ethereum_wallet_creation_credentials.dart';
import 'package:hive/hive.dart';
@ -62,15 +60,26 @@ class EthereumWalletService extends WalletService<EthereumNewWalletCredentials,
File(await pathForWalletDir(name: wallet, type: getType())).delete(recursive: true);
@override
Future<WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo>>
restoreFromKeys(credentials) {
Future<EthereumWallet> restoreFromKeys(credentials) {
throw UnimplementedError();
}
@override
Future<WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo>>
restoreFromSeed(credentials) {
// TODO: implement restoreFromSeed
throw UnimplementedError();
Future<EthereumWallet> restoreFromSeed(
EthereumRestoreWalletFromSeedCredentials credentials) async {
if (!bip39.validateMnemonic(credentials.mnemonic)) {
throw EthereumMnemonicIsIncorrectException();
}
final wallet = await EthereumWallet(
password: credentials.password!,
mnemonic: credentials.mnemonic,
walletInfo: credentials.walletInfo!,
);
await wallet.init();
await wallet.save();
return wallet;
}
}

View file

@ -11,9 +11,17 @@ class CWEthereum extends Ethereum {
WalletCredentials createEthereumNewWalletCredentials({
required String name,
WalletInfo? walletInfo,
}) {
return EthereumNewWalletCredentials(name: name, walletInfo: walletInfo);
}
}) =>
EthereumNewWalletCredentials(name: name, walletInfo: walletInfo);
@override
WalletCredentials createEthereumRestoreWalletFromSeedCredentials({
required String name,
required String mnemonic,
required String password,
}) =>
EthereumRestoreWalletFromSeedCredentials(name: name, password: password, mnemonic: mnemonic);
@override
String getAddress(WalletBase wallet) => (wallet as EthereumWallet).walletAddresses.address;
}

View file

@ -1,6 +1,5 @@
import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/core/mnemonic_length.dart';
import 'package:flutter/foundation.dart';
import 'package:cake_wallet/ethereum/ethereum.dart';
import 'package:hive/hive.dart';
import 'package:mobx/mobx.dart';
import 'package:cake_wallet/store/app_store.dart';
@ -84,6 +83,11 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
height: height,
mnemonic: seed,
password: password);
case WalletType.ethereum:
return ethereum!.createEthereumRestoreWalletFromSeedCredentials(
name: name,
mnemonic: seed,
password: password);
default:
break;
}

View file

@ -493,6 +493,7 @@ abstract class Ethereum {
List<String> getEthereumWordList(String language);
WalletService createEthereumWalletService(Box<WalletInfo> walletInfoSource);
WalletCredentials createEthereumNewWalletCredentials({required String name, WalletInfo? walletInfo});
WalletCredentials createEthereumRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password});
String getAddress(WalletBase wallet);
}
""";