Skip to content
Open
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
72 changes: 72 additions & 0 deletions .github/actions/install-lambdavm/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: "Install LambdaVM"
description: "Install LambdaVM toolchain, sysroot, and CLI"

runs:
using: "composite"
steps:
- name: Install LambdaVM dependencies
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y clang lld curl build-essential

- name: Install Rust nightly toolchain for LambdaVM
shell: bash
# Must match the channel pinned in
# crates/guest-program/bin/lambdavm/rust-toolchain.toml.
env:
LAMBDA_VM_RUST_TOOLCHAIN: "nightly-2026-02-01"
run: |
rustup toolchain install "${LAMBDA_VM_RUST_TOOLCHAIN}" --component rust-src

- name: Cache LambdaVM sysroot
id: cache-sysroot
uses: actions/cache@v4
with:
path: /opt/lambda-vm-sysroot
key: lambda-vm-sysroot-rv64im-v1

- name: Prepare LambdaVM sysroot
if: steps.cache-sysroot.outputs.cache-hit != 'true'
shell: bash
env:
SYSROOT_TARBALL: /tmp/lambda-vm-sysroot-rv64im.tar.gz
SYSROOT_URL: https://lambda.alignedlayer.com/lambda-vm-sysroot-rv64im.tar.gz
run: |
source "$GITHUB_WORKSPACE/.github/scripts/retry.sh"

retry curl -L "${SYSROOT_URL}" -o "${SYSROOT_TARBALL}"
sudo mkdir -p /opt/lambda-vm-sysroot
sudo tar -xzf "${SYSROOT_TARBALL}" -C /opt/lambda-vm-sysroot --strip-components=1
rm -f "${SYSROOT_TARBALL}"

Comment on lines +26 to +42
- name: Cache LambdaVM CLI binary
id: cache-cli
uses: actions/cache@v4
with:
path: ~/.cargo/bin/cli
Comment on lines +43 to +47
# Must match the `rev` of `lambda-vm-syscalls` in
# crates/guest-program/Cargo.toml and crates/guest-program/bin/lambdavm/Cargo.toml.
key: lambda-vm-cli-8af4e92e6e75638746fe9924f6bac715ffac9cb6

- name: Build LambdaVM CLI
if: steps.cache-cli.outputs.cache-hit != 'true'
shell: bash
env:
LAMBDA_VM_COMMIT: "8af4e92e6e75638746fe9924f6bac715ffac9cb6"
run: |
TMP_DIR="$(mktemp -d)"
git clone https://github.com/yetanotherco/lambda_vm.git "${TMP_DIR}"
cd "${TMP_DIR}"
git checkout "${LAMBDA_VM_COMMIT}"
cargo build --release -p cli
mkdir -p "${HOME}/.cargo/bin"
cp target/release/cli "${HOME}/.cargo/bin/cli"
cd -
rm -rf "${TMP_DIR}"

- name: Expose LAMBDA_VM_SYSROOT_DIR
shell: bash
run: |
echo "LAMBDA_VM_SYSROOT_DIR=/opt/lambda-vm-sysroot" >> "$GITHUB_ENV"
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
8 changes: 7 additions & 1 deletion .github/workflows/pr-main_l2_prover.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
strategy:
matrix:
# Note: openvm backend linting is disabled due to a problem in the installation https://github.com/lambdaclass/ethrex/issues/5509
backend: ["sp1", "risc0", "zisk"]
backend: ["sp1", "risc0", "zisk", "lambdavm"]
steps:
- name: Checkout sources
uses: actions/checkout@v6
Expand Down Expand Up @@ -85,6 +85,12 @@ jobs:
rustup component add rust-src --toolchain nightly-2025-02-14
cargo +1.86 install --locked --git https://github.com/openvm-org/openvm.git --tag v1.4.1 cargo-openvm

- name: Install LambdaVM
if: matrix.backend == 'lambdavm'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: ./.github/actions/install-lambdavm

- name: Check ${{ matrix.backend }} backend
run: |
cargo check -r -p ethrex-prover -F "${{ matrix.backend }},ci"
Expand Down
107 changes: 107 additions & 0 deletions Cargo.lock

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

