From eaa9b022179ad21f0c6c52a7643a20560954cf5d Mon Sep 17 00:00:00 2001 From: han0110 Date: Fri, 13 Feb 2026 16:04:28 +0000 Subject: [PATCH 1/2] feat: update `ere` to `v0.3.0` --- Cargo.lock | 64 +++++-------------- Cargo.toml | 8 +-- crates/zkboost-ethereum/el-config/src/main.rs | 6 +- crates/zkboost/server-config/src/config.rs | 25 ++++---- .../server/tests/stateless_validator/main.rs | 6 +- docker/example/observability/config.toml | 2 +- 6 files changed, 42 insertions(+), 69 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0be5f57..a4ba939 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2548,29 +2548,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "erased-serde" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" -dependencies = [ - "serde", - "serde_core", - "typeid", -] - [[package]] name = "ere-build-utils" -version = "0.1.0" -source = "git+https://github.com/eth-act/ere?tag=v0.1.0#bfc3a2f47227aaf3e501dd31e2b805c841d9b0f7" +version = "0.3.0" +source = "git+https://github.com/eth-act/ere?tag=v0.3.0#ffc0e230cf4387fb22eb755f0fb323b38294520f" dependencies = [ "cargo_metadata", ] [[package]] name = "ere-common" -version = "0.1.0" -source = "git+https://github.com/eth-act/ere?tag=v0.1.0#bfc3a2f47227aaf3e501dd31e2b805c841d9b0f7" +version = "0.3.0" +source = "git+https://github.com/eth-act/ere?tag=v0.3.0#ffc0e230cf4387fb22eb755f0fb323b38294520f" dependencies = [ "ere-build-utils", "serde", @@ -2579,13 +2568,13 @@ dependencies = [ [[package]] name = "ere-dockerized" -version = "0.1.0" -source = "git+https://github.com/eth-act/ere?tag=v0.1.0#bfc3a2f47227aaf3e501dd31e2b805c841d9b0f7" +version = "0.3.0" +source = "git+https://github.com/eth-act/ere?tag=v0.3.0#ffc0e230cf4387fb22eb755f0fb323b38294520f" dependencies = [ "anyhow", "ere-common", "ere-server", - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "serde", "tempfile", "thiserror 2.0.17", @@ -2613,12 +2602,12 @@ dependencies = [ [[package]] name = "ere-server" -version = "0.1.0" -source = "git+https://github.com/eth-act/ere?tag=v0.1.0#bfc3a2f47227aaf3e501dd31e2b805c841d9b0f7" +version = "0.3.0" +source = "git+https://github.com/eth-act/ere?tag=v0.3.0#ffc0e230cf4387fb22eb755f0fb323b38294520f" dependencies = [ "anyhow", "bincode 2.0.1", - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "prost", "serde", "thiserror 2.0.17", @@ -2642,8 +2631,8 @@ dependencies = [ [[package]] name = "ere-zkvm-interface" -version = "0.1.0" -source = "git+https://github.com/eth-act/ere?tag=v0.1.0#bfc3a2f47227aaf3e501dd31e2b805c841d9b0f7" +version = "0.3.0" +source = "git+https://github.com/eth-act/ere?tag=v0.3.0#ffc0e230cf4387fb22eb755f0fb323b38294520f" dependencies = [ "anyhow", "auto_impl", @@ -2651,7 +2640,6 @@ dependencies = [ "clap", "indexmap 2.12.1", "serde", - "serde-untagged", "strum", "thiserror 2.0.17", ] @@ -7353,18 +7341,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-untagged" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" -dependencies = [ - "erased-serde", - "serde", - "serde_core", - "typeid", -] - [[package]] name = "serde_arrays" version = "0.2.0" @@ -8548,12 +8524,6 @@ dependencies = [ "url", ] -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - [[package]] name = "typenum" version = "1.19.0" @@ -9635,7 +9605,7 @@ dependencies = [ "anyhow", "clap", "ere-common", - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "reqwest", "serde", "tokio", @@ -9650,7 +9620,7 @@ name = "zkboost-ethereum-el-input" version = "0.1.0" dependencies = [ "anyhow", - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "reth-stateless", "sha2", "stateless-validator-ethrex", @@ -9681,7 +9651,7 @@ dependencies = [ "clap", "ere-dockerized", "ere-server", - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "flate2", "futures", "metrics", @@ -9714,7 +9684,7 @@ version = "0.1.0" dependencies = [ "anyhow", "ere-dockerized", - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "reqwest", "serde", "serde_yaml", @@ -9727,7 +9697,7 @@ dependencies = [ name = "zkboost-types" version = "0.1.0" dependencies = [ - "ere-zkvm-interface 0.1.0", + "ere-zkvm-interface 0.3.0", "indexmap 2.12.1", "serde", "serde_with", diff --git a/Cargo.toml b/Cargo.toml index f92cc27..36477a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -86,10 +86,10 @@ reth-ethereum-primitives = { git = "https://github.com/paradigmxyz/reth", rev = reth-stateless = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241" } # ere -ere-common = { git = "https://github.com/eth-act/ere", tag = "v0.1.0" } -ere-dockerized = { git = "https://github.com/eth-act/ere", tag = "v0.1.0" } -ere-server = { git = "https://github.com/eth-act/ere", tag = "v0.1.0" } -ere-zkvm-interface = { git = "https://github.com/eth-act/ere", tag = "v0.1.0" } +ere-common = { git = "https://github.com/eth-act/ere", tag = "v0.3.0" } +ere-dockerized = { git = "https://github.com/eth-act/ere", tag = "v0.3.0" } +ere-server = { git = "https://github.com/eth-act/ere", tag = "v0.3.0" } +ere-zkvm-interface = { git = "https://github.com/eth-act/ere", tag = "v0.3.0" } # ere-guests stateless-validator-ethrex = { git = "https://github.com/eth-act/ere-guests", tag = "v0.4.0", features = ["host"] } diff --git a/crates/zkboost-ethereum/el-config/src/main.rs b/crates/zkboost-ethereum/el-config/src/main.rs index f9cd8ae..19d22dc 100644 --- a/crates/zkboost-ethereum/el-config/src/main.rs +++ b/crates/zkboost-ethereum/el-config/src/main.rs @@ -8,7 +8,7 @@ use std::path::PathBuf; use clap::Parser; use ere_common::zkVMKind; -use ere_zkvm_interface::ProverResourceType; +use ere_zkvm_interface::ProverResource; use tokio::fs; use zkboost_ethereum_el_config::program::download_program; use zkboost_ethereum_el_types::ElKind; @@ -60,8 +60,8 @@ async fn main() -> anyhow::Result<()> { zkvm: vec![zkVMConfig::Docker { kind: args.zkvm, resource: match args.resource.to_lowercase().as_str() { - "cpu" => ProverResourceType::Cpu, - "gpu" => ProverResourceType::Gpu, + "cpu" => ProverResource::Cpu, + "gpu" => ProverResource::Gpu, _ => unreachable!(), }, program_id: format!("{}-{}", args.el, args.zkvm).into(), diff --git a/crates/zkboost/server-config/src/config.rs b/crates/zkboost/server-config/src/config.rs index 61645f7..4e2f681 100644 --- a/crates/zkboost/server-config/src/config.rs +++ b/crates/zkboost/server-config/src/config.rs @@ -6,7 +6,7 @@ use std::path::Path; use anyhow::Context; use ere_dockerized::zkVMKind; -use ere_zkvm_interface::ProverResourceType; +use ere_zkvm_interface::ProverResource; use serde::{Deserialize, Serialize}; use zkboost_types::ProgramID; @@ -91,7 +91,7 @@ pub enum zkVMConfig { /// The kind of zkVM backend to use. kind: zkVMKind, /// The compute resource type for proving (CPU, GPU, or network). - resource: ProverResourceType, + resource: ProverResource, /// Unique identifier for this program. program_id: ProgramID, /// Path to the compiled program binary. @@ -129,7 +129,7 @@ impl zkVMConfig { #[cfg(test)] mod test { use ere_dockerized::zkVMKind; - use ere_zkvm_interface::{NetworkProverConfig, ProverResourceType}; + use ere_zkvm_interface::{ProverResource, RemoteProverConfig}; use crate::{Config, PathConfig, ProgramConfig, UrlConfig, zkVMConfig}; @@ -141,19 +141,19 @@ mod test { [[zkvm]] kind = "openvm" - resource = "cpu" + resource = { kind = "cpu" } program_id = "openvm-test" program = "openvm-test-elf" [[zkvm]] kind = "sp1" - resource = { endpoint = "http://localhost:3000", api_key = "secret" } + resource = { kind = "network", endpoint = "http://localhost:3000", api_key = "secret" } program_id = "sp1-test" program = { path = "sp1-test-elf" } [[zkvm]] kind = "zisk" - resource = "gpu" + resource = { kind = "gpu" } program_id = "zisk-test" program = { url = "http://artifact" } @@ -176,18 +176,21 @@ mod test { webhook_url: "http://localhost:3003/proofs" zkvm: - kind: openvm - resource: cpu + resource: + kind: cpu program_id: openvm-test program: openvm-test-elf - kind: sp1 resource: + kind: network endpoint: http://localhost:3000 api_key: secret program_id: sp1-test program: path: sp1-test-elf - kind: zisk - resource: gpu + resource: + kind: gpu program_id: zisk-test program: url: http://artifact @@ -207,13 +210,13 @@ mod test { zkvm: vec![ zkVMConfig::Docker { kind: zkVMKind::OpenVM, - resource: ProverResourceType::Cpu, + resource: ProverResource::Cpu, program_id: "openvm-test".into(), program: ProgramConfig::Path("openvm-test-elf".into()), }, zkVMConfig::Docker { kind: zkVMKind::SP1, - resource: ProverResourceType::Network(NetworkProverConfig { + resource: ProverResource::Network(RemoteProverConfig { endpoint: "http://localhost:3000".to_string(), api_key: Some("secret".to_string()), }), @@ -224,7 +227,7 @@ mod test { }, zkVMConfig::Docker { kind: zkVMKind::Zisk, - resource: ProverResourceType::Gpu, + resource: ProverResource::Gpu, program_id: "zisk-test".into(), program: ProgramConfig::Url(UrlConfig { url: "http://artifact".to_string(), diff --git a/crates/zkboost/server/tests/stateless_validator/main.rs b/crates/zkboost/server/tests/stateless_validator/main.rs index 52a3f47..6c7f9af 100644 --- a/crates/zkboost/server/tests/stateless_validator/main.rs +++ b/crates/zkboost/server/tests/stateless_validator/main.rs @@ -13,7 +13,7 @@ use anyhow::bail; use axum::{Json, Router, extract::State, http::StatusCode, routing::post}; use clap::Parser; use ere_dockerized::zkVMKind; -use ere_zkvm_interface::ProverResourceType; +use ere_zkvm_interface::ProverResource; use nix::sys::{prctl, signal::Signal}; use tempfile::tempdir; use tokio::{process::Command, sync::mpsc, time::sleep}; @@ -95,8 +95,8 @@ async fn generate_config( .await?; let resource = match args.resource.to_lowercase().as_str() { - "cpu" => ProverResourceType::Cpu, - "gpu" => ProverResourceType::Gpu, + "cpu" => ProverResource::Cpu, + "gpu" => ProverResource::Gpu, _ => bail!("Unsupported resource type: {}", args.resource), }; diff --git a/docker/example/observability/config.toml b/docker/example/observability/config.toml index fbc2f71..bc4cbda 100644 --- a/docker/example/observability/config.toml +++ b/docker/example/observability/config.toml @@ -4,6 +4,6 @@ # Add zkVM programs here. Example: # [[zkvm]] # kind = "sp1" -# resource = "cpu" +# resource = { kind = "cpu" } # program_id = "my-program" # program = "/path/to/elf" From b2c250f12434e3e9f3fa6f30d1ee4077f3cdd575 Mon Sep 17 00:00:00 2001 From: han0110 Date: Sun, 15 Feb 2026 14:56:46 +0000 Subject: [PATCH 2/2] feat: update testnet example to use cuda enabled image published from ere repo --- docker/example/testnet/README.md | 24 ++++++++++----- docker/example/testnet/docker-compose.yml | 30 ++++++------------- ...network_params_mixed_proof_gen_verify.yaml | 4 +-- 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/docker/example/testnet/README.md b/docker/example/testnet/README.md index 0b9973f..ad41b63 100644 --- a/docker/example/testnet/README.md +++ b/docker/example/testnet/README.md @@ -28,18 +28,28 @@ sequenceDiagram 1. Install [`yq`](https://github.com/mikefarah/yq). If you are on Ubuntu, you can install `yq` by running `snap install yq`. -## Build image with GPU acceleration +## (Optional) Build image locally with GPU acceleration -To make sure EWS can keep up with the testnet, we can build the `ere-server-zisk` image with GPU acceleration if it is available. +The pre-built ZisK prover image (`ghcr.io/eth-act/ere/ere-server-zisk:0.3.0-cuda`) supports Blackwell GPUs only (ZisK only supports single architecture codegen). If you have a Blackwell GPU, e.g. RTX 50 series or RTX PRO 6000, skip this section. -``` -git clone --depth 1 --branch v0.1.0 https://github.com/eth-act/ere +Build the image with the compute capability of local GPU: + +```bash +git clone --depth 1 --branch v0.3.0 https://github.com/eth-act/ere cd ere -COMPUTE_CAP=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -1 | tr -d '.') -bash .github/scripts/build-image.sh --zkvm zisk --tag local --base --server --cuda --cuda-arch "sm_$COMPUTE_CAP" +CUDA_ARCH=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -1 | tr -d '.') +echo "Building for CUDA architecture: $CUDA_ARCH" +bash .github/scripts/build-image.sh \ + --registry ghcr.io/eth-act/ere \ + --zkvm zisk \ + --tag 0.3.0-cuda \ + --base \ + --server \ + --cuda \ + --cuda-archs "$CUDA_ARCH" ``` -This builds the image `ere-server-zisk:local-cuda` +This produces `ghcr.io/eth-act/ere/ere-server-zisk:0.3.0-cuda`, which is referenced by the `./docker/example/testnet/docker-compose.yml`. ## Start local testnet diff --git a/docker/example/testnet/docker-compose.yml b/docker/example/testnet/docker-compose.yml index da28104..f7bfa29 100644 --- a/docker/example/testnet/docker-compose.yml +++ b/docker/example/testnet/docker-compose.yml @@ -18,7 +18,7 @@ services: - programs:/programs ethrex-zisk: - image: ere-server-zisk:local-cuda + image: ghcr.io/eth-act/ere/ere-server-zisk:0.3.0-cuda command: ["--port", "3000", "--program-path", "/programs/stateless-validator-ethrex-zisk", "gpu"] depends_on: download-programs: @@ -34,9 +34,12 @@ services: - testnet-ews environment: - RUST_LOG=info + - ERE_ZISK_SETUP_ON_INIT=1 + - ERE_ZISK_START_SERVER_TIMEOUT_SEC=10 restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + start_period: 300s deploy: resources: reservations: @@ -46,25 +49,8 @@ services: capabilities: [gpu] reth-zisk: - image: ere-server-zisk:local-cuda + extends: ethrex-zisk command: ["--port", "3000", "--program-path", "/programs/stateless-validator-reth-zisk", "gpu"] - depends_on: - download-programs: - condition: service_completed_successfully - volumes: - - programs:/programs:ro - shm_size: 32G - ulimits: - memlock: - soft: -1 - hard: -1 - networks: - - testnet-ews - environment: - - RUST_LOG=info - restart: unless-stopped - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3000/health"] deploy: resources: reservations: @@ -80,8 +66,10 @@ services: dockerfile: ./docker/Dockerfile.zkboost-server command: ["--config", "/app/config.toml"] depends_on: - - ethrex-zisk - - reth-zisk + ethrex-zisk: + condition: service_healthy + reth-zisk: + condition: service_healthy volumes: - ./config/zkboost-server.toml:/app/config.toml:ro networks: diff --git a/docker/example/testnet/network_params_mixed_proof_gen_verify.yaml b/docker/example/testnet/network_params_mixed_proof_gen_verify.yaml index b634a14..9403c80 100644 --- a/docker/example/testnet/network_params_mixed_proof_gen_verify.yaml +++ b/docker/example/testnet/network_params_mixed_proof_gen_verify.yaml @@ -6,7 +6,7 @@ participants: - el_type: reth el_image: ghcr.io/paradigmxyz/reth:latest cl_type: lighthouse - cl_image: ghcr.io/han0110/lighthouse/lighthouse:latest-optional-proofs + cl_image: ghcr.io/eth-act/lighthouse/lighthouse:latest-optional-proofs cl_extra_params: - --target-peers=5 count: 3 @@ -14,7 +14,7 @@ participants: - el_type: dummy el_image: ethpandaops/dummy-el:master cl_type: lighthouse - cl_image: ghcr.io/han0110/lighthouse/lighthouse:latest-optional-proofs + cl_image: ghcr.io/eth-act/lighthouse/lighthouse:latest-optional-proofs cl_extra_params: - --activate-zkvm - --target-peers=5