div.mb-2 if (result.getblock.previousblockhash) a.btn.btn-sm.btn-primary.mb-1(href=("/block/" + result.getblock.previousblockhash)) « Prev Block: span.text-monospace ##{(result.getblock.height - 1).toLocaleString()} else if (result.getblock.hash == genesisBlockHash) span.btn.btn-sm.btn-secondary.disabled.mb-1 « Prev Block: none (genesis block) span.mx-2 if (result.getblock.nextblockhash) a.btn.btn-sm.btn-primary.mb-1(href=("/block/" + result.getblock.nextblockhash)) Next Block: span.text-monospace ##{(result.getblock.height + 1).toLocaleString()} span » else a.btn.btn-sm.btn-secondary.disabled.mb-1 Next Block: N/A small (latest block) ul.nav.nav-tabs.mb-3 li.nav-item a.nav-link.active(data-toggle="tab", href="#tab-details", role="tab") Details li.nav-item a.nav-link(data-toggle="tab", href="#tab-json", role="tab") JSON - var txCount = result.getblock.tx.length; div.tab-content div(id="tab-details", class="tab-pane active", role="tabpanel") if (global.specialBlocks && global.specialBlocks[result.getblock.hash]) div(class="alert alert-primary shadow-sm", style="padding-bottom: 0;") div(class="float-left", style="width: 55px; height: 55px; font-size: 18px;") i(class="fas fa-certificate fa-2x", style="margin-top: 10px;") h4(class="alert-heading h6 font-weight-bold") #{coinConfig.name} Fun // special transaction info - var sbInfo = global.specialBlocks[result.getblock.hash]; if (sbInfo.alertBodyHtml) p span !{sbInfo.alertBodyHtml} if (sbInfo.referenceUrl && sbInfo.referenceUrl.trim().length > 0 && sbInfo.alertBodyHtml.indexOf(sbInfo.referenceUrl) == -1) span a(href=sbInfo.referenceUrl) Read more else p span #{sbInfo.summary} if (sbInfo.referenceUrl && sbInfo.referenceUrl.trim().length > 0) span a(href=sbInfo.referenceUrl) Read more div.row - var sumTableLabelClass = (result.blockstats != null ? "summary-split-table-label" : "summary-table-label"); - var sumTableValueClass = (result.blockstats != null ? "summary-split-table-content" : "summary-table-content"); div.mb-3(class=(result.blockstats != null ? "col-md-6 pr-0" : "col-md-12")) div.card.shadow-sm(style="height: 100%;") div.card-body.px-2.px-md-3 h3.h6.mb-0 Summary hr div.clearfix div.row div(class=sumTableLabelClass) Date div.text-monospace(class=sumTableValueClass) - var timestampHuman = result.getblock.time; include ./timestamp-human.pug small.ml-1 utc - var timeAgoTime = result.getblock.time; span.text-muted.ml-2 ( include ./time-ago-text.pug span ago) if (result.blockstats) div.row div(class=sumTableLabelClass) span.border-dotted(title="Total value of all transaction outputs (excluding the coinbase transaction)", data-toggle="tooltip") span Total Output div.text-monospace(class=sumTableValueClass) if (result.blockstats.total_out) - var currencyValue = new Decimal(result.blockstats.total_out).dividedBy(coinConfig.baseCurrencyUnit.multiplier); include ./value-display.pug else span 0 if (result.blockstats) div.row div(class=sumTableLabelClass) span.border-dotted(title="Total number of inputs and outputs", data-toggle="tooltip") span In # span.text-muted.font-weight-normal.mx-1 / span Out # div.text-monospace(class=sumTableValueClass) if (result.blockstats.ins) span #{result.blockstats.ins.toLocaleString()} else span 0 span.text-muted.mx-1 / if (result.blockstats.outs) span #{result.blockstats.outs.toLocaleString()} else span 1 if (result.blockstats) div.row div(class=sumTableLabelClass) span.border-dotted(title="Change in number (and size) of UTXO set.", data-toggle="tooltip") span UTXO Δ div.text-monospace(class=sumTableValueClass) - var sizePlusMinus = (result.blockstats.utxo_size_inc > 0) ? "+" : "-"; - var sizeDeltaData = utils.formatLargeNumber(Math.abs(result.blockstats.utxo_size_inc), 1); - var plusMinus = (result.blockstats.utxo_increase > 0) ? "+" : ""; if (result.blockstats.utxo_increase) span #{plusMinus}#{result.blockstats.utxo_increase.toLocaleString()} span.text-muted (#{sizePlusMinus}#{sizeDeltaData[0]} small #{sizeDeltaData[1].abbreviation}B span ) else span 0 if (result.blockstats) div.row div(class=sumTableLabelClass) Min, Max Tx Size div.text-monospace(class=sumTableValueClass) if (result.blockstats.mintxsize) span #{result.blockstats.mintxsize.toLocaleString()} else span 0 span.text-muted.mx-1 - if (result.blockstats.maxtxsize) span #{result.blockstats.maxtxsize.toLocaleString()} small B else span 0 - var blockRewardMax = coinConfig.blockRewardFunction(result.getblock.height, global.activeBlockchain); - var coinbaseTxTotalOutputValue = new Decimal(0); each vout in result.getblock.coinbaseTx.vout - coinbaseTxTotalOutputValue = coinbaseTxTotalOutputValue.plus(new Decimal(vout.value)); if (parseFloat(coinbaseTxTotalOutputValue) < blockRewardMax) div.row div(class=sumTableLabelClass) span.border-dotted(data-toggle="tooltip" title="The miner of this block failed to collect this value. As a result, it is permanently lost.") Fees Destroyed div.text-monospace.text-danger(class=sumTableValueClass) - var currencyValue = new Decimal(blockRewardMax).minus(coinbaseTxTotalOutputValue); include ./value-display.pug if (result.getblock.weight) div.row div(class=sumTableLabelClass) Weight div.text-monospace(class=sumTableValueClass) span #{result.getblock.weight.toLocaleString()} small wu span.text-muted (#{new Decimal(100 * result.getblock.weight / coinConfig.maxBlockWeight).toDecimalPlaces(2)}% full) div.row div(class=sumTableLabelClass) Size div.text-monospace(class=sumTableValueClass) #{result.getblock.size.toLocaleString()} small B div.row div(class=sumTableLabelClass) Confirmations div.text-monospace(class=sumTableValueClass) if (result.getblock.confirmations < 6) span(class="font-weight-bold text-warning") #{result.getblock.confirmations.toLocaleString()} a(data-toggle="tooltip", title="Fewer than 6 confirmations is generally considered 'unsettled' for high-value transactions. The applicability of this guidance may vary.") i(class="fas fa-unlock-alt") else span(class="font-weight-bold text-success font-weight-bold") #{result.getblock.confirmations.toLocaleString()} a(data-toggle="tooltip", title="6 confirmations is generally considered 'settled'. High-value transactions may require more; low-value transactions may require less.") i.fas.fa-lock if (result.blockstats) div.col-md-6.mb-3 div.card.shadow-sm(style="height: 100%;") div.card-body.px-2.px-md-3 h3.h6.mb-0 Fees Summary hr div.clearfix if (result.blockstats.ins == 0 || !result.blockstats.ins) span.text-monospace N/A (no inputs) else div.row div.summary-split-table-label Total div.summary-split-table-content.text-monospace if (result.blockstats.totalfee) - var currencyValue = new Decimal(result.blockstats.totalfee).dividedBy(coinConfig.baseCurrencyUnit.multiplier); include ./value-display.pug else - var currencyValue = new Decimal(result.getblock.totalFees); include ./value-display.pug if (result.blockstats) div.row div.summary-split-table-label Percentiles br small.font-weight-normal (sat/vB) div.summary-split-table-content.text-monospace div.clearfix each item, itemIndex in [10, 25, 50, 75, 90] div.float-left.mr-3 span.font-weight-bold #{item}% br if (result.blockstats.feerate_percentiles) span #{JSON.stringify(result.blockstats.feerate_percentiles[itemIndex])} else span - if (result.getblock.totalFees > 0) div.row div.summary-split-table-label Average Rate div.summary-split-table-content.text-monospace if (result.blockstats) span #{result.blockstats.avgfeerate} else - var currencyValue = new Decimal(result.getblock.totalFees).dividedBy(result.getblock.strippedsize).times(coinConfig.baseCurrencyUnit.multiplier).toDecimalPlaces(1); span #{currencyValue} small.ml-1 sat/vB br span.text-muted ( - var currencyValue = new Decimal(result.getblock.totalFees).dividedBy(result.getblock.tx.length); include ./value-display.pug span ) if (result.blockstats) div.row div.summary-split-table-label Median Rate div.summary-split-table-content.text-monospace if (result.blockstats.medianfee) - var currencyValue = new Decimal(result.blockstats.medianfee).dividedBy(1000).toDecimalPlaces(1); span #{currencyValue} small sat/vB else span 0 if (result.blockstats) div.row div.summary-split-table-label Min, Max Rate div.summary-split-table-content.text-monospace if (result.blockstats.minfeerate) span #{result.blockstats.minfeerate.toLocaleString()} else span 0 span.text-muted.mx-1 - if (result.blockstats.maxfeerate) span #{result.blockstats.maxfeerate.toLocaleString()} else span 0 small.ml-1 sat/vB if (result.blockstats) div.row div.summary-split-table-label span.border-dotted(title="These are the min and max fees for individual transactions included in this block.", data-toggle="tooltip") Min, Max Fee div.summary-split-table-content.text-monospace if (result.blockstats.minfee) - var currencyValue = new Decimal(result.blockstats.minfee).dividedBy(coinConfig.baseCurrencyUnit.multiplier); include ./value-display.pug else span 0 br if (result.blockstats.maxfee) - var currencyValue = new Decimal(result.blockstats.maxfee).dividedBy(coinConfig.baseCurrencyUnit.multiplier); include ./value-display.pug else span 0 div.card.shadow-sm.mb-3 div.card-body.px-2.px-md-3 div.clearfix div.float-left.mr-2 h3.h6.mb-0 Technical Details div.float-right if (!session.blockPageShowTechSummary || session.blockPageShowTechSummary == "true") a(href="/changeSetting?name=blockPageShowTechSummary&value=false") hide else a(href="/changeSetting?name=blockPageShowTechSummary&value=true") show div(id="tech-details-wrapper", class=(session.blockPageShowTechSummary == "true" ? "" : "d-none")) hr div.row div.col-md-6 div.row div.summary-split-table-label Difficulty div.summary-split-table-content.text-monospace - var difficultyData = utils.formatLargeNumber(result.getblock.difficulty, 3); span(title=parseFloat(result.getblock.difficulty).toLocaleString(), data-toggle="tooltip") span #{difficultyData[0]} span x 10 sup #{difficultyData[1].exponent} div.row div.summary-split-table-label Version div.summary-split-table-content.text-monospace 0x#{result.getblock.versionHex} span.text-muted (decimal: #{result.getblock.version}) div.row div.summary-split-table-label Nonce div.summary-split-table-content.text-monospace #{result.getblock.nonce} div.row div.summary-split-table-label Bits div.summary-split-table-content.text-monospace #{result.getblock.bits} div.row div.summary-split-table-label Merkle Root div.summary-split-table-content.text-monospace #{result.getblock.merkleroot} div.row div.summary-split-table-label Chainwork div.summary-split-table-content.text-monospace - var chainworkData = utils.formatLargeNumber(parseInt("0x" + result.getblock.chainwork), 2); span #{chainworkData[0]} span x 10 sup #{chainworkData[1].exponent} small hashes span.text-muted (#{result.getblock.chainwork.replace(/^0+/, '')}) if (result.getblock.miner) div.row div.summary-split-table-label Miner div.summary-split-table-content.text-monospace.mb-0 if (result.getblock.miner) if (result.getblock.miner.identifiedBy) small.data-tag.bg-primary(data-toggle="tooltip", title=("Identified by: " + result.getblock.miner.identifiedBy)) #{result.getblock.miner.name} else small.data-tag.bg-primary #{result.getblock.miner.name} else span ? span(data-toggle="tooltip", title="Unable to identify miner") i.fas.fa-info-circle div.card.shadow-sm.mb-3 div.card-body.px-2.px-md-3 div.row div.col-md-4 h2.h6.mb-0 #{txCount.toLocaleString()} if (txCount == 1) span Transaction else span Transactions if (false || (!config.demoSite && !crawlerBot && txCount > 20)) div(class="col-md-8 text-right") small.mr-1.text-muted Show div.btn-group(role="group") a.btn.btn-sm.btn-primary.px-2.py-0(href=(paginationBaseUrl + "?limit=20"), class=((limit == 20 && txCount > limit) ? "active" : false)) 20 if (txCount > 50) a.btn.btn-sm.btn-primary.px-2.py-0(href=(paginationBaseUrl + "?limit=50") class=(limit == 50 ? "active" : false)) 50 if (txCount > 100) a.btn.btn-sm.btn-primary.px-2.py-0(href=(paginationBaseUrl + "?limit=100"), class=(limit == 100 ? "active" : false)) 100 a.btn.btn-sm.btn-primary.px-2.py-0(href=(paginationBaseUrl + "?limit=3000"), class=(limit >= txCount ? "active" : false)) all hr - var fontawesomeInputName = "sign-in-alt"; - var fontawesomeOutputName = "sign-out-alt"; div each tx, txIndex in result.transactions //pre // code.json.bg-light #{JSON.stringify(tx, null, 4)} div.card.shadow-sm(class=(" " + ((txIndex < (result.transactions.length - 1) || txCount > limit) ? "mb-3" : ""))) div.card-header.text-monospace if (tx && tx.txid) span ##{(txIndex + offset + 1).toLocaleString()} span – a(href=("/tx/" + tx.txid)) #{tx.txid} if (global.specialTransactions && global.specialTransactions[tx.txid]) span a(data-toggle="tooltip", title=(coinConfig.name + " Fun! See transaction for details")) i.fas.fa-certificate.text-primary div.card-body.px-2.px-md-3 //pre // code.json.bg-light #{JSON.stringify(result.txInputsByTransaction[tx.txid], null, 4)} if (true) - var txInputs = result.txInputsByTransaction[tx.txid]; - var blockHeight = result.getblock.height; include ./transaction-io-details.pug //pre // code.json.bg-light #{JSON.stringify(tx, null, 4)} if (!crawlerBot && txCount > limit) - var pageNumber = offset / limit + 1; - var pageCount = Math.floor(txCount / limit); - if (pageCount * limit < txCount) { - pageCount++; - } - var paginationUrlFunction = function(x) { - return paginationBaseUrl + "?limit=" + limit + "&offset=" + ((x - 1) * limit); - } hr include ./pagination.pug div(id="tab-json", class="tab-pane", role="tabpanel") - var blockDetails = JSON.parse(JSON.stringify(result.getblock)); - blockDetails.tx = "See 'Transaction IDs'"; ul.nav.nav-pills.mb-3 li.nav-item a.nav-link.active(data-toggle="tab", href="#tab-json-block-summary", role="tab") Block Summary li.nav-item a.nav-link(data-toggle="tab", href="#tab-json-tx-ids", role="tab") Transaction IDs if (result.blockstats) li.nav-item a.nav-link(data-toggle="tab", href="#tab-json-blockstats", role="tab") Block Stats div.tab-content div.tab-pane.active(id="tab-json-block-summary", role="tabpanel") pre code.json.bg-light #{JSON.stringify(blockDetails, null, 4)} div.tab-pane(id="tab-json-tx-ids", role="tabpanel") pre code.json.bg-light #{JSON.stringify(result.getblock.tx, null, 4)} if (result.blockstats) div.tab-pane(id="tab-json-blockstats", role="tabpanel") pre code.json.bg-light #{JSON.stringify(result.blockstats, null, 4)}