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
109 changes: 108 additions & 1 deletion .github/workflows/tag_release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,111 @@ jobs:
name: verification_keys
path: verification_keys/

# There's a separate job to build the guest programs for SP1 and RISC0 since
# they need to be built without the l2 features.
build-ethrex-guest:
strategy:
matrix:
zkvm:
- sp1
- risc0
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Free Disk Space
uses: ./.github/actions/free-disk

- name: Setup Rust Environment
uses: ./.github/actions/setup-rust

- name: Install SP1
if: ${{ matrix.zkvm == 'sp1' }}
env:
SHELL: /bin/bash
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -L https://sp1up.succinct.xyz | bash
~/.sp1/bin/sp1up --version 5.0.8

- name: Install RISC0
if: ${{ matrix.zkvm == 'risc0' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -L https://risczero.com/install | bash
~/.risc0/bin/rzup install cargo-risczero 3.0.3
~/.risc0/bin/rzup install risc0-groth16
~/.risc0/bin/rzup install rust

- name: Build ethrex elf - ${{ matrix.zkvm }}
run: |
cargo build --release --package guest_program --features ${{ matrix.zkvm }}
mkdir -p ${{ matrix.zkvm }}_verification_keys
if [ "${{ matrix.zkvm }}" = "sp1" ]; then
mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-elf ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }}
mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-vk-bn254 ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-bn254-${{ github.ref_name }}
mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-vk-u32 ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-u32-${{ github.ref_name }}
elif [ "${{ matrix.zkvm }}" = "risc0" ]; then
mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-risc0-elf ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name}}
mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-risc0-vk ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-${{ github.ref_name}}
fi

- name: Upload ethrex guest elf artifact - ${{ matrix.zkvm }}
uses: actions/upload-artifact@v4
with:
name: ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }}
path: ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }}

- name: Upload ethrex guest verification keys - ${{ matrix.zkvm }}
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.zkvm }}_verification_keys
path: ${{ matrix.zkvm }}_verification_keys/

# Creates ethrex-guests.tar.gz artifact including both SP1 and
# RISC0 elf and verification keys.
package-ethrex-guest:
needs:
- build-ethrex-guest
runs-on: ubuntu-latest
steps:
- name: Download SP1 elf artifact
uses: actions/download-artifact@v4
with:
name: ethrex-riscv32im-sp1-elf-${{ github.ref_name }}
path: ethrex_guests/sp1/

- name: Download SP1 verification keys artifacts
uses: actions/download-artifact@v4
with:
name: sp1_verification_keys
path: ethrex_guests/sp1/

- name: Download RISC0 elf artifact
uses: actions/download-artifact@v4
with:
name: ethrex-riscv32im-risc0-elf-${{ github.ref_name }}
path: ethrex_guests/risc0/

- name: Download RISC0 verification keys artifacts
uses: actions/download-artifact@v4
with:
name: risc0_verification_keys
path: ethrex_guests/risc0/

- name: Archive ethrex guests
run: |
cd ethrex_guests/
tar -czvf ../ethrex-guests.tar.gz .

- name: Upload ethrex guests artifact
uses: actions/upload-artifact@v4
with:
name: ethrex-guests.tar.gz
path: ethrex-guests.tar.gz

package-contracts:
needs:
- build-ethrex
Expand Down Expand Up @@ -221,8 +326,10 @@ jobs:
finalize-release:
needs:
- build-ethrex
- build-ethrex-guest
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is not needed since it is required in package-ethrex-guest

- build-docker
- package-contracts
- package-ethrex-guest
runs-on: ubuntu-latest
steps:
- name: Checkout Code
Expand All @@ -234,7 +341,7 @@ jobs:
uses: actions/download-artifact@v4
with:
path: ./bin
pattern: "ethrex*"
pattern: "ethrex*" # This includes the binaries, elf files, ethrex-verification-keys.tar.gz, and ethrex-contracts.tar.gz

- name: Get previous tag
run: |
Expand Down
4 changes: 4 additions & 0 deletions crates/l2/prover/src/guest_program/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,15 @@ fn build_risc0_program() {
"zkvm-risc0-program",
guest_options,
)]));
let elf = built_guests[0].elf.clone();
let image_id = built_guests[0].image_id;

// this errs if the dir already exists, so we don't handle an error.
let _ = std::fs::create_dir("./src/risc0/out");

std::fs::write("./src/risc0/out/riscv32im-risc0-elf", &elf)
.expect("could not write Risc0 elf to file");

std::fs::write(
"./src/risc0/out/riscv32im-risc0-vk",
format!("0x{}\n", hex::encode(image_id.as_bytes())),
Expand Down