From 08c9aec897025e9cbdc4111ccb580a9b955a40f0 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Mon, 6 Apr 2026 11:39:57 -0400 Subject: [PATCH] multisig: add flag to skip refresh after multisig import --- src/wallet/wallet2.cpp | 6 ++--- src/wallet/wallet2.h | 4 +++- src/wallet/wallet_rpc_server.cpp | 23 +++++++++++--------- src/wallet/wallet_rpc_server_commands_defs.h | 2 ++ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index d7ecd39d4..a2195bcb0 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -14631,7 +14631,7 @@ void wallet2::update_multisig_rescan_info(const std::vector blobs) +size_t wallet2::import_multisig(std::vector blobs, bool refresh_after_import) { CHECK_AND_ASSERT_THROW_MES(m_multisig, "Wallet is not multisig"); @@ -14749,8 +14749,8 @@ size_t wallet2::import_multisig(std::vector blobs) update_multisig_rescan_info(m_multisig_rescan_k, m_multisig_rescan_info, n); } - - refresh(false); + if (refresh_after_import) + refresh(false); return n_outputs; } diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index ded9342c0..36e5082d1 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -999,9 +999,11 @@ private: cryptonote::blobdata export_multisig(); /*! * Import a set of multisig info from multisig partners + * \param info Multisig info from other participants + * \param refresh_after_import Whether to refresh the wallet and rescan spent outputs after importing * \return the number of inputs which were imported */ - size_t import_multisig(std::vector info); + size_t import_multisig(std::vector info, bool refresh_after_import = true); /*! * \brief Rewrites to the wallet file for wallet upgrade (doesn't generate key, assumes it's already there) * \param wallet_name Name of wallet file (should exist) diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index c038f81b4..121cf0a46 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -4472,7 +4472,7 @@ namespace tools try { - res.n_outputs = m_wallet->import_multisig(info); + res.n_outputs = m_wallet->import_multisig(info, req.refresh_after_import); } catch (const std::exception &e) { @@ -4481,21 +4481,24 @@ namespace tools return false; } - if (m_wallet->is_trusted_daemon()) + if (req.refresh_after_import) { - try + if (m_wallet->is_trusted_daemon()) { - m_wallet->rescan_spent(); + try + { + m_wallet->rescan_spent(); + } + catch (const std::exception &e) + { + er.message = std::string("Success, but failed to update spent status after import multisig info: ") + e.what(); + } } - catch (const std::exception &e) + else { - er.message = std::string("Success, but failed to update spent status after import multisig info: ") + e.what(); + er.message = "Success, but cannot update spent status after import multisig info as daemon is untrusted"; } } - else - { - er.message = "Success, but cannot update spent status after import multisig info as daemon is untrusted"; - } return true; } diff --git a/src/wallet/wallet_rpc_server_commands_defs.h b/src/wallet/wallet_rpc_server_commands_defs.h index e6332d273..36626307a 100644 --- a/src/wallet/wallet_rpc_server_commands_defs.h +++ b/src/wallet/wallet_rpc_server_commands_defs.h @@ -2456,9 +2456,11 @@ namespace wallet_rpc struct request_t { std::vector info; + bool refresh_after_import; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(info) + KV_SERIALIZE_OPT(refresh_after_import, true) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init request;