Browse Source

Clamp optimal diff after all calculations are made and store min and start diff as long integers

master
Con Kolivas 10 years ago
parent
commit
a95c259839
  1. 19
      src/ckpool.c
  2. 4
      src/ckpool.h
  3. 25
      src/stratifier.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); *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) static void json_get_int(int *store, json_t *val, const char *res)
{ {
json_t *entry = json_object_get(val, 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->blockpoll, json_conf, "blockpoll");
json_get_int(&ckp->update_interval, json_conf, "update_interval"); json_get_int(&ckp->update_interval, json_conf, "update_interval");
json_get_string(&ckp->serverurl, json_conf, "serverurl"); json_get_string(&ckp->serverurl, json_conf, "serverurl");
json_get_int(&ckp->mindiff, json_conf, "mindiff"); json_get_int64(&ckp->mindiff, json_conf, "mindiff");
json_get_int(&ckp->startdiff, json_conf, "startdiff"); json_get_int64(&ckp->startdiff, json_conf, "startdiff");
json_get_string(&ckp->logdir, json_conf, "logdir"); json_get_string(&ckp->logdir, json_conf, "logdir");
arr_val = json_object_get(json_conf, "proxy"); arr_val = json_object_get(json_conf, "proxy");
if (arr_val && json_is_array(arr_val)) { if (arr_val && json_is_array(arr_val)) {

4
src/ckpool.h

@ -146,8 +146,8 @@ struct ckpool_instance {
int blockpoll; // How frequently in ms to poll bitcoind for block updates int blockpoll; // How frequently in ms to poll bitcoind for block updates
/* Difficulty settings */ /* Difficulty settings */
int mindiff; // Default 1 int64_t mindiff; // Default 1
int startdiff; // Default 42 int64_t startdiff; // Default 42
/* Coinbase data */ /* Coinbase data */
char *btcaddress; // Address to mine to char *btcaddress; // Address to mine to

25
src/stratifier.c

@ -1408,7 +1408,7 @@ static double sane_tdiff(tv_t *end, tv_t *start)
return tdiff; 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; double tdiff, bdiff, dsps, drr, network_diff, bias;
int64_t next_blockid, optimal; int64_t next_blockid, optimal;
@ -1467,23 +1467,18 @@ static void add_submit(stratum_instance_t *client, int diff, bool valid)
return; return;
optimal = round(dsps * 3.33); 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 /* Don't drop diff to rapidly in case the client simply switched away
* and has just returned */ * and has just returned */
if (optimal < client->diff / 2) if (optimal < client->diff / 2)
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; client->ssdc = 0;
LOGINFO("Client %d biased dsps %.2f dsps %.2f drr %.2f adjust diff from %ld to: %ld ", LOGINFO("Client %d biased dsps %.2f dsps %.2f drr %.2f adjust diff from %ld to: %ld ",
@ -1812,7 +1807,7 @@ out_unlock:
} }
} else } else
LOGINFO("Rejected client %d invalid share", client->id); 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. */ /* Now write to the pool's sharelog. */
val = json_object(); val = json_object();

Loading…
Cancel
Save