Skip to content

zkVerify/sp1-verifier

Repository files navigation

sp1-verifier

License

This project implements a no_std compatible verifier for SP1 proofs. The sp1-zkv-verifier crate is used inside zkVerify runtime to implement a verification pallet for SP1 proofs.

Usage

To use sp1-zkv-verifier in your project, add it as a dependency in your Cargo.toml.

[dependencies]
sp1-zkv-verifier = { git = "https://github.com/zkVerify/sp1-verifier.git" }

Then, you can use the sp1_zkv_verifier::verify function to verify SP1 shrink proofs.

Proof generation

This verifier only supports shrink proofs. The utility crate sp1_zkv_sdk provides utilities for correctly shrinking SP1 proofs. The following code snippet shows the full workflow.

use sp1_sdk::{HashableKey, Prover, ProverClient, SP1Stdin, include_elf};
use sp1_zkv_sdk::*;

const FIBONACCI_ELF: &[u8] = include_elf!("fibonacci-program");

fn main() {
    // Generate SP1 compressed proof with SP1 sdk
    let mut stdin = SP1Stdin::new();
    let n = 100u32;
    stdin.write(&n);

    let prover = ProverClient::builder().cpu().build();
    let (pk, vk) = prover.setup(SP1_ELF);

    let proof = prover.prove(&pk, &stdin).compressed().run().unwrap();
    prover.verify(&proof, &vk).unwrap();

    // Convert proof and vk into a zkVerify-compatible proof
    let zkv_proof = prover
        .convert_proof_to_zkv(proof, Default::default())
        .unwrap();
    let vkey_hash = vk.hash_bytes();

    sp1_zkv_sdk::verify(&zkv_proof, &vkey_hash).unwrap();
}

License

This project is licensed under the Apache 2.0 License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages