Quickstart
The Succinct Prover Network enables seamless proof generation with zero setup, providing instant access to GPU clusters for the lowest latency and cost.
Step 1: Key Setup
The Succinct Network uses Secp256k1 keypairs for authentication, similar to Ethereum wallets. You may generate a new keypair explicitly for use with the prover network, or use an existing keypair. You can do this using Foundry or Metamask.
- Foundry
- Metamask
Generate a Public Key
Prover network keypair credentials can be generated using the cast CLI tool. You must have the Foundry toolchain installed.
Install the Foundry CLI if you don't have it already:
curl -L https://foundry.paradigm.xyz | bash
foundryup
Generate a new Secp256k1 keypair:
cast wallet new
This command will give you an output similar to this:
Successfully created new keypair.
Address: 0x7594cF2161dC345B300A5Ac87e2473c7bF25D9fe
Private key: <PRIVATE_KEY>
When interacting with the network, you will set your NETWORK_PRIVATE_KEY
environment variable to this value.
Retrieve an Existing Key
If you already have an existing key you would like to use, you can also use cast
to retrieve your address:
cast wallet address --private-key $PRIVATE_KEY
Create a New Wallet
- Install the Metamask browser extension and follow the setup process
- Click on the Metamask extension icon, select the top arrow bar, and select "Add account or hardware wallet" and "Add a new Ethereum account". Name the account to your liking.
Export Private Key
To export your private key from Metamask:
- Click on the Metamask extension icon
- Click the three vertical dots menu (⋮)
- Select "Account details"
- Click "Show private key"
- Enter your Metamask password when prompted
- Copy the displayed private key
When interacting with the network, you will set your NETWORK_PRIVATE_KEY
environment variable to this exported private key.
Step 2: Deposit $PROVE
To pay for proof requests, you need to deposit $PROVE tokens to the Succinct Prover Network.
You can deposit $PROVE by connecting the account page in the explorer and clicking the "Deposit" button below "Your Network Balance".
Step 3: Request Proofs
To request proofs on the Succinct Prover Network:
- Make sure to use sp1-sdk >=
v5.1.0
- Set the following two environment variables:
SP1_PROVER=network
NETWORK_PRIVATE_KEY=<PRIVATE_KEY>
(from Step 1)
- Enable the
network
feature onsp1-sdk
inscript/Cargo.toml
:
[dependencies]
sp1-sdk = { version = "...", default-features = false, features = ["network"] }
You're now ready to request proofs:
use sp1_sdk::{include_elf, utils, ProverClient, SP1ProofWithPublicValues, SP1Stdin};
/// The ELF we want to execute inside the zkVM.
const ELF: &[u8] = include_elf!("fibonacci-program");
fn main() {
// Create an input stream and write '500' to it.
let n = 1000u32;
// The input stream that the program will read from using `sp1_zkvm::io::read`. Note that the
// types of the elements in the input stream must match the types being read in the program.
let mut stdin = SP1Stdin::new();
stdin.write(&n);
// Create a `ProverClient` method.
let client = ProverClient::from_env();
// Generate the proof for the given program and input.
let (pk, _vk) = client.setup(ELF);
let _proof = client.prove(&pk, &stdin).compressed().run().unwrap();
}
The output should look something like this if you run the code above:
2025-08-03T04:33:46.055353Z INFO Registered program 0x1d6d196c1323d9411fa45a8f37268807343573f52a324c845f4aa26873310d63
2025-08-03T04:33:46.056304Z INFO execute: clk = 0 pc = 0x201d98
2025-08-03T04:33:46.058941Z INFO execute: gas: 1003634
2025-08-03T04:33:46.058953Z INFO execute: close time.busy=3.54ms time.idle=1.21µs
2025-08-03T04:33:46.544214Z INFO Requesting proof:
2025-08-03T04:33:46.544225Z INFO ├─ Strategy: Auction
2025-08-03T04:33:46.544227Z INFO ├─ Proof mode: Compressed
2025-08-03T04:33:46.544228Z INFO ├─ Circuit version: v5.0.0
2025-08-03T04:33:46.544229Z INFO ├─ Timeout: 300 seconds
2025-08-03T04:33:46.544231Z INFO ├─ Public values hash: 0xeb61af091de14d64211b5f413bbb0da5a66e3de8cec2cb754b1fc56f8b0b2189
2025-08-03T04:33:46.544233Z INFO ├─ Base fee: 200000000000000000 (0.2000 $PROVE)
2025-08-03T04:33:46.544234Z INFO ├─ Max price per bPGU: 2000000000000000000 (2.0000 $PROVE)
2025-08-03T04:33:46.544235Z INFO ├─ Minimum auction period: 0 seconds
2025-08-03T04:33:46.544236Z INFO ├─ Prover Whitelist: None
2025-08-03T04:33:46.544237Z INFO ├─ Cycle limit: 13528 cycles
2025-08-03T04:33:46.544238Z INFO └─ Gas limit: 1003634 PGUs
2025-08-03T04:33:48.471022Z INFO Created request 0x59f7cf1359d86f073cb6324bc6acb47a77bb33c459aeb21d5bce14fd2a3ee8e6 in transaction 0x91e392b0d615a1b90f760295125f5923c8f8cf65e7fa2ddf02c6245a7bb7d8c9
2025-08-03T04:33:48.471036Z INFO View request status at: https://explorer.sepolia.succinct.xyz/request/0x59f7cf1359d86f073cb6324bc6acb47a77bb33c459aeb21d5bce14fd2a3ee8e6
2025-08-03T04:34:00.941642Z INFO Proof request assigned, proving...
2025-08-03T04:35:24.197709Z Successfully generated proof!
Proof Modes
Like the local prover, the network supports requesting different proof modes:
// Generate a compressed proof
let proof = client.prove(&pk, stdin)
.compressed()
.run()
.unwrap();
// Generate a Plonk proof
let proof = client.prove(&pk, stdin)
.plonk()
.run()
.unwrap();
// Generate a Groth16 proof
let proof = client.prove(&pk, stdin)
.groth16()
.run()
.unwrap();
View Proof Status
Monitor your proofs on the explorer. Each proof page shows:
- Current stage and status
- Cycle count used
- Verification key details
- Prover assignment information
Advanced Usage
For advanced usage (e.g. auction configuration, async usage, timeouts, etc.) see Advanced Usage.
Support
Need help getting started? Join the Telegram for assistance with onboarding.