diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index 24dade79b97..e4ed391f321 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -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 @@ -221,8 +326,10 @@ jobs: finalize-release: needs: - build-ethrex + - build-ethrex-guest - build-docker - package-contracts + - package-ethrex-guest runs-on: ubuntu-latest steps: - name: Checkout Code @@ -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: | diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 785513119ac..ba2d8ea3fa1 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -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())),