Merge site-2.0-wipe 8cc205ab into master (gate: green on 8cc205ab, recorded by tools/ci/pre-push.sh; landed on the box mirror)

This commit is contained in:
igneum-labs 2026-10-08 16:21:53 +00:00
commit ea27fdcd76
74 changed files with 1648 additions and 5076 deletions

View file

@ -6,11 +6,11 @@
|---|---|
| `build.md` | [igneum.network/build](https://igneum.network/build): what is different (built to prove every block, a lock in minutes, nothing to stake, the EVM unchanged), the chain ids and endpoints, the wallet, the explorer, the faucet, the five-minute contract, the browser verifier |
| `grants.md` | [igneum.network/grants](https://igneum.network/grants): the tiers, what a grant is, how to apply, the review, the honest lines |
| `first-contract.md`, `first-contract-test.sh` | the walkthrough and the script that runs it end to end on Devnet 3 from a build box; the PASS line is the test record |
| `rpc.md` | the JSON-RPC method list as the node serves it, read from a Devnet 3 node, with the probe |
| `faucet.md` | the Devnet 3 faucet: rules, where it runs, how it is funded |
| `first-contract.md`, `first-contract-test.sh` | the walkthrough and the script that runs it end to end on the devnet from a build box; the PASS line is the test record |
| `rpc.md` | the JSON-RPC method list as the node serves it, read from a devnet node, with the probe |
| `faucet.md` | The devnet faucet: rules, where it runs, how it is funded |
| `verify-a-block.md` | the in-browser checkpoint verifier, twelve lines |
The faucet service is `infra/build-server/faucet/`. The grant application template is `.forgejo/issue_template/grant.md`.
Served-text rules (the site audit reads every page before it lands): no em dashes, short sentences, one to three points per block, nothing that reads as an offer, a price or a promise of value; devnet and testnet coins have no value; no amount, price or date is promised.
Served-text rules (the site audit reads every page before it lands): no em dashes, short sentences, one to three points per block, nothing that reads as an offer, a price or a promise of value; devnet coins have no value; no amount, price or date is promised.

32
docs/build/build.md vendored
View file

@ -4,7 +4,7 @@ This file is the source of [igneum.network/build](https://igneum.network/build).
## What is different
**Every block is built to be proven.** A chain block carries a zero-knowledge proof of its execution. The miners are the provers: the same cards that find blocks prove them, in shards. On Devnet 3 a share of blocks carries a proof today; the live page shows the share and the lag, and the design target at launch is under a minute. Full nodes execute every block themselves, so a bad proof is a light-client problem and never a chain split.
**Every block is built to be proven.** A chain block carries a zero-knowledge proof of its execution. The miners are the provers: the same cards that find blocks prove them, in shards. On the devnet a share of blocks carries a proof today; the live page shows the share and the lag, and the design target at launch is under a minute. Full nodes execute every block themselves, so a bad proof is a light-client problem and never a chain split.
**A lock in minutes, not an hour of confirmations.** Miners sign a checkpoint every 30 seconds. When two thirds of the mining weight of the last 30 days have signed, the checkpoint is locked. Weight is blocks mined, nothing else. The lock lands in about two minutes. The [litepaper](/litepaper) has the rule.
@ -14,28 +14,30 @@ This file is the source of [igneum.network/build](https://igneum.network/build).
## Networks
| | Devnet 3 | Testnet | Mainnet |
|---|---|---|---|
| Chain id | {{rm:network.chain_id}} (`{{rm:network.chain_id_hex}}`) since its class v5 floor on 8 October 2026; 4463 below it | 4462 (`0x116e`) | 4461 (`0x116d`) |
| Network id | `{{rm:network.id}}` | `igneum-testnet-1` | not started |
| RPC | `{{rm:network.rpc}}` (a node you run serves `http://127.0.0.1:26790`) | `https://rpc.testnet.igneum.network` (answers; nothing mines there yet, so a transaction waits) | none |
| Coins | no value, resets without notice | no value, resets with notice | not started |
| Symbol, decimals | IGN, 18 | IGN, 18 | IGN, 18 |
| Machine-readable | [/release.json](/release.json): the chain id, the source commits and fingerprints, the mining class, the finality rule, the proof program ids, the fee schedule and the current version per platform, with a generated date | | |
| | Igneum 2.0 devnet |
|---|---|
| Chain id | 4464 (`0x1170`) |
| Network id | `igneum-devnet-4` |
| RPC | `https://rpc.devnet.igneum.network` (a node you run serves `http://127.0.0.1:26790`) |
| Coins | no value, resets without notice |
| Symbol, decimals | IGN, 18 |
| Machine-readable | [/release.json](/release.json): the chain id, the source commits and fingerprints, the mining class, the finality rule, the proof program ids, the fee schedule and the current version per platform, with a generated date |
Devnet 3 is where you build today. It is a developer network: it resets without notice and its coins have no value. Its public RPC takes the read methods, `eth_sendRawTransaction` and a wRPC websocket at `/ws`, at 20 requests a second per address. The public testnet exists, its RPC answers, and no blocks are being produced on it until it opens. Mainnet has no date. Devnet 3 answered 4463 until its class v5 floor at DAA 68,400 on 8 October 2026 and 4464 from it; read it with `eth_chainId` rather than fixing it, since a transaction signed for the wrong id is refused.
The devnet is where you build today. It is a developer network: it resets without notice and its coins have no value. Its public RPC takes the read methods, `eth_sendRawTransaction` and a wRPC websocket at `/ws`, at 20 requests a second per address. Read the chain id with `eth_chainId` rather than fixing it, since a transaction signed for the wrong id is refused.
Mainnet has not started and has no date. Its chain id, 4461 (`0x116d`), is reserved in the node.
## Endpoints and tools
- **Wallet.** Any Ethereum wallet. [Add Igneum to MetaMask](/metamask) with one click, or the [Igneum wallet](/wallet).
- **Faucet.** [10 IGN of Devnet 3 coin](/faucet) per address per day. No account.
- **Faucet.** [10 IGN of the devnet coin](/faucet) per address per day. No account.
- **Explorer.** [The explorer](/explorer) shows blocks, the DAG, miners and addresses. The EVM views, transactions and contracts, are being built and link from the same page as they land.
- **Swap.** [The swap](/swap): test tokens on Devnet 3, every swap in a proven block.
- **Swap.** [The swap](/swap): test tokens on the devnet, every swap in a proven block.
- **Source.** [git.igneum.network/igneum-network/igneum](https://git.igneum.network/igneum-network/igneum): the node, the miner, the site, and these pages under `docs/build/`.
## Your first contract in five minutes
With [Foundry](https://getfoundry.sh). Tested end to end on Devnet 3 on a build box; the full walkthrough with the expected output is [docs/build/first-contract.md](https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/first-contract.md).
With [Foundry](https://getfoundry.sh). Tested end to end on the devnet on a build box; the full walkthrough with the expected output is [docs/build/first-contract.md](https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/first-contract.md).
```
curl -L https://foundry.paradigm.xyz | bash && foundryup
@ -63,7 +65,7 @@ The call answers `1`. Paste the transaction hash into [the explorer](/explorer).
## The RPC the node serves
Read from a Devnet 3 node, not from a spec. `web3_clientVersion` answers `igneumd/2.1.0/execution-layer-v3`. The full list, served and not served, with the probe that produced it: [docs/build/rpc.md](https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/rpc.md).
Read from a devnet node, not from a spec. `web3_clientVersion` answers `igneumd/2.1.0/execution-layer-v3`. The full list, served and not served, with the probe that produced it: [docs/build/rpc.md](https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/rpc.md).
- **Served.** `eth_chainId`, `eth_blockNumber`, `eth_getBalance`, `eth_getTransactionCount`, `eth_getCode`, `eth_getStorageAt`, `eth_getBlockByNumber`, `eth_getBlockByHash`, `eth_getTransactionByHash`, `eth_getTransactionReceipt`, `eth_getBlockReceipts`, `eth_getLogs`, `eth_call`, `eth_estimateGas`, `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`, `eth_sendRawTransaction`, `eth_syncing`, `eth_accounts`, `net_version`, `net_peerCount`, `net_listening`, `web3_clientVersion`.
- **Igneum's own.** `igneum_getExecStatus`, `igneum_getProvingStatus`, `igneum_getShardPlan`, `igneum_getProofRecords`, `igneum_getTransactionStatus`, `igneum_estimateGas`, `igneum_getBudgets` and the segment and proof calls. `igneum_estimateGas` returns both gas dimensions and whether a call exceeds the proving limit.
@ -86,4 +88,4 @@ console.log(r.verified, r.signers, 'of', r.voters, 'voters', r.ms, 'ms');
- [Discord](https://discord.gg/igneum), the builders channel.
- [Grants](/grants) for tooling, reference apps, infrastructure and research.
Devnet and testnet coins have no value. Nothing on this page is an offer to sell anything.
Devnet coins have no value. Nothing on this page is an offer to sell anything.

View file

@ -1,11 +1,11 @@
# The Devnet 3 faucet
# The devnet faucet
[igneum.network/faucet](https://igneum.network/faucet) sends 10 IGN of Devnet 3 coin to an address. Once per address per day, once per connection per day. No account.
[igneum.network/faucet](https://igneum.network/faucet) sends 10 IGN of the devnet coin to an address. Once per address per day, once per connection per day. No account.
## What it is
- A small Node service on a build box, `infra/build-server/faucet/faucet.mjs`, behind Caddy at `faucet.igneum.network`. The page on igneum.network posts to it.
- It signs a plain transfer with its own key and sends it to the Devnet 3 node on the same box by address (`FAUCET_RPC`), never chosen by chain id. The chain id it signs with is read from that node on every send: Devnet 3 moved from 4463 to 4464 at its class v5 floor on 8 October 2026.
- It signs a plain transfer with its own key and sends it to the devnet node on the same box by address (`FAUCET_RPC`), never chosen by chain id. The chain id it signs with is read from that node on every send.
- The key lives only in the service's environment file on that box. It is not in the repository and not on the site.
## The rules, as the code enforces them
@ -20,7 +20,7 @@
The faucet's balance is refilled from the devnet's funder as it runs down. When it is empty the page says so and sends nothing.
## Devnet 3 coin
## The devnet coin
No value. Not for sale, not redeemable, not a claim on anything. The chain resets without notice and balances do not carry over. Mainnet starts from an empty genesis.
@ -33,4 +33,3 @@ infra/build-server/faucet/faucet.sh status # the unit, the balance, the
node infra/build-server/faucet/faucet.mjs --self-test # the limiter: known-failed cases first
```
The public testnet faucet is a separate thing: `site/api/faucet.mjs` is prepared for it and answers "not open yet" until the testnet starts.

View file

@ -1,16 +1,16 @@
# Your first contract on Devnet 3, in five minutes
# Your first contract on the devnet, in five minutes
With Foundry. Tested end to end on Devnet 3 from a build box on 8 October 2026; the pass line and the exact output are at the end. Hardhat, ethers and viem work the same way: chain id 4463 and the RPC below.
With Foundry. Tested end to end on a build box; the pass line and the exact output are at the end. Hardhat, ethers and viem work the same way: chain id 4464 and the RPC below.
## 0. What you need
- Foundry: `curl -L https://foundry.paradigm.xyz | bash && foundryup`. About a minute.
- The RPC. Devnet 3's public endpoint is `https://rpc.devnet.igneum.network`. A node you run yourself serves `http://127.0.0.1:26790`.
- The RPC. The devnet's public endpoint is `https://rpc.devnet.igneum.network`. A node you run yourself serves `http://127.0.0.1:26790`.
- Nothing else. No account, no sign-up.
```
export RPC=https://rpc.devnet.igneum.network
cast chain-id --rpc-url $RPC # 4464 (4463 before the class v5 floor of 8 October 2026)
cast chain-id --rpc-url $RPC # 4464
```
## 1. A key, for the devnet only
@ -82,16 +82,16 @@ cast receipt 0xTXHASH --rpc-url $RPC
## The test record
Run on a build box against its own Devnet 3 node (the box that also fronts the public RPC and runs the faucet), with Foundry 1.8.5 and a fresh key, through `docs/build/first-contract-test.sh`. The pass line is appended below by the run.
Run on a build box against its own devnet node (the box that also fronts the public RPC and runs the faucet), with Foundry 1.8.5 and a fresh key, through `docs/build/first-contract-test.sh`. The pass line is appended below by the run.
```
PASS 10:17:23Z: Devnet 3 chain id 4463, faucet drip 0x8620e9d894484e824e4ac33002946a00e2f75823ea6db0da0ad29f1af142e8f2, deployed Counter at 0x6345265C6Db0b3713eb6645d795d0B52FE0a4201 (tx 0xcf77b4822d51f3c60ecdf6d7dbbe67524d42071f06c76e1cf9b0511d64783574), increment then setNumber(41) read back 41, receipt status 1 (success), block 27055, 24 s end to end, Foundry 1.8.5
PASS 10:17:23Z: devnet chain id 4463, faucet drip 0x8620e9d894484e824e4ac33002946a00e2f75823ea6db0da0ad29f1af142e8f2, deployed Counter at 0x6345265C6Db0b3713eb6645d795d0B52FE0a4201 (tx 0xcf77b4822d51f3c60ecdf6d7dbbe67524d42071f06c76e1cf9b0511d64783574), increment then setNumber(41) read back 41, receipt status 1 (success), block 27055, 24 s end to end, Foundry 1.8.5
```
Through the public endpoints, `https://rpc.devnet.igneum.network` and `https://faucet.igneum.network`, from the box: the first faucet drip and the first reader-path deploy on Devnet 3.
Through the public endpoints, `https://rpc.devnet.igneum.network` and `https://faucet.igneum.network`, from the box: the first faucet drip and the first reader-path deploy on the devnet.
After the class v5 floor moved the chain id to 4464 the same afternoon, from a second box:
```
PASS 12:38:39Z: Devnet 3 chain id 4464, faucet drip 0xa54fdb7e964dab095aaccaab36ea548fc3fa8727acb809b593c2d4d1359c233f, deployed Counter at 0x7de503a4F39feEBCE8c4ABbAcC04282EE75120Fe (tx 0x6ccdbb4f6393fcf09e58ba2f4de1af98c547eeab6f02d93eacfebae883200dc6), increment then setNumber(41) read back 41, receipt status 1 (success), block 29878, 12 s end to end, Foundry 1.8.5
PASS 12:38:39Z: devnet chain id 4464, faucet drip 0xa54fdb7e964dab095aaccaab36ea548fc3fa8727acb809b593c2d4d1359c233f, deployed Counter at 0x7de503a4F39feEBCE8c4ABbAcC04282EE75120Fe (tx 0x6ccdbb4f6393fcf09e58ba2f4de1af98c547eeab6f02d93eacfebae883200dc6), increment then setNumber(41) read back 41, receipt status 1 (success), block 29878, 12 s end to end, Foundry 1.8.5
```

View file

@ -4,7 +4,7 @@ This file is the source of [igneum.network/grants](https://igneum.network/grants
## What a grant is
Grants are paid in IGN from the dev fee fund, on delivery. You propose a piece of work, it is accepted with a written definition of done, you build it, and it runs on the public testnet. Not a salary, not an advance, not an investment.
Grants are paid in IGN from the dev fee fund, on delivery. You propose a piece of work, it is accepted with a written definition of done, you build it, and it runs on the devnet. Not a salary, not an advance, not an investment.
The money is the dev fee fund: the IGN that the Ember dev fee collects. Ember, the official miner, takes an optional 1% of a miner's rewards, in full view and off with one flag; that fee goes to Igneum Labs, the company that ships the software. The protocol itself carries no fee, no fund and no allocation, and no grant is paid from emission. [The dev fee](/dev-fee) has the mechanism.
@ -24,7 +24,7 @@ A grant is sized by the work in front of it, not by a table. Two grants in the s
Open an issue on [git.igneum.network/igneum-network/igneum](https://git.igneum.network/igneum-network/igneum/issues/new?template=.forgejo%2Fissue_template%2Fgrant.md) and pick the Grant template. It asks for:
1. What you will build, in a paragraph, and which tier it is.
2. What done looks like: what runs where, what a reviewer can click or call to see it working on the public testnet.
2. What done looks like: what runs where, what a reviewer can click or call to see it working on the devnet.
3. Your public work: a repository, a package, a paper, a deployed thing.
4. How you want to be reached.
@ -34,11 +34,11 @@ A short issue is fine. The definition of done is the part that matters.
- Every Friday. Each open application gets one of three answers inside seven days: accepted with a definition of done, questions, or no with the reason.
- Accepted work is tracked in its issue. The reviewer and the builder agree the definition of done there before any work starts.
- Delivery is reviewed on the public testnet first. Payment follows the review, in the issue, in the open.
- Delivery is reviewed on the devnet. Payment follows the review, in the issue, in the open.
## The honest lines
- Devnet and testnet coins have no value. Before mainnet there is no IGN with value: a grant delivered on the testnet is recorded in its issue, and payment comes from the fund when the fund holds IGN. Nothing is promised about when, or whether, that is.
- Devnet coins have no value. Before mainnet there is no IGN with value: a grant delivered on the devnet is recorded in its issue, and payment comes from the fund when the fund holds IGN. Nothing is promised about when, or whether, that is.
- No amount, price or date is promised. The fund is what the dev fee collects, and it is zero today.
- A grant is for work delivered, never for a user count, a listing, a post or a referral.
- Igneum Labs may decline any application and may close the programme; what has been accepted and delivered is still paid.

10
docs/build/rpc.md vendored
View file

@ -1,6 +1,6 @@
# The JSON-RPC a Devnet 3 node serves
# The JSON-RPC a devnet node serves
Read from the node, not from a spec: every method below was sent to a Devnet 3 node on 8 October 2026 (`web3_clientVersion` answered `igneumd/2.1.0/execution-layer-v3`, `eth_chainId` `0x116f`, block 26,666) and sorted by what came back. A method the node does not know answers JSON-RPC error `-32601`. The probe is at the end; run it against your own node to refresh this file.
Read from the node, not from a spec: every method below was sent to a devnet node on 8 October 2026 (`web3_clientVersion` answered `igneumd/2.1.0/execution-layer-v3`, `eth_chainId` `0x116f`, block 26,666) and sorted by what came back. A method the node does not know answers JSON-RPC error `-32601`. The probe is at the end; run it against your own node to refresh this file.
Transport: HTTP POST, JSON-RPC 2.0, one request per call, no batches tested. The public endpoint is `https://rpc.devnet.igneum.network`; a node you run serves `http://127.0.0.1:26790`. The DAG side of the node (blocks, the mempool, the vote table) speaks the Kaspa-style gRPC and wRPC on their own ports; the explorer and the observer use those, a contract developer needs only what is here.
@ -9,9 +9,9 @@ Transport: HTTP POST, JSON-RPC 2.0, one request per call, no batches tested. The
| Method | Note |
|---|---|
| `web3_clientVersion` | `igneumd/<version>/execution-layer-v3` |
| `net_version` | the chain id as a decimal string, `"4464"` (`"4463"` before the class v5 floor) |
| `net_version` | the chain id as a decimal string, `"4464"` |
| `net_listening`, `net_peerCount` | |
| `eth_chainId` | `0x1170` (4464) on Devnet 3 since its class v5 floor at DAA 68,400 on 8 October 2026; `0x116f` (4463) below it. Read it, never fix it |
| `eth_chainId` | `0x1170` (4464) on the Igneum 2.0 devnet. Read it, never fix it |
| `eth_blockNumber` | the executed chain tip |
| `eth_syncing` | `false` when the executor is at the tip |
| `eth_mining` | `false` from the RPC's point of view: mining is the miner's, not the node's |
@ -76,4 +76,4 @@ for m in web3_clientVersion eth_chainId eth_blockNumber eth_newFilter eth_subscr
done
```
Devnet 3 resets without notice and its coins have no value.
The devnet resets without notice and its coins have no value.

File diff suppressed because one or more lines are too long

303
docs/fud-ledger-2.0.md Normal file
View file

@ -0,0 +1,303 @@
# Igneum 2.0 criticism ledger
Written fresh on 8 October 2026 against the Igneum 2.0 brief (`docs/plans/igneum-2.0.md`). One entry per pin group: the challenge an outsider would raise, in the critic's words where a review supplied them; the status today; the answer; the evidence as a landed document; and the pin the entry answers. A pin closes only with a landed document and its pass condition met, so anything not yet delivered is Open with the pass condition named. The earlier ledger stays in the repository as history and is neither served nor linked.
Entry format (read by `tools/ledger-page.mjs` and `tools/ledger/export-public.mjs`): `### <ID>. <title>`, a quoted challenge line, `Status: <word> (<date>): ...` where the word is one of the six statuses' words, `Answer:`, `Evidence:`, `Pin:`. A status that changes gets a new Status paragraph below the old one; the last one is current.
## The objective and the four properties
### R0. "Another zkEVM"
"This is another zkEVM chain with a mining story attached."
Status: Decided (8 October 2026): the positioning line is served on every page, and "zkEVM" appears only under the architecture explanation.
Answer: The line is "A GPU-secured network for Ethereum-compatible applications and verifiable computation." Igneum is a sovereign GPU-mined network that runs Ethereum-compatible applications and proves their execution; the proof architecture is explained beneath that line, with its three boundaries (B1 to B3), and never leads.
Evidence: `docs/plans/igneum-2.0.md` (the objective: the positioning line; the site reset: every page carries it). The facts page row 5 (`docs/evidence.md`).
Pin: Architecture and product, sixth box (every served page carries the positioning line and the three boundaries); Site reset, fourth box.
### R1. A specialised miner will remove most of the cost
"GPU-friendly hashes always fall to chips. A specialist strips everything a GPU carries that the hash does not need."
Status: Open (8 October 2026): pass when the best supported cost and energy advantage of a re-optimised, programmable adversary sits inside the chosen competitiveness envelope, with its uncertainty published (D3).
Answer: The target is contestable mining, not chip destruction: a manufacturer with a profitable product is not the failure; an exclusive, durable advantage large enough to displace the accessible GPU fleet is. Two measured results already bound the design. The connected-state reorganisation was killed as a class because rearranging the same operations moves neither side (D2). The mixed FP32 branch was killed because deterministic FP32 costs the cards 15 to 26 percent energy per hash against a 10 percent budget and widens the chip's edge to 3.0x to 3.2x (measured cards, modelled chip). Both stay as regression controls.
Evidence: `docs/plans/igneum-2.0.md` (the objective, property 1; D1, the mixed FP32 kill; D2(a)); `docs/analysis/class-v6/connected-state.md`.
Pin: The objective, property 1; D3 pass condition.
### R2. Ordinary operators will be priced out
"Competitive hardware ends up in a few warehouses. A home miner with a used card has no chance."
Status: Open (8 October 2026): pass when the reference GPU population is published with both tests per class (existing owner and new entrant) and the cost per accepted unit of work is served for each class.
Answer: The cohort is the discrete-GPU population, used cards included. Each class gets two tests: the existing owner (power, wear, fees, alternative use) and the new entrant (purchase, operating cost, resale). The central measure is cost per accepted unit of work: annualised hardware, power, hosting, failures and fees over annual accepted work. Nothing here is measured yet as a population.
Evidence: `docs/plans/igneum-2.0.md` (D1: the reference GPU population, the two tests, the central measure; the standing rule on the cohort).
Pin: The objective, property 2; D1, sixth to eighth boxes.
### R3. Mining and proving will not pay once issuance falls
"The subsidy carries everyone at launch. When issuance falls the miners and provers leave."
Status: Open (8 October 2026): pass when the five-year coexistence model names credible conditions for sustained commodity participation and names where it fails; a result needing a small network, token appreciation or scheduled chip death has not passed.
Answer: The model replaces the capex wall. It covers growing and shrinking networks, reduced issuance, cheap and dear electricity, replacement and resale on both sides, changing proving demand and miners who react. Its mandatory stress case assumes the opponent's development is already paid for.
Evidence: `docs/plans/igneum-2.0.md` (D4).
Pin: The objective, property 3; D4 pass condition.
### R4. The defence is a rescue fork waiting to happen
"When a chip arrives you will change the algorithm in an emergency, like everyone else."
Status: Decided (8 October 2026): no property assumes a future emergency algorithm change; rotation is optional to the security argument, and seed delay is evaluated only as seed-selection protection.
Answer: The four properties must hold with no rescue upgrade assumed. The no-rescue network exercise (D5) is the test: epoch boundaries crossed, signing interrupted, the network partitioned, major operators removed, hostile proof submissions, independently written clients, with specified behaviour and no emergency algorithm change or privileged intervention. That exercise is Open.
Evidence: `docs/plans/igneum-2.0.md` (the objective, property 4; the standing rules; D5).
Pin: The objective, property 4; D5 pass condition.
## The five deliverables
### D1. The numbers cannot be reproduced
"Your measurements come from your own machines and your own scripts. Nobody can check them."
Status: Open (8 October 2026): pass when an independent operator reproduces the baseline within declared tolerances from the served kit alone.
Answer: One exact generator, verifier, dataset policy, compiler configuration and measurement harness, pinned by digest and served. Mining and proving are measured together on the final configuration, with wall power beside device telemetry, accepted and rejected work, compile time, memory use and sustained thermals. Nobody outside the project has reproduced anything yet.
Evidence: `docs/plans/igneum-2.0.md` (D1); `docs/evidence.md` (rule 1: nothing reproduced externally or reviewed independently).
Pin: D1 pass condition.
### D2. Reorganising the work will not stop a specialist
"A specialist separates storage, arithmetic and memory scheduling. Rearranging the same work does not change what an operation costs."
Status: Conceded (8 October 2026): the connected-state variant, D2(a), is a KILL as a class; the memory-sharing attack, D2(b), is Open.
Answer: The critic is right for D2(a). With the same operations reorganised so that live state feeds every load address, the 64-register window is necessary (63 of 64 registers live at every address, measured), but a chip answers with a clock-gated register file that pays per write, so only the window's width reaches it: +1.2 pJ per lane-op at N5 (synthesised), moving the chip's edge 1.10x node for node against a 1.25x gate (modelled). The generator variant and the liveness tool stay behind a flag. D2(b) prices memory sharing, recomputation and data-local execution against class v6; pass when a candidate improves against re-optimised adversaries across the declared population within the preset cost and verification limits, otherwise class v6 stands and the experiment is published as a failure.
Evidence: `docs/analysis/class-v6/connected-state.md` (the verdict); the facts page row 4 (`docs/evidence.md`).
Pin: D2, first box (a) and second box (b).
### D3. Chips do not expire on schedule
"Your economics assume every chip dies at the next family epoch. A programmable chip survives every family you publish."
Status: Conceded (8 October 2026): "every chip dies within a family epoch" is out of the baseline economic model, and chip-arrival percentages are not published.
Answer: The adversary is allowed to survive: whole-system cost minimised across every published family, free to change lane count, register implementation, instruction storage, memory technology, scheduling and support hardware, placed rather than synthesised, with a three-year stress life. Next-generation opponents are in the matrix. Pass when its best supported cost and energy advantage sits inside the chosen competitiveness envelope with uncertainty published; 1.5x energy is a research goal, not the pass criterion. That is Open.
Evidence: `docs/plans/igneum-2.0.md` (the standing rules; D3).
Pin: D3, first to fourth boxes and the pass condition.
### D4. The capex wall is a fiction
"Your wall assumes the attacker pays for development. Somebody already has."
Status: Open (8 October 2026): pass when the five-year coexistence model, whose mandatory stress case has development already paid for, names credible conditions for commodity participation and where they fail.
Answer: The capex wall is replaced. Tariff advantage is shown apart from hardware advantage, and the economics page resolves the tip-share discrepancy with an explicit user-funded proving payment and congestion pricing, burn treated separately, the hard cap and no development tax kept. A profit-maximising operator simulation (mine, prove internally, prove externally, switch off) must show pricing and capacity rules restoring service without an administrator.
Evidence: `docs/plans/igneum-2.0.md` (D4).
Pin: D4, first, fifth to seventh boxes and the pass condition.
### D5. Proofs are not a protocol guarantee yet
"Proof verification sits off the consensus path. A modified producer can include a matching statement without the valid proof and collect a payout it did not earn."
Status: Conceded (8 October 2026): consensus does not enforce proofs today; the switch is in the node and reads never on the devnet. Pass when proof verification is enforced in consensus, live on the exercise network.
Answer: Every producer verifies proofs off the consensus path today, so the network demonstrates proving activity rather than enforcing a permissionless proving economy. The rule and its activation switch exist in the node fork and are off on the devnet. Enforcement in consensus is the prerequisite of the no-rescue exercise, and node 2.0.0 follows it.
Evidence: the facts page row 2 (`docs/evidence.md`); `docs/plans/igneum-2.0.md` (D5, first box; Versioning).
Pin: D5, first box (the prerequisite).
## Pools, software and participation
### P1. A pool controls its miners' votes
"Whoever runs the pool votes with everyone's work. Finality by pool operator."
Status: Open (8 October 2026): pass when the member's retained voting key is committed into its work at protocol level, payment aggregation is separate and verifiable, and pool identity substitution is resisted.
Answer: Vote keys stay with the miner at protocol level; the pool aggregates payment, not votes. Not built yet.
Evidence: `docs/plans/igneum-2.0.md` (Pools, software and participation).
Pin: Pools, first box.
### P2. Pools take custody and home miners lose to latency
"Pools hold the coins, minimum payouts strand small miners, and a home connection loses accepted work to a datacentre."
Status: Open (8 October 2026): pass on non-custodial payouts with practical minimums, local work verification and low-bandwidth participation, and on a published measurement of the accepted-work penalty for home internet against datacentre connections.
Answer: P2Pool is the precedent, not the code. Neither the payout design nor the latency measurement exists yet.
Evidence: `docs/plans/igneum-2.0.md` (Pools, second and third boxes).
Pin: Pools, second and third boxes.
### P3. Firo's miner is the bar
"Firo's reference miner supports NVIDIA and AMD, charges no developer fee, and reports performance within about 1 percent of closed miners. Ember has to meet that."
Status: Open (8 October 2026): pass when Ember reaches good operating points without third-party software and its optimisation work, compiler settings and safe tuning logic are published beside a comparison.
Answer: Agreed that this is the bar. The within-1-percent figure is Firo's own report (claimed, not measured here). Ember is measured against it, not against whitepapers.
Evidence: `docs/plans/igneum-2.0.md` (Pools, fourth box; Leadership tests, first box).
Pin: Pools, fourth box; Leadership tests, first box (Firo).
## Architecture and proving
### A1. Why not an Ethereum L2
"If you run EVM contracts and ZK proofs, settle on Ethereum like everyone else."
Status: Decided (8 October 2026): three separate decisions: EVM-compatible execution for developers (revm), SP1 as the one well-tested proving backend behind a versioned interface, and sovereign GPU-mined consensus. Not an Ethereum L2.
Answer: An L2 would suit a project whose objective is Ethereum settlement. Igneum's objective is an independent network secured by accessible hardware. Sovereignty has a cost: the network must establish its own consensus security, data availability and credible cross-chain verification, and execution proofs do not remove those duties.
Evidence: `docs/plans/igneum-2.0.md` (Architecture and product, first box).
Pin: Architecture and product, first box.
### A2. Proof-system flexibility becomes arbitrary acceptance
"A replaceable proof system means the chain accepts whatever prover is fashionable."
Status: Decided (8 October 2026): program identities, verifier versions and security parameters are pinned in the protocol; one backend first, a second only where justified, never interchangeable immature backends.
Answer: The interface stays replaceable; what the chain accepts does not. Pinning in the protocol is designed and not yet shown on the devnet.
Evidence: `docs/plans/igneum-2.0.md` (Architecture and product, second box).
Pin: Architecture and product, second box.
### A3. Rotation is not the defence
"Your resistance is the rotation: when a chip shows up you will identify it and fork it out."
Status: Decided (8 October 2026): no chip detection in consensus, no hardware whitelists, attestation, per-address quotas or self-reported GPU bonuses; rotation is optional to the security argument.
Answer: Igneum's mining design accepts that specialised hardware may be built; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. The window costs a GPU under 1 percent of rate at stock (measured on rented RTX 5090 and RTX 4090 cards, 8 October 2026). The long-program and select-tree proposals stay out as regression controls.
Evidence: the facts page row 3 (`docs/evidence.md`); `docs/analysis/class-v6/connected-state.md`; `docs/plans/igneum-2.0.md` (the standing rules).
Pin: Standing rules (no detection, rotation optional); D3 (the adversary that survives rotation).
### A4. A concentrated prover can stall the chain
"Separate roles on paper. In practice one big prover withholds proofs and useful operation stops."
Status: Open (8 October 2026): pass when a withholding concentrated prover is exercised on the no-rescue network with replacement operators, usable inputs, reassignment and explicit behaviour during proof delays, and the network behaves as specified with no privileged intervention.
Answer: Winning the mining lottery and producing proofs stay separate, and they must remain separable during a failure, not only on paper.
Evidence: `docs/plans/igneum-2.0.md` (D5, fourth box).
Pin: D5, fourth box.
### A5. Your miner promise covers hardware your prover does not
"The miner runs on AMD and Apple, but the proving income needs NVIDIA."
Status: Conceded (8 October 2026): proving runs on NVIDIA; AMD and Apple mine. The product language states it plainly.
Answer: The proving stack is judged on the full pipeline: inputs, proving, aggregation, verification, payment, memory footprint and mining income forgone. A fast shard result is not enough when aggregation or memory pressure makes ordinary operators uncompetitive.
Evidence: `docs/plans/igneum-2.0.md` (Architecture and product, fourth box).
Pin: Architecture and product, fourth box.
### A6. "Everything runs unchanged" is a claim, not a test
"EVM-compatible until the block context, the randomness or the fees differ."
Status: Open (8 October 2026): pass when compatibility ships as a product deliverable: representative contracts, wallet fee estimation, indexing, failed transactions, receipts and application assumptions tested, with the documented set of differences (block context, randomness, two-dimensional fees).
Answer: The differences are known and are listed; the test suite that makes compatibility a deliverable does not exist yet.
Evidence: `docs/plans/igneum-2.0.md` (Architecture and product, third box).
Pin: Architecture and product, third box.
### A7. The proving market is revenue you do not have
"Internal payouts on a valueless devnet show a mechanism, not demand."
Status: Conceded (8 October 2026): the external proving market is not built and stays out of revenue assumptions until it is.
Answer: The ladder: prove Igneum's own execution; then one external customer's exact workload with repeat paid jobs; then further workloads only where the fleet has a demonstrated edge. Pilots and announcements do not count; customers repeatedly paying for proofs at prices that carry reliable service and an operator margin do.
Evidence: `docs/plans/igneum-2.0.md` (Architecture and product, fifth box; Leadership tests, third box).
Pin: Architecture and product, fifth box; Leadership tests, third box.
## The three boundaries
### B1. Proven execution means the block is final
"The block is proven, so it is final."
Status: Decided (8 October 2026): the boundary is stated wherever the proof architecture is explained.
Answer: Proven execution is not finality. A proof shows a block's execution was computed correctly; finality is a property of the chain's own consensus and checkpoints.
Evidence: `docs/plans/igneum-2.0.md` (the objective: the three boundaries).
Pin: The objective, the three boundaries; Architecture and product, sixth box.
### B2. EVM-compatible means Ethereum's security
"It runs Ethereum contracts, so it inherits Ethereum's security."
Status: Decided (8 October 2026): the boundary is stated wherever the proof architecture is explained.
Answer: EVM compatibility is not Ethereum security. Igneum is a sovereign network: its security is its own GPU-mined consensus, not Ethereum's validators.
Evidence: `docs/plans/igneum-2.0.md` (the objective: the three boundaries).
Pin: The objective, the three boundaries; Architecture and product, sixth box.
### B3. ZK means private
"Zero knowledge, so my transactions are private."
Status: Decided (8 October 2026): the boundary is stated wherever the proof architecture is explained.
Answer: ZK is not privacy. The proofs here verify execution; transaction data is public, and privacy would need additional application or protocol design.
Evidence: `docs/plans/igneum-2.0.md` (the objective: the three boundaries).
Pin: The objective, the three boundaries; Architecture and product, sixth box.
## Comparisons and leadership
### C1. Ravencoin already does this
"KAWPOW already keeps consumer GPUs competitive, allows for future chips and does not plan forks as the normal defence."
Status: Open (8 October 2026): pass when benchmarks against Ravencoin's KAWPOW, an operating system with the same stated objective, are published and show a stronger result or a more valuable overall offering.
Answer: Restating the goal is not enough. Igneum is measured against the operating system, not its whitepaper.
Evidence: `docs/plans/igneum-2.0.md` (Leadership tests, first box).
Pin: Leadership tests, first box (Ravencoin).
### C2. Ergo is an operating benchmark
"Ergo already runs a GPU memory-hard design with live pooling, emission and difficulty changes."
Status: Open (8 October 2026): pass when the comparison with Ergo, on its live behaviour rather than its papers, is published.
Answer: Ergo is a reference point, not a whitepaper competitor; the comparison is owed.
Evidence: `docs/plans/igneum-2.0.md` (Leadership tests, first box).
Pin: Leadership tests, first box (Ergo).
### C3. Number one is unsupported
"You claim to be the best GPU network before anyone outside has checked anything."
Status: Conceded (8 October 2026): no "number one" claim before comparative results and adoption exist.
Answer: The ceiling of the served ranking language is serious contention for the top of the GPU-mining space on engineering and operator proposition. The tests that would earn more are miners staying through hard conditions, customers repeatedly paying for proofs, and the network running without the founding team (D5); none is met yet.
Evidence: `docs/plans/igneum-2.0.md` (Leadership tests, second to fifth boxes).
Pin: Leadership tests, fifth box (served ranking language); second to fourth boxes.

View file

@ -0,0 +1,202 @@
# Igneum criticism ledger, public shape
Generated by `tools/ledger/export-public.mjs` from `docs/fud-ledger.md`; a gate check fails when the two drift. One row per item: the claim or criticism, its status, what was done, and the evidence. Internal identifiers, times of day and team-member names are left out on purpose; the full ledger is published with the repository.
194 items. By status: Conceded, stated 52; Fixed 31; Decided 22; Fixed on a branch, pending merge 14; Answered by design 9; Answered with evidence 6; Fixed, stated 4; Closed by rule 3; Open 3; Spec fixed 2; Fixed, stated; restated 2; Answered by design, with a correction to our own text 1; Answered with evidence, stated 1; Answered by design for finality, Conceded for the lottery 1; Conceded, implemented, stated 1; Rule implemented and measured; launch month simulated 1; Answered by design, with the concession stated 1; Conceded, stated in the litepaper and the design doc 1; Answered with evidence at 1 block/s 1; Conceded, stated in the simulation report 1; Answered by design, with the dependency conceded. Update 7… 1; Conceded, stated in the litepaper, with the dial explained 1; Closed by spec 1; Conceded by decision, stated in the design doc 1; Answered by design, with the founder's edge conceded 1; Answered by design, with a metrics caveat 1; Closed by removal, 3 October 2026 1; Conceded, stated in the litepaper 1; Conceded, stated in the design doc 1; Measured on the live node line, and the overlay does NOT… 1; Conceded, stated in the simulation 1; Conceded in part, labelled, stated 1; Fixed in the node 1; Answered with evidence for the largest body the rules allow 1; Fixed in the proving code 1; Fixed in the spec 1; Rule fixed 1; Rule written 1; Fixed, logged 1; Answered with evidence for the test half 1; Fixed in the node and shipped, rule not yet activated on… 1; Simulation half run 1; Answered with evidence for all four 1; Written 1; Designed 1; Fixed and confirmed 1; Rolled out 1; Conceded by decision 1; Conceded, scheduled, stated 1; Conceded, contained by rule, stated 1; Fixed on a branch and verified locally 1; Answered with evidence and stated 1; Answered with evidence for PC 2 1; Answered by design and with evidence 1; Fixed in part, finding bounded, stated 1; Open, priced 1; Fixed as a genesis lever, measurement owed 1.
| Id | Claim or criticism | Status | What was done | Evidence |
|---|---|---|---|---|
| M1 | The program space is tiny | Decided | No standing bounty. | [docs/bench-log.md](../docs/bench-log.md) |
| M2 | Your own prototype is not memory-hard | Conceded, stated | `Site/litepaper.html`, Monero's idea section, the "Measured so far" paragraph, "computing items on the fly runs 4.8x slower than loading them"; What Igneum does not claim, "A memory-hard prototype on every vendor". | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M3 | Kaspa said ASIC resistant too | Answered by design, with a correction to our own text | First the correction: Kaspa did not promise ASIC resistance. kHeavyHash was designed to be friendly to specialised and optical hardware, and the Kaspa community expected chips (approximate, from memory; cite the Kaspa… | design doc, "ASIC resistance" section. |
| M4 | ProgPoW already did this and you do not mention it | Conceded, stated | `Site/litepaper.html`, precedents table row 1, "ProgPoW, as KAWPOW on Ravencoin since 2020". | [vendor/](../vendor/) |
| M5 | Your load count varies 6x between programs | Fixed | Generator version 2 draws exactly 16 load slots per program (spec 01 section 1.4.2, `igneum-pow/src/generator.rs`), and the fresh-source rule of 1.4.3 with the acceptance rule of 1.4.6 fixes the distinct count too,… | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M6 | Weak programs | Fixed | The acceptance rule of spec 01 section 1.4.6 (`igneum-pow/src/accept.rs`, mirrored in `proto-metal/main.swift`) rejects a candidate with a stale load source, a register without an injecting write, a nonce-independent… | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M7 | No cryptographic analysis at all | Conceded, stated | `Site/litepaper.html`, Mining section, "The hash is a lottery, not a general-purpose cryptographic hash" and "Open: no analysis of the lottery properties exists yet". | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M8 | Only two vendors, two programs, one day | Decided | A discrete AMD card (9070 XT) and a 12 GB NVIDIA card (4070) are on order for PC 2; the measurement runs on arrival. | [docs/bench-log.md](../docs/bench-log.md) |
| M9 | The 10 ms CPU verification gate is unmeasured | Conceded, stated | `Site/litepaper.html`, Mining section, "Measured: 0.41 to 0.58 ms per warp on one Apple M5 Max core with the 256 MB cache"; vs RandomX "Light verification" row. | [docs/bench-log.md](../docs/bench-log.md) |
| M10 | "Bound by memory bandwidth" is wrong | Answered with evidence, stated | `Site/litepaper.html`, Mining section, "bound by random memory access. | [docs/bench-log.md](../docs/bench-log.md) |
| M11 | Hourly JIT on real rigs | Decided | The mixed-generation rig is borrowed from a farm operator later, at the HiveOS package's first test; the 9070 XT on order gives the ROCm half on PC 2. | [docs/bench-log.md](../docs/bench-log.md) |
| M12 | Rentable hashrate is not just NiceHash | Answered by design for finality, Conceded for the lottery | Both halves true. | [sim/results.md](../sim/results.md) |
| M13 | Macs mine too is marketing | Conceded, stated | `Site/litepaper.html`, For miners, Hardware, "Macs mine too, at about a fifth of a flagship card: Measured, 26.7 against 123 million hashes a second" (confirmed by grep tonight; the projected-earnings half is not… | [docs/bench-log.md](../docs/bench-log.md) |
| M32 | "Automatic anti-ASIC escalators" overstates what the era draw and the instruction reserve do | Conceded, stated | The era draw and the instruction reserve are automatic schedule changes against fixed datapaths and against human forks; against the stored-dataset chip every drawn parameter is firmware, and the defence against that… | [docs/analysis/horizon/algorithm.md](../docs/analysis/horizon/algorithm.md) |
| M33 | The FPGA ceiling rests on a tFAW the JEDEC HBM2 table does not give | Conceded, stated | 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… | [docs/analysis/horizon/algorithm.md](../docs/analysis/horizon/algorithm.md) |
| 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 | Conceded, implemented, stated | The public text carries the ladder (`site/litepaper.html`, Mining: the six-rung genesis ladder of the latency shadow with a measured admissibility flag per rung, moved by miner signalling, never by a fork; and the X9… | [docs/design/latency-ladder.md](../docs/design/latency-ladder.md) |
| F1 | Finality is attackable for the first month | Rule implemented and measured; launch month simulated | The harness text only: `tools/finality-attacks/run.mjs` names the 2/3-of-total floor in the s6 comments and criterion and in the s5 result line, where it still said 56.7%; the scenario logic is untouched. | [sim/](../sim/) |
| F2 | The two-hour presence window is an eclipse vector | Closed by rule | Correct that the presence window trades safety for liveness. | [sim/results.md](../sim/results.md) |
| F3 | Participation grinding through the bitmap | Decided | The per-block vote bound and the bitmap wire bound of spec 3.4.2 items 2 and 3 are adopted for gate 3; the spec moves them from Proposed to Decided at the next spec edit. | design doc Finality v2, Quorum item 2 and Checkpoints item 3. |
| F4 | It is proof of stake with extra steps | Answered by design, with the concession stated | The committee's weight is blocks mined in the last 30 days. | [sim/results.md](../sim/results.md) |
| F5 | The headline arithmetic is misread on purpose | Conceded, stated | `Site/litepaper.html`, Finality, "an attacker producing every block on the chain, with honest miners gone" and "An attacker matching the honest network needs twenty days for a third and never reaches two thirds"; the… | [sim/results.md](../sim/results.md) |
| F6 | Equivocation costs nothing that matters | Conceded, stated in the litepaper and the design doc | True. | design doc Finality v2, Checkpoints item 4 and Residual risks bullet 1. |
| F7 | A 2-minute checkpoint on a DAG with a 1-hour merge bound | Answered with evidence at 1 block/s | Fair. | design doc Finality v2, Checkpoints item 1 and "Three experiments before gate 3". |
| F8 | The simulation has no network in it | Conceded, stated in the simulation report | Correct. | [sim/results.md](../sim/results.md) |
| F9 | Half the hashrate leaves and finality stalls for ten days | Answered by design | That table is the all-keys denominator, which the simulation recommended for safety. | [sim/results.md](../sim/results.md) |
| F10 | Pools hold the votes | Conceded, stated | `Site/litepaper.html`, Finality, "Pools carry their hashers' votes, so vote concentration equals pool concentration, and it is public"; Governance, "governed by the hashrate that powers it". | design doc Finality v2, Residual risks bullet 3. |
| F11 | VDFs are exotic | Answered by design, with the dependency conceded. Update 7… | The era VDF is in the node (spec 4.4 Implemented, behind `era_vdf_activation_daa`, never until the founder sets it per network), on a fixed-width integer with no C library, with the hash-chain fallback behind the… | design doc Finality v2, Lottery seeds items 1 and 2, Residual risks bullet 5, "Three experiments before gate 3". |
| F12 | Nothing outside the chain, except | Answered by design | Those are code dependencies, chosen because each is open source and replaceable, and none is another chain's consensus. | CLAUDE.md design paragraph; design doc "Decided" paragraph. |
| F13 | Why prove every block if every node executes anyway | Answered by design | Full nodes execute natively so users see state in about a second. | design doc, "Proving speed on consumer GPUs" risk item and "Who needs" paragraph. |
| F26 | "No stake" needs its one sentence: what is at stake, and what strips it | Conceded, stated | `Site/litepaper.html`, the finality section's "What is not here" paragraph and the "Igneum at a glance" Finality row carry the sentence verbatim: "No coin is staked. | [docs/analysis/horizon/frontier.md](../docs/analysis/horizon/frontier.md) |
| P1 | The 20-second shard is a number you made up | Conceded, stated | `Site/litepaper.html`, Proving, The proving budget, "Target: shard size will be set so a 12 GB card proves one shard in about 20 seconds. | [site/journey.json](../site/journey.json) |
| P2 | Real-time proving needs a hundred GPUs per block | Conceded, stated in the litepaper, with the dial explained | True, and the litepaper says a full block needs a cluster of 100 to 200 consumer GPUs, approximate. | design doc "Unit economics of a proof"; litepaper "What Igneum does not claim" item 1. |
| P3 | A phone verifies in milliseconds is a SNARK-wrapper claim | Answered by design | The design rule covers the claim (design 5.6 `wrap`, R4: the aggregated block proof wrapped once into a small curve-based proof by the aggregator) and the public text says what is and is not measured… | not yet. |
| P4 | Trustless light clients need a consensus proof you do not have | Conceded, stated | `Site/litepaper.html`, precedents table row 6, "The consensus proof that makes the checkpoint self-verifying is phase two"; Building item 2, "Light clients". | design doc, hostile review table rows "Slashing an external prover" and "One-proof light clients". |
| P5 | EVM "unchanged" on a DAG is false | Closed by spec | Correct. | design doc, hostile review table row "EVM semantics on a DAG". |
| P6 | The proving market is tiny | Conceded, stated | `Site/litepaper.html`, The problem, "a supplier whose marginal cost is close to power"; "cheapest supplier" and "lowest cost" absent from the page (grep, tonight). | design doc "Market size, honestly" and "Existing prover networks" table (labelled from memory). |
| P7 | A soundness bug in SP1 is a consensus failure | Conceded, stated | `Site/litepaper.html`, Abstract, "Writing new code, including an emergency fix to the proof system, is the one thing that takes a person"; Proving, "no node accepts a block with a wrong state root". | design doc "Proof system churn" risk item. |
| P8 | Fastest prover wins all the shards | Closed by rule | Fair, and the lottery/proving separation does not by itself fix it. | design doc "Proving speed on consumer GPUs" risk item and Finality v2 "Fees". |
| P9 | Shard griefing | Decided | The parameter table's values are the phase 4 devnet's starting values (8 assignees, a 25-s exclusive window, a 120-s job claim timeout, no shard bond, the external job bond set on the devnet); the devnet measurement… | design doc, Security model table row 3. |
| P10 | External jobs are paid off-chain, so where is the burn | Conceded, stated | `Site/litepaper.html`, Economics, "Outside customers pay in their own currency on their own chain at launch; settlement in IGN with a 10% burn follows when the proof bridge lets Igneum see the payment"; the route table… | design doc "The first six months" risk item and hostile review table row "Slashing an external prover". |
| P24 | "20 percent of emission to provers" without the caveat that consensus does not verify the proof | Conceded, stated | `Site/litepaper.html`, Economics, the 20% proving-pool row carries the caveat: consensus does not yet verify the carried proof, it checks the record's statement against native execution and its signature, so today a… | [docs/analysis/horizon/consensus-security.md](../docs/analysis/horizon/consensus-security.md) |
| P25 | Unclaimed pool credit is stranded in the escrow | Conceded, stated | `Site/litepaper.html`, Economics, the 20% proving-pool row carries the note: unclaimed pool credit is today stranded in the escrow, no rule returns it; the fix rolls an unproven shard's credit into the next proven… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| E1 | Hard cap plus burn is a security budget cliff | Conceded by decision, stated in the design doc | True, and the design doc records the choice: "A 1% tail is the Monero model and the safer choice for security on its own." The argument for the cap is that Igneum miners keep earning from in-chain proving fees and… | design doc "Decision: hard cap". |
| E2 | Half the coins in two years is an insider schedule | Answered by design, with the founder's edge conceded | The schedule (1 billion a year halving every two years, 30-day ramp from 10% to 100%) is public, fixed at genesis and the same for every miner. | litepaper "Supply" and "Fair launch, announced". |
| E3 | The 20% developer share enables wash gas | Answered by design, with a metrics caveat | The base fee is burned in full, so every wash transaction loses its whole base fee. | design doc Finality v2 "Fees"; litepaper "What a builder gets for being early". |
| E4 | 5% of gas to the dev fund is a tax | Closed by removal, 3 October 2026 | There is no development fund. | spec section 5.5; design doc "No development fund, so nothing to fight over". |
| E5 | "Not one coin to a founder" is false | Conceded, stated | `Site/litepaper.html`, Economics, "No fund, no foundation, no fee to the team", "1 block in 100 pays the project"; `site/index.html`, Economics, "The one payment to the project is the Ember software's optional 1% dev… | design doc "No development fund, so nothing to fight over". |
| E6 | Two-year halvings bleed hashrate | Conceded, stated | `Site/litepaper.html`, Economics, Security after the subsidy, "The schedule is a bet, not a measurement: a halving halves emission income overnight if price and fees do nothing", with Kaspa's reduction marked… | none; decision in design doc "Supply". |
| E7 | No stablecoin liquidity without a trusted bridge | Decided | Correct. | design doc, hostile review table row "One-proof light clients and committee-free bridges". |
| E8 | Founders seeding the DEX is market making by insiders | Conceded, stated | True and stated in the litepaper. | litepaper "Liquidity from the people who are there". |
| E19 | "Proving: a second income" without the arithmetic of how small it is | Conceded, stated | `Site/litepaper.html`, "For miners", under the three-streams table: all of Ethereum L1's proving is about USD 36 a day at the September 2026 tracker cost (USD 0.005 a block x 7,200 blocks; the tracker figure is a… | [docs/analysis/horizon/frontier.md](../docs/analysis/horizon/frontier.md) |
| E20 | "Proofs at the cost of power" is the electricity, not the price | Conceded, stated | `Site/litepaper.html`, The problem ("a supplier whose electricity cost is close to power and whose price is the subsidy it forgoes, which falls as the network's hash grows"), Building on Igneum ("Proofs priced by the… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| E21 | The dev fee is 1 percent of the producer share, and the funding plan's ceiling took all rewards | Conceded, stated | `Site/litepaper.html`, the payment-routes row 6 and the Ember section read "default-on, switchable, 1 percent of the producer share"; `docs/plans/funding.md` section 4's ceiling is 1 percent of the producer share, USD… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| G1 | No cryptography team | Conceded, stated | `Site/litepaper.html`, Questions miners ask, "reviewers will be named and paid before gate 3"; What Igneum does not claim, "A cryptography team. | design doc "Team" paragraph. |
| G2 | An AI designed this | Conceded, stated | `Site/litepaper.html`, cover, "Method one founder with AI systems"; Who are you?, "One founder, pseudonymous, working with AI systems". | [.claude/agents/](../.claude/agents/) |
| G3 | Who are you | Decided | No team page for now; the litepaper says the team is pseudonymous and names no team page. | [site/journey.json](../site/journey.json) |
| G4 | No admin keys, except in everything that matters | Conceded, stated | The home page was redrawn as one statement, the live scene, three facts and the downloads, so the tile "admin keys in consensus" is no longer on `site/index.html`; the sentence stands on `site/litepaper.html`,… | litepaper "Governance". |
| G5 | No multi-client | Conceded, stated in the litepaper | True at launch. | litepaper "Governance", last bullet. |
| G6 | Stratum v2 does not make pools unable to censor | Conceded, stated | `Site/litepaper.html`, Governance, "Pools can be bypassed on transaction choice". | none in repository. |
| G7 | The one-click app is an update key over the network | Decided | Correct. | not yet. |
| G8 | Governance by hashrate is governance by two pools | Conceded, stated in the design doc | True in the same way it is true on Bitcoin, where miner signalling activated SegWit and Taproot. | design doc Finality v2, Residual risks bullet 3. |
| G15 | Three signalling thresholds, four numbers across the documents | Conceded, stated | One sentence in `site/litepaper.html`, Governance ("Miners set what genesis leaves open") and Mining ("Miners hold the switch"): miners signal three things at three thresholds, 60 percent of blue blocks over two weeks… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| C1 | vs Monero: GPUs were excluded on purpose | Answered by design | Monero chose the CPU for egalitarian reasons and accepted botnets as the price. | litepaper "For miners", hardware paragraph. |
| C2 | vs Monero: "no chip in seven years" is not proof | Conceded, stated | The home page no longer carries the RandomX paragraph; "since 2019 (approximate)" and "precedent, not proof" stand on `site/litepaper.html` (vs RandomX, Mining). | none. |
| C3 | vs Kaspa: you misrepresent them | Conceded, stated | `Site/litepaper.html`, The problem, "Chips arrived, as on Kaspa, whose hash was designed to welcome them"; Speed, "Kaspa has run in production since 2021 (approximate), forked from rusty-kaspa"; precedents row 5,… | none in repository; `vendor/rusty-kaspa` to be cloned and cited. |
| C4 | vs Kaspa: a finality overlay changes GHOSTDAG's guarantees | Measured on the live node line, and the overlay does NOT… | A NEW SERIOUS FINDING (5 October 2026 sweep; owner: cryptographer and consensus engineer, decision owner the founder). | [sim/results.md](../sim/results.md) |
| C5 | vs Ethereum: you compare inclusion to finality | Conceded, stated | `Site/litepaper.html`, Speed, "Inclusion is not confirmation on either chain". | litepaper "Speed". |
| C6 | vs Ethereum: every one of your components is a research project | Conceded, stated | `Site/litepaper.html`, Roadmap, "the combination is the risk the gates price" and "Dates slip. | litepaper "Roadmap". |
| C7 | vs Bitcoin: hashrate that follows price is the design, you penalise it | Conceded, stated in the simulation | Correct. | [sim/results.md](../sim/results.md) |
| C8 | vs Ergo, Ravencoin, Conflux: GPU mining has a home | Conceded, stated | `Site/litepaper.html`, The problem, "Ergo, Ravencoin and Conflux still mine on GPUs at a fraction of the 2022 fleet (approximate)"; precedents row 3 names Conflux. | none in repository; to be cited from their repositories. |
| C9 | vs Aleo: you will centralise the same way | Closed by rule | See P8. | design doc "Existing prover networks" table, Aleo row. |
| C10 | vs Boundless and Succinct: you cannot bid there without their tokens | Conceded, stated | `Site/litepaper.html`, Proving for everyone else, "Boundless provers post ZKC and Succinct provers stake PROVE (approximate, from their documentation)". | design doc "Existing prover networks" table, labelled approximate. |
| C11 | vs everyone: "firsts" that are not | Conceded, stated | `Site/litepaper.html`, precedents table, "We know of no chain that combines them"; Building, "that we know no other EVM chain offers". | this ledger. |
| C12 | vs Monero: you borrowed the hash idea and left out the point | Answered by design | Transactions on Igneum are public, as on Ethereum. | CLAUDE.md rules (privacy rejected). |
| L1 | It is a security under Howey | Open | Only the founder's decision with counsel settles it; counsel engaged since 6 October 2026 (decisions item 6). | design doc "Legal" paragraph. |
| L2 | Financial promotion rules | Open | Only the founder's decision with counsel settles it; the text half is stated (the schedule facts above). | none. |
| L3 | GoDaddy domains are a seizure risk | Decided | The nameserver move to deSEC in one sitting with every domain's Vercel verification checked afterwards; a non-US registrar in December 2026 when the transfer lock ends. | CLAUDE.md "Domains". |
| L4 | Paying testnet miners real money is a payment before launch | Open | Only the founder's decision with counsel settles it. | design doc "The first six months". |
| L5 | Trademark | Answered with evidence | The clearance search is recorded in the repository as the entry asked, `docs/legal/trademark-search-2026-10-03.md` (3 October 2026, one verdict per register: EUIPO RISK, IGNIUM EUTM 018212492 live in classes 36 and 42;… | none. |
| L6 | A permissionless job market paid in dollars is money transmission | Answered by design | At launch jobs are paid on the customer's chain, in the customer's asset, by the customer's contract, to the prover's address; Igneum operates no custody and takes no cut off-chain. | design doc "The first six months". |
| X1 | "Reproducible from the repository" and the repository is private | Conceded, stated | `Site/litepaper.html`, vs RandomX "Track record" row, "The specification, reference hash, test vectors and simulators are public now (git.igneum.network/igneum-network/spec). | [site/index.html](../site/index.html) |
| X2 | "Get the miner" with no miner | Conceded, stated | `Site/index.html`, hero button "See the miner"; the Mine section's download buttons carry the shipped devnet build's version and size (v0.3.9) beside "Public testnet: not yet open; the devnet build is here for people… | [site/index.html](../site/index.html) |
| X3 | "Proven by fire" when nothing has run | Conceded in part, labelled, stated | The proofs feed moved to the litepaper's proving section with the home-page redesign and reads "Live rows arrive with the public testnet. | [site/index.html](../site/index.html) |
| X4 | Thirteen months with one founder | Conceded, stated | The roadmap is aggressive and every phase is a gate that can repeat or stop the project, which the litepaper says. | litepaper "Roadmap"; design doc "Team". |
| X5 | 1,000 independent miners is a Sybil number | Decided | The independence definition as written, with the silent-fleet addition (a key with no fingerprint counts as its own class only when its address is in an autonomous system no other key uses); the observer columns on… | [site/journey.json](../site/journey.json) |
| X6 | The one-click app is a honeypot vector | Decided | Correct on all three. | not yet. |
| X7 | No community exists | Conceded, stated | This ledger's submission line names hello@igneum.network and the spec issues route; `site/litepaper.html` last paragraph and the footer on every page carry both. | [site/index.html](../site/index.html) |
| X8 | Exchange listings as a roadmap item | Conceded, stated | The home page's journey is no longer shown (the inlined feed remains in the page source); the sentence "No listing is arranged, promised or sought by the project" stands on `site/litepaper.html` Roadmap phase 6 and in… | [site/journey.json](../site/journey.json) |
| X9 | Launch hashrate will be trivial | Conceded, stated | `Site/litepaper.html`, Finality, "In the chain's first 30 days no checkpoint locks at all"; Fair launch, "The first 30 days of mainnet run on proof of work alone". | [sim/results.md](../sim/results.md) |
| X10 | Five milestones in one day | Conceded, stated | `Site/index.html`, journey section, "The log below is the engineering log's dated entries, newest first. | [site/journey.json](../site/journey.json) |
| M14 | A pulsed rental against the block-count DAA buys weight at a discount | Answered with evidence | , ledger close round 1: M14 and F14 the 50x pulse against a lagging retarget inside the finality simulator, both W2 forms"). | [sim/difficulty/devnet-2026-10-03.csv](../sim/difficulty/devnet-2026-10-03.csv) |
| M15 | A header with any past timestamp or any claimed DAA score makes the node build a 256 MiB cache | Fixed | Correct. | [docs/fork-divergence.md](../docs/fork-divergence.md) |
| M16 | The 256 MiB cache fits on a die, so the recompute attacker is compute bound | Answered with evidence | On the 5090 the recompute attacker with the cache inside the 96 MiB L2 (the SRAM emulation, 64 and 32 MiB masks, bit-exact against the stored construction) runs at 33.9 Mhash/s against 132.2 honest for the same… | [proto-metal/MEMHARD.md](../proto-metal/MEMHARD.md) |
| M17 | Every ahead-of-time miner stops at the epoch boundary; whoever compiles in process mines alone | Fixed | And measured on the live devnet at the DAA 3,600 boundary (`docs/bench-log.md`, "first hourly program swap"): prepare sent 449 DAA before the boundary; Metal compiled in 82 ms, CUDA ran nvcc in the background in 1,285… | [proto-cuda/windows-miner/start-mining.ps1](../proto-cuda/windows-miner/start-mining.ps1) |
| M18 | The per-hash random data path is a one-bit select | Conceded, stated | `Site/litepaper.html`, Mining table "Every hash" row, "The one-bit select inside the maths costs a chip nothing and is not a defence"; vs RandomX "Random program" row, "the 128 dataset addresses change with the nonce". | [site/litepaper.html](../site/litepaper.html) |
| M19 | The census that justifies the generator rule has blank cells, and the spec still carries the free load count | Fixed | Correct. | [docs/analysis/weak-program-census-2026-10-03.md](../docs/analysis/weak-program-census-2026-10-03.md) |
| M20 | Pruning proofs are checked with the kHeavyHash stub | Fixed in the node | Correct. | [docs/fork-divergence.md](../docs/fork-divergence.md) |
| M21 | GHOSTDAG k is Kaspa's table value for Kaspa-sized bodies | Answered with evidence for the largest body the rules allow | , ledger close round 1: M21 block propagation with bodies at the mass limit, k re-derived"); the red rate under such bodies is not measured. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| F14 | Weight in blocks over a window in blocks under a lagging retarget | Answered with evidence | , ledger close round 1: M14 and F14 the 50x pulse against a lagging retarget inside the finality simulator, both W2 forms"). | [sim/results_v2.md](../sim/results_v2.md) |
| F15 | Merge depth is not the reorg bound; the finality depth is | Spec fixed | Spec 2.1 names the finality depth as the reorg bound and merge depth as a merge limit only, spec 3.8 and 3.9 tell exchanges to wait 12 hours of past-median time when `finality_active` is false, and the simnet reorg… | the files above. |
| F16 | A lock can become uncertified after a heal | Decided | Option B, a verified certificate is never withdrawn (spec 3.11.4); the 3.5 paragraph is replaced by 3.11.4's text after `c4-fix` merges, `finality_conflict` and the `finality_active` clear go into the node, the forced… | spec 3.5, 3.9. |
| F17 | Keys are free and the official client mints eight per card | Decided | The client defaults to one vote key per machine, identities share it (spec 3.4.2 item 4); the bitmap bound as item 3. | [proto-cuda/windows-miner/start-mining.ps1](../proto-cuda/windows-miner/start-mining.ps1) |
| F18 | "A silent minority cannot freeze finality" is false under the floor | Fixed | Correct. | [sim/results_v2.md](../sim/results_v2.md) |
| P11 | The native-execution veto makes block validity depend on the node's current selected chain | Fixed | Spec 7.2 item 5 and `docs/design/execution-layer.md` 5.5 and D12 are relative to the carrying block's own selected-parent chain; the two-node reorg test is a row in the design document's 8.5. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| P12 | An aggregator can name itself as every prover | Fixed in the proving code | Every shard proof's public values carry the prover's payout address (`ShardOutput.prover`), the aggregated block proof commits keccak over the provers in shard order and the shard program's verifying-key hash… | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| P13 | The litepaper still claims shards with a bond | Fixed | `Site/litepaper.html`, Proving, "How a block gets proven". | [site/litepaper.html](../site/litepaper.html) |
| P14 | Two definitions of the proving base fee, and a quote that cannot know the ratio | Fixed in the spec | One definition. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| P15 | RPC blocks are segments, so `gasUsed` can exceed `gasLimit` | Fixed on a branch, pending merge | `Igneum/exec/src/rpc.rs` reports `gasLimit` as k x `BLOCK_EXECUTION_GAS_LIMIT` for a k-block segment (k = the record's mergeset length, at least 1), beside the segment's `gasUsed`, so `gasUsed <= gasLimit` holds for an… | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| E9 | The specification's year is 365 days; the code's is 365.25 | Fixed | Spec 2.5 follows the code (365.25-day year, 63,115,200-s halving, 31.688 IGN per DAA second, 8 decimals noted under O-2.6). | [consensus/core/src/igneum.rs](../consensus/core/src/igneum.rs) |
| E10 | Reds are paid in the code and "more blocks never means more coins" is false | Fixed | Spec 2.5 says reds inside the DAA window are paid to the merging miner (80%) and the pool (20%), that `E` is paid per block so coins are blocks times `E` under the controller's rate, and that the cap is unaffected;… | [docs/review/round-3-2026-10-03.md](../docs/review/round-3-2026-10-03.md) |
| E11 | The homepage burns job fees at launch | Fixed | `Site/index.html`, "Proofs sold to other chains" caption and the tile now read "phase two"; the quoted paragraph had already left the page when the homepage was trimmed (commit a commit). | [site/index.html](../site/index.html) |
| C13 | Monero's seven years do not price a 256 MiB SRAM die | Conceded, stated | `Site/litepaper.html`, What Igneum does not claim, "they say nothing about the price of a chip with the 256 MB cache on its die, and that price is a cost model, not a measurement". | none beyond M16. |
| L7 | "Where the price comes from" | Fixed | Heading "Where fees go" and the sentence deleted, `site/litepaper.html` Economics. | [site/litepaper.html](../site/litepaper.html) |
| L8 | Third-party names as implied outcomes | Conceded, stated | `Site/litepaper.html`, Questions builders ask, "whether it is issued is Circle's decision"; Canto and Blast absent from the page (grep, tonight). | [site/litepaper.html](../site/litepaper.html) |
| G9 | The release-key the team is one person, and a lost key cannot be revoked | Rule fixed | Spec 8.2 item 5, rotation signed by the current key and revocation signed by the previous key (a pre-signed certificate for K0), both published in a block; item 2 moves the policy to before the client ships and adds… | spec 8.2. |
| G10 | The signalling default on first run | Rule written | `Docs/spec/08-client-security.md` 8.3 item 2 now ends: on first run there is no last choice, the client signals nothing until the user chooses, and the interface shows that nothing is being signalled. | [docs/spec/08-client-security.md](../docs/spec/08-client-security.md) |
| X12 | Tonight's numbers are quoted before they are logged, and the worker efficiency gap is unexplained | Fixed, logged | Bench-log "5 October 2026 (night), ledger close round 1: X12 the 3 October devnet run from its record"; the launcher half (the eight processes' summed status) stays open until the PC's log is read. | [sim/difficulty/devnet-2026-10-03.csv](../sim/difficulty/devnet-2026-10-03.csv) |
| M22 | The ASIC challenge has no scoring rules, and 2x is not the economic line | Decided | No bounty, so no bounty terms; M22's metrics (hashes per second and per joule per program over at least 100 epochs as a distribution, capital cost per unit of hash rate at a stated volume, the longevity term, the… | M1, O-1.17, spec 1.13 and 1.16, M16's arithmetic. |
| F19 | Old vote keys can be bought; fresh hashrate cannot buy weight | Answered with evidence | A bought key is worth the blocks it holds and nothing more. | [sim/results_v2.md](../sim/results_v2.md) |
| F20 | During a finality pause the program must keep advancing, and nothing says which guarantees survive | Answered with evidence for the test half | , ledger close round 1: F20 finality pause under a 45% silent set through four epoch boundaries"); the gate-3 wording of the four guarantees (O-3.16, O-4.3) stays a decision for the founder. | spec 4.3 (O-4.3), 3.3.1, 3.5, 3.7 item 2, 3.9. |
| F22 | Certificates carry 8 to 10 of 12 votes on a healthy network, so locks sit a hair above the floor | Fixed in the node and shipped, rule not yet activated on… | True as measured, and the cause is not a cut-off at all: the node builds the certificate the instant the votes it holds meet Q3, and carries that one. | [infra/cloud-devnet/results/2026-10-04/partition-sin-20261004-140305/partition.md](../infra/cloud-devnet/results/2026-10-04/partition-sin-20261004-140305/partition.md) |
| P16 | The proving gate can be passed by shrinking the shard | Decided | A 12 GB NVIDIA card (4070) is on order for PC 2; O-7.1 runs end to end on it when it arrives, inside the phase 2 gate. | [docs/bench-log.md](../docs/bench-log.md) |
| P17 | Interfaces must show four states, and the design shows three | Fixed on a branch, pending merge | a fork a commit (a commit rebased onto the 0.3.11 fork tip a commit in round 3), suite igneum-exec 16 of 16 on the Mac (labelled a Mac run), the O-7.2 conformance run PASSED on a fast-time 3-node network (bench-log… | execution-layer 2.3, 2.4, 8.2; phone-app 3 and 9; spec 3.9, 10.1. |
| E12 | Selfish operators under a price shock | Simulation half run | No backlog in any scenario, every block proven within 60 s in every hour, hash troughs at 82% of its pre-event level under b and 75% under d (80% at day 30), 10% of cards off under b… | spec 5.1, 5.3, 7.2; execution-layer 4.3, 9.1 R8. |
| E13 | One diagram per payment route, or operator income and protocol income blur | Conceded, stated | `Site/litepaper.html`, Economics, "Every payment route", six rows (emission; base fee; priority fee; external job at launch; external job after the proof bridge; the official client's dev fee as operator income),… | [docs/commercial/prover-customer-brief.md](../docs/commercial/prover-customer-brief.md) |
| E14 | No funding table | Decided | The funding table stays internal until counsel has read it; one public sentence in the litepaper names the unfunded lines (the second client, the external reviewers, the bounty before escrow). | E4, E5, G1, G5; fud-fixes rows 47, 50, 71. |
| E15 | The security budget through successive halvings with low fees and no external demand | Decided | The 4,000,000,000 IGN hard cap stays absolute and there is no tail emission. | spec 2.5, 5.1 to 5.4; E1, E6. |
| G11 | Publish the inspectable components now, labelled experimental | Decided | The specification subset is public as `igneum-network/spec` (`docs/plans/public-repo.md`), labelled; the node fork, the proving code and the harnesses stay private until the benchmark. | [docs/fud-fixes.md](../docs/fud-fixes.md) |
| X13 | One paying customer for a stated reason | Decided | The paid pilot stays in phase 5, the phase 4 gate stays the signature, nothing moves earlier before counsel answers L4. | [site/journey.json](../site/journey.json) |
| X14 | Concentration is unmeasured in four places | Answered with evidence for all four | , ledger close round 2: X14 signing concentration from block payloads"); the independence definition stays the founder's (X5). | X5, F10, P12, spec 9.4.2. |
| X15 | Remove the founders from a test network and show what continues | Answered by design | The design rules the sentence rests on are in force (every node ships a VDF evaluator, spec 4.5; the seed list ships in the client, spec 10.6; no project-run service sits in consensus, no stake, no fee to any team,… | [site/litepaper.html](../site/litepaper.html) |
| X16 | An evidence page with four labels | Written | `Docs/evidence.md`, one row per public claim with five labels (tonight, counting the label column of the claims table: designed 9, implemented 8, tested by the team 26, reproduced externally 3, reviewed independently 2). | [docs/bench-log.md](../docs/bench-log.md) |
| X17 | The miner app must show net earnings and keep jobs away from keys | Designed | Spec 8.8 and phone-app 4.1; measurement O-8.2 and the escape test O-8.3 scheduled for the phase 4 devnet. | [site/litepaper.html](../site/litepaper.html) |
| P18 | The mempool queues transactions no block can carry | Fixed | Correct, and low: the queue slot was reserved against the sender's funds, so it was self-limited. | [docs/bench-log.md](../docs/bench-log.md) |
| P19 | An over-budget proving transaction runs for free, every time, and blocks its sender | Fixed | Correct, medium. | [docs/bench-log.md](../docs/bench-log.md) |
| P20 | The SP1 GPU client panics on shutdown and the compressed stage waited ten minutes | Fixed and confirmed | The buffered save closed the gap, the core proof finished at and the compressed stage started at; shard timings repeated within 0.3 s (core 9.1 s, compressed 10.5 s); a guest that returned 0 bytes on the second run was… | [docs/bench-log.md](../docs/bench-log.md) |
| M23 | Forge timestamps inside the rules and the controller mines you a 10x difficulty for free | Fixed | Correct on every point, and measured first by our own attack run (`sim/difficulty/attacks/README.md`, scenarios 3 and 7): in the simulator a 50% forger took the block rate to 0.12 (earliest stamp) and 0.56 (latest) of… | [docs/bench-log.md](../docs/bench-log.md) |
| P21 | The SP1 proof is not what consensus checks in proving v0 | Decided | Proving v0 (every producer verifies off the consensus path) through the public testnet; the in-consensus verifier is the execution engineer's plan item for after it; the litepaper sentence labelled Open stands. | none named |
| P22 | The rewards and payouts are inputs to the shard proof, not outputs | Answered by design | The design rule that contains it is in force, spec 7.7 item 6 and design 5.5: the rewards and payouts a shard statement carries are checked against every node's own consensus derivation, so a proof over any other list… | none named |
| M24 | Your two-lane controller oscillates for an hour when a second miner joins mid-epoch | Rolled out | Rule v2 activated on the live devnet at DAA 33,000 by the height switch after a 12-node cloud rehearsal (settle 157 to 272 s, no swing); node 1, the seed, the observer and the three app machines crossed the height on… | [sim/difficulty/records/live-2026-10-04.csv](../sim/difficulty/records/live-2026-10-04.csv) |
| D1 | Your users are a gate, not a fact | Conceded, stated | Correct on the count and on the definition. | [docs/bench-log.md](../docs/bench-log.md) |
| D2 | The app share pays nothing | Conceded, stated | `Site/litepaper.html`, Building, Why build here, "a million 100,000-gas calls a day at a 1 gwei tip pays about 7,300 IGN a year"; Canto and Blast absent from the page (grep, tonight). | [docs/design/developer-adoption.md](../docs/design/developer-adoption.md) |
| D3 | Proof of work in 2027 is a perception cost you cannot measure | Conceded, stated | `Site/litepaper.html`, What Igneum does not claim, "A label that costs nothing. | [site/litepaper.html](../site/litepaper.html) |
| D4 | No dollar, no DeFi | Conceded by decision | , restated here for builders. | [docs/review/round-3-2026-10-03.md](../docs/review/round-3-2026-10-03.md) |
| D5 | I cannot debug a revert | Conceded, scheduled, stated | `Site/litepaper.html`, What Igneum does not claim, "A chain you can debug today. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| D6 | A forged job result reaches my contract and nobody vetoes it | Conceded, contained by rule, stated | `Site/litepaper.html`, What Igneum does not claim, "A veto on job results. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| X23 | One shipped key is an administrator channel to the founder's PCs | Fixed on a branch, pending merge | Three tiers in `relay/lib/guard.mjs` (`authVia`): the console token (header or the phone page's path), the relay's own key (`RELAY_KEY`: reads and reports, never `task`, `run`, `name`, `role`, `secret`, `delete`), and… | [docs/review/round-4-2026-10-04.md](../docs/review/round-4-2026-10-04.md) |
| X24 | The relay token rides in the URL on every request | Fixed on a branch, pending merge | Every client and Mac tool calls `/api/relay?fn=<fn>` with `x-relay-token` (and `x-igneum-key`) as headers: `igneum-agent.ps1` and `send.ps1` (`Api-Url`), `agent.sh` and `send.sh` (through a 0600 curl config file, `-K`,… | [tools/relay.mjs](../tools/relay.mjs) |
| X25 | The PC agent installs itself at every logon, at highest privilege, on every start | Fixed on a branch, pending merge | `Igneum-agent.ps1` calls `Arm-Restart` only on the two paths that end in `shutdown.exe /r` (a task that printed `RELAY-REBOOT` on its own line AND was queued with `--reboot` or `--reboot-continue`), sets… | [relay/clients/igneum-agent.ps1](../relay/clients/igneum-agent.ps1) |
| X26 | The feed is a permanent transcript, and it holds the dl token by design | Fixed on a branch, pending merge | Retention 30 days (`relay/lib/handler.mjs` `expire`: `DELETE... | [relay/lib/handler.mjs](../relay/lib/handler.mjs) |
| X27 | The relay has no clean rotation and no sender binding | Fixed on a branch, pending merge | A per-machine secret (64 hex, `node tools/relay.mjs secret PC1`: written to `~/.config/igneum/relay-machines/PC1` at 0600, its sha256 bound on the relay with `POST secret` (token only), carried to the PC as… | [relay/README.md](../relay/README.md) |
| X28 | Relay hygiene, minor | Fixed on a branch, pending merge | The remaining points. | [lib/wake.mjs](../lib/wake.mjs) |
| G12 | The PoW schedule comes from the environment on every network, including mainnet | Fixed | . | the files above. |
| G13 | The update signature covers binaries that nobody signed | Fixed on a branch and verified locally | The chain already on master was read end to end and run, not asserted. | [packaging/windows/push-inputs.sh](../packaging/windows/push-inputs.sh) |
| G14 | Secrets and identity in the history of a repository with a public date | Decided | `TZ=UTC` in every commit path the tooling owns: `tools/ship-app.mjs` (`git` runs with `env: { TZ: 'UTC' }`), `packaging/ota/publish-jobs.sh` (`export TZ=UTC`, found by the class check), `tools/repo/fresh-repo.sh`… | [tools/ship-app.mjs](../tools/ship-app.mjs) |
| X18 | Two nodes with two override files connect, and only some mismatches fork | Fixed | . | the files above. |
| F23 | The equivocation ban is node-local, so honest nodes refuse each other's certificates | Fixed | . | the files above. |
| F24 | A checkpoint determination is never revisited | Fixed | . | the files above. |
| F25 | The fast-time harnesses cannot start a node, and the timestamp probe tests the old rule | Fixed | Correct, measured. | [rt/logs/fa_s8/n0/node.log](../rt/logs/fa_s8/n0/node.log) |
| X19 | Operational knobs and silences in the shipped node | Fixed on a branch, pending merge | The node half, fork commit a commit. | [protocol/flows/src/flowcontext/clock_skew.rs](../protocol/flows/src/flowcontext/clock_skew.rs) |
| X20 | Cold-sync checkpoint determination is indices times chain length | Fixed on a branch, pending merge | `Consensus/src/processes/finality.rs` `on_virtual_changed` resolves every index the sink can determine in ONE descending walk of the selected chain (`chain_blocks_at`, targets highest first), where it walked from the… | [consensus/src/processes/finality.rs](../consensus/src/processes/finality.rs) |
| M25 | The miner takes the day length from its environment, and the schedule global can tear | Fixed on a branch, pending merge | Correct. | [igneum/miner/src/main.rs](../igneum/miner/src/main.rs) |
| M26 | The interval fault guard freezes its baseline and loops | Fixed | `IntervalGuard` builds its baseline from the healthy intervals of the current worker process (a moving average, two intervals before it can trip) and forgets it when the worker restarts; the STATUS line is printed on a… | [docs/bench-log.md](../docs/bench-log.md) |
| M27 | A flapping node makes the worker rebuild once per template | Fixed | Correct. | the files above. |
| M28 | The kernel text is bound only to its own directory | Fixed on a branch, pending merge | Correct. | [proto-cuda/nvrtc/packfile.h](../proto-cuda/nvrtc/packfile.h) |
| X21 | A wrong program burns power with a green rate | Fixed | Correct. | the files above. |
| X22 | Worker restart paths, minor | Fixed on a branch, pending merge | The four remaining paths. | [app/igneum-app/src/engine.rs](../app/igneum-app/src/engine.rs) |
| E16 | The 20% pool is burned on the live chain, and the text says it pays provers | Answered with evidence and stated | Correct for the live devnet-v4 line. | [docs/review/round-4-2026-10-04.md](../docs/review/round-4-2026-10-04.md) |
| L9 | "100% to miners and provers", "0% anyone else", and no word that devnet coins have no value | Conceded, stated | `Site/index.html`, `site/miner.html` and `site/wallet.html`, a line beside every download control, "Devnet: coins have no value and the chain may be reset."; `site/index.html` Economics tiles, "of emission to miners… | the files above. |
| M29 | The litepaper's app paragraph describes an app that does not exist | Conceded, stated | `Site/litepaper.html`, For miners, "One click, for everyone else", rewritten to Ember 0.3.9 from `app/igneum-app/ui/index.html` (hash rate, blocks found, node, next program, finality votes, the proving tile, the devnet… | [ui/app.js](../ui/app.js) |
| M30 | A block or transaction flood grows the 0.3.4 node by hundreds of megabytes in a minute | Fixed | Measured, cause not yet isolated. | [docs/bench-log.md](../docs/bench-log.md) |
| M31 | The 0.3.4 node cannot produce a block template on mainnet, testnet or simnet parameters | Fixed | Measured on the execution-layer attack network (`tools/exec-attacks/net.sh` runs `--simnet` with no override): three nodes up, 0 blocks, every template refused with that line (`docs/review/redteam-2026-10-04.md` row 27). | [rt/logs/exec_b/miner_node1.log](../rt/logs/exec_b/miner_node1.log) |
| E17 | Unlogged inputs behind the economics, minor | Answered with evidence for PC 2 | RTX 5090 honest 132.2 Mhash/s at 326.6 W median, 3,060 MHz, 50 to 54 C, 100% utilisation (0.40 Mhash/J); 346.9 W at 8 warps per block; the inline settings 415.7 W and 431.0 W (the power limit). | [docs/review/round-4-2026-10-04.md](../docs/review/round-4-2026-10-04.md) |
| E18 | The dev fee is a protocol fee with better PR | Answered by design and with evidence | The fee exists and is disclosed; the rest is wrong in three places. | [docs/design/miner-dev-fee.md](../docs/design/miner-dev-fee.md) |
| X29 | Host and file hygiene, minor | Decided | The curl part: `infra/gpu-bench/upload.sh` writes `header = "x-igneum-key:..."` to a 0600 temporary config and calls `curl -K`; `proto-cuda/windows-app/upload-log.bat` and `proto-cuda/windows-miner/upload-log.bat` do… | [infra/gpu-bench/upload.sh](../infra/gpu-bench/upload.sh) |
| X30 | The live page and the bench page exposed operational detail | Fixed | `Ac89a37` and a commit (a scrubbed copy, the build fails on any private string), a commit (none of the three in the public API), a commit (the menu). | the commits above. |
| X31 | The public testnet dated "August 2027" on the site | Fixed, stated | Every mention of the month is gone from the site and no date is given. | [docs/plans/testnet-go.md](../docs/plans/testnet-go.md) |
| X32 | The roadmap carried calendar months beside a testnet that is weeks away | Fixed, stated | Every calendar month is out of the roadmap. | [site/litepaper.html](../site/litepaper.html) |
| X33 | The public benchmark dated "January 2027" | Fixed, stated | Both sentences read "The public benchmark with a leaderboard ships with the public testnet." (`site/litepaper.html`, For miners and Questions miners ask). | [site/litepaper.html](../site/litepaper.html) |
| X34 | RandomX described as chip-free | Fixed, stated | Four sentences corrected, each with the X9 as the stated fact and its date; every sentence that only names the technique stands. | [site/index.html](../site/index.html) |
| X35 | The class v4 chip headline stated as one number, 2.1x | Fixed, stated; restated | The served chip text is the third review's claim statement ("Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its… | [docs/design/latency-ladder.md](../docs/design/latency-ladder.md) |
| X36 | The X9 described as a shipping chip | Fixed, stated; restated | The X9 appears on the served pages only as a precedent (the pre-order, the withdrawal, no benchmark) and no served sentence uses its claimed core as a chip core against the model; the Antminer X5 is served as an… | [site/index.html](../site/index.html) |
| X37 | The class v4 energy premium is a cost the user pays, not a line in a model | Answered with evidence | Measured on the RTX 5090, 145 W of premium unlocked and 82 W at the knee; the RTX 5080 at stock 84 W, its grid running; the team identity says the premium needed for 2x at k = 1 is 103 W at the lock and a premium of… | [docs/plans/counter-asic-3-status.md](../docs/plans/counter-asic-3-status.md) |
| N1 | A 0.3.15 node on the live file wrote blocks every 0.3.14 node rejected | Fixed | The class v4 signal (PROPOSED, `docs/plans/counter-asic-3-node.md` section 6) is the producer's object version in the high byte of the header version; the first 0.3.15 build stamped it from the binary alone, so on the… | [infra/fast-time/node-compat.mjs](../infra/fast-time/node-compat.mjs) |
| N2 | Any peer could crash any pruned node with a sync request below its retention | Fixed | `SyncManager::antipast_hashes_between` (the IBD headers path, `RequestHeaders`) unwrapped the GHOSTDAG reads of the requested low block and of every chain block of the walk; a pruned node holds no GHOSTDAG data below… | unit test `a_sync_request_below_retention_is_an_error_not_a_panic` (a chain of six headers, the genesis's GHOSTDAG… |
| P23 | An unwound transaction leaves the node's view until its sender resends it | Fixed on a branch, pending merge | a fork a commit (the P23 commit, on the merge of `ledger-fixes` and `ledger-fixes-2` onto the 0.3.11 fork tip a commit); `EvmPool::on_chain_removed` (igneum/exec/src/pool.rs) and `ExecService::requeue_unwound`… | [igneum/exec/src/pool.rs](../igneum/exec/src/pool.rs) |
| AP-F8-1 | A load whose source was last written by `or`, `mul` or `mulhi` makes a cross-hash hot set | Fixed in part, finding bounded, stated | Class v4 sub-version 3 (igneum-pow a commit, the audit-freeze tag) is frozen with the dataflow rule, the shared-operand rule, the 0.98 ratio and the total draw; the in-house pass's F8 re-gate reads 60 of 64 seeds under… | [docs/analysis/ca3-v4-uniform.md](../docs/analysis/ca3-v4-uniform.md) |
| AP-F8-4 | The program id's derivation text omitted generator 4's sub-version suffix (interoperability, documentation; no object change) | Fixed | The id and its printed derivation come from one byte recipe (`generator::IdRecipe`, `program_id_recipe`, `program_id_class_recipe`, `Program::program_id_derivation`), so the two cannot drift; the emitter prints that… | [igneum-pow/tests/derivation.rs](../igneum-pow/tests/derivation.rs) |
| AP-F8-5 | The public specification did not describe the shipped acceptance rule (documentary; no object change) | Spec fixed | Sections 1.4.3 and 1.4.6 of `docs/spec/01-lottery-hash.md` rewritten to the shipped rule at igneum-pow a commit with every constant named and every order of operations stated (1.4.3: the two per-register states of the… | [docs/analysis/cryptanalysis/report-acceptance-rule-3.md](../docs/analysis/cryptanalysis/report-acceptance-rule-3.md) |
| AP-F8-7 | The hash's reads are not uniformly random: about half of epochs carry one load site with a biased address bit | Open, priced | 1.6 percent at f = 1/2, nothing at f = 1; the served sentence corrected 8 October 2026 (the site the team, by the team's word): the litepaper's lead reads "dependent reads spread over a multi-gigabyte dataset", the… | [docs/analysis/class-v6/family-gate.md](../docs/analysis/class-v6/family-gate.md) |
| GF1 | A post-quantum signature scheme would need a hard fork, and every vote key is a public BLS12-381 point | Fixed | The byte costs nothing now and a fork later. | none named |
| GF2 | A vote key cannot move: a miner who changes keys re-earns 30 days of weight, and so does the post-quantum migration | Fixed | The successor inherits the window, not a fresh one, so a key rotation costs no weight and the migration of GF1 is one item per key. | none named |
| GF3 | A 256 MB on-chip cache makes the lottery hash 2 to 3x cheaper for the card that has it, and the cache size is a constant | Fixed as a genesis lever, measurement owed | Consumer LLC is 96 to 128 MB today and datacentre 256 MB (`chip-model-v3`, approximate), so the shortcut is a datacentre card's today and a consumer card's in a generation or two. | none named |
| GF4 | The class-group VDF falls to the same quantum computer | Conceded, stated | `Site/litepaper.html`, What Igneum does not claim, "A delay function that outlives a quantum computer. | none named |

View file

@ -1,202 +1,34 @@
# Igneum criticism ledger, public shape
Generated by `tools/ledger/export-public.mjs` from `docs/fud-ledger.md`; a gate check fails when the two drift. One row per item: the claim or criticism, its status, what was done, and the evidence. Internal identifiers, times of day and team-member names are left out on purpose; the full ledger is published with the repository.
Generated by `tools/ledger/export-public.mjs` from `docs/fud-ledger-2.0.md`; a gate check fails when the two drift. One row per item: the claim or criticism, its status, what was done, and the evidence. Internal identifiers, times of day and team-member names are left out on purpose; the full ledger is published with the repository.
194 items. By status: Conceded, stated 52; Fixed 31; Decided 21; Fixed on a branch, pending merge 14; Answered by design 9; Answered with evidence 6; Fixed, stated 4; Closed by rule 3; Open 3; Spec fixed 2; Fixed, stated; restated 2; Answered by design, with a correction to our own text 1; Answered with evidence, stated 1; Answered by design for finality, Conceded for the lottery 1; Conceded, implemented, stated 1; Rule implemented and measured; launch month simulated 1; Answered by design, with the concession stated 1; Conceded, stated in the litepaper and the design doc 1; Answered with evidence at 1 block/s 1; Conceded, stated in the simulation report 1; Answered by design, with the dependency conceded. Update 7… 1; Conceded, stated in the litepaper, with the dial explained 1; Closed by spec 1; Conceded by decision, stated in the design doc 1; Answered by design, with the founder's edge conceded 1; Answered by design, with a metrics caveat 1; Closed by removal, 3 October 2026 1; Conceded, stated in the litepaper 1; Conceded, stated in the design doc 1; Measured on the live node line, and the overlay does NOT… 1; Conceded, stated in the simulation 1; Conceded in part, labelled, stated 1; Fixed in the node 1; Answered with evidence for the largest body the rules allow 1; Fixed in the proving code 1; Fixed in the spec 1; Rule fixed 1; Rule written 1; Fixed, logged 1; Answered with evidence for the test half 1; Fixed in the node and shipped, rule not yet activated on… 1; Simulation half run 1; Answered with evidence for all four 1; Written 1; Designed 1; Fixed and confirmed 1; Fixed in the node behind a named switch 1; Rolled out 1; Conceded by decision 1; Conceded, scheduled, stated 1; Conceded, contained by rule, stated 1; Fixed on a branch and verified locally 1; Answered with evidence and stated 1; Answered with evidence for PC 2 1; Answered by design and with evidence 1; Fixed in part, finding bounded, stated 1; Open, priced 1; Fixed as a genesis lever, measurement owed 1.
26 items. By status: Open 12; Decided 8; Conceded 6.
| Id | Claim or criticism | Status | What was done | Evidence |
|---|---|---|---|---|
| M1 | The program space is tiny | Decided | No standing bounty. | [docs/bench-log.md](../docs/bench-log.md) |
| M2 | Your own prototype is not memory-hard | Conceded, stated | `Site/litepaper.html`, Monero's idea section, the "Measured so far" paragraph, "computing items on the fly runs 4.8x slower than loading them"; What Igneum does not claim, "A memory-hard prototype on every vendor". | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M3 | Kaspa said ASIC resistant too | Answered by design, with a correction to our own text | First the correction: Kaspa did not promise ASIC resistance. kHeavyHash was designed to be friendly to specialised and optical hardware, and the Kaspa community expected chips (approximate, from memory; cite the Kaspa… | design doc, "ASIC resistance" section. |
| M4 | ProgPoW already did this and you do not mention it | Conceded, stated | `Site/litepaper.html`, precedents table row 1, "ProgPoW, as KAWPOW on Ravencoin since 2020". | [vendor/](../vendor/) |
| M5 | Your load count varies 6x between programs | Fixed | Generator version 2 draws exactly 16 load slots per program (spec 01 section 1.4.2, `igneum-pow/src/generator.rs`), and the fresh-source rule of 1.4.3 with the acceptance rule of 1.4.6 fixes the distinct count too,… | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M6 | Weak programs | Fixed | The acceptance rule of spec 01 section 1.4.6 (`igneum-pow/src/accept.rs`, mirrored in `proto-metal/main.swift`) rejects a candidate with a stale load source, a register without an injecting write, a nonce-independent… | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M7 | No cryptographic analysis at all | Conceded, stated | `Site/litepaper.html`, Mining section, "The hash is a lottery, not a general-purpose cryptographic hash" and "Open: no analysis of the lottery properties exists yet". | [proto-metal/TESTS.md](../proto-metal/TESTS.md) |
| M8 | Only two vendors, two programs, one day | Decided | A discrete AMD card (9070 XT) and a 12 GB NVIDIA card (4070) are on order for PC 2; the measurement runs on arrival. | [docs/bench-log.md](../docs/bench-log.md) |
| M9 | The 10 ms CPU verification gate is unmeasured | Conceded, stated | `Site/litepaper.html`, Mining section, "Measured: 0.41 to 0.58 ms per warp on one Apple M5 Max core with the 256 MB cache"; vs RandomX "Light verification" row. | [docs/bench-log.md](../docs/bench-log.md) |
| M10 | "Bound by memory bandwidth" is wrong | Answered with evidence, stated | `Site/litepaper.html`, Mining section, "bound by random memory access. | [docs/bench-log.md](../docs/bench-log.md) |
| M11 | Hourly JIT on real rigs | Decided | The mixed-generation rig is borrowed from a farm operator later, at the HiveOS package's first test; the 9070 XT on order gives the ROCm half on PC 2. | [docs/bench-log.md](../docs/bench-log.md) |
| M12 | Rentable hashrate is not just NiceHash | Answered by design for finality, Conceded for the lottery | Both halves true. | [sim/results.md](../sim/results.md) |
| M13 | Macs mine too is marketing | Conceded, stated | `Site/litepaper.html`, For miners, Hardware, "Macs mine too, at about a fifth of a flagship card: Measured, 26.7 against 123 million hashes a second" (confirmed by grep tonight; the projected-earnings half is not… | [docs/bench-log.md](../docs/bench-log.md) |
| M32 | "Automatic anti-ASIC escalators" overstates what the era draw and the instruction reserve do | Conceded, stated | The era draw and the instruction reserve are automatic schedule changes against fixed datapaths and against human forks; against the stored-dataset chip every drawn parameter is firmware, and the defence against that… | [docs/analysis/horizon/algorithm.md](../docs/analysis/horizon/algorithm.md) |
| M33 | The FPGA ceiling rests on a tFAW the JEDEC HBM2 table does not give | Conceded, stated | 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… | [docs/analysis/horizon/algorithm.md](../docs/analysis/horizon/algorithm.md) |
| 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 | Conceded, implemented, stated | The public text carries the ladder (`site/litepaper.html`, Mining: the six-rung genesis ladder of the latency shadow with a measured admissibility flag per rung, moved by miner signalling, never by a fork; and the X9… | [docs/design/latency-ladder.md](../docs/design/latency-ladder.md) |
| F1 | Finality is attackable for the first month | Rule implemented and measured; launch month simulated | The harness text only: `tools/finality-attacks/run.mjs` names the 2/3-of-total floor in the s6 comments and criterion and in the s5 result line, where it still said 56.7%; the scenario logic is untouched. | [sim/](../sim/) |
| F2 | The two-hour presence window is an eclipse vector | Closed by rule | Correct that the presence window trades safety for liveness. | [sim/results.md](../sim/results.md) |
| F3 | Participation grinding through the bitmap | Decided | The per-block vote bound and the bitmap wire bound of spec 3.4.2 items 2 and 3 are adopted for gate 3; the spec moves them from Proposed to Decided at the next spec edit. | design doc Finality v2, Quorum item 2 and Checkpoints item 3. |
| F4 | It is proof of stake with extra steps | Answered by design, with the concession stated | The committee's weight is blocks mined in the last 30 days. | [sim/results.md](../sim/results.md) |
| F5 | The headline arithmetic is misread on purpose | Conceded, stated | `Site/litepaper.html`, Finality, "an attacker producing every block on the chain, with honest miners gone" and "An attacker matching the honest network needs twenty days for a third and never reaches two thirds"; the… | [sim/results.md](../sim/results.md) |
| F6 | Equivocation costs nothing that matters | Conceded, stated in the litepaper and the design doc | True. | design doc Finality v2, Checkpoints item 4 and Residual risks bullet 1. |
| F7 | A 2-minute checkpoint on a DAG with a 1-hour merge bound | Answered with evidence at 1 block/s | Fair. | design doc Finality v2, Checkpoints item 1 and "Three experiments before gate 3". |
| F8 | The simulation has no network in it | Conceded, stated in the simulation report | Correct. | [sim/results.md](../sim/results.md) |
| F9 | Half the hashrate leaves and finality stalls for ten days | Answered by design | That table is the all-keys denominator, which the simulation recommended for safety. | [sim/results.md](../sim/results.md) |
| F10 | Pools hold the votes | Conceded, stated | `Site/litepaper.html`, Finality, "Pools carry their hashers' votes, so vote concentration equals pool concentration, and it is public"; Governance, "governed by the hashrate that powers it". | design doc Finality v2, Residual risks bullet 3. |
| F11 | VDFs are exotic | Answered by design, with the dependency conceded. Update 7… | The era VDF is in the node (spec 4.4 Implemented, behind `era_vdf_activation_daa`, never until the founder sets it per network), on a fixed-width integer with no C library, with the hash-chain fallback behind the… | design doc Finality v2, Lottery seeds items 1 and 2, Residual risks bullet 5, "Three experiments before gate 3". |
| F12 | Nothing outside the chain, except | Answered by design | Those are code dependencies, chosen because each is open source and replaceable, and none is another chain's consensus. | CLAUDE.md design paragraph; design doc "Decided" paragraph. |
| F13 | Why prove every block if every node executes anyway | Answered by design | Full nodes execute natively so users see state in about a second. | design doc, "Proving speed on consumer GPUs" risk item and "Who needs" paragraph. |
| F26 | "No stake" needs its one sentence: what is at stake, and what strips it | Conceded, stated | `Site/litepaper.html`, the finality section's "What is not here" paragraph and the "Igneum at a glance" Finality row carry the sentence verbatim: "No coin is staked. | [docs/analysis/horizon/frontier.md](../docs/analysis/horizon/frontier.md) |
| P1 | The 20-second shard is a number you made up | Conceded, stated | `Site/litepaper.html`, Proving, The proving budget, "Target: shard size will be set so a 12 GB card proves one shard in about 20 seconds. | [site/journey.json](../site/journey.json) |
| P2 | Real-time proving needs a hundred GPUs per block | Conceded, stated in the litepaper, with the dial explained | True, and the litepaper says a full block needs a cluster of 100 to 200 consumer GPUs, approximate. | design doc "Unit economics of a proof"; litepaper "What Igneum does not claim" item 1. |
| P3 | A phone verifies in milliseconds is a SNARK-wrapper claim | Answered by design | The design rule covers the claim (design 5.6 `wrap`, R4: the aggregated block proof wrapped once into a small curve-based proof by the aggregator) and the public text says what is and is not measured… | not yet. |
| P4 | Trustless light clients need a consensus proof you do not have | Conceded, stated | `Site/litepaper.html`, precedents table row 6, "The consensus proof that makes the checkpoint self-verifying is phase two"; Building item 2, "Light clients". | design doc, hostile review table rows "Slashing an external prover" and "One-proof light clients". |
| P5 | EVM "unchanged" on a DAG is false | Closed by spec | Correct. | design doc, hostile review table row "EVM semantics on a DAG". |
| P6 | The proving market is tiny | Conceded, stated | `Site/litepaper.html`, The problem, "a supplier whose marginal cost is close to power"; "cheapest supplier" and "lowest cost" absent from the page (grep, tonight). | design doc "Market size, honestly" and "Existing prover networks" table (labelled from memory). |
| P7 | A soundness bug in SP1 is a consensus failure | Conceded, stated | `Site/litepaper.html`, Abstract, "Writing new code, including an emergency fix to the proof system, is the one thing that takes a person"; Proving, "no node accepts a block with a wrong state root". | design doc "Proof system churn" risk item. |
| P8 | Fastest prover wins all the shards | Closed by rule | Fair, and the lottery/proving separation does not by itself fix it. | design doc "Proving speed on consumer GPUs" risk item and Finality v2 "Fees". |
| P9 | Shard griefing | Decided | The parameter table's values are the phase 4 devnet's starting values (8 assignees, a 25-s exclusive window, a 120-s job claim timeout, no shard bond, the external job bond set on the devnet); the devnet measurement… | design doc, Security model table row 3. |
| P10 | External jobs are paid off-chain, so where is the burn | Conceded, stated | `Site/litepaper.html`, Economics, "Outside customers pay in their own currency on their own chain at launch; settlement in IGN with a 10% burn follows when the proof bridge lets Igneum see the payment"; the route table… | design doc "The first six months" risk item and hostile review table row "Slashing an external prover". |
| P24 | "20 percent of emission to provers" without the caveat that consensus does not verify the proof | Conceded, stated | `Site/litepaper.html`, Economics, the 20% proving-pool row carries the caveat: consensus does not yet verify the carried proof, it checks the record's statement against native execution and its signature, so today a… | [docs/analysis/horizon/consensus-security.md](../docs/analysis/horizon/consensus-security.md) |
| P25 | Unclaimed pool credit is stranded in the escrow | Conceded, stated | `Site/litepaper.html`, Economics, the 20% proving-pool row carries the note: unclaimed pool credit is today stranded in the escrow, no rule returns it; the fix rolls an unproven shard's credit into the next proven… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| E1 | Hard cap plus burn is a security budget cliff | Conceded by decision, stated in the design doc | True, and the design doc records the choice: "A 1% tail is the Monero model and the safer choice for security on its own." The argument for the cap is that Igneum miners keep earning from in-chain proving fees and… | design doc "Decision: hard cap". |
| E2 | Half the coins in two years is an insider schedule | Answered by design, with the founder's edge conceded | The schedule (1 billion a year halving every two years, 30-day ramp from 10% to 100%) is public, fixed at genesis and the same for every miner. | litepaper "Supply" and "Fair launch, announced". |
| E3 | The 20% developer share enables wash gas | Answered by design, with a metrics caveat | The base fee is burned in full, so every wash transaction loses its whole base fee. | design doc Finality v2 "Fees"; litepaper "What a builder gets for being early". |
| E4 | 5% of gas to the dev fund is a tax | Closed by removal, 3 October 2026 | There is no development fund. | spec section 5.5; design doc "No development fund, so nothing to fight over". |
| E5 | "Not one coin to a founder" is false | Conceded, stated | `Site/litepaper.html`, Economics, "No fund, no foundation, no fee to the team", "1 block in 100 pays the project"; `site/index.html`, Economics, "The one payment to the project is the Ember software's optional 1% dev… | design doc "No development fund, so nothing to fight over". |
| E6 | Two-year halvings bleed hashrate | Conceded, stated | `Site/litepaper.html`, Economics, Security after the subsidy, "The schedule is a bet, not a measurement: a halving halves emission income overnight if price and fees do nothing", with Kaspa's reduction marked… | none; decision in design doc "Supply". |
| E7 | No stablecoin liquidity without a trusted bridge | Decided | Correct. | design doc, hostile review table row "One-proof light clients and committee-free bridges". |
| E8 | Founders seeding the DEX is market making by insiders | Conceded, stated | True and stated in the litepaper. | litepaper "Liquidity from the people who are there". |
| E19 | "Proving: a second income" without the arithmetic of how small it is | Conceded, stated | `Site/litepaper.html`, "For miners", under the three-streams table: all of Ethereum L1's proving is about USD 36 a day at the September 2026 tracker cost (USD 0.005 a block x 7,200 blocks; the tracker figure is a… | [docs/analysis/horizon/frontier.md](../docs/analysis/horizon/frontier.md) |
| E20 | "Proofs at the cost of power" is the electricity, not the price | Conceded, stated | `Site/litepaper.html`, The problem ("a supplier whose electricity cost is close to power and whose price is the subsidy it forgoes, which falls as the network's hash grows"), Building on Igneum ("Proofs priced by the… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| E21 | The dev fee is 1 percent of the producer share, and the funding plan's ceiling took all rewards | Conceded, stated | `Site/litepaper.html`, the payment-routes row 6 and the Ember section read "default-on, switchable, 1 percent of the producer share"; `docs/plans/funding.md` section 4's ceiling is 1 percent of the producer share, USD… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| G1 | No cryptography team | Conceded, stated | `Site/litepaper.html`, Questions miners ask, "reviewers will be named and paid before gate 3"; What Igneum does not claim, "A cryptography team. | design doc "Team" paragraph. |
| G2 | An AI designed this | Conceded, stated | `Site/litepaper.html`, cover, "Method one founder with AI systems"; Who are you?, "One founder, pseudonymous, working with AI systems". | [.claude/agents/](../.claude/agents/) |
| G3 | Who are you | Decided | No team page for now; the litepaper says the team is pseudonymous and names no team page. | [site/journey.json](../site/journey.json) |
| G4 | No admin keys, except in everything that matters | Conceded, stated | The home page was redrawn as one statement, the live scene, three facts and the downloads, so the tile "admin keys in consensus" is no longer on `site/index.html`; the sentence stands on `site/litepaper.html`,… | litepaper "Governance". |
| G5 | No multi-client | Conceded, stated in the litepaper | True at launch. | litepaper "Governance", last bullet. |
| G6 | Stratum v2 does not make pools unable to censor | Conceded, stated | `Site/litepaper.html`, Governance, "Pools can be bypassed on transaction choice". | none in repository. |
| G7 | The one-click app is an update key over the network | Decided | Correct. | not yet. |
| G8 | Governance by hashrate is governance by two pools | Conceded, stated in the design doc | True in the same way it is true on Bitcoin, where miner signalling activated SegWit and Taproot. | design doc Finality v2, Residual risks bullet 3. |
| G15 | Three signalling thresholds, four numbers across the documents | Conceded, stated | One sentence in `site/litepaper.html`, Governance ("Miners set what genesis leaves open") and Mining ("Miners hold the switch"): miners signal three things at three thresholds, 60 percent of blue blocks over two weeks… | [docs/analysis/horizon/economy-and-utility.md](../docs/analysis/horizon/economy-and-utility.md) |
| C1 | vs Monero: GPUs were excluded on purpose | Answered by design | Monero chose the CPU for egalitarian reasons and accepted botnets as the price. | litepaper "For miners", hardware paragraph. |
| C2 | vs Monero: "no chip in seven years" is not proof | Conceded, stated | The home page no longer carries the RandomX paragraph; "since 2019 (approximate)" and "precedent, not proof" stand on `site/litepaper.html` (vs RandomX, Mining). | none. |
| C3 | vs Kaspa: you misrepresent them | Conceded, stated | `Site/litepaper.html`, The problem, "Chips arrived, as on Kaspa, whose hash was designed to welcome them"; Speed, "Kaspa has run in production since 2021 (approximate), forked from rusty-kaspa"; precedents row 5,… | none in repository; `vendor/rusty-kaspa` to be cloned and cited. |
| C4 | vs Kaspa: a finality overlay changes GHOSTDAG's guarantees | Measured on the live node line, and the overlay does NOT… | A NEW SERIOUS FINDING (5 October 2026 sweep; owner: cryptographer and consensus engineer, decision owner the founder). | [sim/results.md](../sim/results.md) |
| C5 | vs Ethereum: you compare inclusion to finality | Conceded, stated | `Site/litepaper.html`, Speed, "Inclusion is not confirmation on either chain". | litepaper "Speed". |
| C6 | vs Ethereum: every one of your components is a research project | Conceded, stated | `Site/litepaper.html`, Roadmap, "the combination is the risk the gates price" and "Dates slip. | litepaper "Roadmap". |
| C7 | vs Bitcoin: hashrate that follows price is the design, you penalise it | Conceded, stated in the simulation | Correct. | [sim/results.md](../sim/results.md) |
| C8 | vs Ergo, Ravencoin, Conflux: GPU mining has a home | Conceded, stated | `Site/litepaper.html`, The problem, "Ergo, Ravencoin and Conflux still mine on GPUs at a fraction of the 2022 fleet (approximate)"; precedents row 3 names Conflux. | none in repository; to be cited from their repositories. |
| C9 | vs Aleo: you will centralise the same way | Closed by rule | See P8. | design doc "Existing prover networks" table, Aleo row. |
| C10 | vs Boundless and Succinct: you cannot bid there without their tokens | Conceded, stated | `Site/litepaper.html`, Proving for everyone else, "Boundless provers post ZKC and Succinct provers stake PROVE (approximate, from their documentation)". | design doc "Existing prover networks" table, labelled approximate. |
| C11 | vs everyone: "firsts" that are not | Conceded, stated | `Site/litepaper.html`, precedents table, "We know of no chain that combines them"; Building, "that we know no other EVM chain offers". | this ledger. |
| C12 | vs Monero: you borrowed the hash idea and left out the point | Answered by design | Transactions on Igneum are public, as on Ethereum. | CLAUDE.md rules (privacy rejected). |
| L1 | It is a security under Howey | Open | Only the founder's decision with counsel settles it; counsel engaged since 6 October 2026 (decisions item 6). | design doc "Legal" paragraph. |
| L2 | Financial promotion rules | Open | Only the founder's decision with counsel settles it; the text half is stated (the schedule facts above). | none. |
| L3 | GoDaddy domains are a seizure risk | Decided | The nameserver move to deSEC in one sitting with every domain's Vercel verification checked afterwards; a non-US registrar in December 2026 when the transfer lock ends. | CLAUDE.md "Domains". |
| L4 | Paying testnet miners real money is a payment before launch | Open | Only the founder's decision with counsel settles it. | design doc "The first six months". |
| L5 | Trademark | Answered with evidence | The clearance search is recorded in the repository as the entry asked, `docs/legal/trademark-search-2026-10-03.md` (3 October 2026, one verdict per register: EUIPO RISK, IGNIUM EUTM 018212492 live in classes 36 and 42;… | none. |
| L6 | A permissionless job market paid in dollars is money transmission | Answered by design | At launch jobs are paid on the customer's chain, in the customer's asset, by the customer's contract, to the prover's address; Igneum operates no custody and takes no cut off-chain. | design doc "The first six months". |
| X1 | "Reproducible from the repository" and the repository is private | Conceded, stated | `Site/litepaper.html`, vs RandomX "Track record" row, "The specification, reference hash, test vectors and simulators are public now (git.igneum.network/igneum-network/spec). | [site/index.html](../site/index.html) |
| X2 | "Get the miner" with no miner | Conceded, stated | `Site/index.html`, hero button "See the miner"; the Mine section's download buttons carry the shipped devnet build's version and size (v0.3.9) beside "Public testnet: not yet open; the devnet build is here for people… | [site/index.html](../site/index.html) |
| X3 | "Proven by fire" when nothing has run | Conceded in part, labelled, stated | The proofs feed moved to the litepaper's proving section with the home-page redesign and reads "Live rows arrive with the public testnet. | [site/index.html](../site/index.html) |
| X4 | Thirteen months with one founder | Conceded, stated | The roadmap is aggressive and every phase is a gate that can repeat or stop the project, which the litepaper says. | litepaper "Roadmap"; design doc "Team". |
| X5 | 1,000 independent miners is a Sybil number | Decided | The independence definition as written, with the silent-fleet addition (a key with no fingerprint counts as its own class only when its address is in an autonomous system no other key uses); the observer columns on… | [site/journey.json](../site/journey.json) |
| X6 | The one-click app is a honeypot vector | Decided | Correct on all three. | not yet. |
| X7 | No community exists | Conceded, stated | This ledger's submission line names hello@igneum.network and the spec issues route; `site/litepaper.html` last paragraph and the footer on every page carry both. | [site/index.html](../site/index.html) |
| X8 | Exchange listings as a roadmap item | Conceded, stated | The home page's journey is no longer shown (the inlined feed remains in the page source); the sentence "No listing is arranged, promised or sought by the project" stands on `site/litepaper.html` Roadmap phase 6 and in… | [site/journey.json](../site/journey.json) |
| X9 | Launch hashrate will be trivial | Conceded, stated | `Site/litepaper.html`, Finality, "In the chain's first 30 days no checkpoint locks at all"; Fair launch, "The first 30 days of mainnet run on proof of work alone". | [sim/results.md](../sim/results.md) |
| X10 | Five milestones in one day | Conceded, stated | `Site/index.html`, journey section, "The log below is the engineering log's dated entries, newest first. | [site/journey.json](../site/journey.json) |
| M14 | A pulsed rental against the block-count DAA buys weight at a discount | Answered with evidence | , ledger close round 1: M14 and F14 the 50x pulse against a lagging retarget inside the finality simulator, both W2 forms"). | [sim/difficulty/devnet-2026-10-03.csv](../sim/difficulty/devnet-2026-10-03.csv) |
| M15 | A header with any past timestamp or any claimed DAA score makes the node build a 256 MiB cache | Fixed | Correct. | [docs/fork-divergence.md](../docs/fork-divergence.md) |
| M16 | The 256 MiB cache fits on a die, so the recompute attacker is compute bound | Answered with evidence | On the 5090 the recompute attacker with the cache inside the 96 MiB L2 (the SRAM emulation, 64 and 32 MiB masks, bit-exact against the stored construction) runs at 33.9 Mhash/s against 132.2 honest for the same… | [proto-metal/MEMHARD.md](../proto-metal/MEMHARD.md) |
| M17 | Every ahead-of-time miner stops at the epoch boundary; whoever compiles in process mines alone | Fixed | And measured on the live devnet at the DAA 3,600 boundary (`docs/bench-log.md`, "first hourly program swap"): prepare sent 449 DAA before the boundary; Metal compiled in 82 ms, CUDA ran nvcc in the background in 1,285… | [proto-cuda/windows-miner/start-mining.ps1](../proto-cuda/windows-miner/start-mining.ps1) |
| M18 | The per-hash random data path is a one-bit select | Conceded, stated | `Site/litepaper.html`, Mining table "Every hash" row, "The one-bit select inside the maths costs a chip nothing and is not a defence"; vs RandomX "Random program" row, "the 128 dataset addresses change with the nonce". | [site/litepaper.html](../site/litepaper.html) |
| M19 | The census that justifies the generator rule has blank cells, and the spec still carries the free load count | Fixed | Correct. | [docs/analysis/weak-program-census-2026-10-03.md](../docs/analysis/weak-program-census-2026-10-03.md) |
| M20 | Pruning proofs are checked with the kHeavyHash stub | Fixed in the node | Correct. | [docs/fork-divergence.md](../docs/fork-divergence.md) |
| M21 | GHOSTDAG k is Kaspa's table value for Kaspa-sized bodies | Answered with evidence for the largest body the rules allow | , ledger close round 1: M21 block propagation with bodies at the mass limit, k re-derived"); the red rate under such bodies is not measured. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| F14 | Weight in blocks over a window in blocks under a lagging retarget | Answered with evidence | , ledger close round 1: M14 and F14 the 50x pulse against a lagging retarget inside the finality simulator, both W2 forms"). | [sim/results_v2.md](../sim/results_v2.md) |
| F15 | Merge depth is not the reorg bound; the finality depth is | Spec fixed | Spec 2.1 names the finality depth as the reorg bound and merge depth as a merge limit only, spec 3.8 and 3.9 tell exchanges to wait 12 hours of past-median time when `finality_active` is false, and the simnet reorg… | the files above. |
| F16 | A lock can become uncertified after a heal | Decided | Option B, a verified certificate is never withdrawn (spec 3.11.4); the 3.5 paragraph is replaced by 3.11.4's text after `c4-fix` merges, `finality_conflict` and the `finality_active` clear go into the node, the forced… | spec 3.5, 3.9. |
| F17 | Keys are free and the official client mints eight per card | Decided | The client defaults to one vote key per machine, identities share it (spec 3.4.2 item 4); the bitmap bound as item 3. | [proto-cuda/windows-miner/start-mining.ps1](../proto-cuda/windows-miner/start-mining.ps1) |
| F18 | "A silent minority cannot freeze finality" is false under the floor | Fixed | Correct. | [sim/results_v2.md](../sim/results_v2.md) |
| P11 | The native-execution veto makes block validity depend on the node's current selected chain | Fixed | Spec 7.2 item 5 and `docs/design/execution-layer.md` 5.5 and D12 are relative to the carrying block's own selected-parent chain; the two-node reorg test is a row in the design document's 8.5. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| P12 | An aggregator can name itself as every prover | Fixed in the proving code | Every shard proof's public values carry the prover's payout address (`ShardOutput.prover`), the aggregated block proof commits keccak over the provers in shard order and the shard program's verifying-key hash… | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| P13 | The litepaper still claims shards with a bond | Fixed | `Site/litepaper.html`, Proving, "How a block gets proven". | [site/litepaper.html](../site/litepaper.html) |
| P14 | Two definitions of the proving base fee, and a quote that cannot know the ratio | Fixed in the spec | One definition. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| P15 | RPC blocks are segments, so `gasUsed` can exceed `gasLimit` | Fixed on a branch, pending merge | `Igneum/exec/src/rpc.rs` reports `gasLimit` as k x `BLOCK_EXECUTION_GAS_LIMIT` for a k-block segment (k = the record's mergeset length, at least 1), beside the segment's `gasUsed`, so `gasUsed <= gasLimit` holds for an… | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| E9 | The specification's year is 365 days; the code's is 365.25 | Fixed | Spec 2.5 follows the code (365.25-day year, 63,115,200-s halving, 31.688 IGN per DAA second, 8 decimals noted under O-2.6). | [consensus/core/src/igneum.rs](../consensus/core/src/igneum.rs) |
| E10 | Reds are paid in the code and "more blocks never means more coins" is false | Fixed | Spec 2.5 says reds inside the DAA window are paid to the merging miner (80%) and the pool (20%), that `E` is paid per block so coins are blocks times `E` under the controller's rate, and that the cap is unaffected;… | [docs/review/round-3-2026-10-03.md](../docs/review/round-3-2026-10-03.md) |
| E11 | The homepage burns job fees at launch | Fixed | `Site/index.html`, "Proofs sold to other chains" caption and the tile now read "phase two"; the quoted paragraph had already left the page when the homepage was trimmed (commit a commit). | [site/index.html](../site/index.html) |
| C13 | Monero's seven years do not price a 256 MiB SRAM die | Conceded, stated | `Site/litepaper.html`, What Igneum does not claim, "they say nothing about the price of a chip with the 256 MB cache on its die, and that price is a cost model, not a measurement". | none beyond M16. |
| L7 | "Where the price comes from" | Fixed | Heading "Where fees go" and the sentence deleted, `site/litepaper.html` Economics. | [site/litepaper.html](../site/litepaper.html) |
| L8 | Third-party names as implied outcomes | Conceded, stated | `Site/litepaper.html`, Questions builders ask, "whether it is issued is Circle's decision"; Canto and Blast absent from the page (grep, tonight). | [site/litepaper.html](../site/litepaper.html) |
| G9 | The release-key the team is one person, and a lost key cannot be revoked | Rule fixed | Spec 8.2 item 5, rotation signed by the current key and revocation signed by the previous key (a pre-signed certificate for K0), both published in a block; item 2 moves the policy to before the client ships and adds… | spec 8.2. |
| G10 | The signalling default on first run | Rule written | `Docs/spec/08-client-security.md` 8.3 item 2 now ends: on first run there is no last choice, the client signals nothing until the user chooses, and the interface shows that nothing is being signalled. | [docs/spec/08-client-security.md](../docs/spec/08-client-security.md) |
| X12 | Tonight's numbers are quoted before they are logged, and the worker efficiency gap is unexplained | Fixed, logged | Bench-log "5 October 2026 (night), ledger close round 1: X12 the 3 October devnet run from its record"; the launcher half (the eight processes' summed status) stays open until the PC's log is read. | [sim/difficulty/devnet-2026-10-03.csv](../sim/difficulty/devnet-2026-10-03.csv) |
| M22 | The ASIC challenge has no scoring rules, and 2x is not the economic line | Decided | No bounty, so no bounty terms; M22's metrics (hashes per second and per joule per program over at least 100 epochs as a distribution, capital cost per unit of hash rate at a stated volume, the longevity term, the… | M1, O-1.17, spec 1.13 and 1.16, M16's arithmetic. |
| F19 | Old vote keys can be bought; fresh hashrate cannot buy weight | Answered with evidence | A bought key is worth the blocks it holds and nothing more. | [sim/results_v2.md](../sim/results_v2.md) |
| F20 | During a finality pause the program must keep advancing, and nothing says which guarantees survive | Answered with evidence for the test half | , ledger close round 1: F20 finality pause under a 45% silent set through four epoch boundaries"); the gate-3 wording of the four guarantees (O-3.16, O-4.3) stays a decision for the founder. | spec 4.3 (O-4.3), 3.3.1, 3.5, 3.7 item 2, 3.9. |
| F22 | Certificates carry 8 to 10 of 12 votes on a healthy network, so locks sit a hair above the floor | Fixed in the node and shipped, rule not yet activated on… | True as measured, and the cause is not a cut-off at all: the node builds the certificate the instant the votes it holds meet Q3, and carries that one. | [infra/cloud-devnet/results/2026-10-04/partition-sin-20261004-140305/partition.md](../infra/cloud-devnet/results/2026-10-04/partition-sin-20261004-140305/partition.md) |
| P16 | The proving gate can be passed by shrinking the shard | Decided | A 12 GB NVIDIA card (4070) is on order for PC 2; O-7.1 runs end to end on it when it arrives, inside the phase 2 gate. | [docs/bench-log.md](../docs/bench-log.md) |
| P17 | Interfaces must show four states, and the design shows three | Fixed on a branch, pending merge | a fork a commit (a commit rebased onto the 0.3.11 fork tip a commit in round 3), suite igneum-exec 16 of 16 on the Mac (labelled a Mac run), the O-7.2 conformance run PASSED on a fast-time 3-node network (bench-log… | execution-layer 2.3, 2.4, 8.2; phone-app 3 and 9; spec 3.9, 10.1. |
| E12 | Selfish operators under a price shock | Simulation half run | No backlog in any scenario, every block proven within 60 s in every hour, hash troughs at 82% of its pre-event level under b and 75% under d (80% at day 30), 10% of cards off under b… | spec 5.1, 5.3, 7.2; execution-layer 4.3, 9.1 R8. |
| E13 | One diagram per payment route, or operator income and protocol income blur | Conceded, stated | `Site/litepaper.html`, Economics, "Every payment route", six rows (emission; base fee; priority fee; external job at launch; external job after the proof bridge; the official client's dev fee as operator income),… | [docs/commercial/prover-customer-brief.md](../docs/commercial/prover-customer-brief.md) |
| E14 | No funding table | Decided | The funding table stays internal until counsel has read it; one public sentence in the litepaper names the unfunded lines (the second client, the external reviewers, the bounty before escrow). | E4, E5, G1, G5; fud-fixes rows 47, 50, 71. |
| E15 | The security budget through successive halvings with low fees and no external demand | Decided | The 4,000,000,000 IGN hard cap stays absolute and there is no tail emission. | spec 2.5, 5.1 to 5.4; E1, E6. |
| G11 | Publish the inspectable components now, labelled experimental | Decided | The specification subset is public as `igneum-network/spec` (`docs/plans/public-repo.md`), labelled; the node fork, the proving code and the harnesses stay private until the benchmark. | [docs/fud-fixes.md](../docs/fud-fixes.md) |
| X13 | One paying customer for a stated reason | Decided | The paid pilot stays in phase 5, the phase 4 gate stays the signature, nothing moves earlier before counsel answers L4. | [site/journey.json](../site/journey.json) |
| X14 | Concentration is unmeasured in four places | Answered with evidence for all four | , ledger close round 2: X14 signing concentration from block payloads"); the independence definition stays the founder's (X5). | X5, F10, P12, spec 9.4.2. |
| X15 | Remove the founders from a test network and show what continues | Answered by design | The design rules the sentence rests on are in force (every node ships a VDF evaluator, spec 4.5; the seed list ships in the client, spec 10.6; no project-run service sits in consensus, no stake, no fee to any team,… | [site/litepaper.html](../site/litepaper.html) |
| X16 | An evidence page with four labels | Written | `Docs/evidence.md`, one row per public claim with five labels (tonight, counting the label column of the claims table: designed 9, implemented 8, tested by the team 26, reproduced externally 3, reviewed independently 2). | [docs/bench-log.md](../docs/bench-log.md) |
| X17 | The miner app must show net earnings and keep jobs away from keys | Designed | Spec 8.8 and phone-app 4.1; measurement O-8.2 and the escape test O-8.3 scheduled for the phase 4 devnet. | [site/litepaper.html](../site/litepaper.html) |
| P18 | The mempool queues transactions no block can carry | Fixed | Correct, and low: the queue slot was reserved against the sender's funds, so it was self-limited. | [docs/bench-log.md](../docs/bench-log.md) |
| P19 | An over-budget proving transaction runs for free, every time, and blocks its sender | Fixed | Correct, medium. | [docs/bench-log.md](../docs/bench-log.md) |
| P20 | The SP1 GPU client panics on shutdown and the compressed stage waited ten minutes | Fixed and confirmed | The buffered save closed the gap, the core proof finished at and the compressed stage started at; shard timings repeated within 0.3 s (core 9.1 s, compressed 10.5 s); a guest that returned 0 bytes on the second run was… | [docs/bench-log.md](../docs/bench-log.md) |
| M23 | Forge timestamps inside the rules and the controller mines you a 10x difficulty for free | Fixed | Correct on every point, and measured first by our own attack run (`sim/difficulty/attacks/README.md`, scenarios 3 and 7): in the simulator a 50% forger took the block rate to 0.12 (earliest stamp) and 0.56 (latest) of… | [docs/bench-log.md](../docs/bench-log.md) |
| P21 | The SP1 proof is not what consensus checks in proving v0 | Fixed in the node behind a named switch | , after an external review the founder accepted at: a valid SP1 proof is a condition of payment in consensus. | none named |
| P22 | The rewards and payouts are inputs to the shard proof, not outputs | Answered by design | The design rule that contains it is in force, spec 7.7 item 6 and design 5.5: the rewards and payouts a shard statement carries are checked against every node's own consensus derivation, so a proof over any other list… | none named |
| M24 | Your two-lane controller oscillates for an hour when a second miner joins mid-epoch | Rolled out | Rule v2 activated on the live devnet at DAA 33,000 by the height switch after a 12-node cloud rehearsal (settle 157 to 272 s, no swing); node 1, the seed, the observer and the three app machines crossed the height on… | [sim/difficulty/records/live-2026-10-04.csv](../sim/difficulty/records/live-2026-10-04.csv) |
| D1 | Your users are a gate, not a fact | Conceded, stated | Correct on the count and on the definition. | [docs/bench-log.md](../docs/bench-log.md) |
| D2 | The app share pays nothing | Conceded, stated | `Site/litepaper.html`, Building, Why build here, "a million 100,000-gas calls a day at a 1 gwei tip pays about 7,300 IGN a year"; Canto and Blast absent from the page (grep, tonight). | [docs/design/developer-adoption.md](../docs/design/developer-adoption.md) |
| D3 | Proof of work in 2027 is a perception cost you cannot measure | Conceded, stated | `Site/litepaper.html`, What Igneum does not claim, "A label that costs nothing. | [site/litepaper.html](../site/litepaper.html) |
| D4 | No dollar, no DeFi | Conceded by decision | , restated here for builders. | [docs/review/round-3-2026-10-03.md](../docs/review/round-3-2026-10-03.md) |
| D5 | I cannot debug a revert | Conceded, scheduled, stated | `Site/litepaper.html`, What Igneum does not claim, "A chain you can debug today. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| D6 | A forged job result reaches my contract and nobody vetoes it | Conceded, contained by rule, stated | `Site/litepaper.html`, What Igneum does not claim, "A veto on job results. | [docs/design/execution-layer.md](../docs/design/execution-layer.md) |
| X23 | One shipped key is an administrator channel to the founder's PCs | Fixed on a branch, pending merge | Three tiers in `relay/lib/guard.mjs` (`authVia`): the console token (header or the phone page's path), the relay's own key (`RELAY_KEY`: reads and reports, never `task`, `run`, `name`, `role`, `secret`, `delete`), and… | [docs/review/round-4-2026-10-04.md](../docs/review/round-4-2026-10-04.md) |
| X24 | The relay token rides in the URL on every request | Fixed on a branch, pending merge | Every client and Mac tool calls `/api/relay?fn=<fn>` with `x-relay-token` (and `x-igneum-key`) as headers: `igneum-agent.ps1` and `send.ps1` (`Api-Url`), `agent.sh` and `send.sh` (through a 0600 curl config file, `-K`,… | [tools/relay.mjs](../tools/relay.mjs) |
| X25 | The PC agent installs itself at every logon, at highest privilege, on every start | Fixed on a branch, pending merge | `Igneum-agent.ps1` calls `Arm-Restart` only on the two paths that end in `shutdown.exe /r` (a task that printed `RELAY-REBOOT` on its own line AND was queued with `--reboot` or `--reboot-continue`), sets… | [relay/clients/igneum-agent.ps1](../relay/clients/igneum-agent.ps1) |
| X26 | The feed is a permanent transcript, and it holds the dl token by design | Fixed on a branch, pending merge | Retention 30 days (`relay/lib/handler.mjs` `expire`: `DELETE... | [relay/lib/handler.mjs](../relay/lib/handler.mjs) |
| X27 | The relay has no clean rotation and no sender binding | Fixed on a branch, pending merge | A per-machine secret (64 hex, `node tools/relay.mjs secret PC1`: written to `~/.config/igneum/relay-machines/PC1` at 0600, its sha256 bound on the relay with `POST secret` (token only), carried to the PC as… | [relay/README.md](../relay/README.md) |
| X28 | Relay hygiene, minor | Fixed on a branch, pending merge | The remaining points. | [lib/wake.mjs](../lib/wake.mjs) |
| G12 | The PoW schedule comes from the environment on every network, including mainnet | Fixed | . | the files above. |
| G13 | The update signature covers binaries that nobody signed | Fixed on a branch and verified locally | The chain already on master was read end to end and run, not asserted. | [packaging/windows/push-inputs.sh](../packaging/windows/push-inputs.sh) |
| G14 | Secrets and identity in the history of a repository with a public date | Decided | `TZ=UTC` in every commit path the tooling owns: `tools/ship-app.mjs` (`git` runs with `env: { TZ: 'UTC' }`), `packaging/ota/publish-jobs.sh` (`export TZ=UTC`, found by the class check), `tools/repo/fresh-repo.sh`… | [tools/ship-app.mjs](../tools/ship-app.mjs) |
| X18 | Two nodes with two override files connect, and only some mismatches fork | Fixed | . | the files above. |
| F23 | The equivocation ban is node-local, so honest nodes refuse each other's certificates | Fixed | . | the files above. |
| F24 | A checkpoint determination is never revisited | Fixed | . | the files above. |
| F25 | The fast-time harnesses cannot start a node, and the timestamp probe tests the old rule | Fixed | Correct, measured. | [rt/logs/fa_s8/n0/node.log](../rt/logs/fa_s8/n0/node.log) |
| X19 | Operational knobs and silences in the shipped node | Fixed on a branch, pending merge | The node half, fork commit a commit. | [protocol/flows/src/flowcontext/clock_skew.rs](../protocol/flows/src/flowcontext/clock_skew.rs) |
| X20 | Cold-sync checkpoint determination is indices times chain length | Fixed on a branch, pending merge | `Consensus/src/processes/finality.rs` `on_virtual_changed` resolves every index the sink can determine in ONE descending walk of the selected chain (`chain_blocks_at`, targets highest first), where it walked from the… | [consensus/src/processes/finality.rs](../consensus/src/processes/finality.rs) |
| M25 | The miner takes the day length from its environment, and the schedule global can tear | Fixed on a branch, pending merge | Correct. | [igneum/miner/src/main.rs](../igneum/miner/src/main.rs) |
| M26 | The interval fault guard freezes its baseline and loops | Fixed | `IntervalGuard` builds its baseline from the healthy intervals of the current worker process (a moving average, two intervals before it can trip) and forgets it when the worker restarts; the STATUS line is printed on a… | [docs/bench-log.md](../docs/bench-log.md) |
| M27 | A flapping node makes the worker rebuild once per template | Fixed | Correct. | the files above. |
| M28 | The kernel text is bound only to its own directory | Fixed on a branch, pending merge | Correct. | [proto-cuda/nvrtc/packfile.h](../proto-cuda/nvrtc/packfile.h) |
| X21 | A wrong program burns power with a green rate | Fixed | Correct. | the files above. |
| X22 | Worker restart paths, minor | Fixed on a branch, pending merge | The four remaining paths. | [app/igneum-app/src/engine.rs](../app/igneum-app/src/engine.rs) |
| E16 | The 20% pool is burned on the live chain, and the text says it pays provers | Answered with evidence and stated | Correct for the live devnet-v4 line. | [docs/review/round-4-2026-10-04.md](../docs/review/round-4-2026-10-04.md) |
| L9 | "100% to miners and provers", "0% anyone else", and no word that devnet coins have no value | Conceded, stated | `Site/index.html`, `site/miner.html` and `site/wallet.html`, a line beside every download control, "Devnet: coins have no value and the chain may be reset."; `site/index.html` Economics tiles, "of emission to miners… | the files above. |
| M29 | The litepaper's app paragraph describes an app that does not exist | Conceded, stated | `Site/litepaper.html`, For miners, "One click, for everyone else", rewritten to Ember 0.3.9 from `app/igneum-app/ui/index.html` (hash rate, blocks found, node, next program, finality votes, the proving tile, the devnet… | [ui/app.js](../ui/app.js) |
| M30 | A block or transaction flood grows the 0.3.4 node by hundreds of megabytes in a minute | Fixed | Measured, cause not yet isolated. | [docs/bench-log.md](../docs/bench-log.md) |
| M31 | The 0.3.4 node cannot produce a block template on mainnet, testnet or simnet parameters | Fixed | Measured on the execution-layer attack network (`tools/exec-attacks/net.sh` runs `--simnet` with no override): three nodes up, 0 blocks, every template refused with that line (`docs/review/redteam-2026-10-04.md` row 27). | [rt/logs/exec_b/miner_node1.log](../rt/logs/exec_b/miner_node1.log) |
| E17 | Unlogged inputs behind the economics, minor | Answered with evidence for PC 2 | RTX 5090 honest 132.2 Mhash/s at 326.6 W median, 3,060 MHz, 50 to 54 C, 100% utilisation (0.40 Mhash/J); 346.9 W at 8 warps per block; the inline settings 415.7 W and 431.0 W (the power limit). | [docs/review/round-4-2026-10-04.md](../docs/review/round-4-2026-10-04.md) |
| E18 | The dev fee is a protocol fee with better PR | Answered by design and with evidence | The fee exists and is disclosed; the rest is wrong in three places. | [docs/design/miner-dev-fee.md](../docs/design/miner-dev-fee.md) |
| X29 | Host and file hygiene, minor | Decided | The curl part: `infra/gpu-bench/upload.sh` writes `header = "x-igneum-key:..."` to a 0600 temporary config and calls `curl -K`; `proto-cuda/windows-app/upload-log.bat` and `proto-cuda/windows-miner/upload-log.bat` do… | [infra/gpu-bench/upload.sh](../infra/gpu-bench/upload.sh) |
| X30 | The live page and the bench page exposed operational detail | Fixed | `Ac89a37` and a commit (a scrubbed copy, the build fails on any private string), a commit (none of the three in the public API), a commit (the menu). | the commits above. |
| X31 | The public testnet dated "August 2027" on the site | Fixed, stated | Every mention of the month is gone from the site and no date is given. | [docs/plans/testnet-go.md](../docs/plans/testnet-go.md) |
| X32 | The roadmap carried calendar months beside a testnet that is weeks away | Fixed, stated | Every calendar month is out of the roadmap. | [site/litepaper.html](../site/litepaper.html) |
| X33 | The public benchmark dated "January 2027" | Fixed, stated | Both sentences read "The public benchmark with a leaderboard ships with the public testnet." (`site/litepaper.html`, For miners and Questions miners ask). | [site/litepaper.html](../site/litepaper.html) |
| X34 | RandomX described as chip-free | Fixed, stated | Four sentences corrected, each with the X9 as the stated fact and its date; every sentence that only names the technique stands. | [site/index.html](../site/index.html) |
| X35 | The class v4 chip headline stated as one number, 2.1x | Fixed, stated; restated | The served chip text is the third review's claim statement ("Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its… | [docs/design/latency-ladder.md](../docs/design/latency-ladder.md) |
| X36 | The X9 described as a shipping chip | Fixed, stated; restated | The X9 appears on the served pages only as a precedent (the pre-order, the withdrawal, no benchmark) and no served sentence uses its claimed core as a chip core against the model; the Antminer X5 is served as an… | [site/index.html](../site/index.html) |
| X37 | The class v4 energy premium is a cost the user pays, not a line in a model | Answered with evidence | Measured on the RTX 5090, 145 W of premium unlocked and 82 W at the knee; the RTX 5080 at stock 84 W, its grid running; the team identity says the premium needed for 2x at k = 1 is 103 W at the lock and a premium of… | [docs/plans/counter-asic-3-status.md](../docs/plans/counter-asic-3-status.md) |
| N1 | A 0.3.15 node on the live file wrote blocks every 0.3.14 node rejected | Fixed | The class v4 signal (PROPOSED, `docs/plans/counter-asic-3-node.md` section 6) is the producer's object version in the high byte of the header version; the first 0.3.15 build stamped it from the binary alone, so on the… | [infra/fast-time/node-compat.mjs](../infra/fast-time/node-compat.mjs) |
| N2 | Any peer could crash any pruned node with a sync request below its retention | Fixed | `SyncManager::antipast_hashes_between` (the IBD headers path, `RequestHeaders`) unwrapped the GHOSTDAG reads of the requested low block and of every chain block of the walk; a pruned node holds no GHOSTDAG data below… | unit test `a_sync_request_below_retention_is_an_error_not_a_panic` (a chain of six headers, the genesis's GHOSTDAG… |
| P23 | An unwound transaction leaves the node's view until its sender resends it | Fixed on a branch, pending merge | a fork a commit (the P23 commit, on the merge of `ledger-fixes` and `ledger-fixes-2` onto the 0.3.11 fork tip a commit); `EvmPool::on_chain_removed` (igneum/exec/src/pool.rs) and `ExecService::requeue_unwound`… | [igneum/exec/src/pool.rs](../igneum/exec/src/pool.rs) |
| AP-F8-1 | A load whose source was last written by `or`, `mul` or `mulhi` makes a cross-hash hot set | Fixed in part, finding bounded, stated | Class v4 sub-version 3 (igneum-pow a commit, the audit-freeze tag) is frozen with the dataflow rule, the shared-operand rule, the 0.98 ratio and the total draw; the in-house pass's F8 re-gate reads 60 of 64 seeds under… | [docs/analysis/ca3-v4-uniform.md](../docs/analysis/ca3-v4-uniform.md) |
| AP-F8-4 | The program id's derivation text omitted generator 4's sub-version suffix (interoperability, documentation; no object change) | Fixed | The id and its printed derivation come from one byte recipe (`generator::IdRecipe`, `program_id_recipe`, `program_id_class_recipe`, `Program::program_id_derivation`), so the two cannot drift; the emitter prints that… | [igneum-pow/tests/derivation.rs](../igneum-pow/tests/derivation.rs) |
| AP-F8-5 | The public specification did not describe the shipped acceptance rule (documentary; no object change) | Spec fixed | Sections 1.4.3 and 1.4.6 of `docs/spec/01-lottery-hash.md` rewritten to the shipped rule at igneum-pow a commit with every constant named and every order of operations stated (1.4.3: the two per-register states of the… | [docs/analysis/cryptanalysis/report-acceptance-rule-3.md](../docs/analysis/cryptanalysis/report-acceptance-rule-3.md) |
| AP-F8-7 | The hash's reads are not uniformly random: about half of epochs carry one load site with a biased address bit | Open, priced | 1.6 percent at f = 1/2, nothing at f = 1; the served sentence corrected 8 October 2026 (the site the team, by the team's word): the litepaper's lead reads "dependent reads spread over a multi-gigabyte dataset", the… | [docs/analysis/class-v6/family-gate.md](../docs/analysis/class-v6/family-gate.md) |
| GF1 | A post-quantum signature scheme would need a hard fork, and every vote key is a public BLS12-381 point | Fixed | The byte costs nothing now and a fork later. | none named |
| GF2 | A vote key cannot move: a miner who changes keys re-earns 30 days of weight, and so does the post-quantum migration | Fixed | The successor inherits the window, not a fresh one, so a key rotation costs no weight and the migration of GF1 is one item per key. | none named |
| GF3 | A 256 MB on-chip cache makes the lottery hash 2 to 3x cheaper for the card that has it, and the cache size is a constant | Fixed as a genesis lever, measurement owed | Consumer LLC is 96 to 128 MB today and datacentre 256 MB (`chip-model-v3`, approximate), so the shortcut is a datacentre card's today and a consumer card's in a generation or two. | none named |
| GF4 | The class-group VDF falls to the same quantum computer | Conceded, stated | `Site/litepaper.html`, What Igneum does not claim, "A delay function that outlives a quantum computer. | none named |
| R0 | "Another zkEVM" | Decided | The positioning line is served on every page, and "zkEVM" appears only under the architecture explanation. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| R1 | A specialised miner will remove most of the cost | Open | Pass when the best supported cost and energy advantage of a re-optimised, programmable adversary sits inside the chosen competitiveness envelope, with its uncertainty published (D3). | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| R2 | Ordinary operators will be priced out | Open | Pass when the reference GPU population is published with both tests per class (existing owner and new entrant) and the cost per accepted unit of work is served for each class. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| R3 | Mining and proving will not pay once issuance falls | Open | Pass when the five-year coexistence model names credible conditions for sustained commodity participation and names where it fails; a result needing a small network, token appreciation or scheduled chip death has not… | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| R4 | The defence is a rescue fork waiting to happen | Decided | No property assumes a future emergency algorithm change; rotation is optional to the security argument, and seed delay is evaluated only as seed-selection protection. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| D1 | The numbers cannot be reproduced | Open | Pass when an independent operator reproduces the baseline within declared tolerances from the served kit alone. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| D2 | Reorganising the work will not stop a specialist | Conceded | The connected-state variant, D2(a), is a KILL as a class; the memory-sharing attack, D2(b), is Open. | [docs/analysis/class-v6/connected-state.md](../docs/analysis/class-v6/connected-state.md) |
| D3 | Chips do not expire on schedule | Conceded | "Every chip dies within a family epoch" is out of the baseline economic model, and chip-arrival percentages are not published. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| D4 | The capex wall is a fiction | Open | Pass when the five-year coexistence model, whose mandatory stress case has development already paid for, names credible conditions for commodity participation and where they fail. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| D5 | Proofs are not a protocol guarantee yet | Conceded | Consensus does not enforce proofs today; the switch is in the node and reads never on the devnet. | [docs/evidence.md](../docs/evidence.md) |
| P1 | A pool controls its miners' votes | Open | Pass when the member's retained voting key is committed into its work at protocol level, payment aggregation is separate and verifiable, and pool identity substitution is resisted. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| P2 | Pools take custody and home miners lose to latency | Open | Pass on non-custodial payouts with practical minimums, local work verification and low-bandwidth participation, and on a published measurement of the accepted-work penalty for home internet against datacentre… | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| P3 | Firo's miner is the bar | Open | Pass when Ember reaches good operating points without third-party software and its optimisation work, compiler settings and safe tuning logic are published beside a comparison. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| A1 | Why not an Ethereum L2 | Decided | Three separate decisions: EVM-compatible execution for developers (revm), SP1 as the one well-tested proving backend behind a versioned interface, and sovereign GPU-mined consensus. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| A2 | Proof-system flexibility becomes arbitrary acceptance | Decided | Program identities, verifier versions and security parameters are pinned in the protocol; one backend first, a second only where justified, never interchangeable immature backends. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| A3 | Rotation is not the defence | Decided | No chip detection in consensus, no hardware whitelists, attestation, per-address quotas or self-reported GPU bonuses; rotation is optional to the security argument. | [docs/evidence.md](../docs/evidence.md) |
| A4 | A concentrated prover can stall the chain | Open | Pass when a withholding concentrated prover is exercised on the no-rescue network with replacement operators, usable inputs, reassignment and explicit behaviour during proof delays, and the network behaves as specified… | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| A5 | Your miner promise covers hardware your prover does not | Conceded | Proving runs on NVIDIA; AMD and Apple mine. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| A6 | "Everything runs unchanged" is a claim, not a test | Open | Pass when compatibility ships as a product deliverable: representative contracts, wallet fee estimation, indexing, failed transactions, receipts and application assumptions tested, with the documented set of… | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| A7 | The proving market is revenue you do not have | Conceded | The external proving market is not built and stays out of revenue assumptions until it is. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| B1 | Proven execution means the block is final | Decided | The boundary is stated wherever the proof architecture is explained. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| B2 | EVM-compatible means Ethereum's security | Decided | The boundary is stated wherever the proof architecture is explained. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| B3 | ZK means private | Decided | The boundary is stated wherever the proof architecture is explained. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| C1 | Ravencoin already does this | Open | Pass when benchmarks against Ravencoin's KAWPOW, an operating system with the same stated objective, are published and show a stronger result or a more valuable overall offering. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| C2 | Ergo is an operating benchmark | Open | Pass when the comparison with Ergo, on its live behaviour rather than its papers, is published. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |
| C3 | Number one is unsupported | Conceded | No "number one" claim before comparative results and adoption exist. | [docs/plans/igneum-2.0.md](../docs/plans/igneum-2.0.md) |

View file

@ -8,8 +8,8 @@ How to read the licence column. "Verified" means the LICENSE file or the crate's
| Component | Origin (project, licence, repository) | What Igneum changed | Why the design needs the change | How the change is measured |
|---|---|---|---|---|
| GHOSTDAG ordering | Kaspa, rusty-kaspa. ISC, verified (`vendor/rusty-kaspa/LICENSE`, "Copyright (c) 2022-2024 Kaspa developers"; workspace `license = "ISC"`). https://github.com/kaspanet/rusty-kaspa | Unchanged algorithm. Parameters set for 1 block per second: k 18, 10 max parents, mergeset limit 180, merge depth 3,600 blocks (`consensus/core/src/config/bps.rs`, `params.rs`) | Launch rate is 1 block a second (CLAUDE.md), rising later. These are the values Kaspa mainnet ran before Crescendo, so nothing new is asserted about the ordering | Spec section 2.1; bench-log "igneum-node devnet v0: 3-node igneum-devnet at 1 BPS"; a test in `params.rs` pins every value |
| Node software (the fork) | rusty-kaspa v2.1.0, commit `01b532e8` (22 Sep 2026). ISC, verified. Fork at `vendor/igneum-node`, one commit per change on top of the base | Header gains `vote_key_hash`; genesis blocks; network ids `igneum-*`; devnet ports; DNS seeders emptied; address prefixes; emission schedule and 80/20 coinbase; PoW engine trait; PoW check moved after GHOSTDAG; rename of every user-visible string to `igneumd`. Full list: `docs/fork-divergence.md` | Each row there states the reason. The short version: finality rule v2 needs a vote key in every header, the emission is Igneum's own, the lottery hash needs chain state, and no Igneum node may ever dial a Kaspa peer | `docs/fork-divergence.md` (file, change, why, risk, merge note per row); bench-log devnet v0 and "first devnet blocks on the real lottery hash" entries; the four-node rename test of 3 Oct 2026 |
| GHOSTDAG ordering | Kaspa, rusty-kaspa. ISC, verified (`vendor/rusty-kaspa/LICENSE`, "Copyright (c) 2022-2024 Kaspa developers"; workspace `license = "ISC"`). https://github.com/kaspanet/rusty-kaspa | Unchanged algorithm. Parameters set for 1 block per second: k 18, 10 max parents, mergeset limit 180, merge depth 3,600 blocks (`consensus/core/src/config/bps.rs`, `params.rs`) | Launch rate is 1 block a second (CLAUDE.md), rising later. These are the values Kaspa mainnet ran before Crescendo, so nothing new is asserted about the ordering | Spec section 2.1; the measurement record in the repository (docs/bench-log.md); a test in `params.rs` pins every value |
| Node software (the fork) | rusty-kaspa v2.1.0, commit `01b532e8` (22 Sep 2026). ISC, verified. Fork at `vendor/igneum-node`, one commit per change on top of the base | Header gains `vote_key_hash`; genesis blocks; network ids `igneum-*`; devnet ports; DNS seeders emptied; address prefixes; emission schedule and 80/20 coinbase; PoW engine trait; PoW check moved after GHOSTDAG; rename of every user-visible string to `igneumd`. Full list: `docs/fork-divergence.md` | Each row there states the reason. The short version: finality rule v2 needs a vote key in every header, the emission is Igneum's own, the lottery hash needs chain state, and no Igneum node may ever dial a Kaspa peer | `docs/fork-divergence.md` (file, change, why, risk, merge note per row); the measurement record in the repository (docs/bench-log.md); the four-node rename test of 3 Oct 2026 |
| Difficulty controller | Kaspa sampled DAA (KIP-4) in rusty-kaspa, ISC, verified, kept as the retarget. Prior art studied: LWMA by Zawy (zawy12/difficulty-algorithms, licence approximate: MIT) and Monero's sorted and trimmed window (monero-project/monero, approximate: BSD-3-Clause). No code from either | Unchanged in the fork today (comment block only, `consensus/core/src/config/constants.rs`). The hash speed steps at every hourly program change, so a rule that tracks a step within an epoch is in progress: a two-speed rule (fast response to a step, slow drift otherwise). Not in spec 0.1 | Programs differ in cost (35 to 48 Mhash/s across seeds on one GPU), so a 44-minute window spends half an epoch at the wrong block rate | Spec section 2.3 names the two remedies and the gate 2 simpa run that decides; bench-log first-run and RTX 5090 entries hold the per-seed rates. The two-speed rule gets its own bench-log entry when it is simulated |
| Random-program idea | RandomX by tevador, Monero. Licence approximate: BSD-3-Clause. https://github.com/tevador/RandomX (not yet cloned under `vendor/`; CLAUDE.md asks for it) | The idea only. Igneum's generator is new code (`igneum-pow/src/generator.rs`): a program drawn once per hourly epoch and compiled to native GPU code, with a per-hash random data path. RandomX draws a program per hash and interprets it on a CPU | A GPU cannot interpret a fresh program per hash at a useful rate; it compiles one program per hour instead. The target hardware is the opposite of RandomX's by design | Spec section 1 (generator, test vectors); bench-log "proto-metal first run", "RTX 5090 first run", "igneum-pow bit-exact" (96/96 vectors, three GPU vendors) |
| Memory-hard dataset | RandomX cache lineage (tevador, BSD-3-Clause approximate): a small cache that derives a large dataset by dependent reads | New construction, same shape: 256 MiB cache of chained ChaCha12 blocks, 8 dependent reads per item, dataset 1 GiB in the prototype and 2 GB at genesis, growing on a genesis-fixed schedule (`igneum-pow/src/memhard.rs`, `proto-metal/MEMHARD.md`) | A light verifier must hold only the cache; a miner must hold the dataset; the dataset must outgrow any fixed chip memory. RandomX's dataset has one size for ever | `proto-metal/MEMHARD.md` section 2.2 (recompute 4.8x slower than load, Apple only); bench-log "memory-hard dataset" entries on Metal and the RTX 5090 |
@ -17,11 +17,11 @@ How to read the licence column. "Verified" means the LICENSE file or the crate's
| ProgPoW and KAWPOW | ProgPoW (EIP-1057 text, ifdefelse/ProgPOW; KAWPOW on Ravencoin since 2020, RavenProject/Ravencoin, MIT approximate). Prior art, no code used. Not yet cloned; `docs/fud-fixes.md` item 48 asks for the clone and citation before the repository is public | Nothing taken. The difference: ProgPoW and KAWPOW randomise the maths inside a fixed program shape every few blocks; Igneum regenerates the whole program every hour over a growing dataset, with automatic era draws and no human in the loop | Stated so that the "first" claim in the litepaper is accurate (FUD ledger M4) | Litepaper "What has never been done before", row 1, rewritten 3 Oct 2026 |
| Class-group VDF | Chia, chiavdf. Apache-2.0, verified (`vendor/chiavdf/LICENSE`), commit `7e62ce14`. Wesolowski's proof (Efficient Verifiable Delay Functions, EUROCRYPT 2019), a paper, no licence | NUDUPL and NUCOMP ported from chiavdf's `qfb_nudupl` and `qfb_nucomp` into `proto-vdf` (Rust, over GMP through `rug`); fresh 1024-bit prime discriminant per input; 256-bit Fiat-Shamir prime (Chia uses 264); Igneum tags for the epoch and era paths. The textbook composition is kept as an oracle | The program seed must come from a certified checkpoint with a delay no miner can skip, so the seed cannot be ground. Chia's group needs no trusted setup | Spec section 4.2 (15,000 random cases agree with the oracle; 163,000 squarings per second; 4.5 ms verify); bench-log "proto-vdf" entry. GMP itself: LGPL-3.0 or GPL-2.0 dual, approximate, prototype only; the production dependency is decided with the wire format (O-4.5) |
| revm | Ethereum ecosystem, bluealloy/revm. Licence approximate: MIT. https://github.com/bluealloy/revm (not yet cloned) | Unchanged, credited. Driven by an Igneum block executor that feeds it the DAG's canonical sequence with the environment table of spec 7.1 and two-dimensional gas | The same EVM runs natively and inside the zkVM (reth, rsp and SP1 Reth all use it), so native and proven execution share one code path | `docs/design/execution-layer.md` D6 and section 2.1; differential test plan against reth (section 8.5). Nothing measured yet |
| SP1-class provers | Succinct, succinctlabs/sp1. Licence approximate: MIT or Apache-2.0. Not yet cloned | Unchanged, behind the versioned `ProofSystem` trait (`docs/design/execution-layer.md` 5.6). Version 1 is SP1 (Hypercube class, hash-based). Devnet v1 runs a stub that signs claims | Consumer cards prove hash-based systems without elliptic-curve MSM; the trait makes a swap a release (90% signalling, 3-month overlap, one wrap), never a redesign | No SP1 shard has been proven on any card in this repository (FUD ledger P1, P3). Phase 2 gate: shard time on a 3060-class card, published pass or fail |
| SP1-class provers | Succinct, succinctlabs/sp1. Licence approximate: MIT or Apache-2.0. Not yet cloned | Unchanged, behind the versioned `ProofSystem` trait (`docs/design/execution-layer.md` 5.6). Version 1 is SP1 (Hypercube class, hash-based). An early devnet ran a stub that signs claims | Consumer cards prove hash-based systems without elliptic-curve MSM; the trait makes a swap a release (90% signalling, 3-month overlap, one wrap), never a redesign | No SP1 shard has been proven on any card in this repository (FUD ledger P1, P3). Phase 2 gate: shard time on a 3060-class card, published pass or fail |
| BLS12-381 | Curve by Barreto, Lynn and Scott; blst by Supranational. Licence approximate: Apache-2.0. https://github.com/supranational/blst (not yet cloned) | Unchanged, credited. The header carries the BLAKE2b hash of a G1 compressed public key (48 bytes); every voter signs every 30-s checkpoint; signatures aggregate | Finality rule v2 needs one aggregate signature per checkpoint from thousands of keys | Spec section 3.1 (W1) and 2.4; `sim/results_v2.md` for the rule itself. Signature cost not yet measured |
| Hashing in the node | rusty-kaspa `crypto/hashes`, ISC, verified. Crates linked by the fork, licences read from the local cargo registry: blake2b_simd 1.0.2 (MIT), blake3 1.8.3 (CC0-1.0 or Apache-2.0), sha2 0.10.8 (MIT or Apache-2.0), keccak 0.1.6 (Apache-2.0 or MIT); sha3 0.10.8 not in the local registry, approximate: MIT or Apache-2.0 | Unchanged, credited. BLAKE2b with domain separation for block, transaction and PoW pre-hashes (`BlockHash`, `TransactionHash`, ...), BLAKE3 keyed for the sequencing-commitment and payload hashers, SHA-256 for ECDSA signing hashes, cSHAKE256 (Keccak) in the kHeavyHash stub that stays as the default engine and for pruning-proof block levels | The chain's hash for everything except the lottery is the one the forked commit uses (spec 0.6), so nothing unverified enters consensus | `hash_override_nonce_time` gained one field (fork-divergence row 1); every header-hash test vector was regenerated and the four genesis hashes re-derived |
| Address format | Bitcoin BIP 173 character set (bech32, Pieter Wuille and Greg Maxwell; BIP licence approximate: BSD-2-Clause) with the CashAddr polymod checksum of Bitcoin Cash (the source cites bch.info), as implemented in rusty-kaspa `crypto/addresses/src/bech32.rs`, ISC, verified | Prefixes only: `igneum`, `igneumtest`, `igneumsim`, `igneumdev` (Kaspa: `kaspa`, `kaspatest`, `kaspasim`, `kaspadev`). The script public key behind an address is unchanged | No Igneum address string may parse as a Kaspa address on any network | Fork-divergence row 9; test vectors in `addresses` and `txscript` regenerated and passing |
| The EVM | Ethereum (Yellow Paper and ethereum/execution-specs, CC0 approximate). Cancun opcode set, precompiles 0x01 to 0x09 | Semantics on a DAG: `block.number` is selected-chain height, `block.timestamp` is non-decreasing by a max rule, `prevrandao` is the VDF epoch seed, chain ids 4461, 4462, 4463 (historical: Devnet 3 answers chain id 4464 since its class v5 floor at DAA 68,400 on 8 October 2026, 4463 below it; the current id is in /release.json); 0x0a absent; gas has a second dimension | Blocks on a DAG have no single parent and no header state root; proving cost is a second resource; the random beacon must be unbiasable | Spec section 7.1 (normative table); devnet measurement R9 for timestamp drift; `ethereum/tests` replay in the differential plan |
| The EVM | Ethereum (Yellow Paper and ethereum/execution-specs, CC0 approximate). Cancun opcode set, precompiles 0x01 to 0x09 | Semantics on a DAG: `block.number` is selected-chain height, `block.timestamp` is non-decreasing by a max rule, `prevrandao` is the VDF epoch seed, chain id 4464 on the devnet and 4461 reserved for mainnet (the current id is in /release.json); 0x0a absent; gas has a second dimension | Blocks on a DAG have no single parent and no header state root; proving cost is a second resource; the random beacon must be unbiasable | Spec section 7.1 (normative table); devnet measurement R9 for timestamp drift; `ethereum/tests` replay in the differential plan |
| kHeavyHash (kept as a stub) | Kaspa, rusty-kaspa `crypto/hashes/src/pow_hashers.rs` and `consensus/pow/src/matrix.rs`, ISC, verified | Kept untouched as `HeavyHashEngine`, the default engine when the `igneum-pow` feature is off, and the block-level source for pruning proofs until seeds are threaded through | Lets the devnet run and lets upstream pow changes merge cleanly | Fork-divergence rows 14 and 15; open item in the same file (pruning-proof block levels) |
## What is new in Igneum
@ -30,7 +30,7 @@ Nothing here has a precedent that Igneum could have copied. Each item names the
| Piece | What it is | Where it is specified or measured |
|---|---|---|
| The hourly header-bound GPU program | A program drawn per epoch from a VDF seed, compiled to native GPU code, with the nonce-zeroed header hash absorbed into the init words so one nonce serves one header | Spec section 1 and `igneum-pow/src/bind.rs`; bench-log "first devnet blocks on the real lottery hash" |
| The hourly header-bound GPU program | A program drawn per epoch from a VDF seed, compiled to native GPU code, with the nonce-zeroed header hash absorbed into the init words so one nonce serves one header | Spec section 1 and `igneum-pow/src/bind.rs`; the measurement record in the repository (docs/bench-log.md) |
| Sustained-mining finality, rule v2 | Vote weight is blue blocks per BLS vote key over a flat 30-day window; every voter signs every 30-s checkpoint; lock at 2/3 of active weight and at least 56.7% of total weight; no stake, no other chain | Spec section 3; `sim/results_v2.md` (0 conflicting locks in every partition and eclipse scenario) |
| Two-dimensional gas and the per-frame app share | Execution gas on Ethereum's schedule plus proving gas from a calibrated table; 20% of the priority fee attributed per call frame to the registered developer of the contract that ran | Spec sections 5.1, 5.2; `docs/design/execution-layer.md` section 4 |
| The shard market and the native proving precompile | Shards cut from the native trace, assigned by sortition to 8 eligible provers for 10 s, then open; a `Prover` system contract that takes a job and returns the result by a later proof record | Spec section 7.2; `docs/design/execution-layer.md` sections 5 and 6 |

View file

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Page not found. Igneum</title>
<meta name="description" content="That page is not on igneum.network. The litepaper, the live devnet, the engineering log and the evidence page are.">
<meta name="description" content="That page is not on igneum.network. The litepaper, the live devnet and the evidence page are.">
<meta name="robots" content="noindex">
<meta name="theme-color" content="#0C0C0E">
<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">
@ -77,7 +77,7 @@ main{flex:1}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -107,12 +107,10 @@ main{flex:1}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -130,7 +128,7 @@ main{flex:1}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -151,12 +149,10 @@ main{flex:1}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -170,7 +166,7 @@ main{flex:1}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -236,7 +232,6 @@ main{flex:1}
<li><a href="/miner"><b>The miner</b><span>One click, and your card mines</span></a></li>
<li><a href="/litepaper"><b>Litepaper</b><span>How the chain works, in 19 sections</span></a></li>
<li><a href="/live"><b>Live devnet</b><span>Blocks, miners and finality as they happen</span></a></li>
<li><a href="/bench"><b>Engineering log</b><span>Every measurement, with the commands</span></a></li>
<li><a href="/evidence"><b>Evidence</b><span>Every claim and how far it is tested</span></a></li>
</ul>
</section>
@ -244,6 +239,7 @@ main{flex:1}
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -269,7 +265,6 @@ main{flex:1}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -281,7 +276,6 @@ main{flex:1}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -307,7 +301,7 @@ main{flex:1}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -3,8 +3,8 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Devnet 3 address</title>
<meta name="description" content="One Devnet 3 address: its balance, nonce and code, its transactions of the last seven days, the blocks it mined in the last day and what they earned.">
<title>Igneum 2.0 devnet address</title>
<meta name="description" content="One devnet address: its balance, nonce and code, its transactions of the last seven days, the blocks it mined in the last day and what they earned.">
<link rel="canonical" href="https://igneum.network/address">
<meta name="robots" content="noindex">
<meta name="theme-color" content="#0C0C0E">
@ -12,23 +12,23 @@
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum address">
<meta property="og:description" content="One Devnet 3 address: balance, nonce, code, its transactions and the blocks it mined.">
<meta property="og:description" content="One devnet address: balance, nonce, code, its transactions and the blocks it mined.">
<meta property="og:url" content="https://igneum.network/address">
<meta property="og:image" content="https://igneum.network/og/explorer.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta property="og:image" content="https://igneum.network/og/explorer-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum address">
<meta name="twitter:description" content="One Devnet 3 address: balance, nonce, code, its transactions and the blocks it mined.">
<meta name="twitter:description" content="One devnet address: balance, nonce, code, its transactions and the blocks it mined.">
<meta name="twitter:image" content="https://igneum.network/og/explorer.png?v=4">
<meta name="twitter:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta name="twitter:image:alt" content="The devnet, block by block. igneum.network/explorer">
<!-- share:end -->
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
@ -117,7 +117,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -147,12 +147,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -170,7 +168,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -191,12 +189,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -210,7 +206,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -270,7 +266,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><a href="/explorer">Explorer</a><span>/</span><span>Address</span></div>
<div class="eyebrow"><a href="/explorer">Devnet 3 explorer</a> · address</div>
<div class="eyebrow"><a href="/explorer">The devnet explorer</a> · address</div>
<h1 class="hash" id="title">Address</h1>
<div id="chips"></div>
<div class="msg" id="msg" aria-live="polite"></div>
@ -284,7 +280,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="cell"><div class="k">Blocks, 24 h</div><div class="v" id="a-blocks">0</div><div class="s" id="a-blocks-s"></div></div>
<div class="cell"><div class="k">Earned, 24 h</div><div class="v" id="a-earned">0<small>IGN</small></div><div class="s">80% of each blue block's subsidy</div></div>
<div class="cell"><div class="k">Last block</div><div class="v" id="a-last">n/a</div><div class="s" id="a-first"></div></div>
<div class="cell"><div class="k">Network</div><div class="v">Devnet 3</div><div class="s" id="a-chain">coins have no value</div></div>
<div class="cell"><div class="k">Network</div><div class="v">The devnet</div><div class="s" id="a-chain">coins have no value</div></div>
</div>
<div class="card"><div class="viz-head"><h2>Identity</h2></div><dl id="ident"></dl><p class="note">A miner names its EVM payout address in every coinbase (the IGNA tag) beside the coinbase script's own address, so the two forms name the same miner. The vote keys are the finality identities that signed these blocks; a card runs several.</p></div>
<div class="card"><div class="viz-head"><h2>Transactions</h2><div class="eyebrow" id="tx-eyebrow">newest 50 of the last 7 days</div></div>
@ -299,6 +295,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -324,7 +321,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -336,7 +332,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -362,7 +357,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -388,7 +383,7 @@ async function load() {
const r = await fetch('/api/explorer?address=' + encodeURIComponent(a)); const j = await r.json();
$('title').textContent = a;
if (!j.ok) { $('msg').textContent = j.error || 'Not found.'; return; }
document.title = `Devnet 3 address ${shortHash(a, 8, 6)}`;
document.title = `Devnet address ${shortHash(a, 8, 6)}`;
now = new Date(j.now).getTime(); me = j.evm_address; const ac = j.account;
if (j.chain_id) $('a-chain').textContent = `chain id ${j.chain_id} as the node reports it, coins have no value`;
$('chips').innerHTML = `<span class="chip">${j.kind === 'evm' ? (ac && ac.is_contract ? 'contract' : 'EVM account') : 'coinbase address'}</span>` + (j.blocks_10m ? '<span class="chip hot">mining now</span>' : '') + (ac && ac.miner ? '<span class="chip">miner payout address</span>' : '');

View file

@ -59,7 +59,7 @@ export function createHandler({ env = process.env, sql, rpc } = {}) {
const key = env.FAUCET_KEY, rpcUrl = env.FAUCET_RPC;
const chainId = Number(env.FAUCET_CHAIN_ID || 4463);
if (!key || !/^0x[0-9a-fA-F]{64}$/.test(key) || !rpcUrl) {
return res.status(503).json({ ok: false, error: 'The faucet is not open yet. It opens with the public testnet.' });
return res.status(503).json({ ok: false, error: 'The faucet is not open yet.' });
}
let body;
try { body = await readBody(req); } catch { return res.status(400).json({ ok: false, error: 'bad json' }); }

View file

@ -85,7 +85,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" data-active aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -115,12 +115,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -138,7 +136,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -159,12 +157,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -178,7 +174,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -249,9 +245,9 @@
</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="2880" height="1800" class="img-dark" alt="The Overview page of 0.3.22 on a mixed rig: 156 MH/s from 3 of 4 cards, 489 W at 0.32 MH/W, £3.09 a day of electricity, 6,784 blocks this run and 8,054 lifetime, the Stop mining button, the ladder strip, the chain drawn live with this rig's blocks ringed and the key under it, the node synced with 4 peers, the activity log" fetchpriority="high" decoding="async">
<img src="/img/app-overview-light.webp" width="2880" height="1800" class="img-light" alt="The Overview page of 0.3.22 in light mode: 156 MH/s from 3 of 4 cards, 489 W, the chain drawn live with this rig's blocks ringed" fetchpriority="high" decoding="async">
<figcaption>0.3.22, rendered from the app&rsquo;s recorded states, 7 October 2026: a mixed rig of an RTX 5090, an RX 9070 XT, an Arc B580 and an integrated UHD 770. The 5090 and the 9070 XT carry measured rates; the Arc&rsquo;s 15.2 MH/s is the plan&rsquo;s expectation until the measurement on the team's three-card Windows rig lands. Electricity at 26.32p per kWh, the UK typical price.</figcaption>
<img src="/img/app-overview-dark.webp" width="2880" height="1800" class="img-dark" alt="The Overview page of the current build on a mixed rig: 156 MH/s from 3 of 4 cards, 489 W at 0.32 MH/W, £3.09 a day of electricity, 6,784 blocks this run and 8,054 lifetime, the Stop mining button, the ladder strip, the chain drawn live with this rig's blocks ringed and the key under it, the node synced with 4 peers, the activity log" fetchpriority="high" decoding="async">
<img src="/img/app-overview-light.webp" width="2880" height="1800" class="img-light" alt="The Overview page of the current build in light mode: 156 MH/s from 3 of 4 cards, 489 W, the chain drawn live with this rig's blocks ringed" fetchpriority="high" decoding="async">
<figcaption>The current build, rendered from the app&rsquo;s recorded states, 7 October 2026: a mixed rig of an RTX 5090, an RX 9070 XT, an Arc B580 and an integrated UHD 770. The 5090 and the 9070 XT carry measured rates; the Arc&rsquo;s 15.2 MH/s is the plan&rsquo;s expectation until the measurement on the team's three-card Windows rig lands. Electricity at 26.32p per kWh, the UK typical price.</figcaption>
</figure>
</div>
</header>
@ -261,9 +257,9 @@
<div class="feat-row">
<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="2880" height="1800" class="img-dark" alt="The Overview page of 0.3.22 on an Apple M5 Max: 17.0 MH/s, 6,784 blocks this run, the ladder strip with signing under way, the chain drawn live with this Mac's blocks ringed, the node synced with 4 peers" loading="lazy" decoding="async">
<img src="/img/app-overview-mac-light.webp" width="2880" height="1800" class="img-light" alt="The Overview page of 0.3.22 in light mode on an Apple M5 Max: 17.0 MH/s, the ladder strip, the chain drawn live" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
<img src="/img/app-overview-mac-dark.webp" width="2880" height="1800" class="img-dark" alt="The Overview page of the current build on an Apple M5 Max: 17.0 MH/s, 6,784 blocks this run, the ladder strip with signing under way, the chain drawn live with this Mac's blocks ringed, the node synced with 4 peers" loading="lazy" decoding="async">
<img src="/img/app-overview-mac-light.webp" width="2880" height="1800" class="img-light" alt="The Overview page of the current build in light mode on an Apple M5 Max: 17.0 MH/s, the ladder strip, the chain drawn live" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
</figure>
<div>
<div class="eyebrow">01 · Overview</div>
@ -284,9 +280,9 @@
<div class="feat-row 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="2880" height="1800" class="img-dark" alt="The Cards page of 0.3.22: Ember Tune with the Efficiency, Balanced and Maximum goals; one row per card with its vendor's mark, its series line, its rate, IGN a day, watts, hashes per watt, cost a day and temperature: an RTX 5090 at 122 MH/s and 291 W, an RX 9070 XT at 18.9 MH/s and 198 W, an Arc B580 at 15.2 MH/s, an integrated UHD 770 off" loading="lazy" decoding="async">
<img src="/img/app-cards-light.webp" width="2880" height="1800" class="img-light" alt="The Cards page of 0.3.22 in light mode: Ember Tune and the four card rows with their vendor marks, the RTX 5090 at 122 MH/s and 291 W" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the app&rsquo;s recorded states, 7 October 2026: a mixed rig of an RTX 5090, an RX 9070 XT, an Arc B580 and an integrated UHD 770. The 5090 and the 9070 XT carry measured rates; the Arc&rsquo;s 15.2 MH/s is the plan&rsquo;s expectation until the measurement on the team's three-card Windows rig lands. Each row carries its vendor&rsquo;s mark and its series line.</figcaption>
<img src="/img/app-cards-dark.webp" width="2880" height="1800" class="img-dark" alt="The Cards page of the current build: Ember Tune with the Efficiency, Balanced and Maximum goals; one row per card with its vendor's mark, its series line, its rate, IGN a day, watts, hashes per watt, cost a day and temperature: an RTX 5090 at 122 MH/s and 291 W, an RX 9070 XT at 18.9 MH/s and 198 W, an Arc B580 at 15.2 MH/s, an integrated UHD 770 off" loading="lazy" decoding="async">
<img src="/img/app-cards-light.webp" width="2880" height="1800" class="img-light" alt="The Cards page of the current build in light mode: Ember Tune and the four card rows with their vendor marks, the RTX 5090 at 122 MH/s and 291 W" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the app&rsquo;s recorded states, 7 October 2026: a mixed rig of an RTX 5090, an RX 9070 XT, an Arc B580 and an integrated UHD 770. The 5090 and the 9070 XT carry measured rates; the Arc&rsquo;s 15.2 MH/s is the plan&rsquo;s expectation until the measurement on the team's three-card Windows rig lands. Each row carries its vendor&rsquo;s mark and its series line.</figcaption>
</figure>
<div>
<div class="eyebrow">02 · Cards</div>
@ -306,7 +302,7 @@
<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>
<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. Details are in the measurement record in the repository (docs/bench-log.md).</p>
</div>
</section>
@ -341,9 +337,9 @@
<div class="feat-row">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Earnings</b></div>
<img src="/img/app-earnings-dark.webp" width="2880" height="1800" class="img-dark" alt="The Earnings page of 0.3.22: 29,517 IGN a day at the last hour's rate with the reason line, 6,784 blocks this run with their IGN, then weight rank 3 of 4 keys, electricity with no draw reported on Apple silicon, 8,054 blocks lifetime, the dev fee switch, and the ladder card under it" loading="lazy" decoding="async">
<img src="/img/app-earnings-light.webp" width="2880" height="1800" class="img-light" alt="The Earnings page of 0.3.22 in light mode: IGN a day first, then blocks this run, weight, electricity and lifetime" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026. IGN a day first, then blocks this run, then weight, electricity and lifetime; no price of IGN anywhere.</figcaption>
<img src="/img/app-earnings-dark.webp" width="2880" height="1800" class="img-dark" alt="The Earnings page of the current build: 29,517 IGN a day at the last hour's rate with the reason line, 6,784 blocks this run with their IGN, then weight rank 3 of 4 keys, electricity with no draw reported on Apple silicon, 8,054 blocks lifetime, the dev fee switch, and the ladder card under it" loading="lazy" decoding="async">
<img src="/img/app-earnings-light.webp" width="2880" height="1800" class="img-light" alt="The Earnings page of the current build in light mode: IGN a day first, then blocks this run, weight, electricity and lifetime" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026. IGN a day first, then blocks this run, then weight, electricity and lifetime; no price of IGN anywhere.</figcaption>
</figure>
<div>
<div class="eyebrow">04 · Earnings</div>
@ -364,9 +360,9 @@
<div class="feat-row 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="2880" height="1800" class="img-dark" alt="The Prove page of 0.3.22: the shard card, your card proved shard 3 of block 160,390 for 1.15 IGN; the Prove on this machine switch on, one sentence for the Apple M5 Max, which proves on the CPU slowly; one line of counts, and Details" loading="lazy" decoding="async">
<img src="/img/app-prove-light.webp" width="2880" height="1800" class="img-light" alt="The Prove page of 0.3.22 in light mode: the shard card and the Prove on this machine switch" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026. Apple silicon proves on the CPU, slowly; a 12 GB NVIDIA card is the line for proving beside the miner.</figcaption>
<img src="/img/app-prove-dark.webp" width="2880" height="1800" class="img-dark" alt="The Prove page of the current build: the shard card, your card proved shard 3 of block 160,390 for 1.15 IGN; the Prove on this machine switch on, one sentence for the Apple M5 Max, which proves on the CPU slowly; one line of counts, and Details" loading="lazy" decoding="async">
<img src="/img/app-prove-light.webp" width="2880" height="1800" class="img-light" alt="The Prove page of the current build in light mode: the shard card and the Prove on this machine switch" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026. Apple silicon proves on the CPU, slowly; a 12 GB NVIDIA card is the line for proving beside the miner.</figcaption>
</figure>
<div>
<div class="eyebrow">05 · Prove</div>
@ -389,9 +385,9 @@
</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="2880" height="1800" class="img-dark" alt="The Settings page of 0.3.22 from the top: the Tuning card with the goal at Balanced and the Ember Tune and Power control switches, each with one sentence, then Electricity with the region, the currency and the price per kWh" loading="lazy" decoding="async">
<img src="/img/app-settings-light.webp" width="2880" height="1800" class="img-light" alt="The Settings page of 0.3.22 in light mode: the Tuning card and Electricity" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
<img src="/img/app-settings-dark.webp" width="2880" height="1800" class="img-dark" alt="The Settings page of the current build from the top: the Tuning card with the goal at Balanced and the Ember Tune and Power control switches, each with one sentence, then Electricity with the region, the currency and the price per kWh" loading="lazy" decoding="async">
<img src="/img/app-settings-light.webp" width="2880" height="1800" class="img-light" alt="The Settings page of the current build in light mode: the Tuning card and Electricity" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 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>
@ -412,15 +408,15 @@
</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 of 0.3.22 in a 390 pixel wide window: the rate, the Stop 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.22 in a 390 pixel wide window, light mode: 17.0 MH/s, the Stop mining button, the chain live and the bottom tab bar" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
<img src="/img/app-phone-overview.webp" width="780" height="1688" class="img-dark" alt="The Overview page of the current build in a 390 pixel wide window: the rate, the Stop 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 the current build in a 390 pixel wide window, light mode: 17.0 MH/s, the Stop mining button, the chain live and the bottom tab bar" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</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 of 0.3.22 in a 390 pixel wide window: Ember Tune and the card rows stacked with their vendor marks, 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.22 in a 390 pixel wide window, light mode: Ember Tune, the card rows and the bottom tab bar" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
<img src="/img/app-phone-cards.webp" width="780" height="1688" class="img-dark" alt="The Cards page of the current build in a 390 pixel wide window: Ember Tune and the card rows stacked with their vendor marks, 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 the current build in a 390 pixel wide window, light mode: Ember Tune, the card rows and the bottom tab bar" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
</figure>
</div>
</div>
@ -431,7 +427,7 @@
<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>
<p>Measured against a worker that misbehaves on command, 4 October 2026: recoveries in seconds. Details are in the measurement record in the repository (docs/bench-log.md).</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>
@ -459,7 +455,6 @@
</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>
@ -482,6 +477,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -507,7 +503,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -519,7 +514,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -545,7 +539,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Devnet 3 block</title>
<title>Igneum 2.0 devnet block</title>
<meta name="description" content="One Igneum block: header, parents, mergeset, transactions, proof records and, when it is a checkpoint, its finality certificate.">
<link rel="canonical" href="https://igneum.network/block">
<meta name="robots" content="noindex">
@ -18,17 +18,17 @@
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta property="og:image" content="https://igneum.network/og/explorer-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum block">
<meta name="twitter:description" content="One Igneum block: header, parents, mergeset, transactions, proof records and its finality certificate.">
<meta name="twitter:image" content="https://igneum.network/og/explorer.png?v=4">
<meta name="twitter:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta name="twitter:image:alt" content="The devnet, block by block. igneum.network/explorer">
<!-- share:end -->
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
@ -117,7 +117,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -147,12 +147,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -170,7 +168,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -191,12 +189,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -210,7 +206,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -270,7 +266,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><a href="/explorer">Explorer</a><span>/</span><span>Block</span></div>
<div class="eyebrow"><a href="/explorer">Devnet 3 explorer</a> · block</div>
<div class="eyebrow"><a href="/explorer">The devnet explorer</a> · block</div>
<h1 class="hash" id="title">Block</h1>
<div id="chips"></div>
<div class="msg" id="msg" aria-live="polite"></div>
@ -292,6 +288,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -317,7 +314,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -329,7 +325,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -355,7 +350,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -386,7 +381,7 @@ async function load() {
const r = await fetch('/api/explorer?' + query); const j = await r.json();
if (!j.ok) { $('msg').textContent = j.error || 'Not found.'; $('title').textContent = /^\d/.test(id) ? 'Chain block ' + id : shortHash(id, 10, 8); return; }
const b = j.block, d = b.detail || {}, now = new Date(j.now).getTime(), sum = b.shard_summary || { total: 0, paid: 0 };
document.title = `Devnet 3 block ${shortHash(b.hash, 8, 6)}`;
document.title = `Devnet block ${shortHash(b.hash, 8, 6)}`;
$('title').textContent = b.hash;
const chips = [b.chain ? (b.chain_now === false ? '<span class="chip" title="the observer saw it as the chain block of its number; a tip reorg gave the number to another block">chain block, replaced</span>' : '<span class="chip hot">chain block</span>') : `<span class="chip">${esc(b.color)}</span>`, `<span class="chip" title="the hash program family this block was mined under">class ${esc(b.class ? b.class.class : 'v4')}</span>`];
if (j.checkpoint) chips.push(`<span class="chip ${j.checkpoint.state === 'locked' ? 'ok' : ''}">checkpoint ${j.checkpoint.index}, ${esc(j.checkpoint.state)}</span>`);
@ -396,7 +391,7 @@ async function load() {
if (j.txs.length) chips.push(`<span class="chip">${j.txs.length} transaction${j.txs.length === 1 ? '' : 's'} executed</span>`);
$('chips').innerHTML = chips.join('');
$('summary').innerHTML = dl([
['Network', 'Devnet 3' + (j.chain_id ? ', chain id ' + esc(j.chain_id) + ' as the node reports it' : '')],
['Network', 'The devnet' + (j.chain_id ? ', chain id ' + esc(j.chain_id) + ' as the node reports it' : '')],
['Number', b.number === null ? '<span class="kv">none, not a chain block</span>' : (b.chain_now === false ? `${int(b.number)} <span class="kv">as the observer first saw it; a tip reorg gave this number to another block, so the EVM executed that one</span>` : int(b.number))],
['Time', `${utc(b.ts)} <span class="kv">(${rel(now - b.ts)})</span>`],
['DAA score', int(b.daa)], ['Blue score', int(b.blue_score)],

View file

@ -90,7 +90,7 @@ table{min-width:560px}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -120,12 +120,10 @@ table{min-width:560px}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -143,7 +141,7 @@ table{min-width:560px}
<div class="panel-list">
<a href="/build" data-nav="build" aria-current="page"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -164,12 +162,10 @@ table{min-width:560px}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -183,7 +179,7 @@ table{min-width:560px}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build" aria-current="page"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -257,20 +253,21 @@ table{min-width:560px}
<p>This file is the source of <a href="https://igneum.network/build" rel="noopener">igneum.network/build</a>. The site build renders it as the page. The other files in this directory are the walkthrough, the RPC list, the faucet, the verifier and the grants.</p>
</section>
<section class="doc-section"><h2 id="what-is-different">What is different</h2>
<p><strong>Every block is built to be proven.</strong> A chain block carries a zero-knowledge proof of its execution. The miners are the provers: the same cards that find blocks prove them, in shards. On Devnet 3 a share of blocks carries a proof today; the live page shows the share and the lag, and the design target at launch is under a minute. Full nodes execute every block themselves, so a bad proof is a light-client problem and never a chain split.</p>
<p><strong>Every block is built to be proven.</strong> A chain block carries a zero-knowledge proof of its execution. The miners are the provers: the same cards that find blocks prove them, in shards. On the devnet a share of blocks carries a proof today; the live page shows the share and the lag, and the design target at launch is under a minute. Full nodes execute every block themselves, so a bad proof is a light-client problem and never a chain split.</p>
<p><strong>A lock in minutes, not an hour of confirmations.</strong> Miners sign a checkpoint every 30 seconds. When two thirds of the mining weight of the last 30 days have signed, the checkpoint is locked. Weight is blocks mined, nothing else. The lock lands in about two minutes. The <a href="/litepaper">litepaper</a> has the rule.</p>
<p><strong>Nothing to stake.</strong> No validator set, no delegation, no slashing, no bonded class above the miners. Finality comes from mining weight alone. Nobody holds a key that the chain depends on.</p>
<p><strong>The EVM you already know.</strong> Solidity deploys unchanged. Standard JSON-RPC, EIP-1559 transactions, the chain id in the signature, <code>cancun</code> as the EVM version. Gas has two dimensions on Igneum, execution and proving, and the node folds the second into the price it quotes, so <code>eth_estimateGas</code> and <code>eth_gasPrice</code> work as they do on Ethereum.</p>
</section>
<section class="doc-section"><h2 id="networks">Networks</h2>
<div class="tbl"><table><thead><tr><th></th><th>Devnet 3</th><th>Testnet</th><th>Mainnet</th></tr></thead><tbody><tr><td>Chain id</td><td><span data-rm="network.chain_id">4464</span> (<code><span data-rm="network.chain_id_hex">0x1170</span></code>) since its class v5 floor on 8 October 2026; 4463 below it</td><td>4462 (<code>0x116e</code>)</td><td>4461 (<code>0x116d</code>)</td></tr><tr><td>Network id</td><td><code><span data-rm="network.id">igneum-devnet-3</span></code></td><td><code>igneum-testnet-1</code></td><td>not started</td></tr><tr><td>RPC</td><td><code><span data-rm="network.rpc">https://rpc.devnet.igneum.network</span></code> (a node you run serves <code>http://127.0.0.1:26790</code>)</td><td><code>https://rpc.testnet.igneum.network</code> (answers; nothing mines there yet, so a transaction waits)</td><td>none</td></tr><tr><td>Coins</td><td>no value, resets without notice</td><td>no value, resets with notice</td><td>not started</td></tr><tr><td>Symbol, decimals</td><td>IGN, 18</td><td>IGN, 18</td><td>IGN, 18</td></tr><tr><td>Machine-readable</td><td><a href="/release.json">/release.json</a>: the chain id, the source commits and fingerprints, the mining class, the finality rule, the proof program ids, the fee schedule and the current version per platform, with a generated date</td><td></td><td></td></tr></tbody></table></div>
<p>Devnet 3 is where you build today. It is a developer network: it resets without notice and its coins have no value. Its public RPC takes the read methods, <code>eth_sendRawTransaction</code> and a wRPC websocket at <code>/ws</code>, at 20 requests a second per address. The public testnet exists, its RPC answers, and no blocks are being produced on it until it opens. Mainnet has no date. Devnet 3 answered 4463 until its class v5 floor at DAA 68,400 on 8 October 2026 and 4464 from it; read it with <code>eth_chainId</code> rather than fixing it, since a transaction signed for the wrong id is refused.</p>
<div class="tbl"><table><thead><tr><th></th><th>Igneum 2.0 devnet</th></tr></thead><tbody><tr><td>Chain id</td><td>4464 (<code>0x1170</code>)</td></tr><tr><td>Network id</td><td><code>igneum-devnet-4</code></td></tr><tr><td>RPC</td><td><code>https://rpc.devnet.igneum.network</code> (a node you run serves <code>http://127.0.0.1:26790</code>)</td></tr><tr><td>Coins</td><td>no value, resets without notice</td></tr><tr><td>Symbol, decimals</td><td>IGN, 18</td></tr><tr><td>Machine-readable</td><td><a href="/release.json">/release.json</a>: the chain id, the source commits and fingerprints, the mining class, the finality rule, the proof program ids, the fee schedule and the current version per platform, with a generated date</td></tr></tbody></table></div>
<p>The devnet is where you build today. It is a developer network: it resets without notice and its coins have no value. Its public RPC takes the read methods, <code>eth_sendRawTransaction</code> and a wRPC websocket at <code>/ws</code>, at 20 requests a second per address. Read the chain id with <code>eth_chainId</code> rather than fixing it, since a transaction signed for the wrong id is refused.</p>
<p>Mainnet has not started and has no date. Its chain id, 4461 (<code>0x116d</code>), is reserved in the node.</p>
</section>
<section class="doc-section"><h2 id="endpoints-and-tools">Endpoints and tools</h2>
<ul><li><strong>Wallet.</strong> Any Ethereum wallet. <a href="/metamask">Add Igneum to MetaMask</a> with one click, or the <a href="/wallet">Igneum wallet</a>.</li><li><strong>Faucet.</strong> <a href="/faucet">10 IGN of Devnet 3 coin</a> per address per day. No account.</li><li><strong>Explorer.</strong> <a href="/explorer">The explorer</a> shows blocks, the DAG, miners and addresses. The EVM views, transactions and contracts, are being built and link from the same page as they land.</li><li><strong>Swap.</strong> <a href="/swap">The swap</a>: test tokens on Devnet 3, every swap in a proven block.</li><li><strong>Source.</strong> <a href="https://git.igneum.network/igneum-network/igneum" rel="noopener">git.igneum.network/igneum-network/igneum</a>: the node, the miner, the site, and these pages under <code>docs/build/</code>.</li></ul>
<ul><li><strong>Wallet.</strong> Any Ethereum wallet. <a href="/metamask">Add Igneum to MetaMask</a> with one click, or the <a href="/wallet">Igneum wallet</a>.</li><li><strong>Faucet.</strong> <a href="/faucet">10 IGN of the devnet coin</a> per address per day. No account.</li><li><strong>Explorer.</strong> <a href="/explorer">The explorer</a> shows blocks, the DAG, miners and addresses. The EVM views, transactions and contracts, are being built and link from the same page as they land.</li><li><strong>Swap.</strong> <a href="/swap">The swap</a>: test tokens on the devnet, every swap in a proven block.</li><li><strong>Source.</strong> <a href="https://git.igneum.network/igneum-network/igneum" rel="noopener">git.igneum.network/igneum-network/igneum</a>: the node, the miner, the site, and these pages under <code>docs/build/</code>.</li></ul>
</section>
<section class="doc-section"><h2 id="your-first-contract-in-five-minutes">Your first contract in five minutes</h2>
<p>With <a href="https://getfoundry.sh" rel="noopener">Foundry</a>. Tested end to end on Devnet 3 on a build box; the full walkthrough with the expected output is <a href="https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/first-contract.md" rel="noopener">docs/build/first-contract.md</a>.</p>
<p>With <a href="https://getfoundry.sh" rel="noopener">Foundry</a>. Tested end to end on the devnet on a build box; the full walkthrough with the expected output is <a href="https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/first-contract.md" rel="noopener">docs/build/first-contract.md</a>.</p>
<pre>curl -L https://foundry.paradigm.xyz | bash &amp;&amp; foundryup
export RPC=https://rpc.devnet.igneum.network
cast wallet new # an address and a private key, for the devnet only</pre>
@ -285,7 +282,7 @@ cast call 0xDEPLOYED "number()(uint256)" --rpc-url $RPC</pre>
<p>The call answers <code>1</code>. Paste the transaction hash into <a href="/explorer">the explorer</a>. Hardhat, ethers and viem work the same way: chain id 4464, the RPC above.</p>
</section>
<section class="doc-section"><h2 id="the-rpc-the-node-serves">The RPC the node serves</h2>
<p>Read from a Devnet 3 node, not from a spec. <code>web3_clientVersion</code> answers <code>igneumd/2.1.0/execution-layer-v3</code>. The full list, served and not served, with the probe that produced it: <a href="https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/rpc.md" rel="noopener">docs/build/rpc.md</a>.</p>
<p>Read from a devnet node, not from a spec. <code>web3_clientVersion</code> answers <code>igneumd/2.1.0/execution-layer-v3</code>. The full list, served and not served, with the probe that produced it: <a href="https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/build/rpc.md" rel="noopener">docs/build/rpc.md</a>.</p>
<ul><li><strong>Served.</strong> <code>eth_chainId</code>, <code>eth_blockNumber</code>, <code>eth_getBalance</code>, <code>eth_getTransactionCount</code>, <code>eth_getCode</code>, <code>eth_getStorageAt</code>, <code>eth_getBlockByNumber</code>, <code>eth_getBlockByHash</code>, <code>eth_getTransactionByHash</code>, <code>eth_getTransactionReceipt</code>, <code>eth_getBlockReceipts</code>, <code>eth_getLogs</code>, <code>eth_call</code>, <code>eth_estimateGas</code>, <code>eth_gasPrice</code>, <code>eth_maxPriorityFeePerGas</code>, <code>eth_feeHistory</code>, <code>eth_sendRawTransaction</code>, <code>eth_syncing</code>, <code>eth_accounts</code>, <code>net_version</code>, <code>net_peerCount</code>, <code>net_listening</code>, <code>web3_clientVersion</code>.</li><li><strong>Igneum's own.</strong> <code>igneum_getExecStatus</code>, <code>igneum_getProvingStatus</code>, <code>igneum_getShardPlan</code>, <code>igneum_getProofRecords</code>, <code>igneum_getTransactionStatus</code>, <code>igneum_estimateGas</code>, <code>igneum_getBudgets</code> and the segment and proof calls. <code>igneum_estimateGas</code> returns both gas dimensions and whether a call exceeds the proving limit.</li><li><strong>Not served.</strong> Filters and subscriptions (<code>eth_newFilter</code>, <code>eth_subscribe</code>), <code>txpool_*</code>, <code>debug_*</code>, <code>trace_*</code>, <code>eth_sendTransaction</code>, <code>eth_sign</code>, <code>eth_getProof</code>, the uncle calls. Poll <code>eth_blockNumber</code> and <code>eth_getLogs</code>. Sign on your side.</li></ul>
</section>
<section class="doc-section"><h2 id="verify-a-block-in-your-browser">Verify a block in your browser</h2>
@ -297,7 +294,7 @@ console.log(r.verified, r.signers, 'of', r.voters, 'voters', r.ms, 'ms');</pre>
</section>
<section class="doc-section"><h2 id="where-to-ask">Where to ask</h2>
<ul><li>An issue on <a href="https://git.igneum.network/igneum-network/igneum/issues" rel="noopener">the repository</a>.</li><li><a href="https://discord.gg/igneum" rel="noopener">Discord</a>, the builders channel.</li><li><a href="/grants">Grants</a> for tooling, reference apps, infrastructure and research.</li></ul>
<p>Devnet and testnet coins have no value. Nothing on this page is an offer to sell anything.</p></section></article>
<p>Devnet coins have no value. Nothing on this page is an offer to sell anything.</p></section></article>
</div>
<p class="gen">Generated from docs/build/build.md in the repository at build time. Times are UTC.</p>
</div></section>
@ -305,6 +302,7 @@ console.log(r.verified, r.signers, 'of', r.voters, 'voters', r.ms, 'ms');</pre>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -330,7 +328,6 @@ console.log(r.verified, r.signers, 'of', r.voters, 'voters', r.ms, 'ms');</pre>
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -342,7 +339,6 @@ console.log(r.verified, r.signers, 'of', r.voters, 'voters', r.ms, 'ms');</pre>
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -368,7 +364,7 @@ console.log(r.verified, r.signers, 'of', r.voters, 'voters', r.ms, 'ms');</pre>
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -1,5 +1,5 @@
// Igneum site build: renders the engineering log from the repository's markdown into a branded
// page and merges the log's dated entries into the journey feed. The FUD ledger is internal and
// Igneum site build: injects the shared head, nav and footer, renders the generated pages from the
// repository's markdown and data, and stamps the download buttons. The FUD ledger is internal and
// is never rendered here.
// Runs on every deploy (Vercel build command) and locally with `node build.mjs`.
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
@ -48,10 +48,16 @@ function md(src) {
}
// Shared chrome: fonts and tokens (head), the nav bar and the footer live once in site/partials/ and are injected into every
// page between HTML comment markers (<!-- head:start --> ... <!-- head:end -->, nav, footer; journey on the homepage).
// page between HTML comment markers (<!-- head:start --> ... <!-- head:end -->, nav, footer).
// The committed pages carry the injected copy, so they are right with or without a build; the build keeps them in step.
const partial = name => readFileSync(join(here, 'partials', name), 'utf8').trim();
const HEAD = partial('head.html'), NAV = partial('nav.html'), FOOT = partial('footer.html');
// The devnet state (Igneum 2.0, 8 October 2026): ONE string in ONE place. 'starting' until the Igneum 2.0 devnet's first
// block; set 'live' on the landing that re-points the feeds. Every element carrying data-devnet-state (the nav pill, the
// devnet notices) is stamped with the state and its label, and the nav script only reads the live feed once the state is 'live'.
const DEVNET_STATE = 'starting';
const DEVNET_LABEL = { starting: 'Igneum 2.0 devnet starting', live: 'Devnet live' }[DEVNET_STATE];
const stampDevnet = html => html.replace(/<(b|span)([^>]*?) data-devnet-state="[^"]*"([^>]*)>[^<]*<\/\1>/g, (m, tag, a, b) => `<${tag}${a} data-devnet-state="${DEVNET_STATE}"${b}>${DEVNET_LABEL}</${tag}>`);
const HEAD = partial('head.html'), NAV = stampDevnet(partial('nav.html')), FOOT = partial('footer.html');
// the reference apps' shared definitions (8 Oct 2026): included, executed, proven, finalised, one source for the three pages
const TERMS = partial('terms.html');
function navFor(active) {
@ -147,7 +153,7 @@ function sectionise(bodyHtml) {
const hist = (p) => p.replace(/^(<h2 id="(\d{4}-\d{2}-\d{2})[^"]*">[\s\S]*?<\/h2>)/, (m, h, d) => `${h}<p class="src"><b>Historical record</b> of ${d}: the code and the chain as they stood that day. The chain's current state is the <a href="/release.json">release manifest</a>.</p>`);
return parts.filter(p => p.trim()).map(p => `<section class="doc-section">${hist(p)}</section>`).join('\n');
}
function page(title, desc, bodyHtml, toc, note, { path = '/bench', heading = title, eyebrow, crumb, filter = true } = {}) {
function page(title, desc, bodyHtml, toc, note, { path = '/', heading = title, eyebrow, crumb, filter = true } = {}) {
const active = path.replace(/^\//, '');
const h2s = toc.filter(t => t.lvl === 2);
const nav = h2s.map(t => `<a href="#${t.id}">${esc(t.t)}</a>`).join('');
@ -212,93 +218,19 @@ ${FOOT}
}
let built = [];
if (existsSync(join(docs, 'bench-log.md'))) {
// the public /bench page renders a SCRUBBED copy (site/scrub.mjs; the build fails on any private string, R4.6.1)
const src = scrubBench(readFileSync(join(docs, 'bench-log.md'), 'utf8'));
const { html, toc } = md(src);
writeFileSync(join(here, 'bench.html'), page('Igneum engineering log', 'Every Igneum benchmark and test, with the hardware and the commands that produced it. Prototype numbers are labelled as such.', html, toc,
'Every measurement the project has made, newest at the bottom, written by the people and agents who ran it, with the commands and hardware. Prototype numbers are not mining numbers and say so.',
{ path: '/bench', heading: 'Engineering log', crumb: 'Engineering log' }));
built.push('bench.html');
// journey feed: dated headings become log entries. `short` is the homepage line (one clause, under 72 characters);
// SHORT holds hand-written lines keyed by the start of the heading, the rule below covers the rest.
const SHORT = [
['Generator version 2 adopted', 'Generator v2 adopted: every hash does 128 distinct reads'],
['Sim/economy', 'Economy simulation: mining versus proving under stress'],
['Difficulty rule under attack', 'Difficulty rule attacked seven ways'],
['Difficulty rule: timestamp attack fixed', 'Timestamp attack on the difficulty rule fixed'],
['Devnet-v4 integration', 'Devnet v4: nine branches merged into one node'],
['Per-identity hash rate', 'RTX 5090 hash-rate decay diagnosed: a miner bug, fixed'],
['Igneum-node devnet v2', 'Finality rule v2 live on a four-miner test network'],
['Execution layer devnet v3', 'EVM execution layer: identical state on three nodes'],
['Weak-program census', 'Census of 400,000 programs: redundant loads found'],
['First machine in the United States', 'First machine in the United States: a laptop on an integrated GPU, synced and voting'],
['Shard proving on the RTX 5090', 'Shard layer on the RTX 5090: a full shard proven in 10.9 s, a block aggregated in 2.2 s'],
['Proving v0 on the RTX 5090', 'First GPU proof of an Igneum block: 1.4 s on an RTX 5090'],
['Proving v0', 'First SP1 proof of an Igneum block, on a laptop CPU'],
['Windows node package', 'Windows node package: cross-compiled, two-peer sync'],
['R3.26 / M15', 'Cache-build attack closed: 10.6 s of rebuilds to 14 ms'],
['Difficulty controller', 'Igneum dual-lane difficulty rule built and simulated'],
['Devnet started four months', 'Devnet started four months ahead of plan'],
['First blocks mined over the network', 'First blocks from a Windows PC: RTX 5090 and AMD'],
['First devnet blocks on the real lottery', 'First devnet blocks on the real lottery hash'],
['Igneum-node devnet v0', 'Devnet v0: three nodes at one block per second'],
['Proto-opencl', 'OpenCL worker built and proven without AMD silicon'],
['AMD gfx1036', 'AMD integrated GPU runs the hash through OpenCL'],
['RTX 5090 through NVIDIA OpenCL', 'RTX 5090 through NVIDIA OpenCL'],
['RTX 5090 first run', 'RTX 5090 first run'],
['RTX 5090, memory-hard', 'RTX 5090 on the memory-hard dataset'],
['RTX 5090 ran two generated programs', 'RTX 5090 matches Apple silicon hash for hash, 192 of 192'],
['Fuzzing', 'Fuzzing: 1.3 million hashes, zero GPU to CPU mismatches'],
['Second hostile review', 'Second hostile review: two fatal flaws found and fixed'],
['First prototype of the random-program', 'First prototype of the lottery hash on Apple silicon'],
['Igneum named', 'Igneum named. Litepaper, brand and wallet designs published'],
['Finality floor', 'Finality floor raised to two thirds of all weight'],
['First hourly program swap on the live devnet', 'First live hourly swap: no pause on Mac, NVIDIA or AMD'],
['First finality lock on the live devnet', 'First live finality lock: 77.4% of weight, 17 voters'],
['First machine on the Igneum Miner app', 'First machine on the one-click app: a 5090 at 118 MH/s'],
['Difficulty rule v2 activated on the live devnet', 'Difficulty rule v2 switched on the live devnet by height, no fresh chain'],
['First outside machine on the devnet', 'First outside machine: a friend\'s Mac mining through the app'],
['Devnet v4 cut-over', 'Devnet v4 live: generator v2, two-thirds floor, fresh chain'],
];
function shortTitle(t) {
for (const [k, v] of SHORT) if (t.startsWith(k)) return v;
let s = t.split(/[:;]/)[0].trim();
if (s.length < 16) s = t.split(/[,;]/).slice(0, 2).join(',').trim();
if (s.length > 72) s = s.slice(0, 69).replace(/\s+\S*$/, '') + '…';
return s.replace(/[.,]$/, '');
}
const entries = [];
for (const m of src.matchAll(/^##+\s+(\d{1,2}\s+\w+\s+\d{4})[,:]?\s*(.*)$/gm)) {
const d = new Date(m[1] + ' 12:00:00 UTC'); if (isNaN(d)) continue;
const iso = d.toISOString().slice(0, 10);
// "(night), ledger M30: ..." loses its bracket and then its leading comma
const text = m[2].replace(/\(.*?\)/g, '').replace(/^\s*[,:;]\s*/, '').replace(/\s+/g, ' ').trim();
if (text) { const t = text.charAt(0).toUpperCase() + text.slice(1); entries.push({ date: iso, text: t, short: shortTitle(t) }); }
}
const jp = join(here, 'journey.json');
const j = JSON.parse(readFileSync(jp, 'utf8'));
for (const e of j.log) { const t = scrubBench(e.text.replace(/^\s*[,:;]\s*/, '')); e.text = t.charAt(0).toUpperCase() + t.slice(1); } // entries stored before the leading-comma fix, and before a scrub rule was added, are re-scrubbed
const seen = new Set(j.log.map(e => e.date + '|' + e.text));
for (const e of entries.reverse()) { const k = e.date + '|' + e.text; if (!seen.has(k)) { j.log.unshift(e); seen.add(k); } }
for (const e of j.log) e.short = shortTitle(e.text);
j.log.sort((a, b) => (a.date < b.date ? 1 : a.date > b.date ? -1 : 0));
j.log = j.log.slice(0, 40);
j.updated = j.log[0] ? j.log[0].date : j.updated;
writeFileSync(jp, JSON.stringify(j, null, 2) + '\n');
built.push('journey.json (' + j.log.length + ' entries)');
}
// Igneum 2.0 site reset (8 October 2026): the engineering log (/bench) and the journey (/journey) are history and are not
// served; docs/bench-log.md stays in the repository as the measurement record.
// The builder programme (8 October 2026): /build and /grants are rendered from docs/build/build.md and docs/build/grants.md
// through the same generated-page shell as /bench, so the markdown is the source and the served page follows it. The other
// through the same generated-page shell, so the markdown is the source and the served page follows it. The other
// files of docs/build/ (the walkthrough, the RPC list, the faucet, the verifier) are linked from /build on the git host.
for (const [src, file, title, desc, heading, lead, eyebrow] of [
['build.md', 'build.html', 'Build on Igneum: chain ids, RPC, a contract in five minutes', 'The developer entry page for Igneum: what is different, the chain ids and RPC endpoints, the wallet, the explorer, the faucet, a five-minute contract deploy and a block you verify in your browser.', 'Build on Igneum', 'Built to prove every block. A lock in minutes. Nothing to stake. The EVM you already know: Solidity deploys unchanged. Here are the chain ids, the endpoints and a contract in five minutes.', 'Developers'],
['grants.md', 'grants.html', 'Igneum grants: tooling, reference apps, infrastructure, research', 'The Igneum grants programme: four tiers, what a grant is, how to apply with an issue on the git host, the weekly review, and the lines that stay honest about value, amounts and dates.', 'Grants', 'Paid in IGN from the dev fee fund, on delivery, on the public testnet first. Four tiers. One issue to apply. A weekly review.', 'The programme'],
['grants.md', 'grants.html', 'Igneum grants: tooling, reference apps, infrastructure, research', 'The Igneum grants programme: four tiers, what a grant is, how to apply with an issue on the git host, the weekly review, and the lines that stay honest about value, amounts and dates.', 'Grants', 'Paid in IGN from the dev fee fund, on delivery, on the Igneum 2.0 devnet first. Four tiers. One issue to apply. A weekly review.', 'The programme'],
['compatibility.md', 'compatibility.html', 'Igneum compatibility, measured: every row a test run against the devnet', 'Compatibility as a product deliverable: representative contracts, wallet fee estimation, indexing, failed transactions, receipts, application assumptions and the measured differences (block context, randomness, two-dimensional fees), each a test with its evidence. Devnet, no value.', 'Compatibility, measured', 'Every row is a test that ran against the devnet, with its evidence; a row that could not run says why.', 'Build · compatibility'],
]) {
const mdp = join(docs, 'build', src);
if (!existsSync(mdp)) continue; // the gate builds a copy of site/ alone: the committed page stands, as for /bench
if (!existsSync(mdp)) continue; // the gate builds a copy of site/ alone: the committed page stands
const { html: mdHtml, toc } = md(readFileSync(mdp, 'utf8'));
const html = fillManifest(mdHtml);
const path = '/' + file.replace(/\.html$/, '');
@ -306,9 +238,7 @@ for (const [src, file, title, desc, heading, lead, eyebrow] of [
built.push(file);
}
// The hand-written pages: shared head, nav (with the active link marked) and footer injected in place; the homepage also
// gets journey.json inlined so the phases and the log render without a fetch and without a layout shift.
const journey = JSON.parse(readFileSync(join(here, 'journey.json'), 'utf8'));
// The hand-written pages: shared head, nav (with the active link marked) and footer injected in place.
// The miner's product name lives HERE and nowhere else (the founder, 5 October 2026: Ember). Pages carry
// <span data-product="full|name|app|caption">…</span> and the build stamps every span from this table, so a rename is one
// edit. `full` is the first mention on a page and the headings where the brand matters, `name` every mention after that,
@ -326,16 +256,14 @@ function stampProduct(html, file) {
return `<span data-product="${k}">${esc(PRODUCT[k])}</span>`;
});
}
// Downloads (5 October 2026, testnet launch). The buttons link the PUBLIC downloads path, which carries no token:
// Downloads (5 October 2026). The buttons link the PUBLIC downloads path, which carries no token:
// https://dl.igneum.network/public/<alias>, four aliases that packaging/ota/publish-public.sh rewrites to the current
// files. The version and the size on every button come from the index that script writes next to the signed manifests
// (dl/public/igneum-downloads.json), read here at build time; site/downloads.json is the last copy that was read, so a
// build without network (CI, a laptop offline) still stamps real numbers, and a successful read refreshes it.
// Pages carry: <a data-dl="miner-windows|miner-mac|miner-hive|wallet-mac"> (href stamped), <span data-dl-meta="key">
// (version and size), <code data-dl-url="key"> (the versioned URL, for the HiveOS Flight Sheet) and <span data-dl-sha="key">.
// TESTNET_OPEN: the one flag of the go. While false every download section keeps its "Public testnet: not yet open" line
// (elements marked data-testnet-notice); true removes them.
const TESTNET_OPEN = false;
// Igneum 2.0 (8 October 2026): no testnet is served; any leftover paragraph marked data-testnet-notice is removed at build.
const DL_HOST = 'https://dl.igneum.network';
const DL_SNAPSHOT = join(here, 'downloads.json');
// The snapshot is a tracked file: the build rewrites it only on an explicit refresh (SITE_DOWNLOADS_REFRESH=1 or
@ -374,7 +302,7 @@ function stampDownloads(html, file, dl) {
html = html.replace(/<span([^>]*\sdata-dl-meta="([a-z-]+)"[^>]*)>[^<]*<\/span>/g, (m, attrs, key) => `<span${attrs}>${f[key] ? `v${esc(String(f[key].version))} · ${fmtMB(f[key].size)}` : 'not published yet'}</span>`);
html = html.replace(/<code([^>]*\sdata-dl-url="([a-z-]+)"[^>]*)>[^<]*<\/code>/g, (m, attrs, key) => `<code${attrs}>${f[key] ? `${DL_HOST}${esc(f[key].path)}` : '(not published yet)'}</code>`);
html = html.replace(/<span([^>]*\sdata-dl-sha="([a-z-]+)"[^>]*)>[^<]*<\/span>/g, (m, attrs, key) => `<span${attrs}>${f[key] ? esc(String(f[key].sha256)) : 'not published yet'}</span>`);
if (TESTNET_OPEN) html = html.replace(/\n?[ \t]*<p data-testnet-notice[^>]*>[\s\S]*?<\/p>/g, '');
html = html.replace(/\n?[ \t]*<p data-testnet-notice[^>]*>[\s\S]*?<\/p>/g, '');
for (const key of ['miner-windows', 'miner-mac', 'miner-hive', 'wallet-mac']) if (html.includes(`data-dl="${key}"`) && !f[key]) console.warn(`${file}: ${key} has no published file yet; its button points at #get`);
return html;
}
@ -401,7 +329,7 @@ function renderEvidence(html) {
counts[LABELS[idx]]++;
return `<tr data-status="${LABELS[idx]}"><td class="n">${n}</td><td class="claim">${inl(claim)}<div class="where">${inl(where)}</div></td><td><span class="st st-${idx}">${inl(status)}</span></td><td class="mono">${inl(ver)}</td><td>${inl(test)}</td><td>${inl(result)}</td><td class="iv">${inl(iv)}</td></tr>`;
}).join('\n');
// the same scrub as /bench: local-time stamps to UTC and the private-string check (the build fails on any hit)
// the same scrub as the generated pages: local-time stamps to UTC and the private-string check (the build fails on any hit)
const trs = scrubBench(tr);
html = html.replace(/(<table id="claims">[\s\S]*?<tbody>)[\s\S]*?(<\/tbody>)/, (m, a, b) => `${a}\n${trs}\n${b}`);
for (const k of LABELS) {
@ -412,7 +340,7 @@ function renderEvidence(html) {
const d = new Date(); const MON = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
const day = `${d.getUTCDate()} ${MON[d.getUTCMonth()]} ${d.getUTCFullYear()}`;
const dayLong = `${d.getUTCDate()} ${['January','February','March','April','May','June','July','August','September','October','November','December'][d.getUTCMonth()]} ${d.getUTCFullYear()}`;
html = html.replace(/<div class="eyebrow">(?:<span class="line"><\/span>)?\d+ claims · 5 labels · [^<]*<\/div>/, `<div class="eyebrow"><span class="line"></span>${rows.length} claims · 5 labels · ${day}</div>`);
html = html.replace(/<div class="eyebrow">(?:<span class="line"><\/span>)?\d+ claims · \d+ labels · [^<]*<\/div>/, `<div class="eyebrow"><span class="line"></span>${rows.length} claims · ${LABELS.length} labels · ${day}</div>`);
html = html.replace(/<p class="asof">Statuses are honest as of [^<]*<\/p>/, `<p class="asof">Statuses are honest as of ${dayLong}, the day this page was generated from docs/evidence.md, and change only through that file.</p>`);
return html;
}
@ -477,8 +405,7 @@ for (const [file, active] of PAGES) {
<p class="src"><b>Modelled</b> from <code>emission.rs</code> (the schedule as <code>site/lib/emission.mjs</code> carries it) and the release manifest at build time, with today's measured shard count (${PV.shards_planned_24h.toLocaleString('en-GB')} planned in 24 hours) and key count (${PV.prover_keys_24h}) held constant; the per-shard figure is the pool's credit per planned shard, the per-key figure the pool per day divided by the keys and by 24. More shards or more keys lower both; a block's unproven shards leave their credit in the escrow.</p>`;
html = inject(html, 'proving-model', table, file);
}
html = fillManifest(html);
if (file === 'index.html' && html.includes('<!-- journey:start -->')) html = inject(html, 'journey', `<script type="application/json" id="journey-data">${JSON.stringify(journey).replace(/</g, '\\u003c')}</script>`, file);
html = stampDevnet(fillManifest(html));
// /income (8 October 2026): the calculator's card list is the bench table's current rows, stock and tuned apart, inlined
// at build so the page needs no fetch; a row's watts carry their class when they were read under another (watts_class)
if (file === 'income.html' && html.includes('<!-- income-data:start -->')) {
@ -495,7 +422,7 @@ for (const [file, active] of PAGES) {
}
// the public bench table (/miners): one row per card, generator version and miner version, from site/miner-bench.json
// (the bench-log numbers that exist today, and rows later jobs append); rendered through the same scrub as /bench.
// (the bench-log numbers that exist today, and rows later jobs append); rendered through the same scrub as the generated pages.
// 7 October 2026 (the founder): the CURRENT class is the table (class v4, or class v3 re-measured with its v4 cost, 6 October
// on); cards you can buy first by hash rate, the datacentre rows collapsed, the earlier classes collapsed; one row per
// card; the card's vendor mark and name lead, the rate is the big tabular number, MH per wall watt beside it in the ember
@ -509,7 +436,6 @@ for (const [file, active] of PAGES) {
const curAll = bj.rows.filter(isCurrent).sort(byRate);
const cur = curAll.filter(r => r.group !== 'datacentre');
const dcRows = curAll.filter(r => r.group === 'datacentre');
const earlier = bj.rows.filter(r => !isCurrent(r)).sort(byRate);
const rows = bj.rows;
const fmt = (n) => Number(n).toLocaleString('en-GB', { maximumFractionDigits: 1 });
const fmt3 = (n) => Number(n).toLocaleString('en-GB', { maximumFractionDigits: 3 });
@ -528,7 +454,7 @@ for (const [file, active] of PAGES) {
else parts.push('<b>Hive flight sheet</b> stock' + (r.hive && r.hive.label ? ' (' + esc(r.hive.label.replace(/^stock \(|\)$/g, '')) + ')' : ''));
parts.push('<b>Class v4 cost</b> ' + esc(r.v4_cost || 'not measured'));
parts.push('<b>Tuned</b> ' + esc(r.tuned || 'stock, mining'));
parts.push('<b>Generator</b> ' + esc(r.generator) + ' · <b>Miner</b> ' + esc(r.miner + (r.driver_os ? ' (' + r.driver_os + ')' : '')));
parts.push('<b>Generator</b> ' + esc(r.generator) + (r.driver_os ? ' · <b>Driver</b> ' + esc(r.driver_os) : ''));
parts.push('<b>Source</b> ' + esc(r.source) + ' · <b>Who</b> ' + esc(r.by));
if (r.note) parts.push('<b>Note</b> ' + esc(r.note));
return parts.map(x => '<span class="d">' + x + '</span>').join('');
@ -555,7 +481,6 @@ for (const [file, active] of PAGES) {
};
const table = render(cur, 'bench-current');
const dcTable = render(dcRows, 'bench-datacentre');
const earlierTable = render(earlier, 'bench-earlier');
// the lede recomputes from the data (8 October 2026): the best desktop card by rate, then the best stock and the best tuned
// MH per wall watt as separate claims, so a rented stock row never reads as a tuned one and a tuned lock never reads as stock
// a row whose watts were read under another class (watts_class 'v3': the fleet's bench pack, 7 and 8 October 2026) is ranked by rate,
@ -646,17 +571,10 @@ table.bench2 tr.detail .d{display:block;margin:0 0 4px}table.bench2 tr.detail b{
'<p>One row per card on the current class: the class v4 program (the latency-shadow block over the class v3 hash), or a class v3 row re-measured with its class v4 cost on 6 October 2026 or later. MH per wall watt uses board or wall power; a row whose watts are the chip\'s (Apple silicon: GPU plus DRAM from IOReport) says so and is not ranked on that column. Integrated GPUs are not listed.</p>',
'<h3 class="grp" id="buy">Cards you can buy</h3>',
table,
`<p class="gen">${cur.length} cards. Details opens a card\'s Hive flight-sheet values, its full class v4 cost, miner, source and note.</p>`,
`<p class="gen">${cur.length} cards. Details opens a card\'s Hive flight-sheet values, its full class v4 cost, source and note.</p>`,
'<details class="grp"><summary>Datacentre (' + dcRows.length + ' cards, rented for the measurement; about three times the rented dollars per hash of a desktop card)</summary>',
dcTable,
'</details>',
'<details class="grp"><summary>Earlier classes (' + earlier.length + ' rows: the genesis program, the hourly program, class v3 before the shadow; not comparable with the table above)</summary>',
'<p>The bench numbers of 3 and 4 October 2026. A higher MH/s here is a different hash, not a faster card.</p>',
earlierTable,
'</details>',
'<details class="grp"><summary>Why the rates changed</summary>',
'<p>The genesis program did 104 dependent random 4-byte loads per hash over a 1 GiB dataset; the hourly program and class v3 do 128, with the mixer between them; class v4 adds about 100,000 integer operations per hash that ride in the memory wait. So the hash is bound by random-read bandwidth by design, and a card\'s MH/s is a relative number: the difficulty follows it, and the same card earns the same share of blocks at 136 MH/s on class v3 as it did at 228 MH/s on the genesis program. What a miner compares is hash per watt, and what the chain cares about is the chip edge, which the shadow work is there to cut.</p>',
'</details>',
'<h2 id="how">How a row gets here</h2>',
'<p>Every row names the engineering log entry or the job it came from. "Measured by the team" means our own hardware and our own log. "Reported by the fleet" or "measured by the fleet" means a machine we rent or do not own, read from the status lines its miner uploads or from a bench run on it.</p>',
'<p>MH per watt needs the card\'s power draw during the run. The app reads it on NVIDIA cards through the driver. Rows get the figure when a run records it. The class v4 cost column is what the latency-shadow work costs that card against the class v3 control, in watts and rate, where it was measured. The tuned column is the card\'s state at the row: a full Ember Tune names its point; stock means the card as it came, bench only or mining.</p>',
@ -670,8 +588,8 @@ table.bench2 tr.detail .d{display:block;margin:0 0 4px}table.bench2 tr.detail b{
`<p>Rows: ${prows.length}${pj.generated ? ', generated ' + pj.generated : ''}. Written from the fleet's tune records at build time.</p>`,
].join('\n'));
const toc = [{ lvl: 2, t: 'The table', id: 'table' }, { lvl: 2, t: 'How a row gets here', id: 'how' }, { lvl: 2, t: 'Fleet tuning priors', id: 'priors' }];
writeFileSync(join(here, 'miners.html'), page('Igneum GPU bench table', 'Measured Igneum hash rates per GPU: card, generator version, best MH/s, MH per watt where measured, miner version, date and the log entry each number came from.', body, toc,
'Measured hash rates per card on the Igneum lottery hash, with the generator version, the miner version, the date and the log entry behind each number.',
writeFileSync(join(here, 'miners.html'), page('Igneum GPU bench table', 'Measured Igneum hash rates per GPU on the current program: card, best MH/s, MH per wall watt where measured, date and the record each number came from.', body, toc,
'Measured hash rates per card on the Igneum lottery hash, on the current program, with the date and the record behind each number.',
{ path: '/miners', heading: 'GPU bench table', eyebrow: `${cur.length} cards you can buy, ${dcRows.length} datacentre, ${prows.length} fleet tuning models`, crumb: 'GPU bench table' }));
built.push('miners.html (' + rows.length + ' rows)');
}
@ -679,7 +597,7 @@ table.bench2 tr.detail .d{display:block;margin:0 0 4px}table.bench2 tr.detail b{
// The secondary pages (7 Oct 2026, the redesign): each one is rendered from ONE source so no sentence is kept twice by hand.
// /claims and /randomx are the litepaper's own sections (their ledger sentences stay on the litepaper, which is what the
// ledger text check reads); /dev-fee is the miner page's fee section; /provenance is docs/provenance.md through the same
// scrub as /bench; /journey is journey.json (the phases and the log the bench entries feed). A page with no source is not written.
// scrub as the measurement record. A page with no source is not written.
function shell({ title, desc, path, crumb, eyebrow, heading, lead, body, style = '', after = '' }) {
const active = path.replace(/^\//, '');
return stampMarks(`<!doctype html>
@ -786,7 +704,7 @@ function onward(links) { return `<div class="onward">${links.map(([href, label])
lead: fee.lead || 'The protocol carries no fee. The software fee is the miner app’s, like every other GPU miner’s, and one flag turns it off.',
body: fee.html,
style: '.feecard{display:grid;grid-template-columns:1fr;gap:var(--s-4)}@media (min-width:900px){.feecard{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);align-items:start}}pre b{color:var(--molten-text);font-weight:500}',
after: onward([['/miner#get', 'Get the miner'], ['/litepaper#economics', 'The economics'], ['/bench', 'The engineering log']]),
after: onward([['/miner#get', 'Get the miner'], ['/litepaper#economics', 'The economics'], ['/evidence', 'Every claim and its status']]),
}));
built.push('dev-fee.html (from miner#fee)');
}
@ -798,26 +716,6 @@ if (existsSync(join(docs, 'provenance.md'))) {
{ path: '/provenance', heading: 'Built on the shoulders', eyebrow: 'Provenance · the decision of 3 October 2026', crumb: 'Built on the shoulders', filter: false }));
built.push('provenance.html (from docs/provenance.md)');
}
{
const j = JSON.parse(readFileSync(join(here, 'journey.json'), 'utf8'));
const STATUS = { active: ['current', 'Under way'], next: ['next', 'Next'], done: ['done', 'Done'] };
const phases = (j.phases || []).map((p, i) => { const [cls, word] = STATUS[p.status] || ['', p.status]; return `<div class="milestone ${cls}" id="${esc(p.id)}"><div class="when">${esc(p.when)}</div><div><span class="badge${cls === 'current' ? ' warm' : ''}">${word}</span><h3>${i + 1}. ${esc(p.name)}</h3><p>${esc(p.line)}</p>${p.gate ? `<p class="gate"><b>Gate:</b> ${esc(p.gate)}</p>` : ''}</div></div>`; }).join('\n');
const MON = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const day = d => { const [y, m, dd] = d.split('-'); return `${Number(dd)} ${MON[Number(m) - 1]} ${y}`; };
const log = (j.log || []).map(e => `<article class="record"><div class="record-top"><time datetime="${esc(e.date)}">${day(e.date)}</time><span class="badge">log</span></div><h3>${esc(e.short || e.text)}</h3>${e.short && e.short !== e.text ? `<p>${esc(e.text)}</p>` : ''}</article>`).join('\n');
writeFileSync(join(here, 'journey.html'), shell({
title: 'The Igneum journey: six phases, four gates', desc: 'Where Igneum is: six phases from the specification to a fair launch, each closing at a published gate, and the engineering log’s latest entries. No calendar dates.',
path: '/journey', crumb: 'The journey', eyebrow: `Six phases · updated ${day(j.updated)}`, heading: 'The journey.',
lead: 'Six phases from the specification to a fair launch. Each closes at its gate, a measurement published whether it passes or fails, so there is no date to slip. Below the phases, the latest entries of the engineering log.',
body: `<div class="timeline">${phases}</div>
<div class="section-head" style="margin-top:100px"><div><div class="eyebrow"><span class="line"></span>The log, newest first</div><h2>Lately, in the&nbsp;log.</h2></div><div class="searchbar" style="min-width:min(100%,360px)"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="10.5" cy="10.5" r="6.5"/><path d="m16 16 5 5"/></svg><label for="log-q" class="visually-hidden">Filter the log</label><input id="log-q" data-filter-input="log" placeholder="Filter: a card, a date, a word" autocomplete="off" spellcheck="false"><span class="small" data-filter-count="log"></span></div></div>
<div class="record-count" data-filter-count="log"></div><div class="record-grid" data-filter-list="log">${log}</div>
<p class="empty-state" data-filter-empty="log" hidden>Nothing in the log matches that.</p>
<p class="note">Every entry is a dated heading of <a href="/bench">the engineering log</a>, where the commands and the hardware are. The phases and their gates are the litepaper’s <a href="/litepaper#roadmap">roadmap</a>.</p>`,
after: onward([['/bench', 'The engineering log'], ['/evidence', 'Every claim and its status'], ['/live', 'The live devnet']]),
}));
built.push('journey.html (' + (j.phases || []).length + ' phases, ' + (j.log || []).length + ' entries)');
}
console.log('built: ' + built.join(', '));
// the header rule: every served page carries the full nav (tools/ci/site-nav-check.mjs); the build fails on a shorter one
// (the gate builds a copy of site/ alone and runs the check as its own line, so a missing tools/ is not a failure here)

View file

@ -89,7 +89,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -119,12 +119,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -142,7 +140,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -163,12 +161,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -182,7 +178,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -253,7 +249,7 @@
<div class="derived"><p>Here are the limits, stated before anyone else states them.</p>
<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 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). Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment. The labels: the bracket modelled, approximate and provisional (the GPU side measured on the RTX 5080 and RTX 5090 at their core locks under class v4, 8 October 2026; the chip core synthesised on ASAP7 and scaled to N3, claimed, its placed gated row pending; its memory modelled). Class v5 makes the dataset the chain’s own state, so a chip that stores it or recomputes it is wrong on every item (designed, 7 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 (the published model, 5 October 2026: 0.92x per unit of silicon with a 3x fixed-function allowance, approximate). Sources: the class v6 close, section 10 (8 October 2026); the ASIC history’s Ethash rows; the chip model analysis (6 October 2026). No hash has stayed free of chips forever; Igneum does not claim to. Monero’s RandomX has held its miners on commodity hardware for about seven years: one chip shipped against it, Bitmain’s Antminer X5 (September 2023), an observed comparison, not a ceiling; the one announced beyond it, the Antminer X9, was withdrawn in mid-May 2026 before any unit shipped, its claimed core never measured; RandomX v2 was released on 25 March 2026 with its activation pending. 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. Igneum assumes a chip exists. 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 chip and economy analysis of 6 October 2026, section 5.4; ledger M32). Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment. The labels: the bracket modelled, approximate and provisional (the GPU side measured on the RTX 5080 and RTX 5090 at their core locks under class v4, 8 October 2026; the chip core synthesised on ASAP7 and scaled to N3, claimed, its placed gated row pending; its memory modelled). Class v5 makes the dataset the chain’s own state, so a chip that stores it or recomputes it is wrong on every item (designed, 7 October 2026; under evaluation (Deliverable 3), not counted as a defence until justified or dropped). The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090 (the published model, 5 October 2026: 0.92x per unit of silicon with a 3x fixed-function allowance, approximate). Sources: the class v6 close, section 10 (8 October 2026); the ASIC history’s Ethash rows; the chip model analysis (6 October 2026). No hash has stayed free of chips forever; Igneum does not claim to. Monero’s RandomX has held its miners on commodity hardware for about seven years: one chip shipped against it, Bitmain’s Antminer X5 (September 2023), an observed comparison, not a ceiling; the one announced beyond it, the Antminer X9, was withdrawn in mid-May 2026 before any unit shipped, its claimed core never measured; RandomX v2 was released on 25 March 2026 with its activation pending. 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 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>
@ -261,9 +257,13 @@
<li><strong>Finality that no amount of hardware can break.</strong> No. A miner holding a third of the last 30 days of blocks can split finality during a network partition, and two thirds can lock a bad checkpoint for a double-spend bounded by the 12-hour finality depth. Reaching a third takes at least ten days of producing every block on the chain, in public; an attacker matching the honest network needs twenty days for a third and never reaches two thirds. That is harder than attacking Bitcoin, where a majority can reorganise at once, and it is the limit of proof of work without stake or an outside chain. Igneum chose those limits on purpose. The floor is also bounded in time: an honest partition that lasts long enough for each side's own new blocks to reach two thirds of its window locks on both sides, about ten days of a 30-day window at an even split, and an operator must then resolve it (measured on a test network, 4 October 2026).</li>
<li><strong>Finality that never pauses.</strong> No. A lock needs two thirds of all 30-day mining weight. Whenever less than two thirds of that weight is connected and signing, finality pauses until it returns or ages out of the window, up to 30 days. The chain keeps running on proof of work and the node reports the pause.</li>
<li><strong>A label that costs nothing.</strong> No. Some investors and exchanges read "GPU-mined" as 2021 whatever the proofs do, and nothing here measures that cost. The only evidence will be whether the first miner apps and verifiable-compute apps sign despite the label.</li>
<li><strong>A chain you can debug today.</strong> Not yet. The node does not serve debug_traceTransaction, eth_subscribe or eth_getProof, and there is no public RPC, faucet or explorer for the devnet. They come in a fixed order (docs and templates, then the tracing and subscription RPCs, then a public RPC, listing and faucet, then the explorer) and no outside team is invited to build before the second step is done.</li>
<li><strong>A chain you can debug today.</strong> Not yet. The node does not serve debug_traceTransaction, eth_subscribe or eth_getProof. The explorer, the faucet and the reference apps run on the devnet; the tracing and subscription RPCs are still owed.</li>
<li><strong>A veto on job results.</strong> No. A segment proof is checked against every node's own execution; a proving job for another chain is not, because no full node can re-run an arbitrary program, so a soundness bug in the proof system in force reaches the requesting contract. A job output can mint nothing and touch no system contract, and an app that acts irreversibly on a job result keeps its own fallback.</li>
<li><strong>A delay function that outlives a quantum computer.</strong> No. The class-group delay between a locked checkpoint and the next program seed falls to the same machine that would forge the vote keys; it is flagged in the specification, not yet sized, and the fallback is a hash-chain delay behind the same version byte that moves the signature scheme, so both flip in one class change. A grindable hourly seed is a liveness nuisance against the lottery, not a break of finality.</li>
<li><strong>Proof verification in consensus.</strong> Not yet. Today, under proving v0, every producer verifies off the consensus path, and consensus checks the record's statement against native execution. Enforcement in consensus (verifier_in_consensus, proof_rule_active_from) is Open, and it is the prerequisite of the no-rescue network exercise (Deliverable 5) and of the proving economy being a protocol guarantee.</li>
<li><strong>Proving on every card.</strong> No. NVIDIA proves; AMD and Apple mine. The proving stack is judged on the full pipeline: inputs, proving, aggregation, verification, payment, memory and the mining income forgone.</li>
<li><strong>What proofs do not give.</strong> Proven execution is not finality. EVM compatibility is not Ethereum security. ZK is not privacy.</li>
<li><strong>A ranking.</strong> No. Igneum makes no leading or number-one claim. Benchmarks against Ravencoin's KAWPOW, Ergo and Firo's reference miner are owed work; no result exists yet.</li>
<li><strong>A finished protocol.</strong> The sustained-mining finality rule is the newest piece and the one that external review will try hardest to break. The specification, the review and the benchmarks are published as they happen.</li>
</ul>
<p>Everything in this document is subject to the gates on the roadmap. Nothing in it is an offer to sell anything. Found an error, or a criticism this document does not answer? Email <a href="mailto:hello@igneum.network">hello@igneum.network</a>, or open an issue on the public specification repository: <a href="https://git.igneum.network/igneum-network/spec/issues" rel="noopener">git.igneum.network/igneum-network/spec/issues</a>. Post reaches Igneum Labs LTD, Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre.</p></div>
@ -274,6 +274,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -299,7 +300,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -311,7 +311,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -337,7 +336,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -90,7 +90,7 @@ table{min-width:560px}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -120,12 +120,10 @@ table{min-width:560px}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -143,7 +141,7 @@ table{min-width:560px}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility" aria-current="page"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -164,12 +162,10 @@ table{min-width:560px}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -183,7 +179,7 @@ table{min-width:560px}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility" aria-current="page"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -295,6 +291,7 @@ table{min-width:560px}
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -320,7 +317,6 @@ table{min-width:560px}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -332,7 +328,6 @@ table{min-width:560px}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -358,7 +353,7 @@ table{min-width:560px}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -89,7 +89,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" data-active aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -119,12 +119,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -142,7 +140,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -163,12 +161,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -182,7 +178,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -264,7 +260,7 @@
<tr><td>Mining to a pool</td><td>nothing to turn off: the pool issues the templates, so the 1-in-100 mechanism does not exist, and the pool's own fee is the only one</td></tr>
</tbody>
</table></div>
<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’ counters and both nodes agree. <a href="/bench">The log</a>.</p>
<p class="note">Measured on a private 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. Details are in the measurement record in the repository (docs/bench-log.md).</p>
</div>
<div class="card">
<div class="eyebrow">Settings, as the app shows it</div>
@ -276,13 +272,14 @@
</div>
</div>
</div>
<div class="onward"><a href="/miner#get" class="btn">Get the miner</a><a href="/litepaper#economics" class="btn">The economics</a><a href="/bench" class="btn">The engineering log</a></div>
<div class="onward"><a href="/miner#get" class="btn">Get the miner</a><a href="/litepaper#economics" class="btn">The economics</a><a href="/evidence" class="btn">Every claim and its status</a></div>
</div>
</section>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -308,7 +305,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -320,7 +316,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -346,7 +341,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -79,7 +79,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" data-active aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -109,12 +109,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -132,7 +130,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -153,12 +151,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -172,7 +168,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -286,7 +282,6 @@
</div>
<p class="yourcard" data-yourcard style="margin-top:16px">Your card: pending</p>
<p class="home-quiet" data-devnet-notice><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
<p class="home-quiet" data-testnet-notice>Public testnet: not yet open; the devnet build is here for people who want to look. The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word.</p>
<p class="home-quiet">The protocol carries no fee. The one payment to the project is the Ember software’s optional 1% dev fee, like other GPU miners, off with one flag. <a href="/dev-fee">The fee, in full view.</a></p>
</div>
</section>
@ -320,6 +315,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -345,7 +341,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -357,7 +352,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -383,7 +377,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -63,7 +63,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -93,12 +93,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -116,7 +114,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -137,12 +135,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -156,7 +152,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -220,18 +216,18 @@
<p class="lead">Every number below is read from the node’s source at one commit, with the file and the line, and the constants the chain runs on are the <a href="/release.json">release manifest</a>’s, filled at build time (node <span data-rm="source.node.commit">f8da7515</span>, <span data-rm="read_at_short">read 8 October 2026, 15:50 UK</span>). No price of IGN appears and nothing is projected: this page says what the code pays, to whom, and from what.</p>
</div></section>
<section class="section"><div class="container">
<p class="src"><b>Source:</b> the node fork, branch <code>release-0.3.25-node</code> at <code>e0644958</code> (the Devnet 3 cut of 8 October 2026), confirmed by the node lane on 8 October 2026; every line number is that commit’s. Devnet 3 inherits the devnet parameters (<code>consensus/core/src/config/params.rs</code> 2173 and 2207).</p>
<p class="src"><b>Source:</b> the node fork at commit <code>e0644958</code> (the devnet cut of 8 October 2026), confirmed by the node lane on 8 October 2026; every line number is that commit’s. The devnet runs the devnet parameters (<code>consensus/core/src/config/params.rs</code> 2173 and 2207).</p>
<h2>Emission</h2>
<p>The node carries two schedules in one struct (<code>consensus/core/src/emission.rs</code> 85 to 123) and installs one per network (<code>params.rs</code> 2158, 1910, 1764). A year is 31,557,600 seconds (<code>emission.rs</code> 32); the chain counts time in DAA seconds, one a block at one block a second.</p>
<p>The node defines the emission schedule in one struct (<code>consensus/core/src/emission.rs</code> 85 to 123) and installs it per network (<code>params.rs</code> 2158, 1910, 1764). A year is 31,557,600 seconds (<code>emission.rs</code> 32); the chain counts time in DAA seconds, one a block at one block a second.</p>
<div class="tbl"><table>
<thead><tr><th>Field</th><th><code>CURRENT</code> (Devnet 3 today, mainnet)</th><th><code>TESTNET_1</code> (igneum-testnet-1)</th><th>Where</th></tr></thead>
<thead><tr><th>Field</th><th><code>CURRENT</code> (the devnet today, mainnet)</th><th>Where</th></tr></thead>
<tbody>
<tr><td>Launch rate</td><td class="num"><span data-rm="fees.emission.launch_rate_base_units_per_daa_second">3,168,808,781</span> base units a DAA second (10<sup>9</sup> IGN x 10<sup>8</sup> / 31,557,600, floored: one billion IGN in year one)</td><td class="num">100 IGN a DAA second</td><td><code>emission.rs</code> 85 to 123; <code>igneum.rs</code> 34</td></tr>
<tr><td>Ramp</td><td class="num">2,592,000 s (30 days) from 10 percent</td><td class="num">7,776,000 s (90 days) from 10 percent</td><td><code>igneum.rs</code> 76 <code>launch_ramp</code></td></tr>
<tr><td>Step</td><td class="num">63,115,200 s (two years), the rate halved each step (decay 2<sup>31</sup> of 2<sup>32</sup>)</td><td class="num">2,629,800 s (a month), the rate times 2<sup>-1/24</sup> each step (decay 4,172,697,914 of 2<sup>32</sup>: a two-year half-life)</td><td><code>emission.rs</code> 85 to 123</td></tr>
<tr><td>Tail</td><td class="num">none: the curve runs to zero and the sum is the hard cap, 4,000,000,000 IGN</td><td class="num">1 percent of supply a year (100 basis points) once the glide falls below it</td><td><code>emission.rs</code> 69 to 71</td></tr>
<tr><td>Where each runs</td><td>Devnet 3 (8 decimals); mainnet (rescaled to 18)</td><td>igneum-testnet-1 (rescaled to 18)</td><td><code>params.rs</code> 2158, 1764, 1910</td></tr>
<tr><td>Launch rate</td><td class="num"><span data-rm="fees.emission.launch_rate_base_units_per_daa_second">3,168,808,781</span> base units a DAA second (10<sup>9</sup> IGN x 10<sup>8</sup> / 31,557,600, floored: one billion IGN in year one)</td><td><code>emission.rs</code> 85 to 123; <code>igneum.rs</code> 34</td></tr>
<tr><td>Ramp</td><td class="num">2,592,000 s (30 days) from 10 percent</td><td><code>igneum.rs</code> 76 <code>launch_ramp</code></td></tr>
<tr><td>Step</td><td class="num">63,115,200 s (two years), the rate halved each step (decay 2<sup>31</sup> of 2<sup>32</sup>)</td><td><code>emission.rs</code> 85 to 123</td></tr>
<tr><td>Tail</td><td class="num">none: the curve runs to zero and the sum is the hard cap, 4,000,000,000 IGN</td><td><code>emission.rs</code> 69 to 71</td></tr>
<tr><td>Where each runs</td><td>The devnet (8 decimals); mainnet (rescaled to 18)</td><td><code>params.rs</code> 2158, 1764</td></tr>
</tbody>
</table></div>
<p>The schedule is a genesis parameter: the devnet digest does not move when a network installs another (<code>params.rs</code> 2095, the test). The live devnet’s block reward at its current DAA score is on <a href="/income">the income page</a>, computed from the <code>CURRENT</code> rule.</p>
@ -251,15 +247,15 @@
<div class="tbl"><table>
<thead><tr><th>Route</th><th>What happens</th><th>State</th><th>Where</th></tr></thead>
<tbody>
<tr><td>Base fee, both gas dimensions</td><td>burned in full: gas used times the execution base fee, pgas used times the proving base fee, debited and credited to no one</td><td>in the code on Devnet 3</td><td><code>igneum/exec/src/executor.rs</code> 320 to 371 (327 and 357, 328 and 360)</td></tr>
<tr><td>Priority fee (the tip)</td><td><span data-rm="fees.priority_fee.miner_percent">80</span> percent to the block’s miner; <span data-rm="fees.priority_fee.developer_percent">20</span> percent to the developer registrations of the contracts whose code ran, pro rata by each frame’s gas; an unregistered frame’s part is credited to nobody, which is a burn</td><td>in the code on Devnet 3</td><td><code>executor.rs</code> 335 to 339; <code>igneum/exec/src/pgas.rs</code> 290; <code>igneum/exec/src/config.rs</code> 76 (<code>DEVELOPER_SHARE_PERCENT = 20</code>)</td></tr>
<tr><td>Base fee, both gas dimensions</td><td>burned in full: gas used times the execution base fee, pgas used times the proving base fee, debited and credited to no one</td><td>in the code on the devnet</td><td><code>igneum/exec/src/executor.rs</code> 320 to 371 (327 and 357, 328 and 360)</td></tr>
<tr><td>Priority fee (the tip)</td><td><span data-rm="fees.priority_fee.miner_percent">80</span> percent to the block’s miner; <span data-rm="fees.priority_fee.developer_percent">20</span> percent to the developer registrations of the contracts whose code ran, pro rata by each frame’s gas; an unregistered frame’s part is credited to nobody, which is a burn</td><td>in the code on the devnet</td><td><code>executor.rs</code> 335 to 339; <code>igneum/exec/src/pgas.rs</code> 290; <code>igneum/exec/src/config.rs</code> 76 (<code>DEVELOPER_SHARE_PERCENT = 20</code>)</td></tr>
<tr><td>External proving jobs</td><td>90 percent to the provers who delivered, 10 percent burned, once jobs settle in IGN</td><td>designed, not in the code: no constant exists; at launch a job is paid on the customer’s own chain</td><td>spec 05 section 5.4; the litepaper’s Proving section</td></tr>
<tr><td>The provers’ part of the tip</td><td>designed: a share of the producer’s <span data-rm="fees.priority_fee.miner_percent">80</span> percent paid per block to the block’s provers in the proportion the proving protocol defines, per shard with the pool credit</td><td>designed, not in the code: no constant exists; the executor credits the whole <span data-rm="fees.priority_fee.miner_percent">80</span> percent to the miner (<code>executor.rs</code> 335 to 339)</td><td>spec 05 sections 5.2 and 5.3</td></tr>
</tbody>
</table></div>
<h2>The proving-fee market</h2>
<p>The second income of a card is the proving pool above: 20 percent of every block, paid per shard against a valid proof record. A provers’ part of the priority fee is designed (spec 05, 5.2: a share of the producer’s 80 percent paid per block to the block’s provers) and is not in the code: today the whole 80 percent of the tip goes to the miner, the executor’s line above, and the pool is the only thing that pays an internal prover. The price a prover must charge an outside customer is the subsidy it forgoes while it proves, which falls as one over the network’s hash rate; the formula and its measured inputs are in the litepaper (<a href="/litepaper#building">Building on Igneum</a>). The market itself is designed and not built. What the pool pays today is measured: on Devnet 3 in the 24 hours to 12:16 UK on 8 October 2026 the chain paid 8,209 shards, 9,913.09 IGN in all, to 29 prover keys; 905 shards were paid in the hour to that minute; the lag from a proven block to the block that pays its shards read p50 514 and p90 953 DAA seconds; 40,502 shards were planned and 54 proving at that minute (the observer’s proof tables, read through <code>/api/explorer?proving=1</code>; the same numbers live on <a href="/proving">the proving page</a>). Devnet 3 IGN has no value; the rows show the mechanism paying, not an income.</p>
<p>The second income of a card is the proving pool above: 20 percent of every block, paid per shard against a valid proof record. A provers’ part of the priority fee is designed (spec 05, 5.2: a share of the producer’s 80 percent paid per block to the block’s provers) and is not in the code: today the whole 80 percent of the tip goes to the miner, the executor’s line above, and the pool is the only thing that pays an internal prover. The price a prover must charge an outside customer is the subsidy it forgoes while it proves, which falls as one over the network’s hash rate; the formula and its measured inputs are in the litepaper (<a href="/litepaper#building">Building on Igneum</a>). The market itself is designed and not built. What the pool pays today is measured: on the devnet in the 24 hours to 12:16 UK on 8 October 2026 the chain paid 8,209 shards, 9,913.09 IGN in all, to 29 prover keys; 905 shards were paid in the hour to that minute; the lag from a proven block to the block that pays its shards read p50 514 and p90 953 DAA seconds; 40,502 shards were planned and 54 proving at that minute (the observer’s proof tables, read through <code>/api/explorer?proving=1</code>; the same numbers live on <a href="/proving">the proving page</a>). Devnet IGN has no value; the rows show the mechanism paying, not an income.</p>
<h2>The client fee and the fund it fills</h2>
<div class="tbl"><table>
@ -275,12 +271,12 @@
<p>Three incomes, kept apart. Each has its own source and its own state.</p>
<div class="tbl"><table><thead><tr><th>Income</th><th>Where it comes from</th><th>Who gets it</th><th>State</th></tr></thead><tbody>
<tr><td>Block security</td><td>the block subsidy (<span data-rm="fees.subsidy_split.miner_percent">80</span> percent of each block) and <span data-rm="fees.priority_fee.miner_percent">80</span> percent of the priority fee</td><td>the miner whose key found the block</td><td>in consensus on every network (measured)</td></tr>
<tr><td>Internal proving</td><td>the proving pool: a fifth of each block’s subsidy (<span data-rm="fees.subsidy_split.proving_pool_percent">20</span> percent), paid per shard against a valid proof record; nothing else pays an internal prover today</td><td>the prover keys that delivered the shards</td><td>in consensus on Devnet 3 (measured below); the provers’ part of the tip designed, not in the code</td></tr>
<tr><td>Internal proving</td><td>the proving pool: a fifth of each block’s subsidy (<span data-rm="fees.subsidy_split.proving_pool_percent">20</span> percent), paid per shard against a valid proof record; nothing else pays an internal prover today</td><td>the prover keys that delivered the shards</td><td>in consensus on the devnet (measured below); the provers’ part of the tip designed, not in the code</td></tr>
<tr><td>External customers</td><td>payments from other chains for proofs, settled in IGN: <span data-rm="fees.external_jobs.provers_percent">90</span> percent to the provers, <span data-rm="fees.external_jobs.burn_percent">10</span> percent burned</td><td>the provers who took the job</td><td>designed, not implemented: no constant exists, no job has been paid</td></tr>
</tbody></table></div>
<p><b>The proving base fee pays nobody.</b> A transaction’s pgas times the proving base fee is burned in full today (<code>executor.rs</code>, the base-fee row above). It is not a prover’s income and it does not fill the pool. The pool is filled by the subsidy alone, and the subsidy halves every two years.</p>
<h3>What the pool pays, measured</h3>
<p>On Devnet 3 in the 24 hours to <span data-rm="proving_view.read_at">12:16 UK on 8 October 2026</span>: <span data-rm="proving_view.shards_paid_24h">8,209</span> shards paid, <span data-rm="proving_view.ign_paid_24h">9,913.09</span> IGN in all, to <span data-rm="proving_view.prover_keys_24h">29</span> prover keys; <span data-rm="proving_view.shards_planned_24h">40,502</span> shards planned, so about a fifth of the planned shards were proven and paid and the rest left their credit in the escrow; <span data-rm="proving_view.paid_per_hour">905</span> shards paid in the last hour; the lag from a proven block to the block that pays p50 <span data-rm="proving_view.lag_p50_daa">514</span> and p90 <span data-rm="proving_view.lag_p90_daa">953</span> DAA seconds. Per shard paid that is about 1.21 IGN; per key about 12 shards and 14 IGN an hour averaged over the day, across keys that prove at very different rates (measured; the observer’s proof tables through <code>/api/explorer?proving=1</code>).</p>
<p>On the devnet in the 24 hours to <span data-rm="proving_view.read_at">12:16 UK on 8 October 2026</span>: <span data-rm="proving_view.shards_paid_24h">8,209</span> shards paid, <span data-rm="proving_view.ign_paid_24h">9,913.09</span> IGN in all, to <span data-rm="proving_view.prover_keys_24h">29</span> prover keys; <span data-rm="proving_view.shards_planned_24h">40,502</span> shards planned, so about a fifth of the planned shards were proven and paid and the rest left their credit in the escrow; <span data-rm="proving_view.paid_per_hour">905</span> shards paid in the last hour; the lag from a proven block to the block that pays p50 <span data-rm="proving_view.lag_p50_daa">514</span> and p90 <span data-rm="proving_view.lag_p90_daa">953</span> DAA seconds. Per shard paid that is about 1.21 IGN; per key about 12 shards and 14 IGN an hour averaged over the day, across keys that prove at very different rates (measured; the observer’s proof tables through <code>/api/explorer?proving=1</code>).</p>
<h3>What reaches provers under the schedule, modelled</h3>
<p>Low fees and no external demand, which is the chain today: the pool is a fifth of the subsidy and nothing else. The table holds today’s shard count and key count constant and walks the halvings. No price of IGN appears; whether a row covers a card’s electricity depends on the price, which this page does not state.</p>
<!-- proving-model:start -->
@ -288,10 +284,10 @@
<p class="src"><b>Modelled</b> from <code>emission.rs</code> (the schedule as <code>site/lib/emission.mjs</code> carries it) and the release manifest at build time, with today's measured shard count (40,502 planned in 24 hours) and key count (29) held constant; the per-shard figure is the pool's credit per planned shard, the per-key figure the pool per day divided by the keys and by 24. More shards or more keys lower both; a block's unproven shards leave their credit in the escrow.</p>
<!-- proving-model:end -->
<h3>Per card, per hour, now and at each halving</h3>
<p>A card’s proving income is its shards times the credit per shard. Measured rates: an RTX 5090 proves an empty live shard beside its miner in 7.0 to 7.7 s and a full shard in 10.9 s alone, about 37 s a shard end to end (export, cut, key set-up, prove, sign, submit), 1.4 shards a minute; an RTX 3060 (12 GB) proves the v1 shard beside its miner in 37.5 s; an RTX 4060 (8 GB) proves it alone in 18.4 s (the engineering log, 4 to 6 October 2026). At those rates one card can prove 80 to 100 shards an hour, more than the <span data-rm="proving_view.paid_per_hour">905</span> an hour the whole chain paid to <span data-rm="proving_view.prover_keys_24h">29</span> keys, so today a prover is limited by the shards on offer, not by its card: the hourly figure per key in the table is the ceiling an evenly shared pool gives, and a 5090 and a 3060 take the same credit per shard. At each halving the credit per shard halves with the pool; a card’s watts do not. (Modelled from the measured rates; the chain’s shard count is the real limit.)</p>
<p>A card’s proving income is its shards times the credit per shard. Measured rates: an RTX 5090 proves an empty live shard beside its miner in 7.0 to 7.7 s and a full shard in 10.9 s alone, about 37 s a shard end to end (export, cut, key set-up, prove, sign, submit), 1.4 shards a minute; an RTX 3060 (12 GB) proves the v1 shard beside its miner in 37.5 s; an RTX 4060 (8 GB) proves it alone in 18.4 s (measured 4 to 6 October 2026; the measurement record in the repository, docs/bench-log.md). At those rates one card can prove 80 to 100 shards an hour, more than the <span data-rm="proving_view.paid_per_hour">905</span> an hour the whole chain paid to <span data-rm="proving_view.prover_keys_24h">29</span> keys, so today a prover is limited by the shards on offer, not by its card: the hourly figure per key in the table is the ceiling an evenly shared pool gives, and a 5090 and a 3060 take the same credit per shard. At each halving the credit per shard halves with the pool; a card’s watts do not. (Modelled from the measured rates; the chain’s shard count is the real limit.)</p>
<h3>Two honest routes to sustain it</h3>
<div class="tbl"><table><thead><tr><th>Route</th><th>What it does</th><th>What it is worth</th><th>State</th></tr></thead><tbody>
<tr><td>A defined share of fees to the proving pool</td><td>a fixed percentage of the base fees burned today (both gas dimensions) credited to the pool instead, by a rule at genesis or a class change</td><td>each percent of the share adds one percent of the day’s burned base fees to the pool. Priced per unit, not predicted: at 100,000 IGN of base fees burned in a day (a hypothetical volume, not a forecast) a 10 percent share adds 10,000 IGN a day, about today’s measured payout; at Devnet 3’s fee volume today it adds almost nothing, because almost nothing is burned</td><td>designed as an option; no constant exists</td></tr>
<tr><td>A defined share of fees to the proving pool</td><td>a fixed percentage of the base fees burned today (both gas dimensions) credited to the pool instead, by a rule at genesis or a class change</td><td>each percent of the share adds one percent of the day’s burned base fees to the pool. Priced per unit, not predicted: at 100,000 IGN of base fees burned in a day (a hypothetical volume, not a forecast) a 10 percent share adds 10,000 IGN a day, about today’s measured payout; at the devnet’s fee volume today it adds almost nothing, because almost nothing is burned</td><td>designed as an option; no constant exists</td></tr>
<tr><td>External settlement in IGN</td><td>other chains pay for proofs in IGN; <span data-rm="fees.external_jobs.provers_percent">90</span> percent to the provers, <span data-rm="fees.external_jobs.burn_percent">10</span> percent burned</td><td>the price a prover must charge is the subsidy it forgoes while it proves: per shard, (card hash ÷ network hash) × 0.8 × the block subsidy × shard seconds. For an RTX 5090 at 136 MH/s on a 1 GH/s network and a 37 s shard that is about 16 IGN a shard inside the ramp today and about 128 IGN at the full rate, against the pool’s 1.2 IGN a shard measured; the quote falls as one over network hash and is competitive near 100 GH/s (the litepaper, Building on Igneum)</td><td>designed; the settlement contract is not built</td></tr>
</tbody></table></div>
<p>The chip question (whether a chip gets built against the hash, and what it would earn) is a conditional argument of its own on the litepaper’s <a href="/litepaper#chip-model">chip model</a>, not part of this page.</p>
@ -299,21 +295,21 @@
<div class="tbl"><table>
<thead><tr><th>Network</th><th>Consensus side</th><th>EVM side</th><th>Where</th></tr></thead>
<tbody>
<tr><td>Devnet 3 (today)</td><td class="num">8 decimals (base units of 10<sup>-8</sup> IGN)</td><td class="num">18 decimals, through a bridge of 10<sup>10</sup> wei per unit</td><td><code>params.rs</code> 2120; <code>consensus/core/src/unit.rs</code>; <code>igneum/exec/src/config.rs</code> 51</td></tr>
<tr><td>igneum-testnet-1</td><td class="num">18 decimals</td><td class="num">18 decimals</td><td><code>params.rs</code> 1866; the emission rescaled by 10<sup>10</sup></td></tr>
<tr><td>The devnet (today)</td><td class="num">8 decimals (base units of 10<sup>-8</sup> IGN)</td><td class="num">18 decimals, through a bridge of 10<sup>10</sup> wei per unit</td><td><code>params.rs</code> 2120; <code>consensus/core/src/unit.rs</code>; <code>igneum/exec/src/config.rs</code> 51</td></tr>
<tr><td>Mainnet</td><td class="num">18 decimals</td><td class="num">18 decimals</td><td><code>params.rs</code> 1724</td></tr>
</tbody>
</table></div>
<p>The symbol is IGN on every network. A wallet shows 18 decimals everywhere; on Devnet 3 the chain pays in 8 and the bridge shows the same amount at 18.</p>
<p>The symbol is IGN on every network. A wallet shows 18 decimals everywhere; on the devnet the chain pays in 8 and the bridge shows the same amount at 18.</p>
<h2>What this page does not do</h2>
<p>It names no price and models no market; the proving model above walks the subsidy schedule at today’s measured shard and key counts and states no price. The <a href="/income">income page</a> turns these rules into IGN a day for a card you pick, and money a day only at a price you type. Devnet and testnet IGN have no value.</p>
<p>It names no price and models no market; the proving model above walks the subsidy schedule at today’s measured shard and key counts and states no price. The <a href="/income">income page</a> turns these rules into IGN a day for a card you pick, and money a day only at a price you type. Devnet IGN has no value.</p>
<p>Not legal advice.</p>
</div></section>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -339,7 +335,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -351,7 +346,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -377,7 +371,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

File diff suppressed because one or more lines are too long

View file

@ -3,31 +3,31 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Devnet 3 explorer</title>
<meta name="description" content="Devnet 3, block by block: the DAG, every transaction, every account, the shard plan and proof of each block, the finality lock that covers it. A test network: coins have no value.">
<title>Igneum 2.0 devnet explorer</title>
<meta name="description" content="The devnet, block by block: the DAG, every transaction, every account, the shard plan and proof of each block, the finality lock that covers it. A test network: coins have no value.">
<link rel="canonical" href="https://igneum.network/explorer">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum Devnet 3 explorer">
<meta property="og:description" content="Every block, transaction, account and proof on Devnet 3, with its finality lock. Test coins, no value.">
<meta property="og:title" content="Igneum devnet explorer">
<meta property="og:description" content="Every block, transaction, account and proof on the devnet, with its finality lock. Test coins, no value.">
<meta property="og:url" content="https://igneum.network/explorer">
<meta property="og:image" content="https://igneum.network/og/explorer.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta property="og:image" content="https://igneum.network/og/explorer-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum Devnet 3 explorer">
<meta name="twitter:description" content="Every block, transaction, account and proof on Devnet 3, with its finality lock. Test coins, no value.">
<meta name="twitter:title" content="Igneum devnet explorer">
<meta name="twitter:description" content="Every block, transaction, account and proof on the devnet, with its finality lock. Test coins, no value.">
<meta name="twitter:image" content="https://igneum.network/og/explorer.png?v=4">
<meta name="twitter:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta name="twitter:image:alt" content="The devnet, block by block. igneum.network/explorer">
<!-- share:end -->
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
@ -116,7 +116,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -146,12 +146,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -169,7 +167,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -190,12 +188,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -209,7 +205,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -269,12 +265,12 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Explorer</span></div>
<div class="eyebrow"><span class="line"></span>Devnet 3<span id="st-chain"></span></div>
<h1>Devnet 3 explorer<span class="accent">.</span></h1>
<p>Every block Devnet 3 made in the last day and every transaction of the last seven days, read from a node by the observer and the indexer. Paste a block hash, a transaction hash, a chain block number or an address, or click any row. Devnet 3 is a test network: its coins have no value and the chain may reset. Every number here comes from one node on the build box, the chain the finality certificates follow; the indexer reads that node's execution RPC and nothing else.</p>
<p class="note" id="src-note">Source since 12:25 UTC on 8 October 2026: node1-dn3 (the build box's first node). The observer node that served before it drifted from the chain at DAA 67,787 during a re-walk and re-executes from genesis; every balance, receipt and account was re-read from node1-dn3 at 12:27 UTC. Until the 0.3.25 move restarts the observer node on the pinned binary, a block list read before 12:27 UTC may differ by a few blocks from this one.</p>
<div class="eyebrow"><span class="line"></span>The devnet<span id="st-chain"></span></div>
<h1>The devnet explorer<span class="accent">.</span></h1>
<p>Every block the devnet made in the last day and every transaction of the last seven days, read from a node by the observer and the indexer. Paste a block hash, a transaction hash, a chain block number or an address, or click any row. The devnet is a test network: its coins have no value and the chain may reset. Every number here comes from one node on the build box, the chain the finality certificates follow; the indexer reads that node's execution RPC and nothing else.</p>
<p class="note" id="src-note">Source since 12:25 UTC on 8 October 2026: node1-dn3 (the build box's first node). The observer node that served before it drifted from the chain at DAA 67,787 during a re-walk and re-executes from genesis; every balance, receipt and account was re-read from node1-dn3 at 12:27 UTC. Until the observer node restarts on the pinned binary, a block list read before 12:27 UTC may differ by a few blocks from this one.</p>
<form class="search" id="search" role="search">
<input id="q" type="search" autocomplete="off" spellcheck="false" placeholder="block hash, transaction hash, chain block number, 0x address or igneumdev:… address" aria-label="Search the Devnet 3 explorer">
<input id="q" type="search" autocomplete="off" spellcheck="false" placeholder="block hash, transaction hash, chain block number, 0x address or igneumdev:… address" aria-label="Search the devnet explorer">
<button class="btn primary" type="submit">Search</button>
</form>
<div class="msg" id="msg" aria-live="polite"></div>
@ -291,7 +287,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
</div>
<div class="card" aria-label="The DAG">
<div class="viz-head"><h2>The DAG</h2><div class="eyebrow" id="dag-eyebrow">the newest 150 blocks, one lane per miner</div></div>
<div class="dagbox"><canvas id="dag" aria-label="The last 150 blocks of Devnet 3 as a graph: time left to right, one lane per miner, lines to parents"></canvas><div class="dagtip" id="dag-tip"></div></div>
<div class="dagbox"><canvas id="dag" aria-label="The last 150 blocks of the devnet as a graph: time left to right, one lane per miner, lines to parents"></canvas><div class="dagtip" id="dag-tip"></div></div>
<div class="legend" style="margin-top:12px"><span><i class="sw chain"></i>chain block</span><span><i class="sw blue"></i>blue, merged</span><span><i class="sw red"></i>red, excluded</span><span><i class="sw"></i>pending</span><span>◆ under a lock</span><span>● every shard paid</span></div>
<p class="note">Left to right is arrival order at the observer; a line joins a block to each parent in the picture. Blue blocks are merged and paid; red blocks are excluded from the order. A diamond outline marks a block under a finality lock, a filled dot a block whose every planned shard has been paid. Click a block for its page.</p>
</div>
@ -328,13 +324,14 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<dt>/api/checkpoint</dt><dd><a href="/api/checkpoint" class="hash">the newest certified checkpoint with its voter table and headers; ?index=N for one</a></dd>
<dt>/api/live</dt><dd><a href="/api/live" class="hash">the observer's feed: blocks of the last 90 s, miners, events, finality, proving</a></dd>
</dl>
<p class="note">Every answer names the network (Devnet 3) and the chain id the node reports (4463 below the class v5 floor, 4464 from DAA 68,400). The RPC itself is at rpc.devnet.igneum.network (read methods and eth_sendRawTransaction, 20 requests per second per address).</p>
<p class="note">Every answer names the network (the Igneum 2.0 devnet) and the chain id the node reports (4464). The RPC itself is at rpc.devnet.igneum.network (read methods and eth_sendRawTransaction, 20 requests per second per address).</p>
</div>
</div>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -360,7 +357,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -372,7 +368,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -398,7 +393,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -459,7 +454,7 @@ async function loadStats() {
const s = await fetch('/api/explorer?stats=1').then(r => r.json()); if (!s.ok) throw new Error(s.error);
document.body.classList.toggle('on', !s.stale); document.body.classList.toggle('off', !!s.stale);
$('st-status').textContent = s.stale ? 'OFFLINE' : 'LIVE';
$('st-age').textContent = s.stale ? 'observer stale' : `${s.network || 'Devnet 3'}, node ${s.node_version || '?'}, read ${stamp(s.now)}`;
$('st-age').textContent = s.stale ? 'observer stale' : `${s.network || 'The devnet'}, node ${s.node_version || '?'}, read ${stamp(s.now)}`;
$('st-height').textContent = s.height === null ? 'n/a' : int(s.height);
$('st-chain').textContent = s.chain_id ? `, chain id ${s.chain_id}` : '';
$('st-count').textContent = `chain block number, ${int(s.block_count)} blocks in the DAG`;

View file

@ -3,15 +3,15 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Devnet 3 faucet. 10 IGN a day for building</title>
<meta name="description" content="Devnet 3 IGN for developers: 10 IGN per address per day, no value, no account. Paste an address, get a transaction hash.">
<title>Igneum 2.0 devnet faucet. 10 IGN a day for building</title>
<meta name="description" content="Devnet IGN for developers: 10 IGN per address per day, no value, no account. Paste an address, get a transaction hash.">
<link rel="canonical" href="https://igneum.network/faucet">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum Devnet 3 faucet">
<meta property="og:description" content="Devnet 3 IGN for developers: a daily allowance per address, no value, no account.">
<meta property="og:title" content="Igneum devnet faucet">
<meta property="og:description" content="Devnet IGN for developers: a daily allowance per address, no value, no account.">
<meta property="og:url" content="https://igneum.network/faucet">
<meta property="og:image" content="https://igneum.network/og/faucet.png?v=4">
<meta property="og:image:type" content="image/png">
@ -24,8 +24,8 @@
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Test IGN, for building. igneum.network/faucet">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum Devnet 3 faucet">
<meta name="twitter:description" content="Devnet 3 IGN for developers: a daily allowance per address, no value, no account.">
<meta name="twitter:title" content="Igneum devnet faucet">
<meta name="twitter:description" content="Devnet IGN for developers: a daily allowance per address, no value, no account.">
<meta name="twitter:image" content="https://igneum.network/og/faucet.png?v=4">
<meta name="twitter:image:alt" content="Test IGN, for building. igneum.network/faucet">
<!-- share:end -->
@ -93,7 +93,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -123,12 +123,10 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -146,7 +144,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet" aria-current="page"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -167,12 +165,10 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -186,7 +182,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet" aria-current="page"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -245,16 +241,16 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<!-- nav:end -->
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Devnet 3 faucet</span></div>
<div class="eyebrow"><span class="line"></span>Devnet 3 faucet</div>
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>The devnet faucet</span></div>
<div class="eyebrow"><span class="line"></span>The devnet faucet</div>
<h1>10 IGN a day, <span class="accent">for building.</span></h1>
<p>Paste an address. The faucet sends 10 IGN of Devnet 3 coin and shows you the transaction hash. Once per address per day, once per connection per day. No account, no sign-in, nothing to install.</p>
<p class="notice" id="faucet-state">Devnet 3, chain id 4464 since its class v5 floor. The coins have no value and the chain resets without notice. <span id="faucet-balance"></span></p>
<p>Paste an address. The faucet sends 10 IGN of the devnet coin and shows you the transaction hash. Once per address per day, once per connection per day. No account, no sign-in, nothing to install.</p>
<p class="notice" id="faucet-state">The Igneum 2.0 devnet, chain id 4464. The coins have no value and the chain resets without notice. <span id="faucet-balance"></span></p>
</div>
<div class="grid">
<section class="card" aria-labelledby="ask">
<h2 id="ask">Ask for 10 IGN</h2>
<p>An Ethereum-style address: 0x and 40 hex characters. The one <code>cast wallet new</code> printed, the one the miner made for you, or any wallet you have pointed at Devnet 3.</p>
<p>An Ethereum-style address: 0x and 40 hex characters. The one <code>cast wallet new</code> printed, the one the miner made for you, or any wallet you have pointed at the devnet.</p>
<form id="faucet-form" novalidate>
<label for="address">Address</label>
<input id="address" name="address" inputmode="text" autocomplete="off" spellcheck="false" placeholder="0x…" required pattern="^0x[0-9a-fA-F]{40}$" aria-describedby="status">
@ -267,15 +263,14 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<div class="rules">
<div class="rule"><span class="num">01</span><div><b>No value</b><span>Devnet IGN cannot be sold, bought or redeemed, now or at mainnet. Mainnet starts from an empty genesis.</span></div></div>
<div class="rule"><span class="num">02</span><div><b>10 IGN per address per day</b><span>And 10 per connection per day, 500 sends a day in all. The limit resets 24 hours after the last send.</span></div></div>
<div class="rule"><span class="num">03</span><div><b>Resets</b><span>Devnet 3 is a developer network. It restarts from a fresh genesis without notice. Balances do not carry over.</span></div></div>
<div class="rule"><span class="num">03</span><div><b>Resets</b><span>The devnet is a developer network. It restarts from a fresh genesis without notice. Balances do not carry over.</span></div></div>
<div class="rule"><span class="num">04</span><div><b>What is stored</b><span>The address, the connection's IP, the transaction hash and the time, on the box that runs the faucet, for 24 hours of rate limiting. Nothing else.</span></div></div>
</div>
<dl>
<dt>Chain id</dt><dd>4464 (Devnet 3; 4463 before 8 October 2026)</dd>
<dt>Chain id</dt><dd>4464 (the Igneum 2.0 devnet)</dd>
<dt>RPC</dt><dd>https://rpc.devnet.igneum.network</dd>
<dt>Wallet set-up</dt><dd><a href="/metamask">MetaMask: chain id, RPC, one click</a></dd>
<dt>Then</dt><dd><a href="/build">Deploy a contract in five minutes</a></dd>
<dt>Testnet</dt><dd>its faucet opens with the public testnet</dd>
</dl>
</aside>
</div>
@ -283,6 +278,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -308,7 +304,6 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -320,7 +315,6 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -346,7 +340,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:14px;overflo
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -90,7 +90,7 @@ table{min-width:560px}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -120,12 +120,10 @@ table{min-width:560px}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -143,7 +141,7 @@ table{min-width:560px}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants" aria-current="page"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -164,12 +162,10 @@ table{min-width:560px}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -183,7 +179,7 @@ table{min-width:560px}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants" aria-current="page"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -246,7 +242,7 @@ table{min-width:560px}
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Grants</span></div>
<div class="page-heading"><div><div class="eyebrow"><span class="line"></span>The programme</div>
<h1>Grants</h1>
<p class="lead">Paid in IGN from the dev fee fund, on delivery, on the public testnet first. Four tiers. One issue to apply. A weekly review.</p></div></div>
<p class="lead">Paid in IGN from the dev fee fund, on delivery, on the Igneum 2.0 devnet first. Four tiers. One issue to apply. A weekly review.</p></div></div>
</div>
</section>
<section class="section compact"><div class="container">
@ -257,7 +253,7 @@ table{min-width:560px}
<p>This file is the source of <a href="https://igneum.network/grants" rel="noopener">igneum.network/grants</a>.</p>
</section>
<section class="doc-section"><h2 id="what-a-grant-is">What a grant is</h2>
<p>Grants are paid in IGN from the dev fee fund, on delivery. You propose a piece of work, it is accepted with a written definition of done, you build it, and it runs on the public testnet. Not a salary, not an advance, not an investment.</p>
<p>Grants are paid in IGN from the dev fee fund, on delivery. You propose a piece of work, it is accepted with a written definition of done, you build it, and it runs on the devnet. Not a salary, not an advance, not an investment.</p>
<p>The money is the dev fee fund: the IGN that the Ember dev fee collects. Ember, the official miner, takes an optional 1% of a miner's rewards, in full view and off with one flag; that fee goes to Igneum Labs, the company that ships the software. The protocol itself carries no fee, no fund and no allocation, and no grant is paid from emission. <a href="/dev-fee">The dev fee</a> has the mechanism.</p>
</section>
<section class="doc-section"><h2 id="the-tiers">The tiers</h2>
@ -266,14 +262,14 @@ table{min-width:560px}
</section>
<section class="doc-section"><h2 id="how-to-apply">How to apply</h2>
<p>Open an issue on <a href="https://git.igneum.network/igneum-network/igneum/issues/new?template=.forgejo%2Fissue_template%2Fgrant.md" rel="noopener">git.igneum.network/igneum-network/igneum</a> and pick the Grant template. It asks for:</p>
<ol><li>What you will build, in a paragraph, and which tier it is.</li><li>What done looks like: what runs where, what a reviewer can click or call to see it working on the public testnet.</li><li>Your public work: a repository, a package, a paper, a deployed thing.</li><li>How you want to be reached.</li></ol>
<ol><li>What you will build, in a paragraph, and which tier it is.</li><li>What done looks like: what runs where, what a reviewer can click or call to see it working on the devnet.</li><li>Your public work: a repository, a package, a paper, a deployed thing.</li><li>How you want to be reached.</li></ol>
<p>A short issue is fine. The definition of done is the part that matters.</p>
</section>
<section class="doc-section"><h2 id="the-review">The review</h2>
<ul><li>Every Friday. Each open application gets one of three answers inside seven days: accepted with a definition of done, questions, or no with the reason.</li><li>Accepted work is tracked in its issue. The reviewer and the builder agree the definition of done there before any work starts.</li><li>Delivery is reviewed on the public testnet first. Payment follows the review, in the issue, in the open.</li></ul>
<ul><li>Every Friday. Each open application gets one of three answers inside seven days: accepted with a definition of done, questions, or no with the reason.</li><li>Accepted work is tracked in its issue. The reviewer and the builder agree the definition of done there before any work starts.</li><li>Delivery is reviewed on the devnet. Payment follows the review, in the issue, in the open.</li></ul>
</section>
<section class="doc-section"><h2 id="the-honest-lines">The honest lines</h2>
<ul><li>Devnet and testnet coins have no value. Before mainnet there is no IGN with value: a grant delivered on the testnet is recorded in its issue, and payment comes from the fund when the fund holds IGN. Nothing is promised about when, or whether, that is.</li><li>No amount, price or date is promised. The fund is what the dev fee collects, and it is zero today.</li><li>A grant is for work delivered, never for a user count, a listing, a post or a referral.</li><li>Igneum Labs may decline any application and may close the programme; what has been accepted and delivered is still paid.</li></ul>
<ul><li>Devnet coins have no value. Before mainnet there is no IGN with value: a grant delivered on the devnet is recorded in its issue, and payment comes from the fund when the fund holds IGN. Nothing is promised about when, or whether, that is.</li><li>No amount, price or date is promised. The fund is what the dev fee collects, and it is zero today.</li><li>A grant is for work delivered, never for a user count, a listing, a post or a referral.</li><li>Igneum Labs may decline any application and may close the programme; what has been accepted and delivered is still paid.</li></ul>
<p>Not legal advice.</p></section></article>
</div>
<p class="gen">Generated from docs/build/grants.md in the repository at build time. Times are UTC.</p>
@ -282,6 +278,7 @@ table{min-width:560px}
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -307,7 +304,6 @@ table{min-width:560px}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -319,7 +315,6 @@ table{min-width:560px}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -345,7 +340,7 @@ table{min-width:560px}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -3,7 +3,7 @@
there is no market), and read IGN a day and money a day at that price. The network's hash rate and the newest block's
DAA score come from /api/live every 15 s; the block reward is the chain's own rule at that DAA (/lib/emission.mjs, the
emission the node encodes), the miner's share 80 percent. The arithmetic is /lib/income-calc.mjs; its test holds the
known-failed case (no price, no money figure). Devnet and testnet IGN have no value; the page says so beside the figure. */
known-failed case (no price, no money figure). Devnet IGN has no value; the page says so beside the figure. */
(function () {
var root = document.getElementById('income-calc'); if (!root) return;
var data = document.getElementById('income-data'); if (!data) return;
@ -31,14 +31,14 @@
(tuned.length ? '<optgroup label="Tuned (Ember Tune or a core lock, measured)">' + tuned.map(function (r) { return option(r, rows.indexOf(r)); }).join('') + '</optgroup>' : '') +
'</select></label>' +
'<label class="field"><span>Electricity, per kWh (' + esc(cur) + ')</span><input id="ic-kwh" type="number" inputmode="decimal" min="0" step="0.01" value="' + kwhDefault + '" aria-describedby="ic-kwh-note"><small id="ic-kwh-note">' + esc(tariffSource) + '. Your own bill is the number.</small></label>' +
'<label class="field"><span>IGN price (' + esc(cur) + ')</span><input id="ic-price" type="number" inputmode="decimal" min="0" step="any" placeholder="no market yet: enter a price to see the figure" aria-describedby="ic-price-note"><small id="ic-price-note">Nobody sells IGN and the project quotes no price. Devnet and testnet IGN have no value.</small></label>' +
'<label class="field"><span>IGN price (' + esc(cur) + ')</span><input id="ic-price" type="number" inputmode="decimal" min="0" step="any" placeholder="no market yet: enter a price to see the figure" aria-describedby="ic-price-note"><small id="ic-price-note">Nobody sells IGN and the project quotes no price. Devnet IGN has no value.</small></label>' +
'</div>' +
'<div class="calc-out" aria-live="polite">' +
'<div class="k">Network hash rate</div><div class="v" id="ic-net">connecting</div><div class="d" id="ic-net-d">from the observer, every 15 s</div>' +
'<div class="k">Block reward now</div><div class="v" id="ic-reward">pending</div><div class="d" id="ic-reward-d">the chain’s own rule at the newest block’s DAA score, 80 percent of it to the miner</div>' +
'<div class="k">Your share</div><div class="v" id="ic-ign">pending</div><div class="d" id="ic-ign-d">IGN a day; one block about every <b id="ic-wait">pending</b></div>' +
'<div class="k">Electricity</div><div class="v" id="ic-el">pending</div><div class="d" id="ic-el-d">a day at your price</div>' +
'<div class="k">Money a day</div><div class="v" id="ic-money">enter a price</div><div class="d" id="ic-money-d">IGN a day at the price you typed, electricity taken off. Devnet and testnet IGN have no value: this is arithmetic on a number you chose, not an income.</div>' +
'<div class="k">Money a day</div><div class="v" id="ic-money">enter a price</div><div class="d" id="ic-money-d">IGN a day at the price you typed, electricity taken off. Devnet IGN has no value: this is arithmetic on a number you chose, not an income.</div>' +
'</div>';
var sel = document.getElementById('ic-card'), kwh = document.getElementById('ic-kwh'), price = document.getElementById('ic-price');
function row() { var i = Number(sel.value); return rows[i] || rows[0]; }

File diff suppressed because one or more lines are too long

View file

@ -2,7 +2,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum, the GPU-mined layer 1</title>
<meta name="description" content="A GPU-mined chain whose mining program rewrites itself every hour. Miners also prove the blocks. No premine, no stake, no fee to any team.">
<meta name="description" content="A GPU-secured network for Ethereum-compatible applications and verifiable computation. Its mining program rewrites itself every hour, and the miners also prove the blocks. No premine, no stake, no fee to any team.">
<link rel="canonical" href="https://igneum.network/">
<meta name="theme-color" content="#0C0C0E" media="(prefers-color-scheme: dark)">
<meta name="theme-color" content="#F4F1EC" media="(prefers-color-scheme: light)">
@ -10,7 +10,7 @@
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum, the GPU-mined layer 1">
<meta property="og:description" content="Mined by GPUs, every block proven by the miners. No premine, no stake, no fee to any team.">
<meta property="og:description" content="A GPU-secured network for Ethereum-compatible applications and verifiable computation.">
<meta property="og:url" content="https://igneum.network/">
<meta property="og:image" content="https://igneum.network/og/home.png?v=4">
<meta property="og:image:type" content="image/png">
@ -24,7 +24,7 @@
<meta property="og:image:alt" content="The GPU-mined chain that proves every block. igneum.network">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum, the GPU-mined layer 1">
<meta name="twitter:description" content="Mined by GPUs, every block proven by the miners. No premine, no stake, no fee to any team.">
<meta name="twitter:description" content="A GPU-secured network for Ethereum-compatible applications and verifiable computation.">
<meta name="twitter:image" content="https://igneum.network/og/home.png?v=4">
<meta name="twitter:image:alt" content="The GPU-mined chain that proves every block. igneum.network">
<!-- share:end -->
@ -81,7 +81,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -111,12 +111,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -134,7 +132,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -155,12 +153,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -174,7 +170,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -238,7 +234,7 @@
<div class="fold-body">
<div class="fold-coin"><span class="fold-glow"></span><svg viewBox="0 0 1024 1024" aria-hidden="true"><rect width="1024" height="1024" rx="230" 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></div>
<h1>The card you own has <span class="accent">a new chain</span> to&nbsp;mine.</h1>
<p class="lead">Hardware that stays useful. Income without a cliff. A fair supply. One click installs the node, the miner and the prover, and the card starts.</p>
<p class="lead">A GPU-secured network for Ethereum-compatible applications and verifiable computation. One click installs the node, the miner and the prover, and the card starts.</p>
<div class="fold-actions" id="fold-actions">
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" data-os-button="windows" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows<span class="meta" data-dl-meta="miner-windows">v0.3.20 · 63.0 MB</span></a>
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg" data-os-button="mac" class="btn"><span class="osmark bare" data-os="mac" title="macOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M16.4 12.6c0-2.5 2-3.6 2.1-3.7-1.2-1.7-3-1.9-3.6-2-1.5-.2-3 .9-3.8.9-.8 0-2-.9-3.3-.8-1.7 0-3.2 1-4.1 2.5-1.8 3-.5 7.6 1.3 10.1.9 1.2 1.9 2.6 3.2 2.5 1.3 0 1.8-.8 3.3-.8 1.6 0 2 .8 3.3.8 1.4 0 2.3-1.2 3.1-2.5 1-1.4 1.4-2.8 1.4-2.9 0 0-2.7-1-2.9-4.1zM13.9 5.3c.7-.8 1.2-2 1-3.2-1 0-2.2.7-2.9 1.5-.6.7-1.2 1.9-1 3 1.1.1 2.2-.5 2.9-1.3z"/></svg></span>Download for macOS<span class="meta" data-dl-meta="miner-mac">v0.3.20 · 44.5 MB</span></a>
@ -257,8 +253,8 @@
<div class="home-tile"><div class="k">Locked checkpoint</div><div class="v" id="f-lock">pending</div><div class="d" id="f-lock-d">signed by two thirds of all 30-day weight</div></div>
</div>
<p class="home-quiet" id="facts-note">One node is read every 2 s.</p>
<p class="home-quiet" data-devnet-notice><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
<p class="home-quiet" data-testnet-notice>Public testnet: not yet open; the devnet build is here for people who want to look. The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word.</p>
<p class="home-quiet" data-devnet-notice><b data-devnet-state="starting">Igneum 2.0 devnet starting</b>. Coins have no value and the chain may be reset.</p>
<p class="home-quiet">The Igneum 2.0 devnet is the network today.</p>
</div>
</section>
<section class="section compact" id="miner">
@ -289,6 +285,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -314,7 +311,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -326,7 +322,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -352,7 +347,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -1,378 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>The Igneum journey: six phases, four gates</title>
<meta name="description" content="Where Igneum is: six phases from the specification to a fair launch, each closing at a published gate, and the engineering log’s latest entries. No calendar dates.">
<link rel="canonical" href="https://igneum.network/journey">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="The Igneum journey: six phases, four gates">
<meta property="og:description" content="Where Igneum is: six phases from the specification to a fair launch, each closing at a published gate, and the engineering log’s latest entries. No calendar dates.">
<meta property="og:url" content="https://igneum.network/journey">
<meta property="og:image" content="https://igneum.network/og/home.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="The GPU-mined chain that proves every block. igneum.network">
<meta property="og:image" content="https://igneum.network/og/home-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="The GPU-mined chain that proves every block. igneum.network">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="The Igneum journey: six phases, four gates">
<meta name="twitter:description" content="Where Igneum is: six phases from the specification to a fair launch, each closing at a published gate, and the engineering log’s latest entries. No calendar dates.">
<meta name="twitter:image" content="https://igneum.network/og/home.png?v=4">
<meta name="twitter:image:alt" content="The GPU-mined chain that proves every block. igneum.network">
<!-- share:end -->
<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>
<meta name="color-scheme" content="dark light">
<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: ?theme=light|dark for one view (the capture tool), else the stored choice under igneum-theme, else the system setting; ?motion=off marks the page data-motion=off so every .reveal is drawn at once (a headless render never scrolls) */
(function(){var t=null;try{t=new URLSearchParams(location.search).get("theme");}catch(e){}if(t!=="light"&&t!=="dark"){try{t=localStorage.getItem("igneum-theme");}catch(e){t=null;}}if(t!=="light"&&t!=="dark")t=window.matchMedia&&window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";document.documentElement.setAttribute("data-theme",t);try{if(new URLSearchParams(location.search).get("motion")==="off")document.documentElement.setAttribute("data-motion","off");}catch(e){}})();
</script>
<!-- head:end -->
<style>
/* derived-page block (rendered by the build from its source page or document); tokens, type and components are in /site.css */
[id]{scroll-margin-top:calc(var(--nav-h) + 16px)}
.page-hero .lead{max-width:72ch}
.derived{max-width:78ch;color:var(--ink-2)}
.derived h2{font-size:var(--t-h3);margin:var(--s-6) 0 var(--s-3)}
.derived h3{font-size:16px;margin:var(--s-5) 0 var(--s-2)}
.derived ul,.derived ol{margin:0 0 var(--s-4);padding-left:22px}
.derived li{margin-bottom:8px}
.derived strong{color:var(--bone);font-weight:600}
.derived p,.derived li{overflow-wrap:anywhere}
.derived .tbl{margin:var(--s-4) 0 var(--s-5)}
.derived .pull{margin:var(--s-5) 0;padding:var(--s-4) var(--s-5);border-left:2px solid var(--ember);background:var(--row);border-radius:0 var(--r-row) var(--r-row) 0;font:500 var(--t-lg)/1.45 var(--f-sans);color:var(--bone)}
.derived .src{margin:calc(-1 * var(--s-2)) 0 var(--s-5);font:400 13px/1.5 var(--f-mono);color:var(--ash)}
.derived .src b{font-weight:500;color:var(--ink-2)}
.onward{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-top:var(--s-6);padding-top:var(--s-5);border-top:1px solid var(--line)}
</style>
</head>
<body>
<!-- nav:start -->
<a class="skip" href="#main">Skip to content</a>
<nav class="nav" aria-label="Main" data-nav-version="5">
<div class="container nav-row">
<a href="/" class="logo" aria-label="Igneum home">
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-learn" data-group="learn" aria-expanded="false" aria-controls="nav-panel-learn" aria-haspopup="true">Learn<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-build" data-group="build" aria-expanded="false" aria-controls="nav-panel-build" aria-haspopup="true">Build<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
</div>
<div class="nav-controls">
<button class="btn icon-btn" type="button" data-theme-toggle aria-label="Switch to light theme"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M2 12h2m16 0h2M5 5l1 1m12 12 1 1M5 19l1-1M18 6l1-1"/></svg></button>
<a href="/download" class="btn primary small cta" data-nav="download">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Open the menu" aria-haspopup="true"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path class="bars" d="M4 6h16M4 12h16M4 18h16"/><path class="cross" d="m6 6 12 12M6 18 18 6"/></svg></button>
</div>
</div>
<div class="panels" id="nav-panels">
<div class="panel-wrap container">
<div class="nav-panel" id="nav-panel-mine" data-group="mine" role="region" aria-labelledby="nav-btn-mine" hidden>
<div class="panel-list">
<a href="/miner" data-nav="miner"><b>Ember, the miner</b><span>One click installs the node, the miner and the prover.</span></a>
<a href="/download" data-nav="download"><b>Download</b><span>Windows, macOS, Linux and HiveOS.</span></a>
<a href="/app" data-nav="app"><b>The app</b><span>What you see while the card mines.</span></a>
<a href="/wallet" data-nav="wallet"><b>The wallet</b><span>Your coins. Final means final.</span></a>
<a href="/miners" data-nav="miners"><b>GPU bench table</b><span>Measured rates, card by card.</span></a>
<a href="/dev-fee" data-nav="dev-fee"><b>The dev fee</b><span>The optional one, in full view, off with one flag.</span></a>
<a href="/metamask" data-nav="metamask"><b>Add to MetaMask</b><span>Igneum as a network in your wallet.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-network" data-group="network" role="region" aria-labelledby="nav-btn-network" hidden>
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey" aria-current="page"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
<div class="panel-list">
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a>
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
<a href="/provenance" data-nav="provenance"><b>Built on the shoulders</b><span>Every borrowed part, credited.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-build" data-group="build" role="region" aria-labelledby="nav-btn-build" hidden>
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
</div>
</div>
</div>
<div class="nav-sheet" id="nav-sheet" role="dialog" aria-modal="true" aria-label="Menu" hidden>
<div class="sheet-scroll">
<div class="sheet-group"><div class="sheet-head">Mine</div>
<a href="/miner" data-nav="miner"><b>Ember, the miner</b><span>One click installs the node, the miner and the prover.</span></a>
<a href="/download" data-nav="download"><b>Download</b><span>Windows, macOS, Linux and HiveOS.</span></a>
<a href="/app" data-nav="app"><b>The app</b><span>What you see while the card mines.</span></a>
<a href="/wallet" data-nav="wallet"><b>The wallet</b><span>Your coins. Final means final.</span></a>
<a href="/miners" data-nav="miners"><b>GPU bench table</b><span>Measured rates, card by card.</span></a>
<a href="/dev-fee" data-nav="dev-fee"><b>The dev fee</b><span>The optional one, in full view, off with one flag.</span></a>
<a href="/metamask" data-nav="metamask"><b>Add to MetaMask</b><span>Igneum as a network in your wallet.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey" aria-current="page"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a>
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
<a href="/provenance" data-nav="provenance"><b>Built on the shoulders</b><span>Every borrowed part, credited.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
<div class="sheet-foot">
<a href="/download" class="btn primary big" data-nav="download">Download</a>
<div class="sheet-social"><a href="https://discord.gg/igneum" target="_blank" rel="noopener">Discord</a><a href="https://git.igneum.network/igneum-network/spec" target="_blank" rel="noopener">Source</a><a href="https://www.reddit.com/user/Igneum_network/" target="_blank" rel="noopener">Reddit</a></div>
</div>
</div>
</div>
</nav>
<script>
(function(){
// the slim bar (site-ui-5, 7 Oct 2026): three group buttons open one panel each; the burger opens the sheet on phones.
// Keyboard: Enter or Space opens a group, Escape closes it and returns focus to its button, arrows move between the
// group buttons, Tab walks the open panel's links, a click outside closes. The theme toggle flips data-theme and stores it.
var n=document.querySelector('.nav');if(!n)return;
var btns=[].slice.call(n.querySelectorAll('.group-btn')),panels=[].slice.call(n.querySelectorAll('.nav-panel')),wrap=n.querySelector('.panels');
var burger=document.getElementById('nav-burger'),sheet=document.getElementById('nav-sheet');
function panelOf(g){return panels.filter(function(p){return p.getAttribute('data-group')===g;})[0];}
function closeAll(focusBack){var was=null;btns.forEach(function(b){if(b.getAttribute('aria-expanded')==='true')was=b;b.setAttribute('aria-expanded','false');});panels.forEach(function(p){p.hidden=true;});n.classList.remove('panel-open');if(focusBack&&was)was.focus();}
function open(g){closeAll(false);var b=btns.filter(function(x){return x.getAttribute('data-group')===g;})[0],p=panelOf(g);if(!b||!p)return;b.setAttribute('aria-expanded','true');p.hidden=false;n.classList.add('panel-open');anchor(b,p);}
// the panel sits under its button; a panel that would run past the container's right edge aligns its right edge to the button's right edge instead (never past the viewport)
function anchor(b,p){var pw=n.querySelector('.panel-wrap');if(!pw)return;var cr=pw.getBoundingClientRect(),br=b.getBoundingClientRect(),w=p.offsetWidth,left=br.left-cr.left;if(left+w>cr.width)left=(br.right-cr.left)-w;if(left<0)left=0;p.style.setProperty('--panel-left',Math.round(left)+'px');}
window.addEventListener('resize',function(){var o=btns.filter(function(x){return x.getAttribute('aria-expanded')==='true';})[0];if(o)anchor(o,panelOf(o.getAttribute('data-group')));}); btns.forEach(function(b,i){
b.addEventListener('click',function(){var on=b.getAttribute('aria-expanded')==='true';if(on)closeAll(false);else open(b.getAttribute('data-group'));});
b.addEventListener('keydown',function(e){
var k=e.key;
if(k==='ArrowRight'||k==='ArrowLeft'){e.preventDefault();var j=(i+(k==='ArrowRight'?1:btns.length-1))%btns.length;btns[j].focus();if(n.classList.contains('panel-open'))open(btns[j].getAttribute('data-group'));}
else if(k==='ArrowDown'){e.preventDefault();open(b.getAttribute('data-group'));var f=panelOf(b.getAttribute('data-group')).querySelector('a');if(f)f.focus();}
else if(k==='Escape'){closeAll(true);}
});
});
if(wrap)wrap.addEventListener('keydown',function(e){if(e.key==='Escape'){e.stopPropagation();closeAll(true);}});
document.addEventListener('click',function(e){if(!n.classList.contains('panel-open'))return;if(e.target.closest('.group-btn')||e.target.closest('.nav-panel'))return;closeAll(false);});
document.addEventListener('focusin',function(e){if(!n.classList.contains('panel-open'))return;if(n.contains(e.target))return;closeAll(false);});
document.addEventListener('keydown',function(e){if(e.key==='Escape'&&n.classList.contains('panel-open'))closeAll(true);});
// the sheet on phones
function setSheet(o){if(!burger||!sheet)return;n.classList.toggle('open',o);sheet.hidden=!o;burger.setAttribute('aria-expanded',o?'true':'false');burger.setAttribute('aria-label',o?'Close the menu':'Open the menu');document.documentElement.classList.toggle('nav-locked',o);if(o){var f=sheet.querySelector('a');if(f)f.focus();}}
if(burger&&sheet){
burger.addEventListener('click',function(){setSheet(!n.classList.contains('open'));});
sheet.addEventListener('click',function(e){if(e.target.closest('a'))setSheet(false);});
sheet.addEventListener('keydown',function(e){
if(e.key==='Escape'){setSheet(false);burger.focus();return;}
if(e.key!=='Tab')return;var f=sheet.querySelectorAll('a,button');if(!f.length)return;var first=f[0],last=f[f.length-1];
if(e.shiftKey&&document.activeElement===first){e.preventDefault();burger.focus();}else if(!e.shiftKey&&document.activeElement===last){e.preventDefault();burger.focus();}
});
burger.addEventListener('keydown',function(e){if(e.key==='Tab'&&!e.shiftKey&&n.classList.contains('open')){e.preventDefault();var f=sheet.querySelector('a');if(f)f.focus();}});
var mq=window.matchMedia('(min-width:861px)');if(mq.addEventListener)mq.addEventListener('change',function(){setSheet(false);});
}
// the theme toggle
var t=n.querySelector('[data-theme-toggle]');
function paintToggle(){var dark=document.documentElement.getAttribute('data-theme')!=='light';t.setAttribute('aria-label',dark?'Switch to light theme':'Switch to dark theme');t.innerHTML=dark?'<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M2 12h2m16 0h2M5 5l1 1m12 12 1 1M5 19l1-1M18 6l1-1"/></svg>':'<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20.7 13.3A8.5 8.5 0 0 1 10.7 3.3 8.5 8.5 0 1 0 20.7 13.3Z"/></svg>';}
if(t){t.addEventListener('click',function(){var v=document.documentElement.getAttribute('data-theme')==='light'?'dark':'light';document.documentElement.setAttribute('data-theme',v);try{localStorage.setItem('igneum-theme',v);}catch(e){}document.dispatchEvent(new CustomEvent('igneum-theme'));});paintToggle();document.addEventListener('igneum-theme',paintToggle);}
})();
</script>
<!-- nav:end -->
<main id="main">
<section class="page-hero">
<div class="container">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>The journey</span></div>
<div class="page-heading"><div><div class="eyebrow"><span class="line"></span>Six phases · updated 8 Oct 2026</div>
<h1>The journey.</h1>
<p class="lead">Six phases from the specification to a fair launch. Each closes at its gate, a measurement published whether it passes or fails, so there is no date to slip. Below the phases, the latest entries of the engineering log.</p></div></div>
</div>
</section>
<section class="section compact">
<div class="container">
<div class="timeline"><div class="milestone current" id="phase-1"><div class="when">Under way; closes when the specification is out for external review</div><div><span class="badge warm">Under way</span><h3>1. Specification</h3><p>Mining generator, shard proving, finality rules, written for external review</p></div></div>
<div class="milestone current" id="phase-2"><div class="when">Under way; closes at its gate</div><div><span class="badge warm">Under way</span><h3>2. Prove the proving</h3><p>Mining program proven on Apple, NVIDIA and AMD; shard proving benchmark on consumer cards still to run</p><p class="gate"><b>Gate:</b> A fixed published workload, job received to accepted proof on a declared consumer card, sustained with no growing backlog, reproduced by three independent operators</p></div></div>
<div class="milestone current" id="phase-3"><div class="when">Devnet 3 live, testnet next</div><div><span class="badge warm">Under way</span><h3>3. Devnet</h3><p>Devnet 3 since 7 October 2026 with every upgrade on from block zero; GPU miners on three vendors; EVM execution and proving live</p><p class="gate"><b>Gate:</b> 1 block a second held with proofs under 60 s behind the tip</p></div></div>
<div class="milestone next" id="phase-4"><div class="when">Closes when the finality design passes external review</div><div><span class="badge">Next</span><h3>4. Finality and job market</h3><p>Sustained-mining finality, external proving jobs, miner client with auto-switching</p><p class="gate"><b>Gate:</b> Finality design passes external review</p></div></div>
<div class="milestone next" id="phase-5"><div class="when">Armed: opens on the go word</div><div><span class="badge">Next</span><h3>5. Public testnet</h3><p>Three seed nodes and the public RPC are up; the one-click miner app on Windows, macOS and Linux, HiveOS, pools, the first rollup as a proving customer, no coin yet</p><p class="gate"><b>Gate:</b> 1,000 independent miners run 30 days and rollup proofs are delivered on time</p></div></div>
<div class="milestone next" id="phase-6"><div class="when">After the testnet has passed its gate (1,000 independent miners for 30 days, rollup proofs on time) and one proving customer has signed: a customer paying for proofs at a published rate, or a letter of intent with a volume</div><div><span class="badge">Next</span><h3>6. Mainnet fair launch</h3><p>Genesis with no premine, 30-day ramp. No listing is arranged, promised or sought by the project</p></div></div></div>
<div class="section-head" style="margin-top:100px"><div><div class="eyebrow"><span class="line"></span>The log, newest first</div><h2>Lately, in the&nbsp;log.</h2></div><div class="searchbar" style="min-width:min(100%,360px)"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="10.5" cy="10.5" r="6.5"/><path d="m16 16 5 5"/></svg><label for="log-q" class="visually-hidden">Filter the log</label><input id="log-q" data-filter-input="log" placeholder="Filter: a card, a date, a word" autocomplete="off" spellcheck="false"><span class="small" data-filter-count="log"></span></div></div>
<div class="record-count" data-filter-count="log"></div><div class="record-grid" data-filter-list="log"><article class="record"><div class="record-top"><time datetime="2026-10-08">8 Oct 2026</time><span class="badge">log</span></div><h3>The hot-table packs on the RTX 5090</h3><p>The hot-table packs on the RTX 5090: ld.global.cs against the plain load, unlocked and at the 1,300 MHz lock</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-07">7 Oct 2026</time><span class="badge">log</span></div><h3>The first 16 GB card</h3><p>The first 16 GB card: an RTX 5060 Ti in a Thunderbolt enclosure on the RTX 5090 Windows rig</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>Counter ASIC 3.0</h3><p>Counter ASIC 3.0: the class v4 rehearsal</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>16:01Z: Ember run 6 on the three-card Windows rig</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>Counter ASIC 3.0 item 2</h3><p>Counter ASIC 3.0 item 2: the per-day derivation</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>Counter ASIC 3.0 item 8</h3><p>Counter ASIC 3.0 item 8: program work in the latency shadow</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>Counter ASIC 3.0 item 6</h3><p>Counter ASIC 3.0 item 6: the reserve families' step costs</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>Counter ASIC 3.0 gate run, the hash side</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>16:01Z: Ember run 6 on the three-card Windows rig (RTX 5090, RTX 4070</h3><p>16:01Z: Ember run 6 on the three-card Windows rig (RTX 5090, RTX 4070, RX 9070 XT)</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>00:4xZ, the empty `/api/state` reply</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>07:12Z to 07:17Z, the host's chain mode with --save-shards records…</h3><p>07:12Z to 07:17Z, the host's chain mode with --save-shards records and --prev, on the Apple M5 Max's CPU</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>07:52Z to 08:24Z, the segment-aligned prover beside the miner on the…</h3><p>07:52Z to 08:24Z, the segment-aligned prover beside the miner on the RTX 5090 Windows rig's RTX 5090</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>08:26Z to 08:35Z, the fast-time harness on the fresh-record rule</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-06">6 Oct 2026</time><span class="badge">log</span></div><h3>12:25 to 13:20Z, the finality route: why 26 fresh nodes lost the…</h3><p>12:25 to 13:20Z, the finality route: why 26 fresh nodes lost the seed every checkpoint</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Igneum Wallet v1 on a test network</h3><p>Igneum Wallet v1 on a test network: created, paid by the miner, a transfer sent and shown final under a checkpoint the wallet verified itself</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Ember Tune: the two-knob efficiency tune, the fleet prior</h3><p>Ember Tune: the two-knob efficiency tune, the fleet prior, and what the three-card Windows rig could measure tonight</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The SP1 CPU prover on the three-card Windows rig beside the miners,…</h3><p>The SP1 CPU prover on the three-card Windows rig beside the miners, and the backend survey: no zkVM proves on AMD</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The 9070 XT on the eGPU</h3><p>The 9070 XT on the eGPU: why 17.9 MH/s, and what moved</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Ember Tune: the two-knob efficiency tune, the fleet prior</h3><p>Ember Tune: the two-knob efficiency tune, the fleet prior, and what the three-card Windows rig (RTX 5090, RTX 4070, RX 9070 XT) could measure tonight</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Read width of the lottery hash</h3><p>Read width of the lottery hash: 4, 16 and 64-byte loads, a per-load mix, a written scratch; three cards</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The hot table on the M5 Max</h3><p>The hot table on the M5 Max: a second table sized to GPU cache beside the 1 GiB dataset</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Mixer x4 and the cache growth rule</h3><p>Mixer x4 and the cache growth rule: the class v3 dataset construction, with the x8 candidate</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The SP1 CPU prover on the three-card Windows rig (RTX 5090, RTX…</h3><p>The SP1 CPU prover on the three-card Windows rig (RTX 5090, RTX 4070, RX 9070 XT) beside the miners, and the backend survey: no zkVM proves on AMD</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Proving v1: segment records, the chain rule</h3><p>Proving v1: segment records, the chain rule, the unproven rule; what was measured tonight</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Dp4a-class throughput on the M5 Max</h3><p>Dp4a-class throughput on the M5 Max: the dot4 emulation against the ALU chain</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Layer 3 scratch soundness</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Epoch length as an era parameter</h3><p>Epoch length as an era parameter : the Apple M5 Max's compile-ahead per program</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Aggregation cost on the RTX 5090</h3><p>Aggregation cost on the RTX 5090: what a per-block aggregation spends and what each lever gives</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The C4 fix: certificate-driven reorg</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>EVM transaction relay</h3><p>EVM transaction relay: three nodes in a chain, every transaction sent to one end included by the other two miners</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The prover carries both fee tables and the height switch</h3><p>The prover carries both fee tables and the height switch: one pinned guest on either side of DAA 210,000</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>FUD ledger sweep round 6</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Live devnet: real transactions, the first non-empty shard proven and…</h3><p>Live devnet: real transactions, the first non-empty shard proven and paid, and the exporter's block structure fixed</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>The program id split</h3><p>The program id split: why the Apple M5 Max rejected the RTX 5090 Windows rig's proofs, and the verifier at 114 s</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-05">5 Oct 2026</time><span class="badge">log</span></div><h3>Live devnet: the first shards proven, verified and paid</h3></article>
<article class="record"><div class="record-top"><time datetime="2026-10-04">4 Oct 2026</time><span class="badge">log</span></div><h3>Economy simulation: mining versus proving under stress</h3><p>Sim/economy: mining versus proving under stress, agent-based</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-04">4 Oct 2026</time><span class="badge">log</span></div><h3>Difficulty rule attacked seven ways</h3><p>Difficulty rule under attack: pool hopping, pulsed rental, timestamp stretching, short-lane oscillation, epoch games, polluted window, block flood</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-04">4 Oct 2026</time><span class="badge">log</span></div><h3>Timestamp attack on the difficulty rule fixed</h3><p>Difficulty rule: timestamp attack fixed , simulator regression, 3-node forger test</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-04">4 Oct 2026</time><span class="badge">log</span></div><h3>Devnet v4: nine branches merged into one node</h3><p>Devnet-v4 integration: nine branches merged, 3-node test network on the merged node, Windows cross-build</p></article>
<article class="record"><div class="record-top"><time datetime="2026-10-04">4 Oct 2026</time><span class="badge">log</span></div><h3>Generator v2 adopted: every hash does 128 distinct reads</h3><p>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</p></article></div>
<p class="empty-state" data-filter-empty="log" hidden>Nothing in the log matches that.</p>
<p class="note">Every entry is a dated heading of <a href="/bench">the engineering log</a>, where the commands and the hardware are. The phases and their gates are the litepaper’s <a href="/litepaper#roadmap">roadmap</a>.</p>
<div class="onward"><a href="/bench" class="btn">The engineering log</a><a href="/evidence" class="btn">Every claim and its status</a><a href="/live" class="btn">The live devnet</a></div>
</div>
</section>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
<p>Mined by GPUs. Proven by fire.</p>
<div class="social" aria-label="Igneum elsewhere">
<a href="https://git.igneum.network/igneum-network/spec" target="_blank" rel="noopener" aria-label="Igneum source: the spec, the vectors and the issues"><svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M8.6 17.6 3 12l5.6-5.6 1.4 1.4L5.8 12l4.2 4.2zm6.8 0-1.4-1.4L18.2 12 14 7.8l1.4-1.4L21 12z"></path></svg></a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener" aria-label="The Igneum Discord"><svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M19.6 5.3A17 17 0 0 0 15.4 4l-.2.4a15.6 15.6 0 0 1 3.9 1.9 13.6 13.6 0 0 0-14.2 0A15.6 15.6 0 0 1 8.8 4.4L8.6 4a17 17 0 0 0-4.2 1.3C1.8 9.2 1.1 13 1.4 16.7a17.1 17.1 0 0 0 5.2 2.6l1.1-1.8a10.8 10.8 0 0 1-1.7-.8l.4-.3a12.2 12.2 0 0 0 11.2 0l.4.3-1.7.8 1.1 1.8a17 17 0 0 0 5.2-2.6c.4-4.3-.7-8-3-11.4zM8.7 14.4c-1 0-1.8-.9-1.8-2.1s.8-2.1 1.8-2.1 1.9 1 1.8 2.1c0 1.2-.8 2.1-1.8 2.1zm6.6 0c-1 0-1.8-.9-1.8-2.1s.8-2.1 1.8-2.1 1.9 1 1.8 2.1c0 1.2-.8 2.1-1.8 2.1z"></path></svg></a>
<a data-social="reddit" href="https://www.reddit.com/user/Igneum_network/" target="_blank" rel="noopener" aria-label="Igneum on Reddit"><svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M22 12.1a2.2 2.2 0 0 0-3.7-1.6 10.8 10.8 0 0 0-5.8-1.8l1-4.6 3.2.7a1.5 1.5 0 1 0 .2-.9l-3.6-.8a.5.5 0 0 0-.5.4l-1.1 5.2a10.8 10.8 0 0 0-5.9 1.8A2.2 2.2 0 1 0 3.4 14a4.3 4.3 0 0 0 0 .7c0 3.4 3.9 6.1 8.6 6.1s8.6-2.7 8.6-6.1a4.3 4.3 0 0 0 0-.7 2.2 2.2 0 0 0 1.4-1.9zM7 13.6a1.5 1.5 0 1 1 1.5 1.5A1.5 1.5 0 0 1 7 13.6zm8.6 4.1a5.7 5.7 0 0 1-3.6 1.1 5.7 5.7 0 0 1-3.6-1.1.4.4 0 0 1 .6-.6 4.9 4.9 0 0 0 3 .9 4.9 4.9 0 0 0 3-.9.4.4 0 0 1 .6.6zm-.3-2.6a1.5 1.5 0 1 1 1.5-1.5 1.5 1.5 0 0 1-1.5 1.5z"></path></svg></a>
</div>
<div class="footer-dl" aria-label="Download Ember"><a href="/download#windows"><span class="osmark mini" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Windows</a><a href="/download#mac"><span class="osmark mini" data-os="mac" title="macOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M16.4 12.6c0-2.5 2-3.6 2.1-3.7-1.2-1.7-3-1.9-3.6-2-1.5-.2-3 .9-3.8.9-.8 0-2-.9-3.3-.8-1.7 0-3.2 1-4.1 2.5-1.8 3-.5 7.6 1.3 10.1.9 1.2 1.9 2.6 3.2 2.5 1.3 0 1.8-.8 3.3-.8 1.6 0 2 .8 3.3.8 1.4 0 2.3-1.2 3.1-2.5 1-1.4 1.4-2.8 1.4-2.9 0 0-2.7-1-2.9-4.1zM13.9 5.3c.7-.8 1.2-2 1-3.2-1 0-2.2.7-2.9 1.5-.6.7-1.2 1.9-1 3 1.1.1 2.2-.5 2.9-1.3z"/></svg></span>macOS</a><a href="/download#linux"><span class="osmark mini" data-os="linux" title="Linux"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><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></span>Linux</a><a href="/download#hive"><span class="osmark mini" data-os="hive" title="HiveOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"><path d="M12 2.6 20.2 7.3v9.4L12 21.4 3.8 16.7V7.3z"/><path d="M12 7.4 16 9.7v4.6L12 16.6 8 14.3V9.7z"/><path d="M12 7.4V2.6M16 9.7l4.2-2.4M16 14.3l4.2 2.4M12 16.6v4.8M8 14.3l-4.2 2.4M8 9.7 3.8 7.3"/></svg></span>HiveOS</a></div>
<a href="https://git.igneum.network/igneum-network/spec" target="_blank" rel="noopener" class="text-link">Specification and test vectors<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 18 18 6M6 6h12v12"/></svg></a>
</div>
<div class="footer-column"><h4>Run</h4><div>
<a href="/download">Download Ember</a>
<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="/dev-fee">The dev fee</a>
<a href="/faucet">Devnet faucet</a>
<a href="/metamask">Add Igneum to MetaMask</a>
</div></div>
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
<a href="/provenance">Built on the shoulders</a>
</div></div>
<div class="footer-column"><h4>Explore</h4><div>
<a href="/live">Live devnet</a>
<a href="/explorer">Explorer</a>
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
<a href="https://git.igneum.network/igneum-network/spec/issues" rel="noopener">An issue on the spec</a>
</div></div>
</div>
<div class="footer-bottom">
<p>Igneum Labs LTD · Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre. Experimental software. Nothing on this site is an offer to sell anything.<br>Report a flaw by email or by an issue on the spec. Nobody from Igneum will ask for your seed. © 2026 Igneum · not an offer to sell anything</p>
<div class="theme-group" 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></div>
</div>
</div>
</footer>
<script>
(function(){
// theme control: stores light or dark under igneum-theme; system clears it and follows the OS. The head applied the value before paint.
var bs=document.querySelectorAll('[data-theme-set]');if(!bs.length)return;
var media=window.matchMedia('(prefers-color-scheme: light)');
function stored(){try{var t=localStorage.getItem('igneum-theme');return t==='light'||t==='dark'?t:'system';}catch(e){return 'system';}}
function apply(){var c=stored();document.documentElement.setAttribute('data-theme',c==='system'?(media.matches?'light':'dark'):c);bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});document.dispatchEvent(new CustomEvent('igneum-theme'));}
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){}apply();});});
if(media.addEventListener)media.addEventListener('change',function(){if(stored()==='system')apply();});
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
<script src="/ui.js" defer></script>
</body>
</html>

View file

@ -1,254 +0,0 @@
{
"updated": "2026-10-08",
"stage": "phase-3",
"phases": [
{
"id": "phase-1",
"name": "Specification",
"when": "Under way; closes when the specification is out for external review",
"status": "active",
"line": "Mining generator, shard proving, finality rules, written for external review"
},
{
"id": "phase-2",
"name": "Prove the proving",
"when": "Under way; closes at its gate",
"status": "active",
"line": "Mining program proven on Apple, NVIDIA and AMD; shard proving benchmark on consumer cards still to run",
"gate": "A fixed published workload, job received to accepted proof on a declared consumer card, sustained with no growing backlog, reproduced by three independent operators"
},
{
"id": "phase-3",
"name": "Devnet",
"when": "Devnet 3 live, testnet next",
"status": "active",
"line": "Devnet 3 since 7 October 2026 with every upgrade on from block zero; GPU miners on three vendors; EVM execution and proving live",
"gate": "1 block a second held with proofs under 60 s behind the tip"
},
{
"id": "phase-4",
"name": "Finality and job market",
"when": "Closes when the finality design passes external review",
"status": "next",
"line": "Sustained-mining finality, external proving jobs, miner client with auto-switching",
"gate": "Finality design passes external review"
},
{
"id": "phase-5",
"name": "Public testnet",
"when": "Armed: opens on the go word",
"status": "next",
"line": "Three seed nodes and the public RPC are up; the one-click miner app on Windows, macOS and Linux, HiveOS, pools, the first rollup as a proving customer, no coin yet",
"gate": "1,000 independent miners run 30 days and rollup proofs are delivered on time"
},
{
"id": "phase-6",
"name": "Mainnet fair launch",
"when": "After the testnet has passed its gate (1,000 independent miners for 30 days, rollup proofs on time) and one proving customer has signed: a customer paying for proofs at a published rate, or a letter of intent with a volume",
"status": "next",
"line": "Genesis with no premine, 30-day ramp. No listing is arranged, promised or sought by the project"
}
],
"log": [
{
"date": "2026-10-08",
"text": "The hot-table packs on the RTX 5090: ld.global.cs against the plain load, unlocked and at the 1,300 MHz lock",
"short": "The hot-table packs on the RTX 5090"
},
{
"date": "2026-10-07",
"text": "The first 16 GB card: an RTX 5060 Ti in a Thunderbolt enclosure on the RTX 5090 Windows rig",
"short": "The first 16 GB card"
},
{
"date": "2026-10-06",
"text": "Counter ASIC 3.0: the class v4 rehearsal",
"short": "Counter ASIC 3.0"
},
{
"date": "2026-10-06",
"text": "16:01Z: Ember run 6 on the three-card Windows rig",
"short": "16:01Z: Ember run 6 on the three-card Windows rig"
},
{
"date": "2026-10-06",
"text": "Counter ASIC 3.0 item 2: the per-day derivation",
"short": "Counter ASIC 3.0 item 2"
},
{
"date": "2026-10-06",
"text": "Counter ASIC 3.0 item 8: program work in the latency shadow",
"short": "Counter ASIC 3.0 item 8"
},
{
"date": "2026-10-06",
"text": "Counter ASIC 3.0 item 6: the reserve families' step costs",
"short": "Counter ASIC 3.0 item 6"
},
{
"date": "2026-10-06",
"text": "Counter ASIC 3.0 gate run, the hash side",
"short": "Counter ASIC 3.0 gate run, the hash side"
},
{
"date": "2026-10-06",
"text": "16:01Z: Ember run 6 on the three-card Windows rig (RTX 5090, RTX 4070, RX 9070 XT)",
"short": "16:01Z: Ember run 6 on the three-card Windows rig (RTX 5090, RTX 4070"
},
{
"date": "2026-10-06",
"text": "00:4xZ, the empty `/api/state` reply",
"short": "00:4xZ, the empty `/api/state` reply"
},
{
"date": "2026-10-06",
"text": "07:12Z to 07:17Z, the host's chain mode with --save-shards records and --prev, on the Apple M5 Max's CPU",
"short": "07:12Z to 07:17Z, the host's chain mode with --save-shards records…"
},
{
"date": "2026-10-06",
"text": "07:52Z to 08:24Z, the segment-aligned prover beside the miner on the RTX 5090 Windows rig's RTX 5090",
"short": "07:52Z to 08:24Z, the segment-aligned prover beside the miner on the…"
},
{
"date": "2026-10-06",
"text": "08:26Z to 08:35Z, the fast-time harness on the fresh-record rule",
"short": "08:26Z to 08:35Z, the fast-time harness on the fresh-record rule"
},
{
"date": "2026-10-06",
"text": "12:25 to 13:20Z, the finality route: why 26 fresh nodes lost the seed every checkpoint",
"short": "12:25 to 13:20Z, the finality route: why 26 fresh nodes lost the…"
},
{
"date": "2026-10-05",
"text": "Igneum Wallet v1 on a test network: created, paid by the miner, a transfer sent and shown final under a checkpoint the wallet verified itself",
"short": "Igneum Wallet v1 on a test network"
},
{
"date": "2026-10-05",
"text": "Ember Tune: the two-knob efficiency tune, the fleet prior, and what the three-card Windows rig could measure tonight",
"short": "Ember Tune: the two-knob efficiency tune, the fleet prior"
},
{
"date": "2026-10-05",
"text": "The SP1 CPU prover on the three-card Windows rig beside the miners, and the backend survey: no zkVM proves on AMD",
"short": "The SP1 CPU prover on the three-card Windows rig beside the miners,…"
},
{
"date": "2026-10-05",
"text": "The 9070 XT on the eGPU: why 17.9 MH/s, and what moved",
"short": "The 9070 XT on the eGPU"
},
{
"date": "2026-10-05",
"text": "Ember Tune: the two-knob efficiency tune, the fleet prior, and what the three-card Windows rig (RTX 5090, RTX 4070, RX 9070 XT) could measure tonight",
"short": "Ember Tune: the two-knob efficiency tune, the fleet prior"
},
{
"date": "2026-10-05",
"text": "Read width of the lottery hash: 4, 16 and 64-byte loads, a per-load mix, a written scratch; three cards",
"short": "Read width of the lottery hash"
},
{
"date": "2026-10-05",
"text": "The hot table on the M5 Max: a second table sized to GPU cache beside the 1 GiB dataset",
"short": "The hot table on the M5 Max"
},
{
"date": "2026-10-05",
"text": "Mixer x4 and the cache growth rule: the class v3 dataset construction, with the x8 candidate",
"short": "Mixer x4 and the cache growth rule"
},
{
"date": "2026-10-05",
"text": "The SP1 CPU prover on the three-card Windows rig (RTX 5090, RTX 4070, RX 9070 XT) beside the miners, and the backend survey: no zkVM proves on AMD",
"short": "The SP1 CPU prover on the three-card Windows rig (RTX 5090, RTX…"
},
{
"date": "2026-10-05",
"text": "Proving v1: segment records, the chain rule, the unproven rule; what was measured tonight",
"short": "Proving v1: segment records, the chain rule"
},
{
"date": "2026-10-05",
"text": "Dp4a-class throughput on the M5 Max: the dot4 emulation against the ALU chain",
"short": "Dp4a-class throughput on the M5 Max"
},
{
"date": "2026-10-05",
"text": "Layer 3 scratch soundness",
"short": "Layer 3 scratch soundness"
},
{
"date": "2026-10-05",
"text": "Epoch length as an era parameter : the Apple M5 Max's compile-ahead per program",
"short": "Epoch length as an era parameter"
},
{
"date": "2026-10-05",
"text": "Aggregation cost on the RTX 5090: what a per-block aggregation spends and what each lever gives",
"short": "Aggregation cost on the RTX 5090"
},
{
"date": "2026-10-05",
"text": "The C4 fix: certificate-driven reorg",
"short": "The C4 fix: certificate-driven reorg"
},
{
"date": "2026-10-05",
"text": "EVM transaction relay: three nodes in a chain, every transaction sent to one end included by the other two miners",
"short": "EVM transaction relay"
},
{
"date": "2026-10-05",
"text": "The prover carries both fee tables and the height switch: one pinned guest on either side of DAA 210,000",
"short": "The prover carries both fee tables and the height switch"
},
{
"date": "2026-10-05",
"text": "FUD ledger sweep round 6",
"short": "FUD ledger sweep round 6"
},
{
"date": "2026-10-05",
"text": "Live devnet: real transactions, the first non-empty shard proven and paid, and the exporter's block structure fixed",
"short": "Live devnet: real transactions, the first non-empty shard proven and…"
},
{
"date": "2026-10-05",
"text": "The program id split: why the Apple M5 Max rejected the RTX 5090 Windows rig's proofs, and the verifier at 114 s",
"short": "The program id split"
},
{
"date": "2026-10-05",
"text": "Live devnet: the first shards proven, verified and paid",
"short": "Live devnet: the first shards proven, verified and paid"
},
{
"date": "2026-10-04",
"text": "Sim/economy: mining versus proving under stress, agent-based",
"short": "Economy simulation: mining versus proving under stress"
},
{
"date": "2026-10-04",
"text": "Difficulty rule under attack: pool hopping, pulsed rental, timestamp stretching, short-lane oscillation, epoch games, polluted window, block flood",
"short": "Difficulty rule attacked seven ways"
},
{
"date": "2026-10-04",
"text": "Difficulty rule: timestamp attack fixed , simulator regression, 3-node forger test",
"short": "Timestamp attack on the difficulty rule fixed"
},
{
"date": "2026-10-04",
"text": "Devnet-v4 integration: nine branches merged, 3-node test network on the merged node, Windows cross-build",
"short": "Devnet v4: nine branches merged into one node"
},
{
"date": "2026-10-04",
"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": "Generator v2 adopted: every hash does 128 distinct reads"
}
]
}

View file

@ -6,7 +6,7 @@
import { blake2b } from 'https://cdn.jsdelivr.net/npm/@noble/hashes@2.4.0/blake2.js/+esm';
import { keccak_256 } from 'https://cdn.jsdelivr.net/npm/@noble/hashes@2.4.0/sha3.js/+esm';
import { bls12_381 } from 'https://cdn.jsdelivr.net/npm/@noble/curves@2.4.0/bls12-381.js/+esm';
import { verifyBalance, verifyReceipt, verifyPaymentReceipt, formatIgn } from './core.js';
import { verifyBalance, verifyReceipt, formatIgn } from './core.js';
export const LIBRARIES = { '@noble/hashes': '2.4.0', '@noble/curves': '2.4.0' };
const deps = { blake2b, bls: bls12_381, keccak: keccak_256 };
@ -53,11 +53,11 @@ export async function runLight(address) {
const res = verifyBalance(cp, proof, deps);
window.__igneumLight = { cp, proof, neg, res };
const top = res.verified
? `<div class="headline"><div class="eyebrow ember">Proven balance · Devnet 3, no value</div><div class="big">${esc(formatIgn(res.balance_wei))} <span>IGN</span></div>
? `<div class="headline"><div class="eyebrow ember">Proven balance · devnet, no value</div><div class="big">${esc(formatIgn(res.balance_wei))} <span>IGN</span></div>
<p class="pt">${esc(res.balance_wei)} wei at chain block ${res.block}, under checkpoint ${res.checkpoint} (locked ${esc(ago(Number(proof.headers[proof.headers.length - 1].timestamp)))}). Verified here in ${res.ms} ms, ${res.headers} headers checked.</p></div>`
: `<div class="headline bad"><div class="eyebrow">Not verified · Devnet 3, no value</div><p class="pt">${esc(res.reason)}</p></div>`;
: `<div class="headline bad"><div class="eyebrow">Not verified · devnet, no value</div><p class="pt">${esc(res.reason)}</p></div>`;
out.innerHTML = top + negativeHtml('a copy of this proof with one byte of a trie node altered', neg) + stepsHtml(res)
+ `<p class="note">Data served by ${esc(API)} (a read service in front of a Devnet 3 node). Nothing it answered was taken on trust: the certificate, every header hash and parent link, the coinbase inclusion, the segment record's signature and the account proof were recomputed in this tab. What is trusted: that the aggregator's statement is the true execution result (every node checks it natively before paying the record; the SP1 proof behind it is verified by nodes, not in this tab yet), and the voter list with weights, which came from the node (spec 10.1).</p>`;
+ `<p class="note">Data served by ${esc(API)} (a read service in front of a devnet node). Nothing it answered was taken on trust: the certificate, every header hash and parent link, the coinbase inclusion, the segment record's signature and the account proof were recomputed in this tab. What is trusted: that the aggregator's statement is the true execution result (every node checks it natively before paying the record; the SP1 proof behind it is verified by nodes, not in this tab yet), and the voter list with weights, which came from the node (spec 10.1).</p>`;
setStatus(res.verified ? 'verified' : 'refused', res.verified ? 'ok' : 'bad');
return res;
}
@ -76,28 +76,24 @@ export async function runReceipt(tx) {
await new Promise(resolve => setTimeout(resolve, 20));
const bad = clone(receipt); bad.raw_tx_hex = flipHex(bad.raw_tx_hex, 40);
const neg = verifyReceipt(bad, deps);
const res = verifyPaymentReceipt(receipt, deps);
if (res.payment) { receipt.kind = 'payment receipt'; receipt.authenticates = 'inclusion of the signed transaction in a finalised block and its successful execution outcome (status and logs) through the proven segment\'s receipts commitment'; }
let negPay = null;
if (res.payment) { const b2 = clone(receipt); const r0 = b2.segment.receipts[Number(b2.segment.receipt_position)]; r0.status = '0x0'; negPay = verifyPaymentReceipt(b2, deps); }
const res = verifyReceipt(receipt, deps);
window.__igneumReceipt = { receipt, neg, res };
const t = res.tx || {};
const when = new Date(Number(res.block_time || 0)).toISOString().replace('T', ' ').slice(0, 19) + ' UTC';
const top = res.verified
? `<div class="headline"><div class="eyebrow ember">${res.payment ? 'Payment receipt · included, executed, proven and finalised' : 'Transaction inclusion receipt · included and finalised'} · Devnet 3, no value</div><div class="big">${esc(formatIgn(t.value || '0'))} <span>IGN</span></div>
${res.payment ? `<p class="pt"><b>Outcome authenticated:</b> ${esc(res.outcome.asset)}, ${esc(formatIgn(res.outcome.amount_wei))} IGN to ${esc(res.outcome.recipient || 'contract creation')}, executed with status success, through the receipts commitment of the proven segment ending at chain block ${esc(String(receipt.execution.chain_block))}.</p>` : `<p class="pt"><b>This is the inclusion receipt.</b> ${esc(res.payment_unavailable || receipt.payment_unavailable || 'the outcome is not authenticated')}${res.receipt_status === 'failed' ? ' The authenticated status is FAILED: no transfer took place.' : ''}</p>`}
? `<div class="headline"><div class="eyebrow ember">Transaction inclusion receipt · included and finalised · devnet, no value</div><div class="big">${esc(formatIgn(t.value || '0'))} <span>IGN</span></div>
<div class="kv"><div class="k">To</div><div class="mono">${esc(t.to || 'contract creation')}</div><div class="k">From</div><div class="mono">${esc(receipt.tx_as_reported.from)} <small>(as the node reports it; the signature is the chain's check)</small></div>
<div class="k">Transaction</div><div class="mono">0x${esc(receipt.tx_hash)}</div><div class="k">Block</div><div class="mono">${esc(res.block)} <small>at ${esc(when)}, DAA ${esc(res.block_daa)}</small></div>
<div class="k">Finality</div><div>checkpoint ${res.checkpoint}, ${esc(res.certificate)}; ${res.headers} headers from the block to the checkpoint, verified here in ${res.ms} ms</div>
${receipt.execution ? `<div class="k">Executed</div><div>status ${receipt.execution.status === '0x1' ? 'success' : 'failed'}, gas ${parseInt(receipt.execution.gas_used, 16)}, ${receipt.execution.logs} log(s) <small>${res.payment ? '(authenticated: the receipt sits in the shard receipts trie whose root the proven segment statement commits to)' : '(as the node reports it: executed is reported, not authenticated by this receipt; a payment receipt would authenticate the outcome)'}</small></div>` : ''}</div></div>`
: `<div class="headline bad"><div class="eyebrow">Not verified · Devnet 3, no value</div><p class="pt">${esc(res.reason)}</p></div>`;
out.innerHTML = top + negativeHtml('a copy of this receipt with one nibble of the raw transaction altered', neg) + (negPay ? negativeHtml('a copy of this payment receipt with the receipt status flipped to failed', { verified: negPay.verified && negPay.payment, reason: negPay.reason }) : '') + stepsHtml(res)
+ (res.verified ? `<p><button class="btn" type="button" data-download>Download the ${res.payment ? 'payment' : 'inclusion'} receipt (JSON, ${Math.round(JSON.stringify(receipt).length / 1024)} KB)</button></p>
${receipt.execution ? `<div class="k">Executed</div><div>status ${receipt.execution.status === '0x1' ? 'success' : 'failed'}, gas ${parseInt(receipt.execution.gas_used, 16)}, ${receipt.execution.logs} log(s) <small>(as the node reports it: executed is reported, not authenticated by this receipt; a payment receipt would authenticate the outcome)</small></div>` : ''}</div></div>`
: `<div class="headline bad"><div class="eyebrow">Not verified · devnet, no value</div><p class="pt">${esc(res.reason)}</p></div>`;
out.innerHTML = top + negativeHtml('a copy of this receipt with one nibble of the raw transaction altered', neg) + stepsHtml(res)
+ (res.verified ? `<p><button class="btn" type="button" data-download>Download the inclusion receipt (JSON, ${Math.round(JSON.stringify(receipt).length / 1024)} KB)</button></p>
<p class="note">The file carries the raw transaction, the including block's header and merkle path, every header up to the certified checkpoint, the certificate and the voter table. Anyone re-verifies it offline with the one-file verifier: <code>node verify-receipt.js receipt.json</code> (<a href="/lc/verify-receipt.js" download>verify-receipt.js</a>, plain JavaScript, no npm, no network). A tampered file fails there the same way the copy above failed here.</p>` : '');
const dl = $('[data-download]');
if (dl) dl.addEventListener('click', () => {
const blob = new Blob([JSON.stringify(receipt, null, 1)], { type: 'application/json' });
const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = `igneum-${res.payment ? 'payment' : 'inclusion'}-receipt-${receipt.tx_hash.slice(0, 12)}.json`; a.click(); setTimeout(() => URL.revokeObjectURL(a.href), 5000);
const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = `igneum-inclusion-receipt-${receipt.tx_hash.slice(0, 12)}.json`; a.click(); setTimeout(() => URL.revokeObjectURL(a.href), 5000);
});
setStatus(res.verified ? 'verified' : 'refused', res.verified ? 'ok' : 'bad');
return res;
@ -115,7 +111,7 @@ function wire() {
if (!ok) { setStatus(kind === 'light' ? 'an address is 0x and 40 hex digits' : 'a transaction hash is 0x and 64 hex digits', 'bad'); return; }
form.querySelector('button').disabled = true;
try { if (kind === 'light') await runLight(v); else await runReceipt(v); }
catch (err) { setStatus(String(err.message || err), 'bad'); $('[data-result]').innerHTML = `<div class="headline bad"><div class="eyebrow">Could not fetch · Devnet 3, no value</div><p class="pt">${esc(String(err.message || err))}</p></div>`; }
catch (err) { setStatus(String(err.message || err), 'bad'); $('[data-result]').innerHTML = `<div class="headline bad"><div class="eyebrow">Could not fetch · devnet, no value</div><p class="pt">${esc(String(err.message || err))}</p></div>`; }
finally { form.querySelector('button').disabled = false; }
});
if (input.value) form.requestSubmit();

View file

@ -379,138 +379,6 @@ export function parseTx(raw) {
return { type: 0, nonce: bigOf(body[0]).toString(), to: body[3].length ? hex(body[3]) : null, value: bigOf(body[4]).toString(), data: hex(body[5]), gas: bigOf(body[2]).toString() };
}
// ---- the ordered receipts trie (reth's layout: key = RLP(index), value = the EIP-2718 receipt envelope) ----------
// Built in full from the shard's receipts, so the root is recomputed rather than proven: a shard is bounded by its pgas
// budget and holds at most a few hundred receipts.
function hpEncode(nibs, leaf) {
const odd = nibs.length % 2; const flag = (leaf ? 2 : 0) + odd;
const out = []; if (odd) out.push((flag << 4) | nibs[0]); else out.push(flag << 4, );
for (let i = odd; i < nibs.length; i += 2) out.push((nibs[i] << 4) | nibs[i + 1]);
return new Uint8Array(out);
}
function trieNode(items, keccak) {
// items: [{nibs, value}] sorted by nibs; returns the RLP of the node (inline when under 32 bytes, else its hash)
if (items.length === 0) return new Uint8Array(0);
const encode = node => { const enc = rlpEncode(node); return enc.length < 32 ? enc : keccak(enc); };
if (items.length === 1) return encode([hpEncode(items[0].nibs, true), items[0].value]);
let prefix = 0;
while (items.every(it => it.nibs.length > prefix && it.nibs[prefix] === items[0].nibs[prefix])) prefix++;
if (prefix > 0) {
const child = trieNode(items.map(it => ({ nibs: it.nibs.slice(prefix), value: it.value })), keccak);
return encode([hpEncode(items[0].nibs.slice(0, prefix), false), child.length === 32 && rlpEncode(child).length > 32 ? child : child]);
}
const branch = []; let value = new Uint8Array(0);
for (let b = 0; b < 16; b++) {
const sub = items.filter(it => it.nibs.length > 0 && it.nibs[0] === b).map(it => ({ nibs: it.nibs.slice(1), value: it.value }));
branch.push(sub.length ? trieNode(sub, keccak) : new Uint8Array(0));
}
const here = items.find(it => it.nibs.length === 0); if (here) value = here.value;
branch.push(value);
return encode(branch);
}
// Children are RLP-embedded when their encoding is under 32 bytes, else referenced by hash; trieNode returns either
// the short RLP or the 32-byte hash, and rlpEncode treats a Uint8Array as a string item: a short child must be
// spliced in raw, so the list encoder below handles both forms.
export function orderedTrieRoot(values, keccak) {
const items = values.map((v, i) => ({ nibs: nibblesOf(rlpEncode(trimBig(BigInt(i)))), value: v }));
items.sort((a, b) => { const n = Math.min(a.nibs.length, b.nibs.length); for (let k = 0; k < n; k++) if (a.nibs[k] !== b.nibs[k]) return a.nibs[k] - b.nibs[k]; return a.nibs.length - b.nibs.length; });
if (!items.length) return keccak(rlpEncode(new Uint8Array(0)));
const root = trieNodeTop(items, keccak);
return root;
}
function nibblesOf(b) { const out = []; for (const x of b) out.push(x >> 4, x & 15); return out; }
// the node forms: an Embedded child is spliced raw into the parent's list; a Hashed child is a 32-byte string item
class Raw { constructor(bytes) { this.bytes = bytes; } }
function rlpList(parts) {
const body = concat(parts.map(p => p instanceof Raw ? p.bytes : rlpEncode(p)));
const len = body.length; const head = len < 56 ? new Uint8Array([0xc0 + len]) : (() => { const b = []; let x = len; while (x > 0) { b.unshift(x & 0xff); x = Math.floor(x / 256); } return new Uint8Array([0xf7 + b.length, ...b]); })();
return concat([head, body]);
}
function build(items, keccak) { // returns { enc } the node's RLP
if (items.length === 1) return rlpList([hpEncode(items[0].nibs, true), items[0].value]);
let prefix = 0;
while (items.every(it => it.nibs.length > prefix && it.nibs[prefix] === items[0].nibs[prefix])) prefix++;
if (prefix > 0) {
const childEnc = build(items.map(it => ({ nibs: it.nibs.slice(prefix), value: it.value })), keccak);
return rlpList([hpEncode(items[0].nibs.slice(0, prefix), false), childEnc.length < 32 ? new Raw(childEnc) : keccak(childEnc)]);
}
const parts = [];
for (let b = 0; b < 16; b++) {
const sub = items.filter(it => it.nibs.length > 0 && it.nibs[0] === b).map(it => ({ nibs: it.nibs.slice(1), value: it.value }));
if (!sub.length) { parts.push(new Uint8Array(0)); continue; }
const enc = build(sub, keccak); parts.push(enc.length < 32 ? new Raw(enc) : keccak(enc));
}
const here = items.find(it => it.nibs.length === 0); parts.push(here ? here.value : new Uint8Array(0));
return rlpList(parts);
}
function trieNodeTop(items, keccak) { return keccak(build(items, keccak)); }
void trieNode;
// A receipt as the node encodes it for the trie (alloy ReceiptEnvelope::encode_2718): type byte for 1 and 2, then
// RLP([status, cumulative_gas_used, logs_bloom, [[address, [topics], data]...]]). Fields from eth_getBlockReceipts.
export function receiptEnvelope(r) {
const h = x => hexToBytes(strip(x));
const status = Number(r.status) === 1 ? new Uint8Array([1]) : new Uint8Array(0);
const logs = (r.logs || []).map(l => [h(l.address), (l.topics || []).map(h), h(l.data || '0x')]);
const body = rlpEncode([status, trimBig(BigInt(r.cumulativeGasUsed)), h(r.logsBloom), logs]);
const type = Number(r.type || 0);
return type === 1 || type === 2 ? concat([new Uint8Array([type]), body]) : body;
}
// ---- the payment receipt: the outcome authenticated through the proven segment's receipts commitment ------------
// `pr` = the inclusion receipt's fields plus: segment: { record_hex, carrier: {...as /balance}, headers: [carrier..checkpoint],
// shard_receipts_roots: [hex...], shard_index, receipts: [eth_getBlockReceipts rows of that shard, in order],
// receipt_position }. The transaction's chain block must be the segment's last block (the statement commits that
// block's receipts); the verifier says so when it is not.
export function verifyPaymentReceipt(pr, deps) {
const { blake2b, bls, keccak } = deps;
const base = verifyReceipt(pr, deps);
if (!base.verified) return { ...base, payment: false };
const steps = base.steps.slice(); const t0 = now();
const step = (name, fn) => { try { const d = fn(); steps.push({ name, ok: true, detail: d }); return d; } catch (e) { steps.push({ name, ok: false, detail: String(e.message || e) }); throw e; } };
const done = extra => ({ ...base, ...extra, steps, ms: Math.round((base.ms + now() - t0) * 10) / 10 });
try {
const seg = pr.segment;
if (!seg) throw Object.assign(new Error(pr.payment_unavailable || 'no proven segment record covers the chain block that executed this transaction yet'), { soft: true });
const cp = pr.checkpoint.certificate;
step('header chain from the record\'s carrier block up to the checkpoint', () => `${verifyHeaderPath(seg.headers, blake2b, seg.headers[0].hash, cp.hash)} headers`);
const record = step('the segment record is in the carrier\'s coinbase (hash recomputed, merkle path) and signed by its aggregator', () => {
const cb = coinbaseTxHash(seg.carrier.coinbase, blake2b, seg.carrier.amount_wire_len || 8);
const root = merkleRootFromPath(cb, Number(seg.carrier.leaf_index), seg.carrier.merkle_siblings.map(x => hexToBytes(strip(x))), blake2b);
if (bytesToHex(root) !== strip(seg.headers[0].hash_merkle_root)) throw new Error('the merkle path does not reach the carrier\'s hash_merkle_root');
const rec = segmentRecordsOf(hexToBytes(strip(seg.carrier.coinbase.payload))).find(r => bytesToHex(r.bytes) === strip(seg.record_hex));
if (!rec) throw new Error('the named segment record is not in the carrier\'s coinbase');
if (!verifySegmentRecordSignature(cp.chain_id, rec, bls)) throw new Error('the aggregator\'s signature does not verify');
return `record for blocks ${rec.first} to ${rec.last}, aggregator ${voteKeyHash(rec.pubkey, blake2b).slice(0, 12)}`;
}) && segmentRecordsOf(hexToBytes(strip(seg.carrier.coinbase.payload))).find(r => bytesToHex(r.bytes) === strip(seg.record_hex));
const st = record.statement;
step('the statement is for the chain block that executed the transaction', () => {
if (Number(st.number) !== Number(pr.execution.chain_block) || st.block_hash !== strip(pr.execution.chain_block_hash)) throw new Error(`the statement is for chain block ${st.number}, the transaction executed at ${pr.execution.chain_block}`);
return `chain block ${st.number}, ${st.shard_count} shard(s), receipts commitment ${st.receipts.slice(0, 12)}`;
});
step('the shard receipts roots hash to the statement\'s receipts commitment', () => {
const roots = seg.shard_receipts_roots.map(x => hexToBytes(strip(x)));
if (roots.length !== Number(st.shard_count)) throw new Error(`${roots.length} roots given, the statement names ${st.shard_count} shards`);
if (bytesToHex(keccak(concat(roots))) !== st.receipts) throw new Error('keccak over the shard receipts roots is not the statement\'s commitment');
return `${roots.length} root(s), shard ${seg.shard_index} is ${strip(seg.shard_receipts_roots[seg.shard_index]).slice(0, 12)}`;
});
const mine = step('the shard\'s receipts rebuild its receipts trie root, and the transaction\'s receipt sits in it', () => {
const root = bytesToHex(orderedTrieRoot(seg.receipts.map(receiptEnvelope), keccak));
if (root !== strip(seg.shard_receipts_roots[seg.shard_index])) throw new Error(`the ${seg.receipts.length} receipts rebuild root ${root.slice(0, 12)}, the committed root is ${strip(seg.shard_receipts_roots[seg.shard_index]).slice(0, 12)}`);
const r = seg.receipts[Number(seg.receipt_position)];
if (!r || strip(r.transactionHash) !== strip(pr.tx_hash)) throw new Error('the receipt at the named position is not this transaction\'s');
return `${seg.receipts.length} receipt(s), this one at position ${seg.receipt_position}, status ${Number(r.status) === 1 ? 'success' : 'failed'}, gas ${parseInt(r.gasUsed, 16)}, ${(r.logs || []).length} log(s)`;
}) && seg.receipts[Number(seg.receipt_position)];
const ok = Number(mine.status) === 1;
const outcome = ok ? { asset: 'IGN (the native coin)', recipient: base.tx.to, amount_wei: base.tx.value, logs: (mine.logs || []).map(l => ({ address: l.address, topics: l.topics, data: l.data })) } : null;
return done({ verified: true, payment: ok, outcome, receipt_status: ok ? 'success' : 'failed', note: ok ? 'the transfer outcome is authenticated through the proven segment\'s receipts commitment' : 'the transaction executed and FAILED: no transfer took place; authenticated the same way' });
} catch (e) {
if (e.soft) return done({ verified: true, payment: false, payment_unavailable: String(e.message || e) });
return done({ verified: false, payment: false, reason: String(e.message || e) });
}
}
export function formatIgn(wei, decimals = 18) {
const v = BigInt(wei); const base = 10n ** BigInt(decimals);
const whole = v / base; let frac = (v % base).toString().padStart(decimals, '0').replace(/0+$/, '');

View file

@ -8,8 +8,8 @@
<style>body{font-family:ui-monospace,Menlo,monospace;font-size:13px;background:#0C0C0E;color:#E8E4DA;padding:24px;max-width:1100px}h1{font-size:16px}h2{font-size:14px;margin-top:28px}table{display:block;overflow-x:auto;max-width:100%}code{overflow-wrap:anywhere}td{padding:4px 10px;border-bottom:1px solid #222;vertical-align:top}.ok{color:#7ED957}.bad{color:#F2541B}p{max-width:90ch}</style>
</head>
<body>
<h1>Igneum reference apps: the negative cases, in this tab (Devnet 3, no value)</h1>
<p>Each row runs <code>site/lc/core.js</code> on live Devnet 3 data from <code id="api"></code>. A tampered case must read <b>refused</b>; the genuine case must read <b>verified</b>. The same cases run under Node in <code>tools/reference-apps/light-service/verify.test.mjs</code>. Parameters: <code>?api=</code> (the read service), <code>?address=</code> (the balance to prove; default: the miner of the latest block), <code>?tx=</code> (a transaction; default: one in a recent block).</p>
<h1>Igneum reference apps: the negative cases, in this tab (devnet, no value)</h1>
<p>Each row runs <code>site/lc/core.js</code> on live devnet data from <code id="api"></code>. A tampered case must read <b>refused</b>; the genuine case must read <b>verified</b>. The same cases run under Node in <code>tools/reference-apps/light-service/verify.test.mjs</code>. Parameters: <code>?api=</code> (the read service), <code>?address=</code> (the balance to prove; default: the miner of the latest block), <code>?tx=</code> (a transaction; default: one in a recent block).</p>
<h2>Receipt</h2>
<table id="r"><thead><tr><td>case</td><td>result</td><td>ms</td><td>reason</td></tr></thead><tbody></tbody></table>
<h2>Balance</h2>

View file

@ -1,5 +1,5 @@
#!/usr/bin/env node
// Igneum receipt verifier (transaction inclusion receipt or payment receipt), one file, offline. Source: tools/reference-apps/receipt/verify-receipt.src.mjs and site/lc/core.js
// Igneum transaction inclusion receipt verifier, one file, offline. Source: tools/reference-apps/receipt/verify-receipt.src.mjs and site/lc/core.js
// (the same checks the browser page runs), bundled with @noble/hashes 2.4.0 and @noble/curves 2.4.0 (MIT). Usage: node verify-receipt.js receipt.json [--tamper]
// tools/reference-apps/receipt/verify-receipt.src.mjs
@ -2121,8 +2121,8 @@ var ScalarMultiplier = class {
}
/**
* Implements ec multiplication using precomputed signed fixed-window wNAF tables.
* Constant-time: fixed window count with one table addition per window — zero digits feed
* the fake accumulator — and no doublings; the lookup scans the whole window slice.
* Constant-time: fixed window count with one table addition per window, zero digits feed
* the fake accumulator, and no doublings; the lookup scans the whole window slice.
* Scalar bounds are validated by the public entry points ({@link ScalarMultiplier.mulCT},
* {@link ScalarMultiplier.mulCTBlinded}, {@link ScalarMultiplier.mulUnsafe});
* signedWindowDigits throws if `n` exceeds the table.
@ -2209,7 +2209,7 @@ var ScalarMultiplier = class {
* A cached wNAF table only pays off when reused; a flat 2^FW_WINDOW table (`size-1` adds) is
* far cheaper to build for a single use. The point-operation sequence is independent of `n`:
* build the table, then per window exactly FW_WINDOW doublings, a data-oblivious scan over
* every table entry, and one addition (adds the identity when the window digit is 0 — never
* every table entry, and one addition (adds the identity when the window digit is 0, never
* skipped).
*
* `n` must be `< 2^bits`. Assumes complete addition (adding the identity costs the same as any
@ -2217,7 +2217,7 @@ var ScalarMultiplier = class {
* projective form (no normalizeZ): normalizing this small a table costs more than the
* mixed-add savings it would buy for a single multiply.
* @returns real point `p`; `f` duplicates it only to match {@link wnafCachedCT}'s return shape
* (this path needs no fake accumulator — its op-count is already scalar-independent).
* (this path needs no fake accumulator, its op-count is already scalar-independent).
*/
fixedWindowCT(point, n, bits) {
const W = FW_WINDOW;
@ -5142,26 +5142,10 @@ function verifyCheckpoint(data, deps2) {
}
// site/lc/core.js
var DST_SEGMENT = "IGNEUM_SEGMENT_RECORD_V1_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_";
var SEGMENT_RECORD_LEN = 2 + 8 + 8 + 32 + 48 + 20 + 340 + 32 + 96;
var ZERO32 = new Uint8Array(32);
var te2 = new TextEncoder();
var strip = (s) => String(s).replace(/^0x/i, "");
var u64le = (v) => {
const b = new Uint8Array(8);
new DataView(b.buffer).setBigUint64(0, BigInt(v), true);
return b;
};
var u16le = (v) => {
const b = new Uint8Array(2);
new DataView(b.buffer).setUint16(0, Number(v), true);
return b;
};
var u32le = (v) => {
const b = new Uint8Array(4);
new DataView(b.buffer).setUint32(0, Number(v), true);
return b;
};
function concat2(parts) {
const n = parts.reduce((a, p) => a + p.length, 0);
const m = new Uint8Array(n);
@ -5187,114 +5171,6 @@ function merkleRootFromPath(leaf, index, siblings, blake2b2) {
}
return h;
}
function coinbaseTxHash(tx, blake2b2, amountWireLen = 8) {
const version = Number(tx.version || 0);
const parts = [u16le(version), u64le((tx.inputs || []).length)];
for (const inp of tx.inputs || []) {
parts.push(hexToBytes3(strip(inp.previousOutpoint.transactionId)), u32le(inp.previousOutpoint.index));
const sig = hexToBytes3(strip(inp.signatureScript || ""));
parts.push(u64le(sig.length), sig);
if (version < 1) parts.push(new Uint8Array([Number(inp.sigOpCount || 0)]));
parts.push(u64le(inp.sequence));
if (version >= 1) parts.push(u16le(inp.computeBudget || 0));
}
parts.push(u64le((tx.outputs || []).length));
for (const out of tx.outputs || []) {
const v = new Uint8Array(amountWireLen);
let x = BigInt(out.value);
for (let i = 0; i < amountWireLen; i++) {
v[i] = Number(x & 0xffn);
x >>= 8n;
}
const spk = hexToBytes3(strip(out.scriptPublicKey));
parts.push(v, spk.subarray(0, 2), u64le(spk.length - 2), spk.subarray(2));
if (version >= 1) parts.push(new Uint8Array([out.covenant ? 1 : 0]));
}
const payload = hexToBytes3(strip(tx.payload || ""));
parts.push(u64le(tx.lockTime || 0), hexToBytes3(strip(tx.subnetworkId)), u64le(tx.gas || 0), u64le(payload.length), payload);
const mass = BigInt(tx.mass || 0);
if (version < 1) {
if (mass > 0n) parts.push(u64le(mass));
} else parts.push(u64le(mass));
return keyed(blake2b2, "TransactionHash")(concat2(parts));
}
function coinbaseExtraData(payload) {
if (payload.length < 19) return new Uint8Array(0);
const scriptLen = payload[18];
return payload.subarray(19 + scriptLen);
}
function takeSection(extra, tag) {
const n = extra.length;
if (n < 8) return { items: null, before: extra };
const t2 = String.fromCharCode(...extra.subarray(n - 4));
if (t2 !== tag) return { items: null, before: extra };
const len = new DataView(extra.buffer, extra.byteOffset + n - 8, 4).getUint32(0, true);
if (len + 8 > n) return { items: null, before: extra };
return { items: extra.subarray(n - 8 - len, n - 8), before: extra.subarray(0, n - 8 - len) };
}
function segmentRecordsOf(payload) {
const extra = coinbaseExtraData(payload);
const f = takeSection(extra, "IGNF");
const p = takeSection(f.before, "IGNP");
const s = takeSection(p.before, "IGNS");
const out = [];
if (!s.items) return out;
for (let o = 0; o + SEGMENT_RECORD_LEN <= s.items.length; o += SEGMENT_RECORD_LEN) out.push(parseSegmentRecord(s.items.subarray(o, o + SEGMENT_RECORD_LEN)));
return out;
}
function parseSegmentRecord(b) {
if (b.length !== SEGMENT_RECORD_LEN) throw new Error(`segment record is ${b.length} bytes, not ${SEGMENT_RECORD_LEN}`);
const dv = new DataView(b.buffer, b.byteOffset, b.byteLength);
let o = 0;
const version = dv.getUint16(o, true);
o += 2;
const first = dv.getBigUint64(o, true);
o += 8;
const last = dv.getBigUint64(o, true);
o += 8;
const block = b.subarray(o, o + 32);
o += 32;
const pubkey = b.subarray(o, o + 48);
o += 48;
const payout = b.subarray(o, o + 20);
o += 20;
const publicValues = b.subarray(o, o + 340);
o += 340;
const proofHash = b.subarray(o, o + 32);
o += 32;
const signature = b.subarray(o, o + 96);
return { bytes: b, version, first, last, block, pubkey, payout, publicValues, proofHash, signature, statement: parseBlockStatement(publicValues) };
}
function parseBlockStatement(b) {
const dv = new DataView(b.buffer, b.byteOffset, b.byteLength);
const h = (o) => bytesToHex3(b.subarray(o, o + 32));
return {
chain_id: dv.getBigUint64(0),
number: dv.getBigUint64(8),
block_hash: h(16),
parent_hash: h(48),
shard_count: dv.getUint32(80),
tx_commitment: h(84),
pre_root: h(116),
post_root: h(148),
receipts: h(180),
gas_used: dv.getBigUint64(212),
pgas_used: dv.getBigUint64(220),
executed: dv.getUint32(228),
skipped: dv.getUint32(232),
provers: h(236),
shard_vk: h(268),
agg_vk: h(300),
chain_len: dv.getBigUint64(332)
};
}
function segmentRecordMessage(chainId, r2) {
return concat2([te2.encode("igneum-segment-record-v1/" + chainId), new Uint8Array([0]), u64le(r2.first), u64le(r2.last), r2.block, r2.payout, r2.publicValues, r2.proofHash]);
}
function verifySegmentRecordSignature(chainId, r2, bls2) {
const L = bls2.longSignatures;
return L.verify(r2.signature, L.hash(segmentRecordMessage(chainId, r2), DST_SEGMENT), r2.pubkey);
}
function rlpDecode(b) {
const [item, rest] = rlpItem(b, 0);
if (rest !== b.length) throw new Error("rlp: trailing bytes");
@ -5333,31 +5209,6 @@ function rlpItem(b, o) {
}
return [items, end];
}
function rlpEncode(item) {
if (item instanceof Uint8Array) {
if (item.length === 1 && item[0] < 128) return item;
return concat2([rlpLen(item.length, 128), item]);
}
const body = concat2(item.map(rlpEncode));
return concat2([rlpLen(body.length, 192), body]);
}
function rlpLen(n, base) {
if (n < 56) return new Uint8Array([base + n]);
const bytes = [];
let x = n;
while (x > 0) {
bytes.unshift(x & 255);
x = Math.floor(x / 256);
}
return new Uint8Array([base + 55 + bytes.length, ...bytes]);
}
var trimBig = (v) => {
v = BigInt(v);
if (v === 0n) return new Uint8Array(0);
let h = v.toString(16);
if (h.length % 2) h = "0" + h;
return hexToBytes3(h);
};
function verifyHeaderPath(headers, blake2b2, fromHash, toHash) {
if (!headers.length) throw new Error("no headers");
for (let i = 0; i < headers.length; i++) {
@ -5425,140 +5276,6 @@ function parseTx(raw) {
if (type === 1) return { type, chain_id: bigOf(body[0]).toString(), nonce: bigOf(body[1]).toString(), to: body[4].length ? hex(body[4]) : null, value: bigOf(body[5]).toString(), data: hex(body[6]), gas: bigOf(body[3]).toString() };
return { type: 0, nonce: bigOf(body[0]).toString(), to: body[3].length ? hex(body[3]) : null, value: bigOf(body[4]).toString(), data: hex(body[5]), gas: bigOf(body[2]).toString() };
}
function hpEncode(nibs, leaf) {
const odd = nibs.length % 2;
const flag = (leaf ? 2 : 0) + odd;
const out = [];
if (odd) out.push(flag << 4 | nibs[0]);
else out.push(flag << 4);
for (let i = odd; i < nibs.length; i += 2) out.push(nibs[i] << 4 | nibs[i + 1]);
return new Uint8Array(out);
}
function orderedTrieRoot(values, keccak) {
const items = values.map((v, i) => ({ nibs: nibblesOf(rlpEncode(trimBig(BigInt(i)))), value: v }));
items.sort((a, b) => {
const n = Math.min(a.nibs.length, b.nibs.length);
for (let k = 0; k < n; k++) if (a.nibs[k] !== b.nibs[k]) return a.nibs[k] - b.nibs[k];
return a.nibs.length - b.nibs.length;
});
if (!items.length) return keccak(rlpEncode(new Uint8Array(0)));
const root = trieNodeTop(items, keccak);
return root;
}
function nibblesOf(b) {
const out = [];
for (const x of b) out.push(x >> 4, x & 15);
return out;
}
var Raw = class {
constructor(bytes) {
this.bytes = bytes;
}
};
function rlpList(parts) {
const body = concat2(parts.map((p) => p instanceof Raw ? p.bytes : rlpEncode(p)));
const len = body.length;
const head = len < 56 ? new Uint8Array([192 + len]) : (() => {
const b = [];
let x = len;
while (x > 0) {
b.unshift(x & 255);
x = Math.floor(x / 256);
}
return new Uint8Array([247 + b.length, ...b]);
})();
return concat2([head, body]);
}
function build(items, keccak) {
if (items.length === 1) return rlpList([hpEncode(items[0].nibs, true), items[0].value]);
let prefix = 0;
while (items.every((it) => it.nibs.length > prefix && it.nibs[prefix] === items[0].nibs[prefix])) prefix++;
if (prefix > 0) {
const childEnc = build(items.map((it) => ({ nibs: it.nibs.slice(prefix), value: it.value })), keccak);
return rlpList([hpEncode(items[0].nibs.slice(0, prefix), false), childEnc.length < 32 ? new Raw(childEnc) : keccak(childEnc)]);
}
const parts = [];
for (let b = 0; b < 16; b++) {
const sub = items.filter((it) => it.nibs.length > 0 && it.nibs[0] === b).map((it) => ({ nibs: it.nibs.slice(1), value: it.value }));
if (!sub.length) {
parts.push(new Uint8Array(0));
continue;
}
const enc = build(sub, keccak);
parts.push(enc.length < 32 ? new Raw(enc) : keccak(enc));
}
const here = items.find((it) => it.nibs.length === 0);
parts.push(here ? here.value : new Uint8Array(0));
return rlpList(parts);
}
function trieNodeTop(items, keccak) {
return keccak(build(items, keccak));
}
function receiptEnvelope(r2) {
const h = (x) => hexToBytes3(strip(x));
const status = Number(r2.status) === 1 ? new Uint8Array([1]) : new Uint8Array(0);
const logs = (r2.logs || []).map((l) => [h(l.address), (l.topics || []).map(h), h(l.data || "0x")]);
const body = rlpEncode([status, trimBig(BigInt(r2.cumulativeGasUsed)), h(r2.logsBloom), logs]);
const type = Number(r2.type || 0);
return type === 1 || type === 2 ? concat2([new Uint8Array([type]), body]) : body;
}
function verifyPaymentReceipt(pr, deps2) {
const { blake2b: blake2b2, bls: bls2, keccak } = deps2;
const base = verifyReceipt(pr, deps2);
if (!base.verified) return { ...base, payment: false };
const steps = base.steps.slice();
const t0 = now();
const step = (name, fn) => {
try {
const d = fn();
steps.push({ name, ok: true, detail: d });
return d;
} catch (e) {
steps.push({ name, ok: false, detail: String(e.message || e) });
throw e;
}
};
const done = (extra) => ({ ...base, ...extra, steps, ms: Math.round((base.ms + now() - t0) * 10) / 10 });
try {
const seg = pr.segment;
if (!seg) throw Object.assign(new Error(pr.payment_unavailable || "no proven segment record covers the chain block that executed this transaction yet"), { soft: true });
const cp = pr.checkpoint.certificate;
step("header chain from the record's carrier block up to the checkpoint", () => `${verifyHeaderPath(seg.headers, blake2b2, seg.headers[0].hash, cp.hash)} headers`);
const record = step("the segment record is in the carrier's coinbase (hash recomputed, merkle path) and signed by its aggregator", () => {
const cb = coinbaseTxHash(seg.carrier.coinbase, blake2b2, seg.carrier.amount_wire_len || 8);
const root = merkleRootFromPath(cb, Number(seg.carrier.leaf_index), seg.carrier.merkle_siblings.map((x) => hexToBytes3(strip(x))), blake2b2);
if (bytesToHex3(root) !== strip(seg.headers[0].hash_merkle_root)) throw new Error("the merkle path does not reach the carrier's hash_merkle_root");
const rec = segmentRecordsOf(hexToBytes3(strip(seg.carrier.coinbase.payload))).find((r2) => bytesToHex3(r2.bytes) === strip(seg.record_hex));
if (!rec) throw new Error("the named segment record is not in the carrier's coinbase");
if (!verifySegmentRecordSignature(cp.chain_id, rec, bls2)) throw new Error("the aggregator's signature does not verify");
return `record for blocks ${rec.first} to ${rec.last}, aggregator ${voteKeyHash(rec.pubkey, blake2b2).slice(0, 12)}`;
}) && segmentRecordsOf(hexToBytes3(strip(seg.carrier.coinbase.payload))).find((r2) => bytesToHex3(r2.bytes) === strip(seg.record_hex));
const st = record.statement;
step("the statement is for the chain block that executed the transaction", () => {
if (Number(st.number) !== Number(pr.execution.chain_block) || st.block_hash !== strip(pr.execution.chain_block_hash)) throw new Error(`the statement is for chain block ${st.number}, the transaction executed at ${pr.execution.chain_block}`);
return `chain block ${st.number}, ${st.shard_count} shard(s), receipts commitment ${st.receipts.slice(0, 12)}`;
});
step("the shard receipts roots hash to the statement's receipts commitment", () => {
const roots = seg.shard_receipts_roots.map((x) => hexToBytes3(strip(x)));
if (roots.length !== Number(st.shard_count)) throw new Error(`${roots.length} roots given, the statement names ${st.shard_count} shards`);
if (bytesToHex3(keccak(concat2(roots))) !== st.receipts) throw new Error("keccak over the shard receipts roots is not the statement's commitment");
return `${roots.length} root(s), shard ${seg.shard_index} is ${strip(seg.shard_receipts_roots[seg.shard_index]).slice(0, 12)}`;
});
const mine = step("the shard's receipts rebuild its receipts trie root, and the transaction's receipt sits in it", () => {
const root = bytesToHex3(orderedTrieRoot(seg.receipts.map(receiptEnvelope), keccak));
if (root !== strip(seg.shard_receipts_roots[seg.shard_index])) throw new Error(`the ${seg.receipts.length} receipts rebuild root ${root.slice(0, 12)}, the committed root is ${strip(seg.shard_receipts_roots[seg.shard_index]).slice(0, 12)}`);
const r2 = seg.receipts[Number(seg.receipt_position)];
if (!r2 || strip(r2.transactionHash) !== strip(pr.tx_hash)) throw new Error("the receipt at the named position is not this transaction's");
return `${seg.receipts.length} receipt(s), this one at position ${seg.receipt_position}, status ${Number(r2.status) === 1 ? "success" : "failed"}, gas ${parseInt(r2.gasUsed, 16)}, ${(r2.logs || []).length} log(s)`;
}) && seg.receipts[Number(seg.receipt_position)];
const ok = Number(mine.status) === 1;
const outcome = ok ? { asset: "IGN (the native coin)", recipient: base.tx.to, amount_wei: base.tx.value, logs: (mine.logs || []).map((l) => ({ address: l.address, topics: l.topics, data: l.data })) } : null;
return done({ verified: true, payment: ok, outcome, receipt_status: ok ? "success" : "failed", note: ok ? "the transfer outcome is authenticated through the proven segment's receipts commitment" : "the transaction executed and FAILED: no transfer took place; authenticated the same way" });
} catch (e) {
if (e.soft) return done({ verified: true, payment: false, payment_unavailable: String(e.message || e) });
return done({ verified: false, payment: false, reason: String(e.message || e) });
}
}
function formatIgn(wei, decimals = 18) {
const v = BigInt(wei);
const base = 10n ** BigInt(decimals);
@ -5595,16 +5312,14 @@ if (args.includes("--tamper")) {
console.log(`tampered copy (one nibble of the raw transaction): ${t2.verified ? "NOT REFUSED, this verifier is broken" : "REFUSED"}${t2.reason ? " :: " + t2.reason : ""}`);
if (t2.verified) process.exit(1);
}
var r = receipt.segment ? verifyPaymentReceipt(receipt, deps) : verifyReceipt(receipt, deps);
var payment = !!(r.verified && r.payment);
console.log(`${payment ? "PAYMENT RECEIPT" : "TRANSACTION INCLUSION RECEIPT"} 0x${receipt.tx_hash} on ${receipt.chain_id} (Devnet 3, no value)`);
console.log(payment ? "What this file authenticates: that the signed transaction is included in a finalised block and executed with status success, its receipt sitting in the shard receipts trie whose root the proven segment statement commits to. Trusted: the voter table from the node; the SP1 proof behind the statement is verified by nodes, not here." : "What this file authenticates: that the signed transaction is included in a block that is finalised. What it does not: the execution outcome (status, gas), which is carried as the node reported it." + (receipt.payment_unavailable ? " Why no payment receipt: " + receipt.payment_unavailable : ""));
var r = verifyReceipt(receipt, deps);
console.log(`TRANSACTION INCLUSION RECEIPT 0x${receipt.tx_hash} on ${receipt.chain_id} (devnet, no value)`);
console.log("What this file authenticates: that the signed transaction is included in a block that is finalised. What it does not: the execution outcome (status, gas), which is carried as the node reported it. A payment receipt, which authenticates the transfer outcome, is a different file.");
print(r);
if (!r.verified) {
console.log(`REFUSED: ${r.reason}`);
process.exit(1);
}
var t = r.tx;
if (payment) console.log(`PAYMENT VERIFIED in ${r.ms} ms: ${formatIgn(t.value)} IGN (${t.value} wei of the native coin) to ${t.to || "contract creation"}, executed with status success (${r.outcome.logs.length} log(s)) at chain block ${receipt.execution.chain_block}, in block ${r.block.slice(0, 16)} at DAA ${r.block_daa}, finalised under checkpoint ${r.checkpoint}; ${r.certificate}.`);
else console.log(`INCLUSION VERIFIED in ${r.ms} ms: a signed transaction of ${formatIgn(t.value)} IGN to ${t.to || "contract creation"} (${t.value} wei) is included in block ${r.block.slice(0, 16)} at DAA ${r.block_daa} (${new Date(Number(r.block_time)).toISOString()}), finalised under checkpoint ${r.checkpoint}; ${r.headers} headers checked; ${r.certificate}.`);
console.log("Reported by the node, not authenticated by this file: from " + (receipt.tx_as_reported && receipt.tx_as_reported.from) + (payment ? "" : receipt.execution ? `, executed with status ${receipt.execution.status === "0x1" ? "success" : "failed"}` : "") + ". The voter table with weights came from the node (spec 10.1). In the four words: " + (payment ? "included, executed, proven and finalised are authenticated under the stated trust." : "included and finalised are authenticated, executed is reported, proven is not claimed."));
console.log(`INCLUSION VERIFIED in ${r.ms} ms: a signed transaction of ${formatIgn(t.value)} IGN to ${t.to || "contract creation"} (${t.value} wei) is included in block ${r.block.slice(0, 16)} at DAA ${r.block_daa} (${new Date(Number(r.block_time)).toISOString()}), finalised under checkpoint ${r.checkpoint}; ${r.headers} headers checked; ${r.certificate}.`);
console.log("Reported by the node, not authenticated by this file: from " + (receipt.tx_as_reported && receipt.tx_as_reported.from) + (receipt.execution ? `, executed with status ${receipt.execution.status === "0x1" ? "success" : "failed"}` : "") + ". The voter table with weights came from the node (spec 10.1). In the four words: included and finalised are authenticated, executed is reported, proven is not claimed.");

File diff suppressed because it is too large Load diff

View file

@ -4,14 +4,14 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum light wallet</title>
<meta name="description" content="A Devnet 3 balance your browser proves itself: certificate, headers, coinbase, segment record and account proof, all recomputed in the tab. Devnet 3, no value.">
<meta name="description" content="A devnet balance your browser proves itself: certificate, headers, coinbase, segment record and account proof, all recomputed in the tab. The devnet, no value.">
<link rel="canonical" href="https://igneum.network/light">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum light wallet">
<meta property="og:description" content="A Devnet 3 balance your browser proves itself: certificate, headers and account proof, recomputed in the tab.">
<meta property="og:description" content="A devnet balance your browser proves itself: certificate, headers and account proof, recomputed in the tab.">
<meta property="og:url" content="https://igneum.network/light">
<meta property="og:image" content="https://igneum.network/og/light.png?v=4">
<meta property="og:image:type" content="image/png">
@ -25,7 +25,7 @@
<meta property="og:image:alt" content="A balance your browser proves. igneum.network/light">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum light wallet">
<meta name="twitter:description" content="A Devnet 3 balance your browser proves itself: certificate, headers and account proof, recomputed in the tab.">
<meta name="twitter:description" content="A devnet balance your browser proves itself: certificate, headers and account proof, recomputed in the tab.">
<meta name="twitter:image" content="https://igneum.network/og/light.png?v=4">
<meta name="twitter:image:alt" content="A balance your browser proves. igneum.network/light">
<!-- share:end -->
@ -80,10 +80,10 @@
.steps li{display:grid;grid-template-columns:84px 1fr;gap:4px 12px;background:var(--row);border:1px solid var(--line);border-radius:var(--r-row);padding:10px 14px;font-size:14px;color:var(--ink-2)}
.steps li b{font:500 11px/1.6 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ember-text)}.steps li.bad b{color:var(--molten-text)}
.steps li small{grid-column:2;color:var(--ash);font-family:var(--f-mono);font-size:12px;overflow-wrap:anywhere}
.why{border:1px solid var(--line-2);border-radius:var(--r-card);padding:var(--s-4) var(--s-5);background:var(--obsidian);margin:var(--s-5) 0}
.why{border:1px solid var(--line-2);border-radius:var(--r-card);padding:var(--s-5) var(--s-5);background:var(--obsidian);margin:var(--s-5) 0}
.why p{margin:0;font-size:15px;color:var(--ink-2)}.why p+p{margin-top:8px}
.meta{display:grid;gap:6px;font:400 13px/1.6 var(--f-mono);color:var(--ash);margin:var(--s-4) 0 0}.meta code{overflow-wrap:anywhere}
.terms{margin:var(--sec,64px) 0 var(--s-5)}.terms .kv>div{font-size:14px}.trust{border:1px solid var(--molten);border-radius:var(--r-card);padding:var(--s-4) var(--s-5);background:var(--row);margin:var(--s-4) 0}
.terms{margin:var(--sec,64px) 0 var(--s-5)}.terms .kv>div{font-size:14px}.trust{border:1px solid var(--molten);border-radius:var(--r-card);padding:var(--s-5) var(--s-5);background:var(--row);margin:var(--s-4) 0}
.trust h3{margin:0 0 8px;font-size:15px;color:var(--molten-text)}.trust ul{margin:0;padding-left:18px;font-size:14px;color:var(--ink-2);line-height:1.5}.trust li+li{margin-top:4px}
@media (max-width:640px){.steps li{grid-template-columns:1fr}.steps li small{grid-column:1}}
</style>
@ -97,7 +97,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -127,12 +127,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light" aria-current="page"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -150,7 +148,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -171,12 +169,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light" aria-current="page"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -190,7 +186,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -250,11 +246,11 @@
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Light wallet</span></div>
<div class="eyebrow"><span class="line"></span>Reference app 1 · Devnet 3, no value</div>
<div class="eyebrow"><span class="line"></span>Reference app 1 · the devnet, no value</div>
<h1>A balance verified in your browser, trust stated<span class="accent">.</span></h1>
</div>
<p class="note"><b>A GPU-secured network for Ethereum-compatible applications and verifiable computation.</b> Devnet, no value.</p>
<p class="note">Paste a Devnet 3 address. This tab fetches the latest finality certificate, the header chain, the carrier block's coinbase, the segment record and an account proof from a read service, then recomputes every link itself: BLS over the checkpoint, every header hash and parent link, the merkle path, the aggregator's signature, the Merkle Patricia proof under the committed state root. This is a verification path with stated trust assumptions, listed below; it is not a browser that needs no trusted inputs. The read service cannot change what those inputs commit to. It can only refuse to answer.</p>
<p class="note">Paste a devnet address. This tab fetches the latest finality certificate, the header chain, the carrier block's coinbase, the segment record and an account proof from a read service, then recomputes every link itself: BLS over the checkpoint, every header hash and parent link, the merkle path, the aggregator's signature, the Merkle Patricia proof under the committed state root. This is a verification path with stated trust assumptions, listed below; it is not a browser that needs no trusted inputs. The read service cannot change what those inputs commit to. It can only refuse to answer.</p>
<div class="trust"><h3>Trusted inputs, stated</h3><ul>
<li>The voter table with weights comes from the node (no header field commits to it yet; spec 10.1). A node that lies about the table could present a different set of signers.</li>
<li>The aggregator's execution statement (the state root in the segment record) is taken as the true execution result. Nodes check it against their own execution before paying the record; a carried record that fails that check is ignored, not a block fault.</li>
@ -269,16 +265,16 @@
<section class="card" aria-labelledby="verify">
<h2 id="verify">Verify a balance</h2>
<form class="vform" data-form="light" novalidate>
<label for="address">Devnet 3 address</label>
<label for="address">Devnet address</label>
<div class="row"><input id="address" name="address" inputmode="text" autocomplete="off" spellcheck="false" placeholder="0x…" pattern="^0x[0-9a-fA-F]{40}$"><button class="btn primary" type="submit">Verify in this tab</button></div>
<div class="vstatus" data-status role="status" aria-live="polite">Devnet 3, no value. Nothing here is a wallet that sends. It reads and proves.</div>
<div class="vstatus" data-status role="status" aria-live="polite">The devnet, no value. Nothing here is a wallet that sends. It reads and proves.</div>
</form>
<div data-result></div>
</section>
<h2 id="checked">What is checked, in order</h2>
<ol>
<li>The certificate: the aggregate BLS signature of the signers over <code>igneum-vote-v1/igneum-devnet-3 || index || checkpoint hash</code>, the canonical voter order, the rule (two thirds of active weight and two thirds of total weight), and the header chain from the previous lock.</li>
<li>The certificate: the aggregate BLS signature of the signers over <code>igneum-vote-v1/{network id} || index || checkpoint hash</code>, the canonical voter order, the rule (two thirds of active weight and two thirds of total weight), and the header chain from the previous lock.</li>
<li>The header path from the carrier block up to the certified checkpoint: every header hash recomputes (BLAKE2b-256 keyed BlockHash over the header fields), every next header names the previous as a direct parent.</li>
<li>The coinbase transaction is in the carrier block: its hash recomputes (BLAKE2b-256 keyed TransactionHash over the serialized transaction) and the merkle path reaches the header's <code>hash_merkle_root</code>.</li>
<li>The segment record in the coinbase extra data: the aggregator's BLS signature over the record under the network's tag, whether the key is a voter with weight or a prove-only key, and the statement names the chain and the block whose state it commits.</li>
@ -294,15 +290,16 @@
<div class="k">Proven</div><div>An aggregator's segment record, carried in a block's coinbase and signed with its vote key, commits to the state root after that chain block; nodes check the statement against their own execution before paying it. The SP1 proof behind the statement is verified by nodes, not in the browser or on Sepolia.</div>
<div class="k">Finalised</div><div>A certified checkpoint has the block in its past: an aggregate BLS signature by voters holding two thirds of active weight and at least 17/30 of total weight over the checkpoint, checked here against the voter table the node supplies.</div>
</div>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). Devnet 3, no value.</p>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). The devnet, no value.</p>
</section>
<!-- terms:end -->
<p class="asof">Devnet 3, no value. The chain may reset. Pages like this one are demonstrations of the verification path, not a product.</p>
<p class="asof">The devnet, no value. The chain may reset. Pages like this one are demonstrations of the verification path, not a product.</p>
</main>
<script type="module" src="/lc/app.js"></script>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -328,7 +325,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -340,7 +336,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -366,7 +361,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -374,7 +369,6 @@
(function(){
// one request per button; the wallet shows the chain to the user and decides. No key, no seed, no signature here.
var CHAINS = {
testnet: { chainId: '0x116e', chainName: 'Igneum Testnet', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['https://rpc.testnet.igneum.network'], blockExplorerUrls: [] },
devnet: { chainId: '0x116f', chainName: 'Igneum Devnet (local node)', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['http://127.0.0.1:26790'], blockExplorerUrls: [] }
};
function status(name, text) { var el = document.querySelector('[data-status="' + name + '"]'); if (el) el.textContent = text; }

View file

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Litepaper: how the chain works</title>
<meta name="description" content="The Igneum litepaper. The hourly GPU lottery, blocks proven by miners, GHOSTDAG ordering, miner-only finality, the 4 billion cap. No premine, no stake.">
<meta name="description" content="The Igneum litepaper. A GPU-secured network for Ethereum-compatible applications and verifiable computation. GPU mining, proven execution, GHOSTDAG ordering, miner-only finality, the 4 billion cap. No premine, no stake.">
<link rel="canonical" href="https://igneum.network/litepaper">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
@ -146,7 +146,7 @@ body.all .pager{display:none}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -176,12 +176,10 @@ body.all .pager{display:none}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -199,7 +197,7 @@ body.all .pager{display:none}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -220,12 +218,10 @@ body.all .pager{display:none}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper" aria-current="page"><b>Litepaper</b><span>The design, as published.</span></a>
@ -239,7 +235,7 @@ body.all .pager{display:none}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -301,14 +297,14 @@ body.all .pager{display:none}
<header class="cover">
<div>
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>The litepaper</span></div>
<div class="eyebrow"><span class="line"></span>The litepaper · version 0.2</div>
<div class="eyebrow"><span class="line"></span>The litepaper · Igneum 2.0</div>
<h1>Mined by GPUs.<br>Proven by fire.</h1>
<div class="tag">A proof-of-work chain whose miners also prove every block, run Ethereum's apps, and are protected from specialised chips by a program that changes every hour.</div>
<div class="tag">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</div>
</div>
<div class="meta">
<span>Published <b>3 October 2026</b> · updated <b>7 October 2026</b></span>
<span>Published <b>3 October 2026</b> · updated <b>8 October 2026</b></span>
<span>Coin <b>IGN</b> · cap <b>4,000,000,000</b></span>
<span>Status <b>Devnet 3 live, testnet armed</b></span>
<span>Status <b>The Igneum 2.0 devnet is starting</b></span>
<span>Method <b>one founder with AI systems</b> · external review before gate 3</span>
<span>This is not an offer to sell anything</span>
</div>
@ -345,11 +341,11 @@ body.all .pager{display:none}
<article>
<section id="abstract">
<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. Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment. <a href="#chip-model">The chip model</a>: every number labelled measured, modelled or claimed, the harness and the scoring rules beside it.</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 class="lead">A GPU-secured network for Ethereum-compatible applications and verifiable computation. Igneum is a proof-of-work chain built for graphics cards. AMD, Apple and NVIDIA cards mine; NVIDIA cards also prove its blocks with zero-knowledge proofs. Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment. <a href="#chip-model">The chip model</a>: every number labelled measured, modelled or claimed, the harness and the scoring rules beside it.</p>
<p>It runs the Ethereum virtual machine through revm, so contracts built for Ethereum deploy with familiar tools; the differences (block context, randomness, two-dimensional fees) are documented. Transactions are included in about one second, proven within about a minute at launch, and locked by miners within about two (designed targets). 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 is built to stay open to anyone with a GPU. The argument rests on the scoring rule's result against placed adversary designs and on the economics, reported separately as energy advantage, economic advantage and response capability. The hourly program is an optional improvement, not the defence. 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="stat"><div class="v">1 / s</div><div class="k">blocks, rising to 10</div></div>
<div class="stat"><div class="v">~60 s</div><div class="k">to a proof at launch</div></div>
<div class="stat"><div class="v">1 / s</div><div class="k">blocks, rising to 10 (designed)</div></div>
<div class="stat"><div class="v">~60 s</div><div class="k">to a proof at launch (designed)</div></div>
<div class="stat"><div class="v">0</div><div class="k">premine or stake</div></div>
<div class="stat"><div class="v">100%</div><div class="k">to miners and provers</div></div>
</div>
@ -359,12 +355,12 @@ body.all .pager{display:none}
<h2>Precedents, and what Igneum adds</h2>
<p>Every piece of Igneum has a precedent somewhere. We know of no chain that combines them. The table names the closest precedent for each piece, what Igneum adds, and how far each piece has got. It will be corrected when shown wrong.</p>
<div class="tbl"><table>
<thead><tr><th>Piece</th><th>Closest precedent</th><th>What Igneum adds</th><th>State, 7 Oct 2026</th></tr></thead>
<thead><tr><th>Piece</th><th>Closest precedent</th><th>What Igneum adds</th><th>State, 8 Oct 2026</th></tr></thead>
<tbody>
<tr><td>A mining program that regenerates itself, for GPUs</td><td>RandomX on Monero since 2019, for CPUs, a program per hash; one chip shipped against it, Bitmain’s Antminer X5 (September 2023), a board of RISC-V chips at 1.46x per joule over a desktop CPU, on silicon believed mining privately from about 2021; the X9 was withdrawn in May 2026 with zero units; RandomX v2 was released on 25 March 2026 with its activation pending. 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 and v1 on Devnet 3 from block zero (7 October 2026), v0 on the first 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>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 v3 live on Devnet 3 from block zero, first lock 7 October 2026; rule v2 ran the first devnet from its first lock on 4 October 2026. External review is owed at gate 3</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; one chip shipped against it, Bitmain’s Antminer X5 (September 2023), a board of RISC-V chips at 1.46x per joule over a desktop CPU, on silicon believed mining privately from about 2021; the X9 was withdrawn in May 2026 with zero units; RandomX v2 was released on 25 March 2026 with its activation pending. 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 program swaps on Apple, NVIDIA and AMD cards, 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 and v1 on the devnet from block zero, on NVIDIA cards. The job market for other chains is Designed</td></tr>
<tr><td>A proof-of-work chain where every block is proven</td><td>Proven-execution EVM chains 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. Proof verification enforced in consensus is Open</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 v3 live on the devnet from block zero. External review is owed at gate 3</td></tr>
<tr><td>100% of emission to the people running the hardware</td><td>Kaspa's fair launch. Zcash and Decred fund developers from emission (approximate)</td><td>No fee to any team, foundation or fund in the protocol. The miner software's optional 1% dev fee is the one payment to the project, off with one flag</td><td>Implemented in consensus: the 80/20 coinbase on the devnet</td></tr>
<tr><td>A chain your browser verifies by itself</td><td>Light clients trust a committee, as Ethereum's trust a sync committee (approximate)</td><td>At launch, one execution proof plus a certificate the client is given. The consensus proof that makes the checkpoint self-verifying is phase two</td><td>Designed. The home page's card verifies a devnet certificate in the browser today, with the voter list taken from a node</td></tr>
</tbody>
@ -398,7 +394,7 @@ body.all .pager{display:none}
<rect x="50" y="48" width="400" height="72" rx="8" fill="var(--surface)" stroke="var(--line)" stroke-width="1.25"></rect>
<text x="66" y="72" font-size="13" font-weight="600" fill="var(--ink)">1. Mining lottery</text>
<text x="66" y="90" fill="var(--ink)">A random GPU program picks who makes the next block</text>
<text x="66" y="106" fill="var(--quiet)">New program every hour: a chip wired for one program is useless</text>
<text x="66" y="106" fill="var(--quiet)">A new program every hour; the chip model scores the rest</text>
</g>
<g>
<rect x="50" y="152" width="400" height="72" rx="8" fill="var(--surface)" stroke="var(--line)" stroke-width="1.25"></rect>
@ -410,12 +406,12 @@ body.all .pager{display:none}
<rect x="50" y="256" width="400" height="72" rx="8" fill="var(--surface)" stroke="var(--line)" stroke-width="1.25"></rect>
<text x="66" y="280" font-size="13" font-weight="600" fill="var(--ink)">3. EVM execution</text>
<text x="66" y="298" fill="var(--ink)">Blocks carry transactions only; the proof computes the state</text>
<text x="66" y="314" fill="var(--quiet)">Solidity, wallets and tooling work unchanged</text>
<text x="66" y="314" fill="var(--quiet)">Familiar Solidity, wallets and tooling; differences documented</text>
</g>
<g>
<rect x="50" y="360" width="400" height="72" rx="8" fill="var(--tint)" stroke="var(--ember)" stroke-width="2"></rect>
<text x="66" y="384" font-size="13" font-weight="600" fill="var(--ink)">4. Miners prove the block</text>
<text x="66" y="402" fill="var(--ink)">Shards proven on consumer GPUs, aggregated into one proof</text>
<text x="66" y="402" fill="var(--ink)">Shards proven on NVIDIA cards, aggregated into one proof</text>
<text x="66" y="418" fill="var(--quiet)">Lands within about a minute at launch, paid from gas</text>
</g>
<g>
@ -427,34 +423,34 @@ body.all .pager{display:none}
<g>
<rect x="504" y="360" width="232" height="72" rx="8" fill="var(--surface)" stroke="var(--line)" stroke-width="1.25"></rect>
<text x="520" y="384" font-size="13" font-weight="600" fill="var(--ink)">External proving jobs</text>
<text x="520" y="402" fill="var(--ink)">Rollups and bridges pay Igneum</text>
<text x="520" y="418" fill="var(--quiet)">Same GPUs, same proof format</text>
<text x="520" y="402" fill="var(--ink)">Designed: rollups and bridges buy proofs</text>
<text x="520" y="418" fill="var(--quiet)">Same NVIDIA cards, same proof format</text>
</g>
<g fill="var(--quiet)"><text x="260" y="142">winning block</text><text x="260" y="246">ordered blocks</text><text x="260" y="350">state transitions</text><text x="260" y="454">aggregated proof</text></g>
</svg>
<div class="cap">Five layers plus the external proving market. A block flows down the column; outside demand feeds the same miners from the side.</div>
</div>
<h3>Live on Devnet 3, 7 October 2026</h3>
<p>Devnet 3 (<span data-rm="network.id">igneum-devnet-3</span>, chain id <span data-rm="network.chain_id">4464</span> since its class v5 floor at DAA <span data-rm="mining.class_since_daa">68,400</span>, 4463 from genesis to the floor; the chain’s current state is the <a href="/release.json">release manifest</a>) made its first block at 18:06 UK on 7 October 2026 with every upgrade on from block zero, and locked its first checkpoint at 20:02 UK. The first devnet ran from 3 October 2026 and took each upgrade by height. Coins on Devnet 3 have no value and the chain may be reset. What is on it:</p>
<h3>Live on the devnet</h3>
<p>The Igneum 2.0 devnet is the network. Its coins have no value and the chain may be reset. What is on it:</p>
<div class="tbl"><table>
<thead><tr><th>Layer</th><th>State</th><th>Since</th></tr></thead>
<tbody>
<tr><td>Mining lottery</td><td>Class v4 (sub-version 3) from the first block: the latency-shadow program, a new program every hour on Apple, NVIDIA and AMD cards, compiled ahead, the era VDF armed, the ladder at rung 0</td><td class="num">block zero, 7 Oct 2026</td></tr>
<tr><td>Blocks</td><td>One a second is the target; the live page reads the rate from the observer</td><td class="num">block zero, 7 Oct 2026</td></tr>
<tr><td>Difficulty</td><td>Rule v2, a 600-second reference window, from the first block (the first devnet switched to it by height at DAA 33,000 on 4 Oct 2026)</td><td class="num">block zero, 7 Oct 2026</td></tr>
<tr><td>Finality</td><td>Rule v3: a checkpoint every 30 s of chain, locked at two thirds of all 30-day weight, the weight table frozen at the last lock during a pause. First lock 20:02 UK, 7 Oct 2026. No coin is staked. The only thing at stake is 30 days of public work: a vote key's weight is its blue blocks over the window, and equivocation strips it for 30 days</td><td class="num">block zero, 7 Oct 2026</td></tr>
<tr><td>Proving</td><td>v0 and v1 from the first block: shards are assigned to miners' keys, proven on their cards, aggregated into segment records and carried in blocks; fees calibrated</td><td class="num">block zero, 7 Oct 2026</td></tr>
<tr><td>Ember</td><td>The one-click miner, version 0.3.22 on channel devnet-3 (7 Oct 2026); the app window still says Igneum Miner</td><td class="num">4 Oct 2026, first install</td></tr>
<tr><td>Wallet</td><td>Igneum Wallet 0.1.5 on macOS (0.1.1 first shipped 5 Oct 2026)</td><td class="num">7 Oct 2026</td></tr>
<tr><td>Mining lottery</td><td>Class v4 (sub-version 3) from the first block: the latency-shadow program, a new program every hour on Apple, NVIDIA and AMD cards, compiled ahead, the era VDF armed, the ladder at rung 0</td><td class="num">block zero</td></tr>
<tr><td>Blocks</td><td>One a second is the target; the live page reads the rate from the observer</td><td class="num">block zero</td></tr>
<tr><td>Difficulty</td><td>Rule v2, a 600-second reference window, from the first block</td><td class="num">block zero</td></tr>
<tr><td>Finality</td><td>Rule v3: a checkpoint every 30 s of chain, locked at two thirds of all 30-day weight, the weight table frozen at the last lock during a pause. No coin is staked. The only thing at stake is 30 days of public work: a vote key's weight is its blue blocks over the window, and equivocation strips it for 30 days</td><td class="num">block zero</td></tr>
<tr><td>Proving</td><td>v0 and v1 from the first block: shards are assigned to miners' keys, proven on their NVIDIA cards, aggregated into segment records and carried in blocks; fees calibrated</td><td class="num">block zero</td></tr>
<tr><td>Ember</td><td>The one-click miner, on the devnet channel</td><td class="num">4 Oct 2026, first install</td></tr>
<tr><td>Wallet</td><td>Igneum Wallet on macOS</td><td class="num">5 Oct 2026, first shipped</td></tr>
</tbody>
</table></div>
<p class="src"><b>Measured:</b> the 0.3.22 release record (7 October 2026: genesis, first block, the gate lines and the first lock); engineering log, "first hourly program swap on the live devnet", "difficulty rule v2 activated on the live devnet at DAA 33,000", "first finality lock on the live devnet" (4 October 2026, the first devnet). The block rate and the first lock are rows 7 and 10 of the evidence table.</p>
<p>Two caveats, stated here before anyone else states them. Consensus does not yet verify a carried proof; it checks the record's statement against native execution and its signature, and the in-consensus verifier switches on when the proven share of blocks reads one. And the devnet is the project's own machines, its rented fleet and a few outside laptops. Nothing here has been reproduced by anyone outside the project yet; the evidence page says so row by row.</p>
<p class="src"><b>Source:</b> the facts page carries the network row; the block rate and the lock are rows of the evidence table.</p>
<p>Two caveats, stated here before anyone else states them. Consensus does not yet verify a carried proof. Today, under proving v0, every producer verifies off the consensus path, and consensus checks the record's statement against native execution and its signature. Open: proof verification enforced in consensus (verifier_in_consensus, proof_rule_active_from) is the prerequisite of the no-rescue network exercise (Deliverable 5) and of the proving economy being a protocol guarantee. And the devnet is the project's own machines, its rented fleet and a few outside laptops. Nothing here has been reproduced by anyone outside the project yet; the evidence page says so row by row.</p>
</section>
<section id="mining">
<h2>Mining: a program that never holds still</h2>
<p>Every GPU chain that promised ASIC resistance shipped a fixed algorithm, and a fixed algorithm gets a chip the moment the prize pays for one. Igneum does not have a fixed algorithm.</p>
<h2>Mining: commodity GPUs, scored against a chip</h2>
<p>Every GPU chain that promised ASIC resistance shipped a fixed algorithm, and a fixed algorithm gets a chip the moment the prize pays for one. Igneum does not assume its algorithm keeps chips away. It assumes a specialised chip exists, seeks profit and stays compatible, and it states how far ahead that chip gets.</p>
<p>Each hour the chain derives a seed from a locked checkpoint one epoch back, passes it through a ten-minute verifiable delay so no miner can see which program a seed implies before choosing whether to publish a block, and feeds it to a deterministic generator. The generator emits a random integer program built from what graphics cards are uniquely good at: wide parallel integer maths, shuffles between the 32 lanes of a warp, and dependent reads spread over a multi-gigabyte dataset that changes daily, so the program waits on memory latency, not on maths or bandwidth. Measured: an RTX 5090 hashes at 95 GB/s of useful 4-byte loads against 1,638 GB/s of sequential writes (engineering log, the RTX 5090 entries). The memory footprint and instruction count are fixed and only the maths sequence is random, so no hour favours one vendor's cards and nobody gains by grinding the seed. Miners compile the program once per hour. Anyone running a node, a wallet or an exchange checks a hash on an ordinary CPU in under ten milliseconds by simulating one warp, so nobody needs a GPU except to mine. Measured: 0.61 ms per warp on one Apple M5 Max core for class v2 and 2.1 ms for class v3 (the mixer at x8, 5 October 2026, one core at load average 5.5, worst cold unit 2.15 ms), 3.4x the class v2 verifier; the 10 ms gate leaves 4.8x (4.6x on the worst cold unit); a 2019-class laptop core is not yet measured.</p>
<p>The hash is a lottery, not a general-purpose cryptographic hash. It has to be unpredictable per nonce, free of any shortcut cheaper than honest evaluation, and free of bias a miner can exploit. It does not need preimage or collision resistance. Open: no analysis of the lottery properties exists yet. It is the first job of the external review in phase 1, and until then the hash is a design claim backed by the measurements below.</p>
<div class="tbl"><table>
@ -464,23 +460,23 @@ body.all .pager{display:none}
<tr><td>Every hour</td><td>A new random program</td><td>No, the miner compiles whatever arrives</td></tr>
<tr><td>Every day</td><td>A new dataset</td><td>No</td></tr>
<tr><td>Every six months</td><td>A new instruction mix and memory pattern drawn by the chain from rules fixed at genesis, and a new family of instructions unlocked from a reserve written at genesis, so the program space widens every era. A schedule change against fixed datapaths and human forks, not a surprise: a programmable chip reads every drawn parameter as firmware</td><td>No</td></tr>
<tr><td>Continuously</td><td>The dataset grows on a schedule fixed at genesis, slowly enough that consumer cards keep up for years. A chip is built with fixed memory, so it is on a countdown from the day it ships. Ethereum's growing dataset ran Bitmain's E3 out of memory in 2020 this way, approximate, with nobody doing anything</td><td>No</td></tr>
<tr><td>Continuously</td><td>The dataset grows on a schedule fixed at genesis, slowly enough that consumer cards keep up for years. Each step is scored against the burden it puts on ordinary cards (Deliverable 3); growth is not counted on to retire a chip</td><td>No</td></tr>
</tbody>
</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. Measured (8 October 2026; lane D’s family harness at the acceptance rule’s own 2^20 sample over 4,900 drawn eras, and the chained-cache pass’s reading of the night before): every hash’s 128 dependent reads land across the whole dataset and the distinct-index floor holds at 0.995 on every accepted program; about half of epochs carry one load site whose address bit at the era’s stride rotation is biased, which prices about 1.6 percent of a hash’s reads to a chip storing half the dataset and nothing to a chip storing all of it; the next class folds the product’s low bits before the rotation, so no era lands a biased bit on an address bit. 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 against a chip is scored under the rule in the chip model below. 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>What carries the chip resistance is the scoring rule's result on the placed adversary rows, plus the economics, reported separately in the chip model below. Three properties feed it. <strong>Rotation is an option, not the defence.</strong> A new program every hour, drawn from the chain, its memory pattern with it, and rules that change on a schedule fixed at launch. These schedule changes defeat a chip wired for one datapath and need no human fork, but against a programmable chip that stores the dataset every drawn parameter is firmware, so the security argument does not rest on them. What meets that chip is the latency-shadow work (class v4) and the price per joule (the chip and economy analysis of 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. Measured (8 October 2026; lane D’s family harness at the acceptance rule’s own 2^20 sample over 4,900 drawn eras, and the chained-cache pass’s reading of the night before): every hash’s 128 dependent reads land across the whole dataset and the distinct-index floor holds at 0.995 on every accepted program; about half of epochs carry one load site whose address bit at the era’s stride rotation is biased, which prices about 1.6 percent of a hash’s reads to a chip storing half the dataset and nothing to a chip storing all of it; the next class folds the product’s low bits before the rotation, so no era lands a biased bit on an address bit. 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 against a chip is scored under the rule in the chip model below. 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.</p>
<h3 id="chip-model">The chip model</h3>
<p><b>Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes.</b> Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment.</p>
<p><b>The labels.</b> The bracket is modelled and provisional: its floor is the clock-gated base core and its ceiling the first placed core, which came in 64 percent above synthesis (wires and the clock tree); the honest figure is the placed gated core’s and replaces the bracket when its row lands. The GPU side is measured: an RTX 5080 at its 1,100 MHz core lock, 2.06 microjoules per hash, and an RTX 5090 at its 1,300 MHz lock, 2.33 microjoules per hash, both under class v4, on the project’s own rigs and rented pods, 8 October 2026; the card’s cost of the window is measured too (a rented RTX 5090 and RTX 4090 at stock, 8 October 2026: within 5 percent per load with the liveness chain, no register spill). The chip side is synthesised and claimed: the clock-gated sequencer core with the 64-register window on ASAP7, scaled to N3 on the foundry’s headline factors (k about 0.37 at N3 and 0.51 node for node for the base core, the gated window adding about 0.13 of k against an adversary with a flop register file; the window’s liveness measured at 61 of 64 values necessary, its cost to the card measured under 5 percent); the window’s k is synthesis-derived and not a lower bound, and the multi-family adversary lane’s first core (its state in a macro) reads the window’s defence as close to nothing, a disagreement between two models that the placed rows settle. The chip’s memory is modelled: the GDDR7 board of the chip model. The placed gated figure is expected near 2.6x to 3.1x a node ahead and 2.3x to 2.7x node for node (approximate) and is served when its row lands.</p>
<p>Three statements, kept separate. The baseline is the hash as it stands under the scoring rule; rotation is an optional improvement to that baseline, not the mechanism the claim rests on.</p>
<div class="tbl"><table><thead><tr><th>Statement</th><th>What it says</th><th>Label and date</th></tr></thead><tbody>
<tr><td>Energy resistance</td><td>The bracket above: about 2.3x to 3.3x for the strongest specialised design a node ahead of the GPU tier, 2.0x to 2.9x on the GPU’s own node, provisional until the placed gated core row lands; two nodes ahead follows from that row. The honest tier moves to the next node with every GPU generation; a chip must tape out again.</td><td>modelled on measured cards, 8 October 2026, approximate and provisional; the node column is claimed scaling</td></tr>
<tr><td>Economic resistance</td><td>Whether a chip gets built depends on development cost, deployment economics and productive hardware lifetime. The first cut of the profitability surface: the price at which a project pays scales as the project cost over its share of the chain times its discounted life, and moves by under 5 percent with the per-joule edge; a fixed-lane chip under rotation needs 4x the price a programmable one needs. No threshold is the headline: the coexistence model that prices the conditions (<code>docs/analysis/class-v6/coexistence-model.md</code>) is owed and is served when it exists.</td><td>modelled, first cut, 8 October 2026; conditional until the cut lands</td></tr>
<tr><td>Response capability</td><td>Rotation is an optional improvement, not the mechanism. A passed rotation boundary proves the rotation works, not that hardware dies. The schedule: a new program every hour, a parameter era every week, a family epoch every 180 days, an emergency vote when miners call one.</td><td>measured per boundary, 8 October 2026</td></tr>
<tr><td>Energy resistance</td><td>The bracket above: about 2.3x to 3.3x for the strongest specialised design a node ahead of the GPU tier, 2.0x to 2.9x on the GPU’s own node, provisional until the placed gated core row lands; two nodes ahead follows from that row. The honest tier moves to the next node with every GPU generation; a chip must tape out again. Whole machine per tier (synthesis with the SRAM band and node factors, claimed; placed rows to follow): the complete GDDR7 machine about 1.8x the RTX 5090 at its lock per joule node for node and 2.1x a node ahead; 1.6x and 1.9x the RTX 5080; 2.8x and 3.3x the Ada, Ampere and RX 9070 XT cohort; about 1.5x the Apple tier, reported, never headlined.</td><td>modelled on measured cards, 8 October 2026, approximate and provisional; the node column is claimed scaling; the per-tier line claimed, 8 October 2026</td></tr>
<tr><td>Economic resistance</td><td>Whether a chip gets built depends on development cost, deployment economics and productive hardware lifetime. The first cut of the profitability surface: the price at which a project pays scales as the project cost over its share of the chain times its discounted life, and moves by under 5 percent with the per-joule edge; a fixed-lane chip under rotation needs 4x the price a programmable one needs. No threshold is the headline: the five-year coexistence model (Deliverable 4; its first run is <code>docs/analysis/class-v6/coexistence-model.md</code>, every row modelled) replaces any capex wall: the GDDR7 board passes all six of its success conditions at a one to three year life; an N2 SRAM die fails five once it exists with development sunk, and the only condition holding it is that nobody pays to build it; the larger half of a chip's edge is capital cost per accepted hash, not joules.</td><td>modelled, the coexistence model's first run, 8 October 2026</td></tr>
<tr><td>Response capability</td><td>Rotation is an optional improvement, not the mechanism. A passed rotation boundary proves the rotation works, not that hardware dies. The schedule: a new program every hour, a parameter era every week, a family epoch every 180 days, an emergency vote when miners call one. Rotation costs a chip versatility, not life: the family bank is firmware plus about 43 percent of core cells, and no transition carries an obsolescence credit (modelled).</td><td>measured per boundary, 8 October 2026; the family-bank cost modelled, 8 October 2026</td></tr>
</tbody></table></div>
<p>What a miner sees from this. Class v4 costs a 5090 145 W more unlocked, 88 W more at a 1,400 MHz core lock and 82 W at the best operating points (class v4 at 1,200 MHz, class v3 at 1,300; the knee is 1,300 MHz on both), for 0.2 percent more rate (measured, 7 October 2026; the 80 W read on 6 October was at the app's tuned cap); an M5 Max 16 W more for 1.5 percent, an RX 9070 XT and an RTX 4070 nothing (measured, 6 October 2026). The ladder that sets how much work rides in the shadow starts at rung 0 at genesis and climbs by miner signal; its third rung is inadmissible today because a server core verifies it in 10.85 ms, over the gate (measured, 7 October 2026). Devnet 3 runs class v4 from its first block (7 October 2026); the first devnet started on class v3 and reaches class v4 by miner signal at a published height. Classes rotate on findings and at least yearly; a class change is a release activated by block height. Class v5 crosses on Devnet 3 by height; class v6 is the design in progress (opened 8 October 2026), with four layers as its spine: per-era draws of the parameters a release now fixes, a dataset whose size tracks the chain state, scheduled family epochs by height, and the acceptance floor generalised to every era’s draw. The next test of the model is an internal adversarial pass, not an independent review: three lanes that have never worked on the hash code attack the mixer, the chained cache and the acceptance rule with only what an outsider has (the public kit, the frozen object, the spec, the harnesses) and publish the break or the bound they reach. No outside review has run yet.</p>
<p>No hash has stayed free of chips forever. Igneum does not claim to. It states the gain its own model finds and the response the rotation makes, and both carry their labels. The precedents, as sourced (nameplate and community tables, about 20 percent either way; every figure with its URL and date in the close): Monero has run on RandomX since November 2019, its rules stable since then and its programs varying per hash; one chip shipped against it, Bitmain’s Antminer X5 (September 2023), 46 months after the fork, at 6.37 J per kH at the wall against a stated CPU measurement, an observed comparison, not a ceiling. 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. RandomX v2 was released on 25 March 2026 with its mainnet activation pending. Ethash ran 36 months to a first chip worse than a GPU; the iPollo V2H reads about 14x today. Kaspa ran 21 months to its first chip, at 167x to 725x. The commodity cohort Igneum protects is the discrete-GPU population; the Apple row is reported beside it, never as the headline.</p>
<p><b>The scoring rule and the harness.</b> The edge is the minimum over workloads of the maximum over free adversarial designs of the GPU’s joules per hash over the adversary’s, under four conditions: the 10 percent GPU-cost budget at the lock, the verifier limit, cross-vendor correctness and hardware accessibility. The rejected designs stand as negative controls with their measured rows: the long program, the select tree, the wide read, the scratchpad. The next programme: the connected-state experiment, the mixed integer and FP32 candidate, the multi-family programmable adversary; rotation is not expected to deliver the missing joule. <a href="https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/design/class-v6-rotating-family.md">The scoring rules and every row, section 10</a>. <a href="https://git.igneum.network/igneum-network/igneum/src/branch/class-v5/docs/design/class-v5-harness/">The harness</a> and <a href="https://git.igneum.network/igneum-network/igneum/src/branch/class-v5/docs/design/class-v5-stored-state.md">its readings</a> (measured, 8 October 2026): the acceptance floor at 0.995 refuses nine of nine hot sets (0.9809 to 0.9919) and 2.435 percent of 4,600 drawn programs, 0 of 61 in the era reading (section 14); the attack families F8, F4, F9 and F1 pass, F8 with a residue of 61 of 64 (section 13); the attempts census and the attempt-3 read (section 0).</p>
<p>What a miner sees from this. Class v4 costs a 5090 145 W more unlocked, 88 W more at a 1,400 MHz core lock and 82 W at the best operating points (class v4 at 1,200 MHz, class v3 at 1,300; the knee is 1,300 MHz on both), for 0.2 percent more rate (measured, 7 October 2026; the 80 W read on 6 October was at the app's tuned cap); an M5 Max 16 W more for 1.5 percent, an RX 9070 XT and an RTX 4070 nothing (measured, 6 October 2026). The ladder that sets how much work rides in the shadow starts at rung 0 at genesis and climbs by miner signal; its third rung is inadmissible today because a server core verifies it in 10.85 ms, over the gate (measured, 7 October 2026). The devnet runs class v4 from its first block. Classes rotate on findings and at least yearly; a class change is a release activated by block height. Class v5 is built to cross by height; its dataset keyed by the chain's own state is under evaluation (Deliverable 3) and is not counted as a defence until justified. Class v6 is the design in progress (opened 8 October 2026), with four layers as its spine: per-era draws of the parameters a release now fixes, a dataset whose size tracks the chain state (under evaluation, Deliverable 3), scheduled family epochs by height, and the acceptance floor generalised to every era’s draw. The next test of the model is an internal adversarial pass, not an independent review: three lanes that have never worked on the hash code attack the mixer, the chained cache and the acceptance rule with only what an outsider has (the public kit, the frozen object, the spec, the harnesses) and publish the break or the bound they reach. No outside review has run yet.</p>
<p>No hash has stayed free of chips forever. Igneum does not claim to. It states the gain its own model finds, the economics and the response capability, each separately, and each carries its label. The precedents, as sourced (nameplate and community tables, about 20 percent either way; every figure with its URL and date in the close): Monero has run on RandomX since November 2019, its rules stable since then and its programs varying per hash; one chip shipped against it, Bitmain’s Antminer X5 (September 2023), 46 months after the fork, at 6.37 J per kH at the wall against a stated CPU measurement, an observed comparison, not a ceiling. 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. RandomX v2 was released on 25 March 2026 with its mainnet activation pending. Ethash ran 36 months to a first chip worse than a GPU; the iPollo V2H reads about 14x today. Kaspa ran 21 months to its first chip, at 167x to 725x. The commodity cohort Igneum protects is the discrete-GPU population; the Apple row is reported beside it, never as the headline.</p>
<p><b>The scoring rule and the harness.</b> The edge is the minimum over workloads of the maximum over free adversarial designs of the GPU’s joules per hash over the adversary’s, under four conditions: the 10 percent GPU-cost budget at the lock, the verifier limit, cross-vendor correctness and hardware accessibility. The rejected designs stand as negative controls with their measured rows: the long program, the select tree, the wide read, the scratchpad. The two architectural experiments are closed as failures and stay as regression controls: the mixed integer and FP32 branch (measured, 8 October 2026: 15 to 26 percent more card energy per hash against the 10 percent budget) and the connected-state reorganisation (8 October 2026: only the window width reaches the chip). The multi-family programmable adversary (Deliverable 3) is open; rotation is not expected to deliver the missing joule. <a href="https://git.igneum.network/igneum-network/igneum/src/branch/master/docs/design/class-v6-rotating-family.md">The scoring rules and every row, section 10</a>. <a href="https://git.igneum.network/igneum-network/igneum/src/branch/class-v5/docs/design/class-v5-harness/">The harness</a> and <a href="https://git.igneum.network/igneum-network/igneum/src/branch/class-v5/docs/design/class-v5-stored-state.md">its readings</a> (measured, 8 October 2026): the acceptance floor at 0.995 refuses nine of nine hot sets (0.9809 to 0.9919) and 2.435 percent of 4,600 drawn programs, 0 of 61 in the era reading (section 14); the attack families F8, F4, F9 and F1 pass, F8 with a residue of 61 of 64 (section 13); the attempts census and the attempt-3 read (section 0).</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>
@ -492,27 +488,41 @@ body.all .pager{display:none}
<tbody>
<tr><td>Hardware it is built for</td><td>CPUs. GPUs run it badly on purpose</td><td>GPUs. Any card, any vendor. Bit-exact on Apple, NVIDIA and AMD, measured</td></tr>
<tr><td>Random program</td><td>Per hash, interpreted in a virtual machine</td><td>Per hour, compiled to native GPU code. Per hash, the 128 dataset addresses change with the nonce</td></tr>
<tr><td>Dataset</td><td>About 2 GB, the same size since 2019, approximate</td><td>2 GB, growing (the proposed schedule, fixed at the testnet genesis: 2 GB, doubling at years 4, 12 and 28); a 4 GB card mines about four years, an 8 GB card about twelve, approximate</td></tr>
<tr><td>Dataset</td><td>About 2 GB, the same size since 2019, approximate</td><td>2 GB, growing (the proposed schedule, fixed at genesis: 2 GB, doubling at years 4, 12 and 28); a 4 GB card mines about four years, an 8 GB card about twelve, approximate</td></tr>
<tr><td>Light verification</td><td>256 MB cache on a CPU, milliseconds</td><td>256 MB cache on a CPU (512 MB from year 4), one warp under 10 ms, the gate. Measured 2.1 ms on one Apple M5 Max core for class v3 (3.4x class v2's 0.61 ms); a 2019-class core not yet</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>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>NVIDIA cards prove: from 8 GB on the patched server, 12 GB and up beside the miner, 24 GB on the stock server (measured on eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026). Selling proofs to other chains is Designed, not built. AMD and Apple cards mine and do not prove; a prover for them lands when a zkVM ships one</td></tr>
<tr><td>Track record</td><td>About seven years with one shipped chip, Bitmain’s Antminer X5 (September 2023), at 1.46x per joule over a desktop CPU; the one announced beyond it, Bitmain’s Antminer X9, was withdrawn in May 2026 with zero units; RandomX v2 released 25 March 2026, activation pending</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 (git.igneum.network/igneum-network/spec). The node, the miner and the wallet follow to the same host as the repository is published</td></tr>
</tbody>
</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 a live network 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>
</section>
<section id="proving">
<h2>Proving: the miners are the provers</h2>
<p>Every Igneum block is proven with a zero-knowledge proof, and the miners produce it. Proving is a useful GPU workload that is cheaply verifiable by construction. A proof is right or it is not. Wrapped for light clients, a phone checks it in milliseconds; the wrapping cost is a phase two measurement. Measured so far, the certificate half only: the browser verifier on the home page checks a devnet finality certificate, one BLS aggregate signature over 16 keys and 21 header hashes, in 139 to 155 ms cold and 58 to 68 ms warm in a phone-sized tab on a laptop core (5 October 2026). No phone has been measured, and no wrapped block proof exists yet.</p>
<p class="lead"><strong>A GPU-secured network for Ethereum-compatible applications and verifiable computation.</strong></p>
<h3 id="architecture">The proof architecture</h3>
<p>Igneum is not an Ethereum L2. Ethereum does not enforce its state or hold its data, so Igneum carries its own consensus security, data availability and cross-chain verification. The architecture is three decisions, kept separate, and one source of extra demand. EVM-compatible execution is what developers build against, through revm. SP1 is the one well-tested proving backend, behind the versioned proving interface; a zkEVM here means the EVM implementation compiled as a program SP1 proves. Igneum's own GPU-mined consensus is where security comes from. External customers are the source of additional proving demand: designed, not built, and out of every revenue assumption.</p>
<div class="tbl"><table>
<thead><tr><th>Decision</th><th>Choice</th><th>State, 8 Oct 2026</th></tr></thead>
<tbody>
<tr><td>What developers build against</td><td>EVM-compatible execution (revm), with a documented set of differences: block context, randomness, two-dimensional fees</td><td>Implemented on the devnet</td></tr>
<tr><td>How execution is proved</td><td>SP1, one well-tested backend behind the versioned proving interface; program identities, verifier versions and security parameters pinned in the protocol; a second backend only where justified</td><td>Implemented: proving v0 and v1 on the devnet. The pinning is Designed</td></tr>
<tr><td>Where security comes from</td><td>Igneum's own GPU-mined consensus: the lottery, GHOSTDAG ordering and miner-only finality</td><td>Implemented on the devnet; external review owed</td></tr>
<tr><td>Additional proving demand</td><td>External customers buying proofs for their own systems</td><td>Designed, not built; out of revenue assumptions</td></tr>
</tbody>
</table></div>
<p><strong>Proven execution is not finality. EVM compatibility is not Ethereum security. ZK is not privacy.</strong></p>
<p>A proof says the state follows from the ordered blocks; the miners' lock decides which blocks are final. Running Ethereum's bytecode does not bring Ethereum's validators. Published state data is public, and privacy needs its own application or protocol design. None of these choices, by itself, answers specialised mining hardware; the chip model is a separate obligation.</p>
<p>Igneum blocks are proven with zero-knowledge proofs, and NVIDIA miners produce them. AMD and Apple cards mine; they do not prove today. Proving is a useful GPU workload that is cheaply verifiable by construction. A proof is right or it is not. Wrapped for light clients, a phone checks it in milliseconds; the wrapping cost is a phase two measurement. Measured so far, the certificate half only: the browser verifier on the home page checks a devnet finality certificate, one BLS aggregate signature over 16 keys and 21 header hashes, in 139 to 155 ms cold and 58 to 68 ms warm in a phone-sized tab on a laptop core (5 October 2026). No phone has been measured, and no wrapped block proof exists yet.</p>
<h3>How a block gets proven</h3>
<p>Blocks carry transactions only and make no claim about state. Every node executes the ordered transactions natively at once, so users see their transaction land in about a second. The execution is then split into shards of a fixed proving cost. Shards are assigned by lot to eight provers for ten seconds, then open to anyone; there is no bond. Provers run them on consumer cards, and the shard proofs are folded by recursive aggregation into one proof for the block. That proof lands on-chain within about a minute at launch. Because the proof computes the state from the ordered sequence, no node accepts a block with a wrong state root. Full nodes also execute every block natively and reject a proof record whose result differs from their own execution, so a forged proof is a light-client problem and never a chain split. Implemented: the native-execution check on every carried proof record, proving v0 on the devnet (specification section 7). The emergency path for a soundness bug in the proof system is a human one: a new proof-system version is written by people and activates only on miner signalling. Invalid transactions are skipped by rule, the way Kaspa skips conflicting spends.</p>
<p>Proving: every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server. Measured on eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026: the RTX 3060 (12 GB) mines at 23.78 MH/s and proves the v1 shard beside its miner at an 8.9 GB peak in 37.5 s; the RTX 4060 (8 GB) proves it alone at 7.4 GB in 18.4 s; the RTX 4090 (24 GB) proves it on the stock SP1 server in 5.6 s at 17.4 GB. The patched server that fits the smaller cards is not yet in the shipped app. AMD and Apple cards mine. A prover for them lands when a zkVM ships one.</p>
<p>Blocks carry transactions only and make no claim about state. Every node executes the ordered transactions natively at once, so users see their transaction land in about a second. The execution is then split into shards of a fixed proving cost. Shards are assigned by lot to eight provers for ten seconds, then open to anyone; there is no bond. Provers run them on consumer NVIDIA cards, and the shard proofs are folded by recursive aggregation into one proof for the block. That proof lands on-chain within about a minute at launch (designed). Because the proof computes the state from the ordered sequence, no node accepts a block with a wrong state root. Full nodes also execute every block natively and reject a proof record whose result differs from their own execution, so a forged proof is a light-client problem and never a chain split. Implemented: the native-execution check on every carried proof record, proving v0 on the devnet (specification section 7). The emergency path for a soundness bug in the proof system is a human one: a new proof-system version is written by people and activates only on miner signalling. Invalid transactions are skipped by rule, the way Kaspa skips conflicting spends.</p>
<p>Proving is NVIDIA's today: from 8 GB on the patched server, 12 GB and up beside the miner, 24 GB on the stock server. Measured on eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026: the RTX 3060 (12 GB) mines at 23.78 MH/s and proves the v1 shard beside its miner at an 8.9 GB peak in 37.5 s; the RTX 4060 (8 GB) proves it alone at 7.4 GB in 18.4 s; the RTX 4090 (24 GB) proves it on the stock SP1 server in 5.6 s at 17.4 GB. The patched server that fits the smaller cards is not yet in the shipped app. AMD and Apple cards mine. A prover for them lands when a zkVM ships one. These rows are the proving stage only: the full pipeline is judged, inputs, proving, aggregation, verification, payment, memory and the mining income forgone, and a fast shard does not settle it.</p>
<h3>The proving budget</h3>
<p>Gas prices execution. Proving cost is a different number, so Igneum meters it separately: every transaction pays in both dimensions, and each block has a proving-cost budget set in consensus from measured prover throughput. A transaction that is cheap to run and expensive to prove pays for what it costs the provers. Measured on 5 October 2026 (an RTX 5090 under SP1 6.8.1's GPU prover, the shard size the chain adopts from its fee switch, 30,000 proving gas, about 4.7 million prover cycles): one full shard proves in 4.3 seconds and needs 20.4 GB of GPU memory with the card to itself, so a 24 GB card proves full shards and a 12 GB or 16 GB card does not on this prover build, whose floor is 13.9 GB for even an empty shard; mining and proving on one card needs 32 GB today (the prototype-size shard beside the miner peaked at 30.1 GB) and 24 GB once the adopted shard size is live (22.2 GB beside the miner, 13.2 seconds a shard, measured on the 32 GB card; a 24 GB card has not run it yet). The old 12 GB gate on the roadmap was withdrawn on 5 October until a prover build with a smaller floor was measured; on 6 October a patched server proved the same shard at 7.4 to 8.0 GB alone on eleven rented cards from the RTX 3060 to the RTX 5090 (the real-card table), so the gate returns as measured and the patched server is not yet in the shipped app. The first proofs exist: on 4 October 2026 an RTX 5090 proved a small two-transaction block in 1.4 seconds (2.7 seconds compressed), verified in 0.22 and 0.038 seconds, and a laptop CPU proved a three-shard block end to end in 19 minutes. Later that day the same card proved a full shard at the provisional size, 6.75 million prover gas, which executed in 60.8 million cycles: core proof 8.3 seconds, compressed proof 10.9 seconds, verified in 0.040 seconds; a four-shard block took 44.5 seconds of GPU stages end to end. Since 5 October 2026 shards are assigned and proven on the live devnet. The gate asks for a mid-range card, and an RTX 5090 is not one, so the gate stands open. Once the gate is measured, the budget rises by schedule as hardware improves. The proof system is hash-based, which is what runs on consumer cards, and sits behind a versioned interface, so Igneum can adopt a better proof system when one exists by a miner-signalled release, and runs for ever on the current one if none is adopted.</p>
<p>Gas prices execution. Proving cost is a different number, so Igneum meters it separately: every transaction pays in both dimensions, and each block has a proving-cost budget set in consensus from measured prover throughput. A transaction that is cheap to run and expensive to prove pays for what it costs the provers. Measured on 5 October 2026 (an RTX 5090 under SP1 6.8.1's GPU prover, the shard size the chain adopts from its fee switch, 30,000 proving gas, about 4.7 million prover cycles): one full shard proves in 4.3 seconds and needs 20.4 GB of GPU memory with the card to itself, so a 24 GB card proves full shards and a 12 GB or 16 GB card does not on this prover build, whose floor is 13.9 GB for even an empty shard; mining and proving on one card needs 32 GB today (the prototype-size shard beside the miner peaked at 30.1 GB) and 24 GB once the adopted shard size is live (22.2 GB beside the miner, 13.2 seconds a shard, measured on the 32 GB card; a 24 GB card has not run it yet). The old 12 GB gate on the roadmap was withdrawn on 5 October until a prover build with a smaller floor was measured; on 6 October a patched server proved the same shard at 7.4 to 8.0 GB alone on eleven rented cards from the RTX 3060 to the RTX 5090 (the real-card table), so the gate returns as measured and the patched server is not yet in the shipped app. The first proofs exist: on 4 October 2026 an RTX 5090 proved a small two-transaction block in 1.4 seconds (2.7 seconds compressed), verified in 0.22 and 0.038 seconds, and a laptop CPU proved a three-shard block end to end in 19 minutes. Later that day the same card proved a full shard at the provisional size, 6.75 million prover gas, which executed in 60.8 million cycles: core proof 8.3 seconds, compressed proof 10.9 seconds, verified in 0.040 seconds; a four-shard block took 44.5 seconds of GPU stages end to end. Shards are assigned and proven on the devnet from block zero. The gate asks for a mid-range card, and an RTX 5090 is not one, so the gate stands open. Once the gate is measured, the budget rises by schedule as hardware improves. The proof system is hash-based, which is what runs on consumer cards, and sits behind a versioned interface. SP1 is the one backend. A replacement is adopted only where justified, by a miner-signalled release, never as an interchangeable second backend, and the chain runs for ever on the current one if none is adopted.</p>
<h3>Proving for everyone else</h3>
<p>The same miners accept proving jobs from other chains. Rollups post a job, a miner wins it, proves it, and is paid. The job market is permissionless and is Designed, not yet built. At launch a job is paid on the customer's own chain, in the customer's currency, to a payout contract keyed by miner address, because Igneum cannot yet see Ethereum. Settlement in IGN, with 10% of each fee burned, follows when the proof bridge lets Igneum see the payment, in phase two. The Igneum miner client can also bid on other proving networks and take the best price, where a miner chooses to hold their collateral: Boundless provers post ZKC and Succinct provers stake PROVE (approximate, from their documentation). The proving market is small today. Igneum does not depend on it. We know of no other proof-of-work chain selling proofs to other chains. Live rows arrive with the public testnet. The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word.</p>
<p>The job market for other chains is Designed, not built, and stays out of every revenue assumption until it is. The order: Igneum's own execution first; then one external customer's exact workload with repeat paid jobs; further workloads only where the fleet has a demonstrated edge. As designed, a customer posts a job, a miner wins it, proves it, and is paid, and the market is permissionless. At launch a job is paid on the customer's own chain, in the customer's currency, to a payout contract keyed by miner address, because Igneum cannot yet see Ethereum. Settlement in IGN, with 10% of each fee burned, follows when the proof bridge lets Igneum see the payment, in phase two. The Igneum miner client can also bid on other proving networks and take the best price, where a miner chooses to hold their collateral: Boundless provers post ZKC and Succinct provers stake PROVE (approximate, from their documentation). The proving market is small today. Igneum does not depend on it. We know of no proof-of-work chain that sells proofs to other chains.</p>
</section>
<section id="finality">
@ -522,7 +532,7 @@ body.all .pager{display:none}
<h3>Finality</h3>
<p>Every 30 seconds of chain a checkpoint forms, deep enough past the tip that the DAG will not reorder it. Every miner with at least 100 blocks in the last 30 days signs it, and the checkpoint locks when signatures representing two thirds of all the mining weight of those 30 days arrive. Once a checkpoint is locked it overrides the heaviest chain, so fresh hashrate cannot reorganise past it. Two thirds of 30-day weight can. In the chain's first 30 days no checkpoint locks at all: the rule waits until the window holds 30 days of history (Implemented, the first-month gate, measured on test networks on 4 and 5 October 2026), so the chain runs on proof of work and its 12-hour finality depth the way every new proof-of-work chain does. On the devnet, whose window is two hours, the first lock came two hours after genesis, at 77.4% of all weight from 17 vote keys (4 October 2026).</p>
<div class="pull">The word sustained is the whole defence. Block rewards go to whoever mines, new or old. The right to lock history is earned.</div>
<p>A miner's vote weight is simply the blocks it has mined over the trailing 30 days, measured by work, so splitting into many keys buys nothing and joining a pool costs nothing. Hashrate that arrived today holds almost none of it. Even an attacker producing every block on the chain, with honest miners gone, would need ten days of mining in public to hold a third of the weight, and twenty to hold two thirds. An attacker matching the honest network needs twenty days for a third and never reaches two thirds while the honest miners keep mining. Rental is priced by the hour. The only route left is to drive honest miners off the chain and hold two thirds for a month on the public hashrate charts, which is the same limit Bitcoin lives with, with a month's warning attached. Pools carry their hashers' votes, so vote concentration equals pool concentration, and it is public.</p>
<p>A miner's vote weight is simply the blocks it has mined over the trailing 30 days, measured by work, so splitting into many keys buys nothing and joining a pool costs nothing. Hashrate that arrived today holds almost none of it. Even an attacker producing every block on the chain, with honest miners gone, would need ten days of mining in public to hold a third of the weight, and twenty to hold two thirds. An attacker matching the honest network needs twenty days for a third and never reaches two thirds while the honest miners keep mining. Rental is priced by the hour. The only route left is to drive honest miners off the chain and hold two thirds for a month on the public hashrate charts, which is the same limit Bitcoin lives with, with a month's warning attached. Pools carry their hashers' votes, so vote concentration equals pool concentration, and it is public (today's behaviour, as built). The pin replaces it: vote keys stay with the miner at protocol level: the member's retained voting key is committed into its work, payment aggregation is separate and verifiable, and pool identity substitution is resisted (a pin of Igneum 2.0, pools and participation; not yet shipped).</p>
<p>Two further rules close the gaps. A lock needs two thirds of all 30-day weight, so finality pauses whenever less than two thirds of that weight is connected and signing, until it returns or ages out of the window, up to 30 days, and the chain runs on proof of work meanwhile. The node reports the pause. A key that stops signing is reported as absent within two hours, which is how operators see a pause coming. Beneath the latest lock the depth to rely on is the finality depth: a node never switches to a chain forked more than 12 hours of median time back, and a certified checkpoint shortens that to its own age. Kaspa's one-hour merge depth is a limit on which old blocks a new block may merge, not a reorganisation bound. Signing two different checkpoints at the same height is equivocation, provable by anyone, and it strips the key of its vote for 30 days.</p>
<h3>What is not here</h3>
<p>No coin is staked. The only thing at stake is 30 days of public work: a vote key's weight is its blue blocks over the window, and equivocation strips it for 30 days. No coin-holder class votes on anything. No anchoring into Bitcoin or any other chain. Nothing in Igneum's consensus depends on anything outside Igneum.</p>
@ -530,7 +540,8 @@ body.all .pager{display:none}
<section id="building">
<h2>Building on Igneum</h2>
<p>Anything that runs on Ethereum runs on Igneum unchanged. Same Solidity, same bytecode, same wallets, same tools, a different chain id. Builders get Ethereum semantics with one-second inclusion, finality in about two minutes, and gas priced for a chain that is not congested.</p>
<p class="lead"><strong>A GPU-secured network for Ethereum-compatible applications and verifiable computation.</strong></p>
<p>Contracts built for Ethereum deploy with the same Solidity, the same bytecode, the same wallets and tools, and a different chain id. Compatibility is shown, not assumed: representative contracts, wallet fee estimation, indexing, failed transactions and receipts are tested as a product deliverable, and the differences are documented (block context, randomness, two-dimensional fees). Builders get Ethereum semantics with one-second inclusion, finality in about two minutes, and gas priced for a chain that is not congested.</p>
<p>Three things Igneum offers at the base layer that we know no other EVM chain offers.</p>
<ol>
<li><strong>Proving as a native primitive.</strong> A contract can request a proof of any computation and pay for it in gas, and the miners produce it. A game proves a fair shuffle. A lending market proves its solvency. A rollup elsewhere posts a job and gets its proof back. We know of no other EVM chain with a prover network in its base layer.</li>
@ -541,7 +552,7 @@ body.all .pager{display:none}
<h3>Why build here</h3>
<p>Not for speed. Fast EVM chains filled with copied Ethereum contracts and emptied when incentives stopped. Three things no L2 can offer. Keep your Ethereum deployment.</p>
<ol>
<li><strong>Proofs priced by the subsidy forgone.</strong> A contract requests a proof of any computation and the miners produce it. Their cards already run and are paid by emission, so a job has to beat the lottery income the card forgoes while it proves. That is the price a prover must charge, as a formula with network hash as the input: per shard, (card hash ÷ network hash) × 0.8 × 31.688 IGN × shard seconds, plus electricity, which is under a cent per billion cycles on every card. It falls as one over network hash: at the devnet's 1.16 GH/s a quote is 100 to 300x the published market rate; a card proving beside its miner is competitive near 100 GH/s (the Horizon economy lane, 6 October 2026, sections 3.1 and 4.1, approximate beyond the one card measured; ledger E20). Verification is folded into the chain's own proof; you ship no verifier. The job's base fee rises with the backlog, published at the phase 4 job market.</li>
<li><strong>Proofs priced by the subsidy forgone.</strong> A contract requests a proof of any computation and the miners produce it. Their cards already run and are paid by emission, so a job has to beat the lottery income the card forgoes while it proves. That is the price a prover must charge, as a formula with network hash as the input: per shard, (card hash ÷ network hash) × 0.8 × 31.688 IGN × shard seconds, plus electricity, which is under a cent per billion cycles on every card. It falls as one over network hash: at the devnet's 1.16 GH/s a quote is 100 to 300x the published market rate; a card proving beside its miner is competitive near 100 GH/s (the economy analysis of 6 October 2026, sections 3.1 and 4.1, approximate beyond the one card measured; ledger E20). Verification is folded into the chain's own proof; you ship no verifier. The job's base fee rises with the backlog, published at the phase 4 job market.</li>
<li><strong>Users who were not paid to arrive.</strong> Every miner is a funded wallet. Pools, payout contracts, hardware finance and hashrate forwards have customers before any consumer app does. Block rewards can pay straight to a contract.</li>
<li><strong>A share of fees, with the number stated.</strong> 20% of every priority fee goes to the contracts whose code ran, per call frame, to the payee registered at deployment. Libraries are paid at their code address. Factories pass their registration to what they deploy. At launch fee levels this is a property, not an income: a million 100,000-gas calls a day at a 1 gwei tip pays about 7,300 IGN a year, with 1 gwei taken as a billionth of an IGN (the base unit is Open). It grows with traffic and nothing else.</li>
</ol>
@ -584,7 +595,7 @@ body.all .pager{display:none}
<thead><tr><th>Share</th><th>Goes to</th><th>Why</th></tr></thead>
<tbody>
<tr><td class="num">80%</td><td>The miner who wins the block</td><td>Pays the hashrate that secures the chain</td></tr>
<tr><td class="num">20%</td><td>The proving pool: shard provers and aggregators</td><td>For a standing prover population that does not have to hash. On the devnet today the coinbase's 20% output goes to an unspendable script tagged <code>igneum-proving-pool-v0</code> and is burned there. Provers are paid from a separate escrow in the execution state, credited by rule with the same 20% of each blue block's subsidy and released per shard against valid proof records (Implemented, proving v0, since 5 October 2026). Caveat: consensus does not yet verify the carried proof, it checks the record's statement against native execution and its signature, so today a block producer could claim shard pay with a false proof (ledger P21; the in-consensus verifier is built and switches on when the proven share of blocks reads one). Note: unclaimed pool credit is today stranded in the escrow, no rule returns it; the fix rolls an unproven shard's credit into the next proven segment's pool (0.3.16). Open: the single coinbase payout that replaces the burn, and whether it reclaims the share burned so far</td></tr>
<tr><td class="num">20%</td><td>The proving pool: shard provers and aggregators</td><td>For a standing prover population that does not have to hash. On the devnet today the coinbase's 20% output goes to an unspendable script tagged <code>igneum-proving-pool-v0</code> and is burned there. Provers are paid from a separate escrow in the execution state, credited by rule with the same 20% of each blue block's subsidy and released per shard against valid proof records (Implemented, proving v0, since 5 October 2026). Caveat: consensus does not yet verify the carried proof, it checks the record's statement against native execution and its signature, so today a block producer could claim shard pay with a false proof (ledger P21; the in-consensus verifier is built; its enforcement, verifier_in_consensus and proof_rule_active_from, is Open and is the prerequisite of the no-rescue network exercise, Deliverable 5). Note: unclaimed pool credit is today stranded in the escrow, no rule returns it; the fix rolls an unproven shard's credit into the next proven segment's pool (designed). Open: the single coinbase payout that replaces the burn, and whether it reclaims the share burned so far</td></tr>
<tr><td class="num">0%</td><td>Treasury, foundation, team or stake</td><td>There is no coin-holder class in consensus and no tax on emission</td></tr>
</tbody>
</table></div>
@ -605,7 +616,7 @@ body.all .pager{display:none}
</table></div>
<p class="src"><b>Sources:</b> specification sections 2.5 and 5.1 to 5.4; the engineering log for the devnet receipts and the dev-fee count.</p>
<h3>Security after the subsidy</h3>
<p>The cap stays at 4 billion. There is no tail emission. The schedule is a bet, not a measurement: a halving halves emission income overnight if price and fees do nothing. Kaspa's steeper monthly reduction kept its hashrate while its price rose (approximate). Long term, security is paid for by the proving market and by fees. Outside customers buy proofs as dollars-priced work settled in IGN, and 90% of every job goes to the provers who delivered it, so a prover's income does not depend on emission. The table shows the first year in which the block subsidy on its own pays miners less than the power of about 3,000 consumer cards, at three flat prices. The prices are inputs chosen to span two orders of magnitude. The model runs a 300 W card at 124 MH/s on electricity at USD 0.12 per kWh. One rule sits beside the cap. If external proving revenue is under one fifth of the block subsidy over any 90-day window after year 5, the question of a tail reward goes to the miners' signalling vote. The protocol never changes emission by itself.</p>
<p>The cap stays at 4 billion. There is no tail emission. The schedule is a bet, not a measurement: a halving halves emission income overnight if price and fees do nothing. Kaspa's steeper monthly reduction kept its hashrate while its price rose (approximate). Long term, security has to be paid by fees and, if it is built and bought, the proving market. The external market is Designed, not built, and is out of the numbers below. As designed, outside customers buy proofs as dollars-priced work settled in IGN, and 90% of every job goes to the provers who delivered it. The table shows the first year in which the block subsidy on its own pays miners less than the power of about 3,000 consumer cards, at three flat prices. The prices are inputs chosen to span two orders of magnitude. The model (modelled, 3 October 2026) runs a 300 W card at 124 MH/s on electricity at USD 0.12 per kWh. One rule sits beside the cap. If external proving revenue is under one fifth of the block subsidy over any 90-day window after year 5, the question of a tail reward goes to the miners' signalling vote. The protocol never changes emission by itself.</p>
<div class="tbl"><table>
<thead><tr><th>Price per IGN</th><th>First year the subsidy alone pays under the power of 3,000 cards</th><th>Subsidy to miners that year</th></tr></thead>
<tbody>
@ -639,26 +650,26 @@ body.all .pager{display:none}
<tbody>
<tr><td>Block reward</td><td>Emission, 80% to the winner</td><td>Yes</td></tr>
<tr><td>In-chain proving</td><td>The 20% proving pool plus the proving share of every block's gas (on the devnet, paid from the execution-state escrow; see Economics)</td><td>Yes, mostly</td></tr>
<tr><td>External proving jobs</td><td>Rollups and apps on other chains, priced in their money</td><td>No, but the market is small today and is upside, not a promise</td></tr>
<tr><td>External proving jobs</td><td>Rollups and apps on other chains, priced in their money (Designed, not built)</td><td>No, but the market is not built and is upside, not a promise</td></tr>
</tbody>
</table></div>
<p>A block pays its miner whether or not anyone buys a proof that day. The lottery pays 80 percent of every block from emission; proving is the second income, never the only one. Every useful-work chain on record dropped its miners the day the work stopped paying; Igneum’s miners are paid for the block first.</p>
<p>The size of that third stream today, in numbers: all of Ethereum L1's proving is about USD 36 a day at the September 2026 tracker cost (USD 0.005 a block, 7,200 blocks a day; the tracker figure is a secondary source), against about USD 13,700 a day of Igneum's year-1 emission at USD 0.005 per IGN (31.688 IGN a block, 86,400 blocks a day; the price is an input, not a forecast). So external proving is a small second income at launch and the lottery pays the bills; for proving to become the main income the paid demand would have to grow about 1,000x in dollars (the Horizon lane analysis, 6 October 2026, section 3.11; ledger E19).</p>
<p>The honest bear-market case rests on cost. A miner's card is already running and the power is often domestic, so Igneum miners' electricity cost in the proving market is close to power. The price they must charge is another matter: the price a prover must charge is the subsidy it forgoes while it proves, which falls as one over network hash, so the edge over data-centre provers appears only once the network's hash is large (near 100 GH/s for a card proving beside its miner) and is nothing more. Which of the two in-chain streams pays more per GPU-second depends on the size of the fleet: on the devnet of 4 October 2026, three machines at 275 million hashes a second, a second of hashing paid about 4.9x a second of proving the pool share; at 10,000 cards the same arithmetic favours proving by about 930x. That is arithmetic on measured devnet rates, approximate, not a market measurement.</p>
<p>The size of that third stream today, in numbers: all of Ethereum L1's proving is about USD 36 a day at the September 2026 tracker cost (USD 0.005 a block, 7,200 blocks a day; the tracker figure is a secondary source), against about USD 13,700 a day of Igneum's year-1 emission at USD 0.005 per IGN (31.688 IGN a block, 86,400 blocks a day; the price is an input, not a forecast). So external proving is a small second income at launch and the lottery pays the bills; for proving to become the main income the paid demand would have to grow about 1,000x in dollars (the chip and economy analysis of 6 October 2026, section 3.11; ledger E19).</p>
<p>The honest bear-market case rests on cost. A miner's card is already running and the power is often domestic, so Igneum miners' electricity cost in the proving market is close to power. The price they must charge is another matter: the price a prover must charge is the subsidy it forgoes while it proves, which falls as one over network hash, so the edge over data-centre provers appears only once the network's hash is large (near 100 GH/s for a card proving beside its miner) and is nothing more. Which of the two in-chain streams pays more per GPU-second depends on the size of the fleet: measured on 4 October 2026, three machines at 275 million hashes a second, a second of hashing paid about 4.9x a second of proving the pool share; at 10,000 cards the same arithmetic favours proving by about 930x. That is arithmetic on measured devnet rates, approximate, not a market measurement.</p>
<h3>Hardware</h3>
<p>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, the average of half a gigabyte a year), so a 4 GB card mines for about four years and an 8 GB card for about twelve, approximate. 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). NVIDIA and AMD both work, because the mining program is generated for the architecture both share and the proof system is hash-based. Apple's chips are GPUs with unified memory, so Macs mine too, at about a fifth of a flagship card: Measured, 26.7 against 123 million hashes a second, an Apple M5 Max beside an RTX 5090 on the live devnet, 4 October 2026. A Mac is a poor miner per dollar. There is no CPU mining lane, on purpose, because CPU mining is what botnets farm. Nodes, wallets and exchanges need no GPU at all.</p>
<p>The dataset starts at 2 GB and grows (the proposed schedule, fixed at genesis: 2 GB, doubling at years 4, 12 and 28, the average of half a gigabyte a year), so a 4 GB card mines for about four years and an 8 GB card for about twelve, approximate. NVIDIA cards prove: from 8 GB on the patched server, 12 GB and up beside the miner, 24 GB on the stock server (measured on eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026). NVIDIA and AMD cards both mine, because the mining program is generated for the architecture both share; only NVIDIA cards prove today. Apple's chips are GPUs with unified memory, so Macs mine too, at about a fifth of a flagship card: Measured, 26.7 against 123 million hashes a second, an Apple M5 Max beside an RTX 5090, mining side by side, 4 October 2026. A Mac is a poor miner per dollar. There is no CPU mining lane, on purpose, because CPU mining is what botnets farm. Nodes, wallets and exchanges need no GPU at all.</p>
<h3>What a miner's hour looks like</h3>
<p>The card hashes the lottery continuously. When the client sees a shard or an external job it can win, it switches the card to proving for a few seconds, posts the proof, and goes back to hashing. The client does the switching and the miner sees one balance.</p>
<p>The card hashes the lottery continuously. On an NVIDIA card, when the client sees a shard it can win (or, once the job market is built, an external job), it switches the card to proving for a few seconds, posts the proof, and goes back to hashing. The client does the switching and the miner sees one balance.</p>
<p>The protocol carries no fee: no dev fund, no cut to any team. Ember, the miner software, takes an optional 1% dev fee, the way other GPU miners do. One block template in 100 is requested with the dev address instead of yours, by a counter, not a random draw, so it is exactly 1 in 100 and anyone can check it from the source or from the chain. One flag turns it off (<code>--dev-fee 0</code>, a switch in the app, a line in the HiveOS config). The miner prints the fee and the address when it starts. Any other client is welcome.</p>
<h3>One click, for everyone else</h3>
<p>Farm operators get a HiveOS package. Everyone else gets Igneum Ember: install it on Windows, macOS or Linux, press Start, and the card is mining to a key the app made for you. It is the same client with a face on it. Implemented, Ember 0.3.22 (7 October 2026): the app shows the key once and has you save it before mining starts, or takes an address you already have; the dashboard shows each card's hash rate, blocks found and accepted by the node, the node's height and peers, the next hourly program, the finality votes sent, and a proving tile with shards assigned, submitted and paid and the verifier state; the chain label reads Devnet 3 and the welcome screen says nothing is bought or sold; NVIDIA cards are capped at 80% of their default power limit for stability, with a sweep that looks for the best hash per watt, not yet measured on a card; proving the shards the chain assigns is a switch in Settings (proving v0), beside the 1% dev fee switch, finality voting, and signed updates that install themselves at a quiet moment with a switch to turn that off. It shows no earnings in IGN or in any currency, and it has no hardware-wallet path. Roadmap, Designed and not in the app: earnings per block in IGN with the network named, a figure in your currency, mining paused while you game, and a hardware wallet for your key. Ember is downloaded only from this domain, with the version and size on the button and the hash in the signed manifest the app checks. The next section says what is shipped and what is still a design. Nobody from Igneum will ever ask for your seed. Mining never runs in a browser, because browser compute is slow and browser mining has meant malware since Coinhive. The browser is for the dashboard, and for verifying the chain.</p>
<h3 id="testnet-terms">Testnet terms</h3>
<p><strong>No value.</strong> Testnet IGN cannot be sold, bought or redeemed, now or at mainnet. There is no airdrop, no points scheme and no promise tied to testnet balances. Mainnet starts from an empty genesis.</p>
<p><strong>Resets.</strong> The chain restarts from a fresh genesis when a consensus rule changes. Every reset is announced at least seven days ahead on the site and in the app. Balances, contracts and history do not carry over. The devnet that runs today resets without notice.</p>
<p>Farm operators get a HiveOS package. Everyone else gets Igneum Ember: install it on Windows, macOS or Linux, press Start, and the card is mining to a key the app made for you. It is the same client with a face on it. Implemented in Ember (7 October 2026): the app shows the key once and has you save it before mining starts, or takes an address you already have; the dashboard shows each card's hash rate, blocks found and accepted by the node, the node's height and peers, the next hourly program, the finality votes sent, and a proving tile with shards assigned, submitted and paid and the verifier state; the chain label names the devnet and the welcome screen says nothing is bought or sold; NVIDIA cards are capped at 80% of their default power limit for stability, with a sweep that looks for the best hash per watt, not yet measured on a card; proving the shards the chain assigns is a switch in Settings (proving v0), beside the 1% dev fee switch, finality voting, and signed updates that install themselves at a quiet moment with a switch to turn that off. It shows no earnings in IGN or in any currency, and it has no hardware-wallet path. Roadmap, Designed and not in the app: earnings per block in IGN with the network named, a figure in your currency, mining paused while you game, and a hardware wallet for your key. Ember is downloaded only from this domain, with the version and size on the button and the hash in the signed manifest the app checks. The next section says what is shipped and what is still a design. Nobody from Igneum will ever ask for your seed. Mining never runs in a browser, because browser compute is slow and browser mining has meant malware since Coinhive. The browser is for the dashboard, and for verifying the chain.</p>
<h3 id="devnet-terms">Devnet terms</h3>
<p><strong>No value.</strong> Devnet IGN cannot be sold, bought or redeemed, now or at mainnet. There is no airdrop, no points scheme and no promise tied to devnet balances. Mainnet starts from an empty genesis.</p>
<p><strong>Resets.</strong> The devnet may restart from a fresh genesis, without notice. Balances, contracts and history do not carry over.</p>
<p><strong>What the app sends home.</strong> The app version, a random machine id made at install, your operating system, the node version, the hash rate, and the app, node and miner logs (which name the address the card mines to). They go to the project's log intake, a service Igneum runs on its host, and are read by the maintainers to find faults. Never your seed phrase, never a key, never a file you did not make with the app. Nothing is sold or shared.</p>
<p>Wallet set-up for MetaMask: <a href="/metamask">chain id, RPC and the one-click button</a>. The miner software takes an optional 1% fee, off with one flag; the protocol carries no fee to anyone.</p>
<h3>Fair launch, announced</h3>
<p>Launch date and miner software published a month ahead. Pools live on testnet. HiveOS support on day one. The founders mine from genesis like everyone else, with disclosed addresses and the same software. Nobody has coins before block one. The first 30 days of mainnet run on proof of work alone, with no locked checkpoint, while vote weights build; anyone crediting deposits in that month should treat Igneum as plain proof of work with a 12-hour depth.</p>
<p>Launch date and miner software published a month ahead. Pools live before launch. HiveOS support on day one. The founders mine from genesis like everyone else, with disclosed addresses and the same software. Nobody has coins before block one. The first 30 days of mainnet run on proof of work alone, with no locked checkpoint, while vote weights build; anyone crediting deposits in that month should treat Igneum as plain proof of work with a 12-hour depth.</p>
</section>
<section id="ember">
@ -688,12 +699,12 @@ body.all .pager{display:none}
<tr><td>1. Compiler race every hour</td><td>At every hourly program the worker compiles up to 17 variants of the kernel (unroll, load path, register budget, threads per block), checks each bit for bit against the base kernel, times each for 2 s with mining paused, and keeps the fastest for the hour. The hash output is bit for bit the same</td><td>Shipped in the Metal and CUDA workers</td><td>+17.3% on the genesis seed and +21.2% on the hourly seed, Apple M5 Max, Metal, 14 variants, under load, ratios only. The RTX 5090 race is built and not yet run</td></tr>
<tr><td>2. Per-card auto-tune from the fleet</td><td>Every race writes a record to the fleet log. The best variant per card model is aggregated and sent back to every machine inside the signed update manifest, so a new card starts from the fleet's best and keeps racing</td><td>Shipped. The fleet is small, so no table yet</td><td>No fleet table yet</td></tr>
<tr><td>3. Hash per watt</td><td>Steps an NVIDIA card's power cap from 100% to 50% of its default in 10% steps, holds each for 60 s, and keeps the best MH per watt. The tile shows live MH per watt. The sweep never restarts the worker, so the hour's program is never lost</td><td>In the app for NVIDIA cards. AMD and Apple: not supported</td><td>The first sweep on a card is pending. The RTX 5090 drew 290 W at p95 under a 460 W cap, so the cap did not bind</td></tr>
<tr><td>4. Template latency</td><td>The miner subscribes to new templates instead of polling, the node builds the next template ahead, and the workers switch without draining the batch. Target under 50 ms from a new block to the card working on it, solo against the local node</td><td>In 0.3.6</td><td>Switched p50 46 to 52 ms, p90 118 to 130 ms, 3-node fast-time network, CPU miners, 0 rejected</td></tr>
<tr><td>5. Never lose a second</td><td>The next hour's program is compiled ahead and swapped in place. The watchdog, the restarts, the CPU re-check of every found hash and per-worker health on every tile keep the card hashing</td><td>Shipped</td><td>Swap 0.01 ms on the Mac and 0.00 ms on the RTX 5090, 0 rejected, live devnet. Fake-worker guards: trip 0.0 s, worker back in 2.0 s; a silent worker restarted at 60 s</td></tr>
<tr><td>4. Template latency</td><td>The miner subscribes to new templates instead of polling, the node builds the next template ahead, and the workers switch without draining the batch. Target under 50 ms from a new block to the card working on it, solo against the local node</td><td>Shipped</td><td>Switched p50 46 to 52 ms, p90 118 to 130 ms, 3-node fast-time network, CPU miners, 0 rejected</td></tr>
<tr><td>5. Never lose a second</td><td>The next hour's program is compiled ahead and swapped in place. The watchdog, the restarts, the CPU re-check of every found hash and per-worker health on every tile keep the card hashing</td><td>Shipped</td><td>Swap 0.01 ms on the Mac and 0.00 ms on the RTX 5090, 0 rejected, mining live. Fake-worker guards: trip 0.0 s, worker back in 2.0 s; a silent worker restarted at 60 s</td></tr>
<tr><td>6. Prove it in public</td><td>Every measured rate, with the card, the miner version, the date and the log entry it came from, on one page</td><td>Live</td><td><a href="/miners">The bench table</a></td></tr>
</tbody>
</table></div>
<p class="src"><b>Measured:</b> engineering log, "miner performance: variant racing" (lever 1), "first hourly program swap on the live devnet" and "miner fault guards and the app watchdog" (lever 5), 4 October 2026; the 0.3.6 release plan, the miner-latency gate (lever 4), 5 October 2026; the efficiency-sweep plan, the RTX 5090 log of 4 October 2026 (lever 3). Levers 2 and 3 are shipped code with no fleet measurement yet.</p>
<p class="src"><b>Measured:</b> engineering log, "miner performance: variant racing" (lever 1), "first hourly program swap" and "miner fault guards and the app watchdog" (lever 5), 4 October 2026; the miner-latency gate (lever 4), 5 October 2026; the efficiency-sweep plan, the RTX 5090 log of 4 October 2026 (lever 3). Levers 2 and 3 are shipped code with no fleet measurement yet.</p>
<h3>The software's fee, not the protocol's</h3>
<p>The protocol is fee-free: no dev fund, no fee to any team, foundation or fund. Ember takes a 1% software dev fee, the norm for GPU miners: default-on, switchable, 1 percent of the producer share (the 80% of emission that pays the block's miner; the proving pool is paid per record and carries none of it). One block template in 100 is requested with the dev address instead of yours, by a counter, never a random draw, so it is exactly 1 in 100 and anyone can check it from the source or from the chain. A fee block still carries your vote key, so it still adds to your finality weight. Ember prints the fee and the address when it starts, shows it in Settings next to a switch, and <code>--dev-fee 0</code> turns it off, as does <code>DEV_FEE=0</code> in a HiveOS flight sheet. Any other client is welcome.</p>
<p class="src"><b>Measured:</b> engineering log, "the software dev fee measured on a test network", 4 October 2026: 9 fee blocks in 785 from two fee-paying miners, 0 from the control at <code>--dev-fee 0</code>, the chain and the miners' counters equal.</p>
@ -724,17 +735,17 @@ body.all .pager{display:none}
<tr><td>Next</td><td>Touch ID and Windows Hello to unlock. In progress, not live. Windows build: next</td></tr>
</tbody>
</table></div>
<p class="src"><b>Source:</b> Igneum Wallet 0.1.1, 5 October 2026, now 0.1.5 on the downloads host (the wallet source: the vault, HD key, finality, QR and updater modules and the README). Verified: the over-the-air path end to end on one Mac against a test manifest. Not yet run: the Windows path, the rollback paths, a Developer ID signature.</p>
<p class="src"><b>Source:</b> Igneum Wallet, first shipped 5 October 2026, on the downloads host (the wallet source: the vault, HD key, finality, QR and updater modules and the README). Verified: the over-the-air path end to end on one Mac against a test manifest. Not yet run: the Windows path, the rollback paths, a Developer ID signature.</p>
</section>
<section id="governance">
<h2>Governance</h2>
<p>Igneum is governed by the hashrate that powers it. Pools carry their hashers' votes, so pool concentration is the governance risk, and it is public: on the devnet the top three vote keys held 34.5% of 8,090 blocks on 4 October 2026, measured.</p>
<p>Igneum is governed by the hashrate that powers it. Today, as built, pools carry their hashers' votes, so pool concentration is the governance risk, and it is public: on the devnet the top three vote keys held 34.5% of 8,090 blocks on 4 October 2026, measured.</p>
<ul>
<li><strong>Nothing needs a scheduled upgrade.</strong> The mining program, the dataset and the finality rules run themselves for ever. If the community ever ships an improvement, a better proof system or a block-rate step, it is published with test vectors at least three months ahead and activates only when 90% of blocks signal readiness. Developers can write code. Only miners can turn it on.</li>
<li><strong>Miners set what genesis leaves open.</strong> 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. There is no fund to vote on and no fee to any team, foundation or fund.</li>
<li><strong>Pools can be bypassed on transaction choice.</strong> Igneum ships Stratum v2 job declaration from day one, so a miner chooses its own transactions when its pool supports it. Pools can decline, and vote keys stay with the pool. Designed: the pool protocol is specification section 9, not yet run by any pool.</li>
<li><strong>There are no admin keys in consensus.</strong> Nothing in consensus can be paused, upgraded or reversed by any key. There is no foundation allocation to vote with and no stake to buy. The genesis apps are contracts, and each publishes its own upgrade and key policy before launch; the bridge's is the one to read. Designed, open item O-5.4. On the devnet the activation heights and one execution-state restart (6 October 2026) reach every node through the signed update manifest, so on the devnet the release key acts as the operator; the sentence above holds for mainnet consensus only once that path is closed, and the public testnet terms will say which parameters still travel that way.</li>
<li><strong>Pools can be bypassed on transaction choice.</strong> Igneum ships Stratum v2 job declaration from day one, so a miner chooses its own transactions when its pool supports it. Pools can decline. Designed: the pool protocol is specification section 9, not yet run by any pool. Vote keys stay with the miner at protocol level: the member's retained voting key is committed into its work, payment aggregation is separate and verifiable, and pool identity substitution is resisted (a pin of Igneum 2.0, pools and participation; not yet shipped).</li>
<li><strong>There are no admin keys in consensus.</strong> Nothing in consensus can be paused, upgraded or reversed by any key. There is no foundation allocation to vote with and no stake to buy. The genesis apps are contracts, and each publishes its own upgrade and key policy before launch; the bridge's is the one to read. Designed, open item O-5.4. On the devnet the activation heights and one execution-state restart (6 October 2026) reach every node through the signed update manifest, so on the devnet the release key acts as the operator; the sentence above holds for mainnet consensus only once that path is closed, and the network's terms will say which parameters still travel that way.</li>
<li><strong>The chain runs without its founders.</strong> Blocks, proofs and finality need no one. A second independent node client is the first priority after launch, and anyone can build it.</li>
</ul>
</section>
@ -747,35 +758,21 @@ body.all .pager{display:none}
<tbody>
<tr><td>1. Specification</td><td class="num">Under way; closes when the specification is out for external review</td><td>Mining generator, shard proving, finality rules, written for external review</td><td></td></tr>
<tr><td>2. Prove the proving</td><td class="num">Under way; closes at its gate</td><td>Mining program prototype on GPU and CPU, shard proving benchmark on consumer cards. So far: an RTX 5090 proves a shard in 10.9 s compressed; a CPU verifies a warp in 0.61 ms (class v2) to 2.1 ms (class v3). A mid-range card has not been measured</td><td>A mid-range GPU proves a shard in under 20 s and a CPU verifies a hash in 10 ms</td></tr>
<tr><td>3. Devnet</td><td class="num">Devnet 3 live since 7 October 2026; closes at its gate</td><td>BlockDAG node with the new mining program and EVM execution. Live now on Devnet 3, every upgrade on from block zero: class v4, the era VDF, difficulty v2, finality v3 (first lock 20:02 UK, 7 October 2026), proving v0 and v1, the ladder at rung 0, calibrated fees, Ember 0.3.22 on every machine. Measured on the first devnet on 6 October 2026: proofs landed a median of about 380 s behind the tip (the observer, /live), against the 60 s gate; Devnet 3's proof lag and proven share are read from the observer as the fleet publishes them</td><td>1 block a second held with proofs under 60 s behind the tip</td></tr>
<tr><td>4. Finality and job market</td><td class="num">Closes when the finality design passes external review and one rollup signs for the testnet</td><td>Sustained-mining finality, external proving jobs, miner client with auto-switching</td><td>Finality design passes external review and one rollup signs for testnet</td></tr>
<tr><td>5. Public testnet</td><td class="num">Armed: opens on the go word</td><td>One-click miner app on Windows, macOS and Linux, HiveOS, pools, the first rollup as a proving customer, no coin yet</td><td>1,000 independent miners run 30 days and rollup proofs are delivered on time</td></tr>
<tr><td>6. Mainnet fair launch</td><td class="num">After the testnet has passed its gate: 1,000 independent miners for 30 days and rollup proofs on time</td><td>Genesis with no premine, 30-day ramp. No listing is arranged, promised or sought by the project</td><td></td></tr>
<tr><td>3. Devnet</td><td class="num">Under way; closes at its gate</td><td>BlockDAG node with the new mining program and EVM execution, every upgrade on from block zero: class v4, the era VDF, difficulty v2, finality v3, proving v0 and v1, the ladder at rung 0, calibrated fees, Ember on every machine. The devnet's proof lag and proven share are read from the observer as the fleet publishes them</td><td>1 block a second held with proofs under 60 s behind the tip</td></tr>
<tr><td>4. Finality and job market</td><td class="num">Closes when the finality design passes external review and one external customer pays for repeat proving jobs</td><td>Sustained-mining finality, external proving jobs, miner client with auto-switching</td><td>Finality design passes external review and one external customer pays for repeat jobs of its exact workload</td></tr>
<tr><td>5. No-rescue network exercise</td><td class="num">Open; starts once proof verification is enforced in consensus</td><td>No founder-operated mining, proving, aggregation or distribution. Epoch boundaries crossed, signing interrupted, the network partitioned, major operators removed, hostile proof submissions, independently written clients, a withholding prover replaced. One-click miner, HiveOS, pools, no coin yet</td><td>Specified behaviour with no emergency algorithm change and no privileged intervention; 1,000 independent miners run 30 days</td></tr>
<tr><td>6. Mainnet fair launch</td><td class="num">After phase 5 has passed its gate</td><td>Genesis with no premine, 30-day ramp. No listing is arranged, promised or sought by the project</td><td></td></tr>
</tbody>
</table></div>
<p>Dates slip. Gates do not. Phase two decides everything. If consumer GPUs cannot prove shards fast enough, Igneum says so and does not launch on promises.</p>
<h3>The 0.3.6 release plan, 5 October 2026</h3>
<p>The proving activation of 5 October 2026 set the next release. The table is the plan as written; Ember has since reached 0.3.22 (7 October 2026), and each item's state is in the engineering log.</p>
<div class="tbl"><table>
<thead><tr><th>Item</th><th>Why</th></tr></thead>
<tbody>
<tr><td>Ember's node runs the proof verifier</td><td>On 5 October no node on the network ran one, so a producer stored proofs and never paid them. The app now points its node at the shipped prover host</td></tr>
<tr><td>The Windows package ships the prover host</td><td>A PC needed a 20-minute setup by hand before it could prove</td></tr>
<tr><td>The proving tile shows the verifier state</td><td>A node that relays proofs but never pays them says so, on the tile and on the live page</td></tr>
<tr><td>Template latency</td><td>Lever 4 above: subscribe, pre-warm, switch without draining. Switched p50 46 to 52 ms on the gate run</td></tr>
<tr><td>Instant jobs</td><td>A job published to the fleet reached a machine up to 10 minutes later. The app now holds an outbound connection and fetches the moment a job is published, 3 to 6 s expected, not yet measured</td></tr>
<tr><td>Testnet parameters behind a height switch</td><td>The testnet identity and the fee floors adopted on 5 October 2026, so the devnet is never forked by a node update</td></tr>
</tbody>
</table></div>
<p class="src"><b>Source:</b> the 0.3.6 release plan, 5 October 2026. The latency number is the plan's gate run on a 3-node fast-time network with CPU miners; the instant-jobs latency is an estimate until the first measured row.</p>
</section>
<section id="miners-ask">
<h2>Questions miners ask</h2>
<h3>Kaspa was GPU-mined too, and IceRiver shipped a chip within two years.</h3>
<p>Kaspa never promised chip resistance, and its hash was one fixed function, simple enough to put on silicon. Igneum's program is different every hour, its dataset grows past any fixed memory, and its program space widens every era, with no human involved. The public benchmark with a leaderboard ships with the public testnet, and its source is public with the repository then, so you run it on your own card and post the number. The in-house adversarial pass and the public benchmark are where a chip design that beats a GPU by more than 2x would show. And if a chip ever appears, miners are the ones who signal the response.</p>
<p>Kaspa never promised chip resistance, and its hash was one fixed function, simple enough to put on silicon. Igneum does not claim a chip cannot be built. It assumes one exists and scores it: the chip model states the energy advantage, the economic advantage and the response capability separately. The public benchmark with a leaderboard is owed work, and so is the comparison against operating GPU networks: Ravencoin's KAWPOW, Ergo and Firo's reference miner. No result exists yet. The in-house adversarial pass and the public benchmark are where a stronger chip design would show. And if a chip ever appears, miners are the ones who signal the response.</p>
<h3>Don't ASICs make a chain safer?</h3>
<p>Three parts. First, what the chain asks hash to do. Hash picks who makes the next block. It does not protect history. A checkpoint locks when signatures reach two thirds of the weight of the last 30 days of blocks (specification section 3). A locked checkpoint is never reorganised by any amount of hash: fork choice runs among the tips that pass through every certified checkpoint. Rented hash has no weight today. It can mine blocks. It cannot rewrite anything older than a lock. A renter with 60% of the network holds 0.0% of the vote on day one (the finality simulator, table B); one matching the whole honest network reaches a third of the weight on day 20 and never two thirds. The lock is fast: median 1,018 ms behind the checkpoint on the three-node test network (engineering log, the finality harness), and on the live devnet the first lock came two hours after genesis, once the window was full. Reorganisations under the lock are shallow: at 1, 2 and 5 blocks a second the deepest honest reorganisation measured was 2, 3 and 7 blocks against a determination depth of 20 (ledger F7, round 2, the fast-time network with 100-ms links); across five continents blocks reached every node at p50 343 ms and p99 666 ms (the 12-node cloud network, 4 October 2026).</p>
<p>Three parts. First, what the chain asks hash to do. Hash picks who makes the next block. It does not protect history. A checkpoint locks when signatures reach two thirds of the weight of the last 30 days of blocks (specification section 3). A locked checkpoint is never reorganised by any amount of hash: fork choice runs among the tips that pass through every certified checkpoint. Rented hash has no weight today. It can mine blocks. It cannot rewrite anything older than a lock. A renter with 60% of the network holds 0.0% of the vote on day one (the finality simulator, table B); one matching the whole honest network reaches a third of the weight on day 20 and never two thirds. The lock is fast: median 1,018 ms behind the checkpoint on the three-node test network (engineering log, the finality harness), and with a two-hour window the first lock came two hours after genesis, once the window was full. Reorganisations under the lock are shallow: at 1, 2 and 5 blocks a second the deepest honest reorganisation measured was 2, 3 and 7 blocks against a determination depth of 20 (ledger F7, round 2, the fast-time network with 100-ms links); across five continents blocks reached every node at p50 343 ms and p99 666 ms (the 12-node cloud network, 4 October 2026).</p>
<p>Second, the cost the ASIC argument skips. Kaspa's hash went to a handful of chip owners within months: the IceRiver KS0 shipped in July 2023, 17 to 20 months after launch; hashrate went from under 100 PH/s to over 700 PH/s in months and the GPU share was negligible by late 2023 (the ASIC history, row 23, approximate for the share). Bitcoin's hash comes from two manufacturers and a few pools (approximate, from memory). The first chip's owner mines in secret with an edge for months: on Monero, 85% of the hashrate vanished at the April 2018 fork, and chips were found at over 85% again four months after the next fork (row 16). A chip does not add security to a chain; it moves the chain's security to whoever owns the chip first.</p>
<p>Third, the honest part. A young GPU chain's hash is cheap to rent, and we publish the number beside the chain's own. The locks are what make that rental unable to buy a double-spend: a deposit under a lock stays, whatever the renter mines on top. Ethereum Classic (January 2019 and August 2020), Bitcoin Gold (May 2018 and January 2020) and Vertcoin (October to December 2018, December 2019) were reorganised with rented hash (the ASIC history rows 6 and 7 for Bitcoin Gold and Vertcoin; the Ethereum Classic dates approximate, from memory); Verge's 2018 reorganisations used a timestamp flaw in its multi-algorithm rule as well as hash (approximate). On those chains the rented hash rewrote history because nothing but hash held it. Here the same rental mines blocks for its hour and leaves the locks where they were. The exception is stated above: in the first 30 days of mainnet no checkpoint locks, the chain is plain proof of work with a 12-hour depth, and a rental can reorganise inside that depth; anyone crediting deposits in that month treats it so.</p>
<div class="tbl"><table>
@ -792,9 +789,9 @@ body.all .pager{display:none}
<p>Correct, and it is the first thing the external review will be paid to break. The specification is public; reviewers will be named and paid before gate 3, and the public benchmark carries the metrics they test against. Until then every finality claim here is a design claim backed by simulations and by the devnet, and the chain runs on plain GHOSTDAG without the rule, so it can be fixed without stopping the chain.</p>
<h3>Who are you?</h3>
<p>One founder, pseudonymous, working with AI systems. The design, the hostile reviews, the code, the simulators and this document were produced that way, and the commit history says so. The software is shipped by Igneum Labs LTD, Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre. The design remains the work of one founder working with AI systems, reviewed in public through the ledger. What that does and does not mean: the measurements are measurements, reproducible from the commands in the engineering log; the simulators are code anyone can run; the design claims stay design claims until people with names have tried to break them. Every criticism the project expects is kept in a ledger with its honest answer, and the entries that were right are marked conceded; the ledger is public at /ledger. No cryptographer is hired yet; the plan budgets one for phases 1 and 2, and external reviewers are named and paid before gate 3.</p>
<p>The founders mine from genesis with disclosed addresses and the same software as everyone else, and hold no coins before block one. The team is pseudonymous and there is no team page. The mining addresses are published at the public testnet; the code history is published with the repository.</p>
<p>The founders mine from genesis with disclosed addresses and the same software as everyone else, and hold no coins before block one. The team is pseudonymous and there is no team page. The mining addresses are published before launch; the code history is published with the repository.</p>
<h3>Where is the miner?</h3>
<p>On the devnet now. Igneum Ember runs on Windows, macOS and Linux, a HiveOS package exists, and the devnet's coins have no value. The public benchmark with a leaderboard ships with the public testnet. Pools come with it. The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word. All of it before any coin exists. Nothing is asked of a miner before they can run something. The <a href="#ember">Ember section</a> says what is shipped and what is still owed.</p>
<p>On the devnet now. Igneum Ember runs on Windows, macOS and Linux, a HiveOS package exists, and the devnet's coins have no value. The public benchmark with a leaderboard and the pools are owed before launch. All of it before any coin exists. Nothing is asked of a miner before they can run something. The <a href="#ember">Ember section</a> says what is shipped and what is still owed.</p>
<h3>Will my card still pay in a bear market?</h3>
<p>Block reward and in-chain proving move with the price. Proving for other chains is priced in the customer's money, and it is a small market today. What Igneum can promise is that its miners' electricity cost in that market is close to power, because the card is already running on domestic power; the price they must charge is the subsidy they forgo, which falls as one over network hash. That is an edge over data-centre provers at scale and nothing more.</p>
</section>
@ -806,7 +803,7 @@ body.all .pager{display:none}
<h3>What does a one-minute proof mean for my app?</h3>
<p>Nothing you wait for. Your transaction executes in about a second. A miner lock arrives in about two minutes and that is the finality your contract sees. The proof follows and makes the state unforgeable. Liquidations and trades act on executed state at once, as on any chain. A bridge built on Igneum waits for the lock, about two minutes.</p>
<h3>Which stablecoin, and is there liquidity?</h3>
<p>None is bridged at genesis, and no bridge is official. The project will ask Circle for native USDC during the public testnet; whether it is issued is Circle's decision. Anyone may run a bridge at their own risk until the proof bridge arrives with the consensus proof in phase two. The DEX is seeded at launch by the founders' own mined coins and by miners, and every miner is a funded wallet.</p>
<p>None is bridged at genesis, and no bridge is official. The project will ask Circle for native USDC before launch; whether it is issued is Circle's decision. Anyone may run a bridge at their own risk until the proof bridge arrives with the consensus proof in phase two. The DEX is seeded at launch by the founders' own mined coins and by miners, and every miner is a funded wallet.</p>
<h3>What do I get for being early?</h3>
<p>20% of the priority fee on every transaction that runs your code, paid to you every block, which at launch fee levels is small and stated as such above. A place in the wallet's Apps tab and the explorer from day one. First access to the proving precompile and the job market. And a user base that was not paid to arrive: the miners.</p>
<h3>How do I deploy?</h3>
@ -836,7 +833,7 @@ body.all .pager{display:none}
<p>Here are the limits, stated before anyone else states them.</p>
<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 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). Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment. The labels: the bracket modelled, approximate and provisional (the GPU side measured on the RTX 5080 and RTX 5090 at their core locks under class v4, 8 October 2026; the chip core synthesised on ASAP7 and scaled to N3, claimed, its placed gated row pending; its memory modelled). Class v5 makes the dataset the chain’s own state, so a chip that stores it or recomputes it is wrong on every item (designed, 7 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 (the published model, 5 October 2026: 0.92x per unit of silicon with a 3x fixed-function allowance, approximate). Sources: the class v6 close, section 10 (8 October 2026); the ASIC history’s Ethash rows; the chip model analysis (6 October 2026). No hash has stayed free of chips forever; Igneum does not claim to. Monero’s RandomX has held its miners on commodity hardware for about seven years: one chip shipped against it, Bitmain’s Antminer X5 (September 2023), an observed comparison, not a ceiling; the one announced beyond it, the Antminer X9, was withdrawn in mid-May 2026 before any unit shipped, its claimed core never measured; RandomX v2 was released on 25 March 2026 with its activation pending. 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. Igneum assumes a chip exists. 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 chip and economy analysis of 6 October 2026, section 5.4; ledger M32). Igneum remains competitive on accessible commodity GPUs even when specialised mining hardware is assumed to exist, remain compatible and seek profit; its security does not rely on identifying that hardware or retiring it through emergency changes. Class v6 adopts the 64-register window and retains it across every rotation. Current modelling places the strongest specialised designs assessed against the GPU tier at about 2.3x to 3.3x energy-efficiency advantage a node ahead (2.0x to 2.9x on the GPU's own node), a bracket that is approximate and provisional until the placed gated core rows land. The long-program and select-tree proposals were rejected. Economic resistance depends on development cost, deployment economics and productive hardware lifetime; family transitions receive an obsolescence benefit only where a loss of competitiveness is demonstrated; programmable multi-epoch designs are included in the assessment. The labels: the bracket modelled, approximate and provisional (the GPU side measured on the RTX 5080 and RTX 5090 at their core locks under class v4, 8 October 2026; the chip core synthesised on ASAP7 and scaled to N3, claimed, its placed gated row pending; its memory modelled). Class v5 makes the dataset the chain’s own state, so a chip that stores it or recomputes it is wrong on every item (designed, 7 October 2026; under evaluation (Deliverable 3), not counted as a defence until justified or dropped). The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090 (the published model, 5 October 2026: 0.92x per unit of silicon with a 3x fixed-function allowance, approximate). Sources: the class v6 close, section 10 (8 October 2026); the ASIC history’s Ethash rows; the chip model analysis (6 October 2026). No hash has stayed free of chips forever; Igneum does not claim to. Monero’s RandomX has held its miners on commodity hardware for about seven years: one chip shipped against it, Bitmain’s Antminer X5 (September 2023), an observed comparison, not a ceiling; the one announced beyond it, the Antminer X9, was withdrawn in mid-May 2026 before any unit shipped, its claimed core never measured; RandomX v2 was released on 25 March 2026 with its activation pending. 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 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>
@ -844,9 +841,13 @@ body.all .pager{display:none}
<li><strong>Finality that no amount of hardware can break.</strong> No. A miner holding a third of the last 30 days of blocks can split finality during a network partition, and two thirds can lock a bad checkpoint for a double-spend bounded by the 12-hour finality depth. Reaching a third takes at least ten days of producing every block on the chain, in public; an attacker matching the honest network needs twenty days for a third and never reaches two thirds. That is harder than attacking Bitcoin, where a majority can reorganise at once, and it is the limit of proof of work without stake or an outside chain. Igneum chose those limits on purpose. The floor is also bounded in time: an honest partition that lasts long enough for each side's own new blocks to reach two thirds of its window locks on both sides, about ten days of a 30-day window at an even split, and an operator must then resolve it (measured on a test network, 4 October 2026).</li>
<li><strong>Finality that never pauses.</strong> No. A lock needs two thirds of all 30-day mining weight. Whenever less than two thirds of that weight is connected and signing, finality pauses until it returns or ages out of the window, up to 30 days. The chain keeps running on proof of work and the node reports the pause.</li>
<li><strong>A label that costs nothing.</strong> No. Some investors and exchanges read "GPU-mined" as 2021 whatever the proofs do, and nothing here measures that cost. The only evidence will be whether the first miner apps and verifiable-compute apps sign despite the label.</li>
<li><strong>A chain you can debug today.</strong> Not yet. The node does not serve debug_traceTransaction, eth_subscribe or eth_getProof, and there is no public RPC, faucet or explorer for the devnet. They come in a fixed order (docs and templates, then the tracing and subscription RPCs, then a public RPC, listing and faucet, then the explorer) and no outside team is invited to build before the second step is done.</li>
<li><strong>A chain you can debug today.</strong> Not yet. The node does not serve debug_traceTransaction, eth_subscribe or eth_getProof. The explorer, the faucet and the reference apps run on the devnet; the tracing and subscription RPCs are still owed.</li>
<li><strong>A veto on job results.</strong> No. A segment proof is checked against every node's own execution; a proving job for another chain is not, because no full node can re-run an arbitrary program, so a soundness bug in the proof system in force reaches the requesting contract. A job output can mint nothing and touch no system contract, and an app that acts irreversibly on a job result keeps its own fallback.</li>
<li><strong>A delay function that outlives a quantum computer.</strong> No. The class-group delay between a locked checkpoint and the next program seed falls to the same machine that would forge the vote keys; it is flagged in the specification, not yet sized, and the fallback is a hash-chain delay behind the same version byte that moves the signature scheme, so both flip in one class change. A grindable hourly seed is a liveness nuisance against the lottery, not a break of finality.</li>
<li><strong>Proof verification in consensus.</strong> Not yet. Today, under proving v0, every producer verifies off the consensus path, and consensus checks the record's statement against native execution. Enforcement in consensus (verifier_in_consensus, proof_rule_active_from) is Open, and it is the prerequisite of the no-rescue network exercise (Deliverable 5) and of the proving economy being a protocol guarantee.</li>
<li><strong>Proving on every card.</strong> No. NVIDIA proves; AMD and Apple mine. The proving stack is judged on the full pipeline: inputs, proving, aggregation, verification, payment, memory and the mining income forgone.</li>
<li><strong>What proofs do not give.</strong> Proven execution is not finality. EVM compatibility is not Ethereum security. ZK is not privacy.</li>
<li><strong>A ranking.</strong> No. Igneum makes no leading or number-one claim. Benchmarks against Ravencoin's KAWPOW, Ergo and Firo's reference miner are owed work; no result exists yet.</li>
<li><strong>A finished protocol.</strong> The sustained-mining finality rule is the newest piece and the one that external review will try hardest to break. The specification, the review and the benchmarks are published as they happen.</li>
</ul>
<p>Everything in this document is subject to the gates on the roadmap. Nothing in it is an offer to sell anything. Found an error, or a criticism this document does not answer? Email <a href="mailto:hello@igneum.network">hello@igneum.network</a>, or open an issue on the public specification repository: <a href="https://git.igneum.network/igneum-network/spec/issues" rel="noopener">git.igneum.network/igneum-network/spec/issues</a>. Post reaches Igneum Labs LTD, Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre.</p>
@ -858,6 +859,7 @@ body.all .pager{display:none}
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -883,7 +885,6 @@ body.all .pager{display:none}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -895,7 +896,6 @@ body.all .pager{display:none}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -921,7 +921,7 @@ body.all .pager{display:none}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -230,7 +230,7 @@ details.tablebar summary{display:flex;align-items:center}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -260,12 +260,10 @@ details.tablebar summary{display:flex;align-items:center}
<div class="panel-list">
<a href="/live" data-nav="live" aria-current="page"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -283,7 +281,7 @@ details.tablebar summary{display:flex;align-items:center}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -304,12 +302,10 @@ details.tablebar summary{display:flex;align-items:center}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live" aria-current="page"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -323,7 +319,7 @@ details.tablebar summary{display:flex;align-items:center}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -522,6 +518,7 @@ details.tablebar summary{display:flex;align-items:center}
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -547,7 +544,6 @@ details.tablebar summary{display:flex;align-items:center}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -559,7 +555,6 @@ details.tablebar summary{display:flex;align-items:center}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -585,7 +580,7 @@ details.tablebar summary{display:flex;align-items:center}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Add Igneum to MetaMask</title>
<meta name="description" content="Add the Igneum network to MetaMask or any Ethereum wallet in one click: chain id, RPC URL, the IGN symbol and 18 decimals. Devnet today, public testnet next.">
<meta name="description" content="Add the Igneum network to MetaMask or any Ethereum wallet in one click: chain id, RPC URL, the IGN symbol and 18 decimals. The devnet is live.">
<link rel="canonical" href="https://igneum.network/metamask">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
@ -91,7 +91,7 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" data-active aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -121,12 +121,10 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -144,7 +142,7 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -165,12 +163,10 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -184,7 +180,7 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -250,28 +246,13 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<p class="note">Igneum runs the Ethereum virtual machine, so MetaMask and every other Ethereum wallet work unchanged. The wallet needs four things: the chain id, an RPC URL, the symbol <b>IGN</b> and <b>18</b> decimals. The button below sends them to the wallet with the standard <code>wallet_addEthereumChain</code> request; the wallet shows them to you and asks before adding anything. Nothing on this page asks for a seed phrase or a key. Nobody from Igneum will ask for your seed.</p>
<div class="grid">
<div class="card" id="testnet">
<span class="tag">Public testnet · coming</span>
<h3>Igneum testnet</h3>
<p>The network the one-click miner app joins at public testnet. Coins on it have no value and the chain resets with notice (<a href="/litepaper#testnet-terms">testnet terms</a>).</p>
<dl>
<dt>Network name</dt><dd>Igneum Testnet</dd>
<dt>Chain id</dt><dd>4462 (0x116e)</dd>
<dt>RPC URL</dt><dd id="testnet-rpc">https://rpc.testnet.igneum.network <span style="color:var(--ash)">(published with the testnet)</span></dd>
<dt>Symbol</dt><dd>IGN</dd>
<dt>Decimals</dt><dd>18</dd>
<dt>Explorer</dt><dd>published with the testnet</dd>
</dl>
<button class="btn" type="button" data-add="testnet" disabled>Add Igneum Testnet to MetaMask</button>
<p class="status" data-status="testnet">The button switches on when the public RPC is live.</p>
</div>
<div class="card" id="devnet">
<span class="tag">Devnet · live now</span>
<h3>Igneum Devnet 3, through the public RPC or your own node</h3>
<h3>Igneum 2.0 devnet, through the public RPC or your own node</h3>
<p>The public RPC answers at rpc.devnet.igneum.network; the Igneum Miner app also runs a full node on your machine and serves the Ethereum RPC on it, and the wallet can point at either. The devnet is a developer network: it resets without notice and its coins have no value.</p>
<dl>
<dt>Network name</dt><dd>Igneum Devnet 3</dd>
<dt>Chain id</dt><dd id="dev-chain">4464 (0x1170) on Devnet 3, since its class v5 floor at DAA 68,400 on 8 October 2026 (4463 before it)</dd>
<dt>Network name</dt><dd>Igneum 2.0 devnet</dd>
<dt>Chain id</dt><dd id="dev-chain">4464 (0x1170)</dd>
<dt>RPC URL</dt><dd>https://rpc.devnet.igneum.network (a node you run serves http://127.0.0.1:26790)</dd>
<dt>Symbol</dt><dd>IGN</dd>
<dt>Decimals</dt><dd>18</dd>
@ -283,11 +264,11 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
</div>
<h2 id="manual">Add it by hand</h2>
<p class="note">If the wallet has no one-click support, or you prefer to type: MetaMask, Settings, Networks, Add a network manually. Enter the values from the card above. Any wallet that supports custom EVM networks takes the same four fields.</p>
<p class="note">If the wallet has no one-click support, or you prefer to type: MetaMask, Settings, Networks, Add a network manually. Enter the values from the devnet card above. Any wallet that supports custom EVM networks takes the same four fields.</p>
<ol>
<li>Network name: Igneum Testnet (or Igneum Devnet for your own node).</li>
<li>Network name: Igneum 2.0 devnet.</li>
<li>RPC URL: the one on the card.</li>
<li>Chain id: 4462 for the testnet, 4464 for Devnet 3.</li>
<li>Chain id: 4464 for the devnet.</li>
<li>Currency symbol: IGN. Decimals: 18.</li>
</ol>
@ -296,23 +277,24 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<pre>await window.ethereum.request({
method: 'wallet_addEthereumChain',
params: [{
chainId: '0x116e', // 4462, the Igneum testnet (0x1170 = 4464, Devnet 3)
chainName: 'Igneum Testnet',
chainId: '0x1170', // 4464, Igneum 2.0 devnet
chainName: 'Igneum 2.0 devnet',
nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 },
rpcUrls: ['https://rpc.testnet.igneum.network'],
blockExplorerUrls: []
rpcUrls: ['https://rpc.devnet.igneum.network'],
blockExplorerUrls: ['https://igneum.network/explorer']
}]
});</pre>
<p class="note">Igneum signs transactions with the Ethereum rules (EIP-155, EIP-1559 and legacy envelopes). A transaction signed for another chain id is refused. Gas has two dimensions on Igneum, execution and proving, and the node folds the second into the price it quotes, so <code>eth_gasPrice</code> and <code>eth_estimateGas</code> work as they do on Ethereum. The <a href="/litepaper#builders-ask">litepaper</a> has the differences.</p>
<h2 id="app-wallet">The app and the Igneum Wallet</h2>
<p class="note">The Igneum Ember app (still labelled Igneum Miner in its window) makes an address for your earnings and shows you its seed phrase once. That address is an ordinary Ethereum account: import the seed into MetaMask and the balance is there. <a href="/wallet">Igneum Wallet</a> 0.1.5 is out for macOS and verifies finality itself; its Apps tab is in the roadmap. MetaMask works today and is the way in on Windows and Linux.</p>
<p class="note">The Igneum Ember app (still labelled Igneum Miner in its window) makes an address for your earnings and shows you its seed phrase once. That address is an ordinary Ethereum account: import the seed into MetaMask and the balance is there. <a href="/wallet">Igneum Wallet</a> is out for macOS and verifies finality itself; its Apps tab is in the roadmap. MetaMask works today and is the way in on Windows and Linux.</p>
<p class="asof">Testnet coin for testing: <a href="/faucet">the faucet</a> sends 10 IGN per address per day. Chain ids 4461 (mainnet) and 4462 (testnet) are fixed in the node; Devnet 3 answers 4464 since its class v5 floor crossed at DAA 68,400 on 8 October 2026 (4463 before it), and eth_chainId on the public RPC is the answer to trust. The testnet RPC URL above is a placeholder until the testnet opens; this page is updated the day it does.</p>
<p class="asof">Coin for testing: <a href="/faucet">the faucet</a> sends 10 IGN per address per day on the devnet. Chain id 4461 is reserved for mainnet, which has not started. The devnet answers 4464, and eth_chainId on the public RPC is the answer to trust.</p>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -338,7 +320,6 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -350,7 +331,6 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -376,7 +356,7 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -384,18 +364,17 @@ ol{margin:0 0 14px;padding-left:22px}li{margin-bottom:6px}
(function(){
// one request per button; the wallet shows the chain to the user and decides. No key, no seed, no signature here.
var CHAINS = {
testnet: { chainId: '0x116e', chainName: 'Igneum Testnet', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['https://rpc.testnet.igneum.network'], blockExplorerUrls: [] },
devnet: { chainId: '0x1170', chainName: 'Igneum Devnet 3', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['https://rpc.devnet.igneum.network'], blockExplorerUrls: ['https://igneum.network/explorer'] }
devnet: { chainId: '0x1170', chainName: 'Igneum 2.0 devnet', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['https://rpc.devnet.igneum.network'], blockExplorerUrls: ['https://igneum.network/explorer'] }
};
function status(name, text) { var el = document.querySelector('[data-status="' + name + '"]'); if (el) el.textContent = text; }
// Devnet 3's chain id moves at every class floor (4463 to 4464 at the class v5 floor, 8 October 2026), so the entry's id and
// the card's figure are read from the public RPC at load; the pinned 0x1170 is the answer when the RPC does not reply.
// the devnet's chain id is read from the public RPC at load, for the entry and the card's figure;
// the pinned 0x1170 is the answer when the RPC does not reply.
fetch('https://rpc.devnet.igneum.network', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'eth_chainId', params: [] }) })
.then(function (r) { return r.json(); })
.then(function (d) {
var hex = d && typeof d.result === 'string' && /^0x[0-9a-f]+$/i.test(d.result) ? d.result.toLowerCase() : null; if (!hex) return;
CHAINS.devnet.chainId = hex;
var cell = document.getElementById('dev-chain'); if (cell) cell.textContent = parseInt(hex, 16) + ' (' + hex + ') on Devnet 3, read from the public RPC now; 4463 before its class v5 floor at DAA 68,400 on 8 October 2026';
var cell = document.getElementById('dev-chain'); if (cell) cell.textContent = parseInt(hex, 16) + ' (' + hex + ') on the Igneum 2.0 devnet, read from the public RPC now';
}).catch(function () {});
Array.prototype.forEach.call(document.querySelectorAll('[data-add]'), function (btn) {
btn.addEventListener('click', function () {

View file

@ -1,144 +1,12 @@
{
"_about": "Rows of the public bench table at /miners (site/build.mjs). One row per card, generator version and miner version: the best measured rate. Later jobs append rows. Fields: card, generator (v1 | v2), mh_s (best measured MH/s), mh_per_w (MH per watt, null when the power was not measured), miner (the miner or package version), date (YYYY-MM-DD), source (the docs/bench-log.md heading, or the job id), by ('measured by the team' | 'reported by the fleet'), note (short, optional), watts (board power at the rate, null when not read), v4_cost (what the class v4 shadow costs this card against the class v3 control: watts and rate, measured; 'not measured' when not), tuned (the card's tune state at the row: 'full Ember Tune: <point>' | 'clock lock <MHz>, cap <W>' | 'stock, bench only' | 'stock, mining'), driver_os (driver and OS where known). No machine names, no addresses, no owner names: the build scrubs the page and fails on any that survive. hive (the copy-in HiveOS flight-sheet values at the row's tune point: core MHz (a lock), mem MHz, pl W; each labelled measured with the date, or 'stock' where no tune point exists). group ('buy' | 'datacentre'); watt_basis ('chip' when the watts are the chip's, not the wall's); v4_short (the one-clause class v4 figure for the column).",
"_about": "Rows of the public bench table at /miners (site/build.mjs). One row per card on the current program: the best measured rate. Later jobs append rows. Fields: card, generator (v1 | v2), mh_s (best measured MH/s), mh_per_w (MH per watt, null when the power was not measured), miner (the miner or package version), date (YYYY-MM-DD), source (the docs/bench-log.md heading, or the job id), by ('measured by the team' | 'reported by the fleet'), note (short, optional), watts (board power at the rate, null when not read), v4_cost (what the class v4 shadow costs this card against the class v3 control: watts and rate, measured; 'not measured' when not), tuned (the card's tune state at the row: 'full Ember Tune: <point>' | 'clock lock <MHz>, cap <W>' | 'stock, bench only' | 'stock, mining'), driver_os (driver and OS where known). No machine names, no addresses, no owner names: the build scrubs the page and fails on any that survive. hive (the copy-in HiveOS flight-sheet values at the row's tune point: core MHz (a lock), mem MHz, pl W; each labelled measured with the date, or 'stock' where no tune point exists). group ('buy' | 'datacentre'); watt_basis ('chip' when the watts are the chip's, not the wall's); v4_short (the one-clause class v4 figure for the column).",
"rows": [
{
"card": "NVIDIA RTX 5090 (32 GB)",
"generator": "v1",
"mh_s": 228.95,
"mh_per_w": null,
"miner": "proto-cuda bench (prototype, not mining)",
"date": "2026-10-03",
"source": "bench log: 3 October 2026, RTX 5090, memory-hard dataset (pack igneum-genesis-mh)",
"by": "measured by the team",
"note": "genesis program, 104 loads per hash, 1 GiB dataset",
"watts": null,
"v4_cost": "not measured",
"driver_os": "",
"tuned": "stock, bench only",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "stock (no measured tune point; the 5080 and 9070 XT passes and the class v4 efficiency pass land theirs when read)"
},
"group": "buy"
},
{
"card": "NVIDIA RTX 5090 (32 GB)",
"generator": "v1",
"mh_s": 185.3,
"mh_per_w": null,
"miner": "proto-cuda bench (prototype, not mining)",
"date": "2026-10-03",
"source": "bench log: 3 October 2026, RTX 5090 first run, dataset sweep and second program",
"by": "measured by the team",
"note": "hourly program, 128 loads per hash, 1 GiB dataset",
"watts": null,
"v4_cost": "not measured",
"driver_os": "",
"tuned": "stock, bench only",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "stock (no measured tune point; the 5080 and 9070 XT passes and the class v4 efficiency pass land theirs when read)"
},
"group": "buy"
},
{
"card": "NVIDIA RTX 5090 (32 GB)",
"generator": "v2",
"mh_s": 124.2,
"mh_per_w": null,
"miner": "Igneum Miner 0.3.0 package, prebuilt NVRTC worker",
"date": "2026-10-04",
"source": "bench log: 4 October 2026, the gfx1036 worker fault and what the Mac could and could not reproduce",
"by": "measured by the team",
"note": "live devnet v4, 128 loads per hash, CPU re-check clean, 0 rejected",
"watts": null,
"v4_cost": "not measured",
"driver_os": "",
"tuned": "stock, mining",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "stock (no measured tune point; the 5080 and 9070 XT passes and the class v4 efficiency pass land theirs when read)"
},
"group": "buy"
},
{
"card": "Apple M5 Max (40 GPU cores, Metal)",
"generator": "v1",
"mh_s": 45.2,
"mh_per_w": null,
"miner": "proto-metal bench (prototype, not mining)",
"date": "2026-10-03",
"source": "bench log: 3 October 2026, RTX 5090 first run (the Apple row of the same table)",
"by": "measured by the team",
"note": "genesis program, 1 GiB dataset",
"watts": null,
"v4_cost": "not measured",
"driver_os": "",
"tuned": "stock, bench only",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "stock (no measured tune point; the 5080 and 9070 XT passes and the class v4 efficiency pass land theirs when read)"
},
"group": "buy"
},
{
"card": "Apple M5 Max (40 GPU cores, Metal)",
"generator": "v2",
"mh_s": 26.7,
"mh_per_w": null,
"miner": "igneum-miner devnet v4, Metal worker with prepare",
"date": "2026-10-04",
"source": "bench log: 4 October 2026, first hourly program swap on the live devnet: compile-ahead, no pause, two cards",
"by": "measured by the team",
"note": "live devnet v4, unbroken through the hour boundary",
"watts": null,
"v4_cost": "not measured",
"driver_os": "",
"tuned": "stock, mining",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "stock (no measured tune point; the 5080 and 9070 XT passes and the class v4 efficiency pass land theirs when read)"
},
"group": "buy"
},
{
"card": "Apple silicon laptop (model not reported)",
"generator": "v2",
"mh_s": 24.3,
"mh_per_w": null,
"miner": "Igneum Miner 0.3.1 (DMG)",
"date": "2026-10-04",
"source": "bench log: 4 October 2026, first outside machine on the devnet: an Apple silicon laptop through the Igneum Miner app",
"by": "reported by the fleet",
"note": "21.0 MH/s average over 7 minutes, 24.3 MH/s at the moment of the report, 33 accepted blocks",
"watts": null,
"v4_cost": "not measured",
"driver_os": "",
"tuned": "stock, mining",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "stock (no measured tune point; the 5080 and 9070 XT passes and the class v4 efficiency pass land theirs when read)"
},
"group": "buy"
},
{
"card": "NVIDIA RTX 5060 Ti (16 GB)",
"generator": "v2",
"mh_s": 30.9,
"mh_per_w": 0.269,
"miner": "Igneum Miner 0.3.19 package, prebuilt NVRTC worker (bench mode, class v4 program)",
"miner": "Igneum Miner package, prebuilt NVRTC worker (bench mode, class v4 program)",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, the first 16 GB card: an RTX 5060 Ti in a Thunderbolt enclosure (run b)",
"by": "measured by the team",
@ -161,9 +29,9 @@
"mh_s": 136.1,
"watts": 226.8,
"mh_per_w": 0.563,
"miner": "Igneum Miner 0.3.13 + Ember Tune kit 6 (mining, class v3 program)",
"miner": "Igneum Miner + Ember Tune kit 6 (mining, class v3 program)",
"date": "2026-10-06",
"source": "bench log: 6 October 2026, Ember run 6; Counter ASIC 3.0 status: item 8's 5090 rows and the class v4 efficiency pass (7 October 2026)",
"source": "bench log: 6 October 2026, Ember run 6; the chip-model measurement record: item 8's 5090 rows and the class v4 efficiency pass (7 October 2026)",
"by": "measured by the team",
"note": "one row for the card: best rate 136.1 MH/s at 350 W stock unlocked on the class v3 control (bench, 6 October 2026); best MH per wall watt 127.71 MH/s at 226.8 W at the full Ember Tune point, 1,854 MHz (Ember run 6, 6 October 2026); the class v4 efficiency pass (7 October 2026, 60 s steps, every fingerprint matched): unlocked 136.84 MH/s at 475.5 W (0.288), the 1,400 MHz lock 134.98 at 316.3 W (0.427), the knee 1,300 MHz, the best point 1,200 MHz 133.80 at 305.1 W (0.439); the fleet's standing 5090 reads 100.6 MH/s at 308 W beside its prover (reported by the fleet)",
"v4_cost": "class v4 at the 1,200 MHz knee: 133.80 MH/s at 305.1 W (0.439 MH/W); the premium over class v3 81.8 W at the best points and 145.3 W unlocked, measured 7 October 2026",
@ -188,7 +56,7 @@
"mh_per_w": 0.389,
"miner": "igneum-worker-cuda bench (installed worker), class v3 control",
"date": "2026-10-06",
"source": "Counter ASIC 3.0 status: item 8, the RTX 4070 rows (job run-ca3-pc1-4070-shadow-20261006)",
"source": "the chip-model measurement record: item 8, the RTX 4070 rows (job run-ca3-pc1-4070-shadow-20261006)",
"by": "measured by the team",
"note": "79.3 to 79.8 W at the tune point; 28.78 MH/s at 75.6 W (0.381) in Ember run 6 mining",
"v4_cost": "+30 W (79 to 109 W) for +0.4 percent of rate at 102,100 ops per hash, measured 6 October 2026",
@ -210,21 +78,21 @@
"mh_per_w": 0.127,
"miner": "igneum-worker-opencl bench (installed worker), class v3 control",
"date": "2026-10-08",
"source": "Counter ASIC 3.0 status: the RX 9070 XT's first measured grid on the AMD knob (job run-ca3-pc1-amd-grid-9070-20261008-b, 24 of 24 points, 8 October 2026) for the rate and the watts; the 9070 XT Ember tune row (run-ca3-pc1-ember-9070-20261007) for the app's own stock reading",
"source": "the chip-model measurement record: the RX 9070 XT's first measured grid on the AMD knob (job run-ca3-pc1-amd-grid-9070-20261008-b, 24 of 24 points, 8 October 2026) for the rate and the watts; the 9070 XT Ember tune row (run-ca3-pc1-ember-9070-20261007) for the app's own stock reading",
"by": "measured by the team",
"note": "the grid's stock point reads 3,292 MHz, 195.8 W, 0.097 MH per watt (the app's own stock reading of 7 October was 202 W); the clock offset alone reaches 2,924 MHz at 159.2 W and the power limit alone 184.4 W; the best point is both together. The knob ships in 0.3.25, so until that cut serves the figure reads \"with the 0.3.25 knob\". Against the 5090 at its class v4 1,200 MHz lock (133.8 MH/s at 305 W, 0.43 MH per watt) the 9070 XT at its best point sits 3.5x behind per watt; against the 5090 at its 1,300 MHz knee (134.6 at 223 W, 0.60) about a fifth",
"note": "the grid's stock point reads 3,292 MHz, 195.8 W, 0.097 MH per watt (the app's own stock reading of 7 October was 202 W); the clock offset alone reaches 2,924 MHz at 159.2 W and the power limit alone 184.4 W; the best point is both together. Against the 5090 at its class v4 1,200 MHz lock (133.8 MH/s at 305 W, 0.43 MH per watt) the 9070 XT at its best point sits 3.5x behind per watt; against the 5090 at its 1,300 MHz knee (134.6 at 223 W, 0.60) about a fifth",
"v4_cost": "+2 percent of rate (19.29 against 18.92 MH/s) at 102,100 ops per hash, watts owed, measured 6 October 2026",
"tuned": "core -500 MHz, power -30 percent, with the 0.3.25 knob: 2,921 MHz, 149.3 W at 18.96 MH/s, a 24 percent saving at the same rate (the rate flat at 18.93 to 18.98 MH/s on all 24 points, the knob moves watts only); measured 8 October 2026",
"tuned": "core -500 MHz, power -30 percent, with the AMD knob: 2,921 MHz, 149.3 W at 18.96 MH/s, a 24 percent saving at the same rate (the rate flat at 18.93 to 18.98 MH/s on all 24 points, the knob moves watts only); measured 8 October 2026",
"driver_os": "Adrenalin 26.9.2, Windows 11",
"hive": {
"core_mhz": null,
"mem_mhz": null,
"pl_w": null,
"label": "the AMD knob is the 0.3.25 app's (core -500 MHz, power -30 percent); no Hive flight-sheet values yet"
"label": "the AMD knob is the app’s (core -500 MHz, power -30 percent); no Hive flight-sheet values yet"
},
"group": "buy",
"mh_s_display": "19.0 stock (19.0 with the 0.3.25 knob)",
"watts_display": "149.3 with the 0.3.25 knob (195.8 stock)"
"mh_s_display": "19.0 stock (19.0 with the AMD knob)",
"watts_display": "149.3 with the AMD knob (195.8 stock)"
},
{
"card": "Apple M5 Max (40 GPU cores, Metal)",
@ -234,7 +102,7 @@
"mh_per_w": 1.29,
"miner": "igneum-miner Metal worker, class v3 program",
"date": "2026-10-06",
"source": "Counter ASIC 3.0 status: item 8, the Mac rows (IOReport GPU and DRAM watts)",
"source": "the chip-model measurement record: item 8, the Mac rows (IOReport GPU and DRAM watts)",
"by": "measured by the team",
"note": "GPU plus DRAM watts from IOReport, not wall power, so its MH per watt is not ranked against the cards' wall figures",
"v4_cost": "+16 W for 1.5 percent of rate at 102,100 ops per hash, measured 6 October 2026",
@ -259,7 +127,7 @@
"date": "2026-10-07",
"source": "bench log: 7 October 2026, the Intel Arc B580 (eGPU equals slot)",
"by": "measured by the team",
"note": "the same rate in the Thunderbolt enclosure and the slot; watts not read on this run. Re-read 8 October 2026: the installed 0.3.21 OpenCL worker on this card passes its own self-test with the devnet pack (96 of 96 vector lanes) and mined 54 CPU-re-checked blocks at 10.58 MH/s, so the row stands; a kit build from a branch without the Intel rotate-fold rewrite failed its self-test on this card the same morning, a build fault and not an Arc result",
"note": "the same rate in the Thunderbolt enclosure and the slot; watts not read on this run. Re-read 8 October 2026: the installed OpenCL worker on this card passes its own self-test with the devnet pack (96 of 96 vector lanes) and mined 54 CPU-re-checked blocks at 10.58 MH/s, so the row stands; a kit build from a branch without the Intel rotate-fold rewrite failed its self-test on this card the same morning, a build fault and not an Arc result",
"v4_cost": "0.1 percent of rate, measured 7 October 2026",
"tuned": "stock, bench only",
"driver_os": "Intel driver, Windows 11",
@ -305,7 +173,7 @@
"date": "2026-10-08",
"source": "bench log: 7 to 8 October 2026, the class v4 efficiency passes: the core clock lock on the RTX 5090 and the RTX 5080",
"by": "measured by the team",
"note": "the knee sits between 1,000 and 900 MHz (the rate within 0.3 percent of unlocked down to 1,000 MHz, 5.2 percent off at 900 on class v4); the draw floors from 1,500 MHz down. The rented fleet's 5080 read 71.16 MH/s at 143.4 W stock (hive package 0.3.20, Ubuntu 24.04, 7 October 2026), 110 W under this card's stock draw: the method differs per row (nvidia-smi on Linux, the runner's card switch on Windows) and neither is taken as the card's figure until the fleet re-measures",
"note": "the knee sits between 1,000 and 900 MHz (the rate within 0.3 percent of unlocked down to 1,000 MHz, 5.2 percent off at 900 on class v4); the draw floors from 1,500 MHz down. The rented fleet's 5080 read 71.16 MH/s at 143.4 W stock (the hive package, Ubuntu 24.04, 7 October 2026), 110 W under this card's stock draw: the method differs per row (nvidia-smi on Linux, the runner's card switch on Windows) and neither is taken as the card's figure until the fleet re-measures",
"v4_cost": "83.4 W unlocked and 41 W at the best points for 0.2 percent of rate (class v4 71.41 MH/s at 253.1 W against class v3 71.28 at 169.7 W unlocked; measured 8 October 2026)",
"tuned": "core lock 1,100 MHz (the efficiency pass's best point: 71.20 MH/s at 146.6 W, 0.486 MH/W, 106.5 W recovered for 0.29 percent of rate), memory 14,801 MHz, the driver's power limit untouched",
"driver_os": "NVIDIA driver 617.14, Windows 11",
@ -326,9 +194,9 @@
"mh_s": 38.98,
"watts": 178.3,
"mh_per_w": 0.219,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -350,11 +218,11 @@
"mh_s": 33.66,
"watts": null,
"mh_per_w": null,
"miner": "hive package 0.3.20 igneum-miner, class v4 program",
"miner": "the hive package igneum-miner, class v4 program",
"date": "2026-10-07",
"source": "the fleet's 0.3.21 wipe canary (status line, 7 October 2026)",
"source": "a fleet canary (status line, 7 October 2026)",
"by": "reported by the fleet",
"note": "the 0.3.21 wipe canary's status line, 17:07Z, beside its node; watts not read",
"note": "a fleet canary’s status line, 17:07Z, beside its node; watts not read",
"v4_cost": "not measured (class v4 program only)",
"tuned": "stock, mining",
"driver_os": "NVIDIA driver, Ubuntu 24.04",
@ -372,7 +240,7 @@
"mh_s": 43.72,
"watts": null,
"mh_per_w": null,
"miner": "hive package 0.3.20 igneum-miner, class v4 program",
"miner": "the hive package igneum-miner, class v4 program",
"date": "2026-10-07",
"source": "the fleet's standing voter (status line, 7 October 2026) and the sweep's hands row",
"by": "reported by the fleet",
@ -394,9 +262,9 @@
"mh_s": 58.95,
"watts": 267.3,
"mh_per_w": 0.221,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": "283.0 W maximum. Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -418,7 +286,7 @@
"mh_s": 50.04,
"watts": null,
"mh_per_w": null,
"miner": "hive package 0.3.20 igneum-miner, class v4 program",
"miner": "the hive package igneum-miner, class v4 program",
"date": "2026-10-07",
"source": "the fleet's standing voters (status lines, 7 October 2026)",
"by": "reported by the fleet",
@ -440,9 +308,9 @@
"mh_s": 61.95,
"watts": 249.5,
"mh_per_w": 0.248,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -464,7 +332,7 @@
"mh_s": 52.25,
"watts": 183.1,
"mh_per_w": 0.285,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, the RTX 4090 hands row",
"by": "measured by the fleet",
@ -486,11 +354,11 @@
"mh_s": 26.89,
"watts": 111.6,
"mh_per_w": 0.241,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": "114.5 W maximum; the Devnet 3 boxes read 23.7 to 25.7 MH/s beside their nodes. Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"note": "114.5 W maximum; the devnet boxes read 23.7 to 25.7 MH/s beside their nodes. Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
"tuned": "stock, bench only (rented, not tuned)",
"driver_os": "NVIDIA driver 580.126.09, Ubuntu 24.04",
@ -510,9 +378,9 @@
"mh_s": 33.1,
"watts": 129.5,
"mh_per_w": 0.256,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -534,9 +402,9 @@
"mh_s": 20.1,
"watts": 77.5,
"mh_per_w": 0.259,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -558,9 +426,9 @@
"mh_s": 31.26,
"watts": 107.3,
"mh_per_w": 0.291,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -582,9 +450,9 @@
"mh_s": 31.27,
"watts": 75.4,
"mh_per_w": 0.415,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -606,9 +474,9 @@
"mh_s": 52.01,
"watts": 102.8,
"mh_per_w": 0.506,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -630,9 +498,9 @@
"mh_s": 78.43,
"watts": 145.6,
"mh_per_w": 0.539,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -654,7 +522,7 @@
"mh_s": 47.64,
"watts": null,
"mh_per_w": null,
"miner": "hive package 0.3.20 igneum-miner, class v4 program",
"miner": "the hive package igneum-miner, class v4 program",
"date": "2026-10-07",
"source": "the fleet's standing voter (status line, 7 October 2026)",
"by": "reported by the fleet",
@ -676,9 +544,9 @@
"mh_s": 56.36,
"watts": 240.7,
"mh_per_w": 0.234,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -700,9 +568,9 @@
"mh_s": 154.97,
"watts": 299.6,
"mh_per_w": 0.517,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -724,9 +592,9 @@
"mh_s": 138.39,
"watts": 266.3,
"mh_per_w": 0.52,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -748,9 +616,9 @@
"mh_s": 313.04,
"watts": 432.9,
"mh_per_w": 0.723,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -772,9 +640,9 @@
"mh_s": 416.35,
"watts": 855.6,
"mh_per_w": 0.487,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",
@ -796,9 +664,9 @@
"mh_s": 130.49,
"watts": 288.7,
"mh_per_w": 0.452,
"miner": "hive package 0.3.20 igneum-worker-cuda, class v4 program",
"miner": "the hive package igneum-worker-cuda, class v4 program",
"date": "2026-10-07",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; hive package 0.3.20, Ubuntu 24.04)",
"source": "bench log: 7 October 2026, every rentable card on the hash (the fleet's sweep on rented cards; the hive package, Ubuntu 24.04)",
"by": "measured by the fleet",
"note": ". Watts are class v3 (read 8 October 2026, 11:4x UK): the fleet's bench pack was the class v3 program (program_class v3, generator 3, load_class mx8-erad810f22d), so this row's watts and MH per watt are class v3 figures; the rate holds under class v4 (memory-bound: a 5070 Ti measured 78.7 MH/s at 141 W on class v3 and 78.8 at 224 W on class v4). The class v4 watts rerun on the same models lands with its date, the v3 watts kept beside as the shadow premium per card",
"v4_cost": "not measured (class v4 program only)",

View file

@ -86,7 +86,7 @@ pre b{color:var(--molten-text);font-weight:500}
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" data-active aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -116,12 +116,10 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -139,7 +137,7 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -160,12 +158,10 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -179,7 +175,7 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -264,7 +260,7 @@ pre b{color:var(--molten-text);font-weight:500}
</div>
<figure class="app-window reveal" style="margin:0">
<div class="window-top"><i></i><i></i><i></i><span><span data-product="app">Igneum Miner</span> / live devnet</span><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="5" y="10" width="14" height="11" rx="2"/><path d="M8 10V7a4 4 0 0 1 8 0v3m-4 4v3"/></svg></div>
<img src="/img/miner-dashboard.webp" width="2880" height="1800" class="shot" 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/miner-dashboard.webp" width="2880" height="1800" class="shot" alt="The Mine page of Igneum Miner 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">
<figcaption>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.</figcaption>
</figure>
</div>
@ -300,7 +296,7 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="download-platform"><span class="osmark" data-os="hive" title="HiveOS"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" stroke-linecap="round"><path d="M12 2.6 20.2 7.3v9.4L12 21.4 3.8 16.7V7.3z"/><path d="M12 7.4 16 9.7v4.6L12 16.6 8 14.3V9.7z"/><path d="M12 7.4V2.6M16 9.7l4.2-2.4M16 14.3l4.2 2.4M12 16.6v4.8M8 14.3l-4.2 2.4M8 9.7 3.8 7.3"/></svg></span><div><h3>Ember for Linux and HiveOS</h3><p>a tarball for rigs and Hive flight sheets</p></div></div>
<p class="download-note">For the rig people. One tarball, the miner and the node inside, the same signed manifest as the desktop apps.</p>
<a data-dl="miner-hive" href="https://dl.igneum.network/public/igneum-miner-hive.tar.gz" class="btn primary"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m-5-5 5 5 5-5M5 16v4h14v-4"/></svg>Download the tarball <span data-dl-meta="miner-hive" style="font-weight:400;opacity:.85">v0.3.22 · 28.8 MB</span></a>
<p class="fair" id="versions">Current versions: Windows <span data-rm="versions.miner-windows.version">0.3.20</span>, macOS <span data-rm="versions.miner-mac.version">0.3.20</span>, HiveOS <span data-rm="versions.miner-hive.version">0.3.22</span>, the wallet <span data-rm="versions.wallet-mac.version">0.1.5</span>; the node on Devnet 3 <span data-rm="source.node.version_string">igneumd/2.1.0-f8da7515</span>, <span data-rm="read_at_short">read 8 October 2026, 15:50 UK</span>. The machine-readable list, with every file’s SHA-256, is <a href="/release.json">/release.json</a>.</p>
<p class="fair" id="versions">Current build: Windows <span data-rm="versions.miner-windows.version">0.3.20</span>, macOS <span data-rm="versions.miner-mac.version">0.3.20</span>, HiveOS <span data-rm="versions.miner-hive.version">0.3.22</span>, the wallet <span data-rm="versions.wallet-mac.version">0.1.5</span>, <span data-rm="read_at_short">read 8 October 2026, 15:50 UK</span>. The machine-readable list, with every file’s SHA-256, is <a href="/release.json">/release.json</a>.</p>
<div class="hive-sheet" id="hive"><b>HiveOS Flight Sheet.</b> Miner: <b>Custom</b>. Installation URL: <code data-dl-url="miner-hive">https://dl.igneum.network/dl/public/igneum-hive-0.3.22.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 on our side: tell us what breaks.</div>
<p class="sha">sha256 <span data-dl-sha="miner-hive">8ad6dcef9edc57dcd33e8d5a97cbef5cdda0e384a6e56d3f62f8903029c4c764</span></p>
</div>
@ -314,9 +310,9 @@ pre b{color:var(--molten-text);font-weight:500}
<p class="yourcard" data-yourcard style="margin-top:16px">Your card: pending</p>
</div>
</div>
<div style="margin-top:25px"><div class="notice"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v6m0-10v1"/></svg><div><strong>Devnet, not an earnings opportunity.</strong><p class="notice" data-devnet-notice style="margin:0"><b>Devnet.</b> Coins have no value and the chain may be reset.</p><p class="notice" data-testnet-notice style="margin:6px 0 0">Public testnet: not yet open; the devnet build is here for people who want to look. The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word.</p><p class="notice" style="margin:6px 0 0">The protocol carries no fee. The one payment to the project is the Ember software’s optional 1% dev fee, like other GPU miners, off with one flag: <a href="#fee">the fee, in full view</a>.</p></div></div>
<div style="margin-top:25px"><div class="notice"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v6m0-10v1"/></svg><div><strong>Devnet, not an earnings opportunity.</strong><p class="notice" data-devnet-notice style="margin:0"><b>Devnet.</b> Coins have no value and the chain may be reset.</p><p class="notice" style="margin:6px 0 0">The protocol carries no fee. The one payment to the project is the Ember software’s optional 1% dev fee, like other GPU miners, off with one flag: <a href="#fee">the fee, in full view</a>.</p></div></div>
</div>
<p class="source-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>
<p class="source-note">Devnet 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 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>
</section>
@ -395,7 +391,7 @@ pre b{color:var(--molten-text);font-weight:500}
<tr><td>Mining to a pool</td><td>nothing to turn off: the pool issues the templates, so the 1-in-100 mechanism does not exist, and the pool's own fee is the only one</td></tr>
</tbody>
</table></div>
<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’ counters and both nodes agree. <a href="/bench">The log</a>.</p>
<p class="note">Measured on a private 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. Details are in the measurement record in the repository (docs/bench-log.md).</p>
</div>
<div class="card">
<div class="eyebrow">Settings, as the app shows it</div>
@ -418,18 +414,18 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="shots3">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Overview</b></div>
<img src="/img/app-overview-dark.webp" width="2880" height="1800" class="shot" alt="The Overview page of 0.3.22 on a mixed rig: 156 MH/s from 3 of 4 cards, 489 W at 0.32 MH/W, £3.09 a day of electricity, 6,784 blocks this run and 8,054 lifetime, the Stop mining button, the ladder strip, the chain drawn live with this rig's blocks ringed and the key under it, the node synced with 4 peers, the activity log" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the app&rsquo;s recorded states, 7 October 2026: a mixed rig of an RTX 5090, an RX 9070 XT, an Arc B580 and an integrated UHD 770. The 5090 and the 9070 XT carry measured rates; the Arc&rsquo;s 15.2 MH/s is the plan&rsquo;s expectation until the measurement on the team's three-card Windows rig lands.</figcaption>
<img src="/img/app-overview-dark.webp" width="2880" height="1800" class="shot" alt="The Overview page of the current build on a mixed rig: 156 MH/s from 3 of 4 cards, 489 W at 0.32 MH/W, £3.09 a day of electricity, 6,784 blocks this run and 8,054 lifetime, the Stop mining button, the ladder strip, the chain drawn live with this rig's blocks ringed and the key under it, the node synced with 4 peers, the activity log" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the app&rsquo;s recorded states, 7 October 2026: a mixed rig of an RTX 5090, an RX 9070 XT, an Arc B580 and an integrated UHD 770. The 5090 and the 9070 XT carry measured rates; the Arc&rsquo;s 15.2 MH/s is the plan&rsquo;s expectation until the measurement on the team's three-card Windows rig lands.</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="2880" height="1800" class="shot" alt="The Cards page of 0.3.22: Ember Tune with the Efficiency, Balanced and Maximum goals; one row per card with its vendor's mark, its series line, its rate, IGN a day, watts, hashes per watt, cost a day and temperature: an RTX 5090 at 122 MH/s and 291 W, an RX 9070 XT at 18.9 MH/s and 198 W, an Arc B580 at 15.2 MH/s, an integrated UHD 770 off" loading="lazy" decoding="async">
<figcaption>The Cards page of 0.3.22, the same rig: each row with its vendor&rsquo;s mark.</figcaption>
<img src="/img/app-cards-dark.webp" width="2880" height="1800" class="shot" alt="The Cards page of the current build: Ember Tune with the Efficiency, Balanced and Maximum goals; one row per card with its vendor's mark, its series line, its rate, IGN a day, watts, hashes per watt, cost a day and temperature: an RTX 5090 at 122 MH/s and 291 W, an RX 9070 XT at 18.9 MH/s and 198 W, an Arc B580 at 15.2 MH/s, an integrated UHD 770 off" loading="lazy" decoding="async">
<figcaption>The Cards page of the current build, the same rig: each row with its vendor&rsquo;s mark.</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="2880" height="1800" class="shot" alt="The Overview page of 0.3.22 on an Apple M5 Max: 17.0 MH/s, 6,784 blocks this run, the ladder strip with signing under way, the chain drawn live with this Mac's blocks ringed, the node synced with 4 peers" loading="lazy" decoding="async">
<figcaption>0.3.22, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
<img src="/img/app-overview-mac-dark.webp" width="2880" height="1800" class="shot" alt="The Overview page of the current build on an Apple M5 Max: 17.0 MH/s, 6,784 blocks this run, the ladder strip with signing under way, the chain drawn live with this Mac's blocks ringed, the node synced with 4 peers" loading="lazy" decoding="async">
<figcaption>The current build, rendered from the recorded state of the team&rsquo;s Apple M5 Max, 7 October 2026.</figcaption>
</figure>
</div>
</div>
@ -443,10 +439,10 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="faq">
<details><summary>Does this website use my GPU to mine?</summary><p>No. The pictures on the home page are drawn, not mined. Mining happens only in the app you install, and only when you press Start.</p></details>
<details><summary>Does my card mine and prove?</summary><p>Every card mines. Proving the full shard needs a 24 GB NVIDIA card; a 32 GB card does both at once. Apple silicon proves on the CPU, slowly. The Prove page of the app says in one sentence what your card can do.</p></details>
<details><summary>Is the devnet paying real money?</summary><p>No. Devnet coins have no value and the chain may reset. The app’s pounds row reads 0.00 on devnet and says why. The public testnet opens when the go checklist closes; mainnet comes after the testnet passes its gate.</p></details>
<details><summary>Is the devnet paying real money?</summary><p>No. Devnet coins have no value and the chain may reset. The app’s pounds row reads 0.00 on devnet and says why. The Igneum 2.0 devnet is the network today. Mainnet has not started.</p></details>
<details id="fee-faq"><summary>Is there a fee?</summary><p>Not in the protocol: no dev fund, no fee to any team. The app takes an optional 1% software fee, the norm for GPU miners, and one flag turns it off. <a href="#fee">The fee, in full view.</a></p></details>
<details><summary>Can I run it on a rig or in a pool?</summary><p>The Linux and HiveOS tarball is above, with the flight sheet. Pools are part of the public testnet; until then every machine mines solo on its own keys, and a card runs several.</p></details>
<details><summary>Where do the numbers on this page come from?</summary><p>Every rate has a row in <a href="/miners">the bench table</a> and an entry in <a href="/bench">the engineering log</a> with the command and the hardware. Nothing here is estimated earnings.</p></details>
<details><summary>Can I run it on a rig or in a pool?</summary><p>The Linux and HiveOS tarball is above, with the flight sheet. Today every machine mines solo on its own keys, and a card runs several.</p></details>
<details><summary>Where do the numbers on this page come from?</summary><p>Every rate has a row in <a href="/miners">the bench table</a> and an entry in the measurement record in the repository (docs/bench-log.md) with the command and the hardware. Nothing here is estimated earnings.</p></details>
</div>
</div>
</section>
@ -456,9 +452,9 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="container">
<div>
<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 measurement record in the repository (docs/bench-log.md) 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 class="cta"><a href="/bench" class="btn dark">Engineering log</a><a href="/miners" class="btn dark">Bench table</a></div>
<div class="cta"><a href="/miners" class="btn dark">Bench table</a></div>
</div>
</div>
@ -467,6 +463,7 @@ pre b{color:var(--molten-text);font-weight:500}
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -492,7 +489,6 @@ pre b{color:var(--molten-text);font-weight:500}
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -504,7 +500,6 @@ pre b{color:var(--molten-text);font-weight:500}
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -530,7 +525,7 @@ pre b{color:var(--molten-text);font-weight:500}
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

File diff suppressed because one or more lines are too long

View file

@ -22,52 +22,51 @@ export const CARDS = {
home: { kicker: 'Igneum', title: 'The GPU-mined chain that proves every block.', sub: 'No premine. No stake. No fee to any team.', route: 'igneum.network' },
miner: { kicker: 'Igneum Ember', title: 'Install. Start. The card mines.', sub: 'One click installs the node, the miner and the prover.', route: 'igneum.network/miner' },
download: { kicker: 'Igneum Ember', title: 'Download. Press Start. The card mines.', sub: 'Windows, macOS, Linux and HiveOS.', route: 'igneum.network/download' },
explorer: { kicker: 'Devnet 3 explorer', title: 'Devnet 3, block by block.', sub: 'The DAG, every transaction, every proof, the finality lock.', route: 'igneum.network/explorer' },
swap: { kicker: 'Devnet 3 swap', title: 'Swap test tokens on Devnet 3.', sub: 'Every swap is a proven block.', route: 'igneum.network/swap' },
explorer: { kicker: 'Devnet explorer', title: 'The devnet, block by block.', sub: 'The DAG, every transaction, every proof, the finality lock.', route: 'igneum.network/explorer' },
swap: { kicker: 'Devnet swap', title: 'Swap test tokens on the devnet.', sub: 'Every swap is a proven block.', route: 'igneum.network/swap' },
build: { kicker: 'Developers', title: 'Build on Igneum.', sub: 'The EVM you know. Chain ids, RPC and a contract in five minutes.', route: 'igneum.network/build' },
grants: { kicker: 'Grants', title: 'Paid in IGN, on delivery.', sub: 'Four tiers. One issue to apply. A weekly review.', route: 'igneum.network/grants' },
live: { kicker: 'Live devnet', title: 'The work becomes the chain.', sub: 'Every block, every miner, every proof, as it happens.', route: 'igneum.network/live' },
faucet: { kicker: 'Devnet 3 faucet', title: 'Test IGN, for building.', sub: 'Paste an address. Get a transaction hash.', route: 'igneum.network/faucet' },
faucet: { kicker: 'Devnet faucet', title: 'Test IGN, for building.', sub: 'Paste an address. Get a transaction hash.', route: 'igneum.network/faucet' },
economics: { kicker: 'Economics', title: 'The economics, as the node encodes them.', sub: 'The emission, the split, the fees, each with its file and line.', route: 'igneum.network/economics' },
litepaper: { kicker: 'Litepaper', title: 'Mined by GPUs. Proven by fire.', sub: 'The hourly GPU lottery, blocks proven by miners, miner-only finality.', route: 'igneum.network/litepaper' },
light: { kicker: 'Light wallet', title: 'A balance your browser proves.', sub: 'Certificate, headers and account proof, recomputed in the tab.', route: 'igneum.network/light' },
receipt: { kicker: 'Inclusion receipt', title: 'A receipt any third party re-verifies.', sub: 'Proven against the finality certificate. Checked offline with one file.', route: 'igneum.network/receipt' },
oracle: { kicker: 'State oracle', title: 'Devnet 3 balances, read from Sepolia.', sub: 'Finality certificates and proven state roots in a contract.', route: 'igneum.network/oracle' },
oracle: { kicker: 'State oracle', title: 'Devnet balances, read from Sepolia.', sub: 'Finality certificates and proven state roots in a contract.', route: 'igneum.network/oracle' },
wallet: { kicker: 'Igneum Wallet', title: 'Your coins. Final means final.', sub: 'A desktop wallet that checks finality itself.', route: 'igneum.network/wallet' },
income: { kicker: 'Income', title: 'What your card would mine.', sub: 'Pick a card, set your electricity price, read IGN a day.', route: 'igneum.network/income' },
ledger: { kicker: 'The ledger', title: 'Every criticism, answered or conceded.', sub: 'In the critic’s words, with what was done and when.', route: 'igneum.network/ledger' },
bench: { kicker: 'Engineering log', title: 'Every number, with the entry it came from.', sub: 'Hash rates, proving times and the runs behind them.', route: 'igneum.network/bench' },
};
// The routes: path -> share title, share description, card. A generated page (bench, miners, claims, the log) that has no row
// The routes: path -> share title, share description, card. A generated page (miners, claims, provenance) that has no row
// here shares its own <title> and description on the home card.
export const SHARE = {
'/': { title: 'Igneum, the GPU-mined layer 1', desc: 'Mined by GPUs, every block proven by the miners. No premine, no stake, no fee to any team.', card: 'home' },
'/': { title: 'Igneum, the GPU-mined layer 1', desc: 'A GPU-secured network for Ethereum-compatible applications and verifiable computation.', card: 'home' },
'/miner': { title: 'Igneum Ember, the one-click GPU miner', desc: 'One click installs the node, the miner and the prover. Every card mines: NVIDIA, AMD and Apple silicon.', card: 'miner' },
'/download': { title: 'Download Igneum Ember', desc: 'Igneum Ember for Windows, macOS, Linux and HiveOS, and the Igneum Wallet for macOS. Only from this domain.', card: 'download' },
'/app': { title: 'The Igneum app you mine with', desc: 'Your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your blocks ringed.', card: 'miner' },
'/explorer': { title: 'Igneum Devnet 3 explorer', desc: 'Every block, transaction, account and proof on Devnet 3, with its finality lock. Test coins, no value.', card: 'explorer' },
'/explorer': { title: 'Igneum devnet explorer', desc: 'Every block, transaction, account and proof on the devnet, with its finality lock. Test coins, no value.', card: 'explorer' },
'/block': { title: 'Igneum block', desc: 'One Igneum block: header, parents, mergeset, transactions, proof records and its finality certificate.', card: 'explorer' },
'/address': { title: 'Igneum address', desc: 'One Devnet 3 address: balance, nonce, code, its transactions and the blocks it mined.', card: 'explorer' },
'/tx': { title: 'Igneum transaction', desc: 'One Devnet 3 transaction: status, value, fees, the block that executed it, its proof state and finality.', card: 'explorer' },
'/proving': { title: 'Proving on Igneum Devnet 3', desc: 'The shard plan of every chain block, who proved what, the payouts and the block-to-paid latency.', card: 'explorer' },
'/swap': { title: 'Igneum swap on Devnet 3', desc: 'Swap wrapped IGN and two test tokens on the Igneum zkEVM. Every swap is a proven block. No value.', card: 'swap' },
'/address': { title: 'Igneum address', desc: 'One devnet address: balance, nonce, code, its transactions and the blocks it mined.', card: 'explorer' },
'/tx': { title: 'Igneum transaction', desc: 'One devnet transaction: status, value, fees, the block that executed it, its proof state and finality.', card: 'explorer' },
'/proving': { title: 'Proving on the Igneum devnet', desc: 'The shard plan of every chain block, who proved what, the payouts and the block-to-paid latency.', card: 'explorer' },
'/swap': { title: 'Igneum swap on the devnet', desc: 'Swap wrapped IGN and two test tokens with proven execution. Every swap is a proven block. No value.', card: 'swap' },
'/build': { title: 'Build on Igneum: chain ids, RPC, a contract in five minutes', desc: 'Chain ids, RPC endpoints, the wallet, the faucet and a contract in five minutes. Solidity deploys unchanged.', card: 'build' },
'/grants': { title: 'Igneum grants: tooling, apps, infrastructure, research', desc: 'Paid in IGN from the dev fee fund, on delivery. Four tiers. One issue to apply. A weekly review.', card: 'grants' },
'/faucet': { title: 'Igneum Devnet 3 faucet', desc: 'Devnet 3 IGN for developers: a daily allowance per address, no value, no account.', card: 'faucet' },
'/faucet': { title: 'Igneum devnet faucet', desc: 'Devnet IGN for developers: a daily allowance per address, no value, no account.', card: 'faucet' },
'/live': { title: 'Igneum live devnet', desc: 'Every block, the miners, the provers paid and the finality rule, read from a node every two seconds.', card: 'live' },
'/economics': { title: 'Igneum economics, as the node encodes them', desc: 'The emission, the 80/20 split, the fee routes and the decimals, each with its file and line in the node.', card: 'economics' },
'/litepaper': { title: 'The Igneum litepaper', desc: 'The hourly GPU lottery, blocks proven by miners, miner-only finality. No premine, no stake.', card: 'litepaper' },
'/light': { title: 'Igneum light wallet', desc: 'A Devnet 3 balance your browser proves itself: certificate, headers and account proof, recomputed in the tab.', card: 'light' },
'/receipt': { title: 'Igneum transaction inclusion receipt', desc: 'A Devnet 3 inclusion receipt proven against the finality certificate and re-verified offline with one file.', card: 'receipt' },
'/oracle': { title: 'Igneum state oracle on Sepolia', desc: 'A Sepolia contract holds Devnet 3 finality certificates and proven state roots, so contracts read a balance.', card: 'oracle' },
'/light': { title: 'Igneum light wallet', desc: 'A devnet balance your browser proves itself: certificate, headers and account proof, recomputed in the tab.', card: 'light' },
'/receipt': { title: 'Igneum transaction inclusion receipt', desc: 'A devnet inclusion receipt proven against the finality certificate and re-verified offline with one file.', card: 'receipt' },
'/oracle': { title: 'Igneum state oracle on Sepolia', desc: 'A Sepolia contract holds devnet finality certificates and proven state roots, so contracts read a balance.', card: 'oracle' },
'/wallet': { title: 'Igneum Wallet, a desktop wallet that checks finality', desc: '24 words sealed on your machine, send with the fee shown, block rewards and proving payouts in one history.', card: 'wallet' },
'/income': { title: 'Igneum income calculator', desc: 'Pick a card, set your electricity price and read IGN a day from the live network. Test IGN has no value.', card: 'income' },
'/ledger': { title: 'The Igneum ledger: every criticism, answered', desc: 'Every criticism Igneum expects, in the critic’s words, with what was done, the status and the date.', card: 'ledger' },
'/metamask': { title: 'Add Igneum to MetaMask', desc: 'Add Igneum to MetaMask or any Ethereum wallet in one click: chain id, RPC URL, the IGN symbol and decimals.', card: 'build' },
'/evidence': { title: 'Igneum evidence: every claim with its status', desc: 'Every public Igneum claim with its status: designed, implemented, tested, reproduced, reviewed.', card: 'home' },
'/bench': { title: 'The Igneum engineering log', desc: 'Every measured number with the entry it came from: hash rates, proving times and the runs behind them.', card: 'bench' },
'/miners': { title: 'Igneum GPU bench table', desc: 'Measured hash rates per card, MH per watt where measured, and the log entry behind each number.', card: 'bench' },
'/miners': { title: 'Igneum GPU bench table', desc: 'Measured hash rates per card, MH per watt where measured, and the record behind each number.', card: 'home' },
'/scenes': { title: 'Igneum scenes', desc: 'Three animated views of the live feed.', card: 'live' },
'/404': { title: 'Igneum', desc: 'Nothing is mined here.', card: 'home' },
};

View file

@ -4,30 +4,30 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum state oracle on Sepolia</title>
<meta name="description" content="A Sepolia contract that stores Devnet 3 finality certificates and proven state roots so other contracts read a Devnet 3 balance. Devnet 3, no value.">
<meta name="description" content="A Sepolia contract that stores devnet finality certificates and proven state roots so other contracts read a devnet balance. The devnet, no value.">
<link rel="canonical" href="https://igneum.network/oracle">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum state oracle on Sepolia">
<meta property="og:description" content="A Sepolia contract holds Devnet 3 finality certificates and proven state roots, so contracts read a balance.">
<meta property="og:description" content="A Sepolia contract holds devnet finality certificates and proven state roots, so contracts read a balance.">
<meta property="og:url" content="https://igneum.network/oracle">
<meta property="og:image" content="https://igneum.network/og/oracle.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Devnet 3 balances, read from Sepolia. igneum.network/oracle">
<meta property="og:image:alt" content="Devnet balances, read from Sepolia. igneum.network/oracle">
<meta property="og:image" content="https://igneum.network/og/oracle-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Devnet 3 balances, read from Sepolia. igneum.network/oracle">
<meta property="og:image:alt" content="Devnet balances, read from Sepolia. igneum.network/oracle">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum state oracle on Sepolia">
<meta name="twitter:description" content="A Sepolia contract holds Devnet 3 finality certificates and proven state roots, so contracts read a balance.">
<meta name="twitter:description" content="A Sepolia contract holds devnet finality certificates and proven state roots, so contracts read a balance.">
<meta name="twitter:image" content="https://igneum.network/og/oracle.png?v=4">
<meta name="twitter:image:alt" content="Devnet 3 balances, read from Sepolia. igneum.network/oracle">
<meta name="twitter:image:alt" content="Devnet balances, read from Sepolia. igneum.network/oracle">
<!-- share:end -->
<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">
@ -80,10 +80,10 @@
.steps li{display:grid;grid-template-columns:84px 1fr;gap:4px 12px;background:var(--row);border:1px solid var(--line);border-radius:var(--r-row);padding:10px 14px;font-size:14px;color:var(--ink-2)}
.steps li b{font:500 11px/1.6 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ember-text)}.steps li.bad b{color:var(--molten-text)}
.steps li small{grid-column:2;color:var(--ash);font-family:var(--f-mono);font-size:12px;overflow-wrap:anywhere}
.why{border:1px solid var(--line-2);border-radius:var(--r-card);padding:var(--s-4) var(--s-5);background:var(--obsidian);margin:var(--s-5) 0}
.why{border:1px solid var(--line-2);border-radius:var(--r-card);padding:var(--s-5) var(--s-5);background:var(--obsidian);margin:var(--s-5) 0}
.why p{margin:0;font-size:15px;color:var(--ink-2)}.why p+p{margin-top:8px}
.meta{display:grid;gap:6px;font:400 13px/1.6 var(--f-mono);color:var(--ash);margin:var(--s-4) 0 0}.meta code{overflow-wrap:anywhere}
.terms{margin:var(--sec,64px) 0 var(--s-5)}.terms .kv>div{font-size:14px}.trust{border:1px solid var(--molten);border-radius:var(--r-card);padding:var(--s-4) var(--s-5);background:var(--row);margin:var(--s-4) 0}
.terms{margin:var(--sec,64px) 0 var(--s-5)}.terms .kv>div{font-size:14px}.trust{border:1px solid var(--molten);border-radius:var(--r-card);padding:var(--s-5) var(--s-5);background:var(--row);margin:var(--s-4) 0}
.trust h3{margin:0 0 8px;font-size:15px;color:var(--molten-text)}.trust ul{margin:0;padding-left:18px;font-size:14px;color:var(--ink-2);line-height:1.5}.trust li+li{margin-top:4px}
@media (max-width:640px){.steps li{grid-template-columns:1fr}.steps li small{grid-column:1}}
</style>
@ -97,7 +97,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -127,12 +127,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle" aria-current="page"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle" aria-current="page"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -150,7 +148,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -171,12 +169,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle" aria-current="page"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle" aria-current="page"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -190,7 +186,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -250,27 +246,27 @@
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>State oracle on Sepolia</span></div>
<div class="eyebrow"><span class="line"></span>Reference app 3 · Devnet 3, no value</div>
<h1>Devnet 3 balances, read from Sepolia<span class="accent">.</span></h1>
<div class="eyebrow"><span class="line"></span>Reference app 3 · the devnet, no value</div>
<h1>Devnet balances, read from Sepolia<span class="accent">.</span></h1>
</div>
<p class="note"><b>A GPU-secured network for Ethereum-compatible applications and verifiable computation.</b> Devnet, no value.</p>
<p class="note">A contract on Ethereum Sepolia stores Igneum Devnet 3 finality certificates that anyone submits, checked by a shared certificate verifier, and state roots bound to those checkpoints through the header chain, the coinbase and the segment record. Other contracts then read a proven Devnet 3 balance or storage slot with an ordinary Merkle Patricia proof. No relayer is trusted: a wrong certificate or a wrong proof reverts.</p>
<p class="note">A contract on Ethereum Sepolia stores Igneum 2.0 devnet finality certificates that anyone submits, checked by a shared certificate verifier, and state roots bound to those checkpoints through the header chain, the coinbase and the segment record. Other contracts then read a proven the devnet balance or storage slot with an ordinary Merkle Patricia proof. No relayer is trusted: a wrong certificate or a wrong proof reverts.</p>
<div class="why">
<p><b>Why this only works on a proven chain.</b> Three boundaries hold wherever the proof architecture is explained: proven execution is not finality; EVM compatibility is not Ethereum security; ZK is not privacy. Another chain can only use Igneum state if a contract can check it without running an Igneum node: a weighted certificate over a checkpoint and a state root proven under it are small enough to verify in a few hundred thousand gas. A chain whose state is only "what most nodes say" has nothing a contract can check.</p>
<p>Source: <code>tools/reference-apps/oracle/contracts/</code> (IgneumStateOracle.sol and its libraries), <code>tools/reference-apps/oracle/demo.mjs</code> (the demo that reads a Devnet 3 balance from Sepolia), <code>tools/reference-apps/oracle/test.mjs</code> (the negative cases through eth_call). The shared certificate verifier is the DEX lane's <code>contracts/bridge/src/IgneumCertificateVerifier.sol</code>.</p>
<p>Source: <code>tools/reference-apps/oracle/contracts/</code> (IgneumStateOracle.sol and its libraries), <code>tools/reference-apps/oracle/demo.mjs</code> (the demo that reads a the devnet balance from Sepolia), <code>tools/reference-apps/oracle/test.mjs</code> (the negative cases through eth_call). The shared certificate verifier is the DEX lane's <code>contracts/bridge/src/IgneumCertificateVerifier.sol</code>.</p>
</div>
<section class="card" aria-labelledby="deployed">
<h2 id="deployed">On Sepolia</h2>
<div class="kv" data-oracle-kv>
<div class="k">Oracle</div><div class="mono" data-oracle-address>0x3ad71d4660d8a8d2f92248b9c286392dd76a3ab6 <small>IgneumStateOracle, deployed 8 October 2026 on the shared verifier (tx 0x16312cf8…4e2a, block 11870855); its trust() names the two unchecked items below; accepts statements with Devnet 3's chain id before and after the class v5 floor (4463, 4464). The earlier oracle 0xefe9879d…a1b2 (stand-in verifier at first) stays as deployed.</small></div>
<div class="k">Oracle</div><div class="mono" data-oracle-address>0x3ad71d4660d8a8d2f92248b9c286392dd76a3ab6 <small>IgneumStateOracle, deployed 8 October 2026 on the shared verifier (tx 0x16312cf8…4e2a, block 11870855); its trust() names the two unchecked items below; accepts statements with chain id 4463 or 4464.</small></div>
<div class="k">Verifier</div><div class="mono" data-verifier-address>0xAf74f3F512081291D663Bb1d6b6d37E99e37D744 <small>the shared IgneumCertificateVerifier (the DEX lane's, a real BLS12-381 check on chain through the EIP-2537 precompiles, voter table installed at checkpoint 2127), set by setVerifier on 8 October 2026 (tx 0xd679bb65…db8e); the stand-in 0xa197ef31…a6f6 served until then</small></div>
<div class="k">Chain</div><div>Sepolia, chain id 11155111; Devnet 3 (igneum-devnet-3), no value</div>
<div class="k">Proven roots</div><div class="mono">Certificate 2232 (0xf056c26e…, 29 voters, signed weight 4,988 of 7,164) recorded on the shared verifier with a real BLS check, tx 0x1794b785…1e8a, 792,677 gas. Devnet 3 chain block 28439, post_root 0x6e6d2fc8… stored on this oracle with a 6-header path, tx 0xcdb24dbc…ee5fc, 1,624,984 gas; provenBalance read 721.451608 IGN for 0xcaed79d8…c087 on Sepolia, equal to the Devnet 3 node's eth_getProof.</div>
<div class="k">Chain</div><div>Sepolia, chain id 11155111; the Igneum 2.0 devnet (igneum-devnet-4), no value</div>
<div class="k">Proven roots</div><div class="mono">Certificate 2232 (0xf056c26e…, 29 voters, signed weight 4,988 of 7,164) recorded on the shared verifier with a real BLS check, tx 0x1794b785…1e8a, 792,677 gas. Devnet chain block 28439, post_root 0x6e6d2fc8… stored on this oracle with a 6-header path, tx 0xcdb24dbc…ee5fc, 1,624,984 gas; provenBalance read 721.451608 IGN for 0xcaed79d8…c087 on Sepolia, equal to the devnet node's eth_getProof.</div>
</div>
</div>
<p class="note">How to read a balance from another contract: <code>IIgneumStateOracle(oracle).provenBalance(number, account, accountProof)</code>, where <code>number</code> is a Devnet 3 chain block whose state root the oracle holds and <code>accountProof</code> is the <code>eth_getProof</code> account proof at that block. A storage slot: <code>provenStorage(number, account, slot, accountProof, storageProof)</code>. Both revert on any mismatch.</p>
<p class="note">How to read a balance from another contract: <code>IIgneumStateOracle(oracle).provenBalance(number, account, accountProof)</code>, where <code>number</code> is a devnet chain block whose state root the oracle holds and <code>accountProof</code> is the <code>eth_getProof</code> account proof at that block. A storage slot: <code>provenStorage(number, account, slot, accountProof, storageProof)</code>. Both revert on any mismatch.</p>
</section>
<h2 id="checked">What the contract checks</h2>
@ -295,14 +291,15 @@
<div class="k">Proven</div><div>An aggregator's segment record, carried in a block's coinbase and signed with its vote key, commits to the state root after that chain block; nodes check the statement against their own execution before paying it. The SP1 proof behind the statement is verified by nodes, not in the browser or on Sepolia.</div>
<div class="k">Finalised</div><div>A certified checkpoint has the block in its past: an aggregate BLS signature by voters holding two thirds of active weight and at least 17/30 of total weight over the checkpoint, checked here against the voter table the node supplies.</div>
</div>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). Devnet 3, no value.</p>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). The devnet, no value.</p>
</section>
<!-- terms:end -->
<p class="asof">Devnet 3, no value. Sepolia, no value. A demonstration of the verification path, not a product.</p>
<p class="asof">The devnet, no value. Sepolia, no value. A demonstration of the verification path, not a product.</p>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -328,7 +325,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -340,7 +336,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -366,7 +361,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -374,7 +369,6 @@
(function(){
// one request per button; the wallet shows the chain to the user and decides. No key, no seed, no signature here.
var CHAINS = {
testnet: { chainId: '0x116e', chainName: 'Igneum Testnet', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['https://rpc.testnet.igneum.network'], blockExplorerUrls: [] },
devnet: { chainId: '0x116f', chainName: 'Igneum Devnet (local node)', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['http://127.0.0.1:26790'], blockExplorerUrls: [] }
};
function status(name, text) { var el = document.querySelector('[data-status="' + name + '"]'); if (el) el.textContent = text; }

View file

@ -1,5 +1,6 @@
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -25,7 +26,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -37,7 +37,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -63,6 +62,6 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>

View file

@ -5,7 +5,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -35,12 +35,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -58,7 +56,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -79,12 +77,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -98,7 +94,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>

View file

@ -6,5 +6,5 @@
<div class="k">Proven</div><div>An aggregator's segment record, carried in a block's coinbase and signed with its vote key, commits to the state root after that chain block; nodes check the statement against their own execution before paying it. The SP1 proof behind the statement is verified by nodes, not in the browser or on Sepolia.</div>
<div class="k">Finalised</div><div>A certified checkpoint has the block in its past: an aggregate BLS signature by voters holding two thirds of active weight and at least 17/30 of total weight over the checkpoint, checked here against the voter table the node supplies.</div>
</div>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). Devnet 3, no value.</p>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). The devnet, no value.</p>
</section>

File diff suppressed because one or more lines are too long

View file

@ -3,31 +3,31 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Devnet 3 proving</title>
<meta name="description" content="Proving on Devnet 3: the shard plan of every chain block, who proved what, the payouts and the block-to-paid latency.">
<title>Igneum 2.0 devnet proving</title>
<meta name="description" content="Proving on the devnet: the shard plan of every chain block, who proved what, the payouts and the block-to-paid latency.">
<link rel="canonical" href="https://igneum.network/proving">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Proving on Igneum Devnet 3">
<meta property="og:title" content="Proving on the Igneum devnet">
<meta property="og:description" content="The shard plan of every chain block, who proved what, the payouts and the block-to-paid latency.">
<meta property="og:url" content="https://igneum.network/proving">
<meta property="og:image" content="https://igneum.network/og/explorer.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta property="og:image" content="https://igneum.network/og/explorer-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Proving on Igneum Devnet 3">
<meta name="twitter:title" content="Proving on the Igneum devnet">
<meta name="twitter:description" content="The shard plan of every chain block, who proved what, the payouts and the block-to-paid latency.">
<meta name="twitter:image" content="https://igneum.network/og/explorer.png?v=4">
<meta name="twitter:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta name="twitter:image:alt" content="The devnet, block by block. igneum.network/explorer">
<!-- share:end -->
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
@ -116,7 +116,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -146,12 +146,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -169,7 +167,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -190,12 +188,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -209,7 +205,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -269,8 +265,8 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><a href="/explorer">Explorer</a><span>/</span><span>Proving</span></div>
<div class="eyebrow"><a href="/explorer">Devnet 3 explorer</a> · proving</div>
<h1>Proving on Devnet 3<span class="accent">.</span></h1>
<div class="eyebrow"><a href="/explorer">The devnet explorer</a> · proving</div>
<h1>Proving on the devnet<span class="accent">.</span></h1>
<p>Every chain block's execution is split into shards. Miners prove them, the node verifies the proofs, and a later coinbase pays the prover. This page reads the observer's record of that cycle: the plan per block, who proved what, and how long a block waits to be paid.</p>
<div class="msg" id="msg" aria-live="polite"></div>
</div>
@ -292,7 +288,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<tbody id="blocks"><tr><td colspan="11" class="empty">Loading.</td></tr></tbody>
</table>
</div>
<p class="note">States count the block's shards as planned (the node published the plan), proving (a record is in the pool), verified (the node's verifier accepted the proof) and paid (a later coinbase carried the record). Lag is the DAA score of the paying block minus the block's own; Devnet 3 targets one DAA step per second.</p>
<p class="note">States count the block's shards as planned (the node published the plan), proving (a record is in the pool), verified (the node's verifier accepted the proof) and paid (a later coinbase carried the record). Lag is the DAA score of the paying block minus the block's own; the devnet targets one DAA step per second.</p>
</div>
<div class="two two-wrap">
<div class="card" aria-label="Provers">
@ -311,6 +307,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -336,7 +333,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -348,7 +344,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -374,7 +369,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -89,7 +89,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -119,12 +119,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -142,7 +140,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -163,12 +161,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -182,7 +178,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -256,15 +252,15 @@
<tbody>
<tr><td>Hardware it is built for</td><td>CPUs. GPUs run it badly on purpose</td><td>GPUs. Any card, any vendor. Bit-exact on Apple, NVIDIA and AMD, measured</td></tr>
<tr><td>Random program</td><td>Per hash, interpreted in a virtual machine</td><td>Per hour, compiled to native GPU code. Per hash, the 128 dataset addresses change with the nonce</td></tr>
<tr><td>Dataset</td><td>About 2 GB, the same size since 2019, approximate</td><td>2 GB, growing (the proposed schedule, fixed at the testnet genesis: 2 GB, doubling at years 4, 12 and 28); a 4 GB card mines about four years, an 8 GB card about twelve, approximate</td></tr>
<tr><td>Dataset</td><td>About 2 GB, the same size since 2019, approximate</td><td>2 GB, growing (the proposed schedule, fixed at genesis: 2 GB, doubling at years 4, 12 and 28); a 4 GB card mines about four years, an 8 GB card about twelve, approximate</td></tr>
<tr><td>Light verification</td><td>256 MB cache on a CPU, milliseconds</td><td>256 MB cache on a CPU (512 MB from year 4), one warp under 10 ms, the gate. Measured 2.1 ms on one Apple M5 Max core for class v3 (3.4x class v2's 0.61 ms); a 2019-class core not yet</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>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>NVIDIA cards prove: from 8 GB on the patched server, 12 GB and up beside the miner, 24 GB on the stock server (measured on eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026). Selling proofs to other chains is Designed, not built. AMD and Apple cards mine and do not prove; a prover for them lands when a zkVM ships one</td></tr>
<tr><td>Track record</td><td>About seven years with one shipped chip, Bitmain’s Antminer X5 (September 2023), at 1.46x per joule over a desktop CPU; the one announced beyond it, Bitmain’s Antminer X9, was withdrawn in May 2026 with zero units; RandomX v2 released 25 March 2026, activation pending</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 (git.igneum.network/igneum-network/spec). The node, the miner and the wallet follow to the same host as the repository is published</td></tr>
</tbody>
</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></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 a live network 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></div>
<div class="onward"><a href="/litepaper#mining" class="btn">How mining works</a><a href="/litepaper#chip-model" class="btn">The chip model</a><a href="/provenance" class="btn">Built on the shoulders</a></div>
</div>
</section>
@ -272,6 +268,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -297,7 +294,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -309,7 +305,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -335,7 +330,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -4,14 +4,14 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum payment receipt</title>
<meta name="description" content="A Devnet 3 payment receipt proven against the finality certificate, downloadable as JSON and re-verified offline by anyone with a one-file verifier. Devnet 3, no value.">
<meta name="description" content="A the devnet payment receipt proven against the finality certificate, downloadable as JSON and re-verified offline by anyone with a one-file verifier. the devnet, no value.">
<link rel="canonical" href="https://igneum.network/receipt">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum transaction inclusion receipt">
<meta property="og:description" content="A Devnet 3 inclusion receipt proven against the finality certificate and re-verified offline with one file.">
<meta property="og:description" content="A devnet inclusion receipt proven against the finality certificate and re-verified offline with one file.">
<meta property="og:url" content="https://igneum.network/receipt">
<meta property="og:image" content="https://igneum.network/og/receipt.png?v=4">
<meta property="og:image:type" content="image/png">
@ -25,7 +25,7 @@
<meta property="og:image:alt" content="A receipt any third party re-verifies. igneum.network/receipt">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum transaction inclusion receipt">
<meta name="twitter:description" content="A Devnet 3 inclusion receipt proven against the finality certificate and re-verified offline with one file.">
<meta name="twitter:description" content="A devnet inclusion receipt proven against the finality certificate and re-verified offline with one file.">
<meta name="twitter:image" content="https://igneum.network/og/receipt.png?v=4">
<meta name="twitter:image:alt" content="A receipt any third party re-verifies. igneum.network/receipt">
<!-- share:end -->
@ -80,7 +80,7 @@
.steps li{display:grid;grid-template-columns:84px 1fr;gap:4px 12px;background:var(--row);border:1px solid var(--line);border-radius:var(--r-row);padding:10px 14px;font-size:14px;color:var(--ink-2)}
.steps li b{font:500 11px/1.6 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ember-text)}.steps li.bad b{color:var(--molten-text)}
.steps li small{grid-column:2;color:var(--ash);font-family:var(--f-mono);font-size:12px;overflow-wrap:anywhere}
.why{border:1px solid var(--line-2);border-radius:var(--r-card);padding:var(--s-4) var(--s-5);background:var(--obsidian);margin:var(--s-5) 0}
.why{border:1px solid var(--line-2);border-radius:var(--r-card);padding:var(--s-5) var(--s-5);background:var(--obsidian);margin:var(--s-5) 0}
.why p{margin:0;font-size:15px;color:var(--ink-2)}.why p+p{margin-top:8px}
.meta{display:grid;gap:6px;font:400 13px/1.6 var(--f-mono);color:var(--ash);margin:var(--s-4) 0 0}.meta code{overflow-wrap:anywhere}
@media (max-width:640px){.steps li{grid-template-columns:1fr}.steps li small{grid-column:1}}
@ -95,7 +95,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -125,12 +125,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt" aria-current="page"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -148,7 +146,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -169,12 +167,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt" aria-current="page"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -188,7 +184,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -248,11 +244,11 @@
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Payment receipt</span></div>
<div class="eyebrow"><span class="line"></span>Reference app 2 · Devnet 3, no value</div>
<div class="eyebrow"><span class="line"></span>Reference app 2 · the devnet, no value</div>
<h1>A receipt any third party re-verifies<span class="accent">.</span></h1>
</div>
<p class="note"><b>A GPU-secured network for Ethereum-compatible applications and verifiable computation.</b> Devnet, no value.</p>
<p class="note">Paste a Devnet 3 transaction hash. This tab fetches the raw transaction, the including block's merkle path, every header up to the certified checkpoint and the certificate, then proves inclusion and finality itself. Download the receipt as JSON. Anyone checks it later with a one-file verifier, offline, with no node and no network. Test with the negative cases: <code>tools/reference-apps/light-service/verify.test.mjs</code> (eight payment cases, nine inclusion cases).</p>
<p class="note">Paste a devnet transaction hash. This tab fetches the raw transaction, the including block's merkle path, every header up to the certified checkpoint and the certificate, then proves inclusion and finality itself. Download the receipt as JSON. Anyone checks it later with a one-file verifier, offline, with no node and no network. Test with the negative cases: <code>tools/reference-apps/light-service/verify.test.mjs</code> (eight payment cases, nine inclusion cases).</p>
<div class="trust"><h3>Which receipt this is</h3><ul>
<li>The page issues one of two receipts and names it on the result, in the file (field <code>kind</code>) and in the offline verifier's output.</li>
<li>A <b>transaction inclusion receipt</b> authenticates that the signed transaction (recipient, amount and data as signed) is included in a block that is finalised. The execution result (status, gas, logs) is carried as the node reported it and labelled so; a transaction can be included and finalised and still have failed.</li>
@ -269,7 +265,7 @@
<form class="vform" data-form="receipt" novalidate>
<label for="tx">Transaction hash</label>
<div class="row"><input id="tx" name="tx" inputmode="text" autocomplete="off" spellcheck="false" placeholder="0x…" pattern="^0x[0-9a-fA-F]{64}$"><button class="btn primary" type="submit">Prove it in this tab</button></div>
<div class="vstatus" data-status role="status" aria-live="polite">Devnet 3, no value. A transaction is final once a certified checkpoint has it in its past, about 30 to 90 s after it executes.</div>
<div class="vstatus" data-status role="status" aria-live="polite">the devnet, no value. A transaction is final once a certified checkpoint has it in its past, about 30 to 90 s after it executes.</div>
</form>
<div data-result></div>
</section>
@ -293,15 +289,16 @@
<div class="k">Proven</div><div>An aggregator's segment record, carried in a block's coinbase and signed with its vote key, commits to the state root after that chain block; nodes check the statement against their own execution before paying it. The SP1 proof behind the statement is verified by nodes, not in the browser or on Sepolia.</div>
<div class="k">Finalised</div><div>A certified checkpoint has the block in its past: an aggregate BLS signature by voters holding two thirds of active weight and at least 17/30 of total weight over the checkpoint, checked here against the voter table the node supplies.</div>
</div>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). Devnet 3, no value.</p>
<p class="note">The same four definitions sit on <a href="/light">/light</a>, <a href="/receipt">/receipt</a> and <a href="/oracle">/oracle</a> (one source: <code>site/partials/terms.html</code>). The devnet, no value.</p>
</section>
<!-- terms:end -->
<p class="asof">Devnet 3, no value. The chain may reset. A demonstration of the verification path, not a product.</p>
<p class="asof">the devnet, no value. The chain may reset. A demonstration of the verification path, not a product.</p>
</main>
<script type="module" src="/lc/app.js"></script>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -327,7 +324,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -339,7 +335,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -365,29 +360,9 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
<script>
(function(){
// one request per button; the wallet shows the chain to the user and decides. No key, no seed, no signature here.
var CHAINS = {
testnet: { chainId: '0x116e', chainName: 'Igneum Testnet', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['https://rpc.testnet.igneum.network'], blockExplorerUrls: [] },
devnet: { chainId: '0x116f', chainName: 'Igneum Devnet (local node)', nativeCurrency: { name: 'Igneum', symbol: 'IGN', decimals: 18 }, rpcUrls: ['http://127.0.0.1:26790'], blockExplorerUrls: [] }
};
function status(name, text) { var el = document.querySelector('[data-status="' + name + '"]'); if (el) el.textContent = text; }
Array.prototype.forEach.call(document.querySelectorAll('[data-add]'), function (btn) {
btn.addEventListener('click', function () {
var name = btn.getAttribute('data-add'); var chain = CHAINS[name];
if (!window.ethereum || !window.ethereum.request) { status(name, 'No Ethereum wallet found in this browser. Install MetaMask, or add the network by hand (below).'); return; }
status(name, 'Waiting for the wallet...');
window.ethereum.request({ method: 'wallet_addEthereumChain', params: [chain] })
.then(function () { status(name, 'Added. The wallet is on ' + chain.chainName + ' (chain id ' + parseInt(chain.chainId, 16) + ').'); })
.catch(function (e) { status(name, e && e.code === 4001 ? 'Cancelled in the wallet.' : 'The wallet refused: ' + ((e && e.message) || 'unknown error') + '. Add it by hand (below).'); });
});
});
})();
</script>
</body>
</html>

View file

@ -1,7 +1,7 @@
{
"format": "igneum-release-manifest-v1",
"generated": "2026-10-08T15:55:00Z",
"read_at": "read 8 October 2026, 15:50 UK, from the Devnet 3 seed and the fleet census (the node lane), the download index and the ELF manifest",
"read_at": "regenerated at the Igneum 2.0 devnet's first block",
"labels": {
"measured": "read from a running node, a binary or a record",
"designed": "in the specification or the design document, not yet carried by code on the live chain",
@ -9,36 +9,19 @@
"claimed": "stated by a third party, not measured here"
},
"network": {
"id": "igneum-devnet-3",
"name": "Igneum Devnet 3",
"id": "igneum-devnet-4",
"name": "Igneum 2.0 devnet",
"kind": "developer network: resets without notice, its coins have no value",
"chain_id": 4464,
"chain_id_hex": "0x1170",
"chain_id_below_floor": 4463,
"chain_id_note": "4464 since the class v5 floor at DAA 68,400 (crossed 8 October 2026, 12:57 UK); 4463 from genesis to the floor; a transaction carries the id in force at its block",
"genesis": {
"first_block_utc": "2026-10-07T17:06:00Z",
"first_lock_utc": "2026-10-07T19:02:00Z",
"note": "every upgrade on from block zero: era VDF, finality v3, fees v1, proving v1, the latency ladder at rung 0"
},
"chain_id_note": "the Igneum 2.0 devnet; the manifest is regenerated at its first block",
"rpc": "https://rpc.devnet.igneum.network",
"explorer": "https://igneum.network/explorer",
"faucet": "https://faucet.igneum.network",
"vote_domain": "igneum-vote-v1/igneum-devnet-3",
"decimals": 8,
"block_target_seconds": 1,
"consensus_digest": "2066aa57505e5ecbd585d061364abb0032d5b5b29cc41c54f4b38cb81c2ba6eb",
"label": "measured",
"others": [
{
"id": "igneum-testnet-1",
"chain_id": 4462,
"chain_id_hex": "0x116e",
"rpc": "https://rpc.testnet.igneum.network",
"state": "armed: three seed nodes and the public RPC are up, nothing mines until the go word",
"genesis_hash": "87617621714af1bf33bd17f291f90a7e0bff760a669bba53083ea8c0f7cbd840",
"decimals": 18
},
{
"id": "igneum-mainnet",
"chain_id": 4461,
@ -97,7 +80,7 @@
"size": "1 GiB on the devnets (2^24 items at the genesis size)",
"keyed_by": "the execution state after the epoch's reference block (class v5)",
"cache": "256 MiB day cache (class v3 lineage)",
"growth": "no growth step is set on Devnet 3; the genesis-fixed schedule of spec 1.13.3 is a mainnet matter; class v6's step schedule (5.5 / 8.5 / 11.5 GiB) is a design on its branch, not live"
"growth": "no growth step is set on the devnet; the genesis-fixed schedule of spec 1.13.3 is a mainnet matter; class v6's step schedule (5.5 / 8.5 / 11.5 GiB) is a design on its branch, not live"
},
"ladder": {
"rung": 0,
@ -119,8 +102,8 @@
"aggregators": 8,
"ban_daa": 7200,
"certificate_fold_daa": 3,
"frozen_table": "the weight table is frozen at the last certified checkpoint on the selected chain (spec 03 Q5), active for every checkpoint from DAA 0 on Devnet 3",
"node_line": "Finality v2 (igneum-devnet-3): interval 30 depth 20 window 7200 DAA dust 5 presence 20 aggregators 8 ban 7200 fold 3; rule v3 from checkpoint DAA 0",
"frozen_table": "the weight table is frozen at the last certified checkpoint on the selected chain (spec 03 Q5), active for every checkpoint from DAA 0 on the devnet",
"node_line": "Finality v2 (the devnet): interval 30 depth 20 window 7200 DAA dust 5 presence 20 aggregators 8 ban 7200 fold 3; rule v3 from checkpoint DAA 0",
"label": "measured"
},
"proving": {
@ -183,7 +166,7 @@
"tail": "none",
"where": "consensus/core/src/emission.rs 85 to 123; igneum.rs 34, 76"
},
"label": "measured in the code on Devnet 3; external jobs designed"
"label": "measured in the code on the devnet; external jobs designed"
},
"versions": {
"miner-hive": {

View file

@ -81,7 +81,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -111,12 +111,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -134,7 +132,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -155,12 +153,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -174,7 +170,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -273,6 +269,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -298,7 +295,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -310,7 +306,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -336,7 +331,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -576,3 +576,5 @@ main.wrap>.grid{margin-bottom:40px}
.calc-out .v{font:600 var(--t-h3)/1.2 var(--f-sans);color:var(--bone);overflow-wrap:anywhere}
.calc-out .d{font:400 14px/1.5 var(--f-sans);color:var(--ink-2);overflow-wrap:anywhere}
@media (min-width:861px){.calc-out{grid-template-columns:200px 1fr}.calc-out .k{grid-column:1;margin-top:0;align-self:baseline}.calc-out .v{grid-column:2}.calc-out .d{grid-column:2;margin-bottom:var(--s-2)}}
/* Igneum 2.0 (8 October 2026): the positioning line, the first line of every page's footer, in the footer's text style */
.site-footer .positioning{font-size:13px;line-height:1.6;color:var(--ash);margin:0 0 32px;max-width:82ch}

View file

@ -9,13 +9,11 @@
<url><loc>https://igneum.network/explorer</loc><lastmod>2026-10-08</lastmod><changefreq>daily</changefreq><priority>0.5</priority></url>
<url><loc>https://igneum.network/proving</loc><lastmod>2026-10-08</lastmod><changefreq>daily</changefreq><priority>0.4</priority></url>
<url><loc>https://igneum.network/ledger</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/bench</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/evidence</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/light</loc><lastmod>2026-10-08</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/receipt</loc><lastmod>2026-10-08</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/oracle</loc><lastmod>2026-10-08</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/miners</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url>
<url><loc>https://igneum.network/journey</loc><lastmod>2026-10-07</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>
<url><loc>https://igneum.network/claims</loc><lastmod>2026-10-07</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url>
<url><loc>https://igneum.network/randomx</loc><lastmod>2026-10-07</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url>
<url><loc>https://igneum.network/provenance</loc><lastmod>2026-10-07</lastmod><changefreq>monthly</changefreq><priority>0.4</priority></url>

View file

@ -3,31 +3,31 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum swap on Devnet 3. Test tokens, no value</title>
<meta name="description" content="Swap wrapped IGN and two faucet test tokens on the Igneum zkEVM, Devnet 3. Every swap is a proven block; its proof status is read live. Test tokens, no value.">
<title>Igneum swap on the devnet. Test tokens, no value</title>
<meta name="description" content="Swap wrapped IGN and two faucet test tokens on the Igneum 2.0 devnet, with proven execution. Every swap is a proven block; its proof status is read live. Test tokens, no value.">
<link rel="canonical" href="https://igneum.network/swap">
<meta name="theme-color" content="#0C0C0E">
<!-- share:start -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum swap on Devnet 3">
<meta property="og:description" content="Swap wrapped IGN and two test tokens on the Igneum zkEVM. Every swap is a proven block. No value.">
<meta property="og:title" content="Igneum swap on the devnet">
<meta property="og:description" content="Swap wrapped IGN and two test tokens with proven execution. Every swap is a proven block. No value.">
<meta property="og:url" content="https://igneum.network/swap">
<meta property="og:image" content="https://igneum.network/og/swap.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Swap test tokens on Devnet 3. igneum.network/swap">
<meta property="og:image:alt" content="Swap test tokens on the devnet. igneum.network/swap">
<meta property="og:image" content="https://igneum.network/og/swap-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Swap test tokens on Devnet 3. igneum.network/swap">
<meta property="og:image:alt" content="Swap test tokens on the devnet. igneum.network/swap">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum swap on Devnet 3">
<meta name="twitter:description" content="Swap wrapped IGN and two test tokens on the Igneum zkEVM. Every swap is a proven block. No value.">
<meta name="twitter:title" content="Igneum swap on the devnet">
<meta name="twitter:description" content="Swap wrapped IGN and two test tokens with proven execution. Every swap is a proven block. No value.">
<meta name="twitter:image" content="https://igneum.network/og/swap.png?v=4">
<meta name="twitter:image:alt" content="Swap test tokens on Devnet 3. igneum.network/swap">
<meta name="twitter:image:alt" content="Swap test tokens on the devnet. igneum.network/swap">
<!-- share:end -->
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
@ -100,7 +100,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -130,12 +130,10 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -153,7 +151,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap" aria-current="page"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap" aria-current="page"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -174,12 +172,10 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -193,7 +189,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap" aria-current="page"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap" aria-current="page"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -253,17 +249,17 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Swap</span></div>
<div class="eyebrow"><span class="line"></span>Devnet 3 swap</div>
<h1>Swap test tokens <span class="accent">on Devnet 3.</span></h1>
<p>A constant-product exchange on the Igneum zkEVM: wrapped IGN and two faucet tokens in three pools, 0.3 percent to the pool. Every swap is a Devnet 3 block, and the block's proof status is read live below.</p>
<p class="notice">Devnet 3, test tokens, no value. The chain may reset and these pools go with it. Nothing here is an offer, a price or a market.</p>
<div class="eyebrow"><span class="line"></span>Devnet swap</div>
<h1>Swap test tokens <span class="accent">on the devnet.</span></h1>
<p>A constant-product exchange on Igneum, with proven execution: wrapped IGN and two faucet tokens in three pools, 0.3 percent to the pool. Every swap is a devnet block, and the block's proof status is read live below.</p>
<p class="notice">The devnet, test tokens, no value. The chain may reset and these pools go with it. Nothing here is an offer, a price or a market.</p>
</div>
<div class="grid">
<section class="card" aria-labelledby="swap-h">
<h2 id="swap-h">Swap</h2>
<div class="wallet-row">
<button class="btn" id="connect" type="button">Connect wallet</button>
<span class="status" id="wallet" role="status" aria-live="polite">No wallet connected. The Igneum Wallet open on this machine, or MetaMask, on the Devnet 3 chain id shown under Pools.</span>
<span class="status" id="wallet" role="status" aria-live="polite">No wallet connected. The Igneum Wallet open on this machine, or MetaMask, on the devnet chain id shown under Pools.</span>
</div>
<form id="swap-form" novalidate>
<label for="amount-in">You send</label>
@ -283,7 +279,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="status" id="status" role="status" aria-live="polite"></div>
</form>
<h3>Your swaps this session</h3>
<p class="small">Each row is a Devnet 3 block. Proof status comes from the public feed (/api/live): planned, proving, verified or paid per shard, and whether a finality checkpoint has locked the block.</p>
<p class="small">Each row is a devnet block. Proof status comes from the public feed (/api/live): planned, proving, verified or paid per shard, and whether a finality checkpoint has locked the block.</p>
<table class="swaps" id="swaps" aria-label="Your swaps">
<thead><tr><th>Swap</th><th>Transaction</th><th>Block</th><th>Proof status</th></tr></thead>
<tbody id="swaps-body"><tr class="empty"><td colspan="4">No swaps yet this session.</td></tr></tbody>
@ -291,7 +287,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
</section>
<aside class="card" aria-labelledby="pools-h">
<h2 id="pools-h">Pools</h2>
<p class="small">Reserves read live from the Devnet 3 RPC. Test tokens come from each token's own faucet: one <code>drip()</code> of 1,000 an hour per address.</p>
<p class="small">Reserves read live from the devnet RPC. Test tokens come from each token's own faucet: one <code>drip()</code> of 1,000 an hour per address.</p>
<table class="pools" id="pools" aria-label="Pools">
<thead><tr><th>Pool</th><th>Reserves</th></tr></thead>
<tbody id="pools-body"><tr><td colspan="2">Reading the chain…</td></tr></tbody>
@ -314,24 +310,25 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="status" id="lp-status" role="status" aria-live="polite"></div>
</form>
<dl>
<dt>Chain</dt><dd>igneum-devnet-3, chain id <span id="chain-id">reading…</span></dd>
<dt>Chain</dt><dd>igneum-devnet-4, chain id <span id="chain-id">reading…</span></dd>
<dt>RPC</dt><dd><code>https://rpc.devnet.igneum.network</code></dd>
<dt>Router</dt><dd><code class="addr" data-addr="router"></code></dd>
<dt>Factory</dt><dd><code class="addr" data-addr="factory"></code></dd>
<dt>WIGN</dt><dd><code class="addr" data-addr="wign"></code></dd>
<dt>TTA</dt><dd><code class="addr" data-addr="tta"></code></dd>
<dt>TTB</dt><dd><code class="addr" data-addr="ttb"></code></dd>
<dt>Source</dt><dd>contracts/dex in the repository; addresses in docs/contracts/devnet-3.json</dd>
<dt>Source</dt><dd>contracts/dex in the repository; addresses in docs/contracts</dd>
<dt>Wallet set-up</dt><dd><a href="/metamask">MetaMask: chain id, RPC, one click</a> or <a href="/wallet">the Igneum Wallet</a></dd>
<dt>IGN for gas</dt><dd><a href="/faucet">The faucet</a> or <a href="/miner#get">mine a block</a></dd>
</dl>
<p class="notice small">Devnet 3, test tokens, no value.</p>
<p class="notice small">The devnet, test tokens, no value.</p>
</aside>
</div>
</main>
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -357,7 +354,6 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -369,7 +365,6 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -395,19 +390,19 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
<script src="/wallet-provider.js"></script>
<script>
(function(){
// Devnet 3, test tokens, no value. Addresses: docs/contracts/devnet-3.json. /wallet-provider.js (the wallet lane's page
// the devnet, test tokens, no value. Addresses: docs/contracts. /wallet-provider.js (the wallet lane's page
// bridge) gives the page an EIP-1193 provider for the Igneum Wallet running on this machine: window.ethereum when no
// extension injects one, window.igneum beside MetaMask, announced through EIP-6963. Reads go to the public RPC; sends go
// through the connected wallet (EIP-1193: MetaMask and any wallet that injects window.ethereum), which asks the node
// for the gas limit itself (Devnet 3 charges proving gas inside execution gas, so a local estimate runs out).
// the chain id is read from the RPC at load (4463 below the class v5 floor, 4464 from DAA 68,400 on 8 October 2026), never fixed here
// for the gas limit itself (the devnet charges proving gas inside execution gas, so a local estimate runs out).
// the chain id is read from the RPC at load, never fixed here
var RPC='https://rpc.devnet.igneum.network', CHAIN_ID=null, CHAIN_HEX=null;
var A={router:'0x9a6fA842C4e58A87AEF1F3aD15233d99283002B7',factory:'0x09FF42dbb20448ddB673fD34F973a7D93E7139A8',wign:'0x47447783D00e1760Eb815a34707b611D53f2A51e',tta:'0x9ad4F0435f9172A89C6765eE8631CAB2Db3B5052',ttb:'0x996e3042089E80029348d7836472DB34C21841c1'};
var TOKENS=[{key:'ign',sym:'IGN',name:'IGN (the coin, wrapped on the way in)',addr:A.wign,native:true},{key:'tta',sym:'TTA',name:'Test Token A',addr:A.tta},{key:'ttb',sym:'TTB',name:'Test Token B',addr:A.ttb}];
@ -435,19 +430,19 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
function connect(){
var eth=window.ethereum;
if(!CHAIN_ID){say($('wallet'),'The chain id is not read yet (the public RPC did not answer). Try again in a moment.','bad');return;}
if(!eth){say($('wallet'),'No wallet found. Open the Igneum Wallet on this machine (0.1.6 or later; the page finds it by itself) or install MetaMask, then tap Connect again.','bad');return;}
if(!eth){say($('wallet'),'No wallet found. Open the Igneum Wallet on this machine (the page finds it by itself) or install MetaMask, then tap Connect again.','bad');return;}
eth.request({method:'eth_requestAccounts'}).then(function(acc){
account=acc[0];provider=eth;
return eth.request({method:'eth_chainId'});
}).then(function(cid){
if(parseInt(cid,16)!==CHAIN_ID){
return eth.request({method:'wallet_switchEthereumChain',params:[{chainId:CHAIN_HEX}]}).catch(function(e){
if(e&&(e.code===4902||/unrecognized|not added/i.test(String(e.message))))return eth.request({method:'wallet_addEthereumChain',params:[{chainId:CHAIN_HEX,chainName:'Igneum Devnet 3 (test tokens, no value)',nativeCurrency:{name:'IGN',symbol:'IGN',decimals:18},rpcUrls:[RPC],blockExplorerUrls:['https://igneum.network/explorer']}]});
if(e&&(e.code===4902||/unrecognized|not added/i.test(String(e.message))))return eth.request({method:'wallet_addEthereumChain',params:[{chainId:CHAIN_HEX,chainName:'Igneum 2.0 devnet (test tokens, no value)',nativeCurrency:{name:'IGN',symbol:'IGN',decimals:18},rpcUrls:[RPC],blockExplorerUrls:['https://igneum.network/explorer']}]});
throw e;
});
}
}).then(function(){
say($('wallet'),'',"ok",'Connected <code>'+short(account)+'</code> on chain id '+CHAIN_ID+'. Devnet 3, test tokens, no value.');
say($('wallet'),'',"ok",'Connected <code>'+short(account)+'</code> on chain id '+CHAIN_ID+'. The devnet, test tokens, no value.');
$('connect').textContent='Connected';$('go').disabled=false;$('lp-go').disabled=false;$('drip-tta').disabled=false;$('drip-ttb').disabled=false;
eth.on&&eth.on('accountsChanged',function(a){account=a[0]||null;if(!account){provider=null;say($('wallet'),'Wallet disconnected.','bad');}});
eth.on&&eth.on('chainChanged',function(){location.reload();});
@ -514,7 +509,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
if(!swaps.some(function(s){return s.number!==null;}))return;
fetch('/api/live?window=1800').then(function(r){return r.json();}).then(function(j){
var byNumber={};(j.blocks||[]).forEach(function(b){if(b.number!==null&&b.number!==undefined)byNumber[b.number]=b;});
swaps.forEach(function(s){if(s.number===null||s.ok===false)return;var b=byNumber[s.number];s.status=b?proofText(b):'not yet observed on Devnet 3 (the feed keeps the last 30 minutes)';});
swaps.forEach(function(s){if(s.number===null||s.ok===false)return;var b=byNumber[s.number];s.status=b?proofText(b):'not yet observed on the devnet (the feed keeps the last 30 minutes)';});
render();
}).catch(function(){});
}

View file

@ -3,8 +3,8 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Devnet 3 transaction</title>
<meta name="description" content="One Devnet 3 transaction: status, value, fees and their split, the block that executed it, its proof state and finality, its logs.">
<title>Igneum 2.0 devnet transaction</title>
<meta name="description" content="One devnet transaction: status, value, fees and their split, the block that executed it, its proof state and finality, its logs.">
<link rel="canonical" href="https://igneum.network/tx">
<meta name="robots" content="noindex">
<meta name="theme-color" content="#0C0C0E">
@ -12,23 +12,23 @@
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum transaction">
<meta property="og:description" content="One Devnet 3 transaction: status, value, fees, the block that executed it, its proof state and finality.">
<meta property="og:description" content="One devnet transaction: status, value, fees, the block that executed it, its proof state and finality.">
<meta property="og:url" content="https://igneum.network/tx">
<meta property="og:image" content="https://igneum.network/og/explorer.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta property="og:image" content="https://igneum.network/og/explorer-square.png?v=4">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="1200">
<meta property="og:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta property="og:image:alt" content="The devnet, block by block. igneum.network/explorer">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum transaction">
<meta name="twitter:description" content="One Devnet 3 transaction: status, value, fees, the block that executed it, its proof state and finality.">
<meta name="twitter:description" content="One devnet transaction: status, value, fees, the block that executed it, its proof state and finality.">
<meta name="twitter:image" content="https://igneum.network/og/explorer.png?v=4">
<meta name="twitter:image:alt" content="Devnet 3, block by block. igneum.network/explorer">
<meta name="twitter:image:alt" content="The devnet, block by block. igneum.network/explorer">
<!-- share:end -->
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
@ -117,7 +117,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" data-active aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -147,12 +147,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -170,7 +168,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -191,12 +189,10 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer" aria-current="page"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -210,7 +206,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -270,7 +266,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<main id="main" class="wrap">
<div class="head">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><a href="/explorer">Explorer</a><span>/</span><span>Transaction</span></div>
<div class="eyebrow"><a href="/explorer">Devnet 3 explorer</a> · transaction</div>
<div class="eyebrow"><a href="/explorer">The devnet explorer</a> · transaction</div>
<h1 class="hash" id="title">Transaction</h1>
<div id="chips"></div>
<div class="msg" id="msg" aria-live="polite"></div>
@ -287,6 +283,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -312,7 +309,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -324,7 +320,6 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -350,7 +345,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
@ -367,7 +362,7 @@ async function load() {
$('title').textContent = id;
if (!j.ok) { $('msg').textContent = j.error || 'Not found.'; return; }
const t = j.tx, b = j.block, now = new Date(j.now).getTime(), g = t.igneum || {};
document.title = `Devnet 3 transaction ${shortHash(t.hash, 8, 6)}`;
document.title = `Devnet transaction ${shortHash(t.hash, 8, 6)}`;
$('title').textContent = t.hash;
const chips = [t.status === 'success' ? '<span class="chip ok">success</span>' : t.status === 'failed' ? '<span class="chip" style="border-color:var(--excluded);color:var(--excluded)">failed</span>' : '<span class="chip">no receipt</span>'];
chips.push(`<span class="chip">chain block ${int(t.number)}</span>`);
@ -376,7 +371,7 @@ async function load() {
$('chips').innerHTML = chips.join('');
const fee = t.gas_used !== null && t.effective_gas_price !== null ? (BigInt(t.gas_used) * BigInt(t.effective_gas_price)).toString() : null;
$('summary').innerHTML = dl([
['Network', 'Devnet 3' + (j.chain_id ? ', chain id ' + esc(j.chain_id) + ' as the node reports it' : '')],
['Network', 'The devnet' + (j.chain_id ? ', chain id ' + esc(j.chain_id) + ' as the node reports it' : '')],
['Hash', `<span class="hash">${esc(t.hash)}</span>`],
['Status', t.status || 'no receipt'],
['Block', `<a class="hash" href="/block/${esc(t.block_hash)}">${esc(shortHash(t.block_hash, 12, 8))}</a> <span class="kv">chain block ${int(t.number)}, index ${int(t.index)}</span>`],

View file

@ -22,6 +22,21 @@
"source": "/gpu-benchmarks",
"destination": "/miners",
"permanent": true
},
{
"source": "/bench",
"destination": "/evidence",
"permanent": false
},
{
"source": "/journey",
"destination": "/live",
"permanent": false
},
{
"source": "/journey.json",
"destination": "/live",
"permanent": false
}
],
"rewrites": [
@ -95,15 +110,6 @@
}
]
},
{
"source": "/journey.json",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=300"
}
]
},
{
"source": "/api/live",
"headers": [

View file

@ -99,7 +99,7 @@
<svg class="brand-mark" viewBox="0 0 1024 1024" 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>
<span class="devnet" id="nav-devnet" title="igneum-devnet-3, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="devnet" id="nav-devnet" title="igneum-devnet-4, the Igneum 2.0 devnet, chain id 4464. Coins have no value. The chain may reset."><span class="dot off" id="foot-dot"></span><span id="foot-state" data-devnet-state="starting">Igneum 2.0 devnet starting</span></span>
<div class="nav-groups" id="nav-groups" role="list">
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-mine" data-group="mine" data-active aria-expanded="false" aria-controls="nav-panel-mine" aria-haspopup="true">Mine<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
<div class="nav-group" role="listitem"><button type="button" class="group-btn" id="nav-btn-network" data-group="network" aria-expanded="false" aria-controls="nav-panel-network" aria-haspopup="true">Network<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5"/></svg></button></div>
@ -129,12 +129,10 @@
<div class="panel-list">
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
</div>
<div class="nav-panel" id="nav-panel-learn" data-group="learn" role="region" aria-labelledby="nav-btn-learn" hidden>
@ -152,7 +150,7 @@
<div class="panel-list">
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -173,12 +171,10 @@
<div class="sheet-group"><div class="sheet-head">Network</div>
<a href="/live" data-nav="live"><b>Live devnet</b><span>The chain as it grows, one lane per miner.</span></a>
<a href="/explorer" data-nav="explorer"><b>Explorer</b><span>Look a block or an address up.</span></a>
<a href="/journey" data-nav="journey"><b>The journey</b><span>Six phases, four gates, the log behind them.</span></a>
<a href="/bench" data-nav="bench"><b>Engineering log</b><span>Every measurement, with the commands that made it.</span></a>
<a href="/evidence" data-nav="evidence"><b>Evidence</b><span>Every claim and how far it is tested.</span></a>
<a href="/light" data-nav="light"><b>Light wallet</b><span>A balance your browser proves, trusting no node.</span></a>
<a href="/receipt" data-nav="receipt"><b>Payment receipt</b><span>A receipt any third party re-verifies offline.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Devnet 3 balances read from another chain.</span></a>
<a href="/oracle" data-nav="oracle"><b>State oracle on Sepolia</b><span>Balances on the devnet, read from another chain.</span></a>
</div>
<div class="sheet-group"><div class="sheet-head">Learn</div>
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
@ -192,7 +188,7 @@
<div class="sheet-group"><div class="sheet-head">Build</div>
<a href="/build" data-nav="build"><b>Build on Igneum</b><span>Chain ids, RPC, a contract in five minutes.</span></a>
<a href="/faucet" data-nav="faucet"><b>Devnet faucet</b><span>10 IGN of devnet coin, once a day.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on Devnet 3; every swap is a proven block.</span></a>
<a href="/swap" data-nav="swap"><b>Swap</b><span>Test tokens on the devnet; every swap is a proven block.</span></a>
<a href="/grants" data-nav="grants"><b>Grants</b><span>Tooling, apps, infrastructure, research.</span></a>
<a href="/compatibility" data-nav="compatibility"><b>Compatibility</b><span>Every row a test run against the devnet.</span></a>
</div>
@ -265,10 +261,10 @@
</div>
<div class="tag-row" style="margin-top:var(--s-5)"><span class="pill">macOS first</span><span class="pill">Windows next</span><span class="pill">MetaMask export</span></div>
</div>
<div class="wallet-card reveal"><div class="eyebrow"><em>IGNEUM WALLET</em><span style="margin-left:auto">0.1.5</span></div><figure class="frame" style="margin:18px 0 0">
<div class="wallet-card reveal"><div class="eyebrow"><em>IGNEUM WALLET</em><span style="margin-left:auto">current build</span></div><figure class="frame" style="margin:18px 0 0">
<div class="bar"></div>
<img src="/img/wallet-home-dark.webp" width="2240" height="1560" class="shot" alt="The wallet window, Home: a balance of 31.6321 IGN with the devnet note that coins have no value, an example address with Copy, Send and Receive, the node line synced to the miner app's node and verified to a checkpoint, and the recent transfers with their state words" fetchpriority="high" decoding="async">
</figure><p class="shot-cap">Igneum Wallet 0.1.5, rendered from the wallet’s own mock state: example keys, 7 October 2026.</p></div>
</figure><p class="shot-cap">Igneum Wallet, the current build, rendered from the wallet’s own mock state: example keys, 7 October 2026.</p></div>
</div>
</div>
</section>
@ -287,7 +283,7 @@
<figure class="frame reveal" style="margin:25px 0 0">
<div class="bar"><i></i><i></i><i></i><b>History</b></div>
<img src="/img/wallet-history-dark.webp" width="2240" height="1560" class="shot" alt="The wallet's History page: every transfer with the node's word, pending, proven, executed, finalised under a checkpoint verified here, and one failed with the fee still paid" loading="lazy" decoding="async">
<figcaption>Every transfer with the node’s word: pending, proven, executed, finalised under a checkpoint this wallet verified. Igneum Wallet 0.1.5, rendered from its mock state with example keys, 7 October 2026.</figcaption>
<figcaption>Every transfer with the node’s word: pending, proven, executed, finalised under a checkpoint this wallet verified. The current build of Igneum Wallet, rendered from its mock state with example keys, 7 October 2026.</figcaption>
</figure>
<div class="reveal" style="margin-top:var(--s-5)">
<div class="eyebrow" style="margin-bottom:12px">What the wallet checks before it says final</div>
@ -387,7 +383,6 @@
<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>Add to MetaMask</a>
</div>
<p data-testnet-notice class="notice" style="margin-top:var(--s-4)">Public testnet: not yet open; the devnet build is here for people who want to look.</p>
<p data-devnet-notice class="notice"><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
<p class="pt reveal" style="margin-top:var(--s-4)">The wallet reads this machine’s node when the <a href="/miner">miner</a> is installed. Without it, a public RPC for balances and sending, or the bundled node for everything. <a href="/litepaper#wallet">More in the litepaper</a>.</p>
</div>
@ -407,6 +402,7 @@
<!-- footer:start -->
<footer class="site-footer">
<div class="container">
<p class="positioning">A GPU-secured network for Ethereum-compatible applications and verifiable computation.</p>
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="logo" aria-label="Igneum home"><svg class="brand-mark" viewBox="0 0 1024 1024" 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><span class="stop">.</span></a>
@ -432,7 +428,6 @@
<div class="footer-column"><h4>Read</h4><div>
<a href="/litepaper">Litepaper</a>
<a href="/evidence">Evidence</a>
<a href="/bench">Engineering log</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
@ -444,7 +439,6 @@
<a href="/build">Build on Igneum</a>
<a href="/swap">Swap</a>
<a href="/grants">Grants</a>
<a href="/journey">Journey</a>
<a href="/download">Downloads: devnet build</a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener">Community Discord</a>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
@ -470,7 +464,7 @@
document.addEventListener('igneum-theme',function(){var c=stored();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});});
bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===stored()?'true':'false');});
// the network state word in the status bar: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd&&fs.getAttribute('data-devnet-state')==='live'){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->

View file

@ -29,5 +29,8 @@ docs/analysis/class-v6
# 8 October 2026: the miner window audit (an internal design record: the founder's order, lane ids, the build plan)
docs/design/app-audit-2026-10-08.md
docs/analysis/class-v6/coexistence-model.md
# 8 October 2026: the public shape of the pre-2.0 ledger, kept as history at the Igneum 2.0 reset (not served, not linked;
# docs/ledger-public.md is now generated from docs/fud-ledger-2.0.md)
docs/ledger-public-pre-2.0.md
# 8 October 2026: the Devnet 3 proving pipeline record (the fleet lane: box names, the operations record, the external review quoted)
docs/analysis/proving-pipeline-2026-10-08.md

View file

@ -1,80 +1,29 @@
// Ledger text check: every sentence docs/fud-ledger.md requires on a public page must appear on that page verbatim
// (docs/plans/site-ui-3.md step 6). The list below is the ledger's stated-sentence set as audited on 6 October 2026
// (docs/plans/site-ui-3-ticklist.md); a new ledger row that states a sentence adds a line here in the same commit.
// Ledger text check: every sentence the criticism ledger requires on a public page must appear on that page verbatim
// (docs/plans/site-ui-3.md step 6). Since the Igneum 2.0 reset (8 October 2026) the ledger is docs/fud-ledger-2.0.md and the
// list below holds only the sentences that ledger states and that the 2.0 pages carry: the positioning line (R0) on the home
// page, the litepaper and the facts page; the three boundaries (B1 to B3) and the class v6 statements (A3) on the litepaper.
// The pre-2.0 pins went with the pre-2.0 ledger (history in the repository). A new 2.0 entry that states a sentence on a page
// adds a line here in the same commit. Each row: the ledger id, then the sentence and its apostrophe variants.
// node tools/ci/ledger-text-check.mjs exit 1 listing every missing sentence
import { readFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const site = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'site');
const POSITIONING = 'A GPU-secured network for Ethereum-compatible applications and verifiable computation.';
const REQUIRED = {
'index.html': [
// 7 Oct 2026, morning: the one-screen home page of 62bfaea is back on the owner's word (the scene, three facts, the
// downloads, one line to the ledger). The rows it no longer states (G4, C2, X8, X34) stand on the litepaper, listed below.
['E5', 'The one payment to the project is the Ember software\u2019s optional 1% dev fee', 'The one payment to the project is the Ember software\'s optional 1% dev fee'],
['X2', 'Public testnet: not yet open; the devnet build is here for people who want to look'],
['X7', 'hello@igneum.network'],
['X31', 'The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word.'],
// 8 Oct 2026, afternoon: the class v6 close's served sentence (docs/design/class-v6-rotating-family.md 10.0h), verbatim
['X35', 'a bracket that is approximate and provisional until the placed gated core rows land'],
['X35', 'its security does not rely on identifying that hardware or retiring it through emergency changes'],
['R0', POSITIONING],
],
'litepaper.html': [
['X3', 'Live rows arrive with the public testnet.'],
['G4', 'admin keys in consensus'],
['X8', 'No listing is arranged, promised or sought by the project'],
['X31', 'The public testnet is armed: three seed nodes and the public RPC are up, and it opens on the go word.'],
['C2', 'Monero has run on RandomX since November 2019'],
['X34', 'was withdrawn in mid-May 2026 before any unit shipped; RandomX 2.0 shipped on 25 March 2026'],
['X36', '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.'],
['X35', 'Class v6 adopts the 64-register window and retains it across every rotation.'],
['X35', 'The long-program and select-tree proposals were rejected.'],
['X36', 'an observed comparison, not a ceiling'],
['M34', 'The work that waits can grow.'],
['M2', 'computing items on the fly runs 4.8x slower than loading them'],
['M4', 'ProgPoW, as KAWPOW on Ravencoin since 2020'],
['M7', 'The hash is a lottery, not a general-purpose cryptographic hash'],
['M7', 'no analysis of the lottery properties exists yet'],
['M10', 'an RTX 5090 hashes at 95 GB/s of useful 4-byte loads against 1,638 GB/s of sequential writes'],
['M13', 'Macs mine too, at about a fifth of a flagship card'],
['M32', 'every drawn parameter is firmware'],
['M32', 'the defence against it is the latency-shadow work (class v4) and the price per joule, not the schedule'],
['F26', 'No coin is staked. The only thing at stake is 30 days of public work: a vote key’s weight is its blue blocks over the window, and equivocation strips it for 30 days', 'No coin is staked. The only thing at stake is 30 days of public work: a vote key\'s weight is its blue blocks over the window, and equivocation strips it for 30 days'],
['E19', 'external proving is a small second income at launch and the lottery pays the bills'],
['F1', 'In the chain’s first 30 days no checkpoint locks at all', 'In the chain\'s first 30 days no checkpoint locks at all'],
['F5', 'An attacker matching the honest network needs twenty days for a third and never reaches two thirds'],
['F10', 'Pools carry their hashers’ votes, so vote concentration equals pool concentration, and it is public', 'Pools carry their hashers\' votes, so vote concentration equals pool concentration, and it is public'],
['P3', 'the wrapping cost is a phase two measurement'],
['P4', 'The consensus proof that makes the checkpoint self-verifying is phase two'],
['P6', 'a supplier whose electricity cost is close to power and whose price is the subsidy it forgoes'],
['E20', 'the price a prover must charge is the subsidy it forgoes while it proves, which falls as one over network hash'],
['E21', 'default-on, switchable, 1 percent of the producer share'],
['G15', '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'],
['P24', 'a block producer could claim shard pay with a false proof'],
['P25', 'unclaimed pool credit is today stranded in the escrow'],
['P7', 'Writing new code, including an emergency fix to the proof system, is the one thing that takes a person'],
['P10', 'settlement in IGN with a 10% burn follows'],
['P14', 'pays about 7,300 IGN a year'],
['E5', 'No fund, no foundation, no fee to the team'],
['E5', '1 block in 100 pays the project'],
['E6', 'The schedule is a bet, not a measurement'],
['G1', 'reviewers will be named and paid before gate 3'],
['G2', 'one founder with AI systems'],
['G3', 'there is no team page'],
['G4', 'no admin keys in consensus'],
['G6', 'Pools can be bypassed on transaction choice'],
['X34', 'About seven years with one shipped chip, Bitmain'],
['C3', 'Chips arrived, as on Kaspa, whose hash was designed to welcome them'],
['C3', 'Kaspa has run in production since 2021 (approximate)'],
['C5', 'Inclusion is not confirmation on either chain'],
['C6', 'the combination is the risk the gates price'],
['C6', 'Dates slip. Gates do not.'],
['C8', 'Ergo, Ravencoin and Conflux still mine on GPUs at a fraction of the 2022 fleet (approximate)'],
['C10', 'Boundless provers post ZKC and Succinct provers stake PROVE (approximate'],
['C11', 'We know of no chain that combines them'],
['L2', 'Nearly a quarter of all supply is mined in the first year and half in the first two'],
['X1', 'The node, the miner and the wallet follow to the same host as the repository is published'],
['X7', 'hello@igneum.network'],
['X8', 'No listing is arranged, promised or sought by the project'],
['R0', POSITIONING],
['B1', 'Proven execution is not finality.'],
['B2', 'EVM compatibility is not Ethereum security.'],
['B3', 'ZK is not privacy.'],
['A3', 'its security does not rely on identifying that hardware or retiring it through emergency changes'],
['A3', 'Class v6 adopts the 64-register window and retains it across every rotation.'],
],
'evidence.html': [
['R0', POSITIONING],
],
};
const norm = s => s.replace(/\s+/g, ' ').replace(/&#39;|&apos;/g, '\'').replace(/&quot;/g, '"').replace(/&amp;/g, '&');

View file

@ -1,5 +1,5 @@
// Internal link check of the site: every href="..." and src="..." in site/*.html that is not an external URL,
// an anchor, a mailto or a data URI must resolve to a file under site/ (clean URLs: /bench -> bench.html).
// an anchor, a mailto or a data URI must resolve to a file under site/ (clean URLs: /miners -> miners.html).
// Fragment links (#id) inside a page must name an element id in that page. Template literals (${...}) in scripts are
// skipped; /api/<name> resolves to the function file site/api/<name>.mjs.
// node tools/ci/link-check.mjs exit 1 on the first broken link, listing every one
@ -26,6 +26,10 @@ function resolves(target) {
// a literal vercel.json rewrite (no :param) resolves to its destination (/release.json -> /release-manifest.json, 8 October 2026)
const rewrites = Object.fromEntries((JSON.parse(readFileSync(join(site, 'vercel.json'), 'utf8')).rewrites || []).filter(r => !r.source.includes(':')).map(r => [r.source, r.destination]));
const resolvesOrRewritten = (p) => resolves(p) || (rewrites[p.replace(/[?].*$/, '')] != null && resolves(rewrites[p.replace(/[?].*$/, '')]));
// a literal vercel.json redirect (Igneum 2.0 reset, 8 October 2026: /bench -> /evidence, /journey -> /live) resolves to its
// destination, and every link that leans on one is listed below the result so the page that carries it is fixed at source
const vercelRedirects = Object.fromEntries((JSON.parse(readFileSync(join(site, 'vercel.json'), 'utf8')).redirects || []).filter(r => !r.source.includes(':') && !r.has).map(r => [r.source, r.destination]));
const viaRedirect = [];
for (const page of pages) {
const html = readFileSync(join(site, page), 'utf8');
const ids = new Set([...html.matchAll(/\sid="([^"]+)"/g)].map(m => m[1]));
@ -37,7 +41,11 @@ for (const page of pages) {
checked++;
if (t.startsWith('#')) { if (t.length > 1 && !ids.has(t.slice(1))) broken.push(`${page}: fragment ${t}`); continue; }
const [path, frag] = t.split('#');
if (!resolvesOrRewritten(path)) { broken.push(`${page}: ${t}`); continue; }
if (!resolvesOrRewritten(path)) {
const r = vercelRedirects[path.replace(/[?].*$/, '')];
if (r != null && resolvesOrRewritten(r.split('#')[0])) { viaRedirect.push(`${page}: ${t} -> ${r}`); continue; }
broken.push(`${page}: ${t}`); continue;
}
if (frag) {
const rel = path.replace(/[?].*$/, '').replace(/^\//, '');
const file = [join(site, rel), join(site, `${rel}.html`), join(site, rel, 'index.html')].find(c => existsSync(c) && statSync(c).isFile());
@ -47,3 +55,4 @@ for (const page of pages) {
}
if (broken.length) { console.error(`link check: ${broken.length} broken internal link(s) of ${checked}:`); for (const b of broken) console.error(` ${b}`); process.exit(1); }
console.log(`link check: ${checked} internal links across ${pages.length} pages, 0 broken`);
if (viaRedirect.length) { console.log(`link check: ${viaRedirect.length} link(s) resolve only through a vercel.json redirect (fix them at source):`); for (const v of viaRedirect) console.log(` ${v}`); }

View file

@ -0,0 +1,30 @@
// Never-served check (the Igneum 2.0 plan, 8 October 2026): the served pages never carry guaranteed chip death, a universal
// ASIC-efficiency ceiling, a chip-arrival probability, a guaranteed profit, Ethereum security by compatibility, privacy from
// ZK, a numerical rank, or the revenue thresholds the coexistence workbook holds (USD 340 M, USD 23 M, USD 20 to 75 M).
// node tools/ci/never-served-check.mjs exit 1 listing every hit (self-test first: a known-failed fixture per pattern)
import { readFileSync, readdirSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const site = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'site');
const RULES = [
['guaranteed chip death', /\b(every|each|any) chip (dies|will die|must die)\b|chips? (is|are) guaranteed to (die|expire)|guaranteed (chip|ASIC) death/i],
['a universal ASIC-efficiency ceiling', /\buniversal (ASIC|chip)[- ]?(efficiency )?ceiling\b|\bno chip can ever\b/i],
['a chip-arrival probability', /\b\d+ percent (chance|probability|odds) (of|that) (a |an )?(chip|ASIC)|\bprobability (of|that) (a |an )?(chip|ASIC) (arrives|arriving|ships|appears)|\bchip-arrival probabilit/i],
['a guaranteed profit', /\bguaranteed (profit|profits|return|returns|income|earnings)\b/i],
['Ethereum security by compatibility', /\b(inherits|inherit|gets|gives|with) Ethereum'?s? security\b|\bEthereum security (by|through|from) compatibility\b/i],
['privacy from ZK', /\b(ZK|zero-knowledge) (makes|keeps|gives|means) (it |transactions |everything )?(private|privacy)\b|\bprivate (by|through) (ZK|zero-knowledge)\b/i],
['a numerical rank', /\bnumber one\b|\b(the )?#1\b|\bno\. 1\b/i],
['a workbook threshold served as a boundary', /USD 340 ?M\b|USD 23 ?M\b|USD 20 to 75 ?M\b/],
];
const text = (html) => html.replace(/<script[\s\S]*?<\/script>|<style[\s\S]*?<\/style>/g, ' ').replace(/<[^>]+>/g, ' ').replace(/&[a-z]+;|&#\d+;/g, ' ');
const scan = (name, html) => { const t = text(html); const hits = []; for (const [what, re] of RULES) { const m = re.exec(t); if (m) hits.push(`${name}: ${what} ("${t.slice(Math.max(0, m.index - 40), m.index + m[0].length + 40).replace(/\s+/g, ' ').trim()}")`); } return hits; };
// self-test: a known-failed fixture per rule, then a clean one
const fixtures = ['every chip dies within a year', 'a universal ASIC-efficiency ceiling of 2x', 'a 30 percent chance of a chip by 2027', 'guaranteed profits for miners', 'the chain inherits Ethereum security', 'ZK makes transactions private', 'the number one GPU chain', 'the capex wall at USD 340 M'];
let bad = 0;
fixtures.forEach((f, i) => { if (!RULES[i][1].test(f)) { console.error(`self-test: rule ${i} missed "${f}"`); bad++; } });
if (scan('clean', '<p>A GPU-secured network for Ethereum-compatible applications and verifiable computation. ZK is not privacy. EVM compatibility is not Ethereum security.</p>').length) { console.error('self-test: the clean fixture was flagged'); bad++; }
if (bad) process.exit(1);
const hits = [];
for (const f of readdirSync(site).filter(f => f.endsWith('.html'))) hits.push(...scan(f, readFileSync(join(site, f), 'utf8')));
if (hits.length) { console.error(`never-served check: ${hits.length} hit(s)\n ${hits.join('\n ')}`); process.exit(1); }
console.log(`never-served check: ${RULES.length} rules, self-test passed, no hit on the served pages`);

View file

@ -13,7 +13,7 @@ const fails = [];
const m = JSON.parse(readFileSync(join(site, 'release-manifest.json'), 'utf8'));
for (const k of ['format', 'generated', 'read_at', 'network', 'source', 'mining', 'finality', 'proving', 'fees', 'versions', 'sources']) if (!(k in m)) fails.push(`manifest: no "${k}" block`);
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(m.generated || '')) fails.push('manifest: "generated" is not an ISO UTC date');
if (m.network?.chain_id !== 4464 || m.network?.chain_id_hex !== '0x1170') fails.push('manifest: Devnet 3 chain id is 4464 (0x1170)');
if (m.network?.chain_id !== 4464 || m.network?.chain_id_hex !== '0x1170') fails.push('manifest: the Igneum 2.0 devnet chain id is 4464 (0x1170)');
if (!/two thirds of active weight and at least two thirds of total weight/.test(m.finality?.statement || '')) fails.push('manifest: the finality statement must say two thirds of active and two thirds of total weight');
if (m.proving?.verifier_in_consensus !== 'off') fails.push('manifest: the verifier is off in consensus (ledger P21) until that row moves');
const dl = JSON.parse(readFileSync(join(site, 'downloads.json'), 'utf8'));

View file

@ -14,7 +14,7 @@ import { fileURLToPath } from 'node:url';
const here = dirname(fileURLToPath(import.meta.url));
const GROUPS = {
mine: ['/miner', '/download', '/app', '/wallet', '/miners', '/dev-fee', '/metamask'],
network: ['/live', '/explorer', '/journey', '/bench', '/evidence', '/light', '/receipt', '/oracle'],
network: ['/live', '/explorer', '/evidence', '/light', '/receipt', '/oracle'],
learn: ['/litepaper', '/income', '/economics', '/ledger', '/claims', '/randomx', '/provenance'],
build: ['/build', '/faucet', '/swap', '/grants', '/compatibility'], // the builder programme (8 October 2026): the developer entry page, the Devnet 3 faucet, the swap, the grants
};

View file

@ -1,28 +1,18 @@
#!/usr/bin/env node
// /income (LG-1, 7 October 2026): docs/analysis/income-tiers.md published as a site page. The document is the generator's
// output (tools/launch/income-tiers.mjs, checked on the gate); this script turns its tables and tier lines into
// site/income.html inside the site's shell markers, so the page and the document cannot disagree. Labels on every
// number, no price of IGN anywhere (the page says so). node tools/launch/income-page.mjs [--check]
// /income (LG-1, 7 October 2026; Igneum 2.0 reset 8 October 2026): the calculator page, written into site/income.html
// inside the site's shell markers. The testnet-era tier tables of docs/analysis/income-tiers.md stay in the repository and
// are not served. No price of IGN anywhere (the page says so). node tools/launch/income-page.mjs [--check]
import { readFileSync, writeFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const here = dirname(fileURLToPath(import.meta.url)), root = join(here, '../..');
const md = readFileSync(join(root, 'docs/analysis/income-tiers.md'), 'utf8');
const esc = (s) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
const inline = (s) => esc(s).replace(/\*\*(.+?)\*\*/g, '<b>$1</b>').replace(/`(.+?)`/g, '<code>$1</code>');
const section = (title) => { const i = md.indexOf('## ' + title); if (i < 0) throw new Error('section missing: ' + title); const j = md.indexOf('\n## ', i + 3); return md.slice(i, j < 0 ? md.length : j); };
const table = (text) => { const rows = text.split('\n').filter((l) => l.startsWith('|')); if (rows.length < 3) return ''; const cells = (l) => l.slice(1, -1).split('|').map((c) => c.trim()); const head = cells(rows[0]); const body = rows.slice(2).map(cells); return '<div class="tbl"><table><thead><tr>' + head.map((h, i) => `<th${i ? ' class="num"' : ''}>${inline(h)}</th>`).join('') + '</tr></thead><tbody>' + body.map((r) => '<tr>' + r.map((c, i) => `<td${i >= 2 ? ' class="num"' : ''}>${inline(c)}</td>`).join('') + '</tr>').join('') + '</tbody></table></div>'; };
const paras = (text) => text.split('\n').filter((l) => l.trim() && !l.startsWith('|') && !l.startsWith('#') && !l.startsWith('- ')).map((l) => `<p>${inline(l)}</p>`).join('\n');
const bullets = (text) => { const items = text.split('\n').filter((l) => l.startsWith('- ')); return items.length ? '<ul class="tiers">' + items.map((l) => `<li>${inline(l.slice(2))}</li>`).join('\n') + '</ul>' : ''; };
const sched = section('The schedule the figures use'), cards = section('The cards, measured'), ign = section('IGN a day per card, solo, after the ramp (day 90)'), elec = section('Electricity a day, and the electricity cost of one mined IGN'), means = section('What it means per tier, and what is being done'), owed = section('Owed');
const generated = /Generated by[^\n]*/.exec(md)?.[0] || '';
const html = `<!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 income: what your card would mine</title>
<meta name="description" content="Pick a card, set your electricity price and read IGN a day from the live network; type a price for IGN to see money a day at that price. Devnet and testnet IGN have no value.">
<meta name="description" content="Pick a card, set your electricity price and read IGN a day from the live network; type a price for IGN to see money a day at that price. Devnet IGN has no value.">
<link rel="canonical" href="https://igneum.network/income">
<!-- head:start -->
<!-- head:end -->
@ -34,46 +24,16 @@ const html = `<!doctype html>
<section class="page-hero"><div class="container">
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>Income</span></div>
<h1>What your card would mine.</h1>
<p class="lead">Pick a card, set your electricity price, and read IGN a day from the live network. Type a price for IGN to see money a day at that price. Nobody sells IGN and the project quotes none: devnet and testnet IGN have no value, and the figure is arithmetic on the number you typed.</p>
<p class="lead">Pick a card, set your electricity price, and read IGN a day from the live network. Type a price for IGN to see money a day at that price. Nobody sells IGN and the project quotes none: devnet IGN has no value, and the figure is arithmetic on the number you typed.</p>
</div></section>
<section class="section"><div class="container">
<h2>The calculator</h2>
<p>Every card is a measured row of the <a href="/miners">bench table</a>: stock rows as bought, tuned rows at a measured lock or an Ember Tune point, never mixed. The network’s hash rate and the newest block’s DAA score come from the observer every 15 s; the block reward is the chain’s own emission rule at that score (<a href="/economics">the economics page</a> has the rule with its source), and the miner’s share is 80 percent of a block. One block a second.</p>
<div id="income-calc"><p>The calculator needs JavaScript. The tables below carry the same arithmetic at three network sizes.</p></div>
<div id="income-calc"><p>The calculator needs JavaScript.</p></div>
<!-- income-data:start -->
<!-- income-data:end -->
<p class="note">A solo card’s expected income is its share of the network’s hash rate times 86,400 blocks a day times the block reward times 0.8; a pool user gets the same expected amount minus the pool’s fee, with the variance taken out. The electricity line is watts times 24 hours at your price; the money line is IGN a day at the price you typed, electricity taken off. Nothing here is a forecast.</p>
</div></section>
<section class="section"><div class="container">
<h2>The schedule the tables below use</h2>
<p>The tables below are the public testnet’s arithmetic from measured cards; the calculator above reads the live chain, which runs the spec 2.5 schedule the <a href="/economics">economics page</a> states.</p>
${paras(sched)}
${table(sched)}
</div></section>
<section class="section"><div class="container">
<h2>The cards, measured</h2>
${paras(cards)}
${table(cards)}
</div></section>
<section class="section"><div class="container">
<h2>IGN a day per card, solo, after the ramp (day 90)</h2>
${paras(ign)}
${table(ign)}
</div></section>
<section class="section"><div class="container">
<h2>Electricity a day, and the electricity cost of one mined IGN</h2>
${paras(elec)}
${table(elec)}
</div></section>
<section class="section"><div class="container">
<h2>What it means per tier, and what is being done</h2>
${bullets(means)}
</div></section>
<section class="section compact"><div class="container">
<h2>Owed</h2>
${bullets(owed)}
<p class="note">${inline(generated)}</p>
</div></section>
</main>
<!-- footer:start -->
<!-- footer:end -->

View file

@ -1,17 +1,19 @@
#!/usr/bin/env node
// Renders docs/fud-ledger.md as the public page site/ledger.html: every entry, the critic's words, what was done, the
// status and the date, with the count table on top. Nothing is dropped and nothing is softened; the only rewrites are
// Renders the criticism ledger as the public page site/ledger.html: every entry, the critic's words, what was done, the
// status, the date and the pin it answers, with the count table on top. Since the Igneum 2.0 reset (8 October 2026) the
// source is docs/fud-ledger-2.0.md (LEDGER_SRC or the first argument overrides); docs/fud-ledger.md stays as history. Nothing is dropped and nothing is softened; the only rewrites are
// the identity and provider terms of tools/ci/forbidden-strings.txt and the leak classes below (config and home paths,
// process ids, listen addresses, machine names, repository file paths), applied in place; the rendered page is then
// grepped against the same list and the render fails on a hit.
// Usage: node tools/ledger-page.mjs [docs/fud-ledger.md] [site/ledger.html]
// Usage: node tools/ledger-page.mjs [docs/fud-ledger-2.0.md] [site/ledger.html]
import { readFileSync, writeFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const here = dirname(fileURLToPath(import.meta.url));
const root = join(here, '..');
const src = process.argv[2] || join(root, 'docs', 'fud-ledger.md');
const LEDGER_SRC = process.env.LEDGER_SRC ? join(root, process.env.LEDGER_SRC) : join(root, 'docs', 'fud-ledger-2.0.md');
const src = (process.argv[2] && !process.argv[2].startsWith('--')) ? process.argv[2] : LEDGER_SRC;
const out = process.argv[3] || join(root, 'site', 'ledger.html');
const esc = s => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
@ -54,12 +56,13 @@ export function parseLedger(text) {
let cur = null;
for (const l of text.split('\n')) {
const m = ENTRY_RE.exec(l);
if (m) { cur = { id: m[1], title: m[2].trim(), quote: '', status: '', answer: '' }; entries.push(cur); continue; }
if (m) { cur = { id: m[1], title: m[2].trim(), quote: '', status: '', answer: '', pin: '' }; entries.push(cur); continue; }
if (!cur) continue;
const s = l.trim();
if (!cur.quote && s.startsWith('"')) cur.quote = s.replace(/^"|"$/g, '');
else if (s.startsWith('Status:')) cur.status = s.slice(7).trim(); // the LAST status line wins, as tools/ledger/export-public.mjs reads it (7 October 2026: the page read the first and counted four entries as Other that the export did not)
else if (!cur.answer && s.startsWith('Answer:')) cur.answer = s.slice(7).trim();
else if (s.startsWith('Pin:')) cur.pin = s.slice(4).trim(); // the 2.0 ledger (8 October 2026): every entry names the pin it answers
}
return entries;
}
@ -79,7 +82,8 @@ if (process.argv.includes('--self-test')) {
const entries = parseLedger(readFileSync(src, 'utf8'));
const SECTION = { AP: 'The in-house adversarial pass', M: 'Mining and chips', F: 'Finality and attacks', P: 'Proving and the zkEVM', E: 'Economics and the coin', G: 'Governance and the founders', C: 'Comparisons', L: 'Legal and regulatory', X: 'Launch and\u00a0operations', D: 'Builders' };
// the Igneum 2.0 sections (8 October 2026): one letter per pin group of docs/plans/igneum-2.0.md
const SECTION = { R: 'The objective and the four properties', D: 'The five deliverables', P: 'Pools, software and participation', A: 'Architecture and proving', B: 'The three boundaries', C: 'Comparisons and leadership' };
function bucket(status) {
const s = status.toLowerCase();
@ -97,7 +101,7 @@ function statusWord(status) {
}
function dateOf(status) {
const m = /(\d{1,2} October 2026)/.exec(status);
return m ? m[1] : '3 October 2026';
return m ? m[1] : '8 October 2026';
}
const ORDER = ['Open', 'Conceded', 'Fixed or built', 'Closed by rule or decided', 'Answered with evidence', 'Answered by design', 'Other'];
@ -118,7 +122,7 @@ const HEAD = partial('head.html'), NAV = partial('nav.html'), FOOT = partial('fo
// the ledger is a header item: the page underlines it like build.mjs's navFor does for the other pages
const NAV_LEDGER = NAV.replace(/(<a href="\/ledger" data-nav="ledger")/, '$1 aria-current="page"');
const intro = `This is every criticism the project expects, in the critic's words, with what was done about it and the date. ${entries.length} 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.`;
const intro = `Every criticism Igneum 2.0 expects, in the critic's words, with the status today, what answers it and the pin of the 2.0 plan it answers. ${entries.length} entries, written fresh on 8 October 2026. A pin closes only with a landed document and its pass condition met, so anything not yet delivered says Open and names the pass condition. Where the critic is right the entry says Conceded. Entries are never deleted; a status that changes keeps its history. Help is welcome: pick an open row and write to <a href="mailto:hello@igneum.network">hello@igneum.network</a> with its id.`;
const countRows = ORDER.filter(b => counts[b]).map(b => `<tr><td class="num">${counts[b]}</td><td><button type="button" class="chip" data-filter="${esc(b)}">${esc(b)}</button></td><td>${esc(MEANING[b])}</td></tr>`).join('\n');
@ -134,6 +138,7 @@ for (const e of entries) {
<div class="head"><span class="id">${e.id}</span><h3>${inline(scrub(e.title))}</h3><span class="date">${esc(dateOf(e.status))}</span></div>
<blockquote>${inline(scrub(e.quote))}</blockquote>
<div class="status"><span class="badge b-${b.toLowerCase().replace(/[^a-z]+/g, '-')}">${esc(word)}</span>${rest ? ` <span class="did">${inline(rest)}</span>` : ''}</div>
${e.pin ? `<div class="pin"><b>Pin</b> ${inline(scrub(e.pin))}</div>` : ''}
${e.answer ? `<details><summary>The answer as first written</summary><p>${inline(scrub(e.answer))}</p></details>` : ''}
</article>\n`;
}
@ -144,7 +149,7 @@ const html = `<!doctype html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<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. ${entries.length} entries. Nothing deleted, nothing softened.">
<meta name="description" content="Every criticism Igneum 2.0 expects, in the critic's words, with what was done, the status and the date. ${entries.length} entries. Nothing deleted, nothing softened.">
<link rel="canonical" href="https://igneum.network/ledger">
<meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website">
@ -192,6 +197,7 @@ blockquote{margin:10px 0;padding:10px 14px;border-left:3px solid var(--line-2);c
:root:not([data-theme="light"]) .b-fixed-or-built{color:#8fd48f}
.entry details{margin-top:8px;font-size:14px;color:var(--ash);border:0}.entry details:last-of-type{border:0}.entry summary{padding:4px 0;color:var(--ash);font-weight:400}.entry details p{margin:8px 0 0;color:var(--ink-2)}
.page-hero .lead{max-width:76ch}
.entry .pin{margin-top:8px;font-size:14px;color:var(--ash)}.entry .pin b{font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:500;margin-right:6px}
</style>
</head>
<body>
@ -216,7 +222,7 @@ ${countRows}
</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>
${body}
<p class="intro" style="margin-top:var(--sec)">Source: the project's criticism ledger, a file in the repository, rendered to this page at build time; the repository is published at the public testnet. A criticism that is not here, or that shows an entry is wrong, is added with credit if wanted: <a href="mailto:hello@igneum.network">hello@igneum.network</a> or <a href="https://github.com/igneum-network/spec/issues" rel="noopener">an issue on the specification repository</a>.</p>
<p class="intro" style="margin-top:var(--sec)">Source: the project's Igneum 2.0 criticism ledger, a file in the repository, rendered to this page at build time. A criticism that is not here, or that shows an entry is wrong, is added with credit if wanted: <a href="mailto:hello@igneum.network">hello@igneum.network</a> or <a href="https://git.igneum.network/igneum-network/spec/issues" rel="noopener">an issue on the specification repository</a>.</p>
</div></section>
</main>
<!-- footer:start -->

View file

@ -1,11 +1,12 @@
#!/usr/bin/env node
// The public shape of the criticism ledger (main's ruling, 7 October 2026, 19:5x UK): docs/ledger-public.md, one row per item
// (id, the claim or criticism in one line, status, what was done in one line, the evidence link), generated from
// docs/fud-ledger.md so it never drifts. Nothing from the ledger's round sections or status-update sections; no internal commit
// the ledger source so it never drifts. Since the Igneum 2.0 reset (8 October 2026) the source is docs/fud-ledger-2.0.md
// (LEDGER_SRC overrides, a path relative to the repository root); docs/fud-ledger.md stays in the repository as history. Nothing from the ledger's round sections or status-update sections; no internal commit
// ids (7 to 40 hex), no lane or agent names, no time of day (dates stay at the day). The founder check reads the output like
// every tracked file.
//
// node tools/ledger/export-public.mjs # rewrite docs/ledger-public.md from docs/fud-ledger.md
// node tools/ledger/export-public.mjs # rewrite docs/ledger-public.md from the ledger source (docs/fud-ledger-2.0.md)
// node tools/ledger/export-public.mjs --check # exit 1 when docs/ledger-public.md differs from what the ledger generates, or when an entry's
// # last Status paragraph starts with a date or a word outside the six statuses (the gate)
// node tools/ledger/export-public.mjs --self-test # a fixture ledger with a commit id, a time, a lane name and a Fix line gives rows
@ -16,7 +17,8 @@ import os from 'node:os';
import path from 'node:path';
const ROOT = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', '..');
const LEDGER = path.join(ROOT, 'docs', 'fud-ledger.md');
const LEDGER_REL = process.env.LEDGER_SRC || 'docs/fud-ledger-2.0.md'; // the 2.0 ledger (8 October 2026); the pre-2.0 file is history
const LEDGER = path.resolve(ROOT, LEDGER_REL);
const OUT = path.join(ROOT, 'docs', 'ledger-public.md');
const ITEM = /^### ([A-Z][A-Z0-9-]*?)\. (.+)$/;
@ -100,7 +102,7 @@ export function render(text) {
const out = [];
out.push('# Igneum criticism ledger, public shape');
out.push('');
out.push('Generated by `tools/ledger/export-public.mjs` from `docs/fud-ledger.md`; a gate check fails when the two drift. One row per item: the claim or criticism, its status, what was done, and the evidence. Internal identifiers, times of day and team-member names are left out on purpose; the full ledger is published with the repository.');
out.push(`Generated by \`tools/ledger/export-public.mjs\` from \`${LEDGER_REL}\`; a gate check fails when the two drift. One row per item: the claim or criticism, its status, what was done, and the evidence. Internal identifiers, times of day and team-member names are left out on purpose; the full ledger is published with the repository.`);
out.push('');
out.push(`${rows.length} items. By status: ${Object.entries(byStatus).sort((a, b) => b[1] - a[1]).map(([k, v]) => `${k} ${v}`).join('; ')}.`);
out.push('');
@ -146,7 +148,7 @@ else if (arg === '--check') {
const bad = badStatuses(fs.readFileSync(LEDGER, 'utf8'));
if (bad.length) { console.error(`ledger-public: ${bad.length} entr${bad.length === 1 ? 'y' : 'ies'} whose last Status paragraph does not start with one of the six statuses' words (the current status is its first sentence; the previous follows "Was:"): ${bad.join('; ')}`); process.exit(1); }
const ok = check(fs.readFileSync(LEDGER, 'utf8'), OUT);
console.log(ok ? `ledger-public: docs/ledger-public.md matches docs/fud-ledger.md (${parseItems(fs.readFileSync(LEDGER, 'utf8')).length} items)` : 'ledger-public: docs/ledger-public.md differs from what docs/fud-ledger.md generates; run node tools/ledger/export-public.mjs and commit');
console.log(ok ? `ledger-public: docs/ledger-public.md matches ${LEDGER_REL} (${parseItems(fs.readFileSync(LEDGER, 'utf8')).length} items)` : `ledger-public: docs/ledger-public.md differs from what ${LEDGER_REL} generates; run node tools/ledger/export-public.mjs and commit`);
process.exit(ok ? 0 : 1);
} else {
const text = fs.readFileSync(LEDGER, 'utf8'); fs.writeFileSync(OUT, render(text));

View file

@ -6,7 +6,7 @@ import { readFileSync } from 'node:fs';
import { blake2b } from '@noble/hashes/blake2.js';
import { keccak_256 } from '@noble/hashes/sha3.js';
import { bls12_381 } from '@noble/curves/bls12-381.js';
import { verifyReceipt, verifyPaymentReceipt, formatIgn } from '../../../site/lc/core.js';
import { verifyReceipt, formatIgn } from '../../../site/lc/core.js';
const args = process.argv.slice(2);
const file = args.find(a => !a.startsWith('--'));
@ -24,15 +24,11 @@ if (args.includes('--tamper')) {
console.log(`tampered copy (one nibble of the raw transaction): ${t.verified ? 'NOT REFUSED, this verifier is broken' : 'REFUSED'}${t.reason ? ' :: ' + t.reason : ''}`);
if (t.verified) process.exit(1);
}
const r = receipt.segment ? verifyPaymentReceipt(receipt, deps) : verifyReceipt(receipt, deps);
const payment = !!(r.verified && r.payment);
console.log(`${payment ? 'PAYMENT RECEIPT' : 'TRANSACTION INCLUSION RECEIPT'} 0x${receipt.tx_hash} on ${receipt.chain_id} (Devnet 3, no value)`);
console.log(payment
? 'What this file authenticates: that the signed transaction is included in a finalised block and executed with status success, its receipt sitting in the shard receipts trie whose root the proven segment statement commits to. Trusted: the voter table from the node; the SP1 proof behind the statement is verified by nodes, not here.'
: 'What this file authenticates: that the signed transaction is included in a block that is finalised. What it does not: the execution outcome (status, gas), which is carried as the node reported it.' + (receipt.payment_unavailable ? ' Why no payment receipt: ' + receipt.payment_unavailable : ''));
const r = verifyReceipt(receipt, deps);
console.log(`TRANSACTION INCLUSION RECEIPT 0x${receipt.tx_hash} on ${receipt.chain_id} (devnet, no value)`);
console.log('What this file authenticates: that the signed transaction is included in a block that is finalised. What it does not: the execution outcome (status, gas), which is carried as the node reported it. A payment receipt, which authenticates the transfer outcome, is a different file.');
print(r);
if (!r.verified) { console.log(`REFUSED: ${r.reason}`); process.exit(1); }
const t = r.tx;
if (payment) console.log(`PAYMENT VERIFIED in ${r.ms} ms: ${formatIgn(t.value)} IGN (${t.value} wei of the native coin) to ${t.to || 'contract creation'}, executed with status success (${r.outcome.logs.length} log(s)) at chain block ${receipt.execution.chain_block}, in block ${r.block.slice(0, 16)} at DAA ${r.block_daa}, finalised under checkpoint ${r.checkpoint}; ${r.certificate}.`);
else console.log(`INCLUSION VERIFIED in ${r.ms} ms: a signed transaction of ${formatIgn(t.value)} IGN to ${t.to || 'contract creation'} (${t.value} wei) is included in block ${r.block.slice(0, 16)} at DAA ${r.block_daa} (${new Date(Number(r.block_time)).toISOString()}), finalised under checkpoint ${r.checkpoint}; ${r.headers} headers checked; ${r.certificate}.`);
console.log('Reported by the node, not authenticated by this file: from ' + (receipt.tx_as_reported && receipt.tx_as_reported.from) + (payment ? '' : (receipt.execution ? `, executed with status ${receipt.execution.status === '0x1' ? 'success' : 'failed'}` : '')) + '. The voter table with weights came from the node (spec 10.1). In the four words: ' + (payment ? 'included, executed, proven and finalised are authenticated under the stated trust.' : 'included and finalised are authenticated, executed is reported, proven is not claimed.'));
console.log(`INCLUSION VERIFIED in ${r.ms} ms: a signed transaction of ${formatIgn(t.value)} IGN to ${t.to || 'contract creation'} (${t.value} wei) is included in block ${r.block.slice(0, 16)} at DAA ${r.block_daa} (${new Date(Number(r.block_time)).toISOString()}), finalised under checkpoint ${r.checkpoint}; ${r.headers} headers checked; ${r.certificate}.`);
console.log('Reported by the node, not authenticated by this file: from ' + (receipt.tx_as_reported && receipt.tx_as_reported.from) + (receipt.execution ? `, executed with status ${receipt.execution.status === '0x1' ? 'success' : 'failed'}` : '') + '. The voter table with weights came from the node (spec 10.1). In the four words: included and finalised are authenticated, executed is reported, proven is not claimed.');

View file

@ -18,7 +18,7 @@ LIVE_NETWORK="${LIVE_NETWORK:-igneum-devnet-3}"
INDEX_STRINGS=("At launch the strongest chip in our public model" "git.igneum.network/igneum-network/")
LEGAL_PAGE="${LEGAL_PAGE:-/litepaper}"; LEGAL_STRING="Not legal advice" # the legal line lives on the litepaper in master's tree (22:16 UK: no commit put it on the index)
MINERS_MIN_ROWS="${MINERS_MIN_ROWS:-20}" # the current-class table alone (the datacentre rows sit in their own table since 8 Oct 2026)
SERVED_PAGES=(swap "faucet|Devnet 3 faucet" "faucet|chain id 4464 since its class v5 floor" "build|Built to prove every block" "build|since its class v5 floor" "grants|Not legal advice." proving tx/0x0 "light|<title>" "receipt|<title>" "oracle|<title>" "lc/test|<title>" "explorer|Source since 12:25 UTC" lc/app.js lc/core.js lc/verify-receipt.js "economics|Not legal advice." "income|The calculator" "income|/income-calc.js" "income|id=\"income-data\"" income-calc.js) # clean URLs every deploy must answer 200 (8 Oct 2026: the DEX lane's /swap, the builder lane's /faucet; /light /receipt /oracle /build /grants join as they land)
SERVED_PAGES=(swap "faucet|Igneum 2.0 devnet faucet" "build|Built to prove every block" "build|igneum-devnet-4" "grants|Not legal advice." proving tx/0x0 "light|<title>" "receipt|<title>" "oracle|<title>" "lc/test|<title>" "explorer|Source since 12:25 UTC" lc/app.js lc/core.js lc/verify-receipt.js "economics|Not legal advice." "income|The calculator" "income|/income-calc.js" "income|id=\"income-data\"" income-calc.js) # clean URLs every deploy must answer 200 (8 Oct 2026: the DEX lane's /swap, the builder lane's /faucet; /light /receipt /oracle /build /grants join as they land)
SITE="${SITE_URL:-https://igneum.network}"
# the /miners row count: the rows of the current-class table (table#bench-current, the regrouped bench of 8 Oct 2026; the datacentre
# and earlier tables sit under their own ids); known-failed: an empty table reads 0

View file

@ -20,7 +20,7 @@ SRV=$!
trap 'kill "$SRV" 2>/dev/null || true' EXIT
for i in $(seq 1 40); do curl -fsS "http://127.0.0.1:$PORT/" > /dev/null 2>&1 && break; sleep 0.25; done
curl -fsS "http://127.0.0.1:$PORT/" > /dev/null || { echo "the site did not answer on $PORT" >&2; cat "$OUT/serve.log" >&2; exit 3; }
ROUTES="${ROUTES:-/ /download /miner /app /wallet /live /explorer /journey /bench /evidence /litepaper /income /economics /ledger /claims /randomx /provenance /miners /dev-fee /faucet /metamask /404}"
ROUTES="${ROUTES:-/ /download /miner /app /wallet /live /explorer /evidence /litepaper /income /economics /ledger /claims /randomx /provenance /miners /dev-fee /faucet /metamask /404}"
WIDTHS="${WIDTHS:-390 1440}"; THEMES="${THEMES:-dark light}"
shot() { # <route> <width> <theme>
local route="$1" width="$2" theme="$3" name height