{% extends "base.html" %} {% block head %}{% endblock %} {% block content %} {% if not race %}
Race odds

Not enough chain history yet, check back after a few blocks.

{% else %}
{% if not mining_enabled %}
Not building right now: mining is off. Still fully validating and syncing every block. Turn on in Settings.
{% endif %}
Odds
{% if waiting_zero_odds %}
Not mining
odds are at or below your minimum, watching before building
{% else %}
{{ (("~" if own_is_estimate and not race.own_pace_measured else "") ~ "%.1f"|format(race.odds_pct) ~ "%") if race.odds_pct is not none else "--" }}
{% set w = "%g"|format(race.draw_window) %}{% if race.odds_pct is none %}no blocks to judge from yet{% elif own_is_estimate and not race.own_pace_measured %}estimate: our pace is not measured yet{% elif race.odds_pct == 0 %}never inside the {{ w }}s draw window{% elif race.in_draw_pct < 95 %}in the {{ w }}s draw window on {{ "%.0f"|format(race.in_draw_pct) }}% of heights{% elif race.entrants < 1.05 %}only builder inside the {{ w }}s draw window{% else %}{{ "%.1f"|format(race.entrants) }} builders inside the {{ w }}s draw window{% endif %}
{% endif %}
Blocks won
{{ ("%.1f"|format(race.win_share_pct) ~ "%") if race.win_share_pct is not none else "--" }}
{{ "%d of the last %d"|format(race.own_blocks, race.window|length) }}
Self pace
{{ ("%.1f"|format(race.own_pace) ~ "s") if race.own_pace is not none else "--" }}
{{ "median interval of blocks we built" if race.own_pace_measured else ("estimated from calibration, no build finished yet" if own_is_estimate else "VDF clock: no block of ours in this window") }}
Window median
{{ "%.1f"|format(race.median) }}s
{{ race.window|length }} blocks
Deepest reorg
{{ reorgs.deepest if reorgs.deepest else "none" }}
{% if reorgs.count %}{{ reorgs.count }} in 30 days, ties not counted {% else %}none deeper than a tie, 30 days{% endif %}
Block-to-block time, last {{ race.window|length }} blocks
{% for t in chart.ticks %} {{ "%.0f"|format(t.value) }}s{{ t.suffix }} {% endfor %} {# Height axis. The server draws it plain: gridlines and labels, no grips, since without JS there is nothing to drag them with. #} {% for t in chart.x_ticks %} {% set tx = chart.pad_l + t.frac * chart.plot_w %} {% if not loop.first and not loop.last %} {% endif %} {{ t.height }} {% endfor %} {% for p in chart.points %} {% if not loop.first %} {% set prev = chart.points[loop.index0 - 1] %} Block {{ p.height }}: {{ "%.1f"|format(p.seconds) }}s{{ ", " ~ p.nick ~ " (" ~ p.builder ~ ")" if p.nick else (", " ~ p.builder if p.builder) }}{{ " (off scale, clipped to the edge)" if p.clipped }} {% endif %} {% endfor %} {# When the two reference lines sit within 14px of each other, the upper one labels above its line and the lower one below, so the labels never overlap. #} {% set close = chart.own_y is not none and (chart.own_y - chart.median_y)|abs < 14 %} window median {{ "%.0f"|format(race.median) }}s {% if chart.own_y is not none %} self pace{{ " (off scale)" if chart.own_clipped }} {% endif %}
{% for entry in chart.legend or [] %} {% if entry.label %} {% if entry.nick %}{{ entry.nick }} {% else %}{{ entry.label[:10] }}…{% endif %} {% else %}Other{% endif %} ({{ entry.count }}) {% if entry.label %}{{ entry.nick or "Builder" }}{% else %}All other builders{% endif %} {% if entry.label %}{{ entry.label }}{% endif %} {{ entry.count }} of {{ entry.total }} blocks {% if entry.machines %} Machine, fastest firstBlocksMedian {% for m in entry.machines %} {{ m.name }}{{ m.blocks }}{{ "%.0f"|format(m.pace) }}s {% endfor %} {% endif %} {% endfor %}
{% if hardware %}
Hardware
{{ hardware.cpu }} · {{ hardware.os }}
{% endif %}
{% endif %} {% endblock %}