diff --git a/plonky2/examples/factorial.rs b/plonky2/examples/factorial.rs index c4de7f65..9f292372 100644 --- a/plonky2/examples/factorial.rs +++ b/plonky2/examples/factorial.rs @@ -1,6 +1,6 @@ use anyhow::Result; use plonky2::field::types::Field; -use plonky2::iop::witness::PartialWitness; +use plonky2::iop::witness::{PartialWitness, Witness}; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_data::CircuitConfig; use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; @@ -12,20 +12,24 @@ fn main() -> Result<()> { let config = CircuitConfig::standard_recursion_config(); - let pw = PartialWitness::new(); let mut builder = CircuitBuilder::::new(config); - let mut cur_target = builder.one(); + let initial = builder.add_virtual_target(); + let mut cur_target = initial; for i in 2..101 { let i_target = builder.constant(F::from_canonical_u32(i)); cur_target = builder.mul(cur_target, i_target); } + builder.register_public_input(initial); builder.register_public_input(cur_target); + let mut pw = PartialWitness::new(); + pw.set_target(initial, F::ONE); + let data = builder.build::(); let proof = data.prove(pw)?; - println!("100 factorial (mod |F|) is: {}", proof.public_inputs[0]); + println!("100 factorial (mod |F|) is: {}", proof.public_inputs[1]); data.verify(proof) } diff --git a/plonky2/examples/fibonacci.rs b/plonky2/examples/fibonacci.rs index bd7e70a0..d7a47c02 100644 --- a/plonky2/examples/fibonacci.rs +++ b/plonky2/examples/fibonacci.rs @@ -1,5 +1,6 @@ use anyhow::Result; -use plonky2::iop::witness::PartialWitness; +use plonky2::field::types::Field; +use plonky2::iop::witness::{PartialWitness, Witness}; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_data::CircuitConfig; use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; @@ -11,24 +12,31 @@ fn main() -> Result<()> { let config = CircuitConfig::standard_recursion_config(); - let pw = PartialWitness::new(); let mut builder = CircuitBuilder::::new(config); - let mut prev_target = builder.zero(); - let mut cur_target = builder.one(); + let initial_a = builder.add_virtual_target(); + let initial_b = builder.add_virtual_target(); + let mut prev_target = initial_a; + let mut cur_target = initial_b; for _ in 0..99 { let temp = builder.add(prev_target, cur_target); prev_target = cur_target; cur_target = temp; } + builder.register_public_input(initial_a); + builder.register_public_input(initial_b); builder.register_public_input(cur_target); + let mut pw = PartialWitness::new(); + pw.set_target(initial_a, F::ZERO); + pw.set_target(initial_b, F::ONE); + let data = builder.build::(); let proof = data.prove(pw)?; println!( "100th Fibonacci number (mod |F|) is: {}", - proof.public_inputs[0] + proof.public_inputs[2] ); data.verify(proof)