Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
06a139e
verify continuation proofs
hero78119 Oct 27, 2025
a7d042b
optionally halt and refactor
hero78119 Oct 28, 2025
146ef72
only first chunk allow mem init
hero78119 Oct 28, 2025
a210d89
key gen with entry pc
hero78119 Oct 28, 2025
d0228d4
multi-shard zkvm prover and cli
hero78119 Oct 28, 2025
bfad066
cli verify multi-proofs
hero78119 Oct 28, 2025
e0f0ca8
min max shard cycle from args
hero78119 Oct 29, 2025
5b2e935
chores: rename
hero78119 Oct 29, 2025
808615d
add unittest
hero78119 Oct 29, 2025
e4e025a
chores: fmt
hero78119 Oct 29, 2025
85f2092
documentation
hero78119 Oct 29, 2025
3bf5b2c
merge with base branch
hero78119 Nov 3, 2025
609132f
api to extract global sum
hero78119 Oct 31, 2025
9f79c9c
restore global verifier check
hero78119 Nov 3, 2025
208ee16
debug log
hero78119 Nov 3, 2025
fc3adc8
wip
hero78119 Nov 2, 2025
586af60
local finalize with init value
hero78119 Nov 4, 2025
4b4ca01
fix ecc verifier
hero78119 Nov 4, 2025
6d555d1
first shard pass
hero78119 Nov 4, 2025
d6845a3
refactor hints to init table
hero78119 Nov 4, 2025
83236cd
fix hint circuit processing
hero78119 Nov 4, 2025
edd469e
all kind shard mock proving pass
hero78119 Nov 4, 2025
7aa2042
add fixed commitment without omc table
hero78119 Nov 4, 2025
3ac6336
separate fixed commit into shards setting
hero78119 Nov 4, 2025
54fff98
multi-shards in integration test
hero78119 Nov 4, 2025
9698b7f
verifier check cross shard rw
hero78119 Nov 4, 2025
9312ab1
chores 3 shard keccak ci
hero78119 Nov 4, 2025
8a14c9b
Merge branch 'feat/all_gkr_iop' into feat/multi_shard_ceno_cli
kunxian-xia Nov 4, 2025
f04cfe7
chores: cleanup comments
hero78119 Nov 5, 2025
1cf13c9
chores: decorated comments and cosmetics
hero78119 Nov 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,18 @@ jobs:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno --hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/release/examples/fibonacci

- name: Run 3 shards fibonacci (debug)
env:
RUST_LOG: debug
RUSTFLAGS: "-C opt-level=3"
MOCK_PROVING: 1
run: cargo run --package ceno_zkvm --features sanity-check --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=20000 --hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/debug/examples/fibonacci

- name: Run 3 shards fibonacci (release)
env:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --features sanity-check --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=20000 --hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/release/examples/fibonacci

# note: the global chip does not support goldilocks field yet
# - name: Run fibonacci (release + goldilocks)
# env:
Expand All @@ -81,6 +93,18 @@ jobs:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno examples/target/riscv32im-ceno-zkvm-elf/release/examples/ceno_rt_alloc

- name: Run 3 shards Guest Heap Alloc (debug)
env:
RUST_LOG: debug
RUSTFLAGS: "-C opt-level=3"
MOCK_PROVING: 1
run: cargo run --package ceno_zkvm --features sanity-check --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=300 examples/target/riscv32im-ceno-zkvm-elf/debug/examples/ceno_rt_alloc

- name: Run 3 shards Guest Heap Alloc (release)
env:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=1600 examples/target/riscv32im-ceno-zkvm-elf/release/examples/keccak_syscall

# note: the global chip does not support goldilocks field yet
# - name: Run Guest Heap Alloc (release + goldilocks)
# env:
Expand All @@ -92,6 +116,11 @@ jobs:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno examples/target/riscv32im-ceno-zkvm-elf/release/examples/keccak_syscall

