Counter ASIC 3.0 gates (hash): class v4 sub-version 3, first commit (AP-F8-3; main's word: 0.3.21 ships byte 5, sub-version 3 is 0.3.22's). The acceptance executes the latency-shadow block as the hash does: run_unit runs the block after instruction 63 of every iteration, reps times with the iteration's sel (verify.rs); until now it ran the 64 base instructions only, so every dynamic acceptance test on a class v4 program judged a program the chain never hashes, which is the whole residual class behind sub-version 2's 8 of 64 gate failures. The test acceptance_executes_the_shadow_block_as_the_verifier_does pins the acceptance's execution to verify.rs on the devnet epoch-0 program and the six test eras (equal output bit counts over the 64 units; different with the shadow stripped). PROGRAM_SUBVERSION_V4 = 3 (a new verdict is a new stream). The seven gate packs re-exported: the devnet epoch-0 seed still accepts at attempt 1, so its program and fingerprint are sub-version 2's (e370fb2080b7dbb1) under the new id a785001687d8688a (must-differ: c120d7963abdcd96, 1a4230699a6b9c60, a788661687db4bb3); the seven 256-block ladder packs re-exported. The ledger entry carries AP-F8-2's exhaustion half as FIXED-AND-PASSED at 8bdcbdd8 (0 of 10^6, max attempt 35, r = 0.67), AP-F8-3, and p23's localisation (site 7 reads r6 = (mulhi | r4) ^ r4 = r6 & ~r4; 0.84 of uniform distinct indices at 2^20, 0.55 at 2^24, reproduced in the acceptance's own execution); the second commit, a per-site distinct-index ratio, is held
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
43c5bf5b5a
commit
ddacfbd3cb
18 changed files with 91 additions and 37 deletions
|
|
@ -2452,4 +2452,8 @@ Sub-version 2 (7 October 2026, afternoon; main's ruling B2: 0.3.20 ships sub-ver
|
|||
|
||||
AP-F8-2 (7 October 2026, 13:xx UTC, the attack-pass lane on sub-version 2 at 07a809a7): chain-shaped seed igneum-f9/331672 exhausted the 32 attempts under rule (a') and the generator panicked, which on the chain is an epoch no node can draw, a liveness halt; the measured (a') plus (c') rejection rate of about two thirds per attempt puts the exhaustion probability at about (2/3)^32, 2e-6 per epoch seed (sub-version 1 exhausted 0 of 10^6). Main's ruling: the draw is total and no consensus path panics. Fixed at 8bdcbdd8 with the stream unchanged (re-export diff 0; the id a788661687db4bb3 and the fingerprints stand, so sub-version 2 keeps its number and the running censuses): the attempt cap of the class v4 shape is 256 (`MAX_ATTEMPTS_V4`; v2 and v3 keep 32), which puts the exhaustion probability under 1e-45 at a worst-case draw of about half a second on one core; after the cap the seed takes the last-resort program, deterministic and accepted as drawn, the candidate at attempt 256 with every `or`, `mul` and `mulhi` of the base program and the shadow block rewritten to `xor`, so every register stays fresh from the init words on and rule (a') holds by construction. The spec text for class v4 therefore reads: attempts 0 to 255 under rules (a), (b), (a'), (c) and (c'), then the last-resort program; the probability of reaching it is (r)^256 for a per-attempt rejection rate r, under 1e-45 at the measured r of about 2/3. Tests: `class_v4_draw_is_total_with_the_last_resort` (the last resort on real (a')-rejected candidates, every load fresh after it, no lossy op left, the chain path over 64 seeds without a panic, the cap per class). The 10^6-seed exhaustion count at the fixed commit is the attack-pass lane's measurement (its re-gate string is 8bdcbdd8); the 4,096-seed census with the attempt histogram (box 2, 13:33Z, `tools/ca3-v4-uniform --n 4096 --f8` at 8bdcbdd8): 4,099 chain-shaped programs, 0 lossy-sourced load sites of 65,584 (57,304 injecting, 8,280 bijective), 0 exhaustions, the accepted attempt geometric with ratio 0.674 (1,338 at attempt 0, 921, 620, 408, 274, 189, 127, 75, 55, 40, 16, 11, 12, 6, 5, then one each at 16 and 17; mean 1.98), so the measured per-attempt rejection rate is r = 0.674 and the exhaustion probability is 0.674^32 = 3e-6 under the old cap and 0.674^256 = 1e-44 under the class v4 cap. The crate suite at 8bdcbdd8 on box 2 (route line "box 2 for class suite, priority normal", rc 0, 80 s, 13:31Z): 62 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch = 101 passed, 0 failed, the total-draw test included. G1 for sub-version 2 on a fleet RTX 5090 (main's order; the fleet lane, p1-5090, driver 580.173.02, sm_120, the box's Linux NVRTC worker `igneum-worker-cuda 1.0 (4 October 2026)` sha256 97e036e2..., which carries no program and compiles each pack's own text; the kit zip sha256 asserted before the put; 13:43:22 to 13:44:07Z): `--bench --batches 5 --batch-log2 24 --block-warps 1` on all eight packs, self-test PASS on every pack with the cache FNV 448274a57f508cbc and every 2^24 fingerprint equal to the Mac's (the control 90f794dd556f7a3b and the seven above); the rates (120 to 142 MH/s beside the box's own miner loop) are a reference only. The Windows G1 on PC 2 (job run-ca3-v4-sub2-g1-pc2-20261007b, published 13:46:33Z under the PC 2 lock, ran 13:46:36 to 13:46:50Z, exit 0; app 0.3.19, the installed worker sha256 14b6637e..., the RTX 5090 switched off by the runner's --cards-off before the script and restored on exit, igneum-worker-cuda running 0 before and after, the prover untouched): self-test PASS on all eight packs with the cache FNV 448274a57f508cbc, every 2^24 fingerprint equal to the Mac's and the fleet's (the control 90f794dd556f7a3b and the seven above), NVRTC 197 to 317 ms per pack, the 1 GiB build 22 to 34 ms, 115 to 130 MH/s with the card alone (a reference, 5 batches).
|
||||
|
||||
AP-F8-2, the exhaustion half, FIXED-AND-PASSED at 8bdcbdd8 on the attack-pass lane's 10^6 chain-shaped seeds through the chain path (14:03:53Z): 0 exhausted, 0 panics, 4 seeds past attempt 31 (three at 32, one at 35; 4e-6, inside (2/3)^32), max attempt 35, no seed at the last resort; r = 0.67, mean 2.0 attempts per seed.
|
||||
|
||||
Sub-version 2's hot-set half did not read green: F8's 64-seed gate at 39 of 64 had 8 over 1.2x of the window model (p23 4.82x, p19 3.32x, p15 2.57x, p18 2.50x, p34 1.25x; p4, p8, p10 unattributed at 1.22x to 1.50x). AP-F8-3 (7 October 2026, 14:0x UTC, the hash lane): the cause of the whole residual is that `accept.rs` never executed the latency-shadow block. Its interpreter (`run_unit`) was written for class v2 and v3 and ran the 64 base instructions per iteration and nothing after instruction 63, while the hash (`verify.rs`, the kernels) runs the shadow 27 times at the end of every iteration; so every dynamic acceptance test (c), (c') judged a class v4 program the chain never hashes. Main's word (14:1x UTC): 0.3.21 ships object byte 5 (sub-version 1); sub-version 3 is 0.3.22's and starts with this fix. Sub-version 3, first commit: `run_unit` executes the shadow block after instruction 63 of every iteration, `reps` times with the iteration's sel, as the hash does; the test `acceptance_executes_the_shadow_block_as_the_verifier_does` pins the acceptance's execution to `verify.rs` on the devnet epoch-0 program and the six test eras (the output bit counts over the 64 units equal, and different with the shadow stripped), so the two paths cannot diverge silently again; `PROGRAM_SUBVERSION_V4` = 3 (a new acceptance verdict is a new stream); the devnet epoch-0 seed still accepts at attempt 1, so its program and fingerprint are sub-version 2's (e370fb2080b7dbb1) under the new id a785001687d8688a (the must-differ set: c120d7963abdcd96, 1a4230699a6b9c60, a788661687db4bb3); the packs zip sha256 4f2445c50c58d76a5544023492d8b858d0b07c5e372d31f9c90c4ce51f829154. The class behind p23, localised from its program and reproduced in the acceptance's own execution: site 7 (instruction 38) reads r6 after 25 `mulhi r6`, 31 `or r6 |= r4`, 35 `xor r6 ^= r4`, which is `r6 & ~r4`, an AND mask the lineage rule counted as fresh because the xor's operand is the or's; over 2^20 evaluations on the closed-form words site 7 reads 874,953 distinct word indices against about 1,046,500 for every other site (0.84 of uniform; 2.2 s on one core), over 2^24 8,979,203 against about 16,260,000 (0.55; 35 s). The second sub-version 3 commit (held, prepared in the worktree) is a per-site distinct-index ratio against the uniform expectation of the site's window, its threshold set from the clean seeds' spread and its sample size from the cost line above; the dynamic bounds as first specified (a most-repeated-value bound at 16,384 and a distinct floor at 2^19.5 over 2^20) do not reach p23 and are not committed.
|
||||
|
||||
Owed (recorded, not run, by Josh's word): G2 (the CPU verifier on 1,024 hashes per card) on the amended stream; G3 (the Metal fuzz, edge, stats and determinism runs) on the amended stream; the hash-rate ladder re-measure on the M5 Max and the RTX 5090 (the amendment changes the base program's source draws, not the op mix or the load count, so the latency-bound rows of `docs/analysis/latency-shadow-2026-10-06.md` are expected to hold within their spread; unmeasured); AMD (the RX 9070 XT, PC 1); the 2019-class verifier core (O-1.14); F8's phase E (the 64-seed dynamic census) on the amended stream, which is the attack-pass lane's and the test of the per-op table. The row reads FIXED-AND-PASSED only after phase E passes against the amended class.
|
||||
|
|
|
|||
|
|
@ -258,9 +258,15 @@ fn run_unit(p: &Program, unit: usize, base: u32, acc: &mut Acc, lane_addrs: &mut
|
|||
let mut scratch = if p.has_scratch() { Some(ScratchModel::new(p.class.scratch_slots_per_lane())) } else { None };
|
||||
let slot_mask = p.class.scratch_slot_mask();
|
||||
let era = p.class.era;
|
||||
// Class v4 sub-version 3 (AP-F8-3, 7 October 2026): the acceptance interpreter runs the latency-shadow block
|
||||
// after instruction 63 of every iteration, `reps` times with the iteration's `sel`, exactly as the hash does
|
||||
// (verify.rs). Until this commit it ran the 64 base instructions only, so every dynamic test (c) judged a class v4
|
||||
// program the chain never hashes. The shadow block holds no load, so its instructions take the same arms.
|
||||
let shadow_reps = p.shadow_reps();
|
||||
for it in 0..ITERATIONS {
|
||||
let sel = r[0];
|
||||
for (k, ins) in p.instrs.iter().enumerate() {
|
||||
let shadow_pass = (0..shadow_reps).flat_map(|_| p.shadow.iter().enumerate().map(|(k, i)| (INSTR_COUNT + k, i)));
|
||||
for (k, ins) in p.instrs.iter().enumerate().chain(shadow_pass) {
|
||||
let d = ins.dst as usize;
|
||||
let a = ins.src as usize;
|
||||
match ins.op {
|
||||
|
|
@ -522,6 +528,48 @@ mod tests {
|
|||
}
|
||||
}
|
||||
|
||||
/// AP-F8-3 (7 October 2026): the acceptance's execution and `verify.rs` agree on a class v4 program WITH its
|
||||
/// shadow block (the output bit counts over the 64 units on the closed-form dataset, the same sel per iteration),
|
||||
/// so the two paths cannot diverge again: until sub-version 3 the acceptance ran the base program only and judged
|
||||
/// a program the chain never hashes. The devnet epoch-0 seed and the six test eras, 8 x 256 x 27 shadow
|
||||
/// instructions per hash each; the same program with its shadow stripped gives other counts.
|
||||
#[test]
|
||||
fn acceptance_executes_the_shadow_block_as_the_verifier_does() {
|
||||
use crate::generator::{generate_era, EraParams, V3_ALLOWED, V4_CLASS};
|
||||
let hx = |h: &str| -> Vec<u8> { (0..h.len()).step_by(2).map(|i| u8::from_str_radix(&h[i..i + 2], 16).unwrap()).collect() };
|
||||
let g = hx("edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07");
|
||||
let mut eras = vec![g.clone()];
|
||||
for n in 0..6 {
|
||||
eras.push(EraParams::test_era_bytes(&format!("igneum-era-test/{n}")).to_vec());
|
||||
}
|
||||
for era in &eras {
|
||||
let p = generate_era("igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", &g, V4_CLASS, era, &V3_ALLOWED);
|
||||
assert_eq!(p.shadow.len(), 256);
|
||||
assert_eq!(p.shadow_reps(), 27);
|
||||
let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2);
|
||||
let bases = accept_base_nonces(&p.seed);
|
||||
let mut acc = Acc { sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
|
||||
let mut la = vec![0u32; LANES * p.loads_per_hash()];
|
||||
let mut ones = [0u32; 64];
|
||||
for (u, &b) in bases.iter().enumerate() {
|
||||
run_unit(&p, u, b, &mut acc, &mut la).unwrap();
|
||||
for h in crate::verify::hash_warp(&p, b, &ds) {
|
||||
for j in 0..64 {
|
||||
ones[j] += ((h >> j) & 1) as u32;
|
||||
}
|
||||
}
|
||||
}
|
||||
assert_eq!(acc.bit_ones, ones, "the acceptance's execution of a class v4 program (shadow block included) matches the verifier's hashes");
|
||||
let mut bare = p.clone();
|
||||
bare.shadow.clear();
|
||||
let mut acc2 = Acc { sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
|
||||
for (u, &b) in bases.iter().enumerate() {
|
||||
let _ = run_unit(&bare, u, b, &mut acc2, &mut la);
|
||||
}
|
||||
assert_ne!(acc.bit_ones, acc2.bit_ones, "the shadow block changes the acceptance's execution");
|
||||
}
|
||||
}
|
||||
|
||||
/// The instrumented interpreter agrees with `verify.rs` on the closed-form dataset keyed by the seed words.
|
||||
#[test]
|
||||
fn instrumented_interpreter_matches_verify() {
|
||||
|
|
|
|||
|
|
@ -1107,10 +1107,11 @@ pub fn program_id(generator: u32, seed: &[u32; 8], attempt: u32) -> u64 {
|
|||
fnv1a64(&b)
|
||||
}
|
||||
|
||||
/// The sub-version of class v4's program stream, in every generator-4 program id and pack (AP-F8-1: 2 = the dataflow
|
||||
/// load-source rule of `candidate_from_words_class` and the saturated-source check (c') of `accept.rs`; 1 = the
|
||||
/// one-writer rule, the stream 0.3.20 ships; 0 was the stream of 6 October 2026, never stamped).
|
||||
pub const PROGRAM_SUBVERSION_V4: u16 = 2;
|
||||
/// The sub-version of class v4's program stream, in every generator-4 program id and pack (AP-F8-3: 3 = the
|
||||
/// acceptance executing the shadow block as the hash does, so its verdicts judge the program the chain hashes;
|
||||
/// 2 = the dataflow load-source rule and the saturated-source check (c'), never shipped; 1 = the one-writer rule,
|
||||
/// the stream 0.3.20 and 0.3.21 ship as object byte 5; 0 was the stream of 6 October 2026, never stamped).
|
||||
pub const PROGRAM_SUBVERSION_V4: u16 = 3;
|
||||
|
||||
/// Domain tag of the program id of a read-width class (never collides with [`PROGRAM_ID_TAG`]).
|
||||
pub const PROGRAM_ID_TAG_RW: &[u8] = b"igneum-program-rw/";
|
||||
|
|
|
|||
|
|
@ -132,11 +132,12 @@ fn program_ids_differ_between_class_v3_and_class_v4_of_one_seed() {
|
|||
let v3 = load("packs-ca2-mixer/mx8-devnet-epoch0", ProgramClass::V3);
|
||||
let v4 = load("packs-ca3-v4/v4-devnet-epoch0", ProgramClass::V4);
|
||||
assert_eq!(v3.reference.program.program_id(), 0x73bc_bfe8_ccf9_88f1, "the v3 control's id as pinned");
|
||||
// the amended class v4 (AP-F8-1): sub-version 2 (object byte 7; the dataflow source rule and the (c') check) is
|
||||
// the pinned id below; c120d7963abdcd96 (the 6 October stream, byte 4) and 1a4230699a6b9c60 (sub-version 1, the
|
||||
// one-writer rule, 0.3.20's byte 5) are the must-differ vectors
|
||||
// the amended class v4 (AP-F8-1, AP-F8-3): sub-version 3 (object byte 7; the acceptance executes the shadow block)
|
||||
// is the pinned id below; c120d7963abdcd96 (the 6 October stream, byte 4), 1a4230699a6b9c60 (sub-version 1, the
|
||||
// one-writer rule, 0.3.20's and 0.3.21's byte 5) and a788661687db4bb3 (sub-version 2, never shipped) must differ
|
||||
assert_ne!(v4.reference.program.program_id(), 0xc120_d796_3abd_cd96, "the pre-amendment v4 id must differ");
|
||||
assert_ne!(v4.reference.program.program_id(), 0x1a42_3069_9a6b_9c60, "the sub-version-1 id must differ");
|
||||
assert_eq!(v4.reference.program.program_id(), 0xa788_6616_87db_4bb3, "the sub-version-2 v4 id as pinned");
|
||||
assert_ne!(v4.reference.program.program_id(), 0xa788_6616_87db_4bb3, "the sub-version-2 id must differ");
|
||||
assert_eq!(v4.reference.program.program_id(), 0xa785_0016_87d8_688a, "the sub-version-3 v4 id as pinned");
|
||||
assert_ne!(v3.reference.program.program_id(), v4.reference.program.program_id());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"load_class": "mx8-erad810f22d+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "8bffdd3366b9c3ffe89c1231e91538d531cfa717307df5c48ccba43096e17212"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "8bffdd3366b9c3ffe89c1231e91538d531cfa717307df5c48ccba43096e17212",
|
||||
"load_class": "mx8-erab2ed8a89+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "ff87ad96a1b53f367a95d5ca123bab64211bd9aa57fc7ad3c5e2d496c20138d4"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "ff87ad96a1b53f367a95d5ca123bab64211bd9aa57fc7ad3c5e2d496c20138d4",
|
||||
"load_class": "mx8-era676a17fc+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "df57136f2ad5f410e6145023090eea148c1342ccef5a5f541afa590be7e44745"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "df57136f2ad5f410e6145023090eea148c1342ccef5a5f541afa590be7e44745",
|
||||
"load_class": "mx8-era843155d7+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "e593fc1d48475c88e456632f6aa0a752a5fdbca3c33022afe37680e44b7dfd11"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "e593fc1d48475c88e456632f6aa0a752a5fdbca3c33022afe37680e44b7dfd11",
|
||||
"load_class": "mx8-erad6367bfe+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "5e0587f455a86e91e4990f5c481a34cca0044d3f3ae519adcae58ddc82885d31"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "5e0587f455a86e91e4990f5c481a34cca0044d3f3ae519adcae58ddc82885d31",
|
||||
"load_class": "mx8-era4488f3ed+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"
|
||||
#define IGNEUM_GENERATOR 4
|
||||
#define IGNEUM_PROGRAM_ATTEMPT 1
|
||||
#define IGNEUM_PROGRAM_ID 0xa788661687db4bb3ull
|
||||
#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull
|
||||
#define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000"
|
||||
#define IGNEUM_DAY0 0xceed56d7u
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
// latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class
|
||||
// refuses this pack, and a job line names the class it wants (class=v4 era=<hex>).
|
||||
#define IGNEUM_PROGRAM_CLASS "v4"
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 2
|
||||
#define IGNEUM_PROGRAM_SUBVERSION 3
|
||||
#define IGNEUM_ERA_SEED_HEX "7f450623297a954f493ca08abcdfe7142bb753900abcee38256266007b4b48b7"
|
||||
// Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item
|
||||
// derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"format": "igneum-program-pack-3",
|
||||
"generator": 4,
|
||||
"attempt": 1,
|
||||
"program_id": "0xa788661687db4bb3",
|
||||
"program_id": "0xa785001687d8688a",
|
||||
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
|
||||
"dataset_mode": "memory-hard",
|
||||
"seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000",
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"instruction_count": 64,
|
||||
"loads_per_hash": 128,
|
||||
"program_class": "v4",
|
||||
"sub_version": 2,
|
||||
"sub_version": 3,
|
||||
"era_seed_bytes": "7f450623297a954f493ca08abcdfe7142bb753900abcee38256266007b4b48b7",
|
||||
"load_class": "mx8-eraf897c84e+sh256x27",
|
||||
"mixer_mult": 8,
|
||||
|
|
|
|||
Loading…
Reference in a new issue