# SP1 Hypercube Markdown version of https://l2beat.com/zk-catalog/sp1hypercube ## Summary - Creator: Succinct - Total Value Secured: $17.98 B (-3.44% compared to seven days ago) - Trusted setups for Gnark (Plonk): - Aztec Ignition, risk green (lowest risk) per the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381): Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation. - Used in: [Base Chain](https://l2beat.com/layer2s/projects/base), [Mantle](https://l2beat.com/layer2s/projects/mantle), [Celo](https://l2beat.com/layer2s/projects/celo), [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Morph](https://l2beat.com/layer2s/projects/morph), [Katana](https://l2beat.com/layer2s/projects/katana), [RISE](https://l2beat.com/layer2s/projects/rise), [Lumia Prism](https://l2beat.com/layer2s/projects/lumia), [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko), [Haust Network](https://l2beat.com/layer2s/projects/haust), [Silicon](https://l2beat.com/layer2s/projects/silicon), [Polygon zkEVM](https://l2beat.com/layer2s/projects/polygonzkevm), Vector, [Sophon](https://l2beat.com/layer2s/projects/sophon), [Pentagon Chain](https://l2beat.com/layer2s/projects/penchain), [Lens](https://l2beat.com/layer2s/projects/lens), [Wirex Pay Chain](https://l2beat.com/layer2s/projects/wirex), [Forknet](https://l2beat.com/layer2s/projects/forknet), Blobstream - Verifiers: 2 successful (verified by [L2BEAT](https://l2beat.com)) - Trusted setups for SP1 v6.1.0 (Groth16): - SP1 Hypercube v6.1.0 Groth16 circuit-specific setup, risk red (highest risk) per the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381): Trusted setup ceremony for SP1 Hypercube (release v6.0.0) Groth16 final wrap circuits. Phase 2 of the ceremony was organized by Succinct and includes 18 participants from 8 different organizations, without public calls to participate. - Used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer), [ApeChain](https://l2beat.com/layer2s/projects/apechain), [Fluent](https://l2beat.com/layer2s/projects/fluent), [Appchain](https://l2beat.com/layer2s/projects/appchain) - Verifiers: 1 successful (verified by [L2BEAT](https://l2beat.com)) - Trusted setups for SP1 v6.0.0 (Groth16): - SP1 Hypercube Groth16 circuit-specific setup, risk red (highest risk) per the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381): Trusted setup ceremony for SP1 Hypercube (release v6.0.0) Groth16 final wrap circuits. Phase 2 of the ceremony was organized by Succinct and includes 12 participants from 7 different organizations, without public calls to participate. - Used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Fluent](https://l2beat.com/layer2s/projects/fluent) - Verifiers: 1 successful (verified by [L2BEAT](https://l2beat.com)) - zkVM: Plonky3 (STARK), RISC-V 64bit (ISA), Baby Bear (Field), Koala Bear (Field) - Final wrap: Gnark (Plonk), SP1 v6.0.0 (Groth16), SP1 v6.1.0 (Groth16), BN254 (curve) ### About SP1 Hypercube is a zk proving system for RISC-V programs built by Succinct, release v6. ### Links - Website: https://www.succinct.xyz - Docs: https://docs.succinct.xyz/docs/protocol/introduction - Repository: https://github.com/succinctlabs/sp1/tree/v6.0.0 - Social: https://x.com/SuccinctLabs, https://discord.com/invite/succinctlabs ## Value Secured The interactive TVS chart is shown on [the HTML page](https://l2beat.com/zk-catalog/sp1hypercube#tvs). ## Proof System ### Description SP1 Hypercube is the latest Succint's RISC-V zkVM using the [Plonky3](https://github.com/Plonky3/Plonky3) stack. The zkVM execution is proven recursively and is wrapped into a SNARK for final verification. It provides tools to generate onchain Groth16 or Plonk verifiers. SP1 Hypercube provides 98 bits of proven security, as per [Ethereum Foundation’s soundcalc evaluation](https://github.com/ethereum/soundcalc/blob/main/reports/sp1.md). ### Proof system SP1 Hypercube is an iteration of the previous zkVM version, SP1 Turbo, introducing architectural changes that improve prover performance and memory efficiency. Hypercube proves execution of a 64-bit RISC-V VM using several ZK circuits, or chips, connected by lookup arguments ([LogUp based on GKR protocol](https://docs.succinct.xyz/docs/sp1/hypercube/logupgkr)). VM execution trace is split into several shards of size approximately 2^22, that could be proven in parallel with a STARK proving system. Additional arguments prove memory consistency across shards. The parallelized proofs are recursively checked by the next layer of STARK circuits. The correctness of the final STARK proof is verified with the final wrap SNARK program, the wrap SNARK proof is verified onchain. #### Hypercube vs. Turbo Proving time and memory optimizations of SP1 Hypercube are based on several design improvements compared to SP1 Turbo. Hypercube implements a [multilinear polynomial](https://github.com/succinctlabs/sp1/tree/v6.0.0/slop/crates/multilinear) STARK compared to univariate polynomials in Turbo. Multilinear polynomial based proving systems are more efficient than univariate because manipulating them reduces usage of log-linear FFT algorithm. Multilinear polynomials also allow Hypercube to innovate on a polynomial commitment scheme, implementing [Jagged PCS](https://docs.succinct.xyz/docs/sp1/hypercube/jagged) (defined in [this preprint](https://eprint.iacr.org/2025/917)). Jagged PCS allows efficient packing of computation traces of zkVM chips with different lengths, optimizing the prover memory requirement. More efficient LogUp based on GKR is also made possible because of multilinear polynomials. #### Recursion circuits SP1 Hypercube provides tools for recursive proof generation by [verifying proofs in a zkVM](https://docs.succinct.xyz/docs/sp1/writing-programs/proof-aggregation#verifying-proofs-inside-the-zkvm). This uses the same toolkit as top-level proof system, but proves the correct verification of all proofs generated on the previous step. First, proofs for correctness of separate shards are generated. These shards may have different trace shape, so in the next step they are normalized. Finally, normalized shard proofs are recursively compressed in batches of 3-4 to a single zkVM proof. For further details see [this page](https://docs.succinct.xyz/docs/sp1/hypercube/recursion). #### Final wrap SP1 Hypercube supports Plonk (with KZG polynomial commitments) or Groth16 final SNARK wrap of the STARK proof for performant onchain proof verification ([link](https://docs.succinct.xyz/docs/sp1/generating-proofs/proof-types#compressed)). The implementation of these proof systems over BN254 curve is used. For Plonk, Aztec Ignition trusted setup ceremony is used, for Groth16 Succinct run internal circuit-dependent phase 2 trusted setup (todo: link to trusted setups section). ## Trusted Setups Risk levels follow the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381). Yellow (medium risk): all contributions are published and the final output can be verified, the ceremony client is open source, there were at least 30 contributions, participation was open to the public and announced, and participants are publicly identified. Green (lowest risk): everything required for yellow, with at least 150 contributions. Red (highest risk): at least one requirement for yellow is not met. N/A: the proof system needs no trusted setup. ### Aztec Ignition - Risk: green (lowest risk) - Proof systems: Gnark (Plonk) Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation. - Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification). - Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup). - Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition). ### SP1 Hypercube v6.1.0 Groth16 circuit-specific setup - Risk: red (highest risk) - Proof systems: SP1 v6.1.0 (Groth16) SP1 Hypercube v6.1.0 Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup. Phase 2 of the ceremony was run among 18 participants affiliated with Etherealize, Polygon, OP Labs, Alpen Labs, Offchain Labs, Succinct, Coinbase, Across Protocol. It generated circuit-specific setup parameters for Groth16 wrapper of SP1 Hypercube zkVM. - Phase 1 ceremony (first 54 contributions are used): . - Ceremony info on Succinct docs page: . - Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main). - Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): . ### SP1 Hypercube Groth16 circuit-specific setup - Risk: red (highest risk) - Proof systems: SP1 v6.0.0 (Groth16) SP1 Hypercube v6.0.0 Groth16 trusted setup builds on top of the first 54 contributions to the [Perpetual Powers of Tau](https://github.com/privacy-ethereum/perpetualpowersoftau) ceremony as its phase 1 setup. Phase 2 of the ceremony was run among 12 participants affiliated with Across Protocol, OP Labs, Offchain Labs, Succinct Labs, Conduit, Ethrealize and 1 independent participant. It generated circuit-specific setup parameters for Groth16 wrapper of SP1 Hypercube zkVM. - Phase 1 ceremony (first 54 contributions are used): . - Ceremony info on Succinct docs page: (link is updated and points to a different ceremony now). - Ceremony instructions and verification instructions: [https://github.com/succinctlabs/semaphore-gnark-11/tree/main](https://github.com/succinctlabs/semaphore-gnark-11/tree/main). - Link to transcript and other artifacts (Note: will immediately start downloading .tar.gz file): . ## Verifier IDs List of different onchain verifiers for this proving system. Unique ID distinguishes different deployments of the same verifier from different verifiers (e.g. different versions). ### Groth16: SP1 v6.1.0 Succinct's Groth16 final wrap circuit for SP1 zkVM v6.1.0 #### SP1 Hypercube Groth16 v6.1.0 - Verifier ID: `0x4388a21c687fdd5f218d7e3d13190cac4c5355818d3605fd5fb811df468ee696` - Source: https://github.com/succinctlabs/sp1/tree/v6.1.0 - Verification: successful (verified by [L2BEAT](https://l2beat.com)) - Used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer), [ApeChain](https://l2beat.com/layer2s/projects/apechain), [Fluent](https://l2beat.com/layer2s/projects/fluent), [Appchain](https://l2beat.com/layer2s/projects/appchain) **Known deployments** - [0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2](https://etherscan.io/address/0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2#code) on Ethereum, used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Fluent](https://l2beat.com/layer2s/projects/fluent) - [0xD9d5C8456a168Dd25561064F47bF116111131B1D](https://etherscan.io/address/0xD9d5C8456a168Dd25561064F47bF116111131B1D#code) on Ethereum, used in: [Appchain](https://l2beat.com/layer2s/projects/appchain) - [0xD9d5C8456a168Dd25561064F47bF116111131B1D](https://arbiscan.io/address/0xD9d5C8456a168Dd25561064F47bF116111131B1D#code) on Arbitrum One, used in: [ApeChain](https://l2beat.com/layer2s/projects/apechain) ##### Verification steps The regeneration process consumed around 70 GiB of memory on the peak. 1. Install necessary dependencies: rust, docker, sp1 toolkit, go. ``` sudo apt update sudo apt install build-essential golang-go protobuf-compiler curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . .cargo/env cargo install --debug --locked cargo-make curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" sudo apt install -y docker-ce sudo usermod -aG docker ${USER} curl -L https://sp1up.succinct.xyz/ | bash source ~/.bashrc sp1up ``` 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to build groth16 circuit file. ``` git clone https://github.com/succinctlabs/sp1.git cd sp1/crates/prover git checkout v6.1.0 # commit should be d454975ac7c1126097e36eceda9bce2cb9899da4 export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors make build-circuits ``` This script will generate `groth16_circuit.bin` file in the `prover/build/groth16` directory, however it will not generate correct prover and verifier keys. 3. Generate correct pk and vk using the correct SP1 trusted setup. This will require [semaphore-gnark-11](https://github.com/succinctlabs/semaphore-gnark-11/tree/main) repo. ``` cd git clone https://github.com/succinctlabs/semaphore-gnark-11.git # tested on commit hash 6d6ebc3608e609ec879e9ba99abee6b6b97d937d cd semaphore-gnark-11 # Download the trusted setup transcript curl "https://sp1-circuits.s3-us-east-2.amazonaws.com/v6.1.0-trusted-setup.tar.gz" -o trusted-setup.tar.gz # Extract trusted setup transcript. tar -xzf trusted-setup.tar.gz # Build the binary. go build # Generate keys. They are outputted to the files pk and vk in the root directory. ./semaphore-gnark-11 key trusted-setup/phase1 trusted-setup/phase2-17 trusted-setup/evals /path/to/sp1/crates/prover/build/groth16/groth16_circuit.bin ``` The last step will take several hours to complete. 4. Compute the hash of generated `vk` file: `shasum vk -a 256`. ### Groth16: SP1 v6.0.0 Succinct's Groth16 final wrap circuit for SP1 zkVM v6.0.0 #### SP1 Hypercube Groth16 v6.0.0 - Verifier ID: `0x0e78f4db7a6771a3a6a7d9c3b0de6fe73d58781368967a7fe84d87aefffec896` - Source: https://github.com/succinctlabs/sp1/tree/v6.0.0 - Verification: successful (verified by [L2BEAT](https://l2beat.com)) - Used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Fluent](https://l2beat.com/layer2s/projects/fluent) **Known deployments** - [0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508](https://etherscan.io/address/0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508#code) on Ethereum, used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Fluent](https://l2beat.com/layer2s/projects/fluent) ##### Verification steps The regeneration process consumed around 70 GiB of memory on the peak. 1. Install necessary dependencies: rust, docker, sp1 toolkit, go. ``` sudo apt update sudo apt install build-essential golang-go protobuf-compiler curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . .cargo/env cargo install --debug --locked cargo-make curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" sudo apt install -y docker-ce sudo usermod -aG docker ${USER} curl -L https://sp1up.succinct.xyz/ | bash source ~/.bashrc sp1up ``` 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to build groth16 circuit file. ``` git clone https://github.com/succinctlabs/sp1.git cd sp1/crates/prover git checkout v6.0.0 # commit should be f87f8d6ff005d542db22e241928319f5e96a4609 export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors make build-circuits ``` This script will generate `groth16_circuit.bin` file in the `prover/build/groth16` directory, however it will not generate correct prover and verifier keys. 3. Generate correct pk and vk using the correct SP1 trusted setup. This will require [semaphore-gnark-11](https://github.com/succinctlabs/semaphore-gnark-11/tree/main) repo. ``` cd git clone https://github.com/succinctlabs/semaphore-gnark-11.git # tested on commit hash 6d6ebc3608e609ec879e9ba99abee6b6b97d937d cd semaphore-gnark-11 # Download the trusted setup transcript curl "https://sp1-circuits.s3-us-east-2.amazonaws.com/v6.0.0-trusted-setup.tar.gz" -o trusted-setup.tar.gz # Extract trusted setup transcript. tar -xzf trusted-setup.tar.gz # Build the binary. go build # Generate keys. They are outputted to the files pk and vk in the root directory. ./semaphore-gnark-11 key trusted-setup/phase1 trusted-setup/phase2-11 trusted-setup/evals /path/to/sp1/crates/prover/build/groth16/groth16_circuit.bin ``` The last step will take several hours to complete. 4. Compute the hash of generated `vk` file: `shasum vk -a 256`. ### Plonk: Gnark Consensys implementation of Plonk proving system written in Go. #### SP1 Hypercube Plonk v6.1.0 - Verifier ID: `0x5a093a2fcb46394f5cadfe55c44d4d572fad9cec7aeb38026b0278322ef07fac` - Source: https://github.com/succinctlabs/sp1/tree/v6.1.0 - Verification: successful (verified by [L2BEAT](https://l2beat.com)) - Used in: [Base Chain](https://l2beat.com/layer2s/projects/base), [Mantle](https://l2beat.com/layer2s/projects/mantle), [Celo](https://l2beat.com/layer2s/projects/celo), [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Morph](https://l2beat.com/layer2s/projects/morph), [Katana](https://l2beat.com/layer2s/projects/katana), [RISE](https://l2beat.com/layer2s/projects/rise), [Lumia Prism](https://l2beat.com/layer2s/projects/lumia), [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko), [Haust Network](https://l2beat.com/layer2s/projects/haust), [Silicon](https://l2beat.com/layer2s/projects/silicon), [Polygon zkEVM](https://l2beat.com/layer2s/projects/polygonzkevm), Vector, [Sophon](https://l2beat.com/layer2s/projects/sophon), [Pentagon Chain](https://l2beat.com/layer2s/projects/penchain), [Lens](https://l2beat.com/layer2s/projects/lens), [Wirex Pay Chain](https://l2beat.com/layer2s/projects/wirex), [Forknet](https://l2beat.com/layer2s/projects/forknet), Blobstream **Known deployments** - [0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A](https://etherscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code) on Ethereum, used in: [Base Chain](https://l2beat.com/layer2s/projects/base), [Mantle](https://l2beat.com/layer2s/projects/mantle), [Celo](https://l2beat.com/layer2s/projects/celo), [X Layer](https://l2beat.com/layer2s/projects/xlayer), [Katana](https://l2beat.com/layer2s/projects/katana), [RISE](https://l2beat.com/layer2s/projects/rise), [Lumia Prism](https://l2beat.com/layer2s/projects/lumia), [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko), [Haust Network](https://l2beat.com/layer2s/projects/haust), [Silicon](https://l2beat.com/layer2s/projects/silicon), [Polygon zkEVM](https://l2beat.com/layer2s/projects/polygonzkevm), Vector, [Sophon](https://l2beat.com/layer2s/projects/sophon), [Pentagon Chain](https://l2beat.com/layer2s/projects/penchain), [Lens](https://l2beat.com/layer2s/projects/lens), [Wirex Pay Chain](https://l2beat.com/layer2s/projects/wirex), [Forknet](https://l2beat.com/layer2s/projects/forknet), Blobstream - [0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A](https://arbiscan.io/address/0xc3c6dDDAc8829b233Dc6536Ec024775a57b0AF2A#code) on Arbitrum One, used in: Blobstream - [0x9774CE99E8Ab3f13582bC6c2Bd2832e5A25C4624](https://etherscan.io/address/0x9774CE99E8Ab3f13582bC6c2Bd2832e5A25C4624#code) on Ethereum, used in: [Morph](https://l2beat.com/layer2s/projects/morph) - [0xD9F24400816c4CC1a3cBb9B851C9B0bAB63Ad692](https://etherscan.io/address/0xD9F24400816c4CC1a3cBb9B851C9B0bAB63Ad692#code) on Ethereum, used in: none - [0x651cA600813fC0126225b727EDbA617949b1d1c9](https://etherscan.io/address/0x651cA600813fC0126225b727EDbA617949b1d1c9#code) on Ethereum, used in: [Morph](https://l2beat.com/layer2s/projects/morph) ##### Verification steps The regeneration process consumed around 100 GiB of memory on the peak. 1. Install necessary dependencies: rust, docker, sp1 toolkit, go. ``` sudo apt update sudo apt install build-essential golang-go protobuf-compiler curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . .cargo/env cargo install --debug --locked cargo-make curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" sudo apt install -y docker-ce sudo usermod -aG docker ${USER} curl -L https://sp1up.succinct.xyz/ | bash source ~/.bashrc sp1up ``` 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers. ``` git clone https://github.com/succinctlabs/sp1.git cd sp1/crates/prover git checkout v6.1.0 # commit should be d454975ac7c1126097e36eceda9bce2cb9899da4 export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors make build-circuits ``` The script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir. #### SP1 Hypercube Plonk v6.0.0 - Verifier ID: `0xbb1a6f2930e94bfe8b35e794faf43133214534a17d2ad8e51358cad437b3c317` - Source: https://github.com/succinctlabs/sp1/tree/v6.0.0 - Verification: successful (verified by [L2BEAT](https://l2beat.com)) - Used in: [Mantle](https://l2beat.com/layer2s/projects/mantle), [Celo](https://l2beat.com/layer2s/projects/celo), [RISE](https://l2beat.com/layer2s/projects/rise), [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko), Vector, [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), Blobstream **Known deployments** - [0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C](https://etherscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code) on Ethereum, used in: [Mantle](https://l2beat.com/layer2s/projects/mantle), [Celo](https://l2beat.com/layer2s/projects/celo), [RISE](https://l2beat.com/layer2s/projects/rise), [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko), Vector, [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), Blobstream - [0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C](https://arbiscan.io/address/0x8a0fd5e825D14368d90Fe68F31fceAe3E17AFc5C#code) on Arbitrum One, used in: Blobstream ##### Verification steps The regeneration process consumed around 70 GiB of memory on the peak. 1. Install necessary dependencies: rust, docker, sp1 toolkit, go. ``` sudo apt update sudo apt install build-essential golang-go protobuf-compiler curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . .cargo/env cargo install --debug --locked cargo-make curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" sudo apt install -y docker-ce sudo usermod -aG docker ${USER} curl -L https://sp1up.succinct.xyz/ | bash source ~/.bashrc sp1up ``` 2. Clone [sp1 repo](https://github.com/succinctlabs/sp1), set `SP1_ALLOW_DEPRECATED_HOOKS` for correct compilation and run the script to regenerate verifiers. ``` git clone https://github.com/succinctlabs/sp1.git cd sp1/crates/prover git checkout v6.0.0 # commit should be f87f8d6ff005d542db22e241928319f5e96a4609 export SP1_ALLOW_DEPRECATED_HOOKS=true # fixes compilation errors make build-circuits ``` The script will generate Plonk verifier smart contract with verification keys and the verifier hash in `build/plonk` dir. ## Program Hashes List of known guest zkVM programs used by this prover. Each program represents a piece of offchain execution that is verified onchain. The program hash serves as the program's unique identifier. ### Avail VectorX DA bridge program ZK-friendly implementation of Avail Vector DA bridge that proves that a given data root was finalized on Avail. - Hash: `0x005f3914526e9f0d261b56a3613985801d3060584f95874548c70fda5f81efdb` - Repository: https://github.com/availproject/sp1-vector/tree/c649310e79de376926863504d49eddbf09532980/program - Verification: successful - Used in: [Vector](https://l2beat.com/layer2s/projects/vector) #### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain v6.3.1: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v6.3.1` (the toolchain version must match the program's `sp1-zkvm = "6.3.1"` dependency and the docker tag used below). 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [availproject/sp1-vector](https://github.com/availproject/sp1-vector/tree/v2.0.1) repo: `git checkout c649310e79de376926863504d49eddbf09532980`. 2. Make sure docker is running by running `docker ps`. 3. From the `sp1-vector/program` dir run: `cargo prove build --docker --tag v6.3.1 --elf-name vector-elf --output-directory ../elf` to build the vector program elf within a docker container and place it in `sp1-vector/elf`. 4. From `sp1-vector` run: `cargo run --bin vkey --release` to print the vkey of the `vector-elf` program. ### Celestia Blobstream DA bridge program ZK-friendly implementation of Celestia Blobstream DA bridge that proves that enough Celestia validators have confirmed a given data root. - Hash: `0x00b451fcd696cd0a4025e30bfed96343b1767ac6523a360fee1183f9e2e20745` - Repository: https://github.com/succinctlabs/sp1-blobstream/tree/78a9d3419339a8c60bf51e1e3241f242bc44d434/program - Verification: successful - Used in: [Molten Network](https://l2beat.com/layer2s/projects/molten), [Blobstream](https://l2beat.com/layer2s/projects/blobstream) #### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct commit hash in [sp1-blobstream](https://github.com/succinctlabs/sp1-blobstream/tree/main) repo: `git checkout 78a9d3419339a8c60bf51e1e3241f242bc44d434`. 2. Make sure docker is running by running `docker ps`. 3. From the `sp1-blobstream/program` dir run: `cargo prove build --docker --tag v6.1.0 --elf-name blobstream-elf --output-directory ../elf` to build the blobstream program elf within a docker container and place it in `sp1-blobstream/elf`. 4. From `sp1-blobstream` run: `cargo run --bin vkey --release` to print the vkey of the `blobstream-elf` program. ### Nitro TEE Verifer Verifies correctness of a single TEE attestation for correctly running Arbitrum Nitro within a trusted enclave. - Hash: `0x00643c7149cf335e7ec9d3f3301e69658a7f0ef2bc7546509c257ed8809f28e1` - Repository: https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-verifier - Verification: successful - Used in: [ApeChain](https://l2beat.com/layer2s/projects/apechain), [Appchain](https://l2beat.com/layer2s/projects/appchain), [Molten Network](https://l2beat.com/layer2s/projects/molten) #### Verification steps Prepare: 1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash` 2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = "^6.1.0"` dependency) 3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Verify: 1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`. 2. Make sure docker is running by running `docker ps`. 3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts. 4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`. ### Nitro TEE Aggregated Verifer Verifies correctness of several aggregated TEE attestations for correctly running Arbitrum Nitro within a trusted enclave. - Hash: `0x00294928e44f0cdc9c74848c4cafcdb29f733a3bc07408c240be3d5afe750b3e` - Repository: https://github.com/automata-network/aws-nitro-enclave-attestation/tree/8607619cc620a93d029a9569bccf752f341aad99/crates/sp1-methods/sp1-aggregator - Verification: successful - Used in: [ApeChain](https://l2beat.com/layer2s/projects/apechain), [Appchain](https://l2beat.com/layer2s/projects/appchain), [Molten Network](https://l2beat.com/layer2s/projects/molten) #### Verification steps Prepare: 1. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash` 2. Make sure SP1 v6.1.0 is active: `sp1up -v 6.1.0` (must match the workspace `sp1-sdk = "^6.1.0"` dependency) 3. Install docker [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Verify: 1. Checkout the correct branch in [automata-network/aws-nitro-enclave-attestation](https://github.com/automata-network/aws-nitro-enclave-attestation/tree/feat/reproducible_build) repo: `git checkout feat/reproducible_build`. Commit hash should be `8607619cc620a93d029a9569bccf752f341aad99`. 2. Make sure docker is running by running `docker ps`. 3. From the repo root: `cargo clean -p sp1-methods` to clear any stale build artifacts. 4. From the repo root run: `REPRODUCIBLE_BUILD=docker cargo run --release -p nitro-attest-cli --no-default-features --features sp1 -- program-id --sp1`. The `REPRODUCIBLE_BUILD=docker` env var triggers the SP1 docker reproducible rebuild of `sp1-verifier` and `sp1-aggregator` ELFs (replacing `USE_DOCKER=1` used on older branches). The CLI then prints `Verifier ID`, `Verifier Proof ID`, and `Aggregator ID`. ### Aggregation program of Base AggregateVerifier Aggregates range proofs of correct execution for several consecutive sub-ranges of Base L2 blocks. - Hash: `0x00f500229b99db6a14c508c444e4527793f2f178168847acf3f755118614568a` - Repository: https://github.com/base/base/tree/v1.4.2/crates/proof/zk/programs/succinct/aggregation - Verification: successful - Used in: [Base Chain](https://l2beat.com/layer2s/projects/base) #### Verification steps Prepare: 1. Install `just`: 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`. 3. Install docker Verify: 1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v1.4.2`. Commit hash should be `5034ef80bc90261ff6c4841fdf4baed34283abad`. 2. Make sure docker is running: `docker ps`. 3. From the repo root: `just succinct vkeys --build` to build the range and aggregation SP1 ELFs (reproducible docker build, SP1 toolchain tag `v6.4.0` pinned in `etc/just/succinct.just`) and print their verification key hashes. ### Range program of Base AggregateVerifier Proves correct state transition function of the Base rollup over a sub-range of L2 blocks. - Hash: `0x25e035df08601f4b0b862be24c4bd08b1ee0524623fe737e7e8e378458ec7c21` - Repository: https://github.com/base/base/tree/v1.4.2/crates/proof/zk/programs/succinct/range/ethereum - Verification: successful - Used in: [Base Chain](https://l2beat.com/layer2s/projects/base) #### Verification steps Prepare: 1. Install `just`: 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up`. 3. Install docker Verify: 1. Checkout the correct tag in [base/base](https://github.com/base/base) repo: `git checkout v1.4.2`. Commit hash should be `5034ef80bc90261ff6c4841fdf4baed34283abad`. 2. Make sure docker is running: `docker ps`. 3. From the repo root: `just succinct vkeys --build` to build the range and aggregation SP1 ELFs (reproducible docker build, SP1 toolchain tag `v6.4.0` pinned in `etc/just/succinct.just`) and print their verification key hashes. ### Aggregation program of OP Succinct FDP v2.1.0 Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client in fault dispute proof mode. Data availability layer is set to EigenDA. - Hash: `0x00b04647b693a1024f3f6524643693ac5445fbabe5cdfcd3b2d3d468274d4be4` - Repository: https://github.com/celo-org/op-succinct/tree/celo/v2.1.0/programs/aggregation - Verification: successful - Used in: [Celo](https://l2beat.com/layer2s/projects/celo) #### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [celo-org/op-succinct](https://github.com/celo-org/op-succinct) repo: `git checkout celo/v2.1.0`. Commit hash should be `00ac9f41a19917be8add5f7b60bef5be93b5b2b7`. 2. Make sure docker is running by running `docker ps` 3. Reproducibly rebuild the program ELF from source: from `programs/aggregation` run `cargo prove build --elf-name aggregation-elf --docker --tag v6.1.0 --output-directory ../../elf`. The rebuilt ELF is byte-identical to the one committed in the release. 4. From the `op-succinct` dir run `cargo run --bin config --release --features eigenda` to print the verification key hashes. ### Range program of OP Succinct FDP v2.1.0 Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks in fault dispute proof mode. Data availability layer is set to EigenDA. - Hash: `0x1dd60be45aa2e74722e16f3a7c2d3b0a3339c1b72dc4e5b513487da3528e5c94` - Repository: https://github.com/celo-org/op-succinct/tree/celo/v2.1.0/programs/range/eigenda - Verification: successful - Used in: [Celo](https://l2beat.com/layer2s/projects/celo) #### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [celo-org/op-succinct](https://github.com/celo-org/op-succinct) repo: `git checkout celo/v2.1.0`. Commit hash should be `00ac9f41a19917be8add5f7b60bef5be93b5b2b7`. 2. Make sure docker is running by running `docker ps` 3. Reproducibly rebuild the program ELF from source: from `programs/range/eigenda` run `cargo prove build --elf-name eigenda-range-elf-embedded --docker --tag v6.1.0 --output-directory ../../../elf`. The rebuilt ELF is byte-identical to the one committed in the release. 4. From the `op-succinct` dir run `cargo run --bin config --release --features eigenda` to print the verification key hashes. ### Fluent STF guest program Guest program implementing state transition function of the Fluent rollup - Hash: `0x00e34107e4c5284bd4ecc4269c650671038c1e85d9dacb931b534e984f607334` - Repository: code unknown - Verification: unsuccessful - Used in: [Fluent](https://l2beat.com/layer2s/projects/fluent) #### Verification steps According to the Fluent team, the sources for this program were not yet published. Thus it cannot be verified. ### Fluent Nitro TEE verifier v1.0.7 Verifies correctness of a single TEE attestation for executing Fluent STF within a trusted enclave on AWS cloud. - Hash: `0x00f291835495d0af627923c963f18395bb9a7e6783b694497460f757866ea34b` - Repository: https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.7/bin/aws-nitro-validator - Verification: successful - Used in: [Fluent](https://l2beat.com/layer2s/projects/fluent) #### Verification steps Regeneration steps are based on [this guide](https://github.com/fluentlabs-xyz/fluent-stf/blob/v1.0.7/README.md). The process is reproducible on a Linux x86_64 (amd64) machine. 1. Install prerequesits: `docker`, `python3`, `git`, `jq`. 2. Checkout correct branch in https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.7: `git checkout v1.0.7`. Commit hash should be `7e4db8ca602c93fa54f831a4de49b0285fc3ad18`. 3. Build Nitro program for the mainnet within docker: `make build-nitro-validator-docker NETWORK=mainnet`. This command will create `nitro-validator-mainnet.vkey` file with the program hash string. ### Aggregation program of OP Succinct Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client. Data availability layer is set to Ethereum blobs. - Hash: `0x00070992a03760456403e800b0bd1a0e907a85a5c2cffca292b5994b56b5363b` - Repository: https://github.com/succinctlabs/op-succinct/tree/v3.14.1/programs/aggregation - Verification: successful - Used in: [Katana](https://l2beat.com/layer2s/projects/katana) #### Verification steps Prepare: 1. Install sp1 toolchain version `v6.8.1`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v6.8.1`. 2. Install docker https://docs.docker.com/get-started/get-docker/. 3. Install `clang` / `libclang` and Go, required by the host-side vkey printing command. Verify: 1. Checkout the correct tag in [succinctlabs/op-succinct](https://github.com/succinctlabs/op-succinct) repo: `git checkout v3.14.1`. Commit hash should be `35d98244c9b4ccc2b93f016be249788c5d6d5372`. 2. Make sure docker is running: `docker ps`. 3. Reproducibly rebuild the Ethereum DA range ELF from source: from `programs/range/ethereum` run `cargo prove build --elf-name range-elf-embedded --docker --tag v6.8.1 --output-directory ../../../elf`. 4. Reproducibly rebuild the aggregation ELF from source: from `programs/aggregation` run `cargo prove build --elf-name aggregation-elf --docker --tag v6.8.1 --output-directory ../../elf`. 5. From the repo root run `cargo run --release --bin config` to print the Ethereum DA range verification key hash and aggregation verification key hash. ### Range program of OP Succinct Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks. Data availability layer is set to Ethereum blobs. - Hash: `0x5ae13fed447a94f57d6ee8fc44cce8075ef994485121dcd27e75577d264f75b1` - Repository: https://github.com/succinctlabs/op-succinct/tree/v3.14.1/programs/range/ethereum - Verification: successful - Used in: [Katana](https://l2beat.com/layer2s/projects/katana) #### Verification steps Prepare: 1. Install sp1 toolchain version `v6.8.1`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v6.8.1`. 2. Install docker https://docs.docker.com/get-started/get-docker/. 3. Install `clang` / `libclang` and Go, required by the host-side vkey printing command. Verify: 1. Checkout the correct tag in [succinctlabs/op-succinct](https://github.com/succinctlabs/op-succinct) repo: `git checkout v3.14.1`. Commit hash should be `35d98244c9b4ccc2b93f016be249788c5d6d5372`. 2. Make sure docker is running: `docker ps`. 3. Reproducibly rebuild the Ethereum DA range ELF from source: from `programs/range/ethereum` run `cargo prove build --elf-name range-elf-embedded --docker --tag v6.8.1 --output-directory ../../../elf`. 4. Reproducibly rebuild the aggregation ELF from source: from `programs/aggregation` run `cargo prove build --elf-name aggregation-elf --docker --tag v6.8.1 --output-directory ../../elf`. 5. From the repo root run `cargo run --release --bin config` to print the Ethereum DA range verification key hash and aggregation verification key hash. ### Aggregation program of OP Succinct Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client. Data availability layer is set to Ethereum blobs. - Hash: `0x00fa36417110bce994f3054a68baef78ca51dee1a38659c70e108da7eb3d6bbf` - Repository: https://github.com/mantle-xyz/op-succinct/tree/mantle-v1.6.1/programs/aggregation - Verification: successful - Used in: [Mantle](https://l2beat.com/layer2s/projects/mantle) #### Verification steps Prepare: 1. Install sp1 toolchain v6.4.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v6.4.0` 2. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) 3. Install just [https://github.com/casey/just](https://github.com/casey/just) Verify: 1. Checkout the correct tag in [mantle-xyz/op-succinct](https://github.com/mantle-xyz/op-succinct/tree/mantle-v1.6.1) repo: `git checkout mantle-v1.6.1`. Commit hash should be `8d280ded13f3fcba3d85fb6babedaf75cab5e9c0`. 2. Make sure docker is running by running `docker ps` 3. Delete the committed ELFs so that only rebuilt ones get hashed: `rm elf/aggregation-elf elf/range-elf-embedded` 4. From the `op-succinct` dir: `just build-elfs` to rebuild the SP1 programs in docker. 5. From the `op-succinct` dir: `just vkeys` to print the verification key hashes. This program hash is the `Aggregation Verification Key Hash`. ### Range program of OP Succinct Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks. Data availability layer is set to Ethereum blobs. - Hash: `0x1e2b863405480e5509bcae955f9e23e1170419ba26af2f271cd0199f1e228fdb` - Repository: https://github.com/mantle-xyz/op-succinct/tree/mantle-v1.6.1/programs/range/ethereum - Verification: successful - Used in: [Mantle](https://l2beat.com/layer2s/projects/mantle) #### Verification steps Prepare: 1. Install sp1 toolchain v6.4.0: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up -v v6.4.0` 2. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) 3. Install just [https://github.com/casey/just](https://github.com/casey/just) Verify: 1. Checkout the correct tag in [mantle-xyz/op-succinct](https://github.com/mantle-xyz/op-succinct/tree/mantle-v1.6.1) repo: `git checkout mantle-v1.6.1`. Commit hash should be `8d280ded13f3fcba3d85fb6babedaf75cab5e9c0`. 2. Make sure docker is running by running `docker ps` 3. Delete the committed ELFs so that only rebuilt ones get hashed: `rm elf/aggregation-elf elf/range-elf-embedded` 4. From the `op-succinct` dir: `just build-elfs` to rebuild the SP1 programs in docker. 5. From the `op-succinct` dir: `just vkeys` to print the verification key hashes. This program hash is the `Range Verification Key Hash`. ### Morph Guest program (v0.5.6 release) Proves the correct execution of the Morph L2 state transition function (based on the Geth EVM) for a batch of blocks using the SP1 zkVM. - Hash: `0x00c4ea13863f7b423f53140f432d7147e48b8e31660420636931c0a72459c25c` - Repository: https://github.com/morph-l2/morph/tree/v0.5.6/prover/bin/client - Verification: successful - Used in: [Morph](https://l2beat.com/layer2s/projects/morph) #### Verification steps The steps below should be done on a Linux machine to reproduce the program hash. To prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain version `v6.2.0`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up --version v6.2.0` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [morph repo](https://github.com/morph-l2/morph): `git checkout v0.5.6`. Commit hash should be `cafa07d19de8a5a36c8510890a72533c8e0e52e5` 2. Make sure docker is running by running `docker ps` 3. Build the program binary from `prover/bin/client` dir using a docker container build for reproducibility: `cargo prove build --docker --tag v6.2.0` 4. The generated elf binary `verifier-client` will be placed in `prover/target/elf-compilation/docker/riscv64im-succinct-zkvm-elf/release`. Move it to `prover/bin/client/elf`. 5. Regenerate and print the vkey from the elf binary by calling `cargo run --release --bin vkey` from `prover` dir. ### Morph Guest program (v0.6.3 release) Proves the correct execution of the Morph L2 state transition function (based on the Geth EVM) for a batch of blocks using the SP1 zkVM. The sequencer-set public input field is zero. - Hash: `0x00b450ec2a1b8dfba81ade90afbcc96842055548b814c991bb13bdca34980c63` - Repository: https://github.com/morph-l2/morph/tree/v0.6.3/prover/bin/client - Verification: successful - Used in: [Morph](https://l2beat.com/layer2s/projects/morph) #### Verification steps The steps below should be done on a Linux machine to reproduce the program hash. To prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain version `v6.2.0`: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up --version v6.2.0` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) (a rootless podman with a `docker` shim also works) Verify: 1. Checkout the correct branch in [morph repo](https://github.com/morph-l2/morph): `git checkout v0.6.3`. Commit hash should be `5edbc693d4edc72597b444a9b75424661fd536cf` 2. Make sure docker is running by running `docker ps` 3. Build the program binary from `prover/bin/client` dir using a docker container build for reproducibility: `cargo prove build --docker --tag v6.2.0` 4. The generated elf binary `verifier-client` will be placed in `prover/target/elf-compilation/docker/riscv64im-succinct-zkvm-elf/release`. Its SHA-256 should be `0c17c00226a547e5e9fd56e285e83fa6cf81d1c844c77337c8a9e96f37a7dea6`, identical to the committed `prover/bin/client/elf/verifier-client`. Move it to `prover/bin/client/elf`. 5. Regenerate and print the vkey from the elf binary by calling `cargo run --release --bin vkey` from `prover` dir (needs `protoc` and OpenSSL headers on the host). ### Aggregation program of OP Succinct FDP v3.4.1-rise.7 Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client in fault dispute proof mode. Data availability layer is set to EigenDA. - Hash: `0x0061b26157718f96a20ea50c52a485dea3b6967139328dc7e07fece56f557bda` - Repository: https://github.com/risechain/op-succinct/tree/v3.4.1-rise.7/programs/aggregation - Verification: successful - Used in: [RISE](https://l2beat.com/layer2s/projects/rise) #### Verification steps Prepare: 1. Install sp1 toolchain: `curl -L https://sp1.succinct.xyz | bash`, then `~/.sp1/bin/sp1up`. 2. Install docker and make sure it is running: `docker ps`. Verify: 1. Checkout the correct tag in [risechain/op-succinct](https://github.com/risechain/op-succinct) repo: `git checkout v3.4.1-rise.7`. Commit hash should be `a99569fa608127fdd4d5d73722184362c6283d6b`. 2. Reproducibly rebuild the EigenDA range ELF from source: from `programs/range/eigenda` run `~/.sp1/bin/cargo-prove prove build --elf-name eigenda-range-elf-embedded --docker --tag v5.2.4 --output-directory ../../../elf --features embedded`. 3. Reproducibly rebuild the aggregation ELF from source: from `programs/aggregation` run `~/.sp1/bin/cargo-prove prove build --elf-name aggregation-elf --docker --tag v5.2.4 --output-directory ../../elf`. 4. From the repo root run `cargo run --bin config --release --features eigenda` to print the range verification key hash and the aggregation verification key hash. The eigenda feature selects the EigenDA range ELF, whose in-circuit derivation verifies EigenDA DA certificates via hokulea and canoe. ### Range program of OP Succinct FDP v3.4.1-rise.7 Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks in fault dispute proof mode. Data availability layer is set to EigenDA. - Hash: `0x02850d082ab676631569bfa7057944a05f22f42c12ffa15b0ae30a6153dfe162` - Repository: https://github.com/risechain/op-succinct/tree/v3.4.1-rise.7/programs/range/eigenda - Verification: successful - Used in: [RISE](https://l2beat.com/layer2s/projects/rise) #### Verification steps Prepare: 1. Install sp1 toolchain: `curl -L https://sp1.succinct.xyz | bash`, then `~/.sp1/bin/sp1up`. 2. Install docker and make sure it is running: `docker ps`. Verify: 1. Checkout the correct tag in [risechain/op-succinct](https://github.com/risechain/op-succinct) repo: `git checkout v3.4.1-rise.7`. Commit hash should be `a99569fa608127fdd4d5d73722184362c6283d6b`. 2. Reproducibly rebuild the EigenDA range ELF from source: from `programs/range/eigenda` run `~/.sp1/bin/cargo-prove prove build --elf-name eigenda-range-elf-embedded --docker --tag v5.2.4 --output-directory ../../../elf --features embedded`. 3. Reproducibly rebuild the aggregation ELF from source: from `programs/aggregation` run `~/.sp1/bin/cargo-prove prove build --elf-name aggregation-elf --docker --tag v5.2.4 --output-directory ../../elf`. 4. From the repo root run `cargo run --bin config --release --features eigenda` to print the range verification key hash and the aggregation verification key hash. The eigenda feature selects the EigenDA range ELF, whose in-circuit derivation verifies EigenDA DA certificates via hokulea and canoe. ### Proposal program of Raiko2 v0.8.0-rc1 Proves a Taiko Shasta proposal state transition with Raiko2. - Hash: `0x0025425c22e827507428a3d9c7b0f89635be5462f34bb6780563e3d6086be7c7` - Repository: https://github.com/taikoxyz/raiko2/blob/v0.8.0-rc1/guests/sp1/src/shasta_proposal.rs - Verification: successful - Used in: [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko) #### Verification steps Dependencies: Git, Rust/Cargo, Docker with a running daemon, and either `just` or the equivalent Cargo command below. The build pulls Docker images and locked Rust/git dependencies. 1. Check out the correct tag in [raiko2](https://github.com/taikoxyz/raiko2): ``` git clone https://github.com/taikoxyz/raiko2.git cd raiko2 git checkout v0.8.0-rc1 ``` Commit hash should be `8b2147a0e74ba6387938cf35544797fb1b61cc07`. 2. From the `raiko2` root dir, rebuild the Shasta guest ELFs from source: ``` just build-guest all --force ``` If `just` is unavailable, run the equivalent command: ``` cargo run -r -p xtask -- build-guest all --force ``` This exports fresh ELFs to `crates/guests/elf`. 3. Generate the guest digest summary from the rebuilt ELFs: ``` cargo run -r -p xtask-build-guest --bin guest-digests --features digests -- \ --output /tmp/raiko2-v0.8.0-rc1-guest-digests.json ``` 4. In `/tmp/raiko2-v0.8.0-rc1-guest-digests.json`, find the entry with `object_name: "sp1_shasta_proposal"` and `digest_source: "vk_bn254"`. Its `digest` field should match this program hash. Reference: [Raiko2 v0.8.0-rc1 release](https://github.com/taikoxyz/raiko2/releases/tag/v0.8.0-rc1), rolled out by Taiko multisig proposal `0xa3cd408eabf658ce08f25450f837679f09269742eabc672fbbf4479db59ec2cf`. ### Proposal program of Raiko2 v0.8.0-rc1 Proves a Taiko Shasta proposal state transition with Raiko2. - Hash: `0x12a12e113a09d41d05147b387b0f89632df2a3174d2ed9e00ac7c7ac086be7c7` - Repository: https://github.com/taikoxyz/raiko2/blob/v0.8.0-rc1/guests/sp1/src/shasta_proposal.rs - Verification: successful - Used in: [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko) #### Verification steps Dependencies: Git, Rust/Cargo, Docker with a running daemon, and either `just` or the equivalent Cargo command below. The build pulls Docker images and locked Rust/git dependencies. 1. Check out the correct tag in [raiko2](https://github.com/taikoxyz/raiko2): ``` git clone https://github.com/taikoxyz/raiko2.git cd raiko2 git checkout v0.8.0-rc1 ``` Commit hash should be `8b2147a0e74ba6387938cf35544797fb1b61cc07`. 2. From the `raiko2` root dir, rebuild the Shasta guest ELFs from source: ``` just build-guest all --force ``` If `just` is unavailable, run the equivalent command: ``` cargo run -r -p xtask -- build-guest all --force ``` This exports fresh ELFs to `crates/guests/elf`. 3. Generate the guest digest summary from the rebuilt ELFs: ``` cargo run -r -p xtask-build-guest --bin guest-digests --features digests -- \ --output /tmp/raiko2-v0.8.0-rc1-guest-digests.json ``` 4. In `/tmp/raiko2-v0.8.0-rc1-guest-digests.json`, find the entry with `object_name: "sp1_shasta_proposal"` and `digest_source: "vk_hash_bytes"`. Its `digest` field should match this program hash. Reference: [Raiko2 v0.8.0-rc1 release](https://github.com/taikoxyz/raiko2/releases/tag/v0.8.0-rc1), rolled out by Taiko multisig proposal `0xa3cd408eabf658ce08f25450f837679f09269742eabc672fbbf4479db59ec2cf`. ### Aggregation program of Raiko2 v0.8.0-rc1 Aggregates Raiko2 proofs for multiple Taiko Shasta proposals. - Hash: `0x0051ac1d9e8cfd4196e37f9cfefd08e9b0f7ce653bad4634cd1ee84b71ca3be6` - Repository: https://github.com/taikoxyz/raiko2/blob/v0.8.0-rc1/guests/sp1/src/shasta_aggregation.rs - Verification: successful - Used in: [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko) #### Verification steps Dependencies: Git, Rust/Cargo, Docker with a running daemon, and either `just` or the equivalent Cargo command below. The build pulls Docker images and locked Rust/git dependencies. 1. Check out the correct tag in [raiko2](https://github.com/taikoxyz/raiko2): ``` git clone https://github.com/taikoxyz/raiko2.git cd raiko2 git checkout v0.8.0-rc1 ``` Commit hash should be `8b2147a0e74ba6387938cf35544797fb1b61cc07`. 2. From the `raiko2` root dir, rebuild the Shasta guest ELFs from source: ``` just build-guest all --force ``` If `just` is unavailable, run the equivalent command: ``` cargo run -r -p xtask -- build-guest all --force ``` This exports fresh ELFs to `crates/guests/elf`. 3. Generate the guest digest summary from the rebuilt ELFs: ``` cargo run -r -p xtask-build-guest --bin guest-digests --features digests -- \ --output /tmp/raiko2-v0.8.0-rc1-guest-digests.json ``` 4. In `/tmp/raiko2-v0.8.0-rc1-guest-digests.json`, find the entry with `object_name: "sp1_shasta_aggregation"` and `digest_source: "vk_bn254"`. Its `digest` field should match this program hash. Reference: [Raiko2 v0.8.0-rc1 release](https://github.com/taikoxyz/raiko2/releases/tag/v0.8.0-rc1), rolled out by Taiko multisig proposal `0xa3cd408eabf658ce08f25450f837679f09269742eabc672fbbf4479db59ec2cf`. ### Aggregation program of Raiko2 v0.8.0-rc1 Aggregates Raiko2 proofs for multiple Taiko Shasta proposals. - Hash: `0x28d60ecf233f50655c6ff39f6fd08e9b07be73296eb518d31a3dd09671ca3be6` - Repository: https://github.com/taikoxyz/raiko2/blob/v0.8.0-rc1/guests/sp1/src/shasta_aggregation.rs - Verification: successful - Used in: [Taiko Alethia](https://l2beat.com/layer2s/projects/taiko) #### Verification steps Dependencies: Git, Rust/Cargo, Docker with a running daemon, and either `just` or the equivalent Cargo command below. The build pulls Docker images and locked Rust/git dependencies. 1. Check out the correct tag in [raiko2](https://github.com/taikoxyz/raiko2): ``` git clone https://github.com/taikoxyz/raiko2.git cd raiko2 git checkout v0.8.0-rc1 ``` Commit hash should be `8b2147a0e74ba6387938cf35544797fb1b61cc07`. 2. From the `raiko2` root dir, rebuild the Shasta guest ELFs from source: ``` just build-guest all --force ``` If `just` is unavailable, run the equivalent command: ``` cargo run -r -p xtask -- build-guest all --force ``` This exports fresh ELFs to `crates/guests/elf`. 3. Generate the guest digest summary from the rebuilt ELFs: ``` cargo run -r -p xtask-build-guest --bin guest-digests --features digests -- \ --output /tmp/raiko2-v0.8.0-rc1-guest-digests.json ``` 4. In `/tmp/raiko2-v0.8.0-rc1-guest-digests.json`, find the entry with `object_name: "sp1_shasta_aggregation"` and `digest_source: "vk_hash_bytes"`. Its `digest` field should match this program hash. Reference: [Raiko2 v0.8.0-rc1 release](https://github.com/taikoxyz/raiko2/releases/tag/v0.8.0-rc1), rolled out by Taiko multisig proposal `0xa3cd408eabf658ce08f25450f837679f09269742eabc672fbbf4479db59ec2cf`. ### Aggregation program of OP Succinct Lite Aggregates proofs of correct execution for several consecutive block ranges of OP L2 client in fault dispute proof mode. Data availability layer is set to Ethereum blobs. - Hash: `0x00d9be2980d484ba29aaa1e0d27648b8182df8616a4ec85c3c2b528b29d1a085` - Repository: code unknown - Verification: not verified - Used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer) ### Range program of OP Succinct Lite Proves correct state transition function within an OP L2 client over a range of consecutive L2 blocks in fault dispute proof mode. Data availability layer is set to Ethereum blobs. - Hash: `0x464b1e81672b12e60eb509f54a13aaa877abafda1a015a9339285a381e4146fc` - Repository: code unknown - Verification: not verified - Used in: [X Layer](https://l2beat.com/layer2s/projects/xlayer)