Skip to content

Commit 0fcfdac

Browse files
Merge pull request #1144 from cypherstack/salvium
Salvium
2 parents 219164d + 88931fa commit 0fcfdac

File tree

30 files changed

+2112
-55
lines changed

30 files changed

+2112
-55
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
light/
2+
dark/

lib/pages/add_wallet_views/new_wallet_recovery_phrase_warning_view/new_wallet_recovery_phrase_warning_view.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import '../../../utilities/util.dart';
3131
import '../../../wallets/crypto_currency/crypto_currency.dart';
3232
import '../../../wallets/isar/models/wallet_info.dart';
3333
import '../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
34+
import '../../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
3435
import '../../../wallets/wallet/wallet.dart';
3536
import '../../../wallets/wallet/wallet_mixin_interfaces/mnemonic_interface.dart';
3637
import '../../../widgets/custom_buttons/app_bar_icon_button.dart';
@@ -183,7 +184,7 @@ class _NewWalletRecoveryPhraseWarningViewState
183184

184185
// TODO: Refactor these to generate each coin in their respective classes
185186
// This code should not be in a random view page file
186-
if (coin is Monero || coin is Wownero || coin is Xelis) {
187+
if (coin is Monero || coin is Wownero || coin is Xelis || coin is Salvium) {
187188
// currently a special case due to the
188189
// xmr/wow libraries handling their
189190
// own mnemonic generation
@@ -230,6 +231,8 @@ class _NewWalletRecoveryPhraseWarningViewState
230231

231232
if (wallet is LibMoneroWallet) {
232233
await wallet.init(wordCount: wordCount);
234+
} else if (wallet is LibSalviumWallet) {
235+
await wallet.init(wordCount: wordCount);
233236
} else {
234237
await wallet.init();
235238
}

lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -416,8 +416,7 @@ class _SeedRestoreOptionState extends ConsumerState<SeedRestoreOption> {
416416

417417
final currentLength = ref.watch(mnemonicWordCountStateProvider);
418418

419-
final isMoneroAnd25 = widget.coin is Monero && currentLength == 25;
420-
final isWowneroAnd25 = widget.coin is Wownero && currentLength == 25;
419+
final isCnAnd25 = widget.coin is CryptonoteCurrency && currentLength == 25;
421420

422421
final bool supportsPassphrase;
423422
if (widget.coin.hasMnemonicPassphraseSupport) {
@@ -432,7 +431,7 @@ class _SeedRestoreOptionState extends ConsumerState<SeedRestoreOption> {
432431

433432
return Column(
434433
children: [
435-
if (isMoneroAnd25 || widget.coin is Epiccash || isWowneroAnd25)
434+
if (isCnAnd25 || widget.coin is Epiccash)
436435
Row(
437436
mainAxisAlignment: MainAxisAlignment.spaceBetween,
438437
children: [
@@ -459,9 +458,9 @@ class _SeedRestoreOptionState extends ConsumerState<SeedRestoreOption> {
459458
),
460459
],
461460
),
462-
if (isMoneroAnd25 || widget.coin is Epiccash || isWowneroAnd25)
461+
if (isCnAnd25 || widget.coin is Epiccash)
463462
SizedBox(height: Util.isDesktop ? 16 : 8),
464-
if (isMoneroAnd25 || widget.coin is Epiccash || isWowneroAnd25)
463+
if (isCnAnd25 || widget.coin is Epiccash)
465464
ref.watch(_pIsUsingDate)
466465
? RestoreFromDatePicker(
467466
onTap: widget.dateChooserFunction,
@@ -518,9 +517,8 @@ class _SeedRestoreOptionState extends ConsumerState<SeedRestoreOption> {
518517
),
519518
),
520519
),
521-
if (isMoneroAnd25 || widget.coin is Epiccash || isWowneroAnd25)
522-
const SizedBox(height: 8),
523-
if (isMoneroAnd25 || widget.coin is Epiccash || isWowneroAnd25)
520+
if (isCnAnd25 || widget.coin is Epiccash) const SizedBox(height: 8),
521+
if (isCnAnd25 || widget.coin is Epiccash)
524522
RoundedWhiteContainer(
525523
child: Center(
526524
child: Text(
@@ -541,7 +539,7 @@ class _SeedRestoreOptionState extends ConsumerState<SeedRestoreOption> {
541539
),
542540
),
543541
),
544-
if (isMoneroAnd25 || widget.coin is Epiccash || isWowneroAnd25)
542+
if (isCnAnd25 || widget.coin is Epiccash)
545543
SizedBox(height: Util.isDesktop ? 24 : 16),
546544
Text(
547545
"Choose recovery phrase length",

lib/pages/add_wallet_views/restore_wallet_view/restore_wallet_view.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import '../../../wallets/crypto_currency/crypto_currency.dart';
4545
import '../../../wallets/isar/models/wallet_info.dart';
4646
import '../../../wallets/wallet/impl/epiccash_wallet.dart';
4747
import '../../../wallets/wallet/impl/monero_wallet.dart';
48+
import '../../../wallets/wallet/impl/salvium_wallet.dart';
4849
import '../../../wallets/wallet/impl/wownero_wallet.dart';
4950
import '../../../wallets/wallet/impl/xelis_wallet.dart';
5051
import '../../../wallets/wallet/intermediate/external_wallet.dart';
@@ -189,7 +190,8 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
189190
// TODO: check for wownero wordlist?
190191
bool _isValidMnemonicWord(String word) {
191192
// TODO: get the actual language
192-
if (widget.coin is Monero) {
193+
if (widget.coin is Monero || widget.coin is Salvium) {
194+
// Salvium use's Monero's wordlists.
193195
switch (widget.seedWordsLength) {
194196
case 25:
195197
return lib_monero.getMoneroWordList("English").contains(word);
@@ -258,6 +260,7 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
258260
if (bip39.validateMnemonic(mnemonic) == false &&
259261
!(widget.coin is Monero ||
260262
widget.coin is Wownero ||
263+
widget.coin is Salvium ||
261264
widget.coin is Xelis)) {
262265
unawaited(
263266
showFloatingFlushBar(
@@ -342,6 +345,10 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
342345
await (wallet as WowneroWallet).init(isRestore: true);
343346
break;
344347

348+
case const (SalviumWallet):
349+
await (wallet as SalviumWallet).init(isRestore: true);
350+
break;
351+
345352
case const (XelisWallet):
346353
await (wallet as XelisWallet).init(isRestore: true);
347354
break;

lib/pages/add_wallet_views/verify_recovery_phrase_view/verify_recovery_phrase_view.dart

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import 'dart:math';
1414

1515
import 'package:cs_monero/src/deprecated/get_height_by_date.dart'
1616
as cs_monero_deprecated;
17+
import 'package:cs_salvium/src/deprecated/get_height_by_date.dart'
18+
as cs_salvium_deprecated;
1719
import 'package:flutter/foundation.dart';
1820
import 'package:flutter/material.dart';
1921
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -40,6 +42,7 @@ import '../../../wallets/wallet/impl/monero_wallet.dart';
4042
import '../../../wallets/wallet/impl/wownero_wallet.dart';
4143
import '../../../wallets/wallet/impl/xelis_wallet.dart';
4244
import '../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
45+
import '../../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
4346
import '../../../wallets/wallet/wallet.dart';
4447
import '../../../wallets/wallet/wallet_mixin_interfaces/extended_keys_interface.dart';
4548
import '../../../wallets/wallet/wallet_mixin_interfaces/view_only_option_interface.dart';
@@ -121,7 +124,8 @@ class _VerifyRecoveryPhraseViewState
121124
});
122125
}
123126
viewOnlyWalletType = ViewOnlyWalletType.xPub;
124-
} else if (widget.wallet is LibMoneroWallet) {
127+
} else if (widget.wallet is LibMoneroWallet ||
128+
widget.wallet is LibSalviumWallet) {
125129
if (widget.wallet.cryptoCurrency is Monero) {
126130
height = cs_monero_deprecated.getMoneroHeightByDate(
127131
date: DateTime.now().subtract(const Duration(days: 7)),
@@ -132,6 +136,11 @@ class _VerifyRecoveryPhraseViewState
132136
date: DateTime.now().subtract(const Duration(days: 7)),
133137
);
134138
}
139+
if (widget.wallet.cryptoCurrency is Salvium) {
140+
height = cs_salvium_deprecated.getSalviumHeightByDate(
141+
date: DateTime.now().subtract(const Duration(days: 7)),
142+
);
143+
}
135144
if (height < 0) height = 0;
136145

137146
viewOnlyWalletType = ViewOnlyWalletType.cryptonote;
@@ -188,6 +197,22 @@ class _VerifyRecoveryPhraseViewState
188197

189198
await w.exit();
190199

200+
viewOnlyData = CryptonoteViewOnlyWalletData(
201+
walletId: voInfo.walletId,
202+
address: address,
203+
privateViewKey: privateViewKey,
204+
);
205+
} else if (widget.wallet is LibSalviumWallet) {
206+
final w = widget.wallet as LibSalviumWallet;
207+
208+
final info =
209+
await w
210+
.hackToCreateNewViewOnlyWalletDataFromNewlyCreatedWalletThisFunctionShouldNotBeCalledUnlessYouKnowWhatYouAreDoing();
211+
final address = info.$1;
212+
final privateViewKey = info.$2;
213+
214+
await w.exit();
215+
191216
viewOnlyData = CryptonoteViewOnlyWalletData(
192217
walletId: voInfo.walletId,
193218
address: address,

lib/pages/settings_views/global_settings_view/manage_nodes_views/add_edit_node_view.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import '../../../../utilities/util.dart';
3636
import '../../../../wallets/crypto_currency/crypto_currency.dart';
3737
import '../../../../wallets/crypto_currency/intermediate/cryptonote_currency.dart';
3838
import '../../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
39+
import '../../../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
3940
import '../../../../widgets/background.dart';
4041
import '../../../../widgets/conditional_parent.dart';
4142
import '../../../../widgets/custom_buttons/app_bar_icon_button.dart';
@@ -228,7 +229,7 @@ class _AddEditNodeViewState extends ConsumerState<AddEditNodeView> {
228229

229230
// strip unused path
230231
String address = formData.host!;
231-
if (coin is LibMoneroWallet) {
232+
if (coin is LibMoneroWallet || coin is LibSalviumWallet) {
232233
if (address.startsWith("http")) {
233234
final uri = Uri.parse(address);
234235
address = "${uri.scheme}://${uri.host}";
@@ -1069,7 +1070,7 @@ class _NodeFormState extends ConsumerState<NodeForm> {
10691070
} else {
10701071
enableSSLCheckbox = true;
10711072
}
1072-
} else if (widget.coin is LibMoneroWallet) {
1073+
} else if (widget.coin is LibMoneroWallet || widget.coin is LibSalviumWallet) {
10731074
if (newValue.startsWith("https://")) {
10741075
_useSSL = true;
10751076
} else if (newValue.startsWith("http://")) {
@@ -1276,7 +1277,7 @@ class _NodeFormState extends ConsumerState<NodeForm> {
12761277
),
12771278
],
12781279
),
1279-
if (widget.coin is LibMoneroWallet)
1280+
if (widget.coin is LibMoneroWallet || widget.coin is LibSalviumWallet)
12801281
Row(
12811282
children: [
12821283
GestureDetector(

lib/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import '../../../../../wallets/wallet/impl/monero_wallet.dart';
5757
import '../../../../../wallets/wallet/impl/wownero_wallet.dart';
5858
import '../../../../../wallets/wallet/impl/xelis_wallet.dart';
5959
import '../../../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
60+
import '../../../../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
6061
import '../../../../../wallets/wallet/wallet.dart';
6162
import '../../../../../wallets/wallet/wallet_mixin_interfaces/mnemonic_interface.dart';
6263
import '../../../../../wallets/wallet/wallet_mixin_interfaces/private_key_interface.dart';
@@ -505,7 +506,7 @@ abstract class SWB {
505506

506507
int restoreHeight = walletbackup['restoreHeight'] as int? ?? 0;
507508
if (restoreHeight <= 0) {
508-
if (wallet is EpiccashWallet || wallet is LibMoneroWallet) {
509+
if (wallet is EpiccashWallet || wallet is LibMoneroWallet || wallet is LibSalviumWallet) {
509510
restoreHeight = 0;
510511
} else {
511512
restoreHeight = walletbackup['storedChainHeight'] as int? ?? 0;

lib/pages/settings_views/wallet_settings_view/wallet_settings_view.dart

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import '../../../wallets/crypto_currency/intermediate/nano_currency.dart';
3838
import '../../../wallets/wallet/impl/bitcoin_frost_wallet.dart';
3939
import '../../../wallets/wallet/impl/epiccash_wallet.dart';
4040
import '../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
41+
import '../../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
4142
import '../../../wallets/wallet/wallet_mixin_interfaces/extended_keys_interface.dart';
4243
import '../../../wallets/wallet/wallet_mixin_interfaces/mnemonic_interface.dart';
4344
import '../../../wallets/wallet/wallet_mixin_interfaces/view_only_option_interface.dart';
@@ -316,21 +317,23 @@ class _WalletSettingsViewState extends ConsumerState<WalletSettingsView> {
316317
}
317318
}
318319

319-
KeyDataInterface? keyData;
320-
if (wallet
321-
is ViewOnlyOptionInterface &&
322-
wallet.isViewOnly) {
323-
keyData =
324-
await wallet
325-
.getViewOnlyWalletData();
326-
} else if (wallet
327-
is ExtendedKeysInterface) {
328-
keyData =
329-
await wallet.getXPrivs();
330-
} else if (wallet
331-
is LibMoneroWallet) {
332-
keyData = await wallet.getKeys();
333-
}
320+
KeyDataInterface? keyData;
321+
if (wallet
322+
is ViewOnlyOptionInterface &&
323+
wallet.isViewOnly) {
324+
keyData =
325+
await wallet
326+
.getViewOnlyWalletData();
327+
} else if (wallet
328+
is ExtendedKeysInterface) {
329+
keyData = await wallet.getXPrivs();
330+
} else if (wallet
331+
is LibMoneroWallet) {
332+
keyData = await wallet.getKeys();
333+
} else if (wallet
334+
is LibSalviumWallet) {
335+
keyData = await wallet.getKeys();
336+
}
334337

335338
if (context.mounted) {
336339
if (keyData != null &&

lib/pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/wallet_settings_wallet_settings_view.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import '../../../../utilities/text_styles.dart';
2121
import '../../../../wallets/isar/models/wallet_info.dart';
2222
import '../../../../wallets/isar/providers/wallet_info_provider.dart';
2323
import '../../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
24+
import '../../../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
2425
import '../../../../wallets/wallet/wallet_mixin_interfaces/lelantus_interface.dart';
2526
import '../../../../wallets/wallet/wallet_mixin_interfaces/multi_address_interface.dart';
2627
import '../../../../wallets/wallet/wallet_mixin_interfaces/rbf_interface.dart';
@@ -423,8 +424,8 @@ class _WalletSettingsWalletSettingsViewState
423424
),
424425
),
425426
),
426-
if (wallet is LibMoneroWallet) const SizedBox(height: 8),
427-
if (wallet is LibMoneroWallet)
427+
if (wallet is LibMoneroWallet || wallet is LibSalviumWallet) const SizedBox(height: 8),
428+
if (wallet is LibMoneroWallet || wallet is LibSalviumWallet)
428429
RoundedWhiteContainer(
429430
padding: const EdgeInsets.all(0),
430431
child: RawMaterialButton(

lib/pages/special/firo_rescan_recovery_error_dialog.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import '../../utilities/text_styles.dart';
1313
import '../../utilities/util.dart';
1414
import '../../wallets/isar/providers/wallet_info_provider.dart';
1515
import '../../wallets/wallet/intermediate/lib_monero_wallet.dart';
16+
import '../../wallets/wallet/intermediate/lib_salvium_wallet.dart';
1617
import '../../wallets/wallet/wallet_mixin_interfaces/extended_keys_interface.dart';
1718
import '../../wallets/wallet/wallet_mixin_interfaces/mnemonic_interface.dart';
1819
import '../../widgets/background.dart';
@@ -283,6 +284,8 @@ class _FiroRescanRecoveryErrorViewState
283284
keyData = await wallet.getXPrivs();
284285
} else if (wallet is LibMoneroWallet) {
285286
keyData = await wallet.getKeys();
287+
} else if (wallet is LibSalviumWallet) {
288+
keyData = await wallet.getKeys();
286289
}
287290

288291
if (context.mounted) {

0 commit comments

Comments
 (0)