diff --git a/docs/plans/counter-asic-3-node.md b/docs/plans/counter-asic-3-node.md index ec8992d1b..d9fda0faa 100644 --- a/docs/plans/counter-asic-3-node.md +++ b/docs/plans/counter-asic-3-node.md @@ -322,6 +322,9 @@ the project lead's launch-shape proving hold (24 prove-only 4090s, 150 transacti | 7bd2940f | the one-shot gossip class fixed: `ProofPool::reannounce_unpaid`, called by the sink on every pump tick, queues every verified, uncarried, unpaid shard and segment record again once every 120 s, so a builder that connected after the admission hears it; the fleet confirmed the class on the live chain (the 09:05Z move's restarts cleared the pools, the re-submits carried, hub-1's paidShards 12,004 at 09:19Z against 11,821 frozen since 03:32:20Z); test: announced once, a re-submit queues nothing, the re-announce at the interval, nothing inside it, a carried record left out | | e0644958 | the Devnet 3 object for 0.3.25: proving_fee_ceiling_activation_daa 82,800 (epoch 23), cut from the shipper's provisional move minute 12:40Z (13:40 BST): the seed read DAA 60,074 at 09:34:15Z, the publish DAA at the minute about 71,218, plus 7,200 is 78,418, whose boundary 79,200 is difficulty v3's own height, so under the one-switch-at-a-time rule the ceiling takes 82,800 (about 15:53Z, 16:53 BST), an epoch from each neighbour; it holds for a publish up to DAA 75,600 (13:53Z, 14:53 BST); the multiple 4; Cargo.lock for keygen's crates; the identity test holds the height and the spacing. Digest 1b37cb9d on igneum-devnet-3 (from cc902690); every gate green at 09:53:01Z (build 09:48Z, igneumd 3dae9eb1…, /srv/artefacts/0325-e0644958/node-lane; pow 19, exec 49, miner 29, core 177, p2p-flows 38, consensus 134; the Devnet 3 canary: byte 6, override refused, the 0.3.24 pin 5b673577 refused on the digest both ways; the testnet canary b2e856ed unchanged). Two false starts recorded: ca0162c5 (79,200, the collision) and 09f3cba9/39f127a1 (a doubled field; a test listing Devnet 3 among the nevers) | | 42ce0f07 (the 0.3.25 pin candidate, 11:48:10Z) | four node classes read on Devnet 3 the same morning, each with its known-failed test: the ring self-check every 30 s over the last 2,000 records and in full on a generation change (node1-dn3 at 09:42:10Z appended 0xb708 over the orphan 0x6aa6 at one height and numbered every block after one high; the 0.3.22 rules scanned once per generation); the snapshot digest stamp (the observer resumed a 0.3.23 file under the 0.3.24 object; a snapshot under another digest or none is refused and the node re-executes from genesis, about 8 minutes at 27,000 chain blocks by the fresh node's rate, RSS peak 12.6 GB on IBD plus walk); the vetoed-node status (vetoes counted with the last veto's line, "stateFresh" false while any stands, on the status RPC and igneum_getNodeInfo); the proof map's window (build-1's seed was killed by the OOM killer at 44.6 GB: every relayed proof stayed in memory since the 0.3.17 late-join rule; a proof now leaves with its record at the 600-block window's end, carried proofs served from the archive). Nothing consensus: digest 1b37cb9d unchanged, the 0.3.24 pin refused both ways on the canary; gates: build (igneumd 8e17a60b…), pow 19, consensus 134, core 177, miner 29, p2p-flows 38, exec 54 at gate priority. Lesson: a release gate is dispatched at gate priority or it waits behind research suites (40 minutes lost in build-2's queue) | +| 5f316c21 | eth_chainId and net_version answer the id a transaction sent now must carry (`ExecState::signing_chain_id` = the pool's admission rule at the next block's DAA): at the class v5 floor the tip stood at DAA 68,399 while the pool admitted at 68,400 and refused 8,969 sends with "expected 4464, got 4463" against an eth_chainId of 4463; the status carries both ids; the known-failed test on the stall's shape | + +The crossing at 68,400 (11:48Z to 12:xxZ, 8 October 2026): the chain stalled at DAA 68,403 with no epoch-19 block because every fleet mining box ran the hive package's igneum-worker-cuda, which runs pack generators 2, 3 and 4 and refuses class v5's generator 5 ("WORKER FAULT seed mismatch", 0 MH/s from the first epoch-19 template); the kit's class v5 worker had been benched on 24 cards that morning and never placed on any miner's --worker path. The nodes read 0 PoW rejections and handed the right template (the 0.3.24 miner's CPU id-read on build-1 named epoch 19 class v5 program id 3d375a55029e7e60, equal to the kit lane's). A second requirement read the same minute: a miner not told its node's EVM port (--exec-rpc) cannot fetch the epoch's execution state and never prepares class v5. Lessons: a worker that cannot run the object's next class refuses at the pack prepare, loudly, hours before the boundary (the plug, tune, play rule); no hive tar ships without the class the object names; every miner loop carries --exec-rpc. The drift reading (09:2xZ): the fleet's standing.drift reads are on the SHARED devnet (hub-1's node on 26790 at chain block ~190,900; Devnet 3 stands at 25,854; both answer chain id 4463 below the v5 floor, so only the port tells them apart; hub-1's Devnet 3 node is on 36790), p1-5090 is a shared-devnet prover, and the three numberings at one hash (build-1's node1 N, hub-1 N-2, p1-5090 N-7) are the snapshot-inherited class (node1 itself resumed from exec-snapshot.prev.bin at 16:57Z on 7 October; service.rs names "a drift inherited from the snapshot's source"); which walk is right came from the fleet's fresh-walk node (an empty datadir synced to 191,441 chain blocks at 10:03:45Z, 8 October): hub-1 and five boxes number the fresh chain exactly; seven carry numbering inherited from an exec snapshot taken on a chain that later re-walked (+2: p1-4090, p1-a5000, pool-1, build-1's node1; +3: p2-3090-2; +4: p2-3090-4; +5: p1-5090, p2-3090-3), and a restart on the kept datadir does not re-walk; a prover on drifted numbering signs statements the hub vetoes, so the drift refusal is what stops the waste. The live step (the node lane's word, 10:1xZ): p1-5090 first with both snapshot files moved aside so the executor re-walks from the DAG, timed and read against the fresh node, then the six in series, hub-1 untouched. Open on the line after 0.3.25: (B) the snapshot loader re-numbers a resumed range against the DAG before serving, so a snapshot can never carry its source's numbering (a continuity scan over the whole range, not only the ring above the pin); (C) a funded devnet key or faucet on every devnet cut; the hash text fixes, the Intel rotate fix and the AMD knob from the other lanes.