Skip to content
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

[CHECKLIST] PLONK Circuits implementation #82

Open
11 of 12 tasks
lazovicff opened this issue Dec 20, 2021 · 0 comments
Open
11 of 12 tasks

[CHECKLIST] PLONK Circuits implementation #82

lazovicff opened this issue Dec 20, 2021 · 0 comments
Labels

Comments

@lazovicff
Copy link
Contributor

lazovicff commented Dec 20, 2021

Overview

We want to extend our suite of protococl implementations to one using PLONK as the zkSNARK backend. This requires rewriting our gadgets in the language of PLONK gates, using the external library developed against arkworks:

We will continue to build out our toolchain in our repo below in a plonk folder.

General Protocol sketches

For each of these circuits, we apply roughly the same set of constraints. We have an object called notes or UTXOs that we use to represent private transaction data. We require a prover to prove that they possess a note or a UTXO in order to satisfy the circuit. The proof of knowledge of the note or the UTXO amounts to proving knowledge of the preimage of the hash of the note or UTXO.

Then, we must prove that this note or UTXO commitment is inside a set of merkle tree roots. This is done by providing a merkle tree proof path, constructing a root, and then providing a set of difference values (needed for the next step) in order to prove that an element, the root, is inside a set of roots.

We have all these gadgets and components implemented in a few places, so there should be enough resources to begin to understand this further.

VAnchor Circuit

The VAnchor circuit is a UTXO based zk-circuit. It verifies that a public input, a set of UTXOs, and a set of output UTXO commitments are properly formatted and ensures the values of inputs match the values of outputs. We then verify that each input is in one of many merkle trees.

The reference implementations for these circuits currently can be found here:

Anchor Circuit

The Anchor circuit is a fixed sized transaction system, meaning it only supports a specific fixed value deposit. This means that notes on this system don't contain asset values. This circuit only verifies that a deposit is formatted correctly and that it exists in one of many merkle trees.

The reference implementations for these circuits currently can be found here:

Notes

Checklist

Auxiliary resources

Poseidon implementations

Questions / Issues

@drewstone drewstone changed the title [SPEC] Plonk implementation [CHECKLIST] Plonk implementation Dec 20, 2021
@drewstone drewstone changed the title [CHECKLIST] Plonk implementation [CHECKLIST] PLONK implementation Dec 20, 2021
@drewstone drewstone changed the title [CHECKLIST] PLONK implementation [CHECKLIST] PLONK Circuits implementation Dec 20, 2021
@drewstone drewstone moved this to In Progress in Zero-knowledge Jan 10, 2022
@dutterbutter dutterbutter moved this to Not Started 🕧 in Webb Universe Apr 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Not Started 🕧
Status: In Progress
Development

No branches or pull requests

3 participants