Clamp optimal diff after all calculations are made and store min and start diff as long integers
This commit is contained in:
parent
90782542f8
commit
a95c259839
19
src/ckpool.c
19
src/ckpool.c
@ -854,6 +854,21 @@ static void json_get_string(char **store, json_t *val, const char *res)
|
||||
*store = strdup(buf);
|
||||
}
|
||||
|
||||
static void json_get_int64(int64_t *store, json_t *val, const char *res)
|
||||
{
|
||||
json_t *entry = json_object_get(val, res);
|
||||
|
||||
if (!entry) {
|
||||
LOGDEBUG("Json did not find entry %s", res);
|
||||
return;
|
||||
}
|
||||
if (!json_is_integer(entry)) {
|
||||
LOGWARNING("Json entry %s is not an integer", res);
|
||||
return;
|
||||
}
|
||||
*store = json_integer_value(entry);
|
||||
}
|
||||
|
||||
static void json_get_int(int *store, json_t *val, const char *res)
|
||||
{
|
||||
json_t *entry = json_object_get(val, res);
|
||||
@ -930,8 +945,8 @@ static void parse_config(ckpool_t *ckp)
|
||||
json_get_int(&ckp->blockpoll, json_conf, "blockpoll");
|
||||
json_get_int(&ckp->update_interval, json_conf, "update_interval");
|
||||
json_get_string(&ckp->serverurl, json_conf, "serverurl");
|
||||
json_get_int(&ckp->mindiff, json_conf, "mindiff");
|
||||
json_get_int(&ckp->startdiff, json_conf, "startdiff");
|
||||
json_get_int64(&ckp->mindiff, json_conf, "mindiff");
|
||||
json_get_int64(&ckp->startdiff, json_conf, "startdiff");
|
||||
json_get_string(&ckp->logdir, json_conf, "logdir");
|
||||
arr_val = json_object_get(json_conf, "proxy");
|
||||
if (arr_val && json_is_array(arr_val)) {
|
||||
|
||||
@ -146,8 +146,8 @@ struct ckpool_instance {
|
||||
int blockpoll; // How frequently in ms to poll bitcoind for block updates
|
||||
|
||||
/* Difficulty settings */
|
||||
int mindiff; // Default 1
|
||||
int startdiff; // Default 42
|
||||
int64_t mindiff; // Default 1
|
||||
int64_t startdiff; // Default 42
|
||||
|
||||
/* Coinbase data */
|
||||
char *btcaddress; // Address to mine to
|
||||
|
||||
@ -1408,7 +1408,7 @@ static double sane_tdiff(tv_t *end, tv_t *start)
|
||||
return tdiff;
|
||||
}
|
||||
|
||||
static void add_submit(stratum_instance_t *client, int diff, bool valid)
|
||||
static void add_submit(ckpool_t *ckp, stratum_instance_t *client, int diff, bool valid)
|
||||
{
|
||||
double tdiff, bdiff, dsps, drr, network_diff, bias;
|
||||
int64_t next_blockid, optimal;
|
||||
@ -1467,23 +1467,18 @@ static void add_submit(stratum_instance_t *client, int diff, bool valid)
|
||||
return;
|
||||
|
||||
optimal = round(dsps * 3.33);
|
||||
if (optimal <= client->ckp->mindiff) {
|
||||
if (client->diff == client->ckp->mindiff)
|
||||
return;
|
||||
optimal = client->ckp->mindiff;
|
||||
}
|
||||
|
||||
if (optimal > network_diff) {
|
||||
/* Intentionally round down here */
|
||||
optimal = network_diff;
|
||||
if (client->diff == optimal)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Don't drop diff to rapidly in case the client simply switched away
|
||||
* and has just returned */
|
||||
if (optimal < client->diff / 2)
|
||||
optimal = client->diff / 2;
|
||||
/* Clamp to mindiff ~ network_diff */
|
||||
if (optimal < ckp->mindiff)
|
||||
optimal = ckp->mindiff;
|
||||
if (optimal > network_diff)
|
||||
optimal = network_diff;
|
||||
if (client->diff == optimal)
|
||||
return;
|
||||
|
||||
client->ssdc = 0;
|
||||
|
||||
LOGINFO("Client %d biased dsps %.2f dsps %.2f drr %.2f adjust diff from %ld to: %ld ",
|
||||
@ -1812,7 +1807,7 @@ out_unlock:
|
||||
}
|
||||
} else
|
||||
LOGINFO("Rejected client %d invalid share", client->id);
|
||||
add_submit(client, diff, result);
|
||||
add_submit(ckp, client, diff, result);
|
||||
|
||||
/* Now write to the pool's sharelog. */
|
||||
val = json_object();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user