diff --git a/pool/page_pplns.php b/pool/page_pplns.php
index 42f47acc..610f00c4 100644
--- a/pool/page_pplns.php
+++ b/pool/page_pplns.php
@@ -90,6 +90,8 @@ Block:
$pg .= '
% | ';
$pg .= 'Base BTC | ';
$pg .= 'Avg Hashrate | ';
+ $pg .= 'BTC -1.5% | ';
+ $pg .= 'Address | ';
$pg .= "\n";
$diffacc_total = $ans['diffacc_total'];
@@ -98,12 +100,18 @@ Block:
$reward = $ans['block_reward'] / pow(10,8);
$elapsed = $ans['pplns_elapsed'];
$count = $ans['rows'];
+ $tot_btc = 0;
+ $tot_pay = 0;
for ($i = 0; $i < $count; $i++)
{
$diffacc_user = $ans['diffacc_user:'.$i];
$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);
+ $pay_btc = $base_btc * 0.985;
+ $dsp_btc = number_format($pay_btc, 8);
+ $payaddress = $ans['payaddress:'.$i];
if (($i % 2) == 0)
$row = 'even';
@@ -116,8 +124,26 @@ Block:
$pg .= "$diffacc_percent | ";
$pg .= "$diffacc_btc | ";
$pg .= "$avg_hash | ";
+ $pg .= "$dsp_btc | ";
+ $pg .= "$payaddress | ";
$pg .= "\n";
+
+ $tot_btc += $base_btc;
+ $tot_pay += $pay_btc;
}
+ if (($i % 2) == 0)
+ $row = 'even';
+ else
+ $row = 'odd';
+
+ $pg .= "";
+ $pg .= ' | ';
+ $pg .= "".number_format($tot_btc,8)." | ";
+ $pg .= ' | ';
+ $pg .= ''.number_format($tot_pay,8).' | ';
+ $pg .= ' | ';
+ $pg .= "
\n";
+
$pg .= "\n";
}
diff --git a/sql/bs.sql b/sql/bs.sql
new file mode 100644
index 00000000..4d526cc0
--- /dev/null
+++ b/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 $$;
diff --git a/src/ckdb.c b/src/ckdb.c
index 80492eba..26e16ac2 100644
--- a/src/ckdb.c
+++ b/src/ckdb.c
@@ -47,7 +47,7 @@
#define DB_VLOCK "1"
#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_HERE __FILE__, __func__, __LINE__
@@ -2915,6 +2915,11 @@ static bool users_fill(PGconn *conn)
item = k_unlink_head(users_free);
DATA_USERS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "userid", field, ok);
if (!ok)
break;
@@ -3363,6 +3368,11 @@ static bool workers_fill(PGconn *conn)
item = k_unlink_head(workers_free);
DATA_WORKERS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "userid", field, ok);
if (!ok)
break;
@@ -3652,6 +3662,11 @@ static bool paymentaddresses_fill(PGconn *conn)
item = k_unlink_head(paymentaddresses_free);
DATA_PAYMENTADDRESSES(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "paymentaddressid", field, ok);
if (!ok)
break;
@@ -3759,6 +3774,11 @@ static bool payments_fill(PGconn *conn)
item = k_unlink_head(payments_free);
DATA_PAYMENTS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "userid", field, ok);
if (!ok)
break;
@@ -4383,7 +4403,7 @@ static bool workinfo_fill(PGconn *conn)
// TODO: select the data based on sharesummary since old data isn't needed
// 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 "
// "workinfoid,poolinstance,transactiontree,merklehash,prevhash,"
"workinfoid,poolinstance,merklehash,prevhash,"
@@ -4417,6 +4437,11 @@ static bool workinfo_fill(PGconn *conn)
item = k_unlink_head(workinfo_free);
DATA_WORKINFO(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "workinfoid", field, ok);
if (!ok)
break;
@@ -5229,6 +5254,11 @@ static bool sharesummary_fill(PGconn *conn)
item = k_unlink_head(sharesummary_free);
DATA_SHARESUMMARY(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
row->inserted = true;
PQ_GET_FLD(res, i, "userid", field, ok);
@@ -6045,6 +6075,11 @@ static bool blocks_fill(PGconn *conn)
item = k_unlink_head(blocks_free);
DATA_BLOCKS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "height", field, ok);
if (!ok)
break;
@@ -6320,6 +6355,11 @@ static bool miningpayouts_fill(PGconn *conn)
item = k_unlink_head(miningpayouts_free);
DATA_MININGPAYOUTS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "miningpayoutid", field, ok);
if (!ok)
break;
@@ -6582,6 +6622,11 @@ static bool auths_fill(PGconn *conn)
item = k_unlink_head(auths_free);
DATA_AUTHS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
PQ_GET_FLD(res, i, "authid", field, ok);
if (!ok)
break;
@@ -6817,6 +6862,11 @@ static bool poolstats_fill(PGconn *conn)
item = k_unlink_head(poolstats_free);
DATA_POOLSTATS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
row->stored = true;
PQ_GET_FLD(res, i, "poolinstance", field, ok);
@@ -7260,6 +7310,11 @@ static bool userstats_fill(PGconn *conn)
item = k_unlink_head(userstats_free);
DATA_USERSTATS(row, item);
+ if (everyone_die) {
+ ok = false;
+ break;
+ }
+
// Not a DB field
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);
K_RUNLOCK(users_free);
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);
snprintf(tmp, sizeof(tmp),
- "user:%d=%s%c",
- rows,
- users->username,
- FLDSEP);
+ "user:%d=%s%cpayaddress:%d=%s%c",
+ rows, users->username, FLDSEP,
+ rows, payaddress, FLDSEP);
+
} else {
snprintf(tmp, sizeof(tmp),
- "user:%d=%"PRId64"%c",
- rows,
- miningpayouts->userid,
- FLDSEP);
+ "user:%d=%"PRId64"%cpayaddress:%d=none%c",
+ rows, miningpayouts->userid, FLDSEP,
+ rows, FLDSEP);
}
APPEND_REALLOC(buf, off, len, tmp);
@@ -10038,9 +10103,9 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
rows++;
}
snprintf(tmp, sizeof(tmp),
- "rows=%d%c,flds=%s%c",
+ "rows=%d%cflds=%s%c",
rows, FLDSEP,
- "user,diffacc_user", FLDSEP);
+ "user,diffacc_user,payaddress", FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s%c",