- name: Run 3 shard keccak_syscall (release)
env:
RUSTFLAGS: "-C opt-level=3"
run: cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno --min-cycle-per-shard=10 --max-cycle-per-shard=1600 examples/target/riscv32im-ceno-zkvm-elf/release/examples/keccak_syscall

- name: Run secp256k1_add_syscall (release)
env:
RUSTFLAGS: "-C opt-level=3"
Expand Down
31 changes: 22 additions & 9 deletions ceno_cli/src/commands/common_args/ceno.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,21 @@ pub struct CenoOptions {
#[arg(long)]
pub out_vk: Option<PathBuf>,

/// shard id
/// prover id
#[arg(long, default_value = "0")]
shard_id: u32,
prover_id: u32,

/// number of total shards.
/// number of available prover.
#[arg(long, default_value = "1")]
max_num_shards: u32,
num_provers: u32,

// min cycle per shard
#[arg(long, default_value = "16777216")] // 16777216 = 2^24
min_cycle_per_shard: u64,

// max cycle per shard
#[arg(long, default_value = "536870912")] // 536870912 = 2^29
max_cycle_per_shard: u64,

/// Profiling granularity.
/// Setting any value restricts logs to profiling information
Expand Down Expand Up @@ -345,7 +353,12 @@ fn run_elf_inner<
std::fs::read(elf_path).context(format!("failed to read {}", elf_path.display()))?;
let program = Program::load_elf(&elf_bytes, u32::MAX).context("failed to load elf")?;
print_cargo_message("Loaded", format_args!("{}", elf_path.display()));
let shards = Shards::new(options.shard_id as usize, options.max_num_shards as usize);
let multi_prover = MultiProver::new(
options.prover_id as usize,
options.num_provers as usize,
options.min_cycle_per_shard,
options.max_cycle_per_shard,
);

let public_io = options
.read_public_io()
Expand Down Expand Up @@ -394,7 +407,7 @@ fn run_elf_inner<
create_prover(backend.clone()),
program,
platform,
shards,
multi_prover,
&hints,
&public_io,
options.max_steps,
Expand Down Expand Up @@ -439,12 +452,12 @@ fn prove_inner<
checkpoint: Checkpoint,
) -> anyhow::Result<()> {
let result = run_elf_inner::<E, PCS, P>(args, compilation_options, elf_path, checkpoint)?;
let zkvm_proof = result.proof.expect("PrepSanityCheck should yield proof.");
let zkvm_proofs = result.proofs.expect("PrepSanityCheck should yield proof.");
let vk = result.vk.expect("PrepSanityCheck should yield vk.");

let start = std::time::Instant::now();
let verifier = ZKVMVerifier::new(vk);
if let Err(e) = verify(&zkvm_proof, &verifier) {
if let Err(e) = verify(zkvm_proofs.clone(), &verifier) {
bail!("Verification failed: {e:?}");
}
print_cargo_message(
Expand All @@ -457,7 +470,7 @@ fn prove_inner<
print_cargo_message("Writing", format_args!("proof to {}", path.display()));
let proof_file =
File::create(&path).context(format!("failed to create {}", path.display()))?;
bincode::serialize_into(proof_file, &zkvm_proof)
bincode::serialize_into(proof_file, &zkvm_proofs)
.context("failed to serialize zkvm proof")?;
}
if let Some(out_vk) = args.out_vk.as_ref() {
Expand Down
4 changes: 2 additions & 2 deletions ceno_cli/src/commands/verify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fn run_inner<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize>(
) -> anyhow::Result<()> {
let start = std::time::Instant::now();

let zkvm_proof: ZKVMProof<E, PCS> =
let zkvm_proofs: Vec<ZKVMProof<E, PCS>> =
bincode::deserialize_from(File::open(&args.proof).context("Failed to open proof file")?)
.context("Failed to deserialize proof file")?;
print_cargo_message(
Expand All @@ -80,7 +80,7 @@ fn run_inner<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize>(

let start = std::time::Instant::now();
let verifier = ZKVMVerifier::new(vk);
if let Err(e) = verify(&zkvm_proof, &verifier) {
if let Err(e) = verify(zkvm_proofs, &verifier) {
bail!("Verification failed: {e:?}");
}

Expand Down
11 changes: 7 additions & 4 deletions ceno_zkvm/benches/fibonacci.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;

use ceno_zkvm::{e2e::Shards, scheme::verifier::ZKVMVerifier};
use ceno_zkvm::{e2e::MultiProver, scheme::verifier::ZKVMVerifier};
use mpcs::BasefoldDefault;
use transcript::BasicTranscript;

Expand Down Expand Up @@ -54,13 +54,16 @@ fn fibonacci_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Checkpoint::Complete,
);
let proof = result.proof.expect("PrepSanityCheck do not provide proof");
let proof = result
.proofs
.expect("PrepSanityCheck do not provide proof")
.remove(0);
let vk = result.vk.expect("PrepSanityCheck do not provide verifier");

println!("e2e proof {}", proof);
Expand Down Expand Up @@ -92,7 +95,7 @@ fn fibonacci_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Expand Down
4 changes: 2 additions & 2 deletions ceno_zkvm/benches/fibonacci_witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use std::{fs, path::PathBuf, time::Duration};
mod alloc;
use criterion::*;

use ceno_zkvm::e2e::Shards;
use ceno_zkvm::e2e::MultiProver;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
use mpcs::BasefoldDefault;
Expand Down Expand Up @@ -66,7 +66,7 @@ fn fibonacci_witness(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Expand Down
4 changes: 2 additions & 2 deletions ceno_zkvm/benches/is_prime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use ceno_zkvm::{
scheme::{create_backend, create_prover},
};
mod alloc;
use ceno_zkvm::e2e::Shards;
use ceno_zkvm::e2e::MultiProver;
use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
Expand Down Expand Up @@ -63,7 +63,7 @@ fn is_prime_1(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&hints,
&[],
max_steps,
Expand Down
11 changes: 7 additions & 4 deletions ceno_zkvm/benches/keccak.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use ceno_zkvm::{
scheme::{create_backend, create_prover},
};
mod alloc;
use ceno_zkvm::{e2e::Shards, scheme::verifier::ZKVMVerifier};
use ceno_zkvm::{e2e::MultiProver, scheme::verifier::ZKVMVerifier};
use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
Expand Down Expand Up @@ -51,13 +51,16 @@ fn keccak_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Checkpoint::Complete,
);
let proof = result.proof.expect("PrepSanityCheck do not provide proof");
let proof = result
.proofs
.expect("PrepSanityCheck do not provide proof")
.remove(0);
let vk = result.vk.expect("PrepSanityCheck do not provide verifier");

println!("e2e proof {}", proof);
Expand Down Expand Up @@ -86,7 +89,7 @@ fn keccak_prove(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&Vec::from(&hints),
&[],
max_steps,
Expand Down
4 changes: 2 additions & 2 deletions ceno_zkvm/benches/quadratic_sorting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use ceno_zkvm::{
scheme::{create_backend, create_prover},
};
mod alloc;
use ceno_zkvm::e2e::Shards;
use ceno_zkvm::e2e::MultiProver;
use criterion::*;
use ff_ext::BabyBearExt4;
use gkr_iop::cpu::default_backend_config;
Expand Down Expand Up @@ -64,7 +64,7 @@ fn quadratic_sorting_1(c: &mut Criterion) {
create_prover(backend.clone()),
program.clone(),
platform.clone(),
Shards::default(),
MultiProver::default(),
&hints,
&[],
max_steps,
Expand Down
2 changes: 1 addition & 1 deletion ceno_zkvm/benches/riscv_add.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ fn bench_add(c: &mut Criterion) {

let pk = zkvm_cs
.clone()
.key_gen::<Pcs>(pp, vp, zkvm_fixed_traces)
.key_gen::<Pcs>(pp, vp, 0, zkvm_fixed_traces)
.expect("keygen failed");

let (max_num_variables, security_level) = default_backend_config();
Expand Down
Loading