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;
|
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)
|
static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||||
{
|
{
|
||||||
const char *job_id, *prevhash, *coinb1, *coinb2, *version, *nbits, *stime, *nreward;
|
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;
|
int merkle_count, i;
|
||||||
json_t *merkle_arr;
|
json_t *merkle_arr;
|
||||||
unsigned char **merkle;
|
unsigned char **merkle;
|
||||||
int ntime, hoffset;
|
int ntime;
|
||||||
|
|
||||||
job_id = json_string_value(json_array_get(params, 0));
|
job_id = json_string_value(json_array_get(params, 0));
|
||||||
prevhash = json_string_value(json_array_get(params, 1));
|
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);
|
hex2bin(sctx->job.coinbase, coinb1, coinb1_size);
|
||||||
memcpy(sctx->job.coinbase + coinb1_size, sctx->xnonce1, sctx->xnonce1_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))
|
if (!sctx->job.job_id || strcmp(sctx->job.job_id, job_id))
|
||||||
memset(sctx->job.xnonce2, 0, sctx->xnonce2_size);
|
memset(sctx->job.xnonce2, 0, sctx->xnonce2_size);
|
||||||
hex2bin(sctx->job.xnonce2 + sctx->xnonce2_size, coinb2, coinb2_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);
|
sctx->job.job_id = strdup(job_id);
|
||||||
hex2bin(sctx->job.prevhash, prevhash, 32);
|
hex2bin(sctx->job.prevhash, prevhash, 32);
|
||||||
|
|
||||||
|
sctx->bloc_height = getblocheight(sctx);
|
||||||
|
|
||||||
for (i = 0; i < sctx->job.merkle_count; i++)
|
for (i = 0; i < sctx->job.merkle_count; i++)
|
||||||
free(sctx->job.merkle[i]);
|
free(sctx->job.merkle[i]);
|
||||||
free(sctx->job.merkle);
|
free(sctx->job.merkle);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user