Igneum: the GPU-mined zkEVM L1. Node, miner, app, spec and site.
From 18:23Z both Windows workers (CUDA on PC 1 and PC 2, OpenCL on PC 1 after the 18:34Z node restart) refused every pack for epoch 34 with "the epoch seed bytes do not give the pack's IGNEUM_SEEDW_INIT", and the miner and the app restarted them every 5 to 60 s until 18:44Z and beyond. The packs were correct. The generator retries a rejected candidate with seed || k_le32 (attempt_words); epoch 34's attempt 0 was rejected (246 of 16384 final register values saturated, limit 163) and attempt 1 accepted, so the pack carried attempt 1's words while pf_load (proto-cuda/nvrtc/packfile.h) derived the expected words from the bare seed. Both workers also matched jobs to pairs by those bare-seed words, so even a loaded pack of a retried program would have answered "epoch seed mismatch" on every job. The rule, in one place per language: - packfile.h: pf_program_words(bytes, attempt); pf_load reads IGNEUM_PROGRAM_ATTEMPT and checks the attempt's words; the refusal says "program pack and its seeds disagree: IGNEUM_SEEDW_INIT is not attempt N of the epoch seed ..." in plain words. - worker.cpp and proto-opencl/host.c: a job belongs to a pair when the seed hex the node sent is the pair's (pairIs); the compiled-in placeholder pack keeps the word comparison. - igneum-pow/src/packcheck.rs: verify_pack_texts / verify_pack_dir, the same rule in Rust; the miner checks every pack it writes with it before a worker sees it (vendor/igneum-node pack-loop branch). Tests pin the attempt vectors of epoch 34 on both sides (one vector, two implementations), that epoch 34 is attempt 1 and epoch 33 attempt 0, a known-good pack of a later attempt, a known-mismatched (out of date) pack, and self-contradicting packs. - proto-cuda/nvrtc/emu/packfile-test.c (+ .sh, in CI): pf_load on a known-good attempt-1 pack, the checked-in attempt-0 pack, and the known-mismatched bare-words pack. The app (app/igneum-app): - watchdog.rs: PACK_OUT_OF_DATE_CODE 44, PackRebuilds (at most 3 pack exports per epoch, then the card shows the reason), pack_refusal (the worker's "error 0 pack" line and the miner's "PACK OUT OF DATE" line), pack_epoch_of; tests on the incident lines, known-good and known-mismatched. - engine.rs: exit 44 exports the pack again before the restart instead of a blind restart, the strip says "program pack out of date, rebuilding", the card and the log name the condition; at the cap the card is marked failed with the reason and tries again in 10 minutes. The relay (relay/lib/parse.mjs): PACK_MISMATCH; the card reads "pack mismatch, rebuilding (N refusals in the tail, M restarts)" in `node tools/console.mjs machines` instead of a bare restart count; tests on the PC 2 tail of 18:27Z and a healthy tail. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> |
||
|---|---|---|
| .claude/agents | ||
| .github/workflows | ||
| app | ||
| brand | ||
| docs | ||
| igneum-census | ||
| igneum-pow | ||
| infra | ||
| packaging | ||
| proto-cuda | ||
| proto-metal | ||
| proto-opencl | ||
| proto-vdf | ||
| proving | ||
| relay | ||
| sim | ||
| site | ||
| tools | ||
| .gitignore | ||
| .vercelignore | ||
| CLAUDE.md | ||