From 27af84d02774277f3b3e7b7ff9f2553930ff0e17 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Wed, 31 Dec 2025 18:21:38 +0800 Subject: [PATCH 1/6] bump up toolchain to nightly-2025-11-20 --- ceno_rt/riscv32im-ceno-zkvm-elf.json | 2 +- examples/.cargo/config.toml | 7 +++++-- rust-toolchain.toml | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ceno_rt/riscv32im-ceno-zkvm-elf.json b/ceno_rt/riscv32im-ceno-zkvm-elf.json index e822289f5..8a286bae2 100644 --- a/ceno_rt/riscv32im-ceno-zkvm-elf.json +++ b/ceno_rt/riscv32im-ceno-zkvm-elf.json @@ -28,5 +28,5 @@ "singlethread": true, "target-c-int-width": 32, "target-endian": "little", - "target-pointer-width": "32" + "target-pointer-width": 32 } diff --git a/examples/.cargo/config.toml b/examples/.cargo/config.toml index f831dd7d5..ae412f796 100644 --- a/examples/.cargo/config.toml +++ b/examples/.cargo/config.toml @@ -9,12 +9,15 @@ build-std = [ ] build-std-features = [ "compiler-builtins-mem", - "panic_immediate_abort", "default", ] +panic-immediate-abort = true [profile.dev] -panic = "abort" +panic = "immediate-abort" + +[profile.release] +panic = "immediate-abort" [build] rustflags = [ diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7d676f1ad..b4514fe67 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2025-08-18" +channel = "nightly-2025-11-20" targets = ["riscv32im-unknown-none-elf"] # We need the sources for build-std. components = ["rust-src"] From 64855a3742762a5cf092da34c0a37d4e0650e0e1 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Fri, 2 Jan 2026 20:15:21 +0800 Subject: [PATCH 2/6] panic_immediate_abort is now a real panic strategy --- ceno_cli/src/utils.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ceno_cli/src/utils.rs b/ceno_cli/src/utils.rs index d7ccea263..5960bc20f 100644 --- a/ceno_cli/src/utils.rs +++ b/ceno_cli/src/utils.rs @@ -78,12 +78,13 @@ pub fn search_workspace_root>(path: P) -> anyhow::Result pub fn get_rust_flags() -> String { const BASE_RUST_FLAGS: &[&str] = &[ "-C", - "panic=abort", + "panic=immediate-abort", "-C", "link-arg=-Tmemory.x", "-C", "link-arg=-Tceno_link.x", "-Zlocation-detail=none", + "-Zunstable-options", "-C", "passes=lower-atomic", "--cfg", @@ -104,7 +105,7 @@ pub fn apply_cargo_build_std_args(command: &mut Command) { "-Z", "build-std=alloc,core,compiler_builtins,std,panic_abort,proc_macro", "-Z", - "build-std-features=compiler-builtins-mem,panic_immediate_abort,default", + "build-std-features=compiler-builtins-mem,default", ]; command.args(BASE_CARGO_ARGS); } From a3ed97955dcfba363f70c11e52d494e795187fc6 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Fri, 2 Jan 2026 20:20:25 +0800 Subject: [PATCH 3/6] bump rust-toolchain in ci --- .github/workflows/lints.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lints.yml b/.github/workflows/lints.yml index 8c08a3662..771e4e54f 100644 --- a/.github/workflows/lints.yml +++ b/.github/workflows/lints.yml @@ -25,7 +25,7 @@ jobs: components: rustfmt, clippy targets: riscv32im-unknown-none-elf # TODO: figure out way to keep this in sync with rust-toolchain.toml automatically - toolchain: nightly-2025-08-18 + toolchain: nightly-2025-11-20 - name: Cargo cache uses: actions/cache@v4 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index aaa2cec5f..0b61111dd 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,7 +24,7 @@ jobs: with: targets: riscv32im-unknown-none-elf # TODO: figure out way to keep this in sync with rust-toolchain.toml automatically - toolchain: nightly-2025-08-18 + toolchain: nightly-2025-11-20 - name: Cargo cache uses: actions/cache@v4 with: From 761a6ed282c9b1659faff4ee8d4aeebba981b1ac Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Mon, 19 Jan 2026 13:37:43 +0800 Subject: [PATCH 4/6] fix clippy errors --- ceno_zkvm/src/bin/bitwise_keccak.rs | 2 +- ceno_zkvm/src/bin/lookup_keccak.rs | 2 +- ceno_zkvm/src/precompiles/lookup_keccakf.rs | 4 +-- ceno_zkvm/src/scheme/mock_prover.rs | 30 ++++++++++----------- ceno_zkvm/src/uint/arithmetic.rs | 2 +- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/ceno_zkvm/src/bin/bitwise_keccak.rs b/ceno_zkvm/src/bin/bitwise_keccak.rs index 71d1dfc68..518eae4b9 100644 --- a/ceno_zkvm/src/bin/bitwise_keccak.rs +++ b/ceno_zkvm/src/bin/bitwise_keccak.rs @@ -1,5 +1,5 @@ use ceno_zkvm::precompiles::{run_bitwise_keccakf, setup_bitwise_keccak_gkr_circuit}; -use clap::{Parser, command}; +use clap::Parser; use ff_ext::GoldilocksExt2; use itertools::Itertools; use mpcs::BasefoldDefault; diff --git a/ceno_zkvm/src/bin/lookup_keccak.rs b/ceno_zkvm/src/bin/lookup_keccak.rs index 273d2d7ff..501a1d677 100644 --- a/ceno_zkvm/src/bin/lookup_keccak.rs +++ b/ceno_zkvm/src/bin/lookup_keccak.rs @@ -1,5 +1,5 @@ use ceno_zkvm::precompiles::{run_lookup_keccakf, setup_lookup_keccak_gkr_circuit}; -use clap::{Parser, command}; +use clap::Parser; use ff_ext::GoldilocksExt2; use itertools::Itertools; use mpcs::BasefoldDefault; diff --git a/ceno_zkvm/src/precompiles/lookup_keccakf.rs b/ceno_zkvm/src/precompiles/lookup_keccakf.rs index f18e19bee..8439fa090 100644 --- a/ceno_zkvm/src/precompiles/lookup_keccakf.rs +++ b/ceno_zkvm/src/precompiles/lookup_keccakf.rs @@ -389,7 +389,7 @@ impl ProtocolBuilder for KeccakLayout { // iterator over split witnesses let mut rotation_witness = rotation_witness.iter(); - for i in 0..5 { + for (i, rc) in ROTATION_CONSTANTS.iter().enumerate() { #[allow(clippy::needless_range_loop)] for j in 0..5 { let arg = theta_output @@ -397,7 +397,7 @@ impl ProtocolBuilder for KeccakLayout { .iter() .map(|e| e.expr()) .collect_vec(); - let (sizes, _) = rotation_split(ROTATION_CONSTANTS[j][i]); + let (sizes, _) = rotation_split(rc[j]); let many = sizes.len(); let rep_split = zip_eq(sizes, rotation_witness.by_ref().take(many)) .map(|(sz, wit)| (sz, wit.expr())) diff --git a/ceno_zkvm/src/scheme/mock_prover.rs b/ceno_zkvm/src/scheme/mock_prover.rs index ef3e77201..a477b1c6a 100644 --- a/ceno_zkvm/src/scheme/mock_prover.rs +++ b/ceno_zkvm/src/scheme/mock_prover.rs @@ -783,29 +783,27 @@ impl<'a, E: ExtensionField + Hash> MockProver { .collect(); // Count lookups infered from ConstraintSystem from all instances into lkm_from_cs. - for i in 0..selected_count { + for (arg0, arg1) in args_eval[0] + .iter() + .zip(args_eval[1].iter()) + .take(selected_count) + { match rom_type { ROMType::Dynamic => { - lkm_from_cs.assert_dynamic_range(args_eval[0][i], args_eval[1][i]); + lkm_from_cs.assert_dynamic_range(*arg0, *arg1); } ROMType::DoubleU8 => { - lkm_from_cs.assert_double_u8(args_eval[0][i], args_eval[1][i]); - } - ROMType::And => { - lkm_from_cs.lookup_and_byte(args_eval[0][i], args_eval[1][i]) - } - ROMType::Or => lkm_from_cs.lookup_or_byte(args_eval[0][i], args_eval[1][i]), - ROMType::Xor => { - lkm_from_cs.lookup_xor_byte(args_eval[0][i], args_eval[1][i]) - } - ROMType::Ltu => { - lkm_from_cs.lookup_ltu_byte(args_eval[0][i], args_eval[1][i]) + lkm_from_cs.assert_double_u8(*arg0, *arg1); } + ROMType::And => lkm_from_cs.lookup_and_byte(*arg0, *arg1), + ROMType::Or => lkm_from_cs.lookup_or_byte(*arg0, *arg1), + ROMType::Xor => lkm_from_cs.lookup_xor_byte(*arg0, *arg1), + ROMType::Ltu => lkm_from_cs.lookup_ltu_byte(*arg0, *arg1), ROMType::Pow => { - assert_eq!(args_eval[0][i], 2); - lkm_from_cs.lookup_pow2(args_eval[1][i]) + assert_eq!(*arg0, 2); + lkm_from_cs.lookup_pow2(*arg1) } - ROMType::Instruction => lkm_from_cs.fetch(args_eval[0][i] as u32), + ROMType::Instruction => lkm_from_cs.fetch(*arg0 as u32), }; } } diff --git a/ceno_zkvm/src/uint/arithmetic.rs b/ceno_zkvm/src/uint/arithmetic.rs index a0e2fca8c..d07a66e46 100644 --- a/ceno_zkvm/src/uint/arithmetic.rs +++ b/ceno_zkvm/src/uint/arithmetic.rs @@ -798,7 +798,7 @@ mod tests { #[test] fn test_add_mul2() { - let witness_values: Vec> = vec![ + let witness_values: Vec> = [ // alloc a = 1 + 1 * 2^16 vec![1, 1, 0, 0], // alloc b = 2 + 1 * 2^16 From 4cbfbbfe05bfd7eab7d933fa4b5ed3a8f8199622 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Mon, 19 Jan 2026 13:59:04 +0800 Subject: [PATCH 5/6] restore --- ceno_zkvm/src/precompiles/lookup_keccakf.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ceno_zkvm/src/precompiles/lookup_keccakf.rs b/ceno_zkvm/src/precompiles/lookup_keccakf.rs index 8439fa090..39a32d841 100644 --- a/ceno_zkvm/src/precompiles/lookup_keccakf.rs +++ b/ceno_zkvm/src/precompiles/lookup_keccakf.rs @@ -389,7 +389,8 @@ impl ProtocolBuilder for KeccakLayout { // iterator over split witnesses let mut rotation_witness = rotation_witness.iter(); - for (i, rc) in ROTATION_CONSTANTS.iter().enumerate() { + #[allow(clippy::needless_range_loop)] + for i in 0..5 { #[allow(clippy::needless_range_loop)] for j in 0..5 { let arg = theta_output @@ -397,7 +398,7 @@ impl ProtocolBuilder for KeccakLayout { .iter() .map(|e| e.expr()) .collect_vec(); - let (sizes, _) = rotation_split(rc[j]); + let (sizes, _) = rotation_split(ROTATION_CONSTANTS[j][i]); let many = sizes.len(); let rep_split = zip_eq(sizes, rotation_witness.by_ref().take(many)) .map(|(sz, wit)| (sz, wit.expr())) From 9e1c841033dc3663b49c31b1a66f5590d7e7fe23 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Mon, 19 Jan 2026 14:43:56 +0800 Subject: [PATCH 6/6] upgrade vergen2-git to 9.1.0 --- Cargo.lock | 111 ++++++++++++++++++++++++++++---------------- ceno_cli/Cargo.toml | 2 +- 2 files changed, 72 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index be858ab57..1296a001b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -304,9 +304,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" dependencies = [ "backtrace", ] @@ -914,11 +914,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.9" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -966,6 +966,16 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo-platform" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" +dependencies = [ + "serde", + "serde_core", +] + [[package]] name = "cargo_metadata" version = "0.18.1" @@ -973,7 +983,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", - "cargo-platform", + "cargo-platform 0.1.9", "semver 1.0.26", "serde", "serde_json", @@ -987,7 +997,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", - "cargo-platform", + "cargo-platform 0.1.9", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "cargo_metadata" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" +dependencies = [ + "camino", + "cargo-platform 0.3.2", "semver 1.0.26", "serde", "serde_json", @@ -1771,12 +1795,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -5469,13 +5493,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", + "regex-automata 0.4.13", "regex-syntax 0.8.5", ] @@ -5490,9 +5514,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -5707,9 +5731,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" @@ -5867,9 +5891,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -5895,18 +5919,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -5915,14 +5939,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -6381,9 +6406,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" dependencies = [ "deranged", "itoa", @@ -6391,22 +6416,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "71e552d1249bf61ac2a52db88179fd0673def1e1ad8243a00d9ec9ed71fee3dd" dependencies = [ "num-conv", "time-core", @@ -6737,12 +6762,12 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" -version = "9.0.6" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" +checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" dependencies = [ "anyhow", - "cargo_metadata 0.19.2", + "cargo_metadata 0.23.1", "derive_builder", "regex", "rustc_version 0.4.1", @@ -6753,9 +6778,9 @@ dependencies = [ [[package]] name = "vergen-git2" -version = "1.0.7" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f6ee511ec45098eabade8a0750e76eec671e7fb2d9360c563911336bea9cac1" +checksum = "d51ab55ddf1188c8d679f349775362b0fa9e90bd7a4ac69838b2a087623f0d57" dependencies = [ "anyhow", "derive_builder", @@ -6768,9 +6793,9 @@ dependencies = [ [[package]] name = "vergen-lib" -version = "0.1.6" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" dependencies = [ "anyhow", "derive_builder", @@ -7364,3 +7389,9 @@ dependencies = [ "sha3", "subtle", ] + +[[package]] +name = "zmij" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2" diff --git a/ceno_cli/Cargo.toml b/ceno_cli/Cargo.toml index f967064ce..1ddf61247 100644 --- a/ceno_cli/Cargo.toml +++ b/ceno_cli/Cargo.toml @@ -46,7 +46,7 @@ gkr_iop = { path = "../gkr_iop" } mpcs.workspace = true [build-dependencies] -vergen-git2 = { version = "1", features = ["build", "cargo", "rustc", "emit_and_set"] } +vergen-git2 = { version = "9.1.0", features = ["build", "cargo", "rustc", "emit_and_set"] } [features] gpu = ["gkr_iop/gpu", "ceno_zkvm/gpu", "ceno_recursion/gpu", "dep:openvm-cuda-backend", "openvm-native-circuit/cuda"]