mirror of
https://github.com/xmrig/xmrig.git
synced 2026-02-02 02:03:03 -05:00
xmrig v2.13.0 rebase
This commit is contained in:
@@ -5,7 +5,9 @@
|
||||
* 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 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||
* 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
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -32,17 +34,20 @@
|
||||
#include "common/net/Job.h"
|
||||
|
||||
|
||||
namespace xmrig {
|
||||
|
||||
|
||||
class JobResult
|
||||
{
|
||||
public:
|
||||
inline JobResult() : poolId(0), diff(0), nonce(0) {}
|
||||
inline JobResult(int poolId, const xmrig::Id &jobId, const xmrig::Id &clientId, uint32_t nonce, const uint8_t *result, uint32_t diff, const xmrig::Algorithm &algorithm) :
|
||||
poolId(poolId),
|
||||
diff(diff),
|
||||
nonce(nonce),
|
||||
inline JobResult(int poolId, const Id &jobId, const Id &clientId, uint32_t nonce, const uint8_t *result, uint32_t diff, const Algorithm &algorithm) :
|
||||
algorithm(algorithm),
|
||||
clientId(clientId),
|
||||
jobId(jobId)
|
||||
jobId(jobId),
|
||||
poolId(poolId),
|
||||
diff(diff),
|
||||
nonce(nonce)
|
||||
{
|
||||
memcpy(this->result, result, sizeof(this->result));
|
||||
}
|
||||
@@ -65,13 +70,17 @@ public:
|
||||
}
|
||||
|
||||
|
||||
Algorithm algorithm;
|
||||
Id clientId;
|
||||
Id jobId;
|
||||
int poolId;
|
||||
uint32_t diff;
|
||||
uint32_t nonce;
|
||||
uint8_t result[32];
|
||||
xmrig::Algorithm algorithm;
|
||||
xmrig::Id clientId;
|
||||
xmrig::Id jobId;
|
||||
};
|
||||
|
||||
|
||||
} /* namespace xmrig */
|
||||
|
||||
|
||||
#endif /* XMRIG_JOBRESULT_H */
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
#include "api/Api.h"
|
||||
#include "common/log/Log.h"
|
||||
#include "common/net/Client.h"
|
||||
#include "common/net/strategies/FailoverStrategy.h"
|
||||
#include "common/net/strategies/SinglePoolStrategy.h"
|
||||
#include "common/net/SubmitResult.h"
|
||||
#include "core/Config.h"
|
||||
#include "core/Controller.h"
|
||||
@@ -44,25 +42,17 @@
|
||||
#include "workers/Workers.h"
|
||||
|
||||
|
||||
Network::Network(xmrig::Controller *controller) :
|
||||
m_donate(nullptr),
|
||||
m_controller(controller)
|
||||
xmrig::Network::Network(Controller *controller) :
|
||||
m_donate(nullptr)
|
||||
{
|
||||
srand(time(0) ^ (uintptr_t) this);
|
||||
|
||||
Workers::setListener(this);
|
||||
controller->addListener(this);
|
||||
|
||||
const std::vector<Pool> &pools = controller->config()->pools();
|
||||
|
||||
if (pools.size() > 1) {
|
||||
m_strategy = new FailoverStrategy(pools, controller->config()->retryPause(), controller->config()->retries(), this);
|
||||
}
|
||||
else {
|
||||
m_strategy = new SinglePoolStrategy(pools.front(), controller->config()->retryPause(), controller->config()->retries(), this);
|
||||
}
|
||||
const Pools &pools = controller->config()->pools();
|
||||
m_strategy = pools.createStrategy(this);
|
||||
|
||||
if (controller->config()->donateLevel() > 0) {
|
||||
m_donate = new DonateStrategy(controller->config()->donateLevel(), controller->config()->pools().front().user(), controller->config()->algorithm().algo(), this);
|
||||
m_donate = new DonateStrategy(controller->config()->donateLevel(), pools.data().front().user(), controller->config()->algorithm().algo(), this);
|
||||
}
|
||||
|
||||
m_timer.data = this;
|
||||
@@ -72,18 +62,19 @@ Network::Network(xmrig::Controller *controller) :
|
||||
}
|
||||
|
||||
|
||||
Network::~Network()
|
||||
xmrig::Network::~Network()
|
||||
{
|
||||
delete m_strategy;
|
||||
}
|
||||
|
||||
|
||||
void Network::connect()
|
||||
void xmrig::Network::connect()
|
||||
{
|
||||
m_strategy->connect();
|
||||
}
|
||||
|
||||
|
||||
void Network::stop()
|
||||
void xmrig::Network::stop()
|
||||
{
|
||||
if (m_donate) {
|
||||
m_donate->stop();
|
||||
@@ -93,7 +84,7 @@ void Network::stop()
|
||||
}
|
||||
|
||||
|
||||
void Network::onActive(IStrategy *strategy, Client *client)
|
||||
void xmrig::Network::onActive(IStrategy *strategy, Client *client)
|
||||
{
|
||||
if (m_donate && m_donate == strategy) {
|
||||
LOG_NOTICE("dev donate started");
|
||||
@@ -114,7 +105,23 @@ void Network::onActive(IStrategy *strategy, Client *client)
|
||||
}
|
||||
|
||||
|
||||
void Network::onJob(IStrategy *strategy, Client *client, const Job &job)
|
||||
void xmrig::Network::onConfigChanged(Config *config, Config *previousConfig)
|
||||
{
|
||||
if (config->pools() == previousConfig->pools() || !config->pools().active()) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_strategy->stop();
|
||||
|
||||
config->pools().print();
|
||||
|
||||
delete m_strategy;
|
||||
m_strategy = config->pools().createStrategy(this);
|
||||
connect();
|
||||
}
|
||||
|
||||
|
||||
void xmrig::Network::onJob(IStrategy *strategy, Client *client, const Job &job)
|
||||
{
|
||||
if (m_donate && m_donate->isActive() && m_donate != strategy) {
|
||||
return;
|
||||
@@ -124,7 +131,7 @@ void Network::onJob(IStrategy *strategy, Client *client, const Job &job)
|
||||
}
|
||||
|
||||
|
||||
void Network::onJobResult(const JobResult &result)
|
||||
void xmrig::Network::onJobResult(const JobResult &result)
|
||||
{
|
||||
if (result.poolId == -1 && m_donate) {
|
||||
m_donate->submit(result);
|
||||
@@ -135,7 +142,7 @@ void Network::onJobResult(const JobResult &result)
|
||||
}
|
||||
|
||||
|
||||
void Network::onPause(IStrategy *strategy)
|
||||
void xmrig::Network::onPause(IStrategy *strategy)
|
||||
{
|
||||
if (m_donate && m_donate == strategy) {
|
||||
LOG_NOTICE("dev donate finished");
|
||||
@@ -150,7 +157,7 @@ void Network::onPause(IStrategy *strategy)
|
||||
}
|
||||
|
||||
|
||||
void Network::onResultAccepted(IStrategy *strategy, Client *client, const SubmitResult &result, const char *error)
|
||||
void xmrig::Network::onResultAccepted(IStrategy *, Client *, const SubmitResult &result, const char *error)
|
||||
{
|
||||
m_state.add(result, error);
|
||||
|
||||
@@ -167,13 +174,13 @@ void Network::onResultAccepted(IStrategy *strategy, Client *client, const Submit
|
||||
}
|
||||
|
||||
|
||||
bool Network::isColors() const
|
||||
bool xmrig::Network::isColors() const
|
||||
{
|
||||
return m_controller->config()->isColors();
|
||||
return Log::colors;
|
||||
}
|
||||
|
||||
|
||||
void Network::setJob(Client *client, const Job &job, bool donate)
|
||||
void xmrig::Network::setJob(Client *client, const Job &job, bool donate)
|
||||
{
|
||||
if (job.height()) {
|
||||
LOG_INFO(isColors() ? MAGENTA_BOLD("new job") " from " WHITE_BOLD("%s:%d") " diff " WHITE_BOLD("%d") " algo " WHITE_BOLD("%s") " height " WHITE_BOLD("%" PRIu64)
|
||||
@@ -195,7 +202,7 @@ void Network::setJob(Client *client, const Job &job, bool donate)
|
||||
}
|
||||
|
||||
|
||||
void Network::tick()
|
||||
void xmrig::Network::tick()
|
||||
{
|
||||
const uint64_t now = uv_now(uv_default_loop());
|
||||
|
||||
@@ -211,7 +218,7 @@ void Network::tick()
|
||||
}
|
||||
|
||||
|
||||
void Network::onTick(uv_timer_t *handle)
|
||||
void xmrig::Network::onTick(uv_timer_t *handle)
|
||||
{
|
||||
static_cast<Network*>(handle->data)->tick();
|
||||
}
|
||||
|
||||
@@ -31,50 +31,52 @@
|
||||
|
||||
|
||||
#include "api/NetworkState.h"
|
||||
#include "common/interfaces/IControllerListener.h"
|
||||
#include "common/interfaces/IStrategyListener.h"
|
||||
#include "interfaces/IJobResultListener.h"
|
||||
|
||||
|
||||
class IStrategy;
|
||||
class Url;
|
||||
|
||||
|
||||
namespace xmrig {
|
||||
class Controller;
|
||||
}
|
||||
|
||||
|
||||
class Network : public IJobResultListener, public IStrategyListener
|
||||
class Controller;
|
||||
class IStrategy;
|
||||
|
||||
|
||||
class Network : public IJobResultListener, public IStrategyListener, public IControllerListener
|
||||
{
|
||||
public:
|
||||
Network(xmrig::Controller *controller);
|
||||
~Network() override;
|
||||
Network(Controller *controller);
|
||||
~Network() override;
|
||||
|
||||
void connect();
|
||||
void stop();
|
||||
void connect();
|
||||
void stop();
|
||||
|
||||
protected:
|
||||
void onActive(IStrategy *strategy, Client *client) override;
|
||||
void onJob(IStrategy *strategy, Client *client, const Job &job) override;
|
||||
void onJobResult(const JobResult &result) override;
|
||||
void onPause(IStrategy *strategy) override;
|
||||
void onResultAccepted(IStrategy *strategy, Client *client, const SubmitResult &result, const char *error) override;
|
||||
void onActive(IStrategy *strategy, Client *client) override;
|
||||
void onConfigChanged(Config *config, Config *previousConfig) override;
|
||||
void onJob(IStrategy *strategy, Client *client, const Job &job) override;
|
||||
void onJobResult(const JobResult &result) override;
|
||||
void onPause(IStrategy *strategy) override;
|
||||
void onResultAccepted(IStrategy *strategy, Client *client, const SubmitResult &result, const char *error) override;
|
||||
|
||||
private:
|
||||
constexpr static int kTickInterval = 1 * 1000;
|
||||
constexpr static int kTickInterval = 1 * 1000;
|
||||
|
||||
bool isColors() const;
|
||||
void setJob(Client *client, const Job &job, bool donate);
|
||||
void tick();
|
||||
bool isColors() const;
|
||||
void setJob(Client *client, const Job &job, bool donate);
|
||||
void tick();
|
||||
|
||||
static void onTick(uv_timer_t *handle);
|
||||
static void onTick(uv_timer_t *handle);
|
||||
|
||||
IStrategy *m_donate;
|
||||
IStrategy *m_strategy;
|
||||
NetworkState m_state;
|
||||
uv_timer_t m_timer;
|
||||
xmrig::Controller *m_controller;
|
||||
IStrategy *m_donate;
|
||||
IStrategy *m_strategy;
|
||||
NetworkState m_state;
|
||||
uv_timer_t m_timer;
|
||||
};
|
||||
|
||||
|
||||
} /* namespace xmrig */
|
||||
|
||||
|
||||
#endif /* XMRIG_NETWORK_H */
|
||||
|
||||
@@ -39,7 +39,7 @@ static inline float randomf(float min, float max) {
|
||||
}
|
||||
|
||||
|
||||
DonateStrategy::DonateStrategy(int level, const char *user, xmrig::Algo algo, IStrategyListener *listener) :
|
||||
xmrig::DonateStrategy::DonateStrategy(int level, const char *user, Algo algo, IStrategyListener *listener) :
|
||||
m_active(false),
|
||||
m_donateTime(level * 60 * 1000),
|
||||
m_idleTime((100 - level) * 60 * 1000),
|
||||
@@ -57,7 +57,7 @@ DonateStrategy::DonateStrategy(int level, const char *user, xmrig::Algo algo, IS
|
||||
m_pools.push_back(Pool("xmrig.moneroocean.stream", 10001, donate_user, nullptr, false, true));
|
||||
|
||||
for (Pool &pool : m_pools) {
|
||||
pool.adjust(xmrig::Algorithm(algo, xmrig::VARIANT_AUTO));
|
||||
pool.adjust(Algorithm(algo, VARIANT_AUTO));
|
||||
}
|
||||
|
||||
if (m_pools.size() > 1) {
|
||||
@@ -74,38 +74,38 @@ DonateStrategy::DonateStrategy(int level, const char *user, xmrig::Algo algo, IS
|
||||
}
|
||||
|
||||
|
||||
DonateStrategy::~DonateStrategy()
|
||||
xmrig::DonateStrategy::~DonateStrategy()
|
||||
{
|
||||
delete m_strategy;
|
||||
}
|
||||
|
||||
|
||||
int64_t DonateStrategy::submit(const JobResult &result)
|
||||
int64_t xmrig::DonateStrategy::submit(const JobResult &result)
|
||||
{
|
||||
return m_strategy->submit(result);
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::connect()
|
||||
void xmrig::DonateStrategy::connect()
|
||||
{
|
||||
m_strategy->connect();
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::setAlgo(const xmrig::Algorithm &algo)
|
||||
void xmrig::DonateStrategy::setAlgo(const xmrig::Algorithm &algo)
|
||||
{
|
||||
m_strategy->setAlgo(algo);
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::stop()
|
||||
void xmrig::DonateStrategy::stop()
|
||||
{
|
||||
uv_timer_stop(&m_timer);
|
||||
m_strategy->stop();
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::tick(uint64_t now)
|
||||
void xmrig::DonateStrategy::tick(uint64_t now)
|
||||
{
|
||||
m_now = now;
|
||||
|
||||
@@ -118,7 +118,7 @@ void DonateStrategy::tick(uint64_t now)
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::onActive(IStrategy *strategy, Client *client)
|
||||
void xmrig::DonateStrategy::onActive(IStrategy *strategy, Client *client)
|
||||
{
|
||||
if (!isActive()) {
|
||||
uv_timer_start(&m_timer, DonateStrategy::onTimer, m_donateTime, 0);
|
||||
@@ -129,7 +129,7 @@ void DonateStrategy::onActive(IStrategy *strategy, Client *client)
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::onJob(IStrategy *strategy, Client *client, const Job &job)
|
||||
void xmrig::DonateStrategy::onJob(IStrategy *strategy, Client *client, const Job &job)
|
||||
{
|
||||
if (isActive()) {
|
||||
m_listener->onJob(this, client, job);
|
||||
@@ -137,24 +137,24 @@ void DonateStrategy::onJob(IStrategy *strategy, Client *client, const Job &job)
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::onPause(IStrategy *strategy)
|
||||
void xmrig::DonateStrategy::onPause(IStrategy *strategy)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::onResultAccepted(IStrategy *strategy, Client *client, const SubmitResult &result, const char *error)
|
||||
void xmrig::DonateStrategy::onResultAccepted(IStrategy *strategy, Client *client, const SubmitResult &result, const char *error)
|
||||
{
|
||||
m_listener->onResultAccepted(this, client, result, error);
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::idle(uint64_t timeout)
|
||||
void xmrig::DonateStrategy::idle(uint64_t timeout)
|
||||
{
|
||||
uv_timer_start(&m_timer, DonateStrategy::onTimer, timeout, 0);
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::suspend()
|
||||
void xmrig::DonateStrategy::suspend()
|
||||
{
|
||||
# if defined(XMRIG_AMD_PROJECT) || defined(XMRIG_NVIDIA_PROJECT)
|
||||
m_stop = m_now + 5000;
|
||||
@@ -169,7 +169,7 @@ void DonateStrategy::suspend()
|
||||
}
|
||||
|
||||
|
||||
void DonateStrategy::onTimer(uv_timer_t *handle)
|
||||
void xmrig::DonateStrategy::onTimer(uv_timer_t *handle)
|
||||
{
|
||||
auto strategy = static_cast<DonateStrategy*>(handle->data);
|
||||
|
||||
|
||||
@@ -30,21 +30,23 @@
|
||||
#include <vector>
|
||||
|
||||
|
||||
#include "common/net/Pool.h"
|
||||
#include "base/net/Pool.h"
|
||||
#include "common/interfaces/IClientListener.h"
|
||||
#include "common/interfaces/IStrategy.h"
|
||||
#include "common/interfaces/IStrategyListener.h"
|
||||
|
||||
|
||||
namespace xmrig {
|
||||
|
||||
|
||||
class Client;
|
||||
class IStrategyListener;
|
||||
class Url;
|
||||
|
||||
|
||||
class DonateStrategy : public IStrategy, public IStrategyListener
|
||||
{
|
||||
public:
|
||||
DonateStrategy(int level, const char *user, xmrig::Algo algo, IStrategyListener *listener);
|
||||
DonateStrategy(int level, const char *user, Algo algo, IStrategyListener *listener);
|
||||
~DonateStrategy() override;
|
||||
|
||||
public:
|
||||
@@ -53,7 +55,7 @@ public:
|
||||
|
||||
int64_t submit(const JobResult &result) override;
|
||||
void connect() override;
|
||||
void setAlgo(const xmrig::Algorithm &algo) override;
|
||||
void setAlgo(const Algorithm &algo) override;
|
||||
void stop() override;
|
||||
void tick(uint64_t now) override;
|
||||
|
||||
@@ -80,4 +82,8 @@ private:
|
||||
uv_timer_t m_timer;
|
||||
};
|
||||
|
||||
|
||||
} /* namespace xmrig */
|
||||
|
||||
|
||||
#endif /* XMRIG_DONATESTRATEGY_H */
|
||||
|
||||
Reference in New Issue
Block a user