mirror of
https://github.com/GOSTSec/sgminer
synced 2025-03-09 20:21:01 +00:00
Cache the header length when generating stratum work to avoid calculating it on every work generation, and to only need one alloc+sprintf, speeding up work generation.
This commit is contained in:
parent
5402941691
commit
0870ab7532
22
cgminer.c
22
cgminer.c
@ -5085,11 +5085,11 @@ static void set_work_target(struct work *work, double diff)
|
||||
* other means to detect when the pool has died in stratum_thread */
|
||||
static void gen_stratum_work(struct pool *pool, struct work *work)
|
||||
{
|
||||
unsigned char *coinbase, merkle_root[32], merkle_sha[64], *merkle_hash;
|
||||
unsigned char *coinbase, merkle_root[32], merkle_sha[64];
|
||||
int len, cb1_len, n1_len, cb2_len, i;
|
||||
char *header, *merkle_hash;
|
||||
uint32_t *data32, *swap32;
|
||||
size_t alloc_len;
|
||||
char *header;
|
||||
|
||||
mutex_lock(&pool->pool_lock);
|
||||
|
||||
@ -5124,15 +5124,17 @@ static void gen_stratum_work(struct pool *pool, struct work *work)
|
||||
swap32 = (uint32_t *)merkle_root;
|
||||
for (i = 0; i < 32 / 4; i++)
|
||||
swap32[i] = swab32(data32[i]);
|
||||
merkle_hash = (unsigned char *)bin2hex((const unsigned char *)merkle_root, 32);
|
||||
merkle_hash = bin2hex((const unsigned char *)merkle_root, 32);
|
||||
|
||||
header = strdup(pool->swork.bbversion);
|
||||
header = realloc_strcat(header, pool->swork.prev_hash);
|
||||
header = realloc_strcat(header, (char *)merkle_hash);
|
||||
header = realloc_strcat(header, pool->swork.ntime);
|
||||
header = realloc_strcat(header, pool->swork.nbit);
|
||||
header = realloc_strcat(header, "00000000"); /* nonce */
|
||||
header = realloc_strcat(header, workpadding);
|
||||
header = calloc(pool->swork.header_len, 1);
|
||||
sprintf(header, "%s%s%s%s%s%s%s",
|
||||
pool->swork.bbversion,
|
||||
pool->swork.prev_hash,
|
||||
merkle_hash,
|
||||
pool->swork.ntime,
|
||||
pool->swork.nbit,
|
||||
"00000000", /* nonce */
|
||||
workpadding);
|
||||
|
||||
/* Store the stratum work diff to check it still matches the pool's
|
||||
* stratum diff when submitting shares */
|
||||
|
1
miner.h
1
miner.h
@ -855,6 +855,7 @@ struct stratum_work {
|
||||
char *ntime;
|
||||
bool clean;
|
||||
|
||||
size_t header_len;
|
||||
int merkles;
|
||||
double diff;
|
||||
};
|
||||
|
9
util.c
9
util.c
@ -1146,6 +1146,15 @@ static bool parse_notify(struct pool *pool, json_t *val)
|
||||
pool->swork.merkles = merkles;
|
||||
if (clean)
|
||||
pool->nonce2 = 0;
|
||||
pool->swork.header_len = strlen(pool->swork.bbversion) +
|
||||
strlen(pool->swork.prev_hash) +
|
||||
strlen(pool->swork.ntime) +
|
||||
strlen(pool->swork.nbit) +
|
||||
/* merkle_hash */ 32 +
|
||||
/* nonce */ 8 +
|
||||
/* workpadding */ 96;
|
||||
pool->swork.header_len = pool->swork.header_len * 2 + 1;
|
||||
align_len(&pool->swork.header_len);
|
||||
mutex_unlock(&pool->pool_lock);
|
||||
|
||||
if (opt_protocol) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user