mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 14:58:01 +00:00
new stratum protocol
This commit is contained in:
parent
27c32cd5a9
commit
4bf876dffb
29
sgminer.c
29
sgminer.c
@ -5604,7 +5604,7 @@ static void *stratum_sthread(void *userdata)
|
|||||||
if (unlikely(!work))
|
if (unlikely(!work))
|
||||||
quit(1, "Stratum q returned empty work");
|
quit(1, "Stratum q returned empty work");
|
||||||
|
|
||||||
if ((pool->algorithm.type != ALGO_DECRED && unlikely(work->nonce2_len > 8)) || (pool->algorithm.type == ALGO_DECRED && unlikely(work->nonce2_len > 16))) {
|
if (unlikely(work->nonce2_len > 8)) {
|
||||||
applog(LOG_ERR, "%s asking for inappropriately long nonce2 length %d", get_pool_name(pool), (int)work->nonce2_len);
|
applog(LOG_ERR, "%s asking for inappropriately long nonce2 length %d", get_pool_name(pool), (int)work->nonce2_len);
|
||||||
applog(LOG_ERR, "Not attempting to submit shares");
|
applog(LOG_ERR, "Not attempting to submit shares");
|
||||||
free_work(work);
|
free_work(work);
|
||||||
@ -5635,11 +5635,7 @@ static void *stratum_sthread(void *userdata)
|
|||||||
}
|
}
|
||||||
__bin2hex(noncehex, (const unsigned char *)&nonce, 4);
|
__bin2hex(noncehex, (const unsigned char *)&nonce, 4);
|
||||||
|
|
||||||
if (pool->algorithm.type == ALGO_DECRED) {
|
|
||||||
memcpy(nonce2, work->data + 144, work->nonce2_len);
|
|
||||||
} else {
|
|
||||||
*((uint64_t *)nonce2) = htole64(work->nonce2);
|
*((uint64_t *)nonce2) = htole64(work->nonce2);
|
||||||
}
|
|
||||||
__bin2hex(nonce2hex, nonce2, work->nonce2_len);
|
__bin2hex(nonce2hex, nonce2, work->nonce2_len);
|
||||||
memset(s, 0, 1024);
|
memset(s, 0, 1024);
|
||||||
|
|
||||||
@ -6113,25 +6109,20 @@ void set_target_neoscrypt(unsigned char *target, double diff, const int thr_id)
|
|||||||
static void gen_stratum_work(struct pool *pool, struct work *work)
|
static void gen_stratum_work(struct pool *pool, struct work *work)
|
||||||
{
|
{
|
||||||
unsigned char merkle_root[32], merkle_sha[64];
|
unsigned char merkle_root[32], merkle_sha[64];
|
||||||
int datasize = 128;
|
|
||||||
uint32_t *data32, *swap32;
|
uint32_t *data32, *swap32;
|
||||||
uint64_t nonce2le;
|
uint64_t nonce2le;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
cg_wlock(&pool->data_lock);
|
cg_wlock(&pool->data_lock);
|
||||||
|
|
||||||
if (pool->algorithm.type == ALGO_DECRED) {
|
nonce2le = htole64(pool->nonce2);
|
||||||
datasize = 180;
|
if (pool->algorithm.type != ALGO_DECRED) {
|
||||||
work->nonce2 = pool->nonce2++;
|
|
||||||
work->nonce2_len = pool->n2size;
|
|
||||||
} else {
|
|
||||||
/* Update coinbase. Always use an LE encoded nonce2 to fill in values
|
/* Update coinbase. Always use an LE encoded nonce2 to fill in values
|
||||||
* from left to right and prevent overflow errors with small n2sizes */
|
* from left to right and prevent overflow errors with small n2sizes */
|
||||||
nonce2le = htole64(pool->nonce2);
|
|
||||||
memcpy(pool->coinbase + pool->nonce2_offset, &nonce2le, pool->n2size);
|
memcpy(pool->coinbase + pool->nonce2_offset, &nonce2le, pool->n2size);
|
||||||
|
}
|
||||||
work->nonce2 = pool->nonce2++;
|
work->nonce2 = pool->nonce2++;
|
||||||
work->nonce2_len = pool->n2size;
|
work->nonce2_len = pool->n2size;
|
||||||
}
|
|
||||||
|
|
||||||
/* Downgrade to a read lock to read off the pool variables */
|
/* Downgrade to a read lock to read off the pool variables */
|
||||||
cg_dwlock(&pool->data_lock);
|
cg_dwlock(&pool->data_lock);
|
||||||
@ -6180,17 +6171,15 @@ static void gen_stratum_work(struct pool *pool, struct work *work)
|
|||||||
}
|
}
|
||||||
else if (pool->algorithm.type == ALGO_DECRED) {
|
else if (pool->algorithm.type == ALGO_DECRED) {
|
||||||
uint16_t vote = (uint16_t) (opt_vote << 1) | 1;
|
uint16_t vote = (uint16_t) (opt_vote << 1) | 1;
|
||||||
|
size_t nonce2_offset = MIN(pool->n1_len, 36);
|
||||||
memcpy(work->data, pool->header_bin, 4); // version
|
memcpy(work->data, pool->header_bin, 4); // version
|
||||||
flip32(work->data + 4, pool->header_bin + 4); // prevhash
|
flip32(work->data + 4, pool->header_bin + 4); // prevhash
|
||||||
memcpy(work->data + 4 + 32, pool->coinbase, MIN((int)pool->swork.cb_len, 108));
|
memcpy(work->data + 4 + 32, pool->coinbase, MIN((int)pool->swork.cb_len, 108));
|
||||||
memcpy(work->data + 144, pool->nonce1bin, MIN(pool->n1_len, 36));
|
|
||||||
memcpy(work->data + 100, &vote, 2);
|
memcpy(work->data + 100, &vote, 2);
|
||||||
((uint32_t *)work->data)[36] = work->nonce2;
|
for (i = 36; i < 45; i++)
|
||||||
// ((uint32_t *)work->data)[36] = 2;
|
|
||||||
((uint32_t *)work->data)[37] = ((rand() * 4) << 8) | work->thr_id;
|
|
||||||
// ((uint32_t *)work->data)[37] = 0x0000a400;
|
|
||||||
for (i = 39; i < 45; i++)
|
|
||||||
((uint32_t *)work->data)[i] = 0;
|
((uint32_t *)work->data)[i] = 0;
|
||||||
|
memcpy(work->data + 144, pool->nonce1bin, nonce2_offset);
|
||||||
|
memcpy(work->data + 144 + nonce2_offset, &nonce2le, pool->n2size);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
data32 = (uint32_t *)merkle_sha;
|
data32 = (uint32_t *)merkle_sha;
|
||||||
@ -6214,6 +6203,8 @@ static void gen_stratum_work(struct pool *pool, struct work *work)
|
|||||||
|
|
||||||
if (opt_debug) {
|
if (opt_debug) {
|
||||||
char *header, *merkle_hash;
|
char *header, *merkle_hash;
|
||||||
|
int datasize = 128;
|
||||||
|
if (pool->algorithm.type == ALGO_DECRED) datasize = 180;
|
||||||
|
|
||||||
header = bin2hex(work->data, datasize);
|
header = bin2hex(work->data, datasize);
|
||||||
if (pool->algorithm.type != ALGO_DECRED) {
|
if (pool->algorithm.type != ALGO_DECRED) {
|
||||||
|
Loading…
Reference in New Issue
Block a user