oxen-observer/templates/index.html

198 lines
8.9 KiB
HTML
Raw Normal View History

{% extends "_basic.html" %}
{% block content %}
<div class="Wrapper">
<div class="nowrap-spans">
<span>Server Time: {{ server.timestamp | format_datetime }}</span>
<span>| <a href="/txpool">Transaction Pool</a></span>
{% if config.pusher %}
<span>| <a href="/rawtx">Transaction pusher </a></span>
{% endif %}
{% if config.key_image_checker %}
<span>| <a href="/rawkeyimgs">Key images checker</a></span>
{% endif %}
{% if config.output_key_checker %}
<span>| <a href="/rawoutputkeys">Output keys checker</a></span>
{% endif %}
{% if config.autorefresh_option %}
<span>|
{% if refresh %}
<a href="/">Autorefresh is ON ({{refresh}} s)</a>
{% else %}
<a href="/autorefresh/10">Autorefresh is OFF</a>
{% endif %}
</span>
{% endif %}
{% if config.testnet_url and not info.testnet %}
<span>| <a href="{{config.testnet_url}}">Go to testnet explorer</a></span>
{% endif %}
{% if config.devnet_url and not info.devnet %}
<span>| <a href="{{config.devnet_url}}">Go to devnet explorer</a></span>
{% endif %}
{% if config.mainnet_url and not info.mainnet %}
<span>| <a href="{{config.mainnet_url}}">Go to mainnet explorer</a></span>
{% endif %}
{% if info.testnet %}
<span>| This is <span style="color:#ff6b62; font-weight: bold">TESTNET</span> blockchain</span>
{% elif info.devnet %}
<span>| This is <span style="color:#af5bd2; font-weight: bold">DEVNET</span> blockchain</span>
{% endif %}
</div>
{% if info %}
<h3 class="general_info nowrap-spans">
<span>Hard fork: v{{hf.version}}</span>
<span>| Network difficulty: {{info.difficulty}}</span>
<span>| Hash rate: ~{{(info.difficulty / info.target) | si }}H/s</span>
<span>| Staking requirement: {{stake.staking_requirement | loki}}</span>
<span title="{{(2500 * fees.fee_per_byte + 2*fees.fee_per_output) | loki}} for a typical simple transaction (~2.5kB, 2 outputs)">|
Base fee:
{{fees.fee_per_output | loki}}/output + {{(fees.fee_per_byte * 1000) | loki}}/kB
</span>
<span title="{{(2500 * fees.blink_fee_per_byte + 2*fees.blink_fee_per_output) | loki}} for a typical simple blink transaction (~2.5kB, 2 outputs)">|
Blink fee:
{{fees.blink_fee_per_output | loki}}/output + {{(fees.blink_fee_per_byte * 1000) | loki}}/kB
</span>
<span title="{{(info.block_size_limit / 2) | si}}B soft limit, {{info.block_size_limit | si}}B hard limit. Blocks may include TXes up to the soft limit without penalty and incur increasing reward penalties as they approach the hard limit.">|
Block size limit:
{{(info.block_size_limit / 2) | si}}B/{{info.block_size_limit | si}}B
</span>
<span>| Blockchain size: {{info.database_size | si}}B</span>
</h3>
{% endif %}
<code>{{emission}}</code>
{% if emission %}
<h4 class="nowrap-spans">
<span><span style="font-weight: bold">Circulating Supply*</span>:
{% if emission.status == 'BUSY' %}
(still calculating...)</span>
{% elif emission.status == 'OK' %}
{{(emission.emission_amount - emission.burn_amount) | loki}}</span>
<span>(Coinbase: {{emission.emission_amount | loki}}</span>
<span>| Fees: {{emission.fee_amount | loki}}</span>
<span>| Burned: {{emission.burn_amount | loki}}).</span>
{%endif%}
<p style="padding: 0px; margin-top: 2px; font-size: 0.9em">
* — Circulating supply may exclude any currently, publicised locked tokens, otherwise it is equal to the Coinbase minus burned coins.
Fees includes paid transaction fees less any portion of the fee that was burned.
</p>
</h4>
{% endif %}
<h4 style="font-weight: bold; margin-bottom: 2px">TX Types Legend</h4>
<h4 class="tx-type-legend nowrap-spans" style="margin-top: 0">
<span>Service Node - Registration: 🏁</span>
<span>| Contribution: ⚑</span>
<span>| Recommission: 👍</span>
<span>| Decommission: 👎</span>
<span>| Deregister: 🚫</span>
<span>| IP Change Penalty: 📋</span>
<span>| Stake Unlock: 🔓</span>
<span>| Loki Name System Buy: 🎫</span>
<span>| LNS Update: 💾</span>
</h4>
</div>
{% include 'include/mempool.html' %}
<div class="Wrapper">
<h2>Transactions in
{% if page == 0 %}
the Last {{blocks|length}} Blocks
{% else %}
Blocks {{blocks[0].height}}{{blocks[-1].height}}
{% endif %}
<a class="LinkNoUnderline" href="/range/{{blocks[0].height}}/{{blocks[-1].height}}" title="Permanent link to this block range">🔗</a>
</h2>
{% set block_sizes = blocks | map(attribute='block_size') | sort %}
{%if block_sizes|count > 0%}
<h4 class="Subtitle">(Min. / Median / Average / Max. size of these blocks:
{{block_sizes[0] | si}}B /
{{(block_sizes[(block_sizes|count-1)//2]/2 + block_sizes[(block_sizes|count)//2]/2) | si}}B /
{{(block_sizes|sum / block_sizes|count) | si}}B /
{{block_sizes[-1] | si}}B)
</h4>
{%endif%}
<div class="TitleDivider"></div>
{% include 'include/block_page_controls.html' %}
<table class="Table">
<thead>
<tr>
<td>Height</td>
<td>Age [h:m:s]</td>
<td>Size</td>
<td>Type</td>
<td>Transaction Hash</td>
<td>Fee</td>
<td>Outputs</td>
<td>In/Out</td>
<td>TX Size</td>
</tr>
</thead>
<tbody>
{% import 'include/tx_type_symbol.html' as symbol %}
{% import 'include/tx_fee.html' as fee %}
{% for b in blocks | reverse %}
<tr class="block">
<td><a href="/block/{{b.height}}">{{b.height}}</a></td>
<td title="{{b.timestamp | from_timestamp | format_datetime}}">{{b.timestamp | from_timestamp | ago}}</td>
<td>{{b.block_size | si}}</td>
<td>{{symbol.display(b.txs[0])}}</td>
<td><a href="/tx/{{b.miner_tx_hash}}">{{b.miner_tx_hash}}</a></td>
<td>{{fee.display(b.txs[0])}}</td>
<td>{{b.reward | loki(tag=False, fixed=True, decimals=2)}}</td>
<td>{{b.txs[0].info.vin | length}}/{{b.txs[0].info.vout | length}}</td>
<td>{{b.txs[0].size | si}}</td>
</tr>
{% for tx in b.txs[1:] %}
<tr class="tx">
<td></td>
<td></td>
<td></td>
<td>{{symbol.display(tx)}}</td>
<td><a href="/tx/{{tx.tx_hash}}">{{tx.tx_hash}}</a></td>
<td>{{fee.display(tx)}}</td>
<td></td>
<td>{{tx.info.vin | length}}/{{tx.info.vout | length}}</td>
<td>{{tx.size | si}}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
{% include 'include/block_page_controls.html' %}
</div>
{{service_node_summary}}
<div class="Wrapper">
<p> <a class="" href="/service_nodes">Click here to see the service node list (at most only 10 are shown here)</a> </p>
</div>
{{quorum_state_summary}}
<div class="Wrapper">
<p> Note: The quorum shown here is the currently active voting height
which is not necessarily the latest quorum. Quorums can only be voted on
after a number of blocks have transpired.</p>
<p> <a class="" href="/quorums">Click here to see the last 1hrs worth of the stored quorum states</a> </p>
</div>
{% if show_cache_times %}
<div class="center">
<h6 style="margin-top: 1px;color:#949490">
Tx details construction time: {{construction_time_total}} s
<br/>
includes {{construction_time_cached}} s from block cache ({{cache_hits}} hits)
and {{construction_time_non_cached}} s from non cache ({{cache_misses}} misses)
</h6>
</div>
{% endif %}
{% endblock %}