mirror of
https://github.com/logos-blockchain/lssa-zkvm-testing.git
synced 2026-01-03 22:03:10 +00:00
93 lines
2.2 KiB
Markdown
93 lines
2.2 KiB
Markdown
|
|
# SP1 Project Template
|
||
|
|
|
||
|
|
This is a template for creating an end-to-end [SP1](https://github.com/succinctlabs/sp1) project
|
||
|
|
that can generate a proof of any RISC-V program.
|
||
|
|
|
||
|
|
## Requirements
|
||
|
|
|
||
|
|
- [Rust](https://rustup.rs/)
|
||
|
|
- [SP1](https://docs.succinct.xyz/getting-started/install.html)
|
||
|
|
|
||
|
|
## Running the Project
|
||
|
|
|
||
|
|
There are four main ways to run this project: build a program, execute a program, generate a core proof, and
|
||
|
|
generate an EVM-compatible proof.
|
||
|
|
|
||
|
|
### Build the Program
|
||
|
|
|
||
|
|
To build the program, run the following command:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cd program
|
||
|
|
cargo prove build
|
||
|
|
```
|
||
|
|
|
||
|
|
### Execute the Program
|
||
|
|
|
||
|
|
To run the program without generating a proof:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cd script
|
||
|
|
cargo run --release -- --execute
|
||
|
|
```
|
||
|
|
|
||
|
|
This will execute the program and display the output.
|
||
|
|
|
||
|
|
### Generate a Core Proof
|
||
|
|
|
||
|
|
To generate a core proof for your program:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cd script
|
||
|
|
cargo run --release -- --prove
|
||
|
|
```
|
||
|
|
|
||
|
|
### Generate an EVM-Compatible Proof
|
||
|
|
|
||
|
|
> [!WARNING]
|
||
|
|
> You will need at least 128GB RAM to generate a PLONK or Groth16 proof.
|
||
|
|
|
||
|
|
To generate a proof that is small enough to be verified on-chain and verifiable by the EVM:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cd script
|
||
|
|
cargo run --release --bin evm -- --system plonk
|
||
|
|
```
|
||
|
|
|
||
|
|
this will generate a PLONK proof. If you want to generate a Groth16 proof, run the following command:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cargo run --release --bin evm -- --system groth16
|
||
|
|
```
|
||
|
|
|
||
|
|
These commands will also generate fixtures that can be used to test the verification of SP1 zkVM proofs
|
||
|
|
inside Solidity.
|
||
|
|
|
||
|
|
### Retrieve the Verification Key
|
||
|
|
|
||
|
|
To retrieve your `programVKey` for your on-chain contract, run the following command:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cargo prove vkey --elf elf/riscv32im-succinct-zkvm-elf
|
||
|
|
```
|
||
|
|
|
||
|
|
## Using the Prover Network
|
||
|
|
|
||
|
|
We highly recommend using the Succinct prover network for any non-trivial programs or benchmarking purposes. For more information, see the [setup guide](https://docs.succinct.xyz/prover-network/setup.html).
|
||
|
|
|
||
|
|
To get started, copy the example environment file:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cp .env.example .env
|
||
|
|
```
|
||
|
|
|
||
|
|
Then, set the `SP1_PROVER` environment variable to `network` and set the `SP1_PRIVATE_KEY`
|
||
|
|
environment variable to your whitelisted private key.
|
||
|
|
|
||
|
|
For example, to generate an EVM-compatible proof using the prover network, run the following
|
||
|
|
command:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
SP1_PROVER=network SP1_PRIVATE_KEY=... cargo run --release --bin evm
|
||
|
|
```
|