mirror of
https://github.com/arnaucube/sonobe-playground.git
synced 2026-01-14 01:51:29 +01:00
Woohoo - multifolding works!
This commit is contained in:
@@ -31,6 +31,8 @@ pub struct StepInput<OtherInstances> {
|
||||
}
|
||||
|
||||
pub trait FoldingSchemeExt: FoldingScheme<G1, G2, CircomFCircuit<Fr>> {
|
||||
fn num_steps(num_inputs: usize) -> usize;
|
||||
|
||||
fn prepreprocess(
|
||||
poseidon_config: PoseidonConfig<Fr>,
|
||||
circuit: CircomFCircuit<Fr>,
|
||||
@@ -45,6 +47,11 @@ pub trait FoldingSchemeExt: FoldingScheme<G1, G2, CircomFCircuit<Fr>> {
|
||||
}
|
||||
|
||||
impl FoldingSchemeExt for NovaFolding {
|
||||
fn num_steps(num_inputs: usize) -> usize {
|
||||
num_inputs // no multifolding
|
||||
}
|
||||
|
||||
|
||||
fn prepreprocess(
|
||||
poseidon_config: PoseidonConfig<Fr>,
|
||||
circuit: CircomFCircuit<Fr>,
|
||||
@@ -69,6 +76,12 @@ impl FoldingSchemeExt for NovaFolding {
|
||||
}
|
||||
|
||||
impl<const N: usize, const M: usize> FoldingSchemeExt for HyperNovaFolding<N, M> {
|
||||
fn num_steps(num_inputs: usize) -> usize {
|
||||
let per_step = M + N - 1;
|
||||
assert_eq!(num_inputs % per_step, 0);
|
||||
num_inputs / per_step
|
||||
}
|
||||
|
||||
fn prepreprocess(
|
||||
poseidon_config: PoseidonConfig<Fr>,
|
||||
circuit: CircomFCircuit<Fr>,
|
||||
@@ -144,14 +157,14 @@ pub fn verify_folding<FS: FoldingSchemeExt>(
|
||||
folding: &FS,
|
||||
folding_vp: FS::VerifierParam,
|
||||
start_ivc_state: Vec<Fr>,
|
||||
num_steps: u32,
|
||||
num_inputs: usize,
|
||||
) {
|
||||
let (running_instance, incoming_instance, cyclefold_instance) = folding.instances();
|
||||
FS::verify(
|
||||
folding_vp,
|
||||
start_ivc_state,
|
||||
folding.state(),
|
||||
Fr::from(num_steps),
|
||||
Fr::from(FS::num_steps(num_inputs) as u32),
|
||||
running_instance,
|
||||
incoming_instance,
|
||||
cyclefold_instance,
|
||||
|
||||
@@ -51,7 +51,7 @@ fn scenario<FS: FoldingSchemeExt>(config: ScenarioConfig, rng: &mut impl rand::R
|
||||
&folding,
|
||||
folding_vp,
|
||||
config.start_ivc_state,
|
||||
config.num_steps as u32,
|
||||
config.num_inputs,
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ use crate::{circuit::create_circuit, input::prepare_input, measure};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct ScenarioConfig {
|
||||
pub num_steps: usize,
|
||||
pub num_inputs: usize,
|
||||
pub start_ivc_state: Vec<Fr>,
|
||||
pub circuit: CircomFCircuit<Fr>,
|
||||
input: Vec<Vec<Fr>>,
|
||||
@@ -15,7 +15,7 @@ pub struct ScenarioConfig {
|
||||
impl ScenarioConfig {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
num_steps: 6,
|
||||
num_inputs: 6,
|
||||
start_ivc_state: vec![Fr::zero(); 2],
|
||||
circuit: measure("Prepare circuit", create_circuit),
|
||||
input: measure("Prepare input", prepare_input),
|
||||
@@ -23,6 +23,6 @@ impl ScenarioConfig {
|
||||
}
|
||||
|
||||
pub fn input(&self) -> &[Vec<Fr>] {
|
||||
&self.input[..self.num_steps]
|
||||
&self.input[..self.num_inputs]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user