diff --git a/src/blocks/checkpoints.dat b/src/blocks/checkpoints.dat index 8a6bed31a..24cfffa38 100644 Binary files a/src/blocks/checkpoints.dat and b/src/blocks/checkpoints.dat differ diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 83e6e40b0..badb1a335 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -85,6 +85,12 @@ static const struct { // version 3 starts from block 1141317, which is on or around the 24th of September, 2016. Fork time finalised on 2016-03-21. { 3, 1141317, 0, 1458558528 }, + + // version 4 starts from block 1220517, which is on or around the 5th of January, 2017. Fork time finalised on 2016-09-18. + { 4, 1220517, 0, 1483574400 }, + + // version 5 starts from block 1406997, which is on or around the 20th of September, 2017. Fork time finalised on 2016-09-18. + { 5, 1406997, 0, 1505865600 }, }; static const uint64_t mainnet_hard_fork_version_1_till = 1009826; @@ -100,6 +106,7 @@ static const struct { // version 2 starts from block 624634, which is on or around the 23rd of November, 2015. Fork time finalised on 2015-11-20. No fork voting occurs for the v2 fork. { 2, 624634, 0, 1445355000 }, + // versions 3-5 were passed in rapid succession from September 18th, 2016 { 3, 800500, 0, 1472415034 }, { 4, 801220, 0, 1472415035 }, { 5, 802660, 0, 1472415036 }, diff --git a/src/cryptonote_core/checkpoints.cpp b/src/cryptonote_core/checkpoints.cpp index c038a4802..1d5959c46 100644 --- a/src/cryptonote_core/checkpoints.cpp +++ b/src/cryptonote_core/checkpoints.cpp @@ -184,6 +184,8 @@ namespace cryptonote ADD_CHECKPOINT(825000, "56503f9ad766774b575be3aff73245e9d159be88132c93d1754764f28da2ff60"); ADD_CHECKPOINT(900000, "d9958d0e7dcf91a5a7b11de225927bf7efc6eb26240315ce12372be902cc1337"); ADD_CHECKPOINT(913193, "5292d5d56f6ba4de33a58d9a34d263e2cb3c6fee0aed2286fd4ac7f36d53c85f"); + ADD_CHECKPOINT(1000000, "a886ef5149902d8342475fee9bb296341b891ac67c4842f47a833f23c00ed721"); + ADD_CHECKPOINT(1100000, "3fd720c5c8b3072fc1ccda922dec1ef25f9ed88a1e6ad4103d0fe00b180a5903"); return true; } diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index 75cc8b65a..9c1d8629d 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -360,10 +360,9 @@ namespace nodetool if (testnet) { memcpy(&m_network_id, &::config::testnet::NETWORK_ID, 16); - full_addrs.insert("197.242.158.240:28080"); - full_addrs.insert("107.152.130.98:28080"); - full_addrs.insert("5.9.25.103:28080"); - full_addrs.insert("5.9.55.70:28080"); + full_addrs.insert("163.172.182.165:28080"); + full_addrs.insert("204.12.248.66:28080"); + full_addrs.insert("5.9.100.248:28080"); } else { @@ -439,28 +438,11 @@ namespace nodetool if (!full_addrs.size()) { LOG_PRINT_L0("DNS seed node lookup either timed out or failed, falling back to defaults"); - full_addrs.insert("46.165.232.77:18080"); - full_addrs.insert("63.141.254.186:18080"); - full_addrs.insert("119.81.118.164:18080"); - full_addrs.insert("60.191.33.112:18080"); full_addrs.insert("198.74.231.92:18080"); - full_addrs.insert("5.9.55.70:18080"); - full_addrs.insert("119.81.118.165:18080"); - full_addrs.insert("202.112.0.100:18080"); - full_addrs.insert("84.106.163.174:18080"); - full_addrs.insert("178.206.94.87:18080"); - full_addrs.insert("119.81.118.163:18080"); - full_addrs.insert("95.37.217.253:18080"); full_addrs.insert("161.67.132.39:18080"); - full_addrs.insert("119.81.48.114:18080"); - full_addrs.insert("119.81.118.166:18080"); - full_addrs.insert("93.120.240.209:18080"); - full_addrs.insert("46.183.145.69:18080"); - full_addrs.insert("108.170.123.66:18080"); - full_addrs.insert("5.9.83.204:18080"); - full_addrs.insert("104.130.19.193:18080"); - full_addrs.insert("119.81.48.115:18080"); - full_addrs.insert("80.71.13.36:18080"); + full_addrs.insert("163.172.182.165:18080"); + full_addrs.insert("204.12.248.66:18080"); + full_addrs.insert("5.9.100.248:18080"); } } diff --git a/src/version.h.in b/src/version.h.in index 65b899ed2..c1eca54b8 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -1,4 +1,4 @@ #define MONERO_VERSION_TAG "@VERSIONTAG@" -#define MONERO_VERSION "0.9.4.0" -#define MONERO_RELEASE_NAME "Hydrogen Helix" +#define MONERO_VERSION "0.10.0.0" +#define MONERO_RELEASE_NAME "Wolfram Warptangent" #define MONERO_VERSION_FULL MONERO_VERSION "-" MONERO_VERSION_TAG diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index 25a20a575..74552bc03 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -170,7 +170,7 @@ WalletImpl::WalletImpl(bool testnet) m_refreshThreadDone = false; m_refreshEnabled = false; m_refreshIntervalSeconds = DEFAULT_REFRESH_INTERVAL_SECONDS; - m_refreshThread = std::thread([this] () { + m_refreshThread = boost::thread([this] () { this->refreshThreadFunc(); }); @@ -632,12 +632,12 @@ void WalletImpl::refreshThreadFunc() LOG_PRINT_L3(__FUNCTION__ << ": starting refresh thread"); while (true) { - std::unique_lock lock(m_refreshMutex); + boost::mutex::scoped_lock lock(m_refreshMutex); if (m_refreshThreadDone) { break; } LOG_PRINT_L3(__FUNCTION__ << ": waiting for refresh..."); - m_refreshCV.wait_for(lock, std::chrono::seconds(m_refreshIntervalSeconds)); + m_refreshCV.wait(lock); LOG_PRINT_L3(__FUNCTION__ << ": refresh lock acquired..."); LOG_PRINT_L3(__FUNCTION__ << ": m_refreshEnabled: " << m_refreshEnabled); LOG_PRINT_L3(__FUNCTION__ << ": m_status: " << m_status); @@ -652,7 +652,7 @@ void WalletImpl::refreshThreadFunc() void WalletImpl::doRefresh() { // synchronizing async and sync refresh calls - std::lock_guard guarg(m_refreshMutex2); + boost::lock_guard guarg(m_refreshMutex2); try { m_wallet->refresh(); } catch (const std::exception &e) { diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h index 9a290e0bc..658296c30 100644 --- a/src/wallet/api/wallet.h +++ b/src/wallet/api/wallet.h @@ -35,9 +35,9 @@ #include "wallet/wallet2.h" #include -#include -#include -#include +#include +#include +#include namespace Bitmonero { @@ -113,12 +113,12 @@ private: std::atomic m_refreshThreadDone; std::atomic m_refreshIntervalSeconds; // synchronizing refresh loop; - std::mutex m_refreshMutex; + boost::mutex m_refreshMutex; // synchronizing sync and async refresh - std::mutex m_refreshMutex2; - std::condition_variable m_refreshCV; - std::thread m_refreshThread; + boost::mutex m_refreshMutex2; + boost::condition_variable m_refreshCV; + boost::thread m_refreshThread; };