Merge site-ui-3: the site redesign (simple nav, miner, app, live devnet, one design system), X36, the Discord vanity

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-07 08:01:06 +00:00
commit 107090dba9
102 changed files with 1068 additions and 744 deletions

View file

@ -83,4 +83,4 @@ file yet), the install on the box.
## The server invite ## The server invite
The standing invite is https://discord.gg/beCy8G5ZR (created 6 October 2026, main; the vanity names discord.gg/igneum and discord.gg/igneumnetwork were free on 3 October and are not yet claimed). The home page's join line and any public text use this URL; nobody asks for it again. The standing invite is https://discord.gg/igneum (created 6 October 2026, main; the vanity names discord.gg/igneum and discord.gg/igneumnetwork were free on 3 October and are not yet claimed). The home page's join line and any public text use this URL; nobody asks for it again.

View file

@ -185,6 +185,8 @@ Evidence: `docs/analysis/horizon/algorithm.md` section 5.1 (the ceiling table: m
### M34. The shadow size N is a constant of the binary, so the one lever against the dataset-storing chip needs a fork to move ### M34. The shadow size N is a constant of the binary, so the one lever against the dataset-storing chip needs a fork to move
"Your own Horizon lane says the reserve and the era draw buy nothing against a chip that stores the dataset, and that the only lever is the latency-shadow size N. N is 27 passes of a 256-instruction block, hard-coded in `V4_CLASS`. So when HBM4 doubles a chip's rate per stack in 2028, your answer is a hard fork, and a fork that retires the M5 Max at the first doubling. And now there is a shipping RandomX ASIC." "Your own Horizon lane says the reserve and the era draw buy nothing against a chip that stores the dataset, and that the only lever is the latency-shadow size N. N is 27 passes of a 256-instruction block, hard-coded in `V4_CLASS`. So when HBM4 doubles a chip's rate per stack in 2028, your answer is a hard fork, and a fork that retires the M5 Max at the first doubling. And now there is a shipping RandomX ASIC."
Status: Relabelled (7 October 2026, morning, X36): the X9 in this row and in the litepaper paragraph is the chip Bitmain announced and withdrew before launch, its core claimed and never measured; the ladder's arithmetic against that core is unchanged.
Status: Conceded, implemented (6 October 2026, night; `docs/design/latency-ladder.md`, branch `ladder`, fork branch `ladder-node`, the 0.3.17 feature tree, behind `latency_ladder_activation_daa`, never until set, 0 on the testnet when the project lead says): N is a genesis ladder of six rungs (27, 35, 53, 88, 173, 267 passes; about 102,100 to 1,001,600 counted ops) with a measured admissibility flag per rung (cold verify under 10 ms on the reference core with its SMT sibling loaded, igneum-build-1, 6 October 2026: rungs 0 to 2 pass at 8.77, 8.87 and 9.23 ms, rung 3 misses by 0.08 ms under a box load of 25 and is out until a quiet re-run, rungs 4 and 5 are out at 12.38 and 14.96), and the step is consensus state derived from two bits of the header version: up one rung when 90 percent of blue blocks in each of seven consecutive windows ask for it and the rung above is admissible, down one rung symmetrically, never two rungs inside seven windows (the oldest window must begin after the last step took effect), never unconditionally. Tests, the known-failed case first: a changed N today hashes another program under the same program id (a hard fork no pack line told apart); after, rung 0 is class v4 byte for byte, a rung above carries its pass count in the id, 8,999 bps in one window of seven does not move the step, a two-step jump is impossible, down never passes rung 0, an inadmissible rung is never entered. Stated in `site/litepaper.html`, Mining section ("The work that waits can grow"). Status: Conceded, implemented (6 October 2026, night; `docs/design/latency-ladder.md`, branch `ladder`, fork branch `ladder-node`, the 0.3.17 feature tree, behind `latency_ladder_activation_daa`, never until set, 0 on the testnet when the project lead says): N is a genesis ladder of six rungs (27, 35, 53, 88, 173, 267 passes; about 102,100 to 1,001,600 counted ops) with a measured admissibility flag per rung (cold verify under 10 ms on the reference core with its SMT sibling loaded, igneum-build-1, 6 October 2026: rungs 0 to 2 pass at 8.77, 8.87 and 9.23 ms, rung 3 misses by 0.08 ms under a box load of 25 and is out until a quiet re-run, rungs 4 and 5 are out at 12.38 and 14.96), and the step is consensus state derived from two bits of the header version: up one rung when 90 percent of blue blocks in each of seven consecutive windows ask for it and the rung above is admissible, down one rung symmetrically, never two rungs inside seven windows (the oldest window must begin after the last step took effect), never unconditionally. Tests, the known-failed case first: a changed N today hashes another program under the same program id (a hard fork no pack line told apart); after, rung 0 is class v4 byte for byte, a rung above carries its pass count in the id, 8,999 bps in one window of seven does not move the step, a two-step jump is impossible, down never passes rung 0, an inadmissible rung is never entered. Stated in `site/litepaper.html`, Mining section ("The work that waits can grow").
Answer: Correct on both counts, and the second was the sharper one. The X9 (Bitmain, about 1 MH/s at 2,472 W, approximate, github.com/monero-project/monero/issues/10270) is a shipped 3x per-joule edge over a desktop CPU on the best-known latency-bound random-program design, seven years after launch; it makes the k = 0.3 column of the chip model a product class rather than an attacker's claim, and the public headline is now the range 2.1x (k = 1) to 3.9x (k = 0.33) over the RTX 5090 at class v4, with the ladder taking the X9 bracket to about 2.8x by rung 2 and the Apple tier's to about 1.1x by rung 3. The ladder does not close the gap; it is the chain's only automatic answer, it moves at the pace of the cards that pay for it, and the honest card's watts remain the lever that moves every row (algorithm lane proposal 7). What the ladder gives up by design: a chip holding over 10 percent of weight can stall it, and the status quo it stalls is a rung the cards already run. Answer: Correct on both counts, and the second was the sharper one. The X9 (Bitmain, about 1 MH/s at 2,472 W, approximate, github.com/monero-project/monero/issues/10270) is a shipped 3x per-joule edge over a desktop CPU on the best-known latency-bound random-program design, seven years after launch; it makes the k = 0.3 column of the chip model a product class rather than an attacker's claim, and the public headline is now the range 2.1x (k = 1) to 3.9x (k = 0.33) over the RTX 5090 at class v4, with the ladder taking the X9 bracket to about 2.8x by rung 2 and the Apple tier's to about 1.1x by rung 3. The ladder does not close the gap; it is the chain's only automatic answer, it moves at the pace of the cards that pay for it, and the honest card's watts remain the lever that moves every row (algorithm lane proposal 7). What the ladder gives up by design: a chip holding over 10 percent of weight can stall it, and the status quo it stalls is a rung the cards already run.
@ -700,6 +702,8 @@ Evidence: litepaper "For miners", hardware paragraph. Wording: overclaims list,
### C2. vs Monero: "no chip in seven years" is not proof ### C2. vs Monero: "no chip in seven years" is not proof
"Absence of a public RandomX ASIC is not evidence one cannot exist. Monero is also a small prize." "Absence of a public RandomX ASIC is not evidence one cannot exist. Monero is also a small prize."
Status: Reopened as conceded (7 October 2026, morning, X36): the X9 never shipped, so Monero's record is again seven years without a shipped chip, and the concession stands as first written; the litepaper says so in the same sentences.
Status: Conceded, stated (7 October 2026, morning): the one-screen home page is back on the owner's word, so this row is stated on `site/litepaper.html` only; the sentence there is unchanged and the text check lists it under the litepaper. Status: Conceded, stated (7 October 2026, morning): the one-screen home page is back on the owner's word, so this row is stated on `site/litepaper.html` only; the sentence there is unchanged and the text check lists it under the litepaper.
Status: Closed by the fact (6 October 2026, night): a public RandomX chip now exists, Bitmain's Antminer X9, shipping from July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270). Every sentence that leaned on its absence was rewritten under X34; "2019 (approximate)" stays on both pages. Status: Closed by the fact (6 October 2026, night): a public RandomX chip now exists, Bitmain's Antminer X9, shipping from July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270). Every sentence that leaned on its absence was rewritten under X34; "2019 (approximate)" stays on both pages.
@ -2272,6 +2276,8 @@ Evidence: `site/litepaper.html`; `docs/plans/testnet-go.md`; X31, X32.
### X34. RandomX described as chip-free ### X34. RandomX described as chip-free
"The home page said the random program 'has kept chips off Monero since 2019', the litepaper said Monero ran on RandomX 'with no chip publicly shipped' and spoke of 'Monero's seven years without a public chip'. Bitmain's Antminer X9, a RandomX chip, ships from July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270), and RandomX 2.0 shipped on 25 March 2026. Every sentence that said or implied RandomX is chip-free, or that Monero's approach has held, was wrong." "The home page said the random program 'has kept chips off Monero since 2019', the litepaper said Monero ran on RandomX 'with no chip publicly shipped' and spoke of 'Monero's seven years without a public chip'. Bitmain's Antminer X9, a RandomX chip, ships from July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270), and RandomX 2.0 shipped on 25 March 2026. Every sentence that said or implied RandomX is chip-free, or that Monero's approach has held, was wrong."
Status: Corrected (7 October 2026, morning, X36): the X9 never shipped. Bitmain opened pre-orders on 26 December 2025 and withdrew the product in mid-May 2026 before any unit was delivered; every sentence below that had it shipping now states that, and RandomX stands as a technique no chip has yet shipped against. The sentences in this row are the history.
Status: Fixed, stated (7 October 2026, morning): the one-screen home page carries no RandomX sentence, so the corrected wording stands on `site/litepaper.html` (four sentences and the table row); the text check lists them there. Status: Fixed, stated (7 October 2026, morning): the one-screen home page carries no RandomX sentence, so the corrected wording stands on `site/litepaper.html` (four sentences and the table row); the text check lists them there.
Status: Fixed, stated (6 October 2026, night, from the cryptanalysis research): four sentences corrected, each with the X9 as the stated fact and its date; every sentence that only names the technique stands. Status: Fixed, stated (6 October 2026, night, from the cryptanalysis research): four sentences corrected, each with the X9 as the stated fact and its date; every sentence that only names the technique stands.
@ -2292,6 +2298,8 @@ Evidence: `site/index.html`; `site/litepaper.html`; `tools/ci/ledger-text-check.
### X35. The class v4 chip headline stated as one number, 2.1x ### X35. The class v4 chip headline stated as one number, 2.1x
"The home page said the strongest chip reaches 'about 2x once the lever now in its gates ships' and the litepaper said the latency-shadow work 'brings the chip to about 2x' and that its edge 'falls from 5.6x to 2.1x ... at a chip core equal to the GPU's'. That 2.1x assumes the chip's core costs what the GPU's does per operation (k = 1). Bitmain's Antminer X9 reached about a third of its honest device's energy on a latency-bound random program, so k about 0.33 is a shipped product class, and at that k the same model gives 3.9x." "The home page said the strongest chip reaches 'about 2x once the lever now in its gates ships' and the litepaper said the latency-shadow work 'brings the chip to about 2x' and that its edge 'falls from 5.6x to 2.1x ... at a chip core equal to the GPU's'. That 2.1x assumes the chip's core costs what the GPU's does per operation (k = 1). Bitmain's Antminer X9 reached about a third of its honest device's energy on a latency-bound random program, so k about 0.33 is a shipped product class, and at that k the same model gives 3.9x."
Status: Kept, relabelled (7 October 2026, morning, X36): the range stands, with k about 0.33 labelled as the X9's claimed, unmeasured core, since no unit shipped or was benchmarked.
Status: Fixed, stated (7 October 2026, 00:0x UK, from the ladder lane's recalibration against the X9): every public sentence that stated 2.1x alone now states the range with k named. The 5.7x class v3 memory-only figure has no core work in it and is unmoved; the litepaper's 5.6x is the Counter ASIC 3.0 item 8 figure and stays as cited. Status: Fixed, stated (7 October 2026, 00:0x UK, from the ladder lane's recalibration against the X9): every public sentence that stated 2.1x alone now states the range with k named. The 5.7x class v3 memory-only figure has no core work in it and is unmoved; the litepaper's 5.6x is the Counter ASIC 3.0 item 8 figure and stays as cited.
- `site/index.html`, chip model card. Was: "In our public model the strongest chip reaches 5x to 9x per joule against an RTX 5090 today, about 2x once the lever now in its gates ships." Now: "In our public model the strongest chip reaches 5x to 9x per joule against an RTX 5090 today. With the class v4 shadow work it is 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU's (k = 1) to one as efficient as Bitmain's RandomX chip (k about 0.33); the ladder's second rung takes that 3.9x to about 2.8x." - `site/index.html`, chip model card. Was: "In our public model the strongest chip reaches 5x to 9x per joule against an RTX 5090 today, about 2x once the lever now in its gates ships." Now: "In our public model the strongest chip reaches 5x to 9x per joule against an RTX 5090 today. With the class v4 shadow work it is 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU's (k = 1) to one as efficient as Bitmain's RandomX chip (k about 0.33); the ladder's second rung takes that 3.9x to about 2.8x."
- `site/litepaper.html`, "A chip is impossible" (both copies). Was: "it brings the chip to about 2x." Now: "it brings the chip to 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU's (k = 1) to one as efficient as Bitmain's Antminer X9 (k about 0.33); the ladder's second rung takes the X9 bracket to about 2.8x." Was: "falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's, the 5090 at 0.2% less rate". Now: "falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's (k = 1) and to 3.9x at the X9's core (k about 0.33), the 5090 at 0.2% less rate". - `site/litepaper.html`, "A chip is impossible" (both copies). Was: "it brings the chip to about 2x." Now: "it brings the chip to 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU's (k = 1) to one as efficient as Bitmain's Antminer X9 (k about 0.33); the ladder's second rung takes the X9 bracket to about 2.8x." Was: "falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's, the 5090 at 0.2% less rate". Now: "falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's (k = 1) and to 3.9x at the X9's core (k about 0.33), the 5090 at 0.2% less rate".
@ -2303,6 +2311,24 @@ Answer: One number was the model's k = 1 column; the X9 made the k = 0.33 column
Evidence: `docs/design/latency-ladder.md` (the k column, the rung table at k = 0.33, the verifier table); M34; X34. Evidence: `docs/design/latency-ladder.md` (the k column, the rung table at k = 0.33, the verifier table); M34; X34.
### X36. The X9 described as a shipping chip
"X34 and X35 said Bitmain's Antminer X9 'ships from July 2026' and called it 'the shipping RandomX chip'. It never shipped: Bitmain opened pre-orders on 26 December 2025 for July 2026 delivery, resellers told buyers in mid-May 2026 that Bitmain had discontinued it and refunded them, no unit was delivered and none was independently benchmarked."
Status: Fixed, stated (7 October 2026, morning, from the research agent's primary sources): every public sentence that had the X9 shipping now states the pre-order, the withdrawal and the unbenchmarked core.
- `site/litepaper.html`, Mining. Was: "Monero ran on RandomX from 2019 (approximate) with no chip publicly shipped until Bitmain's Antminer X9 in July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270). About seven years of hold and then a chip: that is the record Igneum's hourly program and its chip model are built against." Now: "Monero has run on RandomX since 2019 (approximate) with no chip shipped. Bitmain opened Antminer X9 pre-orders on 26 December 2025 for July 2026 delivery, then withdrew the product in mid-May 2026 and refunded buyers before any unit shipped; none has been independently benchmarked. A box with about a 2x per joule edge over the best CPUs, and about 3x over a desktop, was withdrawn rather than face a RandomX re-tune of 1.5x or more. That is the band Igneum's class v4 model sits in (2.1x to 3.9x over an RTX 5090), and the defence that held was a maintained algorithm with a credible upgrade path, which is what the ladder is."
- `site/litepaper.html`, vs RandomX. Was: "That hold ended: Bitmain's Antminer X9 ships from July 2026 at 1 MH/s and 2,472 W, about USD 5,600, and RandomX 2.0 shipped on 25 March 2026". Now: "The one chip announced against it, Bitmain's Antminer X9 (pre-orders from 26 December 2025 at 1 MH/s and 2,472 W, about USD 5,600), was withdrawn in mid-May 2026 before any unit shipped; RandomX 2.0 shipped on 25 March 2026".
- `site/litepaper.html`, vs RandomX table, Track record. Was: "About seven years without a public chip, then Bitmain's Antminer X9, shipping from July 2026". Now: "About seven years without a shipped chip; the one announced, Bitmain's Antminer X9, was withdrawn in May 2026 before launch".
- `site/litepaper.html`, "A chip is impossible". Was: "Monero's RandomX held for about seven years before Bitmain's Antminer X9 shipped in July 2026 (...)". Now: "Monero's RandomX has held for about seven years; the one chip announced against it, Bitmain's Antminer X9, was withdrawn in mid-May 2026 before any unit shipped, its claimed core (k about 0.33) never measured."
- `site/litepaper.html`, Precedents row: "its first chip, Bitmain's Antminer X9, ships from July 2026" is now "the one chip announced against it, Bitmain's Antminer X9, withdrawn in May 2026 before launch". The X35 range sentences (both copies) now read "the core Bitmain claimed for its withdrawn Antminer X9 (k about 0.33, never measured)" and "the X9's claimed core (k about 0.33, never measured)". The ladder paragraph (M34) reads "the one Bitmain claimed for its withdrawn Antminer X9 (about 3x per joule over a desktop CPU, never measured)".
- `site/index.html`, chip model card: "to the core Bitmain claimed for its withdrawn Antminer X9 (k about 0.33, never measured)".
Checked by `tools/ci/ledger-text-check.mjs` (rows X36 on both pages; the X34 and X35 phrases updated).
Answer: The k about 0.33 column stays in the public range as the X9's claimed, unmeasured core: Bitmain's figures (1,000 KH/s at 2,472 W, 2.47 J/KH) were a pre-order sheet, never a benchmark, and the RandomX team's own reading (sech1, 25 January 2026) was "no, X9 is not an ASIC... Only 2x efficiency gap (hash/Joule) is not 'cracked'": a box of commodity Sophgo SG2044 server SoCs with an AES block and over sixty DRAM sticks, no tapeout, about 2x per joule over a tuned Zen 4 part and about 3x over a stock desktop CPU. It was withdrawn rather than face a RandomX re-tune of 1.5x or more. The lesson the public text now carries is that one: a maintained algorithm with a credible upgrade path held, which is what the latency ladder is for Igneum. Monero's hashrate shows no X9 fleet (about 6.1 GH/s before and after, approximate).
Sources: bitmain.com news post dated 1 January 2026 (pre-orders opened 26 December 2025, USD 5,600, 1,000 KH/s, 2,472 W, shipments "scheduled to begin in July 2026"); shop.bitmain.com (the X9 still listed as sold out, "shipping in July 2026", 7 October 2026); pcpraha.cz, 15 May 2026 ("Antminer X9 canceled: Bitmain withdraws model from market before launch"); r/MoneroMining, 17 May 2026 ("Bitmain's X9 discontinued", the relayed reason "technical adjustments and a new strategy", a reseller's "there may be an algorithm change"); monero.forum, 16 May and 3 June 2026 (jeffro256: benchmark data "pretty hard to get since they're never going to be released publicly"). Bitmain itself published no cancellation.
Evidence: `site/index.html`; `site/litepaper.html`; `tools/ci/ledger-text-check.mjs`; X34, X35, M34.
## Status updates, 4 October 2026 (round 4) ## Status updates, 4 October 2026 (round 4)
- **F21** (the long-partition fork). Extended: a side locks alone when its own share of its own table reaches two thirds, at `t = W (2/3 - s) / (1 - s)`: 50/50 at 2,400 DAA s on the devnet (about 40 minutes), 10 days on mainnet; the 60 side of 60/40 at 1,200 DAA s (20 minutes), 5 days; the ledger's measured `W/(3R)` = 200 s is this formula at s = 1/2. At HEAD a second certificate at an index is kept, logged and ignored (`processes/finality.rs:650-655, 661-666`) and `fork_choice_lock` (`:886-901`) pins the node. Public text: `site/litepaper.html:511` says a third of the blocks is needed to split finality in a partition; the partition alone does it. Replacement sentence in `docs/review/round-4-2026-10-04.md` section 1 (b). Review id R4.1.5. - **F21** (the long-partition fork). Extended: a side locks alone when its own share of its own table reaches two thirds, at `t = W (2/3 - s) / (1 - s)`: 50/50 at 2,400 DAA s on the devnet (about 40 minutes), 10 days on mainnet; the 60 side of 60/40 at 1,200 DAA s (20 minutes), 5 days; the ledger's measured `W/(3R)` = 200 s is this formula at s = 1/2. At HEAD a second certificate at an index is kept, logged and ignored (`processes/finality.rs:650-655, 661-666`) and `fork_choice_lock` (`:886-901`) pins the node. Public text: `site/litepaper.html:511` says a third of the blocks is needed to split finality in a partition; the partition alone does it. Replacement sentence in `docs/review/round-4-2026-10-04.md` section 1 (b). Review id R4.1.5.

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

View file

@ -56,24 +56,24 @@ main{flex:1}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -125,6 +125,7 @@ main{flex:1}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -104,24 +104,24 @@ main{padding-bottom:var(--sec)}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -180,6 +180,7 @@ main{padding-bottom:var(--sec)}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

439
site/app.html Normal file
View file

@ -0,0 +1,439 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Ember, the app</title>
<meta name="description" content="The app you mine with: your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your own blocks ringed. Overview, Cards, Earnings, Prove and Settings, light and dark.">
<link rel="canonical" href="https://igneum.network/app">
<meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum Ember, the app">
<meta property="og:description" content="The app you mine with: your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your own blocks ringed. Overview, Cards, Earnings, Prove and Settings, light and dark.">
<meta property="og:url" content="https://igneum.network/app">
<meta property="og:image" content="https://igneum.network/og.png?v=3">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum Ember, the app">
<meta name="twitter:description" content="The app you mine with: your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your own blocks ringed. Overview, Cards, Earnings, Prove and Settings, light and dark.">
<meta name="twitter:image" content="https://igneum.network/og.png?v=3">
<meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml">
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
<link rel="icon" href="/icon-192.png" type="image/png" sizes="192x192">
<link rel="icon" href="/icon-512.png" type="image/png" sizes="512x512">
<link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180">
<link rel="manifest" href="/site.webmanifest">
<!-- head:start -->
<link rel="preload" href="/fonts/unbounded-900.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/plex-sans-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/site.css">
<style>
/* Shared by every page: the head partial, injected by the build between the head markers. Edit the partial, not the page. */
/* Fonts, self-hosted (latin subsets, OFL): Unbounded 500/700/900, IBM Plex Sans 400/500/600, IBM Plex Mono 400/500. Fallbacks carry size and ascent overrides so the swap does not move the layout. The tokens, type and components are in /site.css (docs/plans/site-ui-3.md). */
@font-face{font-family:'Unbounded';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/unbounded-500.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Unbounded';font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/unbounded-700.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Unbounded';font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/unbounded-900.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/plex-sans-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/plex-sans-500.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/plex-sans-600.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/plex-mono-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/plex-mono-500.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Unbounded Fallback';src:local('Arial Black'),local('Arial-Black'),local('Impact');size-adjust:114%;ascent-override:87.5%;descent-override:21.5%;line-gap-override:0%}
@font-face{font-family:'Plex Sans Fallback';src:local('Arial'),local('Helvetica Neue'),local('Helvetica');size-adjust:100.5%;ascent-override:102%;descent-override:27.4%;line-gap-override:0%}
@font-face{font-family:'Plex Mono Fallback';src:local('Courier New'),local('Menlo');size-adjust:100%;ascent-override:102.5%;descent-override:27.5%;line-gap-override:0%}
</style>
<script>
/* theme before first paint: the footer control stores "light" or "dark" under igneum-theme; nothing stored means the system setting */
(function(){try{var t=localStorage.getItem("igneum-theme");if(t==="light"||t==="dark")document.documentElement.setAttribute("data-theme",t);}catch(e){}})();
</script>
<!-- head:end -->
<style>
/* app page block (7 Oct 2026: the Igneum Ember app as an experience); tokens and components are in /site.css */
.phones{display:grid;grid-template-columns:1fr;gap:var(--s-5);align-items:start}
@media (min-width:900px){.phones{grid-template-columns:minmax(0,1fr) 300px 300px;align-items:center}}
.scene{position:relative}
#dag{display:block;width:100%;height:clamp(300px,42vw,460px);border-radius:var(--r-row);background:var(--row);border:1px solid var(--line);touch-action:pan-y}
.tip{position:absolute;left:0;top:0;pointer-events:none;background:var(--graphite);border:1px solid var(--line-2);border-radius:var(--r-row);padding:10px 12px;font:400 12px/1.5 var(--f-mono);color:var(--ink-2);white-space:nowrap;z-index:5}
.tip[hidden]{display:none}
.emb td:first-child{white-space:nowrap;color:var(--bone);font-weight:600}
/* the phone captures exist in the dark theme only so far; the section waits for its light pair */
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]) .dark-only{display:none}}
:root[data-theme="light"] .dark-only{display:none}
</style>
</head>
<body class="has-dl-bar">
<!-- nav:start -->
<a class="skip" href="#main">Skip to content</a>
<nav class="nav" aria-label="Main">
<div class="wrap">
<a href="/" class="brand" aria-label="Igneum home">
<svg class="mark" viewBox="0 0 1024 1024" width="28" height="28" aria-hidden="true"><rect width="1024" height="1024" rx="160" fill="#0C0C0E"></rect><g transform="translate(166.95 166.95) scale(6.901)"><polygon points="50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34" fill="#F2541B"></polygon><polygon points="50,42 59,58 50,82 41,58" fill="#0C0C0E"></polygon></g></svg>
<span class="word">IGNEUM</span>
</a>
<div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app" aria-current="page">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
</div>
<a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a>
</div>
</div>
</nav>
<script>
(function(){
// the menu: open on the button, closed by any link, Escape (focus back on the button) or a resize past 900 px
var n=document.querySelector('.nav'),b=document.getElementById('nav-burger'),s=document.getElementById('nav-sheet');if(!n||!b||!s)return;
function set(o){n.classList.toggle('open',o);b.setAttribute('aria-expanded',o?'true':'false');document.documentElement.style.overflow=o?'hidden':'';}
b.addEventListener('click',function(){set(!n.classList.contains('open'));});
s.addEventListener('click',function(e){if(e.target.closest('a'))set(false);});
document.addEventListener('keydown',function(e){if(e.key==='Escape'&&n.classList.contains('open')){set(false);b.focus();}});
var mq=window.matchMedia('(min-width:901px)');if(mq.addEventListener)mq.addEventListener('change',function(){set(false);});
})();
</script>
<!-- nav:end -->
<main id="main">
<header class="phero" id="top">
<div class="wrap">
<div>
<div class="eyebrow ember"><span data-product="full">Igneum Ember</span> · the app</div>
<h1>The app you mine with.</h1>
<p class="lead">Your rate, what it costs a day, and the chain drawn live with your own blocks ringed. One window, four pages, every card one row.</p>
<div class="cta"><a href="/miner#get" class="btn primary">Download the miner</a><a href="#chain" class="btn">The chain on your screen</a></div>
<div class="os"><span>Windows</span><span>macOS</span><span>Linux · HiveOS</span><span>light and dark</span></div>
</div>
<figure class="frame glow">
<div class="bar"><i></i><i></i><i></i><b>Overview</b></div>
<img src="/img/app-overview-dark.webp" width="1440" height="912" class="img-dark" alt="The Overview page of 0.3.16: an RTX 5090 at 103 MH/s and 317 W, 0.32 MH/W, 62 blocks this run and 91,521 lifetime, the Stop mining button, the chain drawn live with this rig's blocks ringed and locked checkpoints, the node synced with 5 peers, the activity log" fetchpriority="high" decoding="async">
<img src="/img/app-overview-light.webp" width="1440" height="912" class="img-light" alt="The Overview page of 0.3.16 in light mode: an RTX 5090 at 103 MH/s and 317 W, the chain drawn live with this rig's blocks ringed" fetchpriority="high" decoding="async">
<figcaption>0.3.16, rendered from the RTX 5090 Windows rig&rsquo;s live state at 23:33 UK, 6 October 2026. No electricity price is set on that rig, so the pounds cell asks for one.</figcaption>
</figure>
</div>
</header>
<section id="overview" class="sec">
<div class="wrap">
<div class="feature">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Overview · Mac</b></div>
<img src="/img/app-overview-mac-dark.webp" width="1440" height="900" class="img-dark" alt="The Overview page on an Apple M5 Max: 18.3 MH/s, 6,789 blocks this run, the chain drawn live with this Mac's blocks in the lane marked you, locked checkpoints at 71% of weight, the node synced with 4 peers" loading="lazy" decoding="async">
<img src="/img/app-overview-mac-light.webp" width="1440" height="1259" class="img-light" alt="The Overview page in light mode: 511 MH/s from one of three cards mining, 629 W, £4.23 a day of electricity, 6,784 blocks this run, the chain drawn live with this rig's blocks marked you, the node line and the activity log" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">An Apple M5 Max mining at 18.3 MH/s, from the app in development.</span><span class="cap-light">A three-card rig at 511 MH/s, from the app in development.</span></figcaption>
</figure>
<div>
<div class="eyebrow">01 · Overview</div>
<h2>The number, then the chain</h2>
<p>One big number: your hash rate. Beside it, watts, hashes per watt, and what the electricity costs a day at your price. Then the chain itself, as it grows.</p>
<ul class="lines">
<li><strong>Your blocks, ringed</strong>Every block the network makes, one lane per miner, yours marked. A locked checkpoint rings the blocks it covers.</li>
<li><strong>The node, one line</strong>Synced, peers, blocks, read N seconds ago. Details opens the chain numbers in place.</li>
<li><strong>Activity</strong>Blocks found, tunes finished, updates installed, with the time of each.</li>
</ul>
</div>
</div>
</div>
</section>
<section id="cards" class="sec">
<div class="wrap">
<div class="feature flip">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Cards</b></div>
<img src="/img/app-cards-dark.webp" width="1440" height="1381" class="img-dark" alt="The Cards page: Ember Tune with Efficiency, Balanced and Maximum goals and the watts it saves; one row per card with its rate, watts, hashes per watt, cost a day and temperature; the RTX 5090's details open with its power cap, goal, Retune and the tune curve of hash rate against power" loading="lazy" decoding="async">
<img src="/img/app-cards-light.webp" width="1440" height="912" class="img-light" alt="The Cards page of 0.3.16 in light mode: Ember Tune, the RTX 5090 at 103 MH/s, 322 to 317 W, 68 degrees, its tune line and Retune button; the integrated AMD graphics off" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">The Cards page with a card&rsquo;s details open, from the app in development.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig&rsquo;s live state at 23:33 UK, 6 October 2026.</span></figcaption>
</figure>
<div>
<div class="eyebrow">02 · Cards</div>
<h2>Every card, tuned by Ember</h2>
<p>One row per card: rate, watts, hashes per watt, pounds a day, temperature, a Tune button and a switch. Ember Tune walks each card through its power steps and keeps the point with the most hashes per watt.</p>
<ul class="lines">
<li><strong>Three goals</strong>Efficiency, Balanced, Maximum. Set once for every card, or per card under its chevron.</li>
<li><strong>Under the chevron</strong>The power cap, the goal, the last tune&rsquo;s curve of rate against watts, how many miners the card runs as.</li>
<li><strong>Power control, one approval</strong>Setting an NVIDIA cap needs administrator rights on Windows. The app asks once; every cap after that is set with no prompt.</li>
</ul>
</div>
</div>
<div class="tbl emb" style="margin-top:var(--s-5)"><table>
<thead><tr><th>Ember Tune, measured 6 Oct 2026</th><th class="num">Untuned</th><th class="num">Tuned</th><th class="num">Saved</th></tr></thead>
<tbody>
<tr><td>RTX 5090</td><td class="num">311.0 W · 127.9 MH/s · 0.411 MH/W</td><td class="num">226.8 W · 127.7 MH/s · 0.563 MH/W</td><td class="num">84 W, £0.56 a day at 28p/kWh</td></tr>
<tr><td>RTX 4070</td><td class="num">106.0 W · 28.72 MH/s · 0.271 MH/W</td><td class="num">75.6 W · 28.78 MH/s · 0.381 MH/W</td><td class="num">30 W, £0.20 a day at 28p/kWh</td></tr>
</tbody>
</table></div>
<p class="note">Ember run 6 on the three-card Windows rig. The pounds are arithmetic from the saved watts at 28p per kWh; the app uses your price. <a href="/bench">The log</a>.</p>
</div>
</section>
<section id="chain" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">03 · The chain, live</div>
<h2>The chain on your screen</h2>
<p>This is the live devnet, drawn by the same code the app ships. Every square is a real block; a lane per miner; a ring where a checkpoint locked. In the app, your own lane is marked.</p>
</div>
<div class="card viz">
<div class="viz-head">
<div class="state" id="dag-state"><span class="dot off"></span>connecting to the devnet observer</div>
<div class="viz-stats mono"><span>on screen <b id="c-screen">0</b></span><span>last lock <b id="c-locked">pending</b></span><span>proven <b id="c-proven">pending</b></span><button type="button" class="btn small" id="dag-pause">Pause</button></div>
</div>
<div class="scene"><canvas id="dag" aria-label="The devnet's block DAG, live: blocks by time and miner lane, parent edges, the selected chain, checkpoint bands with their lock weight, proofs filling blocks as segments are paid"></canvas><div class="tip" id="dag-tip" hidden></div><div class="chip-zoom" id="dag-chip" hidden>scroll to zoom · Esc to release</div></div>
<div class="legend">
<span><i class="sw" style="border:2px solid var(--line-2)"></i>pending</span>
<span><i class="sw" style="border:2px solid var(--bone)"></i>included</span>
<span><i class="sw" style="border:2px solid var(--ember)"></i>selected chain</span>
<span><i class="sw" style="border:2px solid var(--line-2);opacity:.45"></i>excluded</span>
<span><i class="sw" style="background:var(--ember)"></i>proven</span>
<span><i class="sw" style="border:3px solid var(--ember);border-radius:50%;background:transparent"></i>locked checkpoint</span>
</div>
<p class="note" style="margin-top:var(--s-3)"><span id="c-window">120 s of blocks on screen</span>. Hover or tap a block for its hash, miner and proof state. Ctrl or cmd and scroll, a pinch, or a click into the scene zooms the window.</p>
</div>
</div>
</section>
<section id="earnings" class="sec">
<div class="wrap">
<div class="feature">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Earnings</b></div>
<img src="/img/app-earnings-dark.webp" width="1440" height="908" class="img-dark" alt="The Earnings page of 0.3.16: pounds earned with the devnet reason, IGN from proofs, 23,056 blocks lifetime, electricity with no card reporting its draw, the dev fee switch, the rewards address with Copy, Change address, Show my key and Open the wallet" loading="lazy" decoding="async">
<img src="/img/app-earnings-light.webp" width="1440" height="908" class="img-light" alt="The Earnings page of 0.3.16 in light mode" loading="lazy" decoding="async">
<figcaption>0.3.16 on the team&rsquo;s Apple M5 Max, paused, 6 October 2026. Pounds earned reads 0.00 on devnet and says why.</figcaption>
</figure>
<div>
<div class="eyebrow">04 · Earnings</div>
<h2>Money first</h2>
<p>What you made, where it goes. IGN from blocks and from proofs, the electricity at your price, and the address every block pays.</p>
<ul class="lines">
<li><strong>The dev fee switch</strong>1 block in 100 pays the people who make this app. The network itself takes nothing. The switch turns it off.</li>
<li><strong>An address made on this machine</strong>Copy it, change it, or show the key. Nothing leaves the machine unless you copy it.</li>
<li><strong>Open the wallet</strong>Your balance is in <a href="/wallet">the wallet</a>, which imports the miner&rsquo;s key with one click.</li>
</ul>
</div>
</div>
</div>
</section>
<section id="prove" class="sec">
<div class="wrap">
<div class="feature flip">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Prove</b></div>
<img src="/img/app-prove-dark.webp" width="1440" height="908" class="img-dark" alt="The Prove page of 0.3.16: the Prove on this machine switch, one sentence per card on what it can prove, one line of counts, assigned, proven, paid and IGN, and Details" loading="lazy" decoding="async">
<img src="/img/app-prove-light.webp" width="1440" height="908" class="img-light" alt="The Prove page of 0.3.16 in light mode" loading="lazy" decoding="async">
<figcaption>0.3.16 on the team&rsquo;s Apple M5 Max, 6 October 2026. Apple silicon proves on the CPU, slowly; a 24 GB NVIDIA card proves the full shard.</figcaption>
</figure>
<div>
<div class="eyebrow">05 · Prove</div>
<h2>One switch. The same card proves.</h2>
<p>Every block is turned into a short proof, in pieces called shards. Your cards prove the shards the chain assigns to them and earn IGN for each one.</p>
<ul class="lines">
<li><strong>One sentence per card</strong>What it can prove and how. A 24 GB NVIDIA card proves the full shard; a 32 GB card mines and proves.</li>
<li><strong>One line of counts</strong>Assigned, proven, paid, IGN. Details holds the verifier, the program id and the segments.</li>
</ul>
</div>
</div>
</div>
</section>
<section id="settings" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">06 · Settings</div>
<h2>Plain rows, one sentence each</h2>
</div>
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Settings · Tuning</b></div>
<img src="/img/app-settings-dark.webp" width="1440" height="450" class="img-dark" alt="The Tuning card of Settings in 0.3.16: the goal at Balanced, the Ember Tune, Power control and Fine tuning switches, each with one sentence, and the electricity price in pence per kWh" loading="lazy" decoding="async">
<img src="/img/app-settings-light.webp" width="1440" height="450" class="img-light" alt="The Tuning card of Settings in 0.3.16, light mode" loading="lazy" decoding="async">
<figcaption>0.3.16 on the team&rsquo;s Apple M5 Max, 6 October 2026.</figcaption>
</figure>
<ul class="lines c4" style="margin-top:var(--s-4)">
<li><strong>Electricity price</strong>Pence per kWh, set once. Every pound figure in the app uses it.</li>
<li><strong>Start at login</strong>Opens when you sign in and keeps mining in the background.</li>
<li><strong>Updates by itself</strong>Signed, downloaded in the background, installed at a quiet moment, never mid-program.</li>
<li><strong>Logs</strong>Copy the last lines the node and the miner wrote, for a support message.</li>
</ul>
</div>
</section>
<section id="phone" class="sec">
<div class="wrap">
<div class="phones">
<div>
<div class="eyebrow">07 · Any width</div>
<h2>Under 720 px, the rail becomes a tab bar</h2>
<p style="color:var(--ink-2)">The same window on a narrow screen: the big button, the number, the chain, then the tabs.</p>
</div>
<figure class="frame phone">
<div class="bar"><i></i><i></i><i></i><b>390 px</b></div>
<img src="/img/app-phone-overview.webp" width="780" height="1688" class="img-dark" alt="The Overview page in a 390 pixel wide window: the rate, the Start mining button, the chain live, and a bottom tab bar with Overview, Cards, Earnings, Prove, Settings and Logs" loading="lazy" decoding="async">
<img src="/img/app-phone-overview-light.webp" width="780" height="1688" class="img-light" alt="The Overview page of 0.3.16 in a 390 pixel wide window, light mode: 103 MH/s, the Stop mining button, the chain live and the bottom tab bar" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">0.3.16 on the team’s Apple M5 Max, paused.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig’s live state at 23:33 UK.</span></figcaption>
</figure>
<figure class="frame phone">
<div class="bar"><i></i><i></i><i></i><b>390 px</b></div>
<img src="/img/app-phone-cards.webp" width="780" height="1688" class="img-dark" alt="The Cards page in a 390 pixel wide window: Ember Tune and the card row stacked, with the bottom tab bar" loading="lazy" decoding="async">
<img src="/img/app-phone-cards-light.webp" width="780" height="1688" class="img-light" alt="The Cards page of 0.3.16 in a 390 pixel wide window, light mode: Ember Tune, the RTX 5090 row and the bottom tab bar" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">0.3.16 on the team’s Apple M5 Max, paused.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig’s live state at 23:33 UK.</span></figcaption>
</figure>
</div>
</div>
</section>
<section id="keeps" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">08 · It keeps mining</div>
<h2>Built to be left alone</h2>
<p>Measured against a worker that misbehaves on command, 4 October 2026: recoveries in seconds. <a href="/bench">The log</a>.</p>
</div>
<ul class="lines">
<li><strong>Hourly program, no pause</strong>The next program compiles in the background and swaps at the boundary: 0.01 ms on Metal, 0.00 ms on CUDA, 0 rejected blocks.</li>
<li><strong>Watchdog per card</strong>No status line for 90 s, or a rate of 0 for 60 s while synced: the miner restarts once. Again inside five minutes, the card is marked faulted and the others keep mining. Measured: 91.0 s back to mining.</li>
<li><strong>Watchdog per node</strong>A node silent for 120 s is restarted by the app. Measured: silent node to mining again in 160.0 s.</li>
<li><strong>Restart in order</strong>Miners first, then the node, on quit and on update. What crashes comes back.</li>
<li><strong>Clock check</strong>Over 5 s out, a warning; over 10 s, Start is blocked and a Sync clock button appears. A slow clock once kept a node silently dead for 12 minutes.</li>
<li><strong>Signed, over the air</strong>An Ed25519 key compiled into the app checks the manifest before the app reads it. If the new version fails to start twice, the previous one comes back by itself.</li>
</ul>
</div>
</section>
<section id="get" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">Downloads</div>
<h2>Get the miner</h2>
<p>Download only from this domain. Nobody from Igneum will ask for your seed.</p>
</div>
<div class="grid c2">
<div class="dl-list" style="margin:0">
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v0.3.17 · 62.6 MB</span></a>
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg">macOS <span data-dl-meta="miner-mac">v0.3.17 · 41.9 MB</span></a>
<a href="/miner#hive">Linux · HiveOS <span>the flight sheet, on the miner page</span></a>
</div>
<div>
<p class="yourcard" data-yourcard>Your card: pending</p>
<p class="notice" data-testnet-notice>Public testnet: not yet open; the devnet build is here for people who want to look.</p>
<p class="notice" data-devnet-notice><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
</div>
</div>
</div>
</section>
</main>
<div class="band">
<div class="wrap">
<div>
<h2>The miner pays the wallet.</h2>
<p>Install the miner, press Start, and the address it makes is the one the wallet imports with one click.</p>
</div>
<div class="cta"><a href="/miner" class="btn dark">The miner</a><a href="/wallet" class="btn dark">The wallet</a></div>
</div>
</div>
<a class="dl-bar" href="/miner#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v0.3.17 · 62.6 MB</span></a>
<!-- footer:start -->
<footer class="foot">
<div class="wrap">
<div class="foot-grid">
<div class="foot-brand">
<a href="/" class="brand" aria-label="Igneum home"><svg class="mark" viewBox="0 0 1024 1024" width="26" height="26" aria-hidden="true"><rect width="1024" height="1024" rx="160" fill="#0C0C0E"></rect><g transform="translate(166.95 166.95) scale(6.901)"><polygon points="50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34" fill="#F2541B"></polygon><polygon points="50,42 59,58 50,82 41,58" fill="#0C0C0E"></polygon></g></svg><span class="word">IGNEUM</span></a>
<p>Mined by GPUs. Proven by fire.</p>
</div>
<nav class="foot-col" aria-label="Read">
<div class="eyebrow">Read</div>
<a href="/litepaper">Litepaper</a>
<a href="/litepaper#limits">What Igneum does not claim</a>
<a href="/litepaper#randomx">Igneum vs RandomX</a>
<a href="/litepaper#shoulders">Built on the shoulders</a>
<a href="/bench">Engineering log</a>
<a href="/evidence">Evidence</a>
<a href="/ledger">Ledger: every criticism</a>
</nav>
<nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div>
<a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a>
<a href="/faucet">Testnet faucet</a>
</nav>
<nav class="foot-col" aria-label="Follow">
<div class="eyebrow">Follow</div>
<a href="/live">Live devnet</a>
<a href="/explorer">Explorer</a>
<a href="/litepaper#roadmap">Journey</a>
<a href="/metamask">Add Igneum to MetaMask</a>
<a href="https://github.com/igneum-network/spec" rel="noopener"><svg viewBox="0 0 24 24" width="15" height="15" fill="currentColor" aria-hidden="true"><path d="M12 .5C5.7.5.5 5.7.5 12c0 5.1 3.3 9.4 7.9 10.9.6.1.8-.3.8-.6v-2.1c-3.2.7-3.9-1.4-3.9-1.4-.5-1.3-1.3-1.7-1.3-1.7-1-.7.1-.7.1-.7 1.2.1 1.8 1.2 1.8 1.2 1 1.8 2.7 1.3 3.4 1 .1-.8.4-1.3.7-1.6-2.6-.3-5.3-1.3-5.3-5.7 0-1.3.5-2.3 1.2-3.1-.1-.3-.5-1.5.1-3.1 0 0 1-.3 3.2 1.2.9-.3 1.9-.4 2.9-.4s2 .1 2.9.4c2.2-1.5 3.2-1.2 3.2-1.2.6 1.6.2 2.8.1 3.1.8.8 1.2 1.8 1.2 3.1 0 4.4-2.7 5.4-5.3 5.7.4.4.8 1.1.8 2.2v3.2c0 .3.2.7.8.6 4.6-1.5 7.9-5.8 7.9-10.9C23.5 5.7 18.3.5 12 .5z"></path></svg>GitHub, spec and vectors</a>
<a href="/miner#get">Miner downloads: devnet build</a>
<a href="mailto:hello@igneum.network">Report a flaw: hello@igneum.network</a>
<a href="https://github.com/igneum-network/spec/issues" rel="noopener">Or open an issue on the spec</a>
</nav>
</div>
<div class="foot-base">
<span class="foot-imprint">Igneum Labs LTD · Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre · <a href="mailto:hello@igneum.network">hello@igneum.network</a></span>
<span>© 2026 Igneum. Nothing on this page is an offer to sell anything.</span>
<span class="theme" role="group" aria-label="Theme"><button type="button" data-theme-set="system" aria-pressed="true">System</button><button type="button" data-theme-set="light" aria-pressed="false">Light</button><button type="button" data-theme-set="dark" aria-pressed="false">Dark</button></span>
<span class="mono">igneum.network</span>
</div>
</div>
</footer>
<script>
(function(){
// theme control: stores light or dark under igneum-theme; system clears it. The head applied the stored value before paint.
var bs=document.querySelectorAll('[data-theme-set]');if(!bs.length)return;
function cur(){try{var t=localStorage.getItem('igneum-theme');return t==='light'||t==='dark'?t:'system';}catch(e){return 'system';}}
function paint(){var c=cur();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});}
bs.forEach(function(b){b.addEventListener('click',function(){var v=b.getAttribute('data-theme-set');try{if(v==='system')localStorage.removeItem('igneum-theme');else localStorage.setItem('igneum-theme',v);}catch(e){}
if(v==='system')document.documentElement.removeAttribute('data-theme');else document.documentElement.setAttribute('data-theme',v);paint();});});
paint();
})();
</script>
<!-- footer:end -->
<script src="/yourcard.js" defer></script>
<script src="/live-dag.js" defer></script>
<script>
(function(){
function $(id){return document.getElementById(id);}
function rel(ms){var s=Math.max(0,Math.round(ms/1000));if(s<60)return s+' s ago';var m=Math.floor(s/60);if(m<60)return m+' min ago';return Math.floor(m/60)+' h ago';}
var dag=null;
function mount(){if(dag||!window.IgneumDag)return;
dag=IgneumDag.mount($('dag'),{poll:true,window:120,tooltip:$('dag-tip'),chip:$('dag-chip'),pauseButton:$('dag-pause'),
onWindow:function(w){$('c-window').textContent=w+' s of blocks on screen';},
onState:function(st,reason){var el=$('dag-state');el.className='state '+(st==='live'?'live':st==='failed'?'bad':'');el.innerHTML='<span class="dot '+(st==='live'?'live':st==='failed'?'bad':'off')+'"></span>'+(st==='live'?'live devnet':st==='connecting'?'connecting to the devnet observer':reason||st);},
onData:function(d){var w=dag?dag.getWindow():120,cut=new Date(d.now).getTime()-w*1000,on=0;(d.blocks||[]).forEach(function(b){if(b.ts>=cut)on++;});$('c-screen').textContent=on;
var f=d.finality;$('c-locked').textContent=f&&f.supported&&!f.active?'finality paused':f&&f.latest_locked_index?'#'+f.latest_locked_index:'none yet';
var p=d.proving;$('c-proven').textContent=p&&p.supported&&p.active?(p.blocks_fully_proven_10m||0)+'/'+(p.blocks_10m||0)+' in 10 min':'not active';
if(window.IgneumYourCard&&d.state)IgneumYourCard.update(d.state.hashes_per_second_estimate);}});}
if(window.IgneumDag)mount();else{var s=document.querySelector('script[src="/live-dag.js"]');if(s)s.addEventListener('load',mount);}
})();
</script>
</body>
</html>

View file

@ -92,24 +92,24 @@ table{min-width:560px}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench" aria-current="page">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench" aria-current="page">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -781,6 +781,7 @@ table{min-width:560px}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -104,24 +104,24 @@ main{padding-bottom:var(--sec)}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -181,6 +181,7 @@ main{padding-bottom:var(--sec)}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -343,7 +343,7 @@ function renderEvidence(html) {
return html; return html;
} }
const PAGES = [['index.html', ''], ['litepaper.html', 'litepaper'], ['live.html', 'live'], ['evidence.html', 'evidence'], ['miner.html', 'miner'], ['wallet.html', 'wallet'], ['metamask.html', ''], ['faucet.html', ''], ['404.html', ''], const PAGES = [['index.html', ''], ['litepaper.html', 'litepaper'], ['live.html', 'live'], ['evidence.html', 'evidence'], ['miner.html', 'miner'], ['app.html', 'app'], ['wallet.html', 'wallet'], ['metamask.html', ''], ['faucet.html', ''], ['404.html', ''],
// the DAG explorer (5 Oct 2026): /explorer, /block/<hash> and /address/<addr> (vercel.json rewrites the last two) // the DAG explorer (5 Oct 2026): /explorer, /block/<hash> and /address/<addr> (vercel.json rewrites the last two)
['explorer.html', 'live'], ['block.html', 'live'], ['address.html', 'live'], ['explorer.html', 'live'], ['block.html', 'live'], ['address.html', 'live'],
// the scenes lab (6 Oct 2026): three animated views of the live feed, unlinked, noindex // the scenes lab (6 Oct 2026): three animated views of the live feed, unlinked, noindex

View file

@ -93,24 +93,24 @@ td.mono{font-family:var(--f-mono);font-size:12.5px;min-width:180px}td.iv{color:v
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence" aria-current="page">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence" aria-current="page">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -130,7 +130,7 @@ td.mono{font-family:var(--f-mono);font-size:12.5px;min-width:180px}td.iv{color:v
<!-- nav:end --> <!-- nav:end -->
<main id="main" class="wrap"> <main id="main" class="wrap">
<div class="head"> <div class="head">
<div class="eyebrow">31 claims · 5 labels · 6 Oct 2026</div> <div class="eyebrow">31 claims · 5 labels · 7 Oct 2026</div>
<h1>Evidence</h1> <h1>Evidence</h1>
</div> </div>
<p class="note">Every claim the homepage and the litepaper make, one row each, with one of five labels: <b>designed</b> (a decision, no code), <b>implemented</b> (code with passing test vectors), <b>tested by the team</b> (measured by the project on a named machine, in the engineering log), <b>reproduced externally</b> (a third party ran the published command and got the published result) and <b>reviewed independently</b> (a named outside reviewer published a finding on that version). Nothing on this chain has been reproduced externally or reviewed independently; every row says so. A label belongs to the exact version in the row, and an audit of one version never covers a newer one. The 12-node cloud network of 4 October 2026 is the project's own, so its rows are tested by the team, not reproduced externally.</p> <p class="note">Every claim the homepage and the litepaper make, one row each, with one of five labels: <b>designed</b> (a decision, no code), <b>implemented</b> (code with passing test vectors), <b>tested by the team</b> (measured by the project on a named machine, in the engineering log), <b>reproduced externally</b> (a third party ran the published command and got the published result) and <b>reviewed independently</b> (a named outside reviewer published a finding on that version). Nothing on this chain has been reproduced externally or reviewed independently; every row says so. A label belongs to the exact version in the row, and an audit of one version never covers a newer one. The 12-node cloud network of 4 October 2026 is the project's own, so its rows are tested by the team, not reproduced externally.</p>
@ -187,7 +187,7 @@ td.mono{font-family:var(--f-mono);font-size:12.5px;min-width:180px}td.iv{color:v
<tr><td>reproduced externally</td><td>reviewed independently</td><td>A named reviewer's published finding on that version. Funding for review is <code>docs/plans/funding.md</code></td></tr> <tr><td>reproduced externally</td><td>reviewed independently</td><td>A named reviewer's published finding on that version. Funding for review is <code>docs/plans/funding.md</code></td></tr>
<tr><td>any</td><td>the row's status falls back</td><td>A new version of the code or rule the row names</td></tr> <tr><td>any</td><td>the row's status falls back</td><td>A new version of the code or rule the row names</td></tr>
</tbody></table></div> </tbody></table></div>
<p class="asof">Statuses are honest as of 6 October 2026, the day this page was generated from docs/evidence.md, and change only through that file.</p> <p class="asof">Statuses are honest as of 7 October 2026, the day this page was generated from docs/evidence.md, and change only through that file.</p>
</main> </main>
<!-- footer:start --> <!-- footer:start -->
<footer class="foot"> <footer class="foot">
@ -210,6 +210,7 @@ td.mono{font-family:var(--f-mono);font-size:12.5px;min-width:180px}td.iv{color:v
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -103,24 +103,24 @@ main{padding-bottom:var(--sec)}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -202,6 +202,7 @@ main{padding-bottom:var(--sec)}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -85,24 +85,24 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -175,6 +175,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

View file

@ -207,48 +207,48 @@
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "One-click Windows workers: what the Apple M5 Max could measure", "text": "Sim/economy: mining versus proving under stress, agent-based",
"short": "One-click Windows workers" "short": "Economy simulation: mining versus proving under stress"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "First finality lock on the live devnet: checkpoint 242 at 77.4% of all weight, two hours after genesis", "text": "Difficulty rule under attack: pool hopping, pulsed rental, timestamp stretching, short-lane oscillation, epoch games, polluted window, block flood",
"short": "First live finality lock: 77.4% of weight, 17 voters" "short": "Difficulty rule attacked seven ways"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "The gfx1036 worker fault and what the Apple M5 Max could and could not reproduce", "text": "Difficulty rule: timestamp attack fixed , simulator regression, 3-node forger test",
"short": "The gfx1036 worker fault and what the Apple M5 Max could and could…" "short": "Timestamp attack on the difficulty rule fixed"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "A node 60 s behind the clock is silently dead", "text": "Devnet-v4 integration: nine branches merged, 3-node test network on the merged node, Windows cross-build",
"short": "A node 60 s behind the clock is silently dead" "short": "Devnet v4: nine branches merged into one node"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "First machine on the Igneum Miner app: the RTX 5090 Windows rig's RTX 5090 at 118 MH/s, via Setup.exe", "text": "Generator version 2 adopted: exact load count, fresh-source loads, program acceptance; every vector re-cut, three workers re-checked, 20,000-program census, devnet-v4 binaries rebuilt",
"short": "First machine on the one-click app: a 5090 at 118 MH/s" "short": "Generator v2 adopted: every hash does 128 distinct reads"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "Difficulty rule v2: the live oscillation, its cause, the DAG replay, the fix behind a height switch", "text": "Proving v0 on the RTX 5090: first GPU proof of an Igneum block",
"short": "Difficulty rule v2" "short": "First GPU proof of an Igneum block: 1.4 s on an RTX 5090"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "The observer stored nothing for 78 minutes, then 7,022 blocks in two minutes", "text": "Devnet v4 cut-over: generator v2, 2/3 floor, three nodes and a seed on a fresh chain",
"short": "The observer stored nothing for 78 minutes, then 7,022 blocks in two…" "short": "Devnet v4 live: generator v2, two-thirds floor, fresh chain"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "The RTX 5090 Windows rig at the 14:20 boundary: a worker stuck on the previous epoch", "text": "First hourly program swap on the live devnet: compile-ahead, no pause, two cards",
"short": "The RTX 5090 Windows rig at the 14" "short": "First live hourly swap: no pause on Mac, NVIDIA or AMD"
}, },
{ {
"date": "2026-10-04", "date": "2026-10-04",
"text": "Shard proving on the RTX 5090: a full shard compressed in 10.9 s, a two-shard block aggregated in 2.2 s, all verified", "text": "Proving: devnet v4 shards on the Apple M5 Max CPU, loaded machine",
"short": "Shard layer on the RTX 5090: a full shard proven in 10.9 s, a block aggregated in 2.2 s" "short": "Proving: devnet v4 shards on the Apple M5 Max CPU, loaded machine"
} }
] ]
} }

View file

@ -4,13 +4,13 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum ledger: every criticism, answered</title> <title>Igneum ledger: every criticism, answered</title>
<meta name="description" content="Every criticism Igneum expects, in the critic's words, with what was done, the status and the date. 182 entries. Nothing deleted, nothing softened."> <meta name="description" content="Every criticism Igneum expects, in the critic's words, with what was done, the status and the date. 183 entries. Nothing deleted, nothing softened.">
<link rel="canonical" href="https://igneum.network/ledger"> <link rel="canonical" href="https://igneum.network/ledger">
<meta name="theme-color" content="#0C0C0E"> <meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum"> <meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum ledger: every criticism, answered"> <meta property="og:title" content="Igneum ledger: every criticism, answered">
<meta property="og:description" content="182 criticisms in the critic's words, with what was done, the status and the date."> <meta property="og:description" content="183 criticisms in the critic's words, with what was done, the status and the date.">
<meta property="og:url" content="https://igneum.network/ledger"> <meta property="og:url" content="https://igneum.network/ledger">
<meta property="og:image" content="https://igneum.network/og-small.png?v=3"> <meta property="og:image" content="https://igneum.network/og-small.png?v=3">
<meta property="og:image:width" content="256"> <meta property="og:image:width" content="256">
@ -18,7 +18,7 @@
<meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire."> <meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Igneum ledger: every criticism, answered"> <meta name="twitter:title" content="Igneum ledger: every criticism, answered">
<meta name="twitter:description" content="182 criticisms in the critic's words, with what was done, the status and the date."> <meta name="twitter:description" content="183 criticisms in the critic's words, with what was done, the status and the date.">
<meta name="twitter:image" content="https://igneum.network/og-small.png?v=3"> <meta name="twitter:image" content="https://igneum.network/og-small.png?v=3">
<meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire."> <meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<link rel="icon" href="/favicon.ico" sizes="48x48"> <link rel="icon" href="/favicon.ico" sizes="48x48">
@ -51,6 +51,7 @@
</script> </script>
<!-- head:end --> <!-- head:end -->
<style> <style>
.entry p,.entry li,.entry .status{overflow-wrap:anywhere}.entry code{white-space:normal;overflow-wrap:anywhere}
:root{--obsidian:#0C0C0E;--graphite:#16161A;--line:#2A2A30;--line-2:#3A3A42;--ember:#F2541B;--molten:#FFB35C;--bone:#F4F1EC;--ash:#9A9A9E;--ink-2:#C9C7C2;--max:1200px;--gutter:clamp(16px,4vw,32px);--sec:clamp(40px,6vw,72px)} :root{--obsidian:#0C0C0E;--graphite:#16161A;--line:#2A2A30;--line-2:#3A3A42;--ember:#F2541B;--molten:#FFB35C;--bone:#F4F1EC;--ash:#9A9A9E;--ink-2:#C9C7C2;--max:1200px;--gutter:clamp(16px,4vw,32px);--sec:clamp(40px,6vw,72px)}
*{box-sizing:border-box} *{box-sizing:border-box}
body{margin:0;background:var(--obsidian);color:var(--bone);font-family:var(--f-sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden} body{margin:0;background:var(--obsidian);color:var(--bone);font-family:var(--f-sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden}
@ -97,24 +98,24 @@ details{margin-top:8px;font-size:14px;color:var(--ash)}summary{cursor:pointer;co
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -134,20 +135,21 @@ details{margin-top:8px;font-size:14px;color:var(--ash)}summary{cursor:pointer;co
<!-- nav:end --> <!-- nav:end -->
<main id="main" class="wrap"> <main id="main" class="wrap">
<header style="padding-block:clamp(40px,6vw,72px) 8px"> <header style="padding-block:clamp(40px,6vw,72px) 8px">
<div class="eyebrow">Ledger · 182 entries · regenerated from the repository</div> <div class="eyebrow">Ledger · 183 entries · regenerated from the repository</div>
<h1>Every criticism, answered or conceded</h1> <h1>Every criticism, answered or conceded</h1>
<p class="intro">This is every criticism the project expects, in the critic's words, with what was done about it and the date. 182 entries since 3 October 2026. Entries are never deleted; a status that changes keeps its history on the line. Where the critic was right the entry says Conceded. Where nothing has been done it says Open and names what settles it. The founder mined through the GPU years. Ethereum's move to proof of stake in September 2022 ended that income and the miners' place in that chain. This is one person building, with AI systems doing the engineering, the coin he wanted to exist for miners: GPU-mined, the miners are the provers, no founder allocation, every cost stated. Help is welcome and a team is wanted: cryptographers, node engineers, miners who will test. This ledger is the application form: pick an open row and write to <a href="mailto:hello@igneum.network">hello@igneum.network</a> with its id.</p> <p class="intro">This is every criticism the project expects, in the critic's words, with what was done about it and the date. 183 entries since 3 October 2026. Entries are never deleted; a status that changes keeps its history on the line. Where the critic was right the entry says Conceded. Where nothing has been done it says Open and names what settles it. The founder mined through the GPU years. Ethereum's move to proof of stake in September 2022 ended that income and the miners' place in that chain. This is one person building, with AI systems doing the engineering, the coin he wanted to exist for miners: GPU-mined, the miners are the provers, no founder allocation, every cost stated. Help is welcome and a team is wanted: cryptographers, node engineers, miners who will test. This ledger is the application form: pick an open row and write to <a href="mailto:hello@igneum.network">hello@igneum.network</a> with its id.</p>
</header> </header>
<div class="tbl"><table> <div class="tbl"><table>
<thead><tr><th>Count</th><th>Status</th><th>Meaning</th></tr></thead> <thead><tr><th>Count</th><th>Status</th><th>Meaning</th></tr></thead>
<tbody> <tbody>
<tr><td class="num">7</td><td><button type="button" class="chip" data-filter="Open">Open</button></td><td>Nothing has settled it yet. The entry names what will</td></tr> <tr><td class="num">7</td><td><button type="button" class="chip" data-filter="Open">Open</button></td><td>Nothing has settled it yet. The entry names what will</td></tr>
<tr><td class="num">63</td><td><button type="button" class="chip" data-filter="Conceded">Conceded</button></td><td>The critic is right. &quot;Stated&quot; means the public text says so; &quot;not yet stated&quot; means it does not yet</td></tr> <tr><td class="num">61</td><td><button type="button" class="chip" data-filter="Conceded">Conceded</button></td><td>The critic is right. &quot;Stated&quot; means the public text says so; &quot;not yet stated&quot; means it does not yet</td></tr>
<tr><td class="num">59</td><td><button type="button" class="chip" data-filter="Fixed or built">Fixed or built</button></td><td>A code, spec or text change answers it, with the commit or the page named</td></tr> <tr><td class="num">58</td><td><button type="button" class="chip" data-filter="Fixed or built">Fixed or built</button></td><td>A code, spec or text change answers it, with the commit or the page named</td></tr>
<tr><td class="num">27</td><td><button type="button" class="chip" data-filter="Closed by rule or decided">Closed by rule or decided</button></td><td>A consensus rule or a decision by the owner answers it, dated</td></tr> <tr><td class="num">27</td><td><button type="button" class="chip" data-filter="Closed by rule or decided">Closed by rule or decided</button></td><td>A consensus rule or a decision by the owner answers it, dated</td></tr>
<tr><td class="num">13</td><td><button type="button" class="chip" data-filter="Answered with evidence">Answered with evidence</button></td><td>A measurement or a simulation exists and is named</td></tr> <tr><td class="num">13</td><td><button type="button" class="chip" data-filter="Answered with evidence">Answered with evidence</button></td><td>A measurement or a simulation exists and is named</td></tr>
<tr><td class="num">13</td><td><button type="button" class="chip" data-filter="Answered by design">Answered by design</button></td><td>A design rule answers it; no measurement is possible yet</td></tr> <tr><td class="num">13</td><td><button type="button" class="chip" data-filter="Answered by design">Answered by design</button></td><td>A design rule answers it; no measurement is possible yet</td></tr>
<tr><td class="num">182</td><td><button type="button" class="chip" data-filter="">All</button></td><td>Every entry. The sections: <a href="#m">Mining and chips</a>, <a href="#f">Finality and attacks</a>, <a href="#p">Proving and the zkEVM</a>, <a href="#e">Economics and the coin</a>, <a href="#g">Governance and the founders</a>, <a href="#c">Comparisons</a>, <a href="#l">Legal and regulatory</a>, <a href="#x">Launch and operations</a>, <a href="#d">Builders</a></td></tr> <tr><td class="num">4</td><td><button type="button" class="chip" data-filter="Other">Other</button></td><td>A status outside the six above, read the line</td></tr>
<tr><td class="num">183</td><td><button type="button" class="chip" data-filter="">All</button></td><td>Every entry. The sections: <a href="#m">Mining and chips</a>, <a href="#f">Finality and attacks</a>, <a href="#p">Proving and the zkEVM</a>, <a href="#e">Economics and the coin</a>, <a href="#g">Governance and the founders</a>, <a href="#c">Comparisons</a>, <a href="#l">Legal and regulatory</a>, <a href="#x">Launch and operations</a>, <a href="#d">Builders</a></td></tr>
</tbody></table></div> </tbody></table></div>
<div class="toolbar"><input type="search" id="q" placeholder="Search the ledger" aria-label="Search the ledger"><span id="shown"></span></div> <div class="toolbar"><input type="search" id="q" placeholder="Search the ledger" aria-label="Search the ledger"><span id="shown"></span></div>
<h2 id="m">Mining and chips</h2> <h2 id="m">Mining and chips</h2>
@ -241,10 +243,10 @@ details{margin-top:8px;font-size:14px;color:var(--ash)}summary{cursor:pointer;co
<div class="status"><span class="badge b-conceded">Conceded, stated</span> <span class="did">6 October 2026, evening; the Horizon lane analysis <code>a repository file</code> section 5.1, the FPGA lane): the public FPGA line carries only the measured row, 2.4 G reads/s per card and 0.30x to 0.39x of the RTX 5090 per watt (Shuhai, FCCM 2020 Fig 7; the tFAW arithmetic from ICCAD 2021 Table I), and the 11.4 G bank-bound row and the 12.2 G ceiling are marked unmeasured until an AWS F2 hour measures them. Stated in <code>a repository file</code> section 5.3 (the activate-bound row marked UNMEASURED with the JEDEC figure beside it, and the FPGA paragraph after the table). The epoch-length analysis's 12.2 row is not on master yet and is corrected when it lands.</span></div> <div class="status"><span class="badge b-conceded">Conceded, stated</span> <span class="did">6 October 2026, evening; the Horizon lane analysis <code>a repository file</code> section 5.1, the FPGA lane): the public FPGA line carries only the measured row, 2.4 G reads/s per card and 0.30x to 0.39x of the RTX 5090 per watt (Shuhai, FCCM 2020 Fig 7; the tFAW arithmetic from ICCAD 2021 Table I), and the 11.4 G bank-bound row and the 12.2 G ceiling are marked unmeasured until an AWS F2 hour measures them. Stated in <code>a repository file</code> section 5.3 (the activate-bound row marked UNMEASURED with the JEDEC figure beside it, and the FPGA paragraph after the table). The epoch-length analysis's 12.2 row is not on master yet and is corrected when it lands.</span></div>
<details><summary>The answer as first written</summary><p>Correct. The measured 2.4 G/s had been read on 6 October as a mapping artefact (&quot;the paper's point is that this mapping is the wrong one for random access&quot;); the activate window says it is the DRAM's own limit, and a bank-interleaved mapping does not lift it because tFAW is enforced per channel by the die. The measurement that settles it is one AWS F2 hour (f2.6xlarge, Virtex UltraScale+ VU47P, 16 GB HBM2 in 2 stacks, 32 pseudo-channels, USD 1.98 an hour on demand): the chase kernel of <code>a repository file</code> 2.2 ported to a Vitis HLS AXI master over the HBM IP at 1 GiB across all 32 pseudo-channels, 256 to 4,096 lanes in flight, board power at 1 Hz; pass line 15 to 25 M reads/s/W (0.3x to 0.5x of the 5090), alarm 27 (0.5x), over 54 (1.0x) a Counter ASIC 4.0 item. Consequence per tier: none today (no FPGA mines); on the measured row a soft-overlay FPGA mines at an RX 9070 XT's rate per watt for about 7x the price (approximate), so no home or rig tier is displaced.</p></details> <details><summary>The answer as first written</summary><p>Correct. The measured 2.4 G/s had been read on 6 October as a mapping artefact (&quot;the paper's point is that this mapping is the wrong one for random access&quot;); the activate window says it is the DRAM's own limit, and a bank-interleaved mapping does not lift it because tFAW is enforced per channel by the die. The measurement that settles it is one AWS F2 hour (f2.6xlarge, Virtex UltraScale+ VU47P, 16 GB HBM2 in 2 stacks, 32 pseudo-channels, USD 1.98 an hour on demand): the chase kernel of <code>a repository file</code> 2.2 ported to a Vitis HLS AXI master over the HBM IP at 1 GiB across all 32 pseudo-channels, 256 to 4,096 lanes in flight, board power at 1 Hz; pass line 15 to 25 M reads/s/W (0.3x to 0.5x of the 5090), alarm 27 (0.5x), over 54 (1.0x) a Counter ASIC 4.0 item. Consequence per tier: none today (no FPGA mines); on the measured row a soft-overlay FPGA mines at an RX 9070 XT's rate per watt for about 7x the price (approximate), so no home or rig tier is displaced.</p></details>
</article> </article>
<article class="entry" id="M34" data-bucket="Conceded"> <article class="entry" id="M34" data-bucket="Other">
<div class="head"><span class="id">M34</span><h3>The shadow size N is a constant of the binary, so the one lever against the dataset-storing chip needs a fork to move</h3><span class="date">6 October 2026</span></div> <div class="head"><span class="id">M34</span><h3>The shadow size N is a constant of the binary, so the one lever against the dataset-storing chip needs a fork to move</h3><span class="date">7 October 2026</span></div>
<blockquote>Your own Horizon lane says the reserve and the era draw buy nothing against a chip that stores the dataset, and that the only lever is the latency-shadow size N. N is 27 passes of a 256-instruction block, hard-coded in <code>V4_CLASS</code>. So when HBM4 doubles a chip's rate per stack in 2028, your answer is a hard fork, and a fork that retires the M5 Max at the first doubling. And now there is a shipping RandomX ASIC.</blockquote> <blockquote>Your own Horizon lane says the reserve and the era draw buy nothing against a chip that stores the dataset, and that the only lever is the latency-shadow size N. N is 27 passes of a 256-instruction block, hard-coded in <code>V4_CLASS</code>. So when HBM4 doubles a chip's rate per stack in 2028, your answer is a hard fork, and a fork that retires the M5 Max at the first doubling. And now there is a shipping RandomX ASIC.</blockquote>
<div class="status"><span class="badge b-conceded">Conceded, implemented</span> <span class="did">6 October 2026, night; <code>a repository file</code>, branch <code>ladder</code>, fork branch <code>ladder-node</code>, the 0.3.17 feature tree, behind <code>latency_ladder_activation_daa</code>, never until set, 0 on the testnet when the owner says): N is a genesis ladder of six rungs (27, 35, 53, 88, 173, 267 passes; about 102,100 to 1,001,600 counted ops) with a measured admissibility flag per rung (cold verify under 10 ms on the reference core with its SMT sibling loaded, igneum-build-1, 6 October 2026: rungs 0 to 2 pass at 8.77, 8.87 and 9.23 ms, rung 3 misses by 0.08 ms under a box load of 25 and is out until a quiet re-run, rungs 4 and 5 are out at 12.38 and 14.96), and the step is consensus state derived from two bits of the header version: up one rung when 90 percent of blue blocks in each of seven consecutive windows ask for it and the rung above is admissible, down one rung symmetrically, never two rungs inside seven windows (the oldest window must begin after the last step took effect), never unconditionally. Tests, the known-failed case first: a changed N today hashes another program under the same program id (a hard fork no pack line told apart); after, rung 0 is class v4 byte for byte, a rung above carries its pass count in the id, 8,999 bps in one window of seven does not move the step, a two-step jump is impossible, down never passes rung 0, an inadmissible rung is never entered. Stated in <code>a repository file</code>, Mining section (&quot;The work that waits can grow&quot;).</span></div> <div class="status"><span class="badge b-other">Relabelled</span> <span class="did">7 October 2026, morning, X36): the X9 in this row and in the litepaper paragraph is the chip Bitmain announced and withdrew before launch, its core claimed and never measured; the ladder's arithmetic against that core is unchanged.</span></div>
<details><summary>The answer as first written</summary><p>Correct on both counts, and the second was the sharper one. The X9 (Bitmain, about 1 MH/s at 2,472 W, approximate, github.com/monero-project/monero/issues/10270) is a shipped 3x per-joule edge over a desktop CPU on the best-known latency-bound random-program design, seven years after launch; it makes the k = 0.3 column of the chip model a product class rather than an attacker's claim, and the public headline is now the range 2.1x (k = 1) to 3.9x (k = 0.33) over the RTX 5090 at class v4, with the ladder taking the X9 bracket to about 2.8x by rung 2 and the Apple tier's to about 1.1x by rung 3. The ladder does not close the gap; it is the chain's only automatic answer, it moves at the pace of the cards that pay for it, and the honest card's watts remain the lever that moves every row (algorithm lane proposal 7). What the ladder gives up by design: a chip holding over 10 percent of weight can stall it, and the status quo it stalls is a rung the cards already run.</p></details> <details><summary>The answer as first written</summary><p>Correct on both counts, and the second was the sharper one. The X9 (Bitmain, about 1 MH/s at 2,472 W, approximate, github.com/monero-project/monero/issues/10270) is a shipped 3x per-joule edge over a desktop CPU on the best-known latency-bound random-program design, seven years after launch; it makes the k = 0.3 column of the chip model a product class rather than an attacker's claim, and the public headline is now the range 2.1x (k = 1) to 3.9x (k = 0.33) over the RTX 5090 at class v4, with the ladder taking the X9 bracket to about 2.8x by rung 2 and the Apple tier's to about 1.1x by rung 3. The ladder does not close the gap; it is the chain's only automatic answer, it moves at the pace of the cards that pay for it, and the honest card's watts remain the lever that moves every row (algorithm lane proposal 7). What the ladder gives up by design: a chip holding over 10 percent of weight can stall it, and the status quo it stalls is a rung the cards already run.</p></details>
</article> </article>
<h2 id="f">Finality and attacks</h2> <h2 id="f">Finality and attacks</h2>
@ -534,10 +536,10 @@ details{margin-top:8px;font-size:14px;color:var(--ash)}summary{cursor:pointer;co
<div class="status"><span class="badge b-answered-by-design">Answered by design</span></div> <div class="status"><span class="badge b-answered-by-design">Answered by design</span></div>
<details><summary>The answer as first written</summary><p>Monero chose the CPU for egalitarian reasons and accepted botnets as the price. Igneum chooses the GPU because the thesis is paid proving, which CPUs cannot do, and refuses a CPU lane because of botnets. It is a different trade, and the litepaper should say &quot;Monero's technique, applied to GPUs&quot; rather than &quot;finished&quot;.</p></details> <details><summary>The answer as first written</summary><p>Monero chose the CPU for egalitarian reasons and accepted botnets as the price. Igneum chooses the GPU because the thesis is paid proving, which CPUs cannot do, and refuses a CPU lane because of botnets. It is a different trade, and the litepaper should say &quot;Monero's technique, applied to GPUs&quot; rather than &quot;finished&quot;.</p></details>
</article> </article>
<article class="entry" id="C2" data-bucket="Conceded"> <article class="entry" id="C2" data-bucket="Other">
<div class="head"><span class="id">C2</span><h3>vs Monero: &quot;no chip in seven years&quot; is not proof</h3><span class="date">7 October 2026</span></div> <div class="head"><span class="id">C2</span><h3>vs Monero: &quot;no chip in seven years&quot; is not proof</h3><span class="date">7 October 2026</span></div>
<blockquote>Absence of a public RandomX ASIC is not evidence one cannot exist. Monero is also a small prize.</blockquote> <blockquote>Absence of a public RandomX ASIC is not evidence one cannot exist. Monero is also a small prize.</blockquote>
<div class="status"><span class="badge b-conceded">Conceded, stated</span> <span class="did">7 October 2026, morning): the one-screen home page is back on the owner's word, so this row is stated on <code>a repository file</code> only; the sentence there is unchanged and the text check lists it under the litepaper.</span></div> <div class="status"><span class="badge b-other">Reopened as conceded</span> <span class="did">7 October 2026, morning, X36): the X9 never shipped, so Monero's record is again seven years without a shipped chip, and the concession stands as first written; the litepaper says so in the same sentences.</span></div>
<details><summary>The answer as first written</summary><p>True. &quot;No chip publicly shipped, approximate&quot; is the defensible phrasing. The argument from Monero is precedent, not proof, and the bounty exists because precedent is not proof.</p></details> <details><summary>The answer as first written</summary><p>True. &quot;No chip publicly shipped, approximate&quot; is the defensible phrasing. The argument from Monero is precedent, not proof, and the bounty exists because precedent is not proof.</p></details>
</article> </article>
<article class="entry" id="C3" data-bucket="Conceded"> <article class="entry" id="C3" data-bucket="Conceded">
@ -1263,18 +1265,24 @@ details{margin-top:8px;font-size:14px;color:var(--ash)}summary{cursor:pointer;co
<div class="status"><span class="badge b-fixed-or-built">Fixed, stated</span> <span class="did">6 October 2026, night, the owner's ruling): both sentences read &quot;The public benchmark with a leaderboard ships with the public testnet.&quot; (<code>a repository file</code>, For miners and Questions miners ask). The gate is one the reader already knows from the roadmap's phase 5. The 5 October answers in M1, X1 and the overclaims list that name January 2027 are the history of the plan and stay as written.</span></div> <div class="status"><span class="badge b-fixed-or-built">Fixed, stated</span> <span class="did">6 October 2026, night, the owner's ruling): both sentences read &quot;The public benchmark with a leaderboard ships with the public testnet.&quot; (<code>a repository file</code>, For miners and Questions miners ask). The gate is one the reader already knows from the roadmap's phase 5. The 5 October answers in M1, X1 and the overclaims list that name January 2027 are the history of the plan and stay as written.</span></div>
<details><summary>The answer as first written</summary><p>The month was the plan of 3 October 2026. The benchmark tool is part of the testnet's go checklist, so it ships with the testnet; no month is given for either.</p></details> <details><summary>The answer as first written</summary><p>The month was the plan of 3 October 2026. The benchmark tool is part of the testnet's go checklist, so it ships with the testnet; no month is given for either.</p></details>
</article> </article>
<article class="entry" id="X34" data-bucket="Fixed or built"> <article class="entry" id="X34" data-bucket="Other">
<div class="head"><span class="id">X34</span><h3>RandomX described as chip-free</h3><span class="date">7 October 2026</span></div> <div class="head"><span class="id">X34</span><h3>RandomX described as chip-free</h3><span class="date">7 October 2026</span></div>
<blockquote>The home page said the random program 'has kept chips off Monero since 2019', the litepaper said Monero ran on RandomX 'with no chip publicly shipped' and spoke of 'Monero's seven years without a public chip'. Bitmain's Antminer X9, a RandomX chip, ships from July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270), and RandomX 2.0 shipped on 25 March 2026. Every sentence that said or implied RandomX is chip-free, or that Monero's approach has held, was wrong.</blockquote> <blockquote>The home page said the random program 'has kept chips off Monero since 2019', the litepaper said Monero ran on RandomX 'with no chip publicly shipped' and spoke of 'Monero's seven years without a public chip'. Bitmain's Antminer X9, a RandomX chip, ships from July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270), and RandomX 2.0 shipped on 25 March 2026. Every sentence that said or implied RandomX is chip-free, or that Monero's approach has held, was wrong.</blockquote>
<div class="status"><span class="badge b-fixed-or-built">Fixed, stated</span> <span class="did">7 October 2026, morning): the one-screen home page carries no RandomX sentence, so the corrected wording stands on <code>a repository file</code> (four sentences and the table row); the text check lists them there.</span></div> <div class="status"><span class="badge b-other">Corrected</span> <span class="did">7 October 2026, morning, X36): the X9 never shipped. Bitmain opened pre-orders on 26 December 2025 and withdrew the product in mid-May 2026 before any unit was delivered; every sentence below that had it shipping now states that, and RandomX stands as a technique no chip has yet shipped against. The sentences in this row are the history.</span></div>
<details><summary>The answer as first written</summary><p>The precedent Igneum cites is now a complete one: a fixed random program held CPU mining for about seven years and then a chip shipped. Igneum's program changes every hour from a genesis-fixed schedule, its dataset grows, and the chip model on the numbers page prices the chip that stores the dataset rather than assuming none can be built. The X9's rate and power are Bitmain's published figures, not our measurement.</p></details> <details><summary>The answer as first written</summary><p>The precedent Igneum cites is now a complete one: a fixed random program held CPU mining for about seven years and then a chip shipped. Igneum's program changes every hour from a genesis-fixed schedule, its dataset grows, and the chip model on the numbers page prices the chip that stores the dataset rather than assuming none can be built. The X9's rate and power are Bitmain's published figures, not our measurement.</p></details>
</article> </article>
<article class="entry" id="X35" data-bucket="Fixed or built"> <article class="entry" id="X35" data-bucket="Other">
<div class="head"><span class="id">X35</span><h3>The class v4 chip headline stated as one number, 2.1x</h3><span class="date">7 October 2026</span></div> <div class="head"><span class="id">X35</span><h3>The class v4 chip headline stated as one number, 2.1x</h3><span class="date">7 October 2026</span></div>
<blockquote>The home page said the strongest chip reaches 'about 2x once the lever now in its gates ships' and the litepaper said the latency-shadow work 'brings the chip to about 2x' and that its edge 'falls from 5.6x to 2.1x ... at a chip core equal to the GPU's'. That 2.1x assumes the chip's core costs what the GPU's does per operation (k = 1). Bitmain's Antminer X9 reached about a third of its honest device's energy on a latency-bound random program, so k about 0.33 is a shipped product class, and at that k the same model gives 3.9x.</blockquote> <blockquote>The home page said the strongest chip reaches 'about 2x once the lever now in its gates ships' and the litepaper said the latency-shadow work 'brings the chip to about 2x' and that its edge 'falls from 5.6x to 2.1x ... at a chip core equal to the GPU's'. That 2.1x assumes the chip's core costs what the GPU's does per operation (k = 1). Bitmain's Antminer X9 reached about a third of its honest device's energy on a latency-bound random program, so k about 0.33 is a shipped product class, and at that k the same model gives 3.9x.</blockquote>
<div class="status"><span class="badge b-fixed-or-built">Fixed, stated</span> <span class="did">7 October 2026, 00:0x UK, from the ladder lane's recalibration against the X9): every public sentence that stated 2.1x alone now states the range with k named. The 5.7x class v3 memory-only figure has no core work in it and is unmoved; the litepaper's 5.6x is the Counter ASIC 3.0 item 8 figure and stays as cited.</span></div> <div class="status"><span class="badge b-other">Kept, relabelled</span> <span class="did">7 October 2026, morning, X36): the range stands, with k about 0.33 labelled as the X9's claimed, unmeasured core, since no unit shipped or was benchmarked.</span></div>
<details><summary>The answer as first written</summary><p>One number was the model's k = 1 column; the X9 made the k = 0.33 column a product rather than a claim, so the public figure is the range. Rung 2 of the ladder (the top admissible rung on 6 October 2026) takes the X9 bracket from about 3.9x to about 2.8x and does not close it; the ladder moves at the pace of the cards that pay for it (M34).</p></details> <details><summary>The answer as first written</summary><p>One number was the model's k = 1 column; the X9 made the k = 0.33 column a product rather than a claim, so the public figure is the range. Rung 2 of the ladder (the top admissible rung on 6 October 2026) takes the X9 bracket from about 3.9x to about 2.8x and does not close it; the ladder moves at the pace of the cards that pay for it (M34).</p></details>
</article> </article>
<article class="entry" id="X36" data-bucket="Fixed or built">
<div class="head"><span class="id">X36</span><h3>The X9 described as a shipping chip</h3><span class="date">7 October 2026</span></div>
<blockquote>X34 and X35 said Bitmain's Antminer X9 'ships from July 2026' and called it 'the shipping RandomX chip'. It never shipped: Bitmain opened pre-orders on 26 December 2025 for July 2026 delivery, resellers told buyers in mid-May 2026 that Bitmain had discontinued it and refunded them, no unit was delivered and none was independently benchmarked.</blockquote>
<div class="status"><span class="badge b-fixed-or-built">Fixed, stated</span> <span class="did">7 October 2026, morning, from the research agent's primary sources): every public sentence that had the X9 shipping now states the pre-order, the withdrawal and the unbenchmarked core.</span></div>
<details><summary>The answer as first written</summary><p>The k about 0.33 column stays in the public range as the X9's claimed, unmeasured core: Bitmain's figures (1,000 KH/s at 2,472 W, 2.47 J/KH) were a pre-order sheet, never a benchmark, and the RandomX team's own reading (sech1, 25 January 2026) was &quot;no, X9 is not an ASIC... Only 2x efficiency gap (hash/Joule) is not 'cracked'&quot;: a box of commodity Sophgo SG2044 server SoCs with an AES block and over sixty DRAM sticks, no tapeout, about 2x per joule over a tuned Zen 4 part and about 3x over a stock desktop CPU. It was withdrawn rather than face a RandomX re-tune of 1.5x or more. The lesson the public text now carries is that one: a maintained algorithm with a credible upgrade path held, which is what the latency ladder is for Igneum. Monero's hashrate shows no X9 fleet (about 6.1 GH/s before and after, approximate).</p></details>
</article>
<h2 id="p">Proving and the zkEVM</h2> <h2 id="p">Proving and the zkEVM</h2>
<article class="entry" id="P23" data-bucket="Fixed or built"> <article class="entry" id="P23" data-bucket="Fixed or built">
<div class="head"><span class="id">P23</span><h3>An unwound transaction leaves the node's view until its sender resends it</h3><span class="date">6 October 2026</span></div> <div class="head"><span class="id">P23</span><h3>An unwound transaction leaves the node's view until its sender resends it</h3><span class="date">6 October 2026</span></div>
@ -1306,6 +1314,7 @@ details{margin-top:8px;font-size:14px;color:var(--ash)}summary{cursor:pointer;co
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -139,24 +139,24 @@ body.all .pager{display:none}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper" aria-current="page">Litepaper</a> <a href="/litepaper" data-nav="litepaper" aria-current="page">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -221,7 +221,7 @@ body.all .pager{display:none}
<article> <article>
<section id="abstract"> <section id="abstract">
<h2>Abstract</h2> <h2>Abstract</h2>
<p class="lead">Igneum is a proof-of-work blockchain built for graphics cards, where NVIDIA cards also prove every block with zero-knowledge proofs and sell proving to other chains. The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090. A memory-controller chip that stores the whole dataset reaches 1.2x per chip and, in our model, 5x to 9x per joule; the Ethash chips of this class reached 2.1x to 4.8x. The lever against it, program work in the latency shadow, is measured and in its gates: it brings the chip to 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU’s (k = 1) to one as efficient as Bitmain’s Antminer X9 (k about 0.33); the ladder’s second rung takes the X9 bracket to about 2.8x. Sources: the chip model analysis (6 October 2026); the Ethash rows of the ASIC history (Linzhi Phoenix 2020, Jasminer X4 2021, Antminer E9 2022); Counter ASIC 3.0 item 8 (100,000 ops per hash: the chip's per-joule edge over the RTX 5090 falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's (k = 1) and to 3.9x at the X9’s core (k about 0.33), the 5090 at 0.2% less rate, gates G1 to G6 in progress). The model is public; the claim is tested by paid independent cryptanalysis and the public benchmark.</p> <p class="lead">Igneum is a proof-of-work blockchain built for graphics cards, where NVIDIA cards also prove every block with zero-knowledge proofs and sell proving to other chains. The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090. A memory-controller chip that stores the whole dataset reaches 1.2x per chip and, in our model, 5x to 9x per joule; the Ethash chips of this class reached 2.1x to 4.8x. The lever against it, program work in the latency shadow, is measured and in its gates: it brings the chip to 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU’s (k = 1) to the core Bitmain claimed for its withdrawn Antminer X9 (k about 0.33, never measured); the ladder’s second rung takes that bracket to about 2.8x. Sources: the chip model analysis (6 October 2026); the Ethash rows of the ASIC history (Linzhi Phoenix 2020, Jasminer X4 2021, Antminer E9 2022); Counter ASIC 3.0 item 8 (100,000 ops per hash: the chip's per-joule edge over the RTX 5090 falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's (k = 1) and to 3.9x at the X9’s claimed core (k about 0.33, never measured), the 5090 at 0.2% less rate, gates G1 to G6 in progress). The model is public; the claim is tested by paid independent cryptanalysis and the public benchmark.</p>
<p>It runs the Ethereum virtual machine, so anything built for Ethereum runs on Igneum unchanged. Transactions are included in about one second, proven within about a minute at launch, and locked by miners within about two. There is no premine, no pre-sale, no treasury taken from emission, no stake anywhere in consensus, and no dependence on any other chain. Mining stays open to anyone with a GPU because the mining program changes every hour, so a chip built for one program is useless for the next, and a chip for the whole program space is a GPU without the graphics parts. No scheduled human release is needed to keep it that way. Writing new code, including an emergency fix to the proof system, is the one thing that takes a person, and it activates only on miner signalling.</p> <p>It runs the Ethereum virtual machine, so anything built for Ethereum runs on Igneum unchanged. Transactions are included in about one second, proven within about a minute at launch, and locked by miners within about two. There is no premine, no pre-sale, no treasury taken from emission, no stake anywhere in consensus, and no dependence on any other chain. Mining stays open to anyone with a GPU because the mining program changes every hour, so a chip built for one program is useless for the next, and a chip for the whole program space is a GPU without the graphics parts. No scheduled human release is needed to keep it that way. Writing new code, including an emergency fix to the proof system, is the one thing that takes a person, and it activates only on miner signalling.</p>
<div class="stats"> <div class="stats">
<div class="stat"><div class="v">1 / s</div><div class="k">blocks, rising to 10</div></div> <div class="stat"><div class="v">1 / s</div><div class="k">blocks, rising to 10</div></div>
@ -237,7 +237,7 @@ body.all .pager{display:none}
<div class="tbl"><table> <div class="tbl"><table>
<thead><tr><th>Piece</th><th>Closest precedent</th><th>What Igneum adds</th><th>State, 5 Oct 2026</th></tr></thead> <thead><tr><th>Piece</th><th>Closest precedent</th><th>What Igneum adds</th><th>State, 5 Oct 2026</th></tr></thead>
<tbody> <tbody>
<tr><td>A mining program that regenerates itself, for GPUs</td><td>RandomX on Monero since 2019, for CPUs, a program per hash; its first chip, Bitmain’s Antminer X9, ships from July 2026. ProgPoW, as KAWPOW on Ravencoin since 2020, changes the maths inside a fixed program shape every few blocks on GPUs (approximate)</td><td>A whole kernel per hour compiled to native code, a daily dataset from a 256 MB cache, a verifiable delay before the seed, era draws from a genesis reserve</td><td>Measured: hourly swaps on Apple, NVIDIA and AMD cards on the live devnet, 4 October 2026</td></tr> <tr><td>A mining program that regenerates itself, for GPUs</td><td>RandomX on Monero since 2019, for CPUs, a program per hash; the one chip announced against it, Bitmain’s Antminer X9, withdrawn in May 2026 before launch. ProgPoW, as KAWPOW on Ravencoin since 2020, changes the maths inside a fixed program shape every few blocks on GPUs (approximate)</td><td>A whole kernel per hour compiled to native code, a daily dataset from a 256 MB cache, a verifiable delay before the seed, era draws from a genesis reserve</td><td>Measured: hourly swaps on Apple, NVIDIA and AMD cards on the live devnet, 4 October 2026</td></tr>
<tr><td>The mining card does paid, useful, verifiable work</td><td>Primecoin's prime chains in 2013 were not useful. Aleo ran proving as consensus and the fastest prover won (both approximate)</td><td>Proving kept apart from the lottery; shards assigned by sortition, not by speed</td><td>Implemented: proving v0 on the live devnet since 5 October 2026. The job market for other chains is Designed</td></tr> <tr><td>The mining card does paid, useful, verifiable work</td><td>Primecoin's prime chains in 2013 were not useful. Aleo ran proving as consensus and the fastest prover won (both approximate)</td><td>Proving kept apart from the lottery; shards assigned by sortition, not by speed</td><td>Implemented: proving v0 on the live devnet since 5 October 2026. The job market for other chains is Designed</td></tr>
<tr><td>A proof-of-work chain where every block is proven</td><td>zkEVMs run as rollups on proof-of-stake Ethereum. Conflux has run GPU-mined EVM apps on a DAG since 2020, without proofs (approximate)</td><td>Proven state on a proof-of-work base layer, produced by the miners themselves</td><td>Implemented in part: shards proven and paid on the devnet. The aggregated block proof checked in consensus is Designed</td></tr> <tr><td>A proof-of-work chain where every block is proven</td><td>zkEVMs run as rollups on proof-of-stake Ethereum. Conflux has run GPU-mined EVM apps on a DAG since 2020, without proofs (approximate)</td><td>Proven state on a proof-of-work base layer, produced by the miners themselves</td><td>Implemented in part: shards proven and paid on the devnet. The aggregated block proof checked in consensus is Designed</td></tr>
<tr><td>Finality held by miners and not moved by hour-long rentals</td><td>Decred votes with stake. Horizen penalises hidden chains. Kaspa limits merge depth (approximate)</td><td>Vote weight is 30 days of blocks per key. Hashrate that appeared today has no vote</td><td>Implemented: rule v2 live on the devnet, first lock 4 October 2026. External review is owed at gate 3</td></tr> <tr><td>Finality held by miners and not moved by hour-long rentals</td><td>Decred votes with stake. Horizen penalises hidden chains. Kaspa limits merge depth (approximate)</td><td>Vote weight is 30 days of blocks per key. Hashrate that appeared today has no vote</td><td>Implemented: rule v2 live on the devnet, first lock 4 October 2026. External review is owed at gate 3</td></tr>
@ -344,14 +344,14 @@ body.all .pager{display:none}
</tbody> </tbody>
</table></div> </table></div>
<p>Three ideas carry the chip resistance. <strong>The hash rewrites itself.</strong> A new program every hour, drawn from the chain. Its memory pattern changes with it. The rules change on a schedule fixed at launch. No release, no vote. These are automatic schedule changes: they defeat a chip wired for one datapath and they need no human fork. Against a chip that stores the dataset every drawn parameter is firmware, and what meets that chip is the latency-shadow work (class v4) and the price per joule (the Horizon lane analysis, 6 October 2026, section 5.4; ledger M32). <strong>It waits on memory, not maths.</strong> Every hash is a chain of random reads into a table too big for a chip to carry. The wait is the same physics for everyone. <strong>Miners hold the switch.</strong> Spare defences are written into the rules, switched off. A miner signal turns one on, at the class-change threshold: miners signal three things at three thresholds, 60 percent of blue blocks over two weeks for a parameter genesis leaves open, 90 percent for an upgrade (new code), and 95 percent with a floor height for a class change. No fork.</p> <p>Three ideas carry the chip resistance. <strong>The hash rewrites itself.</strong> A new program every hour, drawn from the chain. Its memory pattern changes with it. The rules change on a schedule fixed at launch. No release, no vote. These are automatic schedule changes: they defeat a chip wired for one datapath and they need no human fork. Against a chip that stores the dataset every drawn parameter is firmware, and what meets that chip is the latency-shadow work (class v4) and the price per joule (the Horizon lane analysis, 6 October 2026, section 5.4; ledger M32). <strong>It waits on memory, not maths.</strong> Every hash is a chain of random reads into a table too big for a chip to carry. The wait is the same physics for everyone. <strong>Miners hold the switch.</strong> Spare defences are written into the rules, switched off. A miner signal turns one on, at the class-change threshold: miners signal three things at three thresholds, 60 percent of blue blocks over two weeks for a parameter genesis leaves open, 90 percent for an upgrade (new code), and 95 percent with a floor height for a class change. No fork.</p>
<p><strong>The work that waits can grow.</strong> Class v4 adds a block of latency-shadow arithmetic to every hash, about 100,000 integer operations that run while the memory reads are in flight, so a chip that stores the whole dataset still has to pay for a core. That size sits on a ladder fixed at genesis, six rungs from about 100,000 to about 1,000,000 operations, and it moves one rung at a time only when 90 percent of blue blocks in each of seven consecutive days ask for it; it can never move two rungs inside a week and never past a rung the reference verifier cannot check under 10 ms with its sibling thread busy (measured on the build server, 6 October 2026: the first three rungs pass at 8.8, 8.9 and 9.2 ms, the fourth misses by 0.08 ms on a loaded box and stays out until a quiet re-measurement, the two doublings are out at 12.4 and 15.0 ms). What it buys, on the measured cards: against a dataset-storing chip whose core costs what an RTX 5090's does per operation, the chip's per-joule edge falls from 2.1x at the first rung to 1.3x at the third; against a core as good as the shipping RandomX chip's (Bitmain's Antminer X9, about 3x per joule over a desktop CPU after seven years, approximate), from 3.9x to 2.8x. What it costs, per rung, is measured too: the Apple tier gives up 3 points of rate at the first step and 6 more at the second, the RTX 5090 nothing until the second; so the miners who pay for a step are the ones who take it (<a href="/ledger#M34">ledger M34</a>).</p> <p><strong>The work that waits can grow.</strong> Class v4 adds a block of latency-shadow arithmetic to every hash, about 100,000 integer operations that run while the memory reads are in flight, so a chip that stores the whole dataset still has to pay for a core. That size sits on a ladder fixed at genesis, six rungs from about 100,000 to about 1,000,000 operations, and it moves one rung at a time only when 90 percent of blue blocks in each of seven consecutive days ask for it; it can never move two rungs inside a week and never past a rung the reference verifier cannot check under 10 ms with its sibling thread busy (measured on the build server, 6 October 2026: the first three rungs pass at 8.8, 8.9 and 9.2 ms, the fourth misses by 0.08 ms on a loaded box and stays out until a quiet re-measurement, the two doublings are out at 12.4 and 15.0 ms). What it buys, on the measured cards: against a dataset-storing chip whose core costs what an RTX 5090's does per operation, the chip's per-joule edge falls from 2.1x at the first rung to 1.3x at the third; against a core as good as the one Bitmain claimed for its withdrawn Antminer X9 (about 3x per joule over a desktop CPU, never measured), from 3.9x to 2.8x. What it costs, per rung, is measured too: the Apple tier gives up 3 points of rate at the first step and 6 more at the second, the RTX 5090 nothing until the second; so the miners who pay for a step are the ones who take it (<a href="/ledger#M34">ledger M34</a>).</p>
<p>No hash has stayed free of chips forever. Igneum does not claim to. It states the gain its own model finds, the response takes a week, and both are measured. The model is public: <a href="/bench#counter-asic-2-0-the-numbers">the numbers</a>; the claim is tested by paid independent cryptanalysis and the public benchmark. Monero ran on RandomX from 2019 (approximate) with no chip publicly shipped until Bitmain’s Antminer X9 in July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270). About seven years of hold and then a chip: that is the record Igneum’s hourly program and its chip model are built against.</p> <p>No hash has stayed free of chips forever. Igneum does not claim to. It states the gain its own model finds, the response takes a week, and both are measured. The model is public: <a href="/bench#counter-asic-2-0-the-numbers">the numbers</a>; the claim is tested by paid independent cryptanalysis and the public benchmark. Monero has run on RandomX since 2019 (approximate) with no chip shipped. Bitmain opened Antminer X9 pre-orders on 26 December 2025 for July 2026 delivery, then withdrew the product in mid-May 2026 and refunded buyers before any unit shipped; none has been independently benchmarked. A box with about a 2x per joule edge over the best CPUs, and about 3x over a desktop, was withdrawn rather than face a RandomX re-tune of 1.5x or more. That is the band Igneum’s class v4 model sits in (2.1x to 3.9x over an RTX 5090), and the defence that held was a maintained algorithm with a credible upgrade path, which is what the ladder is.</p>
<p>One thing takes a person, here and on every chain that exists: writing new code. A chain cannot safely write its own generator, and it cannot safely tell a chip from a wave of honest new cards by hashrate alone. If the design above ever failed, anyone could publish a new generator and miners would switch it on by signalling, as Monero's community can fork. Igneum is built to make that day unlikely, and does not depend on avoiding it.</p> <p>One thing takes a person, here and on every chain that exists: writing new code. A chain cannot safely write its own generator, and it cannot safely tell a chip from a wave of honest new cards by hashrate alone. If the design above ever failed, anyone could publish a new generator and miners would switch it on by signalling, as Monero's community can fork. Igneum is built to make that day unlikely, and does not depend on avoiding it.</p>
</section> </section>
<section id="randomx"> <section id="randomx">
<h2>Monero's idea, finished for GPUs</h2> <h2>Monero's idea, finished for GPUs</h2>
<p>RandomX kept chips off Monero from 2019 (approximate) by making the mining program random, so the hardware that ran it well was the hardware everyone already owned. That hold ended: Bitmain’s Antminer X9 ships from July 2026 at 1 MH/s and 2,472 W, about USD 5,600, and RandomX 2.0 shipped on 25 March 2026 (monero-project/monero issue 10270). Igneum takes the same principle to graphics cards and adds what RandomX never had.</p> <p>RandomX has kept chips off Monero since 2019 (approximate) by making the mining program random, so the hardware that runs it well is the hardware everyone already owns. The one chip announced against it, Bitmain’s Antminer X9 (pre-orders from 26 December 2025 at 1 MH/s and 2,472 W, about USD 5,600), was withdrawn in mid-May 2026 before any unit shipped; RandomX 2.0 shipped on 25 March 2026 (monero-project/monero issue 10270). Igneum takes the same principle to graphics cards and adds what RandomX never had.</p>
<div class="tbl"><table> <div class="tbl"><table>
<thead><tr><th>Property</th><th>RandomX, Monero</th><th>Igneum</th></tr></thead> <thead><tr><th>Property</th><th>RandomX, Monero</th><th>Igneum</th></tr></thead>
<tbody> <tbody>
@ -362,7 +362,7 @@ body.all .pager{display:none}
<tr><td>Changes over time</td><td>None. A fixed design, unchanged for seven years</td><td>A new program every hour, its memory pattern with it; era draws and reserved families on a schedule fixed at genesis. Nobody touches it</td></tr> <tr><td>Changes over time</td><td>None. A fixed design, unchanged for seven years</td><td>A new program every hour, its memory pattern with it; era draws and reserved families on a schedule fixed at genesis. Nobody touches it</td></tr>
<tr><td>Seed grinding</td><td>Not applicable, the program comes from the hash input</td><td>Closed by a verifiable delay between seed and program</td></tr> <tr><td>Seed grinding</td><td>Not applicable, the program comes from the hash input</td><td>Closed by a verifiable delay between seed and program</td></tr>
<tr><td>Useful work</td><td>None. Hashing only</td><td>Every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server (eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026); they sell proofs to other chains. AMD and Apple cards mine, and a prover for them lands when a zkVM ships one</td></tr> <tr><td>Useful work</td><td>None. Hashing only</td><td>Every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server (eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026); they sell proofs to other chains. AMD and Apple cards mine, and a prover for them lands when a zkVM ships one</td></tr>
<tr><td>Track record</td><td>About seven years without a public chip, then Bitmain’s Antminer X9, shipping from July 2026</td><td>Zero years. Every number above is measured and logged with the commands that produced it. The specification, reference hash, test vectors and simulators are public now (github.com/igneum-network/spec). The node, the miner and the wallet are in a private repository until the public testnet</td></tr> <tr><td>Track record</td><td>About seven years without a shipped chip; the one announced, Bitmain’s Antminer X9, was withdrawn in May 2026 before launch</td><td>Zero years. Every number above is measured and logged with the commands that produced it. The specification, reference hash, test vectors and simulators are public now (github.com/igneum-network/spec). The node, the miner and the wallet are in a private repository until the public testnet</td></tr>
</tbody> </tbody>
</table></div> </table></div>
<p>Measured so far: the same hourly program, generated on an Apple M5 Max, compiled by Apple's Metal and NVIDIA's CUDA on an RTX 5090, produced identical hashes on both, 192 of 192 across two programs. On a 1 GB dataset the 5090 ran at about 228 million hashes a second and the Mac at about 45 million, both bound by random memory access rather than arithmetic. Those are prototype figures, not mining rates. The first prototype dataset was a closed-form function, and a miner could compute items instead of loading them: measured 111x faster that way on the Mac. The 256 MB cache construction replaced it on 3 October 2026. With the cache, computing items on the fly runs 4.8x slower than loading them, measured on the Mac, and the honest rate is unchanged on both vendors. Open: the same shortcut ratio on NVIDIA and on a discrete AMD card, and the time-memory trade-off between the two measured points. Inside the 5090's 96 MB cache the same program ran nearly six times faster, which is why the dataset starts at 2 GB and grows. On 4 October 2026 the live devnet crossed an hourly program change on all three vendors with no pause and no rejected block: a Mac at 26.7 million hashes a second, an RTX 5090 at 123 million and an integrated AMD chip at 2.7 million, every hash doing 128 distinct reads of the memory-hard dataset.</p> <p>Measured so far: the same hourly program, generated on an Apple M5 Max, compiled by Apple's Metal and NVIDIA's CUDA on an RTX 5090, produced identical hashes on both, 192 of 192 across two programs. On a 1 GB dataset the 5090 ran at about 228 million hashes a second and the Mac at about 45 million, both bound by random memory access rather than arithmetic. Those are prototype figures, not mining rates. The first prototype dataset was a closed-form function, and a miner could compute items instead of loading them: measured 111x faster that way on the Mac. The 256 MB cache construction replaced it on 3 October 2026. With the cache, computing items on the fly runs 4.8x slower than loading them, measured on the Mac, and the honest rate is unchanged on both vendors. Open: the same shortcut ratio on NVIDIA and on a discrete AMD card, and the time-memory trade-off between the two measured points. Inside the 5090's 96 MB cache the same program ran nearly six times faster, which is why the dataset starts at 2 GB and grows. On 4 October 2026 the live devnet crossed an hourly program change on all three vendors with no pause and no rejected block: a Mac at 26.7 million hashes a second, an RTX 5090 at 123 million and an integrated AMD chip at 2.7 million, every hash doing 128 distinct reads of the memory-hard dataset.</p>
@ -688,7 +688,7 @@ body.all .pager{display:none}
<p>Here are the limits, stated before anyone else states them.</p> <p>Here are the limits, stated before anyone else states them.</p>
<ul> <ul>
<li><strong>A proof in seconds.</strong> Not at launch. Proving a full block today needs a cluster of 100 to 200 consumer GPUs, approximate, so Igneum launches with proofs within about a minute and tightens as hardware improves. Users still see their transaction land in one second.</li> <li><strong>A proof in seconds.</strong> Not at launch. Proving a full block today needs a cluster of 100 to 200 consumer GPUs, approximate, so Igneum launches with proofs within about a minute and tightens as hardware improves. Users still see their transaction land in one second.</li>
<li><strong>A chip is impossible.</strong> No. A chip wired for one program is a bad bet, because the program moves before it ships. A programmable chip is not stopped by the moving target: everything it needs is public at genesis and every drawn parameter is firmware to it (an address permute, a rotator, an immediate table), so the defence against it is the latency-shadow work (class v4) and the price per joule, not the schedule (the Horizon lane analysis, 6 October 2026, section 5.4; ledger M32). The published model (5 October 2026) prices the strongest chip we can name, one with the whole cache on-die computing dataset items on the fly, at 0.92x the hash rate of an RTX 5090 per unit of silicon with a 3x fixed-function allowance, approximate. The same model, drawn out to the chip that stores the dataset (6 October 2026): The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090. A memory-controller chip that stores the whole dataset reaches 1.2x per chip and, in our model, 5x to 9x per joule; the Ethash chips of this class reached 2.1x to 4.8x. The lever against it, program work in the latency shadow, is measured and in its gates: it brings the chip to 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU’s (k = 1) to one as efficient as Bitmain’s Antminer X9 (k about 0.33); the ladder’s second rung takes the X9 bracket to about 2.8x. Sources: the chip model analysis (6 October 2026); the Ethash rows of the ASIC history (Linzhi Phoenix 2020, Jasminer X4 2021, Antminer E9 2022); Counter ASIC 3.0 item 8 (100,000 ops per hash: the chip's per-joule edge over the RTX 5090 falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's (k = 1) and to 3.9x at the X9’s core (k about 0.33), the 5090 at 0.2% less rate, gates G1 to G6 in progress). No hash has stayed free of chips forever; Igneum does not claim to. Monero’s RandomX held for about seven years before Bitmain’s Antminer X9 shipped in July 2026 (1 MH/s at 2,472 W, about USD 5,600; monero-project/monero issue 10270). That record says nothing about the price of a chip with the 256 MB cache on its die; that price is a cost model, not a measurement.</li> <li><strong>A chip is impossible.</strong> No. A chip wired for one program is a bad bet, because the program moves before it ships. A programmable chip is not stopped by the moving target: everything it needs is public at genesis and every drawn parameter is firmware to it (an address permute, a rotator, an immediate table), so the defence against it is the latency-shadow work (class v4) and the price per joule, not the schedule (the Horizon lane analysis, 6 October 2026, section 5.4; ledger M32). The published model (5 October 2026) prices the strongest chip we can name, one with the whole cache on-die computing dataset items on the fly, at 0.92x the hash rate of an RTX 5090 per unit of silicon with a 3x fixed-function allowance, approximate. The same model, drawn out to the chip that stores the dataset (6 October 2026): The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090. A memory-controller chip that stores the whole dataset reaches 1.2x per chip and, in our model, 5x to 9x per joule; the Ethash chips of this class reached 2.1x to 4.8x. The lever against it, program work in the latency shadow, is measured and in its gates: it brings the chip to 2.1x to 3.9x, the range running from a chip core as costly per operation as the GPU’s (k = 1) to the core Bitmain claimed for its withdrawn Antminer X9 (k about 0.33, never measured); the ladder’s second rung takes that bracket to about 2.8x. Sources: the chip model analysis (6 October 2026); the Ethash rows of the ASIC history (Linzhi Phoenix 2020, Jasminer X4 2021, Antminer E9 2022); Counter ASIC 3.0 item 8 (100,000 ops per hash: the chip's per-joule edge over the RTX 5090 falls from 5.6x to 2.1x on GDDR7 at a chip core equal to the GPU's (k = 1) and to 3.9x at the X9’s claimed core (k about 0.33, never measured), the 5090 at 0.2% less rate, gates G1 to G6 in progress). No hash has stayed free of chips forever; Igneum does not claim to. Monero’s RandomX has held for about seven years; the one chip announced against it, Bitmain’s Antminer X9, was withdrawn in mid-May 2026 before any unit shipped, its claimed core (k about 0.33) never measured. That record says nothing about the price of a chip with the 256 MB cache on its die; that price is a cost model, not a measurement.</li>
<li><strong>A guaranteed income floor.</strong> No. External proving is a small market today. Igneum's miners' electricity cost in it is close to power, but the price they must charge is the subsidy they forgo, which falls as one over network hash: an edge at scale and nothing more.</li> <li><strong>A guaranteed income floor.</strong> No. External proving is a small market today. Igneum's miners' electricity cost in it is close to power, but the price they must charge is the subsidy they forgo, which falls as one over network hash: an edge at scale and nothing more.</li>
<li><strong>A memory-hard prototype on every vendor.</strong> Not yet. The 256 MB cache closed the shortcut on Apple silicon (computing items runs 4.8x slower than loading them, measured 3 October 2026). The same ratio on NVIDIA and on a discrete AMD card is Open.</li> <li><strong>A memory-hard prototype on every vendor.</strong> Not yet. The 256 MB cache closed the shortcut on Apple silicon (computing items runs 4.8x slower than loading them, measured 3 October 2026). The same ratio on NVIDIA and on a discrete AMD card is Open.</li>
<li><strong>Finality in the first month.</strong> No. No checkpoint locks until the 30-day window has 30 days of history. The first month of mainnet is proof of work with a 12-hour depth, and the text above says so wherever a day count appears.</li> <li><strong>Finality in the first month.</strong> No. No checkpoint locks until the 30-day window has 30 days of history. The first month of mainnet is proof of work with a 12-hour depth, and the text above says so wherever a day count appears.</li>
@ -724,6 +724,7 @@ body.all .pager{display:none}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -4,13 +4,13 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum live devnet</title> <title>Igneum live devnet</title>
<meta name="description" content="The Igneum devnet as it runs: blocks, miners, difficulty and peers, read from a node every two seconds."> <meta name="description" content="The Igneum devnet as it happens: every block, the miners, the provers paid and the finality rule, read from a node every two seconds.">
<link rel="canonical" href="https://igneum.network/live"> <link rel="canonical" href="https://igneum.network/live">
<meta name="theme-color" content="#0C0C0E"> <meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum"> <meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum live devnet"> <meta property="og:title" content="Igneum live devnet">
<meta property="og:description" content="The Igneum devnet as it runs: blocks, miners, difficulty and peers, read from a node every two seconds."> <meta property="og:description" content="The Igneum devnet as it happens: every block, the miners, the provers paid and the finality rule, read from a node every two seconds.">
<meta property="og:url" content="https://igneum.network/live"> <meta property="og:url" content="https://igneum.network/live">
<meta property="og:image" content="https://igneum.network/og-small.png?v=3"> <meta property="og:image" content="https://igneum.network/og-small.png?v=3">
<meta property="og:image:width" content="256"> <meta property="og:image:width" content="256">
@ -18,7 +18,7 @@
<meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire."> <meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Igneum live devnet"> <meta name="twitter:title" content="Igneum live devnet">
<meta name="twitter:description" content="The Igneum devnet as it runs: blocks, miners, difficulty and peers, read from a node every two seconds."> <meta name="twitter:description" content="The Igneum devnet as it happens: every block, the miners, the provers paid and the finality rule, read from a node every two seconds.">
<meta name="twitter:image" content="https://igneum.network/og-small.png?v=3"> <meta name="twitter:image" content="https://igneum.network/og-small.png?v=3">
<meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire."> <meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml"> <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml">
@ -53,66 +53,57 @@
</script> </script>
<!-- head:end --> <!-- head:end -->
<style> <style>
/* page block; tokens, type and components are in /site.css */ /* live page block (7 Oct 2026: redrawn to show the system working); tokens and components are in /site.css */
.verify-row{display:flex;gap:var(--s-4);align-items:center;margin:var(--s-3) 0 var(--s-4)}.tick{width:44px;height:44px;border-radius:12px;background:var(--ember);display:grid;place-items:center;flex:none}.tick svg{stroke:var(--ember-ink)}.verify-row h3{margin:0 0 4px}.verify-row p{margin:0;color:var(--ash);font-size:var(--t-base)} .lhead{padding:var(--s-6) 0 var(--s-5)}
.verify-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-2)}.verify-grid .cell{background:var(--row);border:1px solid var(--line);border-radius:var(--r-row);padding:10px 12px;min-width:0}.verify-grid .k{font:500 var(--t-xs)/1.4 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ash)}.verify-grid .v{font:500 14px/1.4 var(--f-mono);color:var(--bone);margin-top:2px;overflow-wrap:anywhere}.verify-grid .v.hot{color:var(--molten-text)}@media (max-width:700px){.verify-grid{grid-template-columns:1fr 1fr}} .lhead .wrap{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--s-3) var(--s-5)}
.scene{position:relative}.scene canvas{width:100%;height:420px;border-radius:var(--r-row);background:var(--row);border:1px solid var(--line);display:block}@media (max-width:700px){.scene canvas{height:300px}} .lhead h1{font-size:var(--t-h1);margin:var(--s-2) 0 0}
.tip{position:absolute;left:0;top:0;pointer-events:none;background:var(--graphite);border:1px solid var(--line-2);border-radius:var(--r-row);padding:10px 12px;font:400 12px/1.5 var(--f-mono);color:var(--ink-2);display:flex;flex-direction:column;gap:2px;max-width:320px;box-shadow:0 14px 40px var(--shadow)}.tip b{color:var(--bone);font-weight:500;overflow-wrap:anywhere}.tip[hidden]{display:none} .lhead{padding-bottom:var(--s-4)}
.scene-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s-3);align-items:flex-start;margin-top:var(--s-4)} .lhead p{margin:var(--s-3) 0 0;color:var(--ink-2);max-width:60ch}
--max:1200px;--gutter:clamp(16px,4vw,32px);--sec:clamp(56px,8vw,96px);--head:clamp(40px,6vw,64px); .bleed{width:100%;padding:0 var(--gutter)}
--card-pad:clamp(18px,3vw,28px);--card-r:18px;--tile-pad:18px 20px;--tile-r:14px;--gap:24px;--gap-tile:12px; .bleed canvas{width:100%;height:min(54vh,520px);min-height:300px;display:block;border-radius:var(--r-card);background:var(--row);border:1px solid var(--line)}
--fs-hero:clamp(40px,7vw,76px);--fs-h1:clamp(32px,5.5vw,56px);--fs-h2:clamp(28px,4.2vw,44px);--fs-h3:clamp(18px,2vw,22px);--fs-tile:clamp(20px,2.2vw,26px)} .caption{margin:var(--s-3) auto 0;font:400 13px/1.5 var(--f-mono);color:var(--bone);min-height:1.5em;max-width:var(--max);padding:0 var(--gutter)}
a:focus-visible,button:focus-visible{outline:2px solid var(--ember);outline-offset:3px;border-radius:6px} .caption.muted{color:var(--ash)}
img,svg,canvas{max-width:100%} .strip{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--s-3);margin-top:var(--s-6)}
.mono{font-family:var(--f-mono)} @media (max-width:1000px){.strip{grid-template-columns:repeat(3,minmax(0,1fr))}}
h1,h2,h3{font-family:var(--f-display);margin:0;line-height:1.08;text-wrap:balance} @media (max-width:600px){.strip{grid-template-columns:repeat(2,minmax(0,1fr))}}
.btn.primary:hover{background:#FF6A2B;border-color:#FF6A2B;color:var(--ember-ink)} .cell{background:var(--graphite);border:1px solid var(--line);border-radius:var(--r-row);padding:var(--s-4);min-width:0}
/* nav and footer: shared, see site/partials */ .cell .k{font:500 var(--t-xs)/1.4 var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ash)}
/* page */ .cell .v{font:700 clamp(20px,2.2vw,28px)/1.1 var(--f-display);color:var(--bone);margin-top:6px;overflow-wrap:anywhere}
.head{padding-block:var(--head) var(--gap);display:flex;flex-direction:column;gap:14px} .cell .v.state{font:500 var(--t-base)/1.3 var(--f-mono);color:var(--ash)}
.head p{color:var(--ink-2);max-width:60ch;font-size:16px} .cell .s{font:400 var(--t-sm)/1.4 var(--f-mono);color:var(--ash);margin-top:4px}
.strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--gap-tile);margin-bottom:var(--gap)} .fin{display:flex;align-items:center;gap:var(--s-3);margin:var(--s-5) 0 0;padding:var(--s-4) var(--s-5);border:1px solid var(--line);border-radius:var(--r-row);background:var(--row);color:var(--ink-2);font-size:var(--t-md)}
@media (max-width:700px){.strip{grid-template-columns:repeat(2,minmax(0,1fr))}} .fin b{color:var(--bone)}
.cell{background:var(--graphite);border:1px solid var(--line);border-radius:var(--tile-r);padding:var(--tile-pad);display:flex;flex-direction:column;gap:6px;min-width:0} .three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-4);margin-top:var(--s-5)}
.cell .k{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ash)} @media (max-width:1000px){.three{grid-template-columns:1fr}}
.cell .v{font-family:var(--f-display);font-weight:700;font-size:var(--fs-tile);line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .three h2{font-size:var(--t-h3);margin-bottom:var(--s-3)}
.cell .v small{font-family:var(--f-mono);font-weight:500;font-size:13px;color:var(--ash);margin-left:4px;letter-spacing:.04em} .lanes{display:flex;flex-direction:column}
@media (max-width:700px){.cell .v{font-size:19px}} .lane{display:grid;grid-template-columns:84px minmax(0,1fr) 72px;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line);font:400 13px/1.4 var(--f-mono);color:var(--ink-2)}
.cell .v.name{font-family:var(--f-mono);font-size:15px;font-weight:500}
.cell .s{font-family:var(--f-mono);font-size:12px;color:var(--ash);text-wrap:balance}
.cell.status .v{display:flex;align-items:center;gap:10px}
.off .dot{background:var(--ash);animation:none}
.off .cell.status .v{color:var(--ash)}
.on .cell.status .v{color:var(--molten)}
@media (prefers-reduced-motion:reduce){.dot{animation:none}}
#dag{display:block;width:100%;height:calc(clamp(240px,38vw,380px) + 18px + 64px);border-radius:12px;background:var(--obsidian);touch-action:pan-y}
@media (max-width:640px){#dag{height:calc(clamp(240px,38vw,380px) + 18px + 50px)}}
.legend div{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.legend .lk{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ash);min-width:64px}
.legend span.txt{white-space:normal;display:inline;color:var(--ash)}
.two{display:grid;gap:var(--gap);grid-template-columns:1fr;margin-top:var(--gap)}
@media (min-width:900px){.two{grid-template-columns:1fr 1fr}}
@media (min-width:900px){.two{grid-template-columns:1.1fr .9fr}}
td.n{font-variant-numeric:tabular-nums;text-align:right}th.n{text-align:right}
.id{font-family:var(--f-mono);color:var(--molten)}
.bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden;min-width:60px}
.bar i{display:block;height:100%;background:var(--ember)}
.feed{display:flex;flex-direction:column;margin-top:12px;font-family:var(--f-mono);font-size:13px;color:var(--ink-2)}
.feed div{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);padding:9px 0;align-items:baseline}
.feed div>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.lanes{display:flex;flex-direction:column;margin-top:12px}
.lane{display:grid;grid-template-columns:84px minmax(0,1fr) 72px 64px;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line);font-family:var(--f-mono);font-size:13px;color:var(--ink-2)}
.lane:last-child{border-bottom:0} .lane:last-child{border-bottom:0}
.lane .n{text-align:right;white-space:nowrap}.lane .t{color:var(--ash);font-size:12px;text-align:right;white-space:nowrap} .lane .id{color:var(--molten-text)}.lane .n{text-align:right;white-space:nowrap}
@media (max-width:480px){.lane{grid-template-columns:76px minmax(0,1fr) 60px}.lane .t{display:none}} .bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden;min-width:40px}
.feed div:last-child{border-bottom:0} .bar i{display:block;height:100%;background:var(--ember)}
.feed .t{color:var(--ash);flex:0 0 auto;font-size:12px} .kv2{display:grid;grid-template-columns:1fr auto;gap:6px 12px;font:400 13px/1.5 var(--f-mono);color:var(--ink-2)}
.feed .k{color:var(--molten)} .kv2 b{color:var(--bone);font-weight:500;text-align:right;white-space:nowrap}
#spark{display:block;width:100%;height:120px;border-radius:12px;background:var(--obsidian);margin-top:12px} .blocks{display:flex;flex-direction:column;font:400 13px/1.4 var(--f-mono);color:var(--ink-2)}
main{padding-bottom:var(--sec)} .blocks div{display:grid;grid-template-columns:minmax(72px,auto) minmax(0,1fr) auto;gap:10px;padding:7px 0;border-bottom:1px solid var(--line);align-items:baseline}
.blocks div>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.blocks div:last-child{border-bottom:0}
.blocks .w{color:var(--ash);white-space:nowrap}.blocks .w.hot{color:var(--molten-text)}.blocks .num{color:var(--bone)}
.blocks div.new{animation:land .9s ease-out}
@keyframes land{0%{background:var(--ember-12)}100%{background:transparent}}
@media (prefers-reduced-motion:reduce){.blocks div.new{animation:none}}
.lc{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--s-2) var(--s-4);margin-top:var(--s-5);padding:var(--s-3) var(--s-4);border:1px solid var(--line);border-radius:var(--r-row);background:var(--row);font-size:var(--t-base);color:var(--ink-2)}
.lc .tick{width:28px;height:28px;border-radius:8px;background:var(--ember);display:grid;place-items:center;flex:none;color:var(--ember-ink)}
.lc [data-lc]{color:var(--bone)}
@media (max-width:700px){.lc{grid-template-columns:auto minmax(0,1fr)}.lc .state{grid-column:2}}
.scene{position:relative}
#dag{display:block;width:100%;height:clamp(280px,38vw,420px);border-radius:var(--r-row);background:var(--row);border:1px solid var(--line);touch-action:pan-y}
.tip{position:absolute;left:0;top:0;pointer-events:none;background:var(--graphite);border:1px solid var(--line-2);border-radius:var(--r-row);padding:10px 12px;font:400 12px/1.5 var(--f-mono);color:var(--ink-2);white-space:nowrap;z-index:5}
.tip[hidden]{display:none}
.dl-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-3);margin-top:var(--s-6);padding-top:var(--s-5);border-top:1px solid var(--line)}
</style> </style>
</head> </head>
<body class="off"> <body>
<!-- nav:start --> <!-- nav:start -->
<a class="skip" href="#main">Skip to content</a> <a class="skip" href="#main">Skip to content</a>
@ -124,24 +115,24 @@ main{padding-bottom:var(--sec)}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live" aria-current="page">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -160,73 +151,90 @@ main{padding-bottom:var(--sec)}
</script> </script>
<!-- nav:end --> <!-- nav:end -->
<main id="main" class="wrap"> <main id="main">
<div class="head"> <header class="lhead" id="top">
<div class="eyebrow">live devnet</div> <div class="wrap">
<h1>Live devnet</h1> <div>
<p>A node is read every two seconds. Every block below is real: its parents, its miner, whether it sits on the selected chain, and whether it is a locked checkpoint. A checkpoint locks when the finality rule's quorum signs it. Once the proving layer is activated, every chain block's shards show as they are planned, proven and paid.</p> <div class="state" id="live-state"><span class="dot off"></span>connecting to the devnet observer</div>
<p>Fees: from DAA score 210,000 (the chain's block-time clock, about one step a second) the adopted fee table applies: 300 proving gas per transaction, 30,000-gas shards, floors of 100 gwei per gas and 10,000 gwei per proving gas. Before it the devnet metered with its prototype table, and the provers' program carries both.</p> <h1>The chain, as it happens.</h1>
</div>
<div class="strip" aria-live="polite">
<div class="cell status"><div class="k">Status</div><div class="v"><span class="dot"></span><span id="st-status">OFFLINE</span></div><div class="s" id="st-age">no observer update yet</div></div>
<div class="cell"><div class="k">Network</div><div class="v name" id="st-network">igneum-devnet</div><div class="s" id="st-node">node</div></div>
<div class="cell"><div class="k">Blocks / s</div><div class="v" id="st-bps">0.00</div><div class="s">over 60 s</div></div>
<div class="cell"><div class="k">Blue score</div><div class="v" id="st-blue">0</div><div class="s" id="st-count">0 blocks</div></div>
<div class="cell"><div class="k">Difficulty</div><div class="v" id="st-diff">0</div><div class="s">target per block</div></div>
<div class="cell"><div class="k">Hash rate</div><div class="v" id="st-hps">0</div><div class="s">network estimate</div></div>
<div class="cell"><div class="k">Identities</div><div class="v" id="st-miners">0</div><div class="s">vote keys active in 10 min; a card runs several</div></div>
<div class="cell"><div class="k">Peers</div><div class="v" id="st-peers">0</div><div class="s" id="st-mempool">mempool 0</div></div>
</div>
<div class="card" id="light-client" style="margin-top:var(--gap)">
<div class="viz-head"><div class="eyebrow">This tab · light client</div><div class="state" data-lc="badge"><span class="dot off"></span><span data-lc="badge-text">PREVIEW</span></div></div>
<div class="verify-row"><div class="tick"><svg viewBox="0 0 24 24" width="26" height="26" fill="none" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"></path></svg></div><div><h3>Browser checks Igneum</h3><p data-lc="line">A checkpoint certificate, verified in this tab. Voter list from the node.</p></div></div>
<div class="verify-grid">
<div class="cell"><div class="k">Block proof</div><div class="v" data-lc="proof" title="No execution proof is on the chain yet. The first off-chain GPU proof of a block was 4 October 2026">not yet</div></div>
<div class="cell"><div class="k">Checkpoint</div><div class="v" data-lc="checkpoint">checking</div></div>
<div class="cell"><div class="k">Proof system</div><div class="v" data-lc="system">BLS aggregate, version 1</div></div>
<div class="cell"><div class="k">Verified in this tab</div><div class="v hot" data-lc="tab">checking</div></div>
</div> </div>
<script type="module" src="/verify/verify.js"></script> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
</header>
<div class="card viz" aria-label="Block DAG, finality and proving, live"> <div class="bleed">
<div class="viz-head"> <canvas id="steps" aria-label="The live devnet, step by step: every square is a real block moving left as time passes; its outline, quarter cells, fill and ring show mined, shards being proven, proven and locked checkpoint"></canvas>
<div class="state" id="dag-state"><span class="dot off"></span>connecting to the devnet observer</div> </div>
<div class="viz-stats mono"><span>on screen <b id="c-screen">0</b></span><span>chain <b id="c-chain">0</b></span><span>identities <b id="c-idents">0</b></span><span>last lock <b id="c-locked">pending</b></span><span>proven <b id="c-proven">pending</b></span></div> <p class="caption mono" id="steps-caption" aria-live="polite">Connecting to the devnet observer.</p>
</div>
<div class="scene"><canvas id="dag" aria-label="The devnet's block DAG, live: blocks by time and miner lane, parent edges, the selected chain, checkpoint bands with their lock weight, proofs filling blocks as segments are paid"></canvas><div class="tip" id="dag-tip" hidden></div><div class="chip-zoom" id="dag-chip" hidden><span class="dot live"></span>scroll to zoom, Esc to release</div></div>
<div class="legend">
<span><i class="sw" style="border:2px solid var(--line-2)"></i>pending</span>
<span><i class="sw" style="border:2px solid var(--bone)"></i>included</span><span><i class="sw" style="border:2px solid var(--ember)"></i>selected chain</span>
<span><i class="sw" style="border:2px solid var(--line-2);opacity:.45"></i>excluded</span>
<span><i class="sw" style="background:var(--ember)"></i>proven</span>
<span><i class="sw" style="border:3px solid var(--ember);border-radius:50%;background:transparent"></i>locked checkpoint</span>
<span><i class="sw" style="width:0;height:12px;border-left:2px solid var(--ember);border-radius:0"></i>finality band, locked, with its weight</span>
<span><i class="sw" style="width:0;height:12px;border-left:2px dashed var(--ember);border-radius:0;opacity:.5"></i>finality band, pending</span>
</div>
<div class="scene-foot"><p class="note" style="margin:0"><span id="c-window">120 s of blocks on screen</span>. 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 then scroll, changes the window; the page's <code>?window=</code> fixes it.</p><button type="button" class="btn small" id="dag-pause" aria-pressed="false">Pause</button></div>
</div>
<div class="two"> <section class="sec" style="padding-top:0">
<div class="card"> <div class="wrap">
<div class="viz-head"><h2>Miners</h2><div class="eyebrow" id="miners-count">last 10 min</div></div> <div class="strip" aria-live="polite">
<div class="lanes" id="miners"><div class="empty">No blocks in the last 10 minutes.</div></div> <div class="cell"><div class="k">Hash rate</div><div class="v tick" id="s-hash">pending</div><div class="s">network estimate</div></div>
<p class="note" id="miners-more">Every vote key with a block in the last 10 minutes; a card runs several. The short id is the first 8 hex characters of the vote key hash in each header.</p> <div class="cell"><div class="k">Blocks, 10 min</div><div class="v tick" id="s-b10">pending</div><div class="s">target 1 a second</div></div>
<div class="cell"><div class="k">Latest block</div><div class="v tick" id="s-last">pending</div><div class="s" id="s-last-s">pending</div></div>
<div class="cell"><div class="k">Shards proven, paid</div><div class="v tick" id="s-paid">pending</div><div class="s" id="s-paid-s">pending</div></div>
<div class="cell"><div class="k">Vote keys, 10 min</div><div class="v tick" id="s-keys">pending</div><div class="s">a card runs several</div></div>
<div class="cell"><div class="k">Last lock</div><div class="v tick" id="s-lock">pending</div><div class="s" id="s-lock-s">pending</div></div>
</div> </div>
<div class="card"> <p class="fin" id="fin"><span class="dot off"></span><span>Reading the finality rule.</span></p>
<div class="viz-head"><h2>Events</h2><div class="eyebrow">the last five</div></div> <p class="note">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: <a href="/litepaper#economics">the adopted fee table</a>.</p>
<div class="feed" id="events"><div class="empty">No events yet.</div></div>
<p class="note" id="events-more">Checkpoint locks, miners going quiet and coming back, provers seen, as the observer records them.</p> <div class="three">
<div class="card">
<div class="viz-head"><h2>Miners</h2><div class="eyebrow" id="miners-count">last 10 min</div></div>
<div class="lanes" id="miners"><div class="empty">No blocks in the last 10 minutes.</div></div>
<p class="note" id="miners-more">Every vote key with a block in the last 10 minutes; a card runs several.</p>
</div>
<div class="card">
<div class="viz-head"><h2>Provers paid</h2><div class="eyebrow" id="prov-state">pending</div></div>
<div class="kv2" id="prov">
<span>shards proven and paid, all time</span><b id="p-total">pending</b>
<span>paid in the last 10 min</span><b id="p-10">pending</b>
<span>blocks fully proven, 10 min</span><b id="p-full">pending</b>
<span>proofs land behind the tip</span><b id="p-lag">pending</b>
</div>
<p class="note">Every chain block is split into shards; a card proves one, posts it, and is paid on the chain.</p>
</div>
<div class="card">
<div class="viz-head"><h2>Recent blocks</h2><div class="eyebrow">the last eight</div></div>
<div class="blocks" id="blocks"><div class="empty">No blocks yet.</div></div>
<p class="note">Number, miner, state. A number arrives once the block is planned onto the chain.</p>
</div>
</div>
<div class="lc" id="light-client">
<span class="tick"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"></path></svg></span>
<span>This tab checks the chain itself: checkpoint <span data-lc="checkpoint">checking</span>, <span data-lc="tab">checking</span>. <span data-lc="line" class="muted"></span></span>
<span class="state" data-lc="badge"><span class="dot off"></span><span data-lc="badge-text">PREVIEW</span></span>
<span hidden data-lc="proof"></span><span hidden data-lc="system"></span>
<script type="module" src="/verify/verify.js"></script>
</div>
<div class="card viz" style="margin-top:var(--s-5)" aria-label="Block DAG, finality and proving, live">
<div class="viz-head">
<div class="state" id="dag-state"><span class="dot off"></span>the DAG</div>
<div class="viz-stats mono"><span>on screen <b id="c-screen">0</b></span><span>chain <b id="c-chain">0</b></span><span><span id="c-window">120 s</span> on screen</span><button type="button" class="btn small" id="dag-pause">Pause</button></div>
</div>
<div class="scene"><canvas id="dag" aria-label="The devnet's block DAG, live: blocks by time and miner lane, parent edges, the selected chain, checkpoint bands with their lock weight, proofs filling blocks as segments are paid"></canvas><div class="tip" id="dag-tip" hidden></div><div class="chip-zoom" id="dag-chip" hidden>scroll to zoom · Esc to release</div></div>
<div class="legend">
<span><i class="sw" style="border:2px solid var(--line-2)"></i>pending</span>
<span><i class="sw" style="border:2px solid var(--bone)"></i>included</span>
<span><i class="sw" style="border:2px solid var(--ember)"></i>selected chain</span>
<span><i class="sw" style="border:2px solid var(--line-2);opacity:.45"></i>excluded</span>
<span><i class="sw" style="background:var(--ember)"></i>proven</span>
<span><i class="sw" style="border:3px solid var(--ember);border-radius:50%;background:transparent"></i>locked checkpoint</span>
<span><i class="sw" style="width:0;height:12px;border-left:2px solid var(--ember);border-radius:0"></i>finality band, locked, with its weight</span>
</div>
<p class="note" style="margin-top:var(--s-3)">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. <a href="/explorer">The explorer</a> has every block.</p>
</div>
<div class="dl-row">
<p class="yourcard" data-yourcard style="margin:0;flex:1 1 420px">Your card: pending</p>
<a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
</div> </div>
</section>
<div class="card" style="margin-top:var(--gap)">
<div class="viz-head"><h2>Blocks per minute</h2><div class="eyebrow" id="spark-range">last hour</div></div>
<canvas id="spark" aria-hidden="true"></canvas>
<p class="note" id="spark-note">Counted by the observer as blocks arrive.</p>
</div>
</main> </main>
<!-- footer:start --> <!-- footer:start -->
@ -250,6 +258,7 @@ main{padding-bottom:var(--sec)}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>
@ -289,86 +298,64 @@ main{padding-bottom:var(--sec)}
</script> </script>
<!-- footer:end --> <!-- footer:end -->
<script src="/scenes/feed.js"></script>
<script src="/live-steps.js"></script>
<script src="/live-dag.js" defer></script> <script src="/live-dag.js" defer></script>
<script src="/yourcard.js" defer></script>
<script> <script>
(function(){ (function(){
var reduce=window.matchMedia('(prefers-reduced-motion: reduce)').matches;
// the DAG canvas is redrawn every frame, so its backing store is capped at 1.5x: text stays crisp on a phone and the fill
// cost on a 2x laptop display drops by 44%
var dpr=Math.min(1.5,window.devicePixelRatio||1);
// formatting
function $(id){return document.getElementById(id);} function $(id){return document.getElementById(id);}
function compact(n){if(n===null||n===undefined||isNaN(n))return '0';var a=Math.abs(n);if(a>=1e12)return (n/1e12).toFixed(2)+'T';if(a>=1e9)return (n/1e9).toFixed(2)+'G';if(a>=1e6)return (n/1e6).toFixed(2)+'M';if(a>=1e3)return (n/1e3).toFixed(1)+'k';return String(Math.round(n));} var fmtN=function(v){return v===null||v===undefined?'pending':Number(v).toLocaleString('en-GB');};
function hashrate(n){if(n===null||n===undefined)return 'pending';var u=['H/s','kH/s','MH/s','GH/s','TH/s'],i=0;while(n>=1000&&i<u.length-1){n/=1000;i++;}return (i?n.toFixed(1):Math.round(n))+' '+u[i];} function fmtHash(h){if(h===null||h===undefined||!(h>0))return 'pending';return h>=1e9?(h/1e9).toFixed(1)+' GH/s':(h/1e6).toFixed(1)+' MH/s';}
function rel(ms){var s=Math.max(0,Math.round(ms/1000));if(s<60)return s+' s ago';var m=Math.floor(s/60);if(m<60)return m+' min ago';var h=Math.floor(m/60);if(h<24)return h+' h '+(m%60)+' min ago';return Math.floor(h/24)+' d ago';} function rel(ms){var s=Math.max(0,Math.round(ms/1000));if(s<60)return s+' s ago';var m=Math.floor(s/60);if(m<60)return m+' min ago';var h=Math.floor(m/60);if(h<24)return h+' h ago';return Math.floor(h/24)+' d ago';}
function esc(s){return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');} function esc(s){return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');}
// a counter that changed glows for half a second: motion only from a real change
// ---------- three strips on one time axis ---------- function set(id,text){var el=$(id);if(!el||el.textContent===text)return;el.textContent=text;el.classList.add('flash');setTimeout(function(){el.classList.remove('flash');},60);}
// ---------- the DAG: the shared module (/live-dag.js), fed by this page's poll ---------- var cap=$('steps-caption'),lastTs=null,seen={};
var fixedWindow=Math.max(0,Math.min(300,Number(new URLSearchParams(location.search).get('window'))||0));if(fixedWindow&&fixedWindow<30)fixedWindow=30; function onState(s,r){var el=$('live-state');el.className='state '+(s==='live'?'live':s==='failed'?'bad':'');el.innerHTML='<span class="dot '+(s==='live'?'live':s==='failed'?'bad':'off')+'"></span>'+(s==='live'?'live devnet':s==='connecting'?'connecting to the devnet observer':esc(r||s));
var dagCanvas=$('dag'),dag=null,lastD=null; if(s==='live')return;cap.classList.add('muted');cap.textContent=s==='connecting'?'Connecting to the devnet observer.':s==='stale'?(r.charAt(0).toUpperCase()+r.slice(1))+'. The scene holds the last stored blocks.':'Live feed unavailable. The scene holds its last blocks.';}
function windowWord(w){return w+' s of blocks on screen';} function onData(d){var s=d.state,pv=d.proving,fn=d.finality,now=new Date(d.now).getTime();
function mountDag(){if(dag||!dagCanvas||!window.IgneumDag)return; set('s-hash',fmtHash(s.hashes_per_second_estimate));
dag=IgneumDag.mount(dagCanvas,{poll:false,window:fixedWindow||120,tooltip:$('dag-tip'),chip:$('dag-chip'),pauseButton:$('dag-pause'), var bpm=s.blocks_per_minute||[],b10=bpm.slice(-10).reduce(function(a,p){return a+(p[1]||0);},0);set('s-b10',fmtN(b10));
onWindow:function(w){$('c-window').textContent=windowWord(w);}, var newest=null;(d.blocks||[]).forEach(function(b){if(!newest||b.ts>newest.ts)newest=b;});
onState:function(st,reason){var el=$('dag-state');if(!el)return;el.className='state '+(st==='live'?'live':st==='failed'?'bad':'');el.innerHTML='<span class="dot '+(st==='live'?'live':st==='failed'?'bad':'off')+'"></span>'+(st==='live'?'live devnet':st==='connecting'?'connecting to the devnet observer':esc(reason||'live feed unavailable'));}}); if(newest){lastTs=newest.ts;$('s-last-s').textContent=newest.number?'block '+fmtN(newest.number)+(newest.chain?', on the selected chain':''):'block '+newest.hash+', not yet planned';}
$('c-window').textContent=windowWord(dag.getWindow());if(lastD)dag.push(lastD);} if(pv&&pv.supported&&pv.active){set('s-paid',fmtN(pv.paid_shards_total));$('s-paid-s').textContent=fmtN(pv.shards_paid_10m||0)+' in the last 10 min';$('prov-state').textContent='live';
if(window.IgneumDag)mountDag();else{var ms=document.querySelector('script[src="/live-dag.js"]');if(ms)ms.addEventListener('load',mountDag);} $('p-total').textContent=fmtN(pv.paid_shards_total);$('p-10').textContent=fmtN(pv.shards_paid_10m||0);$('p-full').textContent=fmtN(pv.blocks_fully_proven_10m||0)+' of '+fmtN(pv.blocks_10m||0);$('p-lag').textContent=pv.median_proof_lag_s?'a median '+Math.round(pv.median_proof_lag_s)+' s':'pending';}
// the strip above the scene reads the chain, never the window: on screen and chain count the window and say so else{var w=pv&&pv.supported?'proving not active':'no proving layer';$('s-paid').textContent=w;$('s-paid').className='v state';$('s-paid-s').textContent='';$('prov-state').textContent=w;}
function sceneCounters(d){ set('s-keys',fmtN(s.miners_10m!==null&&s.miners_10m!==undefined?s.miners_10m:(d.miners||[]).length));
var w=dag?dag.getWindow():(fixedWindow||120),cut=new Date(d.now).getTime()-w*1000,on=0,chain=0; // finality: the last lock, and the rule in plain words
d.blocks.forEach(function(b){if(b.ts>=cut){on++;if(b.chain)chain++;}}); var fin=$('fin'),lock=null;if(fn&&fn.checkpoints)fn.checkpoints.forEach(function(c){if(c.state==='locked'&&(!lock||c.index>lock.index))lock=c;});
$('c-screen').textContent=on;$('c-chain').textContent=chain;$('c-idents').textContent=d.state.miners_10m||0; if(fn&&fn.supported&&!fn.active){set('s-lock',fn.latest_locked_index?'#'+fmtN(fn.latest_locked_index):'none');$('s-lock-s').textContent='finality paused';
var f=d.finality;$('c-locked').textContent=f&&f.supported&&!f.active?('finality paused'+(f.latest_locked_index?', last #'+f.latest_locked_index:'')):f&&f.latest_locked_index?('#'+f.latest_locked_index+(f.checkpoints&&f.checkpoints.length?', '+lockAge(f):'')):(f&&f.supported?'none yet':'no finality'); fin.innerHTML='<span class="dot off"></span><span><b>Finality is paused.</b> Under two thirds of the 30-day weight is signing, so no checkpoint locks until it returns. The chain keeps growing; the last lock stands.</span>';}
var prov=d.proving,pe=$('c-proven'); else if(lock){set('s-lock','#'+fmtN(lock.index));var t=lock.locked_at?new Date(String(lock.locked_at).replace(' ','T')).getTime():NaN;$('s-lock-s').textContent=isNaN(t)?'locked':'locked '+rel(now-t);
if(prov&&prov.supported&&prov.active){pe.textContent=(prov.blocks_fully_proven_10m||0)+'/'+(prov.blocks_10m||0)+' in 10 min';pe.title=(prov.shards_paid_10m||0)+' shards paid in the last 10 minutes'+(prov.median_proof_lag_s?', landing a median '+Math.round(prov.median_proof_lag_s)+' s behind the tip':'')+'; '+(prov.paid_shards_total!==null&&prov.paid_shards_total!==undefined?Number(prov.paid_shards_total).toLocaleString('en-GB')+' paid on the chain so far':'');} var pct=lock.fraction_total?Math.round(lock.fraction_total*100):(lock.signed&&lock.total?Math.round(lock.signed/lock.total*100):null);
else{pe.textContent=prov&&prov.supported?'not active':'no proving layer';pe.title='';} fin.innerHTML='<span class="dot live"></span><span><b>Finality is live.</b> Checkpoint #'+fmtN(lock.index)+' locked'+(isNaN(t)?'':' '+rel(now-t))+(pct?' with '+pct+'% of all 30-day weight signing':'')+'. A checkpoint locks when two thirds of all weight signs it, every 30 seconds.</span>';}
} else{set('s-lock',fn&&fn.supported?'none yet':'no rule');$('s-lock-s').textContent=fn&&fn.supported?'window filling':'';fin.innerHTML='<span class="dot off"></span><span><b>No lock yet.</b> The 30-day weight window is filling; the first checkpoint locks once it is full.</span>';}
function lockAge(f){var c=f.checkpoints.filter(function(x){return x.state==='locked';}).slice(-1)[0];if(!c||!c.locked_at)return '';var t=new Date(c.locked_at.replace(' ','T')).getTime();return isNaN(t)?'':rel(Date.now()-t);} // miners: top five lanes with a bar each
var mel=$('miners');if(d.miners&&d.miners.length){var top=d.miners.slice(0,5),max=Math.max(1,top[0].blocks),rest=d.miners.length-top.length;
// ---------- sparkline ---------- $('miners-count').textContent=d.miners.length+' vote keys';
var sc=$('spark'),sx=sc.getContext('2d'); mel.innerHTML=top.map(function(m){return '<div class="lane"><span class="id">'+esc(m.id)+'</span><div class="bar"><i style="width:'+Math.round(m.blocks/max*100)+'%"></i></div><span class="n">'+m.blocks+' blocks</span></div>';}).join('');
function spark(pairs){var w=sc.clientWidth,h=sc.clientHeight;sc.width=w*dpr;sc.height=h*dpr;sx.setTransform(dpr,0,0,dpr,0,0);sx.clearRect(0,0,w,h); $('miners-more').textContent=(rest>0?'and '+rest+' more. ':'')+'Every vote key with a block in the last 10 minutes; a card runs several.';}
if(!pairs||!pairs.length){sx.fillStyle='rgba(154,154,158,0.9)';sx.font='500 12px IBM Plex Mono, monospace';sx.textAlign='center';sx.fillText('no data yet',w/2,h/2);return;} else{mel.innerHTML='<div class="empty">No blocks in the last 10 minutes.</div>';}
var vals=pairs.map(function(p){return p[1];}),max=Math.max(1,Math.max.apply(null,vals)),pad=10,n=vals.length; // recent blocks: the last eight by time, newest first; a block seen for the first time lands with a glow
function px(i){return pad+i*(w-2*pad)/Math.max(1,n-1);}function py(v){return h-pad-(v/max)*(h-2*pad-12);} var list=(d.blocks||[]).slice().sort(function(a,b){return b.ts-a.ts;}).slice(0,8),bel=$('blocks');
sx.strokeStyle='rgba(42,42,48,0.9)';sx.lineWidth=1;sx.beginPath();sx.moveTo(pad,py(0));sx.lineTo(w-pad,py(0));sx.stroke(); if(list.length){bel.innerHTML=list.map(function(b){var word=b.locked?'locked':b.proven?'proven':b.color==='red'?'excluded':b.chain?'on the chain':b.color==='blue'?'included':'pending';var fresh=!seen[b.hash];seen[b.hash]=1;
sx.beginPath();sx.moveTo(px(0),py(0));vals.forEach(function(v,i){sx.lineTo(px(i),py(v));});sx.lineTo(px(n-1),py(0));sx.closePath();sx.fillStyle='rgba(242,84,27,0.14)';sx.fill(); return '<div'+(fresh&&Object.keys(seen).length>8?' class="new"':'')+'><span class="num">'+(b.number?fmtN(b.number):esc(b.hash))+'</span><span>'+esc(b.miner||'')+'</span><span class="w'+(word==='locked'||word==='proven'?' hot':'')+'">'+word+'</span></div>';}).join('');}
sx.beginPath();vals.forEach(function(v,i){i?sx.lineTo(px(i),py(v)):sx.moveTo(px(i),py(v));});sx.strokeStyle='#F2541B';sx.lineWidth=2;sx.lineJoin='round';sx.stroke(); if(window.IgneumYourCard)IgneumYourCard.update(s.hashes_per_second_estimate);
var li=n-1;sx.fillStyle='#FFB35C';sx.beginPath();sx.arc(px(li),py(vals[li]),3,0,Math.PI*2);sx.fill();
sx.fillStyle='rgba(154,154,158,0.9)';sx.font='500 10px IBM Plex Mono, monospace';sx.textAlign='left';sx.fillText('max '+max+' / min',pad,12);sx.textAlign='right';sx.fillText('now',w-pad,12);
var total=vals.reduce(function(a,b){return a+b;},0);$('spark-note').textContent=total+' blocks in the last hour, '+(total/60).toFixed(1)+' per minute on average.';}
// ---------- polling ----------
var minersEl=$('miners'),eventsEl=$('events'),failures=0;
function setStatus(on,ageText){document.body.className=on?'on':'off';$('st-status').textContent=on?'LIVE':'OFFLINE';$('st-age').textContent=ageText;}
function render(d){
var s=d.state,on=!s.stale;
var lag=s.observer_lag_s,lagNote=on&&lag!==null&&lag>30?'observer '+(lag<120?Math.round(lag)+' s':Math.round(lag/60)+' min')+' behind':'';
setStatus(on,s.age_s===null?'no observer update yet':(lagNote?lagNote+(s.queue_depth?', '+s.queue_depth+' queued':''):'observer updated '+rel(s.age_s*1000)));
$('st-network').textContent=s.network||'igneum-devnet';$('st-node').textContent=s.node_version?'node '+s.node_version:'node';
$('st-bps').textContent=(s.blocks_per_second_60s||0).toFixed(2);
$('st-blue').textContent=compact(s.blue_score);$('st-count').textContent=compact(s.block_count)+' blocks';
$('st-diff').textContent=compact(s.difficulty);
var hr=hashrate(s.hashes_per_second_estimate).split(' ');$('st-hps').innerHTML=hr.length>1?esc(hr[0])+'<small>'+esc(hr[1])+'</small>':esc(hr[0]);
$('st-miners').textContent=s.miners_10m;$('st-peers').textContent=s.peers===null?'0':s.peers;$('st-mempool').textContent='mempool '+(s.mempool||0);
var now=new Date(d.now).getTime();
// miners: one compact strip, the top five lanes by blocks with a bar each, the rest as a count (the full table is the bench page's job)
if(d.miners.length){var top=d.miners.slice(0,5),max=Math.max(1,top[0].blocks),rest=d.miners.length-top.length;
$('miners-count').textContent=d.miners.length+' vote keys in 10 min';
minersEl.innerHTML=top.map(function(m){return '<div class="lane"><span class="id">'+esc(m.id)+'</span><div class="bar"><i style="width:'+Math.round(m.blocks/max*100)+'%"></i></div><span class="n">'+m.blocks+' blocks</span><span class="t">'+esc(rel(now-new Date(m.last_seen.replace(' ','T')).getTime()))+'</span></div>';}).join('');
$('miners-more').innerHTML=(rest>0?'and '+rest+' more. ':'')+'Every vote key with a block in the last 10 minutes; a card runs several. <a href="/miners">The GPU bench table</a> has the measured rates per card.';}
else{minersEl.innerHTML='<div class="empty">No blocks in the last 10 minutes.</div>';$('miners-count').textContent='last 10 min';}
// events: the last five, one line each
if(d.events.length){var ev5=d.events.slice(0,5);eventsEl.innerHTML=ev5.map(function(e){return '<div><span><span class="k">'+esc(e.kind.replace(/_/g,' '))+'</span> '+esc(e.text)+'</span><span class="t">'+rel(now-new Date(e.ts).getTime())+'</span></div>';}).join('');
$('events-more').textContent=(d.events.length>5?(d.events.length-5)+' more in the observer\'s last 30. ':'')+'Checkpoint locks, miners going quiet and coming back, provers seen, as the observer records them.';}
else eventsEl.innerHTML='<div class="empty">No events yet.</div>';
spark(s.blocks_per_minute);
lastD=d;sceneCounters(d);if(dag)dag.push(d); lastD=d;sceneCounters(d);if(dag)dag.push(d);
} }
function poll(){fetch('/api/live'+(fixedWindow?'?window='+fixedWindow:''),{cache:'no-store'}).then(function(r){if(!r.ok)throw new Error(r.status);return r.json();}).then(function(d){if(!d.ok)throw new Error(d.error);failures=0;render(d);}).catch(function(){failures++;if(failures>=3){setStatus(false,'live feed unavailable');if(dag)dag.push(null);}});} // the latest-block cell ticks every second between reads
poll();setInterval(poll,2000); setInterval(function(){if(lastTs){var el=$('s-last');el.textContent=rel(Date.now()-lastTs);}},1000);
var c=$('steps');
if(c&&window.IgneumFeed&&window.IgneumSteps){var steps=IgneumSteps.mount(c,{caption:cap});IgneumFeed.start({window:300,subs:[steps],onState:onState,onData:onData});}
// the DAG below, fed by the same reads
var dag=null,lastD=null;
function sceneCounters(d){var w=dag?dag.getWindow():120,cut=new Date(d.now).getTime()-w*1000,on=0,chain=0;(d.blocks||[]).forEach(function(b){if(b.ts>=cut){on++;if(b.chain)chain++;}});$('c-screen').textContent=on;$('c-chain').textContent=chain;}
function mountDag(){if(dag||!window.IgneumDag)return;dag=IgneumDag.mount($('dag'),{poll:false,window:120,tooltip:$('dag-tip'),chip:$('dag-chip'),pauseButton:$('dag-pause'),
onWindow:function(w){$('c-window').textContent=w+' s';},
onState:function(st,reason){var el=$('dag-state');el.className='state '+(st==='live'?'live':st==='failed'?'bad':'');el.innerHTML='<span class="dot '+(st==='live'?'live':st==='failed'?'bad':'off')+'"></span>'+(st==='live'?'the DAG, live':st==='connecting'?'the DAG':esc(reason||st));}});
if(lastD)dag.push(lastD);}
if(window.IgneumDag)mountDag();else{var ms=document.querySelector('script[src="/live-dag.js"]');if(ms)ms.addEventListener('load',mountDag);}
})(); })();
</script> </script>
</body> </body>

View file

@ -84,24 +84,24 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -208,6 +208,7 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -3,22 +3,22 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>The Igneum miner app</title> <title>Igneum Ember, the one-click GPU miner</title>
<meta name="description" content="One click: install, start, the card mines; a 24 GB NVIDIA card proves as well, measured on an RTX 5090. Four pages: Mine, Earnings, Prove, Settings. Every card is one row with its rate, watts and pounds a day at your electricity price. Ember Tune measured on an RTX 5090: 84 W saved for 0.15% of rate. A visible 1% software fee you can switch off."> <meta name="description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible, switchable 1% dev fee.">
<link rel="canonical" href="https://igneum.network/miner"> <link rel="canonical" href="https://igneum.network/miner">
<meta name="theme-color" content="#0C0C0E"> <meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum"> <meta property="og:site_name" content="Igneum">
<meta property="og:title" content="The Igneum miner app"> <meta property="og:title" content="Igneum Ember, the one-click GPU miner">
<meta property="og:description" content="One click: install, start, the card mines; a 24 GB NVIDIA card proves as well, measured on an RTX 5090. Four pages: Mine, Earnings, Prove, Settings. Every card is one row with its rate, watts and pounds a day at your electricity price. Ember Tune measured on an RTX 5090: 84 W saved for 0.15% of rate. A visible 1% software fee you can switch off."> <meta property="og:description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible, switchable 1% dev fee.">
<meta property="og:url" content="https://igneum.network/miner"> <meta property="og:url" content="https://igneum.network/miner">
<meta property="og:image" content="https://igneum.network/og.png?v=3"> <meta property="og:image" content="https://igneum.network/og.png?v=3">
<meta property="og:image:width" content="1200"> <meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630"> <meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire."> <meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="The Igneum miner app"> <meta name="twitter:title" content="Igneum Ember, the one-click GPU miner">
<meta name="twitter:description" content="One click: install, start, the card mines; a 24 GB NVIDIA card proves as well, measured on an RTX 5090. Four pages: Mine, Earnings, Prove, Settings. Every card is one row: rate, watts, pounds a day at your electricity price, a Tune button. A visible 1% software fee you can switch off."> <meta name="twitter:description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible, switchable 1% dev fee.">
<meta name="twitter:image" content="https://igneum.network/og.png?v=3"> <meta name="twitter:image" content="https://igneum.network/og.png?v=3">
<meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire."> <meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml"> <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml">
@ -53,101 +53,19 @@
</script> </script>
<!-- head:end --> <!-- head:end -->
<style> <style>
/* page block; tokens, type and components are in /site.css */ /* miner page block (7 Oct 2026: the product page for the installers); tokens and components are in /site.css */
--card-pad:clamp(18px,3vw,28px);--card-r:18px;--tile-pad:18px 20px;--tile-r:14px;--gap:24px;--gap-tile:12px; .cards td:first-child{white-space:nowrap;color:var(--bone);font-weight:600}
--fs-hero:clamp(32px,5.6vw,56px);--fs-h2:clamp(28px,4.2vw,44px);--fs-h3:clamp(18px,2vw,22px);--fs-tile:clamp(20px,2.2vw,26px)} .cards .eta{color:var(--molten-text);font-family:var(--f-mono)}
section,[id]{scroll-margin-top:var(--sm)}section[id]{scroll-margin-top:calc(var(--sm) - var(--sec))} .fair{margin:var(--s-4) 0 0;color:var(--ink-2);max-width:72ch}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}} .fair b{color:var(--bone)}
img,svg{max-width:100%} .feecard{display:grid;grid-template-columns:1fr;gap:var(--s-4)}
.mono{font-family:var(--f-mono)} @media (min-width:900px){.feecard{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);align-items:start}}
.eyebrow.ember{color:var(--ember)} pre b{color:var(--molten-text);font-weight:500}
h1,h2,h3{font-family:var(--f-display);margin:0;line-height:1.08;text-wrap:balance} .hive code{overflow-wrap:anywhere}
.btn.primary:hover{background:#FF6A2B;border-color:#FF6A2B;color:var(--ember-ink)}
.grid{display:grid;gap:var(--gap);grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr))}
.reveal{opacity:0;transform:translateY(18px);transition:opacity .7s ease,transform .7s ease}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}}
section{padding-block:var(--sec)}
section+section{padding-top:0;scroll-margin-top:var(--sm)}
.sec-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:32px}
.sec-head p{font-size:16px;color:var(--ash);max-width:46ch}
.pt{font-size:15px;color:var(--ash);max-width:64ch}
.lp{display:inline-block;margin-top:24px;color:var(--ember);font-weight:600;font-size:15px}
.cta{display:flex;flex-wrap:wrap;gap:12px}
/* hero: copy left, the dashboard in its frame right; one column under 980 px */
.hero{position:relative;padding-block:clamp(48px,8vw,96px) clamp(40px,6vw,72px);overflow:hidden}
.hero::before{content:'';position:absolute;inset:auto -10% -30% 40%;height:70%;background:radial-gradient(closest-side,rgba(242,84,27,.18),rgba(242,84,27,0));pointer-events:none}
.hero .wrap{position:relative;display:grid;gap:36px;grid-template-columns:1fr;align-items:center}
@media (min-width:980px){.hero .wrap{grid-template-columns:.9fr 1.1fr;gap:32px 56px}}
.hero-copy{display:flex;flex-direction:column;gap:22px}
.hero p.lead{font-size:clamp(17px,2vw,20px);color:var(--ink-2);max-width:52ch}
.hero .os{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:14px;color:var(--ash)}
.hero .os span{display:inline-flex;align-items:center;gap:6px}
/* the device frame: a window bar, the screenshot, an ember glow behind */
.shot{position:relative;min-width:0}
.shot::before{content:'';position:absolute;inset:12% -6% -8% -6%;background:radial-gradient(closest-side,rgba(242,84,27,.22),rgba(242,84,27,0));filter:blur(12px);pointer-events:none}
.frame{position:relative;border:1px solid var(--line-2);border-radius:16px;background:#0C0C0E;box-shadow:0 30px 80px rgba(0,0,0,.55);overflow:hidden}
.frame .bar{height:32px;display:flex;align-items:center;gap:7px;padding:0 14px;border-bottom:1px solid var(--line);background:#121215}
.frame .bar i{width:10px;height:10px;border-radius:50%;background:#2A2A30;display:block}
.frame .bar b{margin-left:auto;font:500 11px/1 var(--f-mono);letter-spacing:.12em;color:var(--ash);text-transform:uppercase}
.frame img{display:block;width:100%;height:auto}
.frame figcaption{padding:10px 14px;font-size:13px;color:var(--ash);border-top:1px solid var(--line)}
/* the page-by-page section: three desktop shots in a grid, then the light desktop beside the phone */
.shots{display:grid;gap:var(--gap);grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));margin-top:28px}
.shots .shot::before{inset:20% -4% -6% -4%}
.shots-row{display:grid;gap:var(--gap);grid-template-columns:1fr;align-items:start;margin-top:var(--gap)}
@media (min-width:900px){.shots-row{grid-template-columns:minmax(0,2.3fr) minmax(0,1fr)}}
.frame.phone{max-width:320px;margin:0 auto}
.frame.light{background:#F2F0EB;border-color:#D9D6CF}
.frame.light .bar{background:#E9E6DF;border-color:#D9D6CF}
.frame.light .bar i{background:#CFCBC2}
.frame.light figcaption{background:#0C0C0E}
.row-tbl{margin-top:28px}
.row-tbl td:first-child{white-space:nowrap;font-weight:600}
/* the three steps */
.steps{display:grid;gap:var(--gap-tile);grid-template-columns:repeat(3,minmax(0,1fr));position:relative}
.step{background:var(--graphite);border:1px solid var(--line);border-radius:var(--tile-r);padding:var(--tile-pad);display:flex;flex-direction:column;gap:10px;position:relative;min-width:0}
.step .n{font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;color:var(--ember)}
.step .t{font-family:var(--f-display);font-weight:700;font-size:var(--fs-h3)}
.step p{font-size:14px;color:var(--ash);line-height:1.45}
.step svg{width:40px;height:40px}
.step::after{content:'';position:absolute;right:-9px;top:50%;width:14px;height:14px;border-top:2px solid var(--line-2);border-right:2px solid var(--line-2);transform:translateY(-50%) rotate(45deg);z-index:1}
.step:last-child::after{display:none}
@media (max-width:640px){.steps{grid-template-columns:1fr}.step::after{right:auto;left:50%;top:auto;bottom:-9px;transform:translateX(-50%) rotate(135deg)}}
/* feature groups: a heading row, then tiles with one line each */
.group{display:grid;gap:var(--gap);grid-template-columns:1fr;margin-bottom:var(--sec)}
@media (min-width:900px){.group{grid-template-columns:300px minmax(0,1fr);gap:48px}}
.group:last-child{margin-bottom:0}
.group .g-head{display:flex;flex-direction:column;gap:12px}
.group .g-head p{font-size:15px;color:var(--ash)}
.feats{display:grid;gap:var(--gap-tile);grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}
.feat{background:var(--graphite);border:1px solid var(--line);border-radius:var(--tile-r);padding:var(--tile-pad);display:flex;flex-direction:column;gap:6px;min-width:0;transition:border-color .2s ease}
.feat:hover{border-color:var(--line-2)}
.feat b{font-weight:600;font-size:16px}
.feat p{font-size:14px;color:var(--ash);line-height:1.45}
.feat .src{font-family:var(--f-mono);font-size:11px;color:var(--ember);margin-top:4px}
.feat.wide{grid-column:1/-1}
/* the swap table and the measured table */
td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
td a{color:var(--ember)}
.levers table{min-width:760px}.levers td:first-child{min-width:210px}.levers td:nth-child(2){min-width:260px}
/* the fee card: the switch as the app draws it, the start lines as the miner prints them */
.fee{display:grid;gap:var(--gap);grid-template-columns:1fr}
@media (min-width:900px){.fee{grid-template-columns:1.1fr .9fr;align-items:start}}
.switch{display:inline-flex;align-items:center;gap:12px;font-size:15px}
.switch .track{width:44px;height:26px;border-radius:13px;background:var(--ember);position:relative;flex:0 0 44px}
.switch .track::after{content:'';position:absolute;top:3px;right:3px;width:20px;height:20px;border-radius:50%;background:var(--bone)}
.switch.off .track{background:var(--line-2)}.switch.off .track::after{right:auto;left:3px}
pre b{color:var(--molten);font-weight:500}
.band{background:var(--ember);color:var(--ember-ink)}
.band .wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:24px;padding-block:56px}
.band h2{font-weight:900;font-size:clamp(26px,3.5vw,36px)}
.band p{font-size:16px;max-width:56ch}
.btn.dark{background:var(--obsidian);color:var(--bone);border-color:var(--obsidian)}
.btn.dark:hover{background:#222226;color:var(--bone)}
</style> </style>
</head> </head>
<body> <body class="has-dl-bar">
<!-- nav:start --> <!-- nav:start -->
<a class="skip" href="#main">Skip to content</a> <a class="skip" href="#main">Skip to content</a>
<nav class="nav" aria-label="Main"> <nav class="nav" aria-label="Main">
@ -158,24 +76,24 @@ pre b{color:var(--molten);font-weight:500}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner" aria-current="page">Miner</a> <a href="/miner" data-nav="miner" aria-current="page">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -195,259 +113,100 @@ pre b{color:var(--molten);font-weight:500}
<!-- nav:end --> <!-- nav:end -->
<main id="main"> <main id="main">
<header class="hero" id="top"> <header class="phero" id="top">
<div class="wrap"> <div class="wrap">
<div class="hero-copy"> <div>
<div class="eyebrow ember"><span data-product="full">Igneum Ember</span> · one click</div> <div class="eyebrow ember"><span data-product="full">Igneum Ember</span> · one click</div>
<h1>Install. Start. The card mines and proves.</h1> <h1>Install. Start. The card mines.</h1>
<p class="lead"><span data-product="name">Ember</span> finds your GPU, makes a wallet for you and runs the node, the miner and the prover as one app. Every card mines. Today's app, with the stock SP1 server: a 24 GB NVIDIA card proves the full shard and a 32 GB card mines and proves. Measured on 6 October 2026 on eleven rented cards with the patched server: every NVIDIA card from 8 GB proves, and 10 GB and up mine and prove (<a href="/bench#prover-tiers-on-real-cards-the-rented-fleet-6-october-2026-branch-gpu-fleet" style="color:var(--ember)">the log</a>); ships when the packaging row lands. Four pages: Mine, Earnings, Prove, Settings. Every card is one row: its rate, its watts, pounds a day at your electricity price, a Tune button. Every hour it compiles the next program while the current one mines, so the card never stops.</p> <p class="lead">One click installs the node, the miner and the prover, and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. A 24 GB NVIDIA card proves as well.</p>
<div class="cta"> <div class="cta"><a href="#get" class="btn primary">Download the miner</a><a href="/app" class="btn">See the app</a></div>
<a href="#get" class="btn primary">Downloads: public testnet</a> <div class="os"><span>Windows</span><span>macOS</span><span>Linux · HiveOS</span><span>NVIDIA · AMD · Apple silicon</span></div>
<a href="#features" class="btn">Every feature</a>
</div>
<div class="os">
<span>Windows</span><span>macOS</span><span>Linux</span><span>HiveOS</span><span>NVIDIA · AMD · Apple silicon</span>
</div>
</div>
<div class="shot reveal">
<figure class="frame" style="margin:0">
<div class="bar"><i></i><i></i><i></i><b><span data-product="app">Igneum Miner</span></b></div>
<img src="/img/miner-dashboard.webp" width="2880" height="1800" alt="The Mine page of Igneum Miner 0.3.14 on a three-card PC: the Stop mining button, 169 MH/s at 532 W, 84 blocks this run, and one row per card: an RTX 5090 at 122 MH/s, 222 W, 0.55 MH/W and 56 °C, an RTX 4070 at 28.7 MH/s and 76 W, an RX 9070 XT at 18.9 MH/s and 198 W, each with its tune line, Tune button and switch, and the integrated GPU off" fetchpriority="high" decoding="async">
<figcaption><span data-product="caption">Igneum Ember (the app window still says Igneum Miner)</span> 0.3.14, Mine page, on a Windows rig with an RTX 5090, RTX 4070 and RX 9070 XT, live devnet, 6 Oct 2026, 18:16 UTC. No electricity price set, so the £ cells ask for one. The tune lines are stopped tunes from before that afternoon's Power Helper fix.</figcaption>
</figure>
</div> </div>
<figure class="frame glow">
<div class="bar"><i></i><i></i><i></i><b><span data-product="app">Igneum Miner</span></b></div>
<img src="/img/miner-dashboard.webp" width="2880" height="1800" class="img-dark" alt="The Mine page of Igneum Miner 0.3.14 on a three-card rig: the Stop mining button, 169 MH/s at 532 W, 84 blocks this run, and one row per card: an RTX 5090 at 122 MH/s and 222 W, an RTX 4070 at 28.7 MH/s and 76 W, an RX 9070 XT at 18.9 MH/s, each with its tune line, Tune button and switch" fetchpriority="high" decoding="async">
<img src="/img/app-overview-light.webp" width="1440" height="912" class="img-light" alt="The Overview page of 0.3.16 in light mode: an RTX 5090 at 103 MH/s and 317 W, 0.32 MH/W, 62 blocks this run, the chain drawn live with this rig's blocks ringed" fetchpriority="high" decoding="async">
<figcaption><span class="cap-dark">The shipped app, mining on the three-card Windows rig: an RTX 5090, an RTX 4070 and an RX 9070 XT, live devnet, 6 October 2026.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig’s live state at 23:33 UK, 6 October 2026.</span></figcaption>
</figure>
</div> </div>
</header> </header>
<section id="how"> <section id="card" class="sec">
<div class="wrap"> <div class="wrap">
<div class="sec-head reveal"> <div class="sec-head">
<h2>Hash, prove, get paid</h2> <div class="eyebrow">Your card</div>
<p>One client. The card hashes the lottery, proves the shards the chain assigns to it, and every block pays one address.</p> <h2>What your card does here</h2>
<p>Measured rates from the bench table, and how often each card finds a block at the network&rsquo;s hash rate right now. One block a second is the target, so the wait is the network&rsquo;s rate over yours.</p>
</div> </div>
<div class="steps reveal"> <div class="tbl cards"><table>
<div class="step"> <thead><tr><th>Card</th><th class="num">Measured</th><th class="num">Watts</th><th class="num">A block about every</th><th>Measured on</th></tr></thead>
<svg viewBox="0 0 24 24" fill="none" stroke="var(--ember)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="12" rx="2"></rect><path d="M7 9h4M7 13h2M15 9v4M18 9v4M9 21h6"></path></svg> <tbody id="cards">
<div class="n">01 · HASH</div><div class="t">The card hashes</div> <tr data-mhs="127.7"><td>NVIDIA RTX 5090</td><td class="num">127.7 MH/s</td><td class="num">227 W</td><td class="num eta">pending</td><td>6 Oct 2026, Ember run 6, the three-card Windows rig</td></tr>
<p>A new random program every hour. 80% of each block to the card that finds it.</p> <tr data-mhs="28.8"><td>NVIDIA RTX 4070</td><td class="num">28.8 MH/s</td><td class="num">76 W</td><td class="num eta">pending</td><td>6 Oct 2026, Ember run 6, the three-card Windows rig</td></tr>
</div> <tr data-mhs="26.7"><td>Apple M5 Max</td><td class="num">26.7 MH/s</td><td class="num">not logged</td><td class="num eta">pending</td><td>4 Oct 2026, Metal, the first hourly swap</td></tr>
<div class="step"> <tr data-mhs="17.8"><td>AMD RX 9070 XT</td><td class="num">17.8 MH/s</td><td class="num">not logged</td><td class="num eta">pending</td><td>5 Oct 2026, OpenCL, on the eGPU</td></tr>
<svg viewBox="0 0 24 24" fill="none" stroke="var(--ember)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l8 4v5c0 5-3.5 8-8 9-4.5-1-8-4-8-9V7l8-4z"></path><path d="M9 12l2 2 4-4"></path></svg> <tr><td>NVIDIA RTX 4090</td><td class="num">not yet measured</td><td class="num"></td><td class="num"></td><td>send yours: the app uploads its rows</td></tr>
<div class="n">02 · PROVE</div><div class="t">The same card proves</div> <tr><td>AMD RX 7900 XTX</td><td class="num">not yet measured</td><td class="num"></td><td class="num"></td><td>send yours: the app uploads its rows</td></tr>
<p>The client switches to the shards the chain assigns to its keys, posts the proof, and goes back to hashing.</p>
</div>
<div class="step">
<svg viewBox="0 0 24 24" fill="none" stroke="var(--ember)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8"></circle><path d="M12 7v10M9.5 9.5h3.75a1.75 1.75 0 010 3.5h-2.5a1.75 1.75 0 000 3.5H14.5"></path></svg>
<div class="n">03 · GET PAID</div><div class="t">One address, in IGN</div>
<p>Block rewards and proving payouts land on the address the app made for you. The <a href="/wallet" style="color:var(--ember)">wallet</a> shows them.</p>
</div>
</div>
</div>
</section>
<section id="app">
<div class="wrap">
<div class="sec-head reveal">
<h2>Four pages. Every card is one row.</h2>
<p>Mine, Earnings, Prove, Settings, shipped in 0.3.14 on 6 October 2026. The screenshots are the live app: the Windows rig's three cards for Mine, Earnings and Settings; this team's Apple M5 Max, paused, for Prove, light and the phone width. Apple silicon reports no draw, so its row carries no watts and no pounds; an NVIDIA or AMD card's row does.</p>
</div>
<div class="tbl row-tbl reveal"><table>
<thead><tr><th>On the row</th><th>What it says</th><th>When it is not shown</th></tr></thead>
<tbody>
<tr><td>State word</td><td>mining, paused, tuning: step 7 of 9, waiting for the node, restarting in 4 s, off with the reason. A card never shows 0 MH/s without a word.</td><td>Always shown.</td></tr>
<tr><td>Rate</td><td>122 MH/s, live.</td><td>Blank with the state word when the card is not mining.</td></tr>
<tr><td>Power</td><td>290 W with 0.42 MH/W under it.</td><td>A card that reports no draw: Apple silicon, an integrated GPU. The row says so once.</td></tr>
<tr><td>Pounds a day</td><td>Watts × 24 ÷ 1,000 × your pence per kWh. The price is yours, set once in Settings.</td><td>"Set a price" until you set one; hidden with no draw.</td></tr>
<tr><td>Temperature</td><td>61 °C. Amber from 86 °C, ember from 92 °C.</td><td>When the card reports none.</td></tr>
<tr><td>Tune and the switch</td><td>Tune starts an Ember Tune on this card; Stop during a run. The switch turns the card on or off. Tune all queues every card, one at a time.</td><td>Tune is hidden for a card with no control and no measurement.</td></tr>
<tr><td>The tune line</td><td>"Not tuned yet: starts after 2 min of steady mining", "Tuning: step 7 of 9 · about 4 min left", "Tuned 2 h ago · 1,854 MHz at 100% · next check Sunday", or "Measured 27 MH/s as it runs" where the system sets the clocks.</td><td>No line for a card with no control and no measurement.</td></tr>
<tr><td>Under the chevron</td><td>The power cap slider, identities, pin or unpin, memory temperature, clocks, device facts, the last tune's table.</td><td>Closed by default.</td></tr>
</tbody> </tbody>
</table></div> </table></div>
<p class="pt reveal" style="margin-top:16px">Under the rows: the Tuning card (Efficiency, Balanced, Maximum, and about how many pounds a day at that goal), then the node as one line: synced, peers, blocks, read N s ago. Details opens the chain numbers in place.</p> <p class="fair"><b>Graphics cards only.</b> A new mining program every hour, so no chip is built for it. 80% of every block to the card that finds it, 20% to the cards that prove it. No premine, no stake, no fee to any team. Every number above has a row in <a href="/miners">the bench table</a>.</p>
<div class="shots">
<div class="shot reveal">
<figure class="frame" style="margin:0">
<div class="bar"><i></i><i></i><i></i><b>Earnings</b></div>
<img src="/img/miner-earnings.webp" width="2880" height="1800" alt="The Earnings page on the Windows rig: pounds earned with the devnet reason, IGN from proofs, 64,778 blocks lifetime and 84 this run, 532 W of electricity waiting for a price, the dev fee switch, the rewards address with Copy, Change address and Show my key" loading="lazy" decoding="async">
<figcaption>Money first. £ earned reads 0.00 on devnet and says why; 532 W waits for a price. The dev fee switch lives here. Change address and Show my key ask in place, no dialogs.</figcaption>
</figure>
</div>
<div class="shot reveal">
<figure class="frame" style="margin:0">
<div class="bar"><i></i><i></i><i></i><b>Prove</b></div>
<img src="/img/miner-prove.webp" width="2880" height="1800" alt="The Prove page: the Prove on this machine switch, one sentence per card on what it can prove, one line of counts, and Details" loading="lazy" decoding="async">
<figcaption>One switch, one sentence per card, one line of counts: assigned, proven, paid, IGN. Details holds the verifier, the program id and the segments.</figcaption>
</figure>
</div>
<div class="shot reveal">
<figure class="frame" style="margin:0">
<div class="bar"><i></i><i></i><i></i><b>Settings</b></div>
<img src="/img/miner-settings.webp" width="2880" height="1800" alt="The Settings page on the Windows rig: Tuning with the goal at Balanced (about 560 W), Ember Tune and Power control on, Hill climb off, the electricity price, the last tune 6 h ago with the next check on 13 Oct; This machine with start at login, remote jobs running a signed job, the name and appearance" loading="lazy" decoding="async">
<figcaption>Plain rows, one sentence each: Tuning, This machine, one update card, Logs, Advanced. Ember Tune and Power control on; the electricity price every £ figure uses is set here.</figcaption>
</figure>
</div>
</div>
<div class="shots-row">
<div class="shot reveal">
<figure class="frame light" style="margin:0">
<div class="bar"><i></i><i></i><i></i><b>Light</b></div>
<img src="/img/miner-dashboard-light.webp" width="2880" height="1800" alt="The Mine page in light mode" loading="lazy" decoding="async">
<figcaption>Light and dark follow the system. Settings lets you pick one.</figcaption>
</figure>
</div>
<div class="shot reveal">
<figure class="frame phone" style="margin:0 auto">
<div class="bar"><i></i><i></i><i></i><b>390 px</b></div>
<img src="/img/miner-phone.webp" width="780" height="1688" alt="The Mine page in a 390 pixel wide window: the big button, the totals, the card row stacked, a bottom tab bar with Mine, Earnings, Prove, Settings and Logs" loading="lazy" decoding="async">
<figcaption>Under 720 px the rail becomes a bottom tab bar.</figcaption>
</figure>
</div>
</div>
</div> </div>
</section> </section>
<section id="features"> <section id="how" class="sec">
<div class="wrap"> <div class="wrap">
<div class="sec-head reveal"> <div class="sec-head">
<h2>Every feature, one line each</h2> <div class="eyebrow">Hash, prove, get paid</div>
<p>What the app does today on the live devnet, and what is built but not yet measured on a card. Each number links to its engineering log entry.</p> <h2>One client. Three jobs.</h2>
</div>
<div class="group reveal" id="start">
<div class="g-head"><div class="eyebrow ember">01 · One click</div><h3>Install, press Start</h3><p>Five steps from download to the first block on a friend's laptop: drag to Applications, open, Get started, Make me an address, Start mining.</p></div>
<div class="feats">
<div class="feat"><b>The card mines; an NVIDIA card proves</b><p>One button starts the node, waits for sync, starts one miner per card and, on an NVIDIA card, the prover. Today's app, with the stock SP1 server: a 24 GB card proves the full shard (RTX 4090 5.6 s, RTX A5000 6.4 s) and a 32 GB card mines and proves (RTX 5090, 8.4 s); the stock server refuses 16 GB and under. Measured on 6 October 2026 on eleven rented cards, RTX 3060 to RTX 5090, with the patched server: every NVIDIA card from 8 GB proves, and 10 GB and up mine and prove; ships when the packaging row lands. AMD and Apple cards mine; a prover for them lands when a zkVM ships one. Quit stops them in order.</p><a class="src" href="/bench#prover-tiers-on-real-cards-the-rented-fleet-6-october-2026-branch-gpu-fleet">log · 6 Oct 2026, prover tiers on real cards (docs/analysis/prover-tiers-real-cards.md)</a></div>
<div class="feat"><b>Finds your GPU by itself</b><p>NVIDIA through the driver, AMD and Intel through OpenCL, Apple silicon through Metal. Real card names, one worker per card.</p></div>
<div class="feat"><b>A wallet made for you</b><p>A payout key made on your machine and locked to your user, with a backup step before mining starts. Or paste an address you already hold.</p></div>
<div class="feat"><b>Earnings, money first</b><p>Every block this machine finds pays one address in IGN. The Earnings page counts blocks this run and for life, IGN from proofs, and the electricity cost at your price. £ earned stays 0.00 on devnet and says why; a market price fills it in when one exists (coming). The <a href="/wallet" style="color:var(--ember)">wallet</a> shows the balance.</p></div>
<div class="feat"><b>Windows, macOS, Linux</b><p>An installer on Windows, a disk image on macOS, a package on Linux. No toolchain, no driver work: the GPU workers are prebuilt.</p></div>
<div class="feat"><b>HiveOS package</b><p>A custom miner for farms: the Linux miner, node and both GPU workers with the four Hive hooks. Hive itself is untested: report what breaks.</p></div>
<div class="feat"><b>First outside machine</b><p>An Apple silicon laptop, no instructions beyond the five steps: 33 accepted blocks in 7 minutes, 0 rejected, 21.0 MH/s average.</p><a class="src" href="/bench#4-october-2026-first-outside-machine-on-the-devnet-an-apple-silicon-laptop-through-the-igneum-miner-app">log · 4 Oct 2026</a></div>
<div class="feat"><b>First card on the app</b><p>An RTX 5090 on Windows from the installer: 117 to 119 MH/s, 34 accepted blocks in the first minute, CPU re-check OK on every share.</p><a class="src" href="/bench#4-october-2026-first-machine-on-the-igneum-miner-app-the-rtx-5090-windows-rig-s-rtx-5090-at-118-mh-s-via-setup-exe">log · 4 Oct 2026</a></div>
</div>
</div>
<div class="group reveal" id="client">
<div class="g-head"><div class="eyebrow ember">02 · One client</div><h3>Hashing and proving, switched by the client</h3><p>The lottery and the proving are kept apart on purpose. The client runs both and the miner sees one balance.</p></div>
<div class="feats">
<div class="feat"><b>Hashing and proving in one client</b><p>Proving is a switch. On, the client proves the shards the chain assigns to this machine's keys, submits the record to its own node and goes back to hashing. The Prove page shows one sentence per card on what it can prove and one line of counts: assigned, proven, paid, IGN.</p></div>
<div class="feat"><b>Several identities per card</b><p>Identities take turns on the card and each one votes and pays separately. 8 suits a big card, 2 a small one, 1 an integrated GPU.</p></div>
<div class="feat"><b>Hourly program, no pause</b><p>The node announces the next seed early. The worker compiles the next program in the background and swaps at the boundary while the current one mines.</p><a class="src" href="/bench#4-october-2026-first-hourly-program-swap-on-the-live-devnet-compile-ahead-no-pause-two-cards">log · 4 Oct 2026</a></div>
<div class="feat wide">
<b>The first live swap, 4 Oct 2026, three vendors</b>
<div class="tbl" style="margin-top:8px"><table>
<thead><tr><th>Card</th><th>Compile, ahead of time</th><th>Swap at the boundary</th><th>Rate before / after</th><th>Rejected</th></tr></thead>
<tbody>
<tr><td>Apple M5 Max, Metal</td><td class="num">82 ms</td><td class="num">0.01 ms</td><td class="num">26.7 / 26.7 MH/s</td><td class="num">0</td></tr>
<tr><td>RTX 5090, CUDA</td><td class="num">1,285 ms</td><td class="num">0.00 ms</td><td class="num">121.8 / 123.4 MH/s</td><td class="num">0</td></tr>
<tr><td>AMD Radeon integrated, OpenCL</td><td>prepared</td><td>no restart</td><td class="num">2.74 / 2.74 MH/s</td><td class="num">0</td></tr>
</tbody>
</table></div>
<a class="src" href="/bench#4-october-2026-first-hourly-program-swap-on-the-live-devnet-compile-ahead-no-pause-two-cards">log · 4 Oct 2026, live devnet v4, epoch boundary at DAA 3,600</a>
</div>
</div>
</div>
<div class="group reveal" id="updates">
<div class="g-head"><div class="eyebrow ember">03 · Updates</div><h3>Signed, over the air, at a safe moment</h3><p>Every app updates itself. This is also how a consensus upgrade reaches every node before its activation height.</p></div>
<div class="feats">
<div class="feat"><b>Signed over the air</b><p>The manifest is signed with an Ed25519 key compiled into the app. The app verifies the bytes before it reads them, then checks the download's size and hash.</p></div>
<div class="feat"><b>Installed at a safe moment</b><p>Node synced, no hourly boundary within 3 minutes, no worker starting. Machines take turns, each in its own minute of the hour, and never while the network lost over 30% of its identities in 10 minutes.</p></div>
<div class="feat"><b>Mining continues through an update</b><p>The download and the staging run while the card mines. The swap itself takes seconds. If the new version fails to start twice, the previous one comes back by itself.</p></div>
<div class="feat"><b>Urgent when it has to be</b><p>At once when a consensus activation is within 1,800 blocks or the version is below the minimum supported, or when you click Install now.</p></div>
</div>
</div>
<div class="group reveal" id="tuning">
<div class="g-head"><div class="eyebrow ember">04 · Faster, by measurement</div><h3>The fleet tunes itself</h3><p>Nothing here changes the hash. Every variant is the same program in a different shape for the compiler, checked bit for bit before it is timed.</p></div>
<div class="feats">
<div class="feat"><b>Variant racing every hour</b><p>At every hourly prepare the worker compiles the program in several shapes (unroll, load path, register budget, threads per group), times each for 2 seconds and keeps the fastest for the hour. Base keeps its place unless beaten.</p><a class="src" href="/bench#4-october-2026-miner-performance-variant-racing-metal-worker-on-the-m5-max-the-rtx-5090-job-is-ready-not-run">log · 4 Oct 2026</a></div>
<div class="feat"><b>Measured on Apple silicon</b><p>On the M5 Max, 256-thread groups ran 17.3% and 21.2% faster than base on two programs, under load from other work. The NVIDIA race is built and has not yet run on a GPU.</p><a class="src" href="/bench#4-october-2026-miner-performance-variant-racing-metal-worker-on-the-m5-max-the-rtx-5090-job-is-ready-not-run">log · 4 Oct 2026, ratios under contention</a></div>
<div class="feat"><b>Fleet tuning manifest</b><p>Every race is one record in the app log. The fleet's best variant per card model goes back out inside the signed update manifest, so a card starts from the known best and keeps racing.</p></div>
<div class="feat"><b>Ember Tune</b><p>Tunes every card for hashes per watt: once after install, then every 7 days, and after a driver or program change. The app steps the power limit and the core clock on the live kernel, 60 seconds a step, and keeps the point with the best MH per watt within 1% of the card's top rate. The memory clock is never touched; a step with a rejected hash, a hot GPU or a dragged memory clock is reverted and marked. Every result feeds a fleet prior per card model that the next card of that model starts from. One goal for all cards: Efficiency, Balanced or Maximum, with about how many pounds a day at that goal.</p><a class="src" href="/bench">log · 6 Oct 2026, Ember run 6</a></div>
<div class="feat"><b>Power control: one approval, then no prompts</b><p>Setting an NVIDIA power or clock limit needs administrator rights on Windows. The app asks once, when you turn Power control on, and registers a helper task; every cap after that is set through the task with no prompt. Off, NVIDIA cards are measured only. AMD cards are set through the app's own helper with no prompt at all.</p><a class="src" href="/bench">log · 6 Oct 2026, the task re-pointed and two caps set with no prompt</a></div>
<div class="feat wide">
<b>Ember Tune measured on the Windows rig, 6 Oct 2026</b>
<div class="tbl" style="margin-top:8px"><table>
<thead><tr><th>Card</th><th>Untuned</th><th>Tuned</th><th>Saved</th></tr></thead>
<tbody>
<tr><td>RTX 5090</td><td class="num">311.0 W<br>127.9 MH/s<br>0.411 MH/W</td><td class="num">226.8 W at 1,854 MHz, cap 100%<br>127.71 MH/s (0.15% less)<br>0.563 MH/W</td><td class="num">84 W<br>£0.56 a day at 28p/kWh</td></tr>
<tr><td>RTX 4070</td><td class="num">106.0 W<br>28.72 MH/s<br>0.271 MH/W</td><td class="num">75.6 W at 1,863 MHz, cap 50%<br>28.78 MH/s (none lost)<br>0.381 MH/W</td><td class="num">30 W<br>£0.20 a day at 28p/kWh</td></tr>
</tbody>
</table></div>
<p style="font-size:13px;color:var(--ash);margin-top:8px">The chosen clocks are the floor of the ladder, not the optimum: the next cut's ladder goes lower. The pounds are arithmetic from the saved watts at 28p per kWh; the app uses your price. The RX 9070 XT's run aborted at step 1 on a rule that asked a card reporting offsets for watts, fixed the same hour; its row is owed.</p>
<a class="src" href="/bench">log · 6 Oct 2026, Ember run 6 on the Windows rig (0.3.13 + tuning kit 6, elevated, one click)</a>
</div>
<div class="feat"><b>Latency work</b><p>A block built on a stale tip earns less. The miner is moving from polling to a template subscription and shorter jobs, so a new tip reaches the card in milliseconds. In progress, no number published yet.</p></div>
<div class="feat"><b>Remote signed jobs, opt in</b><p>Our own fleet only. A switch, "Allow remote jobs from Igneum (signed)", with the key's fingerprint beside it. Off aborts the running job and stops polling. Jobs run at most once each and only on the machines they name.</p></div>
</div>
</div>
<div class="group reveal" id="reliability">
<div class="g-head"><div class="eyebrow ember">05 · Reliability</div><h3>Watchdog, restart, clock</h3><p>Measured against a worker that misbehaves on command: these are recoveries in seconds, not hash rates.</p></div>
<div class="feats">
<div class="feat"><b>Watchdog per card</b><p>No status line for 90 seconds, or a hash rate of 0 for 60 seconds while synced: the miner is restarted once. If it recurs, that card is marked faulted with the reason and the other cards keep mining.</p><a class="src" href="/bench#4-october-2026-miner-fault-guards-and-the-app-watchdog-measured-against-a-fake-worker-miner-community-lead-app-owner">log · 4 Oct 2026</a></div>
<div class="feat"><b>Watchdog per node</b><p>A node that answers nothing for 120 seconds is restarted by the app, with a growing delay when it repeats. Measured: silent node to mining again in 160.0 s.</p><a class="src" href="/bench#4-october-2026-miner-fault-guards-and-the-app-watchdog-measured-against-a-fake-worker-miner-community-lead-app-owner">log · 4 Oct 2026</a></div>
<div class="feat"><b>Restart in order</b><p>Miners first, then the node, on quit and on update. What crashes comes back. A worker that restarts itself is left alone, so nothing is restarted twice.</p></div>
<div class="feat"><b>Clock check</b><p>A clock 60 seconds slow kept a node silently dead for 12 minutes. Now the app reads block times and an HTTPS Date header: over 5 seconds a warning, over 10 seconds Start is blocked and a Sync clock button appears.</p><a class="src" href="/bench#4-october-2026-a-node-60-s-behind-the-clock-is-silently-dead-the-rtx-5090-windows-rig-s-first-app-install">log · 4 Oct 2026</a></div>
<div class="feat wide">
<b>Recoveries measured, 4 Oct 2026</b>
<div class="tbl" style="margin-top:8px"><table>
<thead><tr><th>What the worker did</th><th>What the app did</th><th>Back to mining</th></tr></thead>
<tbody>
<tr><td>Reported 0 hashes</td><td>Restarted the miner once after the 60 s rule</td><td class="num">91.0 s</td></tr>
<tr><td>The same again inside five minutes</td><td>Marked the card faulted, no further restart; Resume cleared it</td><td class="num">75.4 s to faulted</td></tr>
<tr><td>The miner process stopped</td><td>Killed and restarted it after the 90 s rule</td><td class="num">101.4 s</td></tr>
<tr><td>The node process stopped</td><td>Restarted the node, which synced; mining resumed</td><td class="num">160.0 s</td></tr>
</tbody>
</table></div>
<a class="src" href="/bench#4-october-2026-miner-fault-guards-and-the-app-watchdog-measured-against-a-fake-worker-miner-community-lead-app-owner">log · 4 Oct 2026, a fake worker on a private test network, no real GPU</a>
</div>
</div>
</div>
<div class="group reveal" id="log">
<div class="g-head"><div class="eyebrow ember">06 · Published</div><h3>The log and the bench table</h3><p>Every number on this page has a row. Prototype numbers say so.</p></div>
<div class="feats">
<div class="feat"><b>Engineering log</b><p>Every benchmark and test the project has made, with the hardware and the commands. Newest at the bottom.</p><a class="src" href="/bench">/bench</a></div>
<div class="feat"><b>GPU bench table</b><p>One row per card, generator version and miner version: best MH/s, MH per watt where measured, the date and the log entry behind each number.</p><a class="src" href="/miners">/miners</a></div>
<div class="feat"><b>Your rows, from your machine</b><p>The app uploads its status lines once a minute under a per-install id. Rows marked "reported by the fleet" come from machines we do not own.</p></div>
</div>
</div> </div>
<ul class="lines">
<li><strong>01 · The card hashes</strong>A new random program every hour, compiled on your machine. 80% of each block to the card that finds it.</li>
<li><strong>02 · The same card proves</strong>The client switches to the shards the chain assigns to its keys, posts the proof, and goes back to hashing.</li>
<li><strong>03 · One address, in IGN</strong>Block rewards and proving payouts land on the address the app made for you. <a href="/wallet">The wallet</a> shows them.</li>
</ul>
</div> </div>
</section> </section>
<section id="ahead"> <section id="get" class="sec">
<div class="wrap"> <div class="wrap">
<div class="sec-head reveal"> <div class="sec-head">
<h2>Why <span data-product="full">Igneum Ember</span> stays ahead</h2> <div class="eyebrow">Downloads</div>
<p>Six levers, set on 4 October 2026. Each one is an idea in one line and a measured state. Nothing here claims fastest: the bench table says that, or it does not.</p> <h2>Get the miner</h2>
<p>Download only from this domain. Nobody from Igneum will ask for your seed. Every file is the one the app&rsquo;s signed manifest names, with its version and size.</p>
</div> </div>
<div class="tbl levers reveal"><table> <div class="grid c2">
<thead><tr><th>Lever</th><th>The idea</th><th>Measured state</th></tr></thead> <div>
<tbody> <div class="dl-list">
<tr><td><b>1 · Race the compiler every hour</b></td><td>For each new program, five to ten kernel variants are compiled, benched for two seconds each, and the winner is kept for the hour.</td><td>Measured on the Mac's Metal worker: the winning variant +17.3% on the genesis seed and +21.2% on the hourly seed over the base compile, under load from other work. The RTX 5090 race is prepared and not yet run. <a href="/bench#4-october-2026-miner-performance-variant-racing-metal-worker-on-the-m5-max-the-rtx-5090-job-is-ready-not-run">Log, 4 Oct 2026</a></td></tr> <a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v0.3.17 · 62.6 MB</span></a>
<tr><td><b>2 · Auto-tune that learns from the fleet</b></td><td>Apps report the race per card and program class, and every finished Ember Tune. The best settings come back down through the signed update manifest as defaults, so the miner gets faster and more efficient for everyone as the fleet grows.</td><td>Shipped. The fleet is still small, so no fleet table yet; the priors table on <a href="/miners#priors">/miners</a> fills as machines report.</td></tr> <a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg">macOS <span data-dl-meta="miner-mac">v0.3.17 · 41.9 MB</span></a>
<tr><td><b>3 · Hash per watt, not hash</b></td><td>Ember Tune: two knobs per card (power limit, core clock), the memory clock held, the point with the best MH per watt within 1% of the top rate kept and pinned. Miners pay for electricity; that is the number they compare.</td><td>Measured on the Windows rig, 6 Oct 2026: an RTX 5090 from 311.0 W to 226.8 W for 0.15% of its rate (0.411 to 0.563 MH/W); an RTX 4070 from 106.0 W to 75.6 W for none (0.271 to 0.381 MH/W). The chosen clocks are the ladder's floor, not the optimum. AMD through the app's own helper, no prompt; Apple silicon measures only. The <a href="#tuning">table above</a>.</td></tr> <a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz">Linux · HiveOS <span data-dl-meta="miner-hive">v0.3.17 · 24.7 MB</span></a>
<tr><td><b>4 · Template latency</b></td><td>Solo against the local node, a new template within 50 ms of a new tip, because a late block on a BlockDAG goes red and earns nothing.</td><td>Shipped in 0.3.6 (the miner-latency merge; the app is at 0.3.14). Approximate, from the 0.3.6 release plan and not yet in the engineering log: switched p50 46 to 52 ms on a three-node CPU run, 5 Oct 2026.</td></tr> </div>
<tr><td><b>5 · Never lose a second</b></td><td>Zero-loss hourly program swaps, fault guards, automatic restart, a CPU re-check of every found hash, per-worker health.</td><td>Shipped. Swap 0.01 ms on Metal and 0.00 ms on CUDA with 0 rejected blocks; recoveries in the <a href="#reliability">table above</a>. <a href="/bench#4-october-2026-first-hourly-program-swap-on-the-live-devnet-compile-ahead-no-pause-two-cards">Log, 4 Oct 2026</a></td></tr> <p class="notice" data-devnet-notice><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
<tr><td><b>6 · Prove it in public</b></td><td>The bench table per card, fed from the job channel. We claim fastest only when the table says so.</td><td>Live at <a href="/miners">/miners</a>, one row per card, generator version and miner version, each with its log entry.</td></tr> <p class="notice" data-testnet-notice>Public testnet: not yet open; the devnet build is here for people who want to look. The public testnet is weeks away: three seed nodes and the public RPC are up, and it opens when the go checklist closes.</p>
</tbody> <p class="notice">The protocol carries no fee. The one payment to the project is the Ember software&rsquo;s optional 1% dev fee, like other GPU miners, off with one flag: <a href="#fee">the fee, in full view</a>. Questions: <a href="https://discord.gg/igneum" rel="noopener">the Discord</a>.</p>
</table></div> </div>
<p class="pt reveal" style="margin-top:16px">The dev fee is the software's 1%, visible and switchable. The protocol carries no fee. <a href="#fee" style="color:var(--ember)">The fee, in full view</a>.</p> <div class="card hive" id="hive">
<div class="eyebrow">HiveOS · Flight Sheet</div>
<h3>Install on a Hive rig</h3>
<p>Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-0.3.17.tar.gz</code>. Miner name <code>igneum</code>, wallet and worker <code>0x&lt;your 40-hex payout address&gt;.%WORKER_NAME%</code>. Hive itself is untested: report what breaks.</p>
<p class="note" style="margin:0">sha256 <span class="mono" data-dl-sha="miner-hive" style="overflow-wrap:anywhere">b283ba0c506bdbd002b512157834a3a242717aa5ea0f410517dffb8e685f642d</span></p>
</div>
</div>
<p class="yourcard" data-yourcard style="margin-top:var(--s-5)">Your card: pending</p>
<p class="note">Testnet coin for testing: <a href="/faucet">the faucet</a> sends 10 IGN per address per day. Any 4 GB card at launch. The dataset starts at 2 GB and grows on a schedule fixed at the testnet genesis (2 GB, doubling at years 4, 12 and 28), so a 4 GB card mines about four years and an 8 GB card about twelve, approximate.</p>
</div> </div>
</section> </section>
<section id="fee"> <section id="fee" class="sec">
<div class="wrap"> <div class="wrap">
<div class="sec-head reveal"> <div class="sec-head">
<div class="eyebrow">The dev fee</div>
<h2>The fee, in full view</h2> <h2>The fee, in full view</h2>
<p>The protocol carries no fee: no dev fund, no fee to any team, foundation or fund. The software fee is the miner app's, like every other GPU miner's, and one flag turns it off.</p> <p>The protocol carries no fee: no dev fund, no fee to any team, foundation or fund. The software fee is the miner app&rsquo;s, like every other GPU miner&rsquo;s, and one flag turns it off.</p>
</div> </div>
<div class="fee reveal"> <div class="feecard">
<div class="card" style="display:flex;flex-direction:column;gap:16px"> <div class="card">
<p style="font-size:15px;color:var(--ink-2)">The <span data-product="name">Ember</span> software takes a visible, switchable 1% dev fee, the norm for GPU miners. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software. The choice is a template counter, never a random draw, so it is exactly 1 in 100 and anyone can audit it from the source or from the chain. A fee block still adds to your finality weight; the only thing that moves is who the execution layer pays for that one block.</p> <p>The <span data-product="name">Ember</span> software takes a visible, switchable 1% dev fee, the norm for GPU miners. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<div class="tbl"><table style="min-width:0"> <div class="tbl"><table style="min-width:0">
<thead><tr><th>Where</th><th>Off with</th></tr></thead> <thead><tr><th>Where</th><th>Off with</th></tr></thead>
<tbody> <tbody>
@ -456,54 +215,53 @@ pre b{color:var(--molten);font-weight:500}
<tr><td>HiveOS, extra config</td><td class="mono">DEV_FEE=0</td></tr> <tr><td>HiveOS, extra config</td><td class="mono">DEV_FEE=0</td></tr>
</tbody> </tbody>
</table></div> </table></div>
<p style="font-size:14px;color:var(--ash)">Measured on a test network, 4 Oct 2026: 9 fee blocks in the 785 blocks of two fee-paying miners (1.146%); the control miner at <span class="mono">--dev-fee 0</span> paid none; the miners' counters and both nodes agree. <a href="/bench#4-october-2026-evening-the-software-dev-fee-measured-on-a-test-network-9-fee-blocks-in-785-the-chain-and-the-miners-counters-agree" style="color:var(--ember)">The log entry</a>.</p> <p class="note">Measured on a test network, 4 Oct 2026: 9 fee blocks in the 785 blocks of two fee-paying miners (1.146%); the control miner at <span class="mono">--dev-fee 0</span> paid none; the miners&rsquo; counters and both nodes agree. <a href="/bench">The log</a>.</p>
</div> </div>
<div style="display:flex;flex-direction:column;gap:14px"> <div class="card">
<div class="card" style="display:flex;flex-direction:column;gap:10px"> <div class="eyebrow">Earnings, as the app shows it</div>
<div class="eyebrow">Earnings, as the app shows it</div> <div class="switch"><span class="track"></span><span>Dev fee: 1 block in 100 pays the people who make this app</span></div>
<div class="switch"><span class="track"></span><span>Dev fee: 1 block in 100 pays the miner software's author</span></div> <p class="note">The network itself takes nothing. This is the app&rsquo;s fee, the same way every mining app takes one. This switch turns it off.</p>
<p style="font-size:14px;color:var(--ash)">The miner software's fee, the same way every GPU miner takes one. The protocol takes none. This switch turns it off.</p> <div class="eyebrow" style="margin-top:var(--s-5)">What the miner prints at start</div>
</div>
<div class="card" style="display:flex;flex-direction:column;gap:10px">
<div class="eyebrow">What the miner prints at start</div>
<pre>dev fee 1% (1 block in 100) to 0x&lt;address&gt;; --dev-fee 0 turns it off</pre> <pre>dev fee 1% (1 block in 100) to 0x&lt;address&gt;; --dev-fee 0 turns it off</pre>
<pre>dev fee off (--dev-fee 0); the default is 1% (1 block in 100) to 0x&lt;address&gt;</pre>
<p style="font-size:13px;color:var(--ash)">Each fee block is logged as it is accepted. <span class="mono">igneum-miner payouts</span> lists blocks per payout address over every block the node holds, with the dev address tagged.</p>
</div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
<section id="get"> <section id="shots" class="sec">
<div class="wrap"> <div class="wrap">
<div class="sec-head reveal"> <div class="sec-head">
<h2>Get the miner</h2> <div class="eyebrow">The app</div>
<p>Download only from this domain. Nobody from Igneum will ask for your seed. Every file below is the one the app's signed manifest names, with its version and size.</p> <h2>Four pages. Every card is one row.</h2>
<p data-testnet-notice style="margin-top:10px;font-weight:600;color:var(--molten)">Public testnet: not yet open; the devnet build is here for people who want to look.</p> <p>Your rate, what it costs a day, and the chain drawn live with your own blocks ringed. <a href="/app">Every page of the app</a>, light and dark.</p>
<p data-devnet-notice style="margin-top:6px;font-weight:600;color:var(--molten)">Devnet: coins have no value and the chain may be reset.</p>
</div> </div>
<div class="cta reveal" style="align-items:center"> <div class="shots3">
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M3 5.5l7.5-1v7H3zM11.5 4.3L21 3v8.5h-9.5zM3 12.5h7.5v7L3 18.5zM11.5 12.5H21V21l-9.5-1.3z"/></svg>Windows <span data-dl-meta="miner-windows" style="font-weight:400;opacity:.85">v0.3.14 · 45.4 MB</span></a> <figure class="frame">
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg" class="btn primary"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M16.4 12.6c0-2.3 1.9-3.4 2-3.5-1.1-1.6-2.8-1.8-3.4-1.8-1.4-.1-2.8.8-3.5.8-.7 0-1.8-.8-3-.8-1.5 0-3 .9-3.8 2.3-1.6 2.8-.4 7 1.2 9.3.8 1.1 1.7 2.4 2.9 2.3 1.2 0 1.6-.7 3-.7s1.8.7 3 .7c1.3 0 2-1.1 2.8-2.3.9-1.3 1.2-2.6 1.3-2.6-.1 0-2.5-.9-2.5-3.7zM14.1 5.8c.6-.8 1.1-1.9.9-3-.9 0-2 .6-2.7 1.4-.6.7-1.1 1.8-1 2.9 1.1.1 2.1-.5 2.8-1.3z"/></svg>macOS <span data-dl-meta="miner-mac" style="font-weight:400;opacity:.85">v0.3.14 · 41.9 MB</span></a> <div class="bar"><i></i><i></i><i></i><b>Overview</b></div>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M12 2c-2.4 0-4 1.9-4 4.6 0 1.2.2 2 0 2.8-.6 1.4-2.1 2.9-2.6 4.9-.3 1.1-.1 2 .3 2.6-.6.4-1.3 1-1.1 1.7.3 1 2.1 1.2 3.2 1.8.7.4 1.5.6 2.1.1.6.2 1.3.3 2.1.3s1.5-.1 2.1-.3c.6.5 1.4.3 2.1-.1 1.1-.6 2.9-.8 3.2-1.8.2-.7-.5-1.3-1.1-1.7.4-.6.6-1.5.3-2.6-.5-2-2-3.5-2.6-4.9-.2-.8 0-1.6 0-2.8C16 3.9 14.4 2 12 2zm-1.4 4.2c.5 0 .8.5.8 1.2s-.3 1.2-.8 1.2-.8-.5-.8-1.2.3-1.2.8-1.2zm2.8 0c.5 0 .8.5.8 1.2s-.3 1.2-.8 1.2-.8-.5-.8-1.2.3-1.2.8-1.2zM12 9.3c.9 0 1.9.5 1.9 1s-1 1.2-1.9 1.2-1.9-.7-1.9-1.2 1-1 1.9-1zm0 3.4c2.2 0 3.6 2.6 3.6 4.4 0 1.5-1.6 2.3-3.6 2.3s-3.6-.8-3.6-2.3c0-1.8 1.4-4.4 3.6-4.4z"/></svg>Linux <span data-dl-meta="miner-hive" style="font-weight:400;opacity:.85">v0.3.14 · 24.7 MB</span></a> <img src="/img/app-overview-dark.webp" width="1440" height="912" class="img-dark" alt="The Overview page of 0.3.16: an RTX 5090 at 103 MH/s and 317 W, 0.32 MH/W, 62 blocks this run and 91,521 lifetime, the Stop mining button, the chain drawn live with this rig's blocks ringed and locked checkpoints, the node synced with 5 peers" loading="lazy" decoding="async">
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><path d="M12 2.5l8.2 4.75v9.5L12 21.5l-8.2-4.75v-9.5z"/><path d="M12 7.5l4.3 2.5v5L12 17.5l-4.3-2.5v-5z"/></svg>HiveOS <span data-dl-meta="miner-hive" style="font-weight:400;opacity:.85">v0.3.14 · 24.7 MB</span></a> <img src="/img/app-overview-light.webp" width="1440" height="912" class="img-light" alt="The Overview page of 0.3.16 in light mode: an RTX 5090 at 103 MH/s and 317 W, the chain drawn live with this rig's blocks ringed" loading="lazy" decoding="async">
<figcaption>0.3.16, rendered from the RTX 5090 Windows rig&rsquo;s live state at 23:33 UK, 6 October 2026.</figcaption>
</figure>
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Cards</b></div>
<img src="/img/app-cards-dark.webp" width="1440" height="1381" class="img-dark" alt="The Cards page: Ember Tune with Efficiency, Balanced and Maximum goals; one row per card with its rate, watts, hashes per watt, cost a day and temperature; the RTX 5090's details open with its power cap, goal, Retune and the tune curve" loading="lazy" decoding="async">
<img src="/img/app-cards-light.webp" width="1440" height="912" class="img-light" alt="The Cards page of 0.3.16 in light mode: Ember Tune, the RTX 5090 at 103 MH/s, 322 to 317 W, 68 degrees, its tune line and Retune button; the integrated AMD graphics off" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">The Cards page, from the app in development.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig&rsquo;s live state at 23:33 UK, 6 October 2026.</span></figcaption>
</figure>
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Overview · Mac</b></div>
<img src="/img/app-overview-mac-dark.webp" width="1440" height="900" class="img-dark" alt="The Overview page on an Apple M5 Max: 18.3 MH/s, 6,789 blocks this run, the chain drawn live with this Mac's blocks in the lane marked you, locked checkpoints at 71% of weight, the node synced with 4 peers" loading="lazy" decoding="async">
<img src="/img/app-overview-mac-light.webp" width="1440" height="1259" class="img-light" alt="The Overview page in light mode: 511 MH/s from one of three cards mining, 629 W, £4.23 a day of electricity, 6,784 blocks this run, the chain drawn live with this rig's blocks marked you, the node line and the activity log" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">An Apple M5 Max mining at 18.3 MH/s, from the app in development.</span><span class="cap-light">A three-card rig at 511 MH/s, from the app in development.</span></figcaption>
</figure>
</div> </div>
<div class="card reveal" id="hive" style="margin-top:28px;overflow-wrap:anywhere;word-break:break-word;min-width:0">
<div class="eyebrow">HiveOS · Flight Sheet</div>
<h3 style="margin:8px 0 10px">Install on a Hive rig</h3>
<p style="font-size:15px;color:var(--ink-2)">Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-0.3.14.tar.gz</code>. Miner name <code>igneum</code>, wallet and worker <code>0x&lt;your 40-hex payout address&gt;.%WORKER_NAME%</code>, pool URL <code>grpc://&lt;your node&gt;:26610</code> or <code>local</code> for the bundled node, extra config <code>DEV_FEE=1 IDENTITIES=8 WORKER=auto VOTE=1</code>. The Linux button above is the same archive: the Linux miner, node and both GPU workers. Hive itself is untested so far. Report what breaks.</p>
<p style="font-size:13px;color:var(--ash);margin-top:8px;overflow-wrap:anywhere">sha256 <span class="mono" data-dl-sha="miner-hive" style="word-break:break-all">c4699f2487580dcf06b5c22a36a2eb8383a3307b6137699c76c45eefebdd4c88</span></p>
</div>
<p class="pt reveal" style="margin-top:20px">Testnet coin for testing: <a href="/faucet" style="color:var(--ember)">the faucet</a> sends 10 IGN per address per day. Any 4 GB card at launch. The dataset starts at 2 GB and grows (the proposed schedule, fixed at the testnet genesis: 2 GB, doubling at years 4, 12 and 28), so a 4 GB card mines for about four years, approximate. Updates arrive signed; the app installs them itself. The <a href="/wallet" style="color:var(--ember)">wallet</a> reads this machine's node when the miner is installed.</p>
<a href="/litepaper#miners" class="lp reveal">Read more in the litepaper</a>
</div> </div>
</section> </section>
</main> </main>
<div class="band"> <div class="band">
<div class="wrap"> <div class="wrap">
<div style="display:flex;flex-direction:column;gap:8px"> <div>
<h2>Every number here has a row.</h2> <h2>Every number here has a row.</h2>
<p>The engineering log holds the commands and the hardware behind each one. The bench table compares cards, not miners, because there is no other Igneum miner yet.</p> <p>The engineering log holds the commands and the hardware behind each one. The bench table compares cards, not miners, because there is no other Igneum miner yet.</p>
</div> </div>
@ -511,6 +269,8 @@ pre b{color:var(--molten);font-weight:500}
</div> </div>
</div> </div>
<a class="dl-bar" href="#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v0.3.17 · 62.6 MB</span></a>
<!-- footer:start --> <!-- footer:start -->
<footer class="foot"> <footer class="foot">
<div class="wrap"> <div class="wrap">
@ -532,6 +292,7 @@ pre b{color:var(--molten);font-weight:500}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>
@ -570,10 +331,15 @@ pre b{color:var(--molten);font-weight:500}
})(); })();
</script> </script>
<!-- footer:end --> <!-- footer:end -->
<script src="/yourcard.js" defer></script>
<script> <script>
(function(){ (function(){
var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.12}); // the card table: a block about every N at the network's hash rate, read every 15 s with the your-card line
document.querySelectorAll('.reveal').forEach(function(el){io.observe(el);}); function dur(sec){if(!(sec>0))return 'pending';if(sec<90)return Math.round(sec)+' s';if(sec<5400)return Math.round(sec/60)+' min';if(sec<172800){var h=Math.floor(sec/3600),m=Math.round((sec%3600)/60);return h+' h'+(m?' '+m+' min':'');}return Math.round(sec/86400)+' days';}
function fill(net){document.querySelectorAll('#cards tr[data-mhs]').forEach(function(tr){var r=parseFloat(tr.getAttribute('data-mhs'))*1e6,el=tr.querySelector('.eta');if(el)el.textContent=net&&r?dur(net/r):'pending';});}
function poll(){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){if(d&&d.ok&&d.state&&d.state.hashes_per_second_estimate>0)fill(d.state.hashes_per_second_estimate);}).catch(function(){});}
poll();setInterval(function(){if(!document.hidden)poll();},15000);
})(); })();
</script> </script>
</body> </body>

View file

@ -92,24 +92,24 @@ table{min-width:560px}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner" aria-current="page">Miner</a> <a href="/miner" data-nav="miner" aria-current="page">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -173,6 +173,7 @@ table{min-width:560px}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -18,6 +18,7 @@
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -7,24 +7,24 @@
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>

View file

@ -60,24 +60,24 @@
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -155,6 +155,7 @@
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

View file

@ -228,3 +228,63 @@ input:focus,select:focus,textarea:focus{border-color:var(--line-2)}
tr{break-inside:avoid} tr{break-inside:avoid}
canvas{display:none} canvas{display:none}
} }
/* ---------- 9. product pages: miner, app, wallet, live (7 Oct 2026) ---------- */
.phero{position:relative;padding:calc(var(--s-6) + 16px) 0 var(--s-6);overflow:hidden}
.phero::before{content:"";position:absolute;inset:auto -10% -30% 40%;height:70%;background:radial-gradient(closest-side,var(--ember-12),transparent);pointer-events:none}
.phero .wrap{position:relative;display:grid;gap:var(--s-6);grid-template-columns:1fr;align-items:center}
@media (min-width:980px){.phero .wrap{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:var(--s-6) 56px}}
.phero h1{margin:0 0 var(--s-4)}
.phero .lead{margin:0 0 var(--s-5)}
.phero .os{display:flex;flex-wrap:wrap;gap:6px 16px;font:400 var(--t-sm)/1.4 var(--f-mono);color:var(--ash);margin-top:var(--s-4)}
.frame{position:relative;border:1px solid var(--line-2);border-radius:var(--r-card);background:var(--obsidian);box-shadow:0 30px 80px var(--shadow);overflow:hidden;margin:0;min-width:0}
.frame .bar{height:32px;display:flex;align-items:center;gap:7px;padding:0 14px;border-bottom:1px solid var(--line);background:var(--graphite)}
.frame .bar i{width:10px;height:10px;border-radius:50%;background:var(--line-2);display:block}
.frame .bar b{margin-left:auto;font:500 11px/1 var(--f-mono);letter-spacing:.12em;color:var(--ash);text-transform:uppercase}
.frame img{display:block;width:100%;height:auto}
.frame figcaption{padding:10px 14px;font:400 13px/1.5 var(--f-mono);color:var(--ash);border-top:1px solid var(--line)}
.frame.phone{max-width:300px;margin:0 auto}
.frame .img-light,.frame .cap-light{display:none}
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]) .frame .img-dark,:root:not([data-theme="dark"]) .frame .cap-dark{display:none}:root:not([data-theme="dark"]) .frame .img-light{display:block}:root:not([data-theme="dark"]) .frame .cap-light{display:inline}}
:root[data-theme="light"] .frame .img-dark,:root[data-theme="light"] .frame .cap-dark{display:none}:root[data-theme="light"] .frame .img-light{display:block}:root[data-theme="light"] .frame .cap-light{display:inline}
.glow{position:relative}
.glow::before{content:"";position:absolute;inset:12% -6% -8% -6%;background:radial-gradient(closest-side,var(--ember-12),transparent);filter:blur(12px);pointer-events:none}
.shots3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-4)}
@media (max-width:900px){.shots3{grid-template-columns:1fr}}
.dl-list{display:flex;flex-direction:column;gap:var(--s-2);margin:var(--s-4) 0}
.dl-list a{display:flex;justify-content:space-between;align-items:center;gap:var(--s-3);padding:12px 16px;border:1px solid var(--line);border-radius:var(--r-row);background:var(--graphite);color:var(--bone);font-weight:600;min-width:0}
.dl-list a:hover{text-decoration:none;border-color:var(--line-2);background:var(--hover)}
.dl-list a.primary{background:var(--ember);border-color:var(--ember);color:var(--ember-ink)}
.dl-list a.primary:hover{background:var(--ember-hi)}
.dl-list a span{font:400 var(--t-sm)/1.4 var(--f-mono);opacity:.85;text-align:right}
.dl-list a[data-dl-missing]{opacity:.55}
.notice{font-size:var(--t-base);color:var(--ink-2);margin:var(--s-3) 0 0}
.notice b{color:var(--bone);font-weight:600}
.lines{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-3)}
.lines li{background:var(--row);border:1px solid var(--line);border-radius:var(--r-row);padding:var(--s-4);min-width:0;color:var(--ink-2);font-size:var(--t-base);line-height:1.5}
.lines strong{color:var(--bone);display:block;margin-bottom:4px}
.lines .src{display:block;font:400 var(--t-xs)/1.4 var(--f-mono);margin-top:6px}
.lines.c2{grid-template-columns:repeat(2,minmax(0,1fr))}
.lines.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:900px){.lines,.lines.c2,.lines.c4{grid-template-columns:1fr}}
.feature{display:grid;grid-template-columns:1fr;gap:var(--s-5);align-items:center}
@media (min-width:980px){.feature{grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr)}.feature.flip>.frame{order:2}}
.feature h2{margin-bottom:var(--s-3)}
.feature>div>p{color:var(--ink-2)}
.feature .lines{grid-template-columns:1fr;margin-top:var(--s-4)}
.yourcard{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2) var(--s-3);background:var(--row);border:1px solid var(--line);border-radius:var(--r-row);padding:var(--s-3) var(--s-4);font-size:var(--t-base);color:var(--ink-2)}
.yourcard select{width:auto;padding:6px 10px;font:500 var(--t-base)/1.3 var(--f-sans)}
.yourcard b{color:var(--bone);font-weight:600}
.yourcard .eta{font-family:var(--f-mono);color:var(--molten-text)}
.tick{transition:color .5s ease}.tick.flash{color:var(--molten-text);transition:none}
.dl-bar{display:none}
@media (max-width:720px){.dl-bar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:30;justify-content:space-between;align-items:center;gap:var(--s-3);padding:10px var(--gutter) calc(10px + env(safe-area-inset-bottom));background:var(--top-bg);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--line)}.dl-bar span{font:400 var(--t-sm)/1.4 var(--f-mono);color:var(--ash);min-width:0}body.has-dl-bar{padding-bottom:72px}}
.band{background:var(--ember);color:var(--ember-ink)}
.band .wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-5);padding-top:56px;padding-bottom:56px}
.band h2{color:var(--ember-ink);font-weight:900;margin-bottom:var(--s-2)}
.band p{margin:0;max-width:56ch}
.btn.dark{background:var(--obsidian);color:var(--bone);border-color:var(--obsidian)}
.btn.dark:hover{background:var(--graphite);border-color:var(--graphite)}
.switch{display:inline-flex;align-items:center;gap:12px;font-size:var(--t-base);color:var(--bone)}
.switch .track{width:44px;height:26px;border-radius:13px;background:var(--ember);position:relative;flex:0 0 44px}
.switch .track::after{content:"";position:absolute;top:3px;right:3px;width:20px;height:20px;border-radius:50%;background:var(--bone)}

View file

@ -8,4 +8,7 @@
<url><loc>https://igneum.network/miners</loc><lastmod>2026-10-04</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url> <url><loc>https://igneum.network/miners</loc><lastmod>2026-10-04</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/wallet</loc><lastmod>2026-10-05</lastmod><changefreq>monthly</changefreq><priority>0.6</priority></url> <url><loc>https://igneum.network/wallet</loc><lastmod>2026-10-05</lastmod><changefreq>monthly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/metamask</loc><lastmod>2026-10-05</lastmod><changefreq>monthly</changefreq><priority>0.4</priority></url> <url><loc>https://igneum.network/metamask</loc><lastmod>2026-10-05</lastmod><changefreq>monthly</changefreq><priority>0.4</priority></url>
<url><loc>https://igneum.network/miner</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url>
<url><loc>https://igneum.network/app</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url>
<url><loc>https://igneum.network/ledger</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
</urlset> </urlset>

View file

@ -81,6 +81,7 @@ section+section{padding-top:0;scroll-margin-top:var(--sm)}
.hero p.lead{font-size:clamp(17px,2vw,20px);color:var(--ink-2);max-width:52ch} .hero p.lead{font-size:clamp(17px,2vw,20px);color:var(--ink-2);max-width:52ch}
.hero .os{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:14px;color:var(--ash)} .hero .os{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:14px;color:var(--ash)}
.shot{position:relative;min-width:0} .shot{position:relative;min-width:0}
@media (max-width:720px){.shot::before{display:none}}
.shot::before{content:'';position:absolute;inset:12% -6% -8% -6%;background:radial-gradient(closest-side,rgba(242,84,27,.22),rgba(242,84,27,0));filter:blur(12px);pointer-events:none} .shot::before{content:'';position:absolute;inset:12% -6% -8% -6%;background:radial-gradient(closest-side,rgba(242,84,27,.22),rgba(242,84,27,0));filter:blur(12px);pointer-events:none}
.frame{position:relative;border:1px solid var(--line-2);border-radius:16px;background:#0C0C0E;box-shadow:0 30px 80px rgba(0,0,0,.55);overflow:hidden} .frame{position:relative;border:1px solid var(--line-2);border-radius:16px;background:#0C0C0E;box-shadow:0 30px 80px rgba(0,0,0,.55);overflow:hidden}
.frame .bar{height:32px;display:flex;align-items:center;gap:7px;padding:0 14px;border-bottom:1px solid var(--line);background:#121215} .frame .bar{height:32px;display:flex;align-items:center;gap:7px;padding:0 14px;border-bottom:1px solid var(--line);background:#121215}
@ -135,24 +136,24 @@ td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
</a> </a>
<div class="links" id="nav-links"> <div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet" aria-current="page">Wallet</a> <a href="/wallet" data-nav="wallet" aria-current="page">Wallet</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/live" data-nav="live">Live devnet</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="/ledger" data-nav="ledger">Ledger</a>
</div> </div>
<a href="/miner#get" class="btn primary small cta">Download the miner</a> <a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button> <button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Menu"><span class="bars"></span></button>
<div class="nav-sheet" id="nav-sheet"> <div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a> <a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/miner" data-nav="miner">Miner</a> <a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a> <a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/bench" data-nav="bench">Engineering log</a>
<a href="/evidence" data-nav="evidence">Evidence</a> <a href="/evidence" data-nav="evidence">Evidence</a>
<a href="/explorer">Explorer</a> <a href="/explorer">Explorer</a>
<a href="/ledger">Ledger</a>
<a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a> <a href="https://github.com/igneum-network/spec" rel="noopener">GitHub</a>
<a href="/miner#get" class="btn primary">Download the miner</a> <a href="/miner#get" class="btn primary">Download the miner</a>
</div> </div>
@ -308,7 +309,7 @@ td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
<p data-devnet-notice style="margin-top:6px;font-weight:600;color:var(--molten)">Devnet: coins have no value and the chain may be reset.</p> <p data-devnet-notice style="margin-top:6px;font-weight:600;color:var(--molten)">Devnet: coins have no value and the chain may be reset.</p>
</div> </div>
<div class="cta reveal" style="align-items:center"> <div class="cta reveal" style="align-items:center">
<a data-dl="wallet-mac" href="https://dl.igneum.network/public/igneum-wallet-mac.dmg" class="btn primary"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M16.4 12.6c0-2.3 1.9-3.4 2-3.5-1.1-1.6-2.8-1.8-3.4-1.8-1.4-.1-2.8.8-3.5.8-.7 0-1.8-.8-3-.8-1.5 0-3 .9-3.8 2.3-1.6 2.8-.4 7 1.2 9.3.8 1.1 1.7 2.4 2.9 2.3 1.2 0 1.6-.7 3-.7s1.8.7 3 .7c1.3 0 2-1.1 2.8-2.3.9-1.3 1.2-2.6 1.3-2.6-.1 0-2.5-.9-2.5-3.7zM14.1 5.8c.6-.8 1.1-1.9.9-3-.9 0-2 .6-2.7 1.4-.6.7-1.1 1.8-1 2.9 1.1.1 2.1-.5 2.8-1.3z"/></svg>macOS <span data-dl-meta="wallet-mac" style="font-weight:400;opacity:.85">v0.1.4 · 19.6 MB</span></a> <a data-dl="wallet-mac" href="https://dl.igneum.network/public/igneum-wallet-mac.dmg" class="btn primary"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M16.4 12.6c0-2.3 1.9-3.4 2-3.5-1.1-1.6-2.8-1.8-3.4-1.8-1.4-.1-2.8.8-3.5.8-.7 0-1.8-.8-3-.8-1.5 0-3 .9-3.8 2.3-1.6 2.8-.4 7 1.2 9.3.8 1.1 1.7 2.4 2.9 2.3 1.2 0 1.6-.7 3-.7s1.8.7 3 .7c1.3 0 2-1.1 2.8-2.3.9-1.3 1.2-2.6 1.3-2.6-.1 0-2.5-.9-2.5-3.7zM14.1 5.8c.6-.8 1.1-1.9.9-3-.9 0-2 .6-2.7 1.4-.6.7-1.1 1.8-1 2.9 1.1.1 2.1-.5 2.8-1.3z"/></svg>macOS <span data-dl-meta="wallet-mac" style="font-weight:400;opacity:.85">v0.1.5 · 20.1 MB</span></a>
<span class="btn" aria-disabled="true" style="opacity:.7;cursor:default"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M3 5.5l7.5-1v7H3zM11.5 4.3L21 3v8.5h-9.5zM3 12.5h7.5v7L3 18.5zM11.5 12.5H21V21l-9.5-1.3z"/></svg>Windows <span style="font-weight:400;opacity:.85">next</span></span> <span class="btn" aria-disabled="true" style="opacity:.7;cursor:default"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M3 5.5l7.5-1v7H3zM11.5 4.3L21 3v8.5h-9.5zM3 12.5h7.5v7L3 18.5zM11.5 12.5H21V21l-9.5-1.3z"/></svg>Windows <span style="font-weight:400;opacity:.85">next</span></span>
<a href="#metamask" class="btn"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><path d="M4 4l5 3h6l5-3-1.5 7 1.5 5-3 4H7l-3-4 1.5-5z"/><path d="M9 13h2M13 13h2"/></svg>MetaMask</a> <a href="#metamask" class="btn"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><path d="M4 4l5 3h6l5-3-1.5 7 1.5 5-3 4H7l-3-4 1.5-5z"/><path d="M9 13h2M13 13h2"/></svg>MetaMask</a>
</div> </div>
@ -349,6 +350,7 @@ td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
<nav class="foot-col" aria-label="Run"> <nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div> <div class="eyebrow">Run</div>
<a href="/miner">The miner</a> <a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a> <a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a> <a href="/miners">GPU bench table</a>
<a href="/miner#fee">The dev fee</a> <a href="/miner#fee">The dev fee</a>

17
site/yourcard.js Normal file
View file

@ -0,0 +1,17 @@
/* The "your card" line: a measured card, and how often it finds a block at the network's hash rate right now. One block a
second is the target, so the wait is network hashes per second over the card's rate. The rates are the bench table's
measured numbers (site/miners.html); nothing here is a promise. Reads /api/live every 15 s. */
(function () {
var CARDS = [['NVIDIA RTX 5090', 127.7], ['NVIDIA RTX 4070', 28.8], ['Apple M5 Max', 26.7], ['AMD RX 9070 XT', 17.8]];
var els = document.querySelectorAll('[data-yourcard]'); if (!els.length) return;
var net = null, chosen = (function () { try { return localStorage.getItem('igneum-card'); } catch (e) { return null; } })();
function dur(sec) { if (!(sec > 0)) return 'pending'; if (sec < 90) return Math.round(sec) + ' s'; if (sec < 5400) return Math.round(sec / 60) + ' min'; if (sec < 172800) { var h = Math.floor(sec / 3600), m = Math.round((sec % 3600) / 60); return h + ' h' + (m ? ' ' + m + ' min' : ''); } return Math.round(sec / 86400) + ' days'; }
function render() { els.forEach(function (el) { var r = parseFloat(el.querySelector('select').value) * 1e6, eta = el.querySelector('.eta'); eta.textContent = net && r ? 'every ' + dur(net / r) : 'pending'; }); }
els.forEach(function (el) {
el.innerHTML = '<b>Your card</b><select aria-label="Your card">' + CARDS.map(function (c) { return '<option value="' + c[1] + '"' + (chosen === c[0] ? ' selected' : '') + '>' + c[0] + ' \u00b7 ' + c[1] + ' MH/s</option>'; }).join('') + '</select><span>finds a block about <span class="eta">pending</span> at the network\u2019s hash rate right now.</span>';
el.querySelector('select').addEventListener('change', function (e) { var name = e.target.options[e.target.selectedIndex].text.split(' \u00b7 ')[0]; try { localStorage.setItem('igneum-card', name); } catch (x) {} document.querySelectorAll('[data-yourcard] select').forEach(function (s) { s.value = e.target.value; }); render(); });
});
function poll() { fetch('/api/live?window=30', { cache: 'no-store' }).then(function (r) { return r.json(); }).then(function (d) { if (d && d.ok && d.state && d.state.hashes_per_second_estimate > 0) { net = d.state.hashes_per_second_estimate; render(); } }).catch(function () {}); }
poll(); setInterval(function () { if (!document.hidden) poll(); }, 15000);
window.IgneumYourCard = { update: function (h) { if (h > 0) { net = h; render(); } } };
})();

Some files were not shown because too many files have changed in this diff Show more