Browse Source

new stratum protocol

tweaked
elbandi 9 years ago
parent
commit
4bf876dffb
  1. 33
      sgminer.c

33
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) { *((uint64_t *)nonce2) = htole64(work->nonce2);
memcpy(nonce2, work->data + 144, work->nonce2_len);
} else {
*((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_len = pool->n2size;
} }
work->nonce2 = pool->nonce2++;
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…
Cancel
Save