Merge pull request #752 from zcash/cost-without-permutation

`dev::cost`: Handle cost calculation for circuits without permutation
This commit is contained in:
str4d 2023-03-21 03:28:59 +00:00 committed by GitHub
commit 1a53c0cbfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 40 additions and 2 deletions

View File

@ -362,8 +362,11 @@ impl<G: PrimeGroup, ConcreteCircuit: Circuit<G::Scalar>> CircuitCost<G, Concrete
// Global permutation argument:
// - chunks commitments per instance
// - 2*chunks + (chunks - 1) evals per instance
equality: ProofContribution::new(chunks, 3 * chunks - 1),
// - 2 * chunks + (chunks - 1) evals per instance
equality: ProofContribution::new(
chunks,
if chunks == 0 { chunks } else { 3 * chunks - 1 },
),
_marker: PhantomData::default(),
}
@ -506,3 +509,38 @@ impl<G: PrimeGroup> From<ProofSize<G>> for usize {
+ proof.polycomm.len(point, scalar)
}
}
#[cfg(test)]
mod tests {
use pasta_curves::{Eq, Fp};
use crate::circuit::SimpleFloorPlanner;
use super::*;
#[test]
fn circuit_cost_without_permutation() {
const K: u32 = 4;
struct MyCircuit;
impl Circuit<Fp> for MyCircuit {
type Config = ();
type FloorPlanner = SimpleFloorPlanner;
fn without_witnesses(&self) -> Self {
Self
}
fn configure(_meta: &mut ConstraintSystem<Fp>) -> Self::Config {}
fn synthesize(
&self,
_config: Self::Config,
_layouter: impl crate::circuit::Layouter<Fp>,
) -> Result<(), Error> {
Ok(())
}
}
CircuitCost::<Eq, MyCircuit>::measure(K, &MyCircuit).proof_size(1);
}
}