mirror of
https://github.com/xmrig/xmrig.git
synced 2024-12-23 12:09:22 +00:00
Merge remote-tracking branch 'remotes/origin/pr2112' into dev
This commit is contained in:
commit
0fe20fe88c
12 changed files with 131 additions and 82 deletions
|
@ -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
|
||||||
|
@ -37,6 +37,14 @@ const char *xmrig::Tags::network()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* xmrig::Tags::origin()
|
||||||
|
{
|
||||||
|
static const char* tag = YELLOW_BG_BOLD(WHITE_BOLD_S " origin ");
|
||||||
|
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *xmrig::Tags::signal()
|
const char *xmrig::Tags::signal()
|
||||||
{
|
{
|
||||||
static const char *tag = YELLOW_BG_BOLD(WHITE_BOLD_S " signal ");
|
static const char *tag = YELLOW_BG_BOLD(WHITE_BOLD_S " signal ");
|
||||||
|
|
|
@ -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
|
||||||
|
@ -32,6 +32,7 @@ class Tags
|
||||||
public:
|
public:
|
||||||
static const char *config();
|
static const char *config();
|
||||||
static const char *network();
|
static const char *network();
|
||||||
|
static const char *origin();
|
||||||
static const char *signal();
|
static const char *signal();
|
||||||
|
|
||||||
# ifdef XMRIG_MINER_PROJECT
|
# ifdef XMRIG_MINER_PROJECT
|
||||||
|
|
|
@ -260,6 +260,7 @@ void xmrig::BaseTransform::transform(rapidjson::Document &doc, int key, const ch
|
||||||
case IConfig::DryRunKey: /* --dry-run */
|
case IConfig::DryRunKey: /* --dry-run */
|
||||||
case IConfig::HttpEnabledKey: /* --http-enabled */
|
case IConfig::HttpEnabledKey: /* --http-enabled */
|
||||||
case IConfig::DaemonKey: /* --daemon */
|
case IConfig::DaemonKey: /* --daemon */
|
||||||
|
case IConfig::SubmitToOriginKey: /* --submit-to-origin */
|
||||||
case IConfig::VerboseKey: /* --verbose */
|
case IConfig::VerboseKey: /* --verbose */
|
||||||
case IConfig::PauseOnBatteryKey: /* --pause-on-battery */
|
case IConfig::PauseOnBatteryKey: /* --pause-on-battery */
|
||||||
case IConfig::PauseOnActiveKey: /* --pause-on-active */
|
case IConfig::PauseOnActiveKey: /* --pause-on-active */
|
||||||
|
@ -291,6 +292,8 @@ void xmrig::BaseTransform::transformBoolean(rapidjson::Document &doc, int key, b
|
||||||
case IConfig::TlsKey: /* --tls */
|
case IConfig::TlsKey: /* --tls */
|
||||||
return add(doc, Pools::kPools, Pool::kTls, enable);
|
return add(doc, Pools::kPools, Pool::kTls, enable);
|
||||||
|
|
||||||
|
case IConfig::SubmitToOriginKey: /* --submit-to-origin */
|
||||||
|
return add(doc, Pools::kPools, Pool::kSubmitToOrigin, enable);
|
||||||
# ifdef XMRIG_FEATURE_HTTP
|
# ifdef XMRIG_FEATURE_HTTP
|
||||||
case IConfig::DaemonKey: /* --daemon */
|
case IConfig::DaemonKey: /* --daemon */
|
||||||
return add(doc, Pools::kPools, Pool::kDaemon, enable);
|
return add(doc, Pools::kPools, Pool::kDaemon, enable);
|
||||||
|
|
|
@ -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-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
|
||||||
|
@ -87,6 +81,7 @@ public:
|
||||||
DmiKey = 1049,
|
DmiKey = 1049,
|
||||||
HugePageSizeKey = 1050,
|
HugePageSizeKey = 1050,
|
||||||
PauseOnActiveKey = 1051,
|
PauseOnActiveKey = 1051,
|
||||||
|
SubmitToOriginKey = 1052,
|
||||||
|
|
||||||
// xmrig common
|
// xmrig common
|
||||||
CPUPriorityKey = 1021,
|
CPUPriorityKey = 1021,
|
||||||
|
|
|
@ -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-2020 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2020 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-2019 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
|
||||||
|
@ -80,6 +74,7 @@ const char *Pool::kPass = "pass";
|
||||||
const char *Pool::kRigId = "rig-id";
|
const char *Pool::kRigId = "rig-id";
|
||||||
const char *Pool::kSelfSelect = "self-select";
|
const char *Pool::kSelfSelect = "self-select";
|
||||||
const char *Pool::kSOCKS5 = "socks5";
|
const char *Pool::kSOCKS5 = "socks5";
|
||||||
|
const char *Pool::kSubmitToOrigin = "submit-to-origin";
|
||||||
const char *Pool::kTls = "tls";
|
const char *Pool::kTls = "tls";
|
||||||
const char *Pool::kUrl = "url";
|
const char *Pool::kUrl = "url";
|
||||||
const char *Pool::kUser = "user";
|
const char *Pool::kUser = "user";
|
||||||
|
@ -137,7 +132,8 @@ xmrig::Pool::Pool(const rapidjson::Value &object) :
|
||||||
setKeepAlive(Json::getValue(object, kKeepalive));
|
setKeepAlive(Json::getValue(object, kKeepalive));
|
||||||
|
|
||||||
if (m_daemon.isValid()) {
|
if (m_daemon.isValid()) {
|
||||||
m_mode = MODE_SELF_SELECT;
|
m_mode = MODE_SELF_SELECT;
|
||||||
|
m_submitToOrigin = Json::getBool(object, kSubmitToOrigin, m_submitToOrigin);
|
||||||
}
|
}
|
||||||
else if (Json::getBool(object, kDaemon)) {
|
else if (Json::getBool(object, kDaemon)) {
|
||||||
m_mode = MODE_DAEMON;
|
m_mode = MODE_DAEMON;
|
||||||
|
@ -237,7 +233,7 @@ xmrig::IClient *xmrig::Pool::createClient(int id, IClientListener *listener) con
|
||||||
client = new DaemonClient(id, listener);
|
client = new DaemonClient(id, listener);
|
||||||
}
|
}
|
||||||
else if (m_mode == MODE_SELF_SELECT) {
|
else if (m_mode == MODE_SELF_SELECT) {
|
||||||
client = new SelfSelectClient(id, Platform::userAgent(), listener);
|
client = new SelfSelectClient(id, Platform::userAgent(), listener, m_submitToOrigin);
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
# ifdef XMRIG_ALGO_KAWPOW
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
|
@ -300,7 +296,8 @@ rapidjson::Value xmrig::Pool::toJSON(rapidjson::Document &doc) const
|
||||||
obj.AddMember(StringRef(kDaemonPollInterval), m_pollInterval, allocator);
|
obj.AddMember(StringRef(kDaemonPollInterval), m_pollInterval, allocator);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
obj.AddMember(StringRef(kSelfSelect), m_daemon.url().toJSON(), allocator);
|
obj.AddMember(StringRef(kSelfSelect), m_daemon.url().toJSON(), allocator);
|
||||||
|
obj.AddMember(StringRef(kSubmitToOrigin), m_submitToOrigin, allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
|
@ -319,7 +316,7 @@ std::string xmrig::Pool::printableName() const
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_mode == MODE_SELF_SELECT) {
|
if (m_mode == MODE_SELF_SELECT) {
|
||||||
out += std::string(" self-select ") + CSI "1;" + std::to_string(m_daemon.isTLS() ? 32 : 36) + "m" + m_daemon.url().data() + CLEAR;
|
out += std::string(" self-select ") + CSI "1;" + std::to_string(m_daemon.isTLS() ? 32 : 36) + "m" + m_daemon.url().data() + WHITE_BOLD_S + (m_submitToOrigin ? " submit-to-origin" : "") + CLEAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
|
|
@ -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-2020 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2016-2020 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
|
||||||
|
@ -73,6 +67,7 @@ public:
|
||||||
static const char *kRigId;
|
static const char *kRigId;
|
||||||
static const char *kSelfSelect;
|
static const char *kSelfSelect;
|
||||||
static const char *kSOCKS5;
|
static const char *kSOCKS5;
|
||||||
|
static const char *kSubmitToOrigin;
|
||||||
static const char *kTls;
|
static const char *kTls;
|
||||||
static const char *kUrl;
|
static const char *kUrl;
|
||||||
static const char *kUser;
|
static const char *kUser;
|
||||||
|
@ -144,6 +139,7 @@ private:
|
||||||
void setKeepAlive(const rapidjson::Value &value);
|
void setKeepAlive(const rapidjson::Value &value);
|
||||||
|
|
||||||
Algorithm m_algorithm;
|
Algorithm m_algorithm;
|
||||||
|
bool m_submitToOrigin = false;
|
||||||
Coin m_coin;
|
Coin m_coin;
|
||||||
int m_keepAlive = 0;
|
int m_keepAlive = 0;
|
||||||
Mode m_mode = MODE_POOL;
|
Mode m_mode = MODE_POOL;
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
/* 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) 2021 Hansie Odendaal <https://github.com/hansieodendaal>
|
||||||
* 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 2019 jtgrassie <https://github.com/jtgrassie>
|
|
||||||
* 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
|
||||||
|
@ -31,9 +26,12 @@
|
||||||
#include "base/io/json/Json.h"
|
#include "base/io/json/Json.h"
|
||||||
#include "base/io/json/JsonRequest.h"
|
#include "base/io/json/JsonRequest.h"
|
||||||
#include "base/io/log/Log.h"
|
#include "base/io/log/Log.h"
|
||||||
|
#include "base/io/log/Tags.h"
|
||||||
#include "base/net/http/Fetch.h"
|
#include "base/net/http/Fetch.h"
|
||||||
#include "base/net/http/HttpData.h"
|
#include "base/net/http/HttpData.h"
|
||||||
#include "base/net/stratum/Client.h"
|
#include "base/net/stratum/Client.h"
|
||||||
|
#include "net/JobResult.h"
|
||||||
|
#include "base/tools/Cvt.h"
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
@ -54,7 +52,8 @@ static const char * const required_fields[] = { kBlocktemplateBlob, kBlockhashin
|
||||||
} /* namespace xmrig */
|
} /* namespace xmrig */
|
||||||
|
|
||||||
|
|
||||||
xmrig::SelfSelectClient::SelfSelectClient(int id, const char *agent, IClientListener *listener) :
|
xmrig::SelfSelectClient::SelfSelectClient(int id, const char *agent, IClientListener *listener, bool submitToOrigin) :
|
||||||
|
m_submitToOrigin(submitToOrigin),
|
||||||
m_listener(listener)
|
m_listener(listener)
|
||||||
{
|
{
|
||||||
m_httpListener = std::make_shared<HttpListener>(this);
|
m_httpListener = std::make_shared<HttpListener>(this);
|
||||||
|
@ -68,6 +67,16 @@ xmrig::SelfSelectClient::~SelfSelectClient()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int64_t xmrig::SelfSelectClient::submit(const JobResult &result)
|
||||||
|
{
|
||||||
|
if (m_submitToOrigin) {
|
||||||
|
submitOriginDaemon(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_client->submit(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::SelfSelectClient::tick(uint64_t now)
|
void xmrig::SelfSelectClient::tick(uint64_t now)
|
||||||
{
|
{
|
||||||
m_client->tick(now);
|
m_client->tick(now);
|
||||||
|
@ -201,6 +210,9 @@ void xmrig::SelfSelectClient::submitBlockTemplate(rapidjson::Value &result)
|
||||||
Document doc(kObjectType);
|
Document doc(kObjectType);
|
||||||
auto &allocator = doc.GetAllocator();
|
auto &allocator = doc.GetAllocator();
|
||||||
|
|
||||||
|
m_blocktemplate = Json::getString(result,kBlocktemplateBlob);
|
||||||
|
m_blockDiff = Json::getUint64(result, kDifficulty);
|
||||||
|
|
||||||
Value params(kObjectType);
|
Value params(kObjectType);
|
||||||
params.AddMember(StringRef(kId), m_job.clientId().toJSON(), allocator);
|
params.AddMember(StringRef(kId), m_job.clientId().toJSON(), allocator);
|
||||||
params.AddMember(StringRef(kJobId), m_job.id().toJSON(), allocator);
|
params.AddMember(StringRef(kJobId), m_job.id().toJSON(), allocator);
|
||||||
|
@ -236,6 +248,44 @@ void xmrig::SelfSelectClient::submitBlockTemplate(rapidjson::Value &result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::SelfSelectClient::submitOriginDaemon(const JobResult& result)
|
||||||
|
{
|
||||||
|
if (result.diff == 0 || m_blockDiff == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.actualDiff() < m_blockDiff) {
|
||||||
|
m_originNotSubmitted++;
|
||||||
|
LOG_DEBUG("%s " RED_BOLD("not submitted to origin daemon, difficulty too low") " (%" PRId64 "/%" PRId64 ") "
|
||||||
|
BLACK_BOLD(" diff ") BLACK_BOLD("%" PRIu64) BLACK_BOLD(" vs. ") BLACK_BOLD("%" PRIu64),
|
||||||
|
Tags::origin(), m_originSubmitted, m_originNotSubmitted, m_blockDiff, result.actualDiff());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *data = m_blocktemplate.data();
|
||||||
|
Cvt::toHex(data + 78, 8, reinterpret_cast<const uint8_t*>(&result.nonce), 4);
|
||||||
|
|
||||||
|
using namespace rapidjson;
|
||||||
|
Document doc(kObjectType);
|
||||||
|
|
||||||
|
Value params(kArrayType);
|
||||||
|
params.PushBack(m_blocktemplate.toJSON(), doc.GetAllocator());
|
||||||
|
|
||||||
|
JsonRequest::create(doc, m_sequence, "submitblock", params);
|
||||||
|
m_results[m_sequence] = SubmitResult(m_sequence, result.diff, result.actualDiff(), 0, result.backend);
|
||||||
|
|
||||||
|
FetchRequest req(HTTP_POST, pool().daemon().host(), pool().daemon().port(), "/json_rpc", doc, pool().daemon().isTLS(), isQuiet());
|
||||||
|
fetch(tag(), std::move(req), m_httpListener);
|
||||||
|
|
||||||
|
m_originSubmitted++;
|
||||||
|
LOG_INFO("%s " GREEN_BOLD("submitted to origin daemon") " (%" PRId64 "/%" PRId64 ") "
|
||||||
|
" diff " WHITE("%" PRIu64) " vs. " WHITE("%" PRIu64),
|
||||||
|
Tags::origin(), m_originSubmitted, m_originNotSubmitted, m_blockDiff, result.actualDiff(), result.diff);
|
||||||
|
|
||||||
|
// Ensure that the latest block template is available after block submission
|
||||||
|
getBlockTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
void xmrig::SelfSelectClient::onHttpData(const HttpData &data)
|
void xmrig::SelfSelectClient::onHttpData(const HttpData &data)
|
||||||
{
|
{
|
||||||
if (data.status != HTTP_STATUS_OK) {
|
if (data.status != HTTP_STATUS_OK) {
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
/* 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) 2021 Hansie Odendaal <https://github.com/hansieodendaal>
|
||||||
* 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 2019 jtgrassie <https://github.com/jtgrassie>
|
|
||||||
* 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
|
||||||
|
@ -31,9 +26,9 @@
|
||||||
#include "base/kernel/interfaces/IClientListener.h"
|
#include "base/kernel/interfaces/IClientListener.h"
|
||||||
#include "base/net/http/HttpListener.h"
|
#include "base/net/http/HttpListener.h"
|
||||||
#include "base/net/stratum/Job.h"
|
#include "base/net/stratum/Job.h"
|
||||||
#include "base/tools/Object.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,7 +40,7 @@ class SelfSelectClient : public IClient, public IClientListener, public IHttpLis
|
||||||
public:
|
public:
|
||||||
XMRIG_DISABLE_COPY_MOVE_DEFAULT(SelfSelectClient)
|
XMRIG_DISABLE_COPY_MOVE_DEFAULT(SelfSelectClient)
|
||||||
|
|
||||||
SelfSelectClient(int id, const char *agent, IClientListener *listener);
|
SelfSelectClient(int id, const char *agent, IClientListener *listener, bool submitToOrigin);
|
||||||
~SelfSelectClient() override;
|
~SelfSelectClient() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -65,7 +60,6 @@ protected:
|
||||||
inline int64_t send(const rapidjson::Value &obj, Callback callback) override { return m_client->send(obj, callback); }
|
inline int64_t send(const rapidjson::Value &obj, Callback callback) override { return m_client->send(obj, callback); }
|
||||||
inline int64_t send(const rapidjson::Value &obj) override { return m_client->send(obj); }
|
inline int64_t send(const rapidjson::Value &obj) override { return m_client->send(obj); }
|
||||||
inline int64_t sequence() const override { return m_client->sequence(); }
|
inline int64_t sequence() const override { return m_client->sequence(); }
|
||||||
inline int64_t submit(const JobResult &result) override { return m_client->submit(result); }
|
|
||||||
inline void connect() override { m_client->connect(); }
|
inline void connect() override { m_client->connect(); }
|
||||||
inline void connect(const Pool &pool) override { m_client->connect(pool); }
|
inline void connect(const Pool &pool) override { m_client->connect(pool); }
|
||||||
inline void deleteLater() override { m_client->deleteLater(); }
|
inline void deleteLater() override { m_client->deleteLater(); }
|
||||||
|
@ -77,6 +71,7 @@ protected:
|
||||||
inline void setRetries(int retries) override { m_client->setRetries(retries); m_retries = retries; }
|
inline void setRetries(int retries) override { m_client->setRetries(retries); m_retries = retries; }
|
||||||
inline void setRetryPause(uint64_t ms) override { m_client->setRetryPause(ms); m_retryPause = ms; }
|
inline void setRetryPause(uint64_t ms) override { m_client->setRetryPause(ms); m_retryPause = ms; }
|
||||||
|
|
||||||
|
int64_t submit(const JobResult &result) override;
|
||||||
void tick(uint64_t now) override;
|
void tick(uint64_t now) override;
|
||||||
|
|
||||||
// IClientListener
|
// IClientListener
|
||||||
|
@ -105,19 +100,26 @@ private:
|
||||||
void retry();
|
void retry();
|
||||||
void setState(State state);
|
void setState(State state);
|
||||||
void submitBlockTemplate(rapidjson::Value &result);
|
void submitBlockTemplate(rapidjson::Value &result);
|
||||||
|
void submitOriginDaemon(const JobResult &result);
|
||||||
|
|
||||||
bool m_active = false;
|
bool m_active = false;
|
||||||
bool m_quiet = false;
|
bool m_quiet = false;
|
||||||
|
const bool m_submitToOrigin;
|
||||||
IClient *m_client;
|
IClient *m_client;
|
||||||
IClientListener *m_listener;
|
IClientListener *m_listener;
|
||||||
int m_retries = 5;
|
int m_retries = 5;
|
||||||
int64_t m_failures = 0;
|
int64_t m_failures = 0;
|
||||||
int64_t m_sequence = 1;
|
int64_t m_sequence = 1;
|
||||||
Job m_job;
|
Job m_job;
|
||||||
State m_state = IdleState;
|
State m_state = IdleState;
|
||||||
|
std::map<int64_t, SubmitResult> m_results;
|
||||||
std::shared_ptr<IHttpListener> m_httpListener;
|
std::shared_ptr<IHttpListener> m_httpListener;
|
||||||
uint64_t m_retryPause = 5000;
|
String m_blocktemplate;
|
||||||
uint64_t m_timestamp = 0;
|
uint64_t m_blockDiff = 0;
|
||||||
|
uint64_t m_originNotSubmitted = 0;
|
||||||
|
uint64_t m_originSubmitted = 0;
|
||||||
|
uint64_t m_retryPause = 5000;
|
||||||
|
uint64_t m_timestamp = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,8 @@
|
||||||
"tls-fingerprint": null,
|
"tls-fingerprint": null,
|
||||||
"daemon": false,
|
"daemon": false,
|
||||||
"socks5": null,
|
"socks5": null,
|
||||||
"self-select": null
|
"self-select": null,
|
||||||
|
"submit-to-origin": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"print-time": 60,
|
"print-time": 60,
|
||||||
|
|
|
@ -105,7 +105,8 @@ R"===(
|
||||||
"tls-fingerprint": null,
|
"tls-fingerprint": null,
|
||||||
"daemon": false,
|
"daemon": false,
|
||||||
"socks5": null,
|
"socks5": null,
|
||||||
"self-select": null
|
"self-select": null,
|
||||||
|
"submit-to-origin": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"print-time": 60,
|
"print-time": 60,
|
||||||
|
|
|
@ -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
|
||||||
|
@ -57,6 +51,7 @@ static const option options[] = {
|
||||||
{ "daemon", 0, nullptr, IConfig::DaemonKey },
|
{ "daemon", 0, nullptr, IConfig::DaemonKey },
|
||||||
{ "daemon-poll-interval", 1, nullptr, IConfig::DaemonPollKey },
|
{ "daemon-poll-interval", 1, nullptr, IConfig::DaemonPollKey },
|
||||||
{ "self-select", 1, nullptr, IConfig::SelfSelectKey },
|
{ "self-select", 1, nullptr, IConfig::SelfSelectKey },
|
||||||
|
{ "submit-to-origin", 0, nullptr, IConfig::SubmitToOriginKey },
|
||||||
# endif
|
# endif
|
||||||
{ "av", 1, nullptr, IConfig::AVKey },
|
{ "av", 1, nullptr, IConfig::AVKey },
|
||||||
{ "background", 0, nullptr, IConfig::BackgroundKey },
|
{ "background", 0, nullptr, IConfig::BackgroundKey },
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
* Copyright (c) 2010 Jeff Garzik <jgarzik@pobox.com>
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
* Copyright (c) 2012-2014 pooler <pooler@litecoinpool.org>
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright (c) 2014 Lucas Jones <https://github.com/lucasjones>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
* Copyright (c) 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
* Copyright (c) 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
* 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
|
||||||
|
@ -64,6 +63,7 @@ static inline const std::string &usage()
|
||||||
u += " --daemon use daemon RPC instead of pool for solo mining\n";
|
u += " --daemon use daemon RPC instead of pool for solo mining\n";
|
||||||
u += " --daemon-poll-interval=N daemon poll interval in milliseconds (default: 1000)\n";
|
u += " --daemon-poll-interval=N daemon poll interval in milliseconds (default: 1000)\n";
|
||||||
u += " --self-select=URL self-select block templates from URL\n";
|
u += " --self-select=URL self-select block templates from URL\n";
|
||||||
|
u += " --submit-to-origin also submit solution back to self-select URL\n";
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
u += " -r, --retries=N number of times to retry before switch to backup server (default: 5)\n";
|
u += " -r, --retries=N number of times to retry before switch to backup server (default: 5)\n";
|
||||||
|
|
Loading…
Reference in a new issue