diff --git a/docs/plans/testnet-go.md b/docs/plans/testnet-go.md index e723d4de1..db896f265 100644 --- a/docs/plans/testnet-go.md +++ b/docs/plans/testnet-go.md @@ -69,7 +69,7 @@ in the fee floors, object version 7 stamped, the override file refused (rc 1), t node reading its own digest beside it. During the handshake step seed 2 (5.161.232.205) dialled the canary and was refused on the digest; the gate pod of 8 October (09:49 UK) read the seeds' own answer: all three refuse on `b7d8c915...`, the 5 October object of 1c19441d, so the seeds carry the 5 October chain at height 0 until the project lead's go (no 0.3.22 binary reached them); the runbook's wipe stands. The digest lineage: `b7d8c915...` (1c19441d) to `87d103b6...` (the 0.3.22 interim re-arm) to `b2e856ed...` (5b673577, class v5 at never) to `1da30c10...` (0d05e795, class v5 at 0: THE GO DIGEST). The runbook's -values: `--genesis 01294fd3...`, `--digest 1da30c10...`, `--commit acaf08b0` (the go pair on `release-0.3.25-node`: ba294c98 plus row 9v's two fixes 6e04f7fc and acaf08b0, by the coordinator's rulings of 14:2x, 15:1x and 15:3x UK on 8 October; its gates and the block-one line pending at 15:4x UK; ba294c98 and 6e04f7fc are the known-failed bases and `--commit 0d05e795` the FALLBACK pair on the 0.3.24 line, none of them the go pair), the seed-class pair the build-server lane builds from that commit (the 0d05e795 FALLBACK pair is built and dry-run clean, 14:26 UK: `/srv/artefacts/0324-tn-0d05e795/seed/igneumd` sha256 `9b464158...`, `igneum-miner` `d5a5bc9e...`, row 9q; the re-arm is each pair's pull-path dry run on the three seeds). The record of the first dry run, on 5b673577's pair, stands below and is NOT the go pair: the seed-class pair the +values: `--genesis 01294fd3...`, `--digest 1da30c10...`, `--commit acaf08b0` (the go pair on `release-0.3.25-node`: ba294c98 plus row 9v's two fixes 6e04f7fc and acaf08b0, by the coordinator's rulings of 14:2x, 15:1x and 15:3x UK on 8 October; its gates and the block-one line pending at 15:4x UK; ba294c98 and 6e04f7fc are the known-failed bases and `--commit 0d05e795` the FALLBACK pair on the 0.3.24 line, none of them the go pair), the seed-class GO pair from acaf08b0: `/srv/artefacts/0325-acaf08b0/seed/igneumd` sha256 `cb35df68997f407c3c371617384b038dadd3213b00cb590db7f542dc77c6e5c4`, `igneum-miner` sha256 `0b7e9d73cecc5a4441fba421105d1e62efd51ebd46f57ce7f50aa18b243b231a` (row 9q; the 0d05e795 FALLBACK pair, built and dry-run clean 14:26 UK, is `/srv/artefacts/0324-tn-0d05e795/seed/igneumd` `9b464158...`, `igneum-miner` `d5a5bc9e...`); the re-arm is the go pair's pull-path dry run on the three seeds. The go pair's read-back adds two required lines beside the digest, byte 6 and 10^18: "[igneum-exec] genesis 01294fd3... executed" and "[igneum-exec] class v5: the state stream after genesis 01294fd3... (epoch 0's reference) is published", and must show no "waiting for consensus to sync" line. The go line: `infra/build-server/wave1-0320.sh seeds --igneumd /srv/artefacts/0325-acaf08b0/seed/igneumd --sha256 cb35df68997f407c3c371617384b038dadd3213b00cb590db7f542dc77c6e5c4 --miner /srv/artefacts/0325-acaf08b0/seed/igneum-miner --digest 1da30c10e164784ffbf5bf216ef3bf84a2d5da212317b1e535c9850fe14aba2f --commit acaf08b0 --wipe-genesis --genesis 01294fd322704dc28fbef0e7a5ef86d6ee260ac5efaf88891cdba661b5fd58ac`, no override; `--go` only on the project lead's word. The record of the first dry run, on 5b673577's pair, stands below and is NOT the go pair: the seed-class pair the build-server lane built from 5b673577 at 09:43 UK on build-1: `/srv/artefacts/0324-5b673577/seed/igneumd` sha256 `3a204fd9d3a4840dcef430e73cbfa986881db915d5459533d395dc0563a597a8` (glibc 2.34, the commit string twice, igneum-pow 1c420786) and `igneum-miner` sha256 `464dca078db54434b2ce4cdf8b5975a614141d20907a9d941cc88667b85144ba`, `--commit 5b673577`, no override, `--wipe-genesis`; @@ -176,7 +176,7 @@ Mac: 27 passed (the crate is not in the PC build inputs). The packager's self-te | 9g | The fast-time line of the object (`infra/fast-time/testnet-object.mjs`, a devnet-suffix network on igneum-build-1 at the 60x profile: 5 nodes, four voting keys and one `--no-vote` key, every switch of `testnet-object.json` from genesis, the fast-time finality profile with leave delay 60, the testnet schedule at the devnet's unit): PASS at 11:12 UK, 7 October 2026, run 10 on the archive binaries (igneumd 57ad7dc2..., fork 5c25c1fb): the start-up lines and one digest on every node; class v4 at rung 0 (27 passes) through ten epochs, no ladder bits, the object byte 0 on 551 blocks; 0 rejected, one sink on five nodes; the first lock at DAA 142 (172 s); the silent key's 87 blocks paid the bonus split on the UTXO side (72 percent of the subsidy at each block's own DAA, 720,118,333 sompi at DAA 142 against 800,131,481 for a voter) and the voters' 320 blocks the plain split; the bridge identity exact for all five miners over the chain (UTXO payments x 10^10 = execution credits less the tip's own: 96,832,949,992 sompi against 968,329,499,920,000,000,000 wei for voter a, and so on); a signed leave accepted at DAA 212, its key out of the voter count (5 to 4) at DAA 351, no pause longer than one second after it, finality active at the end at lock 18. The road to it: run 1 (pre-fix binaries) showed the executor crediting 80 percent to the silent key while the coinbase paid 72 (the N7 finding), run 7 the side blues credited one ramp step high when the per-block switch was left out of the profile (the N8 shape), run 9 every check green but the harness's own pause reading (one-second reason flickers at each new lock, corrected to consecutive seconds). On the testnet object itself the weight window is 30 days, so this line is the proof of the bonus and the identity before the go | this lane | PASS; the known-failed forms are on record from the same morning: run 1 on the pre-fix binaries (the silent key credited 80 percent on the EVM side against 72 on the UTXO side, every other check green) and run 7 on the fixed binaries with the per-block switch left out of the profile (every miner's credit above its payments by the side-blue steps). A binary that carries the per-block field without the bonus fix does not exist (the pre-fix binaries refuse an override naming the field), so no third form runs ON THE 7 OCTOBER RE-CUT; RE-RUN ON THE GO OBJECT 5b673577 ON 8 OCTOBER, GREEN (row 9p) | | 9n | THE LAST STEP BEFORE THE GO (the coordinator's planned step, 22:4x UK, 7 October 2026): the object above holds the class v5 floor at never because Devnet 3's v5 crossing has not happened; the ruling is class v5 at 0 on the testnet IF that crossing reads clean (at DAA 68,400, about 12:54 BST on 8 October after the floor's last re-cut; the go not before the evening of 8 October). After the crossing's read the node lane re-cuts the testnet object once more with `program_class_v5_activation_daa` 0 (a new digest, the genesis unchanged), this table's digest row and the runbook's `--digest` are updated from the new binary's print, and the build-server lane re-arms the seeds on the pull-path dry run with the new binaries and sha. That re-cut object is the one the go uses; the object above is not placed on a seed if the crossing reads clean. If the crossing does not read clean, the object above stands and the v5 floor stays at never | the node lane re-cuts, this lane the table, the build-server lane re-arms | DONE 8 October 2026: the crossing read clean at 12:57 UK; the re-cut 0d05e795 landed 13:48 UK (digest `1da30c10...`, byte 6, genesis unchanged, the node lane's six suites green by 14:04 UK, its canary clean); this table and the runbook updated 14:10 UK; the seeds' re-arm on the pull-path dry run of 0d05e795's seed-class pair is the build-server lane's next step (row 9q) | | 9o | Keyed payout addresses (the fleet lane's defect line of 8 October 2026, 09:4x UK, from Devnet 3: `tools/fleet/fleet.py` line 83 wrote a random payout address with no key for every rented box, so 578,000 IGN of Devnet 3 rewards by 22:28 UK sat on addresses nobody can spend from, and the load generator ran on the 432 IGN dev-fee key; the fleet's keyed-throwaway fix lands 8 October): before the go, every payout address in the testnet object and in anything the seeds or the first miner run has a key held by a named holder (the seeds mine nothing and name no payout; the first miner of step 10 pays the app's own keyed wallet or a named key; the dev-fee address is the app's). The faucet: the testnet genesis carries one IGN to OP_FALSE (unspendable) and no allocation, so a faucet is funded by the first keyed miner's blocks, never at genesis; a genesis allocation would be the project lead's word and a re-cut of the hash; the chain-side faucet or a funded key for load tests is logged for the 0.3.25 line (the node lane, 09:4x UK) | the fleet lane (its fix), the miner-community lead (the first miner's key), the project lead (any allocation) | OPEN; the node lane's line of 14:0x UK: no payout address goes in any object without a key behind it; `keygen` on the 0.3.25 miner prints the pair | -| 9q | The seeds' re-arm on the go object: the build-server lane builds the seed-class pair from 0d05e795 (glibc 2.34, the commit string twice, igneum-pow 1c420786) on build-1, runs the runbook's dry run on seed1, seed2 and seed3 with `--digest 1da30c10...`, `--commit 0d05e795`, `--genesis 01294fd3...`, the pair's shas asserted, the genesis read-back from `getBlockDagInfo`; `--go` only on the project lead's word | the build-server lane | FALLBACK PAIR DONE 14:26 UK, 8 October: the seed-class pair from 0d05e795 (zig glibc 2.35 ceiling, GLIBC_2.34, built on build-2 while build-1 holds quiet for Devnet 3's move; igneum-pow/src only, the freeze 1c420786's content) staged at `/srv/artefacts/0324-tn-0d05e795/seed/`: igneumd sha256 `9b4641585e2caa5da4f81ee42ef624f826f70373922005a4efc44a41d63b7f19` (56,890,448 B, the commit string twice), igneum-miner `d5a5bc9edee54c5b01b769985c42c407ee6c4d4cdd9f1b24cde7b642c7bf92dc` (12,270,136 B); the bare start prints "stamps object version 6 into its headers (block version 1538)", `Base unit: 10^18`, the digest `1da30c10...`, the follower at genesis; the dry run (`--wipe-genesis --genesis 01294fd3... --commit 0d05e795`, no override, nothing `--go`): seed1 195.201.35.33 rc 0, seed2 5.161.232.205 rc 0, seed3 5.223.52.210 rc 0, "DRY RUN, nothing touched", each box answering as its seed, active a9ea25f8ada2 (the `getBlockDagInfo` genesis read-back runs at the real pass). This pair is the FALLBACK by row 9r's ruling; the go pair's same chain (build about 13 minutes, the staging, the banner, the third dry run) runs on the 0.3.25-line commit when the node lane names it | +| 9q | The seeds' re-arm on the go object: the build-server lane builds the seed-class pair from 0d05e795 (glibc 2.34, the commit string twice, igneum-pow 1c420786) on build-1, runs the runbook's dry run on seed1, seed2 and seed3 with `--digest 1da30c10...`, `--commit 0d05e795`, `--genesis 01294fd3...`, the pair's shas asserted, the genesis read-back from `getBlockDagInfo`; `--go` only on the project lead's word | the build-server lane | FALLBACK PAIR DONE 14:26 UK, 8 October: the seed-class pair from 0d05e795 (zig glibc 2.35 ceiling, GLIBC_2.34, built on build-2 while build-1 holds quiet for Devnet 3's move; igneum-pow/src only, the freeze 1c420786's content) staged at `/srv/artefacts/0324-tn-0d05e795/seed/`: igneumd sha256 `9b4641585e2caa5da4f81ee42ef624f826f70373922005a4efc44a41d63b7f19` (56,890,448 B, the commit string twice), igneum-miner `d5a5bc9edee54c5b01b769985c42c407ee6c4d4cdd9f1b24cde7b642c7bf92dc` (12,270,136 B); the bare start prints "stamps object version 6 into its headers (block version 1538)", `Base unit: 10^18`, the digest `1da30c10...`, the follower at genesis; the dry run (`--wipe-genesis --genesis 01294fd3... --commit 0d05e795`, no override, nothing `--go`): seed1 195.201.35.33 rc 0, seed2 5.161.232.205 rc 0, seed3 5.223.52.210 rc 0, "DRY RUN, nothing touched", each box answering as its seed, active a9ea25f8ada2 (the `getBlockDagInfo` genesis read-back runs at the real pass). This pair is the FALLBACK by row 9r's ruling. THE GO PAIR, from acaf08b0 (built on build-1 15:46 UK, staged and read 15:50 UK): `/srv/artefacts/0325-acaf08b0/seed/igneumd` sha256 `cb35df68997f407c3c371617384b038dadd3213b00cb590db7f542dc77c6e5c4` (56,942,544 B, the commit string twice, zig glibc 2.35 ceiling, GLIBC_2.34), `igneum-miner` sha256 `0b7e9d73cecc5a4441fba421105d1e62efd51ebd46f57ce7f50aa18b243b231a` (12,408,968 B), IGNEUM_POW_FINGERPRINT `cbc5bd0aa10585c8...` in both (the freeze 1c420786). The bare start on build-1 on an empty data directory (`--testnet`, loopback ports), in order: "stamps object version 6 into its headers (block version 1538)", `Base unit: 10^18`, the digest `1da30c10...`, `igneumd/2.1.0-acaf08b0`, "[igneum-exec] exec sync: no snapshot to resume from ...; the follower starts at genesis", "[igneum-exec] genesis 01294fd3... executed: chain id 4462, registry at 0x...0210, state root 0x7...", "[igneum-exec] class v5: the state stream after genesis 01294fd3... (epoch 0's reference) is published"; no "waiting for consensus to sync" line in 40 s. The 6e04f7fc pair void and unstaged; ba294c98's stands only as the known-failed base. The dry run on the three seeds (the third of this runbook) waits for the node lane's gate set on acaf08b0 and the pod's block-one line | | 9r | The go seeds' node code: `release-0.3.24-node` at 0d05e795 carries none of the 0.3.25 node fixes (the ring check, the snapshot stamp, the proof-map window, the chain-id admission, rule 19's fingerprint). The node lane's line (14:0x UK): the go seeds should run the 0.3.25 pin's node code with this object, which is 0d05e795's one params change merged onto c9ad753a as one commit on `release-0.3.25-node` plus its gates (about 25 minutes), first thing after Devnet 3's move read-backs. The object does not change (TESTNET_PARAMS identical; the digest must read back `1da30c10...` from that binary or the row moves); the seeds then take that pair, and rows 9g/9h/9j re-run on it. RULED by the coordinator (14:2x UK, 8 October): the go seeds run the 0.3.25 pin's node code, after Devnet 3's move read-backs; a seed without the chain-id admission, the ring check and the proof-map window is today's fault class and does not go out; 0d05e795's own pair stays armed as the fallback only. So the go pair is the build-server lane's seed-class build of that one commit on `release-0.3.25-node`, its dry run on the three seeds (the third dry run of this runbook), and rows 9g/9h/9j on it from a pod; the runbook's `--commit` becomes that commit when it lands, `--digest` stays `1da30c10...` | the node lane cuts, this lane reads the digest back and moves the rows, the build-server lane builds and dry-runs, the fleet hand gates | THE CUT LANDED 15:0x UK, 8 October: `release-0.3.25-node` ba294c98 on both mirrors = c9ad753a + f8da7515 (the cold-restart fix, the Devnet 3 hotfix, its gates green 14:50 UK) + f41f48a7 (row 9t's miner fix: the state provider's default follows the node's network read over gRPC, 26790 devnet and simnet, 26890 testnet, 8545 mainnet; the refusal names the address and `--exec-rpc`; `mine --help` names the flag; the known-failed test `exec_rpc_default_tests::the_state_provider_default_follows_the_nodes_network`, the old devnet default on the testnet asserted wrong first; miner suite 30 on build-2 at 15:03 UK) + ba294c98 (0d05e795's params change cherry-picked with -x: class v5 at 0, CLASS_SIGNAL_V5, the digest constant 1da30c10...). Read back from the mirror by this lane: the pinned digest and genesis constants unchanged from 0d05e795, TESTNET_PARAMS class v5 at 0 with the v5 signal. Its gates dispatched 15:04 UK at gate priority (the artefact to `/srv/artefacts/0325-ba294c98/node-lane`, six suites, the Devnet 3 canary with the mixed-version step against f8da7515, the testnet canary reading 1da30c10... and byte 6), due by about 15:45 UK; the go pair is not shipped before they are green | | 9s | The gates on the go object's pair (0d05e795: igneumd `b76d8671...`, igneum-miner `0e67237f...`): the two-node 18-decimal gate (GPU form, `tools/fleet/base-unit-gate.sh` 940d91de, plus the known-failed 8-decimal form) and the fast-time line (`infra/fast-time/testnet-object.mjs`, `--testnet-params` as on 9p) on a fresh pod, the fleet hand; the node lane's six suites already green on it | the fleet hand runs, this lane records | RUN on 0d05e795's pair (pod 3, tn-gate-0324c, RunPod 7e2jbcma9apjne, RTX A5000, driver 570.211.01, USD 0.27/h, rented 14:50 UK): the two-node gate VOID on both forms (0 blocks: row 9v, the class v5 genesis bootstrap; the relay 26790 to 28190 of row 9t proven, both nodes printing byte 6 and the digest `1da30c10...`); the object's fast-time line at b5925261 (the harness's class v4 network, row 9u) PASS 16 of 16 at 15:02 UK: epochs e0 to e10 v4 rung 0, first lock index 5 at DAA 144, silent rows 88 and voting rows 367 priced right, six bridges true, leave accepted 6 to 5 voters, blocks 605 chain 494, rejected 0 on six nodes, one sink at 604 on all six. The byte 6 run (c5fe28e4) on the same pod follows; the go pair's runs wait for row 9v | | 9t | The miner's class v5 state lookup (found by the pod gate on 0d05e795's pair, 14:52 UK, 8 October): `RpcStateProvider::new` defaults to `http://:26790`, the DEVNET exec port, on every network (`igneum/miner/src/main.rs` 981-985 at 0d05e795), while the testnet node's exec RPC defaults to 26890 (`igneum/exec/src/config.rs` 86-91); the `--exec-rpc` override exists (main.rs 3226) but is absent from `mine --help`. On the pod (node A's eth_ RPC on 28190) the miner logged "class v5 needs the execution state after the epoch's seed block 01294fd3... (day 20734): connect 127.0.0.1:26790: Connection refused (os error 111) ... asking again every 2 s" and the worker never got a job; the hand ran the gate through a loopback forwarder 26790 to 28190, so the gate lines on this pair stand for the object. Impact: the seeds mine nothing, the cut-over is unchanged; a first testnet miner on a default node (step 10) cannot mine class v5 blocks at all, the plug-tune-play class. The call put to the node lane and main: the default follows the network (`default_evm_rpc_port` of the node's network), `--exec-rpc` documented, the refusal names the address and the flag, in the 0.3.25 go cut | the node lane fixes in the 0.3.25-line go cut | RULED by the coordinator (15:0x UK, 8 October): the go WAITS for the fix in the 0.3.25-line go cut: the default follows the network's exec port (26890 on the testnet), `--exec-rpc` documented in `mine --help`, a known-failed test on the default per network; a first miner that cannot mine on a default node does not ship. The cut not yet landed at 15:0x UK |