7Block Labs
Blockchain Development

ByAUJay

Summary: So, if you're looking to support a new proving scheme like HyperPlonk without having to redeploy your entire verifier, you've got a few solid options. You can choose from one of these three patterns: (1) set up an on-chain “verifier gateway/router” that keeps a consistent address while registering new verifier implementations behind it, (2) create a universal verification layer that confirms proof validity and offers a single on-chain interface, or (3) utilize a zkVM-as-meta-verifier that can verify any proof within a zkVM program, only checking the zkVM proof on-chain. We’ll dive into some specific frameworks, discuss the gas/latency tradeoffs, and outline rollout steps with examples and potential pitfalls to watch out for.

Which Frameworks Let Me Add Support for New Proving Schemes Like HyperPlonk Without Redeploying My Entire Verifier?

Decision-makers are understandably wondering: how do we maintain a stable on-chain interface as ZK cryptography transitions from Groth16/Plonk to newer multilinear protocols like HyperPlonk or SP1 Hypercube? The last thing you want is to deal with changing contract addresses, disrupting integrations, or having to re-audit a massive system every time a new scheme comes out. So, let’s take a look at the architectures that allow you to seamlessly integrate new proof systems with little disruption to your contracts--and check out the real-world frameworks that are already putting them to use today.

  • Pattern A: Verifier gateways or routers on L1 and L2
  • Pattern B: Universal verification layers, like restaked AVS or specialized chains
  • Pattern C: zkVM-as-meta-verifier, which means verifying new proofs within a zkVM program

We’ve got your back with clear deployment patterns, governance strategies, and risk controls, plus some solid gas and latency data points. This way, you can pick a path that vibes with your budget and risk tolerance. Check it out here: docs.succinct.xyz


Why this matters now: multilinear proof systems are landing

HyperPlonk takes the Plonk system and tweaks it for the boolean hypercube, using multilinear commitments and sumcheck. This approach ditches FFTs, making it easier to work with high-degree custom gates while keeping proving times linear. That’s pretty appealing for tackling complex business logic and zkVMs. However, if you want to verify new multilinear schemes within the EVM, you might hit a snag. You could need different curves, hashes, and new arithmetic, which means you’ll want to plan an upgrade path that won't require redeploying your apps at the application level. (eprint.iacr.org)

At the same time, Succinct’s SP1 Hypercube is pushing zkVM proving into the “real-time” realm, built on multilinear polynomials. While they revamped the proving system internally, they’ve made sure to maintain a consistent verifier interface on-chain through a gateway. This is the approach to look up to. (blog.succinct.xyz)


Pattern A -- On-chain verifier “gateway/router” at a stable address

The Concept

So, the plan is pretty straightforward: publish a single contract address that your application will call indefinitely. Then, behind that address, you can register or direct to different verifier implementations based on version or scheme. This way, your app never has to change where it’s making that call, and you can easily freeze or switch out any verifiers that might have vulnerabilities.

Two Production-Grade Examples:

  1. Example One: E-commerce Platform

    • This platform handles thousands of transactions daily. It features user-friendly navigation, secure payment processing, and a robust inventory management system. It's designed to scale effortlessly as the business grows, ensuring a seamless shopping experience.
  2. Example Two: Social Media App

    • A social media application built for rapid user engagement and real-time updates. With high availability and interactive features, it supports millions of users sharing content and connecting with friends without a hitch. Its architecture is optimized for performance, ensuring fast load times even during peak hours.

