You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
10 KiB
246 lines
10 KiB
- var colClass = "col-lg-6 px-2";
|
|
if (exchangeRates || networkVolume)
|
|
- colClass = "col-lg-4 px-2";
|
|
|
|
- var utxoCalculatingDesc = "At startup the app pulls a summary of the UTXO set. Until this summary is retrieved this data can't be displayed. Wait for the summary request to your node to return, then refresh this page.";
|
|
|
|
div.row.index-summary
|
|
div(class=colClass)
|
|
h5.h6 Mining
|
|
|
|
table.table.table-borderless.table-sm.table-hover.mb-lg-0
|
|
tbody
|
|
|
|
if (hashrate1d && hashrate7d)
|
|
- var hashrate1dayData0 = utils.formatLargeNumber(hashrate1d, 0);
|
|
- var hashrate7dayData0 = utils.formatLargeNumber(hashrate7d, 0);
|
|
- var hashrate1dayData1 = utils.formatLargeNumber(hashrate1d, 1);
|
|
- var hashrate7dayData1 = utils.formatLargeNumber(hashrate7d, 1);
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-tachometer-alt.mr-1.summary-icon
|
|
span.border-dotted(title="Estimates for global network hashrate for 1 day / 7 days.", data-toggle="tooltip") Hashrate
|
|
small.ml-1 (d/w)
|
|
td.text-right.text-monospace
|
|
span.d-xxl-none #{hashrate1dayData0[0]}
|
|
span.d-none.d-xxl-inline #{hashrate1dayData1[0]}
|
|
small.text-muted /
|
|
span.d-xxl-none #{hashrate7dayData0[0]}
|
|
span.d-none.d-xxl-inline #{hashrate7dayData1[0]}
|
|
small.border-dotted(title=`${hashrate1dayData0[1].abbreviation}H = ${hashrate1dayData0[1].name}-hash (x10^${hashrate1dayData0[1].exponent})`, data-toggle="tooltip") #{hashrate1dayData0[1].abbreviation}H/s
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-edit.mr-1.summary-icon
|
|
span.border-dotted(title="Estimate of the number of days the current global hashrate would require to produce all the hashes needed to re-write the entire blockchain.", data-toggle="tooltip") Chain Rewrite Days
|
|
td.text-right.text-monospace
|
|
- var globalHashCount = parseInt("0x" + getblockchaininfo.chainwork);
|
|
- var rewriteDays = globalHashCount / hashrate7d / 60 / 60 / 24;
|
|
span #{new Decimal(rewriteDays).toDecimalPlaces(1)}
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-dumbbell.mr-1.summary-icon
|
|
span Difficulty
|
|
td.text-right.text-monospace
|
|
- var difficultyData = utils.formatLargeNumber(getblockchaininfo.difficulty, 2);
|
|
span.border-dotted(data-toggle="tooltip", title=parseFloat(getblockchaininfo.difficulty).toLocaleString())
|
|
span #{difficultyData[0]}
|
|
small.px-2.px-lg-0.px-xl-2 x
|
|
span 10
|
|
sup #{difficultyData[1].exponent}
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-unlock.mr-1.summary-icon
|
|
span Pending Tx
|
|
td.text-right.text-monospace
|
|
- var colorClass = "text-success";
|
|
if (mempoolInfo.size > 7000)
|
|
- colorClass = "text-warning";
|
|
if (mempoolInfo.size > 11000)
|
|
- colorClass = "text-danger";
|
|
|
|
span(class=colorClass) #{mempoolInfo.size.toLocaleString()}
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-bullseye.mr-1.summary-icon
|
|
span.border-dotted(title="Current fee estimates (using 'estimatesmartfee') for getting a transaction included in 1 block, 6 blocks (1 hr), 144 blocks (1 day), or 1,008 blocks (1 week).", data-toggle="tooltip") Fee Targets
|
|
if (false)
|
|
small.ml-1 (1/h/d/w)
|
|
td.text-right.text-monospace #{smartFeeEstimates[1]}
|
|
small.d-md-none
|
|
small.text-muted /
|
|
span #{smartFeeEstimates[6]}
|
|
small.text-muted /
|
|
span #{smartFeeEstimates[144]}
|
|
small.text-muted /
|
|
span #{smartFeeEstimates[1008]}
|
|
small sat/vB
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-clock.mr-1.summary-icon
|
|
span.border-dotted(title=`Average block time for blocks in the current difficulty epoch (#${difficultyPeriod}). The difference between the target (${coinConfig.targetBlockTimeMinutes}min) and this time indicates how the difficulty will adjust for the next epoch.`, data-toggle="tooltip") Block Time
|
|
small.ml-1 (e#{difficultyPeriod.toLocaleString()})
|
|
td.text-right.text-monospace
|
|
- var firstBlockHeader = difficultyPeriodFirstBlockHeader;
|
|
- var currentBlock = latestBlocks[0];
|
|
- var heightDiff = currentBlock.height - firstBlockHeader.height;
|
|
- var timeDiff = currentBlock.mediantime - firstBlockHeader.mediantime;
|
|
- var timePerBlock = timeDiff / heightDiff;
|
|
- var timePerBlockDuration = moment.duration(timePerBlock * 1000);
|
|
|
|
if (timePerBlock > 600)
|
|
- var diffAdjPercent = new Decimal(timeDiff / heightDiff / 600).times(100).minus(100);
|
|
- var diffAdjText = `Prediction for next difficulty adjustment (in ${blocksUntilDifficultyAdjustment} block${blocksUntilDifficultyAdjustment == 1 ? "" : "s"}): -${diffAdjPercent.toDP(1)}%`;
|
|
- var diffAdjSign = "-";
|
|
else
|
|
- var diffAdjPercent = new Decimal(100).minus(new Decimal(timeDiff / heightDiff / 600).times(100));
|
|
- var diffAdjText = `Prediction for next difficulty adjustment (in ${blocksUntilDifficultyAdjustment} block${blocksUntilDifficultyAdjustment == 1 ? "" : "s"}): +${diffAdjPercent.toDP(1)}%`;
|
|
- var diffAdjSign = "+";
|
|
|
|
span.border-dotted(title=diffAdjText, data-toggle="tooltip") #{timePerBlockDuration.format()}
|
|
small.text-muted.ml-1 (#{diffAdjSign}#{diffAdjPercent.toDP(1)}%)
|
|
|
|
|
|
div(class=colClass)
|
|
h5.h6 Blockchain
|
|
|
|
table.table.table-borderless.table-sm.table-hover.mb-lg-0
|
|
tbody
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-sign-out-alt.mr-1.summary-icon
|
|
//span Total Transactions
|
|
span Total Txs
|
|
td.text-right.text-monospace
|
|
if (txStats && txStats.totalTxCount)
|
|
span #{txStats.totalTxCount.toLocaleString()}
|
|
else
|
|
span ???
|
|
|
|
if (getblockchaininfo.size_on_disk)
|
|
- var sizeData = utils.formatLargeNumber(getblockchaininfo.size_on_disk, 2);
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-database.mr-1.summary-icon
|
|
span Data Size
|
|
td.text-right.text-monospace #{sizeData[0]} #{sizeData[1].abbreviation}B
|
|
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-bolt.mr-1.summary-icon
|
|
span.border-dotted(title="The total amount of work necessary to produce the active chain, approximated in 'hashes'.", data-toggle="tooltip") Chain Work
|
|
td.text-right.text-monospace
|
|
- var chainworkData = utils.formatLargeNumber(parseInt("0x" + getblockchaininfo.chainwork), 2);
|
|
span.border-dotted(data-toggle="tooltip", title=`hex: ${getblockchaininfo.chainwork.replace(/^0+/, '')}`)
|
|
span #{chainworkData[0]}
|
|
small.px-2.px-lg-0.px-xl-2 x
|
|
span 10
|
|
sup #{chainworkData[1].exponent}
|
|
|
|
if (false)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-arrow-circle-up.mr-1.summary-icon
|
|
span.border-dotted(title="The active 'soft' forks on the network.", data-toggle="tooltip") Soft-Forks
|
|
td.text-right.text-monospace.word-wrap
|
|
ul.list-inline.mb-0
|
|
each softforkData, softforkName in getblockchaininfo.softforks
|
|
li.list-inline-item
|
|
small.border-dotted(title=`${JSON.stringify(softforkData)}`, data-toggle="tooltip") #{softforkName}
|
|
|
|
|
|
if (utxoSetSummary || utxoSetSummaryPending)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-grip-horizontal.mr-1.summary-icon
|
|
span.border-dotted(title="The number / data size of 'unspent transaction outputs' (UTXOs) in the blockchain.", data-toggle="tooltip") UTXO Set
|
|
td.text-right.text-monospace
|
|
if (utxoSetSummary)
|
|
- var utxoCount = utils.formatLargeNumber(utxoSetSummary.txouts, 2);
|
|
- var utxoDataSize = utils.formatLargeNumber(utxoSetSummary.disk_size, 2);
|
|
span #{utxoCount[0]} #{utxoCount[1].abbreviation}
|
|
small.text-muted /
|
|
span #{utxoDataSize[0]} #{utxoDataSize[1].abbreviation}B
|
|
else
|
|
small.text-muted.border-dotted(title=utxoCalculatingDesc, data-toggle="tooltip") calculating...
|
|
|
|
if (utxoSetSummary || utxoSetSummaryPending)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fab.fa-bitcoin.mr-1.summary-icon
|
|
span Total Supply
|
|
td.text-right.text-monospace
|
|
if (utxoSetSummary)
|
|
- var maxSupply = coinConfig.maxSupplyByNetwork[activeBlockchain];
|
|
|
|
span.border-dotted(title=`${new Decimal(utxoSetSummary.total_amount).dividedBy(maxSupply).times(100).toDP(4)}% produced`, data-toggle="tooltip") #{parseFloat(utxoSetSummary.total_amount).toLocaleString()}
|
|
else
|
|
small.text-muted.border-dotted(title=utxoCalculatingDesc, data-toggle="tooltip") calculating...
|
|
|
|
if (networkVolume || exchangeRates)
|
|
div(class=colClass)
|
|
h5.h6 Financials
|
|
|
|
table.table.table-borderless.table-sm.table-hover.mb-lg-0
|
|
tbody
|
|
if (exchangeRates)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-money-bill-wave-alt.mr-1.summary-icon
|
|
span.border-dotted(data-toggle="tooltip", title=("Exchange-rate data from: " + coinConfig.exchangeRateData.jsonUrl)) Exchange Rate
|
|
td.text-right.text-monospace
|
|
span #{utils.formatValueInActiveCurrency(1.0)}
|
|
|
|
if (exchangeRates)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fab.fa-btc.mr-1.summary-icon
|
|
span Sats Rate
|
|
td.text-right.text-monospace
|
|
- var satsRateData = utils.satoshisPerUnitOfActiveCurrency();
|
|
span #{satsRateData.amt}
|
|
small #{satsRateData.unit}
|
|
|
|
if (exchangeRates)
|
|
if (utxoSetSummary || utxoSetSummaryPending)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-globe.mr-1.summary-icon
|
|
span Market Cap
|
|
td.text-right.text-monospace
|
|
if (utxoSetSummary)
|
|
- var activeCurrency = global.currencyFormatType.length > 0 ? global.currencyFormatType : "usd";
|
|
- var xxx = utils.formatLargeNumber(parseFloat(utxoSetSummary.total_amount) * exchangeRates[activeCurrency], 1);
|
|
|
|
if (activeCurrency == "eur")
|
|
span €
|
|
else
|
|
span $
|
|
|
|
span #{xxx[0]}
|
|
if (xxx[1].textDesc)
|
|
span #{xxx[1].textDesc}
|
|
else
|
|
span x 10
|
|
sup #{xxx[1].exponent}
|
|
// ["154.9",{"val":1000000000,"name":"giga","abbreviation":"G","exponent":"9"}]
|
|
|
|
else
|
|
small.text-muted.border-dotted(title=utxoCalculatingDesc, data-toggle="tooltip") calculating...
|
|
|
|
if (networkVolume)
|
|
tr
|
|
th.px-2.px-lg-0.px-xl-2
|
|
i.fas.fa-history.mr-1.summary-icon
|
|
span.border-dotted(title=`Total output of all transactions over the last 24 hrs (blocks: [#${networkVolume.d1.endBlock.toLocaleString()} - #${networkVolume.d1.startBlock.toLocaleString()}]).`, data-toggle="tooltip") Volume
|
|
small.ml-1 (24h)
|
|
td.text-right.text-monospace
|
|
- var currencyValue = parseInt(networkVolume.d1.amt);
|
|
- var currencyValueDecimals = 0;
|
|
include ./value-display.pug
|
|
|