mirror of
https://github.com/transatoshi-mw/grin-explorer.git
synced 2025-10-21 21:43:40 +00:00
Initial commit
This commit is contained in:
228
templates/base.html.tera
Normal file
228
templates/base.html.tera
Normal file
@@ -0,0 +1,228 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Grin Blockchain Explorer</title>
|
||||
<meta property="og:site_name" content="Grincoin.org (GRIN) Blockchain Explorer" />
|
||||
<meta property="og:url" content="https://grincoin.org" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Grin Blockchain Explorer" />
|
||||
<meta property="og:description" content="Grincoin.org website allows you to explore Grin blockchain." />
|
||||
<meta name="description" content="Grincoin.org website allows you to explore Grin blockchain." />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="stylesheet" type= "text/css" href="/static/styles/style.css" />
|
||||
<link rel= "stylesheet" type= "text/css" href= "/static/styles/bootstrap.css" />
|
||||
<link rel= "stylesheet" type= "text/css" href= "/static/styles/bootstrap-icons.css" />
|
||||
<link rel="shortcut icon" type="image/png" href="/static/icon/grin-logo.png" />
|
||||
<script src="/static/scripts/darkmode.js"></script>
|
||||
<script src="/static/scripts/darkmode_toggle.js"></script>
|
||||
<script src="/static/scripts/bootstrap.bundle.js"></script>
|
||||
<script src="/static/scripts/htmx.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body class="d-flex flex-column min-vh-100 dark-mode">
|
||||
|
||||
<nav class="navbar bg-style navbar-expand-lg shadow-sm py-0">
|
||||
<div class="container-fluid">
|
||||
<code><a class="navbar-brand fs-2" href="/"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 191 191" height="35" width="35" style="enable-background:new 0 0 191 191;" xml:space="preserve"><style type="text/css">.st0{fill:#f2a900;}</style><circle cx="95.5" cy="95.5" r="95.5"/><circle class="st0" cx="95.3" cy="95.5" r="85.3"/><path d="M135.7,63.5c-2-4.6-3.9-13.6-9.1-15.6c-6.7-2.6-10.9,14.3-11.9,18.6h-1c-1.7-7.3-4-17.7-12-20c-3.7,15.6,3.9,32.5,11,46
|
||||
c7.6-3.6,11.3-15,12-23h1l8,24c6.4-1.8,8.7-8.2,11-14c5-12.4,9.2-27.7,6-41C141.1,41.2,138.2,55,135.7,63.5 M39.7,95.5
|
||||
c8.6-4.1,12.7-17.1,14-26h1c1,4.3,3.7,15.4,9.1,16.1c6.8,0.9,10.4-14.3,10.9-19.1h1c2.2,7.5,4.5,17.3,12,21
|
||||
c2.8-11.7-0.5-24.1-4.8-35c-1.1-2.8-3.3-10.4-7.2-10.4c-6.3,0-9.9,16.7-11,21.4h-1l-8-24C41.6,46.2,34,82,39.7,95.5 M24.7,107.5
|
||||
c10.4,45.6,58.6,71.4,102,52.1c15.8-7,28.3-19.5,35.5-35.1c1.9-4,5.5-11.4,3.4-16.7c-2.1-5.3-22.8,3.4-27.9,5.6
|
||||
c-0.7,0.3-1.2,1-1.4,1.8c-0.3,2.2,1.2,4.3,3.4,4.6c0.1,0,0.2,0,0.3,0l8.7,0.7c-15.7,30.4-58.1,43.8-88,19.5
|
||||
C54,134.6,48,128.2,44,120.5c-1.9-3.7-3.7-8.4-7-11C33.8,107.1,29,106.3,24.7,107.5L24.7,107.5z"/></svg></a></code>
|
||||
<button class="navbar-toggler my-3" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||
<ul class="navbar-nav me-auto">
|
||||
{% if route == "index" %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/"><div class="darkorange-text"><i class="bi bi-speedometer"></i> Dashboard</div></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/block_list"><i class="bi bi-box"></i> Blocks</a>
|
||||
</li>
|
||||
{% elif route == "block_list" or route == "block_list_by_height" %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/"><i class="bi bi-speedometer"></i> Dashboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/block_list"><div class="darkorange-text"><i class="bi bi-box"></i> Blocks</div></a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/"><i class="bi bi-speedometer"></i> Dashboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/block_list"><i class="bi bi-box"></i> Blocks</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<form class="input-group my-3" role="search" action="/search" method="POST" autocomplete="off">
|
||||
<input class="form-control ms-0 me-2" type="search" placeholder="Explore Grin Network" aria-label="Search" name="search" required>
|
||||
<button class="btn btn-outline-secondary btn-search" type="submit">
|
||||
<i class="bi bi-search"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid">
|
||||
<br>
|
||||
{% block content %}{% endblock content %}
|
||||
</div>
|
||||
|
||||
<footer class="shadow">
|
||||
<code>
|
||||
<br>
|
||||
<div class="container-fluid">
|
||||
<div class="card-group">
|
||||
<div class="card border-0">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text">Community</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://grin.mw/">Grin.MW</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://forum.grin.mw/">Forum</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://www.grincc.mw/">Council</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://keybase.io/team/grincoin">Keybase</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="me-3">
|
||||
<a class="text-decoration-none" href="https://t.me/grinprivacy">
|
||||
<h2><i class="bi bi-telegram"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
<div class="me-3">
|
||||
<a class="text-decoration-none" href="https://discord.gg/5p4vCQY9km">
|
||||
<h2><i class="bi bi-discord"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
<div class="me-3">
|
||||
<a class="text-decoration-none" href="https://www.reddit.com/r/grincoin/">
|
||||
<h2><i class="bi bi-reddit"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text">Resources</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://docs.grin.mw/about-grin/story/">
|
||||
About Grin
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://phyro.github.io/what-is-grin">
|
||||
What Is Grin
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://phyro.github.io/grinvestigation/why_grin.html">Why Grin</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://grinnode.live/">Grinnode</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://grinflation.com/">Grinflation</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text">Build</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://github.com/mimblewimble/grin">
|
||||
Github
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://docs.grin.mw/">Documentation</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-start">
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="https://github.com/mimblewimble/docs/wiki/A-Brief-History-of-MimbleWimble-White-Paper">Whitepaper</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-center">
|
||||
<span class="custom-control custom-switch custom-control-inline ms-0">
|
||||
<button class="btn-sm btn-outline-secondary" onclick="darkModeFunc()">
|
||||
<h3><i class="bi bi-brightness-low"></i></h3>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-center" style="color:grey">
|
||||
Powered by CoinGecko
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</code>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
checkDarkMode()
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
128
templates/block_details.html.tera
Normal file
128
templates/block_details.html.tera
Normal file
@@ -0,0 +1,128 @@
|
||||
{% extends "base" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<code>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-box"></i> BLOCK {{ block.height }}</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Time </div>
|
||||
<div class="value-text text-end">{{ block.time }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Hash </div>
|
||||
<div class="value-text text-break text-end">{{ block.hash }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Fees </div>
|
||||
<div class="value-text text-end">ツ {{ block.fees / 1000000000.0 }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Weight </div>
|
||||
<div class="value-text text-end">{{ block.weight }} %</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Version </div>
|
||||
<div class="value-text text-end">{{ block.version }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body mb-2" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-receipt"></i> TRANSACTIONS</div>
|
||||
<br>
|
||||
<div class="value-text" align="center">Kernels ({{ block.ker_len }})</div>
|
||||
{% for i in range(end=block.ker_len) %}
|
||||
<br>
|
||||
<div class="row">
|
||||
<!-- kernels[i][0] - Hash
|
||||
kernels[i][1] - Type
|
||||
kernels[i][2] - Fee -->
|
||||
{% if block.kernels[i][1] == "Coinbase" %}
|
||||
<div class="col-sm value-text" align="left">
|
||||
<span class="badge bg-dark-subtle text-black px-2 py-1">ツ {{ block.kernels[i][2] }}</span> <span class="badge bg-info text-black px-2 py-1">{{ block.kernels[i][1] }} <i class="bi bi-hammer"></i></span>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col-sm value-text" align="left">
|
||||
<span class="badge bg-dark-subtle text-black px-2 py-1">ツ {{ block.kernels[i][2] }}</span> <span class="badge bg-dark-subtle text-black px-2 py-1">{{ block.kernels[i][1] }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col-sm value-text">{{ block.kernels[i][0] }}</div>
|
||||
<div class="col-sm value-text"></div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="card-body mb-2" align="center">
|
||||
<div class="d-flex flex-row justify-content-center">
|
||||
<i class="bi bi-asterisk me-4"></i>
|
||||
<i class="bi bi-asterisk me-4"></i>
|
||||
<i class="bi bi-asterisk"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body mb-1" align="center">
|
||||
<div class="value-text">Inputs ({{ block.in_len }})</div>
|
||||
{% for i in range(end=block.in_len) %}
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-sm"></div>
|
||||
<div class="col-sm" align="left">{{ block.inputs[i] }}</div>
|
||||
<div class="col-sm"></div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="card-body mb-1" align="center">
|
||||
<h2><i class="bi bi-arrow-down-circle"></i></h2>
|
||||
</div>
|
||||
|
||||
<div class="card-body" align="center">
|
||||
<div class="value-text">Outputs ({{ block.out_len }})</div>
|
||||
{% for i in range(end=block.out_len) %}
|
||||
<br>
|
||||
<div class="row">
|
||||
<!-- outputs[i][0] - Hash
|
||||
outputs[i][1] - Type -->
|
||||
{% if block.outputs[i][1] == "Coinbase" %}
|
||||
<div class="col-sm value-text" align="left">
|
||||
<span class="badge bg-info text-black px-2 py-1">{{ block.outputs[i][1] }} <i class="bi bi-hammer"></i></span>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col-sm value-text" align="left">
|
||||
<span class="badge bg-dark-subtle text-black px-2 py-1">{{ block.outputs[i][1] }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col-sm value-text" align="left">{{ block.outputs[i][0] }}</div>
|
||||
<div class="col-sm value-text"></div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-layout-text-sidebar-reverse"></i> RAW DATA</div>
|
||||
<br>
|
||||
<div class="value-text">{{ block.raw_data }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
</code>
|
||||
|
||||
{% endblock %}
|
||||
|
264
templates/block_list.html.tera
Normal file
264
templates/block_list.html.tera
Normal file
@@ -0,0 +1,264 @@
|
||||
{% extends "base" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<code>
|
||||
|
||||
<div class="d-none d-md-block mb-4"> <!-- Show on >= md screens -->
|
||||
<div class="card-group">
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
HEIGHT
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
AGE
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
KERNELS
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
INPUTS
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
OUTPUTS
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
FEES
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0">
|
||||
<div class="card-body">
|
||||
<div class="darkorange-text">
|
||||
WEIGHT
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% for i in range(end=10) %}
|
||||
<div class="card-group rounded-0">
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none" href="/block/{{ blocks[i].height }}">
|
||||
{{ blocks[i].height }}
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/link" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].time }}</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/time" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].ker_len }}</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/kernels" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].in_len }}</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/inputs" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].out_len }}</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/outputs" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">ツ {{ blocks[i].fees / 1000000000.0 }}</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/fees" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-0 mt-1">
|
||||
<div class="card-body">
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].weight }} %</div>
|
||||
{% else %}
|
||||
<div class="value-text" hx-get="/rpc/block/weight" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="d-md-none mb-4"> <!-- Show on < md screens-->
|
||||
{% for i in range(end=10) %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Block</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">
|
||||
<a class="text-decoration-none darkorange-text" href="/block/{{ blocks[i].height }}">
|
||||
{{ blocks[i].height }}
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/link_color" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Age</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].time }}</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/time" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Kernels</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].ker_len }}</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/kernels" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Inputs</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].in_len }}</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/inputs" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Outputs</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].out_len }}</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/outputs" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Fees</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">ツ {{ blocks[i].fees / 1000000000.0 }}</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/fees" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Weight</div>
|
||||
{% if route == "block_list_by_height" %}
|
||||
<div class="value-text">{{ blocks[i].weight }} %</div>
|
||||
{% else %}
|
||||
<div class="value-text text-end" hx-get="/rpc/block/weight" hx-vals='{"count": "{{ i }}"}' hx-trigger="load, every 10s"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
|
||||
{% if route == "block_list_by_height" %}
|
||||
|
||||
<div class="d-flex justify-content-center sticky-bottom mb-3">
|
||||
<div class="me-5">
|
||||
{% if height >= (index + 10) %}
|
||||
<a class="text-decoration-none" href="/block_list/{{ index + 10 }}">
|
||||
{% elif height >= (index) and height < (index + 10) %}
|
||||
<a class="text-decoration-none" href="/block_list/{{ height }}">
|
||||
{% endif %}
|
||||
<h2><i class="bi bi-arrow-left-square"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
<div class="me-5">
|
||||
<a class="text-decoration-none" href="/block_list">
|
||||
<h2><i class="bi bi-house"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
{% if index >= 20 %}
|
||||
<a class="text-decoration-none" href="/block_list/{{ index - 10 }}">
|
||||
{% elif index >= 10 and index < 20 %}
|
||||
<a class="text-decoration-none" href="/block_list/{{ 9 }}">
|
||||
{% else %}
|
||||
<a class="text-decoration-none disabled" href="">
|
||||
{% endif %}
|
||||
<h2><i class="bi bi-arrow-right-square"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
|
||||
<div class="d-flex justify-content-center sticky-bottom mb-3">
|
||||
<div class="me-5">
|
||||
<a class="text-decoration-none disabled" href="">
|
||||
<h2><i class="bi bi-arrow-left-square"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
<div class="me-5">
|
||||
<a class="text-decoration-none" href="/block_list">
|
||||
<h2><i class="bi bi-house"></i></h2>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<div hx-get="/rpc/block_list/index" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
</code>
|
||||
|
||||
{% endblock %}
|
23
templates/error.html.tera
Normal file
23
templates/error.html.tera
Normal file
@@ -0,0 +1,23 @@
|
||||
{% extends "base" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<code>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h4>No results found.</h4><br>
|
||||
Explorer supports requests by block number, block hash or kernel hash.<br><br>
|
||||
Examples:<br>
|
||||
Block number - <a class="text-decoration-none" href="/block/2765726">2765726</a><br>
|
||||
Block hash - <a class="text-decoration-none" href="/hash/0000fc4d93e5717579b955ab840165d96603f009804a228be22da76f6f906a3c">0000fc4d93e5717579b955ab840165d96603f009804a228be22da76f6f906a3c</a><br>
|
||||
Kernel hash - <a class="text-decoration-none" href="/kernel/084caeb931b7e8cb73d6419ea74ea157a3cef19f6e9307108a8a808df58437a4ef">084caeb931b7e8cb73d6419ea74ea157a3cef19f6e9307108a8a808df58437a4ef</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</code>
|
||||
|
||||
<br>
|
||||
|
||||
{% endblock %}
|
||||
|
427
templates/index.html.tera
Normal file
427
templates/index.html.tera
Normal file
@@ -0,0 +1,427 @@
|
||||
{% extends "base" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<code>
|
||||
|
||||
<div class="d-none d-md-block"> <!-- Show on >= md screens -->
|
||||
<div class="card-group mb-2">
|
||||
<div class="card me-2">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-cash-coin"></i> PRICE</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">GRIN_BTC </div><div class="value-text text-end" hx-get="/rpc/price/btc" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">GRIN_USD </div><div class="value-text text-end" hx-get="/rpc/price/usd" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">24H Volume (USD) </div><div class="value-text text-end" hx-get="/rpc/market/volume_usd" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">24H Volume (BTC) </div><div class="value-text text-end" hx-get="/rpc/market/volume_btc" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-bank"></i> MARKET</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Yearly Inflation Rate </div><div class="value-text text-end" hx-get="/rpc/inflation/rate" hx-trigger="load, every 10s"> %</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Coin Supply </div><div class="value-text text-end" hx-get="/rpc/market/supply" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Soft Total Supply
|
||||
<!-- Button trigger soft supply explanation modal -->
|
||||
<button class="btn-sm shadow-none" data-bs-toggle="modal" data-bs-target="#soft_sup">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</button>
|
||||
</div><div class="value-text text-end" hx-get="/rpc/market/soft_supply" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Market Cap (USD) </div><div class="value-text text-end" hx-get="/rpc/market/cap_usd" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Market Cap (BTC) </div><div class="value-text text-end" hx-get="/rpc/market/cap_btc" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-group mb-2">
|
||||
<div class="card me-2">
|
||||
<div class="card-body" align="left">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="darkorange-text"><i class="bi bi-grid"></i> BLOCKCHAIN</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Size </div><div class="value-text text-end" hx-get="/rpc/disk/usage" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Block Height </div><div class="value-text text-end" hx-get="/rpc/block/latest" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Time Since Last Block </div><div class="value-text text-end" hx-get="/rpc/block/time_since_last" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card me-2">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-hammer"></i> MINING</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Hashrate (1440 Blocks) </div><div class="value-text text-end" hx-get="/rpc/network/hashrate" hx-trigger="load, every 10s"> KG/s</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Difficulty </div><div class="value-text text-end" hx-get="/rpc/network/difficulty" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Block Reward </div><div class="value-text text-end">ツ 60</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Estimated Mining Cost
|
||||
<!-- Button trigger mining cost explanation modal -->
|
||||
<button type="button" class="btn-sm" data-bs-toggle="modal" data-bs-target="#mining_cost">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</button>
|
||||
</div><div class="value-text text-end" hx-get="/rpc/mining/production_cost" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Reward/Cost Ratio
|
||||
<!-- Button trigger ratio explanation modal -->
|
||||
<button type="button" class="btn-sm" data-bs-toggle="modal" data-bs-target="#ratio">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</button>
|
||||
</div><div class="value-text text-end" hx-get="/rpc/mining/reward_ratio" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-speedometer2"></i> TRANSACTIONS & FEES</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">1H Period (60 Blocks) </div><div class="value-text text-end" hx-get="/rpc/txns/count_1h" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">24H Period (1440 Blocks) </div><div class="value-text text-end" hx-get="/rpc/txns/count_24h" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="card-group mb-4">
|
||||
<div class="card me-2">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-receipt"></i> MEMPOOL</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Transactions </div><div class="value-text text-end" hx-get="/rpc/mempool/txns" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Stem </div><div class="value-text text-end" hx-get="/rpc/mempool/stem" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card me-2">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-diagram-3"></i> CONNECTIONS</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Inbound </div><div class="value-text text-end" hx-get="/rpc/peers/inbound" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Outbound </div><div class="value-text text-end" hx-get="/rpc/peers/outbound" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-pc-display-horizontal"></i> NODE</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Version </div><div class="value-text text-end">{{ node_ver }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text me-1">Protocol </div><div class="value-text text-end">{{ proto_ver }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text me-1">Sync Status </div><div class="value-text text-end" hx-get="/rpc/sync/status" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-md-none"> <!-- Show on < md screens-->
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-cash-coin"></i> PRICE</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">GRIN_BTC </div><div class="value-text text-end" hx-get="/rpc/price/btc" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">GRIN_USD </div><div class="value-text text-end" hx-get="/rpc/price/usd" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">24H Volume (USD) </div><div class="value-text text-end" hx-get="/rpc/market/volume_usd" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">24H Volume (BTC) </div><div class="value-text text-end" hx-get="/rpc/market/volume_btc" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-bank"></i> MARKET</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Yearly Inflation Rate </div><div class="value-text text-end" hx-get="/rpc/inflation/rate" hx-trigger="load, every 10s"> %</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Coin Supply </div><div class="value-text text-end" hx-get="/rpc/market/supply" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Soft Total Supply
|
||||
<!-- Button trigger soft supply explanation modal -->
|
||||
<button type="button" class="btn-sm" data-bs-toggle="modal" data-bs-target="#soft_sup">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</button>
|
||||
</div><div class="value-text text-end" hx-get="/rpc/market/soft_supply" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Market Cap (USD) </div><div class="value-text text-end" hx-get="/rpc/market/cap_usd" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Market Cap (BTC) </div><div class="value-text text-end" hx-get="/rpc/market/cap_btc" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="darkorange-text"><i class="bi bi-grid"></i> BLOCKCHAIN</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Size </div><div class="value-text text-end" hx-get="/rpc/disk/usage" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Block Height </div><div class="value-text text-end" hx-get="/rpc/block/latest" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Time Since Last Block </div><div class="value-text text-end" hx-get="/rpc/block/time_since_last" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-hammer"></i> MINING</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Hashrate (1440 Blocks) </div><div class="value-text text-end" hx-get="/rpc/network/hashrate" hx-trigger="load, every 10s"> KG/s</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Difficulty </div><div class="value-text text-end" hx-get="/rpc/network/difficulty" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Block Reward </div><div class="value-text text-end">ツ 60</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Estimated Mining Cost
|
||||
<!-- Button trigger mining cost explanation modal -->
|
||||
<button type="button" class="btn-sm" data-bs-toggle="modal" data-bs-target="#mining_cost">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</button>
|
||||
</div><div class="value-text text-end" hx-get="/rpc/mining/production_cost" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Reward/Cost Ratio
|
||||
<!-- Button trigger ratio explanation modal -->
|
||||
<button type="button" class="btn-sm" data-bs-toggle="modal" data-bs-target="#ratio">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</button>
|
||||
</div><div class="value-text text-end" hx-get="/rpc/mining/reward_ratio" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-speedometer2"></i> TRANSACTIONS & FEES</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">1H Period (60 Blocks) </div><div class="value-text text-end" hx-get="/rpc/txns/count_1h" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">24H Period (1440 Blocks) </div><div class="value-text text-end" hx-get="/rpc/txns/count_24h" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-receipt"></i> MEMPOOL</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Transactions </div><div class="value-text text-end" hx-get="/rpc/mempool/txns" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Stem </div><div class="value-text text-end" hx-get="/rpc/mempool/stem" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mb-3">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-diagram-3"></i> CONNECTIONS</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Inbound </div><div class="value-text text-end" hx-get="/rpc/peers/inbound" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Outbound </div><div class="value-text text-end" hx-get="/rpc/peers/outbound" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mb-4">
|
||||
<div class="card-body" align="left">
|
||||
<div class="darkorange-text"><i class="bi bi-pc-display-horizontal"></i> NODE</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text">Version </div><div class="value-text text-end">{{ node_ver }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text me-1">Protocol </div><div class="value-text text-end">{{ proto_ver }}</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="value-text me-1">Sync Status </div><div class="value-text text-end" hx-get="/rpc/sync/status" hx-trigger="load, every 10s"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Modals. Explanations of several dashboard stats. -->
|
||||
<div class="card border-0">
|
||||
|
||||
<div class="modal fade" id="soft_sup" tabindex="-1" aria-labelledby="soft_sup_label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="soft_sup_label">Soft Total Supply</h1>
|
||||
<div data-bs-theme="light">
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Percentage of issued coins from the soft total supply (3150M) when inflation will reach <1%.
|
||||
<br>
|
||||
<br>
|
||||
<a class="text-decoration-none" href="https://john-tromp.medium.com/a-case-for-using-soft-total-supply-1169a188d153">https://john-tromp.medium.com/a-case-for-using-soft-total-supply-1169a188d153</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modal fade" id="mining_cost" tabindex="-1" aria-labelledby="mining_cost_label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="mining_cost_label">Estimated Mining Cost</h1>
|
||||
<div data-bs-theme="light">
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Mining cost to produce 1 grin coin.<br>
|
||||
Assuming that:<br>
|
||||
Miner is G1-mini ASIC.<br>
|
||||
Electricity cost is $0.07 per kW/h.<br>
|
||||
<br>
|
||||
<a class="text-decoration-none" href="https://ipollo.com/products/ipollo-g1-mini">https://ipollo.com/products/ipollo-g1-mini</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="ratio" tabindex="-1" aria-labelledby="ratio_label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="ratio_label">Reward/Cost Ratio</h1>
|
||||
<div data-bs-theme="light">
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Shows the result of the following formula:<br>
|
||||
Price of 1 Grin (USD) / Mining Cost of 1 Grin (USD).<br>
|
||||
<br>
|
||||
<i class="bi bi-hand-thumbs-down"></i> - <= 1<br>
|
||||
<i class="bi bi-hand-thumbs-up"></i> - from 1 to 2<br>
|
||||
<i class="bi bi-emoji-sunglasses"></i> - from 2 to 3<br>
|
||||
<i class='bi bi-rocket-takeoff'></i> - >= 3
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</code>
|
||||
|
||||
{% endblock content%}
|
||||
|
Reference in New Issue
Block a user