1
0
mirror of https://github.com/xmrig/xmrig.git synced 2026-02-01 09:43:03 -05:00

Merge pull request #3775 from SChernykh/dev

RandomX v2: added `commitment` field to stratum submit message
This commit is contained in:
xmrig
2026-02-01 19:57:41 +07:00
committed by GitHub
6 changed files with 49 additions and 15 deletions

View File

@@ -363,8 +363,20 @@ void xmrig::CpuWorker<N>::start()
} }
else else
# endif # endif
if (value < job.target()) { if (value < job.target()) {
JobResults::submit(job, current_job_nonces[i], m_hash + (i * 32), job.hasMinerSignature() ? miner_signature_saved : nullptr); uint8_t* extra_data = nullptr;
if (job.algorithm().family() == Algorithm::RANDOM_X) {
if (RandomX_CurrentConfig.Tweak_V2_COMMITMENT) {
extra_data = m_commitment;
}
else if (job.hasMinerSignature()) {
extra_data = miner_signature_saved;
}
}
JobResults::submit(job, current_job_nonces[i], m_hash + (i * 32), extra_data);
} }
} }
m_count += N; m_count += N;

View File

@@ -81,7 +81,7 @@ xmrig::Client::Client(int id, const char *agent, IClientListener *listener) :
BaseClient(id, listener), BaseClient(id, listener),
m_agent(agent), m_agent(agent),
m_sendBuf(1024), m_sendBuf(1024),
m_tempBuf(256) m_tempBuf(320)
{ {
m_reader.setListener(this); m_reader.setListener(this);
m_key = m_storage.add(this); m_key = m_storage.add(this);
@@ -199,6 +199,7 @@ int64_t xmrig::Client::submit(const JobResult &result)
char *nonce = m_tempBuf.data(); char *nonce = m_tempBuf.data();
char *data = m_tempBuf.data() + 16; char *data = m_tempBuf.data() + 16;
char *signature = m_tempBuf.data() + 88; char *signature = m_tempBuf.data() + 88;
char *commitment = m_tempBuf.data() + 224;
Cvt::toHex(nonce, sizeof(uint32_t) * 2 + 1, reinterpret_cast<const uint8_t *>(&result.nonce), sizeof(uint32_t)); Cvt::toHex(nonce, sizeof(uint32_t) * 2 + 1, reinterpret_cast<const uint8_t *>(&result.nonce), sizeof(uint32_t));
Cvt::toHex(data, 65, result.result(), 32); Cvt::toHex(data, 65, result.result(), 32);
@@ -206,6 +207,10 @@ int64_t xmrig::Client::submit(const JobResult &result)
if (result.minerSignature()) { if (result.minerSignature()) {
Cvt::toHex(signature, 129, result.minerSignature(), 64); Cvt::toHex(signature, 129, result.minerSignature(), 64);
} }
if (result.commitment()) {
Cvt::toHex(commitment, 65, result.commitment(), 32);
}
# endif # endif
Document doc(kObjectType); Document doc(kObjectType);
@@ -227,6 +232,12 @@ int64_t xmrig::Client::submit(const JobResult &result)
} }
# endif # endif
# ifndef XMRIG_PROXY_PROJECT
if (result.commitment()) {
params.AddMember("commitment", StringRef(commitment), allocator);
}
# endif
if (has<EXT_ALGO>() && result.algorithm.isValid()) { if (has<EXT_ALGO>() && result.algorithm.isValid()) {
params.AddMember("algo", StringRef(result.algorithm.name()), allocator); params.AddMember("algo", StringRef(result.algorithm.name()), allocator);
} }

View File

