# UniPlonk Notes
- UniPlonK starts from the simple observation that although two Plonk circuits C1, C2 may have unequal
sizes n1 ̸= n2, their proofs and verifying keys have the same size. - Examining the Plonk verifier protocol,
we see that if their public input lengths are equal, the C1 and C2 verifiers perform nearly identical work.
- The cost of the Universal Verifier is at least that of the most expensive verifier for any circuit in the supported family. We therefore have a trade-off between the flexibility offered by supporting a large family of circuits and the need to pay the worst-case verifier cost for any circuit in the family. However, as we discuss, this overhead is extremely small in comparison to the underlying circuit-independent verification cost and is justified by its utility in recursion-based proof aggregation.
- ![image](https://hackmd.io/_uploads/BJQopvci6.png)
- To solve the first problem, recent works such as aPlonk [1], SnarkPack [14], and Halo Infinite [6]
partially move some of the expensive non-native arithmetic, e.g. pairing, out of the outer circuit. They
replace individual pairing checks for each proof with a single pairing check for a random linear combination of the proofs. The verifier only needs to check the accumulated pairing, which they can do out
of circuit. This results in a more efficient aggregator.
- UniPlonk could be combined with either atomic accumulation-based aggregation or folding-based
aggregation to create Universal ZK-ZK Aggregation scheme with:
• Prover Separation: The inner prover and the outer prover (aggregator) are not the same party.
• Witness Privacy: The outer prover only has access to the inner proofs, not the witnesses. This is
very useful in privacy-preserving ZK primitives such as Semaphore.
• Universality: The inner prover can support all circuits up to a certain size
## Overview
For a given circuit C, the UniPlonk Setup process produces a verification key vk which is augmented
with metadata about C that facilitates constant-time verification. The proving key for UniPlonk is the
unchanged proving key pkP from Plonk and can be used with a standard Plonk prover (where the prover
follows the conventions we give here for seeding the transcript, and shares the srs and other constants
with the UV). Given a Plonk proof π
P for a circuit C, with public inputs PI, a uniformization step
accepts π
P , PI, and augmented vk and outputs a proof π of fixed size, compatible with the universal
12
verifier. The UV then takes as inputs the augmented verification key vk, the transformed proof π, and
a commitment [PI]1 to the public inputs.
## Vanilla UniPlonk
We let C be the family of Plonk circuits defined over a common field F having at most N = 2K rows and
using some common set of public parameters (see Definition 1). Our goal is to construct a UV, a single
algorithm that uses a fixed sequence of operations to verify the proof of any circuit in the family C. This
UV may then be used to define a single recursive verifier circuit that applies to the entire family C.