Skip to content

Commit 329e46b

Browse files
chore: fix tests + cargo fmt
1 parent a1777fb commit 329e46b

File tree

16 files changed

+373
-570
lines changed

16 files changed

+373
-570
lines changed

Cargo.lock

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
use std::{borrow::BorrowMut, sync::Arc};
2+
3+
use eyre::Result;
4+
use openvm_stark_backend::{
5+
keygen::types::{MultiStarkProvingKey, MultiStarkVerifyingKey},
6+
proof::Proof,
7+
prover::{AirProvingContext, DeviceDataTransporter, ProvingContext},
8+
AirRef, PartitionedBaseAir, StarkEngine,
9+
};
10+
use openvm_stark_sdk::config::baby_bear_poseidon2::{
11+
BabyBearPoseidon2CpuEngine, DuplexSponge, DIGEST_SIZE, F,
12+
};
13+
use p3_air::{Air, AirBuilder, AirBuilderWithPublicValues, BaseAir, BaseAirWithPublicValues};
14+
use p3_field::PrimeCharacteristicRing;
15+
use p3_matrix::{dense::RowMajorMatrix, Matrix};
16+
17+
use crate::{circuit::deferral::DeferralCircuitPvs, SC};
18+
19+
pub(in crate::tests) struct EmptyAirWithPvs(pub(in crate::tests) usize);
20+
21+
impl<F> BaseAir<F> for EmptyAirWithPvs {
22+
fn width(&self) -> usize {
23+
1
24+
}
25+
}
26+
impl<F> BaseAirWithPublicValues<F> for EmptyAirWithPvs {
27+
fn num_public_values(&self) -> usize {
28+
self.0
29+
}
30+
}
31+
impl<F> PartitionedBaseAir<F> for EmptyAirWithPvs {}
32+
impl<AB: AirBuilder + AirBuilderWithPublicValues> Air<AB> for EmptyAirWithPvs {
33+
fn eval(&self, builder: &mut AB) {
34+
let main = builder.main();
35+
let local = main.row_slice(0).unwrap();
36+
builder.assert_zero(local[0].clone());
37+
38+
let pvs: Vec<AB::Expr> = builder
39+
.public_values()
40+
.iter()
41+
.map(|pv| (*pv).into())
42+
.collect();
43+
for pv in pvs {
44+
builder.assert_eq(pv.clone(), pv);
45+
}
46+
}
47+
}
48+
49+
pub(in crate::tests) fn generate_dummy_def_proof(
50+
engine: &BabyBearPoseidon2CpuEngine<DuplexSponge>,
51+
pk: &MultiStarkProvingKey<SC>,
52+
input_commit: [F; DIGEST_SIZE],
53+
output_commit: [F; DIGEST_SIZE],
54+
) -> Proof<SC> {
55+
let mut pvs = vec![F::ZERO; DeferralCircuitPvs::<u8>::width()];
56+
let pvs_ref: &mut DeferralCircuitPvs<F> = pvs.as_mut_slice().borrow_mut();
57+
pvs_ref.input_commit = input_commit;
58+
pvs_ref.output_commit = output_commit;
59+
60+
let trace = RowMajorMatrix::new(vec![F::ZERO], 1);
61+
let ctx = ProvingContext {
62+
per_trace: vec![(
63+
0,
64+
AirProvingContext {
65+
cached_mains: vec![],
66+
common_main: trace,
67+
public_values: pvs,
68+
},
69+
)],
70+
};
71+
let d_pk = engine.device().transport_pk_to_device(pk);
72+
engine.prove(&d_pk, ctx).unwrap()
73+
}
74+
75+
pub(in crate::tests) fn generate_single_dummy_def_proof(
76+
) -> Result<(Arc<MultiStarkVerifyingKey<SC>>, Proof<SC>)> {
77+
let engine = BabyBearPoseidon2CpuEngine::<DuplexSponge>::new(super::app_system_params());
78+
let (pk, vk) = engine
79+
.keygen(&[Arc::new(EmptyAirWithPvs(DeferralCircuitPvs::<u8>::width())) as AirRef<SC>]);
80+
let proof = generate_dummy_def_proof(
81+
&engine,
82+
&pk,
83+
[F::ONE; DIGEST_SIZE],
84+
[F::from_u8(2); DIGEST_SIZE],
85+
);
86+
Ok((Arc::new(vk), proof))
87+
}

