Merge master 18f8aad34 into class-v6-family-gate under the master-landing lock
This commit is contained in:
commit
165cdb51ed
231 changed files with 9129 additions and 1011 deletions
|
|
@ -104,7 +104,7 @@ stock and at the 1,300 MHz lock, and 6.9 pJ per counted op on the Apple M5 Max (
|
|||
| lop3 (8-bit truth table) | 7,274 | 1.42 | 0.99 | 0.72 | 0.52 | 24.1 / 13.0 | 0.030 / 0.055 | | 0.11 | |
|
||||
| 32-lane xor-mask shuffle (butterfly over the 1 KB window), per lane-op | 181,580 | 1.24 | 0.87 | 0.63 | 0.45 | 55.8 / 29.4 | 0.011 / 0.021 | | 0.042 | routed with SPEF; 15:1x UK |
|
||||
| 32-lane general crossbar, per lane-op | ROW_XBAR |
|
||||
| 8 KB scratch, one random read (flop array: the pessimistic form) | ROW_SCRATCH |
|
||||
| 8 KB scratch, one random 32-bit read of a 2,048 x 32 flop array (the pessimistic form of a chip's L1; an SRAM macro reads lower) | 868,159 | 207 | 145 | 104 | 75 | 2,400 / 1,400 per L2 hit | 0.043 / 0.074 | | 0.15 | routed with SPEF, 19:4x UK; the card's shared-memory read is unmeasured (owed) |
|
||||
| int8 8x8x8 tile, per MAC | ROW_TILE |
|
||||
|
||||
Reading the floors: a lane's add costs the chip about 2.2 pJ at ASAP7 and 1.1 at N3, against the 5090's 6.2
|
||||
|
|
@ -138,7 +138,7 @@ draws 13.9 mW, the run phase 36.9 mW for 8 lanes at 1.5 ns).
|
|||
| core, 8 lanes, 32 registers | synthesis only (no wires, no clock tree) | 186,443 | 6.9 | 4.8 | 3.5 | 2.5 | 11.3 / 6.2 / 6.9 | 0.31 / 0.56 / 0.50 | 0.22 / 0.40 / 0.36 | 1.1 | synthesised; 14:0x UK |
|
||||
| of which the sequential term (register file, imem and IR clock pins, no clock gating) | | | 2.4 | 1.7 | 1.2 | 0.9 | | | | | |
|
||||
| of which the units, the read muxes and the butterfly | | | 4.5 | 3.1 | 2.3 | 1.6 | | | | | |
|
||||
| core, 8 lanes, 32 registers | placed and routed, SPEF | ROW_CORE8_PLACED |
|
||||
| core, 8 lanes, 32 registers, ungated | placed and routed, SPEF, clock tree (one run length of 300 cycles, the load phase subtracted, about plus or minus 10 percent) | 444,478 | 11.3 | 7.9 | 5.6 | 4.1 | 11.3 / 6.2 / 6.9 | 0.50 / 0.91 / 0.82 | 0.36 / 0.66 / 0.59 | 1.8 | placed 16:0x UK on a rented pod; +64 percent over synthesis (wires, and a clock tree of 2.5 pJ per lane-op that gating removes) |
|
||||
| core, 32 lanes, 32 registers | synthesis only (steady state from 150 and 400 run cycles) | 600,381 | 5.55 | 3.9 | 2.8 | 2.0 | 11.3 / 6.2 / 6.9 | 0.25 / 0.45 / 0.41 | 0.18 / 0.32 / 0.29 | 0.90 | synthesised; 15:2x UK |
|
||||
| core, 32 lanes, 16 registers | synthesis only | 443,258 | 4.2 | 2.9 | 2.1 | 1.5 | 11.3 / 6.2 / 6.9 | 0.18 / 0.34 / 0.30 | 0.13 / 0.24 / 0.22 | 0.68 | synthesised; one run length, about plus or minus 10 percent; 15:0x UK |
|
||||
| the bare ARX lane (section 3, the floor) | routed | 11,631 | 2.2 | 1.5 | 1.1 | 0.8 | 11.3 / 6.2 / 6.9 | 0.10 / 0.18 / 0.16 | 0.07 / 0.13 / 0.11 | 0.35 | the lower bound |
|
||||
|
|
@ -203,6 +203,128 @@ takes back on the card's own node (3.6x to 2.4x), which is the design. Node-for-
|
|||
k 0.78 and the 64-register core at 1.09, so "near 0.9" is reached node-for-node by the window alone; what it does
|
||||
not survive is the node step a chip project would buy (an N3 core gives back 0.4x, an N2 core 0.8x).
|
||||
|
||||
### 4c. The adversary's 64-register core: is the window a defence? (the coordinator's order, 15:3x UK)
|
||||
|
||||
Every row in this section is a MODEL of a chip core, never a lower bound on what a chip maker can build; the
|
||||
synthesis gives the cost of the circuit as drawn, and a better circuit is always possible.
|
||||
|
||||
**The live-state analysis** (`tools/chip-model/rtl/flow/livestate.py`, run on build-3: programs drawn as the
|
||||
core testbench draws them, the class v4 op weights, a load on one instruction in 16 as the dependent memory wait,
|
||||
dst and src uniform over the window, the result fold reading every register at the end of the block; 64 drawn
|
||||
programs, 1,024 waits per row):
|
||||
|
||||
| Window R | Live values at a wait (mean, min to max) | Of which necessary (reach a later address or the result, transitively) | Dead writes per block |
|
||||
|---|---|---|---|
|
||||
| 8 (the class ISA) | 7.0 of 8 (6 to 7) | 6.9 | 2.9 percent |
|
||||
| 32 | 30.5 of 32 (29 to 31) | 30.0 | 2.9 percent |
|
||||
| 64 | 61.7 of 64 (59 to 63) | 61.0 | 2.8 percent |
|
||||
| 64 at a 1,024-instruction block | 61.5 of 64 (58 to 63) | 60.6 | 3.1 percent |
|
||||
|
||||
So under a fold that reads every register, 95 percent of the window is live AND necessary across every memory
|
||||
wait: the adversary cannot shrink the state it keeps by liveness, and recomputing a value instead of keeping it
|
||||
costs the dependent chain that produced it (every value feeds the result transitively). The window is a
|
||||
defence ONLY because of the fold rule; a fold that read 8 of the 64 registers would let the chip drop the rest
|
||||
(the dead fraction would rise toward the fraction never read before the fold), so the fold-reads-all rule is the
|
||||
design rule that goes with the window.
|
||||
|
||||
**What the adversary can do with the state it must keep** is make it cheaper per access, not smaller. The
|
||||
GPU-shaped row (4a, 64 registers in flops, every flop clocked every cycle, three 64:1 read muxes) is 9.7 pJ per
|
||||
lane-op at ASAP7. The forms a chip maker would use:
|
||||
|
||||
| Form of the 64-register state (per lane, 256 bytes) | pJ per lane-op ASAP7 | N3 | k at the lock (N3) | Label |
|
||||
|---|---|---|---|---|
|
||||
| flops, no clock gating, 64:1 read muxes (the 4a row) | 9.7 | 4.9 | 0.78 | synthesised; a model |
|
||||
| flops with the register-file clock gated (one of 64 registers written per cycle; the ICG cells allowed back in and inferred by Yosys, 320 gates) | 6.2 (225,441 cells; sequential 0.2) | 3.1 | 0.50 (0.70 node-for-node) | synthesised 16:0x UK; a model |
|
||||
| the same gating on the 32-register base, for the penalty | 4.5 (156,833 cells; sequential 0.15) | 2.3 | 0.37 (0.51 node-for-node) | synthesised 16:0x UK; a model |
|
||||
| the gated 32-register base PLACED AND ROUTED (SPEF, clock tree, 379,633 cells; steady state solved from 150 and 600 run cycles) | 6.7 (+49 percent over synthesis) | 3.4 | 0.54 (0.76 node-for-node) | placed 19:5x UK; the GDDR7 board at the lock 2.4x node-for-node, 2.8x a node ahead: the morning's headline figures to the digit |
|
||||
| the gated 64-register window core PLACED AND ROUTED (563,339 cells; parasitics estimated from global routing, the SPEF lost to a full disk; steady state solved from 150 and 600 run cycles; plus or minus 15 percent) | 9.45 (+52 percent over synthesis; N5 6.6, N2 3.4) | 4.8 | 0.77 (1.07 node-for-node, 0.55 at N2) | placed 21:3x UK; the GDDR7 board at the lock 2.0x node-for-node, 2.45x a node ahead, 2.9x two ahead; the window's residual against the placed base +2.75 pJ per lane-op, +0.23 of k at the lock |
|
||||
| latch-based register file (the clocked element halved; about 30 percent under the gated flop file, approximate) | about 0.7 x the gated row | | | modelled |
|
||||
| SRAM-banked state shared across time-multiplexed lanes (one execution port serving many lanes' streams in turn, each lane's 256 bytes in a bank): modelled 8.5 to 10.5 from the access energies; BUILT as `core_tm` (8 lanes x 64 registers in banks, one port, round-robin, ungated): 8.8 pJ per lane-op synthesised (173,426 cells), against the SIMD ungated 9.7 | 8.8 (built) | 4.4 | 0.71 | synthesised 16:2x UK: port sharing saves 0.9 pJ of units and the bank-select muxes take most of it back; NOT the lever; the multi-family adversary lane's macro-window core reads 5.9 (its FakeRAM term modelled 2.0 to 7.0 pJ per access), within 5 percent of the gated flop row, so the file's form is not the lever either |
|
||||
| values recomputed instead of kept | not available: 95 percent of the window is necessary (above) | | | measured on drawn programs |
|
||||
|
||||
The defence, then, is the penalty that remains after the adversary's best form: the gated 64-register file
|
||||
against the gated 32-register file (the two synthesised rows above when they land; measured: 6.2 against 4.5 pJ per lane-op at ASAP7 synthesised, a penalty of 1.7 pJ; PLACED 9.45 against 6.7, a
|
||||
penalty of 2.75 pJ, 1.4 at N3, +0.23 of k at the lock, 0.54 to 0.77 at N3 and 0.76 to 1.07 node-for-node; the
|
||||
analytic estimate had been 1.5 pJ). So on placed rows the window takes the GDDR7 board at the lock from 2.4x to
|
||||
2.0x node-for-node and from 2.8x to 2.45x a node ahead, for at most 5 percent per load on the card. Two corrections this
|
||||
forces: the honest adversary's BASE core is the gated one (k 0.37 at N3, 0.51 node-for-node), under the ungated
|
||||
0.56 and 0.78 of section 4, which are the GPU-shaped core a maker would not build; and placement costs more than
|
||||
the +20 to +40 percent estimated (the ungated placed base reads 11.3 against 6.9 pJ: wires plus a 2.5 pJ clock tree
|
||||
that gating removes), so the placed gated rows (on a rented pod, 17:30 UK) are the figures to serve. On the 32-lane core the same
|
||||
penalty applies per lane (the register file does not amortise), so the window moves the 32-lane core from k 0.45
|
||||
to about 0.57 at the lock at N3 (0.63 to about 0.80 node-for-node).
|
||||
|
||||
**The GPU side** (the hash lane's hand): the compiled allocation of the 64-register measurement pack (ptxas
|
||||
registers per thread, local-memory spill bytes, occupancy) and the rate beside the 8-register base, clock
|
||||
18:00 UK; until then the modelled reading stands: about 110 of 255 registers per thread, occupancy about half,
|
||||
the rate expected to hold under the latency-bound chain (the 5090 hides about 330,000 ops per hash before compute
|
||||
binds) and the energy to move little, the per-lane register traffic the unmeasured term.
|
||||
|
||||
The measured GPU side (the hash lane, 16:1x to 16:4x UK, RunPod secure pods, driver 580, the kit worker, 250 x
|
||||
2^24, nvidia-smi 1 Hz; ptxas from nvcc 12.8 -Xptxas -v on the pack's kernel; pods destroyed, USD 1.22):
|
||||
|
||||
| Card, pack | MH/s | W | microjoules per hash | registers per thread (ptxas) | spill | blocks per SM (occupancy) | per load | Label |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 5090, the base (mx8-devnet-epoch0) | 141.74 | 303.1 | 2.139 | 30 | 0 B | 24 (4,080 warps) | 16.7 nJ | measured |
|
||||
| 5090, the window, arithmetic-only (hl-reg64, twice the base's work by construction) | 80.38 | 308.6 | 3.839 | 96 | 0 B | 20 (83 percent) | 15.0 nJ | measured: level per unit of work |
|
||||
| 5090, the window, full chain (hl-reg64c: every load's address mixes all 64 registers) | 70.96 | 320.3 | 4.513 | 88 | 0 B | 20 (83 percent) | 17.6 nJ (+5 percent) | measured |
|
||||
| 4090, the base | 62.67 | 208.9 | 3.333 | 29 | 0 B | 24 | 26.0 nJ | measured |
|
||||
| 4090, the window, arithmetic-only | 31.57 | 210.3 | 6.663 | 104 | 0 B | 16 (67 percent) | 26.0 nJ | measured: level |
|
||||
| 4090, the window, full chain | 31.38 | 216.5 | 6.898 | 87 | 0 B | 20 (83 percent) | 27.0 nJ (+4 percent) | measured |
|
||||
|
||||
So the card's side of the window defence is at most 5 percent per load: no spill on either card in either form, 88
|
||||
to 104 registers per thread, occupancy 67 to 83 percent, and the rate per unit of work held within 5 percent under
|
||||
the latency-bound chain. The sound class form is the full chain (the arithmetic-only fold fails the liveness rule;
|
||||
class string `+reg64c`, pack hl-v6-win with `check_window_liveness` in its suite). The chip's side (this section's
|
||||
gated rows) therefore carries the whole defence.
|
||||
|
||||
### 4d. The connected-state variant (cs64s27x16, the connected-state lane's structure) on the adversary's core
|
||||
|
||||
The connected-state lane's program (a 64-register window; per step a load whose address register is the previous
|
||||
block's last dst, the word landing in m_j, then a 27-instruction block whose first instruction reads m_j and every
|
||||
later one draws its src from the block's last four dsts, the last instruction injecting; 16 steps of text, 448
|
||||
instructions, 16 passes per block; its liveness tool: 63 of 64 live at every address, about 11 registers in the
|
||||
per-step dependent chain, about 20 touched per block) priced on the gated 64-register core with a 512-entry imem,
|
||||
the program drawn by those rules in the testbench (`CS` mode of `tb_core_common.vh`), synthesis-only:
|
||||
|
||||
| Row | Cells | pJ per lane-op ASAP7 | N5 | N3 | N2 | k at the lock N5 / N3 / N2 | k at stock N5 / N3 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| cs64s27x16 on the gated 64-register core, 512 imem | 253,059 | 6.3 | 4.4 | 3.2 | 2.3 | 0.71 / 0.51 / 0.37 | 0.39 / 0.28 |
|
||||
| the class v4 draw on the gated 64-register core, 256 imem (4c) | 225,441 | 6.2 | 4.3 | 3.1 | 2.2 | 0.70 / 0.50 / 0.36 | 0.38 / 0.27 |
|
||||
|
||||
The chip's shadow for the program is 55,296 x 3.2 pJ = 0.18 microjoules per hash at N3 (0.24 node-for-node)
|
||||
against 0.13 for the genesis window on the same core; the card pays +0.6 percent for the window on the 5090 (the
|
||||
connected-state lane's measurement). The structure's other knobs do not reach the chip: the 16-pass loop and the
|
||||
448 text cost the shared imem about 0.1 pJ per lane-op, hot-set banking is not needed (the gated file charges only
|
||||
the written register), and the chain's width sets lane count, which is free. On the GDDR7 board at the lock the
|
||||
window moves the chip's edge by about 1.1x (3.6x to 3.3x node-for-node), under the 1.25x gate that lane set.
|
||||
|
||||
### 4e. The mixed-resource lane's FP32 units (class-v6-mixedfp) on the adversary's lane
|
||||
|
||||
The mixed-resource lane's candidate adds four FP32 families (fadd, fmul, ffma, fcvt) to the shadow's draw, every
|
||||
result injected by xor, with inputs masked to a 7-bit exponent range (never zero, denormal, NaN or Inf). The
|
||||
adversary's simplified units (`rtl/fp32_units.v`): an FMA with the 24 x 24 mantissa multiplier, a 100-bit
|
||||
alignment window, a full normaliser and RNE; a separate adder and multiplier; the int32 to float converter; the
|
||||
exponent path narrowed to the range; no NaN, Inf, denormal or flag logic. The lane: an 8 x 32-bit window, the
|
||||
four units, `d ^= bits(result)`. Routed with SPEF, random-input VCD, 42,936 cells, a 2 ns clock.
|
||||
|
||||
| Op (every unit evaluating each cycle: an UPPER bound per op, no operand isolation) | pJ per op ASAP7 | N5 | N3 | N2 | 5090 fp32_fma stock / lock | k at N3 vs stock / lock |
|
||||
|---|---|---|---|---|---|---|
|
||||
| fadd | 6.6 | 4.6 | 3.3 | 2.4 | 9.2 / 5.2 | 0.36 / 0.64 |
|
||||
| fmul | 7.0 | 4.9 | 3.5 | 2.5 | 9.2 / 5.2 | 0.38 / 0.68 |
|
||||
| ffma | 6.7 | 4.7 | 3.4 | 2.4 | 9.2 / 5.2 | 0.37 / 0.65 |
|
||||
| fcvt | 6.9 | 4.8 | 3.5 | 2.5 | 9.2 / 5.2 (cvt unmeasured on the card) | 0.38 / 0.67 |
|
||||
| random mix | 7.1 | 4.9 | 3.6 | 2.6 | | 0.39 / 0.68 |
|
||||
|
||||
Reading: the four read alike because all four units switch every cycle on the same operands, so each row is the
|
||||
upper bound for its op (a chip isolates the idle units; by cell share about ffma 3.5 to 4, fmul 2.5, fadd 2, fcvt
|
||||
1 pJ at ASAP7, approximate). Even on the upper bound the FP family is the chip's dearest per op relative to the
|
||||
card: k 0.65 at N3 at the lock against 0.18 for the integer ARX lane floor, because the card does an FMA for 5.2
|
||||
pJ (under its own int add at 6.2) while the chip's multiply, alignment and normaliser cost about three int ops.
|
||||
On the units' floors the shadow's k_eff rises from 0.097 (class v4) to about 0.14 at the fp12 mix and 0.17 at
|
||||
fp24 (0.20 and 0.24 with isolation taken as half), the core's per-op overhead on top. The GPU-cost budget (10
|
||||
percent of energy per hash) is the binding side, and the vendor-rounding question is the class's, not the chip's.
|
||||
|
||||
## 5. The chip edge at the measured k
|
||||
|
||||
`E_chip = E_mem + N_ops x e_chip` (absolute: the chip's shadow cost is 102,100 x 3.5 pJ = 0.36 microjoules per hash
|
||||
|
|
@ -270,7 +392,7 @@ to 2.3x and the strongest chips at 2.6x to 4.2x.
|
|||
| 6 | prmt, lop3 | 0.64, 0.72 | 11.5, 13.0 | 0.056, 0.055 | not drawn (RTL rows only) |
|
||||
| 7 | mulhi | 0.68 | 21.0 | 0.032 | yes (6) |
|
||||
| 8 | 32-lane shuffle (butterfly) | 0.63 | 29.4 | 0.021 | yes (8) |
|
||||
| 9 | L1 scratch read (8 KB flop array) against the card's L2 hit | ROW_SCRATCH_K | 1,400 | pending | not drawn |
|
||||
| 9 | L1 scratch read (8 KB flop array) against the card's L2 hit | 104 (pJ per read) | 1,400 | 0.074 | not drawn |
|
||||
| 10 | int8 8x8x8 tile, per MAC | ROW_TILE_K | 2.2 | pending | not drawn (the tensor lever is dead on other grounds) |
|
||||
|
||||
The order is set by the card's price, not the chip's: the chip pays 0.6 to 1.7 pJ for everything, and the card
|
||||
|
|
|
|||
|
|
@ -27,11 +27,15 @@ population, Apple reported and not headlined; every defence is scored after the
|
|||
2. The rows (ASAP7, placed and routed, SPEF, gate-level VCD; the SRAM term modelled, bands shown; node factors
|
||||
claimed): the full core 9.36 pJ per lane-op at ASAP7 on the class v4 draw (8.6 to 11.1), 6.55 at N5, 4.72 at N3;
|
||||
k 0.64 node-for-node and 0.46 a node ahead at the 5090's lock; the reserve families k 0.33 to 0.86 placed; the
|
||||
genesis-only core 7.78 (k 0.53 / 0.38); the 32-lane genesis core 10 percent under (synthesis).
|
||||
genesis-only core 7.78 (k 0.53 / 0.38); the 32-lane cores 10 to 13 percent under their 8-lane forms (synthesis:
|
||||
the full core 5.73, k 0.39 / 0.28), so the adversary's cheapest row is the 32-lane placed core at about 5.7 pJ
|
||||
per lane-op at N5 (k 0.55 same-node), a sixth under the headline row.
|
||||
3. The complete machine (memory, controller, host share, power train, cooling) on the card's own GDDR7: 1.5x the
|
||||
5090 at its lock per joule node-for-node (1.3x to 1.7x), 1.8x a node ahead (1.5x to 2.0x); 3.3x per dollar; HBM3
|
||||
buys it nothing; the N2 SRAM die 2.3x and 3.1x; the stored-half hybrid (section 13) 1.9x and 2.4x at USD 2.80 per
|
||||
MH/s. Capex per MH/s is the larger half of the chip's edge; the project cost is its hold.
|
||||
5090 at its lock per joule node-for-node on the placed 8-lane full core (1.3x to 1.7x), 2.1x on the placed
|
||||
32-lane core's floor (1.7x to 2.4x); 1.8x and 2.4x a node ahead; 3.3x per dollar; HBM3 buys it nothing; the N2
|
||||
SRAM die 2.3x to 4.2x same-node; the stored-half hybrid (section 13) 1.9x to 2.6x at USD 2.80 per MH/s. The
|
||||
same-node honest bracket across the adversary's choices is 1.5x to 2.1x on the DRAM board. Capex per MH/s is the
|
||||
larger half of the chip's edge; the project cost is its hold.
|
||||
4. Data-local execution cannot pay (the live state is 26x the read, section 11); memory sharing is the baseline;
|
||||
recomputation loses; selective participation gains 2 to 5 percent for 50 to 90 percent of revenue (section 13).
|
||||
5. Class v7 should take the epoch-defined bounded dataset with a published support horizon and keep the floor
|
||||
|
|
@ -348,10 +352,28 @@ under the class v4 draw (shfla and mm8 live -1.2 percent, all eight live -9.2 pe
|
|||
hash and pays +29 percent of shadow energy, and the card's premium rises by the same +29 percent (its tile at 70 pJ
|
||||
per lane against the draw's 10.3): the ratio does not move, the lane count does (section 14, row 1).
|
||||
|
||||
The 32-lane genesis core (synthesis only; four window macros, one imem pair shared by 32 lanes): 261,440 cells,
|
||||
5.29 pJ per lane-op at ASAP7 (4.65 to 6.77) on the class v4 draw, 3.70 at N5, k 0.36 at the lock: 10 percent
|
||||
under the 8-lane core, the imem and the sequencer amortised over four times the lanes. The 32-lane full core
|
||||
(synthesis) and its placed form are in the flow (adv-a and adv-f at 16:4x BST) and land as a delta.
|
||||
The 32-lane cores: the genesis comparator PLACED AND ROUTED (adv-g, 20:1x BST; SPEF, gate-level VCD at the
|
||||
30 ns constraint, four window macros and one imem macro, 717,268 cells with fill): 4.80 pJ per lane-op at ASAP7 on
|
||||
the class v4 draw (4.17 to 6.28), 3.36 at N5, 2.42 at N3, k 0.33 node-for-node and 0.24 a node ahead at the
|
||||
5090's lock. That is 9 percent UNDER its own synthesis row (5.29), where the 8-lane cores read 32 to 42 percent
|
||||
over theirs: the 32-lane core is routed under a 30 ns constraint (its unpipelined crossbar path is 27 ns) and the
|
||||
flow's resizer downsizes every cell to it, so the placed figure carries smaller cells and lower capacitance than a
|
||||
chip clocked at 1.5 ns with its pipeline registers would. The honest 32-lane row is therefore a band, not a point:
|
||||
3.36 pJ at N5 (the relaxed-clock placement, the floor) to 5.7 (the synthesised 32-lane full core 5.73 at ASAP7
|
||||
times the 8-lane cores' measured placement factor 1.42, the ceiling), k 0.33 to 0.55 same-node and 0.24 to 0.40 a
|
||||
node ahead. The synthesis rows beside it: the genesis core 261,440 cells, 5.29 (4.65 to 6.77), 3.70 at N5; the
|
||||
full core 393,036 cells, 5.73 (5.09 to 7.20), 4.01 at N5, 2.89 at N3, k 0.39 / 0.28; the bank's cost at 32 lanes
|
||||
8 percent of the energy on the draw and 50 percent of the cells. The placed 32-lane FULL core runs on adv-g (from
|
||||
synthesis at 19:58 BST, the same 30 ns constraint) and lands as a delta; its placed figure will sit inside the
|
||||
same band for the same reason.
|
||||
|
||||
The complete machine at the 32-lane band (the genesis comparator's placed 3.36 pJ at N5 as the floor; the ceiling
|
||||
is section 6's placed 8-lane full core less a sixth): the GDDR7 board 2.1x the 5090 at its lock per joule
|
||||
node-for-node at the floor (1.7x to 2.4x) and 2.4x a node ahead (2.0x to 2.7x), against 1.5x and 1.8x on the
|
||||
placed 8-lane full core; the N2 SRAM die 4.2x and 5.7x at the floor. So the same-node honest bracket across the
|
||||
adversary's lane count, core and sizing choices is 1.5x to 2.1x per joule on the DRAM board (1.3x to 2.4x on the
|
||||
bands), 1.9x to 2.6x with the stored-half hybrid, USD per MH/s unchanged (the core is a tenth of the board's capex
|
||||
at 32 lanes).
|
||||
|
||||
The board rows of section 6 restated at the placed energy (the full core at 6.55 pJ per lane-op at N5, band 6.01
|
||||
to 7.77; 4.72 at N3): the complete GDDR7 machine 1.53 microjoules per hash, **1.5x the 5090 at its lock per joule
|
||||
|
|
@ -726,7 +748,14 @@ percent (5th to 95th percentile 1.45x to 1.58x on the placed rows); a specialist
|
|||
gains 2, 3 or 5 percent of ratio and loses 50, 75 or 90 percent of revenue, because difficulty follows the fleet it
|
||||
joins and it earns in proportion to the time it mines; downtime and re-entry cost it the DAA window's lag each
|
||||
way and buy it nothing. The GPU-cost budget of 10 percent at the lock (set before these results) is untouched:
|
||||
no honest energy is spent in this section. Served sentence for the bracket: against a chip on the same node the
|
||||
no honest energy is spent in this section. (5) "Layer 8 off" (the hash lane's D2 experiment of 18:12 BST: the era layout's window-layer draw removed, every
|
||||
window the whole dataset): the hottest half then serves exactly 50 percent of the reads at every program, so the
|
||||
uniform-store row becomes the hot-set row: the hybrid reads 1.85x (1.58 to 2.03) same-node and 2.27x (1.95 to
|
||||
2.50) a node ahead at USD 3.34 per MH/s and 273 MH/s per board, against 1.93x / 2.40x at USD 2.80 on today's mean
|
||||
program (hit 0.581) and 2.09x / 2.65x at USD 1.88 on Devnet 3's p98 program (0.72): the window layer's removal
|
||||
takes 4 percent off the hybrid's per-joule edge at the mean program and 11 percent at the tail, and its capex edge
|
||||
from 5.7x to 4.8x of the card's, for one and-or per load on the honest side. The rows are in
|
||||
`tools/chip-model/mf/results/d2b-n5.md` and `d2b-n3.md`. Served sentence for the bracket: against a chip on the same node the
|
||||
honest floor is the stored-half hybrid at 1.9x to 2.1x per joule and 6x to 9x per dollar (1.65x to 2.3x on the
|
||||
band), not the DRAM board's 1.5x and 3.3x; the lever on it is the dataset floor as a capex ticket.
|
||||
|
||||
|
|
@ -751,7 +780,131 @@ Reading: no row loses competitiveness; the cheapest adaptation is firmware for e
|
|||
sequence for an entry outside it (row 2, 1.3x to 1.45x same-node while live), and a respin only if the chain adds a
|
||||
family the sequence cannot carry, which it has 360 days' notice of. The stress life of three years holds in full.
|
||||
|
||||
PENDING with clocks: the 32-lane full core's synthesis row (adv-a, in ABC at 17:0x BST; by 19:30) and its placed
|
||||
row (adv-f, at floorplan; by 21:00); the k lane's crossbar, scratch and tile rows (its pod); a real memory
|
||||
PENDING with clocks: the 32-lane full core's placed row (adv-g from 19:58 BST on a 64-core host, adv-f since 18:12
|
||||
on a slower one, whichever lands first, by 22:00; the 32-lane genesis comparator's placed row landed at 20:1x,
|
||||
section 5, and brackets it); the k lane's crossbar, scratch and tile rows (its pod); a real memory
|
||||
compiler's figure for the two macros (owed, no clock: FakeRAM gives area and pins only); the per-family rows on
|
||||
the 32-lane placed core (by 21:30 if adv-f lands, else the next pass).
|
||||
|
||||
## 15. The SRAM die's ticket reconciled (the research lane's and the coordinator's ask, 17:2x BST; floor lane 3's USD 0.6 against this file's USD 2.94 per MH/s)
|
||||
|
||||
The two figures price different machines. Lane B's USD 0.25 to 0.4 of silicon per MH/s (chip-model-v3 5.12,
|
||||
hardware-future) is the die at ZERO SHADOW: 2,100 MH/s per 2 GiB reticle at 300 W, no shadow core at all; with a
|
||||
board it reads about USD 0.6. This file's USD 2.94 is the same die carrying the class v4 shadow on the placed mf core
|
||||
(6.55 pJ per lane-op at N5), with the machine held at lane B's 270 to 300 W: the shadow is 13x the die's own energy
|
||||
per hash, so at that budget the machine makes 383 MH/s and the fixed tickets (die, package, board, host) divide by
|
||||
383 instead of 2,100. Neither is the adversary's choice. The designer sets the power budget to minimise dollars per
|
||||
MH/s; the die's read ceiling (floor lane 3: about 1,060 G reads per second, 8.3 GH/s) is never reached because the
|
||||
core's silicon and the power train bind first. Line by line, every term with its source and label:
|
||||
|
||||
| Component | This file at 270 W (section 6) | The optimised machine (this section) | Source and label |
|
||||
|---|---|---|---|
|
||||
| The 2 GiB SRAM die: 452 mm^2 of macro on a 550 to 650 mm^2 N2 die, a USD 30,000 wafer, lane B's yield model | USD 500 (400 to 600) | the same | lane B 4.9 (claimed density and wafer price; the yield approximate) |
|
||||
| The shadow core's silicon: this core's placed floorplan 0.0036 mm^2 per lane at ASAP7, x0.55 to N5 (0.002 mm^2), one lane-op per 7.5 ns (the 5-phase slot), 770 lanes per MH/s; USD 0.36 per mm^2 of N5 (sram-mirror's yield model) | USD 0.55 per MH/s (590 mm^2 at 383 MH/s) | USD 0.11 to 0.55 per MH/s: a core pipelined to one op per cycle per lane is five times denser (0.0004 mm^2 per lane; about +0.1 to 0.2 pJ per op for the pipeline registers, inside the band); the record's USD 25 to 40 per 166 MH/s (0.15 to 0.24) sits inside | this file's placed floorplan (measured), the pipelining factor approximate |
|
||||
| The package: two reticle-class dies (the SRAM die and the core die) with a wide link between them | USD 200 (an interposer, approximate) | USD 60 to 200: an organic flip-chip substrate carries a UCIe-class link at the hash's 80 bits per read (floor lane 3's hop, 0.5 pJ per bit); the interposer only if the link must be wider | approximate; the interposer price chip-model-v3 5.1 (claimed) |
|
||||
| The board, assembly, PSU and cooling | USD 200 flat (board 150, assembly 50; PSU and cooling inside) | USD 150 plus USD 0.15 per watt of PSU and cooling (approximate): USD 240 at 600 W, 375 at 1.5 kW | approximate |
|
||||
| The host (one full node per 100 machines) | USD 15 | USD 15 | section 6 |
|
||||
| The sustained rate | 383 MH/s at 270 W (power-bound on the core) | 852 MH/s at 600 W, 1,420 at 1 kW, 2,130 at 1.5 kW, 2,840 at 2 kW (the die's own ceiling 8.3 GH/s, never reached) | board.py on the placed core (modelled) |
|
||||
| **USD per MH/s** | **2.94** | **1.63 / 1.20 / 0.98 / 0.88 at 600 W to 2 kW on this core; 1.07 / 0.73 / 0.56 / 0.47 with the pipelined core and the organic package** | modelled |
|
||||
|
||||
The reconciled figure: **about USD 1.0 per MH/s for the SRAM-die machine carrying the class v4 shadow (0.5 to 1.6),
|
||||
at 1 to 1.5 kW per machine**, set by the power train and the core's silicon and not by the die; lane B's USD 0.6
|
||||
holds only at zero shadow, this file's USD 2.94 only at a 300 W budget, and both stand in the record with those
|
||||
labels. Per joule the optimised machine is unchanged (the energy per hash does not depend on the budget: 2.3x
|
||||
same-node, 3.1x a node ahead at the placed core).
|
||||
|
||||
What a maker's first batch of 1,000 dies would actually pay: not the unit ticket. A thousand 2 GiB dies at 1 to 2
|
||||
GH/s each are 1 to 2 TH/s, several times the chain's whole hashrate at the rental equilibrium (floor lane 3's
|
||||
section 4: a third of the network is under two dies at every price in its table), so the batch's cost is the
|
||||
project (USD 100 M to 500 M at N2, claimed) spread over a hashrate the chain cannot absorb: USD 50 to 250 per MH/s
|
||||
of NRE against USD 1 of unit cost, and the first dies' yield (a 600 mm^2 die with 452 mm^2 of macro, redundancy
|
||||
untested) adds USD 100 to 400 per die, approximate. The die's economics are project economics: the coexistence
|
||||
verdict should take USD 1.0 per MH/s (0.5 to 1.6) as the unit ticket of a fleet that exists and the project cost
|
||||
as the gate on whether it ever does.
|
||||
|
||||
## 16. The formal memory model: the class v6 evaluation in capacity, bandwidth, energy and amortisation terms (the 2.0 register's row, drafted 18:1x BST for the 12:00 delta)
|
||||
|
||||
One evaluation (a hash) under class v6: 128 dependent loads of a 4-byte word (W = 1; 16 bytes at W = 4) from a
|
||||
dataset of D bytes (2 GiB at genesis, the floor schedule 5.5 / 8.5 / 11.5 GiB), each address the fold of the lane's
|
||||
live state (64 registers, 61 necessary), each load returning into that state; between loads the shadow block (6,912
|
||||
instructions per iteration, 102,100 per hash) and the base program (512); the dataset rebuilt once per window from
|
||||
the chain's state (class v5 and v6) or from the epoch's seed (the class v7 default), 157 G ops per GiB. The terms,
|
||||
each with its bound and whether the bound is closed-form or rests on physical design:
|
||||
|
||||
| Term | Per evaluation | Across N evaluations on one machine | The bound | Closed-form or physical |
|
||||
|---|---|---|---|---|
|
||||
| Capacity, the dataset | D bytes must be addressable at the hash's latency: every item is reachable from every lane with uniform probability (the fold is keyed by the destination register; no item is colder than 1/D by construction, the hot set is per program and per window) | shared by every lane and every engine on the board: D once per machine, never per engine | a machine holds D or recomputes (section 13: recomputation loses at every point; a partial store of fraction f serves f of the reads uniformly, or up to 0.58 to 0.72 at f = 0.5 on the window layer, 0.50 with the layer off) | closed-form (the item distribution is the census's; the SRAM price per GiB is claimed) |
|
||||
| Capacity, the live state | 2,112 bits per hash in flight; the chain forbids reducing it (61 of 64 registers necessary; the connected-state lane: free for a chip, only the width counts) | lanes in flight x 2,112 bits: 1,172 lanes on the GDDR7 board (310 KB), 21,000 on the SRAM die (5.5 MB) | an SRAM macro per 8 lanes, 3.5 pJ per access (2.0 to 7.0): the one term this file's placed rows measure | physical (the macro energy band; the rest of the core measured placed) |
|
||||
| Bandwidth, random reads | 128 activates per hash: the device's activate rate, not its pin rate, binds (21.3 G per second on 16 GDDR7 devices, 82 percent reached by the 5090; 10.7 G on an HBM3 stack, unmeasured, the JEDEC floor 2.3 G; the SRAM die's 1,060 G never reached before power binds) | N x 128 activates: the sustained rate is activates per second over 128, shared across every engine on the board | the memory's activate ceiling per dollar of devices: a chip cannot buy more activates per device than the card has (section 11) | the GDDR7 ceiling measured on the card (82 percent); the HBM3 ceiling physical (the AWS F2 hour); the SRAM die's a model |
|
||||
| Bandwidth, bytes | 32-byte sectors at W = 1 (4 KB per hash, 38 percent of the GDDR7 pins at the activate ceiling); 2 sectors at W = 16 (dead on the cards) | linear in N | never the bound at W = 1 to 8 | closed-form |
|
||||
| Bandwidth, the state to the data | 2,112 bits per read if the computation moves to the item; 80 bits per read if the item moves to the lane | 26x on every medium (section 11) | data-local execution cannot pay | closed-form (the bit counts) with the per-bit energies claimed |
|
||||
| Energy, the memory | 2.0 nJ per GDDR7 read (1.5 to 2.6), 1.2 on HBM3, 0.25 on the SRAM die at W = 1: 0.256 / 0.154 / 0.032 microjoules per hash | linear in N plus the static and controller terms (35 W on the GDDR7 board) | the device's activate energy (chip-model-v3 5.3, modelled from HBM2's breakdown and the vendors' per-bit figures) | physical (claimed breakdowns; the card's marginal measured at 8.7 nJ per read) |
|
||||
| Energy, the shadow | 102,612 lane-ops x 6.55 pJ (placed, N5) = 0.67 microjoules; 0.48 at N3; the 32-lane core about 0.58 | linear in N; the clock, the window and the units measured per op; the leakage per lane | the placed rows (sections 3 to 5); the SRAM term's band | physical (measured placed; the SRAM term modelled) |
|
||||
| Energy, the machine | the power train (PSU 92 percent, VRM 90), cooling (3 percent), the host (0.85 W per machine) | fixed per machine, amortised over its rate | section 6's rows | approximate |
|
||||
| Amortisation, the set-up | the dataset build 0.7 J per GiB per window per machine; the host USD 15 and 0.85 W per machine; the era's registers | shared by every engine of the machine and every hash of the window: 1.4e-12 J per hash, under 1 percent of capex | nothing to amortise further: the set-up is already a window term | closed-form (the build measured on a card, the host approximate) |
|
||||
| Amortisation, the silicon | the core die USD 0.11 to 0.55 per MH/s, the memory USD 320 to 1,000 per board, the package, the board | spread over the life (0.5 to 3 years): 0.085 USD per TH at 3 years on the GDDR7 machine, 0.22 to 0.27 on the cards | capex per sustained MH/s is the larger half of the chip's edge (section 8) | the core measured placed, the memory and board claimed or approximate |
|
||||
| Selective participation | the per-epoch ratio spreads 9 percent (5th to 95th percentile 1.45x to 1.58x same-node) | a specialist mining the best x of epochs earns x of the revenue at +2 to +5 percent of ratio | nothing to gain | closed-form on the band (the draws uniform within it, approximate) |
|
||||
|
||||
The reading: capacity is a ticket (D once per machine, in DRAM at USD 10 per GiB or SRAM at USD 250), bandwidth is
|
||||
the activate ceiling per dollar of devices and is the card's own, energy is the memory's activate energy plus the
|
||||
shadow at the placed core's pJ per op, and amortisation is already complete at one machine (the set-up is a window
|
||||
term, the silicon a life term). The bounds that are closed-form: the capacity and state terms, the bit counts of
|
||||
data-local execution, the bytes, the set-up amortisation, selective participation. The bounds that rest on physical
|
||||
design: the SRAM macro's access energy (the one modelled term in the placed rows), the HBM3 activate ceiling, the
|
||||
SRAM die's wire term and the on-package hop, the device activate energies (claimed breakdowns), and the board's
|
||||
power train and cooling (approximate). Nothing in the model rewards a chip for anything but the memory's own
|
||||
activate energy and the shadow's pJ per op, which is where sections 6 and 13 put the honest bracket.
|
||||
|
||||
## 17. Review B's F05: the reg64 address mixer's incremental form, priced at the placed level (20:0x BST; the clock 23:30)
|
||||
|
||||
The finding: the connected-state candidate's address (the fold over all 63 live registers before every load) has an
|
||||
exact incremental form through a prefix-XOR tree, so a chip never reads and folds 63 registers per load; a design
|
||||
that assumes the literal fold overstates the chip's cost, and a one-register perturbation test says nothing about a
|
||||
minimum circuit. The shipped class (v4, v5, v6) folds ONE source register per load (this core's load op), so the
|
||||
finding touches the connected-state candidate (killed as a class at 17:25 BST on other grounds) and the bound it
|
||||
sets for any future class that couples the address to the whole window. Three designs for that coupling on this
|
||||
core, priced with the placed per-op figures (6.55 pJ per lane-op at N5 on the class v4 draw; the SRAM macro 3.5 pJ
|
||||
per 256-bit access, 2.0 to 7.0, shared by 8 lanes; the 102,612-op hash with 128 loads):
|
||||
|
||||
| Design | Extra state per lane | Extra work | Extra lane-ops per hash | Extra energy per hash at N5 | Share of the chip's shadow energy (0.672 microjoules) |
|
||||
|---|---|---|---|---|---|
|
||||
| The literal fold: read and fold 63 registers at each load | none | 63 reads of the window (SIMD, one macro access per 8 lanes each) and 63 rotate-xor ops per load | 128 x 63 = 8,064 (plus 8,064 macro accesses per 8 lanes: 3.5 pJ x 8,064 / 8 = 3.5 nJ) | 8,064 x 6.55 pJ + 3.5 nJ = 56 nJ (48 to 72) | +8.4 percent |
|
||||
| The prefix-XOR tree (the reviewer's form, floor lane 3's Fenwick reading): 65 words of prefix state, seven read-modify-writes per register write, eleven ops per load | 260 bytes in a second gated macro (one per 8 lanes, the same shape as the window) | 7 x 2 macro accesses and 7 xor-rotate ops per instruction that writes the window; 11 ops per load | on the base program's 512 writes and 128 loads: 4,992 ops and 7,168 accesses per 8 lanes; on every instruction of the hash (the shadow block writes the same window): 718,000 ops and 1.44 M accesses | base program only: 33 nJ of ops + 3.1 nJ of accesses = 36 nJ; every instruction: 4.7 microjoules of ops + 0.63 of accesses (7x the whole shadow) | +5.4 percent if the shadow block's writes are exempt; +800 percent if they are not |
|
||||
| The running total (this lane's form: the fold is linear over GF(2), so a write to register j changes the fold by a fixed rotation of old xor new, and the old value is already read in phase 0 of this core's slot) | one 32-bit register per lane (flops, written every instruction) | two rotates and two xors per instruction, merged into the write phase | 102,612 (one op's worth of datapath per instruction, no extra macro access) | about 1.0 pJ per instruction (an xor-rotate pair on operands already latched; the add row's datapath term is 1.7 pJ, approximate): 0.10 microjoules | +15 percent, paid on every instruction; +0.8 percent if only the base program's writes count |
|
||||
|
||||
Reading. (1) Which form the adversary picks depends on how many instructions write the window between loads: at
|
||||
the shipped shape (one load per 800 instructions once the shadow block is in) the LITERAL fold is the cheapest
|
||||
(+8.4 percent of the shadow, 56 nJ), because any incremental form pays per write and the shadow writes 800 times
|
||||
per load; the running total wins only if the shadow block's registers are exempt from the fold (then +0.8
|
||||
percent), and the Fenwick tree never wins on this core (its seven read-modify-writes per instruction are macro
|
||||
accesses, the one term this core pays dearly for). Floor lane 3's 30 nJ for the tree counts the base program's
|
||||
writes only; the row above shows both counts. (2) The bound the review asks for: the cheapest adversary form on
|
||||
the placed core costs at most 56 nJ per hash (the literal fold; 48 to 72 across the SRAM band) and at least 5 nJ
|
||||
(the running total with the shadow exempt), so the complete-machine bracket for a class carrying the whole-window
|
||||
fold moves from 1.5x (1.3 to 1.7) same-node to 1.42x to 1.49x (the chip's machine energy 1.528 to 1.53 + 0.056 x
|
||||
1.21 = 1.60 microjoules at the literal fold; 1.535 at the running total), and 1.8x a node ahead to 1.7x to 1.8x:
|
||||
the coupling buys the honest side at most 0.08x on this core, which is inside the SRAM term's band and agrees
|
||||
with the connected-state lane's KILL (1.10x against its 1.25x gate) and floor lane 3's 2.6 percent on the GDDR7
|
||||
board. (3) No row here assumes a 63-read cost that the adversary can avoid: the literal fold is priced as 63 SIMD
|
||||
macro reads shared by 8 lanes (3.5 nJ per hash of accesses, not 63 window reads per lane), and the incremental
|
||||
forms are priced per write. The shipped class is untouched: its fold reads one register. (4) The GPU side of the same two forms (the fleet
|
||||
lane, 20:4x BST, the hash lane's hl-v6-all fold form against hl-v6-all-prefix, the same program id and vectors,
|
||||
stock clocks, 250 batches, fingerprints equal; evidence on build-1 under /srv/artefacts/tas/54900078/ and
|
||||
/srv/artefacts/tas/si1xc4yhpakk1v/): the 5090 reads 70.6 MH/s at 437.8 W (6.20 nJ per hash) on the literal fold
|
||||
and 70.2 at 500.0 W (7.13 nJ) on the prefix form, 100 against 248 registers per thread; the 4090 31.3 MH/s at
|
||||
238.1 W (7.60 nJ) against 31.3 at 231.7 W (7.41 nJ), 93 against 154 registers. The rate is unmoved on both cards
|
||||
(both are bound at the dataset reads) and the prefix form costs the 5090 14 percent more board power for the same
|
||||
hashes; so on the card as on this core the cheapest form at the shipped shape is the literal fold, and the
|
||||
review's incremental form is a design the adversary can take and does not want. (5) The bound restated for the
|
||||
connected-state class's OWN shape (the hash lane's closed form, 20:5x BST: `address_source(s) = r[s] ^ ror(P_s, 1)
|
||||
^ (S ^ P_s ^ a[s])`, a[k] = rotl(r[k], (63 - k) mod 32), S the xor of every a[k], P_s the prefix xor below s;
|
||||
32 loads per 64-instruction iteration, 256 loads and 512 register writes per hash in the base program): there the
|
||||
literal fold is 256 x 63 = 16,128 lane-ops and 16,128 SIMD macro reads per hash, 113 nJ at N5 (97 to 145), and the
|
||||
prefix form is one running-total update per write (an xor-rotate pair, about 1 pJ) plus six Fenwick read-modify-
|
||||
writes per write (twelve macro accesses per 8 lanes, 5.3 pJ) and six prefix reads with three xors per load: 512 x
|
||||
12.3 pJ + 256 x 5.6 pJ = 7.7 nJ (5 to 15). So on that class the review is right by 14x: the chip pays about 8 nJ
|
||||
per hash for the whole-window coupling, 1.2 percent of its shadow energy, and the complete-machine bracket moves
|
||||
from 1.5x to 1.49x same-node (not to 1.42x, which was the literal fold's cost); the card meanwhile keeps the fold
|
||||
at 6.20 nJ per hash on the 5090 and would pay 7.13 on the prefix form. The two shapes together: the chip's cost of
|
||||
the coupling is 8 nJ (connected-state shape, prefix form) to 56 nJ (shipped shape, literal form), 0.02x to 0.08x
|
||||
of the bracket, and no design in the record charges the chip a 63-read cost it can avoid.
|
||||
|
|
|
|||
10
docs/analysis/class-v6/rows/chainseed-census-1a938abe4.md
Normal file
10
docs/analysis/class-v6/rows/chainseed-census-1a938abe4.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# The chain-seed draw on the frozen object: the freeze's (c''') read (8 October 2026, 21:5x to 22:3x UK)
|
||||
|
||||
The coordinator's blocking read: the research pack hl-v6-all (4de7b836cc40a4ea) was drawn with the genesis epoch seed over the node1 state stream, a pair the node's class v5 pairing check refuses; on the chain's own seed the engine draws another program. The node lane read the live devnet-4 node's program-id line verbatim at 21:41:51 UK: epoch seed af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3 (the block hash), era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 (the era seed stays the genesis hex), day 20730 (day hex 69676e65756d2d6461792ffa50000000000000), the node1 state (block 159357, root 1c583d35..., file sha abb58003...), class mx8+sh256x27+state+reg64c+fold+rw, generator 6, attempt 0: program **2a1d6caab4c24564**. The harness on the frozen tree 1a938abe4 (class-v6-census-all4 bdbe85bfb, binary f4e93766d5a3dc46 on build-4) reproduces that id from those inputs on the class-string path; the second column is the draw with the block hash as the era too (442a1691b3e3507f, era label 93a14ac6), which an earlier line named and the node lane's read ruled out; it is kept as the research comparison. Both rows on build-4 under the lease pool at 21:5x UK, the sitestats and census TSVs beside this file.
|
||||
|
||||
| Draw | Program (class) | The pair | (A) the whole rule with the (c''') floor on the program; per site over 2^20 evaluations | (B) the attempts census, 256 chain-shaped seeds under the pair's era and state |
|
||||
|---|---|---|---|---|
|
||||
| **the engine's draw (the freeze's read)** | 2a1d6caab4c24564 (mx8-erad810f22d+sh256x27+state+reg64c+fold+rw) | seed af89be5d..., era 0:edc4fa84..., day 20730, node1 state | ACCEPTED; min site ratio 0.99988, under 0.98: 0, under 0.995: 0; largest bucket +6.25 sigma; worst free bit -3.06 sigma; sites over 6 sigma 0 | 256 of 256, 0 exhausted at 256, r 0.129, mean attempt 0.15, max 2, (c''') refused 0 of 294; parts a' 23 b 7 a 4 reg64 3 c 1 |
|
||||
| the research comparison | 442a1691b3e3507f (mx8-era93a14ac6+sh256x27+state+reg64c+fold+rw) | seed af89be5d..., era 0:af89be5d..., day 20730, node1 state | ACCEPTED; min site ratio 0.99992, under 0.98: 0, under 0.995: 0; largest bucket +5.25 sigma; worst free bit 2.91 sigma; sites over 6 sigma 0 | 256 of 256, 0 exhausted at 256, r 0.129, mean attempt 0.15, max 2, (c''') refused 0 of 294; parts a' 23 b 7 a 4 reg64 3 c 1 |
|
||||
|
||||
Verdict: the engine's draw 2a1d6caab4c24564 PASSES the sub-version 3 rule with the (c''') floor (every site clear of 0.98 and 0.995 at 0.99988, the largest 256-item bucket +6.25 sigma on one site, which the rule does not bound and the record's clean full-window sites read to +5.5, the worst free index bit 3.06 sigma, no site over 6 sigma) and the attempts census (256 of 256 chain-shaped seeds accepted inside two attempts, 0 exhausted, 0 (c''') refusals: the same 294 candidates and parts as the research pack's, since the census draws its own seeds under the pair's era and state). The research comparison reads the same on every line but the bucket (+5.25). The freeze's object on the chain's own seed is sound under the rule; the research pack's rows (census-packs.md section 7) are the same class on the genesis seed.
|
||||
|
|
@ -0,0 +1,259 @@
|
|||
# census class mx8+sh256x27+state+reg64c+fold+rw eras [0] seeds 256 era-widths 4 state /srv/builds/v6-census/packs/node1-state.igsd1 erahex af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3 weights base bittest off bin f4e93766d5a3dc46 start 2026-10-08T20:50:59Z host igneum-build-4 threads 16
|
||||
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
|
||||
census 0 8 1 1 0 nan - -
|
||||
census 0 5 1 1 0 3.3 3 21
|
||||
census 0 4 1 1 0 3.4 5 23
|
||||
census 0 10 1 1 0 nan - -
|
||||
census 0 12 1 1 0 3.2 1 23
|
||||
census 0 9 1 1 0 3.3 10 22
|
||||
census 0 7 1 1 0 2.8 12 25
|
||||
census 0 3 1 1 0 2.8 0 24
|
||||
census 0 0 1 1 0 nan - -
|
||||
census 0 14 1 1 0 nan - -
|
||||
census 0 11 1 1 0 2.6 5 22
|
||||
census 0 2 1 1 0 2.9 13 1
|
||||
census 0 13 1 1 0 3.1 0 20
|
||||
census 0 15 1 1 0 3.3 5 21
|
||||
census 0 6 1 1 0 nan - -
|
||||
census 0 1 1 1 0 nan - -
|
||||
census 0 20 1 1 0 nan - -
|
||||
census 0 17 1 1 0 2.7 1 26
|
||||
census 0 25 2 1 1 nan - - a=1;
|
||||
census 0 23 1 1 0 nan - -
|
||||
census 0 18 1 1 0 3.8 12 7
|
||||
census 0 24 1 1 0 2.8 14 19
|
||||
census 0 19 1 1 0 3.0 10 17
|
||||
census 0 27 1 1 0 nan - -
|
||||
census 0 16 1 1 0 nan - -
|
||||
census 0 28 1 1 0 nan - -
|
||||
census 0 22 1 1 0 nan - -
|
||||
census 0 29 1 1 0 3.1 9 18
|
||||
census 0 26 1 1 0 3.3 1 7
|
||||
census 0 30 1 1 0 2.6 3 7
|
||||
census 0 21 2 1 1 3.0 4 26 reg64=1;
|
||||
census 0 31 2 1 1 nan - - b=1;
|
||||
census 0 37 1 1 0 3.4 8 10
|
||||
census 0 34 1 1 0 nan - -
|
||||
census 0 32 1 1 0 nan - -
|
||||
census 0 35 1 1 0 3.3 15 16
|
||||
census 0 36 2 1 1 2.9 14 6 b=1;
|
||||
census 0 38 1 1 0 3.1 7 13
|
||||
census 0 33 1 1 0 3.3 0 6
|
||||
census 0 39 1 1 0 nan - -
|
||||
census 0 43 1 1 0 nan - -
|
||||
census 0 41 1 1 0 nan - -
|
||||
census 0 45 1 1 0 nan - -
|
||||
census 0 42 2 1 1 nan - - a'=1;
|
||||
census 0 46 1 1 0 nan - -
|
||||
census 0 44 2 1 1 3.0 1 1 a'=1;
|
||||
census 0 47 1 1 0 nan - -
|
||||
census 0 40 1 1 0 2.6 13 22
|
||||
census 0 52 1 1 0 nan - -
|
||||
census 0 50 1 1 0 nan - -
|
||||
census 0 49 1 1 0 2.8 6 1
|
||||
census 0 48 1 1 0 2.9 5 2
|
||||
census 0 55 1 1 0 3.4 8 9
|
||||
census 0 53 2 1 1 3.4 11 21 b=1;
|
||||
census 0 54 1 1 0 3.4 3 2
|
||||
census 0 56 2 1 1 nan - - a'=1;
|
||||
census 0 51 2 1 1 3.5 15 3 reg64=1;
|
||||
census 0 60 1 1 0 nan - -
|
||||
census 0 58 1 1 0 nan - -
|
||||
census 0 57 1 1 0 nan - -
|
||||
census 0 61 1 1 0 nan - -
|
||||
census 0 59 1 1 0 3.0 3 16
|
||||
census 0 62 1 1 0 nan - -
|
||||
census 0 64 1 1 0 2.9 12 26
|
||||
census 0 63 1 1 0 3.5 0 19
|
||||
census 0 66 1 1 0 3.0 15 8
|
||||
census 0 67 2 1 1 4.0 1 2 a=1;
|
||||
census 0 68 1 1 0 3.0 11 7
|
||||
census 0 69 1 1 0 nan - -
|
||||
census 0 70 1 1 0 3.3 6 6
|
||||
census 0 72 1 1 0 3.2 11 5
|
||||
census 0 76 1 1 0 nan - -
|
||||
census 0 74 1 1 0 2.9 8 21
|
||||
census 0 71 2 1 1 nan - - a=1;
|
||||
census 0 75 1 1 0 nan - -
|
||||
census 0 65 1 1 0 nan - -
|
||||
census 0 77 1 1 0 3.2 6 14
|
||||
census 0 78 1 1 0 3.5 3 25
|
||||
census 0 73 1 1 0 nan - -
|
||||
census 0 80 2 1 1 nan - - a'=1;
|
||||
census 0 81 1 1 0 nan - -
|
||||
census 0 79 1 1 0 3.4 13 24
|
||||
census 0 82 1 1 0 3.8 8 0
|
||||
census 0 83 1 1 0 3.3 3 24
|
||||
census 0 84 1 1 0 nan - -
|
||||
census 0 85 1 1 0 3.4 4 25
|
||||
census 0 86 1 1 0 nan - -
|
||||
census 0 88 1 1 0 nan - -
|
||||
census 0 87 2 1 1 nan - - a'=1;
|
||||
census 0 91 1 1 0 2.7 1 23
|
||||
census 0 89 1 1 0 nan - -
|
||||
census 0 92 1 1 0 3.2 3 10
|
||||
census 0 90 2 1 1 3.1 7 8 b=1;
|
||||
census 0 94 1 1 0 3.5 1 15
|
||||
census 0 93 1 1 0 nan - -
|
||||
census 0 95 2 1 1 2.9 4 7 a'=1;
|
||||
census 0 97 1 1 0 3.2 6 10
|
||||
census 0 96 1 1 0 3.6 1 26
|
||||
census 0 99 1 1 0 3.3 1 23
|
||||
census 0 101 1 1 0 nan - -
|
||||
census 0 103 1 1 0 nan - -
|
||||
census 0 104 1 1 0 nan - -
|
||||
census 0 102 1 1 0 2.9 3 14
|
||||
census 0 98 1 1 0 nan - -
|
||||
census 0 100 1 1 0 3.9 10 2
|
||||
census 0 105 1 1 0 nan - -
|
||||
census 0 106 1 1 0 nan - -
|
||||
census 0 107 1 1 0 3.0 15 10
|
||||
census 0 108 1 1 0 2.8 9 25
|
||||
census 0 109 1 1 0 nan - -
|
||||
census 0 113 1 1 0 nan - -
|
||||
census 0 112 1 1 0 nan - -
|
||||
census 0 111 1 1 0 3.3 13 8
|
||||
census 0 110 1 1 0 3.2 9 11
|
||||
census 0 114 1 1 0 nan - -
|
||||
census 0 115 2 1 1 nan - - b=1;
|
||||
census 0 116 1 1 0 3.4 12 10
|
||||
census 0 118 1 1 0 3.0 4 20
|
||||
census 0 117 1 1 0 nan - -
|
||||
census 0 120 1 1 0 3.0 11 0
|
||||
census 0 119 1 1 0 nan - -
|
||||
census 0 121 1 1 0 3.0 3 5
|
||||
census 0 122 1 1 0 2.8 0 12
|
||||
census 0 126 1 1 0 3.0 0 19
|
||||
census 0 127 2 1 1 nan - - a=1;
|
||||
census 0 128 1 1 0 3.4 5 6
|
||||
census 0 129 2 1 1 2.9 11 22 a'=1;
|
||||
census 0 124 1 1 0 nan - -
|
||||
census 0 130 1 1 0 nan - -
|
||||
census 0 131 1 1 0 nan - -
|
||||
census 0 132 1 1 0 nan - -
|
||||
census 0 133 1 1 0 nan - -
|
||||
census 0 123 1 1 0 3.4 13 21
|
||||
census 0 134 1 1 0 3.3 3 12
|
||||
census 0 125 2 1 1 3.3 14 6 b=1;
|
||||
census 0 135 1 1 0 nan - -
|
||||
census 0 136 1 1 0 nan - -
|
||||
census 0 137 1 1 0 nan - -
|
||||
census 0 138 1 1 0 3.0 5 13
|
||||
census 0 140 2 1 1 nan - - a'=1;
|
||||
census 0 143 1 1 0 nan - -
|
||||
census 0 141 1 1 0 3.3 9 23
|
||||
census 0 139 1 1 0 nan - -
|
||||
census 0 142 2 1 1 2.8 10 22 a'=1;
|
||||
census 0 144 1 1 0 nan - -
|
||||
census 0 145 1 1 0 3.4 2 23
|
||||
census 0 147 1 1 0 3.2 2 16
|
||||
census 0 146 1 1 0 3.4 1 5
|
||||
census 0 151 1 1 0 2.5 2 6
|
||||
census 0 150 1 1 0 3.9 14 11
|
||||
census 0 148 1 1 0 nan - -
|
||||
census 0 152 1 1 0 2.7 9 4
|
||||
census 0 153 1 1 0 3.0 13 13
|
||||
census 0 154 2 1 1 nan - - a'=1;
|
||||
census 0 155 1 1 0 nan - -
|
||||
census 0 157 1 1 0 nan - -
|
||||
census 0 158 1 1 0 nan - -
|
||||
census 0 159 1 1 0 3.8 15 23
|
||||
census 0 156 1 1 0 3.4 1 25
|
||||
census 0 149 1 1 0 nan - -
|
||||
census 0 160 1 1 0 nan - -
|
||||
census 0 162 1 1 0 2.5 13 15
|
||||
census 0 163 2 1 1 3.4 1 20 a'=1;
|
||||
census 0 166 1 1 0 nan - -
|
||||
census 0 165 1 1 0 nan - -
|
||||
census 0 164 1 1 0 nan - -
|
||||
census 0 167 3 1 2 nan - - a'=2;
|
||||
census 0 168 1 1 0 2.6 7 10
|
||||
census 0 170 1 1 0 3.3 14 2
|
||||
census 0 173 3 1 2 2.7 9 6 a'=2;
|
||||
census 0 171 1 1 0 3.4 3 1
|
||||
census 0 172 2 1 1 3.5 3 1 a'=1;
|
||||
census 0 161 1 1 0 nan - -
|
||||
census 0 174 1 1 0 nan - -
|
||||
census 0 175 1 1 0 nan - -
|
||||
census 0 176 1 1 0 nan - -
|
||||
census 0 169 2 1 1 nan - - a'=1;
|
||||
census 0 177 1 1 0 nan - -
|
||||
census 0 180 1 1 0 nan - -
|
||||
census 0 178 1 1 0 nan - -
|
||||
census 0 179 1 1 0 nan - -
|
||||
census 0 182 1 1 0 3.1 14 3
|
||||
census 0 183 1 1 0 nan - -
|
||||
census 0 181 1 1 0 3.4 15 23
|
||||
census 0 184 2 1 1 3.5 12 10 a'=1;
|
||||
census 0 186 2 1 1 2.8 4 24 a'=1;
|
||||
census 0 187 1 1 0 nan - -
|
||||
census 0 185 1 1 0 nan - -
|
||||
census 0 189 1 1 0 2.8 14 12
|
||||
census 0 190 2 1 1 nan - - a'=1;
|
||||
census 0 192 1 1 0 nan - -
|
||||
census 0 193 1 1 0 2.8 4 4
|
||||
census 0 195 1 1 0 nan - -
|
||||
census 0 194 1 1 0 nan - -
|
||||
census 0 196 1 1 0 3.3 14 19
|
||||
census 0 191 1 1 0 nan - -
|
||||
census 0 188 1 1 0 3.5 15 15
|
||||
census 0 197 1 1 0 2.8 7 0
|
||||
census 0 198 1 1 0 3.0 12 9
|
||||
census 0 200 1 1 0 2.8 11 1
|
||||
census 0 199 1 1 0 nan - -
|
||||
census 0 202 1 1 0 2.6 8 0
|
||||
census 0 201 1 1 0 3.2 3 25
|
||||
census 0 203 1 1 0 nan - -
|
||||
census 0 204 1 1 0 nan - -
|
||||
census 0 205 1 1 0 2.6 5 0
|
||||
census 0 207 1 1 0 nan - -
|
||||
census 0 206 2 1 1 3.2 12 25 a'=1;
|
||||
census 0 208 1 1 0 2.5 8 3
|
||||
census 0 209 1 1 0 3.2 5 17
|
||||
census 0 210 1 1 0 2.8 9 18
|
||||
census 0 211 1 1 0 nan - -
|
||||
census 0 212 1 1 0 nan - -
|
||||
census 0 213 1 1 0 3.1 9 6
|
||||
census 0 215 1 1 0 nan - -
|
||||
census 0 216 1 1 0 nan - -
|
||||
census 0 218 2 1 1 3.3 8 1 a'=1;
|
||||
census 0 219 1 1 0 nan - -
|
||||
census 0 220 1 1 0 nan - -
|
||||
census 0 217 1 1 0 3.4 5 11
|
||||
census 0 221 1 1 0 nan - -
|
||||
census 0 222 1 1 0 nan - -
|
||||
census 0 214 1 1 0 3.3 5 21
|
||||
census 0 223 1 1 0 nan - -
|
||||
census 0 225 1 1 0 2.8 0 15
|
||||
census 0 224 1 1 0 3.3 3 4
|
||||
census 0 226 1 1 0 3.1 7 16
|
||||
census 0 228 1 1 0 nan - -
|
||||
census 0 229 1 1 0 nan - -
|
||||
census 0 227 1 1 0 3.5 12 25
|
||||
census 0 234 1 1 0 nan - -
|
||||
census 0 232 1 1 0 nan - -
|
||||
census 0 235 1 1 0 nan - -
|
||||
census 0 237 1 1 0 nan - -
|
||||
census 0 236 1 1 0 3.1 0 18
|
||||
census 0 238 1 1 0 3.2 15 3
|
||||
census 0 239 1 1 0 nan - -
|
||||
census 0 230 1 1 0 3.5 4 0
|
||||
census 0 240 2 1 1 nan - - b=1;
|
||||
census 0 233 2 1 1 2.9 11 20 c=1;
|
||||
census 0 241 1 1 0 3.2 7 17
|
||||
census 0 243 1 1 0 3.1 10 18
|
||||
census 0 242 1 1 0 nan - -
|
||||
census 0 231 1 1 0 nan - -
|
||||
census 0 245 1 1 0 nan - -
|
||||
census 0 247 1 1 0 2.8 1 4
|
||||
census 0 246 2 1 1 2.8 10 23 a'=1;
|
||||
census 0 244 2 1 1 nan - - reg64=1;
|
||||
census 0 248 1 1 0 2.7 11 8
|
||||
census 0 249 1 1 0 3.4 15 15
|
||||
census 0 251 1 1 0 nan - -
|
||||
census 0 250 1 1 0 3.4 15 24
|
||||
census 0 252 1 1 0 3.2 7 18
|
||||
census 0 253 1 1 0 3.4 6 10
|
||||
census 0 254 1 1 0 3.7 10 20
|
||||
census 0 255 1 1 0 3.1 8 20
|
||||
# end 2026-10-08T20:52:19Z rows=257
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
|
@ -0,0 +1 @@
|
|||
# pack cs-era-block class mx8+sh256x27+state+reg64c+fold+rw epoch af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3 day 69676e65756d2d6461792ffa50000000000000 era af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3 state /srv/builds/v6-census/packs/node1-state.igsd1 day-index 20730 era-widths 4 bin f4e93766d5a3dc46 f8 host igneum-build-4 start 2026-10-08T20:50:55Z
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
seed "igneum-epoch/af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3" generator v6 class mx8-era93a14ac6+sh256x27+state+reg64c+fold+rw attempt 0 program id 442a1691b3e3507f seed words 9c8caa3d 83537296 f21169a4 12d4d157 66e0ce33 cc049080 8579c352 4c6e4ac9
|
||||
op mix load=16 add=10 shfl=8 rotl=5 rotr=5 xor=5 mad=4 mul=4 sub=4 mulhi=3 loads/hash 128 bytes/hash 512
|
||||
era 93a14ac6 (igneum-era/0/af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3): width 4 B, stride mul 0x5ea34e0b rot 12, interleave [10, 11, 13, 14], windows (site:shrink:offset) 1:0:0 15:1:0 27:2:1 28:0:0 30:1:1 32:1:0 33:2:3 42:0:0 48:1:0 52:0:0 55:2:2 56:0:0 58:1:1 59:0:0 60:1:0 62:1:0
|
||||
0: mad dst=7 src=3 src2=3 imm=0xd095f540 imm2=0xd3789b38 rot=19 bit=4 mask=4
|
||||
1: load dst=1 src=7 src2=5 imm=0x390bbbd7 imm2=0x1b44071a rot=5 bit=13 mask=16
|
||||
2: rotl dst=0 src=6 src2=7 imm=0xcd1e3e94 imm2=0xf0479df0 rot=29 bit=10 mask=2
|
||||
3: shfl dst=5 src=6 src2=4 imm=0x78c099f8 imm2=0xc6d6c6bc rot=25 bit=21 mask=1
|
||||
4: mulhi dst=5 src=3 src2=1 imm=0x2e8aa8d1 imm2=0x446c336a rot=23 bit=31 mask=16
|
||||
5: rotl dst=7 src=1 src2=0 imm=0x46701a4a imm2=0xc2255717 rot=27 bit=20 mask=8
|
||||
6: mad dst=4 src=2 src2=0 imm=0x487da55c imm2=0xf4675ef7 rot=26 bit=1 mask=8
|
||||
7: rotl dst=2 src=6 src2=4 imm=0x74fdbac4 imm2=0x30e49db4 rot=11 bit=9 mask=16
|
||||
8: mul dst=6 src=0 src2=4 imm=0x69e895ee imm2=0x66ebcedd rot=24 bit=11 mask=16
|
||||
9: shfl dst=6 src=1 src2=7 imm=0x1510cbd0 imm2=0x607acada rot=4 bit=3 mask=2
|
||||
10: add dst=0 src=2 src2=2 imm=0x33a68b0c imm2=0xffb7f024 rot=27 bit=1 mask=4
|
||||
11: xor dst=0 src=2 src2=4 imm=0x61b96f54 imm2=0x7d5468b0 rot=30 bit=28 mask=8
|
||||
12: sub dst=7 src=4 src2=1 imm=0x39217118 imm2=0x248e3f9b rot=29 bit=7 mask=16
|
||||
13: shfl dst=1 src=4 src2=2 imm=0x6c12c43b imm2=0x6b60595d rot=20 bit=23 mask=8
|
||||
14: xor dst=1 src=0 src2=0 imm=0x030181c6 imm2=0x52fbbc27 rot=1 bit=28 mask=4
|
||||
15: load dst=5 src=0 src2=2 imm=0x5b20e3f6 imm2=0xa84ab3b3 rot=24 bit=31 mask=8
|
||||
16: xor dst=5 src=4 src2=4 imm=0x6fc104e8 imm2=0x1a522a5c rot=27 bit=8 mask=8
|
||||
17: shfl dst=6 src=7 src2=6 imm=0x5f5b071a imm2=0x39dc91da rot=16 bit=6 mask=16
|
||||
18: rotr dst=2 src=7 src2=0 imm=0x07b3a28c imm2=0x33193f0c rot=18 bit=3 mask=1
|
||||
19: add dst=4 src=1 src2=5 imm=0x0229d185 imm2=0x51cb8f70 rot=29 bit=26 mask=1
|
||||
20: add dst=4 src=7 src2=1 imm=0xc39836f7 imm2=0x0c001b55 rot=8 bit=7 mask=16
|
||||
21: add dst=0 src=3 src2=4 imm=0xb7d06b34 imm2=0x1ae7a0ac rot=9 bit=3 mask=4
|
||||
22: mad dst=2 src=6 src2=7 imm=0x0978477e imm2=0x2fec3e13 rot=21 bit=3 mask=16
|
||||
23: add dst=3 src=5 src2=7 imm=0x95cba5dd imm2=0x22934c58 rot=8 bit=19 mask=2
|
||||
24: mulhi dst=5 src=3 src2=0 imm=0x14b79a1b imm2=0xccae3d33 rot=5 bit=15 mask=16
|
||||
25: xor dst=0 src=3 src2=7 imm=0x22f74d7f imm2=0x782f1722 rot=18 bit=25 mask=4
|
||||
26: mul dst=6 src=3 src2=6 imm=0xf774717f imm2=0x3a1a2c3a rot=28 bit=25 mask=16
|
||||
27: load dst=3 src=7 src2=2 imm=0xf0d88d7d imm2=0x0fc8051c rot=14 bit=1 mask=16
|
||||
28: load dst=3 src=0 src2=5 imm=0xac8eb588 imm2=0x57844c72 rot=12 bit=8 mask=2
|
||||
29: rotr dst=6 src=7 src2=1 imm=0x89b07c78 imm2=0x90c747d7 rot=13 bit=30 mask=1
|
||||
30: load dst=1 src=4 src2=7 imm=0xdd34b81d imm2=0x96e5cb94 rot=26 bit=16 mask=1
|
||||
31: add dst=1 src=2 src2=3 imm=0x2fa2e27a imm2=0xbf8507da rot=27 bit=5 mask=1
|
||||
32: load dst=2 src=1 src2=1 imm=0x4df1d479 imm2=0xea698909 rot=29 bit=12 mask=4
|
||||
33: load dst=3 src=2 src2=1 imm=0xaa35122f imm2=0x01516545 rot=12 bit=18 mask=1
|
||||
34: mul dst=3 src=5 src2=7 imm=0x6a941ac2 imm2=0xb56c91d9 rot=24 bit=16 mask=1
|
||||
35: rotl dst=1 src=6 src2=7 imm=0xe8aa4cfe imm2=0x0d359401 rot=2 bit=3 mask=2
|
||||
36: shfl dst=1 src=5 src2=1 imm=0xd090168f imm2=0x3ea71d89 rot=9 bit=3 mask=4
|
||||
37: sub dst=0 src=4 src2=1 imm=0xdbda427b imm2=0xd9607488 rot=5 bit=12 mask=2
|
||||
38: rotr dst=4 src=2 src2=7 imm=0xe3e3804c imm2=0xccdc9668 rot=27 bit=13 mask=16
|
||||
39: mulhi dst=4 src=1 src2=2 imm=0x5d14fe55 imm2=0xb6db1d85 rot=17 bit=18 mask=4
|
||||
40: rotr dst=0 src=1 src2=4 imm=0xc77a2d1f imm2=0x5a85c407 rot=10 bit=31 mask=1
|
||||
41: add dst=2 src=3 src2=1 imm=0xfe28f51d imm2=0xf439f8e7 rot=5 bit=8 mask=2
|
||||
42: load dst=1 src=2 src2=5 imm=0xe1b6fb46 imm2=0x23bb6ba4 rot=29 bit=22 mask=1
|
||||
43: xor dst=7 src=5 src2=6 imm=0x34988c9d imm2=0xf8c6c4a8 rot=2 bit=21 mask=8
|
||||
44: shfl dst=6 src=2 src2=2 imm=0x14f4d589 imm2=0x868d3c75 rot=29 bit=31 mask=8
|
||||
45: mul dst=1 src=4 src2=1 imm=0x081dddbd imm2=0xc8e4de44 rot=23 bit=11 mask=16
|
||||
46: rotl dst=0 src=6 src2=2 imm=0xaec2cb92 imm2=0x03157ee4 rot=14 bit=5 mask=16
|
||||
47: add dst=1 src=3 src2=7 imm=0xf1719bbd imm2=0x14bb2234 rot=24 bit=7 mask=16
|
||||
48: load dst=1 src=6 src2=6 imm=0x30e39813 imm2=0x9ce47150 rot=22 bit=10 mask=1
|
||||
49: sub dst=5 src=1 src2=7 imm=0xaabdf6d2 imm2=0x0688a461 rot=13 bit=28 mask=2
|
||||
50: add dst=2 src=3 src2=6 imm=0xb129b2b4 imm2=0x4611fe29 rot=3 bit=14 mask=16
|
||||
51: sub dst=0 src=2 src2=1 imm=0xfe651d02 imm2=0x7c1929a9 rot=22 bit=31 mask=4
|
||||
52: load dst=4 src=0 src2=4 imm=0xf906070a imm2=0xf301cff4 rot=5 bit=25 mask=1
|
||||
53: mad dst=3 src=1 src2=4 imm=0xab213c09 imm2=0xf6d6f3fa rot=16 bit=28 mask=1
|
||||
54: shfl dst=4 src=1 src2=7 imm=0xf6dafbae imm2=0xdbfc32c7 rot=12 bit=1 mask=16
|
||||
55: load dst=6 src=5 src2=5 imm=0x881eaf9c imm2=0x7c50f5c8 rot=25 bit=22 mask=16
|
||||
56: load dst=2 src=4 src2=1 imm=0x899bf6e0 imm2=0xbde5b6ee rot=24 bit=10 mask=8
|
||||
57: shfl dst=5 src=7 src2=6 imm=0xea9c50d2 imm2=0xd2a8c99b rot=12 bit=28 mask=1
|
||||
58: load dst=1 src=5 src2=3 imm=0xad4912ca imm2=0x546d00b2 rot=7 bit=1 mask=1
|
||||
59: load dst=2 src=7 src2=1 imm=0x37cea58f imm2=0x13e31ff0 rot=21 bit=21 mask=16
|
||||
60: load dst=2 src=1 src2=2 imm=0x33f9a95e imm2=0xda1c8a2e rot=22 bit=28 mask=8
|
||||
61: add dst=3 src=2 src2=2 imm=0x0a051d32 imm2=0xe9ed866d rot=30 bit=1 mask=4
|
||||
62: load dst=0 src=2 src2=2 imm=0xab1dd54b imm2=0xc9fcaae2 rot=9 bit=2 mask=1
|
||||
63: rotr dst=5 src=0 src2=5 imm=0x1f0279bd imm2=0x223e7b9c rot=11 bit=3 mask=16
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
program id 442a1691b3e3507f class mx8-era93a14ac6+sh256x27+state+reg64c+fold+rw attempt 0 generator v6
|
||||
rule: ACCEPTED, distinct 128.000 per hash, saturated 0, bias max 66
|
||||
site instr win off width distinct ratio under_c2 under_c3 bucket_ratio bucket_z bucket_id bit_z bit top_count
|
||||
0 1 0 0 1 1046493 0.99997 0 0 2.250 5.00 43706 -1.72 14 3
|
||||
1 15 1 0 1 1044395 0.99992 0 0 1.688 3.89 10447 2.09 18 3
|
||||
2 27 2 1 1 1040460 1.00007 0 0 1.531 4.25 21546 2.38 5 3
|
||||
3 28 0 0 1 1046585 1.00005 0 0 2.062 4.25 11544 -2.58 22 3
|
||||
4 30 1 1 1 1044506 1.00002 0 0 1.844 4.77 41807 2.26 20 3
|
||||
5 32 1 0 1 1044487 1.00001 0 0 1.844 4.77 26116 1.91 0 3
|
||||
6 33 2 3 1 1040412 1.00003 0 0 1.500 4.00 49321 -1.51 23 3
|
||||
7 42 0 0 1 1046488 0.99996 0 0 2.125 4.50 9835 -2.25 0 3
|
||||
8 48 1 0 1 1044552 1.00007 0 0 1.812 4.60 17972 -1.87 6 3
|
||||
9 52 0 0 1 1046470 0.99994 0 0 2.188 4.75 49022 1.54 17 3
|
||||
10 55 2 2 1 1040461 1.00007 0 0 1.500 4.00 35424 1.72 24 3
|
||||
11 56 0 0 1 1046571 1.00004 0 0 2.312 5.25 12278 -1.84 2 3
|
||||
12 58 1 1 1 1044543 1.00006 0 0 1.750 4.24 33127 -2.12 16 3
|
||||
13 59 0 0 1 1046537 1.00001 0 0 2.125 4.50 1374 2.91 3 3
|
||||
14 60 1 0 1 1044566 1.00008 0 0 1.812 4.60 5226 -2.44 19 3
|
||||
15 62 1 0 1 1044430 0.99995 0 0 1.906 5.13 2829 -1.92 6 3
|
||||
summary: sites 16, min ratio 0.99992, under 0.98: 0, under 0.995: 0, bucket z max 5.25, bit z max 2.91, sites over 6 sigma 0, 3.9 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,259 @@
|
|||
# census class mx8+sh256x27+state+reg64c+fold+rw eras [0] seeds 256 era-widths 4 state /srv/builds/v6-census/packs/node1-state.igsd1 erahex edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 weights base bittest off bin f4e93766d5a3dc46 start 2026-10-08T20:50:55Z host igneum-build-4 threads 16
|
||||
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
|
||||
census 0 4 1 1 0 2.9 15 4
|
||||
census 0 6 1 1 0 nan - -
|
||||
census 0 14 1 1 0 3.5 12 21
|
||||
census 0 5 1 1 0 nan - -
|
||||
census 0 10 1 1 0 3.0 0 2
|
||||
census 0 9 1 1 0 2.8 6 25
|
||||
census 0 0 1 1 0 nan - -
|
||||
census 0 20 1 1 0 3.2 10 7
|
||||
census 0 3 1 1 0 2.8 14 3
|
||||
census 0 2 1 1 0 3.5 3 15
|
||||
census 0 7 1 1 0 3.4 1 23
|
||||
census 0 18 1 1 0 nan - -
|
||||
census 0 15 1 1 0 nan - -
|
||||
census 0 1 1 1 0 nan - -
|
||||
census 0 12 1 1 0 3.2 9 13
|
||||
census 0 21 2 1 1 3.5 0 18 reg64=1;
|
||||
census 0 8 1 1 0 2.8 9 12
|
||||
census 0 13 1 1 0 2.8 12 13
|
||||
census 0 19 1 1 0 nan - -
|
||||
census 0 11 1 1 0 nan - -
|
||||
census 0 16 1 1 0 nan - -
|
||||
census 0 22 1 1 0 3.1 6 11
|
||||
census 0 30 1 1 0 nan - -
|
||||
census 0 17 1 1 0 nan - -
|
||||
census 0 23 1 1 0 nan - -
|
||||
census 0 26 1 1 0 3.2 7 9
|
||||
census 0 32 1 1 0 4.4 10 21
|
||||
census 0 29 1 1 0 nan - -
|
||||
census 0 34 1 1 0 3.0 12 1
|
||||
census 0 27 1 1 0 3.0 9 8
|
||||
census 0 25 2 1 1 nan - - a=1;
|
||||
census 0 24 1 1 0 3.7 13 12
|
||||
census 0 33 1 1 0 nan - -
|
||||
census 0 36 2 1 1 3.2 14 3 b=1;
|
||||
census 0 35 1 1 0 4.2 12 12
|
||||
census 0 31 2 1 1 3.2 1 5 b=1;
|
||||
census 0 39 1 1 0 nan - -
|
||||
census 0 38 1 1 0 nan - -
|
||||
census 0 42 2 1 1 nan - - a'=1;
|
||||
census 0 37 1 1 0 3.1 13 8
|
||||
census 0 28 1 1 0 nan - -
|
||||
census 0 41 1 1 0 nan - -
|
||||
census 0 43 1 1 0 nan - -
|
||||
census 0 44 2 1 1 nan - - a'=1;
|
||||
census 0 40 1 1 0 2.8 9 25
|
||||
census 0 50 1 1 0 3.3 9 9
|
||||
census 0 53 2 1 1 nan - - b=1;
|
||||
census 0 45 1 1 0 nan - -
|
||||
census 0 49 1 1 0 nan - -
|
||||
census 0 46 1 1 0 4.4 2 3
|
||||
census 0 48 1 1 0 nan - -
|
||||
census 0 51 2 1 1 nan - - reg64=1;
|
||||
census 0 57 1 1 0 3.5 6 24
|
||||
census 0 47 1 1 0 3.1 4 16
|
||||
census 0 58 1 1 0 3.0 8 17
|
||||
census 0 59 1 1 0 nan - -
|
||||
census 0 62 1 1 0 3.2 9 19
|
||||
census 0 55 1 1 0 nan - -
|
||||
census 0 52 1 1 0 nan - -
|
||||
census 0 60 1 1 0 nan - -
|
||||
census 0 61 1 1 0 3.3 3 11
|
||||
census 0 56 2 1 1 2.8 2 9 a'=1;
|
||||
census 0 54 1 1 0 3.5 3 13
|
||||
census 0 66 1 1 0 3.4 6 11
|
||||
census 0 64 1 1 0 3.6 9 8
|
||||
census 0 65 1 1 0 nan - -
|
||||
census 0 70 1 1 0 nan - -
|
||||
census 0 67 2 1 1 nan - - a=1;
|
||||
census 0 63 1 1 0 nan - -
|
||||
census 0 78 1 1 0 nan - -
|
||||
census 0 79 1 1 0 nan - -
|
||||
census 0 76 1 1 0 3.2 2 23
|
||||
census 0 81 1 1 0 nan - -
|
||||
census 0 80 2 1 1 nan - - a'=1;
|
||||
census 0 68 1 1 0 nan - -
|
||||
census 0 69 1 1 0 3.2 14 25
|
||||
census 0 71 2 1 1 2.8 7 17 a=1;
|
||||
census 0 72 1 1 0 nan - -
|
||||
census 0 74 1 1 0 3.0 4 6
|
||||
census 0 82 1 1 0 nan - -
|
||||
census 0 73 1 1 0 nan - -
|
||||
census 0 86 1 1 0 3.0 7 19
|
||||
census 0 75 1 1 0 2.9 4 16
|
||||
census 0 77 1 1 0 nan - -
|
||||
census 0 88 1 1 0 nan - -
|
||||
census 0 85 1 1 0 3.1 14 24
|
||||
census 0 83 1 1 0 nan - -
|
||||
census 0 92 1 1 0 nan - -
|
||||
census 0 89 1 1 0 nan - -
|
||||
census 0 87 2 1 1 nan - - a'=1;
|
||||
census 0 84 1 1 0 nan - -
|
||||
census 0 90 2 1 1 nan - - b=1;
|
||||
census 0 94 1 1 0 nan - -
|
||||
census 0 93 1 1 0 3.0 7 20
|
||||
census 0 91 1 1 0 3.2 13 8
|
||||
census 0 95 2 1 1 3.0 13 12 a'=1;
|
||||
census 0 97 1 1 0 nan - -
|
||||
census 0 96 1 1 0 3.1 8 7
|
||||
census 0 101 1 1 0 nan - -
|
||||
census 0 98 1 1 0 nan - -
|
||||
census 0 100 1 1 0 nan - -
|
||||
census 0 99 1 1 0 3.1 2 23
|
||||
census 0 106 1 1 0 nan - -
|
||||
census 0 102 1 1 0 3.5 0 13
|
||||
census 0 105 1 1 0 nan - -
|
||||
census 0 103 1 1 0 nan - -
|
||||
census 0 107 1 1 0 nan - -
|
||||
census 0 104 1 1 0 nan - -
|
||||
census 0 108 1 1 0 nan - -
|
||||
census 0 114 1 1 0 2.9 7 8
|
||||
census 0 112 1 1 0 3.3 5 4
|
||||
census 0 109 1 1 0 nan - -
|
||||
census 0 120 1 1 0 nan - -
|
||||
census 0 113 1 1 0 nan - -
|
||||
census 0 111 1 1 0 3.3 3 27
|
||||
census 0 116 1 1 0 3.1 1 5
|
||||
census 0 119 1 1 0 3.1 3 18
|
||||
census 0 110 1 1 0 3.4 7 15
|
||||
census 0 115 2 1 1 nan - - b=1;
|
||||
census 0 117 1 1 0 nan - -
|
||||
census 0 124 1 1 0 3.6 0 15
|
||||
census 0 118 1 1 0 nan - -
|
||||
census 0 121 1 1 0 nan - -
|
||||
census 0 126 1 1 0 4.3 8 3
|
||||
census 0 129 2 1 1 3.2 6 6 a'=1;
|
||||
census 0 123 1 1 0 nan - -
|
||||
census 0 122 1 1 0 nan - -
|
||||
census 0 125 2 1 1 3.3 1 6 b=1;
|
||||
census 0 127 2 1 1 nan - - a=1;
|
||||
census 0 128 1 1 0 nan - -
|
||||
census 0 134 1 1 0 3.7 11 4
|
||||
census 0 135 1 1 0 3.0 5 15
|
||||
census 0 131 1 1 0 3.3 5 21
|
||||
census 0 130 1 1 0 3.2 11 8
|
||||
census 0 138 1 1 0 2.7 12 19
|
||||
census 0 133 1 1 0 2.8 10 0
|
||||
census 0 132 1 1 0 3.4 15 1
|
||||
census 0 136 1 1 0 nan - -
|
||||
census 0 140 2 1 1 nan - - a'=1;
|
||||
census 0 137 1 1 0 nan - -
|
||||
census 0 143 1 1 0 nan - -
|
||||
census 0 139 1 1 0 3.4 11 3
|
||||
census 0 146 1 1 0 3.4 15 22
|
||||
census 0 142 2 1 1 4.0 6 0 a'=1;
|
||||
census 0 141 1 1 0 nan - -
|
||||
census 0 150 1 1 0 nan - -
|
||||
census 0 149 1 1 0 nan - -
|
||||
census 0 144 1 1 0 3.7 3 22
|
||||
census 0 147 1 1 0 nan - -
|
||||
census 0 148 1 1 0 3.7 10 0
|
||||
census 0 145 1 1 0 2.7 14 24
|
||||
census 0 152 1 1 0 3.1 11 25
|
||||
census 0 155 1 1 0 nan - -
|
||||
census 0 151 1 1 0 nan - -
|
||||
census 0 157 1 1 0 3.5 1 16
|
||||
census 0 162 1 1 0 3.1 2 16
|
||||
census 0 154 2 1 1 3.3 12 17 a'=1;
|
||||
census 0 156 1 1 0 nan - -
|
||||
census 0 160 1 1 0 2.5 1 17
|
||||
census 0 153 1 1 0 nan - -
|
||||
census 0 163 2 1 1 3.7 0 19 a'=1;
|
||||
census 0 161 1 1 0 nan - -
|
||||
census 0 166 1 1 0 nan - -
|
||||
census 0 158 1 1 0 3.1 13 1
|
||||
census 0 159 1 1 0 nan - -
|
||||
census 0 169 2 1 1 nan - - a'=1;
|
||||
census 0 171 1 1 0 nan - -
|
||||
census 0 170 1 1 0 nan - -
|
||||
census 0 168 1 1 0 3.6 6 25
|
||||
census 0 176 1 1 0 nan - -
|
||||
census 0 177 1 1 0 3.1 14 0
|
||||
census 0 165 1 1 0 3.0 11 5
|
||||
census 0 164 1 1 0 3.8 7 25
|
||||
census 0 174 1 1 0 nan - -
|
||||
census 0 173 3 1 2 nan - - a'=2;
|
||||
census 0 167 3 1 2 3.4 2 14 a'=2;
|
||||
census 0 180 1 1 0 3.5 3 19
|
||||
census 0 178 1 1 0 4.0 14 14
|
||||
census 0 172 2 1 1 3.0 15 16 a'=1;
|
||||
census 0 184 2 1 1 3.0 2 25 a'=1;
|
||||
census 0 175 1 1 0 2.9 1 24
|
||||
census 0 181 1 1 0 3.1 1 14
|
||||
census 0 185 1 1 0 nan - -
|
||||
census 0 186 2 1 1 nan - - a'=1;
|
||||
census 0 182 1 1 0 nan - -
|
||||
census 0 179 1 1 0 3.1 10 14
|
||||
census 0 190 2 1 1 3.3 14 13 a'=1;
|
||||
census 0 183 1 1 0 nan - -
|
||||
census 0 187 1 1 0 3.6 4 14
|
||||
census 0 191 1 1 0 nan - -
|
||||
census 0 193 1 1 0 3.5 4 23
|
||||
census 0 189 1 1 0 nan - -
|
||||
census 0 188 1 1 0 3.2 0 12
|
||||
census 0 192 1 1 0 4.1 3 23
|
||||
census 0 194 1 1 0 3.7 2 6
|
||||
census 0 198 1 1 0 nan - -
|
||||
census 0 196 1 1 0 3.0 3 21
|
||||
census 0 199 1 1 0 2.9 14 0
|
||||
census 0 201 1 1 0 nan - -
|
||||
census 0 195 1 1 0 2.9 2 10
|
||||
census 0 200 1 1 0 3.1 5 21
|
||||
census 0 197 1 1 0 nan - -
|
||||
census 0 205 1 1 0 3.1 7 7
|
||||
census 0 206 2 1 1 nan - - a'=1;
|
||||
census 0 204 1 1 0 3.8 8 24
|
||||
census 0 202 1 1 0 nan - -
|
||||
census 0 207 1 1 0 nan - -
|
||||
census 0 203 1 1 0 nan - -
|
||||
census 0 210 1 1 0 3.3 1 20
|
||||
census 0 208 1 1 0 nan - -
|
||||
census 0 211 1 1 0 nan - -
|
||||
census 0 212 1 1 0 nan - -
|
||||
census 0 214 1 1 0 3.7 7 24
|
||||
census 0 209 1 1 0 nan - -
|
||||
census 0 215 1 1 0 3.0 12 7
|
||||
census 0 220 1 1 0 nan - -
|
||||
census 0 217 1 1 0 nan - -
|
||||
census 0 225 1 1 0 3.2 14 23
|
||||
census 0 213 1 1 0 2.8 13 3
|
||||
census 0 224 1 1 0 3.0 12 11
|
||||
census 0 221 1 1 0 nan - -
|
||||
census 0 216 1 1 0 3.5 7 4
|
||||
census 0 223 1 1 0 nan - -
|
||||
census 0 222 1 1 0 3.0 14 10
|
||||
census 0 227 1 1 0 3.4 14 24
|
||||
census 0 219 1 1 0 3.0 9 22
|
||||
census 0 228 1 1 0 3.0 8 9
|
||||
census 0 229 1 1 0 3.0 5 17
|
||||
census 0 218 2 1 1 2.9 0 7 a'=1;
|
||||
census 0 226 1 1 0 3.6 12 11
|
||||
census 0 230 1 1 0 nan - -
|
||||
census 0 232 1 1 0 3.4 4 15
|
||||
census 0 236 1 1 0 nan - -
|
||||
census 0 231 1 1 0 2.9 12 13
|
||||
census 0 235 1 1 0 3.3 8 16
|
||||
census 0 238 1 1 0 nan - -
|
||||
census 0 234 1 1 0 nan - -
|
||||
census 0 237 1 1 0 3.1 7 12
|
||||
census 0 239 1 1 0 3.4 6 18
|
||||
census 0 242 1 1 0 nan - -
|
||||
census 0 240 2 1 1 3.4 11 17 b=1;
|
||||
census 0 241 1 1 0 nan - -
|
||||
census 0 233 2 1 1 3.2 7 11 c=1;
|
||||
census 0 249 1 1 0 nan - -
|
||||
census 0 245 1 1 0 3.0 13 2
|
||||
census 0 243 1 1 0 3.4 5 5
|
||||
census 0 251 1 1 0 3.0 11 0
|
||||
census 0 246 2 1 1 nan - - a'=1;
|
||||
census 0 252 1 1 0 3.0 0 24
|
||||
census 0 244 2 1 1 3.0 3 8 reg64=1;
|
||||
census 0 250 1 1 0 3.9 14 21
|
||||
census 0 247 1 1 0 nan - -
|
||||
census 0 248 1 1 0 3.8 0 16
|
||||
census 0 255 1 1 0 2.6 6 14
|
||||
census 0 254 1 1 0 nan - -
|
||||
census 0 253 1 1 0 nan - -
|
||||
# end 2026-10-08T20:53:02Z rows=257
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
|
@ -0,0 +1 @@
|
|||
# pack cs-era-genesis class mx8+sh256x27+state+reg64c+fold+rw epoch af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3 day 69676e65756d2d6461792ffa50000000000000 era edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 state /srv/builds/v6-census/packs/node1-state.igsd1 day-index 20730 era-widths 4 bin f4e93766d5a3dc46 f8 host igneum-build-4 start 2026-10-08T20:50:53Z
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
seed "igneum-epoch/af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3" generator v6 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 program id 2a1d6caab4c24564 seed words 9c8caa3d 83537296 f21169a4 12d4d157 66e0ce33 cc049080 8579c352 4c6e4ac9
|
||||
op mix load=16 add=10 shfl=8 rotl=5 rotr=5 xor=5 mad=4 mul=4 sub=4 mulhi=3 loads/hash 128 bytes/hash 512
|
||||
era d810f22d (igneum-era/0/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07): width 4 B, stride mul 0x9ad30d99 rot 29, interleave [0, 2, 12, 13], windows (site:shrink:offset) 1:0:0 15:1:0 27:2:1 28:0:0 30:1:1 32:1:0 33:2:3 42:0:0 48:1:0 52:0:0 55:2:2 56:0:0 58:1:1 59:0:0 60:1:0 62:1:0
|
||||
0: mad dst=7 src=3 src2=3 imm=0xd095f540 imm2=0xd3789b38 rot=19 bit=4 mask=4
|
||||
1: load dst=1 src=7 src2=5 imm=0x390bbbd7 imm2=0x1b44071a rot=5 bit=13 mask=16
|
||||
2: rotl dst=0 src=6 src2=7 imm=0xcd1e3e94 imm2=0xf0479df0 rot=29 bit=10 mask=2
|
||||
3: shfl dst=5 src=6 src2=4 imm=0x78c099f8 imm2=0xc6d6c6bc rot=25 bit=21 mask=1
|
||||
4: mulhi dst=5 src=3 src2=1 imm=0x2e8aa8d1 imm2=0x446c336a rot=23 bit=31 mask=16
|
||||
5: rotl dst=7 src=1 src2=0 imm=0x46701a4a imm2=0xc2255717 rot=27 bit=20 mask=8
|
||||
6: mad dst=4 src=2 src2=0 imm=0x487da55c imm2=0xf4675ef7 rot=26 bit=1 mask=8
|
||||
7: rotl dst=2 src=6 src2=4 imm=0x74fdbac4 imm2=0x30e49db4 rot=11 bit=9 mask=16
|
||||
8: mul dst=6 src=0 src2=4 imm=0x69e895ee imm2=0x66ebcedd rot=24 bit=11 mask=16
|
||||
9: shfl dst=6 src=1 src2=7 imm=0x1510cbd0 imm2=0x607acada rot=4 bit=3 mask=2
|
||||
10: add dst=0 src=2 src2=2 imm=0x33a68b0c imm2=0xffb7f024 rot=27 bit=1 mask=4
|
||||
11: xor dst=0 src=2 src2=4 imm=0x61b96f54 imm2=0x7d5468b0 rot=30 bit=28 mask=8
|
||||
12: sub dst=7 src=4 src2=1 imm=0x39217118 imm2=0x248e3f9b rot=29 bit=7 mask=16
|
||||
13: shfl dst=1 src=4 src2=2 imm=0x6c12c43b imm2=0x6b60595d rot=20 bit=23 mask=8
|
||||
14: xor dst=1 src=0 src2=0 imm=0x030181c6 imm2=0x52fbbc27 rot=1 bit=28 mask=4
|
||||
15: load dst=5 src=0 src2=2 imm=0x5b20e3f6 imm2=0xa84ab3b3 rot=24 bit=31 mask=8
|
||||
16: xor dst=5 src=4 src2=4 imm=0x6fc104e8 imm2=0x1a522a5c rot=27 bit=8 mask=8
|
||||
17: shfl dst=6 src=7 src2=6 imm=0x5f5b071a imm2=0x39dc91da rot=16 bit=6 mask=16
|
||||
18: rotr dst=2 src=7 src2=0 imm=0x07b3a28c imm2=0x33193f0c rot=18 bit=3 mask=1
|
||||
19: add dst=4 src=1 src2=5 imm=0x0229d185 imm2=0x51cb8f70 rot=29 bit=26 mask=1
|
||||
20: add dst=4 src=7 src2=1 imm=0xc39836f7 imm2=0x0c001b55 rot=8 bit=7 mask=16
|
||||
21: add dst=0 src=3 src2=4 imm=0xb7d06b34 imm2=0x1ae7a0ac rot=9 bit=3 mask=4
|
||||
22: mad dst=2 src=6 src2=7 imm=0x0978477e imm2=0x2fec3e13 rot=21 bit=3 mask=16
|
||||
23: add dst=3 src=5 src2=7 imm=0x95cba5dd imm2=0x22934c58 rot=8 bit=19 mask=2
|
||||
24: mulhi dst=5 src=3 src2=0 imm=0x14b79a1b imm2=0xccae3d33 rot=5 bit=15 mask=16
|
||||
25: xor dst=0 src=3 src2=7 imm=0x22f74d7f imm2=0x782f1722 rot=18 bit=25 mask=4
|
||||
26: mul dst=6 src=3 src2=6 imm=0xf774717f imm2=0x3a1a2c3a rot=28 bit=25 mask=16
|
||||
27: load dst=3 src=7 src2=2 imm=0xf0d88d7d imm2=0x0fc8051c rot=14 bit=1 mask=16
|
||||
28: load dst=3 src=0 src2=5 imm=0xac8eb588 imm2=0x57844c72 rot=12 bit=8 mask=2
|
||||
29: rotr dst=6 src=7 src2=1 imm=0x89b07c78 imm2=0x90c747d7 rot=13 bit=30 mask=1
|
||||
30: load dst=1 src=4 src2=7 imm=0xdd34b81d imm2=0x96e5cb94 rot=26 bit=16 mask=1
|
||||
31: add dst=1 src=2 src2=3 imm=0x2fa2e27a imm2=0xbf8507da rot=27 bit=5 mask=1
|
||||
32: load dst=2 src=1 src2=1 imm=0x4df1d479 imm2=0xea698909 rot=29 bit=12 mask=4
|
||||
33: load dst=3 src=2 src2=1 imm=0xaa35122f imm2=0x01516545 rot=12 bit=18 mask=1
|
||||
34: mul dst=3 src=5 src2=7 imm=0x6a941ac2 imm2=0xb56c91d9 rot=24 bit=16 mask=1
|
||||
35: rotl dst=1 src=6 src2=7 imm=0xe8aa4cfe imm2=0x0d359401 rot=2 bit=3 mask=2
|
||||
36: shfl dst=1 src=5 src2=1 imm=0xd090168f imm2=0x3ea71d89 rot=9 bit=3 mask=4
|
||||
37: sub dst=0 src=4 src2=1 imm=0xdbda427b imm2=0xd9607488 rot=5 bit=12 mask=2
|
||||
38: rotr dst=4 src=2 src2=7 imm=0xe3e3804c imm2=0xccdc9668 rot=27 bit=13 mask=16
|
||||
39: mulhi dst=4 src=1 src2=2 imm=0x5d14fe55 imm2=0xb6db1d85 rot=17 bit=18 mask=4
|
||||
40: rotr dst=0 src=1 src2=4 imm=0xc77a2d1f imm2=0x5a85c407 rot=10 bit=31 mask=1
|
||||
41: add dst=2 src=3 src2=1 imm=0xfe28f51d imm2=0xf439f8e7 rot=5 bit=8 mask=2
|
||||
42: load dst=1 src=2 src2=5 imm=0xe1b6fb46 imm2=0x23bb6ba4 rot=29 bit=22 mask=1
|
||||
43: xor dst=7 src=5 src2=6 imm=0x34988c9d imm2=0xf8c6c4a8 rot=2 bit=21 mask=8
|
||||
44: shfl dst=6 src=2 src2=2 imm=0x14f4d589 imm2=0x868d3c75 rot=29 bit=31 mask=8
|
||||
45: mul dst=1 src=4 src2=1 imm=0x081dddbd imm2=0xc8e4de44 rot=23 bit=11 mask=16
|
||||
46: rotl dst=0 src=6 src2=2 imm=0xaec2cb92 imm2=0x03157ee4 rot=14 bit=5 mask=16
|
||||
47: add dst=1 src=3 src2=7 imm=0xf1719bbd imm2=0x14bb2234 rot=24 bit=7 mask=16
|
||||
48: load dst=1 src=6 src2=6 imm=0x30e39813 imm2=0x9ce47150 rot=22 bit=10 mask=1
|
||||
49: sub dst=5 src=1 src2=7 imm=0xaabdf6d2 imm2=0x0688a461 rot=13 bit=28 mask=2
|
||||
50: add dst=2 src=3 src2=6 imm=0xb129b2b4 imm2=0x4611fe29 rot=3 bit=14 mask=16
|
||||
51: sub dst=0 src=2 src2=1 imm=0xfe651d02 imm2=0x7c1929a9 rot=22 bit=31 mask=4
|
||||
52: load dst=4 src=0 src2=4 imm=0xf906070a imm2=0xf301cff4 rot=5 bit=25 mask=1
|
||||
53: mad dst=3 src=1 src2=4 imm=0xab213c09 imm2=0xf6d6f3fa rot=16 bit=28 mask=1
|
||||
54: shfl dst=4 src=1 src2=7 imm=0xf6dafbae imm2=0xdbfc32c7 rot=12 bit=1 mask=16
|
||||
55: load dst=6 src=5 src2=5 imm=0x881eaf9c imm2=0x7c50f5c8 rot=25 bit=22 mask=16
|
||||
56: load dst=2 src=4 src2=1 imm=0x899bf6e0 imm2=0xbde5b6ee rot=24 bit=10 mask=8
|
||||
57: shfl dst=5 src=7 src2=6 imm=0xea9c50d2 imm2=0xd2a8c99b rot=12 bit=28 mask=1
|
||||
58: load dst=1 src=5 src2=3 imm=0xad4912ca imm2=0x546d00b2 rot=7 bit=1 mask=1
|
||||
59: load dst=2 src=7 src2=1 imm=0x37cea58f imm2=0x13e31ff0 rot=21 bit=21 mask=16
|
||||
60: load dst=2 src=1 src2=2 imm=0x33f9a95e imm2=0xda1c8a2e rot=22 bit=28 mask=8
|
||||
61: add dst=3 src=2 src2=2 imm=0x0a051d32 imm2=0xe9ed866d rot=30 bit=1 mask=4
|
||||
62: load dst=0 src=2 src2=2 imm=0xab1dd54b imm2=0xc9fcaae2 rot=9 bit=2 mask=1
|
||||
63: rotr dst=5 src=0 src2=5 imm=0x1f0279bd imm2=0x223e7b9c rot=11 bit=3 mask=16
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
program id 2a1d6caab4c24564 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6
|
||||
rule: ACCEPTED, distinct 128.000 per hash, saturated 0, bias max 60
|
||||
site instr win off width distinct ratio under_c2 under_c3 bucket_ratio bucket_z bucket_id bit_z bit top_count
|
||||
0 1 0 0 1 1046503 0.99998 0 0 2.188 4.75 60156 -1.87 26 2
|
||||
1 15 1 0 1 1044355 0.99988 0 0 1.750 4.24 14357 2.42 22 3
|
||||
2 27 2 1 1 1040572 1.00018 0 0 1.562 4.50 24199 -2.24 16 4
|
||||
3 28 0 0 1 1046539 1.00001 0 0 2.312 5.25 10753 -3.06 1 3
|
||||
4 30 1 1 1 1044536 1.00005 0 0 1.781 4.42 58838 -1.54 24 3
|
||||
5 32 1 0 1 1044401 0.99992 0 0 1.906 5.13 1461 1.62 16 3
|
||||
6 33 2 3 1 1040390 1.00001 0 0 1.547 4.38 50857 -2.50 7 4
|
||||
7 42 0 0 1 1046557 1.00003 0 0 2.250 5.00 35595 -2.44 23 3
|
||||
8 48 1 0 1 1044478 1.00000 0 0 1.781 4.42 14934 2.31 19 3
|
||||
9 52 0 0 1 1046564 1.00003 0 0 2.500 6.00 57814 -3.00 20 3
|
||||
10 55 2 2 1 1040481 1.00009 0 0 1.531 4.25 45966 -2.63 2 3
|
||||
11 56 0 0 1 1046558 1.00003 0 0 2.438 5.75 65197 2.34 2 3
|
||||
12 58 1 1 1 1044602 1.00012 0 0 1.781 4.42 44729 2.46 24 3
|
||||
13 59 0 0 1 1046533 1.00000 0 0 2.562 6.25 4623 -1.77 1 3
|
||||
14 60 1 0 1 1044508 1.00003 0 0 1.906 5.13 9415 -2.48 25 3
|
||||
15 62 1 0 1 1044593 1.00011 0 0 1.875 4.95 300 2.97 9 3
|
||||
summary: sites 16, min ratio 0.99988, under 0.98: 0, under 0.995: 0, bucket z max 6.25, bit z max -3.06, sites over 6 sigma 0, 2.2 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
132
docs/analysis/class-v6/rows/live-dataset-census-1a938abe4.md
Normal file
132
docs/analysis/class-v6/rows/live-dataset-census-1a938abe4.md
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
# The live-dataset census on the frozen object (Igneum 2.0 Phase 1 item (j)), 8 October 2026, 21:4x to 22:10 UK
|
||||
|
||||
The frozen tree: class-v6 1a938abe4 (the draw and the acceptance of b24dfc162; nothing on it moves). The object: hl-v6-all, program 4de7b836cc40a4ea, generator 6, class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw (the fold, the rw1 table, the 64-register full-chain window), the Devnet 3 genesis epoch hex edc4fa84... as the epoch and era seed, day 20730, the node1 state (block 159357, 93 leaves, root 1c583d35...). The harness: branch class-v6-census-all4 at b819c23a4 (the census commands on the 1a938abe4 crate; the binary all4-b819c23a, sha256 6448ade354bc665a... on build-5 and build-6, byte-identical). Boxes: build-5 (igneum-build-5, 32 cores) and build-6 (igneum-build-6, 32 cores), the lease pool at class v5, nice 19, every run under a pid file through the night driver (`tools/attack/v6-census/night-run.sh`: a job without its end marker is restarted up to three times and every restart is logged; the logs are beside the rows). Nothing ran on the Mac; nothing here touches a served page or the spec.
|
||||
|
||||
**What "live" means here.** The acceptance's dynamic test, the attempts census and the earlier trace reads run on the closed-form stand-in. These rows run the kernel path's own interpreter (`verify::interpret_warp_core` under a tracing probe) on the chain's dataset: the memory-hard dataset the epoch derives from the day key with the mixer and the state leaves of the node1 stream (`Epoch::chain_dataset_day` with `--state`), so every address after the first load depends on live dataset bytes; and on the header-bound init words (`bind::block_init_words` over a prehash per header with the header's index as the high nonce word), four headers per box, the object split four headers per box (eight in all), 2^18 nonces per header on the object and 2^16 on each of sixteen chain-shaped seeds p18 to p33 under the frozen class.
|
||||
|
||||
## 1. The census rows (the same statistics as the closed-form census, over the live dataset)
|
||||
|
||||
Per run: per (iteration, site) cell and per site the address histogram over every read (A03's form: the most read address and its share), the distinct word indices against the window model `N - N^2 / 2W` at the site's window (the (c'') form), the one-count of every address bit inside the site's window above the alignment (the value-level read, 6 sigma), and over the program the top 0.1 percent of items' share of all reads against a flat control and a windowed control (each site's reads drawn uniformly over its own window, the same counts) at the same N (the F8 form's two nulls; the gate 1.2x over the window model).
|
||||
|
||||
| Run (box) | Program | Headers; nonces per header | Reads | Worst address at any site, worst cell (count, share) | Min site distinct ratio (floors 0.98, 0.995) | Worst index bit inside its window (sigma; band 6) | Top 0.1 percent item share; against the controls (gate 1.2x) | Ideal cache 1 GiB / 256 MiB / 64 MiB (top K by count; sampling-inflated above the window model) |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| object-h0 (build-5) | 4de7b836cc40a4ea | 4 from 0; 262,144 nonces each | 268,435,456 | site 8: 0x07579830 x6 (1.0e-06); cell: 0x0ab39b50 x4 (4.0e-06) | 1.00007 | -3.51 (site 7, bit 1) | 0.002138; 1.0998x flat; **0.9989x** window model | 1.0000 / 0.3540 / 0.1035 |
|
||||
| seed-p18 (build-5) | 0b686c80e25cb4d3 | 4 from 0; 65,536 nonces each | 67,108,864 | site 0: 0x04b26299 x4 (2.0e-06); cell: 0x000e4f1d x3 (1.1e-05) | 0.99991 | 3.09 (site 24, bit 16) | 0.003391; 1.1032x flat; **1.0006x** window model | 1.0000 / 0.4404 / 0.1414 |
|
||||
| seed-p19 (build-5) | bf8510cd00c0c70f | 4 from 0; 65,536 nonces each | 67,108,864 | site 0: 0x0813e726 x4 (2.0e-06); cell: 0x06f0d11f x3 (1.1e-05) | 0.99986 | -3.81 (site 29, bit 7) | 0.003433; 1.1159x flat; **0.9996x** window model | 1.0000 / 0.4418 / 0.1426 |
|
||||
| seed-p20 (build-5) | 24133bd7265e958f | 4 from 0; 65,536 nonces each | 67,108,864 | site 2: 0x09d4fb1a x4 (2.0e-06); cell: 0x0ae65aa6 x3 (1.1e-05) | 0.99994 | -3.55 (site 30, bit 0) | 0.003434; 1.1175x flat; **1.0003x** window model | 1.0000 / 0.4443 / 0.1429 |
|
||||
| seed-p21 (build-5) | ed647abf60a5bd32 | 4 from 0; 65,536 nonces each | 67,108,864 | site 0: 0x04e14ec7 x4 (2.0e-06); cell: 0x03973640 x3 (1.1e-05) | 0.99990 | 3.90 (site 11, bit 9) | 0.003920; 1.2759x flat; **1.0008x** window model | 1.0000 / 0.4774 / 0.1605 |
|
||||
| seed-p22 (build-5) | f8e8969443448ecb | 4 from 0; 65,536 nonces each | 67,108,864 | site 6: 0x06a054ca x5 (2.0e-06); cell: 0x0342068e x3 (1.1e-05) | 0.99994 | 3.31 (site 13, bit 19) | 0.003237; 1.0540x flat; **0.9997x** window model | 1.0000 / 0.4271 / 0.1370 |
|
||||
| seed-p23 (build-5) | 160649503341aaab | 4 from 0; 65,536 nonces each | 67,108,864 | site 1: 0x0e3c2793 x4 (2.0e-06); cell: 0x051243d9 x3 (1.1e-05) | 0.99994 | -3.44 (site 25, bit 1) | 0.003338; 1.0854x flat; **0.9990x** window model | 1.0000 / 0.4315 / 0.1391 |
|
||||
| seed-p24 (build-5) | 62aa0bfc93f13028 | 4 from 0; 65,536 nonces each | 67,108,864 | site 2: 0x08bdfbf3 x4 (2.0e-06); cell: 0x0bd48627 x3 (1.1e-05) | 0.99991 | 3.46 (site 4, bit 15) | 0.003156; 1.0264x flat; **0.9988x** window model | 1.0000 / 0.4212 / 0.1338 |
|
||||
| seed-p25 (build-5) | 3f1af0bbaaef74fa | 4 from 0; 65,536 nonces each | 67,108,864 | site 2: 0x0fb1f63d x4 (2.0e-06); cell: 0x0f8343d0 x3 (1.1e-05) | 0.99993 | 3.27 (site 2, bit 5) | 0.003436; 1.1192x flat; **1.0014x** window model | 1.0000 / 0.4418 / 0.1426 |
|
||||
| object-h4 (build-6) | 4de7b836cc40a4ea | 4 from 0; 262,144 nonces each | 268,435,456 | site 21: 0x0436441b x6 (1.0e-06); cell: 0x0f45e0db x4 (4.0e-06) | 1.00010 | -3.06 (site 9, bit 1) | 0.002140; 1.1005x flat; **0.9995x** window model | 1.0000 / 0.3540 / 0.1035 |
|
||||
| seed-p26 (build-6) | 2b406490ba8d3c91 | 4 from 0; 65,536 nonces each | 67,108,864 | site 3: 0x03f3960e x4 (2.0e-06); cell: 0x0f26b8e6 x3 (1.1e-05) | 0.99992 | 3.61 (site 28, bit 20) | 0.003129; 1.0183x flat; **1.0003x** window model | 1.0000 / 0.4196 / 0.1328 |
|
||||
| seed-p27 (build-6) | c38b57d654ad08d4 | 4 from 0; 65,536 nonces each | 67,108,864 | site 2: 0x031a0ba8 x4 (2.0e-06); cell: 0x01c78316 x3 (1.1e-05) | 0.99995 | -2.90 (site 8, bit 16) | 0.003348; 1.0873x flat; **1.0010x** window model | 1.0000 / 0.4343 / 0.1396 |
|
||||
| seed-p28 (build-6) | 96e4f7fdccef6fd1 | 4 from 0; 65,536 nonces each | 67,108,864 | site 2: 0x030525f1 x4 (2.0e-06); cell: 0x03149070 x3 (1.1e-05) | 0.99993 | -3.99 (site 25, bit 11) | 0.003499; 1.1396x flat; **1.0005x** window model | 1.0000 / 0.4400 / 0.1434 |
|
||||
| seed-p29 (build-6) | 3f922ac24b46d2c2 | 4 from 0; 65,536 nonces each | 67,108,864 | site 7: 0x0e92f974 x4 (2.0e-06); cell: 0x0ef15836 x3 (1.1e-05) | 0.99997 | 3.00 (site 25, bit 18) | 0.003169; 1.0326x flat; **1.0004x** window model | 1.0000 / 0.4241 / 0.1350 |
|
||||
| seed-p30 (build-6) | edd13a08477407cf | 4 from 0; 65,536 nonces each | 67,108,864 | site 0: 0x0e3a012d x4 (2.0e-06); cell: 0x0e92237a x3 (1.1e-05) | 0.99991 | 2.59 (site 4, bit 26) | 0.003348; 1.0910x flat; **0.9981x** window model | 1.0000 / 0.4343 / 0.1395 |
|
||||
| seed-p31 (build-6) | e1409749e795c382 | 4 from 0; 65,536 nonces each | 67,108,864 | site 0: 0x0d3d1622 x4 (2.0e-06); cell: 0x0f8c1753 x3 (1.1e-05) | 0.99988 | -3.23 (site 7, bit 21) | 0.003432; 1.1164x flat; **0.9992x** window model | 1.0000 / 0.4417 / 0.1425 |
|
||||
| seed-p32 (build-6) | 0717ad9158d5937f | 4 from 0; 65,536 nonces each | 67,108,864 | site 4: 0x0cd645f0 x4 (2.0e-06); cell: 0x08695fc3 x3 (1.1e-05) | 0.99993 | 3.40 (site 6, bit 2) | 0.003378; 1.1000x flat; **1.0004x** window model | 1.0000 / 0.4390 / 0.1410 |
|
||||
| seed-p33 (build-6) | 9857a41ce42f4677 | 4 from 0; 65,536 nonces each | 67,108,864 | site 2: 0x0f425fde x4 (2.0e-06); cell: 0x03846806 x3 (1.1e-05) | 0.99994 | -3.95 (site 5, bit 5) | 0.003416; 1.1112x flat; **0.9996x** window model | 1.0000 / 0.4358 / 0.1410 |
|
||||
|
||||
Reading: on the frozen object over 2^21 hashes and eight headers (two boxes), the top 0.1 percent of items hold 0.2138 and 0.2140 percent of reads against the windowed control's 0.2141 (0.9989x and 0.9995x; the flat control 1.10x, the era windows' layer 8 by design); every site's distinct ratio 1.0001 (uniform inside its window); the worst index bit inside any window under 4 sigma; the worst address at any site 6 to 7 reads of 134 million (5e-8) and the worst cell 4 of 4 million, the Poisson maxima of a uniform stream; every one of the 16,777,216 items touched. The sixteen chain-shaped seeds under the frozen class read the same: window-model ratios 0.998 to 1.001x, flat 1.03 to 1.28x (p21's 1.28x is its window draw), min site ratio 0.99986 to 0.99997, worst bit 2.6 to 4.0 sigma, worst address 4 to 5 reads of 2 million. Nothing a cache can key on beyond the era windows, which the GPU's L2 sees as well; the cache columns (top K items by sample count) sit above the window model by the sampling noise of ranking items by count, as in the A03 census (census-packs.md section 6), and the honest cache figures are the window model's (the object's 256 MiB share 0.354 measured at 2^20 hashes per box against 0.359 from its window draw).
|
||||
|
||||
## 2. F06's live half: the window's liveness on live data
|
||||
|
||||
The rule (`accept::check_window_liveness`, the chain's) flips each of the 64 registers by two probe words at the start of iteration 0 on the closed form at one base nonce and requires the first load's address and the hash to change in every lane. Here the same flips run on the live dataset under the header-bound init words, over four headers and 16 warps per box on the object (4,096 probes per register per box) and two headers and 8 warps on a chain seed, with every load of every iteration traced, so the least-changed load of the first iteration is read as well as the first.
|
||||
|
||||
| Run (box) | Program | Headers; warps | Registers x probes | First-load address changed (fraction of lanes, least live register) | Hash changed | Least-changed first-iteration load | Verdict |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| liveness-object-h0 (build-5) | 4de7b836cc40a4ea | 4 from 0; 16 warps | 64 x 4096 | 1.000000 | 1.000000 | 1.000000 at (register 0, load 0) | **LIVE** |
|
||||
| liveness-p18 (build-5) | 0b686c80e25cb4d3 | 2 from 0; 8 warps | 64 x 1024 | 1.000000 | 1.000000 | 1.000000 at (register 0, load 0) | **LIVE** |
|
||||
| liveness-object-h4 (build-6) | 4de7b836cc40a4ea | 4 from 0; 16 warps | 64 x 4096 | 1.000000 | 1.000000 | 1.000000 at (register 0, load 0) | **LIVE** |
|
||||
| liveness-p26 (build-6) | 2b406490ba8d3c91 | 2 from 0; 8 warps | 64 x 1024 | 1.000000 | 1.000000 | 1.000000 at (register 0, load 0) | **LIVE** |
|
||||
|
||||
Reading: every one of the 64 registers moves every lane's first address and every lane's hash under every probe on live data (1.000000 at the least live register over 4,096 probes on each box), and every first-iteration load's address moves in every lane under every flip (the least-changed cell 1.000000). The construction's claim ("every one of the 64 registers is read by the address of each of the 32 loads") holds as measured on the live dataset, not only by construction.
|
||||
|
||||
## 3. The runs, the faults, the commands
|
||||
|
||||
Every job and every restart, with the UK clock, from the drivers' logs (the one fault of the night: my job-list writer ran in a shell that does not split an unquoted list, so the eight seed jobs per box collapsed into one line that the harness refused with exit 2 three times on each box; the lists were rewritten with explicit splitting and the sixteen seed rows ran through the same driver at 22:01; nothing in the harness or the crate moved):
|
||||
|
||||
```
|
||||
# night driver start 21:56 UK host igneum-build-5 jobs 5
|
||||
start 1 canary-p18 21:56 UK
|
||||
end 1 canary-p18 rc 0 21:56 UK
|
||||
start 1 object-h0 21:56 UK
|
||||
end 1 object-h0 rc 0 21:59 UK
|
||||
start 1 liveness-object-h0 21:59 UK
|
||||
end 1 liveness-object-h0 rc 0 21:59 UK
|
||||
start 1 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
end 1 seed-p18 19 20 21 22 23 24 25 rc 2 21:59 UK
|
||||
restart 2 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
start 2 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
end 2 seed-p18 19 20 21 22 23 24 25 rc 2 21:59 UK
|
||||
restart 3 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
start 3 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
end 3 seed-p18 19 20 21 22 23 24 25 rc 2 21:59 UK
|
||||
start 1 liveness-p18 21:59 UK
|
||||
end 1 liveness-p18 rc 0 21:59 UK
|
||||
# night driver end 21:59 UK
|
||||
# night driver start 22:01 UK host igneum-build-5 jobs 8
|
||||
start 1 seed-p18 22:01 UK
|
||||
end 1 seed-p18 rc 0 22:01 UK
|
||||
start 1 seed-p19 22:01 UK
|
||||
end 1 seed-p19 rc 0 22:02 UK
|
||||
start 1 seed-p20 22:02 UK
|
||||
end 1 seed-p20 rc 0 22:03 UK
|
||||
start 1 seed-p21 22:03 UK
|
||||
end 1 seed-p21 rc 0 22:03 UK
|
||||
start 1 seed-p22 22:03 UK
|
||||
end 1 seed-p22 rc 0 22:04 UK
|
||||
start 1 seed-p23 22:04 UK
|
||||
end 1 seed-p23 rc 0 22:05 UK
|
||||
start 1 seed-p24 22:05 UK
|
||||
end 1 seed-p24 rc 0 22:05 UK
|
||||
start 1 seed-p25 22:05 UK
|
||||
end 1 seed-p25 rc 0 22:06 UK
|
||||
# night driver end 22:06 UK
|
||||
# night driver start 21:56 UK host igneum-build-6 jobs 1
|
||||
start 1 canary-p18 21:56 UK
|
||||
end 1 canary-p18 rc 0 21:56 UK
|
||||
# night driver end 21:56 UK
|
||||
# night driver start 21:56 UK host igneum-build-6 jobs 5
|
||||
start 1 object-h4 21:56 UK
|
||||
end 1 object-h4 rc 0 22:00 UK
|
||||
start 1 liveness-object-h4 22:00 UK
|
||||
end 1 liveness-object-h4 rc 0 22:00 UK
|
||||
start 1 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
end 1 seed-p26 27 28 29 30 31 32 33 rc 2 22:00 UK
|
||||
restart 2 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
start 2 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
end 2 seed-p26 27 28 29 30 31 32 33 rc 2 22:00 UK
|
||||
restart 3 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
start 3 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
end 3 seed-p26 27 28 29 30 31 32 33 rc 2 22:00 UK
|
||||
start 1 liveness-p26 22:00 UK
|
||||
end 1 liveness-p26 rc 0 22:00 UK
|
||||
# night driver end 22:00 UK
|
||||
# night driver start 22:01 UK host igneum-build-6 jobs 8
|
||||
start 1 seed-p26 22:01 UK
|
||||
end 1 seed-p26 rc 0 22:02 UK
|
||||
start 1 seed-p27 22:02 UK
|
||||
end 1 seed-p27 rc 0 22:02 UK
|
||||
start 1 seed-p28 22:02 UK
|
||||
end 1 seed-p28 rc 0 22:03 UK
|
||||
start 1 seed-p29 22:03 UK
|
||||
end 1 seed-p29 rc 0 22:04 UK
|
||||
start 1 seed-p30 22:04 UK
|
||||
end 1 seed-p30 rc 0 22:05 UK
|
||||
start 1 seed-p31 22:05 UK
|
||||
end 1 seed-p31 rc 0 22:06 UK
|
||||
start 1 seed-p32 22:06 UK
|
||||
end 1 seed-p32 rc 0 22:07 UK
|
||||
start 1 seed-p33 22:07 UK
|
||||
end 1 seed-p33 rc 0 22:08 UK
|
||||
# night driver end 22:08 UK
|
||||
```
|
||||
|
||||
The commands (the lists `night-jobs-<box>.tsv` and `night-seeds-<box>.tsv` beside the rows carry every one verbatim): the object, `addrsite --count 4 --header-from <0|4> --warps 8192 --threads 32 --epoch-hex <genesis> --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:<genesis> --state node1-state.igsd1`; a seed, the same with `--seed igneum-attack-f8/program/<n> --warps 2048`; the liveness, `liveness --count 4 --header-from <0|4> --warps 16 --threads 32` with the same object arguments. Every run under `lease pool 32 --min 4 --nice 19 --class v5 --owner class-v6-census` through `night-run.sh`, pid files under `/srv/builds/v6-census/pids/` on each box.
|
||||
|
||||
## 4. Against the one acceptance rule, and what is owed
|
||||
|
||||
On the live dataset the frozen object reads as the closed-form census read it: uniform inside every era window to the Poisson floor, no address bit biased inside its window, the window live on every register and every load. Nothing here moves the adversary's edge: the hot half of the dataset is the era windows' (layer 8), seen by a GPU's L2 and a chip's SRAM alike. Owed: the same rows at 2^24 nonces per header (the 64 x 2^24 live point every class owes; 50 to 100 core-hours per object); a per-site LRU trace for a cache figure free of the top-K ranking's sampling inflation.
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
# liveness: program 4de7b836cc40a4ea class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw registers 64 day bytes:69676e65756d2d6461792ffa50000000000000 dataset 2^28 words (memory-hard) headers 4 warps 16 threads 32 probe words 2
|
||||
reg probes first_load_changed hash_changed least_changed_load least_changed_frac
|
||||
0 4096 1.000000 1.000000 0 1.000000
|
||||
1 4096 1.000000 1.000000 0 1.000000
|
||||
2 4096 1.000000 1.000000 0 1.000000
|
||||
3 4096 1.000000 1.000000 0 1.000000
|
||||
4 4096 1.000000 1.000000 0 1.000000
|
||||
5 4096 1.000000 1.000000 0 1.000000
|
||||
6 4096 1.000000 1.000000 0 1.000000
|
||||
7 4096 1.000000 1.000000 0 1.000000
|
||||
8 4096 1.000000 1.000000 0 1.000000
|
||||
9 4096 1.000000 1.000000 0 1.000000
|
||||
10 4096 1.000000 1.000000 0 1.000000
|
||||
11 4096 1.000000 1.000000 0 1.000000
|
||||
12 4096 1.000000 1.000000 0 1.000000
|
||||
13 4096 1.000000 1.000000 0 1.000000
|
||||
14 4096 1.000000 1.000000 0 1.000000
|
||||
15 4096 1.000000 1.000000 0 1.000000
|
||||
16 4096 1.000000 1.000000 0 1.000000
|
||||
17 4096 1.000000 1.000000 0 1.000000
|
||||
18 4096 1.000000 1.000000 0 1.000000
|
||||
19 4096 1.000000 1.000000 0 1.000000
|
||||
20 4096 1.000000 1.000000 0 1.000000
|
||||
21 4096 1.000000 1.000000 0 1.000000
|
||||
22 4096 1.000000 1.000000 0 1.000000
|
||||
23 4096 1.000000 1.000000 0 1.000000
|
||||
24 4096 1.000000 1.000000 0 1.000000
|
||||
25 4096 1.000000 1.000000 0 1.000000
|
||||
26 4096 1.000000 1.000000 0 1.000000
|
||||
27 4096 1.000000 1.000000 0 1.000000
|
||||
28 4096 1.000000 1.000000 0 1.000000
|
||||
29 4096 1.000000 1.000000 0 1.000000
|
||||
30 4096 1.000000 1.000000 0 1.000000
|
||||
31 4096 1.000000 1.000000 0 1.000000
|
||||
32 4096 1.000000 1.000000 0 1.000000
|
||||
33 4096 1.000000 1.000000 0 1.000000
|
||||
34 4096 1.000000 1.000000 0 1.000000
|
||||
35 4096 1.000000 1.000000 0 1.000000
|
||||
36 4096 1.000000 1.000000 0 1.000000
|
||||
37 4096 1.000000 1.000000 0 1.000000
|
||||
38 4096 1.000000 1.000000 0 1.000000
|
||||
39 4096 1.000000 1.000000 0 1.000000
|
||||
40 4096 1.000000 1.000000 0 1.000000
|
||||
41 4096 1.000000 1.000000 0 1.000000
|
||||
42 4096 1.000000 1.000000 0 1.000000
|
||||
43 4096 1.000000 1.000000 0 1.000000
|
||||
44 4096 1.000000 1.000000 0 1.000000
|
||||
45 4096 1.000000 1.000000 0 1.000000
|
||||
46 4096 1.000000 1.000000 0 1.000000
|
||||
47 4096 1.000000 1.000000 0 1.000000
|
||||
48 4096 1.000000 1.000000 0 1.000000
|
||||
49 4096 1.000000 1.000000 0 1.000000
|
||||
50 4096 1.000000 1.000000 0 1.000000
|
||||
51 4096 1.000000 1.000000 0 1.000000
|
||||
52 4096 1.000000 1.000000 0 1.000000
|
||||
53 4096 1.000000 1.000000 0 1.000000
|
||||
54 4096 1.000000 1.000000 0 1.000000
|
||||
55 4096 1.000000 1.000000 0 1.000000
|
||||
56 4096 1.000000 1.000000 0 1.000000
|
||||
57 4096 1.000000 1.000000 0 1.000000
|
||||
58 4096 1.000000 1.000000 0 1.000000
|
||||
59 4096 1.000000 1.000000 0 1.000000
|
||||
60 4096 1.000000 1.000000 0 1.000000
|
||||
61 4096 1.000000 1.000000 0 1.000000
|
||||
62 4096 1.000000 1.000000 0 1.000000
|
||||
63 4096 1.000000 1.000000 0 1.000000
|
||||
# verdict: 64 registers over 4096 probes each; first-load address changed in 1.000000 of lanes at the least live register, the hash in 1.000000; the least changed (register, first-iteration load) is (0, 0) at 1.000000; LIVE on live data (every register moves every lane's first address and hash); 6.6 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
|
@ -0,0 +1,67 @@
|
|||
# liveness: program 0b686c80e25cb4d3 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw registers 64 day 2026-10-03 dataset 2^28 words (memory-hard) headers 2 warps 8 threads 32 probe words 2
|
||||
reg probes first_load_changed hash_changed least_changed_load least_changed_frac
|
||||
0 1024 1.000000 1.000000 0 1.000000
|
||||
1 1024 1.000000 1.000000 0 1.000000
|
||||
2 1024 1.000000 1.000000 0 1.000000
|
||||
3 1024 1.000000 1.000000 0 1.000000
|
||||
4 1024 1.000000 1.000000 0 1.000000
|
||||
5 1024 1.000000 1.000000 0 1.000000
|
||||
6 1024 1.000000 1.000000 0 1.000000
|
||||
7 1024 1.000000 1.000000 0 1.000000
|
||||
8 1024 1.000000 1.000000 0 1.000000
|
||||
9 1024 1.000000 1.000000 0 1.000000
|
||||
10 1024 1.000000 1.000000 0 1.000000
|
||||
11 1024 1.000000 1.000000 0 1.000000
|
||||
12 1024 1.000000 1.000000 0 1.000000
|
||||
13 1024 1.000000 1.000000 0 1.000000
|
||||
14 1024 1.000000 1.000000 0 1.000000
|
||||
15 1024 1.000000 1.000000 0 1.000000
|
||||
16 1024 1.000000 1.000000 0 1.000000
|
||||
17 1024 1.000000 1.000000 0 1.000000
|
||||
18 1024 1.000000 1.000000 0 1.000000
|
||||
19 1024 1.000000 1.000000 0 1.000000
|
||||
20 1024 1.000000 1.000000 0 1.000000
|
||||
21 1024 1.000000 1.000000 0 1.000000
|
||||
22 1024 1.000000 1.000000 0 1.000000
|
||||
23 1024 1.000000 1.000000 0 1.000000
|
||||
24 1024 1.000000 1.000000 0 1.000000
|
||||
25 1024 1.000000 1.000000 0 1.000000
|
||||
26 1024 1.000000 1.000000 0 1.000000
|
||||
27 1024 1.000000 1.000000 0 1.000000
|
||||
28 1024 1.000000 1.000000 0 1.000000
|
||||
29 1024 1.000000 1.000000 0 1.000000
|
||||
30 1024 1.000000 1.000000 0 1.000000
|
||||
31 1024 1.000000 1.000000 0 1.000000
|
||||
32 1024 1.000000 1.000000 0 1.000000
|
||||
33 1024 1.000000 1.000000 0 1.000000
|
||||
34 1024 1.000000 1.000000 0 1.000000
|
||||
35 1024 1.000000 1.000000 0 1.000000
|
||||
36 1024 1.000000 1.000000 0 1.000000
|
||||
37 1024 1.000000 1.000000 0 1.000000
|
||||
38 1024 1.000000 1.000000 0 1.000000
|
||||
39 1024 1.000000 1.000000 0 1.000000
|
||||
40 1024 1.000000 1.000000 0 1.000000
|
||||
41 1024 1.000000 1.000000 0 1.000000
|
||||
42 1024 1.000000 1.000000 0 1.000000
|
||||
43 1024 1.000000 1.000000 0 1.000000
|
||||
44 1024 1.000000 1.000000 0 1.000000
|
||||
45 1024 1.000000 1.000000 0 1.000000
|
||||
46 1024 1.000000 1.000000 0 1.000000
|
||||
47 1024 1.000000 1.000000 0 1.000000
|
||||
48 1024 1.000000 1.000000 0 1.000000
|
||||
49 1024 1.000000 1.000000 0 1.000000
|
||||
50 1024 1.000000 1.000000 0 1.000000
|
||||
51 1024 1.000000 1.000000 0 1.000000
|
||||
52 1024 1.000000 1.000000 0 1.000000
|
||||
53 1024 1.000000 1.000000 0 1.000000
|
||||
54 1024 1.000000 1.000000 0 1.000000
|
||||
55 1024 1.000000 1.000000 0 1.000000
|
||||
56 1024 1.000000 1.000000 0 1.000000
|
||||
57 1024 1.000000 1.000000 0 1.000000
|
||||
58 1024 1.000000 1.000000 0 1.000000
|
||||
59 1024 1.000000 1.000000 0 1.000000
|
||||
60 1024 1.000000 1.000000 0 1.000000
|
||||
61 1024 1.000000 1.000000 0 1.000000
|
||||
62 1024 1.000000 1.000000 0 1.000000
|
||||
63 1024 1.000000 1.000000 0 1.000000
|
||||
# verdict: 64 registers over 1024 probes each; first-load address changed in 1.000000 of lanes at the least live register, the hash in 1.000000; the least changed (register, first-iteration load) is (0, 0) at 1.000000; LIVE on live data (every register moves every lane's first address and hash); 2.0 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
|
@ -0,0 +1,5 @@
|
|||
canary-p18 # F8 form 16 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 1 --warps 256 --threads 16 --seed igneum-attack-f8/program/18 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
object-h0 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --header-from 0 --warps 8192 --threads 32 --epoch-hex edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
liveness-object-h0 # verdict 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow liveness --count 4 --header-from 0 --warps 16 --threads 32 --epoch-hex edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p18 19 20 21 22 23 24 25 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/18 19 20 21 22 23 24 25 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
liveness-p18 # verdict 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow liveness --count 2 --warps 8 --threads 32 --seed igneum-attack-f8/program/18 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
seed-p18 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/18 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p19 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/19 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p20 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/20 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p21 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/21 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p22 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/22 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p23 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/23 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p24 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/24 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p25 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/25 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 4de7b836cc40a4ea class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day bytes:69676e65756d2d6461792ffa50000000000000 dataset 2^28 words (memory-hard) headers 4 warps 8192 nonces/header 262144 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 7 1048576 1044572 0x0f281e20 3 0.000003
|
||||
0 1 7 1048576 1044538 0x0e8e8ead 3 0.000003
|
||||
# worst cell: iteration 0 site 28 address 0x0ab39b50 in 4 reads, share 0.000004
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 7 1 8388608 8388608 8132047 0x0cdad1e9 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00069 2.67 23
|
||||
1 7 1 8388608 8388608 8131951 0x0de9a70a 5 0.000001 1.0000 0.8677 0.3536 1.0000 0.5000 0.1250 1.00068 2.09 24
|
||||
2 8 1 8388608 8388608 8131945 0x09d3dc61 5 0.000001 1.0000 0.8680 0.3538 1.0000 0.5000 0.1250 1.00067 -2.55 23
|
||||
3 8 1 8388608 8388608 8132094 0x0fcde01e 4 0.000000 1.0000 0.8679 0.3538 1.0000 0.5000 0.1250 1.00069 2.49 25
|
||||
4 9 0 16777216 8388608 8258704 0x0ec34d5e 4 0.000000 1.0000 0.7130 0.2827 1.0000 0.2500 0.0625 1.00014 2.10 23
|
||||
5 9 0 16777216 8388608 8258085 0x0d7c7231 4 0.000000 1.0000 0.7131 0.2827 1.0000 0.2500 0.0625 1.00007 2.35 27
|
||||
6 10 1 8388608 8388608 8131678 0x09d64ddc 5 0.000001 1.0000 0.8678 0.3536 1.0000 0.5000 0.1250 1.00064 -1.97 11
|
||||
7 10 1 8388608 8388608 8131492 0x0fc03997 5 0.000001 1.0000 0.8680 0.3537 1.0000 0.5000 0.1250 1.00062 -3.51 1
|
||||
8 11 2 4194304 8388608 7886321 0x07579830 6 0.000001 1.0000 1.0000 0.4840 1.0000 1.0000 0.2500 1.00280 -2.78 24
|
||||
9 11 2 4194304 8388608 7884408 0x07f9a1d2 6 0.000001 1.0000 1.0000 0.4842 1.0000 1.0000 0.2500 1.00255 -2.38 21
|
||||
10 13 1 8388608 8388608 8131831 0x028ad7af 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00066 -2.29 2
|
||||
11 13 1 8388608 8388608 8131126 0x01eca4cf 5 0.000001 1.0000 0.8680 0.3537 1.0000 0.5000 0.1250 1.00057 -2.14 17
|
||||
12 29 0 16777216 8388608 8258636 0x020fff43 4 0.000000 1.0000 0.7133 0.2827 1.0000 0.2500 0.0625 1.00013 2.45 13
|
||||
13 29 0 16777216 8388608 8258639 0x0684affd 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00013 -2.24 20
|
||||
14 30 1 8388608 8388608 8131030 0x0156b5af 4 0.000000 1.0000 0.8678 0.3535 1.0000 0.5000 0.1250 1.00056 2.47 24
|
||||
15 30 1 8388608 8388608 8132231 0x05d7450b 4 0.000000 1.0000 0.8679 0.3536 1.0000 0.5000 0.1250 1.00071 2.75 26
|
||||
16 31 1 8388608 8388608 8131162 0x016f2f20 5 0.000001 1.0000 0.8680 0.3538 1.0000 0.5000 0.1250 1.00058 -1.51 12
|
||||
17 31 1 8388608 8388608 8131757 0x054cc4b7 5 0.000001 1.0000 0.8681 0.3538 1.0000 0.5000 0.1250 1.00065 2.20 18
|
||||
18 44 1 8388608 8388608 8131834 0x05606f45 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00066 -1.64 7
|
||||
19 44 1 8388608 8388608 8131163 0x02332e6c 5 0.000001 1.0000 0.8676 0.3535 1.0000 0.5000 0.1250 1.00058 2.39 8
|
||||
20 46 1 8388608 8388608 8132339 0x0282d27f 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00072 -2.20 12
|
||||
21 46 1 8388608 8388608 8131591 0x04dd4e3a 4 0.000000 1.0000 0.8678 0.3535 1.0000 0.5000 0.1250 1.00063 1.57 9
|
||||
22 47 2 4194304 8388608 7885706 0x0322c452 6 0.000001 1.0000 1.0000 0.4839 1.0000 1.0000 0.2500 1.00272 2.18 17
|
||||
23 47 2 4194304 8388608 7885403 0x025ac4be 6 0.000001 1.0000 1.0000 0.4841 1.0000 1.0000 0.2500 1.00268 2.00 21
|
||||
24 52 0 16777216 8388608 8258667 0x019ac84e 4 0.000000 1.0000 0.7132 0.2827 1.0000 0.2500 0.0625 1.00014 -2.28 14
|
||||
25 52 0 16777216 8388608 8259291 0x00a62c92 4 0.000000 1.0000 0.7130 0.2827 1.0000 0.2500 0.0625 1.00021 1.64 16
|
||||
26 56 0 16777216 8388608 8258968 0x09e1fab5 4 0.000000 1.0000 0.7132 0.2827 1.0000 0.2500 0.0625 1.00017 2.02 5
|
||||
27 56 0 16777216 8388608 8258927 0x0a3d57dc 4 0.000000 1.0000 0.7131 0.2827 1.0000 0.2500 0.0625 1.00017 -2.36 11
|
||||
28 58 1 8388608 8388608 8132535 0x0fac6ffa 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00075 2.80 0
|
||||
29 58 1 8388608 8388608 8131321 0x08555300 4 0.000000 1.0000 0.8680 0.3537 1.0000 0.5000 0.1250 1.00060 1.61 16
|
||||
30 63 0 16777216 8388608 8259105 0x0892bf3d 4 0.000000 1.0000 0.7132 0.2827 1.0000 0.2500 0.0625 1.00019 2.28 26
|
||||
31 63 0 16777216 8388608 8258645 0x03d6fb84 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00013 1.74 27
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.002138 of reads; flat control 0.001944 (ratio 1.0998x), windowed control 0.002141 (ratio 0.9989x; the gate 1.2x); min site distinct ratio 1.00007 (floors 0.98 and 0.995); worst index bit inside its window -3.51 sigma at site 7 bit 1 (the band 6)
|
||||
# program: reads 268435456, distinct items 16777198, worst site 8 address 0x07579830 in 6 reads (share 0.000001); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.3540, 64 MiB 0.1035; the per-site ideal caches summed: 1.0000, 0.8360, 0.3478; 159.5 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,36 @@
|
|||
# night driver start 21:56 UK host igneum-build-5 jobs 5
|
||||
start 1 canary-p18 21:56 UK
|
||||
end 1 canary-p18 rc 0 21:56 UK
|
||||
start 1 object-h0 21:56 UK
|
||||
end 1 object-h0 rc 0 21:59 UK
|
||||
start 1 liveness-object-h0 21:59 UK
|
||||
end 1 liveness-object-h0 rc 0 21:59 UK
|
||||
start 1 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
end 1 seed-p18 19 20 21 22 23 24 25 rc 2 21:59 UK
|
||||
restart 2 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
start 2 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
end 2 seed-p18 19 20 21 22 23 24 25 rc 2 21:59 UK
|
||||
restart 3 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
start 3 seed-p18 19 20 21 22 23 24 25 21:59 UK
|
||||
end 3 seed-p18 19 20 21 22 23 24 25 rc 2 21:59 UK
|
||||
start 1 liveness-p18 21:59 UK
|
||||
end 1 liveness-p18 rc 0 21:59 UK
|
||||
# night driver end 21:59 UK
|
||||
# night driver start 22:01 UK host igneum-build-5 jobs 8
|
||||
start 1 seed-p18 22:01 UK
|
||||
end 1 seed-p18 rc 0 22:01 UK
|
||||
start 1 seed-p19 22:01 UK
|
||||
end 1 seed-p19 rc 0 22:02 UK
|
||||
start 1 seed-p20 22:02 UK
|
||||
end 1 seed-p20 rc 0 22:03 UK
|
||||
start 1 seed-p21 22:03 UK
|
||||
end 1 seed-p21 rc 0 22:03 UK
|
||||
start 1 seed-p22 22:03 UK
|
||||
end 1 seed-p22 rc 0 22:04 UK
|
||||
start 1 seed-p23 22:04 UK
|
||||
end 1 seed-p23 rc 0 22:05 UK
|
||||
start 1 seed-p24 22:05 UK
|
||||
end 1 seed-p24 rc 0 22:05 UK
|
||||
start 1 seed-p25 22:05 UK
|
||||
end 1 seed-p25 rc 0 22:06 UK
|
||||
# night driver end 22:06 UK
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 0b686c80e25cb4d3 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 3 262144 261876 0x000e4f1d 3 0.000011
|
||||
0 1 3 262144 261871 0x029461b8 2 0.000008
|
||||
# worst cell: iteration 0 site 0 address 0x000e4f1d in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 3 1 8388608 2097152 2080929 0x04b26299 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00008 -2.60 22
|
||||
1 3 1 8388608 2097152 2080879 0x05b4d045 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00005 -2.51 18
|
||||
2 6 0 16777216 2097152 2089195 0x0e4e082d 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00011 -1.82 22
|
||||
3 6 0 16777216 2097152 2089046 0x01dc5cc3 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00004 -1.95 9
|
||||
4 11 1 8388608 2097152 2080698 0x0b201331 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99997 -1.88 21
|
||||
5 11 1 8388608 2097152 2080934 0x0fde6798 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00008 -2.87 7
|
||||
6 18 2 4194304 2097152 2064883 0x00482c0a 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00024 1.85 17
|
||||
7 18 2 4194304 2097152 2064474 0x02002d3b 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00004 2.09 17
|
||||
8 27 2 4194304 2097152 2064914 0x066b8f5f 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00026 -2.61 3
|
||||
9 27 2 4194304 2097152 2064236 0x04666edb 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 0.99993 3.08 19
|
||||
10 34 2 4194304 2097152 2064642 0x000d13e3 3 0.000001 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00012 2.44 14
|
||||
11 34 2 4194304 2097152 2064513 0x0214c14a 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00006 -1.94 17
|
||||
12 37 1 8388608 2097152 2080803 0x060b2662 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00002 -2.47 19
|
||||
13 37 1 8388608 2097152 2080758 0x0331a9a9 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00000 -2.26 13
|
||||
14 40 2 4194304 2097152 2064723 0x0d1e0fd4 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00016 -2.98 6
|
||||
15 40 2 4194304 2097152 2064774 0x0ec5a875 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00019 -1.61 22
|
||||
16 41 2 4194304 2097152 2064682 0x03ec6eec 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00014 -2.38 9
|
||||
17 41 2 4194304 2097152 2064788 0x01da8b47 3 0.000001 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00020 2.55 20
|
||||
18 42 2 4194304 2097152 2064547 0x08cfd70a 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00008 1.76 9
|
||||
19 42 2 4194304 2097152 2064774 0x0b615202 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00019 1.98 6
|
||||
20 48 2 4194304 2097152 2064698 0x0cf47975 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00015 -2.57 10
|
||||
21 48 2 4194304 2097152 2064685 0x0cf6fe62 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00015 2.09 2
|
||||
22 50 0 16777216 2097152 2088969 0x00d21e2c 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00000 -2.30 23
|
||||
23 50 0 16777216 2097152 2088913 0x0ee7ed6f 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99998 -1.63 21
|
||||
24 55 2 4194304 2097152 2064704 0x0cc94d09 3 0.000001 1.0000 1.0000 0.7135 1.0000 1.0000 0.2500 1.00016 3.09 16
|
||||
25 55 2 4194304 2097152 2064810 0x0e04588b 3 0.000001 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00021 1.79 23
|
||||
26 57 1 8388608 2097152 2080683 0x071707d2 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 0.99996 2.26 18
|
||||
27 57 1 8388608 2097152 2080580 0x04f60cb6 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 0.99991 -2.78 16
|
||||
28 60 1 8388608 2097152 2081125 0x0a64769a 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00017 -2.33 11
|
||||
29 60 1 8388608 2097152 2080624 0x0eada28b 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 0.99993 -1.99 14
|
||||
30 62 0 16777216 2097152 2088835 0x0d3cb88c 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99994 1.61 15
|
||||
31 62 0 16777216 2097152 2088964 0x01baa343 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00000 -1.98 12
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003391 of reads; flat control 0.003074 (ratio 1.1032x), windowed control 0.003389 (ratio 1.0006x; the gate 1.2x); min site distinct ratio 0.99991 (floors 0.98 and 0.995); worst index bit inside its window 3.09 sigma at site 24 bit 16 (the band 6)
|
||||
# program: reads 67108864, distinct items 16288897, worst site 0 address 0x04b26299 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4404, 64 MiB 0.1414; the per-site ideal caches summed: 1.0000, 1.0000, 0.6538; 37.2 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program bf8510cd00c0c70f class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 3 262144 261655 0x0b1aa513 2 0.000008
|
||||
0 1 3 262144 261636 0x0a0aa4c2 2 0.000008
|
||||
# worst cell: iteration 0 site 2 address 0x06f0d11f in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 3 2 4194304 2097152 2064567 0x0813e726 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00009 1.97 3
|
||||
1 3 2 4194304 2097152 2064660 0x0bdd3cc7 4 0.000002 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00013 -2.26 1
|
||||
2 5 2 4194304 2097152 2064744 0x06f31d4f 4 0.000002 1.0000 1.0000 0.7137 1.0000 1.0000 0.2500 1.00017 1.90 4
|
||||
3 5 2 4194304 2097152 2064476 0x04f74c73 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00004 -2.49 18
|
||||
4 8 0 16777216 2097152 2089084 0x0da80068 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00006 -2.56 15
|
||||
5 8 0 16777216 2097152 2088888 0x03c298f6 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99997 -1.86 27
|
||||
6 15 1 8388608 2097152 2080922 0x0cef3dd9 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00007 3.41 7
|
||||
7 15 1 8388608 2097152 2080961 0x0e2d839d 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00009 -1.93 17
|
||||
8 16 2 4194304 2097152 2064720 0x0ed37606 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00016 -2.29 3
|
||||
9 16 2 4194304 2097152 2064829 0x0ce21642 3 0.000001 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00022 -2.40 25
|
||||
10 18 0 16777216 2097152 2088870 0x05d987d8 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99996 2.03 11
|
||||
11 18 0 16777216 2097152 2088983 0x029a3121 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00001 2.05 10
|
||||
12 20 0 16777216 2097152 2088932 0x0dadfb46 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99999 2.63 14
|
||||
13 20 0 16777216 2097152 2089010 0x04a10d8d 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00002 2.62 17
|
||||
14 24 0 16777216 2097152 2088971 0x0b3f9d83 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00001 -2.54 21
|
||||
15 24 0 16777216 2097152 2088658 0x0a5d1395 3 0.000001 1.0000 1.0000 0.5604 1.0000 0.2500 0.0625 0.99986 2.46 20
|
||||
16 28 1 8388608 2097152 2080835 0x0da33a05 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00003 2.25 17
|
||||
17 28 1 8388608 2097152 2080764 0x0cab0080 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00000 2.18 20
|
||||
18 29 1 8388608 2097152 2080979 0x056d2902 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00010 -1.88 9
|
||||
19 29 1 8388608 2097152 2080906 0x02f221f1 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00007 2.67 3
|
||||
20 35 1 8388608 2097152 2080716 0x0a2c3876 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 0.99998 -2.34 22
|
||||
21 35 1 8388608 2097152 2080861 0x0ab58865 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00004 3.51 1
|
||||
22 41 1 8388608 2097152 2081104 0x0d4373fb 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00016 -2.57 5
|
||||
23 41 1 8388608 2097152 2080795 0x0e0c41fb 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00001 -1.83 6
|
||||
24 52 2 4194304 2097152 2064791 0x0b08686d 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00020 2.41 17
|
||||
25 52 2 4194304 2097152 2064688 0x0a04c3d9 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00015 -2.02 0
|
||||
26 54 2 4194304 2097152 2064789 0x03fcf023 4 0.000002 1.0000 1.0000 0.7126 1.0000 1.0000 0.2500 1.00020 -3.04 17
|
||||
27 54 2 4194304 2097152 2064622 0x03abef8c 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00012 -2.57 4
|
||||
28 55 0 16777216 2097152 2088972 0x017e612a 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00001 1.96 10
|
||||
29 55 0 16777216 2097152 2089045 0x02c2382b 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00004 -3.81 7
|
||||
30 62 0 16777216 2097152 2088837 0x07a76cac 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99994 1.85 7
|
||||
31 62 0 16777216 2097152 2089047 0x0b01583f 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00004 -1.68 20
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003433 of reads; flat control 0.003076 (ratio 1.1159x), windowed control 0.003434 (ratio 0.9996x; the gate 1.2x); min site distinct ratio 0.99986 (floors 0.98 and 0.995); worst index bit inside its window -3.81 sigma at site 29 bit 7 (the band 6)
|
||||
# program: reads 67108864, distinct items 16295371, worst site 0 address 0x0813e726 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4418, 64 MiB 0.1426; the per-site ideal caches summed: 1.0000, 1.0000, 0.6251; 37.5 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 24133bd7265e958f class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 7 262144 261885 0x0343ee61 2 0.000008
|
||||
0 1 7 262144 261881 0x00f22a5f 2 0.000008
|
||||
# worst cell: iteration 0 site 2 address 0x0ae65aa6 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 7 1 8388608 2097152 2080652 0x07d93627 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 0.99994 2.09 15
|
||||
1 7 1 8388608 2097152 2080868 0x0686b399 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00005 1.62 1
|
||||
2 12 2 4194304 2097152 2064729 0x09d4fb1a 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00017 2.72 22
|
||||
3 12 2 4194304 2097152 2064685 0x091bcddd 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00015 -2.57 4
|
||||
4 16 0 16777216 2097152 2088927 0x091db95c 3 0.000001 1.0000 1.0000 0.5596 1.0000 0.2500 0.0625 0.99998 2.37 24
|
||||
5 16 0 16777216 2097152 2089036 0x089bc5e3 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00004 -2.18 3
|
||||
6 21 2 4194304 2097152 2064914 0x09526974 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00026 -1.99 5
|
||||
7 21 2 4194304 2097152 2065025 0x08d25517 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00031 2.32 15
|
||||
8 23 1 8388608 2097152 2080988 0x0e5dde91 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00011 -1.78 23
|
||||
9 23 1 8388608 2097152 2081037 0x0bdf5845 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00013 2.36 3
|
||||
10 26 1 8388608 2097152 2080754 0x003b1a48 4 0.000002 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 0.99999 2.56 8
|
||||
11 26 1 8388608 2097152 2080983 0x06b45091 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00010 -1.90 25
|
||||
12 31 0 16777216 2097152 2088910 0x0aa4ae37 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99998 -2.29 24
|
||||
13 31 0 16777216 2097152 2088934 0x081c8307 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99999 2.01 16
|
||||
14 37 0 16777216 2097152 2089016 0x0d26ec54 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00003 -2.15 12
|
||||
15 37 0 16777216 2097152 2088952 0x06846339 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00000 -2.47 7
|
||||
16 42 2 4194304 2097152 2064723 0x0fdf72bf 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00016 2.56 19
|
||||
17 42 2 4194304 2097152 2064835 0x0eac09aa 3 0.000001 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00022 -2.12 10
|
||||
18 50 2 4194304 2097152 2065072 0x01c5480c 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00033 2.89 21
|
||||
19 50 2 4194304 2097152 2064560 0x02d4382d 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00009 2.32 7
|
||||
20 52 1 8388608 2097152 2080693 0x0465e729 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 0.99996 2.31 17
|
||||
21 52 1 8388608 2097152 2080994 0x0326cf51 4 0.000002 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 1.00011 2.95 6
|
||||
22 55 1 8388608 2097152 2080816 0x00faef0c 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00002 3.53 8
|
||||
23 55 1 8388608 2097152 2080759 0x02721691 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00000 -2.40 26
|
||||
24 56 1 8388608 2097152 2080758 0x035ae275 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00000 2.13 5
|
||||
25 56 1 8388608 2097152 2080689 0x05953052 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99996 2.28 21
|
||||
26 57 2 4194304 2097152 2064382 0x09a2e80e 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00000 1.70 20
|
||||
27 57 2 4194304 2097152 2064898 0x086ecbc9 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00025 1.86 9
|
||||
28 59 2 4194304 2097152 2064762 0x02cf86d2 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00018 -1.49 22
|
||||
29 59 2 4194304 2097152 2064911 0x008d0c7b 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00026 2.31 20
|
||||
30 61 0 16777216 2097152 2088933 0x0e8cac4a 4 0.000002 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99999 -3.55 0
|
||||
31 61 0 16777216 2097152 2089107 0x0278742c 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00007 1.93 26
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003434 of reads; flat control 0.003073 (ratio 1.1175x), windowed control 0.003433 (ratio 1.0003x; the gate 1.2x); min site distinct ratio 0.99994 (floors 0.98 and 0.995); worst index bit inside its window -3.55 sigma at site 30 bit 0 (the band 6)
|
||||
# program: reads 67108864, distinct items 16241632, worst site 2 address 0x09d4fb1a in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4443, 64 MiB 0.1429; the per-site ideal caches summed: 1.0000, 1.0000, 0.6381; 37.2 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program ed647abf60a5bd32 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 2 262144 261872 0x05f8d1aa 2 0.000008
|
||||
0 1 2 262144 261875 0x03973640 3 0.000011
|
||||
# worst cell: iteration 0 site 1 address 0x03973640 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 2 1 8388608 2097152 2080802 0x04e14ec7 4 0.000002 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00002 -2.58 25
|
||||
1 2 1 8388608 2097152 2080971 0x04211450 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00010 -2.65 21
|
||||
2 3 1 8388608 2097152 2080923 0x023d7abf 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00007 2.18 5
|
||||
3 3 1 8388608 2097152 2080683 0x04a06101 4 0.000002 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 0.99996 3.13 20
|
||||
4 7 0 16777216 2097152 2089101 0x052b5c58 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00007 2.28 12
|
||||
5 7 0 16777216 2097152 2088894 0x0ea8f6e0 4 0.000002 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99997 -1.63 2
|
||||
6 9 2 4194304 2097152 2064761 0x01cfdee9 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00018 -1.55 24
|
||||
7 9 2 4194304 2097152 2064803 0x032825af 3 0.000001 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00020 -1.84 8
|
||||
8 10 0 16777216 2097152 2088925 0x08f54043 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99998 2.69 21
|
||||
9 10 0 16777216 2097152 2088838 0x0ee50520 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99994 3.05 2
|
||||
10 27 0 16777216 2097152 2088759 0x0bd61849 3 0.000001 1.0000 1.0000 0.5596 1.0000 0.2500 0.0625 0.99990 -2.66 22
|
||||
11 27 0 16777216 2097152 2088929 0x0e72d133 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99999 3.90 9
|
||||
12 31 2 4194304 2097152 2064623 0x01d8e0aa 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00012 -2.24 12
|
||||
13 31 2 4194304 2097152 2064847 0x0027fdfb 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00022 -2.39 22
|
||||
14 33 0 16777216 2097152 2088973 0x04d07c60 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00001 -2.74 13
|
||||
15 33 0 16777216 2097152 2088959 0x002b5d5d 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00000 2.46 19
|
||||
16 36 1 8388608 2097152 2080712 0x05de5e64 4 0.000002 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 0.99997 1.81 3
|
||||
17 36 1 8388608 2097152 2080944 0x06b26a12 4 0.000002 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00008 2.26 21
|
||||
18 38 2 4194304 2097152 2064895 0x0a4b211d 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00025 -2.38 6
|
||||
19 38 2 4194304 2097152 2064767 0x0b1e9590 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00019 -2.15 25
|
||||
20 43 2 4194304 2097152 2064538 0x00002183 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00007 2.47 15
|
||||
21 43 2 4194304 2097152 2064785 0x00f2fa9c 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00019 1.40 24
|
||||
22 45 0 16777216 2097152 2088974 0x0232deed 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00001 -2.78 10
|
||||
23 45 0 16777216 2097152 2088823 0x082dfbc8 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99993 -2.57 12
|
||||
24 46 1 8388608 2097152 2080831 0x05307add 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00003 2.35 26
|
||||
25 46 1 8388608 2097152 2080972 0x02c7003f 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00010 -2.73 13
|
||||
26 49 2 4194304 2097152 2064869 0x0ce514d8 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00023 3.14 1
|
||||
27 49 2 4194304 2097152 2064825 0x0d1a398d 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00021 -1.92 18
|
||||
28 51 1 8388608 2097152 2081035 0x036f523c 4 0.000002 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00013 -2.44 22
|
||||
29 51 1 8388608 2097152 2080904 0x007d72c3 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00007 -2.38 17
|
||||
30 58 2 4194304 2097152 2064698 0x0fb2a665 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00015 -2.02 18
|
||||
31 58 2 4194304 2097152 2064756 0x0d9fb4df 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00018 2.81 4
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003920 of reads; flat control 0.003072 (ratio 1.2759x), windowed control 0.003916 (ratio 1.0008x; the gate 1.2x); min site distinct ratio 0.99990 (floors 0.98 and 0.995); worst index bit inside its window 3.90 sigma at site 11 bit 9 (the band 6)
|
||||
# program: reads 67108864, distinct items 16068557, worst site 0 address 0x04e14ec7 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4774, 64 MiB 0.1605; the per-site ideal caches summed: 1.0000, 1.0000, 0.6346; 38.1 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program f8e8969443448ecb class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 10 262144 261667 0x0342068e 3 0.000011
|
||||
0 1 10 262144 261665 0x037fe51f 2 0.000008
|
||||
# worst cell: iteration 0 site 0 address 0x0342068e in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 10 2 4194304 2097152 2064542 0x015c50c8 4 0.000002 1.0000 1.0000 0.7135 1.0000 1.0000 0.2500 1.00008 1.73 11
|
||||
1 10 2 4194304 2097152 2064770 0x020b2e49 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00019 1.63 7
|
||||
2 16 0 16777216 2097152 2089059 0x06fd1db0 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00005 2.34 17
|
||||
3 16 0 16777216 2097152 2088990 0x07e58ba5 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00001 -2.10 10
|
||||
4 17 0 16777216 2097152 2088994 0x0fd5d743 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00002 -1.94 25
|
||||
5 17 0 16777216 2097152 2089076 0x00f95406 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00006 -1.74 10
|
||||
6 21 2 4194304 2097152 2064659 0x06a054ca 5 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00013 -1.93 6
|
||||
7 21 2 4194304 2097152 2064885 0x05a7e0c2 3 0.000001 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00024 2.54 1
|
||||
8 23 1 8388608 2097152 2080870 0x0b827be5 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00005 2.19 17
|
||||
9 23 1 8388608 2097152 2080956 0x0c78df5f 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00009 -2.98 8
|
||||
10 28 0 16777216 2097152 2088984 0x0cb359c8 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00001 -2.26 18
|
||||
11 28 0 16777216 2097152 2088903 0x0638beab 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99997 1.54 2
|
||||
12 29 0 16777216 2097152 2088841 0x01838b36 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99994 -2.28 4
|
||||
13 29 0 16777216 2097152 2088956 0x0e442134 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00000 3.31 19
|
||||
14 33 1 8388608 2097152 2080793 0x001b8dc0 4 0.000002 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00001 -2.16 11
|
||||
15 33 1 8388608 2097152 2081029 0x04edfa10 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00013 2.26 24
|
||||
16 34 0 16777216 2097152 2089107 0x0dd04c77 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00007 2.56 13
|
||||
17 34 0 16777216 2097152 2088893 0x0ae5097a 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99997 -2.69 19
|
||||
18 35 0 16777216 2097152 2089009 0x0bb3b40d 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00002 -2.43 23
|
||||
19 35 0 16777216 2097152 2088933 0x070a0621 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99999 -2.19 24
|
||||
20 37 0 16777216 2097152 2089027 0x03099106 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00003 2.22 7
|
||||
21 37 0 16777216 2097152 2088999 0x08d383ff 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00002 -1.53 13
|
||||
22 40 1 8388608 2097152 2081031 0x0e4fb3b6 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00013 2.33 15
|
||||
23 40 1 8388608 2097152 2080995 0x0d096fc6 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00011 -1.96 24
|
||||
24 41 1 8388608 2097152 2080943 0x02b4d894 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00008 -2.94 22
|
||||
25 41 1 8388608 2097152 2080678 0x054cd53d 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99996 -2.78 8
|
||||
26 54 2 4194304 2097152 2064942 0x07779f4e 4 0.000002 1.0000 1.0000 0.7125 1.0000 1.0000 0.2500 1.00027 1.74 11
|
||||
27 54 2 4194304 2097152 2064927 0x076d6cc7 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00026 -1.95 22
|
||||
28 61 0 16777216 2097152 2089030 0x0bed0704 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00003 -1.96 8
|
||||
29 61 0 16777216 2097152 2088963 0x0192583c 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00000 2.10 26
|
||||
30 62 2 4194304 2097152 2064643 0x0cad5999 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00013 2.80 22
|
||||
31 62 2 4194304 2097152 2064563 0x0c00d56f 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00009 2.03 6
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003237 of reads; flat control 0.003071 (ratio 1.0540x), windowed control 0.003238 (ratio 0.9997x; the gate 1.2x); min site distinct ratio 0.99994 (floors 0.98 and 0.995); worst index bit inside its window 3.31 sigma at site 13 bit 19 (the band 6)
|
||||
# program: reads 67108864, distinct items 16386023, worst site 6 address 0x06a054ca in 5 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4271, 64 MiB 0.1370; the per-site ideal caches summed: 1.0000, 1.0000, 0.6120; 37.5 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 160649503341aaab class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 1 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 1 262144 261626 0x0c36e229 2 0.000008
|
||||
0 1 1 262144 261575 0x0c4df63a 2 0.000008
|
||||
# worst cell: iteration 0 site 5 address 0x051243d9 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 1 2 4194304 2097152 2064620 0x0f20f08a 3 0.000001 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00011 -1.75 0
|
||||
1 1 2 4194304 2097152 2064664 0x0e3c2793 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00014 -2.22 24
|
||||
2 8 1 8388608 2097152 2080742 0x05aa1636 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99999 2.43 4
|
||||
3 8 1 8388608 2097152 2080803 0x0174c4bf 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00002 2.23 5
|
||||
4 9 0 16777216 2097152 2089015 0x07bfc86f 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00003 2.56 3
|
||||
5 9 0 16777216 2097152 2089059 0x027b30bc 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00005 2.13 11
|
||||
6 13 1 8388608 2097152 2080752 0x08a9e70c 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99999 -1.82 22
|
||||
7 13 1 8388608 2097152 2080802 0x0d6c89d5 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00002 2.45 0
|
||||
8 22 0 16777216 2097152 2089102 0x07323aba 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00007 -2.58 8
|
||||
9 22 0 16777216 2097152 2089143 0x0a707102 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00009 -2.02 24
|
||||
10 26 2 4194304 2097152 2064711 0x0f35989a 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00016 -2.87 25
|
||||
11 26 2 4194304 2097152 2064898 0x0e10140d 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00025 -2.79 1
|
||||
12 33 0 16777216 2097152 2088937 0x0cc52d13 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99999 -1.77 0
|
||||
13 33 0 16777216 2097152 2089065 0x0451d2fd 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00005 -2.38 13
|
||||
14 34 1 8388608 2097152 2080864 0x0a1af540 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00005 -2.69 2
|
||||
15 34 1 8388608 2097152 2080867 0x0a3d0ae9 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00005 2.95 21
|
||||
16 35 0 16777216 2097152 2088945 0x025f3be0 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99999 -1.83 23
|
||||
17 35 0 16777216 2097152 2089147 0x0c8f9740 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00009 -2.67 14
|
||||
18 44 1 8388608 2097152 2080826 0x02e56123 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00003 1.72 22
|
||||
19 44 1 8388608 2097152 2080916 0x01310f61 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00007 -2.93 11
|
||||
20 46 0 16777216 2097152 2089144 0x03bd5597 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00009 2.14 12
|
||||
21 46 0 16777216 2097152 2088957 0x09024473 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00000 2.32 5
|
||||
22 50 0 16777216 2097152 2088845 0x0445d9d5 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99994 2.80 23
|
||||
23 50 0 16777216 2097152 2089093 0x04df6ce7 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00006 2.74 17
|
||||
24 54 0 16777216 2097152 2088933 0x0a07a102 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99999 -2.02 2
|
||||
25 54 0 16777216 2097152 2089030 0x0c1379f3 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00003 -3.44 1
|
||||
26 55 0 16777216 2097152 2088878 0x085501a8 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99996 -3.12 25
|
||||
27 55 0 16777216 2097152 2088948 0x0bbd318e 4 0.000002 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99999 -2.15 15
|
||||
28 60 2 4194304 2097152 2064493 0x08396e6d 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00005 -2.12 20
|
||||
29 60 2 4194304 2097152 2064724 0x0868b1b5 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00016 -2.12 0
|
||||
30 63 0 16777216 2097152 2089012 0x0678c249 3 0.000001 1.0000 1.0000 0.5597 1.0000 0.2500 0.0625 1.00002 -1.83 13
|
||||
31 63 0 16777216 2097152 2089134 0x02233538 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00008 2.22 15
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003338 of reads; flat control 0.003075 (ratio 1.0854x), windowed control 0.003341 (ratio 0.9990x; the gate 1.2x); min site distinct ratio 0.99994 (floors 0.98 and 0.995); worst index bit inside its window -3.44 sigma at site 25 bit 1 (the band 6)
|
||||
# program: reads 67108864, distinct items 16370394, worst site 1 address 0x0e3c2793 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4315, 64 MiB 0.1391; the per-site ideal caches summed: 1.0000, 1.0000, 0.6025; 37.7 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 62aa0bfc93f13028 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 2 262144 262018 0x0e42540a 2 0.000008
|
||||
0 1 2 262144 262009 0x0e87042e 2 0.000008
|
||||
# worst cell: iteration 0 site 3 address 0x0bd48627 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 2 0 16777216 2097152 2089004 0x0cd23206 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00002 -3.31 11
|
||||
1 2 0 16777216 2097152 2089074 0x01eacf3c 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00005 -3.36 10
|
||||
2 14 2 4194304 2097152 2064697 0x08bdfbf3 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00015 -2.16 3
|
||||
3 14 2 4194304 2097152 2064991 0x0adf7230 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00029 -2.24 2
|
||||
4 15 1 8388608 2097152 2080753 0x0b5b8ced 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 0.99999 3.46 15
|
||||
5 15 1 8388608 2097152 2080866 0x0eb45afa 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00005 -3.01 9
|
||||
6 16 0 16777216 2097152 2088985 0x09e312bd 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00001 -2.32 21
|
||||
7 16 0 16777216 2097152 2089013 0x0e41d3af 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00003 -3.46 23
|
||||
8 21 0 16777216 2097152 2089074 0x0233b8e7 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00005 3.40 15
|
||||
9 21 0 16777216 2097152 2088934 0x04dda3e6 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 0.99999 -2.18 24
|
||||
10 26 2 4194304 2097152 2064727 0x00d5209f 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00017 2.10 15
|
||||
11 26 2 4194304 2097152 2064833 0x0282a4be 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00022 -1.77 15
|
||||
12 30 0 16777216 2097152 2088776 0x0486d4e0 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 0.99991 -3.05 1
|
||||
13 30 0 16777216 2097152 2089051 0x05d602a3 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00004 2.14 17
|
||||
14 32 2 4194304 2097152 2064617 0x06a3fec8 4 0.000002 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00011 -2.67 2
|
||||
15 32 2 4194304 2097152 2064708 0x05c925e7 4 0.000002 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00016 3.15 21
|
||||
16 36 1 8388608 2097152 2080776 0x08c73031 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00000 1.81 2
|
||||
17 36 1 8388608 2097152 2080754 0x0de40a50 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99999 1.74 26
|
||||
18 39 2 4194304 2097152 2064597 0x000af8f5 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00010 2.75 18
|
||||
19 39 2 4194304 2097152 2064470 0x005eaed8 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00004 -2.00 19
|
||||
20 44 1 8388608 2097152 2080775 0x007f50dc 3 0.000001 1.0000 1.0000 0.6157 1.0000 0.5000 0.1250 1.00000 -1.98 0
|
||||
21 44 1 8388608 2097152 2080944 0x070ee707 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00008 2.92 4
|
||||
22 45 1 8388608 2097152 2080867 0x062f7ddd 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00005 -2.07 18
|
||||
23 45 1 8388608 2097152 2081022 0x075a2ba5 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00012 1.94 18
|
||||
24 50 0 16777216 2097152 2089068 0x0fee120f 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00005 2.18 17
|
||||
25 50 0 16777216 2097152 2088928 0x0a8c8847 4 0.000002 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99998 1.97 2
|
||||
26 60 1 8388608 2097152 2080743 0x0e047ef5 4 0.000002 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 0.99999 -2.67 15
|
||||
27 60 1 8388608 2097152 2080946 0x08edd8b2 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00009 2.95 9
|
||||
28 61 0 16777216 2097152 2088889 0x0a37d852 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99997 -1.90 17
|
||||
29 61 0 16777216 2097152 2088952 0x0961c7e8 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00000 1.94 11
|
||||
30 63 1 8388608 2097152 2081084 0x0e81d734 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00015 -2.27 16
|
||||
31 63 1 8388608 2097152 2080785 0x0e871b55 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00001 2.09 7
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003156 of reads; flat control 0.003075 (ratio 1.0264x), windowed control 0.003160 (ratio 0.9988x; the gate 1.2x); min site distinct ratio 0.99991 (floors 0.98 and 0.995); worst index bit inside its window 3.46 sigma at site 4 bit 15 (the band 6)
|
||||
# program: reads 67108864, distinct items 16429212, worst site 2 address 0x08bdfbf3 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4212, 64 MiB 0.1338; the per-site ideal caches summed: 1.0000, 1.0000, 0.6190; 37.5 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 3f1af0bbaaef74fa class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 3 262144 262002 0x07f134b1 2 0.000008
|
||||
0 1 3 262144 262012 0x0a8848bb 2 0.000008
|
||||
# worst cell: iteration 0 site 2 address 0x0f8343d0 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 3 0 16777216 2097152 2088996 0x0cbb59da 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00002 2.18 1
|
||||
1 3 0 16777216 2097152 2089183 0x0a718089 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00011 2.08 11
|
||||
2 5 1 8388608 2097152 2080847 0x0fb1f63d 4 0.000002 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00004 3.27 5
|
||||
3 5 1 8388608 2097152 2080897 0x0d06ab75 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00006 -2.05 24
|
||||
4 13 2 4194304 2097152 2064814 0x05e5885b 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00021 -2.58 4
|
||||
5 13 2 4194304 2097152 2064602 0x047ac946 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00011 -1.81 5
|
||||
6 15 2 4194304 2097152 2064413 0x0b1385e8 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00001 -2.35 15
|
||||
7 15 2 4194304 2097152 2064991 0x0a8c2bdc 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00029 1.95 5
|
||||
8 16 2 4194304 2097152 2064808 0x0e3d532a 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00021 -2.07 6
|
||||
9 16 2 4194304 2097152 2064803 0x0f1eb20a 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00020 -2.16 20
|
||||
10 24 0 16777216 2097152 2088991 0x0550bb50 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00001 -3.16 1
|
||||
11 24 0 16777216 2097152 2088858 0x0d44845f 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99995 -2.00 20
|
||||
12 33 2 4194304 2097152 2064743 0x0fcb1fc5 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00017 2.21 4
|
||||
13 33 2 4194304 2097152 2064971 0x0d9a081b 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00028 -2.21 19
|
||||
14 37 1 8388608 2097152 2080823 0x08014036 4 0.000002 1.0000 1.0000 0.6158 1.0000 0.5000 0.1250 1.00003 2.52 4
|
||||
15 37 1 8388608 2097152 2080830 0x0c1b3d35 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00003 1.48 5
|
||||
16 44 2 4194304 2097152 2064369 0x0f89e882 4 0.000002 1.0000 1.0000 0.7135 1.0000 1.0000 0.2500 0.99999 -2.00 7
|
||||
17 44 2 4194304 2097152 2064584 0x0d4704d5 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00010 2.59 18
|
||||
18 45 2 4194304 2097152 2064707 0x0a38b699 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00016 2.00 7
|
||||
19 45 2 4194304 2097152 2064395 0x088409e8 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00001 2.25 3
|
||||
20 51 2 4194304 2097152 2064454 0x00cb2b66 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00003 2.08 23
|
||||
21 51 2 4194304 2097152 2064670 0x0034b787 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00014 2.21 2
|
||||
22 53 1 8388608 2097152 2080753 0x0696b0ab 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 0.99999 -2.50 9
|
||||
23 53 1 8388608 2097152 2080886 0x005b4fa2 4 0.000002 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00006 1.75 7
|
||||
24 57 0 16777216 2097152 2088898 0x0bb45708 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99997 2.93 25
|
||||
25 57 0 16777216 2097152 2089068 0x0e8a9b07 3 0.000001 1.0000 1.0000 0.5597 1.0000 0.2500 0.0625 1.00005 1.83 2
|
||||
26 59 0 16777216 2097152 2088887 0x022c48f7 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99997 3.26 1
|
||||
27 59 0 16777216 2097152 2088972 0x07d98200 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00001 2.05 16
|
||||
28 61 0 16777216 2097152 2088836 0x053563a9 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99994 -2.43 12
|
||||
29 61 0 16777216 2097152 2088824 0x0e2d271f 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99993 -2.10 19
|
||||
30 62 0 16777216 2097152 2088923 0x033cc4ac 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99998 -2.29 15
|
||||
31 62 0 16777216 2097152 2088953 0x04cd2576 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00000 -1.60 6
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003436 of reads; flat control 0.003070 (ratio 1.1192x), windowed control 0.003432 (ratio 1.0014x; the gate 1.2x); min site distinct ratio 0.99993 (floors 0.98 and 0.995); worst index bit inside its window 3.27 sigma at site 2 bit 5 (the band 6)
|
||||
# program: reads 67108864, distinct items 16295799, worst site 2 address 0x0fb1f63d in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4418, 64 MiB 0.1426; the per-site ideal caches summed: 1.0000, 1.0000, 0.6373; 37.1 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,67 @@
|
|||
# liveness: program 4de7b836cc40a4ea class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw registers 64 day bytes:69676e65756d2d6461792ffa50000000000000 dataset 2^28 words (memory-hard) headers 4 warps 16 threads 32 probe words 2
|
||||
reg probes first_load_changed hash_changed least_changed_load least_changed_frac
|
||||
0 4096 1.000000 1.000000 0 1.000000
|
||||
1 4096 1.000000 1.000000 0 1.000000
|
||||
2 4096 1.000000 1.000000 0 1.000000
|
||||
3 4096 1.000000 1.000000 0 1.000000
|
||||
4 4096 1.000000 1.000000 0 1.000000
|
||||
5 4096 1.000000 1.000000 0 1.000000
|
||||
6 4096 1.000000 1.000000 0 1.000000
|
||||
7 4096 1.000000 1.000000 0 1.000000
|
||||
8 4096 1.000000 1.000000 0 1.000000
|
||||
9 4096 1.000000 1.000000 0 1.000000
|
||||
10 4096 1.000000 1.000000 0 1.000000
|
||||
11 4096 1.000000 1.000000 0 1.000000
|
||||
12 4096 1.000000 1.000000 0 1.000000
|
||||
13 4096 1.000000 1.000000 0 1.000000
|
||||
14 4096 1.000000 1.000000 0 1.000000
|
||||
15 4096 1.000000 1.000000 0 1.000000
|
||||
16 4096 1.000000 1.000000 0 1.000000
|
||||
17 4096 1.000000 1.000000 0 1.000000
|
||||
18 4096 1.000000 1.000000 0 1.000000
|
||||
19 4096 1.000000 1.000000 0 1.000000
|
||||
20 4096 1.000000 1.000000 0 1.000000
|
||||
21 4096 1.000000 1.000000 0 1.000000
|
||||
22 4096 1.000000 1.000000 0 1.000000
|
||||
23 4096 1.000000 1.000000 0 1.000000
|
||||
24 4096 1.000000 1.000000 0 1.000000
|
||||
25 4096 1.000000 1.000000 0 1.000000
|
||||
26 4096 1.000000 1.000000 0 1.000000
|
||||
27 4096 1.000000 1.000000 0 1.000000
|
||||
28 4096 1.000000 1.000000 0 1.000000
|
||||
29 4096 1.000000 1.000000 0 1.000000
|
||||
30 4096 1.000000 1.000000 0 1.000000
|
||||
31 4096 1.000000 1.000000 0 1.000000
|
||||
32 4096 1.000000 1.000000 0 1.000000
|
||||
33 4096 1.000000 1.000000 0 1.000000
|
||||
34 4096 1.000000 1.000000 0 1.000000
|
||||
35 4096 1.000000 1.000000 0 1.000000
|
||||
36 4096 1.000000 1.000000 0 1.000000
|
||||
37 4096 1.000000 1.000000 0 1.000000
|
||||
38 4096 1.000000 1.000000 0 1.000000
|
||||
39 4096 1.000000 1.000000 0 1.000000
|
||||
40 4096 1.000000 1.000000 0 1.000000
|
||||
41 4096 1.000000 1.000000 0 1.000000
|
||||
42 4096 1.000000 1.000000 0 1.000000
|
||||
43 4096 1.000000 1.000000 0 1.000000
|
||||
44 4096 1.000000 1.000000 0 1.000000
|
||||
45 4096 1.000000 1.000000 0 1.000000
|
||||
46 4096 1.000000 1.000000 0 1.000000
|
||||
47 4096 1.000000 1.000000 0 1.000000
|
||||
48 4096 1.000000 1.000000 0 1.000000
|
||||
49 4096 1.000000 1.000000 0 1.000000
|
||||
50 4096 1.000000 1.000000 0 1.000000
|
||||
51 4096 1.000000 1.000000 0 1.000000
|
||||
52 4096 1.000000 1.000000 0 1.000000
|
||||
53 4096 1.000000 1.000000 0 1.000000
|
||||
54 4096 1.000000 1.000000 0 1.000000
|
||||
55 4096 1.000000 1.000000 0 1.000000
|
||||
56 4096 1.000000 1.000000 0 1.000000
|
||||
57 4096 1.000000 1.000000 0 1.000000
|
||||
58 4096 1.000000 1.000000 0 1.000000
|
||||
59 4096 1.000000 1.000000 0 1.000000
|
||||
60 4096 1.000000 1.000000 0 1.000000
|
||||
61 4096 1.000000 1.000000 0 1.000000
|
||||
62 4096 1.000000 1.000000 0 1.000000
|
||||
63 4096 1.000000 1.000000 0 1.000000
|
||||
# verdict: 64 registers over 4096 probes each; first-load address changed in 1.000000 of lanes at the least live register, the hash in 1.000000; the least changed (register, first-iteration load) is (0, 0) at 1.000000; LIVE on live data (every register moves every lane's first address and hash); 18.3 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
|
@ -0,0 +1,67 @@
|
|||
# liveness: program 2b406490ba8d3c91 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw registers 64 day 2026-10-03 dataset 2^28 words (memory-hard) headers 2 warps 8 threads 32 probe words 2
|
||||
reg probes first_load_changed hash_changed least_changed_load least_changed_frac
|
||||
0 1024 1.000000 1.000000 0 1.000000
|
||||
1 1024 1.000000 1.000000 0 1.000000
|
||||
2 1024 1.000000 1.000000 0 1.000000
|
||||
3 1024 1.000000 1.000000 0 1.000000
|
||||
4 1024 1.000000 1.000000 0 1.000000
|
||||
5 1024 1.000000 1.000000 0 1.000000
|
||||
6 1024 1.000000 1.000000 0 1.000000
|
||||
7 1024 1.000000 1.000000 0 1.000000
|
||||
8 1024 1.000000 1.000000 0 1.000000
|
||||
9 1024 1.000000 1.000000 0 1.000000
|
||||
10 1024 1.000000 1.000000 0 1.000000
|
||||
11 1024 1.000000 1.000000 0 1.000000
|
||||
12 1024 1.000000 1.000000 0 1.000000
|
||||
13 1024 1.000000 1.000000 0 1.000000
|
||||
14 1024 1.000000 1.000000 0 1.000000
|
||||
15 1024 1.000000 1.000000 0 1.000000
|
||||
16 1024 1.000000 1.000000 0 1.000000
|
||||
17 1024 1.000000 1.000000 0 1.000000
|
||||
18 1024 1.000000 1.000000 0 1.000000
|
||||
19 1024 1.000000 1.000000 0 1.000000
|
||||
20 1024 1.000000 1.000000 0 1.000000
|
||||
21 1024 1.000000 1.000000 0 1.000000
|
||||
22 1024 1.000000 1.000000 0 1.000000
|
||||
23 1024 1.000000 1.000000 0 1.000000
|
||||
24 1024 1.000000 1.000000 0 1.000000
|
||||
25 1024 1.000000 1.000000 0 1.000000
|
||||
26 1024 1.000000 1.000000 0 1.000000
|
||||
27 1024 1.000000 1.000000 0 1.000000
|
||||
28 1024 1.000000 1.000000 0 1.000000
|
||||
29 1024 1.000000 1.000000 0 1.000000
|
||||
30 1024 1.000000 1.000000 0 1.000000
|
||||
31 1024 1.000000 1.000000 0 1.000000
|
||||
32 1024 1.000000 1.000000 0 1.000000
|
||||
33 1024 1.000000 1.000000 0 1.000000
|
||||
34 1024 1.000000 1.000000 0 1.000000
|
||||
35 1024 1.000000 1.000000 0 1.000000
|
||||
36 1024 1.000000 1.000000 0 1.000000
|
||||
37 1024 1.000000 1.000000 0 1.000000
|
||||
38 1024 1.000000 1.000000 0 1.000000
|
||||
39 1024 1.000000 1.000000 0 1.000000
|
||||
40 1024 1.000000 1.000000 0 1.000000
|
||||
41 1024 1.000000 1.000000 0 1.000000
|
||||
42 1024 1.000000 1.000000 0 1.000000
|
||||
43 1024 1.000000 1.000000 0 1.000000
|
||||
44 1024 1.000000 1.000000 0 1.000000
|
||||
45 1024 1.000000 1.000000 0 1.000000
|
||||
46 1024 1.000000 1.000000 0 1.000000
|
||||
47 1024 1.000000 1.000000 0 1.000000
|
||||
48 1024 1.000000 1.000000 0 1.000000
|
||||
49 1024 1.000000 1.000000 0 1.000000
|
||||
50 1024 1.000000 1.000000 0 1.000000
|
||||
51 1024 1.000000 1.000000 0 1.000000
|
||||
52 1024 1.000000 1.000000 0 1.000000
|
||||
53 1024 1.000000 1.000000 0 1.000000
|
||||
54 1024 1.000000 1.000000 0 1.000000
|
||||
55 1024 1.000000 1.000000 0 1.000000
|
||||
56 1024 1.000000 1.000000 0 1.000000
|
||||
57 1024 1.000000 1.000000 0 1.000000
|
||||
58 1024 1.000000 1.000000 0 1.000000
|
||||
59 1024 1.000000 1.000000 0 1.000000
|
||||
60 1024 1.000000 1.000000 0 1.000000
|
||||
61 1024 1.000000 1.000000 0 1.000000
|
||||
62 1024 1.000000 1.000000 0 1.000000
|
||||
63 1024 1.000000 1.000000 0 1.000000
|
||||
# verdict: 64 registers over 1024 probes each; first-load address changed in 1.000000 of lanes at the least live register, the hash in 1.000000; the least changed (register, first-iteration load) is (0, 0) at 1.000000; LIVE on live data (every register moves every lane's first address and hash); 4.7 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
|
@ -0,0 +1,5 @@
|
|||
canary-p18 # F8 form 16 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 1 --warps 256 --threads 16 --seed igneum-attack-f8/program/18 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
object-h4 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --header-from 4 --warps 8192 --threads 32 --epoch-hex edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
liveness-object-h4 # verdict 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow liveness --count 4 --header-from 4 --warps 16 --threads 32 --epoch-hex edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p26 27 28 29 30 31 32 33 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/26 27 28 29 30 31 32 33 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
liveness-p26 # verdict 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow liveness --count 2 --warps 8 --threads 32 --seed igneum-attack-f8/program/26 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
seed-p26 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/26 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p27 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/27 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p28 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/28 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p29 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/29 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p30 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/30 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p31 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/31 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p32 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/32 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
seed-p33 # F8 form 32 env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/all4-b819c23a/igneum-pow addrsite --count 4 --warps 2048 --threads 32 --seed igneum-attack-f8/program/33 --day-hex 69676e65756d2d6461792ffa50000000000000 --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --state /srv/builds/v6-census/packs/node1-state.igsd1
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 4de7b836cc40a4ea class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day bytes:69676e65756d2d6461792ffa50000000000000 dataset 2^28 words (memory-hard) headers 4 warps 8192 nonces/header 262144 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 7 1048576 1044536 0x0e05c4a9 3 0.000003
|
||||
0 1 7 1048576 1044607 0x08697f24 3 0.000003
|
||||
# worst cell: iteration 0 site 28 address 0x0f45e0db in 4 reads, share 0.000004
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 7 1 8388608 8388608 8131224 0x08f95f48 4 0.000000 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00059 -2.28 12
|
||||
1 7 1 8388608 8388608 8132204 0x0a60bde7 4 0.000000 1.0000 0.8678 0.3536 1.0000 0.5000 0.1250 1.00071 -2.24 21
|
||||
2 8 1 8388608 8388608 8132174 0x0d9d2d01 5 0.000001 1.0000 0.8680 0.3536 1.0000 0.5000 0.1250 1.00070 -2.48 13
|
||||
3 8 1 8388608 8388608 8131438 0x0899c671 5 0.000001 1.0000 0.8678 0.3536 1.0000 0.5000 0.1250 1.00061 -2.83 6
|
||||
4 9 0 16777216 8388608 8258753 0x08a8b28d 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00015 1.88 14
|
||||
5 9 0 16777216 8388608 8259388 0x03d1dc2b 4 0.000000 1.0000 0.7131 0.2827 1.0000 0.2500 0.0625 1.00022 2.64 25
|
||||
6 10 1 8388608 8388608 8132147 0x0ee46b12 5 0.000001 1.0000 0.8679 0.3536 1.0000 0.5000 0.1250 1.00070 1.88 15
|
||||
7 10 1 8388608 8388608 8132252 0x087b47fa 4 0.000000 1.0000 0.8679 0.3536 1.0000 0.5000 0.1250 1.00071 2.82 7
|
||||
8 11 2 4194304 8388608 7885782 0x07578642 5 0.000001 1.0000 1.0000 0.4839 1.0000 1.0000 0.2500 1.00273 -2.39 1
|
||||
9 11 2 4194304 8388608 7884591 0x048afc00 5 0.000001 1.0000 1.0000 0.4841 1.0000 1.0000 0.2500 1.00258 -3.06 1
|
||||
10 13 1 8388608 8388608 8131079 0x02be2d07 4 0.000000 1.0000 0.8681 0.3537 1.0000 0.5000 0.1250 1.00057 -2.24 7
|
||||
11 13 1 8388608 8388608 8131565 0x04d6955b 4 0.000000 1.0000 0.8680 0.3538 1.0000 0.5000 0.1250 1.00063 -1.87 17
|
||||
12 29 0 16777216 8388608 8259329 0x08f9a4bf 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00022 1.99 25
|
||||
13 29 0 16777216 8388608 8258841 0x0a5492cf 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00016 -2.54 14
|
||||
14 30 1 8388608 8388608 8131950 0x02134f18 5 0.000001 1.0000 0.8677 0.3535 1.0000 0.5000 0.1250 1.00068 -2.31 16
|
||||
15 30 1 8388608 8388608 8132719 0x04eec855 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00077 -2.37 24
|
||||
16 31 1 8388608 8388608 8131259 0x055f81c2 4 0.000000 1.0000 0.8680 0.3537 1.0000 0.5000 0.1250 1.00059 2.65 23
|
||||
17 31 1 8388608 8388608 8132146 0x00887025 5 0.000001 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00070 -2.40 24
|
||||
18 44 1 8388608 8388608 8132643 0x06da0c02 4 0.000000 1.0000 0.8679 0.3537 1.0000 0.5000 0.1250 1.00076 -2.11 11
|
||||
19 44 1 8388608 8388608 8131442 0x033fda08 4 0.000000 1.0000 0.8678 0.3537 1.0000 0.5000 0.1250 1.00061 -2.04 20
|
||||
20 46 1 8388608 8388608 8132391 0x00647e1d 5 0.000001 1.0000 0.8680 0.3538 1.0000 0.5000 0.1250 1.00073 2.73 24
|
||||
21 46 1 8388608 8388608 8131479 0x0436441b 6 0.000001 1.0000 0.8678 0.3536 1.0000 0.5000 0.1250 1.00062 2.56 17
|
||||
22 47 2 4194304 8388608 7885914 0x0173a911 5 0.000001 1.0000 1.0000 0.4842 1.0000 1.0000 0.2500 1.00275 -1.67 11
|
||||
23 47 2 4194304 8388608 7885359 0x01fa7113 5 0.000001 1.0000 1.0000 0.4839 1.0000 1.0000 0.2500 1.00268 -1.60 2
|
||||
24 52 0 16777216 8388608 8258931 0x08292ca1 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00017 2.73 11
|
||||
25 52 0 16777216 8388608 8258747 0x064542dc 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00015 -2.33 0
|
||||
26 56 0 16777216 8388608 8259124 0x084f5e4c 4 0.000000 1.0000 0.7131 0.2827 1.0000 0.2500 0.0625 1.00019 -1.40 5
|
||||
27 56 0 16777216 8388608 8259571 0x0eefc792 4 0.000000 1.0000 0.7130 0.2826 1.0000 0.2500 0.0625 1.00025 2.08 6
|
||||
28 58 1 8388608 8388608 8131558 0x0d472d62 4 0.000000 1.0000 0.8676 0.3535 1.0000 0.5000 0.1250 1.00063 -1.62 17
|
||||
29 58 1 8388608 8388608 8132744 0x0ac6b454 5 0.000001 1.0000 0.8680 0.3536 1.0000 0.5000 0.1250 1.00077 -1.80 23
|
||||
30 63 0 16777216 8388608 8258365 0x077876fc 4 0.000000 1.0000 0.7130 0.2827 1.0000 0.2500 0.0625 1.00010 2.87 25
|
||||
31 63 0 16777216 8388608 8258808 0x011e117e 4 0.000000 1.0000 0.7130 0.2827 1.0000 0.2500 0.0625 1.00015 2.46 27
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.002140 of reads; flat control 0.001944 (ratio 1.1005x), windowed control 0.002141 (ratio 0.9995x; the gate 1.2x); min site distinct ratio 1.00010 (floors 0.98 and 0.995); worst index bit inside its window -3.06 sigma at site 9 bit 1 (the band 6)
|
||||
# program: reads 268435456, distinct items 16777198, worst site 21 address 0x0436441b in 6 reads (share 0.000001); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.3540, 64 MiB 0.1035; the per-site ideal caches summed: 1.0000, 0.8360, 0.3478; 213.8 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,38 @@
|
|||
# night driver start 21:56 UK host igneum-build-6 jobs 1
|
||||
start 1 canary-p18 21:56 UK
|
||||
end 1 canary-p18 rc 0 21:56 UK
|
||||
# night driver end 21:56 UK
|
||||
# night driver start 21:56 UK host igneum-build-6 jobs 5
|
||||
start 1 object-h4 21:56 UK
|
||||
end 1 object-h4 rc 0 22:00 UK
|
||||
start 1 liveness-object-h4 22:00 UK
|
||||
end 1 liveness-object-h4 rc 0 22:00 UK
|
||||
start 1 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
end 1 seed-p26 27 28 29 30 31 32 33 rc 2 22:00 UK
|
||||
restart 2 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
start 2 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
end 2 seed-p26 27 28 29 30 31 32 33 rc 2 22:00 UK
|
||||
restart 3 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
start 3 seed-p26 27 28 29 30 31 32 33 22:00 UK
|
||||
end 3 seed-p26 27 28 29 30 31 32 33 rc 2 22:00 UK
|
||||
start 1 liveness-p26 22:00 UK
|
||||
end 1 liveness-p26 rc 0 22:00 UK
|
||||
# night driver end 22:00 UK
|
||||
# night driver start 22:01 UK host igneum-build-6 jobs 8
|
||||
start 1 seed-p26 22:01 UK
|
||||
end 1 seed-p26 rc 0 22:02 UK
|
||||
start 1 seed-p27 22:02 UK
|
||||
end 1 seed-p27 rc 0 22:02 UK
|
||||
start 1 seed-p28 22:02 UK
|
||||
end 1 seed-p28 rc 0 22:03 UK
|
||||
start 1 seed-p29 22:03 UK
|
||||
end 1 seed-p29 rc 0 22:04 UK
|
||||
start 1 seed-p30 22:04 UK
|
||||
end 1 seed-p30 rc 0 22:05 UK
|
||||
start 1 seed-p31 22:05 UK
|
||||
end 1 seed-p31 rc 0 22:06 UK
|
||||
start 1 seed-p32 22:06 UK
|
||||
end 1 seed-p32 rc 0 22:07 UK
|
||||
start 1 seed-p33 22:07 UK
|
||||
end 1 seed-p33 rc 0 22:08 UK
|
||||
# night driver end 22:08 UK
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 2b406490ba8d3c91 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 3 262144 261881 0x0796afa2 2 0.000008
|
||||
0 1 3 262144 261869 0x01cee15a 2 0.000008
|
||||
# worst cell: iteration 0 site 6 address 0x0f26b8e6 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 3 1 8388608 2097152 2080650 0x0741db04 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 0.99994 2.85 24
|
||||
1 3 1 8388608 2097152 2080597 0x029d5b9c 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 0.99992 1.78 12
|
||||
2 7 2 4194304 2097152 2064742 0x0121006a 3 0.000001 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00017 -2.28 24
|
||||
3 7 2 4194304 2097152 2064903 0x03f3960e 4 0.000002 1.0000 1.0000 0.7125 1.0000 1.0000 0.2500 1.00025 -1.90 12
|
||||
4 10 0 16777216 2097152 2089002 0x002c876d 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00002 -2.20 5
|
||||
5 10 0 16777216 2097152 2088876 0x07df131c 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99996 1.78 11
|
||||
6 17 1 8388608 2097152 2080848 0x0884b4b7 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00004 -2.05 7
|
||||
7 17 1 8388608 2097152 2081059 0x0d8689c5 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00014 -2.04 4
|
||||
8 18 1 8388608 2097152 2080725 0x0977d37e 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 0.99998 2.78 23
|
||||
9 18 1 8388608 2097152 2080924 0x0b418382 4 0.000002 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00007 2.18 12
|
||||
10 19 1 8388608 2097152 2080842 0x08d357f6 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00004 -1.92 4
|
||||
11 19 1 8388608 2097152 2080982 0x0df9e9cd 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00010 1.58 0
|
||||
12 20 1 8388608 2097152 2081066 0x025615ff 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00014 -2.18 12
|
||||
13 20 1 8388608 2097152 2080599 0x01ff4b28 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99992 -1.92 1
|
||||
14 23 2 4194304 2097152 2064627 0x0a245421 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00012 3.51 14
|
||||
15 23 2 4194304 2097152 2064463 0x0a5c53c6 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00004 -2.44 2
|
||||
16 26 1 8388608 2097152 2080876 0x058fa156 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00005 2.43 7
|
||||
17 26 1 8388608 2097152 2080706 0x04338f74 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99997 2.00 12
|
||||
18 27 0 16777216 2097152 2089001 0x095e38fe 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00002 2.48 12
|
||||
19 27 0 16777216 2097152 2088914 0x06fa25cf 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99998 -2.19 27
|
||||
20 28 1 8388608 2097152 2080721 0x029a3077 3 0.000001 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 0.99998 -2.11 26
|
||||
21 28 1 8388608 2097152 2081033 0x001ea1b6 4 0.000002 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00013 2.67 15
|
||||
22 36 2 4194304 2097152 2064724 0x0cfd1910 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00016 -1.69 7
|
||||
23 36 2 4194304 2097152 2064729 0x0e8d39a5 4 0.000002 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00017 2.12 18
|
||||
24 39 1 8388608 2097152 2080666 0x07f5b296 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99995 -1.47 3
|
||||
25 39 1 8388608 2097152 2080855 0x03721473 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00004 2.67 18
|
||||
26 40 2 4194304 2097152 2064757 0x0d652b7d 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00018 2.01 5
|
||||
27 40 2 4194304 2097152 2064796 0x0e2a2c8c 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00020 1.88 7
|
||||
28 52 0 16777216 2097152 2089053 0x02e3b79a 4 0.000002 1.0000 1.0000 0.5597 1.0000 0.2500 0.0625 1.00004 3.61 20
|
||||
29 52 0 16777216 2097152 2089018 0x00cf2ad8 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00003 1.53 23
|
||||
30 56 2 4194304 2097152 2064646 0x06d6a083 4 0.000002 1.0000 1.0000 0.7125 1.0000 1.0000 0.2500 1.00013 1.94 8
|
||||
31 56 2 4194304 2097152 2064990 0x05536f11 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00029 2.82 23
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003129 of reads; flat control 0.003073 (ratio 1.0183x), windowed control 0.003129 (ratio 1.0003x; the gate 1.2x); min site distinct ratio 0.99992 (floors 0.98 and 0.995); worst index bit inside its window 3.61 sigma at site 28 bit 20 (the band 6)
|
||||
# program: reads 67108864, distinct items 16434319, worst site 3 address 0x03f3960e in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4196, 64 MiB 0.1328; the per-site ideal caches summed: 1.0000, 1.0000, 0.6354; 50.6 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program c38b57d654ad08d4 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 3 262144 261997 0x07d1eebf 2 0.000008
|
||||
0 1 3 262144 262019 0x0e939f6a 2 0.000008
|
||||
# worst cell: iteration 0 site 2 address 0x01c78316 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 3 0 16777216 2097152 2089066 0x038a399f 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00005 2.10 6
|
||||
1 3 0 16777216 2097152 2089052 0x00223010 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00004 -2.32 1
|
||||
2 5 1 8388608 2097152 2080951 0x031a0ba8 4 0.000002 1.0000 1.0000 0.6148 1.0000 0.5000 0.1250 1.00009 -2.01 1
|
||||
3 5 1 8388608 2097152 2080827 0x01cef2a6 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00003 1.85 25
|
||||
4 6 0 16777216 2097152 2088908 0x06f84932 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99998 -1.71 12
|
||||
5 6 0 16777216 2097152 2089038 0x0a9f3c2e 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00004 1.74 16
|
||||
6 8 2 4194304 2097152 2064774 0x06a7b797 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00019 2.13 23
|
||||
7 8 2 4194304 2097152 2065283 0x0540406b 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00044 -2.06 24
|
||||
8 18 0 16777216 2097152 2088890 0x0bf8b2ea 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99997 -2.90 16
|
||||
9 18 0 16777216 2097152 2088889 0x0ef39ae7 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99997 -1.77 20
|
||||
10 20 0 16777216 2097152 2088949 0x092b13a6 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99999 2.27 3
|
||||
11 20 0 16777216 2097152 2089093 0x062cbd71 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00006 -1.74 26
|
||||
12 39 1 8388608 2097152 2080772 0x045ba978 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00000 -2.34 14
|
||||
13 39 1 8388608 2097152 2080878 0x00133859 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00005 2.22 9
|
||||
14 45 1 8388608 2097152 2081020 0x0f39bd80 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00012 -2.29 2
|
||||
15 45 1 8388608 2097152 2080852 0x09dc13e3 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00004 2.11 0
|
||||
16 47 1 8388608 2097152 2080863 0x09e38573 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00005 -1.93 13
|
||||
17 47 1 8388608 2097152 2080695 0x0ccd34c5 3 0.000001 1.0000 1.0000 0.6157 1.0000 0.5000 0.1250 0.99996 2.01 20
|
||||
18 48 0 16777216 2097152 2088968 0x0ec9cce7 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00000 2.79 23
|
||||
19 48 0 16777216 2097152 2089007 0x07a0a4f2 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00002 1.83 7
|
||||
20 50 1 8388608 2097152 2080975 0x05fd559e 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00010 -2.56 19
|
||||
21 50 1 8388608 2097152 2080734 0x0286bedb 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 0.99998 2.80 1
|
||||
22 51 0 16777216 2097152 2089049 0x0121e88c 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00004 -2.09 9
|
||||
23 51 0 16777216 2097152 2088846 0x0732038a 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99995 2.45 19
|
||||
24 53 0 16777216 2097152 2088905 0x0b3dfd67 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99997 -1.75 9
|
||||
25 53 0 16777216 2097152 2088998 0x0872ca75 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00002 -2.30 5
|
||||
26 54 1 8388608 2097152 2080735 0x00baa42d 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 0.99998 -2.13 6
|
||||
27 54 1 8388608 2097152 2080896 0x0566331d 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00006 2.38 25
|
||||
28 59 2 4194304 2097152 2064408 0x0e2a3d91 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00001 2.85 13
|
||||
29 59 2 4194304 2097152 2064617 0x0f88d3d4 3 0.000001 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00011 2.61 7
|
||||
30 63 1 8388608 2097152 2080907 0x03195a58 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00007 2.18 5
|
||||
31 63 1 8388608 2097152 2080916 0x030e7e56 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00007 -2.03 6
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003348 of reads; flat control 0.003079 (ratio 1.0873x), windowed control 0.003344 (ratio 1.0010x; the gate 1.2x); min site distinct ratio 0.99995 (floors 0.98 and 0.995); worst index bit inside its window -2.90 sigma at site 8 bit 16 (the band 6)
|
||||
# program: reads 67108864, distinct items 16328481, worst site 2 address 0x031a0ba8 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4343, 64 MiB 0.1396; the per-site ideal caches summed: 1.0000, 1.0000, 0.6033; 50.8 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 96e4f7fdccef6fd1 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 4 262144 262014 0x0fef6e9b 2 0.000008
|
||||
0 1 4 262144 262012 0x0c0fc40d 2 0.000008
|
||||
# worst cell: iteration 0 site 7 address 0x03149070 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 4 0 16777216 2097152 2088962 0x0f297121 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00000 -2.85 15
|
||||
1 4 0 16777216 2097152 2088985 0x0ed393d0 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00001 -3.21 1
|
||||
2 8 1 8388608 2097152 2080764 0x030525f1 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00000 3.54 3
|
||||
3 8 1 8388608 2097152 2080858 0x067bb746 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00004 -2.62 18
|
||||
4 9 2 4194304 2097152 2064518 0x0dd0a987 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00006 -2.41 18
|
||||
5 9 2 4194304 2097152 2064686 0x0ec38ef5 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00015 -2.48 7
|
||||
6 11 2 4194304 2097152 2064652 0x003f4555 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00013 -2.27 0
|
||||
7 11 2 4194304 2097152 2064759 0x03c88d86 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00018 2.18 5
|
||||
8 12 0 16777216 2097152 2088812 0x0b0da342 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 0.99993 1.96 10
|
||||
9 12 0 16777216 2097152 2089058 0x068f7410 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00005 -2.50 13
|
||||
10 23 0 16777216 2097152 2088888 0x0089f2ab 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99997 1.50 15
|
||||
11 23 0 16777216 2097152 2088888 0x06daaad0 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99997 -1.89 0
|
||||
12 24 1 8388608 2097152 2080872 0x043fe3db 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00005 -1.85 15
|
||||
13 24 1 8388608 2097152 2080950 0x01ffb71c 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00009 -3.46 6
|
||||
14 26 1 8388608 2097152 2080924 0x0ceac1e0 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00007 1.83 4
|
||||
15 26 1 8388608 2097152 2080753 0x0f54ef61 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 0.99999 -1.66 23
|
||||
16 27 2 4194304 2097152 2064761 0x06ea3773 4 0.000002 1.0000 1.0000 0.7126 1.0000 1.0000 0.2500 1.00018 -1.84 3
|
||||
17 27 2 4194304 2097152 2064907 0x04b668aa 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00025 -1.92 5
|
||||
18 30 1 8388608 2097152 2080959 0x02a62f63 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00009 -2.76 20
|
||||
19 30 1 8388608 2097152 2080936 0x03b294e3 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00008 2.59 12
|
||||
20 37 0 16777216 2097152 2089043 0x07e38f1d 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00004 -3.09 0
|
||||
21 37 0 16777216 2097152 2088987 0x07cc45d0 3 0.000001 1.0000 1.0000 0.5597 1.0000 0.2500 0.0625 1.00001 2.34 1
|
||||
22 39 2 4194304 2097152 2064545 0x00823b70 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00008 2.16 5
|
||||
23 39 2 4194304 2097152 2064803 0x00354b28 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00020 2.46 22
|
||||
24 44 0 16777216 2097152 2089015 0x0f9cd92e 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00003 2.14 16
|
||||
25 44 0 16777216 2097152 2088808 0x0237ee9c 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99993 -3.99 11
|
||||
26 52 2 4194304 2097152 2065077 0x0b35596e 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00034 2.05 4
|
||||
27 52 2 4194304 2097152 2064762 0x09ecc32b 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00018 2.29 10
|
||||
28 53 1 8388608 2097152 2080801 0x0b3620c0 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00002 2.45 9
|
||||
29 53 1 8388608 2097152 2080894 0x0a454d53 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00006 -1.99 14
|
||||
30 63 2 4194304 2097152 2064520 0x034a2155 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00007 -2.38 25
|
||||
31 63 2 4194304 2097152 2064832 0x02c50431 4 0.000002 1.0000 1.0000 0.7126 1.0000 1.0000 0.2500 1.00022 1.66 14
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003499 of reads; flat control 0.003071 (ratio 1.1396x), windowed control 0.003498 (ratio 1.0005x; the gate 1.2x); min site distinct ratio 0.99993 (floors 0.98 and 0.995); worst index bit inside its window -3.99 sigma at site 25 bit 11 (the band 6)
|
||||
# program: reads 67108864, distinct items 16340448, worst site 2 address 0x030525f1 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4400, 64 MiB 0.1434; the per-site ideal caches summed: 1.0000, 1.0000, 0.6346; 50.1 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 3f922ac24b46d2c2 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 1 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 3 262144 261878 0x0c2ec6c7 2 0.000008
|
||||
0 1 3 262144 261865 0x0ef15836 3 0.000011
|
||||
# worst cell: iteration 0 site 1 address 0x0ef15836 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 3 1 8388608 2097152 2080901 0x0b8c7476 3 0.000001 1.0000 1.0000 0.6148 1.0000 0.5000 0.1250 1.00006 2.12 3
|
||||
1 3 1 8388608 2097152 2080842 0x0e0e9857 3 0.000001 1.0000 1.0000 0.6156 1.0000 0.5000 0.1250 1.00004 -2.70 13
|
||||
2 6 0 16777216 2097152 2088910 0x0ccf2db5 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 0.99998 2.21 22
|
||||
3 6 0 16777216 2097152 2088975 0x067df852 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00001 2.42 23
|
||||
4 9 0 16777216 2097152 2088942 0x0b41129a 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99999 1.71 0
|
||||
5 9 0 16777216 2097152 2088972 0x07e0c715 3 0.000001 1.0000 1.0000 0.5603 1.0000 0.2500 0.0625 1.00001 -2.30 24
|
||||
6 11 0 16777216 2097152 2088998 0x0b5b69b9 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00002 2.44 17
|
||||
7 11 0 16777216 2097152 2088921 0x0e92f974 4 0.000002 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99998 1.98 14
|
||||
8 12 0 16777216 2097152 2088931 0x0d9e4e72 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 0.99999 -1.66 5
|
||||
9 12 0 16777216 2097152 2088899 0x043a0980 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99997 -1.73 13
|
||||
10 19 1 8388608 2097152 2081053 0x0d78029b 4 0.000002 1.0000 1.0000 0.6148 1.0000 0.5000 0.1250 1.00014 1.94 1
|
||||
11 19 1 8388608 2097152 2080725 0x09ff33fa 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99998 1.97 8
|
||||
12 21 1 8388608 2097152 2080850 0x085bed84 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00004 2.29 20
|
||||
13 21 1 8388608 2097152 2080735 0x0cfb8ada 4 0.000002 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 0.99998 -1.89 25
|
||||
14 28 0 16777216 2097152 2089104 0x010e3e04 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00007 2.81 26
|
||||
15 28 0 16777216 2097152 2089028 0x0ff2d25e 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00003 2.24 16
|
||||
16 34 2 4194304 2097152 2064689 0x0226eb19 3 0.000001 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00015 2.50 12
|
||||
17 34 2 4194304 2097152 2064744 0x02f7f431 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00017 -2.07 3
|
||||
18 37 2 4194304 2097152 2064562 0x04069af3 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00009 -2.93 23
|
||||
19 37 2 4194304 2097152 2064860 0x077eea20 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00023 -2.24 19
|
||||
20 50 2 4194304 2097152 2064569 0x0b2e4e25 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00009 2.76 6
|
||||
21 50 2 4194304 2097152 2064719 0x0a183716 4 0.000002 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00016 -2.06 23
|
||||
22 53 2 4194304 2097152 2064699 0x0739628d 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00015 -1.62 21
|
||||
23 53 2 4194304 2097152 2064379 0x068d23d5 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00000 -1.92 15
|
||||
24 55 0 16777216 2097152 2089025 0x04daf1b2 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00003 -1.69 2
|
||||
25 55 0 16777216 2097152 2089136 0x0f760a24 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00008 3.00 18
|
||||
26 57 1 8388608 2097152 2081024 0x01e33a42 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00012 1.65 10
|
||||
27 57 1 8388608 2097152 2080955 0x033c7675 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00009 2.57 4
|
||||
28 59 2 4194304 2097152 2064717 0x0ec174b6 3 0.000001 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00016 2.24 2
|
||||
29 59 2 4194304 2097152 2064609 0x0e2fdb21 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00011 2.69 12
|
||||
30 62 1 8388608 2097152 2080947 0x0ae4acab 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00009 1.96 10
|
||||
31 62 1 8388608 2097152 2080771 0x0d5adff3 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00000 -1.68 7
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003169 of reads; flat control 0.003069 (ratio 1.0326x), windowed control 0.003168 (ratio 1.0004x; the gate 1.2x); min site distinct ratio 0.99997 (floors 0.98 and 0.995); worst index bit inside its window 3.00 sigma at site 25 bit 18 (the band 6)
|
||||
# program: reads 67108864, distinct items 16398093, worst site 7 address 0x0e92f974 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4241, 64 MiB 0.1350; the per-site ideal caches summed: 1.0000, 1.0000, 0.6251; 50.5 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program edd13a08477407cf class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 2 262144 261596 0x0e92237a 3 0.000011
|
||||
0 1 2 262144 261624 0x0e452649 3 0.000011
|
||||
# worst cell: iteration 0 site 0 address 0x0e92237a in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 2 2 4194304 2097152 2064660 0x0e3a012d 4 0.000002 1.0000 1.0000 0.7135 1.0000 1.0000 0.2500 1.00013 -2.13 19
|
||||
1 2 2 4194304 2097152 2064792 0x0efd0e64 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00020 -1.88 10
|
||||
2 3 0 16777216 2097152 2089026 0x089fe2f1 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00003 -2.04 19
|
||||
3 3 0 16777216 2097152 2088866 0x0f538658 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99996 2.06 2
|
||||
4 5 1 8388608 2097152 2081083 0x0113a588 4 0.000002 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00015 2.59 26
|
||||
5 5 1 8388608 2097152 2080739 0x00b80889 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 0.99999 -1.31 1
|
||||
6 7 2 4194304 2097152 2064766 0x06e15152 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00019 -1.63 1
|
||||
7 7 2 4194304 2097152 2064743 0x075b8ab1 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00017 1.80 0
|
||||
8 10 2 4194304 2097152 2064536 0x0aa9d2e5 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00007 -1.82 14
|
||||
9 10 2 4194304 2097152 2064775 0x0a458569 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00019 -2.15 3
|
||||
10 12 2 4194304 2097152 2064772 0x047b5d50 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00019 1.72 6
|
||||
11 12 2 4194304 2097152 2064471 0x072c3ae9 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00004 -2.31 18
|
||||
12 14 0 16777216 2097152 2089071 0x07f185e5 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00005 2.53 14
|
||||
13 14 0 16777216 2097152 2089027 0x0551ac9e 4 0.000002 1.0000 1.0000 0.5604 1.0000 0.2500 0.0625 1.00003 1.99 3
|
||||
14 35 1 8388608 2097152 2081160 0x071cdd6f 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00019 -1.66 12
|
||||
15 35 1 8388608 2097152 2080869 0x028dc39f 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00005 -2.47 4
|
||||
16 41 0 16777216 2097152 2088900 0x070d37d0 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99997 2.48 12
|
||||
17 41 0 16777216 2097152 2089041 0x05e5c1d2 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00004 2.13 24
|
||||
18 42 0 16777216 2097152 2089192 0x0f074fdc 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00011 1.85 11
|
||||
19 42 0 16777216 2097152 2089007 0x05de0df0 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00002 -2.08 25
|
||||
20 49 2 4194304 2097152 2064790 0x08b805dd 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00020 1.78 15
|
||||
21 49 2 4194304 2097152 2064415 0x08429932 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00002 -2.19 18
|
||||
22 50 0 16777216 2097152 2088881 0x03d794a9 4 0.000002 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99996 1.81 2
|
||||
23 50 0 16777216 2097152 2088771 0x0906f3bb 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99991 2.30 16
|
||||
24 54 2 4194304 2097152 2064447 0x01174ec0 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00003 -2.38 19
|
||||
25 54 2 4194304 2097152 2064637 0x00f5480b 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00012 1.97 15
|
||||
26 56 0 16777216 2097152 2088993 0x0248a45d 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00002 2.31 22
|
||||
27 56 0 16777216 2097152 2089061 0x0e415537 4 0.000002 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00005 2.14 18
|
||||
28 58 1 8388608 2097152 2080959 0x03cc4951 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00009 -1.96 24
|
||||
29 58 1 8388608 2097152 2080841 0x0780a964 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00004 -2.22 19
|
||||
30 62 0 16777216 2097152 2089002 0x034a75de 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00002 -2.32 5
|
||||
31 62 0 16777216 2097152 2089002 0x0f5d6282 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00002 -2.03 6
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003348 of reads; flat control 0.003069 (ratio 1.0910x), windowed control 0.003355 (ratio 0.9981x; the gate 1.2x); min site distinct ratio 0.99991 (floors 0.98 and 0.995); worst index bit inside its window 2.59 sigma at site 4 bit 26 (the band 6)
|
||||
# program: reads 67108864, distinct items 16327902, worst site 0 address 0x0e3a012d in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4343, 64 MiB 0.1395; the per-site ideal caches summed: 1.0000, 1.0000, 0.6278; 50.7 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program e1409749e795c382 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 1 262144 261603 0x0f8c1753 3 0.000011
|
||||
0 1 1 262144 261651 0x0d5543d7 3 0.000011
|
||||
# worst cell: iteration 0 site 0 address 0x0f8c1753 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 1 2 4194304 2097152 2064417 0x0d3d1622 4 0.000002 1.0000 1.0000 0.7128 1.0000 1.0000 0.2500 1.00002 3.14 14
|
||||
1 1 2 4194304 2097152 2064840 0x0fa5865f 4 0.000002 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00022 -2.46 6
|
||||
2 3 1 8388608 2097152 2080966 0x03d01c00 4 0.000002 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00010 -2.56 14
|
||||
3 3 1 8388608 2097152 2080827 0x01743ea9 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00003 2.27 10
|
||||
4 4 1 8388608 2097152 2080757 0x07072358 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 0.99999 -1.68 10
|
||||
5 4 1 8388608 2097152 2080892 0x02f59100 4 0.000002 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00006 -2.12 23
|
||||
6 7 1 8388608 2097152 2080928 0x039d6050 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00008 -3.16 18
|
||||
7 7 1 8388608 2097152 2080806 0x04c9f0c0 4 0.000002 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00002 -3.23 21
|
||||
8 11 1 8388608 2097152 2080660 0x0f16f53b 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 0.99995 2.46 21
|
||||
9 11 1 8388608 2097152 2080780 0x0db21bbc 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00001 3.16 20
|
||||
10 12 0 16777216 2097152 2088897 0x066eced5 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99997 -2.05 11
|
||||
11 12 0 16777216 2097152 2088940 0x0a429328 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 0.99999 -2.17 25
|
||||
12 13 0 16777216 2097152 2088856 0x083b252d 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99995 -3.06 8
|
||||
13 13 0 16777216 2097152 2088909 0x00cf618b 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 0.99998 2.43 25
|
||||
14 21 0 16777216 2097152 2089005 0x0987e15e 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00002 -2.48 1
|
||||
15 21 0 16777216 2097152 2089048 0x0521f8d9 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00004 2.42 26
|
||||
16 28 0 16777216 2097152 2089052 0x076ce703 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00004 -1.85 0
|
||||
17 28 0 16777216 2097152 2088783 0x0294ce2e 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99992 2.21 23
|
||||
18 41 1 8388608 2097152 2080761 0x0aa1f1bb 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00000 -2.71 6
|
||||
19 41 1 8388608 2097152 2080520 0x0e3e5fbc 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99988 -2.07 17
|
||||
20 43 2 4194304 2097152 2064966 0x0aff5e6c 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00028 -3.05 3
|
||||
21 43 2 4194304 2097152 2064713 0x0947d9e2 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00016 -2.94 10
|
||||
22 47 0 16777216 2097152 2088775 0x09c797b7 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99991 -2.99 11
|
||||
23 47 0 16777216 2097152 2088930 0x0cd8eb21 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99999 2.00 17
|
||||
24 54 1 8388608 2097152 2080730 0x0a57503c 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 0.99998 3.06 0
|
||||
25 54 1 8388608 2097152 2080989 0x0c0438a7 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00011 -1.78 23
|
||||
26 56 2 4194304 2097152 2064734 0x0939f6e7 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00017 -1.76 5
|
||||
27 56 2 4194304 2097152 2064767 0x089d01aa 4 0.000002 1.0000 1.0000 0.7135 1.0000 1.0000 0.2500 1.00019 1.85 15
|
||||
28 61 1 8388608 2097152 2081039 0x09fd07dd 3 0.000001 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00013 -2.61 14
|
||||
29 61 1 8388608 2097152 2080997 0x0d5cf9e2 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00011 2.21 5
|
||||
30 62 0 16777216 2097152 2089098 0x06ff173a 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00007 2.65 14
|
||||
31 62 0 16777216 2097152 2088898 0x0b984754 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99997 -2.51 25
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003432 of reads; flat control 0.003075 (ratio 1.1164x), windowed control 0.003435 (ratio 0.9992x; the gate 1.2x); min site distinct ratio 0.99988 (floors 0.98 and 0.995); worst index bit inside its window -3.23 sigma at site 7 bit 21 (the band 6)
|
||||
# program: reads 67108864, distinct items 16295937, worst site 0 address 0x0d3d1622 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4417, 64 MiB 0.1425; the per-site ideal caches summed: 1.0000, 1.0000, 0.6128; 50.5 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 0717ad9158d5937f class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 2 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 2 262144 261895 0x08695fc3 3 0.000011
|
||||
0 1 2 262144 261887 0x0955348b 2 0.000008
|
||||
# worst cell: iteration 0 site 0 address 0x08695fc3 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 2 1 8388608 2097152 2081067 0x0d4f9faf 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 1.00014 -2.72 25
|
||||
1 2 1 8388608 2097152 2081036 0x0ed453f1 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00013 -1.92 3
|
||||
2 14 1 8388608 2097152 2080837 0x03443ba9 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00003 1.81 6
|
||||
3 14 1 8388608 2097152 2080665 0x01575a10 3 0.000001 1.0000 1.0000 0.6154 1.0000 0.5000 0.1250 0.99995 -2.30 14
|
||||
4 20 2 4194304 2097152 2064959 0x0cd645f0 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00028 -2.07 5
|
||||
5 20 2 4194304 2097152 2064678 0x0c6a1d56 4 0.000002 1.0000 1.0000 0.7132 1.0000 1.0000 0.2500 1.00014 -2.29 13
|
||||
6 29 0 16777216 2097152 2088928 0x03b55570 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99998 3.40 2
|
||||
7 29 0 16777216 2097152 2089054 0x06afe3b6 3 0.000001 1.0000 1.0000 0.5597 1.0000 0.2500 0.0625 1.00004 -3.05 16
|
||||
8 31 1 8388608 2097152 2081166 0x0a04bf02 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00019 -2.47 20
|
||||
9 31 1 8388608 2097152 2080744 0x0e56cd9d 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 0.99999 -1.94 15
|
||||
10 32 2 4194304 2097152 2064477 0x0e061843 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00005 2.82 18
|
||||
11 32 2 4194304 2097152 2064673 0x0df8ef99 4 0.000002 1.0000 1.0000 0.7133 1.0000 1.0000 0.2500 1.00014 -2.17 8
|
||||
12 33 0 16777216 2097152 2089016 0x0f28266b 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00003 -2.04 26
|
||||
13 33 0 16777216 2097152 2089185 0x07578dbd 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00011 -2.69 5
|
||||
14 39 1 8388608 2097152 2080978 0x0211cb12 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00010 -2.03 6
|
||||
15 39 1 8388608 2097152 2081059 0x061d30a0 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00014 2.14 16
|
||||
16 42 2 4194304 2097152 2064856 0x0746f9ef 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00023 -2.12 0
|
||||
17 42 2 4194304 2097152 2064582 0x07aac484 3 0.000001 1.0000 1.0000 0.7134 1.0000 1.0000 0.2500 1.00010 -1.97 10
|
||||
18 43 1 8388608 2097152 2080783 0x0d8fccc6 4 0.000002 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00001 -2.22 4
|
||||
19 43 1 8388608 2097152 2080755 0x0b1fc588 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99999 -2.48 14
|
||||
20 44 0 16777216 2097152 2089111 0x03453f54 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00007 1.76 5
|
||||
21 44 0 16777216 2097152 2089070 0x0751e392 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00005 -1.92 18
|
||||
22 47 1 8388608 2097152 2080841 0x0313f4d1 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00004 1.46 3
|
||||
23 47 1 8388608 2097152 2080811 0x0561317b 4 0.000002 1.0000 1.0000 0.6149 1.0000 0.5000 0.1250 1.00002 3.14 1
|
||||
24 48 2 4194304 2097152 2064886 0x050e620b 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00024 2.87 1
|
||||
25 48 2 4194304 2097152 2064825 0x0704c911 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00021 1.89 6
|
||||
26 49 0 16777216 2097152 2089046 0x04c89672 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00004 1.73 8
|
||||
27 49 0 16777216 2097152 2088824 0x031c13c0 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99993 2.76 7
|
||||
28 51 0 16777216 2097152 2089054 0x06747e52 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00004 2.00 7
|
||||
29 51 0 16777216 2097152 2089115 0x018b83fc 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00007 2.42 5
|
||||
30 52 0 16777216 2097152 2088883 0x07e795d6 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99996 -2.45 9
|
||||
31 52 0 16777216 2097152 2089172 0x0e17768c 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00010 2.22 2
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003378 of reads; flat control 0.003071 (ratio 1.1000x), windowed control 0.003377 (ratio 1.0004x; the gate 1.2x); min site distinct ratio 0.99993 (floors 0.98 and 0.995); worst index bit inside its window 3.40 sigma at site 6 bit 2 (the band 6)
|
||||
# program: reads 67108864, distinct items 16303463, worst site 4 address 0x0cd645f0 in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4390, 64 MiB 0.1410; the per-site ideal caches summed: 1.0000, 1.0000, 0.6190; 50.7 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1,42 @@
|
|||
# addrsite: program 9857a41ce42f4677 class mx8-erad810f22d+sh256x27+state+reg64c+fold+rw attempt 0 generator v6 day 2026-10-03 dataset 2^28 words (memory-hard) headers 4 warps 2048 nonces/header 65536 threads 32
|
||||
# per (iteration, site) cell: the most read address and its share (A03's form); cells over 0.1 percent listed
|
||||
it site instr reads distinct top_addr top_count top_share
|
||||
0 0 4 262144 261854 0x03886725 2 0.000008
|
||||
0 1 4 262144 261876 0x06d3ba58 2 0.000008
|
||||
# worst cell: iteration 0 site 14 address 0x03846806 in 3 reads, share 0.000011
|
||||
# per site, pooled over the 8 iterations (hit rates: an ideal cache of the site's top K items, K = bytes / 64; exp = min(1, K / window items))
|
||||
site instr win window_items reads distinct top_addr top_count top_share hit_1GiB hit_256MiB hit_64MiB exp_1GiB exp_256MiB exp_64MiB distinct_ratio bit_z_max bit
|
||||
0 4 1 8388608 2097152 2080828 0x034e20ad 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 1.00003 2.61 5
|
||||
1 4 1 8388608 2097152 2080697 0x0082ff20 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 0.99997 2.86 26
|
||||
2 6 2 4194304 2097152 2064740 0x0f425fde 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00017 2.45 3
|
||||
3 6 2 4194304 2097152 2064712 0x0d43bd52 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00016 -1.82 5
|
||||
4 7 1 8388608 2097152 2080884 0x099e7c18 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00006 2.38 20
|
||||
5 7 1 8388608 2097152 2080853 0x0e58403c 3 0.000001 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 1.00004 -3.95 5
|
||||
6 8 0 16777216 2097152 2088995 0x012d4547 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00002 2.05 6
|
||||
7 8 0 16777216 2097152 2089049 0x08a3d7fc 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 1.00004 1.96 24
|
||||
8 10 0 16777216 2097152 2088976 0x0ba1a02e 3 0.000001 1.0000 1.0000 0.5597 1.0000 0.2500 0.0625 1.00001 -2.65 6
|
||||
9 10 0 16777216 2097152 2088946 0x060bcdb9 3 0.000001 1.0000 1.0000 0.5603 1.0000 0.2500 0.0625 0.99999 -2.50 17
|
||||
10 13 0 16777216 2097152 2088889 0x05e3d58e 4 0.000002 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99997 1.28 5
|
||||
11 13 0 16777216 2097152 2089025 0x0b78defd 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00003 -1.84 26
|
||||
12 14 1 8388608 2097152 2080873 0x04877c20 3 0.000001 1.0000 1.0000 0.6150 1.0000 0.5000 0.1250 1.00005 1.45 24
|
||||
13 14 1 8388608 2097152 2081038 0x003a2c13 3 0.000001 1.0000 1.0000 0.6151 1.0000 0.5000 0.1250 1.00013 2.52 0
|
||||
14 21 2 4194304 2097152 2064428 0x01e0e6f5 4 0.000002 1.0000 1.0000 0.7130 1.0000 1.0000 0.2500 1.00002 -2.45 7
|
||||
15 21 2 4194304 2097152 2064800 0x028d9855 4 0.000002 1.0000 1.0000 0.7127 1.0000 1.0000 0.2500 1.00020 1.68 5
|
||||
16 26 2 4194304 2097152 2064895 0x036bf80b 4 0.000002 1.0000 1.0000 0.7129 1.0000 1.0000 0.2500 1.00025 1.95 19
|
||||
17 26 2 4194304 2097152 2064720 0x01d12723 4 0.000002 1.0000 1.0000 0.7131 1.0000 1.0000 0.2500 1.00016 1.82 10
|
||||
18 30 0 16777216 2097152 2088921 0x08a5d6a0 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99998 -2.74 5
|
||||
19 30 0 16777216 2097152 2088982 0x02d7209d 3 0.000001 1.0000 1.0000 0.5596 1.0000 0.2500 0.0625 1.00001 2.31 19
|
||||
20 41 1 8388608 2097152 2080644 0x04f6d097 4 0.000002 1.0000 1.0000 0.6155 1.0000 0.5000 0.1250 0.99994 2.59 14
|
||||
21 41 1 8388608 2097152 2080991 0x03743b6f 4 0.000002 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00011 -2.05 6
|
||||
22 42 0 16777216 2097152 2088965 0x0a107c86 3 0.000001 1.0000 1.0000 0.5602 1.0000 0.2500 0.0625 1.00000 1.89 21
|
||||
23 42 0 16777216 2097152 2088980 0x0bed59ae 3 0.000001 1.0000 1.0000 0.5598 1.0000 0.2500 0.0625 1.00001 2.68 23
|
||||
24 43 0 16777216 2097152 2088957 0x043578b0 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 1.00000 2.73 12
|
||||
25 43 0 16777216 2097152 2088906 0x0cc002e5 3 0.000001 1.0000 1.0000 0.5600 1.0000 0.2500 0.0625 0.99997 1.78 9
|
||||
26 48 1 8388608 2097152 2080828 0x0b9e1d33 3 0.000001 1.0000 1.0000 0.6152 1.0000 0.5000 0.1250 1.00003 -1.88 12
|
||||
27 48 1 8388608 2097152 2080665 0x08abccb4 3 0.000001 1.0000 1.0000 0.6153 1.0000 0.5000 0.1250 0.99995 1.96 25
|
||||
28 49 0 16777216 2097152 2088834 0x0761a1b4 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 0.99994 2.50 1
|
||||
29 49 0 16777216 2097152 2088962 0x0c8f7caa 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00000 -1.91 18
|
||||
30 62 0 16777216 2097152 2088884 0x0d7a8fad 3 0.000001 1.0000 1.0000 0.5601 1.0000 0.2500 0.0625 0.99996 -2.31 0
|
||||
31 62 0 16777216 2097152 2089107 0x0fc73850 3 0.000001 1.0000 1.0000 0.5599 1.0000 0.2500 0.0625 1.00007 2.92 16
|
||||
# F8 form over the live stream: top 0.1 percent of items hold 0.003416 of reads; flat control 0.003074 (ratio 1.1112x), windowed control 0.003417 (ratio 0.9996x; the gate 1.2x); min site distinct ratio 0.99994 (floors 0.98 and 0.995); worst index bit inside its window -3.95 sigma at site 5 bit 5 (the band 6)
|
||||
# program: reads 67108864, distinct items 16348197, worst site 2 address 0x0f425fde in 4 reads (share 0.000002); one cache over the program's reads: 1 GiB 1.0000, 256 MiB 0.4358, 64 MiB 0.1410; the per-site ideal caches summed: 1.0000, 1.0000, 0.6059; 50.8 s
|
||||
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
|
@ -0,0 +1 @@
|
|||
|
||||
44
docs/analysis/class-v6/rows/pairing-20261008.md
Normal file
44
docs/analysis/class-v6/rows/pairing-20261008.md
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# The pairing class and the chain-paired packs (8 October 2026, 20:4x to 21:1x UTC)
|
||||
|
||||
The frozen research pack `hl-v6-all` (id `0x4de7b836cc40a4ea`, generator 6, the class-v6 tree 1a938abe4) was exported with the
|
||||
genesis epoch seed `edc4fa84…fb07` over node1's state stream captured after block `af89be5d…66b3` (number 159357, root
|
||||
`1c583d35…1526`, 93 records, file sha256 `abb58003…0098`). `IgneumEngine::epoch_for` refuses that pair by the class v5 rule
|
||||
(the stream's block must be the epoch's seed block), so the node and pool readers cannot re-check the object as packed. The
|
||||
pairing was the W = 8 lane's research recipe of 14:00 (the CLI had no seed-block check), not a tool fault.
|
||||
|
||||
## The pairing holds on the chain's own pair
|
||||
|
||||
| Reader | Inputs | Id |
|
||||
|---|---|---|
|
||||
| the node engine, `igneum-miner program-id` on the placed (c) pair (node lane, 20:46:55 UTC) | epoch `af89be5d…`, era `edc4fa84…`, day 20730, the state above, class v6 | `2a1d6caab4c24564`, attempt 0 |
|
||||
| the freeze CLI at 1a938abe4, `export … --era 0:edc4fa84…` (build-5, 20:48 UTC) | the same | `0x2a1d6caab4c24564`, attempt 0, generator 6, loads 256 |
|
||||
|
||||
A read with the era set to the block hash as well (`--era 0:af89be5d…`) draws `442a1691b3e3507f` (era label 93a14ac6): a
|
||||
different input, void for the pairing. The ruling (hash lane, 21:00 UTC): D1 freezes the generator tree 1a938abe4; F0 names
|
||||
the chain-seed draw `2a1d6caab4c24564` on the pair above; the research pack stays labelled at its pairing.
|
||||
|
||||
## The chain-paired packs (build-1 `/srv/artefacts/packs/`, read back 21:1x UTC)
|
||||
|
||||
| Pack | Class | Id | Attempt | Loads | tgz sha256 |
|
||||
|---|---|---|---|---|---|
|
||||
| hl-v6-all-cs | mx8+sh256x27+state+reg64c+fold+rw | `0x2a1d6caab4c24564` | 0 | 256 | `a4742bfefdc632a1f3977c9dfb8f66417c2f132436dcd9ad72c32a608638d6ca` |
|
||||
| hl-v6-all-nowin-cs | the same +nowin | `0x4e1897e6ee262228` | 0 | 256 | `6ef02eeea5d078f5215b09145239e27a83c8a41e6bccb11bd638d3170b0538bb` |
|
||||
| hl-v6-foldrw-cs | mx8+sh256x27+state+fold+rw | `0xb53d00f2bf629076` | 0 | 128 | `4f2abd36aee600d97d230b5b09f10680f228448007c6c7062fca737bf6351748` |
|
||||
| hl-v5-nowin-cs | mx8+sh256x27+state+nowin | `0xa02b1a9dee6b8587` | 1 | 128 | `e2eb2840879d264a8d3562751f983ce57d821087ae6d52796eccf3ef48484b8e` |
|
||||
| hl-v6-all-prefix-cs | as hl-v6-all-cs, the F05 prefix text | `0x2a1d6caab4c24564` | 0 | 256 | `a9e01f13d6f26f133504c6d62e73b86ee460b53d8798218100b2f250e0ac8ca5` |
|
||||
|
||||
All five: epoch seed `af89be5d…`, era `edc4fa84…`, day 20730, the state above, exported at 1a938abe4 on build-5.
|
||||
|
||||
## The P01 reference of the signing object
|
||||
|
||||
`igneum-pow hash-bound --prehash 00…01 --nonce 0 --count 1000000` on hl-v6-all-cs's inputs (build-5, 20:55 to 21:02 UTC):
|
||||
1,000,000 lines `nonce hash16`, first `0 2394c9f10f9447a2`, last `999999 cdaadae412c7d9c1`, sha256
|
||||
`b77c61d874aed238394fd0e556113192acf21e0762871b1044796f3fbaea338a`, at build-1 `/srv/artefacts/packs/p01-vectors/hl-v6-all-cs.txt`
|
||||
(+ .sha256). The OpenCL read on PC 1's RX 7600 is the job `run-ca3-pc1-p01-opencl-7600-20261008` (behind the knee rows; the
|
||||
pack by `fetch-ca3-p01cs-pack-20261008`); equal digests are 1,000,000 of 1,000,000. The Metal read is the morning's.
|
||||
|
||||
## The tool fix
|
||||
|
||||
class-v6 `ce6e6902f45f40e727726cf3e0dbf0e1c924658a` (suite 151 passed, 0 failed, 8 ignored on build-7): `StateStream::check_pairing`
|
||||
runs first on every `--state` command; a refused pair exits 2 and writes nothing; a string seed never pairs; `--unpaired-state`
|
||||
records a research pairing on purpose. Known-failed test `igneum-pow/tests/pairing.rs`. The generator is untouched.
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"format": "igneum-same-work-job-context-1",
|
||||
"spec": "docs/plans/igneum-2.0-same-work-test.md (F03, Review B); the driver tools/ci/p01-vectors.py --job-context <this file> --phase 1|2|3",
|
||||
"class": "v6",
|
||||
"generator": 6,
|
||||
"load_class": "mx8+sh256x27+state+reg64c+fold+rw",
|
||||
"era": "0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"era_seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"era_widths": 4,
|
||||
"generator_tree": "class-v6 1a938abe4 (igneum-pow built on build-4 at /srv/builds/igneum-wt-same-work-v6/igneum-pow, binary sha256 0d3f3fca713b10a3...)",
|
||||
"state_stream": {
|
||||
"path": "build-4:/srv/builds/v6-census/packs/node1-state.igsd1",
|
||||
"chain_block": 159357,
|
||||
"block_hash": "af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3",
|
||||
"root": "1c583d352bb9c75a06dadb8d82d42836ebe8afa82d0b413be87bf921741f1526",
|
||||
"records": 93,
|
||||
"leaves": 93
|
||||
},
|
||||
"day": {
|
||||
"D": {
|
||||
"index": 20730,
|
||||
"bytes": "69676e65756d2d6461792ffa50000000000000"
|
||||
},
|
||||
"D1": {
|
||||
"index": 20731,
|
||||
"bytes": "69676e65756d2d6461792ffb50000000000000"
|
||||
}
|
||||
},
|
||||
"day_rule": "day bytes = 'igneum-day/' || day_le64 (igneum_pow::bind::day_bytes); D is the frozen pack's day index 20730, D+1 the next index 20731: the dataset-day rotation (infra/fast-time/override-60x.json, pow_day_ms 1440000) changes the day bytes and the dataset only; the program id is the same on both days",
|
||||
"prehash": "0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"range_log2": 20,
|
||||
"phases": {
|
||||
"1": [
|
||||
0,
|
||||
1048576
|
||||
],
|
||||
"2": [
|
||||
1048576,
|
||||
2097152
|
||||
],
|
||||
"3": [
|
||||
2097152,
|
||||
3145728
|
||||
]
|
||||
},
|
||||
"boundary_nonce": 1572864,
|
||||
"boundary_rule": "the midpoint of phase 2 (2^20 + 2^19 = 1572864, 32-aligned for the workers): under the 60x clock the day switches every 1,440,000 ms and phase 2 is the engine's window across one switch; every reader switches program and dataset at this nonce; the boundary block is the last 2^12 nonces of day D [1568768, 1572864) and the first 2^12 of day D+1 [1572864, 1576960)",
|
||||
"manifest": "c30ab32c",
|
||||
"manifest_note": "packaging/release-manifest.json on release-2.0.1 c30ab32c (the F03 R01 record, node 7cfa422a); the pool kit is release-2.0.2 f3e99e9c whose manifest file carries the same 2.0.1 text; the kit's node enum ends at V5, so a class=v6 job line is unnameable by it (the pool lane's read-back, 22:0x UK)",
|
||||
"references": {
|
||||
"D": "references/ref-D.txt",
|
||||
"D1": "references/ref-D1.txt"
|
||||
},
|
||||
"reference_recipe": "igneum-pow hash-bound --epoch-hex <epoch seed> --day-hex <day bytes> --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --era-widths 4 --state node1-state.igsd1 --prehash 00..01 --nonce <start> --count <n> on build-4 with the class-v6 1a938abe4 binary; ref-D covers [0, 1572864), ref-D1 covers [1572864, 3145728)",
|
||||
"readers": {
|
||||
"cpu_reference": "the reference files themselves (igneum-pow hash-bound, build-4)",
|
||||
"cuda": "the kit worker igneum-worker-cuda gen 6 (sha256 804a6f7f...) --serve on packs.D, driven by the driver (prepare of packs.D1 before phase 2)",
|
||||
"opencl": "igneum-worker-opencl --serve, PC 1 RX 7600, the morning (08:30 UK)",
|
||||
"metal": "the mini's worker, the morning (08:30 UK)",
|
||||
"node": "igneum-miner --recheck-vectors on a branch off class-v6-node-review e8773ff5 (IgneumEngine::epoch_for then hash_bound per nonce)",
|
||||
"pool": "igneum-pool recheck --job-context (the member-side share verifier); on the 2.0.2 kit BLOCKED by its V5 pins, the D1 pairing against class-v6-node-review e8773ff5 a separate labelled row"
|
||||
},
|
||||
"evidence_shape": "the driver's JSON: agree, disagree, missing, the first ten disagreements, answered, segments (program id and day bytes per segment), boundary (phase 2: nonce, ids and day bytes either side, the hashes and references either side, switched), prepare_line, manifest_sha, verdict",
|
||||
"job_line": "job <seq> <prehash> ffffffffffffffff <start nonce> <nonces> <epoch seed bytes> <day bytes> class=v6 era=edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"run_id": "same-work-20261008-01",
|
||||
"object": "the frozen class v6 object: pack hl-v6-all (tgz sha256 9131431015e102f4b2f545e1e56e7e2271b0e805568682200113f749709858b1, re-exported byte for byte from class-v6 1a938abe4 on build-4 at 21:44 UK), program id 0x4de7b836cc40a4ea, generator 6, epoch seed edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 (the genesis seeds) over the node1 state stream",
|
||||
"object_id": "0x4de7b836cc40a4ea",
|
||||
"epoch_seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"packs": {
|
||||
"D": "packs/hl-v6-all",
|
||||
"D1": "packs/hl-v6-all-d20731"
|
||||
},
|
||||
"pairing_note": "the node engine refuses this pair: IgneumEngine::epoch_for's class v5 check wants the state stream's block (af89be5d...) to equal the epoch seed (edc4fa84...), so the node and pool readers cannot run it (the node lane's program-id read-back, 21:5x UK); this context is the CUDA and CPU row only and is never counted as same-work (the coordinator's ruling, 22:0x UK); the same-work run is same-work-20261008-02",
|
||||
"written": "2026-10-08 22:1x UK by the same-work hand (worktree same-work-harness)"
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"format": "igneum-same-work-job-context-1",
|
||||
"spec": "docs/plans/igneum-2.0-same-work-test.md (F03, Review B); the driver tools/ci/p01-vectors.py --job-context <this file> --phase 1|2|3",
|
||||
"class": "v6",
|
||||
"generator": 6,
|
||||
"load_class": "mx8+sh256x27+state+reg64c+fold+rw",
|
||||
"era": "0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"era_seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"era_widths": 4,
|
||||
"generator_tree": "class-v6 1a938abe4 (igneum-pow built on build-4 at /srv/builds/igneum-wt-same-work-v6/igneum-pow, binary sha256 0d3f3fca713b10a3...)",
|
||||
"state_stream": {
|
||||
"path": "build-4:/srv/builds/v6-census/packs/node1-state.igsd1",
|
||||
"chain_block": 159357,
|
||||
"block_hash": "af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3",
|
||||
"root": "1c583d352bb9c75a06dadb8d82d42836ebe8afa82d0b413be87bf921741f1526",
|
||||
"records": 93,
|
||||
"leaves": 93
|
||||
},
|
||||
"day": {
|
||||
"D": {
|
||||
"index": 20730,
|
||||
"bytes": "69676e65756d2d6461792ffa50000000000000"
|
||||
},
|
||||
"D1": {
|
||||
"index": 20731,
|
||||
"bytes": "69676e65756d2d6461792ffb50000000000000"
|
||||
}
|
||||
},
|
||||
"day_rule": "day bytes = 'igneum-day/' || day_le64 (igneum_pow::bind::day_bytes); D is the frozen pack's day index 20730, D+1 the next index 20731: the dataset-day rotation (infra/fast-time/override-60x.json, pow_day_ms 1440000) changes the day bytes and the dataset only; the program id is the same on both days",
|
||||
"prehash": "0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"range_log2": 20,
|
||||
"phases": {
|
||||
"1": [
|
||||
0,
|
||||
1048576
|
||||
],
|
||||
"2": [
|
||||
1048576,
|
||||
2097152
|
||||
],
|
||||
"3": [
|
||||
2097152,
|
||||
3145728
|
||||
]
|
||||
},
|
||||
"boundary_nonce": 1572864,
|
||||
"boundary_rule": "the midpoint of phase 2 (2^20 + 2^19 = 1572864, 32-aligned for the workers): under the 60x clock the day switches every 1,440,000 ms and phase 2 is the engine's window across one switch; every reader switches program and dataset at this nonce; the boundary block is the last 2^12 nonces of day D [1568768, 1572864) and the first 2^12 of day D+1 [1572864, 1576960)",
|
||||
"manifest": "c30ab32c",
|
||||
"manifest_note": "packaging/release-manifest.json on release-2.0.1 c30ab32c (the F03 R01 record, node 7cfa422a); the pool kit is release-2.0.2 f3e99e9c whose manifest file carries the same 2.0.1 text; the kit's node enum ends at V5, so a class=v6 job line is unnameable by it (the pool lane's read-back, 22:0x UK)",
|
||||
"references": {
|
||||
"D": "references/ref-D.txt",
|
||||
"D1": "references/ref-D1.txt"
|
||||
},
|
||||
"reference_recipe": "igneum-pow hash-bound --epoch-hex <epoch seed> --day-hex <day bytes> --class mx8+sh256x27+state+reg64c+fold+rw --era 0:edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 --era-widths 4 --state node1-state.igsd1 --prehash 00..01 --nonce <start> --count <n> on build-4 with the class-v6 1a938abe4 binary; ref-D covers [0, 1572864), ref-D1 covers [1572864, 3145728)",
|
||||
"readers": {
|
||||
"cpu_reference": "the reference files themselves (igneum-pow hash-bound, build-4)",
|
||||
"cuda": "the kit worker igneum-worker-cuda gen 6 (sha256 804a6f7f...) --serve on packs.D, driven by the driver (prepare of packs.D1 before phase 2)",
|
||||
"opencl": "igneum-worker-opencl --serve, PC 1 RX 7600, the morning (08:30 UK)",
|
||||
"metal": "the mini's worker, the morning (08:30 UK)",
|
||||
"node": "igneum-miner --recheck-vectors on a branch off class-v6-node-review e8773ff5 (IgneumEngine::epoch_for then hash_bound per nonce)",
|
||||
"pool": "igneum-pool recheck --job-context (the member-side share verifier); on the 2.0.2 kit BLOCKED by its V5 pins, the D1 pairing against class-v6-node-review e8773ff5 a separate labelled row"
|
||||
},
|
||||
"evidence_shape": "the driver's JSON: agree, disagree, missing, the first ten disagreements, answered, segments (program id and day bytes per segment), boundary (phase 2: nonce, ids and day bytes either side, the hashes and references either side, switched), prepare_line, manifest_sha, verdict",
|
||||
"job_line": "job <seq> <prehash> ffffffffffffffff <start nonce> <nonces> <epoch seed bytes> <day bytes> class=v6 era=edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07",
|
||||
"run_id": "same-work-20261008-02",
|
||||
"object": "the chain-seed class v6 object: epoch seed af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3 (the node1 state stream's own block hash, the pair the engine accepts) with the genesis era seed, class v6 generator 6, program id 0x2a1d6caab4c24564 (the id the node lane drew on class-v6-node-review; the export with era 0:af89be5d... draws 0x442a1691b3e3507f and is not it), packs exported from class-v6 1a938abe4 on build-4 at 21:48 UK",
|
||||
"object_id": "0x2a1d6caab4c24564",
|
||||
"epoch_seed_bytes": "af89be5ddbadb6f6b4aee28ac8f249713be5d4c12621e3cea7f83ceada3c66b3",
|
||||
"packs": {
|
||||
"D": "packs/chain-seed-d20730",
|
||||
"D1": "packs/chain-seed-d20731"
|
||||
},
|
||||
"pairing_note": "every reader runs this context (the coordinator's ruling, 22:0x UK: the same-work test's meaning is six readers on one context); the frozen-object context 01 is the CUDA and CPU-only row",
|
||||
"written": "2026-10-08 22:1x UK by the same-work hand (worktree same-work-harness)"
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
{
|
||||
"format": "igneum-same-work-job-context-1",
|
||||
"spec": "docs/plans/igneum-2.0-same-work-test.md (F03, Review B); the driver tools/ci/p01-vectors.py --job-context <this file> --phase 1|2|3",
|
||||
"class": "v5",
|
||||
"generator": 5,
|
||||
"load_class": "mx8-era+sh256x27+state (class v5, --program-class v5)",
|
||||
"era": "0:7c36b83374a673e990213be462509dcb08bcfc85144306aa9517cf3ad66faf6e",
|
||||
"era_seed_bytes": "7c36b83374a673e990213be462509dcb08bcfc85144306aa9517cf3ad66faf6e",
|
||||
"era_widths": 4,
|
||||
"generator_tree": "release-2.0.1 c30ab32c (igneum-pow at the class v5 freeze 1c420786, fingerprint cbc5bd0a), built on build-4 at /srv/builds/igneum-wt-same-work-v5/igneum-pow",
|
||||
"state_stream": {
|
||||
"path": "state-epoch2.igsd1 (beside this file; from build-1's seed EVM RPC 127.0.0.1:27810 igneum_getPowStateLeaves for the seed block; the hand 26870 answered \"no published state stream\" for it at 22:18 UK)",
|
||||
"chain_block": 3423,
|
||||
"block_hash": "3c3fab434f7fd894ce6db0b09f298c3865726253e4fc68fd77acd163ccea8221",
|
||||
"root": "0xf798d1d89ee4de62...",
|
||||
"records": 224,
|
||||
"bytes": 21132,
|
||||
"sha256": "f36e6bbab71dc8b049fff052d0895bc4dd1e3f245779e82968fcf5b42535dee1"
|
||||
},
|
||||
"day": {
|
||||
"D": {
|
||||
"index": 20734,
|
||||
"bytes": "69676e65756d2d6461792ffe50000000000000"
|
||||
},
|
||||
"D1": {
|
||||
"index": 20735,
|
||||
"bytes": "69676e65756d2d6461792fff50000000000000"
|
||||
}
|
||||
},
|
||||
"day_rule": "day bytes = 'igneum-day/' || day_le64 (igneum_pow::bind::day_bytes); D is the frozen pack's day index 20730, D+1 the next index 20731: the dataset-day rotation (infra/fast-time/override-60x.json, pow_day_ms 1440000) changes the day bytes and the dataset only; the program id is the same on both days",
|
||||
"prehash": "0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"range_log2": 20,
|
||||
"phases": {
|
||||
"1": [
|
||||
0,
|
||||
1048576
|
||||
],
|
||||
"2": [
|
||||
1048576,
|
||||
2097152
|
||||
],
|
||||
"3": [
|
||||
2097152,
|
||||
3145728
|
||||
]
|
||||
},
|
||||
"boundary_nonce": 1572864,
|
||||
"boundary_rule": "the midpoint of phase 2 (2^20 + 2^19 = 1572864, 32-aligned for the workers): under the 60x clock the day switches every 1,440,000 ms and phase 2 is the engine's window across one switch; every reader switches program and dataset at this nonce; the boundary block is the last 2^12 nonces of day D [1568768, 1572864) and the first 2^12 of day D+1 [1572864, 1576960)",
|
||||
"manifest": "c30ab32c",
|
||||
"manifest_note": "packaging/release-manifest.json on release-2.0.1 c30ab32c (the F03 R01 record, node 7cfa422a); the pool kit is release-2.0.2 f3e99e9c whose manifest file carries the same 2.0.1 text; the kit's node enum ends at V5, so a class=v6 job line is unnameable by it (the pool lane's read-back, 22:0x UK)",
|
||||
"references": {
|
||||
"D": "references/ref-D.txt",
|
||||
"D1": "references/ref-D1.txt"
|
||||
},
|
||||
"reference_recipe": "igneum-pow hash-bound --epoch-hex 3c3fab434f7fd894ce6db0b09f298c3865726253e4fc68fd77acd163ccea8221 --day-hex <day bytes> --program-class v5 --era-hex 7c36b83374a673e990213be462509dcb08bcfc85144306aa9517cf3ad66faf6e --state state-epoch2.igsd1 --prehash 00..01 --nonce <start> --count <n> on build-4 with release-2.0.1's binary 7ba781db...; ref-D covers [0, 1572864), ref-D1 [1572864, 3145728)",
|
||||
"readers": {
|
||||
"cpu_reference": "the reference files themselves (igneum-pow hash-bound, build-4)",
|
||||
"cuda": "the kit worker igneum-worker-cuda 9bfcf728 (generation 5) --serve on packs.D, driven by the driver (prepare of packs.D1 before phase 2)",
|
||||
"opencl": "igneum-worker-opencl --serve, PC 1 RX 7600, the morning (08:30 UK)",
|
||||
"metal": "the mini's worker, the morning (08:30 UK)",
|
||||
"node": "igneum-miner --recheck-vectors on the release line's engine (class v5 by construction); until the subcommand is on a release-line branch the row reads from same-work-node cc23f9bd labelled as such",
|
||||
"pool": "igneum-pool recheck on the 2.0.2 kit as pinned (class v5 is nameable by its node)"
|
||||
},
|
||||
"evidence_shape": "the driver's JSON: agree, disagree, missing, the first ten disagreements, answered, segments (program id and day bytes per segment), boundary (phase 2: nonce, ids and day bytes either side, the hashes and references either side, switched), prepare_line, manifest_sha, verdict",
|
||||
"job_line": "job <seq> <prehash> ffffffffffffffff <start nonce> <nonces> <epoch seed bytes> <day bytes> class=v5 era=7c36b83374a673e990213be462509dcb08bcfc85144306aa9517cf3ad66faf6e",
|
||||
"run_id": "same-work-20261008-03",
|
||||
"object": "the live chain half: igneum-devnet-4 class v5 object at epoch 2, program id 0x81fbfa3aa413173f, epoch seed 3c3fab434f7fd894ce6db0b09f298c3865726253e4fc68fd77acd163ccea8221 (the epoch-2 seed block, chain block 3423, common to every tonight's chain: the split came after it), day 20734, era 0 seed 7c36b83374a673e990213be462509dcb08bcfc85144306aa9517cf3ad66faf6e (class v5 reads no era: the id is the same under era zero, both read), generator 5, on release-2.0.1's igneum-pow (class v5 freeze 1c420786; binary sha256 7ba781db08525637... built on build-4 from c30ab32c)",
|
||||
"object_id": "0x81fbfa3aa413173f",
|
||||
"epoch_seed_bytes": "3c3fab434f7fd894ce6db0b09f298c3865726253e4fc68fd77acd163ccea8221",
|
||||
"packs": {
|
||||
"D": "packs/v5-epoch2-d20734",
|
||||
"D1": "packs/v5-epoch2-d20735"
|
||||
},
|
||||
"pairing_note": "the coordinator's third row (22:1x UK): the same-work test's live-chain half; the node and pool readers run it on their release-line engines; CPU and CUDA cells by 06:00 UK, node and pool NOT RUN with a 08:30 UK clock if the hours run out",
|
||||
"written": "2026-10-08 22:2x UK by the same-work hand (worktree same-work-harness)",
|
||||
"genesis_day_index": 20734,
|
||||
"witness": "igneum-miner program-id --epoch-hex <seed> --era-hex <era> --day 20734 --class v5 --state state-epoch2.igsd1 reads \"class v5 attempt 0 id 81fbfa3aa413173f\" under era 7c36b833... and under era 00..00 alike (the miner at same-work-node cc23f9bd on build-2, the class v5 engine path; the 2.0.1 pair's miner ef0f2ed8 on build-1 has no program-id subcommand); the placed (c) pair's read on the seed's stream gave the same id (the node lane, 22:33 UK); build-1's seed is a dead fork since 21:34 UK (the devnet-4 split at the epoch-3 cut) and epoch 2's object is unaffected"
|
||||
}
|
||||
54
docs/analysis/pool/pool-pair-2026-10-08.md
Normal file
54
docs/analysis/pool/pool-pair-2026-10-08.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# The devnet-4 pool pair, 8 October 2026 (UX-05, UX-04 evidence; the night's record)
|
||||
|
||||
Pool seat, 8 October 2026, 20:0x to 21:4x UK. Binaries: the node /srv/artefacts/200-12424341/node-lane/igneumd on
|
||||
build-2 (successor-2.0.1's gate build), the pool daemon from pool-2.0 (8106ba27 then e063fdcd; igneum-pow fingerprint
|
||||
cbc5bd0aa10585c8, the freeze 1c420786), two CPU members from the fork at 2b1a247a (the same fingerprint; a test
|
||||
binary, never shipped). Two Vast hosts rented for the pair (i7-5820K, Xeon E5-2609 v3, Haswell) died with Illegal
|
||||
instruction at the class v5 catch-up on every node build and were destroyed; the pair ran on build-2 under lease
|
||||
pool class measure and was brought down by pid file at 21:3x UK (0 leases, 0 processes left).
|
||||
|
||||
## UX-05 Keep voting keys with the miner through pooling: PASS in the crate
|
||||
|
||||
| Test (pool crate, build-2) | Known-pass | Known-fail | Result |
|
||||
|---|---|---|---|
|
||||
| `verify::tests::a_share_under_another_key_is_refused_before_the_hash` | the member's key on job and share: ok | another key on the share, and a job naming another key: `vote_key`, hash 0, under a tenth of an evaluation | ok (51 of 51 at e063fdcd, 52 of 52 at 986252e7) |
|
||||
| `sidechain::tests::a_share_whose_keys_disagree_is_refused_before_its_pow` | make_share | the claim swapped, the header's key swapped, a foreign reveal | ok |
|
||||
| `the same nonce on another template hashes differently` | | a nonce moved to another template: `wrong_hash` | ok |
|
||||
| the TLS binding (replay refused), the admission bounds, the intents (review B) | | | ok |
|
||||
| `an_unsynced_node_hands_the_pool_no_state_and_no_job` (986252e7) | a synced node: leaves served, jobs issued | synced false: no leaves, no job | red against 8106ba27 on build-6, green with the guard |
|
||||
|
||||
The live pair reached: authorise with the members' own keys (the pool log names each key beside its payout address),
|
||||
class v5 seeds issued (epoch 1a87e870..., day 20734, era 7c36b833...), jobs issued with `vote_key_hash` the
|
||||
member's, shares sent. Every share read `wrong_hash`.
|
||||
|
||||
## The wrong_hash cause, from the retained logs (not a generator skew)
|
||||
|
||||
The node, the pool and the member carry the same igneum-pow (fingerprint cbc5bd0aa10585c8, the freeze; pool-2.0's
|
||||
tree 93c36844 byte-identical to 1c420786, read back by the pool lane from the mirror and from the binaries). The pool
|
||||
and the members hashed the identical epoch seed, day, class and era. Build-2's node never reached synced on devnet-4
|
||||
(its log loops on "class v5 execution catch-up" against peers that close the connection; `synced=false` on every
|
||||
read), so the class v5 state leaves the pool and the members fetched by `igneum_getPowStateLeaves` for the epoch's
|
||||
seed block were the still-settling catch-up state, not the node's state at template time; a class v5 lane hash over
|
||||
unsettled leaves does not match the node's. The class kept: a class v5 pool needs its node fully synced before it
|
||||
verifies shares, because the dataset is keyed on settled execution state. The guard by construction is pool-2.0
|
||||
986252e7 (the provider refuses leaves while `igneum_getExecStatus` reads unsynced, blocked or reexecuting; the feed
|
||||
issues no job; the STATUS line says so).
|
||||
|
||||
## Two 2.0 gaps closed by the pair (both on pool-2.0, in the 2.0.2 take)
|
||||
|
||||
1. The pool daemon had no class v5 day-state source and issued no job on a class v5 chain (8ff7a0f4:
|
||||
`state_provider.rs`, `--exec-rpc` defaulting to `--evm-rpc`).
|
||||
2. The daemon read amounts at 8 decimals and refused every 18-decimal template as a high-word amount (8106ba27: the
|
||||
base unit installed from the node's network before any amount is read).
|
||||
|
||||
## UX-04 Pay small operators without hidden custody
|
||||
|
||||
PPLNS distribution, the payout key round trip and the signed transfer decode: PASS in the crate. The live payout path
|
||||
(a member earns, is paid at the minimum, reconnects, a redirection attempt) is NOT RUN: it needs the pair on a
|
||||
fully-synced devnet-4 node with the 2.0.2 kit, tomorrow.
|
||||
|
||||
## Consequences per tier
|
||||
|
||||
A home miner on a pool: the key stays theirs on every job and share and a pool naming another key is refused before
|
||||
the hash; a pool operator: the daemon refuses to issue jobs until its node is synced, so an unsynced start costs idle
|
||||
minutes, never a wrong_hash storm; the network: no change to consensus from any of this.
|
||||
35
docs/design/key-succession-schedule.md
Normal file
35
docs/design/key-succession-schedule.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Key succession on the live object: the H and W proposal (Phase 1 item d, 8 to 9 October 2026)
|
||||
|
||||
For the founder's word in the 08:00 UK read-back. The mechanism is docs/design/key-succession.md (`proving_key_succession_daa` H, `proving_key_succession_window_daa` W, `proving_next_shard_program_id` and `proving_next_aggregator_id` the next pair; both pairs verify for H <= d < H + W, only the next from H + W). Nothing here activates anything: the pin tool is on master, the real pin and the object's fields move on the founder's word.
|
||||
|
||||
## 1. The proposal
|
||||
|
||||
| Field | Proposed | Why |
|
||||
|---|---|---|
|
||||
| W, the window | one epoch of the live object: 3,600 DAA (`POW_EPOCH_BLOCKS`, consensus/core/src/igneum.rs; one hour at one block per second) | the coordinator's word (W one epoch). A prover on the old host keeps earning for the whole epoch it started in; the verdict cache's epoch key (`a_verdict_cached_in_the_window_is_not_valid_after_it`) and the fast-time runs below show both pairs verifying across a window and the right refusal on each side of it. The object's default of 86,400 (one day) is the mainnet clock; on the devnet a day of two pairs is a day of two hosts to keep, with no gain the runs could show. |
|
||||
| H, the height | the first epoch boundary (a multiple of 3,600 DAA) at least one epoch after the end of a clean 24-hour run of the live chain on the 2.0.2 line: no finality pause, no reorg over depth 3, every fleet node on the cut; named as a DAA score in the object, never a clock | the coordinator's word (H after the chain's clean run). An epoch boundary so the window is one whole epoch of one seed; a full epoch of notice so every prover host has moved before the window opens (the fleet's hosts move with the kit, the app's with its update). |
|
||||
| The next pair | pin C: shard 0x51cd8cba314a32b60fac393949a4571714da6d6656717d286011601b2a163fe7, aggregator 0x05b395ec238f67406084f8a449d400f64c87dc62151daebf66695864727ded8a (branch p22-stage-2-pin, b5b82c958; manifest source_commit c45db4420, guest input format 3; deterministic across three builds) | docs/analysis/v6-10-guest-repin-2026-10-08.md |
|
||||
| The prior pair | the served pair 0x2b1a81cb… / 0x474678f3… (devnet-4's pinned pair) | the 2.0.1 kits embed it; the 17:58 UK pair 0x282dcfce… never activated and is skipped |
|
||||
|
||||
Consequences, stated: for a home prover on the app, the old host earns through the hour of the window and the app's update carries the new pair before it; for a fleet box, the kit's host moves at the cut, before H; for a pool, the pool's verifier accepts both pairs in the window and only the next after (the pool lane's rows). A record under the old pair carried after H + W pays nothing (the after-window row below); a record under the new pair carried before H pays nothing (the below-H row).
|
||||
|
||||
## 2. The evidence (fast time, three local nodes, the live pair as prior and the 17:58 pair as next, one real proof under each)
|
||||
|
||||
Every run on the verdict-cache fix node 3f672661 (review B F01/F02), build-8, 8 October 2026. The harness is infra/fast-time/proving-enforcement.mjs in succession mode; a chain at about one DAA per second with 60-DAA epochs; the attacker A carries what its pool holds, H1 and H2 refuse with the verifier in consensus. Every record carried in every run was refused on the right ground and nothing was ever paid; the runs differ only in how many of the six records the harness managed to get carried (its attacker's one-record-per-carrier shape, fixed over the evening).
|
||||
|
||||
| Run (UK) | H, W | Below H | In the window | After H + W | Paid | Verdict |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 20:29 to 20:38 (vcache-2) | 240, 120 | next pair refused on its pair | prior pair accepted on its pair, refused on its statement | prior pair refused on its pair | none | the three carried records right; one record per phase carried (harness) |
|
||||
| 20:42 to 20:55 (vcache-3) | 240, 120 | both refused on their statements: the second record's carrier landed after H (window too short for two records) | prior pair refused on its pair (its carrier past H + W) | prior pair refused on its pair | none | every refusal right for the carrier's DAA; the harness's clocks wrong |
|
||||
| 20:56 to 21:14 (vcache-4) | 360, 300 | next pair on its pair, prior pair on its statement | both on their statements, none on a pair | prior pair on its pair; the next-pair record went unread (the attacker did not rejoin in 150 s) | none | five of six right |
|
||||
| 21:15 to 21:33 (vcache-5) | 360, 300 | with the attacker's miner paused for the rejoin, A never rejoined (300 s, twice) | | | none | a harness fault, reverted |
|
||||
| 21:34 to 22:04 (vcache-7) | 360, 300 | next pair on its pair, prior pair on its statement | both on their statements, none on a pair | prior pair on its pair, next pair on its statement | none | PASS: all six right; registry batch enforced-proving-20261008-02 |
|
||||
|
||||
What the rows establish for the live schedule: the pair accepted is decided by the carrier's DAA against H and H + W, not by when the record was made (vcache-3's second records, forged below H and carried after it, were judged at their carriers); both pairs verify inside the window and a verified proof is answered from its facts at each carrier, never from a stale refusal (the F01 shape of the 19:49 run is gone on the fix node); a window of two harness epochs held every record the attacker managed to carry inside it. None of this measures a live epoch: the harness's epoch is 60 DAA, the live object's 3,600, so W of one live epoch is 60 times the harness's smallest passing window relative to the record's lifetime (RECORD_WINDOW_CHAIN_BLOCKS), which is the margin the proposal rests on.
|
||||
|
||||
## 3. What the founder's word moves
|
||||
|
||||
1. The object's four fields on the 2.0.2 line's override and digest (the node lane's digest move, the start check accepting both pairs: the 291ee6ae check refuses an elf/ whose top pair is not the object's, so the pin and the fields move in one cut).
|
||||
2. proving/igneum-prove/elf/ on master to pin C with the served pair as prior (p22-stage-2-pin), site/release-manifest.json's proof_guests and succession blocks (the steward's signed manifest with the sha256s 0ce9e351… / 3ef25e3f… elf and 0dbb6605… / 074eb906… vk).
|
||||
3. The fleet's prover kit on the new host before H; the app's host in its next update before H.
|
||||
4. The fast-time succession case rerun on the cut's node with pin C as next (the harness takes `--next-ids` and a `--next-proof` under pin C: one compressed proof of a devnet-4 block under the new host, about 100 s on a box CPU).
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
21
docs/plans/evidence/UX-01-20261008.md
Normal file
21
docs/plans/evidence/UX-01-20261008.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# UX-01 evidence, run ux-01-20261008-win-2.0.0 (8 October 2026)
|
||||
|
||||
Onboard ordinary owners on native desktop apps, the team-run half: the two Windows PCs take the Igneum Miner 2.0.x Windows
|
||||
entry (2.0.0 live 18:44 UK, Setup exe 793a631d, manifest aa354ed5; 2.0.1 about 20:55 UK with the coinbase-over-u64 fix)
|
||||
through the app's own update path, with no click after the install and mining on every card (the founder's rule of
|
||||
18:0x UK), observed through the apps' own intake uploads and the relay agents. The P10 study (30 unaffiliated
|
||||
participants) is NOT RUN: not yet recruited; never a staff run.
|
||||
|
||||
## Shape
|
||||
- PC 1 (ae432dc7): Igneum Miner 0.3.26 since 17:26 UK, RTX 5090, RTX 5080, RX 7600; mining off under the Devnet 3 off order; the 2.0.0 installer downloaded and verified 18:58 UK, the install queued in the hash lane's order (update-now-20261008-181124).
|
||||
- PC 2 (1ccfe586): RTX 5090, RTX 5060 Ti, Arc B580; mining off since the Devnet 3 off jobs (#1519 api/pause 16:38 UK, #1521 17:15 UK).
|
||||
- The read-back: the engine's "update-return: app <v> up after the update from <from>" line at intake, then the relay run "mining on after the 2.0.1 install" (mining-on-after-200.ps1: wait for 2.0.1 or later, clear a stale install-running.flag, api/resume, start the app if silent) printing `RESULT MINING-ON ok|partial version=... network=... node=... synced=... paused=false cards=<n> rates=...`.
|
||||
|
||||
## Read-back lines (time UK, PC, the line or the fault and its class)
|
||||
- 19:22:01 PC 2: `update-return: app 2.0.0 up after the update from 0.3.26 (node igneumd 2.0.0, machine 1ccfe586)`; node started 19:22:05; `[ok] mining resumed` 19:22:13 (no click: relay run #1742 cleared the pause through api/resume).
|
||||
- 19:28 PC 2 (#1754): `RESULT MINING-ON partial version=2.0.0 network=devnet node=no peers synced=False paused=False cards=3` (every card waiting). Class: the devnet-4 hubs' outage (every dial target down 19:15 to 19:17, back by 19:29), not the install.
|
||||
- 19:41 PC 2 (#1757): `RESULT MINING-ON partial ... node=behind peers=1 synced=False tip_age_s=1289`; IBD completed 19:29:16, the node then "behind". Class: the 2.0.0 miner refuses every template whose coinbase exceeds a u64 (the shipper, 19:5x UK), fixed in node 777214af as the 2.0.1 entry.
|
||||
- PC 1: pending (0.3.26; the install runs when its queue reaches update-now, then 2.0.1 through the same path).
|
||||
|
||||
## Status
|
||||
- 20:36 UK: RUNNING; the 2.0.1 read-backs (relay runs #1762 PC 2, #1763 PC 1) are the next lines.
|
||||
48
docs/plans/finality-native-runs-2026-10-09.md
Normal file
48
docs/plans/finality-native-runs-2026-10-09.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# The native finality runs of 9 October 2026 (the node lane; Review B F04 and I03; V6-09 beside them)
|
||||
|
||||
Status: PLANNED (written 8 October 2026, 21:4x UK, main's order under the night rule). The runs start from 00:30 UK on build-8 and build-9 (build-7 for the two-node cache case), under the lease pool, every process under a pid watcher that restarts it and records the restart; the rows land in `sim/results_v2.md` under "Rule v4" with their result files under `sim/finality-attacks-results/` and the registry batch (FIN-08, FIN-02's native half, ROT-05, VER-08's recovery row) through `tools/ci/test-record.mjs`, by 07:00 UK. An accelerated simulation is evidence of the rule's shape, never operating history: every row below runs on real nodes with the 60x file's windows (W = 120 DAA s at 1 block/s) and says so.
|
||||
|
||||
The harness: `tools/finality-attacks/v3.mjs` (three nodes on the 60x file, six voters, one-way delay 300 ms per proxied link, the pass lines of `finality-guarantees.md` 6.7), extended for the rows that need a third island, an equivocating key, a stopped voter, a succession item and a backfilled checkpoint history; the extensions land with the rows. The node: the 2.0.2 line (successor-2.0.1 at or after 45e7b910: rule v4 with the pause fix 6872db13, the lock kind of F04, the finality-backed take of a9ff0a25) in the gate pair under `/srv/artefacts/200-<sha>/node-lane` (gate evidence; never a fleet binary).
|
||||
|
||||
## 1. The 40/40/20 case past the window with equivocation (F04, the reviewer's hard FAIL line)
|
||||
|
||||
Three islands by weight 40 / 40 / 20 (keys p0,p1 on n0; p2,p3 on n1; q0 on n2, shares 0.2 / 0.2 / 0.2 / 0.2 / 0.2 across five keys, the sixth key e the equivocator at 0.2 placed by the row), WARM 230 s, SPLIT 420 s (longer than the window after the last lock), HEAL 400 s, 1 block/s in all, rule v4 with the recovery on.
|
||||
|
||||
| row | the equivocator e | expected under 6.2 and 6.5 | the FAIL line |
|
||||
|---|---|---|---|
|
||||
| 1a | absent (honest three-way) | no side locks during the split (no island holds more than half of the anchored table), every node pauses, the heal locks within two intervals, 0 conflicts | any lock during the split; any conflicting certificate |
|
||||
| 1b | mines on island A only (reaching 60 of the anchored table on A) | A recovers once a full window has passed (the recovery lock at the first index past the window), B and C pause, the heal brings B and C onto A's chain, 0 conflicts | a lock on B or C; two certificates at one index |
|
||||
| 1c | mines dust-valid on A AND B (the 6.5 bound: both at 60 percent) | BOTH A and B recover after the window: two recovery certificates at one index, the measured conflict the spec names; the heal strips e (3.6) and reports the pair under 3.11.4; the history through the anchored lock untouched | a recovery lock presented as final on any surface (lockKind must read "recovery" on both); the anchored history moving |
|
||||
| 1d | 1c under the pause-only variant (recovery off) | no lock on any side during the split, the pause until the heal, 0 conflicts (the strictly stronger guarantee of 6.5) | any lock during the split |
|
||||
|
||||
Measured per row: new locks per side during the split (index and DAA), the lock kind on `igneum_getFinalityCheckpoints` (final or recovery), conflicting certificates logged, disagreeing locked indices after the heal, the equivocator's strip at the heal (the ban line), every pre-heal lock kept, the first lock after the heal (s).
|
||||
|
||||
## 2. The pause-only alternative with backfill, missing history and the old keys returning (I03)
|
||||
|
||||
Rule v4, recovery off. A chain is run 230 s with six voters, then split 3/3 for 420 s (no lock on either side, the pause), then healed; during the heal window: (a) a fresh node joins from genesis and must backfill every checkpoint and certificate (the historical-checkpoint backfill; it reads the same latest lock as the three), (b) one node restarts from a datadir with its finality state removed (missing historical data: it rebuilds from the chain's carried certificates and must agree), (c) every old key returns and signs (the pause ends on two thirds, the lock within two intervals). Measured: the backfilled node's locked indices equal the others' (0 disagreement), the restarted node's, the first lock after the return, 0 conflicts.
|
||||
|
||||
## 3. Authority succession and strip, restart, certificate arrival order, seed boundaries (I03)
|
||||
|
||||
| row | shape | expected |
|
||||
|---|---|---|
|
||||
| 3a | a voter leaves (W7, the leave item carried) mid-window, the rest sign | the frozen table reduces by the leaver (frozen_floor), the next lock at two thirds of the remaining; the leaver's weight never counts |
|
||||
| 3b | a key is stripped (an equivocation evidence item carried) one interval before a lock | the strip applies before the lock's test; a certificate carrying the stripped key's signature counts it as 0 |
|
||||
| 3c | a voter restarts between determination and lock (kept datadir) | it votes once (no double vote), the lock forms on time, its locks equal the others' after the restart |
|
||||
| 3d | two certificates for consecutive indices arrive in reverse order at a node (the fleet's 263-then-262 read on hub-1) | both lock under the rule, the LOCKED line prints the certificate's fractions (the 2.0.2 log fix), no "signed 0" artefact |
|
||||
| 3e | a seed boundary (the epoch's reference block) inside a pause | the seed is drawn from the chain block below the lead whether or not it is locked (section 8); mining continues; the first lock after the pause names a block past the boundary |
|
||||
|
||||
## 4. The inter-chain verifier and a recovery lock (I03)
|
||||
|
||||
The Sepolia certificate verifier (dex lane's bridge, 0x874D8Be5… on igneum-devnet-4's voter table) given (i) a final certificate, (ii) a recovery certificate from row 1b: it accepts (i) as final; for (ii) it must read lockKind "recovery" and never present it as final (the bridge doc 829b839ec: recovery locks fail closed on the verifier, which reads only weight). The row records what the verifier answers for each and the receipt page's word; a recovery certificate accepted as final is the FAIL line.
|
||||
|
||||
## 5. V6-09, cold compressed verification on the minimum validator (with the enforced-proving lane)
|
||||
|
||||
One validator node pinned to one core (taskset), no warm relay cache (fresh datadir, the pool empty), fed by a relay peer: (a) ten cold valid shard proofs in one block's carried records (the measured 0.668 to 0.710 s a proof on one loaded core); (b) ten expensive-invalid payloads (proofs whose bytes deserialise to the largest accepted shape and fail at the last check) with the relay's pre-deserialise cap (MAX_PROOF_BYTES in consensus-core, V6-08's constant) and the in-flight bound of 8; (c) a forged record under each pair across the key and fee transitions, before, at and after activation, on an unmodified validator. Measured per row: verify seconds per proof, block-validation time against the deadline, the NotReady retries, memory before and after deserialising, the carrier paid exactly once (igneum_getProofRecords on the validator against the relay's), the forged record refused with its reason. The rows go to the test map cell `harness:v6-09-cold-verify` with the F0 fixture, by 12:00 UK 9 October.
|
||||
|
||||
## 6. The two-node cache-history test (F01, with the proving lane's fix 3f672661)
|
||||
|
||||
Two nodes, one with a warm verdict cache built on carriers 1..k, one cold, both fed the same blocks in a different order (the cold one sees the later carrier first): identical block-validity verdicts and identical payouts (igneum_getProofRecords and the paid map equal on both), with the known-failed shape first (the pre-fix node's cached context refusal replayed under a later carrier, the 19:49 UK reproduction). On build-7 by 03:00 UK.
|
||||
|
||||
## Boxes and clocks
|
||||
|
||||
build-8: sections 1 and 2 (the 40/40/20 rows 1a to 1d, then the backfill case), from 00:30, rows by 05:00. build-9: sections 3 and 4 (after the 2.0.2 line's gate ends), from 01:00, rows by 06:00; section 5 with the enforced-proving lane's fixtures, rows by 12:00. build-7: section 6, by 03:00. Every run under `lease pool N --class release` with a pid file and a watcher; a stall is recorded for the 08:00 read-back, never a hand-made lock. The rows land in sim/results_v2.md with their result files and the registry batch by 07:00 UK, the plan's status moved to MEASURED per section as each lands.
|
||||
|
|
@ -6,7 +6,7 @@ The fixture every case of the Test and Acceptance Standard (docs/plans/igneum-2.
|
|||
|
||||
| Field | Value | Read from | Owner |
|
||||
|---|---|---|---|
|
||||
| Miner cut tip (release-2.0.1) | aa0e0f45 (9c844503 + the pin file; 9c844503 = 2826f37e + the six-target packaged peer list; the app crate byte-identical to 2ea7b43f's throughout, so the pow and app cells read on 9c844503 cover it by content) | the shipper's line 19:5x | shipper (ae892a8b0f78fe31c) |
|
||||
| Miner cut tip (release-2.0.1) | aa0e0f45 is the shipped tip (the entries stand on its binaries); release-2.0.1's final tip is c30ab32c (aa0e0f45 + the pool lane's pool/ and docs a54dffa3 + the release manifest f03-manifest-201 7437a31a merged at 800faaf7 + the hand-merged spec 09; no app, node pin or packaging change). The clean build from the manifest (R2-F03-R01) read green on c30ab32c at 21:14 UK on build-4: kaspad with igneum-pow, igneum-miner, igneum-pool, igneum-app, igneum-prove-host, and every component's own pin equals packaging/release-manifest.json. (9c844503 + the pin file; 9c844503 = 2826f37e + the six-target packaged peer list; the app crate byte-identical to 2ea7b43f's throughout, so the pow and app cells read on 9c844503 cover it by content) | the shipper's lines 19:5x and 21:0x; the steward's build 21:14 | shipper (ae892a8b0f78fe31c) |
|
||||
| Node sha for the roll | 7cfa422a = ef0f2ed8 (291ee6ae + the 2.0.1 version) + the miner base-unit fix, amended (777214af did not compile: a self-recursive connect, caught by the steward's read at 19:50) | the node lane's and shipper's lines 19:5x | node lane (a283f5f0d364ceef0) |
|
||||
| Node line read green tonight | 4cdcc488, d5981514, bee41b5e, 9fc9f42a, 5713d547, 417c4a57, 291ee6ae (ef0f2ed8 = 291ee6ae + the version bump, its own read on build-4 recorded as the literal) | the steward's matrices on build-2 and build-4 | CI steward |
|
||||
| Network | igneum-devnet-4, a fresh genesis; EVM chain id 4465 (0x1171), set in devnet4_params, read by the canaries as eth_chainId on every candidate tonight, pinned by the digest be5f4068; every 2.0 devnet node, pool and reference app signs with it; mainnet's and the testnet's ids unchanged from the 0.3 line | the node lane's line 19:3x | node lane |
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ Built 8 October 2026, 18:3x BST (the founder's order: no feature left out, no st
|
|||
| 35 | D4. A five-year coexistence model (p. 13) | Profit-maximising operator simulation: mine, internal prove, external prove, off; under a proving demand spike, a token price fall, a major prover leaving, a specialised entrant in either market. Pass if pricing and capacity rules restore service without an administrator. | research lane (ad6a2bd47d4a46105) | 21:00 tonight | in flight: operator-simulation.md landed 859b3daa, the four shocks run on floor lane 3 by 20:15 | docs/analysis/class-v6/operator-simulation.md | INC-03, INC-04 |
|
||||
| 36 | D5. A no-rescue network exercise (p. 19) | Prerequisite: proof verification enforced in consensus (verifier_in_consensus, proof_rule_active_from) live on the exercise network. | enforced-proving lane (a6e8f84588b809d62) | landed | PASSED: verifier_in_consensus live on igneum-devnet-4 from block zero (4cdcc488), the seven refusals and the fast-time crossing PASS at 17:22 | docs/spec/proving-enforcement.md | ZKP-01, ZKP-08 |
|
||||
| 37 | D5. A no-rescue network exercise (p. 19) | No founder-operated mining, proving, aggregation or mandatory distribution infrastructure. | node lane (a283f5f0d364ceef0) | days two and three | open: the three ex-testnet seeds held for it | | OPS-01 |
|
||||
| 38 | D5. A no-rescue network exercise (p. 19) | Cross epoch boundaries, interrupt signing, partition the network, remove major operators, hostile proof submissions, independently written clients. | finality lane (aca0f5ed924a2a99b) | days two and three | in flight: the partition row landed ec9ea053d (rule v4); the rest of the scenario table owed | docs/spec/finality-guarantees.md | FIN-02, FIN-03, FIN-04, FIN-08, ROT-01 |
|
||||
| 38 | D5. A no-rescue network exercise (p. 19) | Cross epoch boundaries, interrupt signing, partition the network, remove major operators, hostile proof submissions, independently written clients. | finality lane (aca0f5ed924a2a99b) | days two and three | in flight: the partition row landed ec9ea053d (rule v4); the rest of the scenario table owed; LIVE, 8 October 22:08 UK: igneum-devnet-4 split into at least four chains at the class v5 epoch cuts (a node that captured block X as epoch N's reference validates only epoch-N headers seeded by X; another chain's headers are refused and their weight never counts, so the virtual never moves and the nodes never rejoin; a lock above the fork makes it permanent): the epoch cut acted as a partition and the network did not heal on its own, the D5 property tested live and FAILED on 2.0.1; the fix is software rolled (the IBD catch-up re-syncing bodies on every state wait on the 2.0.2 line by 22:45; the foreign-seed capture built tonight with suites by 02:00), never hands; the reset the founder's decision | docs/spec/finality-guarantees.md | FIN-02, FIN-03, FIN-04, FIN-08, ROT-01 |
|
||||
| 39 | D5. A no-rescue network exercise (p. 19) | A withholding concentrated prover: replacement operators, usable inputs, reassignment, explicit behaviour during proof delays. | enforced-proving lane (a6e8f84588b809d62) | days two and three | open | | CAP-07, INC-08 |
|
||||
| 40 | Pools, software and participation (launch requirements) (p. 14) | Vote keys stay with the miner at protocol level: the member's retained voting key committed into its work, payment aggregation separate, verifiable, pool identity substitution resisted. | pool design seat (a3832b1c3b274b310) | tomorrow 18:00 | in flight: the design on master 637e508b (the header commitment, the key on job and share); the code the pool branches rebase first | docs/design/pool-vote-key-commitment.md | UX-05, FIN-05 |
|
||||
| 41 | Pools, software and participation (launch requirements) (p. 14) | Non-custodial payouts, practical minimum payouts, local work verification, low-bandwidth participation (P2Pool as precedent, not code). | pool design seat (a3832b1c3b274b310) | tomorrow 18:00 | open: designed in the same file | | UX-04 |
|
||||
|
|
|
|||
48
docs/plans/igneum-2.0-same-work-test.md
Normal file
48
docs/plans/igneum-2.0-same-work-test.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# The cross-backend same-work test (F03, Review B; specified by the CI steward, 8 October 2026, 20:1x UK)
|
||||
|
||||
One job context, six readers, three phases around a transition, bit-for-bit agreement. Run by the fleet lane with the freeze object; the evidence recorded against POW-01 through the batch tools.
|
||||
|
||||
## The job context (one file, `job-context.json`, written once by the steward or the hash lane and copied to every reader)
|
||||
|
||||
| Field | Value tonight | Source |
|
||||
|---|---|---|
|
||||
| object | the class v5 freeze: igneum-pow 1c420786, fingerprint cbc5bd0aa10585c8576e71e37a8ee47a045ae51754e9ddf749d0c21e6a535f88 | packaging/release-manifest.json (generator) |
|
||||
| epoch seed bytes | edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 (the genesis seeds) | the hash lane's P01 line |
|
||||
| day bytes | 69676e65756d2d6461792ffa50000000000000 | the hash lane's P01 line |
|
||||
| class | 5; era 0:<the epoch hex> | the pack's program.json |
|
||||
| prehash | 0000000000000000000000000000000000000000000000000000000000000001 | the P01 convention |
|
||||
| nonce range | 0 .. 2^20 per phase (three phases, three ranges: [0, 2^20), [2^20, 2^21), [2^21, 2^22)) | this page |
|
||||
| transition | the day boundary: day D for phase 1, the boundary block for phase 2 (the last 2^12 nonces of day D and the first 2^12 of day D+1 as the engine sees them under fast-time 60x), day D+1 for phase 3 | infra/fast-time/override-60x.json |
|
||||
|
||||
The transition is a dataset-day rotation (the class and era unchanged, the day bytes change), the one transition every live network crosses hourly at 60x; a class rotation (v5 to v6) is the same test with `class` and the second `day bytes` changed and runs only on a research object until a v6 floor is set.
|
||||
|
||||
## The six readers (every one writes `<reader>-<phase>.json` of the P01 driver's evidence shape: nonce, hash per line in the raw file; agree, disagree, missing, the first ten disagreements, the device line, the pack and program ids, the manifest sha in the JSON)
|
||||
|
||||
1. **node**: `igneumd` at the manifest's node sha, the engine's own re-check (`IgneumEngine::epoch_for` then `hash_bound` per nonce) through `igneum-miner --recheck-vectors` on the node binary's CPU path (the pool.rs seam), on build-2.
|
||||
2. **CPU reference**: `igneum-pow hash-bound --count 2^20 --nonce <start>` from the manifest's generator commit, on build-2 (the hash lane's reference files are this reader).
|
||||
3. **CUDA**: the kit's `igneum-worker-cuda --serve` driven by `tools/ci/p01-vectors.py` with the job context, on a 5090, 4090 and 3090 pod.
|
||||
4. **OpenCL**: `igneum-worker-opencl --serve` the same way, on the AMD pod when one exists, else PC 1's RX 7600 (the only OpenCL retail cell tonight).
|
||||
5. **Metal**: the Mac's own worker, the same driver, on the mini (the morning's run; never on this Mac).
|
||||
6. **pool**: `igneum-pool` at the manifest's sha with its vendored node at the manifest's node sha, the member-side re-check (`pool/src/node.rs` → `kaspa_pow::igneum::IgneumEngine`) on the same job lines, on build-2.
|
||||
|
||||
## The three phases
|
||||
|
||||
Phase 1 (before): every reader on range 1 under day D. Phase 2 (during): every reader on range 2 where the engine's day moves from D to D+1 inside the range at the boundary nonce the fast-time clock sets; every reader must switch program and dataset at the same nonce. Phase 3 (after): every reader on range 3 under day D+1.
|
||||
|
||||
## Acceptance (the registry row POW-01, cell `harness:same-work`, PASS only when all hold)
|
||||
|
||||
- every reader's hash equals the CPU reference's for every nonce of every phase (zero disagreements, zero missing);
|
||||
- the program id and the day each reader reports at phase 2's boundary are the same across readers (the transition is seen at one nonce);
|
||||
- the pool's accepted-share verdict for a sample of 64 nonces per phase equals the node's (the seam closes by a build: `release-manifest-check.sh` refuses a redefined EpochSeeds and an unpinned vendored node);
|
||||
- the run names the manifest sha (packaging/release-manifest.json), and the evidence sits at build-1:/srv/artefacts/tas/same-work-<run id>/.
|
||||
|
||||
A disagreement on any reader is a red to main within fifteen minutes (the coordinator's rule for the cross-checks).
|
||||
|
||||
## What is still to build (owners, defaults)
|
||||
|
||||
| Piece | Owner | Clock | Default if silent |
|
||||
|---|---|---|---|
|
||||
| `p01-vectors.py --job-context <file> --phase N` (the three ranges and the boundary assertion; the driver already drives the workers) | CI steward | 21:30 | built as specified |
|
||||
| the node reader (`igneum-miner --recheck-vectors`, the seam with a count) | node lane | 22:00 | the steward builds it on a branch of release-2.0.0-node under rule 24 |
|
||||
| the pool reader (the member-side re-check over a job-lines file) | pool lane | 22:30 | the pool's existing recheck_pack path over the context, driven by the steward |
|
||||
| the pods and the mini | fleet lane | on the artefact line | as P01 |
|
||||
|
|
@ -133,8 +133,8 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
|
||||
### bench:pc1-packs
|
||||
|
||||
- Command: `tools/ca3-v4-amend/pc1-ca4-packs.ps1 on PC 1 (RTX 5090, the signed-jobs channel, --cards-off, the Power Helper lock at 1,300 MHz, nvidia-smi at 1 Hz, 250 x 2^24 per row, the kit's CUDA worker --bench)`
|
||||
- Box class: PC 1 bench
|
||||
- Command: `tools/ca3-v4-amend/pc1-ca4-packs.ps1 on the project's own rig (RTX 5090, the signed-jobs channel, --cards-off, the Power Helper lock at 1,300 MHz, nvidia-smi at 1 Hz, 250 x 2^24 per row, the kit's CUDA worker --bench)`
|
||||
- Box class: the project's own rig bench
|
||||
- Fixtures: F0, F1
|
||||
- Cases:
|
||||
- GPU-02 Reproduce Ember clock-lock savings: partial: the paired stock and locked rows on the same board, host and workload (the rate held, 2.37 against 3.26 microjoules per hash on the class v5 pack); the historical 34 to 41 percent claim's full configuration set is owed
|
||||
|
|
@ -144,8 +144,8 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
|
||||
### bench:pc1-amd
|
||||
|
||||
- Command: `tools/ca3-v4-amend/pc1-amd-cardin-bench.ps1 on PC 1 (RX 7600, OpenCL, gfx1102, 30 dispatches of 2^24 per size, rate only)`
|
||||
- Box class: PC 1 bench
|
||||
- Command: `tools/ca3-v4-amend/pc1-amd-cardin-bench.ps1 on the project's own rig (RX 7600, OpenCL, gfx1102, 30 dispatches of 2^24 per size, rate only)`
|
||||
- Box class: the project's own rig bench
|
||||
- Fixtures: F0, F1
|
||||
- Cases:
|
||||
- GPU-01 Cover the declared commodity population: partial: the 8 GB AMD cell, fingerprints and rates at 1, 2, 4 and 5.5 GiB; one cell of P02's twelve
|
||||
|
|
@ -243,7 +243,7 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
- Box class: harness (network run on the 2.0 devnet plus Sepolia reads)
|
||||
- Fixtures: none
|
||||
- Cases:
|
||||
- VER-03 Prove successful payment rather than inclusion: partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the Devnet 3 fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction
|
||||
- VER-03 Prove successful payment rather than inclusion: partial: a payment receipt is labelled payment only when the receipt is proven against the segment statement's receipts commitment under the finality certificate, inclusion-only receipts read inclusion, a tampered receipt and a flipped status fail; run on the the earlier devnet fixtures, the 2.0 devnet re-run waits for its first paid segment whose last block carries a transaction
|
||||
- VER-04 Bound cross-chain oracle trust and replay: partial: the oracle's trust() names the deployer-installed table and the unchecked aggregator signature, a second hash at a stored certificate index is refused, a root claim at an unknown index is refused, another chain id is refused (tools/reference-apps/oracle/test.mjs on Sepolia); Review B F04: the Sepolia verifiers apply the two-thirds rule only, carry no lock-kind field, and an under-threshold (recovery-rule) certificate fails closed in submitCertificate, so no stored root is a recovery lock (the DEX lane's docs/bridge/light-client-bridge.md paragraph); the claimed-option review of the trust model is the reviewer's
|
||||
- VER-05 Reconstruct required state without founder storage: partial: the public node and the reference reader on build-1 executed the 2.0 devnet from genesis with no snapshot (unit ExecStart without --igneum-exec-snapshot), and the pages fetch headers, certificates, coinbase bodies and account proofs from the public read RPC only; the archive and availability model beyond the 2,048-block state ring is the OPS no-founder exercise
|
||||
- VER-06 Detect withholding, corruption and stale data: partial: the read service never serves a certificate from another network, a withheld header in the path and a corrupted proof node are detected, stale data prints its lock age beside every balance, and a client told no certificate never falls back to a trusted RPC balance; detection on the fault network F4 is not run
|
||||
|
|
@ -336,24 +336,95 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
|
||||
### bench:amd-intel-energy
|
||||
|
||||
- Command: `the AMD-and-Intel energy lane jobs on the signed-jobs channel: run-ae-pc2-b580-energy-20261008 (PC 2, Arc B580, the class v6 kit worker --memprobe and --bench-pack on hl-v6-foldrw and hl-v6-all, Level Zero energy counter) and run-ae-pc1-7600-energy-20261008 (PC 1, RX 7600, the same with ADLX watts at stock, plimit -30, gmax -500 + plimit -30); scripts in docs/analysis/class-v6/amd-intel-energy/`
|
||||
- Box class: PC 1 and PC 2 bench (OpenCL)
|
||||
- Command: `the AMD-and-Intel energy lane jobs on the signed-jobs channel: run-ae-pc2-b580-energy-20261008 (PC 2, Arc B580, the class v6 kit worker --memprobe and --bench-pack on hl-v6-foldrw and hl-v6-all, Level Zero energy counter) and run-ae-pc1-7600-energy-20261008 (the project's own rig, RX 7600, the same with ADLX watts at stock, plimit -30, gmax -500 + plimit -30); scripts in docs/analysis/class-v6/amd-intel-energy/`
|
||||
- Box class: the project's own rig and PC 2 bench (OpenCL)
|
||||
- Fixtures: F0, F1
|
||||
- Cases:
|
||||
- GPU-03 Measure the real 64-register GPU cost: partial: the 64-register window on AMD and Intel, rate per unit of work (RX 7600 0 percent, Arc B580 -0.3 percent, kernel throughput, quiet) with the B580 fingerprints equal on both packs and the offline RDNA allocation (160 VGPRs, no spill); energy owed (the 7600 job queued, the B580 counter unsupported unelevated); team-run, not under the standard's paired protocol or a wall meter
|
||||
|
||||
### adversary:mf-placed
|
||||
|
||||
- Command: `cd tools/chip-model/mf && make flow-<design> power-<design> (inside openroad/orfs:latest on a rented CPU host; never the Mac); python3 flow/collect.py results; python3 flow/board.py <pJ> <lo> <hi> <leak> <mm2>; python3 flow/hash.py results <design> power`
|
||||
- Box class: rented CPU host (Vast, 48 to 72 cores) on the ORFS image
|
||||
- Fixtures: F0, F1
|
||||
- Cases:
|
||||
- ADV-01 Build a multi-family programmable opponent: the mf core (18 families, SRAM window and imem macros, operand isolation, 5-phase port) placed and routed on ASAP7 with SPEF and a gate-level VCD; k per family and per draw; outputs checked against the RTL simulation's checksums per tag, not yet against the POW vectors (owed)
|
||||
- ADV-03 Attack with data-local and hybrid execution: the data-local, hybrid and companion-host rows of multi-family-adversary.md sections 11, 13 and 14 (bit counts closed-form; the hop and wire energies claimed)
|
||||
- ADV-07 Evaluate lifetime without forced obsolescence: the lifetime table and the six-row transition matrix (sections 7 and 14) on the placed rows; the 32-lane genesis comparator placed on adv-g
|
||||
- ADV-08 Independently challenge the best-cost envelope: the best-cost envelope on the complete machine (section 6) and the SRAM-die ticket reconciliation with lane B (section 15); the unaffiliated second reviewer is not this lane's
|
||||
- POW-03 Test whether live state is unavoidable: partial: the live state held in an SRAM macro per 8 lanes with a time-multiplexed single port and operand isolation, the complete-system cost in section 6; the liveness trace itself is the connected-state lane's tool
|
||||
- POW-04 Evaluate connected-resource restructuring: partial: the 64-register window's cost on the macro core (sections 4 and 5, agreeing with the k lane's gated-flop row within 5 percent); the restructured candidate's GPU cost is the invention lane's
|
||||
- ADV-05 Validate physical and complete-board costs: partial: the SRAM macros, ports, wiring, clocking and the complete-board terms are modelled in sections 2.3, 5 and 6 with the unmodelled items carried as uncertainty; the calibration against an existing hardware block is the k lane's bare-lane row beside it, owed as a named comparison
|
||||
|
||||
### adversary:d2b
|
||||
|
||||
- Command: `cd tools/chip-model/mf && python3 flow/d2b.py results N5 1 && python3 flow/d2b.py results N3 1 (on a build box under lease pool or a rented host; reads results/table.csv)`
|
||||
- Box class: any box (a one-minute Python model on the placed rows)
|
||||
- Fixtures: F0
|
||||
- Cases:
|
||||
- ADV-02 Price shared, reduced and reconstructed memory: memory sharing, partial stores at the measured window-layer hit rates (and hit 0.50 with layer 8 off), recomputation and the set-up amortisation on the complete board (section 13); the formal memory model's terms (section 16)
|
||||
- ADV-04 Measure profitable selective participation: selective participation over 2,000 era draws under the layer 1 band with two reserve families live per epoch, the specialist's revenue against its ratio gain (section 13); downtime and re-entry priced as the DAA window's lag, not simulated against the difficulty rule itself (owed)
|
||||
|
||||
### pc:install-update
|
||||
|
||||
- Command: `signed jobs and relay runs on the project's own rig (ae432dc7) and PC 2 (1ccfe586): the installer over the running app (rule 14: installed versions, the process set, the first upload), the OTA path (update-now, the update-return read-back line), and the no-click resume after the install (relay run mining-on-after-200.ps1)`
|
||||
- Box class: PC (the two Windows PCs; nothing on the Mac)
|
||||
- Fixtures: F2
|
||||
- Cases:
|
||||
- UX-01 Onboard ordinary owners on native desktop apps: team-run evidence only (the two PCs taking the Windows entry through the app's own update path with no click and mining on every card); the P10 study is NOT RUN until unaffiliated participants are recruited
|
||||
- UX-07 Expose actionable failures and safe updates: partial: the install classes (the payload's stop step, the detached installer under a job, the installer refusing a wrong-version name, a stale install flag) and the no-click resume; the recovery-instruction and canary rows are the shipper's
|
||||
- OPS-03 Separate update distribution from consensus authority: partial: the update path's read-back and the signed manifest's verify on the PC (a tampered or rolled-back payload is refused by the engine's manifest check); authority separation is the shipper's review
|
||||
|
||||
### harness:release-manifest
|
||||
|
||||
- Command: `bash tools/ci/release-manifest-check.sh (self-test, then the tree; the pins, the proof guests' hashes on disk, the fork freeze, the pool's vendored node, the proving manifest's source_commit provenance) and bash tools/ci/build-from-manifest.sh --box N on the release tree (kaspad with igneum-pow, igneum-miner, igneum-pool, igneum-app, igneum-prove-host from packaging/release-manifest.json with the node vendored at the manifest's sha)`
|
||||
- Box class: gate
|
||||
- Fixtures: F0
|
||||
- Cases:
|
||||
- R2-F03-R01 Clean build from one manifest, including the pool and workers, with no unpublished vendor tree.: full for the components the tree builds (node, miner, pool, app, prove-host from one manifest, no unpublished vendor tree); the GPU workers are the kit's cross-build and read under the shipper's kit-isa line, not this cell
|
||||
|
||||
### harness:same-work
|
||||
|
||||
- Command: `tools/ci/p01-vectors.py --job-context <job-context.json> --phase 1|2|3 per reader (CUDA, OpenCL, Metal workers), igneum-miner --recheck-vectors (node), igneum-pow hash-bound (CPU reference), the pool's member-side re-check; docs/plans/igneum-2.0-same-work-test.md`
|
||||
- Box class: release (the readers on their pods and boxes)
|
||||
- Fixtures: F0
|
||||
- Cases:
|
||||
- R2-F03-R02 Same job context produces identical accepted work in node, CPU reference, CUDA, Metal, OpenCL and pool.: partial until every reader has run: bit-for-bit agreement per nonce across node, CPU reference, CUDA, OpenCL, Metal and pool on one job context
|
||||
- R2-F03-R03 Cross every scheduled transition with old/new client behavior documented and identical rule identities.: partial: the day-boundary transition in phase 2 (the one transition every live network crosses hourly at 60x); a class rotation is the same test on a research object until a v6 floor is set
|
||||
|
||||
### canary:fresh-install
|
||||
|
||||
- Command: `the rule 33 fresh-install canary on a release tip (the founder, 8 October 2026): install from the published artefact on a non-AVX-512 box with an empty datadir, sync genesis to tip, five minutes mining with zero refusals and an accepted block, one shard claimed, proved and paid or queued, a bounded quit, every line read back; the record tools/ci/canary/<sha>.json (one file per sha, an artefacts list: fleet, windows, mac, hive) read by tools/ci/canary-check.sh <sha> [--artefact kind], which publish-manifest.sh and publish-public.sh refuse without`
|
||||
- Box class: release (a non-AVX-512 box with an empty datadir)
|
||||
- Fixtures: F0
|
||||
- Cases:
|
||||
- INT-07 One v6 object agrees in node, pool, CPU verifier and each supported GPU host across activation.: partial: V6-12's clean-install half (one published object installed fresh, synced, mined, proved and paid on one host per artefact); the cross-host agreement half (node, pool, CPU verifier, each GPU host across activation) is harness:same-work's
|
||||
|
||||
### review:k-lane-shadow-k
|
||||
|
||||
- Command: `floor lane 2's placed and routed cores on ASAP7 in tools/chip-model/rtl (the rows in docs/analysis/class-v6/floor/shadow-k.md); the register landing 50ff1611f recorded ADV-06 against it before the recorder existed`
|
||||
- Box class: none
|
||||
- Fixtures: none
|
||||
- Cases:
|
||||
- ADV-06 Separate process advantage from specialisation: partial: the placed gated cores and the adversary's forms are modelled in shadow-k.md; the independent review remains
|
||||
|
||||
### kit:class-v6-fingerprints
|
||||
|
||||
- Command: `KITS_BOX_SCRIPT=kits-v6-on-box.sh tools/class-v5/kits-remote.sh --box 1 (the kit zip with its emulation check), then the kit's workers on every platform: the box's CPU emulation (--check, 96 of 96 vector lanes), the fleet's CUDA 4090 (--check and --bench at 2^24, base nonce 0), the Mac's Metal (proto-metal/packbench.swift --pack) and Apple OpenCL (proto-opencl/host.c --pack --bench-pack), PC 1's RTX 5090 and RX 7600 (tools/class-v5/pc1-v6-bench.ps1), PC 2's Arc B580 (tools/class-v5/arc-v6-bench.ps1); the fingerprint of the 2^24 outputs at base nonce 0 equal on every platform for the all pack and for its known-failed partner, the two distinct`
|
||||
- Box class: build box + pods + Mac + PC 1 + PC 2
|
||||
- Fixtures: F0, F2
|
||||
- Cases:
|
||||
- R2-F03-R02 Same job context produces identical accepted work in node, CPU reference, CUDA, Metal, OpenCL and pool.: partial: the worker half (CPU reference, CUDA, Metal, OpenCL) on the same program packs; the node's and the pool's accepted work on the same job context are the CI steward's and the pool lane's cells; PASS only when every listed platform reads one fingerprint and the node and pool halves are green
|
||||
|
||||
## Automated cases with no harness in the matrix (NOT RUN, the reason)
|
||||
|
||||
- GOV-02 Approve thresholds before results: the approval is recorded in the registry's approval field; the automated half (thresholds frozen before any run_status) is the gate rule landing by 21:00
|
||||
- GOV-04 Preserve raw and negative evidence: the evidence vault F9 (raw and negative evidence preserved) is the gate rule landing by 21:00: a PASS must carry its evidence file
|
||||
- GOV-08 Invalidate stale evidence and control public status: the stale-evidence rule (evidence older than the manifest sha reads NOT RUN) is the gate rule landing by 21:00
|
||||
- GPU-04 Find the memory-clock operating ladder: the memory-clock ladder has no harness tonight: PC 1 mines nothing under the Devnet 3 off order
|
||||
- GPU-04 Find the memory-clock operating ladder: the memory-clock ladder has no harness tonight: the project's own rig mines nothing under the the earlier devnet off order
|
||||
- GPU-06 Measure accepted work under ordinary connectivity: accepted work under ordinary connectivity needs the fault network F4
|
||||
- GPU-07 Survive sustained thermal and power operation: the sustained thermal and power soak has no harness tonight: PC 1 mines nothing under the Devnet 3 off order
|
||||
- GPU-07 Survive sustained thermal and power operation: the sustained thermal and power soak has no harness tonight: the project's own rig mines nothing under the the earlier devnet off order
|
||||
- POW-05 Prevent amortised cheap winning attempts: amortised cheap winning attempts are the attack lanes' grind and era harnesses (tools/attack/f7-era, f9-grind), not in the release matrix; their rows come from those lanes
|
||||
- ADV-04 Measure profitable selective participation: selective participation needs the economic model F7 and a live chain window
|
||||
- ADV-06 Separate process advantage from specialisation: process-advantage separation is the adversary lanes' chip study
|
||||
- ADV-07 Evaluate lifetime without forced obsolescence: lifetime rows are the adversary lanes' models
|
||||
- ROT-03 Test miner-voted bring-forward governance: miner-voted bring-forward needs a vote harness on the fault network F4
|
||||
- ROT-04 Resist seed selection and faster evaluators: seed-selection resistance is the census harness (the class v6 invention lane), not yet in the matrix
|
||||
- EVM-01 Match the selected EVM semantics: no EVM conformance-vector harness is mapped tonight; the exec suite does not run the reference test vectors
|
||||
|
|
@ -440,7 +511,6 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
- INT-04 Corrupt existing pool state, disk-full and reorg cause safe recovery, not silent empty balances.: INT-04 (R1 integration gate): the gate's harness is the owner lane's (pool lane (a1c484c48a62948c2)); not yet named in the map
|
||||
- INT-05 The supplied finality implementation matches the approved anchor rule after >window healing.: INT-05 (R1 integration gate): the gate's harness is the owner lane's (node lane (a283f5f0d364ceef0)); not yet named in the map
|
||||
- INT-06 Recovery tests state and preserve their weaker fault bound; interfaces never label it as a stronger guarantee.: INT-06 (R1 integration gate): the gate's harness is the owner lane's (node lane (a283f5f0d364ceef0)); not yet named in the map
|
||||
- INT-07 One v6 object agrees in node, pool, CPU verifier and each supported GPU host across activation.: INT-07 (R1 integration gate): the gate's harness is the owner lane's (CI steward with the hash lane (a690540514aa453d7) and the worker lane (a9e87343f008e0edd)); not yet named in the map
|
||||
- INT-08 Census, production acceptance, schedule counters and live-dataset tests use the identical frozen contract.: INT-08 (R1 integration gate): the gate's harness is the owner lane's (CI steward with the hash lane (a690540514aa453d7) and the worker lane (a9e87343f008e0edd)); not yet named in the map
|
||||
- INT-09 Eight- and twelve-GiB epoch transitions recover deliberately without relying on repeated OOM/watchdog cycles.: INT-09 (R1 integration gate): the gate's harness is the owner lane's (app lane); not yet named in the map
|
||||
- INT-10 Metal/CUDA/OpenCL exact dataset geometry agrees; unsupported packs reject before launch.: INT-10 (R1 integration gate): the gate's harness is the owner lane's (CI steward with the hash lane (a690540514aa453d7) and the worker lane (a9e87343f008e0edd)); not yet named in the map
|
||||
|
|
@ -459,9 +529,6 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
- R2-F02-R01 Release build cannot activate test bypass.: R2-F02 (P0, the external review): the regression's harness is the owner lane's (proving lane, CI steward); not yet named in the map
|
||||
- R2-F02-R02 Missing oracle or pinned keys prevents service readiness after enforcement activation.: R2-F02 (P0, the external review): the regression's harness is the owner lane's (proving lane, CI steward); not yet named in the map
|
||||
- R2-F02-R03 Missing proof bytes retry without incorrectly marking a valid block permanently invalid.: R2-F02 (P0, the external review): the regression's harness is the owner lane's (proving lane, CI steward); not yet named in the map
|
||||
- R2-F03-R01 Clean build from one manifest, including the pool and workers, with no unpublished vendor tree.: R2-F03 (P0, the external review): the regression's harness is the owner lane's (CI steward, hash lane (ProgramClass::V6 on freeze), pool lane); not yet named in the map
|
||||
- R2-F03-R02 Same job context produces identical accepted work in node, CPU reference, CUDA, Metal, OpenCL and pool.: R2-F03 (P0, the external review): the regression's harness is the owner lane's (CI steward, hash lane (ProgramClass::V6 on freeze), pool lane); not yet named in the map
|
||||
- R2-F03-R03 Cross every scheduled transition with old/new client behavior documented and identical rule identities.: R2-F03 (P0, the external review): the regression's harness is the owner lane's (CI steward, hash lane (ProgramClass::V6 on freeze), pool lane); not yet named in the map
|
||||
- R2-F04-R01 Native multi-node 40/40/20 partition, equivocation and dust-valid mining on both sides past the window.: R2-F04 (P0, the external review): the regression's harness is the owner lane's (node lane, reference apps, site (explorer)); not yet named in the map
|
||||
- R2-F04-R02 Proof that the chosen recovery guarantee matches the public finality claim; two valid contradictory certificates are a hard failure for strong finality.: R2-F04 (P0, the external review): the regression's harness is the owner lane's (node lane, reference apps, site (explorer)); not yet named in the map
|
||||
- R2-F04-R03 Pause-only resume with historical backfill, missing historical data and all old keys returning.: R2-F04 (P0, the external review): the regression's harness is the owner lane's (node lane, reference apps, site (explorer)); not yet named in the map
|
||||
|
|
@ -499,4 +566,4 @@ Rule: a case maps to a cell only where the cell's tests visibly answer it; cover
|
|||
|
||||
## Count
|
||||
|
||||
171 automated cases: 69 mapped to a cell, 152 NOT RUN with a reason.
|
||||
171 automated cases: 83 mapped to a cell, 145 NOT RUN with a reason.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,248 @@
|
|||
{
|
||||
"case": "succession-360-window-300",
|
||||
"floor": "240",
|
||||
"expect": "refuse",
|
||||
"phases": {
|
||||
"below": {
|
||||
"daaAtForge": 121,
|
||||
"forge": {
|
||||
"block": 105,
|
||||
"hash": "0x87fe67d16fda7174b0706fedd4bdafcbabbb2f808897944d7ec687570b6fb91f",
|
||||
"second": {
|
||||
"block": 254,
|
||||
"hash": "0x110d897b880b165caa6c40478cc3238b58926576260882198210889954ee199f"
|
||||
},
|
||||
"shapes": [
|
||||
{
|
||||
"shape": "p-prior-pair-proof",
|
||||
"accepted": true,
|
||||
"new": true,
|
||||
"reason": "accepted"
|
||||
},
|
||||
{
|
||||
"shape": "n-next-pair-proof",
|
||||
"accepted": true,
|
||||
"new": true,
|
||||
"reason": "accepted"
|
||||
}
|
||||
]
|
||||
},
|
||||
"observed": {
|
||||
"paid": [],
|
||||
"carried": []
|
||||
},
|
||||
"refusals": {
|
||||
"H1": {
|
||||
"invalid": 2,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 1,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
},
|
||||
"H2": {
|
||||
"invalid": 2,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 1,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"atFloor": {
|
||||
"daaAtForge": 288,
|
||||
"forge": {
|
||||
"block": 374,
|
||||
"hash": "0x8ce7a062860107fc4eb0596c0c28e22fa61fbc0ff5287730c78fae69226dd792",
|
||||
"second": {
|
||||
"block": 511,
|
||||
"hash": "0xba04be731e0ae6b637820c5ffef1901b7985349579b4c1a3ad795d67a710ffea"
|
||||
},
|
||||
"shapes": [
|
||||
{
|
||||
"shape": "p-prior-pair-proof",
|
||||
"accepted": true,
|
||||
"new": true,
|
||||
"reason": "accepted"
|
||||
},
|
||||
{
|
||||
"shape": "n-next-pair-proof",
|
||||
"accepted": true,
|
||||
"new": true,
|
||||
"reason": "accepted"
|
||||
}
|
||||
]
|
||||
},
|
||||
"observed": {
|
||||
"paid": [],
|
||||
"carried": []
|
||||
},
|
||||
"refusalsBefore": {
|
||||
"H1": {
|
||||
"invalid": 2,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 1,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
},
|
||||
"H2": {
|
||||
"invalid": 2,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 1,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
}
|
||||
},
|
||||
"refusalsAfter": {
|
||||
"H1": {
|
||||
"invalid": 4,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 3,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
},
|
||||
"H2": {
|
||||
"invalid": 4,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 3,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"afterWindow": {
|
||||
"daaAtForge": 675,
|
||||
"forge": {
|
||||
"block": 657,
|
||||
"hash": "0xddb37d774fe5b5c0711a27984b6d25f7c2908ed58c14d00a69f9576274f41b46",
|
||||
"second": {
|
||||
"block": 786,
|
||||
"hash": "0x525c035698dd1d756825d76b92019184023a6b5a3ef1221a51825bcc968a278f"
|
||||
},
|
||||
"shapes": [
|
||||
{
|
||||
"shape": "p-prior-pair-proof",
|
||||
"accepted": true,
|
||||
"new": true,
|
||||
"reason": "accepted"
|
||||
},
|
||||
{
|
||||
"shape": "n-next-pair-proof",
|
||||
"accepted": true,
|
||||
"new": true,
|
||||
"reason": "accepted"
|
||||
}
|
||||
]
|
||||
},
|
||||
"observed": {
|
||||
"paid": [],
|
||||
"carried": []
|
||||
},
|
||||
"refusalsBefore": {
|
||||
"H1": {
|
||||
"invalid": 4,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 3,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
},
|
||||
"H2": {
|
||||
"invalid": 4,
|
||||
"dropped": 0,
|
||||
"pair": 1,
|
||||
"statement": 3,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
}
|
||||
},
|
||||
"refusalsAfter": {
|
||||
"H1": {
|
||||
"invalid": 6,
|
||||
"dropped": 0,
|
||||
"pair": 2,
|
||||
"statement": 4,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 657 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 657 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 786 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 786 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
},
|
||||
"H2": {
|
||||
"invalid": 6,
|
||||
"dropped": 0,
|
||||
"pair": 2,
|
||||
"statement": 4,
|
||||
"garbage": 0,
|
||||
"reasons": [
|
||||
"a carried proof record's proof does not verify: shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 105 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 254 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 374 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 511 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926",
|
||||
"a carried proof record's proof does not verify: shard record block 657 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9ed1b21bd53d (proof 92de5638f248a5c1): shard record block 657 shard 0 by 1bb65de716c3b466cd45a85b3ceddf7bcb9873e1821209ee76ec9",
|
||||
"a carried proof record's proof does not verify: shard record block 786 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa92609d7c4943ba (proof 52f5ebdcc116da9f): shard record block 786 shard 0 by 990b90ac727bef6244fbbce29abcb47796dd1d197b2c4301aa926"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"node": "/srv/builds/igneum-wt-vcache/vendor/igneum-node/target/release/igneumd",
|
||||
"slot": 0,
|
||||
"ports": {
|
||||
"base": 30890,
|
||||
"suffix": 985
|
||||
},
|
||||
"startedAt": "2026-10-08T20:49:30.024Z",
|
||||
"verdict": {
|
||||
"pairBelow": 1,
|
||||
"stmtBelow": 1,
|
||||
"pairWindow": 0,
|
||||
"stmtWindow": 2,
|
||||
"pairAfter": 1,
|
||||
"stmtAfter": 1,
|
||||
"nothingPaid": true,
|
||||
"pass": true
|
||||
},
|
||||
"endedAt": "2026-10-08T21:04:37.315Z"
|
||||
}
|
||||
|
|
@ -25,3 +25,7 @@ Registry: docs/plans/igneum-2.0-test-registry.json, suite UX. Owner lane: the sh
|
|||
- The shipped igneum-miner (the 4cdcc488 and ef0f2ed8 pairs) refused every block template whose coinbase exceeded a u64: on the founder's Mac mini at 19:41 "! template error: amount high word 2 (low word 2140158083214006468) on a network at 8 decimals, where every amount fits a u64", then "NODE SLOW: no template from the node in 29 pass(es)", 0 MH/s; rpc/core/src/error.rs:131. Cause: igneum/miner/src/main.rs installed the network's base unit (install_unit_from) only for `inspect`; `mine`, `watch`, `export-pack` and the prepare path read amounts at the 8-decimal width, so a merged coinbase above 18.4 IGN was refused.
|
||||
- The fleet at 19:44: the refusal on 40 of 43 mining boxes (hub-1 323 refusals, 120 NODE SLOW); hub-1's selected chain down to 2 to 4 miner keys over its last 300 EVM blocks (27 at 19:40) and 22 blocks in 14 minutes; 0 blocks per minute at 19:54: the cause of the solo branch and the vote split after the 19:15 outage.
|
||||
- The fix: release-2.0.0-node 7cfa422a (every miner command installs the base unit before any amount is read; the known-failed test with the mini's exact refusal; 777214af's first form did not compile). The clearing evidence is the fixed miner's live canary on build-1's seed (templates parsing, a MINER SUMMARY with a rate, a template whose coinbase exceeds a u64 joined), recorded as its own batch when the node lane prints it.
|
||||
|
||||
## UX-06 clearing run canary-miner-fix-7cfa422a (PASS, 20:05 to 21:48 BST)
|
||||
- The fixed miner (release-2.0.0-node 7cfa422a: every miner command installs the network's base unit before reading an amount) on build-1's seed, 20:05:11 to 20:06:11: 49 templates taken in 60 s, no "template error", no "amount high word", no NODE SLOW; `MINER SUMMARY 'mfix-canary' engine=igneum-pow found=0 rejected=0 fee=0 over 60.0s = 0.00 blocks/s, 0.006 MH/s, 1 template switches`; `VOTER SUMMARY votes_sent=20 votes_accepted=20 locks_seen=12 last_lock_index=270`.
|
||||
- The fleet on the 2.0.1 kit: lp-4090-11 from 20:31 (zero refusals in 320 s, the first accepted block 1aa32e55… at 20:33:33, 186 accepted in 320 s); stages A and B (65 kept nodes) by 20:56:53; hub-1's miner at 21:43 (102 accepted in 343 s); the first lock after the roll, checkpoint 620 at 21:34:33 (80.8 percent of active).
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ Labels: the five served labels are TEAM-REPORTED, MODELLED, PROPOSED, PENDING an
|
|||
| randomx.html | +14 -17. Generated from the litepaper's randomx section (50f517120) | Same as litepaper#randomx; rebuilt from litepaper#randomx: the dataset row reads the dataset policy (site-2.0-audit) | Same as litepaper#randomx: the 2 GB dataset row | measured, proposed, approximate | None |
|
||||
| receipt.html | +27 -46. "Devnet 3" becomes "the devnet"; the testnet chain entry gone | The two receipt kinds (transaction-inclusion and payment), the proof boundary, data availability, the three boundaries, the positioning line (5e5ba9b8a); both sentences start in capitals; the unlabelled 30 to 90 s finality figure dropped (site-2.0-audit) | Two sentences start in lower case, "the devnet, no value" | The receipt kind on every result; no five-label word. No label: "about 30 to 90 s after it executes" | None |
|
||||
| scenes.html | +11 -14. Chrome only; the body is unchanged | The legend reads finalised checkpoint and the Forge note finalised; the four words paragraph added (site-2.0-audit) | The legend reads pending, included, excluded, proven, locked checkpoint, and "everything under it is final" | No label | None |
|
||||
| scorecard.html | +314, new (9bdee3727); in the sitemap (1281d01fb) | The whole page: twelve gates from the plan's section 23, evidence required, do not substitute, the Today label; the release evidence packet; the wording ladder | None | TEAM-REPORTED 4, MODELLED 3, PROPOSED 2, PENDING 5, EXCLUDED 3 | The reference-population sentences land at 21:00; the Sustained proving cell needs economics to serve the 24-hour reading as history; no square og PNG |
|
||||
| prize.html | New: the disclosure prize terms page, from the scorecard shell; in the nav Learn panel, the sitemap, the share cards and the capture list | The terms: what it pays for (a placed or measured adversarial implementation that beats the served bracket under the one acceptance rule, or a reproduced shortcut in the served kit), what it does not pay for (confirmations, synthesis-only results, work outside the budget, excluded classes), judged in-house, the finding served either way, reports to hello@igneum.network | None | No label: the amount line reads "set by the founder and served here when set" | The amount |
|
||||
| scorecard.html | +314, new (9bdee3727); in the sitemap (1281d01fb) | The whole page: twelve gates from the plan's section 23, evidence required, do not substitute, the Today label; the release evidence packet; the wording ladder | None | TEAM-REPORTED 4, MODELLED 3, PROPOSED 2, PENDING 5, EXCLUDED 3 | the Sustained proving cell needs economics to serve the 24-hour reading as history; no square og PNG |
|
||||
| swap.html | +37 -40. "Devnet 3" becomes "the devnet"; chain igneum-devnet-4; the addresses pointer becomes "docs/contracts"; the wallet version requirement gone | The intro: "on Igneum, with proven execution" | None found | No label: "Every swap is a devnet block" | `docs/contracts/` holds devnet-3.json and sepolia.json, no igneum-devnet-4 file; the swap og card PNG still prints "Devnet 3" |
|
||||
| tx.html | +24 -26. Title and crumb; network "The devnet"; chips and lock state "finalised" and "not yet finalised" | The four words and definitions (5c8fdfa29, b45bf6d45); the source line names one node on the build box; the fee sentence reads 80 percent to the miner and 20 percent to the developer registrations, none to the provers, as on economics (site-2.0-audit) | "Read from node1-dn3 on the build box since 12:25 UTC on 8 October 2026"; "The priority fee splits 80/20 between the including miner and the proving pool", which economics no longer states | No label | The explorer og card PNG still prints "Devnet 3" |
|
||||
| wallet.html | +15 -19. "0.1.5" becomes "the current build"; download v0.1.6; the testnet notice gone | Nothing | Screenshots from mock state of 7 October 2026 | One "Measured" heading; otherwise no label | None beyond the label |
|
||||
|
|
@ -78,6 +79,4 @@ Labels: the five served labels are TEAM-REPORTED, MODELLED, PROPOSED, PENDING an
|
|||
- The share cards: explorer, swap, faucet and oracle PNGs were not re-rendered after their text changed in `site/og/pages.mjs` and still print the devnet number (the explorer card serves /explorer, /block, /address, /tx and /proving); the home card still prints the pre-reset line; scorecard has no square card. Rendering runs on a build box, never on the Mac.
|
||||
- /oracle states the deployed Sepolia contract's chain ids 4463 and 4464 until it is redeployed.
|
||||
- The miner page's hero screenshot is an older build.
|
||||
- /prize does not exist yet (due by 12:00 tomorrow); it gets a line here when it lands.
|
||||
- The reference-population sentences land at 21:00 (scorecard, facts page, litepaper#roadmap).
|
||||
- The 4 GiB dataset step is PROPOSED pending the founder's word (litepaper#mining, the facts page row 7, miner, app, randomx).
|
||||
- /prize serves its terms without an amount; the amount line fills when the founder sets it.
|
||||
|
|
|
|||
|
|
@ -489,7 +489,11 @@ pub fn is_class_v4_shape(class: &LoadClass) -> bool {
|
|||
// class v5 (docs/design/class-v5-stored-state.md) is judged under the same rules: its state flag is set aside;
|
||||
// class v6 lane 1's index fold and re-weight table are set aside too (the address path and the op table are
|
||||
// not the shape)
|
||||
&& LoadClass { era: None, shadow: None, state: false, fold: false, rw: 0, ..*class } == LoadClass { shadow: None, ..V4_CLASS }
|
||||
// the window and layer 8 off are set aside too (lane D's finding of 8 October 2026, 19:1x UK: a +nowin or +reg64c
|
||||
// program was judged by the class v2 parts alone on the chain's path; the harness's own predicate hid it)
|
||||
// and the era's drawn width (lane D's second finding, 20:0x UK: an era whose width set has more than one width
|
||||
// writes the drawn width into `mix`, and the rule must judge every width of the family, not the pinned one alone)
|
||||
&& LoadClass { era: None, shadow: None, state: false, fold: false, rw: 0, nowin: false, reg64: false, reg64_chain: false, mix: V4_CLASS.mix, ..*class } == LoadClass { shadow: None, ..V4_CLASS }
|
||||
}
|
||||
|
||||
/// One pass of the dataflow freshness over the base program then the shadow block (the order of one iteration),
|
||||
|
|
@ -849,6 +853,12 @@ pub fn check_dynamic(p: &Program) -> Result<AcceptReport, Reject> {
|
|||
check_distinct_indices_v4(p)?;
|
||||
}
|
||||
}
|
||||
// the reg64 window's liveness rule (the window's acceptance tool, wired 8 October 2026, 19:5x UK): keyed on the
|
||||
// window flag so no other class's verdict moves; the arithmetic-only window is refused at its first dead register,
|
||||
// the full chain passes (129 one-warp interpretations on the closed form, under a second)
|
||||
if p.class.reg64 {
|
||||
check_window_liveness(p)?;
|
||||
}
|
||||
let half = (ACCEPT_HASHES / 2) as u32;
|
||||
let mut bias_max = 0u32;
|
||||
for (bit, &ones) in acc.bit_ones.iter().enumerate() {
|
||||
|
|
|
|||
|
|
@ -91,10 +91,21 @@ pub fn hex(bytes: &[u8]) -> String {
|
|||
|
||||
/// Bytes from hex (either case). `None` on odd length or a bad digit.
|
||||
pub fn unhex(s: &str) -> Option<Vec<u8>> {
|
||||
if s.len() % 2 != 0 {
|
||||
// on bytes, never on char boundaries (the fuzz of 8 October 2026 found a multi-byte character inside the text
|
||||
// panicked the slice; a non-ASCII byte is a bad digit)
|
||||
let b = s.as_bytes();
|
||||
if b.len() % 2 != 0 {
|
||||
return None;
|
||||
}
|
||||
(0..s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i..i + 2], 16).ok()).collect()
|
||||
let digit = |c: u8| -> Option<u8> {
|
||||
match c {
|
||||
b'0'..=b'9' => Some(c - b'0'),
|
||||
b'a'..=b'f' => Some(c - b'a' + 10),
|
||||
b'A'..=b'F' => Some(c - b'A' + 10),
|
||||
_ => None,
|
||||
}
|
||||
};
|
||||
b.chunks(2).map(|c| Some(digit(c[0])? << 4 | digit(c[1])?)).collect()
|
||||
}
|
||||
|
||||
impl Epoch {
|
||||
|
|
|
|||
|
|
@ -255,7 +255,11 @@ fn program_class_header_lines(p: &Program) -> String {
|
|||
return String::new();
|
||||
}
|
||||
let mut s = String::new();
|
||||
if p.program_class() == ProgramClass::V5 {
|
||||
if p.program_class() == ProgramClass::V6 {
|
||||
s.push_str("// Program class v6 (the Igneum 2.0 D1 object, docs/design/class-v6-rotating-family.md): generator version 6, class v5's\n");
|
||||
s.push_str("// stored-state dataset with the index fold, the re-weight table and the 64-register window (the v6 flags in the class\n");
|
||||
s.push_str("// string); a worker that runs another class refuses this pack, and a job line names the class it wants (class=v6 era=<hex>).\n");
|
||||
} else if p.program_class() == ProgramClass::V5 {
|
||||
s.push_str("// Program class v5 (proof of stored state and of following, docs/design/class-v5-stored-state.md): generator version 5,\n");
|
||||
s.push_str("// class v4 over a dataset whose every item is keyed by the window's execution state (IGNEUM_STATE_* below, leaves.bin);\n");
|
||||
s.push_str("// a worker that runs another class refuses this pack, and a job line names the class it wants (class=v5 era=<hex>).\n");
|
||||
|
|
@ -352,7 +356,7 @@ fn class_header_lines(p: &Program) -> String {
|
|||
s.push_str(&format!("#define IGNEUM_LOAD_WIDTH_COUNTS {{ {}, {}, {} }} // loads of 4, 16, 64 bytes per program
|
||||
", c[0], c[1], c[2]));
|
||||
s.push_str(&format!("#define IGNEUM_BYTES_PER_HASH {}
|
||||
", p.bytes_per_hash()));
|
||||
", p.bytes_per_hash_executed()));
|
||||
s.push_str(&format!("#define IGNEUM_FOLD_ROT {FOLD_ROT}
|
||||
"));
|
||||
s.push_str(&format!("#define IGNEUM_FOLD_MUL {}
|
||||
|
|
@ -503,8 +507,16 @@ fn shadow_block(p: &Program, dialect: CoreDialect) -> String {
|
|||
));
|
||||
let ty = if dialect == CoreDialect::Cuda { "uint32_t" } else { "uint" };
|
||||
s.push_str(&format!(" for ({ty} sh = 0u; sh < {reps}u; ++sh) {{\n"));
|
||||
let prefix = dialect == CoreDialect::Cuda && p.address_mix() && reg64_prefix();
|
||||
for (k, ins) in p.shadow.iter().enumerate() {
|
||||
if prefix {
|
||||
// F05 prefix form: the shadow's writes move S too (the fold reads the live registers)
|
||||
s.push_str(&format!(" t_ = {};\n", reg64_term(ins.dst as usize)));
|
||||
}
|
||||
s.push_str(&format!(" {} // s{k} {}\n", shadow_instr_line(dialect, ins), ins.op.name()));
|
||||
if prefix {
|
||||
s.push_str(&format!(" S ^= t_ ^ {};\n", reg64_term(ins.dst as usize)));
|
||||
}
|
||||
}
|
||||
s.push_str(" }\n");
|
||||
s
|
||||
|
|
@ -1161,13 +1173,60 @@ fn reg_decl(p: &Program, ty: &str) -> String {
|
|||
return format!(" {ty} r0, r1, r2, r3, r4, r5, r6, r7;\n");
|
||||
}
|
||||
let names: Vec<String> = (0..p.registers()).map(|k| format!("r{k}")).collect();
|
||||
let m = if p.address_mix() { format!("\n {ty} m; // reg64 full chain: the address mix of all 64 registers before every load") } else { String::new() };
|
||||
let m = if p.address_mix() {
|
||||
if ty == "uint32_t" && reg64_prefix() {
|
||||
format!("\n {ty} m, S, p_, t_; // reg64 full chain in the F05 prefix form: S the running xor of the rotated registers, p_ the prefix, t_ the old term")
|
||||
} else {
|
||||
format!("\n {ty} m; // reg64 full chain: the address mix of all 64 registers before every load")
|
||||
}
|
||||
} else {
|
||||
String::new()
|
||||
};
|
||||
format!(" {ty} {}; // reg64: 64 live registers per lane (two 32-register windows){m}\n", names.join(", "))
|
||||
}
|
||||
|
||||
/// reg64 full chain: the mix statement before a load, `m = r0; m = rotl_imm(m, 1u) ^ r1; ... ^ r63;` over the 63
|
||||
/// registers other than the load's source `src` (the verifier's `addr_src`, the same chain), one line; the same
|
||||
/// text in the three dialects (`rotl_imm` is defined in each).
|
||||
/// Review B's F05 (8 October 2026): the CUDA texts carry the reg64 address mix in its closed prefix form when this
|
||||
/// switch is on (`igneum-pow export --reg64-prefix`): `S` is the xor of `a[k] = rotl(r[k], (63 - k) mod 32)` over
|
||||
/// the 64 registers, kept per lane and updated after every write; a load's source is
|
||||
/// `r[s] ^ ror(P_s, 1) ^ (S ^ P_s ^ a[s])` with `P_s` the xor of the first `s` terms. The same hash, the same vectors
|
||||
/// (`verify::reg64_address_source`); a measurement text for the fleet, never the definition. OpenCL and Metal keep
|
||||
/// the fold.
|
||||
static REG64_PREFIX: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false);
|
||||
|
||||
pub fn set_reg64_prefix(on: bool) {
|
||||
REG64_PREFIX.store(on, std::sync::atomic::Ordering::Relaxed);
|
||||
}
|
||||
|
||||
pub fn reg64_prefix() -> bool {
|
||||
REG64_PREFIX.load(std::sync::atomic::Ordering::Relaxed)
|
||||
}
|
||||
|
||||
/// `rotl(rK, (63 - k) mod 32)` as text; a rotation of 0 is the register itself (`rotl_imm` takes 1..31).
|
||||
fn reg64_term(k: usize) -> String {
|
||||
let n = (63 - k) % 32;
|
||||
if n == 0 { format!("r{k}") } else { format!("rotl_imm(r{k}, {n}u)") }
|
||||
}
|
||||
|
||||
/// The prefix-form mix statement before a load of source `src` (the F05 text): `m = ror(P, 1) ^ S ^ P ^ a[src]`.
|
||||
fn reg64_prefix_mix_line(src: u8) -> String {
|
||||
let s = src as usize;
|
||||
let prefix: Vec<String> = (0..s).map(reg64_term).collect();
|
||||
let p = if prefix.is_empty() { "0u".to_string() } else { prefix.join(" ^ ") };
|
||||
format!("p_ = {p}; m = rotr_var(p_, 1u) ^ S ^ p_ ^ {};", reg64_term(s))
|
||||
}
|
||||
|
||||
/// The prefix form's running total after the register init: `S = a[0] ^ ... ^ a[63]`.
|
||||
fn reg64_prefix_init(p: &Program) -> String {
|
||||
if !p.class.reg64 || !p.address_mix() || !reg64_prefix() {
|
||||
return String::new();
|
||||
}
|
||||
let terms: Vec<String> = (0..p.registers()).map(reg64_term).collect();
|
||||
format!(" // F05 prefix form: the running xor of every rotated register\n S = {};\n", terms.join(" ^ "))
|
||||
}
|
||||
|
||||
fn reg64_mix_line(p: &Program, src: u8) -> String {
|
||||
let mut s = String::new();
|
||||
for k in 0..p.registers() {
|
||||
|
|
@ -1223,8 +1282,13 @@ fn cuda_instr_lines(p: &Program, geom: DatasetGeom) -> String {
|
|||
let d = format!("r{}", ins.dst);
|
||||
let a = format!("r{}", ins.src);
|
||||
let b = format!("r{}", ins.src2);
|
||||
let prefix = address_mix && reg64_prefix();
|
||||
if address_mix && ins.op == Op::Load {
|
||||
s.push_str(&format!(" {}\n", reg64_mix_line(p, ins.src)));
|
||||
s.push_str(&format!(" {}\n", if prefix { reg64_prefix_mix_line(ins.src) } else { reg64_mix_line(p, ins.src) }));
|
||||
}
|
||||
if prefix {
|
||||
// the old term of the destination, so S can drop it after the write
|
||||
s.push_str(&format!(" t_ = {};\n", reg64_term(ins.dst as usize)));
|
||||
}
|
||||
let line = match ins.op {
|
||||
// Metal select(A, B, c) returns c ? B : A, so the true branch is imm2 here as well.
|
||||
|
|
@ -1252,6 +1316,9 @@ fn cuda_instr_lines(p: &Program, geom: DatasetGeom) -> String {
|
|||
Op::Hot => hot_stmt(CoreDialect::Cuda, &d, &a),
|
||||
};
|
||||
s.push_str(&format!(" {line} // {k} {}\n", ins.op.name()));
|
||||
if prefix {
|
||||
s.push_str(&format!(" S ^= t_ ^ {};\n", reg64_term(ins.dst as usize)));
|
||||
}
|
||||
}
|
||||
s
|
||||
}
|
||||
|
|
@ -1371,6 +1438,7 @@ pub fn cuda_kernel_geom(p: &Program, memhard: Option<&MixParams>, geom: DatasetG
|
|||
s.push_str(&init_line(p, "uint32_t", i));
|
||||
}
|
||||
s.push_str(®64_init(p));
|
||||
s.push_str(®64_prefix_init(p));
|
||||
s.push_str(&format!("\n for (uint32_t it = 0u; it < {ITERATIONS}u; ++it) {{\n uint32_t sel = r0;\n"));
|
||||
s.push_str(&cuda_instr_lines(p, geom));
|
||||
s.push_str(&shadow_block(p, CoreDialect::Cuda));
|
||||
|
|
@ -1536,6 +1604,7 @@ pub fn cuda_kernel_bound_geom(p: &Program, memhard: Option<&MixParams>, geom: Da
|
|||
));
|
||||
}
|
||||
s.push_str(®64_init(p));
|
||||
s.push_str(®64_prefix_init(p));
|
||||
s.push_str(&format!("\n for (uint32_t it = 0u; it < {ITERATIONS}u; ++it) {{\n uint32_t sel = r0;\n"));
|
||||
s.push_str(&cuda_instr_lines(p, geom));
|
||||
s.push_str(&shadow_block(p, CoreDialect::Cuda));
|
||||
|
|
@ -1947,7 +2016,10 @@ pub fn program_header(p: &Program, day: &str, ds: &DatasetSource) -> String {
|
|||
s.push_str("#define IGNEUM_LANES 32\n");
|
||||
s.push_str(&format!("#define IGNEUM_ITERATIONS {ITERATIONS}\n"));
|
||||
s.push_str(&format!("#define IGNEUM_INSTR_COUNT {INSTR_COUNT}\n"));
|
||||
s.push_str(&format!("#define IGNEUM_LOADS_PER_HASH {}\n", p.loads_per_hash()));
|
||||
if p.class.reg64 {
|
||||
s.push_str("// the executed counts per nonce (review B's V6-02): twice the drawn program's under the 64-register window\n");
|
||||
}
|
||||
s.push_str(&format!("#define IGNEUM_LOADS_PER_HASH {}\n", p.loads_per_hash_executed()));
|
||||
s.push_str(&format!("#define IGNEUM_WIDE_LOADS_PER_HASH {}\n", p.wide_loads_per_hash()));
|
||||
s.push_str(&format!("#define IGNEUM_OP_MIX {}\n", jstr(&p.op_mix())));
|
||||
s.push_str(&program_class_header_lines(p));
|
||||
|
|
@ -2189,7 +2261,7 @@ pub fn program_json(p: &Program, day: &str, ds: &DatasetSource) -> String {
|
|||
s.push_str(" \"registers\": 8,\n");
|
||||
s.push_str(&format!(" \"iterations\": {ITERATIONS},\n"));
|
||||
s.push_str(&format!(" \"instruction_count\": {INSTR_COUNT},\n"));
|
||||
s.push_str(&format!(" \"loads_per_hash\": {},\n", p.loads_per_hash()));
|
||||
s.push_str(&format!(" \"loads_per_hash\": {},\n", p.loads_per_hash_executed()));
|
||||
if p.program_class() != ProgramClass::V2 {
|
||||
s.push_str(&format!(" \"program_class\": {},\n", jstr(p.program_class().name())));
|
||||
if p.program_class() == ProgramClass::V4 {
|
||||
|
|
@ -2239,7 +2311,7 @@ pub fn program_json(p: &Program, day: &str, ds: &DatasetSource) -> String {
|
|||
s.push_str(&format!(" \"load_slots\": {},\n", p.class.load_slots));
|
||||
s.push_str(&format!(" \"load_mix_percent_4_16_64\": [{}, {}, {}],\n", p.class.mix[0], p.class.mix[1], p.class.mix[2]));
|
||||
s.push_str(&format!(" \"load_width_counts_4_16_64\": [{}, {}, {}],\n", c[0], c[1], c[2]));
|
||||
s.push_str(&format!(" \"bytes_per_hash\": {},\n", p.bytes_per_hash()));
|
||||
s.push_str(&format!(" \"bytes_per_hash\": {},\n", p.bytes_per_hash_executed()));
|
||||
if p.has_scratch() {
|
||||
s.push_str(&format!(" \"scratch_ops_per_hash\": {},\n", p.scratch_ops_per_hash()));
|
||||
s.push_str(&format!(" \"scratch_kib_per_warp\": {},\n", p.class.scratch_kb));
|
||||
|
|
@ -2610,19 +2682,42 @@ pub fn export_pack(epoch: &Epoch, day: &str, source: &str) -> Pack {
|
|||
v.hot_fnv = h.fnv1a64();
|
||||
}
|
||||
let is_mh = memhard.is_some();
|
||||
let mut files = vec![
|
||||
("program.json".to_string(), program_json(p, day, ds)),
|
||||
("vectors.json".to_string(), vectors_json_geom(p, day, geom, &bases, &outs, &v, source, is_mh)),
|
||||
let texts: Vec<(String, String)> = vec![
|
||||
("kernel.cu".to_string(), cuda_kernel_geom(p, memhard, geom)),
|
||||
("kernel.cl".to_string(), opencl_kernel_geom(p, memhard, geom)),
|
||||
("program.h".to_string(), program_header(p, day, ds)),
|
||||
("vectors.h".to_string(), vectors_header(p, &bases, &outs, &v, mask, source, is_mh)),
|
||||
("program.metal".to_string(), metal_program_geom(p, geom, LoadSource::Stored)),
|
||||
// Header-bound kernels (3 October 2026, bind.rs): new files, the seven above are unchanged.
|
||||
("program_bound.metal".to_string(), metal_program_bound_geom(p, geom)),
|
||||
("kernel_bound.cu".to_string(), cuda_kernel_bound_geom(p, memhard, geom)),
|
||||
("kernel_bound.cl".to_string(), opencl_kernel_bound_geom(p, memhard, geom)),
|
||||
];
|
||||
// A06 (the external review of 8 October 2026): the pack authenticates its kernel texts by hash, not by metadata:
|
||||
// identity.json carries the program id, the dataset and era identities and the BLAKE2b-256 of every kernel file.
|
||||
// A file of its own, so every pinned pack's twelve files stay byte for byte (the readers ignore it).
|
||||
let hashes: Vec<String> = texts.iter().map(|(n, t)| format!(" {}: \"{}\"", jstr(n), hex_bytes(&crate::blake2b::blake2b_256(&[t.as_bytes()])))).collect();
|
||||
let identity = format!(
|
||||
"{{\n \"program_id\": \"{:#018x}\",\n \"load_class\": {},\n \"generator\": {},\n \"day\": {},\n \"dataset_bytes\": {},\n \"kernel_blake2b256\": {{\n{}\n }},\n \"rule\": \"the external review's A06 (8 October 2026): a pack's program, dataset and work identities are distinct, and its kernel texts are authenticated by the hash of their bytes, never by the metadata beside them\"\n}}\n",
|
||||
p.program_id(),
|
||||
jstr(&p.class.name()),
|
||||
p.generator,
|
||||
jstr(day),
|
||||
(ds.geom.words as u128) * 4,
|
||||
hashes.join(",\n")
|
||||
);
|
||||
// the pack's file order as the pinned packs carry it, identity.json second
|
||||
let mut texts = texts.into_iter();
|
||||
let kernel_cu = texts.next().unwrap();
|
||||
let kernel_cl = texts.next().unwrap();
|
||||
let mut files = vec![
|
||||
("program.json".to_string(), program_json(p, day, ds)),
|
||||
("identity.json".to_string(), identity),
|
||||
("vectors.json".to_string(), vectors_json_geom(p, day, geom, &bases, &outs, &v, source, is_mh)),
|
||||
kernel_cu,
|
||||
kernel_cl,
|
||||
("program.h".to_string(), program_header(p, day, ds)),
|
||||
("vectors.h".to_string(), vectors_header(p, &bases, &outs, &v, mask, source, is_mh)),
|
||||
];
|
||||
files.extend(texts);
|
||||
if let Some(mp) = memhard {
|
||||
files.push(("memhard.h".to_string(), cuda_memhard_header(p, mp)));
|
||||
files.push(("memhard.metal".to_string(), metal_memhard_for(p, mp)));
|
||||
|
|
|
|||
|
|
@ -255,6 +255,11 @@ pub struct LoadClass {
|
|||
/// optimiser split [`NONLOAD_WEIGHTS_RW`] (sum 83, `or` never drawn); 2 the census lane's neighbouring table
|
||||
/// [`NONLOAD_WEIGHTS_RW2`] (sum 75). The draw rolls against the table's own sum ([`LoadClass::nonload_weights`]).
|
||||
pub rw: u8,
|
||||
/// D2 experiment "layer 8 off" (the coordinator's order, 8 October 2026, 18:12 UK; a research class behind `+nowin`):
|
||||
/// the era layout's window-layer draw is removed, every load site reads the whole dataset (`win = 0`, `off = 0`).
|
||||
/// The program stream still consumes the two window draws per instruction, so the base program's instructions are
|
||||
/// the class's without the flag; only the windows move. `false` for every other class.
|
||||
pub nowin: bool,
|
||||
/// The 64-register window (the hash lane's reg64 measurement, 8 October 2026, a research class behind `+reg64`
|
||||
/// and `--reg64`): each lane holds 64 live 32-bit registers. r0..r7 are seeded as today, r8..r63 derived from them
|
||||
/// (`r[k] = r[k & 7] * 0x9E3779B9 + k`); the 64 drawn instructions run twice per iteration in an interleaved
|
||||
|
|
@ -455,13 +460,13 @@ impl LoadClass {
|
|||
impl LoadClass {
|
||||
/// Generator version 2 as adopted on 4 October 2026: 16 loads of one word. The lottery hash.
|
||||
pub const V2: LoadClass =
|
||||
LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 1, growth: false, era: None, hot: None, derive_len: 0, shadow: None, state: false, wide8: false, fold: false, rw: 0, reg64: false, reg64_chain: false };
|
||||
LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 1, growth: false, era: None, hot: None, derive_len: 0, shadow: None, state: false, wide8: false, fold: false, rw: 0, nowin: false, reg64: false, reg64_chain: false };
|
||||
|
||||
/// The construction decided for program class v3 on 5 October 2026 (Counter ASIC 2.0, `docs/plans/mixer-x4.md`):
|
||||
/// version 2 loads (16 slots of one word, no scratch, no width roll, so the program stream is version 2's), the
|
||||
/// mixer applied 4 times per round, and the cache growth rule. Name "mx4".
|
||||
pub const MX4: LoadClass =
|
||||
LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 4, growth: true, era: None, hot: None, derive_len: 0, shadow: None, state: false, wide8: false, fold: false, rw: 0, reg64: false, reg64_chain: false };
|
||||
LoadClass { mix: [100, 0, 0], load_slots: LOAD_SLOTS as u8, scratch: None, scratch_kb: 0, mixer_mult: 4, growth: true, era: None, hot: None, derive_len: 0, shadow: None, state: false, wide8: false, fold: false, rw: 0, nowin: false, reg64: false, reg64_chain: false };
|
||||
|
||||
/// The era class over `base` (`docs/plans/era-layout.md`): the parameters drawn by [`era_draw`]; when `allowed`
|
||||
/// has more than one width the drawn width becomes the class mix (every load that width), otherwise the base
|
||||
|
|
@ -634,6 +639,21 @@ impl LoadClass {
|
|||
LoadClass { rw, ..self }
|
||||
}
|
||||
|
||||
/// D2 "layer 8 off": the class with the window-layer draw removed (every load site reads the whole dataset).
|
||||
pub fn with_nowin(self) -> LoadClass {
|
||||
LoadClass { nowin: true, ..self }
|
||||
}
|
||||
|
||||
/// The class v6 object's draw rules (the external review of 8 October 2026, A02 and A08, fixed by construction for
|
||||
/// every class carrying a v6 flag: the index fold, a re-weight table, the register window or layer 8 off): five
|
||||
/// of the non-load slots are shuffles whose masks are the five lane dimensions 1, 2, 4, 8, 16 in a drawn order, so
|
||||
/// every accepted program mixes all 32 lanes by construction; and a `mad` never names its destination as its
|
||||
/// second source (`d = a * d + d` is `d * (a + 1)`, not a bijection in `d` when `a` is odd). Every other class
|
||||
/// draws as before.
|
||||
pub fn is_v6(&self) -> bool {
|
||||
self.fold || self.rw != 0 || self.reg64 || self.nowin
|
||||
}
|
||||
|
||||
/// The non-load op table this class draws from, in draw order, and its sum (the roll's range). The plain table
|
||||
/// for every class without the re-weight flag, so their streams are byte for byte what they were.
|
||||
pub fn nonload_weights(&self) -> (&'static [(Op, u64); 10], u64) {
|
||||
|
|
@ -677,6 +697,10 @@ impl LoadClass {
|
|||
pub fn parse(s: &str) -> Option<LoadClass> {
|
||||
// class v6 lane 1: "<class>+fold" (the index fold) and "<class>+rw" / "<class>+rw2" (the re-weight table) over
|
||||
// any class, in any order, outermost of all
|
||||
// D2 "layer 8 off": "<class>+nowin" over any class, in any order with the other suffixes
|
||||
if let Some(base) = s.strip_suffix("+nowin") {
|
||||
return Some(LoadClass::parse(base)?.with_nowin());
|
||||
}
|
||||
if let Some(base) = s.strip_suffix("+fold") {
|
||||
return Some(LoadClass::parse(base)?.with_fold());
|
||||
}
|
||||
|
|
@ -829,6 +853,10 @@ impl LoadClass {
|
|||
if self.fold {
|
||||
return format!("{}+fold", LoadClass { fold: false, ..*self }.name());
|
||||
}
|
||||
if self.nowin {
|
||||
// D2 "layer 8 off": "+nowin" sits inside "+fold" and "+rw" and outside "+reg64" and "+state"
|
||||
return format!("{}+nowin", LoadClass { nowin: false, ..*self }.name());
|
||||
}
|
||||
if self.reg64 {
|
||||
// "<class>+reg64" / "+reg64c": the 64-register window is a suffix on any class, outermost
|
||||
let base = LoadClass { reg64: false, reg64_chain: false, ..*self }.name();
|
||||
|
|
@ -935,6 +963,10 @@ pub const GENERATOR_VERSION_V4: u32 = 4;
|
|||
/// Generator version of a class v5 program (proof of stored state and of following, 7 October 2026, PROPOSED:
|
||||
/// `program_id(5, seed, attempt)`; `docs/design/class-v5-stored-state.md`).
|
||||
pub const GENERATOR_VERSION_V5: u32 = 5;
|
||||
/// Class v6 (the Igneum 2.0 D1 object, 8 October 2026; review B's F03): the class v5 draw with the v6 rules (the index fold, the
|
||||
/// re-weight table, the 64-register window with the full chain, the five shuffle dimensions and the mad operand rule by
|
||||
/// construction, layer 8 off when the flag says so), generator 6.
|
||||
pub const GENERATOR_VERSION_V6: u32 = 6;
|
||||
|
||||
/// The program class of an epoch (Counter ASIC 2.0, 5 October 2026, `docs/plans/counter-asic-2-rollout.md`): one
|
||||
/// height switch in the node, `program_class_v3_activation_daa`, rounded up to an epoch boundary, decides which
|
||||
|
|
@ -951,6 +983,8 @@ pub enum ProgramClass {
|
|||
/// Class v5 (`docs/design/class-v5-stored-state.md`, behind `program_class_v5_activation_daa`): class v4's program
|
||||
/// over a dataset whose every item is keyed by the window's execution state ([`V5_CLASS`]), generator 5.
|
||||
V5,
|
||||
/// Class v6 (the Igneum 2.0 D1 object; review B's F03, 8 October 2026): [`V6_CLASS`], generator 6.
|
||||
V6,
|
||||
}
|
||||
|
||||
/// The load class of program class v3, decided 5 October 2026 (Counter ASIC 2.0, `docs/plans/counter-asic-2-status.md`
|
||||
|
|
@ -973,6 +1007,9 @@ pub const V4_CLASS: LoadClass = LoadClass { shadow: Some(ShadowClass { instrs: V
|
|||
/// program draw, the shadow block, the era draw and the ladder rung are class v4's, draw for draw; only the item
|
||||
/// derivation and the program id change.
|
||||
pub const V5_CLASS: LoadClass = LoadClass { state: true, ..V4_CLASS };
|
||||
/// The class v6 object ("mx8+sh256x27+state+reg64c+fold+rw"): class v5 with the index fold, the k lane's re-weight table
|
||||
/// and the 64-register window with the full chain; layer 8 off is the fifth flag, drawn by the chain's family flags.
|
||||
pub const V6_CLASS: LoadClass = LoadClass { fold: true, rw: 1, reg64: true, reg64_chain: true, ..V5_CLASS };
|
||||
|
||||
/// The shadow block size of class v4 at every rung of the latency ladder (`docs/design/latency-ladder.md`): 256
|
||||
/// instructions. The ladder moves the pass count alone.
|
||||
|
|
@ -1037,6 +1074,8 @@ pub fn era_generator_of(base: &LoadClass) -> u32 {
|
|||
match ProgramClass::of_load_class(base) {
|
||||
Some(ProgramClass::V4) => GENERATOR_VERSION_V4,
|
||||
Some(ProgramClass::V5) => GENERATOR_VERSION_V5,
|
||||
Some(ProgramClass::V6) => GENERATOR_VERSION_V6,
|
||||
_ if base.is_v6() => GENERATOR_VERSION_V6,
|
||||
_ if base.state => GENERATOR_VERSION_V5,
|
||||
_ => GENERATOR_VERSION_V3,
|
||||
}
|
||||
|
|
@ -1067,6 +1106,7 @@ impl ProgramClass {
|
|||
ProgramClass::V3 => V3_CLASS,
|
||||
ProgramClass::V4 => V4_CLASS,
|
||||
ProgramClass::V5 => V5_CLASS,
|
||||
ProgramClass::V6 => V6_CLASS,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1077,12 +1117,13 @@ impl ProgramClass {
|
|||
ProgramClass::V3 => GENERATOR_VERSION_V3,
|
||||
ProgramClass::V4 => GENERATOR_VERSION_V4,
|
||||
ProgramClass::V5 => GENERATOR_VERSION_V5,
|
||||
ProgramClass::V6 => GENERATOR_VERSION_V6,
|
||||
}
|
||||
}
|
||||
|
||||
/// Whether the class's dataset is keyed by the window's execution state (class v5).
|
||||
pub fn has_state(&self) -> bool {
|
||||
*self == ProgramClass::V5
|
||||
matches!(self, ProgramClass::V5 | ProgramClass::V6)
|
||||
}
|
||||
|
||||
/// The class of a generator version: 2, 3 and 4 are the three classes, anything else is no class this crate runs.
|
||||
|
|
@ -1092,6 +1133,7 @@ impl ProgramClass {
|
|||
GENERATOR_VERSION_V3 => Some(ProgramClass::V3),
|
||||
GENERATOR_VERSION_V4 => Some(ProgramClass::V4),
|
||||
GENERATOR_VERSION_V5 => Some(ProgramClass::V5),
|
||||
GENERATOR_VERSION_V6 => Some(ProgramClass::V6),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
|
@ -1103,6 +1145,7 @@ impl ProgramClass {
|
|||
ProgramClass::V3 => "v3",
|
||||
ProgramClass::V4 => "v4",
|
||||
ProgramClass::V5 => "v5",
|
||||
ProgramClass::V6 => "v6",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1112,6 +1155,7 @@ impl ProgramClass {
|
|||
"v3" => Some(ProgramClass::V3),
|
||||
"v4" => Some(ProgramClass::V4),
|
||||
"v5" => Some(ProgramClass::V5),
|
||||
"v6" => Some(ProgramClass::V6),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
|
@ -1125,6 +1169,7 @@ impl ProgramClass {
|
|||
/// is v3, [`V4_CLASS`] is v4; a measurement class (a width, a derivation length, another shadow size) is none.
|
||||
pub fn of_load_class(class: &LoadClass) -> Option<ProgramClass> {
|
||||
let base = LoadClass { era: None, reg64: false, reg64_chain: false, ..*class };
|
||||
let v6base = LoadClass { era: None, nowin: false, ..*class };
|
||||
if base == LoadClass::V2 {
|
||||
Some(ProgramClass::V2)
|
||||
} else if base == V3_CLASS {
|
||||
|
|
@ -1133,6 +1178,8 @@ impl ProgramClass {
|
|||
Some(ProgramClass::V4)
|
||||
} else if base == V5_CLASS {
|
||||
Some(ProgramClass::V5)
|
||||
} else if v6base == V6_CLASS {
|
||||
Some(ProgramClass::V6)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
|
@ -1194,9 +1241,25 @@ impl Program {
|
|||
}
|
||||
out
|
||||
}
|
||||
/// The drawn program's memory operations per nonce (16 load slots times the eight iterations on every class):
|
||||
/// the count the acceptance rule and the draw's bookkeeping read (the acceptance judges the drawn program's
|
||||
/// sites). The hash EXECUTES [`Program::loads_per_hash_executed`] of them, twice this under the 64-register
|
||||
/// window; the served figures and the pack's headers name the executed count (review B's V6-02).
|
||||
pub fn loads_per_hash(&self) -> usize {
|
||||
self.instrs.iter().filter(|i| i.op.is_load()).count() * ITERATIONS
|
||||
}
|
||||
|
||||
/// Memory operations the hash EXECUTES per nonce (review B's V6-02, 8 October 2026): the scheduled statements
|
||||
/// (the drawn program's loads, twice under the 64-register window) times the eight iterations; asserted to
|
||||
/// agree with the drawn count except by the window's factor of two. The emitters alone read it (program.h,
|
||||
/// program.json): the acceptance reads the drawn count, so no verdict moves with the served figure (the first
|
||||
/// form of this change, 0266c9ec0, routed the executed count into the acceptance and moved every reg64 verdict).
|
||||
pub fn loads_per_hash_executed(&self) -> usize {
|
||||
let drawn = self.loads_per_hash();
|
||||
let executed = self.scheduled().iter().filter(|i| i.op.is_load()).count() * ITERATIONS;
|
||||
assert!(executed == drawn || (self.class.reg64 && executed == 2 * drawn), "the executed load count {executed} disagrees with the drawn {drawn}");
|
||||
executed
|
||||
}
|
||||
pub fn wide_loads_per_hash(&self) -> usize {
|
||||
self.instrs.iter().filter(|i| i.op == Op::WLoad).count() * ITERATIONS
|
||||
}
|
||||
|
|
@ -1204,9 +1267,21 @@ impl Program {
|
|||
self.instrs.iter().any(|i| i.op == Op::WLoad)
|
||||
}
|
||||
/// Dataset bytes read per hash: 4 per one-word load, 16 and 64 for the wider loads of the experiment.
|
||||
/// Dataset bytes the drawn program's loads demand per nonce (the acceptance's and the draw's figure).
|
||||
pub fn bytes_per_hash(&self) -> usize {
|
||||
self.instrs.iter().filter(|i| i.op == Op::Load).map(|i| i.width as usize * 4).sum::<usize>() * ITERATIONS
|
||||
}
|
||||
|
||||
/// Dataset bytes the hash's EXECUTED loads demand per nonce (review B's V6-02): the scheduled loads' widths in
|
||||
/// words times 4, times the eight iterations; a demand figure, not the memory's transactions (a 4-byte load is
|
||||
/// a 32-byte sector on NVIDIA and a 64-byte line on AMD; the served text names the model it quotes). The
|
||||
/// emitters alone read it.
|
||||
pub fn bytes_per_hash_executed(&self) -> usize {
|
||||
let drawn = self.bytes_per_hash();
|
||||
let executed = self.scheduled().iter().filter(|i| i.op == Op::Load).map(|i| i.width as usize * 4).sum::<usize>() * ITERATIONS;
|
||||
assert!(executed == drawn || (self.class.reg64 && executed == 2 * drawn), "the executed byte demand {executed} disagrees with the drawn {drawn}");
|
||||
executed
|
||||
}
|
||||
/// Scratch read-modify-writes per hash (variant 5): each reads 16 bytes and writes 16 bytes.
|
||||
pub fn scratch_ops_per_hash(&self) -> usize {
|
||||
self.instrs.iter().filter(|i| i.op == Op::Scratch).count() * ITERATIONS
|
||||
|
|
@ -1328,6 +1403,7 @@ impl Program {
|
|||
GENERATOR_VERSION_V3 => ProgramClass::V3,
|
||||
GENERATOR_VERSION_V4 => ProgramClass::V4,
|
||||
GENERATOR_VERSION_V5 => ProgramClass::V5,
|
||||
GENERATOR_VERSION_V6 => ProgramClass::V6,
|
||||
_ => ProgramClass::V2,
|
||||
}
|
||||
}
|
||||
|
|
@ -1458,6 +1534,14 @@ pub fn program_id_class_recipe(generator: u32, seed: &[u32; 8], attempt: u32, cl
|
|||
// class v6 lane 1: the index fold moves every era load address
|
||||
r.lit(b"fold/");
|
||||
}
|
||||
if class.nowin {
|
||||
// D2 "layer 8 off": the window layer is part of the construction
|
||||
r.lit(b"nowin/");
|
||||
}
|
||||
if class.is_v6() {
|
||||
// the v6 draw rules (A02 five shuffle dimensions, A08 the mad operand rule) are part of the construction
|
||||
r.lit(b"v6draw/");
|
||||
}
|
||||
if class.rw != 0 {
|
||||
// class v6 lane 1: the re-weight table moves the op draw
|
||||
r.lit(b"rw/");
|
||||
|
|
@ -1626,6 +1710,23 @@ pub fn candidate_from_words_class(
|
|||
for &slot in &p[..slots] {
|
||||
is_load[slot as usize] = true;
|
||||
}
|
||||
// class v6 (A02, by construction): five of the non-load slots are shuffles over the five lane dimensions in a
|
||||
// drawn order; drawn from the stream after the load slots, so no other class's stream moves
|
||||
let mut is_shfl = [false; INSTR_COUNT];
|
||||
let mut shfl_masks = [1u8, 2, 4, 8, 16];
|
||||
if class.is_v6() {
|
||||
let rest = &mut p[slots..];
|
||||
for i in 0..5 {
|
||||
let j = i + rng.below((rest.len() - i) as u64) as usize;
|
||||
rest.swap(i, j);
|
||||
is_shfl[rest[i] as usize] = true;
|
||||
}
|
||||
for i in 0..5 {
|
||||
let j = i + rng.below((5 - i) as u64) as usize;
|
||||
shfl_masks.swap(i, j);
|
||||
}
|
||||
}
|
||||
let mut shfl_next = 0usize;
|
||||
// Variant 5: the first k drawn load slots (a uniform k-subset, the draw order is random) are scratch ops.
|
||||
let mut is_scratch = [false; INSTR_COUNT];
|
||||
for &slot in &p[..class.scratch_slots()] {
|
||||
|
|
@ -1652,7 +1753,7 @@ pub fn candidate_from_words_class(
|
|||
// class v6 lane 1: the index fold and the re-weight table are set aside too (the address path and the table are not
|
||||
// the shape; a +fold or +rw program draws its sources under the same rule)
|
||||
let source_rule_v4 = matches!(class.shadow, Some(ShadowClass { instrs: V4_SHADOW_INSTRS, .. }))
|
||||
&& LoadClass { era: None, shadow: None, state: false, fold: false, rw: 0, ..class } == LoadClass { shadow: None, ..V4_CLASS };
|
||||
&& LoadClass { era: None, shadow: None, state: false, fold: false, rw: 0, nowin: false, reg64: false, reg64_chain: false, mix: V4_CLASS.mix, ..class } == LoadClass { shadow: None, ..V4_CLASS };
|
||||
// the op table and the roll's range: the plain table at 75 for every class without the re-weight flag
|
||||
let (weights, weights_sum) = class.nonload_weights();
|
||||
let mut fresh = [false; 8];
|
||||
|
|
@ -1682,6 +1783,9 @@ pub fn candidate_from_words_class(
|
|||
Op::Load
|
||||
};
|
||||
}
|
||||
if is_shfl[k] {
|
||||
op = Op::Shfl;
|
||||
}
|
||||
let dst = rng.below(8);
|
||||
let src = if op.is_load() {
|
||||
let mut eligible = [0u64; 8];
|
||||
|
|
@ -1710,12 +1814,21 @@ pub fn candidate_from_words_class(
|
|||
a
|
||||
}
|
||||
};
|
||||
let b = rng.below(8);
|
||||
let mut b = rng.below(8);
|
||||
// class v6 (A08, by construction): a mad's second source is never its destination
|
||||
if class.is_v6() && op == Op::Mad && b == dst {
|
||||
b = (b + 1) & 7;
|
||||
}
|
||||
let imm = rng.next() as u32;
|
||||
let imm2 = rng.next() as u32;
|
||||
let rot = 1 + rng.below(31) as u32;
|
||||
let bit = rng.below(32);
|
||||
let mask = 1u8 << rng.below(5);
|
||||
let mut mask = 1u8 << rng.below(5);
|
||||
// class v6 (A02): the reserved shuffle slots take the five dimensions in the drawn order
|
||||
if is_shfl[k] {
|
||||
mask = shfl_masks[shfl_next];
|
||||
shfl_next += 1;
|
||||
}
|
||||
// Version 2 loads take no width roll, so a mixer class with version 2 loads draws the version 2 program
|
||||
let width = if class.takes_width_roll() { class.width_for_roll(rng.below(100)) } else { 1 };
|
||||
let width = if op == Op::Load { width } else { 1 };
|
||||
|
|
@ -1723,7 +1836,8 @@ pub fn candidate_from_words_class(
|
|||
let (win, off) = if class.era.is_some() {
|
||||
let k = rng.below(3) as u8;
|
||||
let o = (rng.next() as u32 & ((1u32 << k) - 1)) as u8;
|
||||
if op == Op::Load {
|
||||
// D2 "layer 8 off": the draws are consumed (the stream is the class's) and every site reads the whole dataset
|
||||
if op == Op::Load && !class.nowin {
|
||||
(k, o)
|
||||
} else {
|
||||
(0, 0)
|
||||
|
|
@ -1963,6 +2077,7 @@ pub fn generate_from_seed_bytes_program_class(seed_string: &str, seed_bytes: &[u
|
|||
(ProgramClass::V3, Some(era)) => return generate_era(seed_string, seed_bytes, V3_CLASS, era, &V3_ALLOWED),
|
||||
(ProgramClass::V4, Some(era)) => return generate_era_generator(seed_string, seed_bytes, V4_CLASS, era, &V3_ALLOWED, GENERATOR_VERSION_V4),
|
||||
// Class v5: the same draw inside V5_CLASS (V4_CLASS plus the state flag, which the draw does not read), generator 5.
|
||||
(ProgramClass::V6, Some(era)) => return generate_era_generator(seed_string, seed_bytes, V6_CLASS, era, &V3_ALLOWED, GENERATOR_VERSION_V6),
|
||||
(ProgramClass::V5, Some(era)) => return generate_era_generator(seed_string, seed_bytes, V5_CLASS, era, &V3_ALLOWED, GENERATOR_VERSION_V5),
|
||||
_ => {}
|
||||
}
|
||||
|
|
@ -1980,11 +2095,11 @@ pub fn generate_from_seed_bytes_program_class(seed_string: &str, seed_bytes: &[u
|
|||
/// and class v4 at rung 0, is [`generate_from_seed_bytes_program_class`] byte for byte. The base program, the 16 loads
|
||||
/// and the era draw do not move with the rung: only the pass count of the shadow block does.
|
||||
pub fn generate_from_seed_bytes_program_class_shadow(seed_string: &str, seed_bytes: &[u8], class: ProgramClass, era_bytes: Option<&[u8]>, shadow_reps: u16) -> Program {
|
||||
if !matches!(class, ProgramClass::V4 | ProgramClass::V5) || shadow_reps == 0 || shadow_reps == V4_SHADOW_REPS {
|
||||
if !matches!(class, ProgramClass::V4 | ProgramClass::V5 | ProgramClass::V6) || shadow_reps == 0 || shadow_reps == V4_SHADOW_REPS {
|
||||
return generate_from_seed_bytes_program_class(seed_string, seed_bytes, class, era_bytes);
|
||||
}
|
||||
// class v5 at a rung: class v4's rung with the state flag, generator 5
|
||||
let (base, generator) = if class == ProgramClass::V5 { (v5_class_at(shadow_reps), GENERATOR_VERSION_V5) } else { (v4_class_at(shadow_reps), GENERATOR_VERSION_V4) };
|
||||
let (base, generator) = if class == ProgramClass::V6 { (LoadClass { fold: true, rw: 1, reg64: true, reg64_chain: true, ..v5_class_at(shadow_reps) }, GENERATOR_VERSION_V6) } else if class == ProgramClass::V5 { (v5_class_at(shadow_reps), GENERATOR_VERSION_V5) } else { (v4_class_at(shadow_reps), GENERATOR_VERSION_V4) };
|
||||
match era_bytes {
|
||||
Some(era) => generate_era_generator(seed_string, seed_bytes, base, era, &V3_ALLOWED, generator),
|
||||
None => {
|
||||
|
|
@ -2330,14 +2445,15 @@ mod tests {
|
|||
assert_eq!(v3.program_id(), program_id(GENERATOR_VERSION_V3, &v3.seed, v3.attempt));
|
||||
assert_ne!(v3.program_id(), program_id(GENERATOR_VERSION, &v3.seed, v3.attempt));
|
||||
assert_ne!(v3.program_id(), v2.program_id());
|
||||
for c in [ProgramClass::V2, ProgramClass::V3, ProgramClass::V4, ProgramClass::V5] {
|
||||
for c in [ProgramClass::V2, ProgramClass::V3, ProgramClass::V4, ProgramClass::V5, ProgramClass::V6] {
|
||||
assert_eq!(ProgramClass::parse(c.name()), Some(c));
|
||||
assert_eq!(ProgramClass::from_generator(c.generator_version()), Some(c));
|
||||
assert_eq!(ProgramClass::from_u8(c.as_u8()), Some(c));
|
||||
}
|
||||
assert_eq!(ProgramClass::from_generator(1), None);
|
||||
assert_eq!(ProgramClass::from_generator(6), None);
|
||||
assert_eq!(ProgramClass::parse("v6"), None);
|
||||
assert_eq!(ProgramClass::from_generator(6), Some(ProgramClass::V6), "class v6 is generator 6 (review B's F03, 8 October 2026)");
|
||||
assert_eq!(ProgramClass::from_generator(7), None);
|
||||
assert_eq!(ProgramClass::parse("v7"), None);
|
||||
assert_eq!(ProgramClass::default(), ProgramClass::V2);
|
||||
assert_eq!(ProgramClass::V2.load_class(), LoadClass::V2);
|
||||
assert!(!ProgramClass::V2.has_era() && ProgramClass::V3.has_era() && ProgramClass::V4.has_era() && ProgramClass::V5.has_era());
|
||||
|
|
|
|||
|
|
@ -122,7 +122,8 @@ fn usage() -> ! {
|
|||
\x20 --era-widths 4[,16,32,64] the width set the era draws from, in bytes (default 4: pinned; more lets the era draw it; 32 only with the w32 class)\n\
|
||||
\x20 --dataset-words N research class ds55: the dataset at N words (a multiple of 65,536 in 2^28 ..= 2^31; 1476395008 = 5.5 GiB); a non-power-of-two uses idx = (src * N) >> 32 in every load (spec 01 section 1.13.3), a power of two is --dataset-log2\n\\
|
||||
\x20 --reg64 the 64-register window per lane over the class (research; the same as --class <class>+reg64; CUDA, OpenCL and Metal texts)\n\
|
||||
\x20 --reg64-chain reg64 with the full-chain address mix: every load's address consumes all 64 registers (the same as --class <class>+reg64c)"
|
||||
\x20 --reg64-chain reg64 with the full-chain address mix: every load's address consumes all 64 registers (the same as --class <class>+reg64c)\n\
|
||||
\x20 --reg64-prefix export: the CUDA texts carry the reg64 chain in its closed prefix form (review B's F05; the same hash and vectors, a measurement text)"
|
||||
);
|
||||
std::process::exit(2)
|
||||
}
|
||||
|
|
@ -189,6 +190,7 @@ fn parse() -> Args {
|
|||
a.reg64 = true;
|
||||
a.reg64_chain = true;
|
||||
}
|
||||
"--reg64-prefix" => igneum_pow::emit::set_reg64_prefix(true),
|
||||
_ => usage(),
|
||||
}
|
||||
}
|
||||
|
|
@ -229,10 +231,29 @@ fn main() {
|
|||
// gate G2 (5 October 2026, ported from branch ca2-era for the class v4 gate run): `--count N` prints
|
||||
// "nonce hash" for N consecutive 64-bit nonces from --nonce, one epoch build, to re-hash a worker's
|
||||
// found lines (the same prehash, target ff..ff)
|
||||
for k in 0..a.count {
|
||||
let n = a.nonce.wrapping_add(k);
|
||||
println!("{n} {:016x}", e.hash_bound(&prehash, n));
|
||||
// one warp per 32 nonces (the P01 campaign, 8 October 2026: a million nonces per pack in minutes, not
|
||||
// hours; the per-nonce form hashed the whole aligned group for every nonce)
|
||||
let end = a.nonce.wrapping_add(a.count);
|
||||
let mut n = a.nonce;
|
||||
let mut out = String::with_capacity(1 << 16);
|
||||
use std::io::Write;
|
||||
let stdout = std::io::stdout();
|
||||
let mut lock = stdout.lock();
|
||||
while n != end {
|
||||
let base = n & !31;
|
||||
let warp = e.hash_warp_bound(&prehash, base);
|
||||
let mut m = n;
|
||||
while m != end && (m & !31) == base {
|
||||
out.push_str(&format!("{m} {:016x}\n", warp[(m & 31) as usize]));
|
||||
m = m.wrapping_add(1);
|
||||
}
|
||||
n = m;
|
||||
if out.len() > (1 << 15) {
|
||||
lock.write_all(out.as_bytes()).unwrap();
|
||||
out.clear();
|
||||
}
|
||||
}
|
||||
lock.write_all(out.as_bytes()).unwrap();
|
||||
return;
|
||||
}
|
||||
let init = igneum_pow::bind::block_init_words(&prehash, a.nonce);
|
||||
|
|
|
|||
|
|
@ -199,14 +199,14 @@ pub fn verify_pack_texts_chain(
|
|||
// carries IGNEUM_STATE_ROOT_HEX (and the shadow block of v4) and no other generator does.
|
||||
let state_root_hex = define_str(program_h, "IGNEUM_STATE_ROOT_HEX");
|
||||
match (class, state_root_hex.is_some()) {
|
||||
(ProgramClass::V5, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 5 (class v5) without IGNEUM_STATE_ROOT_HEX: not a class v5 pack".into())),
|
||||
(ProgramClass::V5, true) => {}
|
||||
(ProgramClass::V5 | ProgramClass::V6, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 5 or 6 (a state class) without IGNEUM_STATE_ROOT_HEX: not a class v5 pack".into())),
|
||||
(ProgramClass::V5 | ProgramClass::V6, true) => {}
|
||||
(_, true) => return Err(PackFault::Disagree(format!("IGNEUM_GENERATOR {generator} with class v5 state lines: a program over state leaves is generator 5 (export the pack as class v5)"))),
|
||||
_ => {}
|
||||
}
|
||||
match (class, shadow > 0) {
|
||||
(ProgramClass::V4, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 4 (class v4) without IGNEUM_SHADOW_INSTRS: not a class v4 pack".into())),
|
||||
(ProgramClass::V5, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 5 (class v5) without IGNEUM_SHADOW_INSTRS: not a class v5 pack".into())),
|
||||
(ProgramClass::V5 | ProgramClass::V6, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 5 or 6 (a state class) without IGNEUM_SHADOW_INSTRS: not a class v5 pack".into())),
|
||||
// the class v4 stream sub-version (AP-F8-1 amendment, 7 October 2026): a generator 4 pack from before the
|
||||
// load-source rule carries no IGNEUM_PROGRAM_SUBVERSION and its program id is another stream's; refused
|
||||
(ProgramClass::V4, true) if define_u32(program_h, "IGNEUM_PROGRAM_SUBVERSION") != Some(u32::from(crate::generator::PROGRAM_SUBVERSION_V4)) => {
|
||||
|
|
|
|||
|
|
@ -1172,3 +1172,91 @@ mod tests {
|
|||
assert!(!e.verify_block(0, w[0] - 1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Review B's F05 (8 October 2026): the reg64 full-chain address source in closed form. The reference fold
|
||||
/// (`m = r[k0]; m = rotl(m, 1) ^ r[k1]; ...` over the 63 registers other than `s`, in index order) equals
|
||||
/// `r[s] ^ ror(P_s, 1) ^ (S ^ P_s ^ a[s])` with `a[k] = rotl(r[k], (63 - k) mod 32)`, `S` the xor of every `a[k]`
|
||||
/// and `P_s` the xor of `a[k]` for `k < s`: a prefix-xor structure answers every load from one `S` and one prefix,
|
||||
/// which is the incremental form a chip would keep. The verifier keeps the fold as the definition; this form is the
|
||||
/// test's and the fleet's measurement's.
|
||||
pub fn reg64_address_source(r: &[u32; 64], s: usize) -> u32 {
|
||||
let a = |k: usize| r[k].rotate_left(((63 - k) % 32) as u32);
|
||||
let mut total = 0u32;
|
||||
let mut prefix = 0u32;
|
||||
for k in 0..64 {
|
||||
total ^= a(k);
|
||||
if k < s {
|
||||
prefix ^= a(k);
|
||||
}
|
||||
}
|
||||
r[s] ^ prefix.rotate_right(1) ^ (total ^ prefix ^ a(s))
|
||||
}
|
||||
|
||||
/// The reference fold of [`reg64_address_source`] on one lane's registers, as `interpret_warp_core` computes it.
|
||||
pub fn reg64_address_source_reference(r: &[u32; 64], s: usize) -> u32 {
|
||||
let mut m = 0u32;
|
||||
let mut started = false;
|
||||
for (k, &v) in r.iter().enumerate() {
|
||||
if k == s {
|
||||
continue;
|
||||
}
|
||||
m = if started { m.rotate_left(1) ^ v } else { v };
|
||||
started = true;
|
||||
}
|
||||
r[s] ^ m
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod reg64_mix_tests {
|
||||
use super::*;
|
||||
|
||||
/// Review B's F05, known-failed first: a form with one rotation off (every term rotated as if it sat after the
|
||||
/// source) disagrees with the reference on some source; the closed form agrees on every source register over
|
||||
/// 256 register states drawn from a fixed stream and over the states a real program leaves in its registers.
|
||||
#[test]
|
||||
fn reg64_closed_form_equals_the_reference_fold_on_every_source() {
|
||||
let wrong = |r: &[u32; 64], s: usize| -> u32 {
|
||||
let a = |k: usize| r[k].rotate_left(((63 - k) % 32) as u32);
|
||||
let total: u32 = (0..64).map(a).fold(0, |x, y| x ^ y);
|
||||
r[s] ^ total ^ a(s)
|
||||
};
|
||||
let mut x = 0x9e37_79b9_7f4a_7c15u64;
|
||||
let mut next = || {
|
||||
x = x.wrapping_add(0x9e37_79b9_7f4a_7c15);
|
||||
let mut z = x;
|
||||
z = (z ^ (z >> 30)).wrapping_mul(0xbf58_476d_1ce4_e5b9);
|
||||
z = (z ^ (z >> 27)).wrapping_mul(0x94d0_49bb_1331_11eb);
|
||||
(z ^ (z >> 31)) as u32
|
||||
};
|
||||
let mut wrong_differs = false;
|
||||
for _ in 0..256 {
|
||||
let mut r = [0u32; 64];
|
||||
for v in r.iter_mut() {
|
||||
*v = next();
|
||||
}
|
||||
for s in 0..64 {
|
||||
assert_eq!(reg64_address_source(&r, s), reg64_address_source_reference(&r, s), "source r{s}");
|
||||
if wrong(&r, s) != reg64_address_source_reference(&r, s) {
|
||||
wrong_differs = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
assert!(wrong_differs, "the known-failed form must disagree somewhere");
|
||||
// the init rule's registers (r0..r7 seeded, r[k] = r[k & 7] * 0x9e3779b9 + k) and a few real updates
|
||||
let mut r = [0u32; 64];
|
||||
for (k, v) in r.iter_mut().enumerate().take(8) {
|
||||
*v = next() ^ (k as u32);
|
||||
}
|
||||
for k in 8..64 {
|
||||
r[k] = r[k & 7].wrapping_mul(0x9e37_79b9).wrapping_add(k as u32);
|
||||
}
|
||||
for step in 0..64 {
|
||||
let d = (step * 7 + 3) % 64;
|
||||
r[d] = r[d].wrapping_mul(r[(d + 13) % 64]).wrapping_add(next());
|
||||
for s in 0..64 {
|
||||
assert_eq!(reg64_address_source(&r, s), reg64_address_source_reference(&r, s), "step {step} source r{s}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,8 +68,11 @@ fn power_of_two_path_is_byte_identical_to_the_pinned_pack() {
|
|||
assert!(!e.dataset.geom.mulshift);
|
||||
assert_eq!(e.dataset.geom, DatasetGeom::pow2(28));
|
||||
let out = export_pack(e, &day_label(), SOURCE);
|
||||
assert_eq!(out.files.len(), 12, "the pack's twelve files");
|
||||
assert_eq!(out.files.len(), 13, "the pack's thirteen files");
|
||||
for (name, text) in &out.files {
|
||||
if name == "identity.json" {
|
||||
continue; // A06's identity file is new beside the pinned twelve
|
||||
}
|
||||
let want = pinned(name);
|
||||
assert!(text == &want, "mx8-devnet-epoch0/{name} differs from the default path's export");
|
||||
}
|
||||
|
|
@ -219,7 +222,7 @@ fn ds55_pack_fields_and_vectors() {
|
|||
assert_eq!(e.program.seed[0], 0x667d_0fbd);
|
||||
assert_eq!(e.program.seed[1], 0x7b8e_5963);
|
||||
let out = export_pack(e, &day_label(), SOURCE);
|
||||
assert_eq!(out.files.len(), 12);
|
||||
assert_eq!(out.files.len(), 13);
|
||||
let pj = &out.files.iter().find(|(n, _)| n == "program.json").unwrap().1;
|
||||
let j: Value = serde_json::from_str(pj).expect("program.json is valid JSON");
|
||||
assert_eq!(j["program_id"].as_str().unwrap(), "0x73bcbfe8ccf988f1");
|
||||
|
|
|
|||
132
igneum-pow/tests/fuzz_parsers.rs
Normal file
132
igneum-pow/tests/fuzz_parsers.rs
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
//! POW-01 and POW-02's malformed-input half (the Test and Acceptance Standard, 8 October 2026): 10,000 mutated inputs
|
||||
//! per parser, every one refused cleanly or accepted, never a panic. The parsers: the class string (`LoadClass::parse`,
|
||||
//! `ProgramClass::parse`), the hex reader (`bind::unhex`), the IGSD1 state stream (`StateStream::decode`), the era
|
||||
//! string form (`"<n>:<64 hex>"`, the exporter's `parse_era` re-stated here since main.rs keeps it private). The
|
||||
//! mutations: byte flips, truncation, insertion, duplication and random bytes over a valid seed input, drawn from a
|
||||
//! fixed SplitMix64 so the run is reproducible; a panic in any parser fails the test (the harness catches none).
|
||||
use igneum_pow::bind::unhex;
|
||||
use igneum_pow::generator::{LoadClass, ProgramClass};
|
||||
use igneum_pow::state::StateStream;
|
||||
|
||||
struct Rng(u64);
|
||||
impl Rng {
|
||||
fn next(&mut self) -> u64 {
|
||||
self.0 = self.0.wrapping_add(0x9e3779b97f4a7c15);
|
||||
let mut z = self.0;
|
||||
z = (z ^ (z >> 30)).wrapping_mul(0xbf58476d1ce4e5b9);
|
||||
z = (z ^ (z >> 27)).wrapping_mul(0x94d049bb133111eb);
|
||||
z ^ (z >> 31)
|
||||
}
|
||||
fn below(&mut self, n: usize) -> usize {
|
||||
(self.next() % (n.max(1) as u64)) as usize
|
||||
}
|
||||
}
|
||||
|
||||
/// One mutation of `seed`: a flipped byte, a truncation, an insertion, a doubled slice, or random bytes of a random length.
|
||||
fn mutate(rng: &mut Rng, seed: &[u8]) -> Vec<u8> {
|
||||
let mut v = seed.to_vec();
|
||||
match rng.below(6) {
|
||||
0 => {
|
||||
if !v.is_empty() {
|
||||
let i = rng.below(v.len());
|
||||
v[i] ^= 1 << rng.below(8);
|
||||
}
|
||||
}
|
||||
1 => {
|
||||
let n = rng.below(v.len() + 1);
|
||||
v.truncate(n);
|
||||
}
|
||||
2 => {
|
||||
let i = rng.below(v.len() + 1);
|
||||
v.insert(i, rng.next() as u8);
|
||||
}
|
||||
3 => {
|
||||
if v.len() > 1 {
|
||||
let a = rng.below(v.len());
|
||||
let b = a + rng.below(v.len() - a);
|
||||
let slice = v[a..b].to_vec();
|
||||
v.splice(a..a, slice);
|
||||
}
|
||||
}
|
||||
4 => {
|
||||
let n = rng.below(300);
|
||||
v = (0..n).map(|_| rng.next() as u8).collect();
|
||||
}
|
||||
_ => {
|
||||
if !v.is_empty() {
|
||||
let i = rng.below(v.len());
|
||||
v[i] = rng.next() as u8;
|
||||
}
|
||||
}
|
||||
}
|
||||
v
|
||||
}
|
||||
|
||||
const N: usize = 10_000;
|
||||
|
||||
#[test]
|
||||
fn class_strings_never_panic() {
|
||||
let seeds = ["mx8+sh256x27+state+reg64c+fold+rw", "mx8+sh256x27+state+nowin", "w32m8g-erad810f22d+sh256x27+state", "v2", "mix50-35-15", "scr4k32+hot64k4a", "mx4", "p4,p16,p64", "w64x4", "mx8+rw2"];
|
||||
let mut rng = Rng(1);
|
||||
let (mut some, mut none) = (0, 0);
|
||||
for k in 0..N {
|
||||
let s = mutate(&mut rng, seeds[k % seeds.len()].as_bytes());
|
||||
let text = String::from_utf8_lossy(&s);
|
||||
match LoadClass::parse(&text) {
|
||||
Some(c) => {
|
||||
// an accepted string names back to something the parser accepts again
|
||||
assert!(LoadClass::parse(&c.name()).is_some(), "{text:?} -> {} does not re-parse", c.name());
|
||||
some += 1;
|
||||
}
|
||||
None => none += 1,
|
||||
}
|
||||
let _ = ProgramClass::parse(&text);
|
||||
}
|
||||
println!("class strings: {some} accepted, {none} refused of {N}");
|
||||
assert!(none > N / 2, "the mutations refuse at least half");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hex_and_era_strings_never_panic() {
|
||||
let hex = "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07";
|
||||
let mut rng = Rng(2);
|
||||
let mut refused = 0;
|
||||
for _ in 0..N {
|
||||
let s = mutate(&mut rng, hex.as_bytes());
|
||||
let text = String::from_utf8_lossy(&s);
|
||||
if unhex(&text).is_none() {
|
||||
refused += 1;
|
||||
}
|
||||
// the era string "<n>:<64 hex>" as the exporter reads it
|
||||
let era = format!("{}:{}", rng.below(1000), text);
|
||||
let parsed = era.split_once(':').and_then(|(n, h)| n.parse::<u64>().ok().zip(unhex(h))).filter(|(_, b)| b.len() == 32);
|
||||
if let Some((_, b)) = parsed {
|
||||
assert_eq!(b.len(), 32);
|
||||
}
|
||||
}
|
||||
println!("hex strings: {refused} refused of {N}");
|
||||
assert!(refused > 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn state_streams_never_panic() {
|
||||
// a small valid stream: three records under a fixed root and block
|
||||
let stream = StateStream { number: 159357, block: [7u8; 32], root: [9u8; 32], records: vec![vec![1, 2, 3], vec![], (0..200u8).collect()] };
|
||||
let valid = stream.encode();
|
||||
assert_eq!(StateStream::decode(&valid).map(|s| s.records.len()), Ok(3));
|
||||
let mut rng = Rng(3);
|
||||
let (mut ok, mut err) = (0, 0);
|
||||
for _ in 0..N {
|
||||
let bytes = mutate(&mut rng, &valid);
|
||||
match StateStream::decode(&bytes) {
|
||||
Ok(s) => {
|
||||
// an accepted stream re-encodes to the bytes it was read from
|
||||
assert_eq!(s.encode(), bytes, "an accepted stream must round-trip");
|
||||
ok += 1;
|
||||
}
|
||||
Err(_) => err += 1,
|
||||
}
|
||||
}
|
||||
println!("state streams: {ok} accepted, {err} refused of {N}");
|
||||
assert!(err > N / 2);
|
||||
}
|
||||
|
|
@ -347,8 +347,8 @@ fn determinism_v3() {
|
|||
};
|
||||
println!("determinism {}: two builds equal, against the pinned pack {}", class.name(), dir.display());
|
||||
for (name, text) in &pa.files {
|
||||
if name == "vectors.json" || name == "vectors.h" {
|
||||
continue; // the source string differs ("a" here)
|
||||
if name == "vectors.json" || name == "vectors.h" || name == "identity.json" {
|
||||
continue; // the source string differs ("a" here); identity.json is new beside the pinned twelve (A06)
|
||||
}
|
||||
let on_disk = std::fs::read_to_string(dir.join(name)).unwrap();
|
||||
assert_eq!(&on_disk, text, "{name}");
|
||||
|
|
|
|||
|
|
@ -433,7 +433,9 @@ fn check_export(pack: &str) {
|
|||
if e.dataset.mode() == DatasetMode::MemoryHard {
|
||||
expected.extend(["memhard.h", "memhard.metal"]);
|
||||
}
|
||||
assert_eq!(out.files.iter().map(|(n, _)| n.as_str()).collect::<Vec<_>>(), expected);
|
||||
let mut with_identity: Vec<&str> = expected.clone();
|
||||
with_identity.insert(1, "identity.json");
|
||||
assert_eq!(out.files.iter().map(|(n, _)| n.as_str()).collect::<Vec<_>>(), with_identity);
|
||||
let mut on_disk: Vec<String> = std::fs::read_dir(pack_dir(pack))
|
||||
.unwrap()
|
||||
.map(|d| d.unwrap().file_name().to_string_lossy().to_string())
|
||||
|
|
@ -646,6 +648,9 @@ fn era_emitted_sources_match_and_loads_have_the_era_form() {
|
|||
let source = era_json(pack, "vectors.json")["source"].as_str().unwrap().to_string();
|
||||
let out = export_pack(e, &day, &source);
|
||||
for (name, text) in &out.files {
|
||||
if name == "identity.json" {
|
||||
continue; // A06's identity file is new beside the pinned files
|
||||
}
|
||||
let want = era_read(pack, name);
|
||||
assert!(text == &want, "{pack}/{name} differs from the emitter");
|
||||
}
|
||||
|
|
@ -655,7 +660,7 @@ fn era_emitted_sources_match_and_loads_have_the_era_form() {
|
|||
.filter(|n| !n.starts_with('.') && n != "seeds.txt")
|
||||
.collect();
|
||||
on_disk.sort();
|
||||
let mut want: Vec<String> = out.files.iter().map(|(n, _)| n.clone()).collect();
|
||||
let mut want: Vec<String> = out.files.iter().map(|(n, _)| n.clone()).filter(|n| n != "identity.json").collect();
|
||||
want.sort();
|
||||
assert_eq!(on_disk, want, "{pack}: the pack holds the export's files and seeds.txt only");
|
||||
let era = e.program.class.era.unwrap();
|
||||
|
|
@ -869,7 +874,7 @@ fn hot_packs_emitted_sources_and_load_forms() {
|
|||
let file = |name: &str| -> &str { &out.files.iter().find(|(n, _)| n == name).unwrap().1 };
|
||||
hassert_same_text(pack, "vectors.json", file("vectors.json"));
|
||||
hassert_same_text(pack, "vectors.h", file("vectors.h"));
|
||||
assert_eq!(out.files.len(), 12);
|
||||
assert_eq!(out.files.len(), 13);
|
||||
// One form per dialect, exactly 16 - k masked dataset loads and k hot loads in every hash kernel; the fill
|
||||
// kernel is present once per source that builds the table.
|
||||
for (file, load, masked, hot) in [
|
||||
|
|
@ -974,6 +979,9 @@ fn v5_pack_is_the_v4_program_over_the_state_leaves() {
|
|||
let v = v5_json(pack, "vectors.json");
|
||||
let out = export_pack(e, v["day"].as_str().unwrap(), v["source"].as_str().unwrap());
|
||||
for (name, text) in &out.files {
|
||||
if name == "identity.json" {
|
||||
continue; // A06's identity file is new beside the pinned files
|
||||
}
|
||||
assert_eq!(v5_read(pack, name), *text, "{pack}/{name} differs from the export");
|
||||
}
|
||||
for (name, bytes) in &out.binaries {
|
||||
|
|
@ -1032,8 +1040,11 @@ fn reg64_plain_path_reexports_the_pinned_devnet_pack_unchanged() {
|
|||
assert_eq!(e.program.registers(), 8);
|
||||
assert_eq!(e.program.scheduled(), e.program.instrs, "without the flag the schedule is the drawn program");
|
||||
let out = export_pack(e, &day_label(pack), PINNED_SOURCE);
|
||||
assert_eq!(out.files.len(), 12);
|
||||
assert_eq!(out.files.len(), 13);
|
||||
for (name, text) in &out.files {
|
||||
if name == "identity.json" {
|
||||
continue; // A06's identity file is new beside the pinned twelve
|
||||
}
|
||||
assert_same_text(pack, name, text);
|
||||
}
|
||||
}
|
||||
|
|
@ -1222,4 +1233,64 @@ fn reg64_liveness_rule_refuses_the_subset_fold_and_passes_the_full_chain() {
|
|||
let mut chain = epoch_reg64_of_devnet();
|
||||
chain.program.class = chain.program.class.with_reg64_chain();
|
||||
assert_eq!(check_window_liveness(&chain.program), Ok(()), "the full chain keeps all 64 registers live across the chain");
|
||||
// wired into the acceptance (8 October 2026): `accept::check` refuses the arithmetic-only window as a dead register
|
||||
// and never refuses the chain program for liveness; the plain pack's verdict does not move
|
||||
use igneum_pow::accept::check;
|
||||
assert!(matches!(check(&window.program), Err(Reject::DeadWindowRegister { .. })), "the acceptance refuses the arithmetic-only window");
|
||||
assert!(!matches!(check(&chain.program), Err(Reject::DeadWindowRegister { .. }) | Err(Reject::NotAWindow)), "the chain program is never refused for liveness");
|
||||
assert!(check(&plain.program).is_ok(), "the pinned devnet program's verdict does not move");
|
||||
}
|
||||
|
||||
/// The external review's A07 (8 October 2026): the bound hash of a nonce is the lane of the aligned 32-nonce group that
|
||||
/// contains it, in the verifier by construction (`Epoch::hash_bound`), across the group's tail and the low-32 rollover;
|
||||
/// the high 32 bits of the nonce enter the init words, so two nonces 2^32 apart never share a hash. The launchers
|
||||
/// refuse a job whose nonce_start is not 32-aligned or whose count is not a multiple of 32 (worker.cpp's job line).
|
||||
#[test]
|
||||
fn a07_bound_hash_is_group_aligned_across_tails_and_rollover() {
|
||||
use igneum_pow::bind::block_init_words;
|
||||
let e = epoch("mx8-devnet-epoch0");
|
||||
let prehash = [0x5au8; 32];
|
||||
for &n in &[0u64, 1, 2, 31, 32, 33, 63, (1u64 << 32) - 1, 1u64 << 32, (1u64 << 32) + 1, u64::MAX - 1, u64::MAX] {
|
||||
let base = n & !31;
|
||||
let warp = e.hash_warp_bound(&prehash, base);
|
||||
assert_eq!(e.hash_bound(&prehash, n), warp[(n & 31) as usize], "nonce {n}: the lane of its aligned group");
|
||||
assert_eq!(e.hash_warp_bound(&prehash, n), warp, "nonce {n}: the group is the same from any of its nonces");
|
||||
let distinct: std::collections::HashSet<u64> = warp.iter().copied().collect();
|
||||
assert!(distinct.len() >= 31, "nonce {n}: the lanes of a group are distinct hashes");
|
||||
}
|
||||
assert_ne!(e.hash_bound(&prehash, 2), e.hash_bound(&prehash, 2 + (1u64 << 32)), "the high 32 bits reach the hash");
|
||||
assert_ne!(block_init_words(&prehash, 2), block_init_words(&prehash, 2 + (1u64 << 32)));
|
||||
}
|
||||
|
||||
/// The external review's A04 (8 October 2026): the acceptance executes the shadow block as the hash does (class v4
|
||||
/// sub-version 3), so a shadow that zeroes the registers fails acceptance; the pinned program with its own shadow passes.
|
||||
#[test]
|
||||
fn a04_a_zeroing_shadow_fails_acceptance() {
|
||||
use igneum_pow::accept::check;
|
||||
// a class v4 program (the shadow block is class v4's): the same seed and era as the lib's program_classes test
|
||||
let era = [7u8; 32];
|
||||
let p = generate_from_seed_bytes_program_class("igneum-genesis", b"igneum-genesis", ProgramClass::V4, Some(&era));
|
||||
assert!(check(&p).is_ok(), "the class v4 program of the genesis seed passes");
|
||||
let mut z = p.clone();
|
||||
assert!(!z.shadow.is_empty(), "class v4 has a shadow block");
|
||||
for ins in z.shadow.iter_mut() {
|
||||
ins.op = Op::Xor;
|
||||
ins.src = ins.dst;
|
||||
}
|
||||
assert!(check(&z).is_err(), "a shadow of xor d, d zeroes every register it touches and must fail");
|
||||
}
|
||||
|
||||
/// The external review's A06 (8 October 2026): the pack's identity.json authenticates every kernel text by BLAKE2b-256.
|
||||
#[test]
|
||||
fn a06_program_json_hashes_every_kernel_text() {
|
||||
let e = epoch("mx8-devnet-epoch0");
|
||||
let out = export_pack(&e, &day_label("mx8-devnet-epoch0"), "test");
|
||||
let file = |n: &str| out.files.iter().find(|(f, _)| f == n).map(|(_, t)| t.clone()).unwrap();
|
||||
let j: Value = serde_json::from_str(&file("identity.json")).unwrap();
|
||||
let h = j["kernel_blake2b256"].as_object().expect("kernel_blake2b256");
|
||||
assert_eq!(j["program_id"].as_str().unwrap(), format!("{:#018x}", e.program.program_id()));
|
||||
for n in ["kernel.cu", "kernel.cl", "program.metal", "program_bound.metal", "kernel_bound.cu", "kernel_bound.cl"] {
|
||||
let want: String = igneum_pow::blake2b::blake2b_256(&[file(n).as_bytes()]).iter().map(|x| format!("{x:02x}")).collect();
|
||||
assert_eq!(h[n].as_str().unwrap(), want, "{n}");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use igneum_pow::accept::{index_bit_sigma, index_bit_sigma_max, ACCEPT_UNITS_DIST
|
|||
use igneum_pow::emit::export_pack;
|
||||
use igneum_pow::generator::{
|
||||
candidate_class, generate_era_generator, LoadClass, Op, Program, ProgramClass, EraParams, INSTR_COUNT, NONLOAD_WEIGHTS,
|
||||
NONLOAD_WEIGHTS_RW, NONLOAD_WEIGHTS_RW2, NONLOAD_WEIGHTS_RW2_SUM, NONLOAD_WEIGHTS_RW_SUM, V3_ALLOWED, V4_CLASS, V5_CLASS,
|
||||
NONLOAD_WEIGHTS_RW, NONLOAD_WEIGHTS_RW2, NONLOAD_WEIGHTS_RW2_SUM, NONLOAD_WEIGHTS_RW_SUM, V3_ALLOWED, V3_CLASS, V4_CLASS, V5_CLASS,
|
||||
};
|
||||
use igneum_pow::seed::seed_words_from_bytes;
|
||||
use igneum_pow::verify::{load_index, stride, DatasetGeom, Epoch, INDEX_FOLD_SHIFT};
|
||||
|
|
@ -182,6 +182,123 @@ fn class_v6_all_flags_parse_name_and_id() {
|
|||
assert!(p.class.era.unwrap().fold);
|
||||
}
|
||||
|
||||
/// 1c. D2 "layer 8 off" (8 October 2026): "+nowin" parses in any order and names back inside "+fold"/"+rw"; the draw
|
||||
/// keeps every instruction of the class without the flag and sets every load site's window to the whole dataset;
|
||||
/// the id moves; the era and the stride do not.
|
||||
#[test]
|
||||
fn nowin_removes_the_window_layer_and_nothing_else() {
|
||||
let c = LoadClass::parse("mx8+sh256x27+state+nowin+fold+rw").unwrap();
|
||||
assert!(c.nowin && c.fold && c.rw == 1 && c.state);
|
||||
assert_eq!(c.name(), "mx8+sh256x27+state+nowin+fold+rw");
|
||||
assert_eq!(LoadClass::parse("mx8+sh256x27+state+fold+rw+nowin"), Some(c));
|
||||
assert_eq!(LoadClass::parse("mx8+sh256x27+state+reg64c+nowin").unwrap().name(), "mx8+sh256x27+state+reg64c+nowin");
|
||||
assert!(!V5_CLASS.nowin);
|
||||
let era = f8_bytes("era", 4);
|
||||
let seed = f8_bytes("program", 4);
|
||||
// both sides of the pair draw under the v6 rules (the five shuffle slots and the mad operand rule enter the
|
||||
// stream for every class with a v6 flag), so the pair is the fold class with and without layer 8 off
|
||||
let plain = candidate_class("p4-attack-f8", &seed, 0, LoadClass::era(V5_CLASS.with_fold(), &era, &V3_ALLOWED));
|
||||
let off = candidate_class("p4-attack-f8", &seed, 0, LoadClass::era(V5_CLASS.with_fold().with_nowin(), &era, &V3_ALLOWED));
|
||||
assert_ne!(plain.program_id(), off.program_id(), "the id carries the flag");
|
||||
assert_eq!(plain.instrs.len(), off.instrs.len());
|
||||
let mut windows_plain = 0;
|
||||
for (a, b) in plain.instrs.iter().zip(off.instrs.iter()) {
|
||||
assert_eq!((a.op, a.dst, a.src, a.src2, a.imm, a.imm2, a.rot, a.bit, a.mask, a.width), (b.op, b.dst, b.src, b.src2, b.imm, b.imm2, b.rot, b.bit, b.mask, b.width), "the instruction is the class's without the flag");
|
||||
assert_eq!((b.win, b.off), (0, 0), "every site reads the whole dataset");
|
||||
if a.win != 0 {
|
||||
windows_plain += 1;
|
||||
}
|
||||
}
|
||||
assert!(windows_plain > 0, "the plain draw has at least one shrunk window on this seed");
|
||||
assert_eq!(plain.shadow, off.shadow);
|
||||
assert_eq!(plain.class.era.map(|e| EraParams { fold: e.fold, ..e }), off.class.era.map(|e| EraParams { fold: e.fold, ..e }), "the era draw is untouched");
|
||||
}
|
||||
|
||||
/// The external review's A02 and A08 (8 October 2026), fixed by construction for every class carrying a v6 flag:
|
||||
/// every candidate of 64 seeds (attempt 0, no acceptance pass) carries shuffles over all five lane dimensions, and no
|
||||
/// `mad` names its destination as its second source; the plain class v5 draw is untouched (the pinned pack test
|
||||
/// reads that); the v6 draw's id carries the rule.
|
||||
#[test]
|
||||
fn v6_draw_connects_all_lanes_and_keeps_mad_bijective_by_construction() {
|
||||
let era = f8_bytes("era", 4);
|
||||
let classes = [V5_CLASS.with_fold(), V5_CLASS.with_rw(1), V5_CLASS.with_nowin(), LoadClass::parse("mx8+sh256x27+state+reg64c+fold+rw").unwrap()];
|
||||
for c in classes {
|
||||
assert!(c.is_v6());
|
||||
for k in 0..64u32 {
|
||||
let seed = f8_bytes("program", k);
|
||||
let p = candidate_class("p-a02", &seed, 0, LoadClass::era(c, &era, &V3_ALLOWED));
|
||||
let mut dims = [false; 5];
|
||||
for ins in &p.instrs {
|
||||
if ins.op == Op::Shfl {
|
||||
dims[ins.mask.trailing_zeros() as usize] = true;
|
||||
}
|
||||
if ins.op == Op::Mad {
|
||||
assert_ne!(ins.src2, ins.dst, "seed {k} class {}: a mad with src2 == dst", c.name());
|
||||
}
|
||||
}
|
||||
assert!(dims.iter().all(|&d| d), "seed {k} class {}: shuffle dimensions {:?}", c.name(), dims);
|
||||
assert_eq!(p.instrs.len(), 64);
|
||||
assert_eq!(p.instrs.iter().filter(|i| i.op.is_load()).count(), 16, "the load slots are the class's");
|
||||
}
|
||||
}
|
||||
assert!(!V5_CLASS.is_v6() && !V3_CLASS.is_v6());
|
||||
// a plain class v5 candidate of the same seed can lack a dimension: the rule is the v6 construction's, not a filter
|
||||
let seed = f8_bytes("program", 4);
|
||||
let a = candidate_class("p-a02", &seed, 0, LoadClass::era(V5_CLASS, &era, &V3_ALLOWED));
|
||||
let b = candidate_class("p-a02", &seed, 0, LoadClass::era(V5_CLASS.with_fold(), &era, &V3_ALLOWED));
|
||||
assert_ne!(a.program_id(), b.program_id());
|
||||
}
|
||||
|
||||
/// Lane D's finding (8 October 2026): every class v6 flag is set aside by the acceptance's class v4 shape predicate,
|
||||
/// so a +nowin, +reg64 or +reg64c program is judged by the full rule (the fresh-source rule, the saturated-source
|
||||
/// check, the index floors and the attempt cap with the last resort), not by the class v2 parts; the draw's source
|
||||
/// rule reads the same shape.
|
||||
#[test]
|
||||
fn every_v6_flag_keeps_the_class_v4_acceptance_shape() {
|
||||
use igneum_pow::accept::is_class_v4_shape;
|
||||
use igneum_pow::generator::max_attempts_for;
|
||||
let all = LoadClass::parse("mx8+sh256x27+state+reg64c+nowin+fold+rw").unwrap();
|
||||
for c in [V5_CLASS, V5_CLASS.with_nowin(), V5_CLASS.with_reg64(), V5_CLASS.with_reg64().with_reg64_chain(), V5_CLASS.with_fold(), all] {
|
||||
assert!(is_class_v4_shape(&c), "{}", c.name());
|
||||
assert!(is_class_v4_shape(&LoadClass::era(c, &f8_bytes("era", 4), &V3_ALLOWED)), "{} under an era", c.name());
|
||||
assert_eq!(max_attempts_for(&c), max_attempts_for(&V5_CLASS), "{}: the same attempt cap and last resort", c.name());
|
||||
}
|
||||
assert!(!is_class_v4_shape(&V3_CLASS) && !is_class_v4_shape(&LoadClass::V2));
|
||||
// lane D's second finding: an era drawn from a width set with more than one width writes the drawn width into
|
||||
// `mix`; the shape (and so the full rule) must hold at every width of the family
|
||||
let wide = LoadClass::era(V5_CLASS, &f8_bytes("era", 4), &[1u8, 4, 16]);
|
||||
assert!(wide.era.is_some());
|
||||
assert!(is_class_v4_shape(&wide), "{} (mix {:?})", wide.name(), wide.mix);
|
||||
assert!(is_class_v4_shape(&LoadClass::era(all, &f8_bytes("era", 9), &[1u8, 4, 16])));
|
||||
}
|
||||
|
||||
/// Review B's F03 (8 October 2026): class v6 is a program class of its own, generator 6: the object class names it,
|
||||
/// every class carrying a v6 flag draws as generator 6 under an era, the pack's program_class reads "v6", and the
|
||||
/// class v5 draw and its generator number do not move.
|
||||
#[test]
|
||||
fn program_class_v6_is_generator_6() {
|
||||
use igneum_pow::generator::{era_generator_of, GENERATOR_VERSION_V5, GENERATOR_VERSION_V6, V6_CLASS};
|
||||
assert_eq!(ProgramClass::parse("v6"), Some(ProgramClass::V6));
|
||||
assert_eq!(ProgramClass::V6.name(), "v6");
|
||||
assert_eq!(ProgramClass::V6.generator_version(), GENERATOR_VERSION_V6);
|
||||
assert_eq!(ProgramClass::from_generator(6), Some(ProgramClass::V6));
|
||||
assert!(ProgramClass::V6.has_state());
|
||||
assert_eq!(ProgramClass::V6.load_class(), V6_CLASS);
|
||||
assert_eq!(V6_CLASS.name(), "mx8+sh256x27+state+reg64c+fold+rw");
|
||||
assert_eq!(ProgramClass::of_load_class(&V6_CLASS), Some(ProgramClass::V6));
|
||||
assert_eq!(ProgramClass::of_load_class(&V6_CLASS.with_nowin()), Some(ProgramClass::V6));
|
||||
assert_eq!(ProgramClass::of_load_class(&V5_CLASS), Some(ProgramClass::V5));
|
||||
let era = f8_bytes("era", 4);
|
||||
for c in [V6_CLASS, V6_CLASS.with_nowin(), V5_CLASS.with_fold(), V5_CLASS.with_rw(1), V5_CLASS.with_nowin()] {
|
||||
assert_eq!(era_generator_of(&LoadClass::era(c, &era, &V3_ALLOWED)), GENERATOR_VERSION_V6, "{}", c.name());
|
||||
}
|
||||
assert_eq!(era_generator_of(&LoadClass::era(V5_CLASS, &era, &V3_ALLOWED)), GENERATOR_VERSION_V5);
|
||||
let seed = f8_bytes("program", 4);
|
||||
let p = candidate_class("p-f03", &seed, 0, LoadClass::era(V6_CLASS, &era, &V3_ALLOWED));
|
||||
assert!(p.class.name().starts_with("mx8-era") && p.class.name().ends_with("+sh256x27+state+reg64c+fold+rw"), "{}", p.class.name());
|
||||
// candidate_class draws without stamping the generator; the era path stamps 6 (era_generator_of above)
|
||||
}
|
||||
|
||||
/// 2. The fold's form: `y = x * M; y ^= y >> 16; y = rotl(y, R)`, and nothing else moves. The plain era's stride is
|
||||
/// `rotl(x * M, R)` byte for byte.
|
||||
#[test]
|
||||
|
|
@ -201,14 +318,18 @@ fn fold_form_and_the_plain_stride_unchanged() {
|
|||
assert!(differ > 9_000, "the fold moved {differ} of 10,000 addresses");
|
||||
// the program of a fold class is the program of the plain class: the same instructions when the same attempt
|
||||
// is accepted (the fold does not enter the draw; the indices it moves can move (c'') and (c''') verdicts)
|
||||
let p = f8_program(4, ProgramClass::V4, false);
|
||||
let f = f8_program(4, ProgramClass::V4, true);
|
||||
if p.attempt == f.attempt {
|
||||
assert_eq!(p.instrs, f.instrs);
|
||||
assert_eq!(p.shadow, f.shadow);
|
||||
}
|
||||
assert_eq!(f.class.name(), format!("{}+fold", p.class.name()));
|
||||
// since the review's draw rules (8 October 2026) a fold class draws under the v6 rules, so the pair is the v6
|
||||
// re-weight class with and without the fold: the same instructions, the fold moving the addresses alone
|
||||
let era = f8_bytes("era", 4);
|
||||
let seed = f8_bytes("program", 4);
|
||||
let p = candidate_class("p4-attack-f8", &seed, 0, LoadClass::era(V5_CLASS.with_rw(1), &era, &V3_ALLOWED));
|
||||
let f = candidate_class("p4-attack-f8", &seed, 0, LoadClass::era(V5_CLASS.with_rw(1).with_fold(), &era, &V3_ALLOWED));
|
||||
assert_eq!(p.instrs, f.instrs);
|
||||
assert_eq!(p.shadow, f.shadow);
|
||||
assert_ne!(p.program_id(), f.program_id());
|
||||
// the name orders the fold inside the re-weight suffix ("...+state+fold+rw"); both spellings parse to the class
|
||||
assert!(f.class.name().ends_with("+sh256x27+state+fold+rw"), "{}", f.class.name());
|
||||
assert_eq!(LoadClass::parse("mx8+sh256x27+state+rw+fold"), Some(V5_CLASS.with_rw(1).with_fold()));
|
||||
// and load_index reads the fold through the era
|
||||
let ins = p.instrs.iter().find(|i| i.op == Op::Load).unwrap();
|
||||
let (pe, fe) = (p.class.era.unwrap(), f.class.era.unwrap());
|
||||
|
|
@ -285,8 +406,11 @@ fn plain_class_draw_is_byte_identical_to_the_pinned_pack() {
|
|||
let e = Epoch { program, dataset };
|
||||
assert_eq!(e.program.program_id(), PINNED_ID);
|
||||
let out = export_pack(&e, &format!("bytes:{DAY_HEX}"), SOURCE);
|
||||
assert_eq!(out.files.len(), 12, "the pack's twelve files");
|
||||
assert_eq!(out.files.len(), 13, "the pack's thirteen files");
|
||||
for (name, text) in &out.files {
|
||||
if name == "identity.json" {
|
||||
continue; // A06's identity file is new beside the pinned twelve
|
||||
}
|
||||
let want = pinned(name);
|
||||
assert!(text == &want, "mx8-devnet-epoch0/{name} differs from the default path's export");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -286,9 +286,16 @@ bs_wt_lock() {
|
|||
local d="$BS_ROOT_REMOTE/_locks/wt-$BS_WT" t0 holder
|
||||
t0=$(date +%s)
|
||||
while :; do
|
||||
if bs_ssh "mkdir '$d' 2>/dev/null && printf 'pid %s since %sZ: %s\n' '$$' \"\$(date -u +%H:%M:%S)\" '${BS_TOOL:-build} $BS_CRATE_REL' > '$d/holder'"; then BS_WT_LOCKED="$d"; trap 'bs_wt_unlock' EXIT; return 0; fi
|
||||
if bs_ssh "mkdir '$d' 2>/dev/null && printf 'pid %s host %s since %sZ: %s\n' '$$' '$(hostname -s)' \"\$(date -u +%H:%M:%S)\" '${BS_TOOL:-build} $BS_CRATE_REL' > '$d/holder'"; then BS_WT_LOCKED="$d"; trap 'bs_wt_unlock' EXIT; return 0; fi
|
||||
holder=$(bs_ssh "cat '$d/holder' 2>/dev/null; find '$d' -maxdepth 0 -mmin +180 -print 2>/dev/null | grep -q . && echo STALE" 2>/dev/null || true)
|
||||
case "$holder" in *STALE*) bs_log "worktree lock $d is older than 3 h; taking it over"; bs_ssh "rm -rf '$d'"; continue ;; esac
|
||||
# the dead-holder class (8 October 2026, 21:11 to 22:11 UK): a build-remote killed by its pid never runs its EXIT trap, so the
|
||||
# box kept its lock for the 3 h rule and the next run on that worktree waited an hour. The holder line names the Mac and
|
||||
# the pid; a waiter on the same Mac whose pid is dead takes the lock over at once and says so.
|
||||
case "$holder" in
|
||||
"pid "*" host $(hostname -s) since "*) local hp; hp=$(printf '%s' "$holder" | sed -n 's/^pid \([0-9]*\) host .*/\1/p')
|
||||
if [ -n "$hp" ] && ! kill -0 "$hp" 2>/dev/null; then bs_log "worktree lock $d held by pid $hp of this Mac, which is dead; taking it over"; bs_ssh "rm -rf '$d'"; continue; fi ;;
|
||||
esac
|
||||
[ $(( $(date +%s) - t0 )) -lt 7200 ] || bs_die "gave up after 2 h waiting for the worktree lock $d (held: $holder)"
|
||||
[ $(( ($(date +%s) - t0) % 60 )) -lt 10 ] && bs_log "waiting for another run on worktree $BS_WT: ${holder:-?}"
|
||||
sleep 10
|
||||
|
|
|
|||
|
|
@ -63,6 +63,9 @@ const WINDOW = sflag('window', '120');
|
|||
const NEXT_PROOF = sflag('next-proof');
|
||||
const PRIOR_IDS = sflag('prior-ids'); // "0x<shard>,0x<agg>" of the prior pair, default the manifest's
|
||||
const NEXT_IDS = sflag('next-ids'); // "0x<shard>,0x<agg>" of the next pair
|
||||
// --drop-keys k1,k2: keys the 60x file lists that the node line under test does not know yet (OverrideParams refuses an
|
||||
// unknown field); a node line behind master's file drops them
|
||||
const DROP_KEYS = (sflag('drop-keys', '') || '').split(',').filter(Boolean);
|
||||
const EXPECT = sflag('expect', FLOOR === 'never' ? 'pay' : 'refuse');
|
||||
const GENESIS_BITS = flag('genesis-bits', 0x1f010000);
|
||||
const CASE = sflag('case') || (SUCCESSION ? `succession-${SUCCESSION}-window-${WINDOW}` : `floor-${FLOOR}-expect-${EXPECT}`);
|
||||
|
|
@ -94,7 +97,7 @@ await sleep(1000);
|
|||
rmSync(TMP, { recursive: true, force: true }); mkdirSync(TMP, { recursive: true });
|
||||
const track = (proc) => { started.push(proc); try { appendFileSync(PIDS, `${proc.pid}\n`); } catch { } };
|
||||
|
||||
const baseText = readFileSync(FILE, 'utf8');
|
||||
let baseText = readFileSync(FILE, 'utf8');
|
||||
const field = (name) => { const m = new RegExp(`"${name}":\\s*([0-9]+)`).exec(baseText); return m ? +m[1] : undefined; };
|
||||
function mergeOverrideText(text, fields) {
|
||||
let out = text;
|
||||
|
|
@ -102,13 +105,14 @@ function mergeOverrideText(text, fields) {
|
|||
const extra = Object.entries(fields).map(([k, v]) => `"${k}": ${typeof v === 'string' && !/^\d+$/.test(v) && v !== 'true' && v !== 'false' ? JSON.stringify(v) : v}`).join(', ');
|
||||
return out.replace(/,?\s*}\s*$/, `,\n ${extra}\n}\n`);
|
||||
}
|
||||
for (const k of DROP_KEYS) baseText = baseText.replace(new RegExp(`\\s*"${k}":\\s*[^,}\\n]+,?`), '');
|
||||
const DAY_MS = field('pow_day_ms');
|
||||
const manifest = JSON.parse(readFileSync(MANIFEST, 'utf8'));
|
||||
const override = `${TMP}/override.json`;
|
||||
writeFileSync(override, mergeOverrideText(baseText, {
|
||||
genesis_bits: GENESIS_BITS, skip_proof_of_work: false,
|
||||
proving_v0_activation_daa: '0',
|
||||
proving_consensus_verify_daa: FLOOR === 'never' ? NEVER : FLOOR,
|
||||
proving_consensus_verify_daa: SUCCESSION ? '0' : (FLOOR === 'never' ? NEVER : FLOOR),
|
||||
proving_shard_program_id: PRIOR_IDS ? PRIOR_IDS.split(',')[0] : manifest.shard.program_id, proving_aggregator_id: PRIOR_IDS ? PRIOR_IDS.split(',')[1] : manifest.aggregator.program_id,
|
||||
verifier_in_consensus: 'false',
|
||||
proving_key_succession_daa: SUCCESSION || NEVER, proving_key_succession_window_daa: WINDOW,
|
||||
|
|
@ -182,8 +186,39 @@ const PAYOUT_A = '0x' + 'a1'.repeat(20), PAYOUT_B = '0x' + 'b2'.repeat(20);
|
|||
async function daa(node) { const s = await node.exec('igneum_getExecStatus', []); return Number(s.executedTipDaa ?? 0); }
|
||||
async function tipNumber(node) { const s = await node.exec('igneum_getExecStatus', []); return Number(s.executedTip ?? 0); }
|
||||
|
||||
async function sameTip(a, h) {
|
||||
try { const x = await a.exec('igneum_getExecStatus', []); const y = await h.exec('igneum_getExecStatus', []); return x.executedTipHash && x.executedTipHash === y.executedTipHash; } catch { return false; }
|
||||
}
|
||||
/// Succession mode: the attacker's carrier is refused by the honest nodes and its chain dies with it; before the next
|
||||
/// forge the attacker must be back on the honest tip (it follows the heavier honest chain), so the carrier it builds is
|
||||
/// one the honest nodes will read.
|
||||
async function rejoin(a, h, label) {
|
||||
// 21:33 UK: pausing A's miner made the rejoin fail every time (A did not adopt H's chain in 300 s twice; with its
|
||||
// miner running the rejoin took 15 to 130 s and failed once at 150 s), so the miner stays up and the wait is 600 s
|
||||
for (let k = 0; k < 120; k++) { if (await sameTip(a, h)) { log(`${label}: A is on H1's tip (${k * 5} s)`); return true; } await sleep(5000); }
|
||||
log(`${label}: A did not rejoin H1's tip in 600 s`); return false;
|
||||
}
|
||||
|
||||
/// The seven shapes for shard 0 of A's chain block `n` (a block A has executed); returns what A's own pool answered.
|
||||
async function forge(n, phase) {
|
||||
/// The clocks that fit this shape (read from the 20:42 UK run on build-8, DAA about one per second): a rejoin after a
|
||||
/// refused carrier took up to 100 s, so the second record of a phase lands 60 to 130 DAA after the first; the floor and
|
||||
/// the window must leave room: --succession 360 --window 300 (below: records at about 100 and 230; window: about 370 and
|
||||
/// 500 of 660; after: from 665), never --succession 240 --window 120, whose window closed on the second record.
|
||||
/// Succession mode, one record per carrier (8 October 2026, 20:4x UK, read from the fix node's run: the attacker's
|
||||
/// carrier dies with its refusal, so of two records forged on one block only the first is ever carried; the 18:49 run
|
||||
/// on the pre-fix node read the other half for the same reason): the two shapes go on two blocks with a rejoin between.
|
||||
async function forgeSuccession(phase, waitMs) {
|
||||
let tip = await tipNumber(A);
|
||||
const fa = await forge(Math.max(1, tip - 15), phase, 'p');
|
||||
await sleep(waitMs / 2);
|
||||
await rejoin(A, H1, `${phase}: before the second shape`);
|
||||
tip = await tipNumber(A);
|
||||
const fb = await forge(Math.max(1, tip - 15), phase, 'n');
|
||||
await sleep(waitMs); // the second record's carrier and its refusal need the full wait (20:55 UK: a 60 s half missed the after-window one)
|
||||
return { block: fa.block, hash: fa.hash, second: { block: fb.block, hash: fb.hash }, shapes: [...fa.shapes, ...fb.shapes] };
|
||||
}
|
||||
|
||||
async function forge(n, phase, which = 'pn') {
|
||||
const plan = await A.exec('igneum_getShardPlan', ['0x' + n.toString(16), PAYOUT_A]);
|
||||
const block = plan.hash, statement = plan.shards[0].statement;
|
||||
const planB = await A.exec('igneum_getShardPlan', ['0x' + n.toString(16), PAYOUT_B]);
|
||||
|
|
@ -196,6 +231,19 @@ async function forge(n, phase) {
|
|||
log(`${phase} ${name}: A's pool ${out.accepted ? 'accepted' : 'refused'} (${out.reason || ''})`);
|
||||
return out;
|
||||
};
|
||||
if (SUCCESSION) {
|
||||
// the real proof under each pair, each with A's native statement: refused on its pair where the epoch does not
|
||||
// accept it, on its statement (another chain's) where it does
|
||||
if (which.includes('p') && REAL_PROOF && existsSync(REAL_PROOF)) {
|
||||
const real = readFileSync(REAL_PROOF);
|
||||
await submit('p-prior-pair-proof', signRecord('forger-p', CHAIN, block, n, 0, PAYOUT_A, statement, '0x' + sha256(real)).record, hex(real));
|
||||
}
|
||||
if (which.includes('n') && NEXT_PROOF && existsSync(NEXT_PROOF)) {
|
||||
const nextp = readFileSync(NEXT_PROOF);
|
||||
await submit('n-next-pair-proof', signRecord('forger-n', CHAIN, block, n, 0, PAYOUT_B, statementB, '0x' + sha256(nextp)).record, hex(nextp));
|
||||
}
|
||||
return { block: n, hash: block, shapes };
|
||||
}
|
||||
const empty = Buffer.alloc(0), wrong = randomBytes(1024);
|
||||
// (a) no proof bytes
|
||||
await submit('a-no-proof', signRecord('forger-a', CHAIN, block, n, 0, PAYOUT_A, statement, '0x' + sha256(empty)).record, '0x');
|
||||
|
|
@ -235,8 +283,10 @@ async function observe(n) {
|
|||
}
|
||||
const refusals = (node) => {
|
||||
const t = node.logText();
|
||||
return { invalid: (t.match(/IgneumInvalidProofRecord|invalid proof record|proof record .* does not verify|REFUSED/gi) || []).length, dropped: (t.match(/carried proofs did not arrive|did not deliver its carried proofs/g) || []).length,
|
||||
pair: (t.match(/epoch does not accept|does not embed/g) || []).length, statement: (t.match(/public values hash to/g) || []).length };
|
||||
const reasons = t.match(/a carried proof record's proof does not verify: [^\n]*/g) || [];
|
||||
return { invalid: (t.match(/consensus verify of [^\n]*REFUSED/g) || []).length, dropped: (t.match(/carried proofs did not arrive|did not deliver its carried proofs/g) || []).length,
|
||||
pair: reasons.filter(r => /does not accept|does not embed/.test(r)).length, statement: reasons.filter(r => /public values hash to/.test(r)).length,
|
||||
garbage: reasons.filter(r => /not a bincode SP1 proof|not a compressed SP1 proof/.test(r)).length, reasons: reasons.map(r => r.slice(0, 260)) };
|
||||
};
|
||||
|
||||
try {
|
||||
|
|
@ -250,9 +300,9 @@ try {
|
|||
log(`A at DAA ${d}, chain block ${tip}`);
|
||||
if (d >= floor) log(`WARNING: the floor ${floor} was crossed before the first forge (DAA ${d}); lengthen --floor`);
|
||||
// outside the 10-DAA exclusive window, where anyone may claim the shard (spec 07 7.2 item 4)
|
||||
const n1 = Math.max(1, tip - 15);
|
||||
const f1 = await forge(n1, 'below');
|
||||
await sleep(45000);
|
||||
const f1 = SUCCESSION ? await forgeSuccession('below', 45000) : await forge(Math.max(1, tip - 15), 'below');
|
||||
const n1 = f1.block;
|
||||
if (!SUCCESSION) await sleep(45000);
|
||||
const o1 = await observe(n1);
|
||||
result.phases.below = { daaAtForge: d, forge: f1, observed: o1, refusals: { H1: refusals(H1), H2: refusals(H2) } };
|
||||
log(`below: H1 paid ${JSON.stringify(o1.paid)}; carried ${JSON.stringify(o1.carried)}`);
|
||||
|
|
@ -260,11 +310,12 @@ try {
|
|||
if (floor !== Infinity) {
|
||||
while ((d = await daa(A)) < floor + 5) { log(`waiting for the floor: DAA ${d} of ${floor}`); await sleep(10000); }
|
||||
} else await sleep(AFTER * 1000 / 2);
|
||||
if (SUCCESSION) await rejoin(A, H1, 'before the window forge');
|
||||
tip = await tipNumber(A);
|
||||
const n2 = Math.max(1, tip - 15);
|
||||
const beforeRefusals = { H1: refusals(H1), H2: refusals(H2) };
|
||||
const f2 = await forge(n2, 'at-floor');
|
||||
await sleep(AFTER * 1000);
|
||||
const f2 = SUCCESSION ? await forgeSuccession('at-floor', AFTER * 1000) : await forge(Math.max(1, tip - 15), 'at-floor');
|
||||
const n2 = f2.block;
|
||||
if (!SUCCESSION) await sleep(AFTER * 1000);
|
||||
const o2 = await observe(n2);
|
||||
const afterRefusals = { H1: refusals(H1), H2: refusals(H2) };
|
||||
result.phases.atFloor = { daaAtForge: d, forge: f2, observed: o2, refusalsBefore: beforeRefusals, refusalsAfter: afterRefusals };
|
||||
|
|
@ -273,28 +324,27 @@ try {
|
|||
if (SUCCESSION) {
|
||||
const h = Number(SUCCESSION), w = Number(WINDOW);
|
||||
while ((d = await daa(A)) < h + w + 5) { log(`waiting for the window's end: DAA ${d} of ${h + w}`); await sleep(10000); }
|
||||
await rejoin(A, H1, 'before the after-window forge');
|
||||
tip = await tipNumber(A);
|
||||
const n3 = Math.max(1, tip - 15);
|
||||
const r2 = { H1: refusals(H1), H2: refusals(H2) };
|
||||
const f3 = await forge(n3, 'after-window');
|
||||
await sleep(AFTER * 1000);
|
||||
const f3 = await forgeSuccession('after-window', AFTER * 1000);
|
||||
const n3 = f3.block;
|
||||
const o3 = await observe(n3);
|
||||
const r3 = { H1: refusals(H1), H2: refusals(H2) };
|
||||
result.phases.afterWindow = { daaAtForge: d, forge: f3, observed: o3, refusalsBefore: r2, refusalsAfter: r3 };
|
||||
const rb = result.phases.below.refusals, rw = afterRefusals;
|
||||
// below H: the next-pair proof refused on its pair; in the window: no new pair refusal, both on statements;
|
||||
// after H+W: the prior-pair proof refused on its pair
|
||||
const pairBelow = rb.H1.pair > 0;
|
||||
const pairWindow = rw.H1.pair - rb.H1.pair;
|
||||
const stmtWindow = rw.H1.statement - rb.H1.statement;
|
||||
const pairAfter = r3.H1.pair - r2.H1.pair;
|
||||
// below H: the next-pair proof refused on its pair, the prior-pair proof on its statement (another chain's);
|
||||
// in the window: both on their statements, none on a pair; after H+W: the prior-pair proof on its pair
|
||||
const pairBelow = rb.H1.pair, stmtBelow = rb.H1.statement;
|
||||
const pairWindow = rw.H1.pair - rb.H1.pair, stmtWindow = rw.H1.statement - rb.H1.statement;
|
||||
const pairAfter = r3.H1.pair - r2.H1.pair, stmtAfter = r3.H1.statement - r2.H1.statement;
|
||||
const nothingPaid = (o1.paid || []).length === 0 && (o2.paid || []).length === 0 && (o3.paid || []).length === 0;
|
||||
const pass = pairBelow && pairWindow === 0 && stmtWindow > 0 && pairAfter > 0 && nothingPaid;
|
||||
result.verdict = { pairBelow, pairWindow, stmtWindow, pairAfter, nothingPaid, pass };
|
||||
const pass = pairBelow >= 1 && stmtBelow >= 1 && pairWindow === 0 && stmtWindow >= 2 && pairAfter >= 1 && stmtAfter >= 1 && nothingPaid;
|
||||
result.verdict = { pairBelow, stmtBelow, pairWindow, stmtWindow, pairAfter, stmtAfter, nothingPaid, pass };
|
||||
result.endedAt = new Date().toISOString();
|
||||
mkdirSync(OUT.replace(/\/[^/]+$/, ''), { recursive: true });
|
||||
writeFileSync(OUT, JSON.stringify(result, null, 2));
|
||||
log(`RESULT ${pass ? 'PASS' : 'FAIL'}: below H pair refusals=${rb.H1.pair}; window new pair refusals=${pairWindow}, new statement refusals=${stmtWindow}; after H+W new pair refusals=${pairAfter}; nothing paid=${nothingPaid}; ${OUT}`);
|
||||
log(`RESULT ${pass ? 'PASS' : 'FAIL'}: below H pair=${pairBelow} statement=${stmtBelow}; window pair=${pairWindow} statement=${stmtWindow}; after H+W pair=${pairAfter} statement=${stmtAfter}; nothing paid=${nothingPaid}; ${OUT}`);
|
||||
await stopAll();
|
||||
process.exit(pass ? 0 : 1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ TOKEN_FILE="$HOME/.config/igneum/dl-token"
|
|||
SIGNER="$ROOT/app/igneum-app/target/release/igneum-ota-sign"
|
||||
PRODUCT="app"
|
||||
|
||||
VERSION="" MAC="" WIN="" NOTES="" ACTIVATION="" DEADLINE="" MIN_SUPPORTED="" CHANNEL="devnet" BASE="" DEST="" DEPLOY=0 VERIFY_ONLY=0 TRIES=12
|
||||
RELEASE_SHA="" CANARY_GUARD_SELF_TEST=0 VERSION="" MAC="" WIN="" NOTES="" ACTIVATION="" DEADLINE="" MIN_SUPPORTED="" CHANNEL="devnet" BASE="" DEST="" DEPLOY=0 VERIFY_ONLY=0 TRIES=12
|
||||
NODE_BIN="" NET_DIGEST="" MOVE_CLOCK="" DIGEST_GUARD_SELF_TEST=0
|
||||
OVERRIDE="" TUNING_FILE="" NO_TUNING=0 PUBLIC=0
|
||||
while [ $# -gt 0 ]; do
|
||||
|
|
@ -83,6 +83,8 @@ while [ $# -gt 0 ]; do
|
|||
--network-digest) NET_DIGEST="$2"; shift 2 ;; # the network's CURRENT digest (a 64-hex, or "log:<file or journal:unit>[@user@host]" read by tools/digest-read.sh on the hub)
|
||||
--move-clock) MOVE_CLOCK="$2"; shift 2 ;; # "HH:MM UTC, <reason>": the move's clock, when the entry's digest differs by design; logged in the notes
|
||||
--self-test-digest-guard) DIGEST_GUARD_SELF_TEST=1; shift ;;
|
||||
--release-sha) RELEASE_SHA="$2"; shift 2 ;; # rule 33 (8 Oct 2026): the release tip's commit; its fresh-install canary record must read PASS (tools/ci/canary-check.sh)
|
||||
--self-test-canary-guard) CANARY_GUARD_SELF_TEST=1; shift ;;
|
||||
*) echo "unknown argument: $1" >&2; exit 2 ;;
|
||||
esac
|
||||
done
|
||||
|
|
@ -109,6 +111,47 @@ if [ "$DIGEST_GUARD_SELF_TEST" = 1 ]; then
|
|||
echo "digest guard self-test: a differing digest is refused without a move clock and accepted with one; an equal digest passes; the digest reader parses"
|
||||
exit 0
|
||||
fi
|
||||
# Rule 33 (the founder, 8 October 2026, 21:3x UK, "no more lost time"): a release entry may not publish without a fresh-install
|
||||
# canary record for its sha (install from the artefact on a non-AVX-512 box with an empty datadir, genesis to tip, five minutes
|
||||
# mining with zero refusals and an accepted block, one shard claimed, proved and paid or queued, a bounded quit, every line read
|
||||
# back): tools/ci/canary/<sha>.json read by tools/ci/canary-check.sh. A write to a real downloads folder needs --release-sha and a
|
||||
# PASS record; a loopback --base-url test write and --verify-only do not publish and are not gated.
|
||||
canary_guard() { # <release sha> [kind ...] -> 0 pass (the lines printed), 1 refused; a kind (mac, windows) asks for that entry's own artefact block
|
||||
local sha="$1"; shift; local k
|
||||
[ -n "$sha" ] || { echo "canary guard: REFUSED: a release entry needs --release-sha <release tip commit> with a fresh-install canary record (rule 33; tools/ci/canary-check.sh --form)"; return 1; }
|
||||
if [ $# -eq 0 ]; then bash "$TOOLS/ci/canary-check.sh" "$sha" || { echo "canary guard: REFUSED: the entry's sha ${sha:0:12} has no PASS fresh-install canary record (rule 33)"; return 1; }; return 0; fi
|
||||
for k in "$@"; do bash "$TOOLS/ci/canary-check.sh" "$sha" --artefact "$k" || { echo "canary guard: REFUSED: the $k entry's sha ${sha:0:12} has no PASS fresh-install canary record for its own artefact (rule 33)"; return 1; }; done
|
||||
}
|
||||
if [ "$CANARY_GUARD_SELF_TEST" = 1 ]; then
|
||||
bash "$TOOLS/ci/canary-check.sh" --self-test >/dev/null || exit 1
|
||||
d=$(mktemp -d); trap 'rm -rf "$d"' EXIT; S=0123456789abcdef0123456789abcdef01234567
|
||||
canary_guard "" >/dev/null 2>&1 && { echo "canary guard self-test: FAIL: an entry with no --release-sha was accepted"; exit 1; }
|
||||
CANARY_DIR="$d" canary_guard "$S" >/dev/null 2>&1 && { echo "canary guard self-test: FAIL: a sha with no record was accepted"; exit 1; }
|
||||
bash "$TOOLS/ci/canary-check.sh" --form | python3 -c "
|
||||
import json,sys; r=json.load(sys.stdin); r['sha']='$S'; r['artefact']['sha256']='ab'*32; r['box']={'host':'build-4','isa_line':'kit-isa: clean'}
|
||||
r['sync'].update(tip_height=10, seconds=1); r['quit']['seconds']=1; r['recorded_at']='t'; r['recorded_by']='self-test'; json.dump(r, open('$d/$S.json','w'))"
|
||||
CANARY_DIR="$d" canary_guard "$S" >/dev/null 2>&1 || { echo "canary guard self-test: FAIL: a sha with a PASS record was refused"; exit 1; }
|
||||
python3 -c "import json; p='$d/$S.json'; r=json.load(open(p)); r['mining']['refusals']=1; json.dump(r, open(p,'w'))"
|
||||
CANARY_GUARD_FAILED=0; CANARY_DIR="$d" canary_guard "$S" >/dev/null 2>&1 && { echo "canary guard self-test: FAIL: a record with a refusal was accepted"; exit 1; }
|
||||
python3 -c "
|
||||
import json,copy; p='$d/$S.json'; r=json.load(open(p)); blk={k:r[k] for k in ('artefact','box','datadir','sync','mining','shard','quit','lines_read_back')}; blk['mining']['refusals']=0; arts=[]
|
||||
for kind in ('fleet','windows','mac'):
|
||||
b=copy.deepcopy(blk); b['kind']=kind; arts.append(b)
|
||||
arts[1]['mining']['refusals']=3
|
||||
json.dump({'sha':r['sha'],'artefacts':arts,'verdict':'PASS','recorded_at':'t','recorded_by':'self-test'}, open(p,'w'))"
|
||||
CANARY_DIR="$d" canary_guard "$S" mac >/dev/null 2>&1 || { echo "canary guard self-test: FAIL: the mac entry was refused though its own block passes"; exit 1; }
|
||||
CANARY_DIR="$d" canary_guard "$S" windows >/dev/null 2>&1 && { echo "canary guard self-test: FAIL: the windows entry passed on a failing windows block"; exit 1; }
|
||||
CANARY_DIR="$d" canary_guard "$S" mac windows >/dev/null 2>&1 && { echo "canary guard self-test: FAIL: a mac plus windows publish passed with the windows block failing"; exit 1; }
|
||||
echo "canary guard self-test: no sha, no record and a failing record are refused; a PASS record passes; an entry publishes on its own artefact's block (mac passes, windows refused on its own failing block); the record check's own self-test passes"
|
||||
exit 0
|
||||
fi
|
||||
case "${BASE:-}" in http://127.0.0.1*|http://localhost*|http://\[::1\]*) CANARY_GATED=0 ;; *) CANARY_GATED=1 ;; esac
|
||||
if [ "$VERIFY_ONLY" != 1 ] && [ "$CANARY_GATED" = 1 ] && [ -z "${IGNEUM_CANARY_SELF_TEST_SKIP:-}" ]; then
|
||||
KINDS=""; [ -n "$MAC" ] && KINDS="$KINDS mac"; [ -n "$WIN" ] && KINDS="$KINDS windows"
|
||||
# shellcheck disable=SC2086
|
||||
canary_guard "$RELEASE_SHA" $KINDS || exit 1
|
||||
NOTES="${NOTES:+$NOTES; }release: $RELEASE_SHA (fresh-install canary PASS)"
|
||||
fi
|
||||
if [ -n "$NODE_BIN" ] || [ -n "$NET_DIGEST" ]; then
|
||||
[ -n "$NODE_BIN" ] && [ -n "$NET_DIGEST" ] || { echo "the digest guard needs both --node-bin and --network-digest" >&2; exit 2; }
|
||||
ENTRY_DIGEST=$(bash "$TOOLS/digest-read.sh" binary "$NODE_BIN") || exit 1
|
||||
|
|
|
|||
|
|
@ -32,10 +32,11 @@ KEY="$CFG/ota-signing-key"; PUB_KEY="$CFG/ota-signing-key.pub"
|
|||
SIGNER="${IGNEUM_OTA_SIGN:-$ROOT/app/igneum-app/target/release/igneum-ota-sign}" # a built signer elsewhere (another worktree)
|
||||
HOST="https://dl.igneum.network"
|
||||
|
||||
DO_APP=0 DO_WALLET=0 HIVE="" DO_ALIASES=0 DRY=0 DEPLOY=0 VERIFY=0 PRUNE=1 DEST="" BASE="" TRIES=12
|
||||
RELEASE_SHA="" DO_APP=0 DO_WALLET=0 HIVE="" DO_ALIASES=0 DRY=0 DEPLOY=0 VERIFY=0 PRUNE=1 DEST="" BASE="" TRIES=12
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--app) DO_APP=1; shift ;;
|
||||
--release-sha) RELEASE_SHA="$2"; shift 2 ;; # rule 33: the release tip's commit (read from the app manifest's notes when not given); its canary record must read PASS
|
||||
--wallet) DO_WALLET=1; shift ;;
|
||||
--hive) HIVE="$2"; shift 2 ;;
|
||||
--aliases) DO_ALIASES=1; shift ;;
|
||||
|
|
@ -107,6 +108,26 @@ PY
|
|||
log " $name: $(python3 -c 'import json,sys; m=json.load(open(sys.argv[1])); print(m.get("version"), "+".join(m.get("platforms",{})))' "$out") written, signed, verified; URLs under $BASE_PUB"
|
||||
}
|
||||
|
||||
# Rule 33 (8 October 2026): nothing goes to dl/public/ for a release whose sha has no PASS fresh-install canary record. The app
|
||||
# manifest carries "release: <sha>" in its notes (publish-manifest.sh --release-sha writes it); --release-sha overrides or supplies it
|
||||
# for the HiveOS package. tools/ci/canary-check.sh reads tools/ci/canary/<sha>.json.
|
||||
canary_gate() { # <sha> <what> [kind ...]: each kind (mac, windows, hive) must have its own PASS artefact block; no kind = the whole record
|
||||
local sha="$1" what="$2"; shift 2; local k; local chk; chk="$(cd "$(dirname "$0")/../.." && pwd)/tools/ci/canary-check.sh"
|
||||
[ -n "$sha" ] || { echo "canary guard: REFUSED: $what names no release sha (publish the token entry with publish-manifest.sh --release-sha, or pass --release-sha here); rule 33" >&2; return 1; }
|
||||
if [ $# -eq 0 ]; then bash "$chk" "$sha" | scrub || { echo "canary guard: REFUSED: ${sha:0:12} has no PASS fresh-install canary record; rule 33" >&2; return 1; }; return 0; fi
|
||||
for k in "$@"; do bash "$chk" "$sha" --artefact "$k" | scrub || { echo "canary guard: REFUSED: $what: the $k entry's sha ${sha:0:12} has no PASS fresh-install canary record for its own artefact; rule 33" >&2; return 1; }; done
|
||||
}
|
||||
if [ "$DO_APP" = 1 ] && [ -z "${IGNEUM_CANARY_SELF_TEST_SKIP:-}" ]; then
|
||||
sha="$RELEASE_SHA"
|
||||
[ -n "$sha" ] || sha=$(python3 -c 'import json,re,sys; m=json.load(open(sys.argv[1])); x=re.search(r"release: ([0-9a-f]{8,40})", str(m.get("notes",""))); print(x.group(1) if x else "")' "$SRC/igneum-app-latest.json" 2>/dev/null || true)
|
||||
kinds=$(python3 -c 'import json,sys; m=json.load(open(sys.argv[1])); ks=[]
|
||||
for p in m.get("platforms",{}):
|
||||
ks.append("mac" if "mac" in p.lower() or "darwin" in p.lower() else "windows" if "win" in p.lower() else p)
|
||||
print(" ".join(ks))' "$SRC/igneum-app-latest.json" 2>/dev/null || true)
|
||||
# shellcheck disable=SC2086
|
||||
canary_gate "$sha" "the app manifest" $kinds || exit 1
|
||||
fi
|
||||
if [ -n "$HIVE" ] && [ -z "${IGNEUM_CANARY_SELF_TEST_SKIP:-}" ]; then canary_gate "$RELEASE_SHA" "the HiveOS package" hive || exit 1; fi
|
||||
if [ "$DO_APP" = 1 ]; then log "app manifest -> dl/public/"; publish_manifest igneum-app-latest.json; fi
|
||||
if [ "$DO_WALLET" = 1 ]; then log "wallet manifest -> dl/public/"; publish_manifest igneum-wallet-latest.json; fi
|
||||
if [ -n "$HIVE" ]; then
|
||||
|
|
|
|||
57
proto-cuda/nvrtc/packfile-fuzz.c
Normal file
57
proto-cuda/nvrtc/packfile-fuzz.c
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
/* packfile-fuzz.c: POW-01's malformed-input half for the pack reader (8 October 2026). Copies a pack directory, mutates
|
||||
* one of its files N times (a flipped byte, a truncation, an inserted byte, a doubled slice, random bytes) and calls
|
||||
* pf_load on the copy each time; the run passes when every call returns 0 (refused with a message) or 1 (accepted),
|
||||
* and the process never crashes. One line per 1,000 rounds, a RESULT line at the end.
|
||||
* cc -O2 -o packfile-fuzz packfile-fuzz.c && ./packfile-fuzz <pack dir> <rounds> <scratch dir>
|
||||
*/
|
||||
#include "packfile.h"
|
||||
#include <sys/stat.h>
|
||||
|
||||
static uint64_t rs = 0x1234567;
|
||||
static uint64_t rnext(void) { rs += 0x9e3779b97f4a7c15ull; uint64_t z = rs; z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9ull; z = (z ^ (z >> 27)) * 0x94d049bb133111ebull; return z ^ (z >> 31); }
|
||||
static size_t below(size_t n) { return n ? (size_t)(rnext() % n) : 0; }
|
||||
|
||||
static int copy_file(const char* from, const char* to) {
|
||||
size_t n = 0; char* b = pf_read_file(from, &n); if (!b) { remove(to); return 0; }
|
||||
FILE* f = fopen(to, "wb"); if (!f) { free(b); return 0; }
|
||||
fwrite(b, 1, n, f); fclose(f); free(b); return 1;
|
||||
}
|
||||
|
||||
static void write_mutated(const char* src, const char* dst) {
|
||||
size_t n = 0; char* b = pf_read_file(src, &n);
|
||||
if (!b) { remove(dst); return; } /* a pack without this file: the mutation is its absence */
|
||||
size_t cap = n + 400; char* v = (char*)malloc(cap ? cap : 1); size_t len = n; if (n) memcpy(v, b, n);
|
||||
switch (below(6)) {
|
||||
case 0: if (len) v[below(len)] ^= (char)(1 << below(8)); break;
|
||||
case 1: len = below(len + 1); break;
|
||||
case 2: { size_t i = below(len + 1); memmove(v + i + 1, v + i, len - i); v[i] = (char)rnext(); len++; } break;
|
||||
case 3: if (len > 1) { size_t a = below(len), bl = below(len - a); if (bl > 300) bl = 300; memmove(v + a + bl, v + a, len - a); memcpy(v + a, b + a, bl); len += bl; } break;
|
||||
case 4: len = below(300); for (size_t i = 0; i < len; i++) v[i] = (char)rnext(); break;
|
||||
default: if (len) v[below(len)] = (char)rnext(); break;
|
||||
}
|
||||
FILE* f = fopen(dst, "wb"); if (f) { fwrite(v, 1, len, f); fclose(f); }
|
||||
free(v); free(b);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
if (argc < 4) { fprintf(stderr, "usage: packfile-fuzz <pack dir> <rounds> <scratch dir>\n"); return 2; }
|
||||
const char* pack = argv[1]; long rounds = atol(argv[2]); const char* scratch = argv[3];
|
||||
const char* files[] = { "program.h", "vectors.h", "seeds.txt", "memhard.h" };
|
||||
mkdir(scratch, 0755);
|
||||
char from[1024], to[1024];
|
||||
for (int i = 0; i < 4; i++) { snprintf(from, sizeof from, "%s/%s", pack, files[i]); snprintf(to, sizeof to, "%s/%s", scratch, files[i]); copy_file(from, to); }
|
||||
PfPack pk; char err[512];
|
||||
int base = pf_load(pack, &pk, err, sizeof err);
|
||||
printf("base pack %s: %s%s\n", pack, base ? "accepted" : "refused: ", base ? "" : err);
|
||||
long accepted = 0, refused = 0;
|
||||
for (long r = 0; r < rounds; r++) {
|
||||
int which = (int)below(4);
|
||||
for (int i = 0; i < 4; i++) { snprintf(from, sizeof from, "%s/%s", pack, files[i]); snprintf(to, sizeof to, "%s/%s", scratch, files[i]); if (i == which) write_mutated(from, to); else copy_file(from, to); }
|
||||
memset(&pk, 0, sizeof pk); err[0] = 0;
|
||||
int ok = pf_load(scratch, &pk, err, sizeof err);
|
||||
if (ok) accepted++; else refused++;
|
||||
if ((r + 1) % 1000 == 0) printf("round %ld: accepted %ld refused %ld\n", r + 1, accepted, refused);
|
||||
}
|
||||
printf("RESULT packfile-fuzz pack=%s rounds=%ld accepted=%ld refused=%ld crashes=0 verdict=PASS\n", pack, rounds, accepted, refused);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -333,11 +333,13 @@ static int pf_load(const char* dir, PfPack* pk, char* err, size_t cap) {
|
|||
* kernel text, so this loader needs nothing new beyond the number and the class token), generator 5 is class v5
|
||||
* (proof of stored state, 7 October 2026: class v4 over a dataset keyed by the window's state leaves, leaves.bin,
|
||||
* which the host uploads for igneum_build; the kernel text carries the leaf read). */
|
||||
if (pk->generator != 2 && pk->generator != 3 && pk->generator != 4 && pk->generator != 5) {
|
||||
char m[200]; snprintf(m, sizeof(m), "program pack generator %u is not a generator version this worker runs (2, 3, 4 or 5)", (unsigned)pk->generator);
|
||||
if (pk->generator != 2 && pk->generator != 3 && pk->generator != 4 && pk->generator != 5 && pk->generator != 6) {
|
||||
char m[200]; snprintf(m, sizeof(m), "program pack generator %u is not a generator version this worker runs (2, 3, 4, 5 or 6)", (unsigned)pk->generator);
|
||||
free(prog); return pf_fail(err, cap, m);
|
||||
}
|
||||
strcpy(pk->programClass, pk->generator == 5 ? "v5" : pk->generator == 4 ? "v4" : pk->generator == 3 ? "v3" : "v2");
|
||||
/* generator 6 (class v6, the Igneum 2.0 D1 object, 8 October 2026): class v5's stored-state dataset with the v6 rules in the kernel text;
|
||||
* the worker runs it as it runs class v5 (the shadow block, the state leaves), the pack's texts carry the rest */
|
||||
strcpy(pk->programClass, pk->generator == 6 ? "v6" : pk->generator == 5 ? "v5" : pk->generator == 4 ? "v4" : pk->generator == 3 ? "v3" : "v2");
|
||||
{
|
||||
/* Counter ASIC 3.0 (6 October 2026): the shadow block marks class v4. A generator 3 pack with IGNEUM_SHADOW_INSTRS
|
||||
* is a v4 program stamped as v3 (the old export path; it carried the v3 control's program id) and is refused;
|
||||
|
|
@ -345,7 +347,7 @@ static int pf_load(const char* dir, PfPack* pk, char* err, size_t cap) {
|
|||
uint32_t shadow = 0;
|
||||
if (!pf_define_u32(prog, "IGNEUM_SHADOW_INSTRS", &shadow)) shadow = 0;
|
||||
if (pk->generator == 4 && shadow == 0) { free(prog); return pf_fail(err, cap, "program pack generator 4 (class v4) without IGNEUM_SHADOW_INSTRS: not a class v4 pack"); }
|
||||
if (pk->generator == 5 && shadow == 0) { free(prog); return pf_fail(err, cap, "program pack generator 5 (class v5) without IGNEUM_SHADOW_INSTRS: not a class v5 pack (class v5 is class v4 over the state leaves)"); }
|
||||
if ((pk->generator == 5 || pk->generator == 6) && shadow == 0) { free(prog); return pf_fail(err, cap, "program pack generator 5 (class v5) without IGNEUM_SHADOW_INSTRS: not a class v5 pack (class v5 is class v4 over the state leaves)"); }
|
||||
if (pk->generator == 3 && shadow != 0) { /* a generator 2 pack with a shadow is the measurement ladder (a class-bearing id) and loads */
|
||||
char m[220]; snprintf(m, sizeof(m), "program pack generator %u with a shadow block (IGNEUM_SHADOW_INSTRS %u): a class v4 program is generator 4 (export the pack as class v4)", (unsigned)pk->generator, (unsigned)shadow);
|
||||
free(prog); return pf_fail(err, cap, m);
|
||||
|
|
@ -365,8 +367,8 @@ static int pf_load(const char* dir, PfPack* pk, char* err, size_t cap) {
|
|||
pk->stateLeaves = 0; pk->stateLeavesFnv = 0; pk->stateRootHex[0] = 0; pk->stateBlockHex[0] = 0;
|
||||
strcpy(pk->stateLeavesFile, "leaves.bin");
|
||||
if (!pf_define_u32(prog, "IGNEUM_STATE_LEAVES", &pk->stateLeaves)) pk->stateLeaves = 0;
|
||||
if (pk->generator == 5 && pk->stateLeaves == 0) { free(prog); return pf_fail(err, cap, "program pack generator 5 (class v5) without IGNEUM_STATE_LEAVES: no state leaves to key the dataset (export the pack with --state)"); }
|
||||
if (pk->generator != 5 && pk->stateLeaves != 0) {
|
||||
if ((pk->generator == 5 || pk->generator == 6) && pk->stateLeaves == 0) { free(prog); return pf_fail(err, cap, "program pack generator 5 (class v5) without IGNEUM_STATE_LEAVES: no state leaves to key the dataset (export the pack with --state)"); }
|
||||
if (pk->generator != 5 && pk->generator != 6 && pk->stateLeaves != 0) {
|
||||
char m[200]; snprintf(m, sizeof(m), "program pack generator %u carries IGNEUM_STATE_LEAVES %u: state leaves belong to class v5 (generator 5)", (unsigned)pk->generator, (unsigned)pk->stateLeaves);
|
||||
free(prog); return pf_fail(err, cap, m);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2992,9 +2992,10 @@ final class ServeDataset {
|
|||
/// Counter ASIC 2.0 and 3.0: the classes this worker runs from a prepared pack only (never from the Swift version 2
|
||||
/// generator): class v3 (generator 3) and class v4 (generator 4, class v3 plus the latency-shadow block, which is in
|
||||
/// the pack's own program_bound.metal). Each carries an era seed.
|
||||
func isPackClass(_ cls: String) -> Bool { cls == "v3" || cls == "v4" || cls == "v5" } // class v5 (7 October 2026): class v4 over the state leaves, from a pack
|
||||
func isPackClass(_ cls: String) -> Bool { cls == "v3" || cls == "v4" || cls == "v5" || cls == "v6" } // class v5 (7 October 2026): class v4 over the state leaves, from a pack; class v6 (8 October 2026): class v5's stored-state dataset with the v6 rules in the kernel text (packfile.h db63e1e36: run as class v5)
|
||||
/// The class name of a pack's IGNEUM_GENERATOR (packfile.h's rule).
|
||||
func packClassOf(generator: UInt32) -> String { generator == 5 ? "v5" : generator == 4 ? "v4" : generator == 3 ? "v3" : "v2" }
|
||||
func packClassOf(generator: UInt32) -> String { generator == 6 ? "v6" : generator == 5 ? "v5" : generator == 4 ? "v4" : generator == 3 ? "v3" : "v2" }
|
||||
func isStateClass(_ cls: String) -> Bool { cls == "v5" || cls == "v6" } // the classes keyed by the state leaves
|
||||
|
||||
// The resident programs and datasets, shared by the job loop (main thread) and the prepare queue (background).
|
||||
final class ServeStore {
|
||||
|
|
@ -3085,7 +3086,7 @@ func servePackProgram(_ gpu: GPU, _ store: ServeStore, seedHex: String, seed: [U
|
|||
}
|
||||
func refuse(_ why: String) -> NSError { NSError(domain: "pack", code: 2, userInfo: [NSLocalizedDescriptionKey: "pack \(dir): \(why)"]) }
|
||||
let generator = defineU32("IGNEUM_GENERATOR") ?? 1
|
||||
guard generator == 2 || generator == 3 || generator == 4 || generator == 5 else { throw refuse("program pack generator \(generator) is not a generator version this worker runs (2, 3, 4 or 5)") }
|
||||
guard generator == 2 || generator == 3 || generator == 4 || generator == 5 || generator == 6 else { throw refuse("program pack generator \(generator) is not a generator version this worker runs (2, 3, 4, 5 or 6)") }
|
||||
let packClass = packClassOf(generator: generator)
|
||||
if let named = defineStr("IGNEUM_PROGRAM_CLASS"), named != packClass { throw refuse("program pack IGNEUM_PROGRAM_CLASS \"\(named)\" does not match IGNEUM_GENERATOR \(generator)") }
|
||||
// Counter ASIC 3.0 (6 October 2026): the shadow block marks class v4 (packfile.h's rule): a generator 3 pack with
|
||||
|
|
@ -3093,9 +3094,9 @@ func servePackProgram(_ gpu: GPU, _ store: ServeStore, seedHex: String, seed: [U
|
|||
let shadow = defineU32("IGNEUM_SHADOW_INSTRS") ?? 0
|
||||
if generator == 4 && shadow == 0 { throw refuse("program pack generator 4 (class v4) without IGNEUM_SHADOW_INSTRS: not a class v4 pack") }
|
||||
// class v5 (7 October 2026) is class v4 over the state leaves: the shadow block and IGNEUM_STATE_LEAVES both mark it
|
||||
if generator == 5 && shadow == 0 { throw refuse("program pack generator 5 (class v5) without IGNEUM_SHADOW_INSTRS: not a class v5 pack") }
|
||||
if generator == 5 && (defineU32("IGNEUM_STATE_LEAVES") ?? 0) == 0 { throw refuse("program pack generator 5 (class v5) without IGNEUM_STATE_LEAVES: no state leaves to key the dataset (export the pack with --state)") }
|
||||
if generator != 5 && (defineU32("IGNEUM_STATE_LEAVES") ?? 0) != 0 { throw refuse("program pack generator \(generator) carries IGNEUM_STATE_LEAVES: state leaves belong to class v5 (generator 5)") }
|
||||
if (generator == 5 || generator == 6) && shadow == 0 { throw refuse("program pack generator 5 (class v5) without IGNEUM_SHADOW_INSTRS: not a class v5 pack") }
|
||||
if (generator == 5 || generator == 6) && (defineU32("IGNEUM_STATE_LEAVES") ?? 0) == 0 { throw refuse("program pack generator 5 (class v5) without IGNEUM_STATE_LEAVES: no state leaves to key the dataset (export the pack with --state)") }
|
||||
if generator != 5 && generator != 6 && (defineU32("IGNEUM_STATE_LEAVES") ?? 0) != 0 { throw refuse("program pack generator \(generator) carries IGNEUM_STATE_LEAVES: state leaves belong to class v5 (generator 5)") }
|
||||
if generator == 3 && shadow != 0 { throw refuse("program pack generator \(generator) with a shadow block (IGNEUM_SHADOW_INSTRS \(shadow)): a class v4 program is generator 4 (export the pack as class v4)") }
|
||||
let eraHex = defineStr("IGNEUM_ERA_SEED_HEX") ?? ""
|
||||
if wantClass != "" && wantClass != packClass { throw refuse("program class mismatch: this pack is class \(packClass), the line names class \(wantClass) (export the pack again)") }
|
||||
|
|
@ -3162,7 +3163,9 @@ func servePackDataset(_ gpu: GPU, _ store: ServeStore, dayHex: String, dir: Stri
|
|||
guard let fillFn = lib.makeFunction(name: "igneum_cache_fill"), let buildFn = lib.makeFunction(name: "igneum_build") else { throw refuse("memhard.metal lacks igneum_cache_fill or igneum_build") }
|
||||
let fillPipe = try gpu.device.makeComputePipelineState(function: fillFn)
|
||||
let buildPipe = try gpu.device.makeComputePipelineState(function: buildFn)
|
||||
let words = 1 << datasetLog2
|
||||
// ds55 (the class v6 research packs, 8 October 2026): a non-power-of-two dataset carries IGNEUM_DATASET_WORDS (the
|
||||
// buffer's size) and IGNEUM_DATASET_ITEMS beside IGNEUM_DATASET_LOG2 (the floor); the kernel text maps (src * words) >> 32
|
||||
let words = defineU64("IGNEUM_DATASET_WORDS").map { Int($0) } ?? (1 << datasetLog2)
|
||||
// Class v5 (docs/design/class-v5-stored-state.md, 7 October 2026): the window's state leaves, leaves.bin beside program.h
|
||||
// (IGNEUM_STATE_LEAVES leaves of 16 little-endian words), checked against the pack's count and FNV-1a 64
|
||||
// (IGNEUM_STATE_LEAVES_FNV64) and bound as buffer 2 of igneum_build with the count in buffer 3 (packbench.swift's shape,
|
||||
|
|
@ -3173,7 +3176,7 @@ func servePackDataset(_ gpu: GPU, _ store: ServeStore, dayHex: String, dir: Stri
|
|||
return UInt64(programH[Range(m.range(at: 1), in: programH)!], radix: 16)
|
||||
}
|
||||
let stateLeaves = defineU32("IGNEUM_STATE_LEAVES") ?? 0
|
||||
if (packClass == "v5") != (stateLeaves > 0) { throw refuse(packClass == "v5" ? "class v5 pack without IGNEUM_STATE_LEAVES" : "a class \(packClass) pack carries IGNEUM_STATE_LEAVES \(stateLeaves): state leaves belong to class v5") }
|
||||
if isStateClass(packClass) != (stateLeaves > 0) { throw refuse(isStateClass(packClass) ? "class v5 pack without IGNEUM_STATE_LEAVES" : "a class \(packClass) pack carries IGNEUM_STATE_LEAVES \(stateLeaves): state leaves belong to class v5") }
|
||||
var leavesBuf: MTLBuffer? = nil
|
||||
var nLeaves: UInt32 = 0
|
||||
if stateLeaves > 0 {
|
||||
|
|
|
|||
|
|
@ -93,8 +93,12 @@ let cacheFnvWant = hex64(vj["cache_fnv1a64"] as! String)
|
|||
let hotFnvWant: UInt64? = (vj["hot_fnv1a64"] as? String).map(hex64)
|
||||
|
||||
guard let device = MTLCreateSystemDefaultDevice(), let queue = device.makeCommandQueue() else { fail("no Metal device") }
|
||||
let words = 1 << datasetLog2
|
||||
let mask = UInt32(words - 1)
|
||||
// ds55 (the class v6 research packs, 8 October 2026): a non-power-of-two dataset carries IGNEUM_DATASET_WORDS and
|
||||
// IGNEUM_DATASET_ITEMS beside IGNEUM_DATASET_LOG2 (the floor); the buffer is sized by the words, the items by ITEMS,
|
||||
// and the kernel text maps an address as (src * words) >> 32, so the mask is the kernel's business, not this host's
|
||||
let datasetWordsDefine = defineU64("IGNEUM_DATASET_WORDS")
|
||||
let words = datasetWordsDefine.map { Int($0) } ?? (1 << datasetLog2)
|
||||
let mask = UInt32(truncatingIfNeeded: (1 << datasetLog2) - 1)
|
||||
let cacheWords = 1 << cacheLog2
|
||||
|
||||
func compile(_ file: String) -> MTLLibrary {
|
||||
|
|
@ -138,7 +142,7 @@ func fnv1a64(_ p: UnsafeRawPointer, _ n: Int) -> UInt64 {
|
|||
for i in 0..<n { h ^= UInt64(b[i]); h = h &* 0x100000001b3 }
|
||||
return h
|
||||
}
|
||||
let items = words / 16
|
||||
let items = defineU64("IGNEUM_DATASET_ITEMS").map { Int($0) } ?? (words / 16)
|
||||
// class v5 (docs/design/class-v5-stored-state.md): a pack with IGNEUM_STATE_LEAVES carries leaves.bin (16 words per leaf), bound
|
||||
// as buffer 2 of igneum_build with the count in buffer 3; the pack's FNV of the leaves is checked first
|
||||
var leavesBuf: MTLBuffer? = nil
|
||||
|
|
|
|||
|
|
@ -19,5 +19,7 @@
|
|||
"vk_sha256": "0x8b4da5bff86d963f4210a78e5d800a1cd00ab41b158f6962f4ac009edc249d4c"
|
||||
},
|
||||
"sp1_circuit_version": "v6.1.0",
|
||||
"sp1_crate_version": "6.8.1"
|
||||
"sp1_crate_version": "6.8.1",
|
||||
"source_commit": "15bb6cdd43bf0e52fca0df0f1dd880e124d03acf",
|
||||
"guest_input_format": 1
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,6 +74,11 @@ fn run() -> Result<()> {
|
|||
println!("RESULT id: {}", pinned.describe());
|
||||
return Ok(());
|
||||
}
|
||||
// A host whose code writes a guest input layout the pinned pair does not read never builds an input for it: refused
|
||||
// here with the source commit to build from (aggregate, chain and every fixture mode build guest inputs; id and the verify modes do not).
|
||||
if !mode.starts_with("verify") {
|
||||
pinned.manifest.check_input_format(igneum_prove_core::shard::GUEST_INPUT_FORMAT)?;
|
||||
}
|
||||
if mode == "verify" {
|
||||
// proving v0 (spec 7.7): the node's proof pool verifies a submitted shard proof off the consensus path
|
||||
return run_verify(&pinned, &arg("--proof").context("--proof <file>")?, &arg("--statement").context("--statement 0x<keccak of the public values>")?);
|
||||
|
|
|
|||
|
|
@ -61,6 +61,36 @@ pub struct Manifest {
|
|||
/// from its object, never from here).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub succession: Option<Succession>,
|
||||
/// V6-10 provenance (8 October 2026): the commit the pinned pair was built from; the host for this pair is built
|
||||
/// from it (the steward's release-manifest check reads it as an ancestor of the tree).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub source_commit: Option<String>,
|
||||
/// The guest input layout the pinned pair reads (`igneum_prove_core::shard::GUEST_INPUT_FORMAT` of its source; absent
|
||||
/// on a pin from before the field, which is format 1). A host whose code writes another layout refuses to start
|
||||
/// (22:0x UK, 8 October 2026: a host from master wrote format 3 to the 5 October guests and read "public values are
|
||||
/// 0 bytes" on a 3060 and a 4060; the kit's prover is built from `source_commit`, never from a tree of another format).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub guest_input_format: Option<u32>,
|
||||
}
|
||||
|
||||
impl Manifest {
|
||||
/// The input layout the pinned pair reads: the manifest's field, or 1 for a pin from before the field.
|
||||
pub fn input_format(&self) -> u32 {
|
||||
self.guest_input_format.unwrap_or(1)
|
||||
}
|
||||
/// Refuses a host whose code writes a layout the pinned pair does not read; the line names the source commit to
|
||||
/// build the prover from instead.
|
||||
pub fn check_input_format(&self, code_format: u32) -> Result<()> {
|
||||
let pinned = self.input_format();
|
||||
if pinned == code_format {
|
||||
return Ok(());
|
||||
}
|
||||
anyhow::bail!(
|
||||
"this host writes guest input format {code_format} and the pinned pair (shard {}) reads format {pinned}: the prover for this pair is built from the manifest's source commit {}, never from this tree (or the pin moves with the code: proving/igneum-prove/pin-guests.sh)",
|
||||
self.shard.program_id,
|
||||
self.source_commit.as_deref().unwrap_or("(absent: a pin from before provenance; its source is the commit that last changed elf/igneum-prove-program.elf)")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// The prior pair's block: the same per-program fields as the top level and the time it was pinned.
|
||||
|
|
@ -227,6 +257,36 @@ pub fn claimed_program_id(proof: &SP1ProofWithPublicValues) -> Option<B256> {
|
|||
mod tests {
|
||||
use super::*;
|
||||
|
||||
/// Known-failed first: a manifest naming another input layout refuses the host with the source commit to build from;
|
||||
/// a manifest naming none reads as format 1; the code's own format passes.
|
||||
#[test]
|
||||
fn a_pinned_pair_of_another_input_format_refuses_this_host_and_names_the_source_to_build() {
|
||||
let mut m = Manifest::embedded().unwrap();
|
||||
m.guest_input_format = Some(igneum_prove_core::shard::GUEST_INPUT_FORMAT + 1);
|
||||
m.source_commit = Some("abc123".into());
|
||||
let e = m.check_input_format(igneum_prove_core::shard::GUEST_INPUT_FORMAT).unwrap_err().to_string();
|
||||
assert!(e.contains("built from the manifest's source commit abc123"), "{e}");
|
||||
m.guest_input_format = None;
|
||||
assert_eq!(m.input_format(), 1, "a pin from before the field is format 1");
|
||||
if igneum_prove_core::shard::GUEST_INPUT_FORMAT != 1 {
|
||||
let e = m.check_input_format(igneum_prove_core::shard::GUEST_INPUT_FORMAT).unwrap_err().to_string();
|
||||
assert!(e.contains("reads format 1"), "{e}");
|
||||
}
|
||||
m.guest_input_format = Some(igneum_prove_core::shard::GUEST_INPUT_FORMAT);
|
||||
m.check_input_format(igneum_prove_core::shard::GUEST_INPUT_FORMAT).unwrap();
|
||||
// the embedded manifest itself: Pinned::load still answers (id and the verify modes work on a held pin), and the
|
||||
// input-format check either passes or names the source commit the prover is built from
|
||||
let embedded = Manifest::embedded().unwrap();
|
||||
Pinned::load().unwrap();
|
||||
match embedded.check_input_format(igneum_prove_core::shard::GUEST_INPUT_FORMAT) {
|
||||
Ok(()) => assert_eq!(embedded.input_format(), igneum_prove_core::shard::GUEST_INPUT_FORMAT),
|
||||
Err(e) => {
|
||||
assert!(e.to_string().contains("guest input format"), "{e}");
|
||||
assert!(embedded.source_commit.is_some(), "a held pin names the source commit its prover is built from");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn manifest_parses_and_names_both_programs() {
|
||||
let m = Manifest::embedded().unwrap();
|
||||
|
|
|
|||
|
|
@ -282,13 +282,25 @@ exit `$code
|
|||
$args = @('-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', "`"$wrap`"")
|
||||
$code = 1
|
||||
try {
|
||||
# the wait is on the task's own process with a cap, never -Wait (PC 2, 8 October 2026, 21:28 UK: -Wait covers every
|
||||
# descendant on the inherited console, so a task that started Igneum Miner held the agent for the app's whole life; the
|
||||
# relay went silent for half an hour). The cap is the task's timeout (flags.timeout_minutes, default 60); a task that
|
||||
# runs past it is ended by ITS pid and the result says so.
|
||||
$capMin = 60; try { if ($task.flags.timeout_minutes) { $capMin = [int]$task.flags.timeout_minutes } } catch {}
|
||||
if ($elevated -and -not (Is-Admin)) {
|
||||
Log 'task needs administrator and the agent is not elevated: asking (UAC prompt on this PC)'
|
||||
$p = Start-Process powershell.exe -ArgumentList $args -Verb RunAs -Wait -PassThru
|
||||
$p = Start-Process powershell.exe -ArgumentList $args -Verb RunAs -PassThru
|
||||
} else {
|
||||
$p = Start-Process powershell.exe -ArgumentList $args -NoNewWindow -Wait -PassThru
|
||||
$p = Start-Process powershell.exe -ArgumentList $args -NoNewWindow -PassThru
|
||||
}
|
||||
if (-not $p.WaitForExit($capMin * 60 * 1000)) {
|
||||
Log ("task #" + $id + " ran past its cap of " + $capMin + " min: ending its own shell pid " + $p.Id + " by pid")
|
||||
Add-Content -Path $log -Value ("AGENT: task ended at its cap of " + $capMin + " min (pid " + $p.Id + ")")
|
||||
Stop-Process -Id $p.Id -Force -ErrorAction SilentlyContinue
|
||||
$p.WaitForExit(5000) | Out-Null
|
||||
}
|
||||
$code = $p.ExitCode
|
||||
if ($null -eq $code) { $code = 124 }
|
||||
} catch { Log ("could not start the task: " + $_.Exception.Message); Add-Content -Path $log -Value ("AGENT ERROR: " + $_.Exception.Message) }
|
||||
$text = ''; if (Test-Path $log) { $text = Get-Content $log -Raw }
|
||||
# the marker on a line of its own (X28), and only when the task was queued with --reboot or --reboot-continue
|
||||
|
|
|
|||
|
|
@ -39,6 +39,11 @@ test('the installer fills the manifest and registers, runs and reads back the ta
|
|||
assert.match(agentLab, /install Igneum Miner Lab on a fleet PC/, 'the refusal names the remedy');
|
||||
// the founder's word (8 October 2026, 20:21 UK): a task that ends a process by its name is refused by construction
|
||||
assert.match(agentLab, /function Kill-By-Name-Refusal/, 'the agent refuses kill-by-name task bodies');
|
||||
// PC 2, 8 October 2026, 21:28 UK: Start-Process -Wait covered the Miner a task started and the agent hung for the app's
|
||||
// life; the wait is on the task's own process with a cap (known-failed first)
|
||||
assert.doesNotMatch(agentLab, /Start-Process powershell\.exe -ArgumentList \$args[^\n]*-Wait/, 'never -Wait on a task shell');
|
||||
assert.match(agentLab, /\$p\.WaitForExit\(\$capMin \* 60 \* 1000\)/, 'the wait is capped by the task timeout');
|
||||
assert.match(agentLab, /ending its own shell pid [^\n]*by pid/, 'a task past its cap is ended by its pid, never a name');
|
||||
const shapes = [['Stop-Process -Na', 'me igneum-app -Force'], ['task', 'kill /IM igneumd.exe /F'], ['Get-Process -Na', 'me igneum-miner | Stop-Process'], ['pk', 'ill -f igneumd'], ['kill', 'all igneum-app']].map(p => p.join(''));
|
||||
for (const bad of shapes) {
|
||||
const pats = [/^\s*[^#\r\n]*\bStop-Process\b[^\r\n]*-Name\b/im, /^\s*[^#\r\n]*\btaskkill(\.exe)?\b[^\r\n]*\/IM\b/im, /^\s*[^#\r\n]*\bGet-Process\b[^\r\n]*-Name\b[^\r\n]*\|\s*Stop-Process/im, /^\s*[^#\r\n]*\b(pkill|killall)\b/im];
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ main{flex:1}
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -157,7 +157,7 @@ main{flex:1}
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -157,7 +157,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -197,7 +197,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ export function decode(reply) {
|
|||
if (!reply || typeof reply.content !== 'string') throw new Error('the git host reply has no content field');
|
||||
const b64 = reply.encoding === 'base64' || !reply.encoding;
|
||||
const text = b64 ? Buffer.from(reply.content.replace(/\s+/g, ''), 'base64').toString('utf8') : reply.content;
|
||||
const registry = JSON.parse(text.replace(/\bBST\b/g, 'UK')); // the zone name is a forbidden string on a served page: the times read UK
|
||||
const registry = JSON.parse(text.replace(/\bBST\b/g, 'UK').replace(/\bPC [12]\b/g, 'the project’s own rig').replace(/Devnet 3\b/g, 'the earlier devnet')); // the zone name is a forbidden string on a served page: the times read UK
|
||||
if (!registry || !Array.isArray(registry.suites)) throw new Error('the registry has no suites');
|
||||
return registry;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -165,7 +165,7 @@
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -449,7 +449,7 @@
|
|||
</div>
|
||||
<div class="grid c2">
|
||||
<div class="dl-list" style="margin:0">
|
||||
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
|
||||
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v2.0.1 · 63.8 MB</span></a>
|
||||
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg">macOS <span data-dl-meta="miner-mac">v2.0.1 · 45.9 MB</span></a>
|
||||
<a href="/miner#hive">Linux · HiveOS <span>the tarball and the flight sheet, on the miner page</span></a>
|
||||
</div>
|
||||
|
|
@ -472,7 +472,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<a class="dl-bar" href="/miner#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
|
||||
<a class="dl-bar" href="/miner#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v2.0.1 · 63.8 MB</span></a>
|
||||
|
||||
<!-- footer:start -->
|
||||
<footer class="site-footer">
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -157,7 +157,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -197,7 +197,7 @@ main{padding-bottom:100px}.card{background:var(--row);border:1px solid var(--lin
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ table{min-width:560px}
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -170,7 +170,7 @@ table{min-width:560px}
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -365,7 +365,7 @@ function injectShare(html, file) {
|
|||
return html.replace('<!-- head:start -->', () => block + '\n<!-- head:start -->');
|
||||
}
|
||||
|
||||
const PAGES = [['index.html', ''], ['download.html', 'download'], ['income.html', 'income'], ['economics.html', 'economics'], ['scorecard.html', 'scorecard'], ['docs.html', 'docs'], ['acceptance.html', 'acceptance'], ['litepaper.html', 'litepaper'], ['live.html', 'live'], ['evidence.html', 'evidence'], ['miner.html', 'miner'], ['app.html', 'app'], ['wallet.html', 'wallet'], ['ledger.html', 'ledger'], ['metamask.html', 'metamask'], ['faucet.html', 'faucet'], ['swap.html', 'swap'], ['404.html', ''],
|
||||
const PAGES = [['index.html', ''], ['download.html', 'download'], ['income.html', 'income'], ['economics.html', 'economics'], ['scorecard.html', 'scorecard'], ['prize.html', 'prize'], ['docs.html', 'docs'], ['acceptance.html', 'acceptance'], ['litepaper.html', 'litepaper'], ['live.html', 'live'], ['evidence.html', 'evidence'], ['miner.html', 'miner'], ['app.html', 'app'], ['wallet.html', 'wallet'], ['ledger.html', 'ledger'], ['metamask.html', 'metamask'], ['faucet.html', 'faucet'], ['swap.html', 'swap'], ['404.html', ''],
|
||||
// the Devnet 3 explorer (5 Oct 2026, extended 8 Oct 2026): /explorer, /block/<hash>, /address/<addr>, /tx/<hash> (vercel.json rewrites
|
||||
// the three) and /proving; the Explorer entry of the Network panel is the current one on all five
|
||||
['explorer.html', 'explorer'], ['block.html', 'explorer'], ['address.html', 'explorer'], ['tx.html', 'explorer'], ['proving.html', 'explorer'],
|
||||
|
|
@ -427,7 +427,7 @@ for (const [file, active] of PAGES) {
|
|||
if (file === 'acceptance.html' && html.includes('<!-- acceptance:start -->')) {
|
||||
const rp = join(docs, 'plans', 'igneum-2.0-test-registry.json');
|
||||
// the zone name is a forbidden string on a served page (the identity list): the registry's times read UK here
|
||||
if (existsSync(rp)) html = inject(html, 'acceptance', renderAcceptance(JSON.parse(readFileSync(rp, 'utf8').replace(/\bBST\b/g, 'UK'))), file);
|
||||
if (existsSync(rp)) html = inject(html, 'acceptance', renderAcceptance(JSON.parse(readFileSync(rp, 'utf8').replace(/\bBST\b/g, 'UK').replace(/\bPC [12]\b/g, 'the project’s own rig').replace(/Devnet 3\b/g, 'the earlier devnet'))), file); // the identity list: no zone name, no numbered rig, no numbered devnet on a served page
|
||||
}
|
||||
writeFileSync(p, html);
|
||||
built.push(file);
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims" aria-current="page"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -169,7 +169,7 @@
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims" aria-current="page"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ table{min-width:560px}
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -170,7 +170,7 @@ table{min-width:560px}
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -169,7 +169,7 @@
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs" aria-current="page"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs" aria-current="page"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -143,7 +143,7 @@
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs" aria-current="page"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs" aria-current="page"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -159,7 +159,7 @@
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -244,8 +244,8 @@
|
|||
<div><h3>Ember for Windows</h3><div class="sub">the installer, from the signed manifest</div></div>
|
||||
<div class="body">
|
||||
<p>Run the installer, press Start. NVIDIA and AMD cards both mine. Setting an NVIDIA power cap asks for administrator rights once.</p>
|
||||
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows <span class="meta" data-dl-meta="miner-windows">v2.0.0 · 63.8 MB</span></a>
|
||||
<div class="sha"><b>sha256</b> <span data-dl-sha="miner-windows">793a631dc2084e6d6f778f13602d674a0c134af746b6355c25d3998c2be18b79</span></div>
|
||||
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="btn primary"><span class="osmark bare" data-os="windows" title="Windows"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M3 5.6l7.3-1v7.1H3zM11.4 4.4L21 3v8.7h-9.6zM3 12.3h7.3v7.1L3 18.4zM11.4 12.3H21V21l-9.6-1.4z"/></svg></span>Download for Windows <span class="meta" data-dl-meta="miner-windows">v2.0.1 · 63.8 MB</span></a>
|
||||
<div class="sha"><b>sha256</b> <span data-dl-sha="miner-windows">ce6bb00cd738fa08348fd8121781479109a5b2c2059a04fe7c22ad7aa3f12bf9</span></div>
|
||||
</div>
|
||||
</article>
|
||||
<article class="dl-card" id="mac">
|
||||
|
|
@ -283,6 +283,7 @@
|
|||
</div>
|
||||
<p class="yourcard" data-yourcard style="margin-top:16px">Your card: pending</p>
|
||||
<p class="home-quiet" data-release-note><b>What changed in 2.0.1.</b> An update never leaves mining off. The Cards tab is back as its own page. The first-block card shows once per address. The window names included, executed, proven and finalised. The node serves its manifest and the genesis state stream to every miner. The Mac build is unsigned tonight.</p>
|
||||
<p class="home-quiet" data-release-note-2>2.0.0 is withdrawn: its miner could not read this network’s block templates; every 2.0.0 install updates itself to 2.0.1.</p>
|
||||
<p class="home-quiet" data-devnet-notice><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
|
||||
<p class="home-quiet">The protocol carries no fee. The one payment to the project is the Ember software’s optional 1% dev fee, like other GPU miners, off with one flag. <a href="/dev-fee">The fee, in full view.</a></p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -19,11 +19,11 @@
|
|||
},
|
||||
"miner-windows": {
|
||||
"alias": "/public/igneum-miner-windows.exe",
|
||||
"file": "Igneum-Miner-Setup-2.0.0.exe",
|
||||
"path": "/dl/public/Igneum-Miner-Setup-2.0.0.exe",
|
||||
"sha256": "793a631dc2084e6d6f778f13602d674a0c134af746b6355c25d3998c2be18b79",
|
||||
"size": 63803668,
|
||||
"version": "2.0.0"
|
||||
"file": "Igneum-Miner-Setup-2.0.1.exe",
|
||||
"path": "/dl/public/Igneum-Miner-Setup-2.0.1.exe",
|
||||
"sha256": "ce6bb00cd738fa08348fd8121781479109a5b2c2059a04fe7c22ad7aa3f12bf9",
|
||||
"size": 63831654,
|
||||
"version": "2.0.1"
|
||||
},
|
||||
"wallet-mac": {
|
||||
"alias": "/public/igneum-wallet-mac.dmg",
|
||||
|
|
@ -34,5 +34,5 @@
|
|||
"version": "0.1.6"
|
||||
}
|
||||
},
|
||||
"updated": "2026-10-08T19:44:46Z"
|
||||
"updated": "2026-10-08T19:51:38Z"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
<div class="panel-list">
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics" aria-current="page"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics" aria-current="page"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -143,7 +143,7 @@
|
|||
<div class="sheet-group"><div class="sheet-head">Learn</div>
|
||||
<a href="/litepaper" data-nav="litepaper"><b>Litepaper</b><span>The design, as published.</span></a>
|
||||
<a href="/income" data-nav="income"><b>Income</b><span>What your card would mine, from the live network.</span></a>
|
||||
<a href="/economics" data-nav="economics" aria-current="page"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/economics" data-nav="economics" aria-current="page"><b>Economics</b><span>The emission, the split and the fees, each with its line in the node.</span></a><a href="/scorecard" data-nav="scorecard"><b>Scorecard</b><span>The twelve acceptance gates, their evidence and where each stands.</span></a><a href="/prize" data-nav="prize"><b>Prize</b><span>A better adversary or a reproduced shortcut, never a confirmation: the terms.</span></a><a href="/acceptance" data-nav="acceptance"><b>Acceptance</b><span>The Test and Acceptance Standard, case by case, as each one passes.</span></a><a href="/audit" data-nav="audit"><b>Site audit</b><span>Every page, what the reset changed and what is open.</span></a><a href="/docs" data-nav="docs"><b>Documents</b><span>The plan, the standard, the specifications and the evidence files, by path.</span></a>
|
||||
<a href="/ledger" data-nav="ledger"><b>Ledger</b><span>Every criticism, answered or conceded.</span></a>
|
||||
<a href="/claims" data-nav="claims"><b>What Igneum does not claim</b><span>The limits, stated first.</span></a>
|
||||
<a href="/randomx" data-nav="randomx"><b>Igneum vs RandomX</b><span>What was kept and what was rebuilt for GPUs.</span></a>
|
||||
|
|
@ -292,7 +292,7 @@
|
|||
<tr><td>External settlement in IGN</td><td>other chains pay for proofs in IGN; <span data-rm="fees.external_jobs.provers_percent">90</span> percent to the provers, <span data-rm="fees.external_jobs.burn_percent">10</span> percent burned</td><td>the price a prover must charge is the subsidy it forgoes while it proves: per shard, (card hash ÷ network hash) × 0.8 × the block subsidy × shard seconds. For an RTX 5090 at 136 MH/s on a 1 GH/s network and a 37 s shard that is about 16 IGN a shard inside the ramp today and about 128 IGN at the full rate, against the pool’s 1.2 IGN a shard measured; the quote falls as one over network hash and is competitive near 100 GH/s (the litepaper, Building on Igneum)</td><td>designed; the settlement contract is not built</td></tr>
|
||||
</tbody></table></div>
|
||||
<h3>The standard’s new-entry test, as found</h3>
|
||||
<p><b>ECO-05: FAIL.</b> ECO-05, the standard’s coexistence sweep, was run on a register frozen before any result against a sourced revenue reference of USD 31.65 million a year of miner revenue (Ethereum Classic’s trailing year at its current era 6 reward) and FAILS the envelope as the chain stands. Of sixteen revenue and tariff worlds (a quarter, one, four and ten times the reference; electricity at 3, 10, 25 and 40 cents per kilowatt-hour) only one sustains new entry across two vendors, ten times the reference at 3 cents (about USD 316 million a year), because on this hash the measured AMD and Intel cards cost four to six times a Blackwell card per joule and never earn a new entrant’s purchase back at list price below that world; in that one world no specialised design sits inside the envelope against the whole cohort (the board on commodity DRAM is within the envelope only against the best Blackwell card, the die and the hybrid against no card of today’s), and the quarter-reference worlds at 25 and 40 cents are collapse worlds with no rational profitable operator. What moves the result is the specialist’s hardware cost per unit of work, the honest cards’ own efficiency on this hash, above all the AMD and Intel cards’ energy, and the dataset’s size floor; not a smaller network, a higher token price or any chip’s death. Reported as found; the register, the full result cube and the model are published for independent reproduction. (Labels: the register frozen at 18:37 UK on 8 October 2026, the reference corrected by a second public read and the run repeated with the verdict unchanged, the cube MODELLED on measured card rows, two cohort rows BLOCKED, the RX 7600’s knee and the Arc’s watts, their measurement running tonight; the registry row ECO-05 on <a href="/acceptance">/acceptance</a>; the results file docs/analysis/class-v6/eco-05-results.md.)</p>
|
||||
<p><b>ECO-05: FAIL.</b> ECO-05, the standard’s coexistence sweep, was run on a register frozen before any result against a sourced revenue reference of USD 31.65 million a year of miner revenue (Ethereum Classic’s trailing year at its current era 6 reward) and FAILS the envelope as the chain stands. Of sixteen revenue and tariff worlds (a quarter, one, four and ten times the reference; electricity at 3, 10, 25 and 40 cents per kilowatt-hour) one sustains new entry across two vendors on the measured cards, ten times the reference at 3 cents (about USD 316 million a year), and a second, ten times the reference at 10 cents, on the RX 7600’s modelled efficiency point, which the metered row due in the morning keeps at or below 5.4 microjoules per hash and takes away above about 5.6; the cause is that on this hash the measured AMD and Intel cards cost four to six times a Blackwell card per joule and never earn a new entrant’s purchase back at list price below those worlds; the verdict is FAIL either way; in those worlds no specialised design sits inside the envelope against the whole cohort (the board on commodity DRAM is within the envelope only against the best Blackwell card, the die and the hybrid against no card of today’s), and the quarter-reference worlds at 25 and 40 cents are collapse worlds with no rational profitable operator. What moves the result is the specialist’s hardware cost per unit of work, the honest cards’ own efficiency on this hash, above all the AMD and Intel cards’ energy, and the dataset’s size floor; not a smaller network, a higher token price or any chip’s death. Reported as found; the register, the full result cube and the model are published for independent reproduction. (Labels: the register frozen at 18:37 UK on 8 October 2026, the reference corrected by a second public read and the run repeated with the verdict unchanged, the cube MODELLED on measured card rows, two cohort rows BLOCKED, the RX 7600’s knee and the Arc’s watts, their measurement running tonight; the registry row ECO-05 on <a href="/acceptance">/acceptance</a>; the results file docs/analysis/class-v6/eco-05-results.md.)</p>
|
||||
<p>The chip question (whether a chip gets built against the hash, and what it would earn) is a conditional argument of its own on the litepaper’s <a href="/litepaper#chip-model">chip model</a>, not part of this page.</p>
|
||||
<h2>Units and decimals</h2>
|
||||
<div class="tbl"><table>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue