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
14 changes: 9 additions & 5 deletions .github/scripts/fetch-artifacts-for-republish.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,17 @@
# The VK is optional and is written only when the registry lists one,
# leaving the caller to generate it otherwise.
#
# The zkVM version is the one this repository builds against. Once republished
# artifacts carry their own zkVM version, take it from artifact-registry.json instead.
# The zkVM version is the zkvm_version of the registry entry.
#
# Usage: fetch-artifacts-for-republish.sh <stateless-validator> <zkvm> <zkvm-version>
# Usage: fetch-artifacts-for-republish.sh <stateless-validator> <zkvm>
# REGISTRY artifact-registry.json (default: artifact-registry.json)
# OUTPUT_DIR output directory (default: output)

set -euo pipefail

USAGE="usage: fetch-artifacts-for-republish.sh <stateless-validator> <zkvm> <zkvm-version>"
USAGE="usage: fetch-artifacts-for-republish.sh <stateless-validator> <zkvm>"
NAME="${1:?$USAGE}"
ZKVM="${2:?$USAGE}"
ZKVM_VERSION="${3:?$USAGE}"
REGISTRY="${REGISTRY:-artifact-registry.json}"
OUTPUT_DIR="${OUTPUT_DIR:-output}"

Expand All @@ -41,6 +39,12 @@ fetch() {
echo "Prepared $3"
}

ZKVM_VERSION="$(entry zkvm_version)"
if [[ -z $ZKVM_VERSION ]]; then
echo "$NAME-$ZKVM lists no zkvm_version" >&2
exit 1
fi

OUT="$OUTPUT_DIR/stateless-validator-$NAME-$ZKVM-$ZKVM_VERSION"
fetch "$(entry elf_url)" "$(entry elf_sha256)" "$OUT.elf"

Expand Down
15 changes: 5 additions & 10 deletions .github/scripts/release-body.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,8 @@ def compiled_guests(zkvm_versions: dict[str, str]) -> list[Guest]:
]


def republished_guests(
artifact_registry: Path, zkvm_versions: dict[str, str]
) -> list[Guest]:
"""Returns the registry guests, ordered by name then zkVM, with zkVM versions from the SDK."""
def republished_guests(artifact_registry: Path) -> list[Guest]:
"""Returns the registry guests, ordered by name then zkVM, versioned by their entries."""
registry = json.loads(artifact_registry.read_text())["stateless_validators"]
guests = []
for validator in sorted(registry, key=lambda entry: entry["name"]):
Expand All @@ -159,7 +157,7 @@ def republished_guests(
validator["name"],
validator["version"],
artifact["zkvm"],
zkvm_versions[artifact["zkvm"]],
artifact["zkvm_version"],
artifact["elf_url"],
)
)
Expand All @@ -181,11 +179,10 @@ def republished_rows(
artifacts_dir: Path,
artifact_registry: Path,
release_url: str,
zkvm_versions: dict[str, str],
) -> list[str]:
"""Returns rows for registry guests, requiring every artifact to be present."""
rows = []
for guest in republished_guests(artifact_registry, zkvm_versions):
for guest in republished_guests(artifact_registry):
row = render_row(guest, artifacts_dir, release_url)
if row is None:
raise RuntimeError(
Expand All @@ -202,9 +199,7 @@ def render_release_body(tag: str, artifacts_dir: Path, artifact_registry: Path)
ere_version = read_ere_version()
zkvm_versions = read_zkvm_versions()
compiled = compiled_rows(artifacts_dir, release_url, zkvm_versions)
republished = republished_rows(
artifacts_dir, artifact_registry, release_url, zkvm_versions
)
republished = republished_rows(artifacts_dir, artifact_registry, release_url)

body = [
"## Compiled guest programs",
Expand Down
29 changes: 14 additions & 15 deletions .github/workflows/compile-and-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,9 @@ jobs:
- sp1
- zisk
include:
- stateless_validator: ethrex
zkvm: zisk
ere_profile: ethrex
- stateless_validator: reth
compiler_args: --ignore-rust-version
- { stateless_validator: ethrex, zkvm: zisk, ere_profile: ethrex }
- { stateless_validator: reth, compiler_args: --ignore-rust-version }
- { zkvm: zisk, ere_rustflags: "-C target-feature=+unaligned-scalar-mem" }
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down Expand Up @@ -73,6 +71,7 @@ jobs:
run: |
docker run \
${{ matrix.ere_profile && format('-e ERE_PROFILE={0}', matrix.ere_profile) || '' }} \
${{ matrix.ere_rustflags && format('-e ERE_RUSTFLAGS="{0}"', matrix.ere_rustflags) || '' }} \
-e RUST_LOG=info \
-v $PWD:/ere-guests \
-v $PWD/output:/output \
Expand All @@ -89,6 +88,7 @@ jobs:
run: |
docker run \
${{ matrix.ere_profile && format('-e ERE_PROFILE={0}', matrix.ere_profile) || '' }} \
${{ matrix.ere_rustflags && format('-e ERE_RUSTFLAGS="{0}"', matrix.ere_rustflags) || '' }} \
-e RUST_LOG=info \
-v $PWD:/ere-guests \
-v $PWD/output:/output \
Expand Down Expand Up @@ -132,7 +132,7 @@ jobs:
- name: Build matrix from artifact-registry.json
id: set-matrix
run: |
MATRIX=$(jq -c '{ include: [.stateless_validators[] as $sv | $sv.artifacts[] | { stateless_validator: $sv.name, zkvm: .zkvm }] }' artifact-registry.json)
MATRIX=$(jq -c '{ include: [.stateless_validators[] as $sv | $sv.artifacts[] | { stateless_validator: $sv.name, zkvm: .zkvm, zkvm_version: .zkvm_version }] }' artifact-registry.json)
echo "matrix=${MATRIX}" >> "$GITHUB_OUTPUT"
echo "Matrix: ${MATRIX}"

Expand Down Expand Up @@ -165,22 +165,15 @@ jobs:
- name: Get artifact name
id: get_artifact_name
run: |
ZKVM_VERSION=$(.github/scripts/zkvm-version.sh ${{ matrix.zkvm }})
ARTIFACT_NAME=stateless-validator-${{ matrix.stateless_validator }}-${{ matrix.zkvm }}-${ZKVM_VERSION}
echo "zkvm_version=${ZKVM_VERSION}" >> $GITHUB_OUTPUT
ARTIFACT_NAME=stateless-validator-${{ matrix.stateless_validator }}-${{ matrix.zkvm }}-${{ matrix.zkvm_version }}
echo "artifact_name=${ARTIFACT_NAME}" >> $GITHUB_OUTPUT
echo "Artifact name: ${ARTIFACT_NAME}"

- name: Pull Ere images
run: |
docker pull ghcr.io/eth-act/ere/ere-server-${{ matrix.zkvm }}:${{ steps.get_ere_tag.outputs.ere_tag }}

- name: Download artifacts
run: |
bash .github/scripts/fetch-artifacts-for-republish.sh \
${{ matrix.stateless_validator }} \
${{ matrix.zkvm }} \
${{ steps.get_artifact_name.outputs.zkvm_version }}
${{ matrix.zkvm }}

- name: Generate program VK when unpublished
run: |
Expand All @@ -189,6 +182,12 @@ jobs:
echo "Republishing the VK listed in artifact-registry.json"
exit 0
fi
ZKVM_VERSION=$(.github/scripts/zkvm-version.sh ${{ matrix.zkvm }})
if [[ "${{ matrix.zkvm_version }}" != "$ZKVM_VERSION" ]]; then
echo "${{ matrix.stateless_validator }}-${{ matrix.zkvm }} targets ${{ matrix.zkvm_version }} while Ere builds against $ZKVM_VERSION, but VK is not available for republishment" >&2
exit 1
fi
docker pull ghcr.io/eth-act/ere/ere-server-${{ matrix.zkvm }}:${{ steps.get_ere_tag.outputs.ere_tag }}
docker run \
-e RUST_LOG=info \
-v $PWD/output:/output \
Expand Down
22 changes: 16 additions & 6 deletions .github/workflows/integration-test-devnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ jobs:
include:
- { zkvm: zisk, external: true, stateless_validator: zesu }
- { zkvm: zisk, stateless_validator: ethrex, ere_profile: ethrex }
- { zkvm: zisk, ere_rustflags: "-C target-feature=+unaligned-scalar-mem" }
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down Expand Up @@ -72,6 +73,12 @@ jobs:
ERE_PROFILE: ${{ matrix.ere_profile }}
run: echo "ERE_PROFILE=$ERE_PROFILE" >> "$GITHUB_ENV"

- name: Enable Ere rustflags
if: matrix.ere_rustflags != ''
env:
ERE_RUSTFLAGS: ${{ matrix.ere_rustflags }}
run: echo "ERE_RUSTFLAGS=$ERE_RUSTFLAGS" >> "$GITHUB_ENV"

- name: Run zkVM execution of the latest devnet blocks
env:
RUST_LOG: info,ere_server=error
Expand All @@ -81,12 +88,15 @@ jobs:
--zkvm ${{ matrix.zkvm }} \
--stateless-validator ${{ matrix.stateless_validator }} \
--output failures.txt
{
echo "### ${{ matrix.stateless_validator }} on ${{ matrix.zkvm }}"
echo '```'
cat failures.txt
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
# No failures file means the guest was skipped as incompatible with the zkVM version.
if [[ -f failures.txt ]]; then
{
echo "### ${{ matrix.stateless_validator }} on ${{ matrix.zkvm }}"
echo '```'
cat failures.txt
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
fi

- name: Chown
if: matrix.external != true
Expand Down
11 changes: 9 additions & 2 deletions .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ jobs:
- sp1
- zisk
include:
- { zkvm: zisk, external: true, stateless_validator: zesu }
- { zkvm: zisk, stateless_validator: ethrex, ere_profile: ethrex }
- { stateless_validator: ethrex, zkvm: zisk, ere_profile: ethrex }
- { stateless_validator: zesu, zkvm: zisk, external: true }
- { zkvm: zisk, ere_rustflags: "-C target-feature=+unaligned-scalar-mem" }
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down Expand Up @@ -81,6 +82,12 @@ jobs:
ERE_PROFILE: ${{ matrix.ere_profile }}
run: echo "ERE_PROFILE=$ERE_PROFILE" >> "$GITHUB_ENV"

- name: Enable Ere rustflags
if: matrix.ere_rustflags != ''
env:
ERE_RUSTFLAGS: ${{ matrix.ere_rustflags }}
run: echo "ERE_RUSTFLAGS=$ERE_RUSTFLAGS" >> "$GITHUB_ENV"

- name: Test zkVM execution
env:
RUST_LOG: info,ere_server=error
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ jobs:
run: cargo test --doc --no-fail-fast

- name: Test lib
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: cargo test --lib --no-fail-fast

# Include the package once the issue is resolved:
Expand Down
45 changes: 23 additions & 22 deletions Cargo.lock

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

9 changes: 5 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ flate2 = "1.1.5"
paste = "1.0"
rayon = "1.11.0"
reqwest = "0.12"
semver = "1.0.28"
serde_json = "1.0"
tar = "0.4.44"
tempfile = "3.6.0"
Expand Down Expand Up @@ -96,10 +97,10 @@ libssz-types = { version = "0.2.2", default-features = false, features = ["alloc
zkvm-interface = { git = "https://github.com/eth-act/zkvm-standards", rev = "282cd356c3a0498416bb0619f9c8a347ce9933fb" }

# ere
ere-catalog = { git = "https://github.com/eth-act/ere", tag = "v0.15.0" }
ere-dockerized = { git = "https://github.com/eth-act/ere", tag = "v0.15.0" }
ere-platform-core = { git = "https://github.com/eth-act/ere", tag = "v0.15.0" }
ere-util-build = { git = "https://github.com/eth-act/ere", tag = "v0.15.0" }
ere-catalog = { git = "https://github.com/eth-act/ere", tag = "v0.16.2" }
ere-dockerized = { git = "https://github.com/eth-act/ere", tag = "v0.16.2" }
ere-platform-core = { git = "https://github.com/eth-act/ere", tag = "v0.16.2" }
ere-util-build = { git = "https://github.com/eth-act/ere", tag = "v0.16.2" }

# local
stateless-validator-catalog = { path = "crates/stateless-validator-catalog" }
Expand Down
1 change: 1 addition & 0 deletions artifact-registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"artifacts": [
{
"zkvm": "zisk",
"zkvm_version": "v1.0.0-alpha",
"elf_url": "https://github.com/Consensys/zesu-zkvm/releases/download/glamsterdam-devnet-7.2-2026-07-29/stateless-validator-zesu-zisk-1.0.0-alpha.elf",
"elf_sha256": "088a71b8ff69630de88b970a6a633911c2ecaaeb4be7cb9ca5b356f6e622f89d",
"vk_url": "https://github.com/Consensys/zesu-zkvm/releases/download/glamsterdam-devnet-7.2-2026-07-29/stateless-validator-zesu-zisk-1.0.0-alpha.vk",
Expand Down
Loading
Loading