Browse Source

ckdb/php - add block reward mean to block stats

master
kanoi 9 years ago
parent
commit
7b9233054a
  1. 3
      pool/page_blocks.php
  2. 2
      src/ckdb.c
  3. 6
      src/ckdb.h
  4. 8
      src/ckdb_cmd.c
  5. 27
      src/ckdb_data.c

3
pool/page_blocks.php

@ -98,6 +98,7 @@ function doblocks($data, $user)
$pg .= "<td class=dr>Mean%</td>"; $pg .= "<td class=dr>Mean%</td>";
$pg .= "<td class=dr>CDF[Erl]</td>"; $pg .= "<td class=dr>CDF[Erl]</td>";
$pg .= "<td class=dr>Luck%</td>"; $pg .= "<td class=dr>Luck%</td>";
$pg .= "<td class=dr>MeanTx%</td>";
$pg .= "</tr>\n"; $pg .= "</tr>\n";
$since = $data['info']['lastblock']; $since = $data['info']['lastblock'];
@ -121,6 +122,7 @@ function doblocks($data, $user)
$bg = " bgcolor=$bg"; $bg = " bgcolor=$bg";
$luck = number_format(100 * $ans['s_luck:'.$i], 2); $luck = number_format(100 * $ans['s_luck:'.$i], 2);
$txm = number_format(100 * $ans['s_txmean:'.$i], 1);
$pg .= "<tr class=$row>"; $pg .= "<tr class=$row>";
$pg .= "<td class=dl>$desc Blocks</td>"; $pg .= "<td class=dl>$desc Blocks</td>";
@ -129,6 +131,7 @@ function doblocks($data, $user)
$pg .= "<td class=dr>$mean%</td>"; $pg .= "<td class=dr>$mean%</td>";
$pg .= "<td class=dr$bg>$cdferldsp</td>"; $pg .= "<td class=dr$bg>$cdferldsp</td>";
$pg .= "<td class=dr>$luck%</td>"; $pg .= "<td class=dr>$luck%</td>";
$pg .= "<td class=dr>$txm%</td>";
$pg .= "</tr>\n"; $pg .= "</tr>\n";
} }
$pg .= "</table>\n"; $pg .= "</table>\n";

2
src/ckdb.c

@ -4621,7 +4621,7 @@ static bool reload_from(tv_t *start)
/* Used by marker() to start mark generation during a longer /* Used by marker() to start mark generation during a longer
* than normal reload */ * than normal reload */
if (count > RELOAD_N_COUNT) { if (count > RELOAD_N_COUNT) {
if (--file_N_limit < 1) if (file_N_limit-- < 1)
reloaded_N_files = true; reloaded_N_files = true;
} }

6
src/ckdb.h

@ -55,7 +55,7 @@
#define DB_VLOCK "1" #define DB_VLOCK "1"
#define DB_VERSION "1.0.3" #define DB_VERSION "1.0.3"
#define CKDB_VERSION DB_VERSION"-1.401" #define CKDB_VERSION DB_VERSION"-1.402"
#define WHERE_FFL " - from %s %s() line %d" #define WHERE_FFL " - from %s %s() line %d"
#define WHERE_FFL_HERE __FILE__, __func__, __LINE__ #define WHERE_FFL_HERE __FILE__, __func__, __LINE__
@ -1514,6 +1514,9 @@ typedef struct blocks {
double cdferl; double cdferl;
double luck; double luck;
// Mean reward ratio per block from last to this
double txmean;
// To save looking them up when needed // To save looking them up when needed
tv_t prevcreatedate; // non-DB field tv_t prevcreatedate; // non-DB field
tv_t blockcreatedate; // non-DB field tv_t blockcreatedate; // non-DB field
@ -2303,6 +2306,7 @@ extern bool workinfo_age(int64_t workinfoid, char *poolinstance, char *by,
char *code, char *inet, tv_t *cd, tv_t *ss_first, char *code, char *inet, tv_t *cd, tv_t *ss_first,
tv_t *ss_last, int64_t *ss_count, int64_t *s_count, tv_t *ss_last, int64_t *ss_count, int64_t *s_count,
int64_t *s_diff); int64_t *s_diff);
extern double coinbase_reward(int32_t height);
extern double workinfo_pps(K_ITEM *w_item, int64_t workinfoid, bool lock); extern double workinfo_pps(K_ITEM *w_item, int64_t workinfoid, bool lock);
extern cmp_t cmp_shares(K_ITEM *a, K_ITEM *b); extern cmp_t cmp_shares(K_ITEM *a, K_ITEM *b);
extern cmp_t cmp_shareerrors(K_ITEM *a, K_ITEM *b); extern cmp_t cmp_shareerrors(K_ITEM *a, K_ITEM *b);

8
src/ckdb_cmd.c

