From 668d59705c3582a8784a98642cc7faaa5f8d5620 Mon Sep 17 00:00:00 2001 From: enWILLYado Date: Mon, 26 Feb 2018 20:24:31 +0100 Subject: [PATCH 1/2] Update configuration Update configuration flags and fix default donate pool servers (cryptonight and cryptonight-little). --- src/Options.cpp | 59 ++++++++++++++++----------- src/Options.h | 1 + src/config.json | 13 +++--- src/donate.h | 5 ++- src/net/strategies/DonateStrategy.cpp | 4 +- 5 files changed, 50 insertions(+), 32 deletions(-) diff --git a/src/Options.cpp b/src/Options.cpp index ac619c79..5e887d01 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -113,7 +113,7 @@ static struct option const options[] = { "donate-level", 1, nullptr, 1003 }, { "dry-run", 0, nullptr, 5000 }, { "help", 0, nullptr, 'h' }, - { "keepalive", 0, nullptr , 'k' }, + { "keepalive", 0, nullptr, 'k' }, { "log-file", 1, nullptr, 'l' }, { "max-cpu-usage", 1, nullptr, 1004 }, { "nicehash", 0, nullptr, 1006 }, @@ -161,12 +161,13 @@ static struct option const config_options[] = static struct option const donate_options[] = { { "donate-url", required_argument, nullptr, 1391 }, - { "donate-user", required_argument, nullptr, 1392 }, - { "donate-pass", required_argument, nullptr, 1393 }, - { "donate-userpass", required_argument, nullptr, 1394 }, - { "donate-keepalive", 0, nullptr, 1395 }, - { "donate-nicehash", 0, nullptr, 1396 }, - { "donate-minutes", optional_argument, nullptr, 1397 }, + { "donate-url-little", required_argument, nullptr, 1392 }, + { "donate-user", required_argument, nullptr, 1393 }, + { "donate-pass", required_argument, nullptr, 1394 }, + { "donate-userpass", required_argument, nullptr, 1395 }, + { "donate-keepalive", no_argument, nullptr, 1396 }, + { "donate-nicehash", no_argument, nullptr, 1397 }, + { "donate-minutes", no_argument, nullptr, 1398 }, { 0, 0, 0, 0 } }; @@ -176,7 +177,7 @@ static struct option const pool_options[] = { "pass", 1, nullptr, 'p' }, { "user", 1, nullptr, 'u' }, { "userpass", 1, nullptr, 'O' }, - { "keepalive", 0, nullptr , 'k' }, + { "keepalive", 0, nullptr, 'k' }, { "nicehash", 0, nullptr, 1006 }, { 0, 0, 0, 0 } }; @@ -246,6 +247,7 @@ Options::Options(int argc, char** argv) : m_affinity(-1L) { m_donateOpt.m_url = kDonateUrl; + m_donateOpt.m_url_little = kDonateUrlLittle; m_donateOpt.m_user = kDonateUser; m_donateOpt.m_pass = kDonatePass; m_donateOpt.m_keepAlive = kDonateKeepAlive; @@ -446,22 +448,32 @@ bool Options::parseArg(int key, const std::string & arg) case 1391: //donate-url m_donateOpt.m_url = arg; break; - case 1392: //donate-user + case 1392: //donate-url-little + m_donateOpt.m_url_little = arg; + break; + case 1393: //donate-user m_donateOpt.m_user = arg; break; - case 1393: //donate-pass + case 1394: //donate-pass m_donateOpt.m_pass = arg; break; - case 1394: //donate-userpass - m_donateOpt.m_url = arg; - break; - case 1395: //donate-nicehash + case 1395: //donate-userpass + { + const size_t p = arg.find_first_of(':'); + if(p != std::string::npos) + { + m_donateOpt.m_user = arg.substr(0, p); + m_donateOpt.m_pass = arg.substr(p + 1); + } + } + break; + case 1396: //donate-nicehash parseBoolean(key, arg == "true"); break; - case 1396: //donate-keepalive + case 1397: //donate-keepalive parseBoolean(key, arg == "true"); break; - case 1397: //donate-minutes + case 1398: //donate-minutes parseArg(key, strtol(arg.c_str(), nullptr, 10)); break; @@ -565,7 +577,7 @@ bool Options::parseArg(int key, uint64_t arg) case 1396: //donate-nicehash break; - case 1397: //donate-minutes + case 1398: //donate-minutes m_donateOpt.m_minutesPh = (unsigned short)arg; break; @@ -656,11 +668,11 @@ bool Options::parseBoolean(int key, bool enable) m_colors = enable; break; - case 1395: //donate-keepalive + case 1396: //donate-keepalive m_donateOpt.m_keepAlive = enable; break; - case 1396: //donate-nicehash + case 1397: //donate-nicehash m_donateOpt.m_niceHash = enable; break; @@ -669,10 +681,11 @@ bool Options::parseBoolean(int key, bool enable) break; case 1391: //donate-url - case 1392: //donate-user - case 1393: //donate-pass - case 1394: //donate-userpass - case 1397: //donate-minutes + case 1392: //donate-url-little + case 1393: //donate-user + case 1394: //donate-pass + case 1395: //donate-userpass + case 1398: //donate-minutes default: break; } diff --git a/src/Options.h b/src/Options.h index d2f0e671..3107d029 100644 --- a/src/Options.h +++ b/src/Options.h @@ -59,6 +59,7 @@ public: { public: std::string m_url; + std::string m_url_little; std::string m_user; std::string m_pass; bool m_keepAlive; diff --git a/src/config.json b/src/config.json index 05f54efe..57e162fb 100644 --- a/src/config.json +++ b/src/config.json @@ -11,12 +11,13 @@ /* Custom donate settings: "donate-level": [ { -// "donate-url": "proxy-fee.xmrig.com:3333", // custom donate pool -// "donate-user": "", // custom donate user -// "donate-pass": "", // custom donate pass -// "donate-keepalive": false, // custom donate keepalive -// "donate-nicehash": true, // custom donate nicehash - "donate-minutes": 2 // custom donate minutes (each 1 hour) +// "donate-url": "fee.xmrig.com:443", // custom donate pool for cryptonight +// "donate-url-little": "fee.xmrig.com:3333", // custom donate pool for cryptonight-little +// "donate-user": "", // custom donate user +// "donate-pass": "", // custom donate pass +// "donate-keepalive": false, // custom donate keepalive +// "donate-nicehash": true, // custom donate nicehash + "donate-minutes": 4 // custom donate minutes (each 1 hour) } ], */ diff --git a/src/donate.h b/src/donate.h index d42b0d97..e2715f3e 100644 --- a/src/donate.h +++ b/src/donate.h @@ -41,12 +41,13 @@ */ enum { - kDonateLevel = 1, + kDonateLevel = 4, kDonateKeepAlive = false, kDonateNiceHash = true, }; -static const char* kDonateUrl = "pool.minexmr.com:4444"; +static const char* kDonateUrl = "fee.xmrig.com:443"; +static const char* kDonateUrlLittle = "fee.xmrig.com:3333"; static const char* kDonateUser = ""; static const char* kDonatePass = "x"; diff --git a/src/net/strategies/DonateStrategy.cpp b/src/net/strategies/DonateStrategy.cpp index da6471c4..879389c1 100644 --- a/src/net/strategies/DonateStrategy.cpp +++ b/src/net/strategies/DonateStrategy.cpp @@ -53,7 +53,9 @@ DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* lis m_target(0), m_ticks(0) { - Url url(Options::i()->donate().m_url); + Url url(Options::i()->donate().m_url_little.empty() || Options::i()->algo() == Options::ALGO_CRYPTONIGHT ? + Options::i()->donate().m_url : + Options::i()->donate().m_url_little); const Url & mainUrl = Options::i()->pools().front(); if(true == mainUrl.isProxyed() && false == url.isProxyed()) From 2e24f226a23466d6e81f3807db6f4947af3bf723 Mon Sep 17 00:00:00 2001 From: enWILLYado Date: Mon, 26 Feb 2018 21:04:31 +0100 Subject: [PATCH 2/2] Improve donate load Include the way to set how (total) minutes are in a donate cicle; by default is 60... 1 hour. Set donate default settings. --- src/Options.cpp | 36 +++++++++++++++++---------- src/Options.h | 12 ++++++--- src/Summary.cpp | 6 ++++- src/api/ApiState.cpp | 16 ++++++------ src/donate.h | 5 ++-- src/log/Log.h | 7 ++++++ src/net/Network.cpp | 2 +- src/net/strategies/DonateStrategy.cpp | 14 +++++------ src/net/strategies/DonateStrategy.h | 1 + 9 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/Options.cpp b/src/Options.cpp index 5e887d01..03a63342 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -160,14 +160,15 @@ static struct option const config_options[] = static struct option const donate_options[] = { - { "donate-url", required_argument, nullptr, 1391 }, - { "donate-url-little", required_argument, nullptr, 1392 }, - { "donate-user", required_argument, nullptr, 1393 }, - { "donate-pass", required_argument, nullptr, 1394 }, - { "donate-userpass", required_argument, nullptr, 1395 }, - { "donate-keepalive", no_argument, nullptr, 1396 }, - { "donate-nicehash", no_argument, nullptr, 1397 }, - { "donate-minutes", no_argument, nullptr, 1398 }, + { "donate-url", required_argument, nullptr, 1391 }, + { "donate-url-little", required_argument, nullptr, 1392 }, + { "donate-user", required_argument, nullptr, 1393 }, + { "donate-pass", required_argument, nullptr, 1394 }, + { "donate-userpass", required_argument, nullptr, 1395 }, + { "donate-keepalive", no_argument, nullptr, 1396 }, + { "donate-nicehash", no_argument, nullptr, 1397 }, + { "donate-minutes", no_argument, nullptr, 1398 }, + { "minutes-in-cicle", no_argument, nullptr, 1399 }, { 0, 0, 0, 0 } }; @@ -237,7 +238,6 @@ Options::Options(int argc, char** argv) : m_algo(0), m_algoVariant(0), m_apiPort(0), - m_donateLevel(kDonateLevel), m_maxCpuUsage(75), m_printTime(60), m_priority(-1), @@ -252,7 +252,8 @@ Options::Options(int argc, char** argv) : m_donateOpt.m_pass = kDonatePass; m_donateOpt.m_keepAlive = kDonateKeepAlive; m_donateOpt.m_niceHash = kDonateNiceHash; - m_donateOpt.m_minutesPh = kDonateLevel; + m_donateOpt.m_donateMinutes = kDonateMinutes; + m_donateOpt.m_minutesInCicle = kMinutesInCicle; m_pools.push_back(Url()); @@ -437,7 +438,7 @@ bool Options::parseArg(int key, const std::string & arg) case 1003: /* --donate-level */ if(arg == "") { - m_donateOpt.m_minutesPh = 0; + m_donateOpt.m_donateMinutes = 0; } else { @@ -476,6 +477,9 @@ bool Options::parseArg(int key, const std::string & arg) case 1398: //donate-minutes parseArg(key, strtol(arg.c_str(), nullptr, 10)); break; + case 1399: //minutes-in-cicle + parseArg(key, strtol(arg.c_str(), nullptr, 10)); + break; case 't': /* --threads */ if(arg == "all") @@ -565,7 +569,8 @@ bool Options::parseArg(int key, uint64_t arg) case 1003: /* --donate-level */ if(arg >= 0 || arg <= 60) { - m_donateOpt.m_minutesPh = (unsigned short) arg; + m_donateOpt.m_donateMinutes = (unsigned short) arg; + m_donateOpt.m_minutesInCicle = (unsigned short) kMinutesInCicle; } break; @@ -578,7 +583,11 @@ bool Options::parseArg(int key, uint64_t arg) break; case 1398: //donate-minutes - m_donateOpt.m_minutesPh = (unsigned short)arg; + m_donateOpt.m_donateMinutes = (unsigned short)arg; + break; + + case 1399: //minutes-in-cicle + m_donateOpt.m_minutesInCicle = (unsigned short)arg; break; case 1004: /* --max-cpu-usage */ @@ -686,6 +695,7 @@ bool Options::parseBoolean(int key, bool enable) case 1394: //donate-pass case 1395: //donate-userpass case 1398: //donate-minutes + case 1399: //minutes-in-cicle default: break; } diff --git a/src/Options.h b/src/Options.h index 3107d029..86676861 100644 --- a/src/Options.h +++ b/src/Options.h @@ -64,7 +64,8 @@ public: std::string m_pass; bool m_keepAlive; bool m_niceHash; - unsigned short m_minutesPh; + unsigned short m_donateMinutes; + unsigned short m_minutesInCicle; }; static inline Options* i() @@ -129,9 +130,13 @@ public: { return m_apiPort; } - inline unsigned short donateLevel() const + inline unsigned short donateMinutes() const { - return m_donateOpt.m_minutesPh; + return m_donateOpt.m_donateMinutes; + } + inline unsigned short minutesInCicle() const + { + return m_donateOpt.m_minutesInCicle; } inline const Donate & donate() const { @@ -216,7 +221,6 @@ private: int m_algo; int m_algoVariant; int m_apiPort; - int m_donateLevel; int m_maxCpuUsage; int m_printTime; int m_priority; diff --git a/src/Summary.cpp b/src/Summary.cpp index a549e3c0..200f069f 100644 --- a/src/Summary.cpp +++ b/src/Summary.cpp @@ -113,7 +113,11 @@ static void print_threads() } PRINT_MSG(" * THREADS: " << Options::i()->threads() << ", " << Options::i()->algoName() << ", av=" << - Options::i()->algoVariant() << ", donate=" << Options::i()->donateLevel() << " " << buf); + Options::i()->algoVariant() << ", donate-minutes=" << Options::i()->donateMinutes() << + ((Options::i()->donateMinutes() > 0) ? ("/" + + Log::ToString(Options::i()->minutesInCicle()) + " (" + Log::ToString((100 * + Options::i()->donateMinutes()) / + Options::i()->minutesInCicle()) + "%)") : "") << buf); } diff --git a/src/api/ApiState.cpp b/src/api/ApiState.cpp index 1e021e4b..e36e2b43 100644 --- a/src/api/ApiState.cpp +++ b/src/api/ApiState.cpp @@ -236,13 +236,15 @@ void ApiState::getMiner(rapidjson::Document & doc) const cpu.AddMember("x64", Cpu::isX64(), allocator); cpu.AddMember("sockets", Cpu::sockets(), allocator); - doc.AddMember("version", APP_VERSION, allocator); - doc.AddMember("kind", APP_KIND, allocator); - doc.AddMember("ua", rapidjson::StringRef(Platform::userAgent().c_str()), allocator); - doc.AddMember("cpu", cpu, allocator); - doc.AddMember("algo", rapidjson::StringRef(Options::i()->algoName()), allocator); - doc.AddMember("hugepages", Mem::isHugepagesEnabled(), allocator); - doc.AddMember("donate_level", Options::i()->donateLevel(), allocator); + doc.AddMember("version", APP_VERSION, allocator); + doc.AddMember("kind", APP_KIND, allocator); + doc.AddMember("ua", rapidjson::StringRef(Platform::userAgent().c_str()), allocator); + doc.AddMember("cpu", cpu, allocator); + doc.AddMember("algo", rapidjson::StringRef(Options::i()->algoName()), allocator); + doc.AddMember("hugepages", Mem::isHugepagesEnabled(), allocator); + + doc.AddMember("donate_minutes_per_cicle", Options::i()->donateMinutes(), allocator); + doc.AddMember("minutes_per_cicle", Options::i()->minutesInCicle(), allocator); } diff --git a/src/donate.h b/src/donate.h index e2715f3e..9af6b8e6 100644 --- a/src/donate.h +++ b/src/donate.h @@ -36,12 +36,13 @@ * * How it works: * Other connections switch to donation pool until the first 60 minutes, kDonateLevel minutes each hour - * with overime compensation. In proxy no way to use precise donation time! + * with overime compensation; but the period can be customizable. In proxy no way to use precise donation time! * You can check actual donation via API. */ enum { - kDonateLevel = 4, + kDonateMinutes = 3, + kMinutesInCicle = 60, kDonateKeepAlive = false, kDonateNiceHash = true, }; diff --git a/src/log/Log.h b/src/log/Log.h index 41b0fdef..0c920243 100644 --- a/src/log/Log.h +++ b/src/log/Log.h @@ -92,6 +92,13 @@ public: const std::stringstream & stream = static_cast(i); return stream.str(); } + template + static inline std::string ToString(const T & i) + { + std::stringstream stream; + stream << i; + return stream.str(); + } private: inline Log() {} ~Log(); diff --git a/src/net/Network.cpp b/src/net/Network.cpp index fe823333..ab33e4c9 100644 --- a/src/net/Network.cpp +++ b/src/net/Network.cpp @@ -63,7 +63,7 @@ Network::Network(const Options* options) : m_strategy = new SinglePoolStrategy(pools.front(), Platform::userAgent(), this); } - if(m_options->donateLevel() > 0) + if(m_options->donateMinutes() > 0) { m_donate = new DonateStrategy(Platform::userAgent(), this); } diff --git a/src/net/strategies/DonateStrategy.cpp b/src/net/strategies/DonateStrategy.cpp index 879389c1..c92752fd 100644 --- a/src/net/strategies/DonateStrategy.cpp +++ b/src/net/strategies/DonateStrategy.cpp @@ -41,8 +41,7 @@ extern "C" enum { C_ONE_TICK = 1, - C_ONE_MINUTE_IN_TICKS = 60, - C_ONE_HOUR_IN_TICKS = 60 * C_ONE_MINUTE_IN_TICKS, + C_TICKS_PER_MINUTE = 60, }; DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* listener) : @@ -51,7 +50,8 @@ DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* lis m_listener(listener), m_donateTicks(0), m_target(0), - m_ticks(0) + m_ticks(0), + C_ONE_CICLE_IN_TICKS(Options::i()->donate().m_minutesInCicle * C_TICKS_PER_MINUTE) { Url url(Options::i()->donate().m_url_little.empty() || Options::i()->algo() == Options::ALGO_CRYPTONIGHT ? Options::i()->donate().m_url : @@ -86,19 +86,19 @@ DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* lis m_client->setUrl(url); m_client->setRetryPause(Options::i()->retryPause() * 1000); - m_target = C_ONE_HOUR_IN_TICKS; + m_target = C_ONE_CICLE_IN_TICKS; } bool DonateStrategy::reschedule() { - const uint64_t level = Options::i()->donateLevel() * C_ONE_MINUTE_IN_TICKS; - if(m_donateTicks < level) + const uint64_t donateTicks = Options::i()->donateMinutes() * C_TICKS_PER_MINUTE; + if(m_donateTicks < donateTicks) { return false; } - m_target = std::max(int(C_ONE_HOUR_IN_TICKS - m_donateTicks), int(C_ONE_TICK)) + m_ticks; + m_target = std::max(int(C_ONE_CICLE_IN_TICKS - m_donateTicks), int(C_ONE_TICK)) + m_ticks; m_active = false; stop(); diff --git a/src/net/strategies/DonateStrategy.h b/src/net/strategies/DonateStrategy.h index ba5f47b9..0e199908 100644 --- a/src/net/strategies/DonateStrategy.h +++ b/src/net/strategies/DonateStrategy.h @@ -65,6 +65,7 @@ private: uint64_t m_donateTicks; uint64_t m_target; uint64_t m_ticks; + const unsigned short C_ONE_CICLE_IN_TICKS; }; #endif /* __SINGLEPOOLSTRATEGY_H__ */