hardfork: add a get_ideal_version(uint64_t) function

It returns the ideal version for a given height, which is
based on the minimum height for a fork, disregarding votes
This commit is contained in:
moneromooo-monero 2015-11-09 21:22:32 +00:00
parent 4187e569d8
commit 2f254ff599
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
3 changed files with 40 additions and 0 deletions

View file

@ -337,6 +337,17 @@ uint8_t HardFork::get_ideal_version() const
return heights.back().version;
}
uint8_t HardFork::get_ideal_version(uint64_t height) const
{
CRITICAL_REGION_LOCAL(lock);
for (unsigned int n = heights.size() - 1; n > 0; --n) {
if (height >= heights[n].height) {
return heights[n].version;
}
}
return original_version;
}
bool HardFork::get_voting_info(uint8_t version, uint32_t &window, uint32_t &votes, uint32_t &threshold, uint8_t &voting) const
{
CRITICAL_REGION_LOCAL(lock);

View file

@ -167,6 +167,13 @@ namespace cryptonote
*/
uint8_t get_ideal_version() const;
/**
* @brief returns the "ideal" version for a given height
*
* @param height height of the block to check
*/
uint8_t get_ideal_version(uint64_t height) const;
/**
* @brief returns the current version
*

View file

@ -480,3 +480,25 @@ TEST(reorganize, changed)
ASSERT_EQ(hf.get_current_version(), 2); // we did not bump to 3 this time
ASSERT_EQ(hf.get_start_height(3), std::numeric_limits<uint64_t>::max()); // not yet
}
TEST(get, higher)
{
TestDB db;
HardFork hf(db, 1, 0, 1, 1, 4, 50);
// v h t
ASSERT_TRUE(hf.add(1, 0, 0));
ASSERT_TRUE(hf.add(2, 2, 1));
ASSERT_TRUE(hf.add(3, 5, 2));
hf.init();
ASSERT_EQ(hf.get_ideal_version(0), 1);
ASSERT_EQ(hf.get_ideal_version(1), 1);
ASSERT_EQ(hf.get_ideal_version(2), 2);
ASSERT_EQ(hf.get_ideal_version(3), 2);
ASSERT_EQ(hf.get_ideal_version(4), 2);
ASSERT_EQ(hf.get_ideal_version(5), 3);
ASSERT_EQ(hf.get_ideal_version(6), 3);
ASSERT_EQ(hf.get_ideal_version(7), 3);
}