aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobtoht <tob@featherwallet.org>2026-04-08 20:36:08 +0000
committertobtoht <tob@featherwallet.org>2026-04-08 20:36:08 +0000
commit515f5467321fcbacdce057dddbb112509774c907 (patch)
tree68c7b983c4372887585b3862829099d7cc54b14f
parentce92fc107347bcf129463ec464647fdcfbca72bd (diff)
parent7b1e9ca29801d1e380291371e40c8c37ac43d18d (diff)
downloadmonzero-core-515f5467321fcbacdce057dddbb112509774c907.tar.gz
monzero-core-515f5467321fcbacdce057dddbb112509774c907.tar.xz
monzero-core-515f5467321fcbacdce057dddbb112509774c907.zip
Merge pull request #10402
7b1e9ca multisig: add flag to skip refresh after multisig import (woodser)
-rw-r--r--src/wallet/wallet2.cpp6
-rw-r--r--src/wallet/wallet2.h4
-rw-r--r--src/wallet/wallet_rpc_server.cpp23
-rw-r--r--src/wallet/wallet_rpc_server_commands_defs.h2
4 files changed, 21 insertions, 14 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index af1f03d2c..00157cb3e 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -15398,7 +15398,7 @@ void wallet2::update_multisig_rescan_info(const std::vector<std::vector<rct::key
m_key_images[td.m_key_image] = n;
}
//----------------------------------------------------------------------------------------------------
-size_t wallet2::import_multisig(std::vector<cryptonote::blobdata> blobs)
+size_t wallet2::import_multisig(std::vector<cryptonote::blobdata> blobs, bool refresh_after_import)
{
CHECK_AND_ASSERT_THROW_MES(m_multisig, "Wallet is not multisig");
@@ -15523,8 +15523,8 @@ size_t wallet2::import_multisig(std::vector<cryptonote::blobdata> 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 a765dc475..cedfecbeb 100644
--- a/src/wallet/wallet2.h
+++ b/src/wallet/wallet2.h
@@ -994,9 +994,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<cryptonote::blobdata> info);
+ size_t import_multisig(std::vector<cryptonote::blobdata> 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 531dc3197..8d4c80c93 100644
--- a/src/wallet/wallet_rpc_server.cpp
+++ b/src/wallet/wallet_rpc_server.cpp
@@ -4431,7 +4431,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)
{
@@ -4440,21 +4440,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 bd3321ec0..26a1e2ab4 100644
--- a/src/wallet/wallet_rpc_server_commands_defs.h
+++ b/src/wallet/wallet_rpc_server_commands_defs.h
@@ -2454,9 +2454,11 @@ namespace wallet_rpc
struct request_t
{
std::vector<std::string> 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_t> request;