oops, included other examples

This commit is contained in:
Nicholas Ward 2022-09-22 06:50:50 -07:00
parent 6d81968bbb
commit 8bd5f43c45
2 changed files with 71 additions and 0 deletions

View File

@ -0,0 +1,36 @@
use anyhow::Result;
use plonky2::field::types::Field;
use plonky2::iop::witness::PartialWitness;
use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CircuitConfig;
use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig};
fn main() -> Result<()> {
const D: usize = 2;
type C = PoseidonGoldilocksConfig;
type F = <C as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_config();
let pw = PartialWitness::new();
let mut builder = CircuitBuilder::<F, D>::new(config);
let mut cur_target = builder.one();
for i in 2..101 {
let i_target = builder.constant(F::from_canonical_u32(i));
cur_target = builder.mul(cur_target, i_target);
}
let fact_100 = F::from_canonical_u64(3822706312645553057);
let fact_100_target = builder.constant(fact_100);
builder.register_public_input(fact_100_target);
builder.connect(fact_100_target, cur_target);
let data = builder.build::<C>();
let proof = data.prove(pw)?;
println!("100 factorial (mod |F|) is: {}", proof.public_inputs[0]);
data.verify(proof)
}

View File

@ -0,0 +1,35 @@
use anyhow::Result;
use plonky2::field::types::Field;
use plonky2::iop::witness::PartialWitness;
use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CircuitConfig;
use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig};
fn main() -> Result<()> {
const D: usize = 2;
type C = PoseidonGoldilocksConfig;
type F = <C as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_config();
let pw = PartialWitness::new();
let mut builder = CircuitBuilder::<F, D>::new(config);
let x = F::rand();
let x_squared = x * x;
let x_target = builder.constant(x);
let x_squared_target = builder.constant(x_squared);
let x_squared_computed = builder.mul(x_target, x_target);
builder.connect(x_squared_target, x_squared_computed);
builder.register_public_input(x_target);
let data = builder.build::<C>();
let proof = data.prove(pw)?;
println!("Random field element: {}", x_squared);
println!("Its square root: {}", proof.public_inputs[0]);
data.verify(proof)
}