mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-08 15:01:30 +01:00
Nova parameters & decider parameters and proofs serialization (#151)
* Add nova's decider serialization & deserialization to proof, verifier_params and public inputs * polish * add serialization for nova's ivc proverparams & verifierparams
This commit is contained in:
@@ -2,13 +2,14 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
#![allow(clippy::upper_case_acronyms)]
|
||||
|
||||
use ark_bn254::{Bn254, Fq, Fr, G1Affine};
|
||||
use ark_bn254::{Bn254, Fq, Fr, G1Affine, G1Projective};
|
||||
use ark_groth16::VerifyingKey as ArkG16VerifierKey;
|
||||
use ark_poly_commit::kzg10::VerifierKey as ArkKZG10VerifierKey;
|
||||
use ark_serialize::{CanonicalDeserialize, CanonicalSerialize};
|
||||
use askama::Template;
|
||||
|
||||
use folding_schemes::folding::circuits::nonnative::uint::NonNativeUintVar;
|
||||
use folding_schemes::folding::nova::decider_eth::VerifierParam as DeciderVerifierParam;
|
||||
|
||||
use super::g16::Groth16Verifier;
|
||||
use super::kzg::KZG10Verifier;
|
||||
@@ -92,22 +93,26 @@ impl From<(Fr, Groth16VerifierKey, KZG10VerifierKey, usize)> for NovaCycleFoldVe
|
||||
// in the NovaCycleFoldDecider verifier contract
|
||||
impl
|
||||
From<(
|
||||
(Fr, ArkG16VerifierKey<Bn254>, ArkKZG10VerifierKey<Bn254>),
|
||||
DeciderVerifierParam<G1Projective, ArkKZG10VerifierKey<Bn254>, ArkG16VerifierKey<Bn254>>,
|
||||
usize,
|
||||
)> for NovaCycleFoldVerifierKey
|
||||
{
|
||||
fn from(
|
||||
value: (
|
||||
(Fr, ArkG16VerifierKey<Bn254>, ArkKZG10VerifierKey<Bn254>),
|
||||
DeciderVerifierParam<
|
||||
G1Projective,
|
||||
ArkKZG10VerifierKey<Bn254>,
|
||||
ArkG16VerifierKey<Bn254>,
|
||||
>,
|
||||
usize,
|
||||
),
|
||||
) -> Self {
|
||||
let decider_vp = value.0;
|
||||
let g16_vk = Groth16VerifierKey::from(decider_vp.1);
|
||||
let g16_vk = Groth16VerifierKey::from(decider_vp.snark_vp);
|
||||
// pass `Vec::new()` since batchCheck will not be used
|
||||
let kzg_vk = KZG10VerifierKey::from((decider_vp.2, Vec::new()));
|
||||
let kzg_vk = KZG10VerifierKey::from((decider_vp.cs_vp, Vec::new()));
|
||||
Self {
|
||||
pp_hash: decider_vp.0,
|
||||
pp_hash: decider_vp.pp_hash,
|
||||
g16_vk,
|
||||
kzg_vk,
|
||||
z_len: value.1,
|
||||
@@ -157,7 +162,7 @@ mod tests {
|
||||
Decider, Error, FoldingScheme,
|
||||
};
|
||||
|
||||
use super::NovaCycleFoldDecider;
|
||||
use super::{DeciderVerifierParam, NovaCycleFoldDecider};
|
||||
use crate::verifiers::tests::{setup, DEFAULT_SETUP_LEN};
|
||||
use crate::{
|
||||
evm::{compile_solidity, save_solidity, Evm},
|
||||
@@ -286,9 +291,14 @@ mod tests {
|
||||
fn nova_cyclefold_vk_serde_roundtrip() {
|
||||
let (pp_hash, _, kzg_vk, _, g16_vk, _) = setup(DEFAULT_SETUP_LEN);
|
||||
|
||||
let mut bytes = vec![];
|
||||
let nova_cyclefold_vk = NovaCycleFoldVerifierKey::from(((pp_hash, g16_vk, kzg_vk), 1));
|
||||
let decider_vp = DeciderVerifierParam {
|
||||
pp_hash,
|
||||
snark_vp: g16_vk,
|
||||
cs_vp: kzg_vk,
|
||||
};
|
||||
let nova_cyclefold_vk = NovaCycleFoldVerifierKey::from((decider_vp, 1));
|
||||
|
||||
let mut bytes = vec![];
|
||||
nova_cyclefold_vk
|
||||
.serialize_protocol_verifier_key(&mut bytes)
|
||||
.unwrap();
|
||||
@@ -301,7 +311,12 @@ mod tests {
|
||||
#[test]
|
||||
fn nova_cyclefold_decider_template_renders() {
|
||||
let (pp_hash, _, kzg_vk, _, g16_vk, _) = setup(DEFAULT_SETUP_LEN);
|
||||
let nova_cyclefold_vk = NovaCycleFoldVerifierKey::from(((pp_hash, g16_vk, kzg_vk), 1));
|
||||
let decider_vp = DeciderVerifierParam {
|
||||
pp_hash,
|
||||
snark_vp: g16_vk,
|
||||
cs_vp: kzg_vk,
|
||||
};
|
||||
let nova_cyclefold_vk = NovaCycleFoldVerifierKey::from((decider_vp, 1));
|
||||
|
||||
let decider_solidity_code = HeaderInclusion::<NovaCycleFoldDecider>::builder()
|
||||
.template(nova_cyclefold_vk)
|
||||
|
||||
Reference in New Issue
Block a user