Browse Source

ckdb - more pplns options

master
kanoi 10 years ago
parent
commit
356ab4fcc9
  1. 77
      src/ckdb.c

77
src/ckdb.c

@ -8100,12 +8100,15 @@ static K_TREE *upd_add_mu(K_TREE *mu_root, K_STORE *mu_store, int64_t userid, in
/* Find the block_workinfoid of the block requested /* Find the block_workinfoid of the block requested
then add all it's diffacc shares then add all it's diffacc shares
then keep stepping back shares until diffacc_total matches or exceeds then keep stepping back shares until diffacc_total matches or exceeds
the blocks network difficulty (block_ndiff) - this is begin_workinfoid the number required (diff_want) - this is begin_workinfoid
(also summarising diffacc per user) (also summarising diffacc per user)
then keep stepping back until we complete the current begin_workinfoid then keep stepping back until we complete the current begin_workinfoid
(also summarising diffacc per user) (also summarising diffacc per user)
This will give us the total number of diff1 shares (diffacc_total) This will give us the total number of diff1 shares (diffacc_total)
to use for the payment calculations to use for the payment calculations
The value of diff_want defaults to the block's network difficulty
(block_ndiff) but can be changed with diff_times and diff_add to:
block_ndiff * diff_times + diff_add
The pplns_elapsed time of the shares is from the createdate of the The pplns_elapsed time of the shares is from the createdate of the
begin_workinfoid that has shares accounted to the total, begin_workinfoid that has shares accounted to the total,
up to the createdate of the block up to the createdate of the block
@ -8122,7 +8125,8 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
{ {
char reply[1024], tmp[1024], *buf; char reply[1024], tmp[1024], *buf;
size_t siz = sizeof(reply); size_t siz = sizeof(reply);
K_ITEM look, *i_height, *b_item, *w_item, *ss_item; K_ITEM *i_height, *i_difftimes, *i_diffadd, *i_allowaged;
K_ITEM look, *b_item, *w_item, *ss_item;
K_ITEM *mu_item, *wb_item, *u_item; K_ITEM *mu_item, *wb_item, *u_item;
SHARESUMMARY sharesummary; SHARESUMMARY sharesummary;
BLOCKS blocks; BLOCKS blocks;
@ -8131,9 +8135,14 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
int32_t height; int32_t height;
int64_t workinfoid, end_workinfoid; int64_t workinfoid, end_workinfoid;
int64_t begin_workinfoid; int64_t begin_workinfoid;
int64_t share_count;
tv_t cd, begin_tv, end_tv; tv_t cd, begin_tv, end_tv;
K_TREE_CTX ctx[1]; K_TREE_CTX ctx[1];
double ndiff, total, elapsed; double ndiff, total, elapsed;
double diff_times = 1.0;
double diff_add = 0.0;
double diff_want;
bool allow_aged = false;
char ndiffbin[TXT_SML+1]; char ndiffbin[TXT_SML+1];
size_t len, off; size_t len, off;
int rows; int rows;
@ -8143,9 +8152,22 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
i_height = require_name(trf_root, "height", 1, NULL, reply, siz); i_height = require_name(trf_root, "height", 1, NULL, reply, siz);
if (!i_height) if (!i_height)
return strdup(reply); return strdup(reply);
TXT_TO_INT("height", DATA_TRANSFER(i_height)->data, height); TXT_TO_INT("height", DATA_TRANSFER(i_height)->data, height);
i_difftimes = optional_name(trf_root, "diff_times", 1, NULL);
if (i_difftimes)
TXT_TO_DOUBLE("diff_times", DATA_TRANSFER(i_difftimes)->data, diff_times);
i_diffadd = optional_name(trf_root, "diff_add", 1, NULL);
if (i_diffadd)
TXT_TO_DOUBLE("diff_add", DATA_TRANSFER(i_diffadd)->data, diff_add);
i_allowaged = optional_name(trf_root, "allow_aged", 1, NULL);
if (i_allowaged) {
if (toupper(DATA_TRANSFER(i_allowaged)->data[0]) == TRUE_STR[0])
allow_aged = true;
}
cd.tv_sec = cd.tv_usec = 0L; cd.tv_sec = cd.tv_usec = 0L;
blocks.height = height + 1; blocks.height = height + 1;
blocks.blockhash[0] = '\0'; blocks.blockhash[0] = '\0';
@ -8175,7 +8197,9 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
hex2bin(ndiffbin, DATA_WORKINFO(w_item)->bits, 4); hex2bin(ndiffbin, DATA_WORKINFO(w_item)->bits, 4);
ndiff = diff_from_nbits(ndiffbin); ndiff = diff_from_nbits(ndiffbin);
diff_want = ndiff * diff_times + diff_add;
begin_workinfoid = 0; begin_workinfoid = 0;
share_count = 0;
total = 0; total = 0;
sharesummary.workinfoid = workinfoid; sharesummary.workinfoid = workinfoid;
@ -8196,8 +8220,21 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
mu_store = k_new_store(miningpayouts_free); mu_store = k_new_store(miningpayouts_free);
mu_root = new_ktree(); mu_root = new_ktree();
end_workinfoid = DATA_SHARESUMMARY(ss_item)->workinfoid; end_workinfoid = DATA_SHARESUMMARY(ss_item)->workinfoid;
// add up all sharesummaries until >= ndiff // add up all sharesummaries until >= diff_want
while (ss_item && total < ndiff) { while (ss_item && total < diff_want) {
switch (DATA_SHARESUMMARY(ss_item)->complete[0]) {
case SUMMARY_CONFIRM:
break;
case SUMMARY_COMPLETE:
if (allow_aged)
break;
default:
snprintf(reply, siz,
"ERR.sharesummary not ready in workinfo %"PRId64,
DATA_SHARESUMMARY(ss_item)->workinfoid);
goto shazbot;
}
share_count++;
total += (int64_t)(DATA_SHARESUMMARY(ss_item)->diffacc); total += (int64_t)(DATA_SHARESUMMARY(ss_item)->diffacc);
begin_workinfoid = DATA_SHARESUMMARY(ss_item)->workinfoid; begin_workinfoid = DATA_SHARESUMMARY(ss_item)->workinfoid;
mu_root = upd_add_mu(mu_root, mu_store, mu_root = upd_add_mu(mu_root, mu_store,
@ -8208,6 +8245,19 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
// include all the rest of the sharesummaries with begin_workinfoid // include all the rest of the sharesummaries with begin_workinfoid
while (ss_item && DATA_SHARESUMMARY(ss_item)->workinfoid == begin_workinfoid) { while (ss_item && DATA_SHARESUMMARY(ss_item)->workinfoid == begin_workinfoid) {
switch (DATA_SHARESUMMARY(ss_item)->complete[0]) {
case SUMMARY_CONFIRM:
break;
case SUMMARY_COMPLETE:
if (allow_aged)
break;
default:
snprintf(reply, siz,
"ERR.sharesummary not ready in workinfo %"PRId64,
DATA_SHARESUMMARY(ss_item)->workinfoid);
goto shazbot;
}
share_count++;
total += (int64_t)(DATA_SHARESUMMARY(ss_item)->diffacc); total += (int64_t)(DATA_SHARESUMMARY(ss_item)->diffacc);
mu_root = upd_add_mu(mu_root, mu_store, mu_root = upd_add_mu(mu_root, mu_store,
DATA_SHARESUMMARY(ss_item)->userid, DATA_SHARESUMMARY(ss_item)->userid,
@ -8234,7 +8284,7 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
* that were accepted as part of the block's workinfoid anyway * that were accepted as part of the block's workinfoid anyway
* All shares accepted in a workinfoid after the blocks workinfoid * All shares accepted in a workinfoid after the blocks workinfoid
* will not be creditied in this block no matter what the height * will not be creditied in this block no matter what the height
* of the workinfo - but will be candidates for the next block */ * of the workinfoid - but will be candidates for the next block */
elapsed = tvdiff(&end_tv, &begin_tv); elapsed = tvdiff(&end_tv, &begin_tv);
APPEND_REALLOC_INIT(buf, off, len); APPEND_REALLOC_INIT(buf, off, len);
@ -8249,8 +8299,6 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "diffacc_total=%.0f%c", total, FLDSEP); snprintf(tmp, sizeof(tmp), "diffacc_total=%.0f%c", total, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "block_ndiff=%f%c", ndiff, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "pplns_elapsed=%f%c", elapsed, FLDSEP); snprintf(tmp, sizeof(tmp), "pplns_elapsed=%f%c", elapsed, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
@ -8286,7 +8334,18 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
mu_item = next_in_ktree(ctx); mu_item = next_in_ktree(ctx);
} }
snprintf(tmp, sizeof(tmp), "rows=%d", rows); snprintf(tmp, sizeof(tmp), "rows=%d%c", rows, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "block_ndiff=%f%c", ndiff, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "diff_times=%f%c", diff_times, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "diff_add=%f%c", diff_add, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "diff_want=%f%c", diff_want, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "share_count=%"PRId64, share_count);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
mu_root = free_ktree(mu_root, NULL); mu_root = free_ktree(mu_root, NULL);

Loading…
Cancel
Save