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.
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.