diff --git a/Cargo.toml b/Cargo.toml index f1c1ed6d..97de7185 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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] @@ -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" diff --git a/canoe/sp1-cc/host/Cargo.toml b/canoe/sp1-cc/host/Cargo.toml index f5ecfc8b..bdc2ae02 100644 --- a/canoe/sp1-cc/host/Cargo.toml +++ b/canoe/sp1-cc/host/Cargo.toml @@ -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 \ No newline at end of file +sp1-prover.workspace = true +sp1-sdk.workspace = true diff --git a/canoe/sp1-cc/host/src/lib.rs b/canoe/sp1-cc/host/src/lib.rs index ff4104cc..d22d0a65 100644 --- a/canoe/sp1-cc/host/src/lib.rs +++ b/canoe/sp1-cc/host/src/lib.rs @@ -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"); @@ -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); diff --git a/canoe/sp1-cc/verifier/src/lib.rs b/canoe/sp1-cc/verifier/src/lib.rs index b0803c53..12eb6054 100644 --- a/canoe/sp1-cc/verifier/src/lib.rs +++ b/canoe/sp1-cc/verifier/src/lib.rs @@ -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 { diff --git a/example/preloader/Cargo.toml b/example/preloader/Cargo.toml index 5fcfb153..406ab0a6 100644 --- a/example/preloader/Cargo.toml +++ b/example/preloader/Cargo.toml @@ -5,20 +5,20 @@ 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 @@ -26,21 +26,21 @@ 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"]