-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for arbitrary zKEVM types pre 2-to-1 aggregation #622
Comments
Multi-Provers Aggregation designSummarizing the description above, we'd obtain something as is: flowchart TD
subgraph "Prover State (Type 1)"
A1["Segment circuit"] --> A2["Segment aggregation circuit"]
A2 --> A3["Batch aggregation circuit"]
A3 --> A4["Block circuit"]
A4 --> A5["Block wrapper circuit"]
end
subgraph "Prover State (Type 1')"
B1["Segment circuit"] --> B2["Segment aggregation circuit"]
B2 --> B3["Batch aggregation circuit"]
B3 --> B4["Block circuit"]
B4 --> B5["Block wrapper circuit"]
end
subgraph "Prover State (Type 2)"
C1["Segment circuit"] --> C2["Segment aggregation circuit"]
C2 --> C3["Batch aggregation circuit"]
C3 --> C4["Block circuit"]
C4 --> C5["Block wrapper circuit"]
end
subgraph "Aggregator State"
D1["Block aggregation circuit"]
end
A5 --finalized proof<br>b1 thru b100--> D1
B5 --finalized proof<br>b60 thru b70--> D1
C5 --finalized proof<br>b1000 thru b2000--> D1
D1 --> E1{{"Aggregated proof"}}
where:
Aggregator initializationGiven a set of known prover states (for each flavor of zkEVM we need to support), we would then initialize a common aggregator based of each individual prover states' final circuits (i.e. block wrapper1). In a production setting, we would probably host a verified version of all officially supported prover states and their combined aggregator state, but for the time being, we'd need some local way of generating them. Open Questions
Proof files identifiersWe currently write to disk block proofs as Verifier binaryThe verifier binary currently (as of #656) supports verifying all 3 highest level proofs (block / wrapper / aggreg). As it is generated from its prover counterpart, following the separation of Aggregator input types#656 currently only supports Open Questions
Footnotes
|
Sharing some thoughts I had with @muursh to the greater audience.
We currently have all the circuits living in
AllRecursiveCircuits
struct, which are flavor specific (by flavor I mean here the specific type of zkEVM, not just Type-1 vs Type-2 but also the intrinsic differences of chains aiming at using a given type, for instance ImmutableX chain vs Polygon PoS chain).We made the choice of supporting conditional compilation in the KERNEL to improve developer experience and reduce the proving overhead, by not having to perform conditional branching over all existing variants we aim at supporting on several places of the ASM code.
However because of how all our circuits are arranged, this makes the two final layers (block wrapper, chain specific, and 2-to-1 aggreg, chain agnostic) pegged to a given zkEVM flavor version.
Instead, I'm proposing to decouple these from the current, chain-specific,$N$ -conditional selective verification circuit (while preserving its current opacification of remaining chain-private data), where `$N$ is the number of distinct flavor circuits that would be supported.
AllRecursiveCircuits
object, and turn theblock-wrapper
layer into aIf circuit size is a concern (for the 2-to-1 aggregation step specifically), we can internally make the wrapping stage a 2-step phase to shrink the proof to be emitted to the AggLayer for aggregation with others.
The text was updated successfully, but these errors were encountered: