Skip to main content
Version: 3.4.0

Contract Addresses

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 IDChainGateway
1Mainnet0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
11155111Sepolia0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
17000Holesky0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
42161Arbitrum One0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
421614Arbitrum Sepolia0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
8453Base0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
84532Base Sepolia0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
10Optimism0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
11155420Optimism Sepolia0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
534351Scroll Sepolia0x397A5f7f3dBd538f23DE225B51f532c34448dA9B
534352Scroll0x397A5f7f3dBd538f23DE225B51f532c34448dA9B

PLONK

Chain IDChainGateway
1Mainnet0x3B6041173B80E77f038f3F2C0f9744f04837185e
11155111Sepolia0x3B6041173B80E77f038f3F2C0f9744f04837185e
17000Holesky0x3B6041173B80E77f038f3F2C0f9744f04837185e
42161Arbitrum One0x3B6041173B80E77f038f3F2C0f9744f04837185e
421614Arbitrum Sepolia0x3B6041173B80E77f038f3F2C0f9744f04837185e
8453Base0x3B6041173B80E77f038f3F2C0f9744f04837185e
84532Base Sepolia0x3B6041173B80E77f038f3F2C0f9744f04837185e
10Optimism0x3B6041173B80E77f038f3F2C0f9744f04837185e
11155420Optimism Sepolia0x3B6041173B80E77f038f3F2C0f9744f04837185e
534351Scroll Sepolia0x3B6041173B80E77f038f3F2C0f9744f04837185e
534352Scroll0x3B6041173B80E77f038f3F2C0f9744f04837185e

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 add SP1Verifier contracts to it. Then point to the SP1VerifierGateway address in your contracts.
  • Deploy just the SP1Verifier contract that you want to use. Then point to the SP1Verifier 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;
}