`IVC` struct
Last updated
Last updated
Check first
Please check `PublicParams` Struct
IVC uses two step-circuits. Each of them is wrapped inside into a regular `StepFoldingCircuit' and in addition to the step-circuit synthesis logic, the folding of the paired circuit is verified (secondary verifies the folding of primary and vice versa).
Therefore, the second circuit can always be a sirius::step_circuit::trivial::Circuit
and have no payload whatsoever.
Each step-circuit has an input and an output at each step. Only the first input is specified in IVC::new
, the others are chained z_out
of step n
is transmitted as z_in
on step n+1
In order to get a detailed error, you can enable debug_mode
, then at each fold_step
the MockProver
from the halo2 library will be enabled and check your circuit. Otherwise, any error will only occur at the verify
step.
Each folding step synthesizes primary & secondary circuits and performs off-circuit calculations to fold the plonk structure & witness. The developer's task here, between steps, is to modify the circuits (over which he retains ownership), also keeping in mind the z_in
& z_out
continuity.
This step verifies that the constraint system is correct. If you started IVC not in debug_mode
mode, in this case, only at the moment of verify
call it is possible to detect violations of the constraint system at any of the steps.