git / moonbite-network / templates/home_mobbin.html · raw

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>MoonBite — No noise. Just proof-of-work.</title><meta name="description" content="MoonBite (MBITE) is a proof-of-work coin you mine on your own hardware, hold in your own wallet and verify with your own node. A block about every {{ consensus.block_time_min }} minutes. No premine, no listing, no gatekeepers."><link rel="icon" type="image/svg+xml" href="/static/moonbite-logo.svg"><link rel="stylesheet" href="/static/fonts/moonbite-fonts.css"><style nonce="{{ csp_nonce }}">  /* Reserve palette: Moongold on Void. Red/green are functional only. */  :root {    --void:#07080B; --void-2:#0C0E13; --slate:#1A1D25; --slate-2:#262A35;    --bone:#ECE7DA; --ash:#8E8B82; --ash-2:#5C5A54; --gold:#D9A441; --gold-2:#B8863B;    --ok:#4CAF7A; --line:rgba(236,231,218,0.09);    --serif: Georgia, "Times New Roman", "Iowan Old Style", serif;    --sans: Inter, system-ui, -apple-system, "Segoe UI", sans-serif;    --mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;  }  * { box-sizing: border-box; }  html { color-scheme: dark; scroll-behavior: smooth; }  html, body { margin: 0; }  body { background: var(--void); color: var(--bone); font-family: var(--sans); font-size: 16px;    line-height: 1.55; -webkit-font-smoothing: antialiased; overflow-x: hidden; }  a { color: inherit; text-decoration: none; }  .mono { font-family: var(--mono); font-variant-numeric: tabular-nums; }  .wrap { max-width: 1180px; margin: 0 auto; padding: 0 24px; }  .eyebrow { font-family: var(--mono); font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--ash); }  .gold { color: var(--gold); }  /* ---------- nav ---------- */  .nav { position: sticky; top: 0; z-index: 50; background: rgba(7,8,11,.78);    backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border-bottom: 1px solid var(--line); }  .nav .wrap { display: flex; align-items: center; height: 64px; gap: 28px; }  .brand { display: flex; align-items: center; gap: 10px; font-weight: 700; letter-spacing: -.01em; }  .brand img { width: 28px; height: 28px; }  .links { display: flex; gap: 22px; margin-left: auto; font-size: 14px; color: var(--ash); }  .links a:hover { color: var(--bone); }  .btn { display: inline-flex; align-items: center; gap: 8px; padding: 11px 18px; border-radius: 6px;    font-size: 14px; font-weight: 600; border: 1px solid var(--line); color: var(--bone); transition: .18s; }  .btn:hover { border-color: rgba(236,231,218,.3); }  .btn.primary { background: var(--gold); color: #0B0D12; border-color: var(--gold); }  .btn.primary:hover { background: #E4B458; }  .btn.sm { padding: 8px 14px; font-size: 13px; }  .burger { display: none; }  /* ---------- hero ---------- */  .hero { position: relative; padding: 120px 0 72px; text-align: center; overflow: hidden; }  .hero::before { content: ""; position: absolute; inset: auto 0 -40% 0; height: 90%; pointer-events: none;    background: radial-gradient(50% 60% at 50% 100%, rgba(217,164,65,.16) 0%, rgba(217,164,65,0) 70%); }  .hero h1 { font-family: var(--serif); font-weight: 400; font-size: clamp(44px, 7.2vw, 96px); line-height: 1.02;    letter-spacing: -.02em; margin: 18px 0 0; }  .hero h1 em { font-style: italic; color: var(--ash); }  .hero p.lede { max-width: 600px; margin: 26px auto 0; color: var(--ash); font-size: 17px; }  .hero .cta { display: flex; gap: 12px; justify-content: center; margin-top: 36px; flex-wrap: wrap; }  .hero .fine { margin-top: 18px; font-size: 12px; color: var(--ash-2); }  .hero .fine a { color: var(--ash); border-bottom: 1px solid var(--ash-2); }  /* moon mark: one disc, a bite, a thin orbit */  .moon { position: relative; width: min(560px, 80vw); height: 240px; margin: 64px auto 0; }  .moon .disc { position: absolute; left: 50%; top: 0; width: 460px; height: 460px; transform: translateX(-50%);    border-radius: 50%; background: radial-gradient(circle at 38% 30%, #2A2E3A 0%, var(--void-2) 55%, var(--void) 100%);    box-shadow: inset 0 0 0 1px rgba(236,231,218,.08), 0 -20px 80px rgba(217,164,65,.08); }  .moon .bite { position: absolute; left: calc(50% + 120px); top: -30px; width: 190px; height: 190px; border-radius: 50%;    background: var(--void); box-shadow: inset 20px 10px 60px rgba(217,164,65,.14); }  .moon .orbit { position: absolute; left: 50%; top: -34px; width: 640px; height: 640px; transform: translateX(-50%);    border-radius: 50%; border: 1px solid rgba(217,164,65,.18); animation: spin 48s linear infinite; }  .moon .orbit i { position: absolute; left: 50%; top: -4px; width: 8px; height: 8px; margin-left: -4px; border-radius: 50%;    background: var(--gold); box-shadow: 0 0 18px rgba(217,164,65,.9); }  .moon .fade { position: absolute; inset: auto 0 0 0; height: 120px;    background: linear-gradient(to bottom, rgba(7,8,11,0), var(--void)); }  @keyframes spin { to { transform: translateX(-50%) rotate(360deg); } }  /* ---------- stats row (Base-style mono figures) ---------- */  .stats { border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }  .stats .wrap { display: grid; grid-template-columns: repeat(4, 1fr); }  .stat { padding: 28px 20px; border-left: 1px solid var(--line); }  .stat:first-child { border-left: 0; }  .stat b { display: block; font-family: var(--mono); font-weight: 500; font-size: 30px; letter-spacing: -.02em; color: var(--bone); }  .stat b .dim { color: var(--ash-2); }  .stat span { display: block; margin-top: 6px; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--ash); }  .stat.live span::before { content: ""; display: inline-block; width: 6px; height: 6px; border-radius: 50%;    background: var(--ok); margin-right: 8px; vertical-align: 1px; animation: blink 2.4s ease-in-out infinite; }  .stat.live.stale span::before { background: var(--ash-2); animation: none; }  @keyframes blink { 0%,100% { opacity: 1 } 50% { opacity: .25 } }  /* ---------- section scaffolding ---------- */  section.block { padding: 104px 0; }  .head { max-width: 680px; }  .head h2 { font-family: var(--serif); font-weight: 400; font-size: clamp(32px, 4.2vw, 50px); line-height: 1.08;    letter-spacing: -.015em; margin: 14px 0 0; }  .head p { color: var(--ash); margin: 18px 0 0; font-size: 17px; }  /* ---------- numbered rail (Linear-style) ---------- */  .rail { display: grid; grid-template-columns: repeat(4, 1fr); margin-top: 64px; border-top: 1px solid var(--line); }  .rail .cell { padding: 36px 28px 36px 0; border-left: 1px solid var(--line); padding-left: 24px; min-height: 230px;    display: flex; flex-direction: column; }  .rail .cell:first-child { border-left: 0; padding-left: 0; }  .rail .cell .eyebrow { margin-bottom: auto; }  .rail .cell h3 { font-size: 20px; font-weight: 600; margin: 32px 0 10px; letter-spacing: -.01em; }  .rail .cell p { color: var(--ash); font-size: 14.5px; margin: 0 0 16px; }  .rail .cell a.more { font-size: 13px; color: var(--gold); }  .rail .cell a.more:hover { text-decoration: underline; }  /* ---------- terminal (Firecrawl-style split) ---------- */  .split { display: grid; grid-template-columns: 300px 1fr; margin-top: 56px; border: 1px solid var(--line); border-radius: 10px;    overflow: hidden; background: var(--void-2); }  .steps { border-right: 1px solid var(--line); }  .split > *, .step, .term { min-width: 0; }  .step { padding: 22px 24px; border-bottom: 1px solid var(--line); cursor: pointer; transition: background .15s; position: relative; }  .step:last-child { border-bottom: 0; }  .step h4 { margin: 0 0 6px; font-size: 15px; font-weight: 600; }  .step p { margin: 0; font-size: 13px; color: var(--ash); }  .step.on { background: var(--slate); }  .step.on::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: var(--gold); }  .term { display: flex; flex-direction: column; }  .term .bar { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--line);    font-family: var(--mono); font-size: 12px; color: var(--ash); }  .term .bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--slate-2); }  .term .bar button { margin-left: auto; background: none; border: 1px solid var(--line); color: var(--ash); font: inherit;    padding: 4px 10px; border-radius: 4px; cursor: pointer; }  .term .bar button:hover { color: var(--bone); }  .term pre { margin: 0; padding: 24px; font-family: var(--mono); font-size: 13.5px; line-height: 1.7; color: var(--bone);    white-space: pre-wrap; overflow-wrap: anywhere; flex: 1; min-height: 300px; }  .term pre .c { color: var(--ash-2); }  .term pre .g { color: var(--gold); }  .term pre .k { color: var(--ash); }  /* ---------- principles grid (Attio-style quiet cards) ---------- */  .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 56px; }  .card { border: 1px solid var(--line); border-radius: 10px; padding: 28px; background: var(--void-2); transition: border-color .2s; }  .card:hover { border-color: rgba(217,164,65,.35); }  .card .fig { font-family: var(--mono); font-size: 28px; color: var(--gold); letter-spacing: -.02em; }  .card h3 { margin: 22px 0 8px; font-size: 17px; font-weight: 600; }  .card p { margin: 0; color: var(--ash); font-size: 14.5px; }  /* ---------- recent blocks ---------- */  .blocks { margin-top: 48px; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }  .blocks table { width: 100%; border-collapse: collapse; font-family: var(--mono); font-size: 13px; }  .blocks th { text-align: left; padding: 12px 18px; color: var(--ash); font-weight: 500; letter-spacing: .1em;    text-transform: uppercase; font-size: 11px; border-bottom: 1px solid var(--line); background: var(--void-2); }  .blocks td { padding: 12px 18px; border-bottom: 1px solid var(--line); }  .blocks tr:last-child td { border-bottom: 0; }  .blocks td.r, .blocks th.r { text-align: right; }  .blocks td a { color: var(--gold); }  /* ---------- disclosure + closing ---------- */  .disclose { border: 1px solid rgba(217,164,65,.28); border-radius: 10px; padding: 28px 32px; margin-top: 64px;    display: grid; grid-template-columns: 180px 1fr; gap: 24px; background: rgba(217,164,65,.04); }  .disclose p { margin: 0; color: var(--ash); font-size: 14.5px; }  .disclose p + p { margin-top: 10px; }  .disclose a { color: var(--gold); }  .closing { text-align: center; padding: 120px 0 110px; border-top: 1px solid var(--line); }  .closing h2 { font-family: var(--serif); font-weight: 400; font-size: clamp(36px, 5.5vw, 72px); line-height: 1.04;    letter-spacing: -.02em; margin: 0; }  .closing .cta { margin-top: 32px; display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; }  footer { border-top: 1px solid var(--line); padding: 40px 0; font-size: 13px; color: var(--ash); }  footer .wrap { display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; }  footer nav { display: flex; gap: 18px; flex-wrap: wrap; }  footer nav a:hover { color: var(--bone); }  /* ---------- reveal on scroll ---------- */  .rv { opacity: 0; transform: translateY(18px); transition: opacity .7s ease, transform .7s ease; }  .rv.in { opacity: 1; transform: none; }  @media (prefers-reduced-motion: reduce) { .rv { opacity: 1; transform: none; transition: none; } .moon .orbit { animation: none; } }  /* ---------- responsive ---------- */  @media (max-width: 960px) {    .stats .wrap, .rail { grid-template-columns: repeat(2, 1fr); }    .rail .cell:nth-child(3) { border-left: 0; padding-left: 0; }    .stat:nth-child(3) { border-left: 0; }    .stat, .rail .cell { border-top: 1px solid var(--line); }    .stat:nth-child(-n+2), .rail .cell:nth-child(-n+2) { border-top: 0; }    .grid { grid-template-columns: 1fr 1fr; }    .split { grid-template-columns: 1fr; }    .steps { border-right: 0; border-bottom: 1px solid var(--line); display: grid; grid-template-columns: repeat(3, 1fr); }    .step { border-bottom: 0; border-right: 1px solid var(--line); }    .step:last-child { border-right: 0; }    .step.on::before { width: auto; height: 2px; right: 0; bottom: auto; }    .disclose { grid-template-columns: 1fr; }  }  @media (max-width: 640px) {    .links, .nav .btn { display: none; }    .nav .burger { display: inline-flex; margin-left: auto; }    .hero { padding-top: 72px; }    .stats .wrap, .rail, .grid, .steps { grid-template-columns: 1fr; }    .stat, .rail .cell { border-left: 0; padding-left: 0; border-top: 1px solid var(--line); }    .stat:first-child, .rail .cell:first-child { border-top: 0; }    .rail .cell { min-height: 0; }    .rail .cell h3 { margin-top: 18px; }    .step { border-right: 0; border-bottom: 1px solid var(--line); }    .moon { height: 150px; }    .moon .disc { width: 320px; height: 320px; }    .moon .bite { left: calc(50% + 70px); width: 140px; height: 140px; }    .moon .orbit { width: 440px; height: 440px; }    .blocks th:nth-child(3), .blocks td:nth-child(3) { display: none; }  }  .sheet { display: none; position: fixed; inset: 64px 0 0 0; background: var(--void); z-index: 49; padding: 24px; }  .sheet.open { display: block; }  .sheet a { display: block; padding: 16px 0; border-bottom: 1px solid var(--line); font-size: 18px; }</style></head><body><header class="nav">  <div class="wrap">    <a href="/" class="brand"><img src="/static/moonbite-logo.svg" alt="" width="28" height="28">MoonBite</a>    <nav class="links">      <a href="/mine">Mine</a>      <a href="/get-wallet">Wallet</a>      <a href="/explorer">Explorer</a>      <a href="/whitepaper">White Paper</a>      <a href="/developers">Developers</a>      <a href="/bounty">Bounty</a>      <a href="/about">About</a>    </nav>    <a href="/get-wallet" class="btn primary sm">Get Wallet</a>    <button class="btn sm burger" type="button" aria-label="Menu" id="burger">Menu</button>  </div></header><div class="sheet" id="sheet">  <a href="/mine">Mine</a><a href="/get-wallet">Wallet</a><a href="/explorer">Explorer</a>  <a href="/whitepaper">White Paper</a><a href="/developers">Developers</a><a href="/bounty">Bounty</a><a href="/about">About</a></div><main>  <section class="hero">    <div class="wrap">      <div class="eyebrow">Proof-of-work coin · Mainnet live</div>      <h1>No noise.<br><em>Just proof-of-work.</em></h1>      <p class="lede">MBITE is money you earn by mining on hardware you already own. One block about every {{ consensus.block_time_min }} minutes. No premine, no listing, no one to ask.</p>      <div class="cta">        <a href="/mine" class="btn primary">Start mining</a>        <a href="/explorer" class="btn">Watch the chain</a>      </div>      <div class="fine">You cannot buy MBITE here. Read the <a href="/governance">standing disclosure</a> before you spend an hour on it.</div>      <div class="moon" aria-hidden="true">        <div class="orbit"><i></i></div>        <div class="disc"></div>        <div class="bite"></div>        <div class="fade"></div>      </div>    </div>  </section>  <section class="stats">    <div class="wrap">      <div class="stat live" id="statHeight"><b class="mono"><span class="dim">#</span><span data-k="height">—</span></b><span>Block height</span></div>      <div class="stat"><b class="mono"><span data-k="supply">—</span><span class="dim"> MBITE</span></b><span>Mined so far</span></div>      <div class="stat"><b class="mono"><span data-k="hashps">—</span></b><span>Network hashrate</span></div>      <div class="stat"><b class="mono"><span data-k="ago">—</span></b><span>Since last block</span></div>    </div>  </section>  <section class="block">    <div class="wrap">      <div class="head rv">        <div class="eyebrow">What you get</div>        <h2>Four things, and nothing you did not ask for.</h2>        <p>Every coin that exists was found by a computer solving a block. The rules are fixed in code you can read, and your copy of the chain is as good as anyone's.</p>      </div>      <div class="rail rv">        <div class="cell"><div class="eyebrow">01 Mine</div><h3>Mine on a laptop</h3><p>RandomX is built for ordinary CPUs. Install the miner, point it at your address, and you are part of the network tonight.</p><a class="more" href="/mine">Mining guide</a></div>        <div class="cell"><div class="eyebrow">02 Hold</div><h3>Keys that are yours</h3><p>A self-custody wallet with a twelve-word seed. Optional timelock vault for the day you lose your phone.</p><a class="more" href="/get-wallet">Get the wallet</a></div>        <div class="cell"><div class="eyebrow">03 Verify</div><h3>Run your own node</h3><p>One binary, one config file. Your node checks every block itself and never trusts this website.</p><a class="more" href="/full-node">Node setup</a></div>        <div class="cell"><div class="eyebrow">04 Read</div><h3>Rules in the open</h3><p>Supply, halvings and block time live in the source and in every decision record. Nothing changes quietly.</p><a class="more" href="/governance">Decision records</a></div>      </div>    </div>  </section>  <section class="block" style="padding-top:0">    <div class="wrap">      <div class="head rv">        <div class="eyebrow">In your terminal</div>        <h2>Three commands to your first block.</h2>      </div>      <div class="split rv">        <div class="steps" id="steps">          <div class="step on" data-i="0"><h4>Install</h4><p>Download a verified release for your platform.</p></div>          <div class="step" data-i="1"><h4>Mine</h4><p>Start the miner with your address.</p></div>          <div class="step" data-i="2"><h4>Verify</h4><p>Ask your own node what it sees.</p></div>        </div>        <div class="term">          <div class="bar"><i></i><i></i><i></i>&nbsp;moonbite — terminal <button type="button" id="copy">Copy</button></div>          <pre id="code"></pre>        </div>      </div>    </div>  </section>  <section class="block" style="padding-top:0">    <div class="wrap">      <div class="head rv">        <div class="eyebrow">The rules</div>        <h2>Fixed before the first block. Unchanged since.</h2>      </div>      <div class="grid rv">        <div class="card"><div class="fig">Ȼ{{ '%.0f' % consensus.initial_subsidy_coins }}</div><h3>Per block</h3><p>Paid to whoever finds the block. Halves every {{ '{:,}'.format(consensus.halving_interval) }} blocks.</p></div>        <div class="card"><div class="fig">{{ consensus.block_time_min }} min</div><h3>Block time</h3><p>{{ consensus.blocks_per_day }} blocks a day. Difficulty retargets often enough that a laptop still gets a fair draw.</p></div>        <div class="card"><div class="fig">{{ '{:,.0f}'.format(consensus.max_supply_coins) }}</div><h3>Hard cap</h3><p>The most MBITE that will ever exist. No foundation allocation, no treasury, no premine.</p></div>      </div>      <div class="blocks rv">        <table>          <thead><tr><th>Height</th><th>Found</th><th>Transactions</th><th class="r">Reward</th></tr></thead>          <tbody id="blockRows"><tr><td colspan="4" style="color:var(--ash)">Waiting for the node…</td></tr></tbody>        </table>      </div>      <div class="disclose rv">        <div class="eyebrow">Standing disclosure</div>        <div>          <p>MoonBite is a small chain with a small hashrate. That makes it easy to join and easy to attack. The people who built it mine it too, and say so in <a href="/governance/ADR-006">ADR-006</a>. An earlier beta chain was retired and its balances voided; the current genesis says so in its coinbase.</p>          <p>There is no exchange listing and no price. If someone offers to sell you MBITE, they are not us.</p>        </div>      </div>    </div>  </section>  <section class="closing">    <div class="wrap">      <div class="eyebrow">Ready?</div>      <h2 style="margin-top:14px">Mine the moon.<br><span class="gold">Keep what you find.</span></h2>      <div class="cta">        <a href="/mine" class="btn primary">Start mining</a>        <a href="/whitepaper" class="btn">Read the white paper</a>      </div>    </div>  </section></main><footer>  <div class="wrap">    <div>MoonBite · Fair-launch proof-of-work money · <span class="mono">MBITE</span></div>    <nav><a href="/about">About</a><a href="/governance">Decisions</a><a href="/privacy">Privacy</a><a href="/bounty">Bounty</a><a href="/developers">Developers</a></nav>  </div></footer><script nonce="{{ csp_nonce }}">(function () {  var snippets = [    '<span class="c"># 1. Install a verified release</span>\n<span class="g">$</span> curl -fsSL https://moonbite.org/releases/latest/moonbite-miner.tar.gz -o miner.tar.gz\n<span class="g">$</span> minisign -Vm miner.tar.gz -P <span class="k">&lt;published key&gt;</span>\n<span class="g">$</span> tar xzf miner.tar.gz && cd moonbite-miner',    '<span class="c"># 2. Mine to your own address</span>\n<span class="g">$</span> ./moonbite-miner --address <span class="k">moon1q...youraddress</span> --threads auto\n<span class="c">randomx: dataset ready (2.1 GB)</span>\n<span class="c">hashrate: 1.9 kH/s  |  height {{ "{{height}}" }}  |  waiting for a block…</span>',    '<span class="c"># 3. Trust your node, not this page</span>\n<span class="g">$</span> moonbite-cli getblockchaininfo | grep -E \'"(blocks|chain)"\'\n  "chain": "main",\n  "blocks": {{ "{{height}}" }},'  ];  var code = document.getElementById('code'), steps = document.getElementById('steps'), cur = 0, height = '…';  function render() { code.innerHTML = snippets[cur].replace(/\{\{height\}\}/g, height); }  steps.addEventListener('click', function (e) {    var s = e.target.closest('.step'); if (!s) return;    cur = +s.dataset.i;    steps.querySelectorAll('.step').forEach(function (x) { x.classList.toggle('on', x === s); });    render();  });  document.getElementById('copy').addEventListener('click', function () {    var t = code.innerText; if (navigator.clipboard) navigator.clipboard.writeText(t);    this.textContent = 'Copied'; var b = this; setTimeout(function () { b.textContent = 'Copy'; }, 1400);  });  render();  var burger = document.getElementById('burger'), sheet = document.getElementById('sheet');  burger.addEventListener('click', function () { sheet.classList.toggle('open'); });  var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } }); }, { threshold: .12 });  document.querySelectorAll('.rv').forEach(function (el) { io.observe(el); });  function fmtH(h) { if (!h) return '—'; var u = ['H/s','kH/s','MH/s','GH/s'], i = 0; while (h >= 1000 && i < 3) { h /= 1000; i++; } return h.toFixed(i ? 1 : 0) + ' ' + u[i]; }  function ago(t) { var s = Math.max(0, Math.floor(Date.now() / 1000 - t)); if (s < 60) return s + 's'; var m = Math.floor(s / 60); if (m < 60) return m + 'm ' + (s % 60) + 's'; return Math.floor(m / 60) + 'h ' + (m % 60) + 'm'; }  var last = null;  function set(k, v) { document.querySelectorAll('[data-k="' + k + '"]').forEach(function (n) { n.textContent = v; }); }  function tick() { if (last) set('ago', ago(last.last_block_time)); }  function pull() {    fetch('/api/tip', { cache: 'no-store' }).then(function (r) { return r.ok ? r.json() : null; }).then(function (d) {      var st = document.getElementById('statHeight');      if (!d || d.status !== 'success') { st.classList.add('stale'); return; }      st.classList.remove('stale'); last = d; height = String(d.height);      set('height', d.height.toLocaleString());      set('supply', Math.floor(d.supply_coins).toLocaleString());      set('hashps', fmtH(d.hashps));      render(); tick();      var rows = (d.blocks || []).slice(0, 6).map(function (b) {        return '<tr><td><a href="/explorer?q=' + b.height + '">#' + b.height.toLocaleString() + '</a></td><td>' + ago(b.time) + ' ago</td><td>' + b.tx_count + '</td><td class="r">Ȼ' + Number(b.subsidy_coins).toFixed(2) + '</td></tr>';      }).join('');      if (rows) document.getElementById('blockRows').innerHTML = rows;    }).catch(function () { document.getElementById('statHeight').classList.add('stale'); });  }  pull(); setInterval(pull, 15000); setInterval(tick, 1000);})();</script></body></html>