aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-07-25 22:41:49 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-07-25 23:16:02 +0100
commitb3801faafa84a0750608aa908d283140acb9c856 (patch)
treed45d65e0bc4885bbc97bbc0e1d3ef2d3e2a39960
parentMerge pull request #927 (diff)
downloadmonero-b3801faafa84a0750608aa908d283140acb9c856.tar.xz
hardfork: fix off by one in rescaning fork state after restart
This code should die anyway.
-rw-r--r--src/cryptonote_core/hardfork.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cryptonote_core/hardfork.cpp b/src/cryptonote_core/hardfork.cpp
index d3262dbe3..39c026b08 100644
--- a/src/cryptonote_core/hardfork.cpp
+++ b/src/cryptonote_core/hardfork.cpp
@@ -164,7 +164,7 @@ void HardFork::init()
// restore state from DB
uint64_t height = db.height();
if (height > window_size)
- height -= window_size;
+ height -= window_size - 1;
else
height = 1;
@@ -259,8 +259,7 @@ bool HardFork::rescan_from_block_height(uint64_t height)
for (size_t n = 0; n < 256; ++n)
last_versions[n] = 0;
- const uint64_t rescan_height = height >= (window_size - 1) ? height - (window_size -1) : 0;
- for (uint64_t h = rescan_height; h <= height; ++h) {
+ for (uint64_t h = height; h < db.height(); ++h) {
cryptonote::block b = db.get_block_from_height(h);
const uint8_t v = get_effective_version(get_block_vote(b));
last_versions[v]++;
@@ -271,6 +270,12 @@ bool HardFork::rescan_from_block_height(uint64_t height)
current_fork_index = 0;
while (current_fork_index + 1 < heights.size() && heights[current_fork_index].version != lastv)
++current_fork_index;
+
+ uint8_t voted = get_voted_fork_index(db.height());
+ if (voted > current_fork_index) {
+ current_fork_index = voted;
+ }
+
db.block_txn_stop();
return true;