diff --git a/docs/plans/site-ui-4-shots/live-1440-dark-fold.jpg b/docs/plans/site-ui-4-shots/live-1440-dark-fold.jpg new file mode 100644 index 000000000..d9d0a539b Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-1440-dark-fold.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-1440-dark-full.jpg b/docs/plans/site-ui-4-shots/live-1440-dark-full.jpg new file mode 100644 index 000000000..036ad61b4 Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-1440-dark-full.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-1440-dark-inspector.jpg b/docs/plans/site-ui-4-shots/live-1440-dark-inspector.jpg new file mode 100644 index 000000000..28b7afbd6 Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-1440-dark-inspector.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-1440-light-fold.jpg b/docs/plans/site-ui-4-shots/live-1440-light-fold.jpg new file mode 100644 index 000000000..8fe73fd30 Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-1440-light-fold.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-1440-light-full.jpg b/docs/plans/site-ui-4-shots/live-1440-light-full.jpg new file mode 100644 index 000000000..69d9e7da0 Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-1440-light-full.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-390-dark-fold.jpg b/docs/plans/site-ui-4-shots/live-390-dark-fold.jpg new file mode 100644 index 000000000..1418a735e Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-390-dark-fold.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-390-dark-full.jpg b/docs/plans/site-ui-4-shots/live-390-dark-full.jpg new file mode 100644 index 000000000..d4585810b Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-390-dark-full.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-390-light-fold.jpg b/docs/plans/site-ui-4-shots/live-390-light-fold.jpg new file mode 100644 index 000000000..6035e12fa Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-390-light-fold.jpg differ diff --git a/docs/plans/site-ui-4-shots/live-390-light-full.jpg b/docs/plans/site-ui-4-shots/live-390-light-full.jpg new file mode 100644 index 000000000..a5f9e433d Binary files /dev/null and b/docs/plans/site-ui-4-shots/live-390-light-full.jpg differ diff --git a/site/bench.html b/site/bench.html index 9c36ed718..f6b4b5485 100644 --- a/site/bench.html +++ b/site/bench.html @@ -129,12 +129,12 @@ table{min-width:560px}
-
90 entries, newest at the bottom
+
92 entries, newest at the bottom

Engineering log

Every measurement the project has made, newest at the bottom, written by the people and agents who ran it, with the commands and hardware. Prototype numbers are not mining numbers and say so.

- +

Igneum bench log

Append-only. Every number here was measured on the machine named, on the date given.

2026-10-03 proto-metal / igneum-bench, first run

@@ -756,7 +756,13 @@ table{min-width:560px}

Rental cost of hash, 6 October 2026 (branch gpu-fleet): what a GH/s costs by the hour against the devnet

Measured on the rented fleet (RunPod community pods, list prices, 18:45Z): 38 wave pods (4090, A4000, L4, 3090, 3070, 4070 Ti, A5000, 4000 Ada) ran 1,748 MH/s inside jobs (median pod 28 MH/s) for USD 20.44 an hour, USD 0.0117 per MH/s-hour; the 8x 4090 rig 459 MH/s at 1,636 W for USD 5.92 an hour, USD 0.0129 per MH/s-hour; a single 5090 pod 98 to 128 MH/s for USD 0.41 to 0.74 an hour. The live devnet's difficulty read 1,156,040,186 at 1 block a second at 19:00Z, so the whole network was about 1.16 GH/s, and the rented fleet was most of it. The live litepaper's line ("2 GH/s for USD 13/h vs 280 MH/s devnet") is corrected to: 1.75 GH/s for USD 20 an hour on community pods, against a devnet of 1.16 GH/s.

BuyerWhat USD 20/h buysAgainst the devnet (1.16 GH/s)Against mainnet scale
Home miner, 8 to 12 GB card (11 to 28 MH/s)nothing: the card is owned, 0.15 to 0.2 kWone card is 1 to 2 percent of the devnetone card is noise at a TH/s
Rig, 8x 4090 (459 MH/s, USD 5.92/h rented)1.7 rigsone rig is 40 percent of the devnetone rig is 0.05 percent of a TH/s
Renter at RunPod list prices1.75 GH/s while cards exist150 percent of the devnet: overtaken for USD 15/ha TH/s costs USD 11,700 an hour and the market cannot supply it: asked for 20 pods of any of 8 card types at 18:59Z to 19:15Z, RunPod gave 0 ("no instances currently available")
-

Consequence: the devnet's hash is rentable for the price of a dinner, so nothing on it is a security result; the counter-ASIC and finality work is tested there for correctness, not for cost. The cost argument only starts at the TH/s scale, where the rental market's supply (not its price) is the limit, and that number belongs in the litepaper with this caveat.

+

