Skip to content

Commit

Permalink
Add example of proof composition/aggregation (#16)
Browse files Browse the repository at this point in the history
* feat: add composition example

* refactor: rename to fib-composition

* add risc0 artifacts

* fix: working risc0 build

* working sp1 build

* add initial support for fibonacci composition in runner

* update composition program

* use composition program

* feat: add VerificationKeyCommitment to host

* fix sp1 compilation

* fix formatting

* fix lints
  • Loading branch information
prajwolrg authored Jan 28, 2025
1 parent a8c080f commit c2a08fb
Show file tree
Hide file tree
Showing 24 changed files with 3,873 additions and 20 deletions.
10 changes: 10 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ members = [
"runner",

# examples
"examples/fibonacci-composition",
"examples/fibonacci",
"examples/sha2-chain",
"examples/schnorr-sig-verify",
Expand All @@ -21,6 +22,7 @@ zkaleido = { path = "zkaleido" }
zkaleido-native-adapter = { path = "adapters/native" }

fibonacci = { path = "examples/fibonacci" }
fibonacci-composition = { path = "examples/fibonacci-composition" }
sha2-chain = { path = "examples/sha2-chain" }
schnorr-sig-verify = { path = "examples/schnorr-sig-verify" }

Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ CARGO_INSTALL_EXTRA_FLAGS ?=
FEATURES ?=

# List of programs
PROGRAMS ?= fibonacci,sha2-chain,schnorr-sig-verify
PROGRAMS ?= fibonacci-composition,sha2-chain,schnorr-sig-verify

# ZkVm to use
ZKVM ?= sp1
Expand Down
7 changes: 6 additions & 1 deletion adapters/native/src/host.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use std::{fmt, sync::Arc};

use zkaleido::{
Proof, ProofReceipt, ProofType, PublicValues, VerificationKey, ZkVmError, ZkVmHost, ZkVmResult,
Proof, ProofReceipt, ProofType, PublicValues, VerificationKey, VerificationKeyCommitment,
ZkVmError, ZkVmHost, ZkVmResult,
};

use crate::{env::NativeMachine, input::NativeMachineInputBuilder, proof::NativeProofReceipt};
Expand Down Expand Up @@ -54,6 +55,10 @@ impl ZkVmHost for NativeHost {
VerificationKey::default()
}

fn get_verification_key_commitment(&self) -> VerificationKeyCommitment {
VerificationKeyCommitment::new([0u32; 8])
}

fn extract_serde_public_output<T: serde::Serialize + serde::de::DeserializeOwned>(
public_values_raw: &PublicValues,
) -> ZkVmResult<T> {
Expand Down
7 changes: 6 additions & 1 deletion adapters/risc0/src/host.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ use risc0_zkvm::{
};
use serde::{de::DeserializeOwned, Serialize};
use zkaleido::{
ProofType, PublicValues, VerificationKey, ZkVmError, ZkVmHost, ZkVmInputBuilder, ZkVmResult,
ProofType, PublicValues, VerificationKey, VerificationKeyCommitment, ZkVmError, ZkVmHost,
ZkVmInputBuilder, ZkVmResult,
};

use crate::{input::Risc0ProofInputBuilder, proof::Risc0ProofReceipt};
Expand Down Expand Up @@ -102,6 +103,10 @@ impl ZkVmHost for Risc0Host {
VerificationKey::new(self.id.as_bytes().to_vec())
}

fn get_verification_key_commitment(&self) -> VerificationKeyCommitment {
VerificationKeyCommitment::new(self.id.into())
}

fn verify_inner(&self, proof: &Risc0ProofReceipt) -> ZkVmResult<()> {
proof
.as_ref()
Expand Down
7 changes: 6 additions & 1 deletion adapters/sp1/src/host.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ use std::fmt;
use serde::{de::DeserializeOwned, Serialize};
use sp1_sdk::{HashableKey, ProverClient, SP1ProvingKey};
use zkaleido::{
ProofType, PublicValues, VerificationKey, ZkVmError, ZkVmHost, ZkVmInputBuilder, ZkVmResult,
ProofType, PublicValues, VerificationKey, VerificationKeyCommitment, ZkVmError, ZkVmHost,
ZkVmInputBuilder, ZkVmResult,
};

use crate::{input::SP1ProofInputBuilder, proof::SP1ProofReceipt};
Expand Down Expand Up @@ -109,6 +110,10 @@ impl ZkVmHost for SP1Host {
VerificationKey::new(verification_key)
}

fn get_verification_key_commitment(&self) -> VerificationKeyCommitment {
VerificationKeyCommitment::new(self.proving_key.vk.hash_u32())
}

fn verify_inner(&self, proof: &SP1ProofReceipt) -> ZkVmResult<()> {
let client = ProverClient::from_env();
client
Expand Down
7 changes: 6 additions & 1 deletion artifacts/risc0/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,9 @@ version = "0.1.0"
risc0-build = "1.1.2"

[package.metadata.risc0]
methods = ["fibonacci", "sha2-chain", "schnorr-sig-verify"]
methods = [
"fibonacci",
"sha2-chain",
"schnorr-sig-verify",
"fibonacci-composition",
]
Loading

0 comments on commit c2a08fb

Please sign in to comment.