plonky2/src/bin/bench_recursion.rs

61 lines
2.0 KiB
Rust
Raw Normal View History

use anyhow::Result;
use env_logger::Env;
use log::info;
use plonky2::field::crandall_field::CrandallField;
2021-05-18 15:22:06 +02:00
use plonky2::field::extension_field::Extendable;
use plonky2::field::field_types::RichField;
use plonky2::fri::reduction_strategies::FriReductionStrategy;
2021-05-07 11:30:03 +02:00
use plonky2::fri::FriConfig;
2021-09-24 15:50:48 +02:00
use plonky2::hash::hashing::SPONGE_WIDTH;
use plonky2::iop::witness::PartialWitness;
use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CircuitConfig;
fn main() -> Result<()> {
// Set the default log filter. This can be overridden using the `RUST_LOG` environment variable,
// e.g. `RUST_LOG=debug`.
// We default to debug for now, since there aren't many logs anyway, but we should probably
// change this to info or warn later.
env_logger::Builder::from_env(Env::default().default_filter_or("debug")).init();
bench_prove::<CrandallField, 4>()
}
fn bench_prove<F: RichField + Extendable<D>, const D: usize>() -> Result<()> {
let config = CircuitConfig {
2021-07-23 17:16:53 +02:00
num_wires: 126,
num_routed_wires: 33,
security_bits: 128,
rate_bits: 3,
2021-05-14 08:07:00 -07:00
num_challenges: 3,
zero_knowledge: false,
2021-08-10 13:33:44 +02:00
cap_height: 1,
2021-05-07 11:30:03 +02:00
fri_config: FriConfig {
proof_of_work_bits: 15,
reduction_strategy: FriReductionStrategy::ConstantArityBits(3, 5),
num_query_rounds: 35,
2021-05-07 11:30:03 +02:00
},
};
2021-08-20 11:56:57 +02:00
let inputs = PartialWitness::new();
let mut builder = CircuitBuilder::<F, D>::new(config);
let zero = builder.zero();
let zero_ext = builder.zero_extension();
2021-09-24 15:50:48 +02:00
let mut state = [zero; SPONGE_WIDTH];
2021-05-07 16:49:27 +02:00
for _ in 0..10000 {
state = builder.permute(state);
}
// Random other gates.
builder.add(zero, zero);
builder.add_extension(zero_ext, zero_ext);
let circuit = builder.build();
let proof_with_pis = circuit.prove(inputs)?;
let proof_bytes = serde_cbor::to_vec(&proof_with_pis).unwrap();
info!("Proof length: {} bytes", proof_bytes.len());
circuit.verify(proof_with_pis)
}