Browse Source

Basic requirements for node share processing

master
Con Kolivas 9 years ago
parent
commit
b1fea97501
  1. 41
      src/stratifier.c

41
src/stratifier.c

@ -819,6 +819,7 @@ static void send_workinfo(ckpool_t *ckp, sdata_t *sdata, const workbase_t *wb)
if (sdata->node_instances) { if (sdata->node_instances) {
json_t *wb_val = json_object(); json_t *wb_val = json_object();
json_set_int(wb_val, "jobid", wb->id);
json_set_string(wb_val, "target", wb->target); json_set_string(wb_val, "target", wb->target);
json_set_double(wb_val, "diff", wb->diff); json_set_double(wb_val, "diff", wb->diff);
json_set_int(wb_val, "version", wb->version); json_set_int(wb_val, "version", wb->version);
@ -1138,8 +1139,10 @@ static void add_node_base(ckpool_t *ckp, json_t *val)
sdata_t *sdata = ckp->data; sdata_t *sdata = ckp->data;
bool new_block = false; bool new_block = false;
char header[228]; char header[228];
int i;
wb->ckp = ckp; wb->ckp = ckp;
json_int64cpy(&wb->id, val, "jobid");
json_strcpy(wb->target, val, "target"); json_strcpy(wb->target, val, "target");
json_dblcpy(&wb->diff, val, "diff"); json_dblcpy(&wb->diff, val, "diff");
json_uintcpy(&wb->version, val, "version"); json_uintcpy(&wb->version, val, "version");
@ -1156,17 +1159,10 @@ static void add_node_base(ckpool_t *ckp, json_t *val)
if (wb->transactions) if (wb->transactions)
json_strdup(&wb->txn_data, val, "txn_data"); json_strdup(&wb->txn_data, val, "txn_data");
json_intcpy(&wb->merkles, val, "merkles"); json_intcpy(&wb->merkles, val, "merkles");
wb->merkle_array = json_array(); wb->merkle_array = json_object_dup(val, "merklehash");
if (wb->merkles) { for (i = 0; i < wb->merkles; i++) {
json_t *arr; strcpy(&wb->merklehash[i][0], json_string_value(json_array_get(wb->merkle_array, i)));
int i; hex2bin(&wb->merklebin[i][0], &wb->merklehash[i][0], 32);
arr = json_object_get(val, "merklehash");
for (i = 0; i < wb->merkles; i++) {
strcpy(&wb->merklehash[i][0], json_string_value(json_array_get(arr, i)));
hex2bin(&wb->merklebin[i][0], &wb->merklehash[i][0], 32);
json_array_append_new(wb->merkle_array, json_string(&wb->merklehash[i][0]));
}
} }
json_strdup(&wb->coinb1, val, "coinb1"); json_strdup(&wb->coinb1, val, "coinb1");
json_intcpy(&wb->coinb1len, val, "coinb1len"); json_intcpy(&wb->coinb1len, val, "coinb1len");
@ -1178,6 +1174,7 @@ static void add_node_base(ckpool_t *ckp, json_t *val)
hex2bin(wb->coinb2bin, wb->coinb2, wb->coinb2len); hex2bin(wb->coinb2bin, wb->coinb2, wb->coinb2len);
json_intcpy(&wb->enonce1varlen, val, "enonce1varlen"); json_intcpy(&wb->enonce1varlen, val, "enonce1varlen");
json_intcpy(&wb->enonce2varlen, val, "enonce2varlen"); json_intcpy(&wb->enonce2varlen, val, "enonce2varlen");
ts_realtime(&wb->gentime);
snprintf(header, 225, "%s%s%s%s%s%s%s", snprintf(header, 225, "%s%s%s%s%s%s%s",
wb->bbversion, wb->prevhash, wb->bbversion, wb->prevhash,
@ -1190,7 +1187,7 @@ static void add_node_base(ckpool_t *ckp, json_t *val)
add_base(ckp, sdata, wb, &new_block); add_base(ckp, sdata, wb, &new_block);
if (new_block) if (new_block)
LOGWARNING("Block hash changed to %s", sdata->lastswaphash); LOGNOTICE("Block hash changed to %s", sdata->lastswaphash);
} }
static void update_base(ckpool_t *ckp, const int prio) static void update_base(ckpool_t *ckp, const int prio)
@ -4380,7 +4377,6 @@ static json_t *parse_authorise(stratum_instance_t *client, const json_t *params_
/* We can set this outside of lock safely */ /* We can set this outside of lock safely */
client->authorising = false; client->authorising = false;
out: out:
LOGWARNING("Parsed %d", ret);
return json_boolean(ret); return json_boolean(ret);
} }
@ -4440,6 +4436,9 @@ static void add_submit(ckpool_t *ckp, stratum_instance_t *client, const int diff
} else if (!submit) } else if (!submit)
return; return;
if (ckp->node)
return;
tv_time(&now_t); tv_time(&now_t);
ck_rlock(&sdata->workbase_lock); ck_rlock(&sdata->workbase_lock);
@ -4809,8 +4808,11 @@ static json_t *parse_submit(stratum_instance_t *client, json_t *json_msg,
ck_rlock(&sdata->workbase_lock); ck_rlock(&sdata->workbase_lock);
HASH_FIND_I64(sdata->workbases, &id, wb); HASH_FIND_I64(sdata->workbases, &id, wb);
if (unlikely(!wb)) { if (unlikely(!wb)) {
if (!sdata->current_workbase) if (!sdata->current_workbase) {
ck_runlock(&sdata->workbase_lock);
return json_boolean(false); return json_boolean(false);
}
id = sdata->current_workbase->id; id = sdata->current_workbase->id;
err = SE_INVALID_JOBID; err = SE_INVALID_JOBID;
json_set_string(json_msg, "reject-reason", SHARE_ERR(err)); json_set_string(json_msg, "reject-reason", SHARE_ERR(err));
@ -4895,7 +4897,7 @@ out_unlock:
submit = false; submit = false;
} }
} else } else
LOGINFO("Rejected client %"PRId64" invalid share", client->id); LOGINFO("Rejected client %"PRId64" invalid share %s", client->id, SHARE_ERR(err));
/* Submit share to upstream pool in proxy mode. We submit valid and /* Submit share to upstream pool in proxy mode. We submit valid and
* stale shares and filter out the rest. */ * stale shares and filter out the rest. */
@ -5296,7 +5298,7 @@ static void parse_diff(stratum_instance_t *client, json_t *val)
static void parse_subscribe_result(stratum_instance_t *client, json_t *val) static void parse_subscribe_result(stratum_instance_t *client, json_t *val)
{ {
strncpy(client->enonce1, json_string_value(json_array_get(val, 1)), 16); strncpy(client->enonce1, json_string_value(json_array_get(val, 1)), 16);
LOGDEBUG("Client %"PRId64" got enonce1 %s", client->id, client->enonce1); LOGINFO("Client %"PRId64" got enonce1 %s", client->id, client->enonce1);
sprintf(client->enonce1, "%016lx", client->enonce1_64); sprintf(client->enonce1, "%016lx", client->enonce1_64);
} }
@ -5351,7 +5353,7 @@ static void node_client_msg(ckpool_t *ckp, json_t *val, const char *buf, stratum
LOGERR("Missing client %"PRId64" node method from %s", client->id, buf); LOGERR("Missing client %"PRId64" node method from %s", client->id, buf);
return; return;
} }
LOGWARNING("Got client %"PRId64" node method %d:%s", client->id, msg_type, stratum_msgs[msg_type]); LOGDEBUG("Got client %"PRId64" node method %d:%s", client->id, msg_type, stratum_msgs[msg_type]);
id_val = json_object_get(val, "id"); id_val = json_object_get(val, "id");
method = json_object_get(val, "method"); method = json_object_get(val, "method");
params = json_object_get(val, "params"); params = json_object_get(val, "params");
@ -5589,7 +5591,10 @@ static void sshare_process(ckpool_t *ckp, json_params_t *jp)
json_object_set_new_nocheck(json_msg, "result", result_val); json_object_set_new_nocheck(json_msg, "result", result_val);
json_object_set_new_nocheck(json_msg, "error", err_val ? err_val : json_null()); json_object_set_new_nocheck(json_msg, "error", err_val ? err_val : json_null());
steal_json_id(json_msg, jp); steal_json_id(json_msg, jp);
stratum_add_send(sdata, json_msg, client_id, SM_SHARERESULT); if (ckp->node)
json_decref(json_msg);
else
stratum_add_send(sdata, json_msg, client_id, SM_SHARERESULT);
out_decref: out_decref:
dec_instance_ref(sdata, client); dec_instance_ref(sdata, client);
out: out:

Loading…
Cancel
Save