Groth16
Pairing · BN254
Single verify. Light Protocol compatible, battle-tested on Solana L1.
Proof-system-agnostic on-chain verification for Solana. One API, multiple proving systems, no Groth16 wrapping required.

On-chain verify
83,574
CU · Groth16 single
Benchmarks
Measured on Solana with real compute budgets. Phase-1 and Phase-2 components are frozen at production quality.
Coverage
Pick a proving system with a single generic parameter. Today Groth16 and PLONK are production-ready; four more families have structural scaffolds in place.
Pairing · BN254
Single verify. Light Protocol compatible, battle-tested on Solana L1.
Pairing · BN254 · N=5
Amortized multi-proof verification in a single instruction.
Universal · BN254
Universal SRS, one trusted setup serves every circuit.
Universal · BN254
Boolean-hypercube sumcheck. Structural scaffold complete.
Universal · BN254
PLONKish arithmetization with KZG commitments.
Transparent · Hash-based
Transparent setup, post-quantum security. No pairings.
Folding · IVC
Nova / HyperNova / ProtoStar folding schemes for IVC.
Phase-3 means the structural scaffold is complete and compute-unit budgets are estimated; production hardening and external audit follow.
Coverage
Most Solana verifiers are locked to a single proof paradigm. Mosaic verifies six families, pairing, universal, transparent and folding, through one API.
Pairing-only
STARK-only
Folding-only
Mosaic
How it works
The proving system is a type parameter. Change it and your instruction handler, client and tests stay exactly the same.
use mosaic_core::{ProofSystem, ProofSystemId};
use mosaic_groth16::Groth16Verifier;
let backend = mosaic_core::syscall::host::HostBackend::new();
let verifier = Groth16Verifier::<_, false>::new(&backend);
verifier.verify(&vk_bytes, &proof_bytes, &public_inputs_bytes)?;
Why Mosaic
One audited substrate that treats proving systems as interchangeable parts, so your program logic never has to care which one you chose.
Select a proving system via a generic parameter. Swap Groth16 for PLONK or Nova without touching your program logic.
Run PLONK, HyperPlonk, Halo2, STARK and folding schemes natively on Solana L1, no awkward re-proving step.
50% bandwidth savings for Groth16 and 40–42% for PLONK / Nova, with 10 dedicated fuzz harnesses guarding the codecs.
Every curve operation is delegated to ark-bn254 or audited Solana syscalls. Mosaic is plumbing, not new cryptography.
A LE_INPUTS const generic plus a FormatTag wire enum keep the serialized layout stable as new systems land.
549+ differential tests and 152+ proptest sessions check on-chain output against an arkworks reference, every run.
Architecture
Four design rules keep Mosaic deterministic on-chain, rich off-chain, and forward-compatible as new proof systems land.
A single byte-slice API. The dispatcher monomorphizes each system through an exhaustive match, zero dynamic dispatch on the hot path.
Deterministic OnChainError for the program, rich DiagnosticError for off-chain tooling. The chain stays cheap; developers stay informed.
One SyscallBackend trait bridges arkworks host tests and Solana syscalls, so the same verifier runs in CI and on-chain unchanged.
A LE_INPUTS const generic and FormatTag wire enum version the byte format, so new proof systems extend the wire without breaking it.
Composable
Every proof system is one tile on the same substrate. Compose them, swap them, and they still fit a single surface.
Hover, or tap, to play with the grid.
Add two crates, pick a proving system, and verify. The same code runs in your tests and on-chain, unchanged.