aboutsummaryrefslogtreecommitdiff
path: root/src/cryptonote_core/hardfork.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cryptonote_core/hardfork.cpp')
-rw-r--r--src/cryptonote_core/hardfork.cpp44
1 files changed, 25 insertions, 19 deletions
diff --git a/src/cryptonote_core/hardfork.cpp b/src/cryptonote_core/hardfork.cpp
index edc2f33a9..2a2e25635 100644
--- a/src/cryptonote_core/hardfork.cpp
+++ b/src/cryptonote_core/hardfork.cpp
@@ -46,6 +46,11 @@ static uint8_t get_block_vote(const cryptonote::block &b)
return b.minor_version;
}
+static uint8_t get_block_version(const cryptonote::block &b)
+{
+ return b.major_version;
+}
+
HardFork::HardFork(cryptonote::BlockchainDB &db, uint8_t original_version, uint64_t original_version_till_height, time_t forked_time, time_t update_time, uint64_t window_size, uint8_t default_threshold_percent):
db(db),
original_version(original_version),
@@ -61,7 +66,7 @@ HardFork::HardFork(cryptonote::BlockchainDB &db, uint8_t original_version, uint6
throw "default_threshold_percent needs to be between 0 and 100";
}
-bool HardFork::add(uint8_t version, uint64_t height, uint8_t threshold, time_t time)
+bool HardFork::add_fork(uint8_t version, uint64_t height, uint8_t threshold, time_t time)
{
CRITICAL_REGION_LOCAL(lock);
@@ -82,42 +87,43 @@ bool HardFork::add(uint8_t version, uint64_t height, uint8_t threshold, time_t t
return true;
}
-bool HardFork::add(uint8_t version, uint64_t height, time_t time)
+bool HardFork::add_fork(uint8_t version, uint64_t height, time_t time)
{
- return add(version, height, default_threshold_percent, time);
+ return add_fork(version, height, default_threshold_percent, time);
}
-uint8_t HardFork::get_effective_version(uint8_t version) const
+uint8_t HardFork::get_effective_version(uint8_t voting_version) const
{
if (!heights.empty()) {
uint8_t max_version = heights.back().version;
- if (version > max_version)
- version = max_version;
+ if (voting_version > max_version)
+ voting_version = max_version;
}
- return version;
+ return voting_version;
}
-bool HardFork::do_check(uint8_t version) const
+bool HardFork::do_check(uint8_t block_version, uint8_t voting_version) const
{
- return version >= heights[current_fork_index].version;
+ return block_version >= heights[current_fork_index].version
+ && voting_version >= heights[current_fork_index].version;
}
bool HardFork::check(const cryptonote::block &block) const
{
CRITICAL_REGION_LOCAL(lock);
- return do_check(get_block_vote(block));
+ return do_check(::get_block_version(block), ::get_block_vote(block));
}
-bool HardFork::add(uint8_t block_version, uint64_t height)
+bool HardFork::add(uint8_t block_version, uint8_t voting_version, uint64_t height)
{
CRITICAL_REGION_LOCAL(lock);
- if (!do_check(block_version))
+ if (!do_check(block_version, voting_version))
return false;
db.set_hard_fork_version(height, heights[current_fork_index].version);
- const uint8_t version = get_effective_version(block_version);
+ voting_version = get_effective_version(voting_version);
while (versions.size() >= window_size) {
const uint8_t old_version = versions.front();
@@ -126,8 +132,8 @@ bool HardFork::add(uint8_t block_version, uint64_t height)
versions.pop_front();
}
- last_versions[version]++;
- versions.push_back(version);
+ last_versions[voting_version]++;
+ versions.push_back(voting_version);
uint8_t voted = get_voted_fork_index(height + 1);
if (voted > current_fork_index) {
@@ -143,7 +149,7 @@ bool HardFork::add(uint8_t block_version, uint64_t height)
bool HardFork::add(const cryptonote::block &block, uint64_t height)
{
- return add(get_block_vote(block), height);
+ return add(::get_block_version(block), ::get_block_vote(block), height);
}
void HardFork::init()
@@ -185,7 +191,7 @@ uint8_t HardFork::get_block_version(uint64_t height) const
return original_version;
const cryptonote::block &block = db.get_block_from_height(height);
- return get_block_vote(block);
+ return ::get_block_version(block);
}
bool HardFork::reorganize_from_block_height(uint64_t height)
@@ -225,7 +231,7 @@ bool HardFork::reorganize_from_block_height(uint64_t height)
const uint64_t bc_height = db.height();
for (uint64_t h = height + 1; h < bc_height; ++h) {
- add(get_block_version(h), h);
+ add(db.get_block_from_height(h), h);
}
db.batch_stop();
@@ -258,7 +264,7 @@ bool HardFork::rescan_from_block_height(uint64_t height)
versions.push_back(v);
}
- uint8_t lastv = db.get_hard_fork_version(height);
+ uint8_t lastv = db.get_hard_fork_version(db.height() - 1);
current_fork_index = 0;
while (current_fork_index + 1 < heights.size() && heights[current_fork_index].version != lastv)
++current_fork_index;