From 08db83b2eb761fc0674c537d341f0d54431e0ccf Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:38:37 +0000 Subject: [PATCH] counter-asic-2-node.md: gate G4 run 1 PASS on the mixer-x4 class (181 / 124 blocks across the boundary, 0 rejected, 0 forks, 3 switch lines, v2 and v3 program ids), the summary JSON Co-Authored-By: Claude Fable 5.1 --- .../class-v3-20261005-2133Z-mx4.json | 381 ++++++++++++++++++ docs/plans/counter-asic-2-node.md | 17 +- 2 files changed, 397 insertions(+), 1 deletion(-) create mode 100644 docs/plans/counter-asic-2-gate/class-v3-20261005-2133Z-mx4.json diff --git a/docs/plans/counter-asic-2-gate/class-v3-20261005-2133Z-mx4.json b/docs/plans/counter-asic-2-gate/class-v3-20261005-2133Z-mx4.json new file mode 100644 index 000000000..5b667847a --- /dev/null +++ b/docs/plans/counter-asic-2-gate/class-v3-20261005-2133Z-mx4.json @@ -0,0 +1,381 @@ +{ + "pass": true, + "checks": { + "switch_line_on_every_node": true, + "switch_line_names_the_rounded_epoch": true, + "template_switched_at_the_first_v3_epoch": true, + "blocks_before_the_boundary": true, + "blocks_after_the_boundary": true, + "v2_and_v3_programs_seen": true, + "program_ids_differ_across_the_switch": true, + "miners_agree_on_every_program": true, + "zero_rejected_by_miners": true, + "zero_rejected_by_nodes": true, + "sinks_agree": true, + "block_counts_agree": true + }, + "activation": 150, + "epoch_blocks": 60, + "first_v3_epoch": 3, + "boundary_daa": 180, + "secs": 480, + "threads": 1, + "node": "/Users/joshm/Projects/igneum-wt-ca2-v3/vendor/igneum-node-ca2/target-ca2/release/igneumd", + "miner": "/Users/joshm/Projects/igneum-wt-ca2-v3/vendor/igneum-node-ca2/target-ca2/release/igneum-miner", + "genesis_bits": "0x1f010000", + "template_switch": { + "epoch": 3, + "daa": 180, + "at": 168 + }, + "run_ended_at_s": 298.3, + "final_daa": 300, + "blocks": { + "total": 305, + "before_boundary": 181, + "after_boundary": 124, + "chain_before": 176, + "chain_after": 123 + }, + "programs": [ + { + "epoch": 0, + "class": "v2", + "program_id": "8f8806638d59850f", + "seed": "234e082d653dc69d", + "miners": 3, + "disagree": false, + "ready_ms": [ + 219, + 235, + 232 + ] + }, + { + "epoch": 1, + "class": "v2", + "program_id": "fd9562df32a68313", + "seed": "9b36731951ad7fb3", + "miners": 3, + "disagree": false, + "ready_ms": [ + 2, + 2, + 2 + ] + }, + { + "epoch": 2, + "class": "v2", + "program_id": "1ae6d90ab299154c", + "seed": "ce88239dfe686691", + "miners": 3, + "disagree": false, + "ready_ms": [ + 2, + 2, + 2 + ] + }, + { + "epoch": 3, + "class": "v3", + "program_id": "5d0dedd9fd9e29a1", + "seed": "f177ab855facbeb4", + "miners": 3, + "disagree": false, + "ready_ms": [ + 185, + 179, + 183, + 177, + 183, + 177 + ] + }, + { + "epoch": 4, + "class": "v3", + "program_id": "e81808dcdb02ce05", + "seed": "bcbc22513d3b73a2", + "miners": 3, + "disagree": false, + "ready_ms": [ + 2, + 2, + 2 + ] + }, + { + "epoch": 5, + "class": "v3", + "program_id": "06aff9c1d33e7a13", + "seed": "8d6755bc0eb15465", + "miners": 3, + "disagree": false, + "ready_ms": [ + 2, + 2, + 2 + ] + } + ], + "accepted_per_miner": [ + 97, + 103, + 104 + ], + "rejected_by_miners": [ + 0, + 0, + 0 + ], + "rejected_by_nodes": [ + 0, + 0, + 0 + ], + "rejected_lines": [], + "sinks": [ + "082fd39ba65df2ff", + "082fd39ba65df2ff", + "082fd39ba65df2ff" + ], + "block_counts": [ + 304, + 304, + 304 + ], + "tips_per_node": [ + 1, + 1, + 1 + ], + "switch_lines": [ + "Program class v3 from the override file: active from epoch 3 (DAA score 150 rounded up to the epoch boundary at 180, epochs of 60 DAA)", + "Program class v3 from the override file: active from epoch 3 (DAA score 150 rounded up to the epoch boundary at 180, epochs of 60 DAA)", + "Program class v3 from the override file: active from epoch 3 (DAA score 150 rounded up to the epoch boundary at 180, epochs of 60 DAA)" + ], + "samples": [ + { + "t": 4.7, + "daa": 0, + "epoch": 0, + "class": 2, + "nodes": [ + "0/234e082d", + "0/234e082d", + "0/234e082d" + ] + }, + { + "t": 19.7, + "daa": 11, + "epoch": 0, + "class": 2, + "nodes": [ + "11/c036063c", + "11/c036063c", + "11/c036063c" + ] + }, + { + "t": 34.7, + "daa": 34, + "epoch": 0, + "class": 2, + "nodes": [ + "34/62ae0e8e", + "34/62ae0e8e", + "34/62ae0e8e" + ] + }, + { + "t": 49.8, + "daa": 53, + "epoch": 0, + "class": 2, + "nodes": [ + "53/c21d7e86", + "53/c21d7e86", + "53/c21d7e86" + ] + }, + { + "t": 64.8, + "daa": 70, + "epoch": 1, + "class": 2, + "nodes": [ + "70/9cb940da", + "70/9cb940da", + "70/9cb940da" + ] + }, + { + "t": 79.8, + "daa": 88, + "epoch": 1, + "class": 2, + "nodes": [ + "88/c84b8514", + "88/c84b8514", + "88/c84b8514" + ] + }, + { + "t": 94.9, + "daa": 103, + "epoch": 1, + "class": 2, + "nodes": [ + "103/1e2dfed3", + "103/1e2dfed3", + "103/1e2dfed3" + ] + }, + { + "t": 109.9, + "daa": 111, + "epoch": 1, + "class": 2, + "nodes": [ + "111/aa7ea4cd", + "111/aa7ea4cd", + "111/aa7ea4cd" + ] + }, + { + "t": 124.9, + "daa": 139, + "epoch": 2, + "class": 2, + "nodes": [ + "139/d52be92d", + "139/d52be92d", + "139/d52be92d" + ] + }, + { + "t": 139.9, + "daa": 153, + "epoch": 2, + "class": 2, + "nodes": [ + "153/02a4323f", + "153/02a4323f", + "153/02a4323f" + ] + }, + { + "t": 155, + "daa": 165, + "epoch": 2, + "class": 2, + "nodes": [ + "165/f2e38b3d", + "165/f2e38b3d", + "165/f2e38b3d" + ] + }, + { + "t": 170, + "daa": 183, + "epoch": 3, + "class": 3, + "nodes": [ + "183/98f2ca9d", + "183/98f2ca9d", + "183/98f2ca9d" + ] + }, + { + "t": 185.1, + "daa": 195, + "epoch": 3, + "class": 3, + "nodes": [ + "195/eecbf07e", + "195/eecbf07e", + "195/eecbf07e" + ] + }, + { + "t": 200.1, + "daa": 205, + "epoch": 3, + "class": 3, + "nodes": [ + "205/ad4a2646", + "205/ad4a2646", + "205/ad4a2646" + ] + }, + { + "t": 215.1, + "daa": 221, + "epoch": 3, + "class": 3, + "nodes": [ + "221/f8626ffd", + "221/f8626ffd", + "221/f8626ffd" + ] + }, + { + "t": 230.2, + "daa": 233, + "epoch": 3, + "class": 3, + "nodes": [ + "233/d94e1815", + "233/d94e1815", + "233/d94e1815" + ] + }, + { + "t": 245.2, + "daa": 251, + "epoch": 4, + "class": 3, + "nodes": [ + "251/f724fd9e", + "251/f724fd9e", + "251/f724fd9e" + ] + }, + { + "t": 260.2, + "daa": 266, + "epoch": 4, + "class": 3, + "nodes": [ + "266/b91936fd", + "266/b91936fd", + "266/b91936fd" + ] + }, + { + "t": 275.2, + "daa": 276, + "epoch": 4, + "class": 3, + "nodes": [ + "276/7c8f720d", + "276/7c8f720d", + "276/7c8f720d" + ] + }, + { + "t": 290.3, + "daa": 297, + "epoch": 4, + "class": 3, + "nodes": [ + "297/63eb2574", + "297/63eb2574", + "297/63eb2574" + ] + } + ] +} \ No newline at end of file diff --git a/docs/plans/counter-asic-2-node.md b/docs/plans/counter-asic-2-node.md index ce4fba831..0ce5abefb 100644 --- a/docs/plans/counter-asic-2-node.md +++ b/docs/plans/counter-asic-2-node.md @@ -77,7 +77,22 @@ Refusals: `pf_load` refuses a generator that is not 2 or 3 (`error 0 pack : `node infra/fast-time/class-v3.mjs [--secs 420] [--activation 150] [--epochs-after 2]` under `tools/lock/with-lock.sh run`: three nodes on `override-60x.json` merged with `genesis_bits` 0x1f010000 (2^16 hashes per block, the CPU difficulty of `sim/difficulty/testnet_v2.py`) and `program_class_v3_activation_daa` 150 (inside epoch 2, so the rounding rule is exercised: the first v3 epoch is 3 at DAA 180); one real CPU miner per node (`--engine igneum-pow`, 1 thread, real lottery-hash solutions, every node verifying the other two); the run ends two epochs after the boundary. -Result: PENDING (filled by the run; see the status file and the final report). +### Result, run 1 (5 October 2026, 21:33:04Z to 21:38:02Z, Apple M5 Max shared with other agents' builds) + +Binaries: fork ca2-v3-node 79bd8e10 and igneum-pow at ca2-v3 66eeba3 (the mixer-x4 class, `V3_CLASS` = MX4, before the era and hot-table fields), `target-ca2/release`, built on the Mac under the build lock. Summary: `docs/plans/counter-asic-2-gate/class-v3-20261005-2133Z-mx4.json`. PASS: every check true. + +| Check | Measured | +|---|---| +| Switch line on every node | 3 of 3: `Program class v3 from the override file: active from epoch 3 (DAA score 150 rounded up to the epoch boundary at 180, epochs of 60 DAA)` | +| Digest, all three nodes | `0186df7d0834d054...` (the 60x profile with the CPU bits and the switch) | +| Template class per epoch | epochs 0 to 2 class 2 (`nextProgramClass` 3 from epoch 2), epochs 3 to 5 class 3; the switch seen at DAA 180, 168.0 s wall | +| Blocks before / after the boundary (node 0's DAG) | 181 / 124 (selected chain 176 / 123), 305 in all | +| Program id per epoch, all three miners agreeing | e0 v2 `8f8806638d59850f`, e1 v2 `fd9562df32a68313`, e2 v2 `1ae6d90ab299154c`, e3 v3 `5d0dedd9fd9e29a1`, e4 v3 `e81808dcdb02ce05`, e5 v3 `06aff9c1d33e7a13`; no v2 id reappears under v3 | +| Rejected blocks | miners 0 / 0 / 0 (97, 103, 104 accepted); nodes 0 / 0 / 0 `PoW rejected` lines | +| Forks | sinks `082fd39ba65df2ff` on all three nodes, block counts 304 / 304 / 304, one tip each | +| Program and cache ready, one CPU core | a new `(day, class)` cache: v2 epoch 0 219 to 235 ms, the first v3 epoch 177 to 185 ms (two per miner: the 24-minute day rolled at DAA 190); a program swap inside a day 2 ms | + +The mixer x4 build-time number the rollout asks for is not visible here: the CPU miner derives dataset words on demand from the cache (no dataset build), so the x4 cost lands on the GPU workers' dataset build, measured by the ca2-mixer playbooks on the PCs. Run 2, on the composed class (era and hot fields), follows the era and cache merges. ## 6. Tests