make hash_verifier_data_gadget and dummy pub (#464)

These two functions are used by the VDF Pod (previously known as PoW
Pod)
This commit is contained in:
Eduard S. 2026-01-28 16:08:22 +01:00 committed by GitHub
parent 48aa004ae5
commit 337a51135e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -586,7 +586,7 @@ pub fn pad_circuit(builder: &mut CircuitBuilder<F, D>, common_data: &CommonCircu
} }
} }
fn hash_verifier_data_gadget( pub fn hash_verifier_data_gadget(
builder: &mut CircuitBuilder<F, D>, builder: &mut CircuitBuilder<F, D>,
verifier_data: &VerifierCircuitTarget, verifier_data: &VerifierCircuitTarget,
) -> HashOutTarget { ) -> HashOutTarget {
@ -618,6 +618,37 @@ pub fn hash_verifier_data(verifier_only_data: &VerifierOnlyCircuitData<C, D>) ->
PoseidonHash::hash_no_pad(&f) PoseidonHash::hash_no_pad(&f)
} }
// Build an dummy empty circuit that uses common_data and make a proof from it.
pub fn dummy(
common_data: &CommonCircuitData<F, D>,
num_public_inputs: usize,
) -> Result<(
VerifierOnlyCircuitData<C, D>,
ProofWithPublicInputs<F, C, D>,
)> {
let config = common_data.config.clone();
let mut builder = CircuitBuilder::new(config.clone());
let public_inputs = (0..num_public_inputs)
.map(|_| {
let target = builder.add_virtual_target();
builder.register_public_input(target);
target
})
.collect_vec();
pad_circuit(&mut builder, common_data);
let circuit_data = builder.build::<C>();
assert_eq!(*common_data, circuit_data.common);
let mut pw = PartialWitness::<F>::new();
for target in &public_inputs {
pw.set_target(*target, F::ZERO)?;
}
let proof = circuit_data.prove(pw)?;
Ok((circuit_data.verifier_only, proof))
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::time::Instant; use std::time::Instant;
@ -800,37 +831,6 @@ mod tests {
Ok(()) Ok(())
} }
// Build an dummy empty circuit that uses common_data and make a proof from it.
fn dummy(
common_data: &CommonCircuitData<F, D>,
num_public_inputs: usize,
) -> Result<(
VerifierOnlyCircuitData<C, D>,
ProofWithPublicInputs<F, C, D>,
)> {
let config = common_data.config.clone();
let mut builder = CircuitBuilder::new(config.clone());
let public_inputs = (0..num_public_inputs)
.map(|_| {
let target = builder.add_virtual_target();
builder.register_public_input(target);
target
})
.collect_vec();
pad_circuit(&mut builder, common_data);
let circuit_data = builder.build::<C>();
assert_eq!(*common_data, circuit_data.common);
let mut pw = PartialWitness::<F>::new();
for target in &public_inputs {
pw.set_target(*target, F::ZERO)?;
}
let proof = circuit_data.prove(pw)?;
Ok((circuit_data.verifier_only, proof))
}
// test that recurses with arity=2, with the following shape: // test that recurses with arity=2, with the following shape:
// proof_1d // proof_1d
// ▲ ▲ // ▲ ▲