Skip to content

Commit e07d878

Browse files
Merge pull request #1099 from Tritonn204/xelis
Xelis Polish
2 parents 2298a12 + 8f5d17d commit e07d878

File tree

11 files changed

+120
-170
lines changed

11 files changed

+120
-170
lines changed

lib/pages/add_wallet_views/restore_wallet_view/restore_wallet_view.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import '../../../wallets/isar/models/wallet_info.dart';
5050
import '../../../wallets/wallet/impl/epiccash_wallet.dart';
5151
import '../../../wallets/wallet/impl/monero_wallet.dart';
5252
import '../../../wallets/wallet/impl/wownero_wallet.dart';
53-
import '../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
53+
import '../../../wallets/wallet/intermediate/external_wallet.dart';
5454
import '../../../wallets/wallet/impl/xelis_wallet.dart';
5555
import '../../../wallets/wallet/supporting/epiccash_wallet_info_extension.dart';
5656
import '../../../wallets/wallet/wallet.dart';
@@ -391,7 +391,7 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
391391

392392
await wallet.recover(isRescan: false);
393393

394-
if (wallet is LibMoneroWallet) {
394+
if (wallet is ExternalWallet) {
395395
await wallet.exit();
396396
}
397397

lib/pages/exchange_view/send_from_view.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import '../../wallets/crypto_currency/crypto_currency.dart';
3535
import '../../wallets/isar/providers/wallet_info_provider.dart';
3636
import '../../wallets/models/tx_data.dart';
3737
import '../../wallets/wallet/impl/firo_wallet.dart';
38-
import '../../wallets/wallet/intermediate/lib_monero_wallet.dart';
38+
import '../../wallets/wallet/intermediate/external_wallet.dart';
3939
import '../../widgets/background.dart';
4040
import '../../widgets/conditional_parent.dart';
4141
import '../../widgets/custom_buttons/app_bar_icon_button.dart';
@@ -277,7 +277,7 @@ class _SendFromCardState extends ConsumerState<SendFromCard> {
277277
// access to this screen but this is needed to get past an error that
278278
// would occur only to lead to another error which is why xmr/wow wallets
279279
// don't have access to this screen currently
280-
if (wallet is LibMoneroWallet) {
280+
if (wallet is ExternalWallet) {
281281
await wallet.init();
282282
await wallet.open();
283283
}

lib/pages/pinpad_views/lock_screen_view.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import '../../utilities/show_loading.dart';
2929
import '../../utilities/show_node_tor_settings_mismatch.dart';
3030
import '../../utilities/text_styles.dart';
3131
import '../../utilities/util.dart';
32-
import '../../wallets/wallet/intermediate/lib_monero_wallet.dart';
32+
import '../../wallets/wallet/intermediate/external_wallet.dart';
3333
import '../../widgets/background.dart';
3434
import '../../widgets/custom_buttons/app_bar_icon_button.dart';
3535
import '../../widgets/custom_buttons/blue_text_button.dart';
@@ -119,7 +119,7 @@ class _LockscreenViewState extends ConsumerState<LockscreenView> {
119119
}
120120

121121
final Future<void> loadFuture;
122-
if (wallet is LibMoneroWallet) {
122+
if (wallet is ExternalWallet) {
123123
loadFuture =
124124
wallet.init().then((value) async => await (wallet).open());
125125
} else {

lib/pages/wallets_view/sub_widgets/favorite_card.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import '../../../utilities/text_styles.dart';
2727
import '../../../utilities/util.dart';
2828
import '../../../wallets/crypto_currency/coins/firo.dart';
2929
import '../../../wallets/isar/providers/wallet_info_provider.dart';
30-
import '../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
30+
import '../../../wallets/wallet/intermediate/external_wallet.dart';
3131
import '../../../widgets/coin_card.dart';
3232
import '../../../widgets/conditional_parent.dart';
3333
import '../../wallet_view/wallet_view.dart';
@@ -132,7 +132,7 @@ class _FavoriteCardState extends ConsumerState<FavoriteCard> {
132132
}
133133

134134
final Future<void> loadFuture;
135-
if (wallet is LibMoneroWallet) {
135+
if (wallet is ExternalWallet) {
136136
loadFuture =
137137
wallet.init().then((value) async => await (wallet).open());
138138
} else {

lib/pages/wallets_view/sub_widgets/wallet_list_item.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import '../../../utilities/show_node_tor_settings_mismatch.dart';
2525
import '../../../utilities/text_styles.dart';
2626
import '../../../utilities/util.dart';
2727
import '../../../wallets/crypto_currency/crypto_currency.dart';
28-
import '../../../wallets/wallet/intermediate/lib_monero_wallet.dart';
28+
import '../../../wallets/wallet/intermediate/external_wallet.dart';
2929
import '../../../widgets/dialogs/tor_warning_dialog.dart';
3030
import '../../../widgets/rounded_white_container.dart';
3131
import '../../wallet_view/wallet_view.dart';
@@ -99,7 +99,7 @@ class WalletListItem extends ConsumerWidget {
9999
}
100100

101101
final Future<void> loadFuture;
102-
if (wallet is LibMoneroWallet) {
102+
if (wallet is ExternalWallet) {
103103
loadFuture =
104104
wallet.init().then((value) async => await (wallet).open());
105105
} else {

lib/pages_desktop_specific/my_stack_view/coin_wallets_table.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import '../../utilities/show_loading.dart';
2121
import '../../utilities/show_node_tor_settings_mismatch.dart';
2222
import '../../utilities/util.dart';
2323
import '../../wallets/crypto_currency/crypto_currency.dart';
24-
import '../../wallets/wallet/intermediate/lib_monero_wallet.dart';
24+
import '../../wallets/wallet/intermediate/external_wallet.dart';
2525
import '../../widgets/rounded_container.dart';
2626
import '../../widgets/wallet_info_row/wallet_info_row.dart';
2727
import 'wallet_view/desktop_wallet_view.dart';
@@ -101,7 +101,7 @@ class CoinWalletsTable extends ConsumerWidget {
101101
}
102102

103103
final Future<void> loadFuture;
104-
if (wallet is LibMoneroWallet) {
104+
if (wallet is ExternalWallet) {
105105
loadFuture = wallet
106106
.init()
107107
.then((value) async => await (wallet).open());

lib/utilities/test_node_connection.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,12 +305,15 @@ Future<bool> testNodeConnection({
305305
final daemon = xelis_sdk.DaemonClient(
306306
endPoint: "${formData.host!}:${formData.port!}",
307307
secureWebSocket: formData.useSSL ?? false,
308+
timeout: 5000
308309
);
309310
daemon.connect();
310311

311312
final xelis_sdk.GetInfoResult networkInfo = await daemon.getInfo();
312313
testPassed = networkInfo.height != null;
313314

315+
daemon.disconnect();
316+
314317
Logging.instance.i(
315318
"Xelis testNodeConnection result: \"${networkInfo.toString()}\"",
316319
);

lib/wallets/wallet/impl/xelis_wallet.dart

Lines changed: 19 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import 'dart:math';
44

55
import 'package:isar/isar.dart';
66
import 'package:mutex/mutex.dart';
7-
import 'package:stack_wallet_backup/generate_password.dart';
87
import 'package:xelis_dart_sdk/xelis_dart_sdk.dart' as xelis_sdk;
98
import 'package:xelis_flutter/src/api/wallet.dart' as x_wallet;
9+
import 'package:stack_wallet_backup/generate_password.dart';
1010

1111
import '../../../models/balance.dart';
1212
import '../../../models/isar/models/blockchain_data/address.dart';
@@ -31,28 +31,6 @@ class XelisWallet extends LibXelisWallet {
3131
@override
3232
int get isarTransactionVersion => 2;
3333

34-
@override
35-
Future<void> init({bool? isRestore}) async {
36-
Logging.instance.d("Xelis: init");
37-
38-
if (isRestore == true) {
39-
await _restoreWallet();
40-
return await super.init();
41-
}
42-
43-
final String? walletExists = await secureStorageInterface.read(
44-
key: "${walletId}_wallet",
45-
);
46-
47-
if (walletExists == null) {
48-
await _createNewWallet();
49-
}
50-
51-
await open();
52-
53-
return await super.init();
54-
}
55-
5634
Future<void> _createNewWallet() async {
5735
final String password = generatePassword();
5836

@@ -61,39 +39,24 @@ class XelisWallet extends LibXelisWallet {
6139
key: Wallet.mnemonicPassphraseKey(walletId: info.walletId),
6240
value: password,
6341
);
64-
65-
await secureStorageInterface.write(
66-
key: '${walletId}_wallet',
67-
value: 'true',
68-
);
69-
70-
await secureStorageInterface.write(
71-
key: '_${walletId}_needs_creation',
72-
value: 'true',
73-
);
7442
}
7543

76-
Future<void> _restoreWallet() async {
77-
final String password = generatePassword();
78-
79-
await secureStorageInterface.write(
80-
key: Wallet.mnemonicPassphraseKey(walletId: info.walletId),
81-
value: password,
82-
);
83-
84-
await secureStorageInterface.write(
85-
key: '${walletId}_wallet',
86-
value: 'true',
87-
);
44+
@override
45+
Future<void> init({bool? isRestore}) async {
46+
Logging.instance.d("Xelis: init");
8847

89-
await secureStorageInterface.write(
90-
key: '_${walletId}_needs_restoration',
91-
value: 'true',
92-
);
48+
if (isRestore == true) {
49+
await super.init();
50+
return await open(openType: XelisWalletOpenType.restore);
51+
}
9352

94-
if (libXelisWallet != null) {
95-
await super.exit();
53+
final bool walletExists = await LibXelisWallet.checkWalletExists(walletId);
54+
if (!walletExists) {
55+
await _createNewWallet();
56+
await open(openType: XelisWalletOpenType.create);
9657
}
58+
59+
return await super.init();
9760
}
9861

9962
@override
@@ -507,20 +470,10 @@ class XelisWallet extends LibXelisWallet {
507470
try {
508471
checkInitialized();
509472

510-
// Use default address if recipients list is empty
511473
final recipients =
512474
txData.recipients?.isNotEmpty == true
513475
? txData.recipients!
514-
: [
515-
(
516-
address:
517-
'xel:xz9574c80c4xegnvurazpmxhw5dlg2n0g9qm60uwgt75uqyx3pcsqzzra9m',
518-
amount: Amount.zeroWith(
519-
fractionDigits: cryptoCurrency.fractionDigits,
520-
),
521-
isChange: false,
522-
),
523-
];
476+
: throw ArgumentError('Address cannot be empty.'); // in the future, support for multiple recipients will work.
524477

525478
final asset = assetId ?? xelis_sdk.xelisAsset;
526479

@@ -596,7 +549,7 @@ class XelisWallet extends LibXelisWallet {
596549
final defaultDecimals = cryptoCurrency.fractionDigits;
597550
final defaultFee = BigInt.from(0);
598551

599-
// Use default address if recipients list is empty
552+
// Use default address if recipients list is empty to ensure basic fee estimates are readily available
600553
final effectiveRecipients =
601554
recipients.isNotEmpty
602555
? recipients
@@ -816,6 +769,9 @@ class XelisWallet extends LibXelisWallet {
816769

817770
@override
818771
Future<void> handleOnline() async {
772+
await updateChainHeight();
773+
await updateBalance();
774+
await updateTransactions();
819775
GlobalEventBus.instance.fire(
820776
WalletSyncStatusChangedEvent(
821777
WalletSyncStatus.synced,

0 commit comments

Comments
 (0)