Testnet re-cut: the cache rung behind its own switch from genesis; the digest 63faee44... in the go checklist and the README, the lineage extended

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-07 18:43:30 +00:00
parent f6c5d4dc53
commit 460490b07e
2 changed files with 11 additions and 11 deletions

View file

@ -8,7 +8,7 @@ RE-CUT 7 October 2026 (the testnet genesis lane, on the project lead's approvals
genesis is re-cut on the 18-decimal layout with `EmissionSchedule::TESTNET_1` and every switch on from genesis; section
"The genesis, re-cut" below is the object, "The seeds' cut-over" the runbook. The three seeds still hold the 5 October
chain (genesis `87617621...`, digest `b7d8c915...`) at height 0 and move only on the project lead's go. The hash and digest are
FINAL as of 15:0x UK: mission item 8 (the genesis forward-compatibility fields, lane `genesis-forward`, daa61847 to f95178a1) is in the object.
FINAL as of 18:4x UK: mission item 8 (the genesis forward-compatibility fields, lane `genesis-forward`, daa61847 to f95178a1 and ff06c05c) is in the object.
## What runs now
@ -35,7 +35,7 @@ igneumd/2.1.0
`health.sh` shows `synced=False` on all three: that is the no-blocks state (a node is synced once it has blocks past
genesis), not a fault. The check: `cd infra/seed-nodes && NET=testnet ./health.sh`.
## The genesis, re-cut (7 October 2026; FINAL at 15:0x UK with mission item 8 in)
## The genesis, re-cut (7 October 2026; FINAL at 18:4x UK with mission item 8 in, the cache rung behind its own switch)
| Field | Value |
|---|---|
@ -46,19 +46,19 @@ genesis), not a fault. The check: `cd infra/seed-nodes && NET=testnet ./health.s
| Bits | `0x1d100000` (unchanged) |
| Hash | `01294fd322704dc28fbef0e7a5ef86d6ee260ac5efaf88891cdba661b5fd58ac` |
| Merkle root | `bcd0e8fb1099aeb3cc1370b50e6dec9f615e204374b2097f25b2438e7d22f49f` |
| Consensus digest | `4fbb2152abb4a1f4782540a6ec4c43a7a833831d03b9106e4a4fee49da7e9bdd` (15:0x UK, with the genesis forward-compatibility fields; `80af8aa1...` before them with `subsidy_per_block_activation_daa` 0, `9390d235...` before that field) |
| Consensus digest | `63faee44f50eccd3d68c970efbc39edee2977a4f0fbf4baa833aa5ef5de3577a` (18:4x UK, with the cache rung behind its own switch, the genesis-forward lane's ff06c05c after the Devnet 3 digest finding; `4fbb2152...` at 15:0x UK with the genesis forward-compatibility fields under the ladder's arm, `80af8aa1...` before them with `subsidy_per_block_activation_daa` 0, `9390d235...` before that field) |
| Base unit | 18 decimals (`base_unit_decimals` 18): one IGN is 10^18 base units, the EVM's wei; the bridge is the identity |
| Emission | `EmissionSchedule::TESTNET_1` at the unit: 100 IGN a block at 1 bps, a monthly glide with a two-year half-life, a 90-day ramp from 10 percent, a 1 percent of supply a year tail from the month the glide first pays under it; no hard cap |
| Switches on from genesis | `difficulty_v2_activation_daa` 0, `difficulty_v3_activation_daa` 0, `proving_v0_activation_daa` 0, `finality_v3_activation_daa` 0, `finality_daa_rule_activation_daa` 0, `finality_leave_activation_daa` 0 (`finality.leave_delay` 3,600), `signing_bonus_activation_daa` 0 with `signing_bonus_bps` 1,000 (no burn; vote-or-burn is out of the tree, 420f9305), `program_class_v3_activation_daa` 0, `program_class_v4_activation_daa` 0 with signal window 0 (v4 unconditional), `latency_ladder_activation_daa` 0 at rung 0 with `latency_ladder_window_daa` 86,400 and the six rungs 27 (admissible), 35 (admissible), 53 (admissible), 88 (inadmissible: quiet-core re-measure 08:46 UK, 10.85 ms cold with the sibling loaded, over the 10 ms gate), 173 and 267 (inadmissible), `fees_v1_activation_daa` 0 (`FeeParams::CALIBRATED_V1`), `proving_consensus_verify_daa` 0 under shard program id `0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a` and aggregator id `0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896` (`proving/igneum-prove/elf/manifest.json`, pinned 2026-10-05T16:20:38Z), `subsidy_per_block_activation_daa` 0 (each merged block credited the subsidy of its own DAA on the EVM side, as the UTXO coinbase pays it), and mission item 8 (the project lead's order, 10:1x UK; `docs/design/genesis-forward.md`): `sig_scheme` 0 (BLS12-381) with `sig_scheme_activation_daa` 0 (every vote item and key reveal carries the scheme byte on the wire; any other scheme is refused by every node until a program class the 95 percent signal moves to names it), `finality_succession_activation_daa` 0 (the W5 item: a vote key hands its window weight and its forfeit term to a successor once), `latency_ladder_cache_rung` {mib 512, admissible false} beside the six N rungs (inadmissible until measured; in the digest with the ladder active) |
| Switches on from genesis | `difficulty_v2_activation_daa` 0, `difficulty_v3_activation_daa` 0, `proving_v0_activation_daa` 0, `finality_v3_activation_daa` 0, `finality_daa_rule_activation_daa` 0, `finality_leave_activation_daa` 0 (`finality.leave_delay` 3,600), `signing_bonus_activation_daa` 0 with `signing_bonus_bps` 1,000 (no burn; vote-or-burn is out of the tree, 420f9305), `program_class_v3_activation_daa` 0, `program_class_v4_activation_daa` 0 with signal window 0 (v4 unconditional), `latency_ladder_activation_daa` 0 at rung 0 with `latency_ladder_window_daa` 86,400 and the six rungs 27 (admissible), 35 (admissible), 53 (admissible), 88 (inadmissible: quiet-core re-measure 08:46 UK, 10.85 ms cold with the sibling loaded, over the 10 ms gate), 173 and 267 (inadmissible), `fees_v1_activation_daa` 0 (`FeeParams::CALIBRATED_V1`), `proving_consensus_verify_daa` 0 under shard program id `0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a` and aggregator id `0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896` (`proving/igneum-prove/elf/manifest.json`, pinned 2026-10-05T16:20:38Z), `subsidy_per_block_activation_daa` 0 (each merged block credited the subsidy of its own DAA on the EVM side, as the UTXO coinbase pays it), and mission item 8 (the project lead's order, 10:1x UK; `docs/design/genesis-forward.md`): `sig_scheme` 0 (BLS12-381) with `sig_scheme_activation_daa` 0 (every vote item and key reveal carries the scheme byte on the wire; any other scheme is refused by every node until a program class the 95 percent signal moves to names it), `finality_succession_activation_daa` 0 (the W5 item: a vote key hands its window weight and its forfeit term to a successor once), `latency_ladder_cache_rung` {mib 512, admissible false} beside the six N rungs with `latency_ladder_cache_rung_activation_daa` 0 (inadmissible until measured; its own digest arm after the ladder's, ff06c05c) |
| Left at never, by design | `fork_gate_activation_daa` (window 600), `proving_v1_activation_daa` and `proving_v1_fresh_rule_daa`, `exec_restart_*` |
| Finality object | `FinalityParams::MAINNET`: interval 30, depth 60, window 2,592,000 DAA, dust 100, presence 240, 8 aggregators, ban 2,592,000, min DAA 2,592,000, fold 6, leave delay 3,600 |
| Fees | `CALIBRATED_V1` from DAA 0 |
| DNS seeders in `TESTNET_PARAMS` | `seed1.testnet.igneum.network`, `seed2.testnet.igneum.network`, `seed3.testnet.igneum.network` |
| `--netsuffix` | defaults to 1 under `--testnet` |
| Override file | refused on the testnet (as on mainnet): the object above is compiled into `TESTNET_PARAMS`; `infra/seed-nodes/testnet-object.json` is the same object as override-file JSON (`print_testnet_object`), for reading and diffing against the daemon's start-up lines, never loaded |
| Where it lives | node fork branch `testnet-genesis-2-node` on the box mirror (`release-0.3.18-node` e69e8a39, the decimals branch df2fbd03 merged, the vote-or-burn removal 420f9305, the exec-side fixes c7ea1e21 and d840537b, the carried-proof gating dc141409, the proof archive aea0ca5c, the proof-hold fix 70e4601e, the genesis-forward commits daa61847 to f95178a1, the re-cut); repository branch `testnet-genesis-2` |
| Where it lives | node fork branch `testnet-genesis-2-node` on the box mirror (`release-0.3.18-node` e69e8a39, the decimals branch df2fbd03 merged, the vote-or-burn removal 420f9305, the exec-side fixes c7ea1e21 and d840537b, the carried-proof gating dc141409, the proof archive aea0ca5c, the proof-hold fix 70e4601e, the genesis-forward commits daa61847 to f95178a1 and ff06c05c, the re-cut); repository branch `testnet-genesis-2` |
Void: the 5 October genesis `87617621...` (8-byte subsidy layout; the chain the seeds hold until the cut-over), its digest `b7d8c915...`, the proposals `52a3e6a9...` and `494fc9a3...`, and the interim digests `9390d235...` and `80af8aa1...`. Any node built before the re-cut never completes a handshake with a re-cut node (different genesis, different digest; seen 7 October 2026, 08:05 UK: a box node on the re-cut tree dialled the three live seeds and each side refused the other on the digest).
Void: the 5 October genesis `87617621...` (8-byte subsidy layout; the chain the seeds hold until the cut-over), its digest `b7d8c915...`, the proposals `52a3e6a9...` and `494fc9a3...`, and the interim digests `9390d235...`, `80af8aa1...` and `4fbb2152...`. Any node built before the re-cut never completes a handshake with a re-cut node (different genesis, different digest; seen 7 October 2026, 08:05 UK: a box node on the re-cut tree dialled the three live seeds and each side refused the other on the digest).
What a node prints at start on this object (igneum-build-1, 7 October 2026, 08:05 UK, the two-node gate's node A):
@ -117,7 +117,7 @@ Mac: 27 passed (the crate is not in the PC build inputs). The packager's self-te
| 9e | The proving pin: `TESTNET_PARAMS` pins the shard and aggregator ids of `proving/igneum-prove/elf/manifest.json` as master holds it (shard `0x2b1a81cb...`, pinned 2026-10-05T16:20:38Z). The fin-proof lane's worktree carries a re-pin (shard `0x39db9d96...`, pinned 2026-10-07T08:03:43Z, not on master). If that re-pin merges before the go, the two ids and the digest move once more (one `print_testnet_object` run, this lane's) | whoever merges the re-pin tells this lane | OPEN |
| 9i | The suites on the final tree (fork bfcaf6a2, 15:1x UK, bounded on build-2): consensus-core 144, consensus 123 (plus the one pre-existing red of 9f), exec 31, mining 52, p2p-flows 37, pow 16, rpc-core 134, txscript 158, kaspad 2; the five gate tests (the identity test, the genesis hashes, the print, the genesis-forward digest test, the silent-split equality) 5 passed at the gate class on build-1, digest `4fbb2152...`. Earlier in the day on the interim trees: grpc-core 14, p2p 23, miner 19, utxoindex 9, index-core 9, database 22, pskt 5 | this lane | GREEN |
| 9f | A pre-existing red, not the object's: `processes::pruning_proof::igneum_m20_tests::witnesses_are_checked_in_epoch_order_under_their_own_seeds` fails under `--features igneum-pow` on the untouched `release-0.3.18-node` e69e8a39 (08:52 UK, box load under 10) and on the decimals base eec34ac3 (that lane's record); no lane's suite compiles the feature-gated test. Owner: the m20 tests' lane | the consensus engineer | OPEN, recorded |
| 9c | Mission item 8: the genesis forward-compatibility fields (the sig_scheme byte, the W5 key-succession item, the cache rung on the ladder), lane `genesis-forward` (daa61847 to f95178a1 on the fork, 9e256a4b and after on the repo; its gates: consensus-core 124, consensus 114 twice on build-2, the fast-time harness's known-failed FAIL and pass PASS on build-1) | lane `genesis-forward` (done), this lane re-cut | DONE 15:0x UK: the three in TESTNET_PARAMS at 0 (the cache rung 512 inadmissible), the digest re-pinned at `4fbb2152...`, the genesis hash unchanged |
| 9c | Mission item 8: the genesis forward-compatibility fields (the sig_scheme byte, the W5 key-succession item, the cache rung on the ladder), lane `genesis-forward` (daa61847 to f95178a1 on the fork, 9e256a4b and after on the repo; its gates: consensus-core 124, consensus 114 twice on build-2, the fast-time harness's known-failed FAIL and pass PASS on build-1) | lane `genesis-forward` (done), this lane re-cut | DONE 15:0x UK, the cache rung's own switch added 18:4x UK (ff06c05c, after the Devnet 3 canary found the rung's fields under the ladder's digest arm moving a live devnet's digest): the four in TESTNET_PARAMS at 0 (the cache rung 512 inadmissible), the digest re-pinned at `63faee44...`, the genesis hash unchanged |
| 9d | Windows: `igneum-prove-host` beside every Windows node (verification from genesis); PC 1's node refuses to start without it | the release engineer (the 0.4.0 package) | NOT DONE: to check in the 0.4.0 Windows installer |
| 9j | The two-node 18-decimal gate on the FINAL binaries (fork e6dd3afd, igneumd 58f96049..., igneum-miner 5625caee...; `tools/fleet/base-unit-gate.sh` 72b02b48, the GPU form on a RunPod RTX A5000 rented and run by the fleet lane): PASS at 15:19 UK, 7 October 2026: 322 chain blocks in 600 s, both nodes on one sink and one exec tip (0x142), the 30 inspected payloads all the 18-decimal schedule, 491 segment rewards against the schedule at each blue block's own DAA with 0 wrong, eth_getBalance 3,929.11134259 IGN (3,929,111,342,592,592,592,602 wei) equal on both nodes and to the sum of the rewards; both node heads print `Base unit: 10^18`, the digest `4fbb2152...` and `igneumd/2.1.0-e6dd3afd`, node B's exec line the genesis `01294fd3...`. The known-failed form (the 8-decimal schedule, 420 s) FAILED as it must at 15:27 UK: payloads wrong 30 of 30, rewards wrong 305 of 305. The logs: ~/igneum-fleet/tn-gate/out/ on the Mac | the fleet lane ran it, this lane reads it | PASS (the cut's closing gate) |
| 9h | The two-node 18-decimal gate on the re-cut binaries (`tools/fleet/base-unit-gate.sh` 72b02b48, the GPU form: RunPod RTX 3090, driver 580.65.06, the hive CUDA worker, rented and run by the fleet lane): PASS at 10:08 UK, 7 October 2026, on igneumd 8a6f1f56... and igneum-miner 726cf290... (fork commit f1717419): 577 blocks in 600 s, 421 chain blocks, both nodes on one sink and one exec tip (0x1a5), the 30 inspected coinbase payloads all the 18-decimal schedule (day-0 block 10 IGN = 10^19 base units), 80/20 exact on 18 of 18 single-payee coinbases, 577 segment rewards checked against the schedule at each blue block's own DAA with 0 wrong, eth_getBalance 4,617.53654629 IGN (4,617,536,546,296,296,296,298 wei) equal on both nodes and to the sum of the rewards; both node heads carry `Base unit: 10^18`, the digest `80af8aa1...`, the ladder active at rung 0, fees v1 from DAA 0 and proof verification from DAA 0 under the pinned ids. The first run of the same form (09:4x UK) read 165 of 561 rewards one ramp step low: the gate's check 5 still priced every reward at the chain block's DAA, fixed in 72b02b48 (each blue block its own DAA, the per-block rule). On the testnet object itself no voter exists inside a run (the 30-day window), so this line shows the layout, the switches and the identity without the bonus; the devnet-suffix line (9g) is the proof of the identity under the bonus | the fleet lane ran it, this lane reads it | PASS; the known-failed form (GATE_EXPECT_DECIMALS=8, the 8-decimal schedule against the same chain, 420 s) FAILED as it must at 10:15 UK: payload subsidies wrong 30 of 30, every segment reward wrong; the pod destroyed on this lane's done line |
@ -158,7 +158,7 @@ the box, the unit stopped, `/var/lib/igneum/igneum-testnet-1` moved aside as `ig
`[igneum-exec] genesis ... executed` line against `--genesis`, the commit string count in the installed binary, the digest line against
`--digest`, `eth_syncing` and `net_peerCount` over the loopback RPC, the first journal line, and "base unit 10^18 line seen" (the 5 October binary never prints it, the re-cut always does). No `--override`: the testnet takes none. The
dry run of 15:1x UK read all three seeds on 1c19441d at height 0 (`active a9ea25f8ada2`). The digest passed as `--digest` is the one the
final object prints (`4fbb2152...`), never a value from memory.
final object prints (`63faee44...`), never a value from memory.
The route the shipper staged (0.3.20 cut, main's ruling (b), 14:4x UK, `docs/plans/release-0.3.20.md` 5e74fa2f): the three seeds stay
on 1c19441d (digest `b7d8c915...`) through the 0.3.20 sweep and the public RPC filter's BLOCKED_UNTIL_FIXED_NODE set stays; at the go the
@ -171,7 +171,7 @@ whole move being five additions (`finality_leave_activation_daa` 0 with `finalit
genesis, base params, finality table, fee table and pow schedule unchanged; this re-cut `80af8aa1...` on top of those: `base_unit_decimals`
18 (and the genesis itself, re-laid), `difficulty_v3_activation_daa` 0, `finality_daa_rule_activation_daa` 0, the signing bonus 0 at 1,000 bps,
`latency_ladder_activation_daa` 0 with the window and the six rungs, `proving_consensus_verify_daa` 0 with the two program ids,
`subsidy_per_block_activation_daa` 0; then `4fbb2152...` with the genesis-forward fields (`sig_scheme_activation_daa` 0 with `sig_scheme` 0, `finality_succession_activation_daa` 0, the cache rung in the ladder arm), the final object. No override pins any old value, so every testnet node
`subsidy_per_block_activation_daa` 0; then `4fbb2152...` with the genesis-forward fields (`sig_scheme_activation_daa` 0 with `sig_scheme` 0, `finality_succession_activation_daa` 0, the cache rung in the ladder arm); then `63faee44...` with the cache rung behind its own switch (`latency_ladder_cache_rung_activation_daa` 0, a fourth arm), the final object. No override pins any old value, so every testnet node
swaps together or not at all; the digest is re-read on the re-cut's own binary at the go.
What the project lead's go needs from him, in order: (a) nothing on item 8 any more (it is in); (b) "cut the seeds over" (this runbook, about 20 minutes for the three); (c) the 0.4.0 cut from the merged branches (step 3 of the go table); (d) the first miner. Until (b) the seeds keep the 5 October chain and refuse every re-cut node, which is harmless: nothing mines on either.

View file

@ -49,7 +49,7 @@ read methods plus `eth_sendRawTransaction`; `infra/seed-nodes/rpc/`).
| Coinbase payload subsidy field | 16 little-endian bytes, one IGN = 10^18 base units | the 18-decimal layout (O-2.6, `docs/design/base-unit.md` section 3); block 1 merges the genesis and reads this field at the network's unit |
| Hash | `01294fd322704dc28fbef0e7a5ef86d6ee260ac5efaf88891cdba661b5fd58ac` | RE-CUT 7 October 2026, computed on igneum-build-1 by `print_genesis_hashes` (two runs: the merkle root first, then the header hash over it), pinned by `test_genesis_hashes` and `igneum_testnet_identity`. The 5 October hash `87617621...` (8-byte subsidy layout, the chain the seeds hold at height 0 until the cut-over) and the proposals `52a3e6a9...` and `494fc9a3...` are void |
| Merkle root | `bcd0e8fb1099aeb3cc1370b50e6dec9f615e204374b2097f25b2438e7d22f49f` | same (5 October: `44acfc40...`) |
| Consensus digest | `4fbb2152abb4a1f4782540a6ec4c43a7a833831d03b9106e4a4fee49da7e9bdd` | exchanged in the p2p handshake; a peer with another digest is refused. Pinned by `igneum_testnet_identity`; the whole object as override-file JSON is `infra/seed-nodes/testnet-object.json` (`print_testnet_object`). The 5 October digest `b7d8c915...` and the re-cut's interim digests `9390d235...` and `80af8aa1...` are void. The devnet's `c562d70e...` is unchanged |
| Consensus digest | `63faee44f50eccd3d68c970efbc39edee2977a4f0fbf4baa833aa5ef5de3577a` | exchanged in the p2p handshake; a peer with another digest is refused. Pinned by `igneum_testnet_identity`; the whole object as override-file JSON is `infra/seed-nodes/testnet-object.json` (`print_testnet_object`). The 5 October digest `b7d8c915...` and the re-cut's interim digests `9390d235...`, `80af8aa1...` and `4fbb2152...` are void. The devnet's `c562d70e...` is unchanged |
## 3. Consensus parameters
@ -67,7 +67,7 @@ read methods plus `eth_sendRawTransaction`; `infra/seed-nodes/rpc/`).
| The latency ladder | active from genesis at rung 0 (`latency_ladder_activation_daa` 0, window 86,400 DAA, seven windows at 90 percent to step): rungs 27, 35, 53 passes admissible; 88 inadmissible (quiet-core re-measure 7 October 2026, 08:46 UK: 10.85 ms cold with the SMT sibling loaded, over the 10 ms gate); 173 and 267 inadmissible | never | the project lead, 7 October 2026, row 3 |
| Base unit | 18 decimals (`base_unit_decimals` 18): one IGN is 10^18 base units, the EVM's wei, the bridge is the identity | 8 (sompi) | the project lead, 6 October 2026, question 5; `docs/design/base-unit.md` |
| Per-block subsidy on the EVM side | from genesis (`subsidy_per_block_activation_daa` 0): each merged block credited the subsidy of its own DAA, as the UTXO coinbase pays it | at an upgrade height with 0.3.19 | the project lead, 7 October 2026, 09:5x UK |
| Genesis forward-compatibility (mission item 8) | from genesis: `sig_scheme` 0 (BLS12-381) with `sig_scheme_activation_daa` 0 (every vote item and key reveal carries the scheme byte; any other scheme refused until a program class the 95 percent signal moves to names it), `finality_succession_activation_daa` 0 (W5: a vote key hands its window weight and forfeit term to a successor once), the ladder's cache rung 512 MiB inadmissible until measured | never | the project lead, 7 October 2026, 10:1x UK; `docs/design/genesis-forward.md` |
| Genesis forward-compatibility (mission item 8) | from genesis: `sig_scheme` 0 (BLS12-381) with `sig_scheme_activation_daa` 0 (every vote item and key reveal carries the scheme byte; any other scheme refused until a program class the 95 percent signal moves to names it), `finality_succession_activation_daa` 0 (W5: a vote key hands its window weight and forfeit term to a successor once), the ladder's cache rung 512 MiB inadmissible until measured, behind its own switch (`latency_ladder_cache_rung_activation_daa` 0) | never | the project lead, 7 October 2026, 10:1x UK; `docs/design/genesis-forward.md` |
| Proving v0 payouts | from genesis | from the override file | fresh chain |
| PoW schedule | epoch 3,600 DAA, lead 600, day 86,400,000 ms (the defaults) | same | |
| Coinbase payload limit | 16,384 (the finality section) | same | |