Browse Source

Upstream block messages to main pool in remote mode, displaying message on main console and miners, and resetting best shares

master
Con Kolivas 10 years ago
parent
commit
97eee12def
  1. 47
      src/stratifier.c

47
src/stratifier.c

@ -2529,12 +2529,23 @@ static json_t *user_stats(const user_instance_t *user)
return val;
}
static void upstream_block(ckpool_t *ckp, const int height, const char *workername,
const double diff)
{
char buf[512];
snprintf(buf, 511, "upstream={\"method\":\"block\",\"workername\":\"%s\",\"diff\":%lf,\"height\":%d,\"name\":\"%s\"}\n",
workername, diff, height, ckp->name);
send_proc(ckp->connector, buf);
}
static void block_solve(ckpool_t *ckp, const char *blockhash)
{
ckmsg_t *block, *tmp, *found = NULL;
char *msg, *workername = NULL;
sdata_t *sdata = ckp->data;
char cdfield[64];
double diff = 0;
int height = 0;
ts_t ts_now;
json_t *val;
@ -2576,6 +2587,7 @@ static void block_solve(ckpool_t *ckp, const char *blockhash)
json_set_string(val, "createdate", cdfield);
json_set_string(val, "createcode", __func__);
json_get_int(&height, val, "height");
json_get_double(&diff, val, "diff");
ckdbq_add(ckp, ID_BLOCK, val);
free(found);
@ -2610,6 +2622,8 @@ static void block_solve(ckpool_t *ckp, const char *blockhash)
}
stratum_broadcast_message(sdata, msg);
free(msg);
if (ckp->remote)
upstream_block(ckp, height, workername, diff);
free(workername);
@ -4672,6 +4686,7 @@ test_blocksolve(const stratum_instance_t *client, const workbase_t *wb, const uc
"createcode", __func__,
"createinet", ckp->serverurl[client->server]);
val_copy = json_deep_copy(val);
json_set_double(val_copy, "diff", diff);
block_ckmsg = ckalloc(sizeof(ckmsg_t));
block_ckmsg->data = val_copy;
@ -5581,6 +5596,36 @@ static void parse_remote_workers(sdata_t *sdata, json_t *val, const char *buf)
LOGDEBUG("Adding %d remote workers to user %s", workers, username);
}
static void parse_remote_block(sdata_t *sdata, json_t *val, const char *buf)
{
json_t *workername_val = json_object_get(val, "workername"),
*name_val = json_object_get(val, "name");
const char *workername, *name;
double diff = 0;
int height = 0;
char *msg;
workername = json_string_value(workername_val);
if (unlikely(!workername_val || !workername)) {
LOGWARNING("Failed to get workername from remote message %s", buf);
workername = "";
}
name = json_string_value(name_val);
if (unlikely(!name_val || !name)) {
LOGWARNING("Failed to get name from remote message %s", buf);
name = "";
}
if (unlikely(!json_get_int(&height, val, "height")))
LOGWARNING("Failed to get height from remote message %s", buf);
if (unlikely(!json_get_double(&diff, val, "diff")))
LOGWARNING("Failed to get diff from remote message %s", buf);
ASPRINTF(&msg, "Block %d solved by %s @ %s!", height, workername, name);
LOGWARNING("%s", msg);
stratum_broadcast_message(sdata, msg);
free(msg);
reset_bestshares(sdata);
}
static void parse_trusted_msg(ckpool_t *ckp, sdata_t *sdata, json_t *val, const char *buf)
{
json_t *method_val = json_object_get(val, "method");
@ -5596,6 +5641,8 @@ static void parse_trusted_msg(ckpool_t *ckp, sdata_t *sdata, json_t *val, const
parse_remote_shares(ckp, sdata, val, buf);
else if (!safecmp(method, "workers"))
parse_remote_workers(sdata, val, buf);
else if (!safecmp(method, "block"))
parse_remote_block(sdata, val, buf);
else
LOGWARNING("unrecognised trusted message %s", buf);
}

Loading…
Cancel
Save