arkworks-rs/snark

Implement PLONK

jon-chuang opened this issue · 7 comments

Why? Very fast. Universal setup + proof composition = dark contracts.

Original PLONK
SHPLONK (non-essential): Multiple commits
TurboPLONK: Custom gates (e.g. EC point addition gates, can make pairing computation extremely cheap!)
PLOOKUP : Pedersen hashes. Extension: permutation networks for branching programs/RAM?

Zexe PLONK: PLONK single-layer rollup with BLS12-377 + BW6-761

Things to Investigate

  • Whether using methods similar to TurboPLONK, not only elliptic curve point addition, but also pairing/G2 ops can be made primitive

If you're looking to work on this, there is a Rust implementation here: https://github.com/dusk-network/plonk/

btw we have an implementation of a similar universal setup SNARK (Marlin) here: https://github.com/scipr-lab/marlin.

@Pratyush has anyone started working on this (an ArkWorks implementation of plonk)?

It's a port of the dusk implementation indeed.

I'm getting up to speed on the plonk implementation in halo 2 and the abstraction of flexible proving systems with custom gates is really cool. Maybe an adaptation of that would be nicer.

cc @daira

daira commented

We'd love a Halo 2 implementation in Arkworks! It's a bit early to do that, though.

We'd love a Halo 2 implementation in Arkworks! It's a bit early to do that, though.

Just to be clear, I was referring to how PLONK is implemented, and the proving system abstraction. Not specifically Halo 2 :)

That said, it would be really cool as well!

@kobigurk I think halo2 is more or less a (very flexible) plonk framework though? (Well notwithstanding the Halo poly-commit scheme, which is also portable, I imagine).

I think if it were ported to arkworks it would live in a separate repo to poly-commit and would have its own plonk-std perhaps. But compared to R1CS, Plonk is all about tayloring the circuit layout itself to be most efficient for a desired circuit, so its questionable if plonk-std would even be desirable.

Again, it may be instructive to look into how VLSI software organises and optimises a desired circuit over a library of standard components.