privacy-scaling-explorations / sonobe

Experimental folding schemes library
https://privacy-scaling-explorations.github.io/sonobe-docs/
MIT License
204 stars 53 forks source link

Add IVCProof to the existing folding schemes (Nova,HyperNova,ProtoGalaxy) #167

Closed arnaucube closed 1 month ago

arnaucube commented 1 month ago

Add IVCProof to the existing folding schemes (Nova,HyperNova,ProtoGalaxy), with serializers (by macro).

Implement from_ivc_proof for the FoldingSchemes trait (and Nova, HyperNova, ProtoGalaxy), so that the FoldingScheme IVC's instance can be constructed from the given parameters and the last IVCProof, which allows to sent the IVCProof between different parties, so that they can continue iterating the IVC from the received IVCProof. Also the serializers allow for the IVCProof to be sent to a verifier that can deserialize it and verify it.

This allows to remove the logic from the file folding/nova/serialize.rs (removing the whole file), which is now covered by the IVCProof generated serializers (generated by macro instead of handwritten), and the test that the file contained is now abstracted and applied to all the 3 existing folding schemes (Nova, HyperNova, ProtoGalaxy) at the folding/mod.rs file.

It updates too the IVC::verify interface so that now it takes less parameters as inputs (basically the new IVCProof).

Also, update Nova VerifierParams serializers to avoid serializing the R1CS to save big part of the old serialized size (several MBs reduced).

The main improvement is that now we have the data structure of IVCProof which is portable (serializable) between different machines, so that one prover can send their current IVC state with the IVCProof to another one, and the second prover can continue the IVC folding, and eventually generate the Decider compressed zkSNARK proof for a verifier to verify it (or even send the plain IVCProof to a verifier). This also allows to remove the serializers of the Nova & HyperNova structs. And also it adds a unified interface for deserializing the FoldingSchemes::ProverParam & VerifierParam.