mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-09 09:13:09 +00:00
oops, included other examples
This commit is contained in:
parent
6d81968bbb
commit
8bd5f43c45
36
plonky2/examples/factorial.rs
Normal file
36
plonky2/examples/factorial.rs
Normal 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)
|
||||
}
|
||||
35
plonky2/examples/square_root.rs
Normal file
35
plonky2/examples/square_root.rs
Normal 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)
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user