From bdabc9c418ca1fb8cb03499a48fa966cf8732cc9 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 25 Jan 2024 14:34:20 -0500 Subject: [PATCH] test: `SwapCircuit` strategy using invalid fee blinding factor --- crates/core/component/dex/src/swap/proof.rs | 63 +++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/crates/core/component/dex/src/swap/proof.rs b/crates/core/component/dex/src/swap/proof.rs index 530daa5738..1e912bc0ff 100644 --- a/crates/core/component/dex/src/swap/proof.rs +++ b/crates/core/component/dex/src/swap/proof.rs @@ -365,4 +365,67 @@ mod tests { assert!(check_circuit_satisfaction(public, private).is_ok()); } } + + prop_compose! { + // This strategy generates a swap statement with an invalid fee blinding factor. + fn arb_invalid_swap_statement_fee_commitment()(fee_blinding in fr_strategy(), invalid_fee_blinding in fr_strategy(), address_index in any::(), value1_amount in any::(), seed_phrase_randomness in any::<[u8; 32]>(), rseed_randomness in any::<[u8; 32]>()) -> (SwapProofPublic, SwapProofPrivate) { + let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); + let sk_trader = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk_trader = sk_trader.full_viewing_key(); + let ivk_trader = fvk_trader.incoming(); + let (claim_address, _dtk_d) = ivk_trader.payment_address(address_index.into()); + + let gm = asset::Cache::with_known_assets().get_unit("gm").unwrap(); + let gn = asset::Cache::with_known_assets().get_unit("gn").unwrap(); + let trading_pair = TradingPair::new(gm.id(), gn.id()); + + let delta_1_i = Amount::from(value1_amount); + let delta_2_i = Amount::from(0u64); + let fee = Fee::default(); + + let rseed = Rseed(rseed_randomness); + let swap_plaintext = SwapPlaintext { + trading_pair, + delta_1_i, + delta_2_i, + claim_fee: fee, + claim_address, + rseed, + }; + let swap_commitment = swap_plaintext.swap_commitment(); + + let value_1 = Value { + amount: swap_plaintext.delta_1_i, + asset_id: swap_plaintext.trading_pair.asset_1(), + }; + let value_2 = Value { + amount: swap_plaintext.delta_2_i, + asset_id: swap_plaintext.trading_pair.asset_2(), + }; + let value_fee = Value { + amount: swap_plaintext.claim_fee.amount(), + asset_id: swap_plaintext.claim_fee.asset_id(), + }; + let mut balance = Balance::default(); + balance -= value_1; + balance -= value_2; + balance -= value_fee; + let balance_commitment = balance.commit(fee_blinding); + + let invalid_fee_commitment = swap_plaintext.claim_fee.commit(invalid_fee_blinding); + + let public = SwapProofPublic { balance_commitment, swap_commitment, fee_commitment: invalid_fee_commitment }; + let private = SwapProofPrivate { fee_blinding, swap_plaintext }; + + (public, private) + } + } + + proptest! { + #[test] + fn swap_proof_invalid_fee_commitment((public, private) in arb_invalid_swap_statement_fee_commitment()) { + assert!(check_satisfaction(&public, &private).is_err()); + assert!(check_circuit_satisfaction(public, private).is_err()); + } + } }