diff options
-rw-r--r-- | .travis.yml | 10 | ||||
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/cryptonote_core/blockchain.h | 7 | ||||
-rw-r--r-- | src/cryptonote_core/hardfork.cpp | 12 | ||||
-rw-r--r-- | src/cryptonote_core/hardfork.h | 7 | ||||
-rw-r--r-- | src/daemon/rpc_command_executor.cpp | 24 | ||||
-rw-r--r-- | src/rpc/core_rpc_server.cpp | 2 |
7 files changed, 59 insertions, 7 deletions
diff --git a/.travis.yml b/.travis.yml index 1e11d543c..beea1dfab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,6 @@ addons: - gcc - clang - graphviz - - libboost1.55-all-dev - libdb++-dev - libdb-dev - libgtest-dev @@ -23,8 +22,13 @@ addons: - libssl1.0.0 - libunbound-dev - libunwind8-dev - #sources: - #- ubuntu-toolchain-r-test + sources: + - ubuntu-toolchain-r-test +before_install: +- sudo add-apt-repository -y ppa:kojoley/boost +- sudo apt-get -q update +install: +- sudo apt-get -y install libboost-{chrono,program-options,date-time,thread,system,filesystem,regex,serialization}1.58{-dev,.0} script: make -j2 && HAVE_DOT=YES doxygen Doxyfile notifications: email: false diff --git a/CMakeLists.txt b/CMakeLists.txt index 476736334..5ac4a2f95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -407,8 +407,8 @@ else() set(USE_LTO false) # explicitly define stdlib for older versions of clang if(CMAKE_C_COMPILER_VERSION VERSION_LESS 3.7) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libstdc++") endif() endif() 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(); |