From c885c41002c287a6175c0b9fa2e9e5afb782dc88 Mon Sep 17 00:00:00 2001 From: someone Date: Sat, 8 Nov 2025 16:56:28 +0100 Subject: [PATCH] removed doc and a lot of strings which causes AV to flag --- CMakeLists.txt | 10 +- README.md | 38 - doc/ALGORITHMS.md | 59 -- doc/API.md | 66 -- doc/BENCHMARK.md | 29 - doc/CHANGELOG_OLD.md | 462 ------------ doc/CPU.md | 145 ---- doc/CPU_MAX_USAGE.md | 26 - doc/PERSISTENT_OPTIONS.md | 9 - doc/api/1/config.json.bak | 63 -- doc/api/1/summary.json | 73 -- doc/api/1/threads.json | 65 -- doc/build/CMAKE_OPTIONS.md | 41 -- doc/gpg_keys/xmrig.asc | 30 - doc/screenshot.png | Bin 33480 -> 0 bytes doc/screenshot_v5_2_0.png | Bin 48600 -> 0 bytes doc/topology/AMD_FX_8320_windows_2_0_4.xml | 86 --- ...AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml | 234 ------ .../AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml | 294 -------- .../AMD_Opteron_6344_x2_N4_win7_2_0_4_bug.xml | 262 ------- .../AMD_Opteron_6348_x4_N8_linux_1_11_2.xml | 550 -------------- .../AMD_Opteron_6348_x4_N8_linux_2_0_4.xml | 399 ----------- .../AMD_Opteron_6380_x4_N8_linux_1_11_5.xml | 670 ------------------ .../AMD_Ryzen_7_2700X_windows_2_0_4.xml | 105 --- .../AMD_Ryzen_7_3700X_windows_2_0_4.xml | 104 --- ...yzen_Threadripper_2950X_N2_linux_2_0_4.xml | 226 ------ ...en_Threadripper_2950X_UMA_linux_1_11_9.xml | 328 --------- .../Intel_Core_i7-3770_linux_2_0_4.xml | 87 --- .../Intel_Core_i7-6700_linux_2_0_4.xml | 88 --- .../Intel_Core_i7-6700_windows_2_0_4.xml | 61 -- .../Intel_Core_i7-7660U_windows_2_0_4.xml | 41 -- ...tel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml | 477 ------------- .../Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml | 111 --- ...Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml | 541 -------------- ...ntel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml | 246 ------- ...el_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml | 403 ----------- ...tel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml | 263 ------- src/App.cpp | 2 +- src/base/base.cmake | 4 +- src/base/crypto/Algorithm.cpp | 92 +-- src/base/crypto/Algorithm.h | 36 +- src/base/io/log/Tags.cpp | 4 +- src/base/kernel/Base.cpp | 6 +- src/base/net/stratum/DaemonClient.cpp | 6 +- src/base/net/stratum/Pool.cpp | 6 +- src/base/net/stratum/Url.cpp | 30 +- src/core/config/Config_platform.h | 34 +- src/core/config/{usage.h => usage.h.bak} | 0 src/net/strategies/DonateStrategy.cpp | 2 +- 49 files changed, 107 insertions(+), 6807 deletions(-) delete mode 100644 README.md delete mode 100644 doc/ALGORITHMS.md delete mode 100644 doc/API.md delete mode 100644 doc/BENCHMARK.md delete mode 100644 doc/CHANGELOG_OLD.md delete mode 100644 doc/CPU.md delete mode 100644 doc/CPU_MAX_USAGE.md delete mode 100644 doc/PERSISTENT_OPTIONS.md delete mode 100644 doc/api/1/config.json.bak delete mode 100644 doc/api/1/summary.json delete mode 100644 doc/api/1/threads.json delete mode 100644 doc/build/CMAKE_OPTIONS.md delete mode 100644 doc/gpg_keys/xmrig.asc delete mode 100644 doc/screenshot.png delete mode 100644 doc/screenshot_v5_2_0.png delete mode 100644 doc/topology/AMD_FX_8320_windows_2_0_4.xml delete mode 100644 doc/topology/AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml delete mode 100644 doc/topology/AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml delete mode 100644 doc/topology/AMD_Opteron_6344_x2_N4_win7_2_0_4_bug.xml delete mode 100644 doc/topology/AMD_Opteron_6348_x4_N8_linux_1_11_2.xml delete mode 100644 doc/topology/AMD_Opteron_6348_x4_N8_linux_2_0_4.xml delete mode 100644 doc/topology/AMD_Opteron_6380_x4_N8_linux_1_11_5.xml delete mode 100644 doc/topology/AMD_Ryzen_7_2700X_windows_2_0_4.xml delete mode 100644 doc/topology/AMD_Ryzen_7_3700X_windows_2_0_4.xml delete mode 100644 doc/topology/AMD_Ryzen_Threadripper_2950X_N2_linux_2_0_4.xml delete mode 100644 doc/topology/AMD_Ryzen_Threadripper_2950X_UMA_linux_1_11_9.xml delete mode 100644 doc/topology/Intel_Core_i7-3770_linux_2_0_4.xml delete mode 100644 doc/topology/Intel_Core_i7-6700_linux_2_0_4.xml delete mode 100644 doc/topology/Intel_Core_i7-6700_windows_2_0_4.xml delete mode 100644 doc/topology/Intel_Core_i7-7660U_windows_2_0_4.xml delete mode 100644 doc/topology/Intel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml delete mode 100644 doc/topology/Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml delete mode 100644 doc/topology/Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml delete mode 100644 doc/topology/Intel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml delete mode 100644 doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml delete mode 100644 doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml rename src/core/config/{usage.h => usage.h.bak} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 07d96a42..13bd0046 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,9 +55,9 @@ set(HEADERS "${HEADERS_BACKEND}" src/App.h src/core/config/Config_default.h - src/core/config/Config_platform.h + #src/core/config/Config_platform.h src/core/config/Config.h - src/core/config/ConfigTransform.h + #src/core/config/ConfigTransform.h #src/core/config/usage.h src/core/Controller.h src/core/Miner.h @@ -67,7 +67,7 @@ set(HEADERS src/net/JobResults.h src/net/Network.h src/net/strategies/DonateStrategy.h - src/Summary.h + #src/Summary.h src/version.h ) @@ -107,14 +107,14 @@ set(SOURCES "${SOURCES_BACKEND}" src/App.cpp src/core/config/Config.cpp - src/core/config/ConfigTransform.cpp + #src/core/config/ConfigTransform.cpp src/core/Controller.cpp src/core/Miner.cpp src/core/Taskbar.cpp src/net/JobResults.cpp src/net/Network.cpp src/net/strategies/DonateStrategy.cpp - src/Summary.cpp + #src/Summary.cpp src/xmrig.cpp ) diff --git a/README.md b/README.md deleted file mode 100644 index b4d40751..00000000 --- a/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# XMRig - -[![Github All Releases](https://img.shields.io/github/downloads/xmrig/xmrig/total.svg)](https://github.com/xmrig/xmrig/releases) -[![GitHub release](https://img.shields.io/github/release/xmrig/xmrig/all.svg)](https://github.com/xmrig/xmrig/releases) -[![GitHub Release Date](https://img.shields.io/github/release-date/xmrig/xmrig.svg)](https://github.com/xmrig/xmrig/releases) -[![GitHub license](https://img.shields.io/github/license/xmrig/xmrig.svg)](https://github.com/xmrig/xmrig/blob/master/LICENSE) -[![GitHub stars](https://img.shields.io/github/stars/xmrig/xmrig.svg)](https://github.com/xmrig/xmrig/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/xmrig/xmrig.svg)](https://github.com/xmrig/xmrig/network) - -XMRig is a high performance, open source, cross platform RandomX, KawPow, CryptoNight and [GhostRider](https://github.com/xmrig/xmrig/tree/master/src/crypto/ghostrider#readme) unified CPU/GPU miner and [RandomX benchmark](https://xmrig.com/benchmark). Official binaries are available for Windows, Linux, macOS and FreeBSD. - -## Mining backends -- **CPU** (x86/x64/ARMv7/ARMv8) -- **OpenCL** for AMD GPUs. -- **CUDA** for NVIDIA GPUs via external [CUDA plugin](https://github.com/xmrig/xmrig-cuda). - -## Download -* **[Binary releases](https://github.com/xmrig/xmrig/releases)** -* **[Build from source](https://xmrig.com/docs/miner/build)** - -## Usage -The preferred way to configure the miner is the [JSON config file](https://xmrig.com/docs/miner/config) as it is more flexible and human friendly. The [command line interface](https://xmrig.com/docs/miner/command-line-options) does not cover all features, such as mining profiles for different algorithms. Important options can be changed during runtime without miner restart by editing the config file or executing [API](https://xmrig.com/docs/miner/api) calls. - -* **[Wizard](https://xmrig.com/wizard)** helps you create initial configuration for the miner. -* **[Workers](http://workers.xmrig.info)** helps manage your miners via HTTP API. - -## Donations -* Default donation 1% (1 minute in 100 minutes) can be increased via option `donate-level` or disabled in source code. -* XMR: `48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD` - -## Developers -* **[xmrig](https://github.com/xmrig)** -* **[sech1](https://github.com/SChernykh)** - -## Contacts -* support@xmrig.com -* [reddit](https://www.reddit.com/user/XMRig/) -* [twitter](https://twitter.com/xmrig_dev) diff --git a/doc/ALGORITHMS.md b/doc/ALGORITHMS.md deleted file mode 100644 index de3828a0..00000000 --- a/doc/ALGORITHMS.md +++ /dev/null @@ -1,59 +0,0 @@ -# Algorithms - -Algorithm can be defined in 3 ways: - -1. By pool, using algorithm negotiation, in this case no need specify algorithm on miner side. -2. Per pool `coin` option, currently only usable values for this option is `monero` and `arqma`. -3. Per pool `algo` option. - -Option `coin` useful for pools without [algorithm negotiation](https://xmrig.com/docs/extensions/algorithm-negotiation) support or daemon to allow automatically switch algorithm in next hard fork. If you use xmrig-proxy don't need specify algorithm on miner side. - -## Algorithm names - -| Name | Memory | Version | Description | Notes | -|------|--------|---------|-------------|-------| -| `kawpow` | - | 6.0.0+ | KawPow (Ravencoin) | GPU only | -| `astrobwt` | 20 MB | 5.8.0+ | AstroBWT (Dero). | | -| `cn-pico/tlo` | 256 KB | 5.5.0+ | CryptoNight-Pico (Talleo). | | -| `rx/sfx` | 2 MB | 5.4.0+ | RandomSFX (RandomX variant for Safex). | | -| `rx/arq` | 256 KB | 4.3.0+ | RandomARQ (RandomX variant for ArQmA). | | -| `rx/0` | 2 MB | 3.2.0+ | RandomX (Monero). | | -| `argon2/chukwa` | 512 KB | 3.1.0+ | Argon2id (Chukwa). | CPU only | -| `argon2/wrkz` | 256 KB | 3.1.0+ | Argon2id (WRKZ) | CPU only | -| `rx/wow` | 1 MB | 3.0.0+ | RandomWOW (RandomX variant for Wownero). | | -| `rx/loki` | 2 MB | 3.0.0+ | RandomXL (RandomX variant for Loki). | | -| `cn/fast` | 2 MB | 3.0.0+ | CryptoNight variant 1 with half iterations. | | -| `cn/rwz` | 2 MB | 2.14.0+ | CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation. | | -| `cn/zls` | 2 MB | 2.14.0+ | CryptoNight variant 2 with 3/4 iterations. | | -| `cn/double` | 2 MB | 2.14.0+ | CryptoNight variant 2 with double iterations. | | -| `cn/r` | 2 MB | 2.13.0+ | CryptoNightR (Monero's variant 4). | | -| `cn-pico` | 256 KB | 2.10.0+ | CryptoNight-Pico. | | -| `cn/half` | 2 MB | 2.9.0+ | CryptoNight variant 2 with half iterations. | | -| `cn/2` | 2 MB | 2.8.0+ | CryptoNight variant 2. | | -| `cn/xao` | 2 MB | 2.6.4+ | CryptoNight variant 0 (modified). | | -| `cn/rto` | 2 MB | 2.6.4+ | CryptoNight variant 1 (modified). | | -| `cn-heavy/tube` | 4 MB | 2.6.4+ | CryptoNight-Heavy (modified). | | -| `cn-heavy/xhv` | 4 MB | 2.6.3+ | CryptoNight-Heavy (modified). | | -| `cn-heavy/0` | 4 MB | 2.6.0+ | CryptoNight-Heavy. | | -| `cn/1` | 2 MB | 2.5.0+ | CryptoNight variant 1. | | -| `cn-lite/1` | 1 MB | 2.5.0+ | CryptoNight-Lite variant 1. | | -| `cn-lite/0` | 1 MB | 0.8.0+ | CryptoNight-Lite variant 0. | | -| `cn/0` | 2 MB | 0.5.0+ | CryptoNight (original). | | - -## Migration to v3 -Since version 3 mining [algorithm](#algorithm-names) should specified for each pool separately (`algo` option), earlier versions was use one global `algo` option and per pool `variant` option (this option was removed in v3). If your pool support [mining algorithm negotiation](https://github.com/xmrig/xmrig-proxy/issues/168) you may not specify this option at all. - -#### Example -```json -{ - "pools": [ - { - "url": "...", - "algo": "cn/r", - "coin": null - ... - } - ], - ... -} -``` diff --git a/doc/API.md b/doc/API.md deleted file mode 100644 index 2cd0fbbe..00000000 --- a/doc/API.md +++ /dev/null @@ -1,66 +0,0 @@ -# HTTP API - -If you want use HTTP API you need enable it (`"enabled": true,`) then choice `port` and optionaly `host`. API not available if miner built without HTTP support (`-DWITH_HTTP=OFF`). - -Offical HTTP client for API: http://workers.xmrig.info/ - -Example configuration: - -```json -"api": { - "id": null, - "worker-id": null, -}, -"http": { - "enabled": false, - "host": "127.0.0.1", - "port": 0, - "access-token": null, - "restricted": true -} -``` - -#### Global API options -* **id** Miner ID, if not set created automatically. -* **worker-id** Optional worker name, if not set will be detected automatically. - -#### HTTP API options, -* **enabled** Enable (`true`) or disable (`false`) HTTP API. -* **host** Host for incoming connections `http://:`, to allow connections from all interfaces use `0.0.0.0` (IPv4) or `::` (IPv4+IPv6). -* **port** Port for incoming connections `http://:`, zero port is valid option and means random port. -* **access-token** [Bearer](https://gist.github.com/xmrig/c75fdd1f8e0f3bac05500be2ab718f8e#file-api-html-L54) access token to secure access to API. Miner support this token only via `Authorization` header. -* **restricted** Use `false` to allow remote configuration. - -If you prefer use command line options instead of config file, you can use options: `--api-id`, `--api-worker-id`, `--http-enabled`, `--http-host`, `--http-access-token`, `--http-port`, `--http-no-restricted`. - -Versions before 2.15 was use another options for API https://github.com/xmrig/xmrig/issues/1007 - -## Endpoints - -### GET /1/summary - -Get miner summary information. [Example](api/1/summary.json). - -### GET /1/threads - -Get detailed information about miner threads. [Example](api/1/threads.json). - - -## Restricted endpoints - -All API endpoints below allow access to sensitive information and remote configure miner. You should set `access-token` and allow unrestricted access (`"restricted": false`). - -### GET /1/config - -Get current miner configuration. [Example](api/1/config.json). - - -### PUT /1/config - -Update current miner configuration. Common use case, get current configuration, make changes, and upload it to miner. - -Curl example: - -``` -curl -v --data-binary @config.json -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer SECRET" http://127.0.0.1:44444/1/config -``` diff --git a/doc/BENCHMARK.md b/doc/BENCHMARK.md deleted file mode 100644 index 63b67926..00000000 --- a/doc/BENCHMARK.md +++ /dev/null @@ -1,29 +0,0 @@ -# Embedded benchmark - -You can run with XMRig with the following commands: -``` -xmrig --bench=1M -xmrig --bench=10M -xmrig --bench=1M -a rx/wow -xmrig --bench=10M -a rx/wow -``` -This will run between 1 and 10 million RandomX hashes, depending on `bench` parameter, and print the time it took. First two commands use Monero variant (2 MB per thread, best for Zen2/Zen3 CPUs), second two commands use Wownero variant (1 MB per thread, useful for Intel and 1st gen Zen/Zen+ CPUs). - -Checksum of all the hashes will be also printed to check stability of your hardware: if it's green then it's correct, if it's red then there was hardware error during computation. No Internet connection is required for the benchmark. - -Double check that you see `Huge pages 100%` both for dataset and for all threads, and also check for `msr register values ... has been set successfully` - without this result will be far from the best. Running as administrator is required for MSR and huge pages to be set up properly. - -![Benchmark example](https://i.imgur.com/PST3BYc.png) - -### Benchmark with custom config - -You can run benchmark with any configuration you want. Just start without command line parameteres, use regular config.json and add `"benchmark":"1M",` on the next line after pool url. - -# Stress test - -You can also run continuous stress-test that is as close to the real RandomX mining as possible and doesn't require any configuration: -``` -xmrig --stress -xmrig --stress -a rx/wow -``` -This will require Internet connection and will run indefinitely. \ No newline at end of file diff --git a/doc/CHANGELOG_OLD.md b/doc/CHANGELOG_OLD.md deleted file mode 100644 index a799cb38..00000000 --- a/doc/CHANGELOG_OLD.md +++ /dev/null @@ -1,462 +0,0 @@ -# v4.6.2-beta -- [#1274](https://github.com/xmrig/xmrig/issues/1274) Added `--cuda-devices` command line option. -- [#1277](https://github.com/xmrig/xmrig/pull/1277) Fixed function names for clang on Apple. - -# v4.6.1-beta -- [#1272](https://github.com/xmrig/xmrig/pull/1272) Optimized hashrate calculation. -- [#1273](https://github.com/xmrig/xmrig/issues/1273) Fixed crash when use `GET /2/backends` API endpoint with disabled CUDA. - -# v4.6.0-beta -- [#1263](https://github.com/xmrig/xmrig/pull/1263) Added new option `dataset_host` for NVIDIA GPUs with less than 4 GB memory (RandomX only). - -# v4.5.0-beta -- Added NVIDIA CUDA support via external [CUDA plugun](https://github.com/xmrig/xmrig-cuda). XMRig now is unified 3 in 1 miner. - -# v4.4.0-beta -- [#1068](https://github.com/xmrig/xmrig/pull/1068) Added support for `self-select` stratum protocol extension. -- [#1240](https://github.com/xmrig/xmrig/pull/1240) Sync with the latest RandomX code. -- [#1241](https://github.com/xmrig/xmrig/issues/1241) Fixed regression with colors on old Windows systems. -- [#1243](https://github.com/xmrig/xmrig/pull/1243) Fixed incorrect OpenCL memory size detection in some cases. -- [#1247](https://github.com/xmrig/xmrig/pull/1247) Fixed ARM64 RandomX code alignment. -- [#1248](https://github.com/xmrig/xmrig/pull/1248) Fixed RandomX code cache cleanup on iOS/Darwin. - -# v4.3.1-beta -- Fixed regression in v4.3.0, miner didn't create `cn` mining profile with default config example. - -# v4.3.0-beta -- [#1227](https://github.com/xmrig/xmrig/pull/1227) Added new algorithm `rx/arq`, RandomX variant for upcoming ArQmA fork. -- [#808](https://github.com/xmrig/xmrig/issues/808#issuecomment-539297156) Added experimental support for persistent memory for CPU mining threads. -- [#1221](https://github.com/xmrig/xmrig/issues/1221) Improved RandomX dataset memory usage and initialization speed for NUMA machines. - -# v4.2.1-beta -- [#1150](https://github.com/xmrig/xmrig/issues/1150) Fixed build on FreeBSD. -- [#1175](https://github.com/xmrig/xmrig/issues/1175) Fixed support for systems where total count of NUMA nodes not equal usable nodes count. -- [#1199](https://github.com/xmrig/xmrig/issues/1199) Fixed excessive memory allocation for OpenCL threads with low intensity. -- [#1212](https://github.com/xmrig/xmrig/issues/1212) Fixed low RandomX performance after fast algorithm switching. - -# v4.2.0-beta -- [#1202](https://github.com/xmrig/xmrig/issues/1202) Fixed algorithm verification in donate strategy. -- Added per pool option `coin` with single possible value `monero` for pools without algorithm negotiation, for upcoming Monero fork. -- Added config option `cpu/max-threads-hint` and command line option `--cpu-max-threads-hint`. - -# v4.1.0-beta -- **OpenCL backend disabled by default.**. -- [#1183](https://github.com/xmrig/xmrig/issues/1183) Fixed compatibility with systemd. -- [#1185](https://github.com/xmrig/xmrig/pull/1185) Added JIT compiler for RandomX on ARMv8. -- Improved API endpoint `GET /2/backends` and added support for this endpoint to [workers.xmrig.info](http://workers.xmrig.info). -- Added command line option `--no-cpu` to disable CPU backend. -- Added OpenCL specific command line options: `--opencl`, `--opencl-devices`, `--opencl-platform`, `--opencl-loader` and `--opencl-no-cache`. -- Removed command line option `--http-enabled`, HTTP API enabled automatically if any other `--http-*` option provided. - -# v4.0.1-beta -- [#1177](https://github.com/xmrig/xmrig/issues/1177) Fixed compatibility with old AMD drivers. -- [#1180](https://github.com/xmrig/xmrig/issues/1180) Fixed possible duplicated shares after algorithm switching. -- Added support for case if not all backend threads successfully started. -- Fixed wrong config file permissions after write (only gcc builds on recent Windows 10 affected). - -# v4.0.0-beta -- [#1172](https://github.com/xmrig/xmrig/issues/1172) **Added OpenCL mining backend.** - - [#268](https://github.com/xmrig/xmrig-amd/pull/268) [#270](https://github.com/xmrig/xmrig-amd/pull/270) [#271](https://github.com/xmrig/xmrig-amd/pull/271) [#273](https://github.com/xmrig/xmrig-amd/pull/273) [#274](https://github.com/xmrig/xmrig-amd/pull/274) [#1171](https://github.com/xmrig/xmrig/pull/1171) Added RandomX support for OpenCL, thanks [@SChernykh](https://github.com/SChernykh). -- Algorithm `cn/wow` removed, as no longer alive. - -# v3.2.0 -- Added per pool option `coin` with single possible value `monero` for pools without algorithm negotiation, for upcoming Monero fork. -- [#1183](https://github.com/xmrig/xmrig/issues/1183) Fixed compatibility with systemd. - -# v3.1.3 -- [#1180](https://github.com/xmrig/xmrig/issues/1180) Fixed possible duplicated shares after algorithm switching. -- Fixed wrong config file permissions after write (only gcc builds on recent Windows 10 affected). - -# v3.1.2 -- Many RandomX optimizations and fixes. - - [#1132](https://github.com/xmrig/xmrig/issues/1132) Fixed build on CentOS 7. - - [#1163](https://github.com/xmrig/xmrig/pull/1163) Optimized soft AES code, up to +30% hashrate on CPU without AES support and other optimizations. - - [#1166](https://github.com/xmrig/xmrig/pull/1166) Fixed crash when initialize dataset with big threads count (eg 272). - - [#1168](https://github.com/xmrig/xmrig/pull/1168) Optimized loading from scratchpad. -- [#1128](https://github.com/xmrig/xmrig/issues/1128) Fixed CMake 2.8 compatibility. - -# v3.1.1 -- [#1133](https://github.com/xmrig/xmrig/issues/1133) Fixed syslog regression. -- [#1138](https://github.com/xmrig/xmrig/issues/1138) Fixed multiple network bugs. -- [#1141](https://github.com/xmrig/xmrig/issues/1141) Fixed log in background mode. -- [#1142](https://github.com/xmrig/xmrig/pull/1142) RandomX hashrate improved by 0.5-1.5% depending on variant and CPU. -- [#1146](https://github.com/xmrig/xmrig/pull/1146) Fixed race condition in RandomX thread init. -- [#1148](https://github.com/xmrig/xmrig/pull/1148) Fixed, on Linux linker marking entire executable as having an executable stack. -- Fixed, for Argon2 algorithms command line options like `--threads` was ignored. -- Fixed command line options for single pool, free order allowed again. - -# v3.1.0 -- [#1107](https://github.com/xmrig/xmrig/issues/1107#issuecomment-522235892) Added Argon2 algorithm family: `argon2/chukwa` and `argon2/wrkz`. - -# v3.0.0 -- **[#1111](https://github.com/xmrig/xmrig/pull/1111) Added RandomX (`rx/test`) algorithm for testing and benchmarking.** -- **[#1036](https://github.com/xmrig/xmrig/pull/1036) Added RandomWOW (`rx/wow`) algorithm for [Wownero](http://wownero.org/).** -- **[#1050](https://github.com/xmrig/xmrig/pull/1050) Added RandomXL (`rx/loki`) algorithm for [Loki](https://loki.network/).** -- **[#1077](https://github.com/xmrig/xmrig/issues/1077) Added NUMA support via hwloc**. -- **Added flexible [multi algorithm](doc/CPU.md) configuration.** -- **Added unlimited switching between incompatible algorithms, all mining options can be changed in runtime.** -- [#257](https://github.com/xmrig/xmrig-nvidia/pull/257) New logging subsystem, file and syslog now always without colors. -- [#314](https://github.com/xmrig/xmrig-proxy/issues/314) Added donate over proxy feature. -- [#1007](https://github.com/xmrig/xmrig/issues/1007) Old HTTP API backend based on libmicrohttpd, replaced to custom HTTP server (libuv + http_parser). -- [#1010](https://github.com/xmrig/xmrig/pull/1010#issuecomment-482632107) Added daemon support (solo mining). -- [#1066](https://github.com/xmrig/xmrig/issues/1066#issuecomment-518080529) Added error message if pool not ready for RandomX. -- [#1105](https://github.com/xmrig/xmrig/issues/1105) Improved auto configuration for `cn-pico` algorithm. -- Added commands `pause` and `resume` via JSON RPC 2.0 API (`POST /json_rpc`). -- Added command line option `--export-topology` for export hwloc topology to a XML file. -- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object. -- Options `av`, `safe` and `max-cpu-usage` removed. -- Algorithm `cn/msr` renamed to `cn/fast`. -- Algorithm `cn/xtl` removed. -- API endpoint `GET /1/threads` replaced to `GET /2/backends`. -- Added global uptime and extended connection information in API. -- API now return current algorithm. - -# v2.99.6-beta -- Added commands `pause` and `resume` via JSON RPC 2.0 API (`POST /json_rpc`). -- Fixed autoconfig regression (since 2.99.5), mostly `rx/wow` was affected by this bug. -- Fixed user job recovery after donation round. -- Information about AVX2 CPU feature how hidden in miner summary. - -# v2.99.5-beta -- [#1066](https://github.com/xmrig/xmrig/issues/1066#issuecomment-518080529) Fixed crash and added error message if pool not ready for RandomX. -- [#1092](https://github.com/xmrig/xmrig/issues/1092) Fixed crash if wrong CPU affinity used. -- [#1103](https://github.com/xmrig/xmrig/issues/1103) Improved auto configuration for RandomX for CPUs where L2 cache is limiting factor. -- [#1105](https://github.com/xmrig/xmrig/issues/1105) Improved auto configuration for `cn-pico` algorithm. -- [#1106](https://github.com/xmrig/xmrig/issues/1106) Fixed `hugepages` field in summary API. -- Added alternative short format for CPU threads. -- Changed format for CPU threads with intensity above 1. -- Name for reference RandomX configuration changed to `rx/test` to avoid potential conflicts in future. - -# v2.99.4-beta -- [#1062](https://github.com/xmrig/xmrig/issues/1062) Fixed 32 bit support. **32 bit is slow and deprecated**. -- [#1088](https://github.com/xmrig/xmrig/pull/1088) Fixed macOS compilation. -- [#1095](https://github.com/xmrig/xmrig/pull/1095) Fixed compatibility with hwloc 1.10.x. -- Optimized RandomX initialization and switching, fixed rare crash when re-initialize dataset. -- Fixed ARM build with hwloc. - -# v2.99.3-beta -- [#1082](https://github.com/xmrig/xmrig/issues/1082) Fixed hwloc auto configuration on AMD FX CPUs. -- Added command line option `--export-topology` for export hwloc topology to a XML file. - -# v2.99.2-beta -- [#1077](https://github.com/xmrig/xmrig/issues/1077) Added NUMA support via **hwloc**. -- Fixed miner freeze when switch between RandomX variants. -- Fixed dataset initialization speed on Linux if thread affinity was used. - -# v2.99.1-beta -- [#1072](https://github.com/xmrig/xmrig/issues/1072) Fixed RandomX `seed_hash` re-initialization. - -# v2.99.0-beta -- [#1050](https://github.com/xmrig/xmrig/pull/1050) Added RandomXL algorithm for [Loki](https://loki.network/), algorithm name used by miner is `randomx/loki` or `rx/loki`. -- Added [flexible](https://github.com/xmrig/xmrig/blob/evo/doc/CPU.md) multi algorithm configuration. -- Added unlimited switching between incompatible algorithms, all mining options can be changed in runtime. -- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object. -- Options `av`, `safe` and `max-cpu-usage` removed. -- Algorithm `cn/msr` renamed to `cn/fast`. -- Algorithm `cn/xtl` removed. -- API endpoint `GET /1/threads` replaced to `GET /2/backends`. - -# v2.16.0-beta -- [#1036](https://github.com/xmrig/xmrig/pull/1036) Added RandomWOW (RandomX with different preferences) algorithm support for [Wownero](http://wownero.org/). - - Algorithm name used by miner is `randomx/wow` or `rx/wow`. - - Currently runtime algorithm switching NOT supported with other algorithms. - -# v2.15.4-beta -- Added global uptime and extended connection information in API. -- API now return current algorithm instead of global algorithm specified in config. -- This version also include all changes from stable version v2.14.4. - -# v2.15.3-beta -- [#1014](https://github.com/xmrig/xmrig/issues/1014) Fixed regression, default value for `algo` option was not applied. - -# v2.15.2-beta -- [#1010](https://github.com/xmrig/xmrig/pull/1010#issuecomment-482632107) Added daemon support (solo mining). -- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compatibility with clang 9. -- Config subsystem was rewritten, internally JSON is primary format now. -- Fixed regression, big HTTP responses was truncated. - -# v2.15.1-beta -- [#1007](https://github.com/xmrig/xmrig/issues/1007) Old HTTP API backend based on libmicrohttpd, replaced to custom HTTP server (libuv + http_parser). -- [#257](https://github.com/xmrig/xmrig-nvidia/pull/257) New logging subsystem, file and syslog now always without colors. - -# v2.15.0-beta -- [#314](https://github.com/xmrig/xmrig-proxy/issues/314) Added donate over proxy feature. - - Added new option `donate-over-proxy`. - - Added real graceful exit. - -# v2.14.4 -- [#992](https://github.com/xmrig/xmrig/pull/992) Fixed compilation with Clang 3.5. -- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compilation with Clang 9.0. -- In HTTP API for unknown hashrate now used `null` instead of `0.0`. -- Fixed MSVC 2019 version detection. -- Removed obsolete automatic variants. - -# v2.14.1 -* [#975](https://github.com/xmrig/xmrig/issues/975) Fixed crash on Linux if double thread mode used. - -# v2.14.0 -- **[#969](https://github.com/xmrig/xmrig/pull/969) Added new algorithm `cryptonight/rwz`, short alias `cn/rwz` (also known as CryptoNight ReverseWaltz), for upcoming [Graft](https://www.graft.network/) fork.** -- **[#931](https://github.com/xmrig/xmrig/issues/931) Added new algorithm `cryptonight/zls`, short alias `cn/zls` for [Zelerius Network](https://zelerius.org) fork.** -- **[#940](https://github.com/xmrig/xmrig/issues/940) Added new algorithm `cryptonight/double`, short alias `cn/double` (also known as CryptoNight HeavyX), for [X-CASH](https://x-cash.org/).** -- [#951](https://github.com/xmrig/xmrig/issues/951#issuecomment-469581529) Fixed crash if AVX was disabled on OS level. -- [#952](https://github.com/xmrig/xmrig/issues/952) Fixed compile error on some Linux. -- [#957](https://github.com/xmrig/xmrig/issues/957#issuecomment-468890667) Added support for embedded config. -- [#958](https://github.com/xmrig/xmrig/pull/958) Fixed incorrect user agent on ARM platforms. -- [#968](https://github.com/xmrig/xmrig/pull/968) Optimized `cn/r` algorithm performance. - -# v2.13.1 -- [#946](https://github.com/xmrig/xmrig/pull/946) Optimized software AES implementations for CPUs without hardware AES support. `cn/r`, `cn/wow` up to 2.6 times faster, 4-9% improvements for other algorithms. - -# v2.13.0 -- **[#938](https://github.com/xmrig/xmrig/issues/938) Added support for new algorithm `cryptonight/r`, short alias `cn/r` (also known as CryptoNightR or CryptoNight variant 4), for upcoming [Monero](https://www.getmonero.org/) fork on March 9, thanks [@SChernykh](https://github.com/SChernykh).** -- [#939](https://github.com/xmrig/xmrig/issues/939) Added support for dynamic (runtime) pools reload. -- [#932](https://github.com/xmrig/xmrig/issues/932) Fixed `cn-pico` hashrate drop, regression since v2.11.0. - -# v2.12.0 -- [#929](https://github.com/xmrig/xmrig/pull/929) Added support for new algorithm `cryptonight/wow`, short alias `cn/wow` (also known as CryptonightR), for upcoming [Wownero](http://wownero.org) fork on February 14. - -# v2.11.0 -- [#928](https://github.com/xmrig/xmrig/issues/928) Added support for new algorithm `cryptonight/gpu`, short alias `cn/gpu` (original name `cryptonight-gpu`), for upcoming [Ryo currency](https://ryo-currency.com) fork on February 14. -- [#749](https://github.com/xmrig/xmrig/issues/749) Added support for detect hardware AES in runtime on ARMv8 platforms. -- [#292](https://github.com/xmrig/xmrig/issues/292) Fixed build on ARMv8 platforms if compiler not support hardware AES. - -# v2.10.0 -- [#904](https://github.com/xmrig/xmrig/issues/904) Added new algorithm `cn-pico/trtl` (aliases `cryptonight-turtle`, `cn-trtl`) for upcoming TurtleCoin (TRTL) fork. -- Default value for option `max-cpu-usage` changed to `100` also this option now deprecated. - -# v2.9.4 -- [#913](https://github.com/xmrig/xmrig/issues/913) Fixed Masari (MSR) support (this update required for upcoming fork). -- [#915](https://github.com/xmrig/xmrig/pull/915) Improved security, JIT memory now read-only after patching. - -# v2.9.3 -- [#909](https://github.com/xmrig/xmrig/issues/909) Fixed compile errors on FreeBSD. -- [#912](https://github.com/xmrig/xmrig/pull/912) Fixed, C++ implementation of `cn/half` was produce up to 13% of invalid hashes. - -# v2.9.2 -- [#907](https://github.com/xmrig/xmrig/pull/907) Fixed crash on Linux. - -# v2.9.1 -- Restored compatibility with https://stellite.hashvault.pro. - -# v2.9.0 -- [#899](https://github.com/xmrig/xmrig/issues/899) Added support for new algorithm `cn/half` for Masari and Stellite forks. -- [#834](https://github.com/xmrig/xmrig/pull/834) Added ASM optimized code for AMD Bulldozer. -- [#839](https://github.com/xmrig/xmrig/issues/839) Fixed FreeBSD compile. -- [#857](https://github.com/xmrig/xmrig/pull/857) Fixed impossible to build for macOS without clang. - -# v2.8.3 -- [#813](https://github.com/xmrig/xmrig/issues/813) Fixed critical bug with Minergate pool and variant 2. - -# v2.8.1 -- [#768](https://github.com/xmrig/xmrig/issues/768) Fixed build with Visual Studio 2015. -- [#769](https://github.com/xmrig/xmrig/issues/769) Fixed regression, some ANSI escape sequences was in log with disabled colors. -- [#777](https://github.com/xmrig/xmrig/issues/777) Better report about pool connection issues. -- Simplified checks for ASM auto detection, only AES support necessary. -- Added missing options to `--help` output. - -# v2.8.0 -- **[#753](https://github.com/xmrig/xmrig/issues/753) Added new algorithm [CryptoNight variant 2](https://github.com/xmrig/xmrig/issues/753) for Monero fork, thanks [@SChernykh](https://github.com/SChernykh).** - - Added global and per thread option `"asm"` and command line equivalent. -- **[#758](https://github.com/xmrig/xmrig/issues/758) Added SSL/TLS support for secure connections to pools.** - - Added per pool options `"tls"` and `"tls-fingerprint"` and command line equivalents. -- [#767](https://github.com/xmrig/xmrig/issues/767) Added config autosave feature, same with GPU miners. -- [#245](https://github.com/xmrig/xmrig-proxy/issues/245) Fixed API ID collision when run multiple miners on same machine. -- [#757](https://github.com/xmrig/xmrig/issues/757) Fixed send buffer overflow. - -# v2.6.4 -- [#700](https://github.com/xmrig/xmrig/issues/700) `cryptonight-lite/ipbc` replaced to `cryptonight-heavy/tube` for **Bittube (TUBE)**. -- Added `cryptonight/rto` (cryptonight variant 1 with IPBC/TUBE mod) variant for **Arto (RTO)** coin. -- Added `cryptonight/xao` (original cryptonight with bigger iteration count) variant for **Alloy (XAO)** coin. -- Better variant detection for **nicehash.com** and **minergate.com**. -- [#692](https://github.com/xmrig/xmrig/issues/692) Added support for specify both algorithm and variant via single `algo` option. - -# v2.6.3 -- **Added support for new cryptonight-heavy variant xhv** (`cn-heavy/xhv`) for upcoming Haven Protocol fork. -- **Added support for new cryptonight variant msr** (`cn/msr`) also known as `cryptonight-fast` for upcoming Masari fork. -- Added new detailed hashrate report. -- [#446](https://github.com/xmrig/xmrig/issues/446) Likely fixed SIGBUS error on 32 bit ARM CPUs. -- [#551](https://github.com/xmrig/xmrig/issues/551) Fixed `cn-heavy` algorithm on ARMv8. -- [#614](https://github.com/xmrig/xmrig/issues/614) Fixed display issue with huge pages percentage when colors disabled. -- [#615](https://github.com/xmrig/xmrig/issues/615) Fixed build without libcpuid. -- [#629](https://github.com/xmrig/xmrig/pull/629) Fixed file logging with non-seekable files. -- [#672](https://github.com/xmrig/xmrig/pull/672) Reverted back `cryptonight-light` and exit if no valid algorithm specified. - -# v2.6.2 - - [#607](https://github.com/xmrig/xmrig/issues/607) Fixed donation bug. - - [#610](https://github.com/xmrig/xmrig/issues/610) Fixed ARM build. - -# v2.6.1 - - [#168](https://github.com/xmrig/xmrig-proxy/issues/168) Added support for [mining algorithm negotiation](https://github.com/xmrig/xmrig-proxy/blob/dev/doc/STRATUM_EXT.md#1-mining-algorithm-negotiation). - - Added IPBC coin support, base algorithm `cn-lite` variant `ipbc`. - - [#581](https://github.com/xmrig/xmrig/issues/581) Added support for upcoming Stellite (XTL) fork, base algorithm `cn` variant `xtl`, variant can set now, no need do it after fork. - - Added support for **rig-id** stratum protocol extensions, compatible with xmr-stak. - - Changed behavior for option `variant=-1` for `cryptonight`, now variant is `1` by default, if you mine old coins need change `variant` to `0`. - - A lot of small fixes and better unification with proxy code. - -# v2.6.0-beta3 -- [#563](https://github.com/xmrig/xmrig/issues/563) **Added [advanced threads mode](https://github.com/xmrig/xmrig/issues/563), now possible configure each thread individually.** -- [#255](https://github.com/xmrig/xmrig/issues/563) Low power mode extended to **triple**, **quard** and **penta** modes. -- [#519](https://github.com/xmrig/xmrig/issues/519) Fixed high donation levels, improved donation start time randomization. -- [#554](https://github.com/xmrig/xmrig/issues/554) Fixed regression with `print-time` option. - -# v2.6.0-beta2 -- Improved performance for `cryptonight v7` especially in double hash mode. -- [#499](https://github.com/xmrig/xmrig/issues/499) IPv6 disabled for internal HTTP API by default, was causing issues on some systems. -- Added short aliases for algorithm names: `cn`, `cn-lite` and `cn-heavy`. -- Fixed regressions (v2.6.0-beta1 affected) - - [#494](https://github.com/xmrig/xmrig/issues/494) Command line option `--donate-level` was broken. - - [#502](https://github.com/xmrig/xmrig/issues/502) Build without libmicrohttpd was broken. - - Fixed nonce calculation for `--av 4` (software AES, double hash) was causing reduction of effective hashrate and rejected shares on nicehash. - -# v2.6.0-beta1 - - [#476](https://github.com/xmrig/xmrig/issues/476) **Added Cryptonight-Heavy support for Sumokoin ASIC resistance fork.** - - HTTP server now runs in main loop, it make possible easy extend API without worry about thread synchronization. - - Added initial graceful reload support, miner will reload configuration if config file changed, disabled by default until it will be fully implemented and tested. - - Added API endpoint `PUT /1/config` to update current config. - - Added API endpoint `GET /1/config` to get current active config. - - Added API endpoint `GET /1/threads` to get current active threads configuration. - - API endpoint `GET /` now deprecated, use `GET /1/summary` instead. - - Added `--api-no-ipv6` and similar config option to disable IPv6 support for HTTP API. - - Added `--api-no-restricted` to enable full access to api, this option has no effect if `--api-access-token` not specified. - -# v2.5.3 -- Fixed critical bug, in some cases miner was can't recovery connection and switch to failover pool, version 2.5.2 affected. If you use v2.6.0-beta3 this issue doesn't concern you. -- [#499](https://github.com/xmrig/xmrig/issues/499) IPv6 support disabled for internal HTTP API. -- Added workaround for nicehash.com if you use `cryptonightv7..nicehash.com` option `variant=1` will be set automatically. - -# v2.5.2 -- [#448](https://github.com/xmrig/xmrig/issues/478) Fixed broken reconnect. - -# v2.5.1 -- [#454](https://github.com/xmrig/xmrig/issues/454) Fixed build with libmicrohttpd version below v0.9.35. -- [#456](https://github.com/xmrig/xmrig/issues/459) Verbose errors related to donation pool was not fully silenced. -- [#459](https://github.com/xmrig/xmrig/issues/459) Fixed regression (version 2.5.0 affected) with connection to **xmr.f2pool.com**. - -# v2.5.0 -- [#434](https://github.com/xmrig/xmrig/issues/434) **Added support for Monero v7 PoW, scheduled on April 6.** -- Added full IPv6 support. -- Added protocol extension, when use the miner with xmrig-proxy 2.5+ no more need manually specify `nicehash` option. -- [#123](https://github.com/xmrig/xmrig-proxy/issues/123) Fixed regression (all versions since 2.4 affected) fragmented responses from pool/proxy was parsed incorrectly. -- [#428](https://github.com/xmrig/xmrig/issues/428) Fixed regression (version 2.4.5 affected) with CPU cache size detection. - -# v2.4.5 -- [#324](https://github.com/xmrig/xmrig/pull/324) Fixed build without libmicrohttpd (CMake cache issue). -- [#341](https://github.com/xmrig/xmrig/issues/341) Fixed wrong exit code and added command line option `--dry-run`. -- [#385](https://github.com/xmrig/xmrig/pull/385) Up to 20% performance increase for non-AES CPU and fixed Intel Core 2 cache detection. - -# v2.4.4 - - Added libmicrohttpd version to --version output. - - Fixed bug in singal handler, in some cases miner wasn't shutdown properly. - - Fixed recent MSVC 2017 version detection. - - [#279](https://github.com/xmrig/xmrig/pull/279) Fixed build on some macOS versions. - -# v2.4.3 - - [#94](https://github.com/xmrig/xmrig/issues/94#issuecomment-342019257) [#216](https://github.com/xmrig/xmrig/issues/216) Added **ARMv8** and **ARMv7** support. Hardware AES supported, thanks [Imran Yusuff](https://github.com/imranyusuff). - - [#157](https://github.com/xmrig/xmrig/issues/157) [#196](https://github.com/xmrig/xmrig/issues/196) Fixed Linux compile issues. - - [#184](https://github.com/xmrig/xmrig/issues/184) Fixed cache size detection for CPUs with disabled Hyper-Threading. - - [#200](https://github.com/xmrig/xmrig/issues/200) In some cases miner was doesn't write log to stdout. - -# v2.4.2 - - [#60](https://github.com/xmrig/xmrig/issues/60) Added FreeBSD support, thanks [vcambur](https://github.com/vcambur). - - [#153](https://github.com/xmrig/xmrig/issues/153) Fixed issues with dwarfpool.com. - -# v2.4.1 - - [#147](https://github.com/xmrig/xmrig/issues/147) Fixed comparability with monero-stratum. - -# v2.4.0 - - Added [HTTP API](https://github.com/xmrig/xmrig/wiki/API). - - Added comments support in config file. - - libjansson replaced to rapidjson. - - [#98](https://github.com/xmrig/xmrig/issues/98) Ignore `keepalive` option with minergate.com and nicehash.com. - - [#101](https://github.com/xmrig/xmrig/issues/101) Fixed MSVC 2017 (15.3) compile time version detection. - - [#108](https://github.com/xmrig/xmrig/issues/108) Silently ignore invalid values for `donate-level` option. - - [#111](https://github.com/xmrig/xmrig/issues/111) Fixed build without AEON support. - -# v2.3.1 -- [#68](https://github.com/xmrig/xmrig/issues/68) Fixed compatibility with Docker containers, was nothing print on console. - -# v2.3.0 -- Added `--cpu-priority` option (0 idle, 2 normal to 5 highest). -- Added `--user-agent` option, to set custom user-agent string for pool. For example `cpuminer-multi/0.1`. -- Added `--no-huge-pages` option, to disable huge pages support. -- [#62](https://github.com/xmrig/xmrig/issues/62) Don't send the login to the dev pool. -- Force reconnect if pool block miner IP address. helps switch to backup pool. -- Fixed: failed open default config file if path contains non English characters. -- Fixed: error occurred if try use unavailable stdin or stdout, regression since version 2.2.0. -- Fixed: message about huge pages support successfully enabled on Windows was not shown in release builds. - -# v2.2.1 -- Fixed [terminal issues](https://github.com/xmrig/xmrig-proxy/issues/2#issuecomment-319914085) after exit on Linux and OS X. - -# v2.2.0 -- [#46](https://github.com/xmrig/xmrig/issues/46) Restored config file support. Now possible use multiple config files and combine with command line options also added support for default config. -- Improved colors support on Windows, now used uv_tty, legacy code removed. -- QuickEdit Mode now disabled on Windows. -- Added interactive commands in console window:: **h**ashrate, **p**ause, **r**esume. -- Fixed autoconf mode for AMD FX CPUs. - -# v2.1.0 -- [#40](https://github.com/xmrig/xmrig/issues/40) -Improved miner shutdown, fixed crash on exit for Linux and OS X. -- Fixed, login request was contain malformed JSON if username or password has some special characters for example `\`. -- [#220](https://github.com/fireice-uk/xmr-stak-cpu/pull/220) Better support for Round Robin DNS, IP address now always chosen randomly instead of stuck on first one. -- Changed donation address, new [xmrig-proxy](https://github.com/xmrig/xmrig-proxy) is coming soon. - -# v2.0.2 -- Better deal with possible duplicate jobs from pool, show warning and ignore duplicates. -- For Windows builds libuv updated to version 1.13.1 and gcc to 7.1.0. - -# v2.0.1 - - [#27](https://github.com/xmrig/xmrig/issues/27) Fixed possibility crash on 32bit systems. - -# v2.0.0 - - Option `--backup-url` removed, instead now possibility specify multiple pools for example: `-o example1.com:3333 -u user1 -p password1 -k -o example2.com:5555 -u user2 -o example3.com:4444 -u user3` - - [#15](https://github.com/xmrig/xmrig/issues/15) Added option `-l, --log-file=FILE` to write log to file. - - [#15](https://github.com/xmrig/xmrig/issues/15) Added option `-S, --syslog` to use syslog for logging, Linux only. - - [#18](https://github.com/xmrig/xmrig/issues/18) Added nice messages for accepted/rejected shares with diff and network latency. - - [#20](https://github.com/xmrig/xmrig/issues/20) Fixed `--cpu-affinity` for more than 32 threads. - - Fixed Windows XP support. - - Fixed regression, option `--no-color` was not fully disable colored output. - - Show resolved pool IP address in miner output. - -# v1.0.1 -- Fix broken software AES implementation, app has crashed if CPU not support AES-NI, only version 1.0.0 affected. - -# v1.0.0 -- Miner complete rewritten in C++ with libuv. -- This version should be fully compatible (except config file) with previos versions, many new nice features will come in next versions. -- This is still beta. If you found regression, stability or perfomance issues or have an idea for new feature please fell free to open new [issue](https://github.com/xmrig/xmrig/issues/new). -- Added new option `--print-time=N`, print hashrate report every N seconds. -- New hashrate reports, by default every 60 secons. -- Added Microsoft Visual C++ 2015 and 2017 support. -- Removed dependency on libcurl. -- To compile this version from source please switch to [dev](https://github.com/xmrig/xmrig/tree/dev) branch. - -# v0.8.2 -- Fixed L2 cache size detection for AMD CPUs (Bulldozer/Piledriver/Steamroller/Excavator architecture). - -# v0.8.2 -- Fixed L2 cache size detection for AMD CPUs (Bulldozer/Piledriver/Steamroller/Excavator architecture). -- Fixed gcc 7.1 support. - -# v0.8.1 -- Added nicehash support, detects automaticaly by pool URL, for example `cryptonight.eu.nicehash.com:3355` or manually via option `--nicehash`. - -# v0.8.0 -- Added double hash mode, also known as lower power mode. `--av=2` and `--av=4`. -- Added smart automatic CPU configuration. Default threads count now depends on size of the L3 cache of CPU. -- Added CryptoNight-Lite support for AEON `-a cryptonight-lite`. -- Added `--max-cpu-usage` option for auto CPU configuration mode. -- Added `--safe` option for adjust threads and algorithm variations to current CPU. -- No more manual steps to enable huge pages on Windows. XMRig will do it automatically. -- Removed BMI2 algorithm variation. -- Removed default pool URL. - -# v0.6.0 -- Added automatic cryptonight self test. -- New software AES algorithm variation. Will be automatically selected if cpu not support AES-NI. -- Added 32 bit builds. -- Documented [algorithm variations](https://github.com/xmrig/xmrig#algorithm-variations). - -# v0.5.0 -- Initial public release. diff --git a/doc/CPU.md b/doc/CPU.md deleted file mode 100644 index 9cd51b90..00000000 --- a/doc/CPU.md +++ /dev/null @@ -1,145 +0,0 @@ -**:warning: Recent version of this page https://xmrig.com/docs/miner/config/cpu.** - -# CPU backend - -All CPU related settings contains in one `cpu` object in config file, CPU backend allow specify multiple profiles and allow switch between them without restrictions by pool request or config change. Default auto-configuration create reasonable minimum of profiles which cover all supported algorithms. - -### Example - -Example below demonstrate all primary ideas of flexible profiles configuration: - -* `"rx/wow"` Exact match to algorithm `rx/wow`, defined 4 threads without CPU affinity. -* `"cn"` Default failback profile for all `cn/*` algorithms, defined 2 threads with CPU affinity, another failback profiles is `cn-lite`, `cn-heavy` and `rx`. -* `"cn-lite"` Default failback profile for all `cn-lite/*` algorithms, defined 2 double threads with CPU affinity. -* `"cn-pico"` Alternative short object format. -* `"custom-profile"` Custom user defined profile. -* `"*"` Failback profile for all unhandled by other profiles algorithms. -* `"cn/r"` Exact match, alias to profile `custom-profile`. -* `"cn/0"` Exact match, disabled algorithm. - -```json -{ - "cpu": { - "enabled": true, - "huge-pages": true, - "hw-aes": null, - "priority": null, - "asm": true, - "rx/wow": [-1, -1, -1, -1], - "cn": [ - [1, 0], - [1, 2] - ], - "cn-lite": [ - [2, 0], - [2, 2] - ], - "cn-pico": { - "intensity": 2, - "threads": 8, - "affinity": -1 - }, - "custom-profile": [0, 2], - "*": [-1], - "cn/r": "custom-profile", - "cn/0": false - } -} -``` - -## Threads definition -Threads can be defined in 3 formats. - -#### Array format -```json -[ - [1, 0], - [1, 2], - [1, -1], - [2, -1] -] -``` -Each line represent one thread, first element is intensity, this option was known as `low_power_mode`, possible values is range from 1 to 5, second element is CPU affinity, special value `-1` means no affinity. - -#### Short array format -```json -[-1, -1, -1, -1] -``` -Each number represent one thread and means CPU affinity, this is default format for algorithm with maximum intensity 1, currently it all RandomX variants and cryptonight-gpu. - -#### Short object format -```json -{ - "intensity": 2, - "threads": 8, - "affinity": -1 -} -``` -Internal format, but can be user defined. - -## RandomX options - -#### `init` -Thread count to initialize RandomX dataset. Auto-detect (`-1`) or any number greater than 0 to use that many threads. - -#### `init-avx2` -Use AVX2 for dataset initialization. Faster on some CPUs. Auto-detect (`-1`), disabled (`0`), always enabled on CPUs that support AVX2 (`1`). - -#### `mode` -RandomX mining mode: `auto`, `fast` (2 GB memory), `light` (256 MB memory). - -#### `1gb-pages` -Use 1GB hugepages for RandomX dataset (Linux only). Enabled (`true`) or disabled (`false`). It gives 1-3% speedup. - -#### `wrmsr` -[MSR mod](https://xmrig.com/docs/miner/randomx-optimization-guide/msr). Enabled (`true`) or disabled (`false`). It gives up to 15% speedup depending on your system. _(**Note**: Userspace MSR writes are no longer enabled by default; the flag `msr.allow_writes=on` must be set for Linux Kernels 5.9 and after.)_ - -#### `rdmsr` -Restore MSR register values to their original values on exit. Used together with `wrmsr`. Enabled (`true`) or disabled (`false`). - -#### `cache_qos` -[Cache QoS](https://xmrig.com/docs/miner/randomx-optimization-guide/qos). Enabled (`true`) or disabled (`false`). It's useful when you can't or don't want to mine on all CPU cores to make mining hashrate more stable. - -#### `numa` -NUMA support (better hashrate on multi-CPU servers and Ryzen Threadripper 1xxx/2xxx). Enabled (`true`) or disabled (`false`). - -#### `scratchpad_prefetch_mode` -Which instruction to use in RandomX loop to prefetch data from scratchpad. `1` is default and fastest in most cases. Can be off (`0`), `prefetcht0` instruction (`1`), `prefetchnta` instruction (`2`, a bit faster on Coffee Lake and a few other CPUs), `mov` instruction (`3`). - -## Shared options - -#### `enabled` -Enable (`true`) or disable (`false`) CPU backend, by default `true`. - -#### `huge-pages` -Enable (`true`) or disable (`false`) huge pages support, by default `true`. - -#### `huge-pages-jit` -Enable (`true`) or disable (`false`) huge pages support for RandomX JIT code, by default `false`. It gives a very small boost on Ryzen CPUs, but hashrate is unstable between launches. Use with caution. - -#### `hw-aes` -Force enable (`true`) or disable (`false`) hardware AES support. Default value `null` means miner autodetect this feature. Usually don't need change this option, this option useful for some rare cases when miner can't detect hardware AES, but it available. If you force enable this option, but your hardware not support it, miner will crash. - -#### `priority` -Mining threads priority, value from `1` (lowest priority) to `5` (highest possible priority). Default value `null` means miner don't change threads priority at all. Setting priority higher than 2 can make your PC unresponsive. - -#### `memory-pool` (since v4.3.0) -Use continuous, persistent memory block for mining threads, useful for preserve huge pages allocation while algorithm switching. Possible values `false` (feature disabled, by default) or `true` or specific count of 2 MB huge pages. It helps to avoid loosing huge pages for scratchpads when RandomX dataset is updated and mining threads restart after a 2-3 days of mining. - -#### `yield` (since v5.1.1) -Prefer system better system response/stability `true` (default value) or maximum hashrate `false`. - -#### `asm` -Enable/configure or disable ASM optimizations. Possible values: `true`, `false`, `"intel"`, `"ryzen"`, `"bulldozer"`. - -#### `argon2-impl` (since v3.1.0) -Allow override automatically detected Argon2 implementation, this option added mostly for debug purposes, default value `null` means autodetect. This is used in RandomX dataset initialization and also in some other mining algorithms. Other possible values: `"x86_64"`, `"SSE2"`, `"SSSE3"`, `"XOP"`, `"AVX2"`, `"AVX-512F"`. Manual selection has no safe guards - if your CPU doesn't support required instuctions, miner will crash. - -#### `astrobwt-max-size` -AstroBWT algorithm: skip hashes with large stage 2 size, default: `550`, min: `400`, max: `1200`. Optimal value depends on your CPU/GPU - -#### `astrobwt-avx2` -AstroBWT algorithm: use AVX2 code. It's faster on some CPUs and slower on other - -#### `max-threads-hint` (since v4.2.0) -Maximum CPU threads count (in percentage) hint for autoconfig. [CPU_MAX_USAGE.md](CPU_MAX_USAGE.md) diff --git a/doc/CPU_MAX_USAGE.md b/doc/CPU_MAX_USAGE.md deleted file mode 100644 index fccfd456..00000000 --- a/doc/CPU_MAX_USAGE.md +++ /dev/null @@ -1,26 +0,0 @@ -# Maximum CPU usage - -Please read this document carefully, `max-threads-hint` (was known as `max-cpu-usage`) option is most confusing option in the miner with many myth and legends. -This option is just hint for automatic configuration and can't precise define CPU usage. - -### Option definition -#### Config file: -```json -{ - ... - "cpu": { - "max-threads-hint": 100, - ... - }, - ... -} -``` - -#### Command line -`--cpu-max-threads-hint 100` - -### Known issues and usage - -* This option has no effect if miner already generated CPU configuration, to prevent config generation use `"autosave":false,`. -* Only threads count can be changed, for 1 core CPU this option has no effect, for 2 core CPU only 2 values possible 50% and 100%, for 4 cores: 25%, 50%, 75%, 100%. etc. -* You CPU may limited by other factors, eg cache. diff --git a/doc/PERSISTENT_OPTIONS.md b/doc/PERSISTENT_OPTIONS.md deleted file mode 100644 index 7f845c1b..00000000 --- a/doc/PERSISTENT_OPTIONS.md +++ /dev/null @@ -1,9 +0,0 @@ -# Persistent options - -Options in list below can't changed in runtime by watching config file or via API. - -* `background` -* `donate-level` -* `cpu/argon2-impl` -* `opencl/loader` -* `opencl/platform` diff --git a/doc/api/1/config.json.bak b/doc/api/1/config.json.bak deleted file mode 100644 index 2c74cfba..00000000 --- a/doc/api/1/config.json.bak +++ /dev/null @@ -1,63 +0,0 @@ -{ - "algo": "cryptonight", - "api": { - "port": 44444, - "access-token": "TOKEN", - "worker-id": null, - "ipv6": false, - "restricted": false - }, - "av": 1, - "background": false, - "colors": true, - "cpu-affinity": null, - "cpu-priority": null, - "donate-level": 5, - "huge-pages": true, - "hw-aes": null, - "log-file": null, - "max-cpu-usage": 75, - "pools": [ - { - "url": "pool.monero.hashvault.pro:3333", - "user": "48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD", - "pass": "x", - "keepalive": false, - "nicehash": false, - "variant": -1 - }, - { - "url": "pool.supportxmr.com:3333", - "user": "48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD", - "pass": "x", - "keepalive": false, - "nicehash": false, - "variant": -1 - } - ], - "print-time": 60, - "retries": 5, - "retry-pause": 5, - "safe": false, - "threads": [ - { - "low_power_mode": 1, - "affine_to_cpu": 0 - }, - { - "low_power_mode": 1, - "affine_to_cpu": 1 - }, - { - "low_power_mode": 1, - "affine_to_cpu": 2 - }, - { - "low_power_mode": 1, - "affine_to_cpu": 3 - } - ], - "user-agent": null, - "syslog": false, - "watch": false -} \ No newline at end of file diff --git a/doc/api/1/summary.json b/doc/api/1/summary.json deleted file mode 100644 index ed3cd128..00000000 --- a/doc/api/1/summary.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "id": "92f3104f9a2ee78c", - "worker_id": "Ubuntu-1604-xenial-64-minimal", - "version": "2.6.0-beta3", - "kind": "cpu", - "ua": "XMRig/2.6.0-beta3 (Linux x86_64) libuv/1.8.0 gcc/5.4.0", - "cpu": { - "brand": "Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz", - "aes": true, - "x64": true, - "sockets": 1 - }, - "algo": "cryptonight", - "hugepages": true, - "donate_level": 5, - "hashrate": { - "total": [ - 296.24, - 296.23, - 295.97 - ], - "highest": 296.5, - "threads": [ - [ - 73.39, - 73.39, - 73.28 - ], - [ - 74.72, - 74.72, - 74.71 - ], - [ - 74.72, - 74.72, - 74.71 - ], - [ - 73.39, - 73.39, - 73.27 - ] - ] - }, - "results": { - "diff_current": 9990, - "shares_good": 30, - "shares_total": 30, - "avg_time": 31, - "hashes_total": 311833, - "best": [ - 278199, - 181923, - 103717, - 96632, - 56154, - 51580, - 45667, - 33159, - 29581, - 29514 - ], - "error_log": [] - }, - "connection": { - "pool": "pool.monero.hashvault.pro:3333", - "uptime": 953, - "ping": 35, - "failures": 0, - "error_log": [] - } -} \ No newline at end of file diff --git a/doc/api/1/threads.json b/doc/api/1/threads.json deleted file mode 100644 index e536883d..00000000 --- a/doc/api/1/threads.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "hugepages": [ - 4, - 4 - ], - "memory": 8388608, - "threads": [ - { - "type": "cpu", - "algo": "cryptonight", - "av": 1, - "low_power_mode": 1, - "affine_to_cpu": 0, - "priority": -1, - "soft_aes": false, - "hashrate": [ - 73.39, - 73.4, - 73.28 - ] - }, - { - "type": "cpu", - "algo": "cryptonight", - "av": 1, - "low_power_mode": 1, - "affine_to_cpu": 1, - "priority": -1, - "soft_aes": false, - "hashrate": [ - 74.72, - 74.72, - 74.7 - ] - }, - { - "type": "cpu", - "algo": "cryptonight", - "av": 1, - "low_power_mode": 1, - "affine_to_cpu": 2, - "priority": -1, - "soft_aes": false, - "hashrate": [ - 74.71, - 74.72, - 74.7 - ] - }, - { - "type": "cpu", - "algo": "cryptonight", - "av": 1, - "low_power_mode": 1, - "affine_to_cpu": 3, - "priority": -1, - "soft_aes": false, - "hashrate": [ - 73.39, - 73.4, - 73.28 - ] - } - ] -} \ No newline at end of file diff --git a/doc/build/CMAKE_OPTIONS.md b/doc/build/CMAKE_OPTIONS.md deleted file mode 100644 index 81e3914f..00000000 --- a/doc/build/CMAKE_OPTIONS.md +++ /dev/null @@ -1,41 +0,0 @@ -# CMake options -**Recent version of this document: https://xmrig.com/docs/miner/cmake-options** - -## Algorithms - -* **`-DWITH_CN_LITE=OFF`** disable all CryptoNight-Lite algorithms (`cn-lite/0`, `cn-lite/1`). -* **`-DWITH_CN_HEAVY=OFF`** disable all CryptoNight-Heavy algorithms (`cn-heavy/0`, `cn-heavy/xhv`, `cn-heavy/tube`). -* **`-DWITH_CN_PICO=OFF`** disable CryptoNight-Pico algorithm (`cn-pico`). -* **`-DWITH_RANDOMX=OFF`** disable RandomX algorithms (`rx/loki`, `rx/wow`). -* **`-DWITH_ARGON2=OFF`** disable Argon2 algorithms (`argon2/chukwa`, `argon2/wrkz`). - -## Features - -* **`-DWITH_HWLOC=OFF`** -disable [hwloc](https://github.com/xmrig/xmrig/issues/1077) support. -Disabling this feature is not recommended in most cases. -This feature add external dependency to libhwloc (1.10.0+) (except MSVC builds). -* **`-DWITH_LIBCPUID=OFF`** disable built in libcpuid support, this feature always disabled if hwloc enabled, if both hwloc and libcpuid disabled auto configuration for CPU will very limited. -* **`-DWITH_HTTP=OFF`** disable built in HTTP support, this feature used for HTTP API and daemon (solo mining) support. -* **`-DWITH_TLS=OFF`** disable SSL/TLS support (secure connections to pool). This feature add external dependency to OpenSSL. -* **`-DWITH_ASM=OFF`** disable assembly optimizations for modern CryptoNight algorithms. -* **`-DWITH_EMBEDDED_CONFIG=ON`** Enable [embedded](https://github.com/xmrig/xmrig/issues/957) config support. -* **`-DWITH_OPENCL=OFF`** Disable OpenCL backend. -* **`-DWITH_CUDA=OFF`** Disable CUDA backend. -* **`-DWITH_SSE4_1=OFF`** Disable SSE 4.1 for Blake2 (useful for arm builds). - -## Debug options - -* **`-DWITH_DEBUG_LOG=ON`** enable debug log (mostly network requests). -* **`-DHWLOC_DEBUG=ON`** enable some debug log for hwloc. -* **`-DCMAKE_BUILD_TYPE=Debug`** enable debug build, only useful for investigate crashes, this option slow down miner. - -## Special build options - -* **`-DXMRIG_DEPS=`** path to precompiled dependencies https://github.com/xmrig/xmrig-deps -* **`-DARM_TARGET=`** override ARM target, possible values `7` (ARMv7) and `8` (ARMv8). -* **`-DUV_INCLUDE_DIR=`** custom path to libuv headers. -* **`-DUV_LIBRARY=`** custom path to libuv library. -* **`-DHWLOC_INCLUDE_DIR=`** custom path to hwloc headers. -* **`-DHWLOC_LIBRARY=`** custom path to hwloc library. -* **`-DOPENSSL_ROOT_DIR=`** custom path to OpenSSL. diff --git a/doc/gpg_keys/xmrig.asc b/doc/gpg_keys/xmrig.asc deleted file mode 100644 index ea5b2c9b..00000000 --- a/doc/gpg_keys/xmrig.asc +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQENBF3VSRIBCADfFjDUbq0WLGulFeSou0A+jTvweNllPyLNOn3SNCC0XLEYyEcu -JiEBK80DlvR06TVr8Aw1rT5S2iH0i5Tl8DqShH2mmcN1rBp1M0Y95D89KVj3BIhE -nxmgmD4N3Wgm+5FmEH4W/RpG1xdYWJx3eJhtWPdFJqpg083E2D5P30wIQem+EnTR -5YrtTZPh5cPj2KRY+UmsDE3ahmxCgP7LYgnnpZQlWBBiMV932s7MvYBPJQc1wecS -0wi1zxyS81xHc3839EkA7wueCeNo+5jha+KH66tMKsfrI2WvfPHTCPjK9v7WJc/O -/eRp9d+wacn09D1L6CoRO0ers5p10GO84VhTABEBAAG0GVhNUmlnIDxzdXBwb3J0 -QHhtcmlnLmNvbT6JAU4EEwEIADgWIQSaxM6o5m41pcfN3BtEalNji+lECQUCXdVJ -EgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRBEalNji+lECbkQB/9nRou0 -tOlBwYn8xVgBu7IiDWNVETRWfrjrtdTvSahgbbo6lWgjA/vBLkjN9fISdBQ/n/Mt -hNDJbEtxHHt2baJhvT8du1eWcIHHXCV/rmv+iY/hTXa1gKqHiHDJrtYSVBG3BMme -1rdsUHTiKf3t5yRHOXAfY2C+XNblKAV7mhlxQBiKxdFDIkFEQKNrHNUvnzkOqoCT -2kTZZ2tPUMQdOn1eek6zG/+C7SwcBpJnakJ8jce4yA/xZbOVKetNWO3Ufu3TE34k -OdA+H4PU9+fV77XfOY8DtXeS3boUI97ei+4s/mwX/NFC0i8CPXyefxl3WRUBGDOI -w//kPNQVh4HobOCeuQENBF3VSRIBCADl29WorEi+vRA/3kg9VUXtxSU6caibFS3N -VXANiFRjrOmICdfrIgOSGNrYCQFsXu0Xe0udDYVX8yX6WJk+CT02Pdg0gkXiKoze -KrnK15mo3xXbb2tr1o9ROPgwY/o2AwQHj0o1JhdS2cybfuRiUQRoGgBX7a9X0cTY -r4ZJvOjzgAajl3ciwB3yWUmDiRlzZpO7YWESXbOhGVzyCnP5MlMEJ/fPRw9h38vK -HNKLhzcRfsLpXk34ghY3SxIv4NWUfuZXFWqpSdC9JgNc5zA72lJEQcF4DHJCKl7B -ddmrfsr9mdiIpo+/ZZFPPngdeZ2kvkJ2YKaZNVu2XooJARPQ8B8tABEBAAGJATYE -GAEIACAWIQSaxM6o5m41pcfN3BtEalNji+lECQUCXdVJEgIbDAAKCRBEalNji+lE -CdPUB/4nH1IdhHGmfko2kxdaHqQgCGLqh3pcrQXD9mBv/LYVnoHZpVRHsIDgg2Z4 -lQYrIRRqe69FjVxo7sA2eMIlV0GRDlUrw+HeURFpEhKPEdwFy6i/cti2MY0YxOrB -TvQoRutUoMnyjM4TBJWaaqccbTsavMdLmG3JHdAkiHtUis/fUwVctmEQwN+d/J2b -wJAtliqw3nXchUfdIfwHF/7hg8seUuYUaifzkazBZhVWvRkTVLVanzZ51HRfuzwD -ntaa7kfYGdE+4TKOylAPh+8E6WnR19RRTpsaW0dVBgOiBTE0uc7rUv2HWS/u6RUR -t7ldSBzkuDTlM2V59Iq2hXoSC6dT -=cIG9 ------END PGP PUBLIC KEY BLOCK----- diff --git a/doc/screenshot.png b/doc/screenshot.png deleted file mode 100644 index 28e1e3a1c642c90527bd210829a0565c54082eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33480 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 RQaCxTc|%vN`1-?_{~wQR>$3m= diff --git a/doc/screenshot_v5_2_0.png b/doc/screenshot_v5_2_0.png deleted file mode 100644 index 630dbf971d92389dccea58b5ecaf76fa0d5bf686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48600 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml b/doc/topology/AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml deleted file mode 100644 index 39576bb4..00000000 --- a/doc/topology/AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 1 2 3 4 5 6 7 - 10 16 16 22 16 22 16 22 16 10 - 22 16 22 16 22 16 16 22 10 16 - 16 22 16 22 22 16 16 10 22 16 - 22 16 16 22 16 22 10 16 16 22 - 22 16 22 16 16 10 22 16 16 22 - 16 22 16 22 10 16 22 16 22 16 - 22 16 16 10 - - \ No newline at end of file diff --git a/doc/topology/AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml b/doc/topology/AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml deleted file mode 100644 index b59f773c..00000000 --- a/doc/topology/AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Opteron_6344_x2_N4_win7_2_0_4_bug.xml b/doc/topology/AMD_Opteron_6344_x2_N4_win7_2_0_4_bug.xml deleted file mode 100644 index f3a25ff5..00000000 --- a/doc/topology/AMD_Opteron_6344_x2_N4_win7_2_0_4_bug.xml +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Opteron_6348_x4_N8_linux_1_11_2.xml b/doc/topology/AMD_Opteron_6348_x4_N8_linux_1_11_2.xml deleted file mode 100644 index 2d889819..00000000 --- a/doc/topology/AMD_Opteron_6348_x4_N8_linux_1_11_2.xml +++ /dev/null @@ -1,550 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Opteron_6348_x4_N8_linux_2_0_4.xml b/doc/topology/AMD_Opteron_6348_x4_N8_linux_2_0_4.xml deleted file mode 100644 index 909dbcb9..00000000 --- a/doc/topology/AMD_Opteron_6348_x4_N8_linux_2_0_4.xml +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 2 5 6 - 10 22 16 22 22 10 22 16 16 22 - 10 22 22 16 22 10 - - - diff --git a/doc/topology/AMD_Opteron_6380_x4_N8_linux_1_11_5.xml b/doc/topology/AMD_Opteron_6380_x4_N8_linux_1_11_5.xml deleted file mode 100644 index 2ecbe3cb..00000000 --- a/doc/topology/AMD_Opteron_6380_x4_N8_linux_1_11_5.xml +++ /dev/null @@ -1,670 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Ryzen_7_2700X_windows_2_0_4.xml b/doc/topology/AMD_Ryzen_7_2700X_windows_2_0_4.xml deleted file mode 100644 index e3ecb6fd..00000000 --- a/doc/topology/AMD_Ryzen_7_2700X_windows_2_0_4.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Ryzen_7_3700X_windows_2_0_4.xml b/doc/topology/AMD_Ryzen_7_3700X_windows_2_0_4.xml deleted file mode 100644 index 1f2d0ee4..00000000 --- a/doc/topology/AMD_Ryzen_7_3700X_windows_2_0_4.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/AMD_Ryzen_Threadripper_2950X_N2_linux_2_0_4.xml b/doc/topology/AMD_Ryzen_Threadripper_2950X_N2_linux_2_0_4.xml deleted file mode 100644 index c168e2a0..00000000 --- a/doc/topology/AMD_Ryzen_Threadripper_2950X_N2_linux_2_0_4.xml +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 1 - 10 16 16 10 - - diff --git a/doc/topology/AMD_Ryzen_Threadripper_2950X_UMA_linux_1_11_9.xml b/doc/topology/AMD_Ryzen_Threadripper_2950X_UMA_linux_1_11_9.xml deleted file mode 100644 index ed3776c0..00000000 --- a/doc/topology/AMD_Ryzen_Threadripper_2950X_UMA_linux_1_11_9.xml +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Core_i7-3770_linux_2_0_4.xml b/doc/topology/Intel_Core_i7-3770_linux_2_0_4.xml deleted file mode 100644 index 18c80210..00000000 --- a/doc/topology/Intel_Core_i7-3770_linux_2_0_4.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Core_i7-6700_linux_2_0_4.xml b/doc/topology/Intel_Core_i7-6700_linux_2_0_4.xml deleted file mode 100644 index c80c7403..00000000 --- a/doc/topology/Intel_Core_i7-6700_linux_2_0_4.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Core_i7-6700_windows_2_0_4.xml b/doc/topology/Intel_Core_i7-6700_windows_2_0_4.xml deleted file mode 100644 index dd3c201c..00000000 --- a/doc/topology/Intel_Core_i7-6700_windows_2_0_4.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Core_i7-7660U_windows_2_0_4.xml b/doc/topology/Intel_Core_i7-7660U_windows_2_0_4.xml deleted file mode 100644 index 01a29e86..00000000 --- a/doc/topology/Intel_Core_i7-7660U_windows_2_0_4.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml b/doc/topology/Intel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml deleted file mode 100644 index 7811a49f..00000000 --- a/doc/topology/Intel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml b/doc/topology/Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml deleted file mode 100644 index 9dad397a..00000000 --- a/doc/topology/Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml b/doc/topology/Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml deleted file mode 100644 index 3d0a6736..00000000 --- a/doc/topology/Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml +++ /dev/null @@ -1,541 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml b/doc/topology/Intel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml deleted file mode 100644 index fe94194c..00000000 --- a/doc/topology/Intel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml b/doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml deleted file mode 100644 index 0dadfed2..00000000 --- a/doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml b/doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml deleted file mode 100644 index fd56a10c..00000000 --- a/doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 1 - 10 21 21 10 - - diff --git a/src/App.cpp b/src/App.cpp index 13b390e1..0186c38c 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -76,7 +76,7 @@ int xmrig::App::exec() m_console = std::make_shared(this); } - Summary::print(m_controller.get()); + // Summary::print(m_controller.get()); if (m_controller->config()->isDryRun()) { LOG_NOTICE("%s " WHITE_BOLD("OK"), Tags::config()); diff --git a/src/base/base.cmake b/src/base/base.cmake index 0f4f8725..e6b72239 100644 --- a/src/base/base.cmake +++ b/src/base/base.cmake @@ -199,7 +199,7 @@ if (WITH_HTTP) src/base/net/http/HttpContext.h src/base/net/http/HttpData.h src/base/net/http/HttpResponse.h - src/base/net/stratum/DaemonClient.h + # src/base/net/stratum/DaemonClient.h src/base/net/stratum/SelfSelectClient.h src/base/net/tools/TcpServer.h ) @@ -219,7 +219,7 @@ if (WITH_HTTP) src/base/net/http/HttpData.cpp src/base/net/http/HttpListener.cpp src/base/net/http/HttpResponse.cpp - src/base/net/stratum/DaemonClient.cpp + # src/base/net/stratum/DaemonClient.cpp src/base/net/stratum/SelfSelectClient.cpp src/base/net/tools/TcpServer.cpp ) diff --git a/src/base/crypto/Algorithm.cpp b/src/base/crypto/Algorithm.cpp index e7c4f551..c8c51bee 100644 --- a/src/base/crypto/Algorithm.cpp +++ b/src/base/crypto/Algorithm.cpp @@ -173,78 +173,78 @@ struct aliasCompare static const std::map kAlgorithmAliases = { - ALGO_ALIAS_AUTO(CN_0), ALGO_ALIAS(CN_0, "cryptonight/0"), - ALGO_ALIAS(CN_0, "cryptonight"), + ALGO_ALIAS_AUTO(CN_0), ALGO_ALIAS(CN_0, "cryptnght/0"), + ALGO_ALIAS(CN_0, "cryptnght"), ALGO_ALIAS(CN_0, "cn"), - ALGO_ALIAS_AUTO(CN_1), ALGO_ALIAS(CN_1, "cryptonight/1"), - ALGO_ALIAS(CN_1, "cryptonight-monerov7"), - ALGO_ALIAS(CN_1, "cryptonight_v7"), - ALGO_ALIAS_AUTO(CN_2), ALGO_ALIAS(CN_2, "cryptonight/2"), - ALGO_ALIAS(CN_2, "cryptonight-monerov8"), - ALGO_ALIAS(CN_2, "cryptonight_v8"), - ALGO_ALIAS_AUTO(CN_FAST), ALGO_ALIAS(CN_FAST, "cryptonight/fast"), - ALGO_ALIAS(CN_FAST, "cryptonight/msr"), + ALGO_ALIAS_AUTO(CN_1), ALGO_ALIAS(CN_1, "cryptnght/1"), + ALGO_ALIAS(CN_1, "cryptnght-monerov7"), + ALGO_ALIAS(CN_1, "cryptnght_v7"), + ALGO_ALIAS_AUTO(CN_2), ALGO_ALIAS(CN_2, "cryptnght/2"), + ALGO_ALIAS(CN_2, "cryptnght-monerov8"), + ALGO_ALIAS(CN_2, "cryptnght_v8"), + ALGO_ALIAS_AUTO(CN_FAST), ALGO_ALIAS(CN_FAST, "cryptnght/fast"), + ALGO_ALIAS(CN_FAST, "cryptnght/msr"), ALGO_ALIAS(CN_FAST, "cn/msr"), - ALGO_ALIAS_AUTO(CN_R), ALGO_ALIAS(CN_R, "cryptonight/r"), - ALGO_ALIAS(CN_R, "cryptonight_r"), - ALGO_ALIAS_AUTO(CN_XAO), ALGO_ALIAS(CN_XAO, "cryptonight/xao"), - ALGO_ALIAS(CN_XAO, "cryptonight_alloy"), - ALGO_ALIAS_AUTO(CN_HALF), ALGO_ALIAS(CN_HALF, "cryptonight/half"), - ALGO_ALIAS_AUTO(CN_RTO), ALGO_ALIAS(CN_RTO, "cryptonight/rto"), - ALGO_ALIAS_AUTO(CN_RWZ), ALGO_ALIAS(CN_RWZ, "cryptonight/rwz"), - ALGO_ALIAS_AUTO(CN_ZLS), ALGO_ALIAS(CN_ZLS, "cryptonight/zls"), - ALGO_ALIAS_AUTO(CN_DOUBLE), ALGO_ALIAS(CN_DOUBLE, "cryptonight/double"), - ALGO_ALIAS_AUTO(CN_CCX), ALGO_ALIAS(CN_CCX, "cryptonight/ccx"), - ALGO_ALIAS(CN_CCX, "cryptonight/conceal"), + ALGO_ALIAS_AUTO(CN_R), ALGO_ALIAS(CN_R, "cryptnght/r"), + ALGO_ALIAS(CN_R, "cryptnght_r"), + ALGO_ALIAS_AUTO(CN_XAO), ALGO_ALIAS(CN_XAO, "cryptnght/xao"), + ALGO_ALIAS(CN_XAO, "cryptnght_alloy"), + ALGO_ALIAS_AUTO(CN_HALF), ALGO_ALIAS(CN_HALF, "cryptnght/half"), + ALGO_ALIAS_AUTO(CN_RTO), ALGO_ALIAS(CN_RTO, "cryptnght/rto"), + ALGO_ALIAS_AUTO(CN_RWZ), ALGO_ALIAS(CN_RWZ, "cryptnght/rwz"), + ALGO_ALIAS_AUTO(CN_ZLS), ALGO_ALIAS(CN_ZLS, "cryptnght/zls"), + ALGO_ALIAS_AUTO(CN_DOUBLE), ALGO_ALIAS(CN_DOUBLE, "cryptnght/double"), + ALGO_ALIAS_AUTO(CN_CCX), ALGO_ALIAS(CN_CCX, "cryptnght/ccx"), + ALGO_ALIAS(CN_CCX, "cryptnght/conceal"), ALGO_ALIAS(CN_CCX, "cn/conceal"), # ifdef XMRIG_ALGO_CN_LITE - ALGO_ALIAS_AUTO(CN_LITE_0), ALGO_ALIAS(CN_LITE_0, "cryptonight-lite/0"), - ALGO_ALIAS(CN_LITE_0, "cryptonight-lite"), - ALGO_ALIAS(CN_LITE_0, "cryptonight-light"), + ALGO_ALIAS_AUTO(CN_LITE_0), ALGO_ALIAS(CN_LITE_0, "cryptnght-lite/0"), + ALGO_ALIAS(CN_LITE_0, "cryptnght-lite"), + ALGO_ALIAS(CN_LITE_0, "cryptnght-light"), ALGO_ALIAS(CN_LITE_0, "cn-lite"), ALGO_ALIAS(CN_LITE_0, "cn-light"), - ALGO_ALIAS(CN_LITE_0, "cryptonight_lite"), - ALGO_ALIAS_AUTO(CN_LITE_1), ALGO_ALIAS(CN_LITE_1, "cryptonight-lite/1"), - ALGO_ALIAS(CN_LITE_1, "cryptonight-aeonv7"), - ALGO_ALIAS(CN_LITE_1, "cryptonight_lite_v7"), + ALGO_ALIAS(CN_LITE_0, "cryptnght_lite"), + ALGO_ALIAS_AUTO(CN_LITE_1), ALGO_ALIAS(CN_LITE_1, "cryptnght-lite/1"), + ALGO_ALIAS(CN_LITE_1, "cryptnght-aeonv7"), + ALGO_ALIAS(CN_LITE_1, "cryptnght_lite_v7"), # endif # ifdef XMRIG_ALGO_CN_HEAVY - ALGO_ALIAS_AUTO(CN_HEAVY_0), ALGO_ALIAS(CN_HEAVY_0, "cryptonight-heavy/0"), - ALGO_ALIAS(CN_HEAVY_0, "cryptonight-heavy"), + ALGO_ALIAS_AUTO(CN_HEAVY_0), ALGO_ALIAS(CN_HEAVY_0, "cryptnght-heavy/0"), + ALGO_ALIAS(CN_HEAVY_0, "cryptnght-heavy"), ALGO_ALIAS(CN_HEAVY_0, "cn-heavy"), - ALGO_ALIAS(CN_HEAVY_0, "cryptonight_heavy"), - ALGO_ALIAS_AUTO(CN_HEAVY_XHV), ALGO_ALIAS(CN_HEAVY_XHV, "cryptonight-heavy/xhv"), - ALGO_ALIAS(CN_HEAVY_XHV, "cryptonight_haven"), - ALGO_ALIAS_AUTO(CN_HEAVY_TUBE), ALGO_ALIAS(CN_HEAVY_TUBE, "cryptonight-heavy/tube"), - ALGO_ALIAS(CN_HEAVY_TUBE, "cryptonight-bittube2"), + ALGO_ALIAS(CN_HEAVY_0, "cryptnght_heavy"), + ALGO_ALIAS_AUTO(CN_HEAVY_XHV), ALGO_ALIAS(CN_HEAVY_XHV, "cryptnght-heavy/xhv"), + ALGO_ALIAS(CN_HEAVY_XHV, "cryptnght_haven"), + ALGO_ALIAS_AUTO(CN_HEAVY_TUBE), ALGO_ALIAS(CN_HEAVY_TUBE, "cryptnght-heavy/tube"), + ALGO_ALIAS(CN_HEAVY_TUBE, "cryptnght-bittube2"), # endif # ifdef XMRIG_ALGO_CN_PICO - ALGO_ALIAS_AUTO(CN_PICO_0), ALGO_ALIAS(CN_PICO_0, "cryptonight-pico"), + ALGO_ALIAS_AUTO(CN_PICO_0), ALGO_ALIAS(CN_PICO_0, "cryptnght-pico"), ALGO_ALIAS(CN_PICO_0, "cn-pico/0"), - ALGO_ALIAS(CN_PICO_0, "cryptonight-pico/trtl"), + ALGO_ALIAS(CN_PICO_0, "cryptnght-pico/trtl"), ALGO_ALIAS(CN_PICO_0, "cn-pico/trtl"), - ALGO_ALIAS(CN_PICO_0, "cryptonight-turtle"), + ALGO_ALIAS(CN_PICO_0, "cryptnght-turtle"), ALGO_ALIAS(CN_PICO_0, "cn-trtl"), - ALGO_ALIAS(CN_PICO_0, "cryptonight-ultralite"), + ALGO_ALIAS(CN_PICO_0, "cryptnght-ultralite"), ALGO_ALIAS(CN_PICO_0, "cn-ultralite"), - ALGO_ALIAS(CN_PICO_0, "cryptonight_turtle"), + ALGO_ALIAS(CN_PICO_0, "cryptnght_turtle"), ALGO_ALIAS(CN_PICO_0, "cn_turtle"), - ALGO_ALIAS_AUTO(CN_PICO_TLO), ALGO_ALIAS(CN_PICO_TLO, "cryptonight-pico/tlo"), - ALGO_ALIAS(CN_PICO_TLO, "cryptonight/ultra"), + ALGO_ALIAS_AUTO(CN_PICO_TLO), ALGO_ALIAS(CN_PICO_TLO, "cryptnght-pico/tlo"), + ALGO_ALIAS(CN_PICO_TLO, "cryptnght/ultra"), ALGO_ALIAS(CN_PICO_TLO, "cn/ultra"), - ALGO_ALIAS(CN_PICO_TLO, "cryptonight-talleo"), + ALGO_ALIAS(CN_PICO_TLO, "cryptnght-talleo"), ALGO_ALIAS(CN_PICO_TLO, "cn-talleo"), - ALGO_ALIAS(CN_PICO_TLO, "cryptonight_talleo"), + ALGO_ALIAS(CN_PICO_TLO, "cryptnght_talleo"), ALGO_ALIAS(CN_PICO_TLO, "cn_talleo"), # endif # ifdef XMRIG_ALGO_CN_FEMTO - ALGO_ALIAS_AUTO(CN_UPX2), ALGO_ALIAS(CN_UPX2, "cryptonight/upx2"), + ALGO_ALIAS_AUTO(CN_UPX2), ALGO_ALIAS(CN_UPX2, "cryptnght/upx2"), ALGO_ALIAS(CN_UPX2, "cn-extremelite/upx2"), - ALGO_ALIAS(CN_UPX2, "cryptonight-upx/2"), + ALGO_ALIAS(CN_UPX2, "cryptnght-upx/2"), # endif # ifdef XMRIG_ALGO_RANDOMX diff --git a/src/base/crypto/Algorithm.h b/src/base/crypto/Algorithm.h index 53276068..4caf9849 100644 --- a/src/base/crypto/Algorithm.h +++ b/src/base/crypto/Algorithm.h @@ -45,25 +45,25 @@ public: // 1 byte: extra variant (coin) id. enum Id : uint32_t { INVALID = 0, - CN_0 = 0x63150000, // "cn/0" CryptoNight (original). - CN_1 = 0x63150100, // "cn/1" CryptoNight variant 1 also known as Monero7 and CryptoNightV7. - CN_2 = 0x63150200, // "cn/2" CryptoNight variant 2. - CN_R = 0x63150272, // "cn/r" CryptoNightR (Monero's variant 4). - CN_FAST = 0x63150166, // "cn/fast" CryptoNight variant 1 with half iterations. - CN_HALF = 0x63150268, // "cn/half" CryptoNight variant 2 with half iterations (Masari/Torque). - CN_XAO = 0x63150078, // "cn/xao" CryptoNight variant 0 (modified, Alloy only). - CN_RTO = 0x63150172, // "cn/rto" CryptoNight variant 1 (modified, Arto only). - CN_RWZ = 0x63150277, // "cn/rwz" CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation (Graft). - CN_ZLS = 0x6315027a, // "cn/zls" CryptoNight variant 2 with 3/4 iterations (Zelerius). - CN_DOUBLE = 0x63150264, // "cn/double" CryptoNight variant 2 with double iterations (X-CASH). + CN_0 = 0x63150000, // "cn/0" Cryptnght (original). + CN_1 = 0x63150100, // "cn/1" Cryptnght variant 1 also known as Monero7 and CryptnghtV7. + CN_2 = 0x63150200, // "cn/2" Cryptnght variant 2. + CN_R = 0x63150272, // "cn/r" CryptnghtR (Monero's variant 4). + CN_FAST = 0x63150166, // "cn/fast" Cryptnght variant 1 with half iterations. + CN_HALF = 0x63150268, // "cn/half" Cryptnght variant 2 with half iterations (Masari/Torque). + CN_XAO = 0x63150078, // "cn/xao" Cryptnght variant 0 (modified, Alloy only). + CN_RTO = 0x63150172, // "cn/rto" Cryptnght variant 1 (modified, Arto only). + CN_RWZ = 0x63150277, // "cn/rwz" Cryptnght variant 2 with 3/4 iterations and reversed shuffle operation (Graft). + CN_ZLS = 0x6315027a, // "cn/zls" Cryptnght variant 2 with 3/4 iterations (Zelerius). + CN_DOUBLE = 0x63150264, // "cn/double" Cryptnght variant 2 with double iterations (X-CASH). CN_CCX = 0x63150063, // "cn/ccx" Conceal (CCX) - CN_LITE_0 = 0x63140000, // "cn-lite/0" CryptoNight-Lite variant 0. - CN_LITE_1 = 0x63140100, // "cn-lite/1" CryptoNight-Lite variant 1. - CN_HEAVY_0 = 0x63160000, // "cn-heavy/0" CryptoNight-Heavy (4 MB). - CN_HEAVY_TUBE = 0x63160172, // "cn-heavy/tube" CryptoNight-Heavy (modified, TUBE only). - CN_HEAVY_XHV = 0x63160068, // "cn-heavy/xhv" CryptoNight-Heavy (modified, Haven Protocol only). - CN_PICO_0 = 0x63120200, // "cn-pico" CryptoNight-Pico - CN_PICO_TLO = 0x63120274, // "cn-pico/tlo" CryptoNight-Pico (TLO) + CN_LITE_0 = 0x63140000, // "cn-lite/0" Cryptnght-Lite variant 0. + CN_LITE_1 = 0x63140100, // "cn-lite/1" Cryptnght-Lite variant 1. + CN_HEAVY_0 = 0x63160000, // "cn-heavy/0" Cryptnght-Heavy (4 MB). + CN_HEAVY_TUBE = 0x63160172, // "cn-heavy/tube" Cryptnght-Heavy (modified, TUBE only). + CN_HEAVY_XHV = 0x63160068, // "cn-heavy/xhv" Cryptnght-Heavy (modified, Haven Protocol only). + CN_PICO_0 = 0x63120200, // "cn-pico" Cryptnght-Pico + CN_PICO_TLO = 0x63120274, // "cn-pico/tlo" Cryptnght-Pico (TLO) CN_UPX2 = 0x63110200, // "cn/upx2" Uplexa (UPX2) CN_GR_0 = 0x63130100, // "cn/dark" GhostRider CN_GR_1 = 0x63130101, // "cn/dark-lite" GhostRider diff --git a/src/base/io/log/Tags.cpp b/src/base/io/log/Tags.cpp index 23ef63d7..0a52f16a 100644 --- a/src/base/io/log/Tags.cpp +++ b/src/base/io/log/Tags.cpp @@ -64,7 +64,7 @@ const char *xmrig::Tags::cpu() const char *xmrig::Tags::miner() { - static const char *tag = MAGENTA_BG_BOLD(WHITE_BOLD_S " miner "); + static const char *tag = MAGENTA_BG_BOLD(WHITE_BOLD_S " wrkr "); return tag; } @@ -73,7 +73,7 @@ const char *xmrig::Tags::miner() #ifdef XMRIG_ALGO_RANDOMX const char *xmrig::Tags::randomx() { - static const char *tag = BLUE_BG(WHITE_BOLD_S " randomx ") " "; + static const char *tag = BLUE_BG(WHITE_BOLD_S " al rndmx ") " "; return tag; } diff --git a/src/base/kernel/Base.cpp b/src/base/kernel/Base.cpp index add53a96..ca0246d2 100644 --- a/src/base/kernel/Base.cpp +++ b/src/base/kernel/Base.cpp @@ -33,7 +33,7 @@ #include "base/kernel/Process.h" #include "base/net/tools/NetBuffer.h" #include "core/config/Config.h" -#include "core/config/ConfigTransform.h" +// #include "core/config/ConfigTransform.h" #include "version.h" @@ -121,10 +121,10 @@ private: inline static Config *load(Process *process) { JsonChain chain; - ConfigTransform transform; + // ConfigTransform transform; std::unique_ptr config; - ConfigTransform::load(chain, process, transform); + // ConfigTransform::load(chain, process, transform); if (read(chain, config)) { return config.release(); diff --git a/src/base/net/stratum/DaemonClient.cpp b/src/base/net/stratum/DaemonClient.cpp index 37f352bc..3764b998 100644 --- a/src/base/net/stratum/DaemonClient.cpp +++ b/src/base/net/stratum/DaemonClient.cpp @@ -448,15 +448,15 @@ bool xmrig::DaemonClient::parseJob(const rapidjson::Value ¶ms, int *code) uint8_t derivation[32]; if (!generate_key_derivation(m_blocktemplate.blob(BlockTemplate::TX_PUBKEY_OFFSET), secret_viewkey, derivation, nullptr)) { - return jobError("Failed to generate key derivation for miner signature."); + return jobError("Failed to generate key derivation for mnr signature."); } if (!m_walletAddress.decode(m_pool.user())) { - return jobError("Invalid wallet address."); + return jobError("Invalid wallet addr."); } if (memcmp(m_walletAddress.spendKey(), public_spendkey, sizeof(public_spendkey)) != 0) { - return jobError("Wallet address and spend key don't match."); + return jobError("Wallet addr and spend key don't match."); } if (memcmp(m_walletAddress.viewKey(), public_viewkey, sizeof(public_viewkey)) != 0) { diff --git a/src/base/net/stratum/Pool.cpp b/src/base/net/stratum/Pool.cpp index 3d36b141..fdca811e 100644 --- a/src/base/net/stratum/Pool.cpp +++ b/src/base/net/stratum/Pool.cpp @@ -38,7 +38,7 @@ #ifdef XMRIG_FEATURE_HTTP -# include "base/net/stratum/DaemonClient.h" +//# include "base/net/stratum/DaemonClient.h" # include "base/net/stratum/SelfSelectClient.h" #endif @@ -238,9 +238,9 @@ xmrig::IClient *xmrig::Pool::createClient(int id, IClientListener *listener) con } } # ifdef XMRIG_FEATURE_HTTP - else if (m_mode == MODE_DAEMON) { + /* else if (m_mode == MODE_DAEMON) { client = new DaemonClient(id, listener); - } + }*/ else if (m_mode == MODE_SELF_SELECT) { client = new SelfSelectClient(id, Platform::userAgent(), listener, m_submitToOrigin); } diff --git a/src/base/net/stratum/Url.cpp b/src/base/net/stratum/Url.cpp index 7904a445..8d77623a 100644 --- a/src/base/net/stratum/Url.cpp +++ b/src/base/net/stratum/Url.cpp @@ -32,13 +32,13 @@ namespace xmrig { -static const char kStratumTcp[] = "stratum+tcp://"; -static const char kStratumSsl[] = "stratum+ssl://"; +//static const char kStratumTcp[] = "stratum+tcp://"; +//static const char kStratumSsl[] = "stratum+ssl://"; static const char kSOCKS5[] = "socks5://"; #ifdef XMRIG_FEATURE_HTTP -static const char kDaemonHttp[] = "daemon+http://"; -static const char kDaemonHttps[] = "daemon+https://"; +//static const char kDaemonHttp[] = "daemon+http://"; +//static const char kDaemonHttps[] = "daemon+https://"; #endif } // namespace xmrig @@ -82,29 +82,11 @@ bool xmrig::Url::parse(const char *url) const char *base = url; if (p) { - if (strncasecmp(url, kStratumTcp, sizeof(kStratumTcp) - 1) == 0) { - m_scheme = STRATUM; - m_tls = false; - } - else if (strncasecmp(url, kStratumSsl, sizeof(kStratumSsl) - 1) == 0) { - m_scheme = STRATUM; - m_tls = true; - } - else if (strncasecmp(url, kSOCKS5, sizeof(kSOCKS5) - 1) == 0) { + if (strncasecmp(url, kSOCKS5, sizeof(kSOCKS5) - 1) == 0) { m_scheme = SOCKS5; m_tls = false; } -# ifdef XMRIG_FEATURE_HTTP - else if (strncasecmp(url, kDaemonHttps, sizeof(kDaemonHttps) - 1) == 0) { - m_scheme = DAEMON; - m_tls = true; - } - else if (strncasecmp(url, kDaemonHttp, sizeof(kDaemonHttp) - 1) == 0) { - m_scheme = DAEMON; - m_tls = false; - } -# endif - else { + else { // If it's not SOCKS5, and p was found, then it's an unsupported scheme return false; } diff --git a/src/core/config/Config_platform.h b/src/core/config/Config_platform.h index c689ed8a..7a1b2d4b 100644 --- a/src/core/config/Config_platform.h +++ b/src/core/config/Config_platform.h @@ -35,8 +35,8 @@ static const char short_options[] = "a:c:kBp:Px:r:R:s:t:T:o:u:O:v:l:Sx:46"; static const option options[] = { - { "algo", 1, nullptr, IConfig::AlgorithmKey }, - { "coin", 1, nullptr, IConfig::CoinKey }, + // { "algo", 1, nullptr, IConfig::AlgorithmKey }, + // { "coin", 1, nullptr, IConfig::CoinKey }, # ifdef XMRIG_FEATURE_HTTP { "api-worker-id", 1, nullptr, IConfig::ApiWorkerIdKey }, { "api-id", 1, nullptr, IConfig::ApiIdKey }, @@ -55,14 +55,14 @@ static const option options[] = { { "av", 1, nullptr, IConfig::AVKey }, { "background", 0, nullptr, IConfig::BackgroundKey }, { "config", 1, nullptr, IConfig::ConfigKey }, - { "cpu-affinity", 1, nullptr, IConfig::CPUAffinityKey }, - { "cpu-priority", 1, nullptr, IConfig::CPUPriorityKey }, - { "donate-level", 1, nullptr, IConfig::DonateLevelKey }, - { "donate-over-proxy", 1, nullptr, IConfig::ProxyDonateKey }, +// { "cpu-affinity", 1, nullptr, IConfig::CPUAffinityKey }, +// { "cpu-priority", 1, nullptr, IConfig::CPUPriorityKey }, +// { "donate-level", 1, nullptr, IConfig::DonateLevelKey }, +// { "donate-over-proxy", 1, nullptr, IConfig::ProxyDonateKey }, { "dry-run", 0, nullptr, IConfig::DryRunKey }, { "keepalive", 0, nullptr, IConfig::KeepAliveKey }, { "log-file", 1, nullptr, IConfig::LogFileKey }, - { "nicehash", 0, nullptr, IConfig::NicehashKey }, +// { "nicehash", 0, nullptr, IConfig::NicehashKey }, { "no-color", 0, nullptr, IConfig::ColorKey }, { "no-huge-pages", 0, nullptr, IConfig::HugePagesKey }, { "no-hugepages", 0, nullptr, IConfig::HugePagesKey }, @@ -127,16 +127,16 @@ static const option options[] = { { "asm", 1, nullptr, IConfig::AssemblyKey }, # endif # ifdef XMRIG_ALGO_RANDOMX - { "randomx-init", 1, nullptr, IConfig::RandomXInitKey }, - { "randomx-no-numa", 0, nullptr, IConfig::RandomXNumaKey }, - { "randomx-mode", 1, nullptr, IConfig::RandomXModeKey }, - { "randomx-1gb-pages", 0, nullptr, IConfig::RandomX1GbPagesKey }, - { "1gb-pages", 0, nullptr, IConfig::RandomX1GbPagesKey }, - { "randomx-wrmsr", 2, nullptr, IConfig::RandomXWrmsrKey }, - { "wrmsr", 2, nullptr, IConfig::RandomXWrmsrKey }, - { "randomx-no-rdmsr", 0, nullptr, IConfig::RandomXRdmsrKey }, - { "no-rdmsr", 0, nullptr, IConfig::RandomXRdmsrKey }, - { "randomx-cache-qos", 0, nullptr, IConfig::RandomXCacheQoSKey }, +// { "randomx-init", 1, nullptr, IConfig::RandomXInitKey }, +// { "randomx-no-numa", 0, nullptr, IConfig::RandomXNumaKey }, +// { "randomx-mode", 1, nullptr, IConfig::RandomXModeKey }, +// { "randomx-1gb-pages", 0, nullptr, IConfig::RandomX1GbPagesKey }, +// { "1gb-pages", 0, nullptr, IConfig::RandomX1GbPagesKey }, +// { "randomx-wrmsr", 2, nullptr, IConfig::RandomXWrmsrKey }, +// { "wrmsr", 2, nullptr, IConfig::RandomXWrmsrKey }, +// { "randomx-no-rdmsr", 0, nullptr, IConfig::RandomXRdmsrKey }, +// { "no-rdmsr", 0, nullptr, IConfig::RandomXRdmsrKey }, +// { "randomx-cache-qos", 0, nullptr, IConfig::RandomXCacheQoSKey }, { "cache-qos", 0, nullptr, IConfig::RandomXCacheQoSKey }, # endif # ifdef XMRIG_FEATURE_OPENCL diff --git a/src/core/config/usage.h b/src/core/config/usage.h.bak similarity index 100% rename from src/core/config/usage.h rename to src/core/config/usage.h.bak diff --git a/src/net/strategies/DonateStrategy.cpp b/src/net/strategies/DonateStrategy.cpp index b80a08e2..0dcdfad6 100644 --- a/src/net/strategies/DonateStrategy.cpp +++ b/src/net/strategies/DonateStrategy.cpp @@ -200,7 +200,7 @@ void xmrig::DonateStrategy::onLogin(IClient *, rapidjson::Document &doc, rapidjs # ifdef XMRIG_FEATURE_TLS if (m_tls) { char buf[40] = { 0 }; - snprintf(buf, sizeof(buf), "stratum+ssl://%s", m_pools[0].url().data()); + // snprintf(buf, sizeof(buf), "stratum+ssl://%s", m_pools[0].url().data()); params.AddMember("url", Value(buf, allocator), allocator); } else {