@@ -1379,10 +1379,10 @@ namespace randomx {
if (RandomX_CurrentConfig.Tweak_V2_CFROUND) { if (RandomX_CurrentConfig.Tweak_V2_CFROUND) {
if (BranchesWithin32B) { if (BranchesWithin32B) {
const uint32_t branch_begin = static_cast<uint32_t>(pos + 2) & 31; const uint32_t branch_begin = pos & 31;
// If the jump crosses or touches 32-byte boundary, align it // If the jump crosses or touches 32-byte boundary, align it
if (branch_begin >= 30) { if (branch_begin >= 28) {
const uint32_t alignment_size = 32 - branch_begin; const uint32_t alignment_size = 32 - branch_begin;
emit(NOPX[alignment_size - 1], alignment_size, code, pos); emit(NOPX[alignment_size - 1], alignment_size, code, pos);
} }
@@ -1438,10 +1438,10 @@ namespace randomx {
if (RandomX_CurrentConfig.Tweak_V2_CFROUND) { if (RandomX_CurrentConfig.Tweak_V2_CFROUND) {
if (BranchesWithin32B) { if (BranchesWithin32B) {
const uint32_t branch_begin = static_cast<uint32_t>(pos + 2) & 31; const uint32_t branch_begin = pos & 31;
// If the jump crosses or touches 32-byte boundary, align it // If the jump crosses or touches 32-byte boundary, align it
if (branch_begin >= 30) { if (branch_begin >= 28) {
const uint32_t alignment_size = 32 - branch_begin; const uint32_t alignment_size = 32 - branch_begin;
emit(NOPX[alignment_size - 1], alignment_size, code, pos); emit(NOPX[alignment_size - 1], alignment_size, code, pos);
} }

View File

@@ -34,6 +34,8 @@
#include "base/tools/String.h" #include "base/tools/String.h"
#include "base/net/stratum/Job.h" #include "base/net/stratum/Job.h"
#include "crypto/randomx/randomx.h"
namespace xmrig { namespace xmrig {
@@ -43,7 +45,7 @@ class JobResult
public: public:
JobResult() = delete; JobResult() = delete;
inline JobResult(const Job &job, uint64_t nonce, const uint8_t *result, const uint8_t* header_hash = nullptr, const uint8_t *mix_hash = nullptr, const uint8_t* miner_signature = nullptr) : inline JobResult(const Job &job, uint64_t nonce, const uint8_t *result, const uint8_t* header_hash = nullptr, const uint8_t *mix_hash = nullptr, const uint8_t* extra_data = nullptr) :
algorithm(job.algorithm()), algorithm(job.algorithm()),
index(job.index()), index(job.index()),
clientId(job.clientId()), clientId(job.clientId()),
@@ -62,9 +64,15 @@ public:
memcpy(m_mixHash, mix_hash, sizeof(m_mixHash)); memcpy(m_mixHash, mix_hash, sizeof(m_mixHash));
} }
if (miner_signature) { if (extra_data) {
m_hasMinerSignature = true; if (algorithm == Algorithm::RX_V2) {
memcpy(m_minerSignature, miner_signature, sizeof(m_minerSignature)); m_hasCommitment = true;
memcpy(m_extraData, extra_data, RANDOMX_HASH_SIZE);
}
else if (algorithm == Algorithm::RX_WOW) {
m_hasMinerSignature = true;
memcpy(m_extraData, extra_data, RANDOMX_HASH_SIZE * 2);
}
} }
} }
@@ -85,7 +93,8 @@ public:
inline const uint8_t *headerHash() const { return m_headerHash; } inline const uint8_t *headerHash() const { return m_headerHash; }
inline const uint8_t *mixHash() const { return m_mixHash; } inline const uint8_t *mixHash() const { return m_mixHash; }
inline const uint8_t *minerSignature() const { return m_hasMinerSignature ? m_minerSignature : nullptr; } inline const uint8_t *minerSignature() const { return m_hasMinerSignature ? m_extraData : nullptr; }
inline const uint8_t *commitment() const { return m_hasCommitment ? m_extraData : nullptr; }
const Algorithm algorithm; const Algorithm algorithm;
const uint8_t index; const uint8_t index;
@@ -100,8 +109,10 @@ private:
uint8_t m_headerHash[32] = { 0 }; uint8_t m_headerHash[32] = { 0 };
uint8_t m_mixHash[32] = { 0 }; uint8_t m_mixHash[32] = { 0 };
uint8_t m_minerSignature[64] = { 0 }; uint8_t m_extraData[RANDOMX_HASH_SIZE * 2] = { 0 };
bool m_hasMinerSignature = false; bool m_hasMinerSignature = false;
bool m_hasCommitment = false;
}; };

View File

@@ -339,9 +339,9 @@ void xmrig::JobResults::submit(const Job &job, uint32_t nonce, const uint8_t *re
} }
void xmrig::JobResults::submit(const Job& job, uint32_t nonce, const uint8_t* result, const uint8_t* miner_signature) void xmrig::JobResults::submit(const Job& job, uint32_t nonce, const uint8_t* result, const uint8_t* extra_data)
{ {
submit(JobResult(job, nonce, result, nullptr, nullptr, miner_signature)); submit(JobResult(job, nonce, result, nullptr, nullptr, extra_data));
} }

View File

@@ -46,7 +46,7 @@ public:
static void setListener(IJobResultListener *listener, bool hwAES); static void setListener(IJobResultListener *listener, bool hwAES);
static void stop(); static void stop();
static void submit(const Job &job, uint32_t nonce, const uint8_t *result); static void submit(const Job &job, uint32_t nonce, const uint8_t *result);
static void submit(const Job& job, uint32_t nonce, const uint8_t* result, const uint8_t* miner_signature); static void submit(const Job& job, uint32_t nonce, const uint8_t* result, const uint8_t* extra_data);
static void submit(const JobResult &result); static void submit(const JobResult &result);
# if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA) # if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA)