diff --git a/lib/view_model/restore/restore_wallet.dart b/lib/view_model/restore/restore_wallet.dart index cc3ad4123..153a9960a 100644 --- a/lib/view_model/restore/restore_wallet.dart +++ b/lib/view_model/restore/restore_wallet.dart @@ -35,7 +35,7 @@ class RestoredWallet { factory RestoredWallet.fromKey(Map json) { try { - final codeParsed = jsonDecode(json['raw_qr'].toString()); + final codeParsed = jsonDecode(json['raw_qr'].toString()); if (codeParsed["version"] == 0) { json['address'] = codeParsed["primaryAddress"]; json['view_key'] = codeParsed["privateViewKey"]; @@ -44,6 +44,7 @@ class RestoredWallet { } catch (e) { // fine, we don't care, it is only for monero anyway } + json['view_key'] ??= json['xpub']; final height = json['height'] as String?; return RestoredWallet( restoreMode: json['mode'] as WalletRestoreMode, @@ -51,7 +52,7 @@ class RestoredWallet { address: json['address'] as String?, spendKey: json['spend_key'] as String?, viewKey: json['view_key'] as String?, - height: height != null ? int.tryParse(height)??0 : 0, + height: height != null ? int.tryParse(height) ?? 0 : 0, privateKey: json['private_key'] as String?, ); } diff --git a/lib/view_model/restore/wallet_restore_from_qr_code.dart b/lib/view_model/restore/wallet_restore_from_qr_code.dart index 530ba1725..bc959d349 100644 --- a/lib/view_model/restore/wallet_restore_from_qr_code.dart +++ b/lib/view_model/restore/wallet_restore_from_qr_code.dart @@ -158,6 +158,10 @@ class WalletRestoreFromQRCode { throw Exception('Unexpected restore mode: tx_payment_id is invalid'); } + if (credentials.containsKey("xpub")) { + return WalletRestoreMode.keys; + } + if (credentials['seed'] != null) { final seedValue = credentials['seed'] as String; final words = SeedValidator.getWordList(type: type, language: 'english');