diff --git a/taiga_halo2/Cargo.toml b/taiga_halo2/Cargo.toml index b35a73de..83652e9f 100644 --- a/taiga_halo2/Cargo.toml +++ b/taiga_halo2/Cargo.toml @@ -34,8 +34,8 @@ harness = false name = "vp_proof" harness = false -[[example]] -name = "taiga_sudoku" +# [[example]] +# name = "taiga_sudoku" [[example]] name = "tx_examples" diff --git a/taiga_halo2/benches/vp_proof.rs b/taiga_halo2/benches/vp_proof.rs index ee1a22cd..7672c210 100644 --- a/taiga_halo2/benches/vp_proof.rs +++ b/taiga_halo2/benches/vp_proof.rs @@ -6,7 +6,7 @@ use pasta_curves::pallas; use rand::rngs::OsRng; use rand::Rng; use taiga_halo2::{ - circuit::{vp_circuit::ValidityPredicateInfo, vp_examples::TrivialValidityPredicateCircuit}, + circuit::{vp_circuit::ValidityPredicateCircuit, vp_examples::TrivialValidityPredicateCircuit}, constant::{NUM_NOTE, SETUP_PARAMS_MAP}, note::{Note, NoteType, RandomSeed}, nullifier::{Nullifier, NullifierKeyContainer}, @@ -87,7 +87,8 @@ fn bench_vp_proof(name: &str, c: &mut Criterion) { vp_circuit.clone(), &[public_inputs.inner()], &mut rng, - ); + ) + .unwrap(); }) }); @@ -105,9 +106,9 @@ fn bench_vp_proof(name: &str, c: &mut Criterion) { let verifier_name = name.to_string() + "-verifier"; c.bench_function(&verifier_name, |b| { b.iter(|| { - proof + assert!(proof .verify(pk.get_vk(), ¶ms, &[public_inputs.inner()]) - .is_ok(); + .is_ok()); }) }); } diff --git a/taiga_halo2/examples/simple_sudoku/circuit.rs b/taiga_halo2/deprecated/simple_sudoku/circuit.rs similarity index 100% rename from taiga_halo2/examples/simple_sudoku/circuit.rs rename to taiga_halo2/deprecated/simple_sudoku/circuit.rs diff --git a/taiga_halo2/examples/simple_sudoku/main.rs b/taiga_halo2/deprecated/simple_sudoku/main.rs similarity index 100% rename from taiga_halo2/examples/simple_sudoku/main.rs rename to taiga_halo2/deprecated/simple_sudoku/main.rs diff --git a/taiga_halo2/examples/simple_sudoku/vp.rs b/taiga_halo2/deprecated/simple_sudoku/vp.rs similarity index 89% rename from taiga_halo2/examples/simple_sudoku/vp.rs rename to taiga_halo2/deprecated/simple_sudoku/vp.rs index cadb1614..90a318af 100644 --- a/taiga_halo2/examples/simple_sudoku/vp.rs +++ b/taiga_halo2/deprecated/simple_sudoku/vp.rs @@ -30,21 +30,6 @@ pub struct SudokuVPConfig { sudoku_config: SudokuConfig, } -impl ValidityPredicateConfig for SudokuVPConfig { - fn get_note_config(&self) -> NoteConfig { - self.note_config.clone() - } - - fn configure(meta: &mut ConstraintSystem) -> Self { - let note_config = Self::configure_note(meta); - let sudoku_config = SudokuCircuit::configure(meta); - Self { - note_config, - sudoku_config, - } - } -} - #[derive(Clone, Debug, Default)] pub struct SudokuVP { pub sudoku: SudokuCircuit, @@ -53,11 +38,9 @@ pub struct SudokuVP { } impl ValidityPredicateCircuit for SudokuVP { - type VPConfig = SudokuVPConfig; - fn custom_constraints( &self, - config: Self::VPConfig, + config: ValidityPredicateConfig, layouter: impl Layouter, _basic_variables: BasicValidityPredicateVariables, ) -> Result<(), plonk::Error> { diff --git a/taiga_halo2/examples/taiga_sudoku/app_vp.rs b/taiga_halo2/deprecated/taiga_sudoku/app_vp.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/app_vp.rs rename to taiga_halo2/deprecated/taiga_sudoku/app_vp.rs diff --git a/taiga_halo2/examples/taiga_sudoku/dealer_intent_app_vp.rs b/taiga_halo2/deprecated/taiga_sudoku/dealer_intent_app_vp.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/dealer_intent_app_vp.rs rename to taiga_halo2/deprecated/taiga_sudoku/dealer_intent_app_vp.rs diff --git a/taiga_halo2/examples/taiga_sudoku/gadgets/mod.rs b/taiga_halo2/deprecated/taiga_sudoku/gadgets/mod.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/gadgets/mod.rs rename to taiga_halo2/deprecated/taiga_sudoku/gadgets/mod.rs diff --git a/taiga_halo2/examples/taiga_sudoku/gadgets/state_check.rs b/taiga_halo2/deprecated/taiga_sudoku/gadgets/state_check.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/gadgets/state_check.rs rename to taiga_halo2/deprecated/taiga_sudoku/gadgets/state_check.rs diff --git a/taiga_halo2/examples/taiga_sudoku/gadgets/state_update.rs b/taiga_halo2/deprecated/taiga_sudoku/gadgets/state_update.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/gadgets/state_update.rs rename to taiga_halo2/deprecated/taiga_sudoku/gadgets/state_update.rs diff --git a/taiga_halo2/examples/taiga_sudoku/gadgets/value_check.rs b/taiga_halo2/deprecated/taiga_sudoku/gadgets/value_check.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/gadgets/value_check.rs rename to taiga_halo2/deprecated/taiga_sudoku/gadgets/value_check.rs diff --git a/taiga_halo2/examples/taiga_sudoku/main.rs b/taiga_halo2/deprecated/taiga_sudoku/main.rs similarity index 100% rename from taiga_halo2/examples/taiga_sudoku/main.rs rename to taiga_halo2/deprecated/taiga_sudoku/main.rs diff --git a/taiga_halo2/src/circuit/vp_circuit.rs b/taiga_halo2/src/circuit/vp_circuit.rs index 341e0a4f..16f5c57c 100644 --- a/taiga_halo2/src/circuit/vp_circuit.rs +++ b/taiga_halo2/src/circuit/vp_circuit.rs @@ -30,7 +30,6 @@ use crate::{ vp_vk::ValidityPredicateVerifyingKey, }; use borsh::{BorshDeserialize, BorshSerialize}; -// use byteorder::{ReadBytesExt, WriteBytesExt}; use dyn_clone::{clone_trait_object, DynClone}; use ff::PrimeField; use group::cofactor::CofactorCurveAffine; @@ -56,6 +55,8 @@ use vamp_ir::halo2::synth::{make_constant, Halo2Module, PrimeFieldOps}; use vamp_ir::transform::compile; use vamp_ir::util::{read_inputs_from_file, Config}; +pub type ValidityPredicate = dyn ValidityPredicateVerifyingInfo; + #[derive(Debug, Clone)] pub struct VPVerifyingInfo { pub vk: VerifyingKey, @@ -190,8 +191,22 @@ impl From> for ValidityPredicatePublicInputs { } } -pub trait ValidityPredicateConfig { - fn configure_note(meta: &mut ConstraintSystem) -> NoteConfig { +#[derive(Clone, Debug)] +pub struct ValidityPredicateConfig { + pub note_conifg: NoteConfig, + pub advices: [Column; 10], + pub instances: Column, + pub get_is_input_note_flag_config: GetIsInputNoteFlagConfig, + pub get_owned_note_variable_config: GetOwnedNoteVariableConfig, + pub conditional_equal_config: ConditionalEqualConfig, + pub extended_or_relation_config: ExtendedOrRelationConfig, + pub add_config: AddConfig, + pub sub_config: SubConfig, + pub mul_config: MulConfig, +} + +impl ValidityPredicateConfig { + pub fn configure(meta: &mut ConstraintSystem) -> Self { let instances = meta.instance_column(); meta.enable_equality(instances); @@ -212,36 +227,7 @@ pub trait ValidityPredicateConfig { meta.enable_equality(*advice); } - NoteChip::configure(meta, instances, advices) - } - fn get_note_config(&self) -> NoteConfig; - fn configure(meta: &mut ConstraintSystem) -> Self; -} - -#[derive(Clone, Debug)] -pub struct GeneralVerificationValidityPredicateConfig { - pub note_conifg: NoteConfig, - pub advices: [Column; 10], - pub instances: Column, - pub get_is_input_note_flag_config: GetIsInputNoteFlagConfig, - pub get_owned_note_variable_config: GetOwnedNoteVariableConfig, - pub conditional_equal_config: ConditionalEqualConfig, - pub extended_or_relation_config: ExtendedOrRelationConfig, - pub add_config: AddConfig, - pub sub_config: SubConfig, - pub mul_config: MulConfig, -} - -impl ValidityPredicateConfig for GeneralVerificationValidityPredicateConfig { - fn get_note_config(&self) -> NoteConfig { - self.note_conifg.clone() - } - - fn configure(meta: &mut ConstraintSystem) -> Self { - let note_conifg = Self::configure_note(meta); - - let advices = note_conifg.advices; - let instances = note_conifg.instances; + let note_conifg = NoteChip::configure(meta, instances, advices); let get_owned_note_variable_config = GetOwnedNoteVariableConfig::configure( meta, @@ -277,30 +263,6 @@ impl ValidityPredicateConfig for GeneralVerificationValidityPredicateConfig { } } -pub trait ValidityPredicateInfo { - fn get_input_notes(&self) -> &[Note; NUM_NOTE]; - fn get_output_notes(&self) -> &[Note; NUM_NOTE]; - fn get_mandatory_public_inputs(&self) -> Vec { - let mut public_inputs = vec![]; - self.get_input_notes() - .iter() - .zip(self.get_output_notes().iter()) - .for_each(|(input_note, output_note)| { - let nf = input_note.get_nf().unwrap().inner(); - public_inputs.push(nf); - let cm = output_note.commitment(); - public_inputs.push(cm.get_x()); - }); - public_inputs.push(self.get_owned_note_pub_id()); - public_inputs - } - fn get_public_inputs(&self, rng: impl RngCore) -> ValidityPredicatePublicInputs; - // The owned_note_pub_id is the input_note_nf or the output_note_cm_x - // The owned_note_pub_id is the key to look up the target variables and - // help determine whether the owned note is the input note or not in VP circuit. - fn get_owned_note_pub_id(&self) -> pallas::Base; -} - pub trait ValidityPredicateVerifyingInfo: DynClone { fn get_verifying_info(&self) -> VPVerifyingInfo; fn get_vp_vk(&self) -> ValidityPredicateVerifyingKey; @@ -308,18 +270,15 @@ pub trait ValidityPredicateVerifyingInfo: DynClone { clone_trait_object!(ValidityPredicateVerifyingInfo); -pub trait ValidityPredicateCircuit: - Circuit + ValidityPredicateInfo + ValidityPredicateVerifyingInfo -{ - type VPConfig: ValidityPredicateConfig + Clone; +pub trait ValidityPredicateCircuit: Circuit + ValidityPredicateVerifyingInfo { // Default implementation, constrains the notes integrity. // TODO: how to enforce the constraints in vp circuit? fn basic_constraints( &self, - config: Self::VPConfig, + config: ValidityPredicateConfig, mut layouter: impl Layouter, ) -> Result { - let note_config = config.get_note_config(); + let note_config = config.note_conifg; // Load the Sinsemilla generator lookup table used by the whole circuit. SinsemillaChip::::load( note_config.sinsemilla_config.clone(), @@ -402,12 +361,34 @@ pub trait ValidityPredicateCircuit: // Add custom constraints on basic note variables and user-defined variables. fn custom_constraints( &self, - _config: Self::VPConfig, + _config: ValidityPredicateConfig, mut _layouter: impl Layouter, _basic_variables: BasicValidityPredicateVariables, ) -> Result<(), Error> { Ok(()) } + + fn get_mandatory_public_inputs(&self) -> Vec { + let mut public_inputs = vec![]; + self.get_input_notes() + .iter() + .zip(self.get_output_notes().iter()) + .for_each(|(input_note, output_note)| { + let nf = input_note.get_nf().unwrap().inner(); + public_inputs.push(nf); + let cm = output_note.commitment(); + public_inputs.push(cm.get_x()); + }); + public_inputs.push(self.get_owned_note_pub_id()); + public_inputs + } + fn get_input_notes(&self) -> &[Note; NUM_NOTE]; + fn get_output_notes(&self) -> &[Note; NUM_NOTE]; + fn get_public_inputs(&self, rng: impl RngCore) -> ValidityPredicatePublicInputs; + // The owned_note_pub_id is the input_note_nf or the output_note_cm_x + // The owned_note_pub_id is the key to look up the target variables and + // help determine whether the owned note is the input note or not in VP circuit. + fn get_owned_note_pub_id(&self) -> pallas::Base; } /// BasicValidityPredicateVariables are generally constrained in ValidityPredicateCircuit::basic_constraints @@ -704,7 +685,7 @@ impl BasicValidityPredicateVariables { macro_rules! vp_circuit_impl { ($name:ident) => { impl Circuit for $name { - type Config = ::VPConfig; + type Config = ValidityPredicateConfig; type FloorPlanner = floor_planner::V1; fn without_witnesses(&self) -> Self { diff --git a/taiga_halo2/src/circuit/vp_examples.rs b/taiga_halo2/src/circuit/vp_examples.rs index 1da218b0..c647ce74 100644 --- a/taiga_halo2/src/circuit/vp_examples.rs +++ b/taiga_halo2/src/circuit/vp_examples.rs @@ -1,8 +1,7 @@ use crate::{ circuit::vp_circuit::{ - GeneralVerificationValidityPredicateConfig, VPVerifyingInfo, ValidityPredicateCircuit, - ValidityPredicateConfig, ValidityPredicateInfo, ValidityPredicatePublicInputs, - ValidityPredicateVerifyingInfo, + VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, + ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, constant::{NUM_NOTE, SETUP_PARAMS_MAP}, note::{Note, RandomSeed}, @@ -54,7 +53,7 @@ impl TrivialValidityPredicateCircuit { } } -impl ValidityPredicateInfo for TrivialValidityPredicateCircuit { +impl ValidityPredicateCircuit for TrivialValidityPredicateCircuit { fn get_input_notes(&self) -> &[Note; NUM_NOTE] { &self.input_notes } @@ -78,10 +77,6 @@ impl ValidityPredicateInfo for TrivialValidityPredicateCircuit { } } -impl ValidityPredicateCircuit for TrivialValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; -} - vp_circuit_impl!(TrivialValidityPredicateCircuit); #[cfg(test)] @@ -110,7 +105,7 @@ pub mod tests { #[test] fn test_halo2_trivial_vp_circuit() { - use crate::circuit::vp_circuit::ValidityPredicateInfo; + use crate::circuit::vp_circuit::ValidityPredicateCircuit; use halo2_proofs::dev::MockProver; use rand::rngs::OsRng; diff --git a/taiga_halo2/src/circuit/vp_examples/cascade_intent.rs b/taiga_halo2/src/circuit/vp_examples/cascade_intent.rs index eb8691bf..b19ccc76 100644 --- a/taiga_halo2/src/circuit/vp_examples/cascade_intent.rs +++ b/taiga_halo2/src/circuit/vp_examples/cascade_intent.rs @@ -11,9 +11,8 @@ use crate::{ target_note_variable::{get_is_input_note_flag, get_owned_note_variable}, }, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, }, constant::{NUM_NOTE, SETUP_PARAMS_MAP}, @@ -54,32 +53,7 @@ impl CascadeIntentValidityPredicateCircuit { } } -impl ValidityPredicateInfo for CascadeIntentValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - let padding = ValidityPredicatePublicInputs::get_public_input_padding( - public_inputs.len(), - &RandomSeed::random(&mut rng), - ); - public_inputs.extend(padding); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for CascadeIntentValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints fn custom_constraints( &self, @@ -133,6 +107,28 @@ impl ValidityPredicateCircuit for CascadeIntentValidityPredicateCircuit { Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + let padding = ValidityPredicatePublicInputs::get_public_input_padding( + public_inputs.len(), + &RandomSeed::random(&mut rng), + ); + public_inputs.extend(padding); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(CascadeIntentValidityPredicateCircuit); diff --git a/taiga_halo2/src/circuit/vp_examples/field_addition.rs b/taiga_halo2/src/circuit/vp_examples/field_addition.rs index e452e0ec..b220f5ec 100644 --- a/taiga_halo2/src/circuit/vp_examples/field_addition.rs +++ b/taiga_halo2/src/circuit/vp_examples/field_addition.rs @@ -5,9 +5,8 @@ use crate::{ assign_free_advice, }, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, }, constant::{NUM_NOTE, SETUP_PARAMS_MAP, VP_CIRCUIT_CUSTOM_PUBLIC_INPUT_BEGIN_IDX}, @@ -33,33 +32,7 @@ struct FieldAdditionValidityPredicateCircuit { b: pallas::Base, } -impl ValidityPredicateInfo for FieldAdditionValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - public_inputs.push(self.a + self.b); - let padding = ValidityPredicatePublicInputs::get_public_input_padding( - public_inputs.len(), - &RandomSeed::random(&mut rng), - ); - public_inputs.extend(padding); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for FieldAdditionValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints // Note: the trivial vp doesn't constrain on input_note_variables and output_note_variables fn custom_constraints( @@ -93,6 +66,29 @@ impl ValidityPredicateCircuit for FieldAdditionValidityPredicateCircuit { Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + public_inputs.push(self.a + self.b); + let padding = ValidityPredicatePublicInputs::get_public_input_padding( + public_inputs.len(), + &RandomSeed::random(&mut rng), + ); + public_inputs.extend(padding); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(FieldAdditionValidityPredicateCircuit); diff --git a/taiga_halo2/src/circuit/vp_examples/or_relation_intent.rs b/taiga_halo2/src/circuit/vp_examples/or_relation_intent.rs index cb26dc98..63556c09 100644 --- a/taiga_halo2/src/circuit/vp_examples/or_relation_intent.rs +++ b/taiga_halo2/src/circuit/vp_examples/or_relation_intent.rs @@ -10,9 +10,8 @@ use crate::{ target_note_variable::{get_is_input_note_flag, get_owned_note_variable}, }, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, vp_examples::token::{transfrom_token_name_to_token_property, TOKEN_VK}, }, @@ -80,32 +79,7 @@ impl OrRelationIntentValidityPredicateCircuit { } } -impl ValidityPredicateInfo for OrRelationIntentValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - let padding = ValidityPredicatePublicInputs::get_public_input_padding( - public_inputs.len(), - &RandomSeed::random(&mut rng), - ); - public_inputs.extend(padding); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for OrRelationIntentValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints fn custom_constraints( &self, @@ -170,7 +144,7 @@ impl ValidityPredicateCircuit for OrRelationIntentValidityPredicateCircuit { // Encode the app_data_static of intent note let encoded_app_data_static = poseidon_hash_gadget( - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config, layouter.namespace(|| "encode app_data_static"), [ token_property_1.clone(), @@ -255,6 +229,28 @@ impl ValidityPredicateCircuit for OrRelationIntentValidityPredicateCircuit { Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + let padding = ValidityPredicatePublicInputs::get_public_input_padding( + public_inputs.len(), + &RandomSeed::random(&mut rng), + ); + public_inputs.extend(padding); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(OrRelationIntentValidityPredicateCircuit); diff --git a/taiga_halo2/src/circuit/vp_examples/partial_fulfillment_intent.rs b/taiga_halo2/src/circuit/vp_examples/partial_fulfillment_intent.rs index fe792974..9d8118ac 100644 --- a/taiga_halo2/src/circuit/vp_examples/partial_fulfillment_intent.rs +++ b/taiga_halo2/src/circuit/vp_examples/partial_fulfillment_intent.rs @@ -12,9 +12,8 @@ use crate::{ target_note_variable::{get_is_input_note_flag, get_owned_note_variable}, }, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, vp_examples::token::{transfrom_token_name_to_token_property, Token, TOKEN_VK}, }, @@ -76,32 +75,7 @@ impl PartialFulfillmentIntentValidityPredicateCircuit { } } -impl ValidityPredicateInfo for PartialFulfillmentIntentValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - let padding = ValidityPredicatePublicInputs::get_public_input_padding( - public_inputs.len(), - &RandomSeed::random(&mut rng), - ); - public_inputs.extend(padding); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for PartialFulfillmentIntentValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints fn custom_constraints( &self, @@ -162,7 +136,7 @@ impl ValidityPredicateCircuit for PartialFulfillmentIntentValidityPredicateCircu // Encode the app_data_static of intent note let encoded_app_data_static = poseidon_hash_gadget( - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config, layouter.namespace(|| "app_data_static encoding"), [ sold_token.clone(), @@ -408,6 +382,28 @@ impl ValidityPredicateCircuit for PartialFulfillmentIntentValidityPredicateCircu Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + let padding = ValidityPredicatePublicInputs::get_public_input_padding( + public_inputs.len(), + &RandomSeed::random(&mut rng), + ); + public_inputs.extend(padding); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(PartialFulfillmentIntentValidityPredicateCircuit); diff --git a/taiga_halo2/src/circuit/vp_examples/receiver_vp.rs b/taiga_halo2/src/circuit/vp_examples/receiver_vp.rs index bc911fe1..6fe7f15b 100644 --- a/taiga_halo2/src/circuit/vp_examples/receiver_vp.rs +++ b/taiga_halo2/src/circuit/vp_examples/receiver_vp.rs @@ -6,9 +6,8 @@ use crate::{ }, note_encryption_circuit::note_encryption_gadget, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, vp_examples::signature_verification::COMPRESSED_TOKEN_AUTH_VK, }, @@ -67,60 +66,7 @@ impl Default for ReceiverValidityPredicateCircuit { } } -impl ValidityPredicateInfo for ReceiverValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - let custom_public_input_padding = - ValidityPredicatePublicInputs::get_custom_public_input_padding( - public_inputs.len(), - &RandomSeed::random(rng), - ); - public_inputs.extend(custom_public_input_padding.iter()); - assert_eq!(NUM_NOTE, 2); - let target_note = - if self.get_owned_note_pub_id() == self.get_output_notes()[0].commitment().get_x() { - self.get_output_notes()[0] - } else { - self.get_output_notes()[1] - }; - let message = vec![ - target_note.note_type.app_vk, - target_note.note_type.app_data_static, - target_note.app_data_dynamic, - pallas::Base::from(target_note.value), - target_note.rho.inner(), - target_note.get_nk_commitment(), - target_note.psi, - target_note.rcm, - ]; - let plaintext = NotePlaintext::padding(&message); - let key = SecretKey::from_dh_exchange(&self.rcv_pk, &mod_r_p(self.sk)); - let cipher = NoteCiphertext::encrypt(&plaintext, &key, &self.nonce); - cipher.inner().iter().for_each(|&c| public_inputs.push(c)); - - let generator = GENERATOR.to_curve(); - let pk = generator * mod_r_p(self.sk); - let pk_coord = pk.to_affine().coordinates().unwrap(); - public_inputs.push(*pk_coord.x()); - public_inputs.push(*pk_coord.y()); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for ReceiverValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints fn custom_constraints( &self, @@ -141,7 +87,7 @@ impl ValidityPredicateCircuit for ReceiverValidityPredicateCircuit { )?; // Construct an ECC chip - let ecc_chip = EccChip::construct(config.get_note_config().ecc_config); + let ecc_chip = EccChip::construct(config.note_conifg.ecc_config); let rcv_pk = NonIdentityPoint::new( ecc_chip.clone(), @@ -170,7 +116,7 @@ impl ValidityPredicateCircuit for ReceiverValidityPredicateCircuit { // Decode the app_data_dynamic, and check the app_data_dynamic encoding let encoded_app_data_dynamic = poseidon_hash_gadget( - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config.clone(), layouter.namespace(|| "app_data_dynamic encoding"), [ rcv_pk.inner().x(), @@ -257,7 +203,7 @@ impl ValidityPredicateCircuit for ReceiverValidityPredicateCircuit { layouter.namespace(|| "note encryption"), config.advices[0], config.instances, - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config, add_chip, ecc_chip, nonce, @@ -268,6 +214,56 @@ impl ValidityPredicateCircuit for ReceiverValidityPredicateCircuit { Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + let custom_public_input_padding = + ValidityPredicatePublicInputs::get_custom_public_input_padding( + public_inputs.len(), + &RandomSeed::random(rng), + ); + public_inputs.extend(custom_public_input_padding.iter()); + assert_eq!(NUM_NOTE, 2); + let target_note = + if self.get_owned_note_pub_id() == self.get_output_notes()[0].commitment().get_x() { + self.get_output_notes()[0] + } else { + self.get_output_notes()[1] + }; + let message = vec![ + target_note.note_type.app_vk, + target_note.note_type.app_data_static, + target_note.app_data_dynamic, + pallas::Base::from(target_note.value), + target_note.rho.inner(), + target_note.get_nk_commitment(), + target_note.psi, + target_note.rcm, + ]; + let plaintext = NotePlaintext::padding(&message); + let key = SecretKey::from_dh_exchange(&self.rcv_pk, &mod_r_p(self.sk)); + let cipher = NoteCiphertext::encrypt(&plaintext, &key, &self.nonce); + cipher.inner().iter().for_each(|&c| public_inputs.push(c)); + + let generator = GENERATOR.to_curve(); + let pk = generator * mod_r_p(self.sk); + let pk_coord = pk.to_affine().coordinates().unwrap(); + public_inputs.push(*pk_coord.x()); + public_inputs.push(*pk_coord.y()); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(ReceiverValidityPredicateCircuit); diff --git a/taiga_halo2/src/circuit/vp_examples/signature_verification.rs b/taiga_halo2/src/circuit/vp_examples/signature_verification.rs index 3b078985..620628b9 100644 --- a/taiga_halo2/src/circuit/vp_examples/signature_verification.rs +++ b/taiga_halo2/src/circuit/vp_examples/signature_verification.rs @@ -5,9 +5,8 @@ use crate::{ target_note_variable::get_owned_note_variable, }, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, }, constant::{TaigaFixedBasesFull, NUM_NOTE, SETUP_PARAMS_MAP}, @@ -149,32 +148,7 @@ impl SignatureVerificationValidityPredicateCircuit { } } -impl ValidityPredicateInfo for SignatureVerificationValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - let padding = ValidityPredicatePublicInputs::get_public_input_padding( - public_inputs.len(), - &RandomSeed::random(&mut rng), - ); - public_inputs.extend(padding); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for SignatureVerificationValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints fn custom_constraints( &self, @@ -183,7 +157,7 @@ impl ValidityPredicateCircuit for SignatureVerificationValidityPredicateCircuit basic_variables: BasicValidityPredicateVariables, ) -> Result<(), Error> { // Construct an ECC chip - let ecc_chip = EccChip::construct(config.get_note_config().ecc_config); + let ecc_chip = EccChip::construct(config.note_conifg.ecc_config); let pk = NonIdentityPoint::new( ecc_chip.clone(), @@ -213,7 +187,7 @@ impl ValidityPredicateCircuit for SignatureVerificationValidityPredicateCircuit // Decode the app_data_dynamic, and check the app_data_dynamic encoding let encoded_app_data_dynamic = poseidon_hash_gadget( - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config.clone(), layouter.namespace(|| "app_data_dynamic encoding"), [pk.inner().x(), pk.inner().y(), auth_vp_vk, receiver_vp_vk], )?; @@ -248,7 +222,7 @@ impl ValidityPredicateCircuit for SignatureVerificationValidityPredicateCircuit let cms = basic_variables.get_output_note_cms(); assert_eq!(NUM_NOTE, 2); let h = poseidon_hash_gadget( - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config, layouter.namespace(|| "Poseidon_hash(r, P, m)"), [ r.inner().x(), @@ -275,6 +249,28 @@ impl ValidityPredicateCircuit for SignatureVerificationValidityPredicateCircuit Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + let padding = ValidityPredicatePublicInputs::get_public_input_padding( + public_inputs.len(), + &RandomSeed::random(&mut rng), + ); + public_inputs.extend(padding); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(SignatureVerificationValidityPredicateCircuit); diff --git a/taiga_halo2/src/circuit/vp_examples/token.rs b/taiga_halo2/src/circuit/vp_examples/token.rs index 53121334..b57f05c3 100644 --- a/taiga_halo2/src/circuit/vp_examples/token.rs +++ b/taiga_halo2/src/circuit/vp_examples/token.rs @@ -5,9 +5,8 @@ use crate::{ target_note_variable::get_owned_note_variable, }, vp_circuit::{ - BasicValidityPredicateVariables, GeneralVerificationValidityPredicateConfig, - VPVerifyingInfo, ValidityPredicateCircuit, ValidityPredicateConfig, - ValidityPredicateInfo, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, + BasicValidityPredicateVariables, VPVerifyingInfo, ValidityPredicateCircuit, + ValidityPredicateConfig, ValidityPredicatePublicInputs, ValidityPredicateVerifyingInfo, }, vp_examples::receiver_vp::{ReceiverValidityPredicateCircuit, COMPRESSED_RECEIVER_VK}, vp_examples::signature_verification::{ @@ -93,32 +92,7 @@ impl Default for TokenValidityPredicateCircuit { } } -impl ValidityPredicateInfo for TokenValidityPredicateCircuit { - fn get_input_notes(&self) -> &[Note; NUM_NOTE] { - &self.input_notes - } - - fn get_output_notes(&self) -> &[Note; NUM_NOTE] { - &self.output_notes - } - - fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { - let mut public_inputs = self.get_mandatory_public_inputs(); - let padding = ValidityPredicatePublicInputs::get_public_input_padding( - public_inputs.len(), - &RandomSeed::random(&mut rng), - ); - public_inputs.extend(padding); - public_inputs.into() - } - - fn get_owned_note_pub_id(&self) -> pallas::Base { - self.owned_note_pub_id - } -} - impl ValidityPredicateCircuit for TokenValidityPredicateCircuit { - type VPConfig = GeneralVerificationValidityPredicateConfig; // Add custom constraints fn custom_constraints( &self, @@ -151,7 +125,7 @@ impl ValidityPredicateCircuit for TokenValidityPredicateCircuit { )?; // Construct an ECC chip - let ecc_chip = EccChip::construct(config.get_note_config().ecc_config); + let ecc_chip = EccChip::construct(config.note_conifg.ecc_config); let pk = NonIdentityPoint::new( ecc_chip, @@ -181,7 +155,7 @@ impl ValidityPredicateCircuit for TokenValidityPredicateCircuit { // Decode the app_data_dynamic, and check the app_data_dynamic encoding let encoded_app_data_dynamic = poseidon_hash_gadget( - config.get_note_config().poseidon_config, + config.note_conifg.poseidon_config, layouter.namespace(|| "app_data_dynamic encoding"), [pk.inner().x(), pk.inner().y(), auth_vp_vk, receiver_vp_vk], )?; @@ -215,6 +189,28 @@ impl ValidityPredicateCircuit for TokenValidityPredicateCircuit { Ok(()) } + + fn get_input_notes(&self) -> &[Note; NUM_NOTE] { + &self.input_notes + } + + fn get_output_notes(&self) -> &[Note; NUM_NOTE] { + &self.output_notes + } + + fn get_public_inputs(&self, mut rng: impl RngCore) -> ValidityPredicatePublicInputs { + let mut public_inputs = self.get_mandatory_public_inputs(); + let padding = ValidityPredicatePublicInputs::get_public_input_padding( + public_inputs.len(), + &RandomSeed::random(&mut rng), + ); + public_inputs.extend(padding); + public_inputs.into() + } + + fn get_owned_note_pub_id(&self) -> pallas::Base { + self.owned_note_pub_id + } } vp_circuit_impl!(TokenValidityPredicateCircuit); diff --git a/taiga_halo2/src/note.rs b/taiga_halo2/src/note.rs index d6c5128e..8da08bfc 100644 --- a/taiga_halo2/src/note.rs +++ b/taiga_halo2/src/note.rs @@ -1,6 +1,6 @@ use crate::{ circuit::{ - vp_circuit::ValidityPredicateVerifyingInfo, + vp_circuit::ValidityPredicate, vp_examples::{TrivialValidityPredicateCircuit, COMPRESSED_TRIVIAL_VP_VK}, }, constant::{ @@ -96,15 +96,15 @@ pub struct RandomSeed([u8; 32]); pub struct InputNoteProvingInfo { pub note: Note, pub merkle_path: MerklePath, - app_vp_verifying_info: Box, - app_vp_verifying_info_dynamic: Vec>, + application_vp: Box, + dynamic_vps: Vec>, } #[derive(Clone)] pub struct OutputNoteProvingInfo { pub note: Note, - app_vp_verifying_info: Box, - app_vp_verifying_info_dynamic: Vec>, + application_vp: Box, + dynamic_vps: Vec>, } impl Note { @@ -466,25 +466,23 @@ impl InputNoteProvingInfo { pub fn new( note: Note, merkle_path: MerklePath, - app_vp_verifying_info: Box, - app_vp_verifying_info_dynamic: Vec>, + application_vp: Box, + dynamic_vps: Vec>, ) -> Self { Self { note, merkle_path, - app_vp_verifying_info, - app_vp_verifying_info_dynamic, + application_vp, + dynamic_vps, } } - pub fn get_app_vp_verifying_info(&self) -> Box { - self.app_vp_verifying_info.clone() + pub fn get_application_vp(&self) -> Box { + self.application_vp.clone() } - pub fn get_app_vp_verifying_info_dynamic( - &self, - ) -> Vec> { - self.app_vp_verifying_info_dynamic.clone() + pub fn get_dynamic_vps(&self) -> Vec> { + self.dynamic_vps.clone() } pub fn create_padding_note_proving_info( @@ -505,24 +503,22 @@ impl InputNoteProvingInfo { impl OutputNoteProvingInfo { pub fn new( note: Note, - app_vp_verifying_info: Box, - app_vp_verifying_info_dynamic: Vec>, + application_vp: Box, + dynamic_vps: Vec>, ) -> Self { Self { note, - app_vp_verifying_info, - app_vp_verifying_info_dynamic, + application_vp, + dynamic_vps, } } - pub fn get_app_vp_verifying_info(&self) -> Box { - self.app_vp_verifying_info.clone() + pub fn get_application_vp(&self) -> Box { + self.application_vp.clone() } - pub fn get_app_vp_verifying_info_dynamic( - &self, - ) -> Vec> { - self.app_vp_verifying_info_dynamic.clone() + pub fn get_dynamic_vps(&self) -> Vec> { + self.dynamic_vps.clone() } pub fn create_padding_note_proving_info( @@ -593,14 +589,9 @@ pub mod tests { pub fn random_input_proving_info(mut rng: R) -> InputNoteProvingInfo { let note = random_input_note(&mut rng); let merkle_path = MerklePath::random(&mut rng, TAIGA_COMMITMENT_TREE_DEPTH); - let app_vp_verifying_info = Box::new(random_trivial_vp_circuit(&mut rng)); - let app_vp_verifying_info_dynamic = vec![]; - InputNoteProvingInfo::new( - note, - merkle_path, - app_vp_verifying_info, - app_vp_verifying_info_dynamic, - ) + let application_vp = Box::new(random_trivial_vp_circuit(&mut rng)); + let dynamic_vps = vec![]; + InputNoteProvingInfo::new(note, merkle_path, application_vp, dynamic_vps) } pub fn random_output_proving_info( @@ -608,12 +599,12 @@ pub mod tests { rho: Nullifier, ) -> OutputNoteProvingInfo { let note = random_output_note(&mut rng, rho); - let app_vp_verifying_info = Box::new(random_trivial_vp_circuit(&mut rng)); - let app_vp_verifying_info_dynamic = vec![]; + let application_vp = Box::new(random_trivial_vp_circuit(&mut rng)); + let dynamic_vps = vec![]; OutputNoteProvingInfo { note, - app_vp_verifying_info, - app_vp_verifying_info_dynamic, + application_vp, + dynamic_vps, } } diff --git a/taiga_halo2/src/shielded_ptx.rs b/taiga_halo2/src/shielded_ptx.rs index dd277d9e..c9f3bd63 100644 --- a/taiga_halo2/src/shielded_ptx.rs +++ b/taiga_halo2/src/shielded_ptx.rs @@ -1,5 +1,5 @@ use crate::action::{ActionInfo, ActionInstance}; -use crate::circuit::vp_circuit::{VPVerifyingInfo, ValidityPredicateVerifyingInfo}; +use crate::circuit::vp_circuit::{VPVerifyingInfo, ValidityPredicate}; use crate::constant::{ ACTION_CIRCUIT_PARAMS_SIZE, ACTION_PROVING_KEY, ACTION_VERIFYING_KEY, NUM_NOTE, SETUP_PARAMS_MAP, @@ -46,8 +46,8 @@ impl ShieldedPartialTransaction { .iter() .map(|input_note| { NoteVPVerifyingInfoSet::build( - input_note.get_app_vp_verifying_info(), - input_note.get_app_vp_verifying_info_dynamic(), + input_note.get_application_vp(), + input_note.get_dynamic_vps(), ) }) .collect(); @@ -55,8 +55,8 @@ impl ShieldedPartialTransaction { .iter() .map(|output_note| { NoteVPVerifyingInfoSet::build( - output_note.get_app_vp_verifying_info(), - output_note.get_app_vp_verifying_info_dynamic(), + output_note.get_application_vp(), + output_note.get_dynamic_vps(), ) }) .collect(); @@ -278,12 +278,12 @@ impl NoteVPVerifyingInfoSet { } pub fn build( - app_vp_verifying_info: Box, - app_vp_verifying_info_dynamic: Vec>, + application_vp: Box, + dynamic_vps: Vec>, ) -> Self { - let app_vp_verifying_info = app_vp_verifying_info.get_verifying_info(); + let app_vp_verifying_info = application_vp.get_verifying_info(); - let app_dynamic_vp_verifying_info = app_vp_verifying_info_dynamic + let app_dynamic_vp_verifying_info = dynamic_vps .into_iter() .map(|verifying_info| verifying_info.get_verifying_info()) .collect(); @@ -328,7 +328,7 @@ impl NoteVPVerifyingInfoSet { #[cfg(test)] pub mod testing { use crate::{ - circuit::vp_circuit::ValidityPredicateVerifyingInfo, + circuit::vp_circuit::{ValidityPredicate, ValidityPredicateVerifyingInfo}, circuit::vp_examples::TrivialValidityPredicateCircuit, constant::TAIGA_COMMITMENT_TREE_DEPTH, merkle_tree::MerklePath, @@ -443,43 +443,36 @@ pub mod testing { input_notes: [input_note_1, input_note_2], output_notes: [output_note_1, output_note_2], }; - let input_app_vp_verifying_info_1 = Box::new(trivial_vp_circuit.clone()); - let trivial_app_logic_1: Box = - Box::new(trivial_vp_circuit.clone()); + let input_application_vp_1 = Box::new(trivial_vp_circuit.clone()); + let trivial_app_logic_1: Box = Box::new(trivial_vp_circuit.clone()); let trivial_app_logic_2 = Box::new(trivial_vp_circuit.clone()); - let trivial_app_vp_verifying_info_dynamic = vec![trivial_app_logic_1, trivial_app_logic_2]; + let trivial_dynamic_vps = vec![trivial_app_logic_1, trivial_app_logic_2]; let input_note_proving_info_1 = InputNoteProvingInfo::new( input_note_1, merkle_path.clone(), - input_app_vp_verifying_info_1, - trivial_app_vp_verifying_info_dynamic.clone(), + input_application_vp_1, + trivial_dynamic_vps.clone(), ); // The following notes use empty logic vps and use app_data_dynamic with pallas::Base::zero() by default. trivial_vp_circuit.owned_note_pub_id = input_note_2.get_nf().unwrap().inner(); - let input_app_vp_verifying_info_2 = Box::new(trivial_vp_circuit.clone()); - let app_vp_verifying_info_dynamic = vec![]; + let input_application_vp_2 = Box::new(trivial_vp_circuit.clone()); + let dynamic_vps = vec![]; let input_note_proving_info_2 = InputNoteProvingInfo::new( input_note_2, merkle_path, - input_app_vp_verifying_info_2, - app_vp_verifying_info_dynamic.clone(), + input_application_vp_2, + dynamic_vps.clone(), ); trivial_vp_circuit.owned_note_pub_id = output_note_1.commitment().get_x(); - let output_app_vp_verifying_info_1 = Box::new(trivial_vp_circuit.clone()); - let output_note_proving_info_1 = OutputNoteProvingInfo::new( - output_note_1, - output_app_vp_verifying_info_1, - app_vp_verifying_info_dynamic.clone(), - ); + let output_application_vp_1 = Box::new(trivial_vp_circuit.clone()); + let output_note_proving_info_1 = + OutputNoteProvingInfo::new(output_note_1, output_application_vp_1, dynamic_vps.clone()); trivial_vp_circuit.owned_note_pub_id = output_note_2.commitment().get_x(); - let output_app_vp_verifying_info_2 = Box::new(trivial_vp_circuit); - let output_note_proving_info_2 = OutputNoteProvingInfo::new( - output_note_2, - output_app_vp_verifying_info_2, - app_vp_verifying_info_dynamic, - ); + let output_application_vp_2 = Box::new(trivial_vp_circuit); + let output_note_proving_info_2 = + OutputNoteProvingInfo::new(output_note_2, output_application_vp_2, dynamic_vps); // Create shielded partial tx ShieldedPartialTransaction::build(