mirror of
https://github.com/JayDDee/cpuminer-opt.git
synced 2025-09-17 23:44:27 +00:00
v3.9.6
This commit is contained in:
94
util.c
94
util.c
@@ -668,6 +668,15 @@ err_out:
|
||||
return cfg;
|
||||
}
|
||||
|
||||
void cbin2hex(char *out, const char *in, size_t len)
|
||||
{
|
||||
if (out) {
|
||||
unsigned int i;
|
||||
for (i = 0; i < len; i++)
|
||||
sprintf(out + (i * 2), "%02x", (uint8_t)in[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void bin2hex(char *s, const unsigned char *p, size_t len)
|
||||
{
|
||||
for (size_t i = 0; i < len; i++)
|
||||
@@ -1693,35 +1702,47 @@ static uint32_t getblocheight(struct stratum_ctx *sctx)
|
||||
static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
{
|
||||
const char *job_id, *prevhash, *coinb1, *coinb2, *version, *nbits, *stime;
|
||||
const char *extradata = NULL;
|
||||
const char *denom10 = NULL, *denom100 = NULL, *denom1000 = NULL,
|
||||
*denom10000 = NULL, *prooffullnode = NULL;
|
||||
const char *extradata = NULL;
|
||||
size_t coinb1_size, coinb2_size;
|
||||
bool clean, ret = false;
|
||||
int merkle_count, i, p = 0;
|
||||
json_t *merkle_arr;
|
||||
uchar **merkle = NULL;
|
||||
int jsize = json_array_size(params);
|
||||
bool has_claim = ( opt_algo == ALGO_LBRY ) && ( jsize == 10 );
|
||||
bool has_roots = ( opt_algo == ALGO_PHI2 ) && ( jsize == 10 );
|
||||
job_id = json_string_value(json_array_get(params, p++));
|
||||
bool has_claim = ( opt_algo == ALGO_LBRY ) && ( jsize == 10 );
|
||||
bool has_roots = ( opt_algo == ALGO_PHI2 ) && ( jsize == 10 );
|
||||
bool is_veil = ( opt_algo == ALGO_X16RT_VEIL );
|
||||
|
||||
job_id = json_string_value(json_array_get(params, p++));
|
||||
prevhash = json_string_value(json_array_get(params, p++));
|
||||
if ( has_claim )
|
||||
{
|
||||
extradata = json_string_value(json_array_get(params, p++));
|
||||
if ( !extradata || strlen( extradata ) != 64 )
|
||||
{
|
||||
applog(LOG_ERR, "Stratum notify: invalid claim parameter");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
else if ( has_roots )
|
||||
{
|
||||
extradata = json_string_value(json_array_get(params, p++));
|
||||
if ( !extradata || strlen( extradata ) != 128 )
|
||||
{
|
||||
applog(LOG_ERR, "Stratum notify: invalid UTXO root parameter");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if ( has_claim )
|
||||
{
|
||||
extradata = json_string_value(json_array_get(params, p++));
|
||||
if ( !extradata || strlen( extradata ) != 64 )
|
||||
{
|
||||
applog(LOG_ERR, "Stratum notify: invalid claim parameter");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
else if ( has_roots )
|
||||
{
|
||||
extradata = json_string_value(json_array_get(params, p++));
|
||||
if ( !extradata || strlen( extradata ) != 128 )
|
||||
{
|
||||
applog(LOG_ERR, "Stratum notify: invalid UTXO root parameter");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if ( is_veil )
|
||||
{
|
||||
denom10 = json_string_value(json_array_get(params, p++));
|
||||
denom100 = json_string_value(json_array_get(params, p++));
|
||||
denom1000 = json_string_value(json_array_get(params, p++));
|
||||
denom10000 = json_string_value(json_array_get(params, p++));
|
||||
prooffullnode = json_string_value(json_array_get(params, p++));
|
||||
}
|
||||
|
||||
coinb1 = json_string_value(json_array_get(params, p++));
|
||||
coinb2 = json_string_value(json_array_get(params, p++));
|
||||
@@ -1733,7 +1754,7 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
nbits = json_string_value(json_array_get(params, p++));
|
||||
stime = json_string_value(json_array_get(params, p++));
|
||||
clean = json_is_true(json_array_get(params, p)); p++;
|
||||
|
||||
|
||||
if (!job_id || !prevhash || !coinb1 || !coinb2 || !version || !nbits || !stime ||
|
||||
strlen(prevhash) != 64 || strlen(version) != 8 ||
|
||||
strlen(nbits) != 8 || strlen(stime) != 8) {
|
||||
@@ -1741,8 +1762,22 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
goto out;
|
||||
}
|
||||
|
||||
merkle = (uchar**) malloc(merkle_count * sizeof(char *));
|
||||
for (i = 0; i < merkle_count; i++) {
|
||||
if ( is_veil )
|
||||
{
|
||||
if ( !denom10 || !denom100 || !denom1000 || !denom10000
|
||||
|| !prooffullnode || strlen(denom10) != 64 || strlen(denom100) != 64
|
||||
|| strlen(denom1000) != 64 || strlen(denom10000) != 64
|
||||
|| strlen(prooffullnode) != 64 )
|
||||
{
|
||||
applog(LOG_ERR, "Stratum notify: invalid veil parameters");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if ( merkle_count )
|
||||
merkle = (uchar**) malloc(merkle_count * sizeof(char *));
|
||||
for ( i = 0; i < merkle_count; i++ )
|
||||
{
|
||||
const char *s = json_string_value(json_array_get(merkle_arr, i));
|
||||
if (!s || strlen(s) != 64) {
|
||||
while (i--)
|
||||
@@ -1774,6 +1809,15 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
if (has_claim) hex2bin(sctx->job.extra, extradata, 32);
|
||||
if (has_roots) hex2bin(sctx->job.extra, extradata, 64);
|
||||
|
||||
if ( is_veil )
|
||||
{
|
||||
hex2bin(sctx->job.denom10, denom10, 32);
|
||||
hex2bin(sctx->job.denom100, denom100, 32);
|
||||
hex2bin(sctx->job.denom1000, denom1000, 32);
|
||||
hex2bin(sctx->job.denom10000, denom10000, 32);
|
||||
hex2bin(sctx->job.proofoffullnode, prooffullnode, 32);
|
||||
}
|
||||
|
||||
sctx->bloc_height = getblocheight(sctx);
|
||||
|
||||
for (i = 0; i < sctx->job.merkle_count; i++)
|
||||
|
||||
Reference in New Issue
Block a user