1
0
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:
MoneroOcean
2019-02-21 15:54:11 -08:00
111 changed files with 5210 additions and 1292 deletions

View File

@@ -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 */

View File

@@ -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();
}

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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 */