oxen-observer/templates/index.html

212 lines
9.9 KiB
HTML
Raw Normal View History

{% extends "_basic.html" %}
{% block content %}
<div class="Wrapper">
<div class="info_list nowrap-spans">
<span><label>Server Time:</label> {{ server.datetime | 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>
<div class="TitleDivider"></div>
{% if info %}
<h3 class="general_info info_list nowrap-spans">
<span><label>Height:</label> {{info.height}}</span>
<span><label>Hard fork:</label> v{{hf.version}}</span>
{% if hf.version >= 16 %}
<span title="{{ info.pulse_target_timestamp | from_timestamp | format_datetime }}
{%-if info.pulse_target_timestamp != info.pulse_ideal_timestamp %}
{{ (info.pulse_target_timestamp - info.pulse_ideal_timestamp) | reltime(two_part=true, in_ago=false) }}
{%-if info.pulse_target_timestamp > info.pulse_ideal_timestamp %} behind {%else%} ahead of {%endif%} schedule
{%-endif-%}
">
<label>Next Pulse:</label> {{(info.pulse_target_timestamp|from_timestamp - server.datetime) | reltime(neg_is_now=true) }}
</span>
{% else %}
<span><label>Network difficulty:</label> {{info.difficulty}}</span>
<span><label>Hash rate:</label> ~{{(info.difficulty / info.target) | si }}H/s</span>
{% endif %}
<span><label>Staking requirement:</label> {{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)">
<label>Base fee:</label>
{{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)">
<label>Blink fee:</label>
{{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.">
<label>Block size limit:</label>
{{(info.block_size_limit / 2) | si}}B/{{info.block_size_limit | si}}B
</span>
<span><label>Blockchain size:</label> {{info.database_size | si}}B</span>
</h3>
{% endif %}
<h4 class="info_list nowrap-spans">
<span><label>Circulating Supply*:</label>:
{% if not emission or emission.status == 'BUSY' %}
(still calculating...)</span>
{% elif emission.status == 'OK' %}
{{(emission.emission_amount - emission.burn_amount) | loki}}</span>
<span><label>(Coinbase:</label> {{emission.emission_amount | loki}}</span>
<span><label>Fees:</label> {{emission.fee_amount | loki}}</span>
<span><label>Burned:</label> {{emission.burn_amount | loki}}<label>).</label></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>
<div class="TitleDivider"></div>
<h4 class="tx-type-legend info_list nowrap-spans" style="margin-top: 0">
<span><label>TX Type Legend:</label> 🏁 Service Node Registration</span>
<span>⚑ Contribution</span>
<span>👍 Recommission</span>
<span>👎 Decommission</span>
<span>🚫 Deregistration</span>
<span>📋 IP Change Penalty</span>
<span>🔓 Stake Unlock</span>
<span>🎫 Loki Name System Purchase</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="TitleUnderliner"></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>0/{{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>
{%set limit_awaiting = 10%}
{%set limit_inactive = 10%}
{%set limit_active = 10%}
2020-08-18 18:42:24 +02:00
{%include 'include/service_nodes_lists.html'%}
2020-09-01 06:44:30 +02:00
{%if checkpoints and checkpoints.checkpoints|length > 0%}
{%include 'include/checkpoints.html'%}
{%endif%}
<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 %}