Fixing miner issues

- Switch from full-block to header-only (140-byte) RandomX input
- Add 32-byte SoloNonce system for solo mining mode
- Compute proper difficulty target from compact bits field
- Add SHA256D dual-hash PoW check in CpuWorker for solo mining
- Raise RandomX dataset/scratchpad limits to 4GB/4MB
- Use standard RandomX share filtering in pool (stratum) mode
This commit is contained in:
2026-03-05 06:00:55 -06:00
parent a27a1e327b
commit 95d3ff2c4a
12 changed files with 529 additions and 185 deletions

View File

@@ -79,6 +79,22 @@ public:
{
}
// Constructor for solo/DragonX mining with full 32-byte nonce
inline JobResult(const Job &job, const uint8_t *nonce32, const uint8_t *result) :
algorithm(job.algorithm()),
index(job.index()),
clientId(job.clientId()),
jobId(job.id()),
backend(job.backend()),
nonce(0),
diff(job.diff()),
m_isSoloResult(true)
{
memcpy(m_result, result, sizeof(m_result));
memcpy(m_nonceBytes, nonce32, 32);
m_nonceSize = 32;
}
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 uint8_t *result() { return m_result; }
@@ -87,6 +103,12 @@ public:
inline const uint8_t *minerSignature() const { return m_hasMinerSignature ? m_minerSignature : nullptr; }
// Solo nonce support
inline bool isSoloResult() const { return m_isSoloResult; }
inline const uint8_t *soloNonce() const { return m_nonceBytes; }
inline const uint8_t *nonceBytes() const { return m_nonceBytes; }
inline size_t nonceSize() const { return m_nonceSize; }
const Algorithm algorithm;
const uint8_t index;
const String clientId;
@@ -102,6 +124,9 @@ private:
uint8_t m_minerSignature[64] = { 0 };
bool m_hasMinerSignature = false;
uint8_t m_nonceBytes[32] = { 0 };
size_t m_nonceSize = 4;
bool m_isSoloResult = false;
};