aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cryptonote_core/blockchain.h7
-rw-r--r--src/cryptonote_core/hardfork.cpp12
-rw-r--r--src/cryptonote_core/hardfork.h7
-rw-r--r--src/daemon/rpc_command_executor.cpp24
-rw-r--r--src/rpc/core_rpc_server.cpp2
5 files changed, 50 insertions, 2 deletions
diff --git a/src/cryptonote_core/blockchain.h b/src/cryptonote_core/blockchain.h
index f5950291c..1524693b8 100644
--- a/src/cryptonote_core/blockchain.h
+++ b/src/cryptonote_core/blockchain.h
@@ -667,6 +667,13 @@ namespace cryptonote
uint8_t get_ideal_hard_fork_version() const { return m_hardfork->get_ideal_version(); }
/**
+ * @brief returns the next hardfork version
+ *
+ * @return the version
+ */
+ uint8_t get_next_hard_fork_version() const { return m_hardfork->get_next_version(); }
+
+ /**
* @brief returns the newest hardfork version voted to be enabled
* as of a certain height
*
diff --git a/src/cryptonote_core/hardfork.cpp b/src/cryptonote_core/hardfork.cpp
index 39c026b08..c63ca36ef 100644
--- a/src/cryptonote_core/hardfork.cpp
+++ b/src/cryptonote_core/hardfork.cpp
@@ -369,6 +369,18 @@ uint64_t HardFork::get_earliest_ideal_height_for_version(uint8_t version) const
return 0;
}
+uint8_t HardFork::get_next_version() const
+{
+ CRITICAL_REGION_LOCAL(lock);
+ uint64_t height = db.height();
+ for (unsigned int n = heights.size() - 1; n > 0; --n) {
+ if (height >= heights[n].height) {
+ return heights[n < heights.size() - 1 ? n + 1 : n].version;
+ }
+ }
+ return original_version;
+}
+
bool HardFork::get_voting_info(uint8_t version, uint32_t &window, uint32_t &votes, uint32_t &threshold, uint64_t &earliest_height, uint8_t &voting) const
{
CRITICAL_REGION_LOCAL(lock);
diff --git a/src/cryptonote_core/hardfork.h b/src/cryptonote_core/hardfork.h
index b3d485878..33b958f9c 100644
--- a/src/cryptonote_core/hardfork.h
+++ b/src/cryptonote_core/hardfork.h
@@ -169,6 +169,13 @@ namespace cryptonote
uint8_t get_ideal_version(uint64_t height) const;
/**
+ * @brief returns the next version
+ *
+ * This is the version which will we fork to next
+ */
+ uint8_t get_next_version() const;
+
+ /**
* @brief returns the current version
*
* This is the latest version that's past its trigger date and had enough votes
diff --git a/src/daemon/rpc_command_executor.cpp b/src/daemon/rpc_command_executor.cpp
index 0a0fc793d..fba3e5398 100644
--- a/src/daemon/rpc_command_executor.cpp
+++ b/src/daemon/rpc_command_executor.cpp
@@ -274,6 +274,27 @@ static std::string get_mining_speed(uint64_t hr)
return (boost::format("%.0f H/s") % hr).str();
}
+static std::string get_fork_extra_info(uint64_t t, uint64_t now, uint64_t block_time)
+{
+ uint64_t blocks_per_day = 86400 / block_time;
+
+ if (t == now)
+ return " (forking now)";
+
+ if (t > now)
+ {
+ uint64_t dblocks = t - now;
+ if (dblocks <= 30)
+ return (boost::format(" (next fork in %u blocks)") % (unsigned)dblocks).str();
+ if (dblocks <= blocks_per_day / 2)
+ return (boost::format(" (next fork in %.1f hours)") % (dblocks / (float)(blocks_per_day / 24))).str();
+ if (dblocks <= blocks_per_day * 30)
+ return (boost::format(" (next fork in %.1f days)") % (dblocks / (float)blocks_per_day)).str();
+ return "";
+ }
+ return "";
+}
+
bool t_rpc_command_executor::show_status() {
cryptonote::COMMAND_RPC_GET_INFO::request ireq;
cryptonote::COMMAND_RPC_GET_INFO::response ires;
@@ -331,7 +352,7 @@ bool t_rpc_command_executor::show_status() {
}
}
- tools::success_msg_writer() << boost::format("Height: %llu/%llu (%.1f%%) on %s, %s, net hash %s, v%u, %s, %u+%u connections")
+ tools::success_msg_writer() << boost::format("Height: %llu/%llu (%.1f%%) on %s, %s, net hash %s, v%u%s, %s, %u+%u connections")
% (unsigned long long)ires.height
% (unsigned long long)(ires.target_height >= ires.height ? ires.target_height : ires.height)
% (100.0f * ires.height / (ires.target_height ? ires.target_height < ires.height ? ires.height : ires.target_height : ires.height))
@@ -339,6 +360,7 @@ bool t_rpc_command_executor::show_status() {
% (mining_busy ? "syncing" : mres.active ? "mining at " + get_mining_speed(mres.speed) : "not mining")
% get_mining_speed(ires.difficulty / ires.target)
% (unsigned)hfres.version
+ % get_fork_extra_info(hfres.earliest_height, ires.height, ires.target)
% (hfres.state == cryptonote::HardFork::Ready ? "up to date" : hfres.state == cryptonote::HardFork::UpdateNeeded ? "update needed" : "out of date, likely forked")
% (unsigned)ires.outgoing_connections_count % (unsigned)ires.incoming_connections_count
;
diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp
index 9cd1893cf..e6fc11060 100644
--- a/src/rpc/core_rpc_server.cpp
+++ b/src/rpc/core_rpc_server.cpp
@@ -1025,7 +1025,7 @@ namespace cryptonote
#if BLOCKCHAIN_DB == DB_LMDB
const Blockchain &blockchain = m_core.get_blockchain_storage();
- uint8_t version = req.version > 0 ? req.version : blockchain.get_ideal_hard_fork_version();
+ uint8_t version = req.version > 0 ? req.version : blockchain.get_next_hard_fork_version();
res.version = blockchain.get_current_hard_fork_version();
res.enabled = blockchain.get_hard_fork_voting_info(version, res.window, res.votes, res.threshold, res.earliest_height, res.voting);
res.state = blockchain.get_hard_fork_state();