aboutsummaryrefslogtreecommitdiff
path: root/src/cryptonote_basic/hardfork.cpp
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2019-01-16 21:40:06 +0200
committerRiccardo Spagni <ric@spagni.net>2019-01-16 21:40:06 +0200
commitdc726f4b3bbc12219ce17d4257870bd64fb8767b (patch)
tree0ca39e168e4f087c43cb6ee573ab09c502a795a3 /src/cryptonote_basic/hardfork.cpp
parente59813c3d7afd14689da5ef07359dfe5bad8670b (diff)
parent5ee6f03742f7c14059da6139a9923c443668f4b0 (diff)
downloadmonzero-core-dc726f4b3bbc12219ce17d4257870bd64fb8767b.tar.gz
monzero-core-dc726f4b3bbc12219ce17d4257870bd64fb8767b.tar.xz
monzero-core-dc726f4b3bbc12219ce17d4257870bd64fb8767b.zip
Merge pull request #5032
5ee6f037 blockchain: fix wrong hf version when popping multiple blocks (moneromooo-monero) 634d359a blockchain: use the version passed as parameter, not a new one (moneromooo-monero) 94a375d5 hardfork: remove batch transactions setup (moneromooo-monero)
Diffstat (limited to 'src/cryptonote_basic/hardfork.cpp')
-rw-r--r--src/cryptonote_basic/hardfork.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/cryptonote_basic/hardfork.cpp b/src/cryptonote_basic/hardfork.cpp
index 87a394918..447d79aee 100644
--- a/src/cryptonote_basic/hardfork.cpp
+++ b/src/cryptonote_basic/hardfork.cpp
@@ -222,7 +222,6 @@ bool HardFork::reorganize_from_block_height(uint64_t height)
if (height >= db.height())
return false;
- db.set_batch_transactions(true);
bool stop_batch = db.batch_start();
versions.clear();
@@ -306,6 +305,29 @@ bool HardFork::rescan_from_chain_height(uint64_t height)
return rescan_from_block_height(height - 1);
}
+void HardFork::on_block_popped(uint64_t nblocks)
+{
+ CHECK_AND_ASSERT_THROW_MES(nblocks > 0, "nblocks must be greater than 0");
+
+ CRITICAL_REGION_LOCAL(lock);
+
+ const uint64_t new_chain_height = db.height();
+ const uint64_t old_chain_height = new_chain_height + nblocks;
+ uint8_t version;
+ uint64_t height;
+ for (height = old_chain_height - 1; height >= new_chain_height; --height)
+ {
+ versions.pop_back();
+ version = db.get_hard_fork_version(height);
+ versions.push_front(version);
+ }
+
+ // does not take voting into account
+ for (current_fork_index = heights.size() - 1; current_fork_index > 0; --current_fork_index)
+ if (height >= heights[current_fork_index].height)
+ break;
+}
+
int HardFork::get_voted_fork_index(uint64_t height) const
{
CRITICAL_REGION_LOCAL(lock);