dev
dart 168 lines 6 KB
Raw
1 import 'package:cake_wallet/core/new_wallet_arguments.dart';
2 import 'package:cake_wallet/dogecoin/dogecoin.dart';
3 import 'package:cake_wallet/evm/evm.dart';
4 import 'package:cake_wallet/zano/zano.dart';
5 import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
6 import 'package:cake_wallet/solana/solana.dart';
7 import 'package:cake_wallet/tron/tron.dart';
8 import 'package:cake_wallet/wownero/wownero.dart';
9 import 'package:cake_wallet/zcash/zcash.dart';
10 import 'package:mobx/mobx.dart';
11 import 'package:cake_wallet/bitcoin/bitcoin.dart';
12 import 'package:cake_wallet/core/wallet_creation_service.dart';
13 import 'package:cake_wallet/entities/seed_type.dart';
14 import 'package:cake_wallet/monero/monero.dart';
15 import 'package:cake_wallet/nano/nano.dart';
16 import 'package:cake_wallet/store/app_store.dart';
17 import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
18 import 'package:cake_wallet/view_model/wallet_creation_vm.dart';
19 import 'package:cake_wallet/decred/decred.dart';
20 import 'package:cw_core/wallet_base.dart';
21 import 'package:cw_core/wallet_credentials.dart';
22 import 'package:cw_core/wallet_type.dart';
23 import 'advanced_privacy_settings_view_model.dart';
24
25 part 'wallet_new_vm.g.dart';
26
27 class WalletNewVM = WalletNewVMBase with _$WalletNewVM;
28
29 abstract class WalletNewVMBase extends WalletCreationVM with Store {
30 WalletNewVMBase(
31 AppStore appStore,
32 WalletCreationService walletCreationService,
33 this.advancedPrivacySettingsViewModel,
34 SeedSettingsViewModel seedSettingsViewModel, {
35 required this.newWalletArguments,
36 }) : selectedMnemonicLanguage = '',
37 super(appStore, walletCreationService, seedSettingsViewModel,
38 type: newWalletArguments!.type, isRecovery: false);
39
40 final NewWalletArguments? newWalletArguments;
41 final AdvancedPrivacySettingsViewModel advancedPrivacySettingsViewModel;
42
43 @observable
44 String selectedMnemonicLanguage;
45
46 bool get hasLanguageSelector =>
47 [WalletType.monero, WalletType.haven, WalletType.wownero].contains(type);
48
49 bool get showLanguageSelector => newWalletArguments?.mnemonic == null && hasLanguageSelector;
50
51 bool get hasSeedType =>
52 newWalletArguments?.mnemonic == null &&
53 [WalletType.monero, WalletType.wownero].contains(type);
54
55 @override
56 WalletCredentials getCredentials(dynamic _options) {
57 final options = _options as List<dynamic>?;
58 final passphrase = seedSettingsViewModel.passphrase;
59 seedSettingsViewModel.setPassphrase(null);
60
61 switch (type) {
62 case WalletType.monero:
63 return monero!.createMoneroNewWalletCredentials(
64 name: name,
65 language: options!.first as String,
66 password: walletPassword,
67 passphrase: passphrase,
68 seedType: newWalletArguments!.mnemonic != null
69 ? MoneroSeedType.bip39.raw
70 : (options.last as MoneroSeedType).raw,
71 mnemonic: newWalletArguments!.mnemonic,
72 );
73 case WalletType.bitcoin:
74 case WalletType.litecoin:
75 return bitcoin!.createBitcoinNewWalletCredentials(
76 name: name,
77 password: walletPassword,
78 passphrase: passphrase,
79 mnemonic: newWalletArguments!.mnemonic,
80 );
81 case WalletType.ethereum:
82 case WalletType.polygon:
83 case WalletType.base:
84 case WalletType.arbitrum:
85 case WalletType.bsc:
86 return evm!.createEVMNewWalletCredentials(
87 name: name,
88 password: walletPassword,
89 mnemonic: newWalletArguments!.mnemonic,
90 passphrase: passphrase,
91 );
92 case WalletType.bitcoinCash:
93 return bitcoinCash!.createBitcoinCashNewWalletCredentials(
94 name: name,
95 password: walletPassword,
96 passphrase: passphrase,
97 mnemonic: newWalletArguments!.mnemonic,
98 );
99 case WalletType.dogecoin:
100 return dogecoin!.createDogeCoinNewWalletCredentials(
101 name: name,
102 password: walletPassword,
103 passphrase: passphrase,
104 mnemonic: newWalletArguments!.mnemonic,
105 );
106 case WalletType.nano:
107 case WalletType.banano:
108 return nano!.createNanoNewWalletCredentials(
109 name: name,
110 password: walletPassword,
111 mnemonic: newWalletArguments!.mnemonic,
112 passphrase: passphrase,
113 );
114
115 case WalletType.solana:
116 return solana!.createSolanaNewWalletCredentials(
117 name: name,
118 password: walletPassword,
119 mnemonic: newWalletArguments!.mnemonic,
120 passphrase: passphrase,
121 );
122 case WalletType.tron:
123 return tron!.createTronNewWalletCredentials(
124 name: name,
125 password: walletPassword,
126 mnemonic: newWalletArguments!.mnemonic,
127 passphrase: passphrase,
128 );
129 case WalletType.wownero:
130 return wownero!.createWowneroNewWalletCredentials(
131 name: name,
132 language: options!.first as String,
133 isPolyseed: (options.last as MoneroSeedType).raw == 1,
134 password: walletPassword,
135 passphrase: passphrase,
136 );
137 case WalletType.zano:
138 return zano!.createZanoNewWalletCredentials(
139 name: name,
140 password: walletPassword,
141 passphrase: passphrase,
142 );
143 case WalletType.zcash:
144 return zcash!.createZcashNewWalletCredentials(
145 name: name,
146 password: walletPassword,
147 mnemonic: newWalletArguments!.mnemonic,
148 passphrase: passphrase,
149 network: zcashNetwork,
150 );
151 case WalletType.decred:
152 return decred!.createDecredNewWalletCredentials(
153 name: name,
154 password: walletPassword,
155 passphrase: passphrase,
156 mnemonic: newWalletArguments!.mnemonic);
157 case WalletType.none:
158 case WalletType.haven:
159 throw Exception('Unexpected type: ${type.toString()}');
160 }
161 }
162
163 @override
164 Future<WalletBase> process(WalletCredentials credentials) async {
165 walletCreationService.changeWalletType(type: type);
166 return walletCreationService.create(credentials, isTestnet: useTestnet);
167 }
168 }