Contract Addresses
The current officially supported version of SP1 is V3.0.0.
All previous versions are deprecated and may not work as expected on the gateways.
To verify SP1 proofs on-chain, we recommend using our deployed canonical verifier gateways. The SP1VerifierGateway will automatically route your SP1 proof to the correct verifier based on the SP1 version used.
Canonical Verifier Gateways
There are different verifier gateway for each proof system: Groth16 and PLONK. This means that you must use the correct verifier gateway depending on if you are verifying a Groth16 or PLONK proof.
Groth16
Chain ID | Chain | Gateway |
---|---|---|
1 | Mainnet | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
11155111 | Sepolia | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
17000 | Holesky | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
42161 | Arbitrum One | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
421614 | Arbitrum Sepolia | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
8453 | Base | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
84532 | Base Sepolia | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
10 | Optimism | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
11155420 | Optimism Sepolia | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
534351 | Scroll Sepolia | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
534352 | Scroll | 0x397A5f7f3dBd538f23DE225B51f532c34448dA9B |
PLONK
Chain ID | Chain | Gateway |
---|---|---|
1 | Mainnet | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
11155111 | Sepolia | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
17000 | Holesky | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
42161 | Arbitrum One | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
421614 | Arbitrum Sepolia | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
8453 | Base | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
84532 | Base Sepolia | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
10 | Optimism | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
11155420 | Optimism Sepolia | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
534351 | Scroll Sepolia | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
534352 | Scroll | 0x3B6041173B80E77f038f3F2C0f9744f04837185e |
The most up-to-date reference on each chain can be found in the deployments directory in the SP1 contracts repository, where each chain has a dedicated JSON file with each verifier's address.
Versioning Policy
Whenever a verifier for a new SP1 version is deployed, the gateway contract will be updated to support it with addRoute(). If a verifier for an SP1 version has an issue, the route will be frozen with freezeRoute().
On mainnets, only official versioned releases are deployed and added to the gateway. Testnets have
rc
versions of the verifier deployed supported in addition to the official versions.
Deploying to other Chains
In the case that you need to use a chain that is not listed above, you can deploy your own verifier contract by following the instructions in the SP1 Contracts Repo.
Since both the SP1VerifierGateway
and each SP1Verifier
implement the ISP1Verifier
interface, you can choose to either:
- Deploy the
SP1VerifierGateway
and addSP1Verifier
contracts to it. Then point to theSP1VerifierGateway
address in your contracts. - Deploy just the
SP1Verifier
contract that you want to use. Then point to theSP1Verifier
address in your contracts.
If you want support for a canonical verifier on your chain, contact us here. We often deploy canonical verifiers on new chains if there's enough demand.
ISP1Verifier Interface
All verifiers implement the ISP1Verifier interface.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/// @title SP1 Verifier Interface
/// @author Succinct Labs
/// @notice This contract is the interface for the SP1 Verifier.
interface ISP1Verifier {
/// @notice Verifies a proof with given public values and vkey.
/// @dev It is expected that the first 4 bytes of proofBytes must match the first 4 bytes of
/// target verifier's VERIFIER_HASH.
/// @param programVKey The verification key for the RISC-V program.
/// @param publicValues The public values encoded as bytes.
/// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes.
function verifyProof(
bytes32 programVKey,
bytes calldata publicValues,
bytes calldata proofBytes
) external view;
}