1) SP1 Verifier Gateway (EVM)

  • How it works: App contracts connect to the SP1VerifierGateway using a single interface, known as ISP1Verifier. This gateway is pretty smart--it automatically directs proofs to the right verifier based on the version and the proving system being used, like Plonk or Groth16. If new verifiers are rolled out, they can be added to the gateway seamlessly, while older ones can be frozen if any issues pop up. Check it out here.
  • Dev ergonomics:

    • Solidity side: Just import ISP1Verifier and call verifyProof(programVKHash, publicValues, proofBytes). The cool thing is that the gateway stays stable, making it easy for SP1 to introduce new verifier versions without rocking the boat. Take a look here.
    • Rust side: Your SP1 program will compile into a program verification key (VKEY) that you can pin on-chain. When it comes to proof verification on-chain, it's typically around a few hundred kGas, depending on the proof type and the size of the calldata. For example, with SP1 tooling, you might see around 280k gas for a contract-call example. You can explore more here.
  • When to choose: This is perfect for you if you're looking for a stable on-chain address and prefer a vendor-managed pipeline to handle verifier upgrades across different schemes. Think about it like this: it works great for the current Groth16/Plonk wrappers and is set up for future multilinear backends too. More info can be found here.

Example Solidity Snippet:

Here’s a simple Solidity snippet to help you get a feel for how things work:

pragma solidity ^0.8.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

This little contract, SimpleStorage, allows you to set and get a stored number. You can see how easy it is to interact with variables and create functions in Solidity!

pragma solidity ^0.8.20;
import {ISP1Verifier} from "@sp1-contracts/ISP1Verifier.sol";

contract UseSP1 {
    address constant VERIFIER = 0x3B6041173B80E77f038f3F2C0f9744f04837185e; // gateway
    bytes32 constant PROGRAM_VKEY = 0x...; // pin your program's VK hash

    function check(bytes calldata publicValues, bytes calldata proof) external {
        ISP1Verifier(VERIFIER).verifyProof(PROGRAM_VKEY, publicValues, proof);
    }
}

The address shown in this example is a deployed gateway. Check out the repo's deployments for your specific chain. You can find it here: github.com.

2) RISC Zero Verifier Router

  • How it works: RISC Zero has this cool Router contract that takes care of forwarding verify() calls to the right base verifier based on the zkVM version. It also lets you add or remove verifiers easily as things change. The best part? Your app only needs to link to the router once, so if there are any future changes to verifiers, you won’t have to redeploy your app. Check out the details here!
  • Current on-chain target: Right now, we’re focusing on a Groth16-based verifier for zkVM receipts, and it has versioning that’s managed through the router (plus deployments on testnets and mainnet). Want to learn more? Dive into it here!
  • Bonus: Here’s something neat--proof composition lets you verify other proof systems “inside” a zkVM program while still showing a single Groth16 receipt on-chain. Check out Pattern C below for more info! You can explore more about it here.

Governance Tip

If you're working with gateways or routers, it's super important to make sure they emit events for verifierAdded(ver, addr), and verifierFrozen(ver). Plus, you should have explicit allowlists for each program’s VK to stop any verifier substitution attacks in their tracks. Don’t forget--having freeze levers in place is crucial for handling emergencies. Check it out here: (github.com)


Pattern B -- Universal verification layers (attestation-first)

Instead of checking each new scheme on the EVM yourself, why not hand off the verification to a dedicated layer, like a restaked AVS or a specialized chain? This way, you can quickly and cost-effectively add verifiers. Your app just needs to connect once with a single on-chain attestation interface. Whenever the layer rolls out something like HyperPlonk or any other scheme, you’ll get to use it “for free” at the same contract address.

Two Live Options:

