mirror of
https://github.com/GOSTSec/ccminer
synced 2025-01-22 20:44:49 +00:00
Put bloc height extraction in a function
This commit is contained in:
parent
edf756deb5
commit
31f77b6524
36
util.c
36
util.c
@ -1012,6 +1012,36 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract bloc height L H... here len=3, height=0x1333e8
|
||||
* "...0000000000ffffffff2703e83313062f503253482f043d61105408"
|
||||
*/
|
||||
static uint32_t getblocheight(struct stratum_ctx *sctx)
|
||||
{
|
||||
uint32_t height = 0;
|
||||
uint8_t hlen = 0, *p, *m;
|
||||
|
||||
// find 0xffff tag
|
||||
p = (uint8_t*) sctx->job.coinbase + 32;
|
||||
m = p + 128;
|
||||
while (*p != 0xff && p < m) p++;
|
||||
while (*p == 0xff && p < m) p++;
|
||||
if (*(p-1) == 0xff && *(p-2) == 0xff) {
|
||||
p++; hlen = *p;
|
||||
p++; height = le16dec(p);
|
||||
p += 2;
|
||||
switch (hlen) {
|
||||
case 4:
|
||||
height += 0x10000UL * le16dec(p);
|
||||
break;
|
||||
case 3:
|
||||
height += 0x10000UL * (*p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return height;
|
||||
}
|
||||
|
||||
static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
{
|
||||
const char *job_id, *prevhash, *coinb1, *coinb2, *version, *nbits, *stime, *nreward;
|
||||
@ -1020,7 +1050,7 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
int merkle_count, i;
|
||||
json_t *merkle_arr;
|
||||
unsigned char **merkle;
|
||||
int ntime, hoffset;
|
||||
int ntime;
|
||||
|
||||
job_id = json_string_value(json_array_get(params, 0));
|
||||
prevhash = json_string_value(json_array_get(params, 1));
|
||||
@ -1078,8 +1108,6 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
hex2bin(sctx->job.coinbase, coinb1, coinb1_size);
|
||||
memcpy(sctx->job.coinbase + coinb1_size, sctx->xnonce1, sctx->xnonce1_size);
|
||||
|
||||
hoffset = coinb1_size - 15; // 43;
|
||||
sctx->bloc_height = le16dec((uint8_t*) sctx->job.coinbase + hoffset);
|
||||
if (!sctx->job.job_id || strcmp(sctx->job.job_id, job_id))
|
||||
memset(sctx->job.xnonce2, 0, sctx->xnonce2_size);
|
||||
hex2bin(sctx->job.xnonce2 + sctx->xnonce2_size, coinb2, coinb2_size);
|
||||
@ -1088,6 +1116,8 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
sctx->job.job_id = strdup(job_id);
|
||||
hex2bin(sctx->job.prevhash, prevhash, 32);
|
||||
|
||||
sctx->bloc_height = getblocheight(sctx);
|
||||
|
||||
for (i = 0; i < sctx->job.merkle_count; i++)
|
||||
free(sctx->job.merkle[i]);
|
||||
free(sctx->job.merkle);
|
||||
|
Loading…
x
Reference in New Issue
Block a user