diff options
author | Riccardo Spagni <ric@spagni.net> | 2017-08-15 20:49:56 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2017-08-15 20:49:56 +0200 |
commit | 9721b37bd5c32fb81620b8f0587b87ff9007489d (patch) | |
tree | 17f38a13e3ab64e855a5f7cea086c1e1ba4386ef | |
parent | Merge pull request #2256 (diff) | |
parent | wallet2: improve refresh height determination (diff) | |
download | monero-9721b37bd5c32fb81620b8f0587b87ff9007489d.tar.xz |
Merge pull request #2258
74597bd1 wallet2: improve refresh height determination (moneromooo-monero)
-rw-r--r-- | src/wallet/wallet2.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 18bf545aa..b63e07b2d 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2222,9 +2222,26 @@ crypto::secret_key wallet2::generate(const std::string& wallet_, const std::stri // try asking the daemon first if(m_refresh_from_block_height == 0 && !recover){ std::string err; - uint64_t height = get_daemon_blockchain_height(err); - if (err.empty()) - m_refresh_from_block_height = height - blocks_per_month; + uint64_t height = 0; + + // we get the max of approximated height and known height + // approximated height is the least of daemon target height + // (the max of what the other daemons are claiming is their + // height) and the theoretical height based on the local + // clock. This will be wrong only if both the local clock + // is bad *and* a peer daemon claims a highest height than + // the real chain. + // known height is the height the local daemon is currently + // synced to, it will be lower than the real chain height if + // the daemon is currently syncing. + height = get_approximate_blockchain_height(); + uint64_t target_height = get_daemon_blockchain_target_height(err); + if (err.empty() && target_height < height) + height = target_height; + uint64_t local_height = get_daemon_blockchain_height(err); + if (err.empty() && local_height > height) + height = local_height; + m_refresh_from_block_height = height >= blocks_per_month ? height - blocks_per_month : 0; } if(m_refresh_from_block_height == 0 && !recover){ |