Skip to content

Commit 9fcd535

Browse files
committed
e2e build pass
2 parents 125d092 + 9840fdf commit 9fcd535

File tree

9 files changed

+170
-246
lines changed

9 files changed

+170
-246
lines changed

.github/workflows/integration.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
with:
4444
path: |
4545
target/
46-
example/target/
46+
examples/target/
4747
ceno_rt/target/
4848
key: integration-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
4949
- uses: dtolnay/rust-toolchain@nightly

.github/workflows/lints.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
~/.cargo/git/db/
3737
target/
3838
ceno_rt/target/
39-
example/target/
39+
examples/target/
4040
key: lint-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
4141
restore-keys: lint-${{ runner.os }}-cargo-
4242

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
~/.cargo/git/db/
3636
target/
3737
ceno_rt/target/
38-
example/target/
38+
examples/target/
3939
key: tests-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
4040
restore-keys: tests-${{ runner.os }}-cargo-
4141

ceno_zkvm/src/keygen.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl<E: ExtensionField> ZKVMConstraintSystem<E> {
3636
assert!(vm_pk.circuit_pks.insert(c_name, circuit_pk).is_none());
3737
}
3838

39-
vm_pk.commit_fixed(fixed_traces);
39+
vm_pk.commit_fixed(fixed_traces)?;
4040

4141
vm_pk.initial_global_state_expr = self.initial_global_state_expr;
4242
vm_pk.finalize_global_state_expr = self.finalize_global_state_expr;

ceno_zkvm/src/scheme.rs

Lines changed: 9 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ pub struct ZKVMProof<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> {
141141
pub pi_evals: Vec<E>,
142142
opcode_proofs: BTreeMap<String, (usize, ZKVMOpcodeProof<E>)>,
143143
table_proofs: BTreeMap<String, (usize, ZKVMTableProof<E>)>,
144+
witin_commit: <PCS as PolynomialCommitmentScheme<E>>::Commitment,
144145
pub fixed_witin_opening_proof: PCS::Proof,
145146
}
146147

