diff --git a/cw_monero/lib/api/wallet.dart b/cw_monero/lib/api/wallet.dart index 78153a654..537c9802e 100644 --- a/cw_monero/lib/api/wallet.dart +++ b/cw_monero/lib/api/wallet.dart @@ -126,8 +126,10 @@ Future setupNodeSync( if (status != 0) { final error = monero.Wallet_errorString(wptr!); - printV("error: $error"); - throw SetupWalletException(message: error); + if (error != "no tx keys found for this txid") { + printV("error: $error"); + throw SetupWalletException(message: error); + } } if (kDebugMode) { diff --git a/cw_monero/lib/monero_wallet.dart b/cw_monero/lib/monero_wallet.dart index 4d2f95e47..54c36a828 100644 --- a/cw_monero/lib/monero_wallet.dart +++ b/cw_monero/lib/monero_wallet.dart @@ -265,6 +265,14 @@ abstract class MoneroWalletBase extends WalletBase createTransaction(Object credentials) async { final _credentials = credentials as MoneroTransactionCreationCredentials; diff --git a/lib/monero/cw_monero.dart b/lib/monero/cw_monero.dart index 89b1579fc..037ab8f9c 100644 --- a/lib/monero/cw_monero.dart +++ b/lib/monero/cw_monero.dart @@ -391,6 +391,12 @@ class CWMonero extends Monero { return moneroWallet.exportOutputsUR(all); } + @override + bool needExportOutputs(Object wallet, int amount) { + final moneroWallet = wallet as MoneroWallet; + return moneroWallet.needExportOutputs(amount); + } + @override void monerocCheck() { checkIfMoneroCIsFine(); diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index ca471c4f2..a52bd11e9 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -4,6 +4,7 @@ import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/entities/template.dart'; +import 'package:cake_wallet/monero/monero.dart'; import 'package:cake_wallet/reactions/wallet_connect.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; @@ -412,6 +413,20 @@ class SendPage extends BasePage { } } + if (sendViewModel.wallet.type == WalletType.monero) { + int amount = 0; + for (var item in sendViewModel.outputs) { + amount += item.formattedCryptoAmount; + } + if (monero!.needExportOutputs(sendViewModel.wallet, amount)) { + await Navigator.of(context).pushNamed(Routes.urqrAnimatedPage, arguments: 'export-outputs'); + await Future.delayed(Duration(seconds: 1)); // wait for monero to refresh the state + } + if (monero!.needExportOutputs(sendViewModel.wallet, amount)) { + return; + } + } + final check = sendViewModel.shouldDisplayTotp(); authService.authenticateAction( context, diff --git a/tool/configure.dart b/tool/configure.dart index c08ef3a34..44d42fa55 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -387,6 +387,8 @@ abstract class Monero { String exportOutputsUR(Object wallet, bool all); + bool needExportOutputs(Object wallet, int amount); + bool importKeyImagesUR(Object wallet, String ur); WalletCredentials createMoneroRestoreWalletFromKeysCredentials({