Browse Source

Merge branch 'master' of bitbucket.org:ckolivas/ckpool

master
Con Kolivas 10 years ago
parent
commit
61281997cd
  1. 28
      pool/page_pplns.php
  2. 44
      sql/bs.sql
  3. 89
      src/ckdb.c

28
pool/page_pplns.php

@ -90,6 +90,8 @@ Block: <input type=text name=blk size=10 value=''>
$pg .= '<td class=dr>%</td>'; $pg .= '<td class=dr>%</td>';
$pg .= '<td class=dr>Base BTC</td>'; $pg .= '<td class=dr>Base BTC</td>';
$pg .= '<td class=dr>Avg Hashrate</td>'; $pg .= '<td class=dr>Avg Hashrate</td>';
$pg .= '<td class=dr>BTC -1.5%</td>';
$pg .= '<td class=dr>Address</td>';
$pg .= "</tr>\n"; $pg .= "</tr>\n";
$diffacc_total = $ans['diffacc_total']; $diffacc_total = $ans['diffacc_total'];
@ -98,12 +100,18 @@ Block: <input type=text name=blk size=10 value=''>
$reward = $ans['block_reward'] / pow(10,8); $reward = $ans['block_reward'] / pow(10,8);
$elapsed = $ans['pplns_elapsed']; $elapsed = $ans['pplns_elapsed'];
$count = $ans['rows']; $count = $ans['rows'];
$tot_btc = 0;
$tot_pay = 0;
for ($i = 0; $i < $count; $i++) for ($i = 0; $i < $count; $i++)
{ {
$diffacc_user = $ans['diffacc_user:'.$i]; $diffacc_user = $ans['diffacc_user:'.$i];
$diffacc_percent = number_format(100.0 * $diffacc_user / $diffacc_total, 2).'%'; $diffacc_percent = number_format(100.0 * $diffacc_user / $diffacc_total, 2).'%';
$diffacc_btc = number_format($reward * $diffacc_user / $diffacc_total, 8); $base_btc = $reward * $diffacc_user / $diffacc_total;
$diffacc_btc = number_format($base_btc, 8);
$avg_hash = number_format($diffacc_user / $elapsed * pow(2,32), 0); $avg_hash = number_format($diffacc_user / $elapsed * pow(2,32), 0);
$pay_btc = $base_btc * 0.985;
$dsp_btc = number_format($pay_btc, 8);
$payaddress = $ans['payaddress:'.$i];
if (($i % 2) == 0) if (($i % 2) == 0)
$row = 'even'; $row = 'even';
@ -116,8 +124,26 @@ Block: <input type=text name=blk size=10 value=''>
$pg .= "<td class=dr>$diffacc_percent</td>"; $pg .= "<td class=dr>$diffacc_percent</td>";
$pg .= "<td class=dr>$diffacc_btc</td>"; $pg .= "<td class=dr>$diffacc_btc</td>";
$pg .= "<td class=dr>$avg_hash</td>"; $pg .= "<td class=dr>$avg_hash</td>";
$pg .= "<td class=dr>$dsp_btc</td>";
$pg .= "<td class=dr>$payaddress</td>";
$pg .= "</tr>\n"; $pg .= "</tr>\n";
$tot_btc += $base_btc;
$tot_pay += $pay_btc;
} }
if (($i % 2) == 0)
$row = 'even';
else
$row = 'odd';
$pg .= "<tr class=$row>";
$pg .= '<td class=dl colspan=3></td>';
$pg .= "<td class=dr>".number_format($tot_btc,8)."</td>";
$pg .= '<td class=dr></td>';
$pg .= '<td class=dr>'.number_format($tot_pay,8).'</td>';
$pg .= '<td class=dr></td>';
$pg .= "</tr>\n";
$pg .= "</table>\n"; $pg .= "</table>\n";
} }

44
sql/bs.sql

