diff --git a/Cargo.toml b/Cargo.toml index 690060b9026f586a630a92f42929f7fe49f6b829..6511f31173c2cc06ca602e7a6cd1799472b23a28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,3 +55,7 @@ required-features = ["kzg"] [[example]] name = "aplonk" required-features = ["aplonk"] + +[[example]] +name = "fri" +required-features = ["fri"] diff --git a/examples/fri.rs b/examples/fri.rs new file mode 100644 index 0000000000000000000000000000000000000000..68f1449adce867c774586d177bd41e1fbc4f35d5 --- /dev/null +++ b/examples/fri.rs @@ -0,0 +1,31 @@ +use ark_bls12_381::Fr; +use ark_ff::PrimeField; +use ark_poly::univariate::DensePolynomial; +use ark_poly::DenseUVPolynomial; +use ark_std::ops::Div; +use rs_merkle::Hasher; + +use fri::algorithms::Blake3; +use komodo::error::KomodoError; + +fn run<F: PrimeField, H: Hasher, P>() -> Result<(), KomodoError> +where + P: DenseUVPolynomial<F>, + for<'a, 'b> &'a P: Div<&'b P, Output = P>, + <H as rs_merkle::Hasher>::Hash: AsRef<[u8]>, +{ + // the code parameters and the data to manipulate + let (k, n) = (4, 16); + let bytes = include_bytes!("../assets/dragoon_133x133.png").to_vec(); + eprintln!("loaded {} bytes of data", bytes.len()); + + let shards = komodo::fri::encode::<F>(&bytes, k, n); + let blocks = komodo::fri::prove::<2, F, H, P>(shards, 1, 1, 50).unwrap(); + komodo::fri::verify::<2, F, H, P>(blocks[0].clone(), n, 50).unwrap(); + + Ok(()) +} + +fn main() { + run::<Fr, Blake3, DensePolynomial<Fr>>().unwrap(); +}