fix derivation Info (#1689)

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

Serhii committed Sep 26, 2024 at 05:10 UTC 647551661d3fde011a017974eb56ece869c94e98
1 file changed +42 -3
lib/view_model/wallet_creation_vm.dart
+42 -3
@@ -5,8 +5,10 @@ import 'package:cake_wallet/di.dart';
5 import 'package:cake_wallet/entities/background_tasks.dart';
6 import 'package:cake_wallet/entities/generate_name.dart';
7 import 'package:cake_wallet/generated/i18n.dart';
8 +import 'package:cake_wallet/nano/nano.dart';
9 import 'package:cake_wallet/store/app_store.dart';
10 import 'package:cake_wallet/store/settings_store.dart';
11 +import 'package:cake_wallet/view_model/restore/restore_mode.dart';
12 import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
13 import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
14 import 'package:cw_core/pathForWallet.dart';
@@ -82,9 +84,22 @@ abstract class WalletCreationVMBase with Store {
84 walletCreationService.checkIfExists(name);
85 final dirPath = await pathForWalletDir(name: name, type: type);
86 final path = await pathForWallet(name: name, type: type);
85 - final credentials = restoreWallet != null
86 - ? getCredentialsFromRestoredWallet(options, restoreWallet)
87 - : getCredentials(options);
87 +
88 + WalletCredentials credentials;
89 + if (restoreWallet != null) {
90 + if (restoreWallet.restoreMode == WalletRestoreMode.seed &&
91 + options == null &&
92 + (type == WalletType.nano ||
93 + type == WalletType.bitcoin ||
94 + type == WalletType.litecoin)) {
95 + final derivationInfo = await getDerivationInfo(restoreWallet);
96 + options ??= {};
97 + options["derivationInfo"] = derivationInfo.first;
98 + }
99 + credentials = getCredentialsFromRestoredWallet(options, restoreWallet);
100 + } else {
101 + credentials = getCredentials(options);
102 + }
103
104 final walletInfo = WalletInfo.external(
105 id: WalletBase.idFor(name, type),
@@ -185,6 +200,30 @@ abstract class WalletCreationVMBase with Store {
200 }
201 }
202
203 + Future<List<DerivationInfo>> getDerivationInfo(RestoredWallet restoreWallet) async {
204 + var list = <DerivationInfo>[];
205 + final walletType = restoreWallet.type;
206 + var appStore = getIt.get<AppStore>();
207 + var node = appStore.settingsStore.getCurrentNode(walletType);
208 +
209 + switch (walletType) {
210 + case WalletType.bitcoin:
211 + case WalletType.litecoin:
212 + return bitcoin!.getDerivationsFromMnemonic(
213 + mnemonic: restoreWallet.mnemonicSeed!,
214 + node: node,
215 + );
216 + case WalletType.nano:
217 + return nanoUtil!.getDerivationsFromMnemonic(
218 + mnemonic: restoreWallet.mnemonicSeed!,
219 + node: node,
220 + );
221 + default:
222 + break;
223 + }
224 + return list;
225 + }
226 +
227 WalletCredentials getCredentials(dynamic options) => throw UnimplementedError();
228
229 Future<WalletBase> process(WalletCredentials credentials) => throw UnimplementedError();