Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 41 additions & 43 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
resolver = "2"
members = [
"bin/*",
"crates/*",
"example/preloader",
"canoe/bindings",
"canoe/provider",
"canoe/steel/apps",
"canoe/steel/methods",
"canoe/steel/verifier",
"canoe/sp1-cc/host",
"canoe/sp1-cc/client",
"canoe/sp1-cc/vkey-bin",
"canoe/sp1-cc/host",
"canoe/sp1-cc/verifier",
"canoe/verifier",
"canoe/sp1-cc/vkey-bin",
"canoe/steel/apps",
"canoe/steel/methods",
"canoe/steel/verifier",
"canoe/verifier-address-fetcher",
"canoe/verifier",
"crates/*",
"example/preloader",
]

[profile.dev-client]
Expand Down Expand Up @@ -55,91 +55,89 @@ hokulea-zkvm-verification = { path = "crates/zkvm-verification", version = "0.1.
eigenda-cert = { path = "crates/eigenda-cert" }

# Alloy (Network)
alloy-rlp = { version = "0.3.12", default-features = false }
alloy-provider = { version = "1.0.38", default-features = false }
alloy-consensus = { version = "1.0.38", default-features = false }
alloy-rpc-types = { version = "1.0.38", default-features = false }
alloy-genesis = { version = "1.0.38", default-features = false }
alloy-primitives = { version = "1.3.1", default-features = false }
alloy-provider = { version = "1.0.38", default-features = false }
alloy-rlp = { version = "0.3.12", default-features = false }
alloy-rpc-types = { version = "1.0.38", default-features = false }
alloy-sol-types = { version = "1.3.1", default-features = false }

# Execution
alloy-evm = { version = "0.22.6", default-features = false }
alloy-op-evm = { version = "0.22.6", default-features = false }
revm = { version = "30.2.0", default-features = false }
op-revm = { version = "11.3.0", default-features = false }
revm = { version = "30.2.0", default-features = false }
revm-primitives = { version = "21.0.2", default-features = false }

# OP Alloy
op-alloy-consensus = { version = "0.22.0", default-features = false }

# Reth
reth-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.1", default-features = false }
reth-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.1", default-features = false }
reth-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.1", default-features = false }
reth-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.1", default-features = false }

# General
spin = "0.10.0"
clap = "4.5.39"
tokio = "1.45.1"
cfg-if = "1.0.0"
reqwest = "0.12.19"
async-trait = "0.1.88"
cfg-if = "1.0.0"
clap = "4.5.39"
num = "0.4"
reqwest = "0.12.19"
spin = "0.10.0"
tokio = "1.45.1"

# General
anyhow = { version = "1.0.98", default-features = false }
sha2 = { version = "0.10.9", default-features = false }
thiserror = { version = "2.0.12", default-features = false }
anyhow = { version = "1.0.98", default-features = false }

rust-kzg-bn254-primitives = { version = "0.1.2", git = "https://github.com/Layr-Labs/rust-kzg-bn254.git", rev = "4d1d6a84910a3fc1e5e8927f694e4fc10ac5dd9d", default-features = false }
rust-kzg-bn254-verifier = { version = "0.1.2", git = "https://github.com/Layr-Labs/rust-kzg-bn254.git", rev = "4d1d6a84910a3fc1e5e8927f694e4fc10ac5dd9d", default-features = false }
rust-kzg-bn254-prover = { version = "0.1.1", git = "https://github.com/Layr-Labs/rust-kzg-bn254.git", rev = "4d1d6a84910a3fc1e5e8927f694e4fc10ac5dd9d", default-features = false }
rust-kzg-bn254-verifier = { version = "0.1.2", git = "https://github.com/Layr-Labs/rust-kzg-bn254.git", rev = "4d1d6a84910a3fc1e5e8927f694e4fc10ac5dd9d", default-features = false }

ark-bn254 = { version = "0.5.0", default-features = false }
ark-ff = { version = "0.5.0", default-features = false }

# Tracing
tracing-subscriber = { version = "0.3.20", default-features = false }
tracing = { version = "0.1.41", default-features = false }

tracing-subscriber = { version = "0.3.20", default-features = false }

# Serialization
serde = { version = "1.0.219", default-features = false }
serde_json = { version = "1.0.140", default-features = false }


canoe-provider = { path = "./canoe/provider", default-features = false }
canoe-bindings = { path = "./canoe/bindings", default-features = false }
canoe-verifier = { path = "./canoe/verifier", default-features = false }
canoe-verifier-address-fetcher = { path = "./canoe/verifier-address-fetcher", default-features = false }
canoe-bindings = { path = "./canoe/bindings", default-features = false }
canoe-provider = { path = "./canoe/provider", default-features = false }
canoe-verifier = { path = "./canoe/verifier", default-features = false }
canoe-verifier-address-fetcher = { path = "./canoe/verifier-address-fetcher", default-features = false }

# Steel
canoe-steel-apps = { path = "./canoe/steel/apps", default-features = false }
canoe-steel-methods = { path = "./canoe/steel/methods", default-features = false }
canoe-steel-verifier = { path = "./canoe/steel/verifier", default-features = false }
canoe-steel-apps = { path = "./canoe/steel/apps", default-features = false }
canoe-steel-methods = { path = "./canoe/steel/methods", default-features = false }
canoe-steel-verifier = { path = "./canoe/steel/verifier", default-features = false }

risc0-zkvm = { version = "3.0.3" }
risc0-steel = { git = "https://github.com/boundless-xyz/steel.git", tag = "v2.4.0" }
risc0-build-ethereum = { version = "3.0" }
risc0-build = { version = "3.0", features = ["docker"] }
risc0-build-ethereum = { version = "3.0" }
risc0-steel = { git = "https://github.com/boundless-xyz/steel.git", tag = "v2.4.0" }
risc0-zkvm = { version = "3.0.3" }

# Sp1-contract-call
canoe-sp1-cc-host = { path = "./canoe/sp1-cc/host", default-features = false }
canoe-sp1-cc-client = { path = "./canoe/sp1-cc/client", default-features = false }
canoe-sp1-cc-verifier = { path = "./canoe/sp1-cc/verifier", default-features = false }
canoe-sp1-cc-client = { path = "./canoe/sp1-cc/client", default-features = false }
canoe-sp1-cc-host = { path = "./canoe/sp1-cc/host", default-features = false }
canoe-sp1-cc-verifier = { path = "./canoe/sp1-cc/verifier", default-features = false }

sp1-sdk = "5.2.1"
rsp-primitives = { git = "https://github.com/succinctlabs/rsp", tag = "reth-1.9.1b" }
sp1-build = "5.2.1"
sp1-zkvm = "5.2.1"
sp1-lib = "5.2.1"
sp1-core-executor = "5.2.1"
sp1-prover = "5.2.1"
sp1-cc-client-executor = { git = "https://github.com/succinctlabs/sp1-contract-call.git", tag = "reth-1.9.1b" }
sp1-cc-host-executor = { git = "https://github.com/succinctlabs/sp1-contract-call.git", tag = "reth-1.9.1b" }
rsp-primitives = { git = "https://github.com/succinctlabs/rsp", tag = "reth-1.9.1b" }
sp1-core-executor = "5.2.1"
sp1-lib = "5.2.1"
sp1-prover = "5.2.1"
sp1-sdk = "5.2.1"
sp1-zkvm = "5.2.1"

# ZKVM deps
bincode = "1.3.3"
hex = "0.4"
url = { version = "2.5.4" }
bincode = "1.3.3"
22 changes: 11 additions & 11 deletions canoe/sp1-cc/host/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,25 @@ name = "canoe-sp1-cc-host"
edition = "2021"

[dependencies]
sp1-cc-host-executor = { workspace = true }
sp1-cc-client-executor = { workspace = true }
rsp-primitives = { workspace = true }
rsp-primitives.workspace = true
sp1-cc-client-executor.workspace = true
sp1-cc-host-executor.workspace = true

alloy-primitives.workspace = true
alloy-sol-types = { workspace = true }
alloy-sol-types.workspace = true
bincode.workspace = true

anyhow = { workspace = true }
async-trait = { workspace = true }
canoe-provider.workspace = true
canoe-bindings.workspace = true
alloy-rpc-types.workspace = true
anyhow.workspace = true
async-trait.workspace = true
canoe-bindings.workspace = true
canoe-provider.workspace = true

# misc:
url.workspace = true
tracing.workspace = true
url.workspace = true

# sp1
sp1-sdk.workspace = true
sp1-core-executor.workspace = true
sp1-prover.workspace = true
sp1-prover.workspace = true
sp1-sdk.workspace = true
51 changes: 20 additions & 31 deletions canoe/sp1-cc/host/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,21 @@ use anyhow::Result;
use async_trait::async_trait;
use canoe_bindings::{Journal, StatusCode};
use canoe_provider::{CanoeInput, CanoeProvider, CertVerifierCall};
use rsp_primitives::genesis::genesis_from_json;
use sp1_cc_client_executor::ContractInput;
use sp1_cc_host_executor::{EvmSketch, Genesis};
use sp1_sdk::{
network::FulfillmentStrategy, Prover, ProverClient, SP1Proof, SP1ProofMode,
SP1ProofWithPublicValues, SP1Stdin, SP1_CIRCUIT_VERSION,
};
use tracing::{debug, info, warn};
use url::Url;

use std::{
env,
str::FromStr,
time::{Duration, Instant},
};
use tracing::{debug, info, warn};
use url::Url;

use rsp_primitives::genesis::genesis_from_json;

/// The ELF we want to execute inside the zkVM.
pub const ELF: &[u8] = include_bytes!("../../elf/canoe-sp1-cc-client");
Expand Down Expand Up @@ -147,35 +147,24 @@ async fn get_sp1_cc_proof(

let rpc_url = Url::from_str(eth_rpc_url).unwrap();

let sketch = match Genesis::try_from(l1_chain_id) {
Ok(genesis) => {
EvmSketch::builder()
.at_block(block_number)
.with_genesis(genesis)
.el_rpc_url(rpc_url)
.build()
.await?
}
// if genesis is not available in the sp1-cc library, the code uses custom genesis config
Err(_) => {
let chain_config = match l1_chain_id {
17000 => genesis_from_json(HOLESKY_GENESIS).expect("genesis from json"),
3151908 => genesis_from_json(KURTOSIS_DEVNET_GENESIS).expect("genesis from json"),
_ => panic!("chain id {l1_chain_id} is not supported by canoe sp1 cc"),
};

let genesis = Genesis::Custom(chain_config.config);

EvmSketch::builder()
.at_block(block_number)
.with_genesis(genesis)
.el_rpc_url(rpc_url)
.build()
.await
.expect("evm sketch builder")
}
let genesis = if let Ok(genesis) = Genesis::try_from(l1_chain_id) {
genesis
} else {
let chain_config = match l1_chain_id {
17000 => genesis_from_json(HOLESKY_GENESIS).expect("genesis from json"),
3151908 => genesis_from_json(KURTOSIS_DEVNET_GENESIS).expect("genesis from json"),
_ => panic!("chain id {l1_chain_id} is not supported by canoe sp1 cc"),
};
Genesis::Custom(chain_config.config)
};

let sketch = EvmSketch::builder()
.at_block(block_number)
.with_genesis(genesis)
.el_rpc_url(rpc_url)
.build()
.await?;

let derived_l1_header_hash = sketch.anchor.header().hash_slow();
assert!(l1_head_block_hash == derived_l1_header_hash);

Expand Down
2 changes: 1 addition & 1 deletion canoe/sp1-cc/verifier/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub const V_KEY: [u32; 8] = [
172466936, 724562174, 1557159139, 1421788462, 501370159, 544998102, 524542311, 605749438,
];

#[derive(Clone)]
#[derive(Clone, Default)]
pub struct CanoeSp1CCVerifier {}

impl CanoeVerifier for CanoeSp1CCVerifier {
Expand Down
26 changes: 13 additions & 13 deletions example/preloader/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,42 +5,42 @@ edition = "2021"


[dependencies]
hokulea-proof.workspace = true
hokulea-client.workspace = true
hokulea-compute-proof.workspace = true
hokulea-host-bin.workspace = true
hokulea-proof.workspace = true
hokulea-witgen.workspace = true
hokulea-zkvm-verification.workspace = true
hokulea-client.workspace = true
hokulea-compute-proof.workspace = true

# General
anyhow.workspace = true
tokio = { workspace = true, features = ["full"] }
cfg-if.workspace = true
clap = { workspace = true, features = ["derive", "env"] }
cfg-if = { workspace = true }
tracing = { workspace = true }
serde_json.workspace = true
tokio = { workspace = true, features = ["full"] }
tracing.workspace = true

kona-client.workspace = true
kona-preimage.workspace = true
kona-proof.workspace = true

# Execution
alloy-evm.workspace = true
op-revm.workspace = true
op-alloy-consensus.workspace = true
alloy-op-evm.workspace = true
op-alloy-consensus.workspace = true
op-revm.workspace = true
revm.workspace = true

canoe-provider = { workspace = true }
canoe-verifier = { workspace = true }
canoe-verifier-address-fetcher = { workspace = true }
canoe-provider.workspace = true
canoe-sp1-cc-host = { workspace = true, optional = true }
canoe-steel-apps = { workspace = true, optional = true }
canoe-steel-verifier = { workspace = true, optional = true }
canoe-sp1-cc-host = { workspace = true, optional = true }
canoe-verifier-address-fetcher.workspace = true
canoe-verifier.workspace = true

sp1-sdk = {workspace = true}

[features]
steel = ["canoe-steel-apps", "canoe-steel-verifier"]
sp1-cc = ["canoe-sp1-cc-host"]
steel = ["canoe-steel-apps", "canoe-steel-verifier"]