crates/continuations/src/tests/e2e.rs

Lines changed: 6 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ use openvm_rv32im_circuit::{Rv32I, Rv32Io, Rv32M};
2424
use openvm_rv32im_transpiler::{
2525
Rv32ITranspilerExtension, Rv32IoTranspilerExtension, Rv32MTranspilerExtension,
2626
};
27-
use openvm_stark_backend::{
28-
proof::Proof,
29-
prover::{AirProvingContext, DeviceDataTransporter, ProvingContext},
30-
AirRef, PartitionedBaseAir, StarkEngine,
31-
};
27+
use openvm_stark_backend::{proof::Proof, AirRef, StarkEngine};
3228
use openvm_stark_sdk::{
3329
config::{
3430
baby_bear_bn254_poseidon2::BabyBearBn254Poseidon2CpuEngine,
@@ -42,12 +38,14 @@ use openvm_transpiler::{
4238
elf::Elf, openvm_platform::memory::MEM_SIZE, transpiler::Transpiler, FromElf,
4339
};
4440
use openvm_verify_stark_host::pvs::{DeferralPvs, DEF_PVS_AIR_ID};
45-
use p3_air::{Air, AirBuilder, AirBuilderWithPublicValues, BaseAir, BaseAirWithPublicValues};
4641
use p3_field::{PrimeCharacteristicRing, PrimeField32};
47-
use p3_matrix::{dense::RowMajorMatrix, Matrix};
4842
use tracing::{warn, Level};
4943

50-
use super::{app_system_params, internal_system_params, leaf_system_params, root_system_params};
44+
use super::{
45+
app_system_params,
46+
dummy::{generate_dummy_def_proof, EmptyAirWithPvs},
47+
internal_system_params, leaf_system_params, root_system_params,
48+
};
5149
use crate::{
5250
circuit::{
5351
deferral::{verify::DeferralMerkleProofs, DeferralCircuitPvs, DEF_HOOK_PVS_AIR_ID},
@@ -76,36 +74,6 @@ const INPUT_RAW_0: [u8; 8] = [1, 2, 3, 4, 5, 6, 7, 8];
7674
const INPUT_RAW_1: [u8; 8] = [8, 7, 6, 5, 4, 3, 2, 1];
7775
const INPUT_RAW_2: [u8; 8] = [9, 9, 9, 9, 9, 9, 9, 9];
7876

79-
struct EmptyAirWithPvs(usize);
80-
81-
impl<F> BaseAir<F> for EmptyAirWithPvs {
82-
fn width(&self) -> usize {
83-
1
84-
}
85-
}
86-
impl<F> BaseAirWithPublicValues<F> for EmptyAirWithPvs {
87-
fn num_public_values(&self) -> usize {
88-
self.0
89-
}
90-
}
91-
impl<F> PartitionedBaseAir<F> for EmptyAirWithPvs {}
92-
impl<AB: AirBuilder + AirBuilderWithPublicValues> Air<AB> for EmptyAirWithPvs {
93-
fn eval(&self, builder: &mut AB) {
94-
let main = builder.main();
95-
let local = main.row_slice(0).unwrap();
96-
builder.assert_zero(local[0].clone());
97-
98-
let pvs: Vec<AB::Expr> = builder
99-
.public_values()
100-
.iter()
101-
.map(|pv| (*pv).into())
102-
.collect();
103-
for pv in pvs {
104-
builder.assert_eq(pv.clone(), pv);
105-
}
106-
}
107-
}
108-
10977
fn make_deferral_extension() -> DeferralExtension {
11078
let fns: Vec<_> = (0..NUM_DEF_CIRCUITS)
11179
.map(|idx| {
@@ -224,34 +192,6 @@ fn generate_set_merkle_proof(
224192
proof
225193
}
226194

227-
fn generate_dummy_def_proof(
228-
engine: &AppEngine,
229-
pk: &openvm_stark_backend::keygen::types::MultiStarkProvingKey<SC>,
230-
input_commit: [F; DIGEST_SIZE],
231-
output_commit: [F; DIGEST_SIZE],
232-
) -> Proof<SC> {
233-
use std::borrow::BorrowMut;
234-
235-
let mut pvs = vec![F::ZERO; DeferralCircuitPvs::<u8>::width()];
236-
let pvs_ref: &mut DeferralCircuitPvs<F> = pvs.as_mut_slice().borrow_mut();
237-
pvs_ref.input_commit = input_commit;
238-
pvs_ref.output_commit = output_commit;
239-
240-
let trace = RowMajorMatrix::new(vec![F::ZERO], 1);
241-
let ctx = ProvingContext {
242-
per_trace: vec![(
243-
0,
244-
AirProvingContext {
245-
cached_mains: vec![],
246-
common_main: trace,
247-
public_values: pvs,
248-
},
249-
)],
250-
};
251-
let d_pk = engine.device().transport_pk_to_device(pk);
252-
engine.prove(&d_pk, ctx).unwrap()
253-
}
254-
255195
fn read_def_pvs(proof: &Proof<SC>) -> DeferralPvs<F> {
256196
*proof.public_values[DEF_PVS_AIR_ID].as_slice().borrow()
257197
}

crates/continuations/src/tests/mod.rs

Lines changed: 7 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ use tracing::Level;
3434
use crate::{prover::ChildVkKind, SC};
3535

3636
#[cfg(feature = "cuda")]
37-
mod e2e;
37+
mod dummy;
3838
#[cfg(feature = "cuda")]
39-
mod verify;
39+
mod e2e;
4040

4141
cfg_if::cfg_if! {
4242
if #[cfg(feature = "cuda")] {
@@ -46,27 +46,24 @@ cfg_if::cfg_if! {
4646
use crate::prover::{
4747
DeferralInnerGpuProver as DeferralInnerProver,
4848
DeferralHookGpuProver as DeferralHookProver,
49-
DeferralVerifyGpuProver as DeferredVerifyProver,
5049
};
5150
use crate::circuit::{
5251
deferral::{
53-
verify::output::expected_output_commit,
5452
DeferralAggregationPvs,
5553
DeferralCircuitPvs,
5654
DEF_AGG_PVS_AIR_ID,
5755
},
58-
root::RootVerifierPvs,
5956
};
6057
use openvm_recursion_circuit::utils::poseidon2_hash_slice_with_states;
6158
use openvm_cuda_backend::{BabyBearPoseidon2GpuEngine, GpuBackend};
62-
use openvm_stark_backend::{prover::CommittedTraceData, verifier::verify, TranscriptHistory};
59+
use openvm_stark_backend::{prover::CommittedTraceData};
6360
use openvm_stark_sdk::config::{
64-
baby_bear_poseidon2::{poseidon2_compress_with_capacity, default_duplex_sponge_recorder},
61+
baby_bear_poseidon2::{poseidon2_compress_with_capacity},
6562
baby_bear_bn254_poseidon2::BabyBearBn254Poseidon2CpuEngine,
6663
};
6764
use openvm_verify_stark_host::pvs::{VERIFIER_PVS_AIR_ID, DeferralPvs, VerifierBasePvs};
6865
use crate::prover::DeferralChildVkKind;
69-
use crate::utils::{poseidon2_input_to_digests, zero_hash};
66+
use crate::utils::zero_hash;
7067
type RootEngine = BabyBearBn254Poseidon2CpuEngine;
7168
type Engine = BabyBearPoseidon2GpuEngine;
7269
type PB = GpuBackend;
@@ -365,26 +362,9 @@ fn test_root_prover_trace_heights() -> Result<()> {
365362

366363
#[cfg(feature = "cuda")]
367364
fn generate_single_def_proof(
368-
child_extra_recursive_layers: usize,
365+
_child_extra_recursive_layers: usize,
369366
) -> Result<(Arc<MultiStarkVerifyingKey<SC>>, Proof<SC>)> {
370-
let (
371-
internal_recursive_vk,
372-
internal_recursive_pcs_data,
373-
internal_recursive_proof,
374-
user_pvs_proof,
375-
) = run_full_aggregation(10, child_extra_recursive_layers)?;
376-
let system_config = test_rv32im_config().rv32i.system;
377-
let deferred_verify_prover = DeferredVerifyProver::new::<Engine>(
378-
internal_recursive_vk,
379-
internal_recursive_pcs_data,
380-
root_system_params(),
381-
system_config.memory_config.memory_dimensions(),
382-
system_config.num_public_values,
383-
None,
384-
);
385-
let def_proof =
386-
deferred_verify_prover.prove_no_def::<Engine>(internal_recursive_proof, &user_pvs_proof)?;
387-
Ok((deferred_verify_prover.get_vk(), def_proof))
367+
dummy::generate_single_dummy_def_proof()
388368
}
389369

390370
#[cfg(feature = "cuda")]
@@ -525,85 +505,6 @@ fn expected_deferral_inner_merkle_commit_from_copies(
525505
commits[0]
526506
}
527507

528-
#[cfg(feature = "cuda")]
529-
#[test_case(0 ; "internal_recursive_dag_commit not set")]
530-
#[test_case(1 ; "internal_recursive_dag_commit set")]
531-
fn test_deferral_verify_prover(child_extra_recursive_layers: usize) -> Result<()> {
532-
setup_tracing_with_log_level(Level::INFO);
533-
let (
534-
internal_recursive_vk,
535-
internal_recursive_pcs_data,
536-
internal_recursive_proof,
537-
user_pvs_proof,
538-
) = run_full_aggregation(10, child_extra_recursive_layers)?;
539-
540-
let system_config = test_rv32im_config().rv32i.system;
541-
542-
// Compute def_proof
543-
let deferred_verify_prover = DeferredVerifyProver::new::<Engine>(
544-
internal_recursive_vk.clone(),
545-
internal_recursive_pcs_data.clone(),
546-
root_system_params(),
547-
system_config.memory_config.memory_dimensions(),
548-
system_config.num_public_values,
549-
None,
550-
);
551-
let def_proof = deferred_verify_prover
552-
.prove_no_def::<Engine>(internal_recursive_proof.clone(), &user_pvs_proof)?;
553-
554-
// Verify that def_proof is valid
555-
let vk = deferred_verify_prover.get_vk();
556-
let engine = Engine::new(vk.inner.params.clone());
557-
engine.verify(&vk, &def_proof)?;
558-
559-
// Get the final transcript state of internal_recursive_proof
560-
let mut ts = default_duplex_sponge_recorder();
561-
let config = SC::default_from_params(internal_recursive_vk.inner.params.clone());
562-
verify(
563-
&config,
564-
internal_recursive_vk.as_ref(),
565-
&internal_recursive_proof,
566-
&mut ts,
567-
)?;
568-
let ts_log = ts.into_log();
569-
let expected_final_ts_state = ts_log.perm_results().last().unwrap();
570-
571-
// Generate a root_proof to compare the pvs of def_proof against
572-
let root_prover = RootProver::new::<RootEngine>(
573-
internal_recursive_vk,
574-
internal_recursive_pcs_data.commitment.into(),
575-
root_system_params(),
576-
system_config.memory_config.memory_dimensions(),
577-
system_config.num_public_values,
578-
None,
579-
None,
580-
);
581-
let ctx = root_prover.generate_proving_ctx(internal_recursive_proof, &user_pvs_proof);
582-
let root_proof = root_prover.root_prove_from_ctx::<RootEngine>(ctx.unwrap())?;
583-
584-
// Assert the correctness of the def_proof public values
585-
let root_pvs: &RootVerifierPvs<F> = root_proof.public_values[VERIFIER_PVS_AIR_ID]
586-
.as_slice()
587-
.borrow();
588-
// RootCircuit AIR layout is:
589-
// 0: RootVerifierPvsAir, 1: UserPvsCommitAir, 2: UserPvsInMemoryAir, 3..: verifier subcircuit.
590-
const ROOT_USER_PVS_COMMIT_AIR_ID: usize = 1;
591-
let user_pvs = root_proof.public_values[ROOT_USER_PVS_COMMIT_AIR_ID].clone();
592-
593-
let (left, right) = poseidon2_input_to_digests(*expected_final_ts_state);
594-
let expected_input_commit = poseidon2_compress_with_capacity(left, right).0;
595-
let expected_output_commit =
596-
expected_output_commit(root_pvs.app_exe_commit, root_pvs.app_vk_commit, user_pvs);
597-
598-
let def_pvs: &DeferralCircuitPvs<F> = def_proof.public_values[VERIFIER_PVS_AIR_ID]
599-
.as_slice()
600-
.borrow();
601-
assert_eq!(expected_input_commit, def_pvs.input_commit);
602-
assert_eq!(expected_output_commit, def_pvs.output_commit);
603-
604-
Ok(())
605-
}
606-
607508
#[cfg(feature = "cuda")]
608509
#[test_case(0, 1 ; "internal_recursive_dag_commit not set + one child")]
609510
#[test_case(1, 1 ; "internal_recursive_dag_commit set + one child")]

0 commit comments

Comments
 (0)