extends layout block headContent title Transaction #{txid} style. .field { word-wrap: break-word; } block content h1(class="h2") Transaction br small(class="monospace") #{txid} hr ul(class='nav nav-tabs mb-3') li(class="nav-item") a(data-toggle="tab", href="#tab-summary", class="nav-link active", role="tab") Summary li(class="nav-item") a(data-toggle="tab", href="#tab-scripts", class="nav-link", role="tab") Scripts li(class="nav-item") a(data-toggle="tab", href="#tab-raw", class="nav-link", role="tab") Raw - DecimalRounded = Decimal.clone({ precision: 4, rounding: 2 }) - var totalInputValue = new Decimal(0); if (result.getrawtransaction.vin[0].coinbase) - totalInputValue = totalInputValue.plus(new Decimal(utils.getBlockReward(result.getblock.height))); each txInput, txInputIndex in result.txInputs if (txInput) - var vout = txInput.vout[result.getrawtransaction.vin[txInputIndex].vout]; if (vout.value) - totalInputValue = totalInputValue.plus(new Decimal(vout.value)); - var totalOutputValue = new Decimal(0); each vout, voutIndex in result.getrawtransaction.vout - totalOutputValue = totalOutputValue.plus(new Decimal(vout.value)); div(class="tab-content") div(id="tab-summary", class="tab-pane active", role="tabpanel") if (txid == "00000f6be3e151f9082a2b82c2916192a791090015b80979934a45d625460d62") div(class="alert alert-warning", style="padding-bottom: 0;") h4(class="alert-heading h5") This transaction doesn't really exist! :markdown-it This is the coinbase transaction of the [Vivocoin Genesis Block](/block/00000f6be3e151f9082a2b82c2916192a791090015b80979934a45d625460d62). For more background about this special-case transaction, you can read [this brief discussion](https://github.com/bitcoin/bitcoin/issues/3303) among some of the [Vivocoin Core](https://bitcoin.org) developers. table(class="table") tr th(class="table-active properties-header") Included in Block td(class="monospace") if (result.getblock) a(href=("/block/" + result.getrawtransaction.blockhash)) #{result.getrawtransaction.blockhash} if (result.getblock.height) span(class="text-muted") (#{result.getblock.height.toLocaleString()}) else span N/A span(class="text-muted") (unconfirmed) tr th(class="table-active properties-header") Timestamp if (result.getrawtransaction.time) td(class="monospace") #{moment.utc(new Date(result.getrawtransaction["time"] * 1000)).format("Y-MM-DD HH:mm:ss")} (utc) else td(class="monospace") N/A span(class="text-muted") (unconfirmed) //tr // th(class="table-active properties-header") Transaction ID // td #{txid} tr th(class="table-active properties-header") Version td(class="monospace") #{result.getrawtransaction.version} if (result.getrawtransaction.locktime > 0) tr th(class="table-active properties-header") span Locktime td(class="monospace") if (result.getrawtransaction.locktime < 500000000) span Spendable in block a(href=("/block-height/" + result.getrawtransaction.locktime)) #{result.getrawtransaction.locktime} span or later - ( a(href="https://bitcoin.org/en/developer-guide#locktime-and-sequence-number", title="Locktime documentation") span docs i(class="fa fa-external-link") span ) else span Spendable after #{moment.utc(new Date(result.getrawtransaction.locktime * 1000)).format("Y-MM-DD HH:mm:ss")} (utc) - ( a(href="https://bitcoin.org/en/developer-guide#locktime-and-sequence-number", title="Locktime documentation") span docs i(class="fa fa-external-link") span ) tr th(class="table-active properties-header") Confirmations td(class="monospace") if (!result.getrawtransaction.confirmations || result.getrawtransaction.confirmations == 0) strong(class="text-danger") 0 (unconfirmed) else if (result.getrawtransaction.confirmations < 6) strong(class="text-warning") #{result.getrawtransaction.confirmations} else strong(class="text-success") #{result.getrawtransaction.confirmations.toLocaleString()} if (result.getrawtransaction.vin[0].coinbase) tr th(class="table-active properties-header") Total Network Fees //td(class="monospace") Σ #{new Decimal(totalOutputValue).minus(totalInputValue)} td(class="monospace") Σ #{(totalOutputValue - totalInputValue)} else tr th(class="table-active properties-header") Network Fee Paid td(class="monospace") strong #{new Decimal(totalInputValue).minus(totalOutputValue)} //span(class="text-muted") (#{totalInputValue} - #{totalOutputValue}) //br //span ~#{new DecimalRounded(totalInputValue).minus(totalOutputValue).dividedBy(result.getrawtransaction.size).times(100000000)} sat/B if (result.getrawtransaction.vin[0].coinbase) div(class="card mb-3") div(class="card-header") h2(class="h5 mb-0") Coinbase div(class="card-body") h6 Hex div(style="background-color: #fafafa; padding: 5px 10px;", class="mb-3") span(class="monospace word-wrap") #{result.getrawtransaction.vin[0].coinbase} h6 Decoded div(style="background-color: #fafafa; padding: 5px 10px;", class="mb-3") span(class="monospace word-wrap") #{utils.hex2ascii(result.getrawtransaction.vin[0].coinbase)} div(class="card mb-3") div(class="card-header") div(class="row") div(class="col-md-6") h2(class="h5 mb-0") Input (#{result.getrawtransaction.vin.length.toLocaleString()}) div(class="col-md-6") h2(class="h5 mb-0") Output (#{result.getrawtransaction.vout.length.toLocaleString()}) div(class="card-body") div(class="row") div(class="col-md-6") if (result.txInputs) table(class="table mb-0") thead tr th(style="width: 40px;") th Input th Amount tbody if (result.getrawtransaction.vin[0].coinbase) tr th 1 td span(class="tag monospace") coinbase span(class="monospace") Newly minted VIVO td(class="monospace") Σ #{utils.getBlockReward(result.getblock.height)} each txInput, txInputIndex in result.txInputs if (txInput) - var vout = txInput.vout[result.getrawtransaction.vin[txInputIndex].vout]; tr th #{(txInputIndex + 1)} //pre // code #{JSON.stringify(txInput)} td if (vout.scriptPubKey && vout.scriptPubKey.addresses) //span(class="monospace") #{vout.scriptPubKey.addresses[0]} span(class="monospace") a(href=("/address/" + vout.scriptPubKey.addresses[0])) #{vout.scriptPubKey.addresses[0]} br span(class="monospace text-muted") via tx a(href=("/tx/" + txInput.txid + "#output-" + result.getrawtransaction.vin[txInputIndex].vout), class="monospace") #{txInput.txid.substring(0, 14)}..., Output ##{result.getrawtransaction.vin[txInputIndex].vout + 1} td if (vout.value) span(class="monospace") Σ #{vout.value} tr td td td strong(class="monospace") Σ #{totalInputValue} div(class="col-md-6") table(class="table mb-0") thead tr th th Output th Amount tbody each vout, voutIndex in result.getrawtransaction.vout tr th #{(voutIndex + 1)} td if (vout.scriptPubKey) if (vout.scriptPubKey.addresses) a(id="output-" + voutIndex) //span(class="monospace") #{vout.scriptPubKey.addresses[0]} span(class="monospace") a(href=("/address/" + vout.scriptPubKey.addresses[0])) #{vout.scriptPubKey.addresses[0]} else if (vout.scriptPubKey.hex && vout.scriptPubKey.hex.startsWith('6a24aa21a9ed')) span(class="monospace") Segregated Witness committment - a(href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#commitment-structure") docs i(class="fa fa-external-link") else if (vout.scriptPubKey.asm && vout.scriptPubKey.asm.startsWith('OP_RETURN ')) span(class="monospace") OP_RETURN: span(class="monospace text-muted") #{utils.hex2ascii(vout.scriptPubKey.asm.substring("OP_RETURN ".length))} td span(class="monospace") Σ #{vout.value} tr td td td strong(class="monospace") Σ #{totalOutputValue} div(id="tab-scripts", class="tab-pane", role="tabpanel") h3 Input Scripts table(class="table table-striped") thead tr th(style="width: 50px;") th Script Sig (asm) tbody each vin, vinIndex in result.getrawtransaction.vin tr th #{vinIndex + 1} td if (vin.scriptSig && vin.scriptSig.asm) span(class="word-wrap monospace") #{vin.scriptSig.asm} else if (vin.coinbase) div(style="line-height: 1.75em;") span(class="tag") coinbase br span(class="word-wrap monospace") #{vin.coinbase} br span(class="word-wrap monospace text-muted") (decoded) #{utils.hex2ascii(vin.coinbase)} h3 Output Scripts table(class="table table-striped") thead tr th(style="width: 50px;") th Script Pub Key (asm) tbody each vout, voutIndex in result.getrawtransaction.vout tr th #{voutIndex + 1} td if (vout.scriptPubKey && vout.scriptPubKey.asm) span(class="word-wrap monospace") #{vout.scriptPubKey.asm} if (vout.scriptPubKey.asm.startsWith("OP_RETURN")) br span(class="word-wrap monospace text-muted") (decoded) #{utils.hex2ascii(vout.scriptPubKey.asm)} div(id="tab-raw", class="tab-pane", role="tabpanel") div(class="highlight") pre code(class="language-json", data-lang="json") #{JSON.stringify(result.getrawtransaction, null, 4)} //pre #{JSON.stringify(result.txInputs, null, 4)}