From 2e6480a97fb11e29b25f5e808e3d674a10682ed3 Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Wed, 21 Sep 2022 15:41:14 -0700 Subject: [PATCH] Fibonacci example --- plonky2/examples/fibonacci.rs | 39 +++++++++++++++++++++++++++++++++++ plonky2/src/plonk/verifier.rs | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 plonky2/examples/fibonacci.rs diff --git a/plonky2/examples/fibonacci.rs b/plonky2/examples/fibonacci.rs new file mode 100644 index 00000000..4f968178 --- /dev/null +++ b/plonky2/examples/fibonacci.rs @@ -0,0 +1,39 @@ +use anyhow::Result; +use plonky2::iop::witness::PartialWitness; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::plonk::circuit_data::CircuitConfig; +use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; +use plonky2::field::types::Field; +use plonky2::plonk::verifier::verify; + +fn main() -> Result<()> { + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + let config = CircuitConfig::standard_recursion_config(); + + let pw = PartialWitness::new(); + let mut builder = CircuitBuilder::::new(config); + + let zero_target = builder.zero(); + let one_target = builder.one(); + let mut prev_target = zero_target; + let mut cur_target = one_target; + for _ in 0..99 { + let temp = builder.add(prev_target, cur_target); + prev_target = cur_target; + cur_target = temp; + } + + let fib_100 = F::from_canonical_u64(3736710860384812976); + let fib_100_target = builder.constant(fib_100); + + builder.connect(fib_100_target, cur_target); + + let data = builder.build::(); + + let proof = data.prove(pw)?; + + verify(proof, &data.verifier_only, &data.common) +} diff --git a/plonky2/src/plonk/verifier.rs b/plonky2/src/plonk/verifier.rs index 6a4f3790..5a3f6a94 100644 --- a/plonky2/src/plonk/verifier.rs +++ b/plonky2/src/plonk/verifier.rs @@ -12,7 +12,7 @@ use crate::plonk::validate_shape::validate_proof_with_pis_shape; use crate::plonk::vanishing_poly::eval_vanishing_poly; use crate::plonk::vars::EvaluationVars; -pub(crate) fn verify, C: GenericConfig, const D: usize>( +pub fn verify, C: GenericConfig, const D: usize>( proof_with_pis: ProofWithPublicInputs, verifier_data: &VerifierOnlyCircuitData, common_data: &CommonCircuitData,