From 7101273dcbc2a0e94a02332eacf0c341e0469192 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Tue, 6 Oct 2026 16:50:25 +0000 Subject: [PATCH] exec 0.3.14 app side: the prover exports from one block below and seeds from the account dump; the reorg harness; the 4060 rows - app/igneum-app/src/prover.rs: igneum_exportSegments [n-1, n] for a shard and [first-1, last] for a segment (never from 0: on a restarted node the records below the restart carry zero roots and the exporter refused every cut, the fleet 16:02Z); exec_boundary() reads igneum_getExecStatus.restartNumber (or the startedFrom text on a 0.3.13 node) and the prover never claims a shard or a segment below it - proving/igneum-prove/export: seeds the port from the export's preState, checks its root against the node's at the dump's block and replays from the next segment; the restart-replay path stays for exports without a dump - tools/exec-sync/reorg.mjs: a 300-chain-block reorg on a private fast-time simnet, two cases (the ring, the persisted-generation fallback after a restart), 18 checks; A's lone miner casts no finality vote because one key at 83% of the window certified its own branch in the first run and the finality rule refused B's chain, by design - tools/exec-sync/net.mjs: case 5 (an unreadable flag file blocks loudly, never genesis) and case 6 (the export from one block below carries the dump; the exporter cuts from it), 15 checks - bench/proof-systems: the rented RTX 4060 8 GB rows (46) and the table Co-Authored-By: Claude Fable 5.1 --- app/igneum-app/src/prover.rs | 35 +++- bench/proof-systems/TABLE.md | 24 +++ .../rows/20261006-1254-rz-4060-sp1.json | 9 + .../rows/20261006-1255-rz-4060-r0.json | 9 + .../20261006-1255-rz-4060-sp1-patched.json | 9 + ...61006-1344-rz-4060-r0-4060-8-GB-alone.json | 9 + ...1006-1344-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...ched-4060-8-GB-alone,-patched-default.json | 9 + ...patched-4060-8-GB-alone,-patched-2^27.json | 9 + ...61006-1400-rz-4060-r0-4060-8-GB-alone.json | 9 + ...1006-1400-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...patched-4060-8-GB-alone,-patched-2^26.json | 27 +++ ...patched-4060-8-GB-alone,-patched-2^27.json | 9 + ...ched-4060-8-GB-alone,-patched-default.json | 9 + ...61006-1401-rz-4060-r0-4060-8-GB-alone.json | 9 + ...1006-1401-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...patched-4060-8-GB-alone,-patched-2^26.json | 9 + ...patched-4060-8-GB-alone,-patched-2^27.json | 9 + ...ched-4060-8-GB-alone,-patched-default.json | 9 + ...patched-4060-8-GB-alone,-patched-2^26.json | 27 +++ ...53-rz-4060-r0-4060-8-GB-alone,-po2-20.json | 9 + ...1006-1453-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...54-rz-4060-r0-4060-8-GB-alone,-po2-19.json | 27 +++ ...ched-4060-8-GB-alone,-patched-default.json | 9 + ...patched-4060-8-GB-alone,-patched-2^27.json | 9 + ...10-rz-4060-r0-4060-8-GB-alone,-po2-19.json | 27 +++ ...10-rz-4060-r0-4060-8-GB-alone,-po2-20.json | 27 +++ ...1006-1510-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...patched-4060-8-GB-alone,-patched-2^25.json | 27 +++ ...patched-4060-8-GB-alone,-patched-2^26.json | 27 +++ ...1006-1511-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...patched-4060-8-GB-alone,-patched-2^25.json | 27 +++ ...patched-4060-8-GB-alone,-patched-2^26.json | 27 +++ ...patched-4060-8-GB-alone,-patched-2^27.json | 27 +++ ...ched-4060-8-GB-alone,-patched-default.json | 27 +++ ...12-rz-4060-r0-4060-8-GB-alone,-po2-19.json | 27 +++ ...12-rz-4060-r0-4060-8-GB-alone,-po2-20.json | 9 + ...ched-4060-8-GB-alone,-patched-default.json | 9 + ...patched-4060-8-GB-alone,-patched-2^27.json | 9 + ...patched-4060-8-GB-alone,-patched-2^25.json | 27 +++ ...patched-4060-8-GB-alone,-patched-2^26.json | 9 + ...41-rz-4060-r0-4060-8-GB-alone,-po2-19.json | 27 +++ ...41-rz-4060-r0-4060-8-GB-alone,-po2-20.json | 9 + ...1006-1541-rz-4060-sp1-4060-8-GB-alone.json | 9 + ...ched-4060-8-GB-alone,-patched-default.json | 9 + ...patched-4060-8-GB-alone,-patched-2^26.json | 27 +++ ...patched-4060-8-GB-alone,-patched-2^27.json | 9 + ...patched-4060-8-GB-alone,-patched-2^25.json | 27 +++ proving/igneum-prove/export/src/main.rs | 44 ++++- tools/exec-sync/net.mjs | 34 +++- tools/exec-sync/reorg.mjs | 167 ++++++++++++++++++ 51 files changed, 1000 insertions(+), 6 deletions(-) create mode 100644 bench/proof-systems/rows/20261006-1254-rz-4060-sp1.json create mode 100644 bench/proof-systems/rows/20261006-1255-rz-4060-r0.json create mode 100644 bench/proof-systems/rows/20261006-1255-rz-4060-sp1-patched.json create mode 100644 bench/proof-systems/rows/20261006-1344-rz-4060-r0-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1344-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1344-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1345-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1400-rz-4060-r0-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1400-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1401-rz-4060-r0-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1401-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1402-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1453-rz-4060-r0-4060-8-GB-alone,-po2-20.json create mode 100644 bench/proof-systems/rows/20261006-1453-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1454-rz-4060-r0-4060-8-GB-alone,-po2-19.json create mode 100644 bench/proof-systems/rows/20261006-1454-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1455-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-19.json create mode 100644 bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-20.json create mode 100644 bench/proof-systems/rows/20261006-1510-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json create mode 100644 bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1511-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json create mode 100644 bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-19.json create mode 100644 bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-20.json create mode 100644 bench/proof-systems/rows/20261006-1523-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1538-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json create mode 100644 bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-19.json create mode 100644 bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-20.json create mode 100644 bench/proof-systems/rows/20261006-1541-rz-4060-sp1-4060-8-GB-alone.json create mode 100644 bench/proof-systems/rows/20261006-1548-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json create mode 100644 bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json create mode 100644 bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json create mode 100644 bench/proof-systems/rows/20261006-1604-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json create mode 100644 tools/exec-sync/reorg.mjs diff --git a/app/igneum-app/src/prover.rs b/app/igneum-app/src/prover.rs index 4efee8abb..91a7684b5 100644 --- a/app/igneum-app/src/prover.rs +++ b/app/igneum-app/src/prover.rs @@ -134,6 +134,26 @@ struct Tools { cuda: bool, } +/// The node's re-derivation boundary (0.3.13.1, 6 October 2026): the chain block its EVM restarted at after the +/// bodies below the pruning point were gone (`igneum_getExecStatus.restartNumber`; on a 0.3.13 node the +/// `startedFrom` text "restart at chain block N"), else 0. A prover exports from the block before it, never from +/// 0 (the records below carry zero state roots and the exporter refused every cut: the fleet, 16:02Z), and never +/// claims work below it (no bodies, no state: unprovable on every node). +fn exec_boundary(shared: &Shared) -> u64 { + let st = match evm_rpc(shared, "igneum_getExecStatus", json!([]), Duration::from_secs(5)) { + Ok(v) => v, + Err(_) => return 0, + }; + if let Some(n) = st["restartNumber"].as_u64() { + return n; + } + if let Some(n) = st["restartNumber"].as_str().and_then(|x| u64::from_str_radix(x.trim_start_matches("0x"), 16).ok()) { + return n; + } + let text = st["startedFrom"].as_str().unwrap_or(""); + text.strip_prefix("restart at chain block ").and_then(|t| t.split_whitespace().next()).and_then(|t| t.parse().ok()).unwrap_or(0) +} + fn evm_rpc(shared: &Shared, method: &str, params: Value, timeout: Duration) -> Result { let body = json!({ "jsonrpc": "2.0", "id": 1, "method": method, "params": params }).to_string(); let tmp = std::env::temp_dir().join(format!("igneum-prover-{}-{}.json", std::process::id(), method)); @@ -634,6 +654,9 @@ fn loop_forever(shared: Arc, bin_dir: PathBuf) { continue; } } + // shards below the re-derivation boundary are never attempted (no bodies, no state on any node) + let boundary = exec_boundary(&shared); + let work: Vec = work.into_iter().filter(|w| w.number >= boundary).collect(); let Some(w) = choose(&work, &attempted) else { set(&shared, |p| { p.status = if submitted.is_empty() { "idle".into() } else { "submitted".into() }; @@ -667,7 +690,9 @@ fn loop_forever(shared: Arc, bin_dir: PathBuf) { let fixture = dir.join(format!("block-{}.json", w.number)); let results = dir.join(format!("results-{}-{}.json", w.number, w.shard)); let outcome: Result<(), String> = (|| { - let export = evm_rpc(&shared, "igneum_exportSegments", json!(["0x0", format!("{:#x}", w.number)]), Duration::from_secs(120))?; + // the export from one block below (0.3.14): the node's account dump after block n-1 seeds the exporter + let from = w.number.saturating_sub(1); + let export = evm_rpc(&shared, "igneum_exportSegments", json!([format!("{from:#x}"), format!("{:#x}", w.number)]), Duration::from_secs(120))?; std::fs::write(&seq, export.to_string()).map_err(|e| e.to_string())?; let (seq_p, fix_p, res_p) = if t.wsl { (wsl_path(&seq), wsl_path(&fixture), wsl_path(&results)) } else { (seq.display().to_string(), fixture.display().to_string(), results.display().to_string()) }; let (ok, out) = run_tool(&shared, t, &t.export, &[seq_p, w.number.to_string(), fix_p.clone()], &[], Duration::from_secs(600), &dir.join(format!("export-{}.log", w.number))); @@ -783,6 +808,9 @@ fn pick_segment(shared: &Shared, work: &[Work], key_hash: &str, attempted: &mut return None; } let (start, n, unproven, tip_daa) = (hexu(&v1["start"]), hexu(&v1["segmentBlocks"]).max(1), hexu(&v1["unprovenDaa"]), hexu(&st["tipDaa"])); + // segments below the re-derivation boundary are never claimed: no bodies, no state, unprovable anywhere + let boundary = exec_boundary(shared); + let start = if boundary > start { boundary.div_ceil(n) * n } else { start }; let segs = crate::segments::whole_segments(start, n, unproven, work); let need = crate::segments::need_daa(last_secs); let cands = crate::segments::candidates(&segs, tip_daa, need, key_hash, attempted); @@ -848,7 +876,10 @@ fn prove_segment(shared: &Shared, t: &Tools, seg: &crate::segments::SegmentWork, shared.log(&format!("prover: segment {first}..{last} claimed ({} shards{}): export, cut, chain ({}), sign, submit", seg.shards.len(), if prev_file.is_some() { ", continuing the previous segment's proof" } else { ", fresh" }, if t.cuda { "CUDA" } else { "CPU" })); // 1. export once, cut every block let seq = dir.join("seq.json"); - let export = evm_rpc(shared, "igneum_exportSegments", json!(["0x0", format!("{last:#x}")]), Duration::from_secs(300))?; + // the export from one block below the segment (0.3.14): the node's account dump after block first-1 seeds the + // exporter; nothing older is read + let from = first.saturating_sub(1); + let export = evm_rpc(shared, "igneum_exportSegments", json!([format!("{from:#x}"), format!("{last:#x}")]), Duration::from_secs(300))?; std::fs::write(&seq, export.to_string()).map_err(|e| e.to_string())?; let mut fixtures: Vec = Vec::new(); for b in first..=last { diff --git a/bench/proof-systems/TABLE.md b/bench/proof-systems/TABLE.md index 53c770462..f69bde9cd 100644 --- a/bench/proof-systems/TABLE.md +++ b/bench/proof-systems/TABLE.md @@ -1,5 +1,29 @@ | Candidate | Machine, backend, note | Fixture | Cycles | Prove s | Wall s | Peak memory MiB | Proof bytes | Verify s (one core) | Recursion | Audit | Verified | Date | |---|---|---|---|---|---|---|---|---|---|---|---|---| +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^25 | block-338-shard1.json shard 0 | 60415376 | 87.0 | 94.9 | 7628 | 1272897 | 0.319 | yes | no | yes | 20261006-1604 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^26 | block-338-shard1.json shard 0 | 60415376 | 41.3 | 49.3 | 7596 | 1272897 | 0.328 | yes | no | yes | 20261006-1603 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 1): /tmp/tmp.7ILTbMmhGd/time.log:Error: CudaClientError: The server returned an internal error | | | | | | | | | | 20261006-1603 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, po2 19 | block-338-shard1.json shard 0 | 89482640 | 401.9 | 403.5 | 6752 | 223882 | 0.224 | yes | yes | yes | 20261006-1541 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 101): /tmp/tmp.75fL1zX5AZ/time.log: out of memory | | | | | | | | | | 20261006-1541 | +| sp1 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 1): /tmp/tmp.klQ694HVLB/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof } | | | | | | | | | | 20261006-1541 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^25 | block-72854-empty-block-first.json shard 0 | 23594943 | 79.6 | 87.2 | 7628 | 1272897 | 0.319 | yes | no | yes | 20261006-1539 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 1): /tmp/tmp.13mBtKKglh/time.log:Error: CudaClientError: The server returned an internal error | | | | | | | | | | 20261006-1539 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, po2 19 | block-72854-empty-block-first.json shard 0 | 134734531 | 697.3 | 701.3 | 6730 | 223882 | 0.225 | yes | yes | yes | 20261006-1512 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 101): /tmp/tmp.JPJDVvnbik/time.log: out of memory | | | | | | | | | | 20261006-1512 | +| sp1 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 1): /tmp/tmp.NUem292PRA/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof } | | | | | | | | | | 20261006-1511 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^25 | block-58927-empty-reward.json shard 0 | 257467 | 5.9 | 12.9 | 7596 | 1272897 | 0.325 | yes | no | yes | 20261006-1511 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^26 | block-58927-empty-reward.json shard 0 | 257467 | 4.2 | 11.2 | 7564 | 1272897 | 0.321 | yes | no | yes | 20261006-1511 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^27 | block-58927-empty-reward.json shard 0 | 257467 | 3.3 | 10.5 | 7470 | 1272897 | 0.320 | yes | no | yes | 20261006-1511 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched default | block-58927-empty-reward.json shard 0 | 257467 | 3.3 | 10.4 | 7406 | 1272897 | 0.323 | yes | no | yes | 20261006-1511 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, po2 19 | block-58927-empty-reward.json shard 0 | 278423 | 3.8 | 4.3 | 6876 | 223882 | 0.225 | yes | yes | yes | 20261006-1510 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, po2 20 | block-58927-empty-reward.json shard 0 | 278423 | 3.8 | 4.3 | 6812 | 223882 | 0.223 | yes | yes | yes | 20261006-1510 | +| sp1 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 1): /tmp/tmp.0JSHMJ96SK/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof } | | | | | | | | | | 20261006-1510 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^25 | fees-v1-shards2.json shard 0 | 4717439 | 12.8 | 19.8 | 7660 | 1272897 | 0.318 | yes | no | yes | 20261006-1510 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, patched 2^26 | fees-v1-shards2.json shard 0 | 4717439 | 7.9 | 15.1 | 7692 | 1272897 | 0.316 | yes | no | yes | 20261006-1510 | +| sp1-patched | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 124): /tmp/tmp.pKGGDBy0r0/time.log:called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(456), called `Result::unwrap()` on an `Err` value: OutOfMemory, ...) | | | | | | | | | | 20261006-1455 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda, 4060 8 GB alone, po2 19 | fees-v1-shards2.json shard 0 | 10049917 | 47.1 | 47.7 | 6720 | 223882 | 0.221 | yes | yes | yes | 20261006-1454 | +| r0 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 101): /tmp/tmp.khG85FrAuh/time.log: out of memory | | | | | | | | | | 20261006-1453 | +| sp1 | rz-4060 (RTX 4060 8 GB, Vast.ai), cuda | n/a: the prove run failed (exit 1): /tmp/tmp.yOqeSspoDW/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof } | | | | | | | | | | 20261006-1453 | | sp1-patched | rz-3060 (RTX 3060 12 GB, Vast, driver 580), cuda, 3060 12 GB alone, patched 2^26 | block-58927-empty-reward.json shard 0 | 257467 | 7.3 | 27.5 | 7203 | 1272897 | 0.542 | yes | no | yes | 20261006-1408 | | sp1-patched | rz-3060 (RTX 3060 12 GB, Vast, driver 580), cuda, 3060 12 GB alone, patched 2^27 | block-58927-empty-reward.json shard 0 | 257467 | 5.6 | 25.9 | 7301 | 1272897 | 0.562 | yes | no | yes | 20261006-1408 | | sp1-patched | rz-4090 (RTX 4090 24 GB, RunPod, driver 570), cuda, 4090 24 GB alone, patched 2^25 | block-338-shard1.json shard 0 | 60415376 | 57.5 | 78.0 | 8128 | 1272897 | 0.571 | yes | no | yes | 20261006-1408 | diff --git a/bench/proof-systems/rows/20261006-1254-rz-4060-sp1.json b/bench/proof-systems/rows/20261006-1254-rz-4060-sp1.json new file mode 100644 index 000000000..948f91318 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1254-rz-4060-sp1.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.4mZHXnufF3/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1254" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1255-rz-4060-r0.json b/bench/proof-systems/rows/20261006-1255-rz-4060-r0.json new file mode 100644 index 000000000..0f5900b5e --- /dev/null +++ b/bench/proof-systems/rows/20261006-1255-rz-4060-r0.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.1TcWpVbwIg/prove.log:RESULT execute shard 0: 10049917 user cycles in 11 segment(s) [(20, 845030), (20, 894979), (20, 1000813), (20, 1000813), (20, 870778), (20, 884222), (20, 914126), (20, 10", + "date": "20261006-1255" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1255-rz-4060-sp1-patched.json b/bench/proof-systems/rows/20261006-1255-rz-4060-sp1-patched.json new file mode 100644 index 000000000..eddf296a1 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1255-rz-4060-sp1-patched.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 137): /tmp/tmp.tmCsQI6CHt/time.log:called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(365), called `Result::unwrap()` on an `Err` value: OutOfMemory, ...)", + "date": "20261006-1255" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1344-rz-4060-r0-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1344-rz-4060-r0-4060-8-GB-alone.json new file mode 100644 index 000000000..a63b4b32b --- /dev/null +++ b/bench/proof-systems/rows/20261006-1344-rz-4060-r0-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.GdZyLDnsdm/time.log: out of memory", + "date": "20261006-1344" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1344-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1344-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..0eb8ecb65 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1344-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.Lmvi8KzrkZ/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1344" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1344-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1344-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..eed2391c2 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1344-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.BRDKgpts0L/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1344" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1345-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1345-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..f6f9e6af0 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1345-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 124): /tmp/tmp.ihTlWEdxAp/time.log:called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(410), called `Result::unwrap()` on an `Err` value: OutOfMemory, ...)", + "date": "20261006-1345" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1400-rz-4060-r0-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1400-rz-4060-r0-4060-8-GB-alone.json new file mode 100644 index 000000000..5d3746655 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1400-rz-4060-r0-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.4usOX0H6PP/time.log: out of memory", + "date": "20261006-1400" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..af8d013dc --- /dev/null +++ b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.VAI33Vs7MA/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1400" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..2b62695db --- /dev/null +++ b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "date": "20261006-1400", + "cycles": 4717439, + "wall_s": 14.88, + "prove_s": 7.903671741, + "peak_memory_mib": 7628, + "proof_bytes": 1272897, + "verify_s": 0.321, + "verify_runs": [ + 0.331, + 0.322, + 0.321 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=67108864 /root/kit/fixtures/fees-v1-shards2.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^26" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..25b1d0b29 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.eMe07oNUXi/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1400" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..d36b30f1a --- /dev/null +++ b/bench/proof-systems/rows/20261006-1400-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.xkyOwzwG9w/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1400" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1401-rz-4060-r0-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1401-rz-4060-r0-4060-8-GB-alone.json new file mode 100644 index 000000000..002ddfd17 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1401-rz-4060-r0-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.pOnqtcsA7F/time.log: out of memory", + "date": "20261006-1401" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..f34bc92fe --- /dev/null +++ b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.rlPWh1xxVd/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1401" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..fb6346292 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.lyWxBwCi0A/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1401" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..94c42e693 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.nMYigoWqsD/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1401" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..fca4cc124 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1401-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.aCaVLltPTe/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1401" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1402-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1402-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..d834b1026 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1402-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "date": "20261006-1402", + "cycles": 60415376, + "wall_s": 49.32, + "prove_s": 41.32554294, + "peak_memory_mib": 7660, + "proof_bytes": 1272897, + "verify_s": 0.315, + "verify_runs": [ + 0.32, + 0.319, + 0.315 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=67108864 /root/kit/fixtures/block-338-shard1.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^26" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1453-rz-4060-r0-4060-8-GB-alone,-po2-20.json b/bench/proof-systems/rows/20261006-1453-rz-4060-r0-4060-8-GB-alone,-po2-20.json new file mode 100644 index 000000000..fd3dd7113 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1453-rz-4060-r0-4060-8-GB-alone,-po2-20.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.khG85FrAuh/time.log: out of memory", + "date": "20261006-1453" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1453-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1453-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..19a7ee714 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1453-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.yOqeSspoDW/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1453" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1454-rz-4060-r0-4060-8-GB-alone,-po2-19.json b/bench/proof-systems/rows/20261006-1454-rz-4060-r0-4060-8-GB-alone,-po2-19.json new file mode 100644 index 000000000..774670409 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1454-rz-4060-r0-4060-8-GB-alone,-po2-19.json @@ -0,0 +1,27 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "date": "20261006-1454", + "cycles": 10049917, + "wall_s": 47.72, + "prove_s": 47.084915332, + "peak_memory_mib": 6720, + "proof_bytes": 223882, + "verify_s": 0.221, + "verify_runs": [ + 0.231, + 0.221, + 0.224 + ], + "verified": true, + "recursion": true, + "audit": true, + "proof_system": 2, + "image_or_program_id": "0x9ae0f416ee43e9ea8908c555d424fe23e3592677ffc42a763476623d0eb5cf72", + "command": "RISC0_PROVER=local RUST_LOG=off /root/kit/fixtures/fees-v1-shards2.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, po2 19" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1454-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1454-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..f49ef72cb --- /dev/null +++ b/bench/proof-systems/rows/20261006-1454-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.402Rj4YpeY/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1454" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1455-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1455-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..369810377 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1455-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "na": "the prove run failed (exit 124): /tmp/tmp.pKGGDBy0r0/time.log:called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(456), called `Result::unwrap()` on an `Err` value: OutOfMemory, ...)", + "date": "20261006-1455" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-19.json b/bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-19.json new file mode 100644 index 000000000..0f8da3a29 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-19.json @@ -0,0 +1,27 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "date": "20261006-1510", + "cycles": 278423, + "wall_s": 4.26, + "prove_s": 3.771448435, + "peak_memory_mib": 6876, + "proof_bytes": 223882, + "verify_s": 0.225, + "verify_runs": [ + 0.227, + 0.225, + 0.226 + ], + "verified": true, + "recursion": true, + "audit": true, + "proof_system": 2, + "image_or_program_id": "0x9ae0f416ee43e9ea8908c555d424fe23e3592677ffc42a763476623d0eb5cf72", + "command": "RISC0_PROVER=local RUST_LOG=off /root/kit/fixtures/block-58927-empty-reward.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, po2 19" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-20.json b/bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-20.json new file mode 100644 index 000000000..327d2b0da --- /dev/null +++ b/bench/proof-systems/rows/20261006-1510-rz-4060-r0-4060-8-GB-alone,-po2-20.json @@ -0,0 +1,27 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "date": "20261006-1510", + "cycles": 278423, + "wall_s": 4.29, + "prove_s": 3.796924528, + "peak_memory_mib": 6812, + "proof_bytes": 223882, + "verify_s": 0.223, + "verify_runs": [ + 0.223, + 0.224, + 0.223 + ], + "verified": true, + "recursion": true, + "audit": true, + "proof_system": 2, + "image_or_program_id": "0x9ae0f416ee43e9ea8908c555d424fe23e3592677ffc42a763476623d0eb5cf72", + "command": "RISC0_PROVER=local RUST_LOG=off /root/kit/fixtures/block-58927-empty-reward.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, po2 20" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..aa9378089 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.0JSHMJ96SK/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1510" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json b/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json new file mode 100644 index 000000000..4b603d2a6 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "date": "20261006-1510", + "cycles": 4717439, + "wall_s": 19.8, + "prove_s": 12.773214641, + "peak_memory_mib": 7660, + "proof_bytes": 1272897, + "verify_s": 0.318, + "verify_runs": [ + 0.323, + 0.322, + 0.318 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=33554432 /root/kit/fixtures/fees-v1-shards2.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^25" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..784478ab5 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1510-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "fees-v1-shards2.json", + "shard": 0, + "date": "20261006-1510", + "cycles": 4717439, + "wall_s": 15.09, + "prove_s": 7.914865677, + "peak_memory_mib": 7692, + "proof_bytes": 1272897, + "verify_s": 0.316, + "verify_runs": [ + 0.323, + 0.316, + 0.319 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=67108864 /root/kit/fixtures/fees-v1-shards2.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^26" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..9902d0a16 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.NUem292PRA/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1511" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json new file mode 100644 index 000000000..a1df4bf11 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "date": "20261006-1511", + "cycles": 257467, + "wall_s": 12.86, + "prove_s": 5.905371071, + "peak_memory_mib": 7596, + "proof_bytes": 1272897, + "verify_s": 0.325, + "verify_runs": [ + 0.333, + 0.325, + 0.334 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=33554432 /root/kit/fixtures/block-58927-empty-reward.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^25" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..c50476e95 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "date": "20261006-1511", + "cycles": 257467, + "wall_s": 11.21, + "prove_s": 4.222810289, + "peak_memory_mib": 7564, + "proof_bytes": 1272897, + "verify_s": 0.321, + "verify_runs": [ + 0.325, + 0.321, + 0.329 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=67108864 /root/kit/fixtures/block-58927-empty-reward.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^26" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..4a7127508 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "date": "20261006-1511", + "cycles": 257467, + "wall_s": 10.49, + "prove_s": 3.280941173, + "peak_memory_mib": 7470, + "proof_bytes": 1272897, + "verify_s": 0.32, + "verify_runs": [ + 0.322, + 0.328, + 0.32 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=134217728 /root/kit/fixtures/block-58927-empty-reward.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^27" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..d95138eb6 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1511-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-58927-empty-reward.json", + "shard": 0, + "date": "20261006-1511", + "cycles": 257467, + "wall_s": 10.44, + "prove_s": 3.323673148, + "peak_memory_mib": 7406, + "proof_bytes": 1272897, + "verify_s": 0.323, + "verify_runs": [ + 0.329, + 0.323, + 0.326 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off /root/kit/fixtures/block-58927-empty-reward.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched default" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-19.json b/bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-19.json new file mode 100644 index 000000000..88cf118bc --- /dev/null +++ b/bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-19.json @@ -0,0 +1,27 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "date": "20261006-1512", + "cycles": 134734531, + "wall_s": 701.27, + "prove_s": 697.295490514, + "peak_memory_mib": 6730, + "proof_bytes": 223882, + "verify_s": 0.225, + "verify_runs": [ + 0.231, + 0.23, + 0.225 + ], + "verified": true, + "recursion": true, + "audit": true, + "proof_system": 2, + "image_or_program_id": "0x9ae0f416ee43e9ea8908c555d424fe23e3592677ffc42a763476623d0eb5cf72", + "command": "RISC0_PROVER=local RUST_LOG=off /root/kit/fixtures/block-72854-empty-block-first.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, po2 19" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-20.json b/bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-20.json new file mode 100644 index 000000000..fb17dafd6 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1512-rz-4060-r0-4060-8-GB-alone,-po2-20.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.JPJDVvnbik/time.log: out of memory", + "date": "20261006-1512" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1523-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1523-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..91dd0db58 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1523-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 124): /tmp/tmp.wiWsczSnQY/time.log:called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(1171), allocation failed, ...)", + "date": "20261006-1523" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1538-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1538-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..2ec718091 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1538-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.eRnRaflnaM/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1538" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json b/bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json new file mode 100644 index 000000000..75625b4fd --- /dev/null +++ b/bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "date": "20261006-1539", + "cycles": 23594943, + "wall_s": 87.19, + "prove_s": 79.617820363, + "peak_memory_mib": 7628, + "proof_bytes": 1272897, + "verify_s": 0.319, + "verify_runs": [ + 0.331, + 0.319, + 0.322 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=33554432 /root/kit/fixtures/block-72854-empty-block-first.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^25" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..584a50449 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1539-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-72854-empty-block-first.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.13mBtKKglh/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1539" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-19.json b/bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-19.json new file mode 100644 index 000000000..e71482e00 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-19.json @@ -0,0 +1,27 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "date": "20261006-1541", + "cycles": 89482640, + "wall_s": 403.47, + "prove_s": 401.905167868, + "peak_memory_mib": 6752, + "proof_bytes": 223882, + "verify_s": 0.224, + "verify_runs": [ + 0.23, + 0.226, + 0.224 + ], + "verified": true, + "recursion": true, + "audit": true, + "proof_system": 2, + "image_or_program_id": "0x9ae0f416ee43e9ea8908c555d424fe23e3592677ffc42a763476623d0eb5cf72", + "command": "RISC0_PROVER=local RUST_LOG=off /root/kit/fixtures/block-338-shard1.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, po2 19" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-20.json b/bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-20.json new file mode 100644 index 000000000..8b50b25f9 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1541-rz-4060-r0-4060-8-GB-alone,-po2-20.json @@ -0,0 +1,9 @@ +{ + "candidate": "r0", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 101): /tmp/tmp.75fL1zX5AZ/time.log: out of memory", + "date": "20261006-1541" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1541-rz-4060-sp1-4060-8-GB-alone.json b/bench/proof-systems/rows/20261006-1541-rz-4060-sp1-4060-8-GB-alone.json new file mode 100644 index 000000000..1a48d6ccd --- /dev/null +++ b/bench/proof-systems/rows/20261006-1541-rz-4060-sp1-4060-8-GB-alone.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.klQ694HVLB/time.log:Error: CudaClientError: Failed to read the response: Custom { kind: UnexpectedEof, error: early eof }", + "date": "20261006-1541" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1548-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json b/bench/proof-systems/rows/20261006-1548-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json new file mode 100644 index 000000000..4443d7d94 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1548-rz-4060-sp1-patched-4060-8-GB-alone,-patched-default.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 124): /tmp/tmp.dNw9jOajto/time.log:called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(1175), called `Result::unwrap()` on an `Err` value: OutOfMemory, ...)", + "date": "20261006-1548" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json b/bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json new file mode 100644 index 000000000..a4bec8242 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^26.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "date": "20261006-1603", + "cycles": 60415376, + "wall_s": 49.29, + "prove_s": 41.292508187, + "peak_memory_mib": 7596, + "proof_bytes": 1272897, + "verify_s": 0.328, + "verify_runs": [ + 0.331, + 0.329, + 0.328 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=67108864 /root/kit/fixtures/block-338-shard1.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^26" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json b/bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json new file mode 100644 index 000000000..96d35dca8 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1603-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^27.json @@ -0,0 +1,9 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "na": "the prove run failed (exit 1): /tmp/tmp.7ILTbMmhGd/time.log:Error: CudaClientError: The server returned an internal error ", + "date": "20261006-1603" +} \ No newline at end of file diff --git a/bench/proof-systems/rows/20261006-1604-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json b/bench/proof-systems/rows/20261006-1604-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json new file mode 100644 index 000000000..4b9c15c21 --- /dev/null +++ b/bench/proof-systems/rows/20261006-1604-rz-4060-sp1-patched-4060-8-GB-alone,-patched-2^25.json @@ -0,0 +1,27 @@ +{ + "candidate": "sp1-patched", + "machine": "rz-4060 (RTX 4060 8 GB, Vast.ai)", + "backend": "cuda", + "fixture": "block-338-shard1.json", + "shard": 0, + "date": "20261006-1604", + "cycles": 60415376, + "wall_s": 94.93, + "prove_s": 86.99851537, + "peak_memory_mib": 7628, + "proof_bytes": 1272897, + "verify_s": 0.319, + "verify_runs": [ + 0.335, + 0.319, + 0.32 + ], + "verified": true, + "recursion": true, + "audit": false, + "proof_system": 1, + "image_or_program_id": null, + "command": "HOME=/opt/igneum-floor/home SP1_PROVER=cuda RUST_LOG=off SP1_GPU_ELEMENT_THRESHOLD=33554432 /root/kit/fixtures/block-338-shard1.json --mode compressed --shard 0", + "source": "bench/proof-systems/run.sh", + "label": "4060 8 GB alone, patched 2^25" +} \ No newline at end of file diff --git a/proving/igneum-prove/export/src/main.rs b/proving/igneum-prove/export/src/main.rs index 2309a4dc6..f06c1c298 100644 --- a/proving/igneum-prove/export/src/main.rs +++ b/proving/igneum-prove/export/src/main.rs @@ -193,11 +193,53 @@ fn main() -> Result<()> { // account nonce 1 (EIP-161), so the registry starts at nonce 1. db.insert_account(DEVELOPER_REGISTRY_ADDRESS, 1, U256::ZERO, ®istry_code, &[]); + // The exec restart (6 October 2026): the node's EVM state restarted empty at chain block R after the bodies + // below its pruning point were gone (`execRestart` in the export); the records below R are header-only, so the + // replay starts at R from the registry-only state (as the node did) and the BLOCKHASH ring starts there too. + // The account dump (0.3.14, 6 October 2026): an export from a node's ring carries the full state after its first + // segment (`preState`); the port seeds from it, checks its root against the node's at that segment and replays + // from the next one. Nothing older is needed, so a snapshot-restored node (thin older records) cuts the same + // fixture as a node with the whole history. + let mut first_index = 0usize; + if let Some(rows) = export["preState"].as_array() { + let mut db2 = IgneumDb::new(); + for row in rows { + let storage: Vec<(U256, U256)> = row["storage"].as_array().map(|a| a.iter().map(|kv| Ok((kv[0].as_str().context("slot")?.parse()?, kv[1].as_str().context("value")?.parse()?))).collect::>>()).transpose()?.unwrap_or_default(); + db2.insert_account(addr(&row["address"])?, row["nonce"].as_u64().context("nonce")?, u256(&row["balance"])?, &bytes(&row["code"])?, &storage); + } + let node_root = b256(&segments[0]["stateRoot"])?; + let our_root = db2.state_root(); + if our_root != node_root { + bail!("the account dump at segment {}: the port's state root {our_root} differs from the node's {node_root}; the dump or the port is wrong, stop", segments[0]["number"]); + } + println!("account dump: {} accounts after chain block {}, state root {our_root} (equals the node's); the replay starts at the next segment", rows.len(), segments[0]["number"]); + db = db2; + first_index = 1; + if want <= segments[0]["number"].as_u64().unwrap_or(0) { + bail!("block {want} is not above the dump's block {}; export from one block below the wanted block", segments[0]["number"]); + } + } + let restart = u64_of(&export["execRestart"]["number"])?.unwrap_or(0); + if restart > 0 && first_index == 0 { + println!("exec restart: the node's state restarted empty at chain block {restart}; the replay starts there, segments below are header-only"); + if want < restart { + bail!("block {want} lies below the exec restart at chain block {restart}: no state and no bodies exist for it"); + } + } let mut hashes: Vec<(u64, B256)> = Vec::new(); let mut fixture: Option = None; let mut checked = 0usize; for (n, seg) in segments.iter().enumerate() { let number = seg["number"].as_u64().context("number")?; + if n < first_index { + // the dump's own segment: its state is the seed, its hash enters the BLOCKHASH ring + hashes.push((number, b256(&seg["hash"])?)); + db.push_block_hash(number, b256(&seg["hash"])?); + continue; + } + if number < restart && first_index == 0 { + continue; + } let f = fixture_of(&export, &segments, n, &hashes, &db, fees)?; let pre_root = db.state_root(); let node_root = b256(&seg["stateRoot"])?; @@ -289,7 +331,7 @@ fn main() -> Result<()> { if db.state_root() != final_root { bail!("final state root {} differs from the export's {final_root}", db.state_root()); } - println!("replayed {checked} segments from genesis; every state root equals the node's; final root {final_root}"); + println!("replayed {checked} segments from {}; every state root equals the node's; final root {final_root}", if restart > 0 { format!("the exec restart at chain block {restart}") } else { "genesis".to_string() }); let fixture = fixture.with_context(|| format!("block {want} is not in the export (0 to {})", segments.len() - 1))?; let json = serde_json::to_string_pretty(&fixture)?; std::fs::write(out_path, &json)?; diff --git a/tools/exec-sync/net.mjs b/tools/exec-sync/net.mjs index ff253eeb6..70592d6c4 100644 --- a/tools/exec-sync/net.mjs +++ b/tools/exec-sync/net.mjs @@ -11,6 +11,8 @@ // a simnet peer still serves every body) and says why in its log // 4. a fresh node D with the file and NO consensus data of its own but the file's tip unknown: refused with // "unknown to consensus" (the file's tip is from another chain: a second simnet) +// 5. known-failed: a node E whose flag names a file that cannot be read blocks loudly (0.3.13.1), never genesis +// 6. the account dump (0.3.14): export [tip-1, tip] from B carries preState; the exporter seeds from it and cuts // Usage: node tools/exec-sync/net.mjs [--blocks 60] // IGNEUM_EXEC_BIN= (default vendor/igneum-node/target-exec-sync/release) import { spawn, spawnSync } from 'node:child_process'; @@ -21,17 +23,21 @@ const ROOT = new URL('../../', import.meta.url).pathname; const REL = process.env.IGNEUM_EXEC_BIN || `${ROOT}vendor/igneum-node/target-exec-sync/release`; const IGNEUMD = `${REL}/igneumd`; const MINER = `${REL}/igneum-miner`; +const EXPORTER = process.env.IGNEUM_EXPORTER || `${ROOT}proving/igneum-prove/target/release/igneum-prove-export`; const TMP = '/tmp/igneum-exec-sync'; const BASE = 29970, SUFFIX = 957; const flag = (name, d) => { const i = process.argv.indexOf(name); return i >= 0 ? Number(process.argv[i + 1]) : d; }; const BLOCKS = flag('--blocks', 60); const FILE = `${ROOT}infra/fast-time/override-60x.json`; -for (const b of [IGNEUMD, MINER]) if (!existsSync(b)) { console.error(`missing ${b}`); process.exit(2); } +for (const b of [IGNEUMD, MINER, EXPORTER]) if (!existsSync(b)) { console.error(`missing ${b}`); process.exit(2); } rmSync(TMP, { recursive: true, force: true }); mkdirSync(TMP, { recursive: true }); const override = `${TMP}/override.json`; // the exec-sync node is cut from 0.3.12 and knows no proof-system-2 field: drop it as text (JSON.parse would turn // the u64::MAX "never" values into floats the node refuses) -writeFileSync(override, readFileSync(FILE, 'utf8').replace(/\s*"proving_v2_activation_daa":\s*\d+,?/, '')); +// the 60x profile ships skip_proof_of_work false; the fast-time miner (vmine) submits unmined nonces, so it is on here +let overrideText = readFileSync(FILE, 'utf8').replace(/\s*"proving_v2_activation_daa":\s*\d+,?/, '').replace(/"skip_proof_of_work":\s*false/, '"skip_proof_of_work": true'); +if (!/"skip_proof_of_work": true/.test(overrideText)) throw new Error('override edit failed: skip_proof_of_work'); +writeFileSync(override, overrideText); const t0 = Date.now(); const log = (m) => console.log(`${new Date().toISOString().slice(11, 23)} t=${((Date.now() - t0) / 1000).toFixed(1)}s ${m}`); const sleep = (ms) => new Promise(r => setTimeout(r, ms)); @@ -62,9 +68,10 @@ class Node { } logText() { try { return readFileSync(this.logFile, 'utf8'); } catch { return ''; } } } +// the fast-time miner of the proving harness: `vmine` submits templates at the given share of 1 block/s function mine(node, label) { const out = openSync(`${TMP}/miner-${label}.log`, 'a'); - const p = spawn(MINER, ['mine', `127.0.0.1:${node.grpcPort}`, '--label', label, '--payout', '0x4343434343434343434343434343434343434343', '--threads', '1'], { stdio: ['ignore', out, out] }); + const p = spawn(MINER, ['vmine', `grpc://127.0.0.1:${node.grpcPort}`, '3600', '--label', label, '--share', '1', '--bps', '1', '--evm-address', '0x4343434343434343434343434343434343434343'], { stdio: ['ignore', out, out] }); started.push(p); return p; } const checks = []; @@ -131,6 +138,27 @@ async function main() { const dline = d.logText().split('\n').find(l => l.includes('unknown to consensus') || l.includes('not on this node') || l.includes('is not this network')); check('known-failed: D refuses a snapshot from another chain and says why', stD.startedFrom !== 'snapshot' && !!dline, { startedFrom: stD.startedFrom, line: dline && dline.slice(-160) }); try { miner2.kill('SIGINT'); } catch { } + // 6. the account dump (0.3.14): an export [tip-1, tip] from B (a snapshot-started node) carries the full state after + // tip-1 (preState); the exporter seeds from it and cuts block tip without any older record + { + const tipB = hexn(await b.eth('eth_blockNumber')); + const want = tipB - 2; + const exp = await b.eth('igneum_exportSegments', ['0x' + (want - 1).toString(16), '0x' + want.toString(16)]); + check('the export from one block below carries the account dump at that block', Array.isArray(exp.preState) && exp.preState.length >= 2 && exp.segments.length === 2 && exp.from === want - 1, { accounts: exp.preState && exp.preState.length, from: exp.from, to: exp.to }); + const seq = `${TMP}/seq-${want}.json`, fix = `${TMP}/block-${want}.json`; + writeFileSync(seq, JSON.stringify(exp)); + const r = spawnSync(EXPORTER, [seq, String(want), fix], { encoding: 'utf8', timeout: 120000 }); + const out = (r.stdout || '') + (r.stderr || ''); + check('the exporter seeds from the dump and cuts the block (state root equals the node\'s)', r.status === 0 && existsSync(fix) && /account dump: \d+ accounts after chain block/.test(out) && !/differs from the node/.test(out), { status: r.status, line: (out.split('\n').find(l => /account dump/.test(l)) || out.slice(-200)).slice(0, 200) }); + } + // 5. known-failed: a node E whose flag names a file that does not exist (the seed, 6 October 2026: unreadable under + // /root) blocks loudly, never runs as if the flag were unset, never executes genesis + const e = await new Node(5, [`127.0.0.1:${a.p2pPort}`], ['--igneum-exec-snapshot=/nonexistent/exec-snapshot.bin,0x00']).start(); + await sleep(4000); + const stE = await e.eth('igneum_getExecStatus'); + const eline = e.logText().split('\n').find(l => /the flag's file .* does not exist or cannot be read/.test(l)); + check('known-failed: E with an unreadable flag file blocks loudly and never starts at genesis', !!eline && stE.blocked !== null && /did not load/.test(stE.blocked) && hexn(stE.executedTip) === 0 && stE.startedFrom === 'fresh' && !/starts at genesis/.test(e.logText()), { line: eline && eline.slice(-160), blocked: stE.blocked && stE.blocked.slice(0, 80) }); + await e.stop(); log(`RESULT exec sync harness: PASSED (${checks.length} checks) in ${((Date.now() - t0) / 1000).toFixed(1)} s; snapshot ${ex.bytes} bytes at tip ${hexn(ex.tip)}, ${ex.accounts} accounts`); } main().then(() => cleanup(0)).catch(e => { log(`FAILED: ${e.message}`); cleanup(1); }); diff --git a/tools/exec-sync/reorg.mjs b/tools/exec-sync/reorg.mjs new file mode 100644 index 000000000..631624da3 --- /dev/null +++ b/tools/exec-sync/reorg.mjs @@ -0,0 +1,167 @@ +#!/usr/bin/env node +// Exec reorg harness (6 October 2026, 0.3.13.1): a 300-chain-block reorg against the executor, on a private +// fast-time simnet (ports 29870+, suffix 958; never the live devnet). Two cases, each asserted: +// 1. the ring: A and B share 60 chain blocks; A is stopped (its state persisted at tip ~60) and restarted alone on +// a new p2p port (its ring seeded with the loaded state); A mines 300 of its own with no finality vote (a lone +// key at 83% of the window certified its own branch in the first run and the finality rule refused B's chain, +// by design), B mines 420 of its own and is frozen; B restarts with A as its peer: consensus switches A to B's +// heavier chain, the executor unwinds 300 chain blocks from the ring (2,048) and reaches B's tip with B's root +// 2. the fallback: the same with IGNEUM_EXEC_RING=64 (the old ring), but A is stopped (persisted at ~360, its +// branch) and restarted with B as its peer, so it starts from its file with an empty ring: the executor reloads +// the newest persisted generation at or below the fork (exec-snapshot.prev.bin, tip ~60; the newest file's tip +// is on the losing branch and is skipped), says so ("re-executing from chain block"), shows it in +// igneum_getExecStatus (reexecuting), re-executes to B's tip and reaches B's state root; never genesis +// Usage: node tools/exec-sync/reorg.mjs [--own 300] [--other 420] [--case ring|fallback|both] +// IGNEUM_EXEC_BIN= (default vendor/igneum-node/target-exec-sync/release) +import { spawn } from 'node:child_process'; +import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, openSync } from 'node:fs'; + +const ROOT = new URL('../../', import.meta.url).pathname; +const REL = process.env.IGNEUM_EXEC_BIN || `${ROOT}vendor/igneum-node/target-exec-sync/release`; +const IGNEUMD = `${REL}/igneumd`; +const MINER = `${REL}/igneum-miner`; +const TMP = '/tmp/igneum-exec-reorg'; +const BASE = 29870, SUFFIX = 958; +const flag = (name, d) => { const i = process.argv.indexOf(name); return i >= 0 ? process.argv[i + 1] : d; }; +const OWN = Number(flag('--own', 300)), OTHER = Number(flag('--other', 420)), SHARED = 60, CASE = flag('--case', 'both'); +const FILE = `${ROOT}infra/fast-time/override-60x.json`; +for (const b of [IGNEUMD, MINER]) if (!existsSync(b)) { console.error(`missing ${b}`); process.exit(2); } +rmSync(TMP, { recursive: true, force: true }); mkdirSync(TMP, { recursive: true }); +const override = `${TMP}/override.json`; +let overrideText = readFileSync(FILE, 'utf8').replace(/\s*"proving_v2_activation_daa":\s*\d+,?/, '').replace(/"skip_proof_of_work":\s*false/, '"skip_proof_of_work": true'); +if (!/"skip_proof_of_work": true/.test(overrideText)) throw new Error('override edit failed: skip_proof_of_work'); +writeFileSync(override, overrideText); +const t0 = Date.now(); +const log = (m) => console.log(`${new Date().toISOString().slice(11, 23)} t=${((Date.now() - t0) / 1000).toFixed(1)}s ${m}`); +const sleep = (ms) => new Promise(r => setTimeout(r, ms)); +const hexn = (h) => Number(BigInt(h)); +const started = []; + +class Node { + constructor(i, connect = [], env = {}, suffix = SUFFIX) { + this.i = i; this.grpcPort = BASE + i * 10; this.p2pPort = BASE + i * 10 + 1; this.jsonPort = BASE + i * 10 + 2; this.evmPort = BASE + i * 10 + 3; + this.connect = connect; this.env = env; this.suffix = suffix; this.dir = `${TMP}/n${i}`; this.logFile = `${this.dir}/node.log`; + } + get evm() { return `http://127.0.0.1:${this.evmPort}`; } + async start(p2pPort = this.p2pPort, connect = this.connect) { + mkdirSync(this.dir, { recursive: true }); + this.p2pPort = p2pPort; + const a = ['--devnet', `--devnet-suffix=${this.suffix}`, '--nodnsseed', '--disable-upnp', '--nologfiles', '--enable-unsynced-mining', '--utxoindex', '--unsaferpc', + `--appdir=${this.dir}`, `--rpclisten=127.0.0.1:${this.grpcPort}`, `--rpclisten-json=127.0.0.1:${this.jsonPort}`, `--evm-rpclisten=127.0.0.1:${this.evmPort}`, + `--listen=127.0.0.1:${p2pPort}`, `--override-params-file=${override}`, '--loglevel=info', '--yes', ...connect.map(c => `--addpeer=${c}`)]; + const out = openSync(this.logFile, 'a'); + this.proc = spawn(IGNEUMD, a, { stdio: ['ignore', out, out], env: { ...process.env, IGNEUM_PROOF_VERIFY: 'trust', ...this.env } }); + started.push(this.proc); + for (let k = 0; k < 120; k++) { try { await this.eth('eth_chainId'); return this; } catch { await sleep(500); } } + throw new Error(`node ${this.i} did not answer on ${this.evm}`); + } + async stop() { try { this.proc.kill('SIGINT'); } catch { } for (let k = 0; k < 60; k++) { if (this.proc.exitCode !== null) return; await sleep(500); } try { this.proc.kill('SIGKILL'); } catch { } } + async eth(method, params = []) { + const r = await fetch(this.evm, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }) }); + const j = await r.json(); if (j.error) throw new Error(`${method}: ${JSON.stringify(j.error)}`); return j.result; + } + logText() { try { return readFileSync(this.logFile, 'utf8'); } catch { return ''; } } +} +function mine(node, label, bps = 4, vote = true) { + const out = openSync(`${TMP}/miner-${label}.log`, 'a'); + const p = spawn(MINER, ['vmine', `grpc://127.0.0.1:${node.grpcPort}`, '3600', '--label', label, '--share', '1', '--bps', String(bps), '--evm-address', '0x4343434343434343434343434343434343434343', ...(vote ? [] : ['--no-vote'])], { stdio: ['ignore', out, out] }); + started.push(p); return p; +} +const checks = []; +const check = (name, ok, detail) => { checks.push({ name, ok }); log(`${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ': ' + JSON.stringify(detail).slice(0, 320) : ''}`); if (!ok) throw new Error(`check failed: ${name}`); }; +async function waitTip(n, want, secs = 600) { for (let k = 0; k < secs * 2; k++) { const tip = hexn(await n.eth('eth_blockNumber')); if (tip >= want) return tip; await sleep(500); } throw new Error(`node ${n.i} did not reach ${want}`); } +const stopMiner = (p) => { try { p.kill('SIGINT'); } catch { } }; + +// joinBy "restartB": B restarts with A as its peer, so A never restarts and its ring holds its own branch (the ring +// case); "restartA": A restarts with B as its peer, so A starts from its persisted file with an empty ring and the +// unwind must come from the generations (the fallback case, every hand restarted from the recovery file today) +async function runCase(name, base, env, joinBy) { + log(`case ${name}: ring ${env.IGNEUM_EXEC_RING || 'default'}, join by ${joinBy}`); + const a = new Node(base, [], env), b = new Node(base + 1, [`127.0.0.1:${BASE + base * 10 + 1}`]); + await a.start(); + let ma = mine(a, `${name}-a0`); + await waitTip(a, SHARED); + await b.start(); + await waitTip(b, SHARED); + stopMiner(ma); + await sleep(1500); + const shared = hexn(await a.eth('eth_blockNumber')); + await a.stop(); + const persisted1 = a.logText().split('\n').filter(l => /persisted/.test(l)).pop(); + check(`${name}: A persisted its state at the shared tip`, !!persisted1 && hexn(await b.eth('eth_blockNumber')) >= SHARED, { shared, line: persisted1 && persisted1.slice(-120) }); + // A alone on a new p2p port (B's addpeer points at the old one), B alone + await a.start(a.p2pPort + 5, []); + // A's lone miner casts no finality vote: with one key at 83% of A's window its votes certified A's own branch and + // the finality rule refused B's chain for good (the first run, 16:20Z); the live reorg at DAA 198,000 happened on + // an uncertified minute, which is what this harness reproduces + ma = mine(a, `${name}-a1`, 4, false); + const mb = mine(b, `${name}-b`); + await waitTip(a, shared + OWN); + stopMiner(ma); + await sleep(1500); + const ownTip = hexn(await a.eth('eth_blockNumber')); + // B's branch must carry more blue work than A's: at least OTHER past the shared tip and 120 past A's own tip + await waitTip(b, Math.max(shared + OTHER, ownTip + 120)); + // B's branch is frozen before A joins: the catch-up target is fixed, and no block of B's reaches A by relay + stopMiner(mb); + await sleep(1500); + const ownBlock = await a.eth('eth_getBlockByNumber', ['0x' + ownTip.toString(16), false]); + const bAtOwn = await b.eth('eth_getBlockByNumber', ['0x' + ownTip.toString(16), false]); + check(`${name}: the two branches differ at height ${ownTip}`, ownBlock.hash !== bAtOwn.hash && ownTip - shared >= OWN, { own: ownTip - shared, aHash: ownBlock.hash.slice(0, 18), bHash: bAtOwn.hash.slice(0, 18) }); + let logMark; + if (joinBy === 'restartA') { + await a.stop(); + const persisted2 = a.logText().split('\n').filter(l => /persisted/.test(l)).pop(); + check(`${name}: A persisted its own branch's tip`, !!persisted2 && existsSync(`${a.dir}/igneum-devnet-${SUFFIX}/datadir/evm/exec-snapshot.prev.bin`), { line: persisted2 && persisted2.slice(-120) }); + logMark = a.logText().length; + // A joins B: the heavier chain wins + await a.start(a.p2pPort, [`127.0.0.1:${b.p2pPort}`]); + } else { + logMark = a.logText().length; + await b.stop(); + // B joins A: A keeps running, its ring holds its own branch, and the heavier chain wins + await b.start(b.p2pPort, [`127.0.0.1:${a.p2pPort}`]); + } + let seenReexec = null, seenDepth = null; + const bTip = hexn(await b.eth('eth_blockNumber')); + for (let k = 0; k < 1200; k++) { + const st = await a.eth('igneum_getExecStatus'); + if (st.reexecuting && !seenReexec) seenReexec = st.reexecuting; + const tip = hexn(st.executedTip); + const text = a.logText().slice(logMark); + const m = text.match(/selected-chain reorg: (\d+) chain blocks removed/); + if (m) seenDepth = Number(m[1]); + if (seenDepth !== null && tip >= bTip) { const blk = await a.eth('eth_getBlockByNumber', ['0x' + bTip.toString(16), false]); if (blk && blk.hash === (await b.eth('eth_getBlockByNumber', ['0x' + bTip.toString(16), false])).hash) break; } + await sleep(500); + } + const text = a.logText().slice(logMark); + check(`${name}: consensus switched A to B's chain and the executor unwound ${OWN}+ chain blocks`, seenDepth !== null && seenDepth >= OWN, { depth: seenDepth }); + const h = Math.min(hexn(await a.eth('eth_blockNumber')), hexn(await b.eth('eth_blockNumber'))); + const ra = await a.eth('eth_getBlockByNumber', ['0x' + h.toString(16), false]), rb = await b.eth('eth_getBlockByNumber', ['0x' + h.toString(16), false]); + check(`${name}: A's state root at height ${h} equals B's after the reorg`, ra.stateRoot === rb.stateRoot && ra.hash === rb.hash && h > ownTip, { height: h, root: ra.stateRoot.slice(0, 18) }); + const balA = await a.eth('eth_getBalance', ['0x4343434343434343434343434343434343434343', '0x' + h.toString(16)]); + const balB = await b.eth('eth_getBalance', ['0x4343434343434343434343434343434343434343', '0x' + h.toString(16)]); + check(`${name}: the miner's balance at height ${h} equals on A and B`, balA === balB && BigInt(balA) > 0n, { balA }); + // the re-executing note clears on the follower's next idle pass (100 ms after the catch-up) + let st = await a.eth('igneum_getExecStatus'); + for (let k = 0; k < 40 && st.reexecuting; k++) { await sleep(250); st = await a.eth('igneum_getExecStatus'); } + check(`${name}: A is not blocked and not re-executing after the catch-up`, st.blocked === null && st.reexecuting === null, { blocked: st.blocked, reexecuting: st.reexecuting }); + check(`${name}: nothing replayed from genesis`, !/replaying from genesis/.test(text) && !/tip 0/.test(text), {}); + if (name === 'fallback') { + const line = text.split('\n').find(l => /re-executing from chain block/.test(l)); + check('fallback: the executor reloaded the persisted generation at or below the fork and said so', !!line && /exec-snapshot\.prev\.bin/.test(line) && (seenReexec !== null || /re-execution caught the sink up/.test(text)), { line: line && line.slice(-200), status: seenReexec && seenReexec.slice(0, 120) }); + const from = line && Number((line.match(/re-executing from chain block (\d+)/) || [])[1]); + check(`fallback: the reload point ${from} is at or below the fork ${shared}`, from !== null && from <= shared && from > 0, { from, shared }); + } else { + check('ring: the unwind came from the ring, no reload', !/re-executing from chain block/.test(text), {}); + } + await a.stop(); await b.stop(); +} +async function main() { + if (CASE === 'ring' || CASE === 'both') await runCase('ring', 0, {}, 'restartB'); + if (CASE === 'fallback' || CASE === 'both') await runCase('fallback', 2, { IGNEUM_EXEC_RING: '64' }, 'restartA'); + log(`HARNESS_END ${checks.filter(c => c.ok).length}/${checks.length} checks PASSED in ${((Date.now() - t0) / 1000).toFixed(1)} s`); + cleanup(0); +} +main().catch(e => { log(`HARNESS_END FAILED: ${e.message}`); cleanup(1); }); +function cleanup(code) { for (const p of started.reverse()) { try { p.kill('SIGINT'); } catch { } } setTimeout(() => { for (const p of started) { try { p.kill('SIGKILL'); } catch { } } process.exit(code); }, 3000); }