ByAUJay
Summary: If you want to add support for a new proving scheme like HyperPlonk without redeploying your whole verifier, use one of three patterns: (1) an on-chain “verifier gateway/router” that stays at a stable address while new verifier implementations are registered behind it, (2) a universal verification layer that attests to proof validity and exposes a single on-chain interface, or (3) a zkVM-as-meta‑verifier that verifies any proof inside a zkVM program and only checks the zkVM proof on-chain. Below we compare concrete frameworks, gas/latency tradeoffs, and rollout steps with examples and gotchas.
Which Frameworks Let Me Add Support for New Proving Schemes Like HyperPlonk Without Redeploying My Entire Verifier?
Decision-makers are rightly asking: how do we keep our on-chain interface stable while ZK cryptography evolves from Groth16/Plonk to multilinear protocols such as HyperPlonk or SP1 Hypercube? You don’t want to change contract addresses, interrupt integrations, or re-audit a monolith every time a new scheme ships. Here are the architectures that let you plug in new proof systems with minimal contract churn—and the real-world frameworks that implement them today.
- Pattern A: Verifier gateways/routers on L1/L2
- Pattern B: Universal verification layers (restaked AVS or specialized chains)
- Pattern C: zkVM-as-meta-verifier (verify new proofs inside a zkVM program)
We also share concrete deployment patterns, governance and risk controls, and gas/latency data points so you can choose the path that fits your budget and risk profile. (docs.succinct.xyz)
Why this matters now: multilinear proof systems are landing
HyperPlonk adapts Plonk to the boolean hypercube with multilinear commitments and sumcheck, removing FFTs and enabling high-degree custom gates with linear-time proving. That is attractive for complex business logic and zkVMs—but EVM-native verification of new multilinear schemes may require different curves/hashes and new arithmetic, so you need an upgrade path that doesn’t force app-level redeploys. (eprint.iacr.org)
In parallel, Succinct’s SP1 Hypercube has moved zkVM proving toward “real-time,” architected around multilinear polynomials. The proving system changed under the hood, but on-chain they keep a stable verifier interface via a gateway. That’s the model to emulate. (blog.succinct.xyz)
Pattern A — On-chain verifier “gateway/router” at a stable address
The idea: publish one contract address that your application calls forever. Behind it, you register or route to new verifier implementations by version or scheme. Your app never changes its call site, and you can freeze or rotate vulnerable verifiers.
Two production-grade examples:
1) SP1 Verifier Gateway (EVM)
- How it works: App contracts call the SP1VerifierGateway via a single interface (ISP1Verifier). The gateway auto-routes proofs to the correct verifier based on version and proving system (Plonk or Groth16). New verifier implementations can be deployed and added to the gateway; old ones may be frozen if there’s an issue. (github.com)
- Dev ergonomics:
- Solidity side: import ISP1Verifier; call verifyProof(programVKHash, publicValues, proofBytes). The gateway remains stable while SP1 adds new verifier versions. (github.com)
- Rust side: your SP1 program compiles to a program verification key (VKEY) you pin on-chain; proof verification on-chain is ~hundreds of kGas depending on proof type and calldata size (SP1 tooling shows ~280k gas for contract-call example). (github.com)
- When to choose: you want a stable on-chain address and a vendor-managed pipeline for verifier upgrades across schemes (e.g., current Groth16/Plonk wrappers, future multilinear backends). (github.com)
Example Solidity snippet:
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 in this example is a deployed gateway; consult the repo’s deployments for your chain. (github.com)
2) RISC Zero Verifier Router
- How it works: RISC Zero provides a Router contract that forwards verify() calls to the correct base verifier based on zkVM version, with managed addition/removal of verifiers as the stack evolves. Your app links to the router once; future verifier changes don’t require an app redeploy. (docs.beboundless.xyz)
- Current on-chain target: a Groth16-based verifier for zkVM receipts, with router-managed versioning (and deployments on testnets/mainnet). (dev.risczero.com)
- Bonus: proof composition means you can verify other proof systems “inside” a zkVM program and still present a single Groth16 receipt on-chain (see Pattern C below). (dev.risczero.com)
Governance tip: Gateways/routers should emit events for “verifierAdded(ver, addr)”, “verifierFrozen(ver)”, and should expose explicit allowlists per program VK to prevent verifier substitution attacks. Freeze levers are critical for emergency response. (github.com)
Pattern B — Universal verification layers (attestation-first)
Rather than verifying every new scheme on the EVM, outsource verification to a specialized layer (restaked AVS or dedicated chain) that can add verifiers rapidly and cheaply. Your application integrates once with a single on-chain attestation interface. When the layer adds HyperPlonk or any other scheme, you get 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 with two modes:
- Proof Verification Layer (PVL): operators verify native proofs off-chain, then post an aggregated BLS signature to Ethereum. dApps read per-proof results on-chain. Base L1 check is ~113k gas for the aggregated BLS, and a single-proof batch costs ~350k gas; cost amortizes to near-zero per proof when batching (e.g., ~350 gas per proof at 1024 proofs, plus reading costs). (blog.alignedlayer.com)
- Proof Aggregation Service (PAS): recursive aggregation for full cryptographic settlement on Ethereum at ~300k gas per batch. (blog.alignedlayer.com)
- Supported verifiers today: gnark Groth16/Plonk (BN254, BLS12-381), SP1, RISC Zero, Circom; roadmap includes Kimchi/Jolt/Nexus. You add nothing on-chain when a new scheme is enabled. (docs.alignedlayer.com)
- Throughput: PVL claims 200+ proofs/sec on mainnet beta (tests show up to multi‑k pps). Great for rollups or apps with bursty verification traffic. (blog.alignedlayer.com)
When to choose: you want minimal on-chain gas, fastest time-to-support for new provers, and are comfortable with restaking crypto‑economic security for PVL or pay the extra gas/latency for PAS. (blog.alignedlayer.com)
2) zkVerify (Substrate L1 for verification + cross-chain attestations)
- What it is: a dedicated chain for ZK proof verification with an “Abstract Verifier” trait. New proof systems are added as pallets that conform to a generic interface (proof, VK, public inputs). A single integration can consume attestations on your target chain via bridge/messaging (e.g., Hyperbridge). Your contracts read the results; you don’t redeploy when new verifiers are added. (docs.zkverify.io)
- Current/announced support: Groth16, Plonk, RISC Zero, SP1, Circom, zkSync Era, UltraPlonk; the roadmap keeps expanding. (blog.zkverify.io)
- Why it helps with HyperPlonk: teams can ship a HyperPlonk pallet once; any integrated app can then consume those attestations cross-chain without touching its verifier contract. (docs.zkverify.io)
When to choose: you prefer a purpose-built verification chain with modular verifiers and expect to add cutting-edge systems (including multilinear) faster than the EVM can support new curves/hashes at acceptable gas. (github.com)
Pattern C — zkVM-as-meta-verifier: upgrade proofs by upgrading programs, not contracts
Here you never change the on-chain verifier. Instead, you verify the new scheme inside a zkVM program (written in Rust), then submit a single zkVM proof on-chain. To adopt HyperPlonk, add a HyperPlonk verifier library to your zkVM program and update the program’s VKEY on-chain; your app continues calling the same gateway/router.
Two ways to do it:
- SP1: verify other proofs inside an SP1 program (libraries exist for verifying gnark Plonk/Groth16 inside SP1). On-chain, you still verify a Groth16/Plonk-wrapped SP1 proof via the stable SP1VerifierGateway. This gives you a constant address, but freedom to change inner proof systems with only a program VK update. (docs.rs)
- RISC Zero: do inner-proof verification inside the zkVM guest, then submit a single Groth16 receipt to the Router. Again: one on-chain address, flexible inner proof scheme. (dev.risczero.com)
This pattern is particularly helpful for “non‑EVM‑friendly” curves (e.g., BLS12‑381 in the absence of a mainnet precompile) or multilinear commitments, where native EVM verification would be costly. The zkVM handles the heavy crypto; the chain sees a fixed, cheap SNARK verifier. (eips.ethereum.org)
Gas, latency, and curve constraints you must budget for
- BN254 precompiles are cheap post‑Istanbul: ECADD 150 gas, ECMUL 6,000 gas, and pairing ~45,000 + 34,000·k gas, which is why Groth16 and many Plonk verifiers target BN254 on Ethereum. If your new scheme needs a different curve or non-standard arithmetic, native EVM verification can spike gas. This is exactly when a gateway/AVS or zkVM meta‑verification helps. (eips.ethereum.org)
- SP1 contract-call and EVM verification examples show ~280k gas for a proof check, depending on calldata size; Aligned’s PVL can amortize to ~350 gas per proof for large batches and ~350k for a singleton, with ~113k gas to check the aggregated BLS signature. Plan around your batching profile. (github.com)
- Throughput: Aligned PVL demonstrates 200+ proofs/sec on mainnet beta (much higher in testing). If you expect spikes—e.g., oracle updates or ML inferences—make sure your provider’s operator set and batching windows match your latency SLOs. (blog.alignedlayer.com)
What about HyperPlonk specifically?
HyperPlonk’s multilinear design removes FFT bottlenecks and supports high‑degree custom gates—a great fit for complex circuits and zkVMs. Hardware acceleration work (e.g., “Need for zkSpeed”) shows orders-of-magnitude prover speedups via dedicated MSM/sumcheck acceleration, suggesting ecosystem readiness. Your verifier strategy should assume rapid iteration and aim for plug‑in upgrades, not redeploys. (eprint.iacr.org)
If you want to expose “native HyperPlonk verification” to your app today without redeploying:
- Pattern A: Extend an SP1 Gateway by adding a verifier for the new scheme (once available) and route proofs via versioning. Your app keeps the same entrypoint. (github.com)
- Pattern B: Ask your universal layer (Aligned/zkVerify) to onboard a HyperPlonk verifier; you change nothing on-chain beyond consuming their attestation result. (blog.alignedlayer.com)
- Pattern C: Implement a HyperPlonk verifier inside a zkVM guest (Rust), and keep verifying the zkVM receipt on-chain via the stable router/gateway. Only the program VK changes in your app. (dev.risczero.com)
Implementation playbooks
Playbook 1 — Stable address via gateway/router (SP1 or RISC Zero)
- Deploy the vendor’s gateway/router once; pin its address in your app.
- Store a program VKEY (bytes32) in your app with a role-gated upgrade function and a timelock (e.g., 7–14 days) plus emergency pause.
- For new proof systems or verifier versions, register them on the gateway and announce via events; keep old ones frozen-but-preserved for forensics.
- Monitor: set alerts on “verifierAdded/frozen” events; auto-block unexpected versions per-program via allowlists. (github.com)
Security notes:
- Treat VKEY hash and “SRS ceremony ID” as part of your program’s domain separation; changing either should require governance.
- If your public inputs encode commitments/hashes, verify their domain tags match your app’s expected schema to prevent proof replay across domains. (github.com)
Playbook 2 — Universal verification layer (Aligned PVL/PAS)
- Integrate the layer’s client/SDK to submit proofs off-chain and consume on-chain attestations.
- Decide latency vs cost: PVL (faster/cheaper, restaked security) vs PAS (recursive settlement at ~300k gas).
- For a new scheme (e.g., HyperPlonk), coordinate with the layer to enable its verifier; your contract keeps reading the same attestation interface.
- Add batch-size tuning: maximize per-batch proofs to amortize BLS verification cost; measure end-to-end confirmation time. (blog.alignedlayer.com)
Playbook 3 — zkVM meta-verifier
- Add a verifier library for the target scheme into your zkVM guest program.
- Prove inside the zkVM that the target proof verified correctly, then expose whatever “public values” your app expects.
- On-chain: keep the same verifier gateway address; upgrade only the program VKEY in your app contract.
- Keep both old and new programs valid during a transition window; reject old VKEY after the window. (dev.risczero.com)
Practical example: add “HyperPlonk-in” without changing your Solidity
Suppose you already use SP1 to verify complex business logic:
- Today: your app calls ISP1Verifier at a fixed gateway address with PROGRAM_VKEY_A. (github.com)
- Tomorrow: you want to accept HyperPlonk proofs for a sub-module (e.g., a ML inference). Implement a HyperPlonk verifier inside your SP1 program, bump to PROGRAM_VKEY_B. Your Solidity stays the same; only the VKEY changes.
- Gas impact: still in the ~hundreds of kGas range per proof (depends on calldata size). No curve gymnastics on Ethereum, because the zkVM proof is Groth16/Plonk on BN254. (github.com)
Alternatively, integrate Aligned:
- You submit a HyperPlonk proof to Aligned once they add that verifier. Your on-chain reads an attested result for ~113k gas per batch base (down to ~350 gas/proof at 1024 proofs), with the same contract call path. No redeploys. (blog.alignedlayer.com)
Emerging best practices (2026)
- Use a gateway/router with explicit versioning and emergency freeze. It’s the cleanest way to keep a stable on-chain interface while you add verifiers. See SP1’s Verifier Gateway and RISC Zero’s Router designs. (github.com)
- Pin and rotate verification keys with governance: keep a VKEY hash per program, expose changeVKey(vkHash) behind a timelock, and emit events with old/new hashes and reason. (github.com)
- Prefer BN254 on Ethereum L1 if you must verify natively. Post‑Istanbul gas cuts make BN254-based pairings economical; anything else (e.g., BLS12‑381 without precompile) should go through Pattern B or C. (eips.ethereum.org)
- Plan for multilinear and recursion: SP1 Hypercube and related multilinear research indicate fast-moving proof backends; architect your app boundary so the on-chain surface is invariant (gateway) while backends evolve. (blog.succinct.xyz)
- Use formalized or community-verified verifiers where possible and watch “verified verifiers” efforts from ZKProof.org for reference implementations and processes. (zkproof.org)
- If you operate cross-chain, prefer layers that can bridge attestations broadly (e.g., zkVerify + Hyperbridge) to keep one integration as you expand. (blog.zkverify.io)
Deep dive: why not “just redeploy a new Solidity verifier”?
- Every scheme swap means new contracts, new audits, and new addresses for partners to update.
- EVM native verification of new protocols often means new arithmetic paths and higher gas—especially for multilinear schemes and non‑BN254 curves. BN254 precompiles are cheap; everything else is harder today. (eips.ethereum.org)
- Gateways/routers and universal layers let you absorb cryptography churn behind a stable app boundary.
If you must go native, frameworks like gnark and barretenberg can generate Solidity verifiers (e.g., UltraHonk), but you’ll typically redeploy for each scheme/circuit and may hit size/gas constraints on mainnet. That’s manageable for research pilots, not for production where you want stable addresses. (docs.gnark.consensys.io)
What we recommend at 7Block Labs
- For L1 Ethereum or EVM L2 apps with medium throughput and strict integration stability: adopt a verifier gateway/router (SP1 or RISC Zero). You’ll keep one contract address and add prover backends over time. (github.com)
- For high‑throughput or multi‑scheme roadmaps (e.g., you expect HyperPlonk, Kimchi, Jolt, SP1, RISC Zero in one app): use a universal verification layer (Aligned or zkVerify). You get immediate support as they add verifiers, minimal gas, and no app-level redeploys. (blog.alignedlayer.com)
- For teams experimenting with new multilinear schemes before native EVM support lands: use zkVM meta‑verification. Verify HyperPlonk inside SP1/RISC Zero and keep a single on-chain verifier endpoint. Rotate only program VKEYs with timelock governance. (dev.risczero.com)
Appendix — Quick reference
- HyperPlonk overview (multilinear, no FFT, high-degree custom gates). (eprint.iacr.org)
- SP1 Hypercube (multilinear zkVM; real-time Ethereum proving benchmarks and architecture rationale). (blog.succinct.xyz)
- SP1 Verifier Gateway contracts and usage. (github.com)
- RISC Zero Router and verifier contracts. (docs.beboundless.xyz)
- Aligned Layer PVL/PAS, costs and throughput; supported verifiers. (blog.alignedlayer.com)
- zkVerify Abstract Verifier, supported verifiers, and cross-chain rollout. (docs.zkverify.io)
- EVM BN254 precompile gas (post‑Istanbul, EIP‑1108). (eips.ethereum.org)
In short
If you want to add HyperPlonk (or the next wave of multilinear schemes) without redeploying your verifier:
- Put a verifier gateway/router in front and treat verifiers as hot‑swappable modules, or
- Integrate a universal verification layer once and let them add new provers, or
- Verify the new proof system inside a zkVM program and keep a single on-chain verifier.
All three keep your on-chain address stable and your roadmap future‑proof as proof systems evolve—without grinding your product to a halt each time the crypto advances. (github.com)
Like what you're reading? Let's build together.
Get a free 30‑minute consultation with our engineering team.