@@ -150,13 +151,15 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProof<E, PCS> {
150151
pi_evals: Vec<E>,
151152
opcode_proofs: BTreeMap<String, (usize, ZKVMOpcodeProof<E>)>,
152153
table_proofs: BTreeMap<String, (usize, ZKVMTableProof<E>)>,
154+
witin_commit: <PCS as PolynomialCommitmentScheme<E>>::Commitment,
153155
fixed_witin_opening_proof: PCS::Proof,
154156
) -> Self {
155157
Self {
156158
raw_pi,
157159
pi_evals,
158160
opcode_proofs,
159161
table_proofs,
162+
witin_commit,
160163
fixed_witin_opening_proof,
161164
}
162165
}
@@ -210,32 +213,10 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize> fmt::Dis
210213
// also provide by-circuit stats
211214
let mut by_circuitname_stats = HashMap::new();
212215
// opcode circuit mpcs size
213-
let mpcs_opcode_commitment = self
214-
.opcode_proofs
215-
.iter()
216-
.map(|(circuit_name, (_, proof))| {
217-
let size = bincode::serialized_size(&proof.wits_commit);
218-
size.inspect(|size| {
219-
*by_circuitname_stats.entry(circuit_name).or_insert(0) += size;
220-
})
221-
})
222-
.collect::<Result<Vec<u64>, _>>()
223-
.expect("serialization error")
224-
.iter()
225-
.sum::<u64>();
226-
let mpcs_opcode_opening = self
227-
.opcode_proofs
228-
.iter()
229-
.map(|(circuit_name, (_, proof))| {
230-
let size = bincode::serialized_size(&proof.wits_opening_proof);
231-
size.inspect(|size| {
232-
*by_circuitname_stats.entry(circuit_name).or_insert(0) += size;
233-
})
234-
})
235-
.collect::<Result<Vec<u64>, _>>()
236-
.expect("serialization error")
237-
.iter()
238-
.sum::<u64>();
216+
let mpcs_opcode_commitment =
217+
bincode::serialized_size(&self.witin_commit).expect("serialization error");
218+
let mpcs_opcode_opening =
219+
bincode::serialized_size(&self.fixed_witin_opening_proof).expect("serialization error");
239220
// opcode circuit for tower proof size
240221
let tower_proof_opcode = self
241222
.opcode_proofs
@@ -264,46 +245,6 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize> fmt::Dis
264245
.expect("serialization error")
265246
.iter()
266247
.sum::<u64>();
267-
// table circuit mpcs size
268-
let mpcs_table_commitment = self
269-
.table_proofs
270-
.iter()
271-
.map(|(circuit_name, (_, proof))| {
272-
let size = bincode::serialized_size(&proof.wits_commit);
273-
size.inspect(|size| {
274-
*by_circuitname_stats.entry(circuit_name).or_insert(0) += size;
275-
})
276-
})
277-
.collect::<Result<Vec<u64>, _>>()
278-
.expect("serialization error")
279-
.iter()
280-
.sum::<u64>();
281-
let mpcs_table_opening = self
282-
.table_proofs
283-
.iter()
284-
.map(|(circuit_name, (_, proof))| {
285-
let size = bincode::serialized_size(&proof.wits_opening_proof);
286-
size.inspect(|size| {
287-
*by_circuitname_stats.entry(circuit_name).or_insert(0) += size;
288-
})
289-
})
290-
.collect::<Result<Vec<u64>, _>>()
291-
.expect("serialization error")
292-
.iter()
293-
.sum::<u64>();
294-
let mpcs_table_fixed_opening = self
295-
.table_proofs
296-
.iter()
297-
.map(|(circuit_name, (_, proof))| {
298-
let size = bincode::serialized_size(&proof.fixed_opening_proof);
299-
size.inspect(|size| {
300-
*by_circuitname_stats.entry(circuit_name).or_insert(0) += size;
301-
})
302-
})
303-
.collect::<Result<Vec<u64>, _>>()
304-
.expect("serialization error")
305-
.iter()
306-
.sum::<u64>();
307248
// table circuit for tower proof size
308249
let tower_proof_table = self
309250
.table_proofs
@@ -355,13 +296,10 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize> fmt::Dis
355296
write!(
356297
f,
357298
"overall_size {:.2}mb. \n\
358-
opcode mpcs commitment {:?}% \n\
359-
opcode mpcs opening {:?}% \n\
299+
mpcs commitment {:?}% \n\
300+
mpcs opening {:?}% \n\
360301
opcode tower proof {:?}% \n\
361302
opcode main sumcheck proof {:?}% \n\
362-
table mpcs commitment {:?}% \n\
363-
table mpcs opening {:?}% \n\
364-
table mpcs fixed opening {:?}% \n\
365303
table tower proof {:?}% \n\
366304
table same r sumcheck proof {:?}% \n\n\
367305
by circuit_name break down: \n\
@@ -372,9 +310,6 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E> + Serialize> fmt::Dis
372310
(mpcs_opcode_opening * 100).div(overall_size),
373311
(tower_proof_opcode * 100).div(overall_size),
374312
(main_sumcheck_opcode * 100).div(overall_size),
375-
(mpcs_table_commitment * 100).div(overall_size),
376-
(mpcs_table_opening * 100).div(overall_size),
377-
(mpcs_table_fixed_opening * 100).div(overall_size),
378313
(tower_proof_table * 100).div(overall_size),
379314
(same_r_sumcheck_table * 100).div(overall_size),
380315
by_circuitname_stats,

ceno_zkvm/src/scheme/prover.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use sumcheck::{
1616
structs::{IOPProverMessage, IOPProverState},
1717
util::optimal_sumcheck_threads,
1818
};
19-
use transcript::{ForkableTranscript, Transcript};
19+
use transcript::Transcript;
2020
use witness::{RowMajorMatrix, next_pow2_instance_padding};
2121

2222
use crate::{
@@ -59,7 +59,7 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProver<E, PCS> {
5959
&self,
6060
witnesses: ZKVMWitnesses<E>,
6161
pi: PublicValues<u32>,
62-
mut transcript: impl ForkableTranscript<E>,
62+
mut transcript: impl Transcript<E>,
6363
) -> Result<ZKVMProof<E, PCS>, ZKVMError> {
6464
let span = entered_span!("commit_to_fixed_commit", profiling_1 = true);
6565
let raw_pi = pi.to_vec::<E>();
@@ -128,10 +128,12 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProver<E, PCS> {
128128
);
129129
}
130130
// batch commit witness
131-
let witin_commit = PCS::batch_commit_and_write(&self.pk.pp, wits_rmms, &mut transcript)
132-
.map_err(ZKVMError::PCSError)?;
131+
let witin_commit_with_witness =
132+
PCS::batch_commit_and_write(&self.pk.pp, wits_rmms, &mut transcript)
133+
.map_err(ZKVMError::PCSError)?;
133134
// retrieve mle from commitment
134-
let mut witness_mles = PCS::get_arc_mle_witness_from_commitment(&witin_commit);
135+
let mut witness_mles = PCS::get_arc_mle_witness_from_commitment(&witin_commit_with_witness);
136+
let witin_commit = PCS::get_pure_commitment(&witin_commit_with_witness);
135137
exit_span!(commit_to_traces_span);
136138

137139
// retrive fixed mle from pk
@@ -161,6 +163,7 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProver<E, PCS> {
161163
// do nothing without point and evaluation insertion
162164
return Ok::<(Vec<_>, Vec<Vec<_>>, Vec<Option<usize>>), ZKVMError>((points,evaluations,witin_fixed_mapping));
163165
}
166+
transcript.append_field_element(&E::BaseField::from_u64(index as u64));
164167
// TODO: add an enum for circuit type either in constraint_system or vk
165168
let cs = pk.get_cs();
166169
let witness_mle = witness_mles.split_off(cs.num_witin as usize);
@@ -193,7 +196,9 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProver<E, PCS> {
193196
);
194197
points.push(point);
195198
evaluations.push(opcode_proof.wits_in_evals.clone());
196-
witin_fixed_mapping.push(self.pk.fixed_trace_index[index].clone());
199+
// there is no fixed commitment in opcode circuit
200+
assert_eq!(self.pk.fixed_trace_index[index], None);
201+
witin_fixed_mapping.push(None);
197202
opcode_proofs
198203
.insert(circuit_name.clone(), (index, opcode_proof));
199204
} else {
@@ -241,7 +246,7 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProver<E, PCS> {
241246
.fixed_commit_wd
242247
.as_ref()
243248
.expect("must have fixed commitment witness"),
244-
&witin_commit,
249+
&witin_commit_with_witness,
245250
witin_fixed_mapping,
246251
&points,
247252
&evaluations,
@@ -255,6 +260,7 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZKVMProver<E, PCS> {
255260
pi_evals,
256261
opcode_proofs,
257262
table_proofs,
263+
witin_commit,
258264
mpcs_opening_proof,
259265
);
260266
exit_span!(main_proofs_span);

ceno_zkvm/src/scheme/tests.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,20 +127,23 @@ fn test_rw_lk_expression_combination() {
127127
let rmm = zkvm_witness.into_iter_sorted().next().unwrap().1.remove(0);
128128
let wits_in = rmm.to_mles();
129129
// commit to main traces
130-
let commit = Pcs::batch_commit_and_write(&prover.pk.pp, rmm, &mut transcript).unwrap();
130+
let commit_with_witness =
131+
Pcs::batch_commit_and_write(&prover.pk.pp, vec![rmm], &mut transcript).unwrap();
132+
let witin_commit = Pcs::get_pure_commitment(&commit_with_witness);
133+
// write commitment into transcript and derive challenges from it
134+
Pcs::write_commitment(&witin_commit, &mut transcript).unwrap();
135+
131136
let wits_in = wits_in.into_iter().map(|v| v.into()).collect_vec();
132137
let prover_challenges = [
133138
transcript.read_challenge().elements,
134139
transcript.read_challenge().elements,
135140
];
136141

137-
let proof = prover
142+
let (proof, _) = prover
138143
.create_opcode_proof(
139144
name.as_str(),
140-
&prover.pk.pp,
141145
prover.pk.circuit_pks.get(&name).unwrap(),
142146
wits_in,
143-
commit,
144147
&[],
145148
num_instances,
146149
&mut transcript,
@@ -153,7 +156,7 @@ fn test_rw_lk_expression_combination() {
153156
let verifier = ZKVMVerifier::new(vk.clone());
154157
let mut v_transcript = BasicTranscriptWithStat::new(&stat_recorder, b"test");
155158
// write commitment into transcript and derive challenges from it
156-
Pcs::write_commitment(&proof.wits_commit, &mut v_transcript).unwrap();
159+
Pcs::write_commitment(&witin_commit, &mut v_transcript).unwrap();
157160
let verifier_challenges = [
158161
v_transcript.read_challenge().elements,
159162
v_transcript.read_challenge().elements,

0 commit comments

Comments
 (0)