1) Aligned Layer (EigenLayer AVS, mainnet beta)

  • What it is: A universal verification layer that operates in two modes:
    • Proof Verification Layer (PVL): Here, operators take care of verifying native proofs off-chain. They then post a combined BLS signature to Ethereum, making it easy for dApps to grab the results on-chain. The base cost for a Layer 1 check is around 113k gas for the aggregated BLS, while a single-proof batch will set you back about 350k gas. But don't worry, when you batch it up (like 1024 proofs), the cost comes down to nearly nothing--think roughly 350 gas per proof, plus reading costs. You can dive deeper here.
    • Proof Aggregation Service (PAS): This one’s all about recursive aggregation for full cryptographic settlement on Ethereum, coming in at about 300k gas for a batch. Check out more here.
  • Supported verifiers today: Currently, we’ve got gnark Groth16/Plonk (BN254, BLS12-381), SP1, RISC Zero, and Circom onboard. Plus, there’s a roadmap that includes Kimchi/Jolt/Nexus. The cool part? When a new scheme gets enabled, you don’t have to add anything on-chain. More info can be found here.
  • Throughput: The PVL boasts an impressive claim of over 200 proofs per second on the mainnet beta, with tests showing it can handle multi-k proofs per second! This makes it a fantastic choice for rollups or applications that experience some heavy verification traffic from time to time. For more details, you can check this out.

When to decide: if you’re looking to keep on-chain gas costs low, want quick support for new provers, and are okay with restaking for crypto-economic security with PVL, or if you don’t mind paying extra for gas and latency with PAS. Check it out here: (blog.alignedlayer.com)

2) zkVerify (Substrate L1 for verification + cross-chain attestations)

  • What it is: Think of it as a specialized chain designed just for ZK proof verification, featuring an “Abstract Verifier” trait. New proof systems can easily slot in as pallets that stick to a standard interface (proof, VK, public inputs). You can integrate once, and then enjoy the benefits of attestations on your chosen chain through a bridge or messaging system (like Hyperbridge). Your contracts will read the results seamlessly; there's no need to redeploy when you add new verifiers. (docs.zkverify.io)
  • Current/announced support: We’re looking at a bunch of exciting proof systems like Groth16, Plonk, RISC Zero, SP1, Circom, zkSync Era, and UltraPlonk, with the roadmap only getting broader. (blog.zkverify.io)
  • Why it helps with HyperPlonk: The beauty here is that teams can deploy a HyperPlonk pallet just once. Any app that gets integrated can then utilize those attestations across different chains without messing around with its verifier contract. (docs.zkverify.io)

When should you make a choice? If you're leaning towards a specialized verification chain that uses modular verifiers and you plan on integrating top-notch systems (like multilinear ones) quicker than the EVM can roll out new curves or hashes at a reasonable gas price, then this is the route for you. Check out more details on GitHub.


Pattern C -- zkVM-as-meta-verifier: upgrade proofs by upgrading programs, not contracts

Here, you don’t need to mess with the on-chain verifier. Instead, you just verify the new scheme inside a zkVM program (which you can write in Rust) and then submit a single zkVM proof on-chain. If you want to use HyperPlonk, simply add the HyperPlonk verifier library to your zkVM program and update the program's VKEY on-chain; your app will keep calling the same gateway/router like before.

Two Ways to Get It Done:

  1. Method One:
    You can tackle this by following the step-by-step guide. It’s pretty straightforward and designed to make things easy for you. Just jump in and start with the first step!
  2. Method Two:
    Alternatively, if you prefer a hands-on approach, you might want to dive straight into the code. Take a look at this snippet for a quick start:

    # Sample code to get you rolling  
    def greet(name):  
        return f"Hello, {name}!"  
    print(greet("User"))  

Either way, you’re all set to get the job done!

  • SP1: You can check out other proofs within an SP1 program since there are libraries available for verifying gnark Plonk/Groth16 inside SP1. When it comes to the on-chain side, you still verify a Groth16/Plonk-wrapped SP1 proof through the reliable SP1VerifierGateway. The cool thing about this setup is that you get a consistent address while having the flexibility to swap out inner proof systems with just a simple program VK update. You can dive deeper into it here.
  • RISC Zero: For this one, you handle inner-proof verification inside the zkVM guest and then send a single Groth16 receipt to the Router. This also means you have just one on-chain address but with the ability to use different proof schemes. Want to learn more? Check it out here.

