Test works

This commit is contained in:
wborgeaud 2022-05-12 22:29:10 +02:00
parent 17ba468e3a
commit 0c8178e286
7 changed files with 44 additions and 29 deletions

View File

@ -17,7 +17,7 @@ impl StarkConfig {
pub fn standard_fast_config() -> Self { pub fn standard_fast_config() -> Self {
Self { Self {
security_bits: 100, security_bits: 100,
num_challenges: 1, num_challenges: 2,
fri_config: FriConfig { fri_config: FriConfig {
rate_bits: 1, rate_bits: 1,
cap_height: 4, cap_height: 4,

View File

@ -152,6 +152,7 @@ impl<'a, F: RichField + Extendable<D>, const D: usize>
proofs: &[&StarkProofWithPublicInputs<F, C, D>], proofs: &[&StarkProofWithPublicInputs<F, C, D>],
cross_table_lookups: &'a [CrossTableLookup], cross_table_lookups: &'a [CrossTableLookup],
ctl_challenges: &'a GrandProductChallengeSet<F>, ctl_challenges: &'a GrandProductChallengeSet<F>,
num_permutation_zs: usize,
) -> Vec<Vec<Self>> { ) -> Vec<Vec<Self>> {
let mut ctl_zs = proofs let mut ctl_zs = proofs
.iter() .iter()
@ -162,13 +163,15 @@ impl<'a, F: RichField + Extendable<D>, const D: usize>
.as_ref() .as_ref()
.unwrap() // TODO: fix unwrap .unwrap() // TODO: fix unwrap
.iter() .iter()
.skip(num_permutation_zs)
.zip( .zip(
p.proof p.proof
.openings .openings
.permutation_lookup_zs_right .permutation_lookup_zs_right
.as_ref() .as_ref()
.unwrap() .unwrap()
.iter(), .iter()
.skip(num_permutation_zs),
) )
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();

View File

@ -22,7 +22,7 @@ fn get_challenges<F, C, S, const D: usize>(
challenger: &mut Challenger<F, C::Hasher>, challenger: &mut Challenger<F, C::Hasher>,
stark: &S, stark: &S,
trace_cap: &MerkleCap<F, C::Hasher>, trace_cap: &MerkleCap<F, C::Hasher>,
permutation_zs_cap: Option<&MerkleCap<F, C::Hasher>>, permutation_ctl_zs_cap: Option<&MerkleCap<F, C::Hasher>>,
quotient_polys_cap: &MerkleCap<F, C::Hasher>, quotient_polys_cap: &MerkleCap<F, C::Hasher>,
openings: &StarkOpeningSet<F, D>, openings: &StarkOpeningSet<F, D>,
commit_phase_merkle_caps: &[MerkleCap<F, C::Hasher>], commit_phase_merkle_caps: &[MerkleCap<F, C::Hasher>],
@ -38,18 +38,18 @@ where
{ {
let num_challenges = config.num_challenges; let num_challenges = config.num_challenges;
challenger.observe_cap(trace_cap); let permutation_challenge_sets = stark.uses_permutation_args().then(|| {
get_n_grand_product_challenge_sets(
let permutation_challenge_sets = permutation_zs_cap.map(|permutation_zs_cap| {
let tmp = get_n_grand_product_challenge_sets(
challenger, challenger,
num_challenges, num_challenges,
stark.permutation_batch_size(), stark.permutation_batch_size(),
); )
challenger.observe_cap(permutation_zs_cap);
tmp
}); });
if let Some(cap) = permutation_ctl_zs_cap {
challenger.observe_cap(cap);
}
let stark_alphas = challenger.get_n_challenges(num_challenges); let stark_alphas = challenger.get_n_challenges(num_challenges);
challenger.observe_cap(quotient_polys_cap); challenger.observe_cap(quotient_polys_cap);
@ -132,7 +132,7 @@ where
let StarkProof { let StarkProof {
trace_cap, trace_cap,
permutation_zs_cap, permutation_ctl_zs_cap,
quotient_polys_cap, quotient_polys_cap,
openings, openings,
opening_proof: opening_proof:
@ -148,7 +148,7 @@ where
challenger, challenger,
stark, stark,
trace_cap, trace_cap,
permutation_zs_cap.as_ref(), permutation_ctl_zs_cap.as_ref(),
quotient_polys_cap, quotient_polys_cap,
openings, openings,
commit_phase_merkle_caps, commit_phase_merkle_caps,

View File

@ -40,7 +40,7 @@ pub struct StarkProof<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>,
/// Merkle cap of LDEs of trace values. /// Merkle cap of LDEs of trace values.
pub trace_cap: MerkleCap<F, C::Hasher>, pub trace_cap: MerkleCap<F, C::Hasher>,
/// Merkle cap of LDEs of permutation Z values. /// Merkle cap of LDEs of permutation Z values.
pub permutation_zs_cap: Option<MerkleCap<F, C::Hasher>>, pub permutation_ctl_zs_cap: Option<MerkleCap<F, C::Hasher>>,
/// Merkle cap of LDEs of trace values. /// Merkle cap of LDEs of trace values.
pub quotient_polys_cap: MerkleCap<F, C::Hasher>, pub quotient_polys_cap: MerkleCap<F, C::Hasher>,
/// Purported values of each polynomial at the challenge point. /// Purported values of each polynomial at the challenge point.

View File

@ -174,10 +174,10 @@ where
None, None,
) )
}); });
let permutation_zs_cap = permutation_ctl_zs_commitment let permutation_ctl_zs_cap = permutation_ctl_zs_commitment
.as_ref() .as_ref()
.map(|commit| commit.merkle_tree.cap.clone()); .map(|commit| commit.merkle_tree.cap.clone());
if let Some(cap) = &permutation_zs_cap { if let Some(cap) = &permutation_ctl_zs_cap {
challenger.observe_cap(cap); challenger.observe_cap(cap);
} }
@ -271,7 +271,7 @@ where
); );
let proof = StarkProof { let proof = StarkProof {
trace_cap: trace_commitment.merkle_tree.cap.clone(), trace_cap: trace_commitment.merkle_tree.cap.clone(),
permutation_zs_cap, permutation_ctl_zs_cap,
quotient_polys_cap, quotient_polys_cap,
openings, openings,
opening_proof, opening_proof,
@ -434,13 +434,17 @@ fn test_it<'a, F, C, S, const D: usize>(
S: Stark<F, D>, S: Stark<F, D>,
{ {
let degree = 1 << degree_bits; let degree = 1 << degree_bits;
let rate_bits = 0;
let size = degree << rate_bits;
let step = 1 << rate_bits;
// Evaluation of the first Lagrange polynomial on the LDE domain. // Evaluation of the first Lagrange polynomial on the LDE domain.
let lagrange_first = PolynomialValues::selector(degree, 0); let lagrange_first = PolynomialValues::selector(degree, 0).lde(rate_bits);
// Evaluation of the last Lagrange polynomial on the LDE domain. // Evaluation of the last Lagrange polynomial on the LDE domain.
let lagrange_last = PolynomialValues::selector(degree, degree - 1); let lagrange_last = PolynomialValues::selector(degree, degree - 1).lde(rate_bits);
let subgroup = F::two_adic_subgroup(degree_bits); let subgroup = F::two_adic_subgroup(degree_bits + rate_bits);
// Retrieve the LDE values at index `i`. // Retrieve the LDE values at index `i`.
let get_comm_values = |comm: &PolynomialBatch<F, C, D>, i| -> Vec<F> { let get_comm_values = |comm: &PolynomialBatch<F, C, D>, i| -> Vec<F> {
@ -453,9 +457,9 @@ fn test_it<'a, F, C, S, const D: usize>(
// Last element of the subgroup. // Last element of the subgroup.
let last = F::primitive_root_of_unity(degree_bits).inverse(); let last = F::primitive_root_of_unity(degree_bits).inverse();
let constraint_values = (0..degree) let constraint_values = (0..size)
.map(|i| { .map(|i| {
let i_next = (i + 1) % degree; let i_next = (i + step) % size;
let x = subgroup[i]; let x = subgroup[i];
let z_last = x - last; let z_last = x - last;
@ -515,5 +519,8 @@ fn test_it<'a, F, C, S, const D: usize>(
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
dbg!(constraint_values); let values = transpose(&constraint_values);
for v in values {
assert!(v.iter().all(|x| x.is_zero()));
}
} }

View File

@ -301,9 +301,10 @@ pub fn set_stark_proof_target<F, C: GenericConfig<D, F = F>, W, const D: usize>(
&proof.openings.to_fri_openings(), &proof.openings.to_fri_openings(),
); );
if let (Some(permutation_zs_cap_target), Some(permutation_zs_cap)) = if let (Some(permutation_zs_cap_target), Some(permutation_zs_cap)) = (
(&proof_target.permutation_zs_cap, &proof.permutation_zs_cap) &proof_target.permutation_zs_cap,
{ &proof.permutation_ctl_zs_cap,
) {
witness.set_cap_target(permutation_zs_cap_target, permutation_zs_cap); witness.set_cap_target(permutation_zs_cap_target, permutation_zs_cap);
} }

View File

@ -44,8 +44,12 @@ where
cross_table_lookups, cross_table_lookups,
} = all_stark; } = all_stark;
let ctl_vars_per_table = let ctl_vars_per_table = CTLCheckVars::from_proofs(
CTLCheckVars::from_proofs(&all_proof.proofs(), &cross_table_lookups, &ctl_challenges); &all_proof.proofs(),
&cross_table_lookups,
&ctl_challenges,
0, // TODO: Fix 0
);
verify_stark_proof_with_challenges( verify_stark_proof_with_challenges(
cpu_stark, cpu_stark,
@ -180,7 +184,7 @@ where
} }
let merkle_caps = once(proof.trace_cap.clone()) let merkle_caps = once(proof.trace_cap.clone())
.chain(proof.permutation_zs_cap.clone()) .chain(proof.permutation_ctl_zs_cap.clone())
.chain(once(proof.quotient_polys_cap.clone())) .chain(once(proof.quotient_polys_cap.clone()))
.collect_vec(); .collect_vec();
@ -227,7 +231,7 @@ fn check_permutation_options<
challenges: &StarkProofChallenges<F, D>, challenges: &StarkProofChallenges<F, D>,
) -> Result<()> { ) -> Result<()> {
let options_is_some = [ let options_is_some = [
proof_with_pis.proof.permutation_zs_cap.is_some(), proof_with_pis.proof.permutation_ctl_zs_cap.is_some(),
proof_with_pis proof_with_pis
.proof .proof
.openings .openings