@ -1329,7 +1329,8 @@ redo:
"s_diffratio:%d=%.8f%c" "s_diffratio:%d=%.8f%c"
"s_diffmean:%d=%.8f%c" "s_diffmean:%d=%.8f%c"
"s_cdferl:%d=%.8f%c" "s_cdferl:%d=%.8f%c"
"s_luck:%d=%.8f%c", "s_luck:%d=%.8f%c"
"s_txmean:%d=%.8f%c",
srows, seq, FLDSEP, srows, seq, FLDSEP,
srows, desc, FLDSEP, srows, desc, FLDSEP,
srows, (int)(blocks->height), FLDSEP, srows, (int)(blocks->height), FLDSEP,
@ -1338,7 +1339,8 @@ redo:
srows, blocks->diffratio, FLDSEP, srows, blocks->diffratio, FLDSEP,
srows, blocks->diffmean, FLDSEP, srows, blocks->diffmean, FLDSEP,
srows, blocks->cdferl, FLDSEP, srows, blocks->cdferl, FLDSEP,
srows, blocks->luck, FLDSEP); srows, blocks->luck, FLDSEP,
srows, blocks->txmean, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
srows++; srows++;
} }
@ -1367,7 +1369,7 @@ redo:
"s_rows=%d%cs_flds=%s%c", "s_rows=%d%cs_flds=%s%c",
srows, FLDSEP, srows, FLDSEP,
"s_seq,s_desc,s_height,s_"CDTRF",s_prev"CDTRF",s_diffratio," "s_seq,s_desc,s_height,s_"CDTRF",s_prev"CDTRF",s_diffratio,"
"s_diffmean,s_cdferl,s_luck", "s_diffmean,s_cdferl,s_luck,s_txmean",
FLDSEP); FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);

27
src/ckdb_data.c

@ -2235,6 +2235,15 @@ bye:
return ok; return ok;
} }
// Block height coinbase reward value
double coinbase_reward(int32_t height)
{
double value;
value = REWARD_BASE * pow(0.5, floor((double)height / REWARD_HALVE));
return(value);
}
// The PPS value of a 1diff share for the given workinfoid // The PPS value of a 1diff share for the given workinfoid
double workinfo_pps(K_ITEM *w_item, int64_t workinfoid, bool lock) double workinfo_pps(K_ITEM *w_item, int64_t workinfoid, bool lock)
@ -2246,7 +2255,7 @@ double workinfo_pps(K_ITEM *w_item, int64_t workinfoid, bool lock)
char ndiffbin[TXT_SML+1]; char ndiffbin[TXT_SML+1];
WORKINFO *workinfo; WORKINFO *workinfo;
double w_diff; double w_diff;
int w_blocknum; int32_t w_blocknum;
size_t len; size_t len;
// Allow optioncontrol override for a given workinfoid // Allow optioncontrol override for a given workinfoid
@ -2284,10 +2293,10 @@ double workinfo_pps(K_ITEM *w_item, int64_t workinfoid, bool lock)
w_diff = diff_from_nbits(ndiffbin); w_diff = diff_from_nbits(ndiffbin);
hex2bin(coinbase1bin, workinfo->coinbase1 + (BLOCKNUM_OFFSET * 2), hex2bin(coinbase1bin, workinfo->coinbase1 + (BLOCKNUM_OFFSET * 2),
(len - (BLOCKNUM_OFFSET * 2)) >> 1); (len - (BLOCKNUM_OFFSET * 2)) >> 1);
w_blocknum = get_sernumber((uchar *)coinbase1bin); w_blocknum = (int32_t)get_sernumber((uchar *)coinbase1bin);
// BASE halving to determine coinbase reward then divided by difficulty // PPS 1diff is worth coinbase reward divided by difficulty
return(REWARD_BASE * pow(0.5, floor((double)w_blocknum / REWARD_HALVE)) / w_diff); return(coinbase_reward(w_blocknum) / w_diff);
} }
// order by workinfoid asc,userid asc,workername asc,createdate asc,nonce asc,expirydate desc // order by workinfoid asc,userid asc,workername asc,createdate asc,nonce asc,expirydate desc
@ -2965,7 +2974,7 @@ bool check_update_blocks_stats(tv_t *stats)
WORKINFO *workinfo; WORKINFO *workinfo;
BLOCKS *blocks; BLOCKS *blocks;
char ndiffbin[TXT_SML+1]; char ndiffbin[TXT_SML+1];
double ok, diffacc, netsumm, diffmean, pending; double ok, diffacc, netsumm, diffmean, pending, txmean, cr;
tv_t now; tv_t now;
/* Wait for startup_complete rather than db_load_complete /* Wait for startup_complete rather than db_load_complete
@ -2994,7 +3003,7 @@ bool check_update_blocks_stats(tv_t *stats)
} }
b_item = next_in_ktree(ctx); b_item = next_in_ktree(ctx);
} }
ok = diffacc = netsumm = diffmean = 0.0; ok = diffacc = netsumm = diffmean = 0.0, txmean = 0.0;
b_item = last_in_ktree(blocks_root, ctx); b_item = last_in_ktree(blocks_root, ctx);
while (b_item) { while (b_item) {
DATA_BLOCKS(blocks, b_item); DATA_BLOCKS(blocks, b_item);
@ -3043,6 +3052,7 @@ bool check_update_blocks_stats(tv_t *stats)
blocks->diffmean = 0.0; blocks->diffmean = 0.0;
blocks->cdferl = 0.0; blocks->cdferl = 0.0;
blocks->luck = 0.0; blocks->luck = 0.0;
blocks->txmean = 0.0;
} else { } else {
ok++; ok++;
diffacc += blocks->diffcalc; diffacc += blocks->diffcalc;
@ -3064,6 +3074,11 @@ bool check_update_blocks_stats(tv_t *stats)
blocks->cdferl = gsl_cdf_gamma_P(diffmean, ok, 1.0 / ok); blocks->cdferl = gsl_cdf_gamma_P(diffmean, ok, 1.0 / ok);
blocks->luck = 1.0 / diffmean; blocks->luck = 1.0 / diffmean;
} }
cr = coinbase_reward(blocks->height);
txmean = ((txmean * (ok - 1)) +
((double)(blocks->reward) / cr)) / ok;
blocks->txmean = txmean;
} }
} }
b_item = prev_in_ktree(ctx); b_item = prev_in_ktree(ctx);

Loading…
Cancel
Save