Sync changes with the proxy.

This commit is contained in:
XMRig 2024-08-06 23:32:20 +07:00
parent 98c775703e
commit 3dfeed475f
No known key found for this signature in database
GPG key ID: 446A53638BE94409
3 changed files with 33 additions and 32 deletions

View file

@ -363,7 +363,7 @@ bool xmrig::Client::parseJob(const rapidjson::Value &params, int *code)
Job job(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(Json::getString(params, "job_id"))) {
*code = 3; *code = 3;
return false; return false;
} }
@ -400,7 +400,7 @@ bool xmrig::Client::parseJob(const rapidjson::Value &params, int *code)
} }
} }
if (!job.setTarget(params["target"].GetString())) { if (!job.setTarget(Json::getString(params, "target"))) {
*code = 5; *code = 5;
return false; return false;
} }

View file

@ -110,16 +110,12 @@ bool xmrig::Job::setSeedHash(const char *hash)
bool xmrig::Job::setTarget(const char *target) bool xmrig::Job::setTarget(const char *target)
{ {
static auto parse = [](const char *target, const Algorithm &algorithm) -> uint64_t { static auto parse = [](const char *target, size_t size, const Algorithm &algorithm) -> uint64_t {
if (!target) {
return 0;
}
if (algorithm == Algorithm::RX_YADA) { if (algorithm == Algorithm::RX_YADA) {
return strtoull(target, nullptr, 16); return strtoull(target, nullptr, 16);
} }
const auto raw = Cvt::fromHex(target, strlen(target)); const auto raw = Cvt::fromHex(target, size);
switch (raw.size()) { switch (raw.size()) {
case 4: case 4:
@ -135,23 +131,48 @@ bool xmrig::Job::setTarget(const char *target)
return 0; return 0;
}; };
if ((m_target = parse(target, algorithm())) == 0) { const size_t size = target ? strlen(target) : 0;
if (size < 4 || (m_target = parse(target, size, algorithm())) == 0) {
return false; return false;
} }
m_diff = toDiff(m_target); m_diff = toDiff(m_target);
# ifdef XMRIG_PROXY_PROJECT # ifdef XMRIG_PROXY_PROJECT
assert(sizeof(m_rawTarget) > (size * 2)); if (size >= sizeof(m_rawTarget)) {
return false;
}
memset(m_rawTarget, 0, sizeof(m_rawTarget)); memset(m_rawTarget, 0, sizeof(m_rawTarget));
memcpy(m_rawTarget, target, std::min(size * 2, sizeof(m_rawTarget))); memcpy(m_rawTarget, target, size);
# endif # endif
return true; return true;
} }
size_t xmrig::Job::nonceOffset() const
{
switch (algorithm().family()) {
case Algorithm::KAWPOW:
return 32;
case Algorithm::GHOSTRIDER:
return 76;
default:
break;
}
if (algorithm() == Algorithm::RX_YADA) {
return 147;
}
return 39;
}
void xmrig::Job::setDiff(uint64_t diff) void xmrig::Job::setDiff(uint64_t diff)
{ {
m_diff = diff; m_diff = diff;
@ -182,26 +203,6 @@ void xmrig::Job::setSigKey(const char *sig_key)
} }
int32_t xmrig::Job::nonceOffset() const
{
switch (algorithm().family()) {
case Algorithm::KAWPOW:
return 32;
case Algorithm::GHOSTRIDER:
return 76;
default:
break;
}
if (algorithm() == Algorithm::RX_YADA) {
return 147;
}
return 39;
}
uint32_t xmrig::Job::getNumTransactions() const uint32_t xmrig::Job::getNumTransactions() const
{ {
if (!(m_algorithm.isCN() || m_algorithm.family() == Algorithm::RANDOM_X)) { if (!(m_algorithm.isCN() || m_algorithm.family() == Algorithm::RANDOM_X)) {

View file

@ -61,6 +61,7 @@ public:
bool setBlob(const char *blob); bool setBlob(const char *blob);
bool setSeedHash(const char *hash); bool setSeedHash(const char *hash);
bool setTarget(const char *target); bool setTarget(const char *target);
size_t nonceOffset() const;
void setDiff(uint64_t diff); void setDiff(uint64_t diff);
void setSigKey(const char *sig_key); void setSigKey(const char *sig_key);
@ -75,7 +76,6 @@ public:
inline const String &poolWallet() const { return m_poolWallet; } inline const String &poolWallet() const { return m_poolWallet; }
inline const uint32_t *nonce() const { return reinterpret_cast<const uint32_t*>(m_blob + nonceOffset()); } inline const uint32_t *nonce() const { return reinterpret_cast<const uint32_t*>(m_blob + nonceOffset()); }
inline const uint8_t *blob() const { return m_blob; } inline const uint8_t *blob() const { return m_blob; }
int32_t nonceOffset() const;
inline size_t nonceSize() const { return (algorithm().family() == Algorithm::KAWPOW) ? 8 : 4; } inline size_t nonceSize() const { return (algorithm().family() == Algorithm::KAWPOW) ? 8 : 4; }
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 + nonceOffset()); } inline uint32_t *nonce() { return reinterpret_cast<uint32_t*>(m_blob + nonceOffset()); }