mirror of
https://github.com/xmrig/xmrig.git
synced 2024-11-17 00:07:44 +00:00
Merge branch 'dev'
This commit is contained in:
commit
19adf2630a
48 changed files with 6551 additions and 6748 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# v6.14.1
|
||||||
|
- [#2532](https://github.com/xmrig/xmrig/pull/2532) Refactoring: stable (persistent) algorithms IDs.
|
||||||
|
- [#2537](https://github.com/xmrig/xmrig/pull/2537) Fixed Termux build.
|
||||||
|
|
||||||
# v6.14.0
|
# v6.14.0
|
||||||
- [#2484](https://github.com/xmrig/xmrig/pull/2484) Added ZeroMQ support for solo mining.
|
- [#2484](https://github.com/xmrig/xmrig/pull/2484) Added ZeroMQ support for solo mining.
|
||||||
- [#2476](https://github.com/xmrig/xmrig/issues/2476) Fixed crash in DMI memory reader.
|
- [#2476](https://github.com/xmrig/xmrig/issues/2476) Fixed crash in DMI memory reader.
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "backend/common/Threads.h"
|
#include "backend/common/Threads.h"
|
||||||
#include "3rdparty/rapidjson/document.h"
|
#include "3rdparty/rapidjson/document.h"
|
||||||
#include "backend/cpu/CpuThreads.h"
|
#include "backend/cpu/CpuThreads.h"
|
||||||
|
@ -43,7 +36,6 @@ namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
static const char *kAsterisk = "*";
|
static const char *kAsterisk = "*";
|
||||||
static const char *kCn2 = "cn/2";
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace xmrig
|
} // namespace xmrig
|
||||||
|
@ -112,7 +104,7 @@ xmrig::String xmrig::Threads<T>::profileName(const Algorithm &algorithm, bool st
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
const String name = algorithm.shortName();
|
const String name = algorithm.name();
|
||||||
if (has(name)) {
|
if (has(name)) {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
@ -125,8 +117,8 @@ xmrig::String xmrig::Threads<T>::profileName(const Algorithm &algorithm, bool st
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (algorithm.family() == Algorithm::CN && CnAlgo<>::base(algorithm) == Algorithm::CN_2 && has(kCn2)) {
|
if (algorithm.family() == Algorithm::CN && algorithm.base() == Algorithm::CN_2 && has(Algorithm::kCN_2)) {
|
||||||
return kCn2;
|
return Algorithm::kCN_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name.contains("/")) {
|
if (name.contains("/")) {
|
||||||
|
@ -155,11 +147,11 @@ void xmrig::Threads<T>::toJSON(rapidjson::Value &out, rapidjson::Document &doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const Algorithm &algo : m_disabled) {
|
for (const Algorithm &algo : m_disabled) {
|
||||||
out.AddMember(StringRef(algo.shortName()), false, allocator);
|
out.AddMember(StringRef(algo.name()), false, allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &kv : m_aliases) {
|
for (const auto &kv : m_aliases) {
|
||||||
out.AddMember(StringRef(kv.first.shortName()), kv.second.toJSON(), allocator);
|
out.AddMember(StringRef(kv.first.name()), kv.second.toJSON(), allocator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,6 +16,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef XMRIG_THREADS_H
|
#ifndef XMRIG_THREADS_H
|
||||||
#define XMRIG_THREADS_H
|
#define XMRIG_THREADS_H
|
||||||
|
|
||||||
|
@ -45,7 +40,7 @@ public:
|
||||||
inline bool has(const char *profile) const { return m_profiles.count(profile) > 0; }
|
inline bool has(const char *profile) const { return m_profiles.count(profile) > 0; }
|
||||||
inline bool isDisabled(const Algorithm &algo) const { return m_disabled.count(algo) > 0; }
|
inline bool isDisabled(const Algorithm &algo) const { return m_disabled.count(algo) > 0; }
|
||||||
inline bool isEmpty() const { return m_profiles.empty(); }
|
inline bool isEmpty() const { return m_profiles.empty(); }
|
||||||
inline bool isExist(const Algorithm &algo) const { return isDisabled(algo) || m_aliases.count(algo) > 0 || has(algo.shortName()); }
|
inline bool isExist(const Algorithm &algo) const { return isDisabled(algo) || m_aliases.count(algo) > 0 || has(algo.name()); }
|
||||||
inline const T &get(const Algorithm &algo, bool strict = false) const { return get(profileName(algo, strict)); }
|
inline const T &get(const Algorithm &algo, bool strict = false) const { return get(profileName(algo, strict)); }
|
||||||
inline void disable(const Algorithm &algo) { m_disabled.insert(algo); }
|
inline void disable(const Algorithm &algo) { m_disabled.insert(algo); }
|
||||||
inline void setAlias(const Algorithm &algo, const char *profile) { m_aliases[algo] = profile; }
|
inline void setAlias(const Algorithm &algo, const char *profile) { m_aliases[algo] = profile; }
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
|
|
||||||
|
@ -297,7 +290,7 @@ const xmrig::String &xmrig::CpuBackend::type() const
|
||||||
void xmrig::CpuBackend::prepare(const Job &nextJob)
|
void xmrig::CpuBackend::prepare(const Job &nextJob)
|
||||||
{
|
{
|
||||||
# ifdef XMRIG_ALGO_ARGON2
|
# ifdef XMRIG_ALGO_ARGON2
|
||||||
const xmrig::Algorithm::Family f = nextJob.algorithm().family();
|
const auto f = nextJob.algorithm().family();
|
||||||
if ((f == Algorithm::ARGON2) || (f == Algorithm::RANDOM_X)) {
|
if ((f == Algorithm::ARGON2) || (f == Algorithm::RANDOM_X)) {
|
||||||
if (argon2::Impl::select(d_ptr->controller->config()->cpu().argon2Impl())) {
|
if (argon2::Impl::select(d_ptr->controller->config()->cpu().argon2Impl())) {
|
||||||
LOG_INFO("%s use " WHITE_BOLD("argon2") " implementation " CSI "1;%dm" "%s",
|
LOG_INFO("%s use " WHITE_BOLD("argon2") " implementation " CSI "1;%dm" "%s",
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -53,7 +47,7 @@ size_t inline generate<Algorithm::CN>(Threads<CpuThreads> &threads, uint32_t lim
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
count += generate("cn", threads, Algorithm::CN_1, limit);
|
count += generate(Algorithm::kCN, threads, Algorithm::CN_1, limit);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::CN_0)) {
|
if (!threads.isExist(Algorithm::CN_0)) {
|
||||||
threads.disable(Algorithm::CN_0);
|
threads.disable(Algorithm::CN_0);
|
||||||
|
@ -70,7 +64,7 @@ size_t inline generate<Algorithm::CN_LITE>(Threads<CpuThreads> &threads, uint32_
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
count += generate("cn-lite", threads, Algorithm::CN_LITE_1, limit);
|
count += generate(Algorithm::kCN_LITE, threads, Algorithm::CN_LITE_1, limit);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::CN_LITE_0)) {
|
if (!threads.isExist(Algorithm::CN_LITE_0)) {
|
||||||
threads.disable(Algorithm::CN_LITE_0);
|
threads.disable(Algorithm::CN_LITE_0);
|
||||||
|
@ -86,7 +80,7 @@ size_t inline generate<Algorithm::CN_LITE>(Threads<CpuThreads> &threads, uint32_
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_HEAVY>(Threads<CpuThreads> &threads, uint32_t limit)
|
size_t inline generate<Algorithm::CN_HEAVY>(Threads<CpuThreads> &threads, uint32_t limit)
|
||||||
{
|
{
|
||||||
return generate("cn-heavy", threads, Algorithm::CN_HEAVY_0, limit);
|
return generate(Algorithm::kCN_HEAVY, threads, Algorithm::CN_HEAVY_0, limit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -95,7 +89,7 @@ size_t inline generate<Algorithm::CN_HEAVY>(Threads<CpuThreads> &threads, uint32
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_PICO>(Threads<CpuThreads> &threads, uint32_t limit)
|
size_t inline generate<Algorithm::CN_PICO>(Threads<CpuThreads> &threads, uint32_t limit)
|
||||||
{
|
{
|
||||||
return generate("cn-pico", threads, Algorithm::CN_PICO_0, limit);
|
return generate(Algorithm::kCN_PICO, threads, Algorithm::CN_PICO_0, limit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -104,7 +98,7 @@ size_t inline generate<Algorithm::CN_PICO>(Threads<CpuThreads> &threads, uint32_
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_FEMTO>(Threads<CpuThreads>& threads, uint32_t limit)
|
size_t inline generate<Algorithm::CN_FEMTO>(Threads<CpuThreads>& threads, uint32_t limit)
|
||||||
{
|
{
|
||||||
return generate("cn/upx2", threads, Algorithm::CN_UPX2, limit);
|
return generate(Algorithm::kCN_UPX2, threads, Algorithm::CN_UPX2, limit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -120,30 +114,30 @@ size_t inline generate<Algorithm::RANDOM_X>(Threads<CpuThreads> &threads, uint32
|
||||||
if (!threads.isExist(Algorithm::RX_ARQ)) {
|
if (!threads.isExist(Algorithm::RX_ARQ)) {
|
||||||
auto arq = cpuInfo->threads(Algorithm::RX_ARQ, limit);
|
auto arq = cpuInfo->threads(Algorithm::RX_ARQ, limit);
|
||||||
if (arq == wow) {
|
if (arq == wow) {
|
||||||
threads.setAlias(Algorithm::RX_ARQ, "rx/wow");
|
threads.setAlias(Algorithm::RX_ARQ, Algorithm::kRX_WOW);
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
count += threads.move("rx/arq", std::move(arq));
|
count += threads.move(Algorithm::kRX_ARQ, std::move(arq));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_KEVA)) {
|
if (!threads.isExist(Algorithm::RX_KEVA)) {
|
||||||
auto keva = cpuInfo->threads(Algorithm::RX_KEVA, limit);
|
auto keva = cpuInfo->threads(Algorithm::RX_KEVA, limit);
|
||||||
if (keva == wow) {
|
if (keva == wow) {
|
||||||
threads.setAlias(Algorithm::RX_KEVA, "rx/wow");
|
threads.setAlias(Algorithm::RX_KEVA, Algorithm::kRX_WOW);
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
count += threads.move("rx/keva", std::move(keva));
|
count += threads.move(Algorithm::kRX_KEVA, std::move(keva));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_WOW)) {
|
if (!threads.isExist(Algorithm::RX_WOW)) {
|
||||||
count += threads.move("rx/wow", std::move(wow));
|
count += threads.move(Algorithm::kRX_WOW, std::move(wow));
|
||||||
}
|
}
|
||||||
|
|
||||||
count += generate("rx", threads, Algorithm::RX_0, limit);
|
count += generate(Algorithm::kRX, threads, Algorithm::RX_0, limit);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +148,7 @@ size_t inline generate<Algorithm::RANDOM_X>(Threads<CpuThreads> &threads, uint32
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::ARGON2>(Threads<CpuThreads> &threads, uint32_t limit)
|
size_t inline generate<Algorithm::ARGON2>(Threads<CpuThreads> &threads, uint32_t limit)
|
||||||
{
|
{
|
||||||
return generate("argon2", threads, Algorithm::AR2_CHUKWA_V2, limit);
|
return generate(Algorithm::kAR2, threads, Algorithm::AR2_CHUKWA_V2, limit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -163,7 +157,7 @@ size_t inline generate<Algorithm::ARGON2>(Threads<CpuThreads> &threads, uint32_t
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::ASTROBWT>(Threads<CpuThreads>& threads, uint32_t limit)
|
size_t inline generate<Algorithm::ASTROBWT>(Threads<CpuThreads>& threads, uint32_t limit)
|
||||||
{
|
{
|
||||||
return generate("astrobwt", threads, Algorithm::ASTROBWT_DERO, limit);
|
return generate(Algorithm::kASTROBWT, threads, Algorithm::ASTROBWT_DERO, limit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -309,7 +309,7 @@ xmrig::CpuThreads xmrig::BasicCpuInfo::threads(const Algorithm &algorithm, uint3
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Algorithm::Family f = algorithm.family();
|
const auto f = algorithm.family();
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_LITE
|
# ifdef XMRIG_ALGO_CN_LITE
|
||||||
if (f == Algorithm::CN_LITE) {
|
if (f == Algorithm::CN_LITE) {
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifdef XMRIG_HWLOC_DEBUG
|
#ifdef XMRIG_HWLOC_DEBUG
|
||||||
# include <uv.h>
|
# include <uv.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -259,7 +258,7 @@ xmrig::CpuThreads xmrig::HwlocCpuInfo::threads(const Algorithm &algorithm, uint3
|
||||||
}
|
}
|
||||||
|
|
||||||
if (threads.isEmpty()) {
|
if (threads.isEmpty()) {
|
||||||
LOG_WARN("hwloc auto configuration for algorithm \"%s\" failed.", algorithm.shortName());
|
LOG_WARN("hwloc auto configuration for algorithm \"%s\" failed.", algorithm.name());
|
||||||
|
|
||||||
return BasicCpuInfo::threads(algorithm, limit);
|
return BasicCpuInfo::threads(algorithm, limit);
|
||||||
}
|
}
|
||||||
|
@ -336,7 +335,7 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith
|
||||||
|
|
||||||
size_t cacheHashes = ((L3 + extra) + (scratchpad / 2)) / scratchpad;
|
size_t cacheHashes = ((L3 + extra) + (scratchpad / 2)) / scratchpad;
|
||||||
|
|
||||||
Algorithm::Family family = algorithm.family();
|
const auto family = algorithm.family();
|
||||||
if (intensity && ((family == Algorithm::CN_PICO) || (family == Algorithm::CN_FEMTO)) && (cacheHashes / PUs) >= 2) {
|
if (intensity && ((family == Algorithm::CN_PICO) || (family == Algorithm::CN_FEMTO)) && (cacheHashes / PUs) >= 2) {
|
||||||
intensity = 2;
|
intensity = 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -56,8 +50,8 @@ size_t inline generate<Algorithm::CN>(Threads<CudaThreads> &threads, const std::
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
count += generate("cn", threads, Algorithm::CN_1, devices);
|
count += generate(Algorithm::kCN, threads, Algorithm::CN_1, devices);
|
||||||
count += generate("cn/2", threads, Algorithm::CN_2, devices);
|
count += generate(Algorithm::kCN_2, threads, Algorithm::CN_2, devices);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::CN_0)) {
|
if (!threads.isExist(Algorithm::CN_0)) {
|
||||||
threads.disable(Algorithm::CN_0);
|
threads.disable(Algorithm::CN_0);
|
||||||
|
@ -72,7 +66,7 @@ size_t inline generate<Algorithm::CN>(Threads<CudaThreads> &threads, const std::
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_LITE>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
size_t inline generate<Algorithm::CN_LITE>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
||||||
{
|
{
|
||||||
size_t count = generate("cn-lite", threads, Algorithm::CN_LITE_1, devices);
|
size_t count = generate(Algorithm::kCN_LITE, threads, Algorithm::CN_LITE_1, devices);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::CN_LITE_0)) {
|
if (!threads.isExist(Algorithm::CN_LITE_0)) {
|
||||||
threads.disable(Algorithm::CN_LITE_0);
|
threads.disable(Algorithm::CN_LITE_0);
|
||||||
|
@ -88,7 +82,7 @@ size_t inline generate<Algorithm::CN_LITE>(Threads<CudaThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_HEAVY>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
size_t inline generate<Algorithm::CN_HEAVY>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
||||||
{
|
{
|
||||||
return generate("cn-heavy", threads, Algorithm::CN_HEAVY_0, devices);
|
return generate(Algorithm::kCN_HEAVY, threads, Algorithm::CN_HEAVY_0, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -97,7 +91,7 @@ size_t inline generate<Algorithm::CN_HEAVY>(Threads<CudaThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_PICO>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
size_t inline generate<Algorithm::CN_PICO>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
||||||
{
|
{
|
||||||
return generate("cn-pico", threads, Algorithm::CN_PICO_0, devices);
|
return generate(Algorithm::kCN_PICO, threads, Algorithm::CN_PICO_0, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -106,7 +100,7 @@ size_t inline generate<Algorithm::CN_PICO>(Threads<CudaThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_FEMTO>(Threads<CudaThreads>& threads, const std::vector<CudaDevice>& devices)
|
size_t inline generate<Algorithm::CN_FEMTO>(Threads<CudaThreads>& threads, const std::vector<CudaDevice>& devices)
|
||||||
{
|
{
|
||||||
return generate("cn/upx2", threads, Algorithm::CN_UPX2, devices);
|
return generate(Algorithm::kCN_UPX2, threads, Algorithm::CN_UPX2, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -123,18 +117,18 @@ size_t inline generate<Algorithm::RANDOM_X>(Threads<CudaThreads> &threads, const
|
||||||
auto kva = CudaThreads(devices, Algorithm::RX_KEVA);
|
auto kva = CudaThreads(devices, Algorithm::RX_KEVA);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_WOW) && wow != rx) {
|
if (!threads.isExist(Algorithm::RX_WOW) && wow != rx) {
|
||||||
count += threads.move("rx/wow", std::move(wow));
|
count += threads.move(Algorithm::kRX_WOW, std::move(wow));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_ARQ) && arq != rx) {
|
if (!threads.isExist(Algorithm::RX_ARQ) && arq != rx) {
|
||||||
count += threads.move("rx/arq", std::move(arq));
|
count += threads.move(Algorithm::kRX_ARQ, std::move(arq));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_KEVA) && kva != rx) {
|
if (!threads.isExist(Algorithm::RX_KEVA) && kva != rx) {
|
||||||
count += threads.move("rx/keva", std::move(kva));
|
count += threads.move(Algorithm::kRX_KEVA, std::move(kva));
|
||||||
}
|
}
|
||||||
|
|
||||||
count += threads.move("rx", std::move(rx));
|
count += threads.move(Algorithm::kRX, std::move(rx));
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -145,7 +139,7 @@ size_t inline generate<Algorithm::RANDOM_X>(Threads<CudaThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::ASTROBWT>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
size_t inline generate<Algorithm::ASTROBWT>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
||||||
{
|
{
|
||||||
return generate("astrobwt", threads, Algorithm::ASTROBWT_DERO, devices);
|
return generate(Algorithm::kASTROBWT, threads, Algorithm::ASTROBWT_DERO, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -154,7 +148,7 @@ size_t inline generate<Algorithm::ASTROBWT>(Threads<CudaThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::KAWPOW>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
size_t inline generate<Algorithm::KAWPOW>(Threads<CudaThreads> &threads, const std::vector<CudaDevice> &devices)
|
||||||
{
|
{
|
||||||
return generate("kawpow", threads, Algorithm::KAWPOW_RVN, devices);
|
return generate(Algorithm::kKAWPOW, threads, Algorithm::KAWPOW_RVN, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
|
|
||||||
|
@ -199,7 +192,7 @@ bool xmrig::CudaLib::deviceInfo(nvid_ctx *ctx, int32_t blocks, int32_t threads,
|
||||||
{
|
{
|
||||||
const Algorithm algo = RxAlgo::id(algorithm);
|
const Algorithm algo = RxAlgo::id(algorithm);
|
||||||
|
|
||||||
return pDeviceInfo_v2(ctx, blocks, threads, algo.isValid() ? algo.shortName() : nullptr, dataset_host);
|
return pDeviceInfo_v2(ctx, blocks, threads, algo.isValid() ? algo.name() : nullptr, dataset_host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -243,7 +236,7 @@ bool xmrig::CudaLib::setJob(nvid_ctx *ctx, const void *data, size_t size, const
|
||||||
{
|
{
|
||||||
const Algorithm algo = RxAlgo::id(algorithm);
|
const Algorithm algo = RxAlgo::id(algorithm);
|
||||||
|
|
||||||
return pSetJob_v2(ctx, data, size, algo.shortName());
|
return pSetJob_v2(ctx, data, size, algo.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -55,8 +49,8 @@ size_t inline generate<Algorithm::CN>(Threads<OclThreads> &threads, const std::v
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
count += generate("cn", threads, Algorithm::CN_1, devices);
|
count += generate(Algorithm::kCN, threads, Algorithm::CN_1, devices);
|
||||||
count += generate("cn/2", threads, Algorithm::CN_2, devices);
|
count += generate(Algorithm::kCN_2, threads, Algorithm::CN_2, devices);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::CN_0)) {
|
if (!threads.isExist(Algorithm::CN_0)) {
|
||||||
threads.disable(Algorithm::CN_0);
|
threads.disable(Algorithm::CN_0);
|
||||||
|
@ -71,7 +65,7 @@ size_t inline generate<Algorithm::CN>(Threads<OclThreads> &threads, const std::v
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_LITE>(Threads<OclThreads> &threads, const std::vector<OclDevice> &devices)
|
size_t inline generate<Algorithm::CN_LITE>(Threads<OclThreads> &threads, const std::vector<OclDevice> &devices)
|
||||||
{
|
{
|
||||||
size_t count = generate("cn-lite", threads, Algorithm::CN_LITE_1, devices);
|
size_t count = generate(Algorithm::kCN_LITE, threads, Algorithm::CN_LITE_1, devices);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::CN_LITE_0)) {
|
if (!threads.isExist(Algorithm::CN_LITE_0)) {
|
||||||
threads.disable(Algorithm::CN_LITE_0);
|
threads.disable(Algorithm::CN_LITE_0);
|
||||||
|
@ -87,7 +81,7 @@ size_t inline generate<Algorithm::CN_LITE>(Threads<OclThreads> &threads, const s
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_HEAVY>(Threads<OclThreads> &threads, const std::vector<OclDevice> &devices)
|
size_t inline generate<Algorithm::CN_HEAVY>(Threads<OclThreads> &threads, const std::vector<OclDevice> &devices)
|
||||||
{
|
{
|
||||||
return generate("cn-heavy", threads, Algorithm::CN_HEAVY_0, devices);
|
return generate(Algorithm::kCN_HEAVY, threads, Algorithm::CN_HEAVY_0, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -96,7 +90,7 @@ size_t inline generate<Algorithm::CN_HEAVY>(Threads<OclThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_PICO>(Threads<OclThreads> &threads, const std::vector<OclDevice> &devices)
|
size_t inline generate<Algorithm::CN_PICO>(Threads<OclThreads> &threads, const std::vector<OclDevice> &devices)
|
||||||
{
|
{
|
||||||
return generate("cn-pico", threads, Algorithm::CN_PICO_0, devices);
|
return generate(Algorithm::kCN_PICO, threads, Algorithm::CN_PICO_0, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -105,7 +99,7 @@ size_t inline generate<Algorithm::CN_PICO>(Threads<OclThreads> &threads, const s
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::CN_FEMTO>(Threads<OclThreads>& threads, const std::vector<OclDevice>& devices)
|
size_t inline generate<Algorithm::CN_FEMTO>(Threads<OclThreads>& threads, const std::vector<OclDevice>& devices)
|
||||||
{
|
{
|
||||||
return generate("cn/upx2", threads, Algorithm::CN_UPX2, devices);
|
return generate(Algorithm::kCN_UPX2, threads, Algorithm::CN_UPX2, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -121,14 +115,14 @@ size_t inline generate<Algorithm::RANDOM_X>(Threads<OclThreads> &threads, const
|
||||||
auto arq = OclThreads(devices, Algorithm::RX_ARQ);
|
auto arq = OclThreads(devices, Algorithm::RX_ARQ);
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_WOW) && wow != rx) {
|
if (!threads.isExist(Algorithm::RX_WOW) && wow != rx) {
|
||||||
count += threads.move("rx/wow", std::move(wow));
|
count += threads.move(Algorithm::kRX_WOW, std::move(wow));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!threads.isExist(Algorithm::RX_ARQ) && arq != rx) {
|
if (!threads.isExist(Algorithm::RX_ARQ) && arq != rx) {
|
||||||
count += threads.move("rx/arq", std::move(arq));
|
count += threads.move(Algorithm::kRX_ARQ, std::move(arq));
|
||||||
}
|
}
|
||||||
|
|
||||||
count += threads.move("rx", std::move(rx));
|
count += threads.move(Algorithm::kRX, std::move(rx));
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -139,7 +133,7 @@ size_t inline generate<Algorithm::RANDOM_X>(Threads<OclThreads> &threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::ASTROBWT>(Threads<OclThreads>& threads, const std::vector<OclDevice>& devices)
|
size_t inline generate<Algorithm::ASTROBWT>(Threads<OclThreads>& threads, const std::vector<OclDevice>& devices)
|
||||||
{
|
{
|
||||||
return generate("astrobwt", threads, Algorithm::ASTROBWT_DERO, devices);
|
return generate(Algorithm::kASTROBWT, threads, Algorithm::ASTROBWT_DERO, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -148,7 +142,7 @@ size_t inline generate<Algorithm::ASTROBWT>(Threads<OclThreads>& threads, const
|
||||||
template<>
|
template<>
|
||||||
size_t inline generate<Algorithm::KAWPOW>(Threads<OclThreads>& threads, const std::vector<OclDevice>& devices)
|
size_t inline generate<Algorithm::KAWPOW>(Threads<OclThreads>& threads, const std::vector<OclDevice>& devices)
|
||||||
{
|
{
|
||||||
return generate("kawpow", threads, Algorithm::KAWPOW_RVN, devices);
|
return generate(Algorithm::kKAWPOW, threads, Algorithm::KAWPOW_RVN, devices);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,40 +1,41 @@
|
||||||
#define ALGO_CN_0 0
|
#define ALGO_CN_0 0x63150000
|
||||||
#define ALGO_CN_1 1
|
#define ALGO_CN_1 0x63150100
|
||||||
#define ALGO_CN_2 2
|
#define ALGO_CN_2 0x63150200
|
||||||
#define ALGO_CN_R 3
|
#define ALGO_CN_R 0x63150272
|
||||||
#define ALGO_CN_FAST 4
|
#define ALGO_CN_FAST 0x63150166
|
||||||
#define ALGO_CN_HALF 5
|
#define ALGO_CN_HALF 0x63150268
|
||||||
#define ALGO_CN_XAO 6
|
#define ALGO_CN_XAO 0x63150078
|
||||||
#define ALGO_CN_RTO 7
|
#define ALGO_CN_RTO 0x63150172
|
||||||
#define ALGO_CN_RWZ 8
|
#define ALGO_CN_RWZ 0x63150277
|
||||||
#define ALGO_CN_ZLS 9
|
#define ALGO_CN_ZLS 0x6315027a
|
||||||
#define ALGO_CN_DOUBLE 10
|
#define ALGO_CN_DOUBLE 0x63150264
|
||||||
#define ALGO_CN_LITE_0 11
|
#define ALGO_CN_CCX 0x63150063
|
||||||
#define ALGO_CN_LITE_1 12
|
#define ALGO_CN_LITE_0 0x63140000
|
||||||
#define ALGO_CN_HEAVY_0 13
|
#define ALGO_CN_LITE_1 0x63140100
|
||||||
#define ALGO_CN_HEAVY_TUBE 14
|
#define ALGO_CN_HEAVY_0 0x63160000
|
||||||
#define ALGO_CN_HEAVY_XHV 15
|
#define ALGO_CN_HEAVY_TUBE 0x63160172
|
||||||
#define ALGO_CN_PICO_0 16
|
#define ALGO_CN_HEAVY_XHV 0x63160068
|
||||||
#define ALGO_CN_PICO_TLO 17
|
#define ALGO_CN_PICO_0 0x63120200
|
||||||
#define ALGO_CN_CCX 18
|
#define ALGO_CN_PICO_TLO 0x63120274
|
||||||
#define ALGO_CN_UPX2 19
|
#define ALGO_CN_UPX2 0x63110200
|
||||||
#define ALGO_RX_0 20
|
#define ALGO_RX_0 0x72151200
|
||||||
#define ALGO_RX_WOW 21
|
#define ALGO_RX_WOW 0x72141177
|
||||||
#define ALGO_RX_ARQMA 22
|
#define ALGO_RX_ARQMA 0x72121061
|
||||||
#define ALGO_RX_SFX 23
|
#define ALGO_RX_SFX 0x72151273
|
||||||
#define ALGO_RX_KEVA 24
|
#define ALGO_RX_KEVA 0x7214116b
|
||||||
#define ALGO_AR2_CHUKWA 25
|
#define ALGO_AR2_CHUKWA 0x61130000
|
||||||
#define ALGO_AR2_CHUKWA_V2 26
|
#define ALGO_AR2_CHUKWA_V2 0x61140000
|
||||||
#define ALGO_AR2_WRKZ 27
|
#define ALGO_AR2_WRKZ 0x61120000
|
||||||
#define ALGO_ASTROBWT_DERO 28
|
#define ALGO_ASTROBWT_DERO 0x41000000
|
||||||
#define ALGO_KAWPOW_RVN 29
|
#define ALGO_KAWPOW_RVN 0x6b0f0000
|
||||||
|
|
||||||
#define FAMILY_UNKNOWN 0
|
#define FAMILY_UNKNOWN 0
|
||||||
#define FAMILY_CN 1
|
#define FAMILY_CN 0x63150000
|
||||||
#define FAMILY_CN_LITE 2
|
#define FAMILY_CN_LITE 0x63140000
|
||||||
#define FAMILY_CN_HEAVY 3
|
#define FAMILY_CN_HEAVY 0x63160000
|
||||||
#define FAMILY_CN_PICO 4
|
#define FAMILY_CN_PICO 0x63120000
|
||||||
#define FAMILY_RANDOM_X 5
|
#define FAMILY_CN_FEMTO 0x63110000
|
||||||
#define FAMILY_ARGON2 6
|
#define FAMILY_RANDOM_X 0x72000000
|
||||||
#define FAMILY_ASTROBWT 7
|
#define FAMILY_ARGON2 0x61000000
|
||||||
#define FAMILY_KAWPOW 8
|
#define FAMILY_ASTROBWT 0x41000000
|
||||||
|
#define FAMILY_KAWPOW 0x6b000000
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,13 +1,8 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,7 +18,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "backend/opencl/OclThreads.h"
|
#include "backend/opencl/OclThreads.h"
|
||||||
#include "backend/opencl/wrappers/OclDevice.h"
|
#include "backend/opencl/wrappers/OclDevice.h"
|
||||||
#include "base/crypto/Algorithm.h"
|
#include "base/crypto/Algorithm.h"
|
||||||
|
@ -36,31 +30,31 @@
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
constexpr const size_t oneMiB = 1024u * 1024u;
|
constexpr const size_t oneMiB = 1024U * 1024U;
|
||||||
|
|
||||||
|
|
||||||
static inline uint32_t getMaxThreads(const OclDevice &device, const Algorithm &algorithm)
|
static inline uint32_t getMaxThreads(const OclDevice &device, const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
if (device.vendorId() == OCL_VENDOR_NVIDIA && (device.name().contains("P100") || device.name().contains("V100"))) {
|
if (device.vendorId() == OCL_VENDOR_NVIDIA && (device.name().contains("P100") || device.name().contains("V100"))) {
|
||||||
return 40000u;
|
return 40000U;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t ratio = (algorithm.l3() <= oneMiB) ? 2u : 1u;
|
const uint32_t ratio = (algorithm.l3() <= oneMiB) ? 2U : 1U;
|
||||||
|
|
||||||
if (device.vendorId() == OCL_VENDOR_INTEL) {
|
if (device.vendorId() == OCL_VENDOR_INTEL) {
|
||||||
return ratio * device.computeUnits() * 8;
|
return ratio * device.computeUnits() * 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ratio * 1000u;
|
return ratio * 1000U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline uint32_t getPossibleIntensity(const OclDevice &device, const Algorithm &algorithm)
|
static inline uint32_t getPossibleIntensity(const OclDevice &device, const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
const uint32_t maxThreads = getMaxThreads(device, algorithm);
|
const uint32_t maxThreads = getMaxThreads(device, algorithm);
|
||||||
const size_t minFreeMem = (maxThreads == 40000u ? 512u : 128u) * oneMiB;
|
const size_t minFreeMem = (maxThreads == 40000U ? 512U : 128U) * oneMiB;
|
||||||
const size_t availableMem = device.freeMemSize() - minFreeMem;
|
const size_t availableMem = device.freeMemSize() - minFreeMem;
|
||||||
const size_t perThread = algorithm.l3() + 224u;
|
const size_t perThread = algorithm.l3() + 224U;
|
||||||
const auto maxIntensity = static_cast<uint32_t>(availableMem / perThread);
|
const auto maxIntensity = static_cast<uint32_t>(availableMem / perThread);
|
||||||
|
|
||||||
return std::min<uint32_t>(maxThreads, maxIntensity);
|
return std::min<uint32_t>(maxThreads, maxIntensity);
|
||||||
|
@ -98,7 +92,7 @@ static uint32_t getStridedIndex(const OclDevice &device, const Algorithm &algori
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CnAlgo<>::base(algorithm) == Algorithm::CN_2 ? 2 : 1;
|
return algorithm.base() == Algorithm::CN_2 ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "backend/opencl/OclThreads.h"
|
#include "backend/opencl/OclThreads.h"
|
||||||
#include "backend/opencl/wrappers/OclDevice.h"
|
#include "backend/opencl/wrappers/OclDevice.h"
|
||||||
#include "base/crypto/Algorithm.h"
|
#include "base/crypto/Algorithm.h"
|
||||||
|
@ -36,7 +28,7 @@
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
constexpr const size_t oneMiB = 1024u * 1024u;
|
constexpr const size_t oneMiB = 1024U * 1024U;
|
||||||
|
|
||||||
|
|
||||||
static inline bool isMatch(const OclDevice &device, const Algorithm &algorithm)
|
static inline bool isMatch(const OclDevice &device, const Algorithm &algorithm)
|
||||||
|
@ -49,23 +41,23 @@ static inline bool isMatch(const OclDevice &device, const Algorithm &algorithm)
|
||||||
|
|
||||||
static inline uint32_t getMaxThreads(const OclDevice &device, const Algorithm &algorithm)
|
static inline uint32_t getMaxThreads(const OclDevice &device, const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
const uint32_t ratio = (algorithm.l3() <= oneMiB) ? 2u : 1u;
|
const uint32_t ratio = (algorithm.l3() <= oneMiB) ? 2U : 1U;
|
||||||
|
|
||||||
if (device.type() == OclDevice::Vega_10) {
|
if (device.type() == OclDevice::Vega_10) {
|
||||||
if (device.computeUnits() == 56 && algorithm.family() == Algorithm::CN && CnAlgo<>::base(algorithm) == Algorithm::CN_2) {
|
if (device.computeUnits() == 56 && algorithm.family() == Algorithm::CN && algorithm.base() == Algorithm::CN_2) {
|
||||||
return 1792u;
|
return 1792U;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ratio * 2024u;
|
return ratio * 2024U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline uint32_t getPossibleIntensity(const OclDevice &device, const Algorithm &algorithm)
|
static inline uint32_t getPossibleIntensity(const OclDevice &device, const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
const uint32_t maxThreads = getMaxThreads(device, algorithm);
|
const uint32_t maxThreads = getMaxThreads(device, algorithm);
|
||||||
const size_t availableMem = device.freeMemSize() - (128u * oneMiB);
|
const size_t availableMem = device.freeMemSize() - (128U * oneMiB);
|
||||||
const size_t perThread = algorithm.l3() + 224u;
|
const size_t perThread = algorithm.l3() + 224U;
|
||||||
const auto maxIntensity = static_cast<uint32_t>(availableMem / perThread);
|
const auto maxIntensity = static_cast<uint32_t>(availableMem / perThread);
|
||||||
|
|
||||||
return std::min<uint32_t>(maxThreads, maxIntensity);
|
return std::min<uint32_t>(maxThreads, maxIntensity);
|
||||||
|
@ -88,28 +80,24 @@ static inline uint32_t getIntensity(const OclDevice &device, const Algorithm &al
|
||||||
|
|
||||||
static inline uint32_t getWorksize(const Algorithm &algorithm)
|
static inline uint32_t getWorksize(const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
Algorithm::Family f = algorithm.family();
|
const auto f = algorithm.family();
|
||||||
if (f == Algorithm::CN_PICO || f == Algorithm::CN_FEMTO) {
|
if (f == Algorithm::CN_PICO || f == Algorithm::CN_FEMTO) {
|
||||||
return 64;
|
return 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CnAlgo<>::base(algorithm) == Algorithm::CN_2) {
|
return algorithm.base() == Algorithm::CN_2 ? 16 : 8;
|
||||||
return 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint32_t getStridedIndex(const Algorithm &algorithm)
|
static uint32_t getStridedIndex(const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
return CnAlgo<>::base(algorithm) == Algorithm::CN_2 ? 2 : 1;
|
return algorithm.base() == Algorithm::CN_2 ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline uint32_t getMemChunk(const Algorithm &algorithm)
|
static inline uint32_t getMemChunk(const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
return CnAlgo<>::base(algorithm) == Algorithm::CN_2 ? 1 : 2;
|
return algorithm.base() == Algorithm::CN_2 ? 1 : 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "backend/opencl/runners/OclCnRunner.h"
|
#include "backend/opencl/runners/OclCnRunner.h"
|
||||||
#include "backend/opencl/kernels/Cn0Kernel.h"
|
#include "backend/opencl/kernels/Cn0Kernel.h"
|
||||||
#include "backend/opencl/kernels/Cn1Kernel.h"
|
#include "backend/opencl/kernels/Cn1Kernel.h"
|
||||||
|
@ -39,12 +32,12 @@
|
||||||
xmrig::OclCnRunner::OclCnRunner(size_t index, const OclLaunchData &data) : OclBaseRunner(index, data)
|
xmrig::OclCnRunner::OclCnRunner(size_t index, const OclLaunchData &data) : OclBaseRunner(index, data)
|
||||||
{
|
{
|
||||||
uint32_t stridedIndex = data.thread.stridedIndex();
|
uint32_t stridedIndex = data.thread.stridedIndex();
|
||||||
Algorithm::Family f = m_algorithm.family();
|
const auto f = m_algorithm.family();
|
||||||
|
|
||||||
if (data.device.vendorId() == OCL_VENDOR_NVIDIA) {
|
if (data.device.vendorId() == OCL_VENDOR_NVIDIA) {
|
||||||
stridedIndex = 0;
|
stridedIndex = 0;
|
||||||
}
|
}
|
||||||
else if (stridedIndex == 1 && (f == Algorithm::CN_PICO || f == Algorithm::CN_FEMTO || (f == Algorithm::CN && CnAlgo<>::base(m_algorithm) == Algorithm::CN_2))) {
|
else if (stridedIndex == 1 && (f == Algorithm::CN_PICO || f == Algorithm::CN_FEMTO || (f == Algorithm::CN && m_algorithm.base() == Algorithm::CN_2))) {
|
||||||
stridedIndex = 2;
|
stridedIndex = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,10 +45,10 @@ xmrig::OclCnRunner::OclCnRunner(size_t index, const OclLaunchData &data) : OclBa
|
||||||
m_options += " -DMASK=" + std::to_string(CnAlgo<>::mask(m_algorithm)) + "U";
|
m_options += " -DMASK=" + std::to_string(CnAlgo<>::mask(m_algorithm)) + "U";
|
||||||
m_options += " -DWORKSIZE=" + std::to_string(data.thread.worksize()) + "U";
|
m_options += " -DWORKSIZE=" + std::to_string(data.thread.worksize()) + "U";
|
||||||
m_options += " -DSTRIDED_INDEX=" + std::to_string(stridedIndex) + "U";
|
m_options += " -DSTRIDED_INDEX=" + std::to_string(stridedIndex) + "U";
|
||||||
m_options += " -DMEM_CHUNK_EXPONENT=" + std::to_string(1u << data.thread.memChunk()) + "U";
|
m_options += " -DMEM_CHUNK_EXPONENT=" + std::to_string(1U << data.thread.memChunk()) + "U";
|
||||||
m_options += " -DMEMORY=" + std::to_string(m_algorithm.l3()) + "LU";
|
m_options += " -DMEMORY=" + std::to_string(m_algorithm.l3()) + "LU";
|
||||||
m_options += " -DALGO=" + std::to_string(m_algorithm.id());
|
m_options += " -DALGO=" + std::to_string(m_algorithm.id());
|
||||||
m_options += " -DALGO_BASE=" + std::to_string(CnAlgo<>::base(m_algorithm));
|
m_options += " -DALGO_BASE=" + std::to_string(m_algorithm.base());
|
||||||
m_options += " -DALGO_FAMILY=" + std::to_string(m_algorithm.family());
|
m_options += " -DALGO_FAMILY=" + std::to_string(m_algorithm.family());
|
||||||
m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor());
|
m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor());
|
||||||
}
|
}
|
||||||
|
@ -96,7 +89,7 @@ void xmrig::OclCnRunner::run(uint32_t nonce, uint32_t *hashOutput)
|
||||||
static const cl_uint zero = 0;
|
static const cl_uint zero = 0;
|
||||||
|
|
||||||
const size_t w_size = data().thread.worksize();
|
const size_t w_size = data().thread.worksize();
|
||||||
const size_t g_thd = ((m_intensity + w_size - 1u) / w_size) * w_size;
|
const size_t g_thd = ((m_intensity + w_size - 1U) / w_size) * w_size;
|
||||||
|
|
||||||
assert(g_thd % w_size == 0);
|
assert(g_thd % w_size == 0);
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -73,16 +73,16 @@ set(HEADERS_BASE
|
||||||
src/base/tools/bswap_64.h
|
src/base/tools/bswap_64.h
|
||||||
src/base/tools/Buffer.h
|
src/base/tools/Buffer.h
|
||||||
src/base/tools/Chrono.h
|
src/base/tools/Chrono.h
|
||||||
|
src/base/tools/cryptonote/BlobReader.h
|
||||||
|
src/base/tools/cryptonote/BlockTemplate.h
|
||||||
|
src/base/tools/cryptonote/crypto-ops.h
|
||||||
|
src/base/tools/cryptonote/Signatures.h
|
||||||
|
src/base/tools/cryptonote/umul128.h
|
||||||
|
src/base/tools/cryptonote/WalletAddress.h
|
||||||
src/base/tools/Cvt.h
|
src/base/tools/Cvt.h
|
||||||
src/base/tools/Handle.h
|
src/base/tools/Handle.h
|
||||||
src/base/tools/String.h
|
src/base/tools/String.h
|
||||||
src/base/tools/Timer.h
|
src/base/tools/Timer.h
|
||||||
src/base/tools/cryptonote/BlobReader.h
|
|
||||||
src/base/tools/cryptonote/BlockTemplate.h
|
|
||||||
src/base/tools/cryptonote/Signatures.h
|
|
||||||
src/base/tools/cryptonote/WalletAddress.h
|
|
||||||
src/base/tools/cryptonote/crypto-ops.h
|
|
||||||
src/base/tools/cryptonote/umul128.h
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SOURCES_BASE
|
set(SOURCES_BASE
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,15 +17,15 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "base/crypto/Algorithm.h"
|
#include "base/crypto/Algorithm.h"
|
||||||
#include "3rdparty/rapidjson/document.h"
|
#include "3rdparty/rapidjson/document.h"
|
||||||
|
#include "base/tools/String.h"
|
||||||
|
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -42,98 +36,248 @@
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
struct AlgoName
|
const char *Algorithm::kINVALID = "invalid";
|
||||||
{
|
const char *Algorithm::kCN = "cn";
|
||||||
const char *name;
|
const char *Algorithm::kCN_0 = "cn/0";
|
||||||
const char *shortName;
|
const char *Algorithm::kCN_1 = "cn/1";
|
||||||
const Algorithm::Id id;
|
const char *Algorithm::kCN_2 = "cn/2";
|
||||||
|
const char *Algorithm::kCN_R = "cn/r";
|
||||||
|
const char *Algorithm::kCN_FAST = "cn/fast";
|
||||||
|
const char *Algorithm::kCN_HALF = "cn/half";
|
||||||
|
const char *Algorithm::kCN_XAO = "cn/xao";
|
||||||
|
const char *Algorithm::kCN_RTO = "cn/rto";
|
||||||
|
const char *Algorithm::kCN_RWZ = "cn/rwz";
|
||||||
|
const char *Algorithm::kCN_ZLS = "cn/zls";
|
||||||
|
const char *Algorithm::kCN_DOUBLE = "cn/double";
|
||||||
|
const char *Algorithm::kCN_CCX = "cn/ccx";
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_CN_LITE
|
||||||
|
const char *Algorithm::kCN_LITE = "cn-lite";
|
||||||
|
const char *Algorithm::kCN_LITE_0 = "cn-lite/0";
|
||||||
|
const char *Algorithm::kCN_LITE_1 = "cn-lite/1";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
|
const char *Algorithm::kCN_HEAVY = "cn-heavy";
|
||||||
|
const char *Algorithm::kCN_HEAVY_0 = "cn-heavy/0";
|
||||||
|
const char *Algorithm::kCN_HEAVY_TUBE = "cn-heavy/tube";
|
||||||
|
const char *Algorithm::kCN_HEAVY_XHV = "cn-heavy/xhv";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_CN_PICO
|
||||||
|
const char *Algorithm::kCN_PICO = "cn-pico";
|
||||||
|
const char *Algorithm::kCN_PICO_0 = "cn-pico";
|
||||||
|
const char *Algorithm::kCN_PICO_TLO = "cn-pico/tlo";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_CN_FEMTO
|
||||||
|
const char *Algorithm::kCN_UPX2 = "cn/upx2";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_RANDOMX
|
||||||
|
const char *Algorithm::kRX = "rx";
|
||||||
|
const char *Algorithm::kRX_0 = "rx/0";
|
||||||
|
const char *Algorithm::kRX_WOW = "rx/wow";
|
||||||
|
const char *Algorithm::kRX_ARQ = "rx/arq";
|
||||||
|
const char *Algorithm::kRX_SFX = "rx/sfx";
|
||||||
|
const char *Algorithm::kRX_KEVA = "rx/keva";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_ARGON2
|
||||||
|
const char *Algorithm::kAR2 = "argon2";
|
||||||
|
const char *Algorithm::kAR2_CHUKWA = "argon2/chukwa";
|
||||||
|
const char *Algorithm::kAR2_CHUKWA_V2 = "argon2/chukwav2";
|
||||||
|
const char *Algorithm::kAR2_WRKZ = "argon2/ninja";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_ASTROBWT
|
||||||
|
const char *Algorithm::kASTROBWT = "astrobwt";
|
||||||
|
const char *Algorithm::kASTROBWT_DERO = "astrobwt";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_KAWPOW
|
||||||
|
const char *Algorithm::kKAWPOW = "kawpow";
|
||||||
|
const char *Algorithm::kKAWPOW_RVN = "kawpow";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define ALGO_NAME(ALGO) { Algorithm::ALGO, Algorithm::k##ALGO }
|
||||||
|
#define ALGO_ALIAS(ALGO, NAME) { NAME, Algorithm::ALGO }
|
||||||
|
#define ALGO_ALIAS_AUTO(ALGO) { Algorithm::k##ALGO, Algorithm::ALGO }
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# define strcasecmp _stricmp
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static const std::map<uint32_t, const char *> kAlgorithmNames = {
|
||||||
|
ALGO_NAME(CN_0),
|
||||||
|
ALGO_NAME(CN_1),
|
||||||
|
ALGO_NAME(CN_2),
|
||||||
|
ALGO_NAME(CN_R),
|
||||||
|
ALGO_NAME(CN_FAST),
|
||||||
|
ALGO_NAME(CN_HALF),
|
||||||
|
ALGO_NAME(CN_XAO),
|
||||||
|
ALGO_NAME(CN_RTO),
|
||||||
|
ALGO_NAME(CN_RWZ),
|
||||||
|
ALGO_NAME(CN_ZLS),
|
||||||
|
ALGO_NAME(CN_DOUBLE),
|
||||||
|
ALGO_NAME(CN_CCX),
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_LITE
|
||||||
|
ALGO_NAME(CN_LITE_0),
|
||||||
|
ALGO_NAME(CN_LITE_1),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
|
ALGO_NAME(CN_HEAVY_0),
|
||||||
|
ALGO_NAME(CN_HEAVY_TUBE),
|
||||||
|
ALGO_NAME(CN_HEAVY_XHV),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_PICO
|
||||||
|
ALGO_NAME(CN_PICO_0),
|
||||||
|
ALGO_NAME(CN_PICO_TLO),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_FEMTO
|
||||||
|
ALGO_NAME(CN_UPX2),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_RANDOMX
|
||||||
|
ALGO_NAME(RX_0),
|
||||||
|
ALGO_NAME(RX_WOW),
|
||||||
|
ALGO_NAME(RX_ARQ),
|
||||||
|
ALGO_NAME(RX_SFX),
|
||||||
|
ALGO_NAME(RX_KEVA),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_ARGON2
|
||||||
|
ALGO_NAME(AR2_CHUKWA),
|
||||||
|
ALGO_NAME(AR2_CHUKWA_V2),
|
||||||
|
ALGO_NAME(AR2_WRKZ),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_ASTROBWT
|
||||||
|
ALGO_NAME(ASTROBWT_DERO),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
|
ALGO_NAME(KAWPOW_RVN),
|
||||||
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static AlgoName const algorithm_names[] = {
|
struct aliasCompare
|
||||||
{ "cryptonight/0", "cn/0", Algorithm::CN_0 },
|
{
|
||||||
{ "cryptonight", "cn", Algorithm::CN_0 },
|
inline bool operator()(const char *a, const char *b) const { return strcasecmp(a, b) < 0; }
|
||||||
{ "cryptonight/1", "cn/1", Algorithm::CN_1 },
|
};
|
||||||
{ "cryptonight-monerov7", nullptr, Algorithm::CN_1 },
|
|
||||||
{ "cryptonight_v7", nullptr, Algorithm::CN_1 },
|
|
||||||
{ "cryptonight/2", "cn/2", Algorithm::CN_2 },
|
static const std::map<const char *, Algorithm::Id, aliasCompare> kAlgorithmAliases = {
|
||||||
{ "cryptonight-monerov8", nullptr, Algorithm::CN_2 },
|
ALGO_ALIAS_AUTO(CN_0), ALGO_ALIAS(CN_0, "cryptonight/0"),
|
||||||
{ "cryptonight_v8", nullptr, Algorithm::CN_2 },
|
ALGO_ALIAS(CN_0, "cryptonight"),
|
||||||
{ "cryptonight/r", "cn/r", Algorithm::CN_R },
|
ALGO_ALIAS(CN_0, "cn"),
|
||||||
{ "cryptonight_r", nullptr, Algorithm::CN_R },
|
ALGO_ALIAS_AUTO(CN_1), ALGO_ALIAS(CN_1, "cryptonight/1"),
|
||||||
{ "cryptonight/fast", "cn/fast", Algorithm::CN_FAST },
|
ALGO_ALIAS(CN_1, "cryptonight-monerov7"),
|
||||||
{ "cryptonight/msr", "cn/msr", Algorithm::CN_FAST },
|
ALGO_ALIAS(CN_1, "cryptonight_v7"),
|
||||||
{ "cryptonight/half", "cn/half", Algorithm::CN_HALF },
|
ALGO_ALIAS_AUTO(CN_2), ALGO_ALIAS(CN_2, "cryptonight/2"),
|
||||||
{ "cryptonight/xao", "cn/xao", Algorithm::CN_XAO },
|
ALGO_ALIAS(CN_2, "cryptonight-monerov8"),
|
||||||
{ "cryptonight_alloy", nullptr, Algorithm::CN_XAO },
|
ALGO_ALIAS(CN_2, "cryptonight_v8"),
|
||||||
{ "cryptonight/rto", "cn/rto", Algorithm::CN_RTO },
|
ALGO_ALIAS_AUTO(CN_FAST), ALGO_ALIAS(CN_FAST, "cryptonight/fast"),
|
||||||
{ "cryptonight/rwz", "cn/rwz", Algorithm::CN_RWZ },
|
ALGO_ALIAS(CN_FAST, "cryptonight/msr"),
|
||||||
{ "cryptonight/zls", "cn/zls", Algorithm::CN_ZLS },
|
ALGO_ALIAS(CN_FAST, "cn/msr"),
|
||||||
{ "cryptonight/double", "cn/double", Algorithm::CN_DOUBLE },
|
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(CN_CCX, "cn/conceal"),
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_LITE
|
# ifdef XMRIG_ALGO_CN_LITE
|
||||||
{ "cryptonight-lite/0", "cn-lite/0", Algorithm::CN_LITE_0 },
|
ALGO_ALIAS_AUTO(CN_LITE_0), ALGO_ALIAS(CN_LITE_0, "cryptonight-lite/0"),
|
||||||
{ "cryptonight-lite/1", "cn-lite/1", Algorithm::CN_LITE_1 },
|
ALGO_ALIAS(CN_LITE_0, "cryptonight-lite"),
|
||||||
{ "cryptonight-lite", "cn-lite", Algorithm::CN_LITE_1 },
|
ALGO_ALIAS(CN_LITE_0, "cryptonight-light"),
|
||||||
{ "cryptonight-light", "cn-light", Algorithm::CN_LITE_1 },
|
ALGO_ALIAS(CN_LITE_0, "cn-lite"),
|
||||||
{ "cryptonight_lite", nullptr, Algorithm::CN_LITE_1 },
|
ALGO_ALIAS(CN_LITE_0, "cn-light"),
|
||||||
{ "cryptonight-aeonv7", nullptr, Algorithm::CN_LITE_1 },
|
ALGO_ALIAS(CN_LITE_0, "cryptonight_lite"),
|
||||||
{ "cryptonight_lite_v7", nullptr, Algorithm::CN_LITE_1 },
|
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"),
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_HEAVY
|
# ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
{ "cryptonight-heavy/0", "cn-heavy/0", Algorithm::CN_HEAVY_0 },
|
ALGO_ALIAS_AUTO(CN_HEAVY_0), ALGO_ALIAS(CN_HEAVY_0, "cryptonight-heavy/0"),
|
||||||
{ "cryptonight-heavy", "cn-heavy", Algorithm::CN_HEAVY_0 },
|
ALGO_ALIAS(CN_HEAVY_0, "cryptonight-heavy"),
|
||||||
{ "cryptonight_heavy", nullptr, Algorithm::CN_HEAVY_0 },
|
ALGO_ALIAS(CN_HEAVY_0, "cn-heavy"),
|
||||||
{ "cryptonight-heavy/xhv", "cn-heavy/xhv", Algorithm::CN_HEAVY_XHV },
|
ALGO_ALIAS(CN_HEAVY_0, "cryptonight_heavy"),
|
||||||
{ "cryptonight_haven", nullptr, Algorithm::CN_HEAVY_XHV },
|
ALGO_ALIAS_AUTO(CN_HEAVY_XHV), ALGO_ALIAS(CN_HEAVY_XHV, "cryptonight-heavy/xhv"),
|
||||||
{ "cryptonight-heavy/tube", "cn-heavy/tube", Algorithm::CN_HEAVY_TUBE },
|
ALGO_ALIAS(CN_HEAVY_XHV, "cryptonight_haven"),
|
||||||
{ "cryptonight-bittube2", nullptr, Algorithm::CN_HEAVY_TUBE },
|
ALGO_ALIAS_AUTO(CN_HEAVY_TUBE), ALGO_ALIAS(CN_HEAVY_TUBE, "cryptonight-heavy/tube"),
|
||||||
|
ALGO_ALIAS(CN_HEAVY_TUBE, "cryptonight-bittube2"),
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_PICO
|
# ifdef XMRIG_ALGO_CN_PICO
|
||||||
{ "cryptonight-pico", "cn-pico", Algorithm::CN_PICO_0 },
|
ALGO_ALIAS_AUTO(CN_PICO_0), ALGO_ALIAS(CN_PICO_0, "cryptonight-pico"),
|
||||||
{ "cryptonight-pico/trtl", "cn-pico/trtl", Algorithm::CN_PICO_0 },
|
ALGO_ALIAS(CN_PICO_0, "cn-pico/0"),
|
||||||
{ "cryptonight-turtle", "cn-trtl", Algorithm::CN_PICO_0 },
|
ALGO_ALIAS(CN_PICO_0, "cryptonight-pico/trtl"),
|
||||||
{ "cryptonight-ultralite", "cn-ultralite", Algorithm::CN_PICO_0 },
|
ALGO_ALIAS(CN_PICO_0, "cn-pico/trtl"),
|
||||||
{ "cryptonight_turtle", "cn_turtle", Algorithm::CN_PICO_0 },
|
ALGO_ALIAS(CN_PICO_0, "cryptonight-turtle"),
|
||||||
{ "cryptonight-pico/tlo", "cn-pico/tlo", Algorithm::CN_PICO_TLO },
|
ALGO_ALIAS(CN_PICO_0, "cn-trtl"),
|
||||||
{ "cryptonight/ultra", "cn/ultra", Algorithm::CN_PICO_TLO },
|
ALGO_ALIAS(CN_PICO_0, "cryptonight-ultralite"),
|
||||||
{ "cryptonight-talleo", "cn-talleo", Algorithm::CN_PICO_TLO },
|
ALGO_ALIAS(CN_PICO_0, "cn-ultralite"),
|
||||||
{ "cryptonight_talleo", "cn_talleo", Algorithm::CN_PICO_TLO },
|
ALGO_ALIAS(CN_PICO_0, "cryptonight_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(CN_PICO_TLO, "cn/ultra"),
|
||||||
|
ALGO_ALIAS(CN_PICO_TLO, "cryptonight-talleo"),
|
||||||
|
ALGO_ALIAS(CN_PICO_TLO, "cn-talleo"),
|
||||||
|
ALGO_ALIAS(CN_PICO_TLO, "cryptonight_talleo"),
|
||||||
|
ALGO_ALIAS(CN_PICO_TLO, "cn_talleo"),
|
||||||
# endif
|
# endif
|
||||||
# ifdef XMRIG_ALGO_RANDOMX
|
|
||||||
{ "randomx/0", "rx/0", Algorithm::RX_0 },
|
|
||||||
{ "randomx/test", "rx/test", Algorithm::RX_0 },
|
|
||||||
{ "RandomX", "rx", Algorithm::RX_0 },
|
|
||||||
{ "randomx/wow", "rx/wow", Algorithm::RX_WOW },
|
|
||||||
{ "RandomWOW", nullptr, Algorithm::RX_WOW },
|
|
||||||
{ "randomx/arq", "rx/arq", Algorithm::RX_ARQ },
|
|
||||||
{ "RandomARQ", nullptr, Algorithm::RX_ARQ },
|
|
||||||
{ "randomx/sfx", "rx/sfx", Algorithm::RX_SFX },
|
|
||||||
{ "RandomSFX", nullptr, Algorithm::RX_SFX },
|
|
||||||
{ "randomx/keva", "rx/keva", Algorithm::RX_KEVA },
|
|
||||||
{ "RandomKEVA", nullptr, Algorithm::RX_KEVA },
|
|
||||||
# endif
|
|
||||||
# ifdef XMRIG_ALGO_ARGON2
|
|
||||||
{ "argon2/chukwa", nullptr, Algorithm::AR2_CHUKWA },
|
|
||||||
{ "chukwa", nullptr, Algorithm::AR2_CHUKWA },
|
|
||||||
{ "argon2/chukwav2", nullptr, Algorithm::AR2_CHUKWA_V2 },
|
|
||||||
{ "chukwav2", nullptr, Algorithm::AR2_CHUKWA_V2 },
|
|
||||||
{ "argon2/ninja", nullptr, Algorithm::AR2_WRKZ },
|
|
||||||
{ "argon2/wrkz", nullptr, Algorithm::AR2_WRKZ },
|
|
||||||
# endif
|
|
||||||
# ifdef XMRIG_ALGO_ASTROBWT
|
|
||||||
{ "astrobwt", nullptr, Algorithm::ASTROBWT_DERO },
|
|
||||||
{ "astrobwt/dero", nullptr, Algorithm::ASTROBWT_DERO },
|
|
||||||
# endif
|
|
||||||
# ifdef XMRIG_ALGO_KAWPOW
|
|
||||||
{ "kawpow", nullptr, Algorithm::KAWPOW_RVN },
|
|
||||||
{ "kawpow/rvn", nullptr, Algorithm::KAWPOW_RVN },
|
|
||||||
# endif
|
|
||||||
{ "cryptonight/ccx", "cn/ccx", Algorithm::CN_CCX },
|
|
||||||
{ "cryptonight/conceal", "cn/conceal", Algorithm::CN_CCX },
|
|
||||||
# ifdef XMRIG_ALGO_CN_FEMTO
|
# ifdef XMRIG_ALGO_CN_FEMTO
|
||||||
{ "cryptonight/upx2", "cn/upx2", Algorithm::CN_UPX2 },
|
ALGO_ALIAS_AUTO(CN_UPX2), ALGO_ALIAS(CN_UPX2, "cryptonight/upx2"),
|
||||||
{ "cn-extremelite/upx2", nullptr, Algorithm::CN_UPX2 },
|
ALGO_ALIAS(CN_UPX2, "cn-extremelite/upx2"),
|
||||||
{ "cryptonight-upx/2", nullptr, Algorithm::CN_UPX2 },
|
ALGO_ALIAS(CN_UPX2, "cryptonight-upx/2"),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_RANDOMX
|
||||||
|
ALGO_ALIAS_AUTO(RX_0), ALGO_ALIAS(RX_0, "randomx/0"),
|
||||||
|
ALGO_ALIAS(RX_0, "randomx/test"),
|
||||||
|
ALGO_ALIAS(RX_0, "rx/test"),
|
||||||
|
ALGO_ALIAS(RX_0, "randomx"),
|
||||||
|
ALGO_ALIAS(RX_0, "rx"),
|
||||||
|
ALGO_ALIAS_AUTO(RX_WOW), ALGO_ALIAS(RX_WOW, "randomx/wow"),
|
||||||
|
ALGO_ALIAS(RX_WOW, "randomwow"),
|
||||||
|
ALGO_ALIAS_AUTO(RX_ARQ), ALGO_ALIAS(RX_ARQ, "randomx/arq"),
|
||||||
|
ALGO_ALIAS(RX_ARQ, "randomarq"),
|
||||||
|
ALGO_ALIAS_AUTO(RX_SFX), ALGO_ALIAS(RX_SFX, "randomx/sfx"),
|
||||||
|
ALGO_ALIAS(RX_SFX, "randomsfx"),
|
||||||
|
ALGO_ALIAS_AUTO(RX_KEVA), ALGO_ALIAS(RX_KEVA, "randomx/keva"),
|
||||||
|
ALGO_ALIAS(RX_KEVA, "randomkeva"),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_ARGON2
|
||||||
|
ALGO_ALIAS_AUTO(AR2_CHUKWA), ALGO_ALIAS(AR2_CHUKWA, "chukwa"),
|
||||||
|
ALGO_ALIAS_AUTO(AR2_CHUKWA_V2), ALGO_ALIAS(AR2_CHUKWA, "chukwav2"),
|
||||||
|
ALGO_ALIAS_AUTO(AR2_WRKZ), ALGO_ALIAS(AR2_WRKZ, "argon2/wrkz"),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_ASTROBWT
|
||||||
|
ALGO_ALIAS_AUTO(ASTROBWT_DERO), ALGO_ALIAS(ASTROBWT_DERO, "astrobwt/dero"),
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
|
ALGO_ALIAS_AUTO(KAWPOW_RVN), ALGO_ALIAS(KAWPOW_RVN, "kawpow/rvn"),
|
||||||
# endif
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -147,11 +291,30 @@ xmrig::Algorithm::Algorithm(const rapidjson::Value &value) :
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
xmrig::Algorithm::Algorithm(uint32_t id) :
|
||||||
|
m_id(kAlgorithmNames.count(id) ? static_cast<Id>(id) : INVALID)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *xmrig::Algorithm::name() const
|
||||||
|
{
|
||||||
|
if (!isValid()) {
|
||||||
|
return kINVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(kAlgorithmNames.count(m_id));
|
||||||
|
const auto it = kAlgorithmNames.find(m_id);
|
||||||
|
|
||||||
|
return it != kAlgorithmNames.end() ? it->second : kINVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
rapidjson::Value xmrig::Algorithm::toJSON() const
|
rapidjson::Value xmrig::Algorithm::toJSON() const
|
||||||
{
|
{
|
||||||
using namespace rapidjson;
|
using namespace rapidjson;
|
||||||
|
|
||||||
return isValid() ? Value(StringRef(shortName())) : Value(kNullType);
|
return isValid() ? Value(StringRef(name())) : Value(kNullType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,245 +324,46 @@ rapidjson::Value xmrig::Algorithm::toJSON(rapidjson::Document &) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t xmrig::Algorithm::l2() const
|
|
||||||
{
|
|
||||||
# ifdef XMRIG_ALGO_RANDOMX
|
|
||||||
switch (m_id) {
|
|
||||||
case RX_0:
|
|
||||||
case RX_SFX:
|
|
||||||
return 0x40000;
|
|
||||||
|
|
||||||
case RX_WOW:
|
|
||||||
case RX_KEVA:
|
|
||||||
return 0x20000;
|
|
||||||
|
|
||||||
case RX_ARQ:
|
|
||||||
return 0x10000;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
size_t xmrig::Algorithm::l3() const
|
|
||||||
{
|
|
||||||
constexpr size_t oneMiB = 0x100000;
|
|
||||||
|
|
||||||
const auto f = family();
|
|
||||||
assert(f != UNKNOWN);
|
|
||||||
|
|
||||||
switch (f) {
|
|
||||||
case CN:
|
|
||||||
return oneMiB * 2;
|
|
||||||
|
|
||||||
case CN_LITE:
|
|
||||||
return oneMiB;
|
|
||||||
|
|
||||||
case CN_HEAVY:
|
|
||||||
return oneMiB * 4;
|
|
||||||
|
|
||||||
case CN_PICO:
|
|
||||||
return oneMiB / 4;
|
|
||||||
|
|
||||||
case CN_FEMTO:
|
|
||||||
return oneMiB / 8;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_RANDOMX
|
|
||||||
if (f == RANDOM_X) {
|
|
||||||
switch (m_id) {
|
|
||||||
case RX_0:
|
|
||||||
case RX_SFX:
|
|
||||||
return oneMiB * 2;
|
|
||||||
|
|
||||||
case RX_WOW:
|
|
||||||
case RX_KEVA:
|
|
||||||
return oneMiB;
|
|
||||||
|
|
||||||
case RX_ARQ:
|
|
||||||
return oneMiB / 4;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ARGON2
|
|
||||||
if (f == ARGON2) {
|
|
||||||
switch (m_id) {
|
|
||||||
case AR2_CHUKWA:
|
|
||||||
return oneMiB / 2;
|
|
||||||
|
|
||||||
case AR2_CHUKWA_V2:
|
|
||||||
return oneMiB;
|
|
||||||
|
|
||||||
case AR2_WRKZ:
|
|
||||||
return oneMiB / 4;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ASTROBWT
|
|
||||||
if (f == ASTROBWT) {
|
|
||||||
switch (m_id) {
|
|
||||||
case ASTROBWT_DERO:
|
|
||||||
return oneMiB * 20;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_KAWPOW
|
|
||||||
if (f == KAWPOW) {
|
|
||||||
switch (m_id) {
|
|
||||||
case KAWPOW_RVN:
|
|
||||||
return 32768;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t xmrig::Algorithm::maxIntensity() const
|
|
||||||
{
|
|
||||||
# ifdef XMRIG_ALGO_RANDOMX
|
|
||||||
if (family() == RANDOM_X) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ARGON2
|
|
||||||
if (family() == ARGON2) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ASTROBWT
|
|
||||||
if (family() == ASTROBWT) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
xmrig::Algorithm::Family xmrig::Algorithm::family(Id id)
|
|
||||||
{
|
|
||||||
switch (id) {
|
|
||||||
case CN_0:
|
|
||||||
case CN_1:
|
|
||||||
case CN_2:
|
|
||||||
case CN_R:
|
|
||||||
case CN_FAST:
|
|
||||||
case CN_HALF:
|
|
||||||
case CN_XAO:
|
|
||||||
case CN_RTO:
|
|
||||||
case CN_RWZ:
|
|
||||||
case CN_ZLS:
|
|
||||||
case CN_DOUBLE:
|
|
||||||
case CN_CCX:
|
|
||||||
return CN;
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_LITE
|
|
||||||
case CN_LITE_0:
|
|
||||||
case CN_LITE_1:
|
|
||||||
return CN_LITE;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_HEAVY
|
|
||||||
case CN_HEAVY_0:
|
|
||||||
case CN_HEAVY_TUBE:
|
|
||||||
case CN_HEAVY_XHV:
|
|
||||||
return CN_HEAVY;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_PICO
|
|
||||||
case CN_PICO_0:
|
|
||||||
case CN_PICO_TLO:
|
|
||||||
return CN_PICO;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_FEMTO
|
|
||||||
case CN_UPX2:
|
|
||||||
return CN_FEMTO;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_RANDOMX
|
|
||||||
case RX_0:
|
|
||||||
case RX_WOW:
|
|
||||||
case RX_ARQ:
|
|
||||||
case RX_SFX:
|
|
||||||
case RX_KEVA:
|
|
||||||
return RANDOM_X;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ARGON2
|
|
||||||
case AR2_CHUKWA:
|
|
||||||
case AR2_CHUKWA_V2:
|
|
||||||
case AR2_WRKZ:
|
|
||||||
return ARGON2;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ASTROBWT
|
|
||||||
case ASTROBWT_DERO:
|
|
||||||
return ASTROBWT;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_KAWPOW
|
|
||||||
case KAWPOW_RVN:
|
|
||||||
return KAWPOW;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
xmrig::Algorithm::Id xmrig::Algorithm::parse(const char *name)
|
xmrig::Algorithm::Id xmrig::Algorithm::parse(const char *name)
|
||||||
{
|
{
|
||||||
if (name == nullptr || strlen(name) < 1) {
|
if (name == nullptr || strlen(name) < 1) {
|
||||||
return INVALID;
|
return INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const AlgoName &item : algorithm_names) {
|
const auto it = kAlgorithmAliases.find(name);
|
||||||
if ((strcasecmp(name, item.name) == 0) || (item.shortName != nullptr && strcasecmp(name, item.shortName) == 0)) {
|
|
||||||
return item.id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return INVALID;
|
return it != kAlgorithmAliases.end() ? it->second : INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *xmrig::Algorithm::name(bool shortName) const
|
size_t xmrig::Algorithm::count()
|
||||||
{
|
{
|
||||||
for (const AlgoName &item : algorithm_names) {
|
return kAlgorithmNames.size();
|
||||||
if (item.id == m_id) {
|
}
|
||||||
return (shortName && item.shortName) ? item.shortName : item.name;
|
|
||||||
|
|
||||||
|
std::vector<xmrig::Algorithm> xmrig::Algorithm::all(const std::function<bool(const Algorithm &algo)> &filter)
|
||||||
|
{
|
||||||
|
static const std::vector<Id> order = {
|
||||||
|
CN_0, CN_1, CN_2, CN_R, CN_FAST, CN_HALF, CN_XAO, CN_RTO, CN_RWZ, CN_ZLS, CN_DOUBLE, CN_CCX,
|
||||||
|
CN_LITE_0, CN_LITE_1,
|
||||||
|
CN_HEAVY_0, CN_HEAVY_TUBE, CN_HEAVY_XHV,
|
||||||
|
CN_PICO_0, CN_PICO_TLO,
|
||||||
|
CN_UPX2,
|
||||||
|
RX_0, RX_WOW, RX_ARQ, RX_SFX, RX_KEVA,
|
||||||
|
AR2_CHUKWA, AR2_CHUKWA_V2, AR2_WRKZ,
|
||||||
|
ASTROBWT_DERO,
|
||||||
|
KAWPOW_RVN
|
||||||
|
};
|
||||||
|
|
||||||
|
Algorithms out;
|
||||||
|
out.reserve(count());
|
||||||
|
|
||||||
|
for (const Id algo : order) {
|
||||||
|
if (kAlgorithmNames.count(algo) && (!filter || filter(algo))) {
|
||||||
|
out.emplace_back(algo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return "invalid";
|
return out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -27,6 +21,7 @@
|
||||||
#define XMRIG_ALGORITHM_H
|
#define XMRIG_ALGORITHM_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,89 +34,172 @@ namespace xmrig {
|
||||||
class Algorithm
|
class Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Changes in following file is required if this enum changed:
|
// Changes in following file may required if this enum changed:
|
||||||
//
|
//
|
||||||
// src/backend/opencl/cl/cn/algorithm.cl
|
// src/backend/opencl/cl/cn/algorithm.cl
|
||||||
//
|
//
|
||||||
enum Id : int {
|
// Id encoding:
|
||||||
INVALID = -1,
|
// 1 byte: family
|
||||||
CN_0, // "cn/0" CryptoNight (original).
|
// 1 byte: L3 memory as power of 2 (if applicable).
|
||||||
CN_1, // "cn/1" CryptoNight variant 1 also known as Monero7 and CryptoNightV7.
|
// 1 byte: L2 memory for RandomX algorithms as power of 2, base variant for CryptoNight algorithms or 0x00.
|
||||||
CN_2, // "cn/2" CryptoNight variant 2.
|
// 1 byte: extra variant (coin) id.
|
||||||
CN_R, // "cn/r" CryptoNightR (Monero's variant 4).
|
enum Id : uint32_t {
|
||||||
CN_FAST, // "cn/fast" CryptoNight variant 1 with half iterations.
|
INVALID = 0,
|
||||||
CN_HALF, // "cn/half" CryptoNight variant 2 with half iterations (Masari/Torque).
|
CN_0 = 0x63150000, // "cn/0" CryptoNight (original).
|
||||||
CN_XAO, // "cn/xao" CryptoNight variant 0 (modified, Alloy only).
|
CN_1 = 0x63150100, // "cn/1" CryptoNight variant 1 also known as Monero7 and CryptoNightV7.
|
||||||
CN_RTO, // "cn/rto" CryptoNight variant 1 (modified, Arto only).
|
CN_2 = 0x63150200, // "cn/2" CryptoNight variant 2.
|
||||||
CN_RWZ, // "cn/rwz" CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation (Graft).
|
CN_R = 0x63150272, // "cn/r" CryptoNightR (Monero's variant 4).
|
||||||
CN_ZLS, // "cn/zls" CryptoNight variant 2 with 3/4 iterations (Zelerius).
|
CN_FAST = 0x63150166, // "cn/fast" CryptoNight variant 1 with half iterations.
|
||||||
CN_DOUBLE, // "cn/double" CryptoNight variant 2 with double iterations (X-CASH).
|
CN_HALF = 0x63150268, // "cn/half" CryptoNight variant 2 with half iterations (Masari/Torque).
|
||||||
CN_LITE_0, // "cn-lite/0" CryptoNight-Lite variant 0.
|
CN_XAO = 0x63150078, // "cn/xao" CryptoNight variant 0 (modified, Alloy only).
|
||||||
CN_LITE_1, // "cn-lite/1" CryptoNight-Lite variant 1.
|
CN_RTO = 0x63150172, // "cn/rto" CryptoNight variant 1 (modified, Arto only).
|
||||||
CN_HEAVY_0, // "cn-heavy/0" CryptoNight-Heavy (4 MB).
|
CN_RWZ = 0x63150277, // "cn/rwz" CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation (Graft).
|
||||||
CN_HEAVY_TUBE, // "cn-heavy/tube" CryptoNight-Heavy (modified, TUBE only).
|
CN_ZLS = 0x6315027a, // "cn/zls" CryptoNight variant 2 with 3/4 iterations (Zelerius).
|
||||||
CN_HEAVY_XHV, // "cn-heavy/xhv" CryptoNight-Heavy (modified, Haven Protocol only).
|
CN_DOUBLE = 0x63150264, // "cn/double" CryptoNight variant 2 with double iterations (X-CASH).
|
||||||
CN_PICO_0, // "cn-pico" CryptoNight-Pico
|
CN_CCX = 0x63150063, // "cn/ccx" Conceal (CCX)
|
||||||
CN_PICO_TLO, // "cn-pico/tlo" CryptoNight-Pico (TLO)
|
CN_LITE_0 = 0x63140000, // "cn-lite/0" CryptoNight-Lite variant 0.
|
||||||
CN_CCX, // "cn/ccx" Conceal (CCX)
|
CN_LITE_1 = 0x63140100, // "cn-lite/1" CryptoNight-Lite variant 1.
|
||||||
CN_UPX2, // "cn/upx2" Uplexa (UPX2)
|
CN_HEAVY_0 = 0x63160000, // "cn-heavy/0" CryptoNight-Heavy (4 MB).
|
||||||
RX_0, // "rx/0" RandomX (reference configuration).
|
CN_HEAVY_TUBE = 0x63160172, // "cn-heavy/tube" CryptoNight-Heavy (modified, TUBE only).
|
||||||
RX_WOW, // "rx/wow" RandomWOW (Wownero).
|
CN_HEAVY_XHV = 0x63160068, // "cn-heavy/xhv" CryptoNight-Heavy (modified, Haven Protocol only).
|
||||||
RX_ARQ, // "rx/arq" RandomARQ (Arqma).
|
CN_PICO_0 = 0x63120200, // "cn-pico" CryptoNight-Pico
|
||||||
RX_SFX, // "rx/sfx" RandomSFX (Safex Cash).
|
CN_PICO_TLO = 0x63120274, // "cn-pico/tlo" CryptoNight-Pico (TLO)
|
||||||
RX_KEVA, // "rx/keva" RandomKEVA (Keva).
|
CN_UPX2 = 0x63110200, // "cn/upx2" Uplexa (UPX2)
|
||||||
AR2_CHUKWA, // "argon2/chukwa" Argon2id (Chukwa).
|
RX_0 = 0x72151200, // "rx/0" RandomX (reference configuration).
|
||||||
AR2_CHUKWA_V2, // "argon2/chukwav2" Argon2id (Chukwa v2).
|
RX_WOW = 0x72141177, // "rx/wow" RandomWOW (Wownero).
|
||||||
AR2_WRKZ, // "argon2/wrkz" Argon2id (WRKZ)
|
RX_ARQ = 0x72121061, // "rx/arq" RandomARQ (Arqma).
|
||||||
ASTROBWT_DERO, // "astrobwt" AstroBWT (Dero)
|
RX_SFX = 0x72151273, // "rx/sfx" RandomSFX (Safex Cash).
|
||||||
KAWPOW_RVN, // "kawpow/rvn" KawPow (RVN)
|
RX_KEVA = 0x7214116b, // "rx/keva" RandomKEVA (Keva).
|
||||||
MAX
|
AR2_CHUKWA = 0x61130000, // "argon2/chukwa" Argon2id (Chukwa).
|
||||||
|
AR2_CHUKWA_V2 = 0x61140000, // "argon2/chukwav2" Argon2id (Chukwa v2).
|
||||||
|
AR2_WRKZ = 0x61120000, // "argon2/wrkz" Argon2id (WRKZ)
|
||||||
|
ASTROBWT_DERO = 0x41000000, // "astrobwt" AstroBWT (Dero)
|
||||||
|
KAWPOW_RVN = 0x6b0f0000, // "kawpow/rvn" KawPow (RVN)
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Family : int {
|
enum Family : uint32_t {
|
||||||
UNKNOWN,
|
UNKNOWN = 0,
|
||||||
CN,
|
CN_ANY = 0x63000000,
|
||||||
CN_LITE,
|
CN = 0x63150000,
|
||||||
CN_HEAVY,
|
CN_LITE = 0x63140000,
|
||||||
CN_PICO,
|
CN_HEAVY = 0x63160000,
|
||||||
CN_FEMTO,
|
CN_PICO = 0x63120000,
|
||||||
RANDOM_X,
|
CN_FEMTO = 0x63110000,
|
||||||
ARGON2,
|
RANDOM_X = 0x72000000,
|
||||||
ASTROBWT,
|
ARGON2 = 0x61000000,
|
||||||
KAWPOW
|
ASTROBWT = 0x41000000,
|
||||||
|
KAWPOW = 0x6b000000
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *kINVALID;
|
||||||
|
static const char *kCN;
|
||||||
|
static const char *kCN_0;
|
||||||
|
static const char *kCN_1;
|
||||||
|
static const char *kCN_2;
|
||||||
|
static const char *kCN_R;
|
||||||
|
static const char *kCN_FAST;
|
||||||
|
static const char *kCN_HALF;
|
||||||
|
static const char *kCN_XAO;
|
||||||
|
static const char *kCN_RTO;
|
||||||
|
static const char *kCN_RWZ;
|
||||||
|
static const char *kCN_ZLS;
|
||||||
|
static const char *kCN_DOUBLE;
|
||||||
|
static const char *kCN_CCX;
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_LITE
|
||||||
|
static const char *kCN_LITE;
|
||||||
|
static const char *kCN_LITE_0;
|
||||||
|
static const char *kCN_LITE_1;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
|
static const char *kCN_HEAVY;
|
||||||
|
static const char *kCN_HEAVY_0;
|
||||||
|
static const char *kCN_HEAVY_TUBE;
|
||||||
|
static const char *kCN_HEAVY_XHV;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_PICO
|
||||||
|
static const char *kCN_PICO;
|
||||||
|
static const char *kCN_PICO_0;
|
||||||
|
static const char *kCN_PICO_TLO;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_CN_FEMTO
|
||||||
|
static const char *kCN_UPX2;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_RANDOMX
|
||||||
|
static const char *kRX;
|
||||||
|
static const char *kRX_0;
|
||||||
|
static const char *kRX_WOW;
|
||||||
|
static const char *kRX_ARQ;
|
||||||
|
static const char *kRX_SFX;
|
||||||
|
static const char *kRX_KEVA;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_ARGON2
|
||||||
|
static const char *kAR2;
|
||||||
|
static const char *kAR2_CHUKWA;
|
||||||
|
static const char *kAR2_CHUKWA_V2;
|
||||||
|
static const char *kAR2_WRKZ;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_ASTROBWT
|
||||||
|
static const char *kASTROBWT;
|
||||||
|
static const char *kASTROBWT_DERO;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
|
static const char *kKAWPOW;
|
||||||
|
static const char *kKAWPOW_RVN;
|
||||||
|
# endif
|
||||||
|
|
||||||
inline Algorithm() = default;
|
inline Algorithm() = default;
|
||||||
inline Algorithm(const char *algo) : m_id(parse(algo)) {}
|
inline Algorithm(const char *algo) : m_id(parse(algo)) {}
|
||||||
inline Algorithm(Id id) : m_id(id) {}
|
inline Algorithm(Id id) : m_id(id) {}
|
||||||
Algorithm(const rapidjson::Value &value);
|
Algorithm(const rapidjson::Value &value);
|
||||||
|
Algorithm(uint32_t id);
|
||||||
|
|
||||||
inline bool isCN() const { auto f = family(); return f == CN || f == CN_LITE || f == CN_HEAVY || f == CN_PICO || f == CN_FEMTO; }
|
static inline constexpr bool isCN(Id id) { return (id & 0xff000000) == CN_ANY; }
|
||||||
inline bool isEqual(const Algorithm &other) const { return m_id == other.m_id; }
|
static inline constexpr Id base(Id id) { return isCN(id) ? static_cast<Id>(CN_0 | (id & 0xff00)) : INVALID; }
|
||||||
inline bool isValid() const { return m_id != INVALID && family() != UNKNOWN; }
|
static inline constexpr size_t l2(Id id) { return family(id) == RANDOM_X ? (1U << ((id >> 8) & 0xff)) : 0U; }
|
||||||
inline const char *name() const { return name(false); }
|
static inline constexpr size_t l3(Id id) { return 1U << ((id >> 16) & 0xff); }
|
||||||
inline const char *shortName() const { return name(true); }
|
static inline constexpr uint32_t family(Id id) { return id & (isCN(id) ? 0xffff0000 : 0xff000000); }
|
||||||
inline Family family() const { return family(m_id); }
|
|
||||||
inline Id id() const { return m_id; }
|
|
||||||
|
|
||||||
inline bool operator!=(Algorithm::Id id) const { return m_id != id; }
|
inline bool isCN() const { return isCN(m_id); }
|
||||||
inline bool operator!=(const Algorithm &other) const { return !isEqual(other); }
|
inline bool isEqual(const Algorithm &other) const { return m_id == other.m_id; }
|
||||||
inline bool operator==(Algorithm::Id id) const { return m_id == id; }
|
inline bool isValid() const { return m_id != INVALID && family() > UNKNOWN; }
|
||||||
inline bool operator==(const Algorithm &other) const { return isEqual(other); }
|
inline Id base() const { return base(m_id); }
|
||||||
inline operator Algorithm::Id() const { return m_id; }
|
inline Id id() const { return m_id; }
|
||||||
|
inline size_t l2() const { return l2(m_id); }
|
||||||
|
inline uint32_t family() const { return family(m_id); }
|
||||||
|
inline uint32_t maxIntensity() const { return isCN() ? 5 : 1; };
|
||||||
|
|
||||||
|
inline size_t l3() const
|
||||||
|
{
|
||||||
|
# ifdef XMRIG_ALGO_ASTROBWT
|
||||||
|
return m_id != ASTROBWT_DERO ? l3(m_id) : 0x100000 * 20;
|
||||||
|
# else
|
||||||
|
return l3(m_id);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool operator!=(Algorithm::Id id) const { return m_id != id; }
|
||||||
|
inline bool operator!=(const Algorithm &other) const { return !isEqual(other); }
|
||||||
|
inline bool operator==(Algorithm::Id id) const { return m_id == id; }
|
||||||
|
inline bool operator==(const Algorithm &other) const { return isEqual(other); }
|
||||||
|
inline operator Algorithm::Id() const { return m_id; }
|
||||||
|
|
||||||
|
const char *name() const;
|
||||||
rapidjson::Value toJSON() const;
|
rapidjson::Value toJSON() const;
|
||||||
rapidjson::Value toJSON(rapidjson::Document &doc) const;
|
rapidjson::Value toJSON(rapidjson::Document &doc) const;
|
||||||
size_t l2() const;
|
|
||||||
size_t l3() const;
|
|
||||||
uint32_t maxIntensity() const;
|
|
||||||
|
|
||||||
static Family family(Id id);
|
|
||||||
static Id parse(const char *name);
|
static Id parse(const char *name);
|
||||||
|
static size_t count();
|
||||||
|
static std::vector<Algorithm> all(const std::function<bool(const Algorithm &algo)> &filter = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const char *name(bool shortName) const;
|
|
||||||
|
|
||||||
Id m_id = INVALID;
|
Id m_id = INVALID;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2019 jtgrassie <https://github.com/jtgrassie>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2019 jtgrassie <https://github.com/jtgrassie>
|
|
||||||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -232,7 +226,7 @@ int64_t xmrig::Client::submit(const JobResult &result)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
if (has<EXT_ALGO>() && result.algorithm.isValid()) {
|
if (has<EXT_ALGO>() && result.algorithm.isValid()) {
|
||||||
params.AddMember("algo", StringRef(result.algorithm.shortName()), allocator);
|
params.AddMember("algo", StringRef(result.algorithm.name()), allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonRequest::create(doc, m_sequence, "submit", params);
|
JsonRequest::create(doc, m_sequence, "submit", params);
|
||||||
|
@ -515,7 +509,7 @@ bool xmrig::Client::verifyAlgorithm(const Algorithm &algorithm, const char *algo
|
||||||
m_listener->onVerifyAlgorithm(this, algorithm, &ok);
|
m_listener->onVerifyAlgorithm(this, algorithm, &ok);
|
||||||
|
|
||||||
if (!ok && !isQuiet()) {
|
if (!ok && !isQuiet()) {
|
||||||
LOG_ERR("%s " RED("incompatible/disabled algorithm ") RED_BOLD("\"%s\" ") RED("detected, reconnect"), tag(), algorithm.shortName());
|
LOG_ERR("%s " RED("incompatible/disabled algorithm ") RED_BOLD("\"%s\" ") RED("detected, reconnect"), tag(), algorithm.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2019 jtgrassie <https://github.com/jtgrassie>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2019 jtgrassie <https://github.com/jtgrassie>
|
|
||||||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -65,7 +65,7 @@ static const char *kJsonRPC = "/json_rpc";
|
||||||
|
|
||||||
static constexpr size_t kBlobReserveSize = 8;
|
static constexpr size_t kBlobReserveSize = 8;
|
||||||
|
|
||||||
static const char kZMQGreeting[64] = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 127, 3, 0, 'N', 'U', 'L', 'L' };
|
static const char kZMQGreeting[64] = { static_cast<char>(-1), 0, 0, 0, 0, 0, 0, 0, 0, 127, 3, 0, 'N', 'U', 'L', 'L' };
|
||||||
static constexpr size_t kZMQGreetingSize1 = 11;
|
static constexpr size_t kZMQGreetingSize1 = 11;
|
||||||
|
|
||||||
static const char kZMQHandshake[] = "\4\x19\5READY\xbSocket-Type\0\0\0\3SUB";
|
static const char kZMQHandshake[] = "\4\x19\5READY\xbSocket-Type\0\0\0\3SUB";
|
||||||
|
@ -730,7 +730,7 @@ void xmrig::DaemonClient::ZMQRead(ssize_t nread, const uv_buf_t* buf)
|
||||||
switch (m_ZMQConnectionState) {
|
switch (m_ZMQConnectionState) {
|
||||||
case ZMQ_GREETING_1:
|
case ZMQ_GREETING_1:
|
||||||
if (m_ZMQRecvBuf.size() >= kZMQGreetingSize1) {
|
if (m_ZMQRecvBuf.size() >= kZMQGreetingSize1) {
|
||||||
if ((m_ZMQRecvBuf[0] == -1) && (m_ZMQRecvBuf[9] == 127) && (m_ZMQRecvBuf[10] == 3)) {
|
if ((m_ZMQRecvBuf[0] == static_cast<char>(-1)) && (m_ZMQRecvBuf[9] == 127) && (m_ZMQRecvBuf[10] == 3)) {
|
||||||
ZMQWrite(kZMQGreeting + kZMQGreetingSize1, sizeof(kZMQGreeting) - kZMQGreetingSize1);
|
ZMQWrite(kZMQGreeting + kZMQGreetingSize1, sizeof(kZMQGreeting) - kZMQGreetingSize1);
|
||||||
m_ZMQConnectionState = ZMQ_GREETING_2;
|
m_ZMQConnectionState = ZMQ_GREETING_2;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -213,7 +213,7 @@ void xmrig::EthStratumClient::parseNotification(const char *method, const rapidj
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
if (!isQuiet()) {
|
if (!isQuiet()) {
|
||||||
LOG_ERR("[%s] incompatible/disabled algorithm \"%s\" detected, reconnect", url(), algo.shortName());
|
LOG_ERR("[%s] incompatible/disabled algorithm \"%s\" detected, reconnect", url(), algo.name());
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -165,7 +165,7 @@ void xmrig::Job::setSigKey(const char *sig_key)
|
||||||
|
|
||||||
uint32_t xmrig::Job::getNumTransactions() const
|
uint32_t xmrig::Job::getNumTransactions() const
|
||||||
{
|
{
|
||||||
if (m_algorithm.family() > Algorithm::RANDOM_X) {
|
if (!(m_algorithm.isCN() || m_algorithm.family() == Algorithm::RANDOM_X)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "base/net/stratum/NetworkState.h"
|
#include "base/net/stratum/NetworkState.h"
|
||||||
#include "3rdparty/rapidjson/document.h"
|
#include "3rdparty/rapidjson/document.h"
|
||||||
#include "base/io/log/Log.h"
|
#include "base/io/log/Log.h"
|
||||||
|
@ -196,7 +189,7 @@ void xmrig::NetworkState::printConnection() const
|
||||||
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") CYAN_BOLD("%s ") BLACK_BOLD("(%s) ") GREEN_BOLD("%s"),
|
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") CYAN_BOLD("%s ") BLACK_BOLD("(%s) ") GREEN_BOLD("%s"),
|
||||||
"pool address", m_pool, m_ip.data(), m_tls.isNull() ? "" : m_tls.data());
|
"pool address", m_pool, m_ip.data(), m_tls.isNull() ? "" : m_tls.data());
|
||||||
|
|
||||||
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") WHITE_BOLD("%s"), "algorithm", m_algorithm.shortName());
|
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") WHITE_BOLD("%s"), "algorithm", m_algorithm.name());
|
||||||
printDiff(m_diff);
|
printDiff(m_diff);
|
||||||
printLatency(latency());
|
printLatency(latency());
|
||||||
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") CYAN_BOLD("%" PRIu64 "s"), "connection time", connectionTime() / 1000);
|
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-17s") CYAN_BOLD("%" PRIu64 "s"), "connection time", connectionTime() / 1000);
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
||||||
* Copyright (c) 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -17,7 +17,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
@ -322,7 +321,7 @@ std::string xmrig::Pool::printableName() const
|
||||||
out += std::string(" coin ") + WHITE_BOLD_S + m_coin.name() + CLEAR;
|
out += std::string(" coin ") + WHITE_BOLD_S + m_coin.name() + CLEAR;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
out += std::string(" algo ") + WHITE_BOLD_S + (m_algorithm.isValid() ? m_algorithm.shortName() : "auto") + CLEAR;
|
out += std::string(" algo ") + WHITE_BOLD_S + (m_algorithm.isValid() ? m_algorithm.name() : "auto") + CLEAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_mode == MODE_SELF_SELECT) {
|
if (m_mode == MODE_SELF_SELECT) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
||||||
* Copyright (c) 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -263,7 +263,7 @@ void xmrig::BenchClient::start()
|
||||||
tag(),
|
tag(),
|
||||||
size < 1000000 ? size / 1000 : size / 1000000,
|
size < 1000000 ? size / 1000 : size / 1000000,
|
||||||
size < 1000000 ? "K" : "M",
|
size < 1000000 ? "K" : "M",
|
||||||
m_job.algorithm().shortName());
|
m_job.algorithm().name());
|
||||||
|
|
||||||
m_listener->onLoginSuccess(this);
|
m_listener->onLoginSuccess(this);
|
||||||
m_listener->onJobReceived(this, m_job, rapidjson::Value());
|
m_listener->onJobReceived(this, m_job, rapidjson::Value());
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
@ -116,15 +109,7 @@ public:
|
||||||
|
|
||||||
inline void rebuild()
|
inline void rebuild()
|
||||||
{
|
{
|
||||||
algorithms.clear();
|
algorithms = Algorithm::all([this](const Algorithm &algo) { return isEnabled(algo); });
|
||||||
|
|
||||||
for (int i = 0; i < Algorithm::MAX; ++i) {
|
|
||||||
const Algorithm algo(static_cast<Algorithm::Id>(i));
|
|
||||||
|
|
||||||
if (algo.isValid() && isEnabled(algo)) {
|
|
||||||
algorithms.push_back(algo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -171,7 +156,7 @@ public:
|
||||||
Value algo(kArrayType);
|
Value algo(kArrayType);
|
||||||
|
|
||||||
for (const Algorithm &a : algorithms) {
|
for (const Algorithm &a : algorithms) {
|
||||||
algo.PushBack(StringRef(a.shortName()), allocator);
|
algo.PushBack(StringRef(a.name()), allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.AddMember("algorithms", algo, allocator);
|
reply.AddMember("algorithms", algo, allocator);
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,13 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -44,20 +37,13 @@ class CnAlgo
|
||||||
public:
|
public:
|
||||||
constexpr CnAlgo() {};
|
constexpr CnAlgo() {};
|
||||||
|
|
||||||
constexpr inline Algorithm::Id base() const { static_assert(ALGO > Algorithm::INVALID && ALGO < Algorithm::RX_0, "invalid CRYPTONIGHT algorithm"); return Algorithm::CN_2; }
|
constexpr inline Algorithm::Id base() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return Algorithm::base(ALGO); }
|
||||||
constexpr inline bool isHeavy() const { return memory() == CN_MEMORY * 2; }
|
constexpr inline bool isHeavy() const { return Algorithm::family(ALGO) == Algorithm::CN_HEAVY; }
|
||||||
constexpr inline bool isR() const { return ALGO == Algorithm::CN_R; }
|
constexpr inline bool isR() const { return ALGO == Algorithm::CN_R; }
|
||||||
constexpr inline size_t memory() const { static_assert(ALGO > Algorithm::INVALID && ALGO < Algorithm::RX_0, "invalid CRYPTONIGHT algorithm"); return CN_MEMORY; }
|
constexpr inline size_t memory() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return Algorithm::l3(ALGO); }
|
||||||
constexpr inline uint32_t iterations() const { static_assert(ALGO > Algorithm::INVALID && ALGO < Algorithm::RX_0, "invalid CRYPTONIGHT algorithm"); return CN_ITER; }
|
constexpr inline uint32_t iterations() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return CN_ITER; }
|
||||||
constexpr inline uint32_t mask() const { return static_cast<uint32_t>(((memory() - 1) / 16) * 16); }
|
constexpr inline uint32_t mask() const { return static_cast<uint32_t>(((memory() - 1) / 16) * 16); }
|
||||||
|
|
||||||
inline static size_t memory(Algorithm::Id algo)
|
|
||||||
{
|
|
||||||
Algorithm algorithm(algo);
|
|
||||||
|
|
||||||
return algorithm.isCN() ? algorithm.l3() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static uint32_t iterations(Algorithm::Id algo)
|
inline static uint32_t iterations(Algorithm::Id algo)
|
||||||
{
|
{
|
||||||
switch (algo) {
|
switch (algo) {
|
||||||
|
@ -122,77 +108,14 @@ public:
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
return ((memory(algo) - 1) / 16) * 16;
|
return ((Algorithm::l3(algo) - 1) / 16) * 16;
|
||||||
}
|
|
||||||
|
|
||||||
inline static Algorithm::Id base(Algorithm::Id algo)
|
|
||||||
{
|
|
||||||
switch (algo) {
|
|
||||||
case Algorithm::CN_0:
|
|
||||||
case Algorithm::CN_XAO:
|
|
||||||
# ifdef XMRIG_ALGO_CN_LITE
|
|
||||||
case Algorithm::CN_LITE_0:
|
|
||||||
# endif
|
|
||||||
# ifdef XMRIG_ALGO_CN_HEAVY
|
|
||||||
case Algorithm::CN_HEAVY_0:
|
|
||||||
case Algorithm::CN_HEAVY_XHV:
|
|
||||||
# endif
|
|
||||||
case Algorithm::CN_CCX:
|
|
||||||
return Algorithm::CN_0;
|
|
||||||
|
|
||||||
case Algorithm::CN_1:
|
|
||||||
case Algorithm::CN_FAST:
|
|
||||||
case Algorithm::CN_RTO:
|
|
||||||
# ifdef XMRIG_ALGO_CN_LITE
|
|
||||||
case Algorithm::CN_LITE_1:
|
|
||||||
# endif
|
|
||||||
# ifdef XMRIG_ALGO_CN_HEAVY
|
|
||||||
case Algorithm::CN_HEAVY_TUBE:
|
|
||||||
return Algorithm::CN_1;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
case Algorithm::CN_2:
|
|
||||||
case Algorithm::CN_R:
|
|
||||||
case Algorithm::CN_HALF:
|
|
||||||
case Algorithm::CN_RWZ:
|
|
||||||
case Algorithm::CN_ZLS:
|
|
||||||
case Algorithm::CN_DOUBLE:
|
|
||||||
# ifdef XMRIG_ALGO_CN_PICO
|
|
||||||
case Algorithm::CN_PICO_0:
|
|
||||||
case Algorithm::CN_PICO_TLO:
|
|
||||||
# endif
|
|
||||||
# ifdef XMRIG_ALGO_CN_FEMTO
|
|
||||||
case Algorithm::CN_UPX2:
|
|
||||||
# endif
|
|
||||||
return Algorithm::CN_2;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Algorithm::INVALID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
constexpr const static size_t CN_MEMORY = 0x200000;
|
constexpr const static uint32_t CN_ITER = 0x80000;
|
||||||
constexpr const static uint32_t CN_ITER = 0x80000;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_0>::base() const { return Algorithm::CN_0; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_XAO>::base() const { return Algorithm::CN_0; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_LITE_0>::base() const { return Algorithm::CN_0; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_HEAVY_0>::base() const { return Algorithm::CN_0; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_HEAVY_XHV>::base() const { return Algorithm::CN_0; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_CCX>::base() const { return Algorithm::CN_0; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_1>::base() const { return Algorithm::CN_1; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_FAST>::base() const { return Algorithm::CN_1; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_RTO>::base() const { return Algorithm::CN_1; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_LITE_1>::base() const { return Algorithm::CN_1; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_HEAVY_TUBE>::base() const { return Algorithm::CN_1; }
|
|
||||||
template<> constexpr inline Algorithm::Id CnAlgo<Algorithm::CN_UPX2>::base() const { return Algorithm::CN_2; }
|
|
||||||
|
|
||||||
|
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_FAST>::iterations() const { return CN_ITER / 2; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_FAST>::iterations() const { return CN_ITER / 2; }
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_HALF>::iterations() const { return CN_ITER / 2; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_HALF>::iterations() const { return CN_ITER / 2; }
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_LITE_0>::iterations() const { return CN_ITER / 2; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_LITE_0>::iterations() const { return CN_ITER / 2; }
|
||||||
|
@ -210,16 +133,6 @@ template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_CCX>::iterations() con
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::iterations() const { return CN_ITER / 32; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::iterations() const { return CN_ITER / 32; }
|
||||||
|
|
||||||
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_LITE_0>::memory() const { return CN_MEMORY / 2; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_LITE_1>::memory() const { return CN_MEMORY / 2; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_HEAVY_0>::memory() const { return CN_MEMORY * 2; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_HEAVY_TUBE>::memory() const { return CN_MEMORY * 2; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_HEAVY_XHV>::memory() const { return CN_MEMORY * 2; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_PICO_0>::memory() const { return CN_MEMORY / 8; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_PICO_TLO>::memory() const { return CN_MEMORY / 8; }
|
|
||||||
template<> constexpr inline size_t CnAlgo<Algorithm::CN_UPX2>::memory() const { return CN_MEMORY / 16; }
|
|
||||||
|
|
||||||
|
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_PICO_0>::mask() const { return 0x1FFF0; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_PICO_0>::mask() const { return 0x1FFF0; }
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::mask() const { return 0x1FFF0; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::mask() const { return 0x1FFF0; }
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,16 +17,12 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
|
|
||||||
|
|
||||||
#include "backend/cpu/Cpu.h"
|
|
||||||
#include "crypto/cn/CnHash.h"
|
#include "crypto/cn/CnHash.h"
|
||||||
|
#include "backend/cpu/Cpu.h"
|
||||||
|
#include "base/tools/cryptonote/umul128.h"
|
||||||
#include "crypto/common/VirtualMemory.h"
|
#include "crypto/common/VirtualMemory.h"
|
||||||
|
|
||||||
|
|
||||||
#include "base/tools/cryptonote/umul128.h"
|
|
||||||
|
|
||||||
#if defined(XMRIG_ARM)
|
#if defined(XMRIG_ARM)
|
||||||
# include "crypto/cn/CryptoNight_arm.h"
|
# include "crypto/cn/CryptoNight_arm.h"
|
||||||
#else
|
#else
|
||||||
|
@ -50,27 +40,30 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define ADD_FN(algo) \
|
#define ADD_FN(algo) do { \
|
||||||
m_map[algo][AV_SINGLE][Assembly::NONE] = cryptonight_single_hash<algo, false, 0>; \
|
m_map[algo] = new cn_hash_fun_array{}; \
|
||||||
m_map[algo][AV_SINGLE_SOFT][Assembly::NONE] = cryptonight_single_hash<algo, true, 0>; \
|
m_map[algo]->data[AV_SINGLE][Assembly::NONE] = cryptonight_single_hash<algo, false, 0>; \
|
||||||
m_map[algo][AV_DOUBLE][Assembly::NONE] = cryptonight_double_hash<algo, false>; \
|
m_map[algo]->data[AV_SINGLE_SOFT][Assembly::NONE] = cryptonight_single_hash<algo, true, 0>; \
|
||||||
m_map[algo][AV_DOUBLE_SOFT][Assembly::NONE] = cryptonight_double_hash<algo, true>; \
|
m_map[algo]->data[AV_DOUBLE][Assembly::NONE] = cryptonight_double_hash<algo, false>; \
|
||||||
m_map[algo][AV_TRIPLE][Assembly::NONE] = cryptonight_triple_hash<algo, false>; \
|
m_map[algo]->data[AV_DOUBLE_SOFT][Assembly::NONE] = cryptonight_double_hash<algo, true>; \
|
||||||
m_map[algo][AV_TRIPLE_SOFT][Assembly::NONE] = cryptonight_triple_hash<algo, true>; \
|
m_map[algo]->data[AV_TRIPLE][Assembly::NONE] = cryptonight_triple_hash<algo, false>; \
|
||||||
m_map[algo][AV_QUAD][Assembly::NONE] = cryptonight_quad_hash<algo, false>; \
|
m_map[algo]->data[AV_TRIPLE_SOFT][Assembly::NONE] = cryptonight_triple_hash<algo, true>; \
|
||||||
m_map[algo][AV_QUAD_SOFT][Assembly::NONE] = cryptonight_quad_hash<algo, true>; \
|
m_map[algo]->data[AV_QUAD][Assembly::NONE] = cryptonight_quad_hash<algo, false>; \
|
||||||
m_map[algo][AV_PENTA][Assembly::NONE] = cryptonight_penta_hash<algo, false>; \
|
m_map[algo]->data[AV_QUAD_SOFT][Assembly::NONE] = cryptonight_quad_hash<algo, true>; \
|
||||||
m_map[algo][AV_PENTA_SOFT][Assembly::NONE] = cryptonight_penta_hash<algo, true>;
|
m_map[algo]->data[AV_PENTA][Assembly::NONE] = cryptonight_penta_hash<algo, false>; \
|
||||||
|
m_map[algo]->data[AV_PENTA_SOFT][Assembly::NONE] = cryptonight_penta_hash<algo, true>; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
#ifdef XMRIG_FEATURE_ASM
|
#ifdef XMRIG_FEATURE_ASM
|
||||||
# define ADD_FN_ASM(algo) \
|
# define ADD_FN_ASM(algo) do { \
|
||||||
m_map[algo][AV_SINGLE][Assembly::INTEL] = cryptonight_single_hash_asm<algo, Assembly::INTEL>; \
|
m_map[algo]->data[AV_SINGLE][Assembly::INTEL] = cryptonight_single_hash_asm<algo, Assembly::INTEL>; \
|
||||||
m_map[algo][AV_SINGLE][Assembly::RYZEN] = cryptonight_single_hash_asm<algo, Assembly::RYZEN>; \
|
m_map[algo]->data[AV_SINGLE][Assembly::RYZEN] = cryptonight_single_hash_asm<algo, Assembly::RYZEN>; \
|
||||||
m_map[algo][AV_SINGLE][Assembly::BULLDOZER] = cryptonight_single_hash_asm<algo, Assembly::BULLDOZER>; \
|
m_map[algo]->data[AV_SINGLE][Assembly::BULLDOZER] = cryptonight_single_hash_asm<algo, Assembly::BULLDOZER>; \
|
||||||
m_map[algo][AV_DOUBLE][Assembly::INTEL] = cryptonight_double_hash_asm<algo, Assembly::INTEL>; \
|
m_map[algo]->data[AV_DOUBLE][Assembly::INTEL] = cryptonight_double_hash_asm<algo, Assembly::INTEL>; \
|
||||||
m_map[algo][AV_DOUBLE][Assembly::RYZEN] = cryptonight_double_hash_asm<algo, Assembly::RYZEN>; \
|
m_map[algo]->data[AV_DOUBLE][Assembly::RYZEN] = cryptonight_double_hash_asm<algo, Assembly::RYZEN>; \
|
||||||
m_map[algo][AV_DOUBLE][Assembly::BULLDOZER] = cryptonight_double_hash_asm<algo, Assembly::BULLDOZER>;
|
m_map[algo]->data[AV_DOUBLE][Assembly::BULLDOZER] = cryptonight_double_hash_asm<algo, Assembly::BULLDOZER>; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
@ -298,17 +291,23 @@ xmrig::CnHash::CnHash()
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ARGON2
|
# ifdef XMRIG_ALGO_ARGON2
|
||||||
m_map[Algorithm::AR2_CHUKWA][AV_SINGLE][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA>;
|
m_map[Algorithm::AR2_CHUKWA] = new cn_hash_fun_array{};
|
||||||
m_map[Algorithm::AR2_CHUKWA][AV_SINGLE_SOFT][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA>;
|
m_map[Algorithm::AR2_CHUKWA]->data[AV_SINGLE][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA>;
|
||||||
m_map[Algorithm::AR2_CHUKWA_V2][AV_SINGLE][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA_V2>;
|
m_map[Algorithm::AR2_CHUKWA]->data[AV_SINGLE_SOFT][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA>;
|
||||||
m_map[Algorithm::AR2_CHUKWA_V2][AV_SINGLE_SOFT][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA_V2>;
|
|
||||||
m_map[Algorithm::AR2_WRKZ][AV_SINGLE][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_WRKZ>;
|
m_map[Algorithm::AR2_CHUKWA_V2] = new cn_hash_fun_array{};
|
||||||
m_map[Algorithm::AR2_WRKZ][AV_SINGLE_SOFT][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_WRKZ>;
|
m_map[Algorithm::AR2_CHUKWA_V2]->data[AV_SINGLE][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA_V2>;
|
||||||
|
m_map[Algorithm::AR2_CHUKWA_V2]->data[AV_SINGLE_SOFT][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_CHUKWA_V2>;
|
||||||
|
|
||||||
|
m_map[Algorithm::AR2_WRKZ] = new cn_hash_fun_array{};
|
||||||
|
m_map[Algorithm::AR2_WRKZ]->data[AV_SINGLE][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_WRKZ>;
|
||||||
|
m_map[Algorithm::AR2_WRKZ]->data[AV_SINGLE_SOFT][Assembly::NONE] = argon2::single_hash<Algorithm::AR2_WRKZ>;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ASTROBWT
|
# ifdef XMRIG_ALGO_ASTROBWT
|
||||||
m_map[Algorithm::ASTROBWT_DERO][AV_SINGLE][Assembly::NONE] = astrobwt::single_hash<Algorithm::ASTROBWT_DERO>;
|
m_map[Algorithm::ASTROBWT_DERO] = new cn_hash_fun_array{};
|
||||||
m_map[Algorithm::ASTROBWT_DERO][AV_SINGLE_SOFT][Assembly::NONE] = astrobwt::single_hash<Algorithm::ASTROBWT_DERO>;
|
m_map[Algorithm::ASTROBWT_DERO]->data[AV_SINGLE][Assembly::NONE] = astrobwt::single_hash<Algorithm::ASTROBWT_DERO>;
|
||||||
|
m_map[Algorithm::ASTROBWT_DERO]->data[AV_SINGLE_SOFT][Assembly::NONE] = astrobwt::single_hash<Algorithm::ASTROBWT_DERO>;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_ASM
|
# ifdef XMRIG_FEATURE_ASM
|
||||||
|
@ -319,20 +318,30 @@ xmrig::CnHash::CnHash()
|
||||||
|
|
||||||
xmrig::cn_hash_fun xmrig::CnHash::fn(const Algorithm &algorithm, AlgoVariant av, Assembly::Id assembly)
|
xmrig::cn_hash_fun xmrig::CnHash::fn(const Algorithm &algorithm, AlgoVariant av, Assembly::Id assembly)
|
||||||
{
|
{
|
||||||
|
assert(cnHash.m_map.count(algorithm));
|
||||||
|
|
||||||
if (!algorithm.isValid()) {
|
if (!algorithm.isValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto it = cnHash.m_map.find(algorithm);
|
||||||
|
if (it == cnHash.m_map.end()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_HEAVY
|
# ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
// cn-heavy optimization for Zen3 CPUs
|
// cn-heavy optimization for Zen3 CPUs
|
||||||
if ((av == AV_SINGLE) && (assembly != Assembly::NONE) && (Cpu::info()->arch() == ICpuInfo::ARCH_ZEN3)) {
|
if ((av == AV_SINGLE) && (assembly != Assembly::NONE) && (Cpu::info()->arch() == ICpuInfo::ARCH_ZEN3)) {
|
||||||
switch (algorithm.id()) {
|
switch (algorithm.id()) {
|
||||||
case xmrig::Algorithm::CN_HEAVY_0:
|
case Algorithm::CN_HEAVY_0:
|
||||||
return cryptonight_single_hash<xmrig::Algorithm::CN_HEAVY_0, false, 3>;
|
return cryptonight_single_hash<Algorithm::CN_HEAVY_0, false, 3>;
|
||||||
case xmrig::Algorithm::CN_HEAVY_TUBE:
|
|
||||||
return cryptonight_single_hash<xmrig::Algorithm::CN_HEAVY_TUBE, false, 3>;
|
case Algorithm::CN_HEAVY_TUBE:
|
||||||
case xmrig::Algorithm::CN_HEAVY_XHV:
|
return cryptonight_single_hash<Algorithm::CN_HEAVY_TUBE, false, 3>;
|
||||||
return cryptonight_single_hash<xmrig::Algorithm::CN_HEAVY_XHV, false, 3>;
|
|
||||||
|
case Algorithm::CN_HEAVY_XHV:
|
||||||
|
return cryptonight_single_hash<Algorithm::CN_HEAVY_XHV, false, 3>;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -340,11 +349,11 @@ xmrig::cn_hash_fun xmrig::CnHash::fn(const Algorithm &algorithm, AlgoVariant av,
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_ASM
|
# ifdef XMRIG_FEATURE_ASM
|
||||||
cn_hash_fun fun = cnHash.m_map[algorithm][av][Cpu::assembly(assembly)];
|
cn_hash_fun fun = it->second->data[av][Cpu::assembly(assembly)];
|
||||||
if (fun) {
|
if (fun) {
|
||||||
return fun;
|
return fun;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
return cnHash.m_map[algorithm][av][Assembly::NONE];
|
return it->second->data[av][Assembly::NONE];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -29,6 +23,7 @@
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
#include "crypto/cn/CnAlgo.h"
|
#include "crypto/cn/CnAlgo.h"
|
||||||
|
@ -68,7 +63,11 @@ public:
|
||||||
static cn_hash_fun fn(const Algorithm &algorithm, AlgoVariant av, Assembly::Id assembly);
|
static cn_hash_fun fn(const Algorithm &algorithm, AlgoVariant av, Assembly::Id assembly);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cn_hash_fun m_map[Algorithm::MAX][AV_MAX][Assembly::MAX] = {};
|
struct cn_hash_fun_array {
|
||||||
|
cn_hash_fun data[AV_MAX][Assembly::MAX];
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<Algorithm, cn_hash_fun_array*> m_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "crypto/rx/Rx.h"
|
#include "crypto/rx/Rx.h"
|
||||||
#include "backend/cpu/CpuConfig.h"
|
#include "backend/cpu/CpuConfig.h"
|
||||||
#include "backend/cpu/CpuThreads.h"
|
#include "backend/cpu/CpuThreads.h"
|
||||||
|
@ -88,7 +87,7 @@ void xmrig::Rx::init(IRxListener *listener)
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool xmrig::Rx::init(const T &seed, const RxConfig &config, const CpuConfig &cpu)
|
bool xmrig::Rx::init(const T &seed, const RxConfig &config, const CpuConfig &cpu)
|
||||||
{
|
{
|
||||||
const Algorithm::Family f = seed.algorithm().family();
|
const auto f = seed.algorithm().family();
|
||||||
if ((f != Algorithm::RANDOM_X)
|
if ((f != Algorithm::RANDOM_X)
|
||||||
# ifdef XMRIG_ALGO_CN_HEAVY
|
# ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
&& (f != Algorithm::CN_HEAVY)
|
&& (f != Algorithm::CN_HEAVY)
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2019 tevador <tevador@gmail.com>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -24,7 +18,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "crypto/rx/RxQueue.h"
|
#include "crypto/rx/RxQueue.h"
|
||||||
#include "backend/common/interfaces/IRxListener.h"
|
#include "backend/common/interfaces/IRxListener.h"
|
||||||
#include "base/io/Async.h"
|
#include "base/io/Async.h"
|
||||||
|
@ -148,7 +141,7 @@ void xmrig::RxQueue::backgroundInit()
|
||||||
LOG_INFO("%s" MAGENTA_BOLD("init dataset%s") " algo " WHITE_BOLD("%s (") CYAN_BOLD("%u") WHITE_BOLD(" threads)") BLACK_BOLD(" seed %s..."),
|
LOG_INFO("%s" MAGENTA_BOLD("init dataset%s") " algo " WHITE_BOLD("%s (") CYAN_BOLD("%u") WHITE_BOLD(" threads)") BLACK_BOLD(" seed %s..."),
|
||||||
Tags::randomx(),
|
Tags::randomx(),
|
||||||
item.nodeset.size() > 1 ? "s" : "",
|
item.nodeset.size() > 1 ? "s" : "",
|
||||||
item.seed.algorithm().shortName(),
|
item.seed.algorithm().name(),
|
||||||
item.threads,
|
item.threads,
|
||||||
Cvt::toHex(item.seed.data().data(), 8).data()
|
Cvt::toHex(item.seed.data().data(), 8).data()
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
|
||||||
* Copyright 2018-2019 tevador <tevador@gmail.com>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
11
src/donate.h
11
src/donate.h
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -42,7 +36,6 @@
|
||||||
*
|
*
|
||||||
* If you plan on changing this setting to 0 please consider making a one off donation to my wallet:
|
* If you plan on changing this setting to 0 please consider making a one off donation to my wallet:
|
||||||
* XMR: 48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD
|
* XMR: 48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD
|
||||||
* BTC: 1P7ujsXeX7GxQwHNnJsRMgAdNkFZmNVqJT
|
|
||||||
*/
|
*/
|
||||||
constexpr const int kDefaultDonateLevel = 1;
|
constexpr const int kDefaultDonateLevel = 1;
|
||||||
constexpr const int kMinimumDonateLevel = 1;
|
constexpr const int kMinimumDonateLevel = 1;
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2019 Howard Chu <https://github.com/hyc>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -207,7 +201,7 @@ void xmrig::Network::onLogin(IStrategy *, IClient *client, rapidjson::Document &
|
||||||
Value algo(kArrayType);
|
Value algo(kArrayType);
|
||||||
|
|
||||||
for (const auto &a : algorithms) {
|
for (const auto &a : algorithms) {
|
||||||
algo.PushBack(StringRef(a.shortName()), allocator);
|
algo.PushBack(StringRef(a.name()), allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
params.AddMember("algo", algo, allocator);
|
params.AddMember("algo", algo, allocator);
|
||||||
|
@ -289,7 +283,7 @@ void xmrig::Network::setJob(IClient *client, const Job &job, bool donate)
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("%s " MAGENTA_BOLD("new job") " from " WHITE_BOLD("%s:%d%s") " diff " WHITE_BOLD("%" PRIu64 "%s") " algo " WHITE_BOLD("%s") " height " WHITE_BOLD("%" PRIu64) "%s",
|
LOG_INFO("%s " MAGENTA_BOLD("new job") " from " WHITE_BOLD("%s:%d%s") " diff " WHITE_BOLD("%" PRIu64 "%s") " algo " WHITE_BOLD("%s") " height " WHITE_BOLD("%" PRIu64) "%s",
|
||||||
Tags::network(), client->pool().host().data(), client->pool().port(), zmq_buf, diff, scale, job.algorithm().shortName(), job.height(), tx_buf);
|
Tags::network(), client->pool().host().data(), client->pool().port(), zmq_buf, diff, scale, job.algorithm().name(), job.height(), tx_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!donate && m_donate) {
|
if (!donate && m_donate) {
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2019 Howard Chu <https://github.com/hyc>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,7 +16,6 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
@ -291,7 +284,7 @@ void xmrig::DonateStrategy::setAlgorithms(rapidjson::Document &doc, rapidjson::V
|
||||||
Value algo(kArrayType);
|
Value algo(kArrayType);
|
||||||
|
|
||||||
for (const auto &a : algorithms) {
|
for (const auto &a : algorithms) {
|
||||||
algo.PushBack(StringRef(a.shortName()), allocator);
|
algo.PushBack(StringRef(a.name()), allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
params.AddMember("algo", algo, allocator);
|
params.AddMember("algo", algo, allocator);
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#define APP_ID "xmrig"
|
#define APP_ID "xmrig"
|
||||||
#define APP_NAME "XMRig"
|
#define APP_NAME "XMRig"
|
||||||
#define APP_DESC "XMRig miner"
|
#define APP_DESC "XMRig miner"
|
||||||
#define APP_VERSION "6.14.0"
|
#define APP_VERSION "6.14.1-dev"
|
||||||
#define APP_DOMAIN "xmrig.com"
|
#define APP_DOMAIN "xmrig.com"
|
||||||
#define APP_SITE "www.xmrig.com"
|
#define APP_SITE "www.xmrig.com"
|
||||||
#define APP_COPYRIGHT "Copyright (C) 2016-2021 xmrig.com"
|
#define APP_COPYRIGHT "Copyright (C) 2016-2021 xmrig.com"
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
#define APP_VER_MAJOR 6
|
#define APP_VER_MAJOR 6
|
||||||
#define APP_VER_MINOR 14
|
#define APP_VER_MINOR 14
|
||||||
#define APP_VER_PATCH 0
|
#define APP_VER_PATCH 1
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# if (_MSC_VER >= 1920)
|
# if (_MSC_VER >= 1920)
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -27,7 +21,8 @@
|
||||||
#include "base/kernel/Process.h"
|
#include "base/kernel/Process.h"
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
using namespace xmrig;
|
using namespace xmrig;
|
||||||
|
|
||||||
Process process(argc, argv);
|
Process process(argc, argv);
|
||||||
|
|
Loading…
Reference in a new issue