Consequence: the devnet's hash is rentable for the price of a dinner, so nothing on it is a security result; the counter-ASIC and finality work is tested there for correctness, not for cost. The cost argument only starts at the TH/s scale, where the rental market's supply (not its price) is the limit, and that number belongs in the litepaper with this caveat.

+

Block rate on Devnet 2, 6 October 2026 (branch gpu-fleet): 10 blocks per second against 1 on 42 rented cards

+

Run A (10 blocks/s profile, star topology, 65 min): 4.87 DAG blocks/s, 1.09 blue blocks/s, 77.6 percent red, tips 250 to 660, max reorg 55, difficulty easing all hour (6,719 to 1,307), the exec follower at 0.05 blocks/s (lag 18,901 at the end). Run B (1 block/s, same boxes, 30 min): 1.41 blocks/s over the window with the join burst, 1.0 blocks/s and under 2 percent red from minute six, tips 1 to 3, difficulty settled in six minutes (453 to 482 M), the exec follower at 0.46 blocks/s. The network lane's read: run A's reds came from node throughput (61 to 345 ms CPU per accepted block at mergeset 8 to 200), not from the star. Per tier the blue rate decides the payout interval (1.09 against 1.19 blue/s: a 4070 at 10 TH/s waits about three days for a paying block either way), so the higher rate buys the solo miner nothing until the node processes a block in under 50 ms at mergeset 248. Recommendation (the lane's): 1 block/s for the testnet and the launch, 10 behind three measured gates. Full tables and sources: docs/analysis/block-rate-devnet2.md, rows in fleet/bps/{A,B}.jsonl.

+

The rented fleet is the devnet's finality, 6 October 2026 (branch gpu-fleet)

+

Measured at 21:57Z from the hub's last 2,000 blocks: the 38 wave pods held 77.8 percent of the voter weight (mean 2.05 percent a pod), the 14 standing boxes most of the rest, the hands and the hub the remainder; the last lock signed 93.5 percent of the active voters and 89.9 percent of the frozen table (53 of 84 voters on the first certificate). Earlier the same evening the fleet removed 13 miners' GPUs inside three minutes and finality paused for two hours five minutes (18:39:36Z to 20:44:44Z, 42.7 percent of the table gone with earlier leavers; rule v3 holds a full window). From that came the 10 percent rule (never remove more than 10 percent of the live devnet's weight in an hour, tools/fleet/lib/standing.py weight_check) and the wave's wind-down by hourly slices (tools/fleet/winddown.py: slice 1 at 21:58Z took 12 pods and the 8x rig at 8.6 percent of weight).

+

When the wave is gone the 14 standing boxes hold about 95 percent of the weight, so from then until public hash arrives the fleet alone is the devnet's finality: a home miner's lock lands only while the fleet is up. What holds it up: every standing box runs under box-standing.sh, which restarts a dead node within one of its 60-second passes (the hub's three deaths tonight: 63 s, 41 s and 56 s to the restart line), restarts the miner with the node, prunes the prover's exports and trims the node log, and runs the exec recovery recipe when the state layer reads zero; lib/standing.py loop re-rents a dead host in the same shape and reports a box behind its wanted binary.

+
TierWhat it means
Home mineryour lock depends on 14 rented cards staying up and mining; a finality pause is not your node's fault and nothing you can fix; the rule above is what keeps it from recurring on the fleet's side
Rigthe same, and a rig that leaves is itself a weight removal: at 459 MH/s on tonight's devnet it is about 20 percent of the weight, over the hour's budget by itself
Poola pool node is one voter carrying its members' whole weight; a pool restart is the largest single removal on the network and must be sliced like the fleet's
The networkfinality by miner weight is only as steady as the miners' uptime; until public hash dwarfs the fleet, the fleet's supervisor is a consensus component

Generated from the repository at build time. Times are UTC. Machine names are model names.

diff --git a/site/live-dag.js b/site/live-dag.js index bf379c7d7..6534e6825 100644 --- a/site/live-dag.js +++ b/site/live-dag.js @@ -9,7 +9,7 @@ outside; opts.chip is the "scroll to zoom, Esc to release" element); window 30 to 300 s (the API's ?window=); a pause button; hover and tap show a block's details. - Usage: var dag = IgneumDag.mount(canvas, { compact, window, url, poll, mine, onState, onData, onWindow, onEngage, pauseButton, tooltip, chip }) + Usage: var dag = IgneumDag.mount(canvas, { compact, window, url, poll, mine, onState, onData, onWindow, onEngage, onSelect, pauseButton, tooltip, chip }) - url: the /api/live endpoint (default '/api/live'); poll: false stops the module's own 2 s fetch, the host then calls dag.push(reply) with a reply of the same shape ({ok, state:{stale, age_s, height, ...}, blocks:[...], finality:{checkpoints:[...]}, proving}) whenever it has new data (every poll or every new block, either is fine; blocks already on screen are updated in place). @@ -198,7 +198,7 @@ } canvas.addEventListener('mousemove', function (ev) { hover = hit(ev); canvas.style.cursor = hover ? 'pointer' : 'default'; if (!pinned) showTip(hover, ev); kick(); }); canvas.addEventListener('mouseleave', function () { hover = null; if (!pinned) showTip(null); kick(); }); - canvas.addEventListener('click', function (ev) { engage(true); var b = hit(ev); pinned = (pinned && b && pinned.hash === b.hash) ? null : b; showTip(pinned || hover); kick(); }); + canvas.addEventListener('click', function (ev) { engage(true); var b = hit(ev); pinned = (pinned && b && pinned.hash === b.hash) ? null : b; showTip(pinned || hover); if (opts.onSelect) opts.onSelect(pinned); kick(); }); // the wheel is never captured by default (6 Oct 2026, the owner: scrolling past the scene zoomed it): the page scrolls through the // scene; zoom takes ctrl or cmd with the wheel, a pinch, or a click into the scene, which engages it (opts.chip shows // "scroll to zoom, Esc to release"); Escape, a click outside or leaving the scene releases it diff --git a/site/live.html b/site/live.html index 60643068a..cd0f33a94 100644 --- a/site/live.html +++ b/site/live.html @@ -4,7 +4,7 @@ Igneum live devnet - + @@ -53,54 +53,116 @@ @@ -151,90 +213,111 @@ -
-
-
+
+
-
connecting to the devnet observer
-

The chain, as it happens.

+
Network observatory
+

Live devnet.

+

Every block has a story. Follow the connections.

- Download the miner +
+ +
connecting to the observer
+
+
+ +
+
Blocks / second ↗
pending
counted over the node’s last 60 s; the target is 1
+
Blue score #
pending
the newest block’s count of blue ancestors
+
Network hash rate ∿
pending
the node’s estimate from the last 1,000 blocks’ difficulty
+
Active vote keys ◇
pending
keys with a block in 10 min; a card runs several
+
Connected peers ⇄
pending
peers of the observer’s node
+
Locked checkpoint ●
pending
signed by two thirds of all 30-day weight
-
-
- -
-

Connecting to the devnet observer.

- -
-
-
-
Hash rate
pending
network estimate
-
Blocks, 10 min
pending
target 1 a second
-
Latest block
pending
pending
-
Shards proven, paid
pending
pending
-
Vote keys, 10 min
pending
a card runs several
-
Last lock
pending
pending
-
-

Reading the finality rule.

-

One node is read every 2 s; nothing here is a replay. Every square in the scene is a real block: its outline, fill and ring are its state. Fees since DAA 210,000: the adopted fee table.

- -
-
-

Miners

last 10 min
-
No blocks in the last 10 minutes.
-

Every vote key with a block in the last 10 minutes; a card runs several.

+
+
+
The block graph
+ 0 blocks +
+ + + +
-
-

Provers paid

pending
-
- shards proven and paid, all timepending - paid in the last 10 minpending - blocks fully proven, 10 minpending - proofs land behind the tippending +
+
+
+
live devnet
+
+
+ Drag to explore  ·  Select a block to inspect + 100%
-

Every chain block is split into shards; a card proves one, posts it, and is paid on the chain.

-
-
-

Recent blocks

the last eight
-
No blocks yet.
-

Number, miner, state. A number arrives once the block is planned onto the chain.

+
- -
- - This tab checks the chain itself: checkpoint checking, checking. - PREVIEW - - -
- -
-
-
the DAG
-
on screen 0chain 0120 s on screen
+
+
+ Selected chain + Included + Excluded + Locked checkpoint + Parent reference
-
-
- pending - included - selected chain - excluded - proven - locked checkpoint - finality band, locked, with its weight -
-

One lane per miner, the busiest first; the rest share the last lane. Hover or tap a block for its hash, miner, blue score, parents and proof state. Ctrl or cmd and scroll, a pinch, or a click into the scene zooms the window. The explorer has every block.

+ blue score pending
+
-
-

Your card: pending

- Download the miner +
+
+

Block activity

header times / window
+
0blocks in this view
+
+
one bar a minute, the last 30 minnow
+

Counted by the observer as blocks arrive.

+
+
+

Mining identities

displayed window
+
No blocks in the window.
+

Vote-key share of the displayed blocks. Several keys may belong to one GPU.

+
+
+

Event stream

live
+
Waiting for the first read.
-
+ +
+ Explore blocks as a table keyboard-accessible view +
+ + +
Blue scoreHashVote keyParentsStateChain block
Waiting for the first read.
+
+ +
Igneum / observatoryOne node read every 2 s. Nothing here is a replay.
@@ -298,64 +381,83 @@ - - -