extends layout block headContent title Address #{address} block content if (result && result.validateaddress) if (!result.validateaddress.isvalid) h1(class="h3 text-danger") Invalid Address br small(class="monospace") #{address} else h1(class="h3") Address br small(class="monospace") #{address} hr if (payoutAddressForMiner) div(class="alert alert-primary", style="padding-bottom: 0;") div(class="float-left", style="width: 50px; height: 50px; font-size: 18px;") i(class="fas fa-certificate fa-2x", style="margin-top: 10px;") h4(class="alert-heading h5") #{coinConfig.name} Fun p span This looks like a miner payout address for span(class="font-weight-bold") #{payoutAddressForMiner.name} if (coinConfig.miningPoolsConfigUrls.length > 1) span (see the configurations: each item, index in coinConfig.miningPoolsConfigUrls if (index > 0) span , a(href=item) config ##{index + 1} span ) else span (see the configuration a(href=coinConfig.miningPoolsConfigUrls[0]) here span ) if (false) pre code #{JSON.stringify(addressObj, null, 4)} ul(class='nav nav-tabs mb-3') li(class="nav-item") a(data-toggle="tab", href="#tab-details", class="nav-link active", role="tab") Details li(class="nav-item") a(data-toggle="tab", href="#tab-json", class="nav-link", role="tab") JSON div(class="tab-content") div(id="tab-details", class="tab-pane active", role="tabpanel") div(class="card mb-3") div(class="card-header") span(class="h6") Summary div(class="card-body") div(class="row") div(class="col-md-6") if (addressObj.hash) div(class="row") div(class="summary-split-table-label") Hash 160 div(class="summary-split-table-content monospace") #{addressObj.hash.toString("hex")} if (result.validateaddress.scriptPubKey) div(class="row") div(class="summary-split-table-label") Script Public Key div(class="summary-split-table-content monospace") #{result.validateaddress.scriptPubKey} if (addressObj.hasOwnProperty("version")) div(class="row") div(class="summary-split-table-label") Version div(class="summary-split-table-content monospace") #{addressObj.version} if (result.validateaddress.hasOwnProperty("witness_version")) div(class="row") div(class="summary-split-table-label") Witness Version div(class="summary-split-table-content monospace") #{result.validateaddress.witness_version} if (result.validateaddress.witness_program) div(class="row") div(class="summary-split-table-label") Witness Program div(class="summary-split-table-content monospace") #{result.validateaddress.witness_program} if (balance) if (balance.conflictedResults) div(class="row") div(class="summary-split-table-label") Balance div(class="summary-split-table-content monospace") span(class="text-danger") Conflicted ElectrumX Results include includes/electrum-trust-note.pug each item in balance.conflictedResults - var currencyValue = item.confirmed / 100000000; include includes/value-display.pug else if (balance.confirmed) div(class="row") div(class="summary-split-table-label") Balance div(class="summary-split-table-content monospace") - var currencyValue = balance.confirmed / 100000000; include includes/value-display.pug include includes/electrum-trust-note.pug if (balance.unconfirmed) div(class="row") div(class="summary-split-table-label") Unconfirmed div(class="summary-split-table-content monospace") - var currencyValue = balance.unconfirmed / 100000000; include includes/value-display.pug include includes/electrum-trust-note.pug if (electrumHistory) div(class="row") div(class="summary-split-table-label") Transactions div(class="summary-split-table-content monospace") #{electrumHistory.length.toLocaleString()} include includes/electrum-trust-note.pug div(class="row") div(class="summary-split-table-label") QR Code div(class="summary-split-table-content monospace") img(src=addressQrCodeUrl, alt=address, style="border: solid 1px #ccc;") div(class="col-md-6") - var x = result.validateaddress; - var flagNames = ["Is Valid?", "Is Script?", "Is Witness?", "Is Mine?", "Is Watch-Only?"]; - var flags = [x.isvalid, x.isscript, x.iswitness, x.ismine, x.iswatchonly]; each flagName, index in flagNames div(class="row") div(class="summary-split-table-label") #{flagName} div(class="summary-split-table-content monospace") if (flags[index]) i(class="fas fa-check text-success") else i(class="fas fa-times text-danger") if (false) div(class="card mb-3") div(class="card-header") span(class="h6") Flags div(class="card-body") table(class="table table-responsive-sm text-center") thead tr th Is Valid? th Is Script? th Is Witness? th Is Mine? th Is Watch-Only? tbody tr - var x = result.validateaddress; - var flags = [x.isvalid, x.isscript, x.iswitness, x.ismine, x.iswatchonly]; each flag in flags td if (flag) i(class="fas fa-check text-success") else i(class="fas fa-times text-danger") div(class="card") div(class="card-header") span(class="h6") Transactions if (transactions) include includes/electrum-trust-note.pug div(class="card-body") if (transactions) each tx, txIndex in transactions //pre // code #{JSON.stringify(tx, null, 4)} div(class="xcard mb-3") div(class="card-header monospace clearfix") div(class="float-left", style="margin-right: 10px;") span ##{(offset + txIndex + 1).toLocaleString()} span – div(class="float-left") if (tx && tx.txid) if (tx.time) span #{moment.utc(new Date(tx["time"] * 1000)).format("Y-MM-DD HH:mm:ss")} utc - var timeAgoTime = tx.time; include includes/time-ago.pug else span(class="text-danger") Unconfirmed br a(href=("/tx/" + tx.txid)) #{tx.txid} br if (addrGainsByTx[tx.txid]) - var currencyValue = addrGainsByTx[tx.txid]; span(class="text-success") + include includes/value-display.pug if (addrLossesByTx[tx.txid]) span / if (addrLossesByTx[tx.txid]) - var currencyValue = addrLossesByTx[tx.txid]; span(class="text-danger") - include includes/value-display.pug if (global.specialTransactions && global.specialTransactions[tx.txid]) span a(data-toggle="tooltip", title=(coinConfig.name + " Fun! See transaction for details")) i(class="fas fa-certificate text-primary") div(class="card-body") if (true) - var txInputs = txInputsByTransaction[tx.txid]; - var blockHeight = blockHeightsByTxid[tx.txid]; include includes/transaction-io-details.pug else p Since this explorer is database-free, it doesn't natively support address transaction history. However, you can configure it to communicate with one or more ElectrumX servers to build and display this data. In doing so, you should be aware that you'll be trusting those ElectrumX servers. If you configure multiple servers the results obtained from each will be cross-referenced against the others. Communicating with ElectrumX servers will also impact your privacy since the servers will know what addresses you're interested in. If these tradeoffs are acceptable, you can see a list of public ElectrumX servers here: a(href="https://uasf.saltylemon.org/electrum") https://uasf.saltylemon.org/electrum if (false) pre code #{JSON.stringify(transactions, null, 4)} - var pageNumber = offset / limit + 1; - var pageCount = Math.floor(txids.length / limit); - if (pageCount * limit < txids.length) { - pageCount++; - } - var paginationUrlFunction = function(x) { - return paginationBaseUrl + "?limit=" + limit + "&offset=" + ((x - 1) * limit); - } hr include includes/pagination.pug div(id="tab-json", class="tab-pane", role="tabpanel") div(class="highlight") h4 Node.ValidateAddress pre code(class="language-json", data-lang="json") #{JSON.stringify(result.validateaddress, null, 4)} h4 Electrum.Balance pre code(class="language-json", data-lang="json") #{JSON.stringify(electrumBalance, null, 4)} h4 Electrum.History pre code(class="language-json", data-lang="json") #{JSON.stringify(electrumHistory, null, 4)}