mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-07 08:13:11 +00:00
fixes to fibonacci and factorial
This commit is contained in:
parent
44a1f4c328
commit
ecdac53960
@ -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::<F, D>::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::<C>();
|
||||
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)
|
||||
}
|
||||
|
||||
@ -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::<F, D>::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::<C>();
|
||||
let proof = data.prove(pw)?;
|
||||
|
||||
println!(
|
||||
"100th Fibonacci number (mod |F|) is: {}",
|
||||
proof.public_inputs[0]
|
||||
proof.public_inputs[2]
|
||||
);
|
||||
|
||||
data.verify(proof)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user