@ -0,0 +1,44 @@
SET SESSION AUTHORIZATION 'postgres';
DO $$
DECLARE
hi INT;
hi0 INT;
wi BIGINT;
wi0 BIGINT;
ssc INT;
da BIGINT;
BEGIN
hi := 318177;
-- This will randomly choose between multiple blocks of the same height
-- if we happen to orphan ourselves
select workinfoid from blocks where height = hi
and expirydate > '6666-06-01' into wi;
IF NOT found THEN
RAISE EXCEPTION 'Block % not found', hi;
END IF;
select max(height) from blocks where height < hi into hi0;
IF NOT found THEN
wi0 := -1;
ELSE
select workinfoid from blocks where height = hi0
and expirydate > '6666-06-01' into Wi0;
END IF;
RAISE WARNING 'Block: %(%)', hi, wi;
RAISE WARNING 'Previous block: %(%)', hi0, wi0;
select count(*) from sharesummary where workinfoid > wi0
and workinfoid <= wi and complete = 'n' into ssc;
IF ssc > 0 THEN
RAISE EXCEPTION 'Unaged sharesummary records: %', ssc;
ELSE
select sum(diffacc) from sharesummary where workinfoid > wi0
and workinfoid <= wi into da;
RAISE WARNING 'diffacc: %', to_char(da::bigint, 'FM999,999,999,999,999,990');
END IF;
END $$;

89
src/ckdb.c

