{"id":33212156,"url":"https://github.com/eth-act/ere","last_synced_at":"2026-05-13T02:14:10.445Z","repository":{"id":293273200,"uuid":"981652741","full_name":"eth-act/ere","owner":"eth-act","description":"Unified zkVM Interface \u0026 Toolkit","archived":false,"fork":false,"pushed_at":"2026-05-08T11:10:17.000Z","size":5788,"stargazers_count":82,"open_issues_count":34,"forks_count":22,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-05-08T11:20:42.332Z","etag":null,"topics":["ethereum","zkvm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eth-act.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-11T15:43:14.000Z","updated_at":"2026-05-08T11:08:39.000Z","dependencies_parsed_at":"2025-07-08T23:21:59.859Z","dependency_job_id":"fadda865-57fc-4274-a83e-a7d3dcc56ed3","html_url":"https://github.com/eth-act/ere","commit_stats":null,"previous_names":["eth-applied-research-group/ere","eth-act/ere"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/eth-act/ere","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eth-act%2Fere","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eth-act%2Fere/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eth-act%2Fere/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eth-act%2Fere/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eth-act","download_url":"https://codeload.github.com/eth-act/ere/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eth-act%2Fere/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32964501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T23:30:32.555Z","status":"online","status_checked_at":"2026-05-13T02:00:07.132Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ethereum","zkvm"],"created_at":"2025-11-16T12:00:22.254Z","updated_at":"2026-05-13T02:14:10.439Z","avatar_url":"https://github.com/eth-act.png","language":"Rust","funding_links":[],"categories":["related tooling"],"sub_categories":["EDEN"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo-blue-white.svg\" alt=\"Ere logo\" width=\"260\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eEre – Unified zkVM Interface \u0026 Toolkit\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eCompile. Execute. Prove. Verify.\u003c/b\u003e\u003cbr/\u003e\n  One ergonomic Rust API, multiple zero‑knowledge virtual machines.\n\u003c/p\u003e\n\n---\n\n## Table of Contents\n\n- [Table of Contents](#table-of-contents)\n- [Supported Rust Versions (MSRV)](#supported-rust-versions-msrv)\n- [Overview](#overview)\n- [Architecture](#architecture)\n  - [The Interface](#the-interface)\n  - [Communication between Host and Guest](#communication-between-host-and-guest)\n    - [Reading Private Values from Host](#reading-private-values-from-host)\n    - [Writing Public Values to Host](#writing-public-values-to-host)\n- [Supported zkVMs](#supported-zkvms)\n- [Examples](#examples)\n  - [With SDK Installation](#with-sdk-installation)\n    - [1. Install SDKs](#1-install-sdks)\n    - [2. Create Guest Program](#2-create-guest-program)\n    - [3. Create Host](#3-create-host)\n  - [Docker-Only Setup](#docker-only-setup)\n    - [1. Create Guest Program](#1-create-guest-program)\n    - [2. Create Host](#2-create-host)\n- [Environment Variables](#environment-variables)\n- [Directory Layout](#directory-layout)\n- [Contributing](#contributing)\n- [Disclaimer](#disclaimer)\n- [License](#license)\n\n## Supported Rust Versions (MSRV)\n\nThe current MSRV (minimum supported rust version) is 1.88.\n\n## Overview\n\nThis repository contains the following crates:\n\n- Traits\n  - [`ere-compiler-core`] - `Compiler` trait and `Elf` type for compiling guest programs\n  - [`ere-prover-core`] - `zkVMProver` trait, `Input`, `ProverResource`, and execution/proving reports\n  - [`ere-platform-core`] - `Platform` trait for guest program\n  - [`ere-verifier-core`] - `zkVMVerifier` trait and `PublicValues`\n- Per-zkVM implementations for [`ere-compiler-core`] (host)\n  - [`ere-compiler-airbender`]\n  - [`ere-compiler-openvm`]\n  - [`ere-compiler-risc0`]\n  - [`ere-compiler-sp1`]\n  - [`ere-compiler-zisk`]\n- Per-zkVM implementations for [`ere-prover-core`] (host)\n  - [`ere-prover-airbender`]\n  - [`ere-prover-openvm`]\n  - [`ere-prover-risc0`]\n  - [`ere-prover-sp1`]\n  - [`ere-prover-zisk`]\n- Per-zkVM implementations for [`ere-platform-core`] (guest)\n  - [`ere-platform-airbender`]\n  - [`ere-platform-openvm`]\n  - [`ere-platform-risc0`]\n  - [`ere-platform-sp1`]\n  - [`ere-platform-zisk`]\n- Per-zkVM implementations for [`ere-verifier-core`] (lightweight host verifier)\n  - [`ere-verifier-airbender`]\n  - [`ere-verifier-openvm`]\n  - [`ere-verifier-risc0`]\n  - [`ere-verifier-sp1`]\n  - [`ere-verifier-zisk`]\n- [`ere-dockerized`] - Docker wrapper that spawns [`ere-server`] containers to run zkVM operations without local SDK installation\n- [`ere-cluster-client-zisk`] - ZisK distributed-cluster client used by [`ere-prover-zisk`] when `ProverResource::Cluster` is selected\n- [`ere-codec`] - Canonical byte codec (`Encode`/`Decode` + macros) shared across crates\n- [`ere-catalog`] - Catalog of supported zkVMs and compilers (`zkVMKind`, `CompilerKind`, SDK versions, Docker image tag)\n- Internal crates\n  - [`ere-compiler`] - CLI binary to run `Compiler` used by [`ere-dockerized`]\n  - [`ere-server`] - Server binary that exposes `zkVMProver` operations over gRPC (also provides a `keygen` subcommand)\n  - [`ere-server-api`] - gRPC wire contract (`proto/api.proto` and generated prost/twirp types) shared by [`ere-server`] and [`ere-server-client`]\n  - [`ere-server-client`] - Client library for [`ere-server`], used by [`ere-dockerized`]\n  - [`ere-util-build`] - Build-time utilities (SDK version + Docker image tag detection)\n  - [`ere-util-compile`] - Cross-compilation utilities (`CargoBuildCmd`, `RustTarget`, toolchain management)\n  - [`ere-util-test`] - Testing utilities (`Program`, `TestCase`, `BasicProgram`, codec markers)\n  - [`ere-util-tokio`] - Tokio runtime bridge (`block_on`) used by sync constructors that call async SDK APIs\n\n[`ere-compiler-core`]: https://github.com/eth-act/ere/tree/master/crates/compiler/core\n[`ere-prover-core`]: https://github.com/eth-act/ere/tree/master/crates/prover/core\n[`ere-platform-core`]: https://github.com/eth-act/ere/tree/master/crates/platform/core\n[`ere-verifier-core`]: https://github.com/eth-act/ere/tree/master/crates/verifier/core\n[`ere-compiler-airbender`]: https://github.com/eth-act/ere/tree/master/crates/compiler/airbender\n[`ere-compiler-openvm`]: https://github.com/eth-act/ere/tree/master/crates/compiler/openvm\n[`ere-compiler-risc0`]: https://github.com/eth-act/ere/tree/master/crates/compiler/risc0\n[`ere-compiler-sp1`]: https://github.com/eth-act/ere/tree/master/crates/compiler/sp1\n[`ere-compiler-zisk`]: https://github.com/eth-act/ere/tree/master/crates/compiler/zisk\n[`ere-cluster-client-zisk`]: https://github.com/eth-act/ere/tree/master/crates/cluster-client/zisk\n[`ere-prover-airbender`]: https://github.com/eth-act/ere/tree/master/crates/prover/airbender\n[`ere-platform-airbender`]: https://github.com/eth-act/ere/tree/master/crates/platform/airbender\n[`ere-verifier-airbender`]: https://github.com/eth-act/ere/tree/master/crates/verifier/airbender\n[`ere-prover-openvm`]: https://github.com/eth-act/ere/tree/master/crates/prover/openvm\n[`ere-platform-openvm`]: https://github.com/eth-act/ere/tree/master/crates/platform/openvm\n[`ere-verifier-openvm`]: https://github.com/eth-act/ere/tree/master/crates/verifier/openvm\n[`ere-prover-risc0`]: https://github.com/eth-act/ere/tree/master/crates/prover/risc0\n[`ere-platform-risc0`]: https://github.com/eth-act/ere/tree/master/crates/platform/risc0\n[`ere-verifier-risc0`]: https://github.com/eth-act/ere/tree/master/crates/verifier/risc0\n[`ere-prover-sp1`]: https://github.com/eth-act/ere/tree/master/crates/prover/sp1\n[`ere-platform-sp1`]: https://github.com/eth-act/ere/tree/master/crates/platform/sp1\n[`ere-verifier-sp1`]: https://github.com/eth-act/ere/tree/master/crates/verifier/sp1\n[`ere-prover-zisk`]: https://github.com/eth-act/ere/tree/master/crates/prover/zisk\n[`ere-platform-zisk`]: https://github.com/eth-act/ere/tree/master/crates/platform/zisk\n[`ere-verifier-zisk`]: https://github.com/eth-act/ere/tree/master/crates/verifier/zisk\n[`ere-dockerized`]: https://github.com/eth-act/ere/tree/master/crates/dockerized\n[`ere-compiler`]: https://github.com/eth-act/ere/tree/master/crates/compiler/cli\n[`ere-server`]: https://github.com/eth-act/ere/tree/master/crates/server/cli\n[`ere-server-api`]: https://github.com/eth-act/ere/tree/master/crates/server/api\n[`ere-server-client`]: https://github.com/eth-act/ere/tree/master/crates/server/client\n[`ere-codec`]: https://github.com/eth-act/ere/tree/master/crates/codec\n[`ere-catalog`]: https://github.com/eth-act/ere/tree/master/crates/catalog\n[`ere-util-build`]: https://github.com/eth-act/ere/tree/master/crates/util/build\n[`ere-util-compile`]: https://github.com/eth-act/ere/tree/master/crates/util/compile\n[`ere-util-test`]: https://github.com/eth-act/ere/tree/master/crates/util/test\n[`ere-util-tokio`]: https://github.com/eth-act/ere/tree/master/crates/util/tokio\n\n## Architecture\n\n### The Interface\n\nHost-side traits:\n\n- `Compiler` (from `ere-compiler-core`)\n\n  Compile a guest program into an `Elf`.\n\n- `zkVMProver` (from `ere-prover-core`)\n\n  Execute, prove and verify. A zkVM prover instance is created for an `Elf` produced by a `Compiler`. `Elf` specific verifying key generation happens in the constructor.\n\n- `zkVMVerifier` (from `ere-verifier-core`)\n\n  zkVM verifier that is created by a succinct `ProgramVk` for specific `Elf` produced by `zkVMProver`. A zkVM verifier instance verifies a `Proof` and returns `PublicValues`. Pulled in standalone by verify-only consumers without the prover deps if upstream zkVM SDK provides verifier-only crate.\n\nGuest-side trait (`ere-platform-core`):\n\n- `Platform`\n\n  Provides platform-dependent methods for IO read/write and cycle tracking. It also re-exports the runtime SDK of the zkVM, guaranteed to match the host when `ere-prover-{zkvm}` and `ere-platform-{zkvm}` share the same version.\n\n### Communication between Host and Guest\n\nHost and guest communicate through raw bytes. Serialization/deserialization can be done in any way as long as they agree with each other.\n\n#### Reading Private Values from Host\n\nThe `Input` structure holds stdin as raw bytes. There are 2 ways to use it:\n\n1. `Input::new().with_prefixed_stdin(data)` for `Platform::read_whole_input()`\n\n    The `Platform` trait provides a unified interface to read the whole stdin. However, some zkVMs don't provide access to the stdin length, so we require it to have a length prefix.\n\n    The method `Input::with_prefixed_stdin` automatically adds a LE u32 length prefix to the stdin. In the guest, `Platform::read_whole_input` will return only the actual data.\n\n    Without the length prefix, the `Platform::read_whole_input` will cause guest panic at runtime.\n\n2. `Input::new().with_stdin(data)` for zkVM-specific stdin APIs\n\n    The method `Input::with_stdin` sets stdin without modification. Use this when you need direct access to zkVM-specific stdin APIs (e.g., `sp1_zkvm::io::read`, `risc0_zkvm::guest::env::read`), such as streaming reads or partial data consumption.\n\n#### Writing Public Values to Host\n\nPublic values written in the guest program (via `Platform::write_whole_output()` or zkVM-specific output APIs) are returned as raw bytes to the host after `zkVMProver::execute`, `zkVMProver::prove` and `zkVMProver::verify` methods.\n\nDifferent zkVMs handles public values in different approaches:\n\n| zkVM      | Size Limit | Note                          |\n| --------- | ---------- | ----------------------------- |\n| Airbender | 32 bytes   | Padded to 32 bytes with zeros |\n| OpenVM    | 32 bytes   | Padded to 32 bytes with zeros |\n| Risc0     | unlimited  | Hashed internally             |\n| SP1       | unlimited  | Hashed internally             |\n| Zisk      | 256 bytes  |                               |\n\n## Supported zkVMs\n\n| zkVM      | Version                                                                   | ISA       |  GPU  | Multi GPU | Cluster |\n| --------- | ------------------------------------------------------------------------- | --------- | :---: | :-------: | :-----: |\n| Airbender | [`d15b86d`](https://github.com/matter-labs/zksync-airbender/tree/d15b86d) | `RV32IMA` |   V   |     V     |         |\n| OpenVM    | [`1.4.3`](https://github.com/openvm-org/openvm/tree/v1.4.3)               | `RV32IMA` |   V   |           |         |\n| Risc0     | [`3.0.5`](https://github.com/risc0/risc0/tree/v3.0.5)                     | `RV32IMA` |   V   |     V     |         |\n| SP1       | [`6.1.0`](https://github.com/succinctlabs/sp1/tree/v6.1.0)                | `RV64IMA` |   V   |           |         |\n| Zisk      | [`0.16.1`](https://github.com/0xPolygonHermez/zisk/tree/v0.16.1)          | `RV64IMA` |   V   |     V     |    V    |\n\n## Examples\n\n### With SDK Installation\n\nInstall the required zkVM SDKs locally for better performance and debugging.\n\n#### 1. Install SDKs\n\nInstall the SP1 SDK as an example\n\n```bash\nbash scripts/sdk_installers/install_sp1_sdk.sh\n```\n\n#### 2. Create Guest Program\n\n```toml\n# guest/Cargo.toml\n\n[workspace]\n\n[package]\nname = \"guest\"\nedition = \"2024\"\n\n[dependencies]\nere-platform-sp1 = { git = \"https://github.com/eth-act/ere.git\" }\n```\n\n```rust\n// guest/src/main.rs\n\n#![no_main]\n\nuse ere_platform_sp1::{sp1_zkvm, Platform, SP1Platform};\n\nsp1_zkvm::entrypoint!(main);\n\ntype P = SP1Platform;\n\npub fn main() {\n    // Read serialized input and deserialize it.\n    let input = P::read_whole_input();\n    let n = u64::from_le_bytes(input.as_slice().try_into().unwrap());\n\n    // Compute nth fib.\n    let fib_n = fib(n);\n\n    // Write serialized output.\n    let output = [input, fib_n.to_le_bytes().to_vec()].concat();\n    P::write_whole_output(\u0026output);\n}\n\nfn fib(n: u64) -\u003e u64 {\n    let mut a = 0;\n    let mut b = 1;\n    for _ in 0..n {\n        let c = a + b;\n        a = b;\n        b = c;\n    }\n    a\n}\n```\n\n#### 3. Create Host\n\n```toml\n# host/Cargo.toml\n\n[workspace]\n\n[package]\nname = \"host\"\nedition = \"2024\"\n\n[dependencies]\nere-prover-core = { git = \"https://github.com/eth-act/ere.git\" }\nere-prover-sp1 = { git = \"https://github.com/eth-act/ere.git\" }\n```\n\n```rust\n// host/src/main.rs\n\nuse ere_compiler_core::Compiler;\nuse ere_compiler_sp1::SP1RustRv64imaCustomized;\nuse ere_prover_core::{Input, ProverResource, zkVMProver};\nuse ere_prover_sp1::SP1Prover;\nuse std::path::Path;\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let guest_directory = Path::new(\"path/to/guest\");\n\n    // Compile guest program with SP1 customized toolchain\n    let compiler = SP1RustRv64imaCustomized;\n    let elf = compiler.compile(guest_directory, \u0026[])?;\n\n    // Create zkVM instance (setup/preprocessing happens here)\n    let zkvm = SP1Prover::new(elf, ProverResource::Cpu)?;\n\n    // Prepare input\n    // Use `with_prefixed_stdin` when guest uses `Platform::read_whole_input()`\n    let input = Input::new().with_prefixed_stdin(10u64.to_le_bytes().to_vec());\n    let expected_output = [input, 55u64.to_le_bytes()].concat();\n\n    // Execute\n    let (public_values, report) = zkvm.execute(\u0026input)?;\n    assert_eq!(public_values, expected_output);\n    println!(\"Execution cycles: {}\", report.total_num_cycles);\n\n    // Prove\n    let (public_values, proof, report) = zkvm.prove(\u0026input)?;\n    assert_eq!(public_values, expected_output);\n    println!(\"Proving time: {:?}\", report.proving_time);\n\n    // Verify\n    let public_values = zkvm.verify(\u0026proof)?;\n    assert_eq!(public_values, expected_output);\n    println!(\"Proof verified successfully!\");\n\n    Ok(())\n}\n```\n\n### Docker-Only Setup\n\nUse Docker for zkVM operations without installing SDKs locally. Only requires Docker to be installed.\n\n#### 1. Create Guest Program\n\nWe use the same guest program created above.\n\n#### 2. Create Host\n\n```toml\n# host/Cargo.toml\n\n[workspace]\n\n[package]\nname = \"host\"\nedition = \"2024\"\n\n[dependencies]\nere-prover-core = { git = \"https://github.com/eth-act/ere.git\" }\nere-dockerized = { git = \"https://github.com/eth-act/ere.git\" }\n```\n\n```rust\n// host/src/main.rs\n\nuse ere_compiler_core::Compiler;\nuse ere_dockerized::{\n    CompilerKind, DockerizedCompiler, DockerizedzkVM, DockerizedzkVMConfig, zkVMKind,\n};\nuse ere_prover_core::{Input, ProverResource, zkVMProver};\nuse std::path::Path;\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let guest_directory = Path::new(\"path/to/guest\");\n\n    // Compile guest program with SP1 customized toolchain (builds Docker images if needed)\n    let compiler =\n        DockerizedCompiler::new(zkVMKind::SP1, CompilerKind::RustCustomized, guest_directory)?;\n    let elf = compiler.compile(guest_directory, \u0026[])?;\n\n    // Create zkVM instance (builds Docker images if needed)\n    // It spawns a container that runs a gRPC server handling zkVM operations\n    let zkvm = DockerizedzkVM::new(\n        zkVMKind::SP1,\n        elf,\n        ProverResource::Cpu,\n        DockerizedzkVMConfig::default(),\n    )?;\n\n    // Prepare input\n    // Use `with_prefixed_stdin` when guest uses `Platform::read_whole_input()`\n    let input = Input::new().with_prefixed_stdin(10u64.to_le_bytes().to_vec());\n    let expected_output = [input, 55u64.to_le_bytes()].concat();\n\n    // Execute\n    let (public_values, report) = zkvm.execute(\u0026input)?;\n    assert_eq!(public_values, expected_output);\n    println!(\"Execution cycles: {}\", report.total_num_cycles);\n\n    // Prove\n    let (public_values, proof, report) = zkvm.prove(\u0026input)?;\n    assert_eq!(public_values, expected_output);\n    println!(\"Proving time: {:?}\", report.proving_time);\n\n    // Verify\n    let public_values = zkvm.verify(\u0026proof)?;\n    assert_eq!(public_values, expected_output);\n    println!(\"Proof verified successfully!\");\n\n    Ok(())\n}\n```\n\n## Environment Variables\n\n| Variable                         | Description                                                                                                                             | Default |\n| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------- |\n| `ERE_IMAGE_REGISTRY`             | Specifies docker image registry of the images. When specified, it will try to pull image from the registry and possibly skip building.  | ``      |\n| `ERE_FORCE_REBUILD_DOCKER_IMAGE` | Force to rebuild docker images locally even they exist, it also prevents pulling image from registry.                                   | `false` |\n| `ERE_GPU_DEVICES`                | Specifies which GPU devices to use when running Docker containers for GPU-enabled zkVMs. The value is passed to Docker's `--gpus` flag. | `all`   |\n| `ERE_DOCKER_NETWORK`             | Specifies the Docker network being used (if any) so spawned `ere-server-*` containers will join that network.                           | ``      |\n\nExample usage:\n\n```bash\n# Use all GPUs (default)\nere prove ...\n\n# Use specific GPU devices\nERE_GPU_DEVICES=\"device=0\" ere prove ...\n\n# Use multiple specific GPUs\nERE_GPU_DEVICES=\"device=0,1\" ere prove ...\n\n# Can also signal to use any available GPUs\nERE_GPU_DEVICES=\"4\" ere prove ...\n```\n\n## Directory Layout\n\n```\nere/\n├── crates/                        # Rust crates\n│   ├── catalog/                   # ere-catalog\n│   ├── codec/                     # ere-codec\n│   ├── prover/\n│   │   ├── core/                  # ere-prover-core\n│   │   └── {zkvm}/                # ere-prover-{zkvm}\n│   ├── platform/\n│   │   ├── core/                  # ere-platform-core\n│   │   └── {zkvm}/                # ere-platform-{zkvm}\n│   ├── verifier/\n│   │   ├── core/                  # ere-verifier-core\n│   │   └── {zkvm}/                # ere-verifier-{zkvm}\n│   ├── dockerized/                # ere-dockerized\n│   ├── compiler/\n│   │   ├── cli/                   # ere-compiler\n│   │   ├── core/                  # ere-compiler-core\n│   │   └── {zkvm}/                # ere-compiler-{zkvm}\n│   ├── server/\n│   │   ├── api/                   # ere-server-api\n│   │   ├── cli/                   # ere-server\n│   │   └── client/                # ere-server-client\n│   ├── cluster-client/\n│   │   └── zisk/                  # ere-cluster-client-zisk\n│   └── util/\n│       ├── build/                 # ere-util-build\n│       ├── compile/               # ere-util-compile\n│       ├── test/                  # ere-util-test\n│       └── tokio/                 # ere-util-tokio\n│\n├── docker/                        # Dockerfile used by ere-dockerized\n│   ├── Dockerfile.base            # ere-base\n│   └── {zkvm}/\n│       ├── Dockerfile.base        # ere-base-{zkvm}\n│       ├── Dockerfile.compiler    # ere-compiler-{zkvm}\n│       └── Dockerfile.server      # ere-server-{zkvm}\n│\n├── scripts/                       # SDK installation scripts per zkVM\n└── tests/                         # Guest programs per zkVM for integration test\n```\n\n## Contributing\n\nPRs and issues are welcome!\n\n## Disclaimer\n\nzkVMs evolve quickly; expect breaking changes. Although the API is generic, its primary target is **zkEVMs**, which may for example, guide the default set of precompiles.\n\n## License\n\nLicensed under either of\n\n* MIT license (LICENSE‑MIT or [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT))\n* Apache License, Version 2.0 (LICENSE‑APACHE or [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0))\n\nat your option.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feth-act%2Fere","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feth-act%2Fere","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feth-act%2Fere/lists"}