The four public sentences (F18, P13, E11, L7 in site/litepaper.html and site/index.html) were swept into the concurrent commit 9dc6e14; this commit carries the rest. Spec 02: finality depth (43,200 DAA s, 12 h of median time) named as the reorg bound, merge depth as a merge limit only, simnet reorg test for gate 2; emission follows the code (365.25-day year, 63,115,200-s halving, 31.688 IGN per DAA second, reds inside the DAA window paid to the merger, E paid per block so coins are blocks times E). Spec 03: W2 and Q1 denominated in past-median time, weight as a share of each 60-s bucket; W6 keys are free, weight is the only Sybil-resistant quantity; 3.8 and 3.9 point exchanges at the finality depth. Spec 06: O-3.14, the finality simulation with the DAA in the loop under a pulsed rental (gate 3). Spec 07: shard sortition draws by weight (blue blocks drawn uniformly from the window); proof-record validity is relative to the carrying block's own selected-parent chain; 1-key-versus-1,000-keys test. Spec 08: release-key chain, rotation signed by the current key, revocation signed by the previous key, both published in a block; policy before the client ships. Ledger: status lines for F18, P13, E11, L7, P11, F17, F14, M14, F15, E9, E10, G9; P8 cross-reference. Fixes: section 2.2 rows 75 to 88, with M15, M20 and P12 marked code, owner consensus engineer. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
7.2 KiB
Igneum protocol specification, section 8: client security
Spec version 0.1, 3 October 2026. Status of this section: Decided (3 October 2026, ledger G7 and X6). Nothing here is implemented. This section binds the official client (the one-click Igneum app on Windows, macOS and Linux, and the headless miner it wraps) and the project's release process. It binds no other client: any client is welcome, and a client that ignores this section is not an invalid node, only one the project did not ship.
The two findings it answers. An app that auto-updates on ten thousand machines is an admin key over the miners, the wallets the app made and the vote keys (G7). An installer that creates a wallet, holds keys and mines, promoted to people who have never run a miner, is a honeypot for fake copies and a target for every antivirus (X6). Both are true. The rules below name the key, bound it, and make the real app distinguishable from a fake by anyone who looks.
8.1 Reproducible builds
- Every release of the official client MUST be reproducible: a build from the tagged source on the documented toolchain MUST produce byte-identical binaries on every supported platform.
- The repository MUST carry, at the release tag, the hash of every released binary, the toolchain versions, and the command that reproduces the build.
- A release whose hashes a third party cannot reproduce is withdrawn and the cause published.
8.2 The release key
- Every release MUST be signed by the release key. The release key's public half is published in the genesis block and is therefore in every node's copy of the chain; it is also in the repository and on the domain.
- The private half is held in hardware by the steward named in the published key policy. It never exists on a networked machine. The policy (who holds it, under which entity and in which jurisdiction, how a signature is produced, who holds the predecessor key of item 5) is published before the client ships to anyone outside the project, which is before the public testnet and not at it (O-8.1; ledger G9 and L1, round 3).
- The client MUST refuse any update whose signature does not verify under the release key. A refused update is reported to the user, with the hash it saw, and the running version continues.
- There are no silent updates. The client MAY check for a release and MUST show the version, its hash and the reproduction instructions; installation proceeds only when the user accepts it. The client never applies an update while mining without the user's acceptance for that version.
- Rotation and revocation (rule of 3 October 2026, ledger G9, round 3). Release keys form a chain K0, K1, K2 and so on, with K0 in genesis. Rotation: a message
(K_n, K_n+1, reason, date)signed by K_n and published as a transaction in a block. From the first certified checkpoint whose past holds that block (before finality is active, from 43,200 DAA s of depth) the client accepts releases signed by K_n+1 and none signed by K_n. Rotation is the only path to a new key. Revocation: a message(K_n, reason, date, successor or none)signed by K_n-1, the previous key, published in a block the same way; it declares K_n lost or compromised. After a rotation the previous key is retired, not destroyed: it is kept in separate custody by a second holder named in the policy, and its only remaining power is to revoke its successor. K0 has no predecessor, so a revocation certificate for K0, signed by K0 at creation and naming a pre-generated K1, is held by the second holder apart from K0. From the block that carries a revocation onward the client MUST refuse every release signed by the revoked key and accepts releases under the named successor; if no successor is named, the client accepts no update at all until the user installs a new client by hand from the repository. A lost key is therefore revocable without its own signature, which the earlier rule (revocation "by its own last signed release") could not do.
8.3 The client cannot change consensus
- Consensus rules change only through the upgrade path of section 5.7: new code activates when 90% of blue blocks in the signalling window carry the signal. A client release carries code; it carries no activation. The chain, not the app, decides when a rule takes effect, and 90% of miners have to say so in their blocks.
- The client MUST NOT set a signalling bit without a user choice shown in the interface, and the default MUST be the choice the user last made, never the release's preference.
- A release that changed a consensus rule without an activation signal would fork its users off the chain, which is the only thing a hostile release key can do to consensus, and it is visible to everyone within one block.
8.4 Distribution
- Builds on every platform are notarised or signed with the platform's own mechanism (Apple notarisation, Windows Authenticode, a signed Linux package or AppImage) in addition to the release key.
- Downloads are offered only from the project's domain and from the repository's release page. The hash of the file is shown beside every download button. No app store, mirror, torrent or third-party site is an official source, and the domain publishes the list of the only official sources.
- Shipping a miner means antivirus products flag it. The app documents this and never asks the user to disable protection; it tells the user how to verify the hash instead.
8.5 Keys and the seed
-
The app creates the user's wallet locally. Before mining starts, the seed phrase MUST be shown and the user MUST confirm it (by re-entering the words or an equivalent check). Mining does not start until the confirmation succeeds.
-
The app MUST offer a hardware wallet as the destination for earnings, so a user who never wants a seed on the mining machine does not need one.
-
The seed is never transmitted, never backed up by the project, and never asked for by any update, support route or message. The permanent line, verbatim, appears wherever the app appears: on the download page, in the installer, on the seed screen and in every support channel:
Nobody from Igneum will ever ask for your seed.
-
The vote key of section 3 is a separate key, created by the app and held by the app, and its loss costs the user weight, not coins (W5 of section 3 moves weight to a successor key). The app shows it as a mining key and never as a wallet.
8.6 Parameters in this section
| Parameter | Value | Label |
|---|---|---|
| Release key publication | genesis block, repository, domain | Decided |
| Release key custody | hardware, held by the named steward; the predecessor key with a second holder; policy published before the client ships | Decided; policy Open (O-8.1) |
| Release key rotation and revocation | rotation signed by the current key, revocation signed by the previous key, both published in a block | Decided 3 October 2026 (ledger G9) |
| Silent updates | none | Decided |
| Consensus activation through the client | impossible; 90% of blue blocks signalling (section 5.7) | Decided |
| Official download sources | the project's domain and the repository release page, hash shown beside the button | Decided |
| Seed shown and confirmed before mining | required | Decided |
| Hardware wallet option | required | Decided |
| The permanent line | "Nobody from Igneum will ever ask for your seed." | Decided, verbatim |