mirror of
https://github.com/oxen-io/oxen-observer.git
synced 2023-12-14 09:22:54 +01:00
198 lines
8.9 KiB
HTML
198 lines
8.9 KiB
HTML
|
{% 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 %}
|