4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ update-cargo-lock: ## 📦 Update Cargo.lock files
cargo tree --manifest-path crates/guest-program/bin/risc0/Cargo.toml
cargo tree --manifest-path crates/guest-program/bin/zisk/Cargo.toml
cargo tree --manifest-path crates/guest-program/bin/openvm/Cargo.toml
cargo tree --manifest-path crates/guest-program/bin/lambdavm/Cargo.toml
cargo tree --manifest-path crates/l2/tee/quote-gen/Cargo.toml
cargo tree --manifest-path crates/vm/levm/bench/revm_comparison/Cargo.toml
cargo tree --manifest-path tooling/Cargo.toml
Expand All @@ -234,6 +235,9 @@ check-cargo-lock: ## 🔍 Check Cargo.lock files are up to date
# if changes made to the source code CI will run with the toolchain
cargo metadata --locked --manifest-path crates/guest-program/bin/zisk/Cargo.toml > /dev/null
cargo metadata --locked --manifest-path crates/guest-program/bin/openvm/Cargo.toml > /dev/null
# Same reasoning as ZisK above: metadata-only check so we don't require the LambdaVM
# nightly toolchain or sysroot to verify the lockfile is consistent.
cargo metadata --locked --manifest-path crates/guest-program/bin/lambdavm/Cargo.toml > /dev/null
cargo metadata --locked --manifest-path crates/l2/tee/quote-gen/Cargo.toml > /dev/null
cargo metadata --locked --manifest-path crates/vm/levm/bench/revm_comparison/Cargo.toml > /dev/null
cargo metadata --locked --manifest-path tooling/Cargo.toml > /dev/null
Expand Down
4 changes: 4 additions & 0 deletions crates/guest-program/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ k256 = { workspace = true, optional = true }
substrate-bn = { version = "0.6.0", optional = true }
# Must match ZISK_VERSION in .github/actions/install-zisk/action.yml.
ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.16.1", optional = true, default-features = false, features = ["inputcpy"] }
# Must match LAMBDA_VM_COMMIT in .github/actions/install-lambdavm/action.yml.
lambda-vm-syscalls = { git = "https://github.com/yetanotherco/lambda_vm.git", rev = "8af4e92e6e75638746fe9924f6bac715ffac9cb6", optional = true }

[build-dependencies]
hex.workspace = true
Expand All @@ -53,6 +55,7 @@ zisk = [
"ethrex-common/zisk", "ethrex-vm/zisk", "ethrex-l2-common/zisk",
]
openvm = ["dep:k256", "ethrex-l2-common/secp256k1"]
lambdavm = ["dep:k256", "dep:lambda-vm-syscalls", "ethrex-l2-common/secp256k1"]

# Build-ELF features: base + build tooling for compiling guest ELFs.
# Used by the prover host. Enabling these triggers the build script which
Expand All @@ -61,6 +64,7 @@ sp1-build-elf = ["sp1", "dep:sp1-build", "dep:sp1-sdk"]
risc0-build-elf = ["risc0", "dep:risc0-build"]
zisk-build-elf = ["zisk"]
openvm-build-elf = ["openvm"]
lambdavm-build-elf = ["lambdavm"]

l2 = []
eip-8025 = [
Expand Down
28 changes: 18 additions & 10 deletions crates/guest-program/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: sp1 risc0 zisk openvm l2-sp1 l2-risc0 l2-zisk l2-openvm clean help
.PHONY: sp1 risc0 zisk openvm lambdavm l2-sp1 l2-risc0 l2-zisk l2-openvm l2-lambdavm clean help

# Build flags
CARGO_FLAGS := --release -p ethrex-guest-program
Expand All @@ -13,16 +13,18 @@ help:
@echo "Usage: make <target>"
@echo ""
@echo "L1 Targets:"
@echo " sp1 Build SP1 guest"
@echo " risc0 Build RISC0 guest"
@echo " zisk Build ZisK guest"
@echo " openvm Build OpenVM guest"
@echo " sp1 Build SP1 guest"
@echo " risc0 Build RISC0 guest"
@echo " zisk Build ZisK guest"
@echo " openvm Build OpenVM guest"
@echo " lambdavm Build LambdaVM guest"
@echo ""
@echo "L2 Targets:"
@echo " l2-sp1 Build SP1 guest with L2 support"
@echo " l2-risc0 Build RISC0 guest with L2 support"
@echo " l2-zisk Build ZisK guest with L2 support"
@echo " l2-openvm Build OpenVM guest with L2 support"
@echo " l2-sp1 Build SP1 guest with L2 support"
@echo " l2-risc0 Build RISC0 guest with L2 support"
@echo " l2-zisk Build ZisK guest with L2 support"
@echo " l2-openvm Build OpenVM guest with L2 support"
@echo " l2-lambdavm Build LambdaVM guest with L2 support"
@echo ""
@echo "Options:"
@echo " REPRODUCIBLE=1 Use Docker for reproducible builds"
Expand All @@ -45,6 +47,9 @@ zisk:
openvm:
$(ENV_PREFIX) cargo check $(CARGO_FLAGS) --features openvm-build-elf

lambdavm:
$(ENV_PREFIX) cargo check $(CARGO_FLAGS) --features lambdavm-build-elf

# L2 targets
l2-sp1:
$(ENV_PREFIX) cargo check $(CARGO_FLAGS) --features sp1-build-elf,l2
Expand All @@ -58,5 +63,8 @@ l2-zisk:
l2-openvm:
$(ENV_PREFIX) cargo check $(CARGO_FLAGS) --features openvm-build-elf,l2

l2-lambdavm:
$(ENV_PREFIX) cargo check $(CARGO_FLAGS) --features lambdavm-build-elf,l2

clean:
rm -rf bin/sp1/out bin/risc0/out bin/zisk/out bin/openvm/out
rm -rf bin/sp1/out bin/risc0/out bin/zisk/out bin/openvm/out bin/lambdavm/out
Loading
Loading