@ -47,7 +47,7 @@
#define DB_VLOCK "1" #define DB_VLOCK "1"
#define DB_VERSION "0.9" #define DB_VERSION "0.9"
#define CKDB_VERSION DB_VERSION"-0.273" #define CKDB_VERSION DB_VERSION"-0.276"
#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__
@ -2915,6 +2915,11 @@ static bool users_fill(PGconn *conn)
item = k_unlink_head(users_free); item = k_unlink_head(users_free);
DATA_USERS(row, item); DATA_USERS(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "userid", field, ok); PQ_GET_FLD(res, i, "userid", field, ok);
if (!ok) if (!ok)
break; break;
@ -3363,6 +3368,11 @@ static bool workers_fill(PGconn *conn)
item = k_unlink_head(workers_free); item = k_unlink_head(workers_free);
DATA_WORKERS(row, item); DATA_WORKERS(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "userid", field, ok); PQ_GET_FLD(res, i, "userid", field, ok);
if (!ok) if (!ok)
break; break;
@ -3652,6 +3662,11 @@ static bool paymentaddresses_fill(PGconn *conn)
item = k_unlink_head(paymentaddresses_free); item = k_unlink_head(paymentaddresses_free);
DATA_PAYMENTADDRESSES(row, item); DATA_PAYMENTADDRESSES(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "paymentaddressid", field, ok); PQ_GET_FLD(res, i, "paymentaddressid", field, ok);
if (!ok) if (!ok)
break; break;
@ -3759,6 +3774,11 @@ static bool payments_fill(PGconn *conn)
item = k_unlink_head(payments_free); item = k_unlink_head(payments_free);
DATA_PAYMENTS(row, item); DATA_PAYMENTS(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "userid", field, ok); PQ_GET_FLD(res, i, "userid", field, ok);
if (!ok) if (!ok)
break; break;
@ -4383,7 +4403,7 @@ static bool workinfo_fill(PGconn *conn)
// TODO: select the data based on sharesummary since old data isn't needed // TODO: select the data based on sharesummary since old data isn't needed
// however, the ageing rules for workinfo will decide that also // however, the ageing rules for workinfo will decide that also
// keep the last block + current? // keep the last block + current? Rules will depend on payout scheme also
sel = "select " sel = "select "
// "workinfoid,poolinstance,transactiontree,merklehash,prevhash," // "workinfoid,poolinstance,transactiontree,merklehash,prevhash,"
"workinfoid,poolinstance,merklehash,prevhash," "workinfoid,poolinstance,merklehash,prevhash,"
@ -4417,6 +4437,11 @@ static bool workinfo_fill(PGconn *conn)
item = k_unlink_head(workinfo_free); item = k_unlink_head(workinfo_free);
DATA_WORKINFO(row, item); DATA_WORKINFO(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "workinfoid", field, ok); PQ_GET_FLD(res, i, "workinfoid", field, ok);
if (!ok) if (!ok)
break; break;
@ -5229,6 +5254,11 @@ static bool sharesummary_fill(PGconn *conn)
item = k_unlink_head(sharesummary_free); item = k_unlink_head(sharesummary_free);
DATA_SHARESUMMARY(row, item); DATA_SHARESUMMARY(row, item);
if (everyone_die) {
ok = false;
break;
}
row->inserted = true; row->inserted = true;
PQ_GET_FLD(res, i, "userid", field, ok); PQ_GET_FLD(res, i, "userid", field, ok);
@ -6045,6 +6075,11 @@ static bool blocks_fill(PGconn *conn)
item = k_unlink_head(blocks_free); item = k_unlink_head(blocks_free);
DATA_BLOCKS(row, item); DATA_BLOCKS(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "height", field, ok); PQ_GET_FLD(res, i, "height", field, ok);
if (!ok) if (!ok)
break; break;
@ -6320,6 +6355,11 @@ static bool miningpayouts_fill(PGconn *conn)
item = k_unlink_head(miningpayouts_free); item = k_unlink_head(miningpayouts_free);
DATA_MININGPAYOUTS(row, item); DATA_MININGPAYOUTS(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "miningpayoutid", field, ok); PQ_GET_FLD(res, i, "miningpayoutid", field, ok);
if (!ok) if (!ok)
break; break;
@ -6582,6 +6622,11 @@ static bool auths_fill(PGconn *conn)
item = k_unlink_head(auths_free); item = k_unlink_head(auths_free);
DATA_AUTHS(row, item); DATA_AUTHS(row, item);
if (everyone_die) {
ok = false;
break;
}
PQ_GET_FLD(res, i, "authid", field, ok); PQ_GET_FLD(res, i, "authid", field, ok);
if (!ok) if (!ok)
break; break;
@ -6817,6 +6862,11 @@ static bool poolstats_fill(PGconn *conn)
item = k_unlink_head(poolstats_free); item = k_unlink_head(poolstats_free);
DATA_POOLSTATS(row, item); DATA_POOLSTATS(row, item);
if (everyone_die) {
ok = false;
break;
}
row->stored = true; row->stored = true;
PQ_GET_FLD(res, i, "poolinstance", field, ok); PQ_GET_FLD(res, i, "poolinstance", field, ok);
@ -7260,6 +7310,11 @@ static bool userstats_fill(PGconn *conn)
item = k_unlink_head(userstats_free); item = k_unlink_head(userstats_free);
DATA_USERSTATS(row, item); DATA_USERSTATS(row, item);
if (everyone_die) {
ok = false;
break;
}
// Not a DB field // Not a DB field
row->poolinstance[0] = '\0'; row->poolinstance[0] = '\0';
@ -10012,18 +10067,28 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
u_item = find_userid(miningpayouts->userid); u_item = find_userid(miningpayouts->userid);
K_RUNLOCK(users_free); K_RUNLOCK(users_free);
if (u_item) { if (u_item) {
K_ITEM *pa_item;
PAYMENTADDRESSES *pa;
char *payaddress;
pa_item = find_paymentaddresses(miningpayouts->userid);
if (pa_item) {
DATA_PAYMENTADDRESSES(pa, pa_item);
payaddress = pa->payaddress;
} else
payaddress = "none";
DATA_USERS(users, u_item); DATA_USERS(users, u_item);
snprintf(tmp, sizeof(tmp), snprintf(tmp, sizeof(tmp),
"user:%d=%s%c", "user:%d=%s%cpayaddress:%d=%s%c",
rows, rows, users->username, FLDSEP,
users->username, rows, payaddress, FLDSEP);
FLDSEP);
} else { } else {
snprintf(tmp, sizeof(tmp), snprintf(tmp, sizeof(tmp),
"user:%d=%"PRId64"%c", "user:%d=%"PRId64"%cpayaddress:%d=none%c",
rows, rows, miningpayouts->userid, FLDSEP,
miningpayouts->userid, rows, FLDSEP);
FLDSEP);
} }
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
@ -10038,9 +10103,9 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
rows++; rows++;
} }
snprintf(tmp, sizeof(tmp), snprintf(tmp, sizeof(tmp),
"rows=%d%c,flds=%s%c", "rows=%d%cflds=%s%c",
rows, FLDSEP, rows, FLDSEP,
"user,diffacc_user", FLDSEP); "user,diffacc_user,payaddress", FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s%c", snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s%c",

Loading…
Cancel
Save