aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet2.cpp
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2022-08-18 07:14:45 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2022-09-07 06:22:31 +0000
commit1d3657afb5f53c7be0f839f8d449310b862b2006 (patch)
treeea0a747505eb86c70fd951edf60d1526ad47bb24 /src/wallet/wallet2.cpp
parentallow exporting outputs in chunks (diff)
downloadmonero-1d3657afb5f53c7be0f839f8d449310b862b2006.tar.xz
wallet2: better test on whether to allow output import
Being offline is not a good enough heuristic, so we keep track of whether the wallet ever refreshed from a daemon, which is a lot better, and probably the best we can do without manual user designation (which would break existing cold wallet setups till the user designates those wallets)
Diffstat (limited to 'src/wallet/wallet2.cpp')
-rw-r--r--src/wallet/wallet2.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 05d86a817..8be4aabb4 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -1218,7 +1218,8 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended, std
m_export_format(ExportFormat::Binary),
m_load_deprecated_formats(false),
m_credits_target(0),
- m_enable_multisig(false)
+ m_enable_multisig(false),
+ m_has_ever_refreshed_from_node(false)
{
set_rpc_client_secret_key(rct::rct2sk(rct::skGen()));
}
@@ -3535,6 +3536,8 @@ void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blo
throw std::runtime_error("proxy exception in refresh thread");
}
+ m_has_ever_refreshed_from_node = true;
+
if(!first && blocks_start_height == next_blocks_start_height)
{
m_node_rpc_proxy.set_height(m_blockchain.size());
@@ -13175,7 +13178,8 @@ size_t wallet2::import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<
{
PERF_TIMER(import_outputs);
- THROW_WALLET_EXCEPTION_IF(!m_offline, error::wallet_internal_error, "Hot wallets cannot import outputs");
+ THROW_WALLET_EXCEPTION_IF(m_has_ever_refreshed_from_node, error::wallet_internal_error,
+ "Hot wallets cannot import outputs");
// we can now import piecemeal
const size_t offset = std::get<0>(outputs);
@@ -13254,7 +13258,8 @@ size_t wallet2::import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<
{
PERF_TIMER(import_outputs);
- THROW_WALLET_EXCEPTION_IF(!m_offline, error::wallet_internal_error, "Hot wallets cannot import outputs");
+ THROW_WALLET_EXCEPTION_IF(m_has_ever_refreshed_from_node, error::wallet_internal_error,
+ "Hot wallets cannot import outputs");
// we can now import piecemeal
const size_t offset = std::get<0>(outputs);