mirror of
https://github.com/GOSTSec/ccminer
synced 2025-01-30 08:24:16 +00:00
neoscrypt: handle both getwork data sizes FTC/ORB
only affect solo mining, this patch should handle more weird cases also set getblocktemplate param type to an empty object (ORB)
This commit is contained in:
parent
8fb92415fb
commit
2ebcd1fbd5
35
ccminer.cpp
35
ccminer.cpp
@ -628,24 +628,33 @@ static bool work_decode(const json_t *val, struct work *work)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (opt_algo) {
|
switch (opt_algo) {
|
||||||
|
case ALGO_NEOSCRYPT:
|
||||||
case ALGO_ZR5:
|
case ALGO_ZR5:
|
||||||
data_size = 80;
|
data_size = 80;
|
||||||
break;
|
break;
|
||||||
case ALGO_NEOSCRYPT:
|
|
||||||
data_size = 84; // typo in FTC wallet ? and clones..
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
data_size = 128; // sizeof(work->data);
|
data_size = 128; // sizeof(work->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
adata_sz = data_size / 4; // sizeof(uint32_t);
|
adata_sz = data_size / 4; // sizeof(uint32_t);
|
||||||
|
|
||||||
if (unlikely(!jobj_binary(val, "data", work->data, data_size))) {
|
if (!jobj_binary(val, "data", work->data, data_size)) {
|
||||||
applog(LOG_ERR, "JSON inval data");
|
json_t *obj = json_object_get(val, "data");
|
||||||
return false;
|
int len = obj ? (int) strlen(json_string_value(obj)) : 0;
|
||||||
|
if (!len || len > sizeof(work->data)*2) {
|
||||||
|
applog(LOG_ERR, "JSON invalid data (len %d <> %d)", len/2, data_size);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
data_size = len / 2;
|
||||||
|
if (!jobj_binary(val, "data", work->data, data_size)) {
|
||||||
|
applog(LOG_ERR, "JSON invalid data (len %d)", data_size);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (unlikely(!jobj_binary(val, "target", work->target, target_size))) {
|
|
||||||
applog(LOG_ERR, "JSON inval target");
|
if (!jobj_binary(val, "target", work->target, target_size)) {
|
||||||
|
applog(LOG_ERR, "JSON invalid target");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -690,7 +699,7 @@ static bool work_decode(const json_t *val, struct work *work)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
hex2bin((uchar*)work->txs[tx].data, hexstr, min(txlen, POK_MAX_TX_SZ));
|
hex2bin((uchar*)work->txs[tx].data, hexstr, min(txlen, POK_MAX_TX_SZ));
|
||||||
work->txs[tx].len = txlen;
|
work->txs[tx].len = (uint32_t) (txlen);
|
||||||
totlen += txlen;
|
totlen += txlen;
|
||||||
}
|
}
|
||||||
if (opt_debug)
|
if (opt_debug)
|
||||||
@ -979,9 +988,9 @@ static bool gbt_work_decode(const json_t *val, struct work *work)
|
|||||||
|
|
||||||
#define GBT_CAPABILITIES "[\"coinbasetxn\", \"coinbasevalue\", \"longpoll\", \"workid\"]"
|
#define GBT_CAPABILITIES "[\"coinbasetxn\", \"coinbasevalue\", \"longpoll\", \"workid\"]"
|
||||||
static const char *gbt_req =
|
static const char *gbt_req =
|
||||||
"{\"method\": \"getblocktemplate\", \"params\": ["
|
"{\"method\": \"getblocktemplate\", \"params\": [{"
|
||||||
// "{\"capabilities\": " GBT_CAPABILITIES "}"
|
// "\"capabilities\": " GBT_CAPABILITIES ""
|
||||||
"], \"id\":9}\r\n";
|
"}], \"id\":9}\r\n";
|
||||||
|
|
||||||
static bool get_blocktemplate(CURL *curl, struct work *work)
|
static bool get_blocktemplate(CURL *curl, struct work *work)
|
||||||
{
|
{
|
||||||
@ -1037,7 +1046,7 @@ static bool get_mininginfo(CURL *curl, struct work *work)
|
|||||||
if (res) {
|
if (res) {
|
||||||
json_t *key = json_object_get(res, "difficulty");
|
json_t *key = json_object_get(res, "difficulty");
|
||||||
if (key) {
|
if (key) {
|
||||||
if (!json_is_real(key))
|
if (json_is_object(key))
|
||||||
key = json_object_get(key, "proof-of-work");
|
key = json_object_get(key, "proof-of-work");
|
||||||
if (json_is_real(key))
|
if (json_is_real(key))
|
||||||
net_diff = json_real_value(key);
|
net_diff = json_real_value(key);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user