This pattern really shines when dealing with “non‑EVM‑friendly” curves, like BLS12‑381 if you don’t have a mainnet precompile, or even with multilinear commitments. Trying to verify these directly on EVM can get pretty pricey. But no worries! The zkVM takes care of the heavy lifting in terms of crypto, while the chain just looks at a simple, low-cost SNARK verifier. You can read more about it here.


Gas, latency, and curve constraints you must budget for

  • BN254 precompiles have become super affordable since the Istanbul update: ECADD is just 150 gas, ECMUL is around 6,000 gas, and the pairing operation runs about ~45,000 + 34,000·k gas. That’s why Groth16 and a lot of Plonk verifiers are focusing on BN254 for Ethereum. Just a heads up, if your new scheme is looking for a different curve or some non-standard arithmetic, EVM verification can really ramp up those gas costs. This is where a gateway/AVS or zkVM meta-verification can come in handy. (eips.ethereum.org)
  • When it comes to SP1 contract calls and EVM verification, you’re looking at roughly ~280k gas to check a proof, though it can vary based on your calldata size. Aligned’s PVL can help spread that out to about ~350 gas per proof for larger batches and around ~350k for a single proof, with around ~113k gas needed to check the aggregated BLS signature. So, it’s smart to plan according to your batching profile. (github.com)
  • Throughput-wise, Aligned PVL is hitting over 200 proofs per second on mainnet beta (even better in testing!). If you’re anticipating any traffic spikes--like oracle updates or machine learning inferences--make sure that the operator set from your provider and the batching windows align with your latency SLOs. (blog.alignedlayer.com)

What about HyperPlonk specifically?

HyperPlonk’s multilinear design is a game-changer! It tackles those pesky FFT bottlenecks and makes it super easy to support high-degree custom gates, which is perfect for complex circuits and zkVMs. Plus, some cool hardware acceleration work, like “Need for zkSpeed,” has shown that we can achieve massive prover speedups with dedicated MSM/sumcheck acceleration. This really points to the fact that the ecosystem is ready for these advancements. When you're thinking about your verifier strategy, consider rapid iteration as your go-to approach. Focus on aiming for plug-in upgrades instead of needing to redeploy everything. Check it out for more details: (eprint.iacr.org).

