Refactoring

This commit is contained in:
XMRig 2019-07-13 00:49:17 +07:00
parent be7ff62c48
commit 4643742d13
9 changed files with 39 additions and 64 deletions

View file

@ -162,7 +162,7 @@ int64_t xmrig::Client::submit(const JobResult &result)
Buffer::toHex(reinterpret_cast<const char*>(&result.nonce), 4, nonce); Buffer::toHex(reinterpret_cast<const char*>(&result.nonce), 4, nonce);
nonce[8] = '\0'; nonce[8] = '\0';
Buffer::toHex(result.result, 32, data); Buffer::toHex(result.result(), 32, data);
data[64] = '\0'; data[64] = '\0';
# endif # endif
@ -313,7 +313,7 @@ bool xmrig::Client::parseJob(const rapidjson::Value &params, int *code)
return false; return false;
} }
Job job(m_id, has<EXT_NICEHASH>(), m_pool.algorithm(), m_rpcId); Job job(has<EXT_NICEHASH>(), m_pool.algorithm(), m_rpcId);
if (!job.setId(params["job_id"].GetString())) { if (!job.setId(params["job_id"].GetString())) {
*code = 3; *code = 3;

View file

@ -212,7 +212,7 @@ bool xmrig::DaemonClient::isOutdated(uint64_t height, const char *hash) const
bool xmrig::DaemonClient::parseJob(const rapidjson::Value &params, int *code) bool xmrig::DaemonClient::parseJob(const rapidjson::Value &params, int *code)
{ {
Job job(m_id, false, m_pool.algorithm(), String()); Job job(false, m_pool.algorithm(), String());
String blocktemplate = Json::getString(params, kBlocktemplateBlob); String blocktemplate = Json::getString(params, kBlocktemplateBlob);
if (blocktemplate.isNull() || !job.setBlob(Json::getString(params, "blockhashing_blob"))) { if (blocktemplate.isNull() || !job.setBlob(Json::getString(params, "blockhashing_blob"))) {

View file

@ -34,27 +34,16 @@
xmrig::Job::Job() : xmrig::Job::Job() :
m_nicehash(false),
m_poolId(-2),
m_size(0),
m_diff(0),
m_height(0),
m_target(0),
m_blob(), m_blob(),
m_seedHash() m_seedHash()
{ {
} }
xmrig::Job::Job(int poolId, bool nicehash, const Algorithm &algorithm, const String &clientId) : xmrig::Job::Job(bool nicehash, const Algorithm &algorithm, const String &clientId) :
m_algorithm(algorithm), m_algorithm(algorithm),
m_nicehash(nicehash), m_nicehash(nicehash),
m_poolId(poolId),
m_size(0),
m_clientId(clientId), m_clientId(clientId),
m_diff(0),
m_height(0),
m_target(0),
m_blob(), m_blob(),
m_seedHash() m_seedHash()
{ {

View file

@ -47,7 +47,7 @@ public:
static constexpr const size_t kMaxBlobSize = 128; static constexpr const size_t kMaxBlobSize = 128;
Job(); Job();
Job(int poolId, bool nicehash, const Algorithm &algorithm, const String &clientId); Job(bool nicehash, const Algorithm &algorithm, const String &clientId);
~Job(); ~Job();
bool isEqual(const Job &other) const; bool isEqual(const Job &other) const;
@ -65,18 +65,18 @@ public:
inline const uint32_t *nonce() const { return reinterpret_cast<const uint32_t*>(m_blob + 39); } inline const uint32_t *nonce() const { return reinterpret_cast<const uint32_t*>(m_blob + 39); }
inline const uint8_t *blob() const { return m_blob; } inline const uint8_t *blob() const { return m_blob; }
inline const uint8_t *seedHash() const { return m_seedHash; } inline const uint8_t *seedHash() const { return m_seedHash; }
inline int poolId() const { return m_poolId; }
inline size_t size() const { return m_size; } inline size_t size() const { return m_size; }
inline uint32_t *nonce() { return reinterpret_cast<uint32_t*>(m_blob + 39); } inline uint32_t *nonce() { return reinterpret_cast<uint32_t*>(m_blob + 39); }
inline uint64_t diff() const { return m_diff; } inline uint64_t diff() const { return m_diff; }
inline uint64_t height() const { return m_height; } inline uint64_t height() const { return m_height; }
inline uint64_t target() const { return m_target; } inline uint64_t target() const { return m_target; }
inline uint8_t fixedByte() const { return *(m_blob + 42); } inline uint8_t fixedByte() const { return *(m_blob + 42); }
inline uint8_t index() const { return m_index; }
inline void reset() { m_size = 0; m_diff = 0; } inline void reset() { m_size = 0; m_diff = 0; }
inline void setAlgorithm(const char *algo) { m_algorithm = algo; } inline void setAlgorithm(const char *algo) { m_algorithm = algo; }
inline void setClientId(const String &id) { m_clientId = id; } inline void setClientId(const String &id) { m_clientId = id; }
inline void setHeight(uint64_t height) { m_height = height; } inline void setHeight(uint64_t height) { m_height = height; }
inline void setPoolId(int poolId) { m_poolId = poolId; } inline void setIndex(uint8_t index) { m_index = index; }
# ifdef XMRIG_PROXY_PROJECT # ifdef XMRIG_PROXY_PROJECT
inline char *rawBlob() { return m_rawBlob; } inline char *rawBlob() { return m_rawBlob; }
@ -93,15 +93,15 @@ public:
private: private:
Algorithm m_algorithm; Algorithm m_algorithm;
bool m_nicehash; bool m_nicehash = false;
int m_poolId; size_t m_size = 0;
size_t m_size;
String m_clientId; String m_clientId;
String m_id; String m_id;
uint64_t m_diff; uint64_t m_diff = 0;
uint64_t m_height; uint64_t m_height = 0;
uint64_t m_target; uint64_t m_target = 0;
uint8_t m_blob[kMaxBlobSize]; uint8_t m_blob[kMaxBlobSize];
uint8_t m_index = 0;
uint8_t m_seedHash[32]; uint8_t m_seedHash[32];
# ifdef XMRIG_PROXY_PROJECT # ifdef XMRIG_PROXY_PROJECT

View file

@ -56,7 +56,7 @@ public:
return; return;
} }
if (index() == 1 && job.poolId() >= 0 && job == m_jobs[0]) { if (index() == 1 && job.index() == 0 && job == m_jobs[0]) {
return; return;
} }
@ -84,7 +84,7 @@ public:
private: private:
inline void save(const Job &job, uint32_t reserveCount) inline void save(const Job &job, uint32_t reserveCount)
{ {
m_index = job.poolId() == -1 ? 1 : 0; m_index = job.index();
const size_t size = job.size(); const size_t size = job.size();
m_jobs[index()] = job; m_jobs[index()] = job;
m_rounds[index()] = 0; m_rounds[index()] = 0;
@ -128,7 +128,7 @@ inline void xmrig::WorkerJob<1>::nextRound(uint32_t reserveCount)
template<> template<>
inline void xmrig::WorkerJob<1>::save(const Job &job, uint32_t reserveCount) inline void xmrig::WorkerJob<1>::save(const Job &job, uint32_t reserveCount)
{ {
m_index = job.poolId() == -1 ? 1 : 0; m_index = job.index();
m_jobs[index()] = job; m_jobs[index()] = job;
m_rounds[index()] = 0; m_rounds[index()] = 0;

View file

@ -41,43 +41,31 @@ namespace xmrig {
class JobResult class JobResult
{ {
public: public:
inline JobResult() : poolId(0), nonce(0), diff(0) {} inline JobResult() {}
inline JobResult(int poolId, const String &jobId, const String &clientId, uint32_t nonce, const uint8_t *result, uint64_t diff, const Algorithm &algorithm) :
algorithm(algorithm), inline JobResult(const Job &job, uint32_t nonce, const uint8_t *result) :
poolId(poolId), algorithm(job.algorithm()),
clientId(clientId), clientId(job.clientId()),
jobId(jobId), jobId(job.id()),
nonce(nonce), nonce(nonce),
diff(diff) diff(job.diff()),
index(job.index())
{ {
memcpy(this->result, result, sizeof(this->result)); memcpy(m_result, result, sizeof(m_result));
} }
inline const uint8_t *result() const { return m_result; }
inline uint64_t actualDiff() const { return Job::toDiff(reinterpret_cast<const uint64_t*>(m_result)[3]); }
inline JobResult(const Job &job) : poolId(0), nonce(0), diff(0) const Algorithm algorithm;
{ const String clientId;
jobId = job.id(); const String jobId;
clientId = job.clientId(); const uint32_t nonce = 0;
poolId = job.poolId(); const uint64_t diff = 0;
diff = job.diff(); const uint8_t index = 0;
nonce = *job.nonce();
algorithm = job.algorithm();
}
private:
inline uint64_t actualDiff() const uint8_t m_result[32];
{
return Job::toDiff(reinterpret_cast<const uint64_t*>(result)[3]);
}
Algorithm algorithm;
int poolId;
String clientId;
String jobId;
uint32_t nonce;
uint64_t diff;
uint8_t result[32];
}; };

View file

@ -144,7 +144,7 @@ void xmrig::Network::onJob(IStrategy *strategy, IClient *client, const Job &job)
void xmrig::Network::onJobResult(const JobResult &result) void xmrig::Network::onJobResult(const JobResult &result)
{ {
if (result.poolId == -1 && m_donate) { if (result.index == 1 && m_donate) {
m_donate->submit(result); m_donate->submit(result);
return; return;
} }

View file

@ -173,7 +173,7 @@ void xmrig::MultiWorker<N>::start()
for (size_t i = 0; i < N; ++i) { for (size_t i = 0; i < N; ++i) {
if (*reinterpret_cast<uint64_t*>(m_hash + (i * 32) + 24) < job.target()) { if (*reinterpret_cast<uint64_t*>(m_hash + (i * 32) + 24) < job.target()) {
JobResults::submit(JobResult(job.poolId(), job.id(), job.clientId(), *m_job.nonce(i), m_hash + (i * 32), job.diff(), job.algorithm())); JobResults::submit(JobResult(job, *m_job.nonce(i), m_hash + (i * 32)));
} }
} }

View file

@ -150,11 +150,9 @@ void Workers::setEnabled(bool enabled)
void Workers::setJob(const xmrig::Job &job, bool donate) void Workers::setJob(const xmrig::Job &job, bool donate)
{ {
uv_rwlock_wrlock(&m_rwlock); uv_rwlock_wrlock(&m_rwlock);
m_job = job;
if (donate) { m_job = job;
m_job.setPoolId(-1); m_job.setIndex(donate ? 1 : 0);
}
xmrig::Nonce::reset(donate ? 1 : 0); xmrig::Nonce::reset(donate ? 1 : 0);