goback(); $DCR = ($coin->rpcencoding == 'DCR'); if (!$DCR) $this->goback(); $this->pageTitle = 'Tickets - '.$coin->symbol; // last week $list_since = arraySafeVal($_GET,'since',time()-(7*24*3600)); $maxrows = arraySafeVal($_GET,'rows', 2500); $remote = new WalletRPC($coin); $info = $remote->getinfo(); $stakeinfo = $remote->getstakeinfo(); $locked = $remote->getbalance('*',0,'locked'); echo getAdminSideBarLinks().'

'; echo getAdminWalletLinks($coin, $info, 'tickets').'

'; ////////////////////////////////////////////////////////////////////////////////////// JavascriptFile("/yaamp/ui/js/jquery.metadata.js"); JavascriptFile("/yaamp/ui/js/jquery.tablesorter.widgets.js"); echo << td.missed { color: darkred; } tr.voted { color: darkgreen; } div.balance { text-align: right; height: 30px; width: 200px; float: right; margin-top: -80px; margin-bottom: 16px; } div.form { text-align: right; height: 30px; width: 350px; float: right; margin-top: -48px; margin-bottom: 16px; margin-right: -8px; } .main-submit-button { cursor: pointer; }
Stake: {$locked} {$coin->symbol}
Balance: {$remote->getbalance()} {$coin->symbol}
end; showTableSorter('maintable', "{ tableClass: 'dataGrid', widgets: ['zebra','Storage','saveSort'], widgetOptions: { saveSort: true } }"); echo << Time Category Amount Stake Height Confirm Fees Tx end; $account = $DCR ? '*' : ''; $txs = $remote->listtransactions($account, $maxrows); if (empty($txs)) { if (!empty($remote->error)) { echo "RPC Error: {$remote->error}

"; } // retry... $txs = $remote->listtransactions($account, 400); } $txs_array = array(); $lastday = ''; if (!empty($txs)) { // to hide truncated days sums $tx = reset($txs); if (count($txs) == $maxrows) $lastday = strftime('%F', $tx['time']); if (!empty($txs)) foreach($txs as $tx) { if (intval($tx['time']) > $list_since) $txs_array[] = $tx; } krsort($txs_array); } $voted_txs = array(); $list_txs = array(); $tickets = $remote->gettickets(true); // extract stxs from decred transactions if (!empty($txs_array)) { $prev_tx = array(); $lastday = ''; foreach($txs_array as $key => $tx) { // required after a wallet resynch/import $txs_array[$key]['time'] = min($tx['timereceived'], arraySafeVal($tx,'blocktime', $tx['time'])); $prev_txid = arraySafeVal($prev_tx,"txid"); $category = $tx['category']; if (arraySafeVal($tx, 'txtype') == 'regular') { unset($txs_array[$key]); continue; } if ($category == 'send' && arraySafeVal($tx,'generated')) { $txs_array[$key]['category'] = 'spent'; } else if ($category == 'send' && $tx['amount'] == -0) { $stx = $remote->getrawtransaction($tx['txid'], 1); // voted (listed twice ? in listtransactions) if ($tx['vout'] > 0) { if (in_array($tx['txid'], $list_txs)) continue; // dup $category = 'ticket'; // ticket price $input = 0.; if ($stx && !empty($stx['vin'])) foreach ($stx['vin'] as $vin) { $input += $vin['amountin'] * 0.00000001; } $txs_array[$key]['input'] = $input; $list_txs[] = $tx['txid']; } else { $category = 'stake'; if ($stx && isset($stx['vin'][0])) { // won ticket value $txs_array[$key]['amount'] = $stx['vin'][0]['amountin'] * 0.00000001; } if ($stx && isset($stx['vin'][1])) { $voted_txs[] = arraySafeVal($stx['vin'][1],'txid'); $list_txs[] = $stx['vin'][1]['txid']; } } $txs_array[$key]['category'] = $category; $txs_array[$key]['stx'] = $stx; } else if ($category == 'send' && $prev_txid === arraySafeVal($tx,"txid")) { // if txid is the same as the last income... it's not a real "send" if ($prev_tx['amount'] == 0 - $tx['amount']) $txs_array[$key]['category'] = 'spent'; } else if ($category == 'receive') { $prev_tx = $tx; } // for truncated day sums if ($lastday == '' && count($txs) == $maxrows) $lastday = strftime('%F', $tx['time']); } ksort($txs_array); } if (!empty($tickets)) foreach ($tickets['hashes'] as $n => $txid) { if (!in_array($txid, $list_txs)) { $stx = $remote->getrawtransaction($txid, 1); $k = time() - $stx['time'] + $n; // sort key $stx['category'] = 'ticket'; if (isset($stx['vin'][0])) $stx['input'] = $stx['vin'][0]['amountin'] * 0.00000001; $commitamt = 0.; foreach ($stx['vout'] as $v) { if (arraySafeVal($v['scriptPubKey'],'type') == 'sstxcommitment') $commitamt += $v['scriptPubKey']['commitamt']; } if ($commitamt && isset($stx['vout'][0])) { $stx['fee'] = round($commitamt - $stx['vout'][0]['value'], 4); } $stx['stx'] = $stx; $txs_array[$k] = $stx; } ksort($txs_array); } $rows = 0; foreach($txs_array as $tx) { $category = arraySafeVal($tx, 'category'); if ($category != 'stake' && $category != 'ticket') continue; $conf = arraySafeVal($tx,'confirmations'); if ($category == 'stake' && $conf < 256) $category = 'immature'; $stx = arraySafeVal($tx,'stx'); $stake = ''; $amount = ''; if ($category == 'ticket') { $stake = arraySafeVal($stx, 'stake', $stx['vout'][0]['value']); if ($stake === 0) continue; if (in_array($tx['txid'], $voted_txs)) $category = 'voted'; else if (!in_array($tx['txid'], $tickets['hashes'])) $category = 'missed'; } else { $amount = (double) arraySafeVal($tx,'amount'); $stake = $amount - $stx['vout'][2]['value']; if (isset($stx['vout'][3]['value'])) // with pool fees $stake -= arraySafeVal($stx['vout'][3],'value'); } $block = null; if(isset($tx['blockhash'])) $block = $remote->getblock($tx['blockhash']); echo ''; $d = datetoa2($tx['time']); echo ''.$d.''; echo ''.$category.''; echo ''.$amount.''; echo ''.$stake.''; if($block) echo ''.$block['height'].''; else echo ''; echo ''.$conf.''; $fees = abs(arraySafeVal($tx,'fee')); echo ''.($fees ? altcoinvaluetoa($fees) : '').''; echo ''; if(!empty($block)) { $txid = arraySafeVal($tx, 'txid'); $label = substr($txid, 0, 7); echo $coin->createExplorerLink($label, array('txid'=>$txid), array('target'=>'_blank')); } echo ''; echo ''; $rows++; if ($rows >= $maxrows) break; } echo '
'; echo 'Ticket price: '.$stakeinfo['difficulty'].' + '.$remote->getticketfee().' '.$coin->symbol.'/kB
'; echo 'Tickets: '.$stakeinfo['live']; if ($stakeinfo['immature']) echo ' + '.$stakeinfo['immature'].' immature'; if ($stakeinfo['ownmempooltix']) echo ' + '.$stakeinfo['ownmempooltix'].' purchased'; echo '
'; echo 'Total won: '.$stakeinfo['totalsubsidy'].' '.$coin->symbol.' ('.$stakeinfo['voted'].')
'; if ($stakeinfo['missed']) echo 'Missed: '.$stakeinfo['missed'].'
'; $staking = $remote->getgenerate() > 0 ? 'enabled' : 'disabled'; echo '
'; echo 'Staking: '.$staking.'
'; echo 'Auto buy ticket(s) < '.$remote->getticketmaxprice().' '.$coin->symbol.'
'; echo '

';
//echo json_encode($stakeinfo, 128);
echo '
';