aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-10-15 19:16:13 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-11-01 18:59:41 +0000
commite1083302489810562e8c9f19a4d2528ea9dd501d (patch)
tree7252c6e1b98427c7728f0c293b2ba954b886a9a6
parentwallet2: fix is_synced checking target height, not height (diff)
downloadmonero-e1083302489810562e8c9f19a4d2528ea9dd501d.tar.xz
wallet: reuse cached height when set after refresh
Refreshing sets cached height, which is otherwise got by calling get_info. Since get_info is called upon needing to display a prompt after a command has finished, it can be used to determine how much time a given command took to run if the cache timeout lapses while the command runs. Refreshing caches the height as a side effect, so get_info will never be called as a result of displaying a prompt after refreshing (and potentially leaking how much time it took to process a set of transactions, therefore leaking whether we got some monero in them).
-rw-r--r--src/wallet/node_rpc_proxy.cpp10
-rw-r--r--src/wallet/node_rpc_proxy.h1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/wallet/node_rpc_proxy.cpp b/src/wallet/node_rpc_proxy.cpp
index 731896715..15ea26044 100644
--- a/src/wallet/node_rpc_proxy.cpp
+++ b/src/wallet/node_rpc_proxy.cpp
@@ -77,6 +77,7 @@ void NodeRPCProxy::invalidate()
m_rpc_payment_seed_height = 0;
m_rpc_payment_seed_hash = crypto::null_hash;
m_rpc_payment_next_seed_hash = crypto::null_hash;
+ m_height_time = 0;
}
boost::optional<std::string> NodeRPCProxy::get_rpc_version(uint32_t &rpc_version)
@@ -101,6 +102,7 @@ boost::optional<std::string> NodeRPCProxy::get_rpc_version(uint32_t &rpc_version
void NodeRPCProxy::set_height(uint64_t h)
{
m_height = h;
+ m_height_time = time(NULL);
}
boost::optional<std::string> NodeRPCProxy::get_info()
@@ -126,12 +128,20 @@ boost::optional<std::string> NodeRPCProxy::get_info()
m_target_height = resp_t.target_height;
m_block_weight_limit = resp_t.block_weight_limit ? resp_t.block_weight_limit : resp_t.block_size_limit;
m_get_info_time = now;
+ m_height_time = now;
}
return boost::optional<std::string>();
}
boost::optional<std::string> NodeRPCProxy::get_height(uint64_t &height)
{
+ const time_t now = time(NULL);
+ if (now < m_height_time + 30) // re-cache every 30 seconds
+ {
+ height = m_height;
+ return boost::optional<std::string>();
+ }
+
auto res = get_info();
if (res)
return res;
diff --git a/src/wallet/node_rpc_proxy.h b/src/wallet/node_rpc_proxy.h
index a9d8167ac..65ca40640 100644
--- a/src/wallet/node_rpc_proxy.h
+++ b/src/wallet/node_rpc_proxy.h
@@ -97,6 +97,7 @@ private:
crypto::hash m_rpc_payment_seed_hash;
crypto::hash m_rpc_payment_next_seed_hash;
uint32_t m_rpc_payment_cookie;
+ time_t m_height_time;
};
}