From bb4ce3c6d869d5f7dd1d5114c7fe711ae0440cd8 Mon Sep 17 00:00:00 2001 From: kanoi Date: Wed, 29 Oct 2014 17:34:47 +1100 Subject: [PATCH] php - generate payout txn text on pplns page --- pool/page_pplns.php | 146 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 128 insertions(+), 18 deletions(-) diff --git a/pool/page_pplns.php b/pool/page_pplns.php index 1470d59f..1b46dd0e 100644 --- a/pool/page_pplns.php +++ b/pool/page_pplns.php @@ -14,6 +14,102 @@ function stnum($num) return $b4.$fmt.$af; } # +# ... Of course ... check the output and add the txin +function calctx($ans, $count, $miner_sat, $diffacc_total) +{ + $pg = '
'; + $pg .= '
'; + + $dust = getparam('dust', true); + if (nuem($dust) || $dust <= 0) + $dust = 10000; + + $fee = getparam('fee', true); + if (nuem($fee) || $fee < 0) + $fee = 0; + $fee *= 100000000; + + $adr = array(); + $ers = ''; + $unpaid = 0; + $change = $miner_sat; + $dust_amt = 0; # not included in $change + for ($i = 0; $i < $count; $i++) + { + $username = $ans['user:'.$i]; + $diffacc_user = $ans['diffacc_user:'.$i]; + $pay_sat = floor($miner_sat * $diffacc_user / $diffacc_total); + $payaddress = $ans['payaddress:'.$i]; + if ($payaddress == 'none') + { + $len = strlen($username); + $c0 = substr($username, 0, 1); + if (($c0 == '1' || $c0 == '3') && $len > 26 && $len < 37) + $payaddress = $username; + else + { + if ($pay_sat > 0) + { + $dd = ''; + if ($pay_sat < $dust) + $dd = ' (dust)'; + $ers .= "No address for '$username'$dd
"; + } + $unpaid += $pay_sat; + continue; + } + } + if (isset($adr[$payaddress])) + $adr[$payaddress] += $pay_sat; + else + $adr[$payaddress] = $pay_sat; + + $change -= $pay_sat; + } + + $txout = ''; + $comma = ''; + foreach ($adr as $payaddress => $pay_sat) + { + if ($pay_sat < $dust) + $dust_amt += $pay_sat; + else + { + $txout .= "$comma\"$payaddress\":".btcfmt($pay_sat); + $comma = ', '; + } + } + + if ($change > 0 || $dust_amt > 0 || $change < $fee) + { + $pg .= "Dust limit = $dust = ".btcfmt($dust); + $pg .= ", Dust amount = $dust_amt = ".btcfmt($dust_amt); + $pg .= ",
Upaid = $unpaid = ".btcfmt($unpaid); + $pg .= ", Change = $change = ".btcfmt($change); + $pg .= ",
Fee = $fee = ".btcfmt($fee)."

"; + + if ($change < $fee) + $ers .= "Change ($change) is less than Fee ($fee)
"; + + if (($dust_amt + $change - $fee) > 0) + { + $txout .= "$comma\"<changeaddress>\":"; + $txout .= btcfmt($dust_amt + $change - $fee); + $comma = ', '; + } + } + + if (strlen($ers) > 0) + $pg .= "$ers
"; + + $txn = '[{"txid":"<txid1>","vout":<n>},'; + $txn .= '{"txid":"<txid2>","vout":<n>}] '; + $txn .= '{'.$txout.'}
'; + + $pg .= $txn.'
'; + return $pg; +} +# function dopplns($data, $user) { global $send_sep; @@ -23,13 +119,29 @@ function dopplns($data, $user) $blk = getparam('blk', true); if (nuem($blk)) { + $tx = ''; + # so can make a link + $blkuse = getparam('blkuse', true); + if (nuem($blkuse)) + $blkuse = ''; + else + $tx = 'y'; $pg = '
'.makeForm('pplns')." -Block: +Block: +  Tx: +  Dust (Satoshi): +  Fee (BTC):   "; } else { + $tx = getparam('tx', true); + if (nuem($tx) || substr($tx, 0, 1) != 'y') + $dotx = false; + else + $dotx = true; + $flds = array('height' => $blk, 'allow_aged' => 'Y'); $msg = msgEncode('pplns', 'pplns', $flds, $user); $rep = sendsockreply('pplns', $msg); @@ -42,9 +154,14 @@ Block: if ($ans['ERROR'] != null) return '
'.$ans['STATUS'].': '.$ans['ERROR'].'
'; + $reward_sat = $ans['block_reward']; + $miner_sat = round($reward_sat * 0.991); + $ans['miner_sat'] = $miner_sat; + $data = array( 'Block' => 'block', 'Block Hash' => 'block_hash', 'Block Reward (Satoshis)' => 'block_reward', + 'Miner Reward (Satoshis)' => 'miner_sat', 'PPLNS Wanted' => 'diff_want', 'PPLNS Used' => 'diffacc_total', 'Elapsed Seconds' => 'pplns_elapsed', @@ -84,34 +201,28 @@ Block: $pg .= "\n"; } - $pg .= "
\n"; + $pg .= "

\n"; $pg .= ''; $pg .= ''; $pg .= ''; $pg .= ''; - $pg .= ''; $pg .= ''; - $pg .= ''; + $pg .= ''; $pg .= ''; $pg .= "\n"; $diffacc_total = $ans['diffacc_total']; if ($diffacc_total == 0) $diffacc_total = pow(10,15); - $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).'%'; - $base_btc = $reward * $diffacc_user / $diffacc_total; - $diffacc_btc = number_format($base_btc, 8); + $diffacc_percent = number_format(100.0 * $diffacc_user / $diffacc_total, 3).'%'; $avg_hash = number_format($diffacc_user / $elapsed * pow(2,32), 0); - $pay_btc = $base_btc * 0.985; - $dsp_btc = number_format($pay_btc, 8); + $pay_sat = floor($miner_sat * $diffacc_user / $diffacc_total); $payaddress = $ans['payaddress:'.$i]; if (($i % 2) == 0) @@ -123,14 +234,12 @@ Block: $pg .= ''; $pg .= ""; $pg .= ""; - $pg .= ""; $pg .= ""; - $pg .= ""; + $pg .= ''; $pg .= ""; $pg .= "\n"; - $tot_btc += $base_btc; - $tot_pay += $pay_btc; + $tot_pay += $pay_sat; } if (($i % 2) == 0) $row = 'even'; @@ -139,13 +248,14 @@ Block: $pg .= ""; $pg .= ''; - $pg .= ""; $pg .= ''; - $pg .= ''; + $pg .= ''; $pg .= ''; $pg .= "\n"; - $pg .= "
UserDiff Accepted%Base BTCAvg HashrateBTC -1.5%BTC -0.9%Address
'.$ans['user:'.$i].'$diffacc_user$diffacc_percent$diffacc_btc$avg_hash$dsp_btc'.btcfmt($pay_sat).'$payaddress
".number_format($tot_btc,8)."'.number_format($tot_pay,8).''.btcfmt($tot_pay).'
\n"; + + if ($dotx === true) + $pg .= calctx($ans, $count, $miner_sat, $diffacc_total); } return $pg;