If you're looking to integrate “native HyperPlonk verification” into your app right now without having to go through another deployment, here's what you need to do:

  • Pattern A: You can extend an SP1 Gateway by adding a verifier for the new scheme (as soon as it's ready) and route your proofs through versioning. No need to change your app’s entrypoint! Check it out here: (github.com)
  • Pattern B: If you’re using a universal layer like Aligned or zkVerify, just ask them to onboard a HyperPlonk verifier. The best part? You won’t need to change anything on-chain except for using their attestation result. More info here: (blog.alignedlayer.com)
  • Pattern C: Fancy implementing a HyperPlonk verifier inside a zkVM guest (using Rust)? You can keep verifying the zkVM receipt on-chain with the stable router or gateway. The only thing that changes in your app is the program VK. Learn more about it here: (dev.risczero.com)

Implementation playbooks

Playbook 1 -- Stable address via gateway/router (SP1 or RISC Zero)

  1. First things first, deploy the vendor’s gateway/router just once and save its address in your app.
  2. In your app, store a program VKEY (bytes32) with a role-gated upgrade function and a timelock (think around 7-14 days) plus an emergency pause function.
  3. Whenever you have new proof systems or verifier versions, make sure to register them on the gateway and give everyone a heads-up through events. Keep the old ones frozen but preserved for any forensic needs.
  4. Keep a close eye on things: set alerts for “verifierAdded/frozen” events and make sure to auto-block any unexpected versions per program using allowlists. Check it out on github.com.

Security notes:

  • Consider the VKEY hash and “SRS ceremony ID” as key elements of your program's domain separation; any changes to these should go through proper governance.
  • When your public inputs contain commitments or hashes, make sure to check that their domain tags align with what your app is expecting. This helps avoid any proof replay across different domains. (github.com)

Playbook 2 -- Universal verification layer (Aligned PVL/PAS)

  1. Hook up the layer's client/SDK so you can submit proofs off-chain and grab those on-chain attestations.
  2. Think about the trade-off between latency and cost: you’ve got PVL, which is quicker and cheaper with restaked security, versus PAS, which involves recursive settlement sitting at around 300k gas.
  3. If you're working with a new scheme like HyperPlonk, team up with the layer to get its verifier rolling; your contract will still be tapping into the same attestation interface.
  4. Don't forget to fine-tune your batch size: aim to maximize the number of proofs per batch to spread out the BLS verification costs, and keep an eye on the end-to-end confirmation time. (blog.alignedlayer.com)

Playbook 3 -- zkVM meta-verifier

  1. First things first, you’ll want to throw a verifier library for the target scheme into your zkVM guest program.
  2. Next up, prove within the zkVM that the target proof has been verified correctly, and then make sure to expose any “public values” that your app relies on.
  3. When it comes to the on-chain part, stick with the same verifier gateway address; just upgrade the program VKEY in your app contract.
  4. During the transition, keep both the old and new programs valid, but make sure to reject the old VKEY once the window closes. (dev.risczero.com)

So, you’re already using SP1 to check out complex business logic:

  • Today: Your app is hitting up ISP1Verifier at a specific gateway address using PROGRAM_VKEY_A. Check it out here: github.com.
  • Tomorrow: You’re looking to start accepting HyperPlonk proofs for something like a machine learning inference. Just pop a HyperPlonk verifier into your SP1 program and bump it up to PROGRAM_VKEY_B. The great news? Your Solidity code stays the same; it’s just the VKEY that gets an update.
  • Gas impact: It’s still hanging around the ~hundreds of kGas range for each proof (this will depend on the size of your calldata). And no fancy curve gymnastics on Ethereum here, since the zkVM proof is based on Groth16/Plonk over BN254. For more info, you can check this out: github.com.

Alternatively, you can integrate Aligned:

  • Once Aligned adds that verifier, you can submit a HyperPlonk proof to them. Your on-chain reads come in at roughly 113k gas per batch as a base, which can dip down to about 350 gas per proof when you hit 1024 proofs, all while following the same contract call path. No redeploys are needed! You can find more details here: (blog.alignedlayer.com)

Emerging best practices (2026)

  • Go for a gateway/router that has explicit versioning and an emergency freeze feature. It’s the best way to maintain a stable on-chain interface while adding new verifiers. Check out SP1’s Verifier Gateway and RISC Zero’s Router designs for inspiration. (github.com)
  • Make sure to pin and rotate your verification keys using governance. Keep a VKEY hash for each program, let changeVKey(vkHash) be behind a timelock, and make sure to emit events that show the old and new hashes along with the reason for the change. (github.com)
  • If you really need to verify natively on Ethereum L1, stick with BN254. Thanks to the post-Istanbul gas cuts, BN254-based pairings are cost-effective; for anything else (like BLS12-381 without a precompile), it’s better to route through Pattern B or C. (eips.ethereum.org)
  • Think ahead for multilinear and recursion. The SP1 Hypercube and related multilinear research suggest that proof backends are evolving fast; design your app architecture so that the on-chain surface stays consistent (using a gateway) while your backends can adapt over time. (blog.succinct.xyz)
  • Whenever you can, use formalized or community-verified verifiers. Keep an eye on the “verified verifiers” initiatives from ZKProof.org for some solid reference implementations and processes. (zkproof.org)
  • If you're working cross-chain, choose layers that can easily bridge attestations across the board (like zkVerify + Hyperbridge). This way, you’ll only need one integration as you grow. (blog.zkverify.io)

Deep dive: why not “just redeploy a new Solidity verifier”?

  • Every time a scheme gets swapped out, it’s a whole new ball game: new contracts, fresh audits, and a handful of new addresses for partners to keep track of.
  • When you're dealing with EVM native verification for new protocols, expect to navigate new arithmetic paths and higher gas fees--this is especially true for multilinear schemes and non-BN254 curves. Sure, BN254 precompiles are pretty affordable, but everything else can be a real hassle these days. (eips.ethereum.org)
  • With gateways, routers, and universal layers, you can manage the chaos of cryptography updates while keeping a stable app experience for users.

If you really need to go native, you can check out frameworks like gnark and barretenberg. They can whip up Solidity verifiers (think UltraHonk), but keep in mind that you’ll usually have to redeploy for each scheme or circuit. Plus, you might run into size or gas limits on mainnet. While that's okay for research pilots, it’s not ideal for production where having stable addresses is key. (docs.gnark.consensys.io)


What we recommend at 7Block Labs

  • If you’re working with L1 Ethereum or EVM L2 apps that need decent throughput and strong integration stability, go for a verifier gateway/router like SP1 or RISC Zero. This way, you’ll stick with one contract address and can gradually add prover backends as your needs evolve. Check it out here: (github.com).
  • Now, if your plans involve high throughput or juggling multiple schemes (think HyperPlonk, Kimchi, Jolt, SP1, RISC Zero all in one app), you'd want to use a universal verification layer like Aligned or zkVerify. They’ll have your back with immediate support as they introduce new verifiers, plus you’ll enjoy minimal gas costs and won’t need to redeploy your app every time. More info here: (blog.alignedlayer.com).
  • For those testing out new multilinear schemes while waiting for native EVM support to roll in, give zkVM meta-verification a shot. You can verify HyperPlonk within SP1/RISC Zero and just keep a single on-chain verifier endpoint. You’ll only need to rotate the program VKEYs using timelock governance. Dive deeper here: (dev.risczero.com).

Appendix -- Quick reference

  • HyperPlonk Overview: This focuses on multilinear setups with no FFT and custom gates for high degrees. Check it out here.
  • SP1 Hypercube: Dive into the multilinear zkVM, which includes real-time proving benchmarks for Ethereum and the thought process behind the architecture. More details are available here.
  • SP1 Verifier Gateway Contracts: Want to know how these contracts work and how to use them? Find everything you need on GitHub.
  • RISC Zero Router & Verifier Contracts: You can explore the details of these contracts in depth at Be Boundless.
  • Aligned Layer PVL/PAS: Get the scoop on the costs, throughput, and supported verifiers in this informative post. Check it out here.
  • zkVerify Abstract Verifier: Learn about the supported verifiers and the rollout across different chains through their documentation here.
  • EVM BN254 Precompile Gas: If you’re curious about gas after Istanbul and EIP-1108, you'll find the details here.

In short

If you're looking to incorporate HyperPlonk (or the next generation of multilinear schemes) without having to redeploy your verifier, here's what you need to do:

  • Set up a verifier gateway or router to handle verifiers like interchangeable modules, or
  • Roll out a universal verification layer that allows easy addition of new provers, or
  • Validate the new proof system within a zkVM program and maintain just one on-chain verifier.

All three options help keep your on-chain address steady while ensuring your roadmap is future-proof as proof systems change. Plus, they won’t slow down your product whenever there's progress in the crypto space. Check it out on GitHub!


Like what you're reading? Let's build together.

Get a free 30-minute consultation with our engineering team.

7BlockLabs

Full-stack blockchain product studio: DeFi, dApps, audits, integrations.

7Block Labs is a trading name of JAYANTH TECHNOLOGIES LIMITED.

Registered in England and Wales (Company No. 16589283).

Registered Office address: Office 13536, 182-184 High Street North, East Ham, London, E6 2JA.

© 2026 7BlockLabs. All rights reserved.