dev
dart 74 lines 2.66 KB
Raw
1 import 'package:cake_wallet/bitcoin/bitcoin.dart';
2 import 'package:cake_wallet/core/validator.dart';
3 import 'package:cake_wallet/entities/mnemonic_item.dart';
4 import 'package:cake_wallet/evm/evm.dart';
5 import 'package:cake_wallet/monero/monero.dart';
6 import 'package:cake_wallet/nano/nano.dart';
7 import 'package:cake_wallet/solana/solana.dart';
8 import 'package:cake_wallet/tron/tron.dart';
9 import 'package:cake_wallet/wownero/wownero.dart';
10 import 'package:cake_wallet/zano/zano.dart';
11 import 'package:cake_wallet/decred/decred.dart';
12 import 'package:cake_wallet/utils/language_list.dart';
13 import 'package:cake_wallet/zcash/zcash.dart';
14 import 'package:cw_core/wallet_type.dart';
15
16 class SeedValidator extends Validator<MnemonicItem> {
17 SeedValidator({required this.type, required this.language})
18 : _words = getWordList(type: type, language: language),
19 super(errorMessage: 'Wrong seed mnemonic');
20
21 final WalletType type;
22 final String language;
23 final List<String> _words;
24
25 static List<String> getWordList({required WalletType type, required String language}) {
26 switch (type) {
27 case WalletType.bitcoin:
28 return getBitcoinWordList(language);
29 case WalletType.litecoin:
30 return getBitcoinWordList(language);
31 case WalletType.dogecoin:
32 return getBitcoinWordList(language);
33 case WalletType.monero:
34 return monero!.getMoneroWordList(language);
35 case WalletType.ethereum:
36 case WalletType.polygon:
37 case WalletType.base:
38 case WalletType.arbitrum:
39 case WalletType.bsc:
40 return evm!.getEVMWordList(language);
41 case WalletType.bitcoinCash:
42 return getBitcoinWordList(language);
43 case WalletType.nano:
44 case WalletType.banano:
45 return nano!.getNanoWordList(language);
46 case WalletType.solana:
47 return solana!.getSolanaWordList(language);
48 case WalletType.tron:
49 return tron!.getTronWordList(language);
50 case WalletType.wownero:
51 return wownero!.getWowneroWordList(language);
52 case WalletType.zano:
53 return zano!.getWordList(language);
54 case WalletType.decred:
55 return decred!.getDecredWordList();
56 case WalletType.zcash:
57 return zcash!.getZcashWordList(language);
58 case WalletType.none:
59 case WalletType.haven:
60 return [];
61 }
62 }
63
64 static bool needsNormalization(String language) =>
65 ["POLYSEED_French", "POLYSEED_Spanish"].contains(language);
66
67 static List<String> getBitcoinWordList(String language) {
68 assert(language.toLowerCase() == LanguageList.english.toLowerCase());
69 return bitcoin!.getWordList();
70 }
71
72 @override
73 bool isValid(MnemonicItem? value) => _words.contains(value?.text);
74 }