From 36843ac6c194c8a4b48cec0b604114e0eab5f36a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Zemanovi=C4=8D?= Date: Thu, 27 Jul 2023 08:04:45 +0100 Subject: [PATCH 1/4] shared/masp: allow to save and load proofs for tests --- shared/src/ledger/masp.rs | 165 ++++++++++++++++++++++++++++++++------ shared/src/ledger/tx.rs | 20 +++-- 2 files changed, 153 insertions(+), 32 deletions(-) diff --git a/shared/src/ledger/masp.rs b/shared/src/ledger/masp.rs index a843e050cf..4fc99d17c1 100644 --- a/shared/src/ledger/masp.rs +++ b/shared/src/ledger/masp.rs @@ -1,7 +1,6 @@ //! MASP verification wrappers. -use std::collections::hash_map::Entry; -use std::collections::{BTreeMap, HashMap, HashSet}; +use std::collections::{btree_map, BTreeMap, BTreeSet, HashMap, HashSet}; use std::env; use std::fmt::Debug; #[cfg(feature = "masp-tx-gen")] @@ -79,6 +78,17 @@ use crate::types::transaction::{EllipticCurve, PairingEngine, WrapperTx}; /// the default OS specific path is used. pub const ENV_VAR_MASP_PARAMS_DIR: &str = "NAMADA_MASP_PARAMS_DIR"; +/// Env var to either "save" proofs into files or to "load" them from +/// files. +pub const ENV_VAR_MASP_TEST_PROOFS: &str = "NAMADA_MASP_TEST_PROOFS"; + +/// Randomness seed for MASP integration tests to build proofs with +/// deterministic rng. +pub const ENV_VAR_MASP_TEST_SEED: &str = "NAMADA_MASP_TEST_SEED"; + +/// A directory to save serialized proofs for tests. +pub const MASP_TEST_PROOFS_DIR: &str = "test_fixtures/masp_proofs"; + /// The network to use for MASP #[cfg(feature = "mainnet")] const NETWORK: MainNetwork = MainNetwork; @@ -93,6 +103,26 @@ pub const OUTPUT_NAME: &str = "masp-output.params"; /// Convert circuit name pub const CONVERT_NAME: &str = "masp-convert.params"; +/// Shielded transfer +#[derive(Clone, Debug, BorshSerialize, BorshDeserialize)] +pub struct ShieldedTransfer { + /// Shielded transfer builder + pub builder: Builder<(), (), ExtendedFullViewingKey, ()>, + /// MASP transaction + pub masp_tx: Transaction, + /// Metadata + pub metadata: SaplingMetadata, + /// Epoch in which the transaction was created + pub epoch: Epoch, +} + +#[derive(Clone, Copy, Debug)] +enum LoadOrSaveProofs { + Load, + Save, + Neither, +} + fn load_pvks() -> ( PreparedVerifyingKey, PreparedVerifyingKey, @@ -511,7 +541,7 @@ impl From for Amount { /// Represents the amount used of different conversions pub type Conversions = - HashMap, i128)>; + BTreeMap, i128)>; /// Represents the changes that were made to a list of transparent accounts pub type TransferDelta = HashMap; @@ -531,7 +561,7 @@ pub struct ShieldedContext { /// The commitment tree produced by scanning all transactions up to tx_pos pub tree: CommitmentTree, /// Maps viewing keys to applicable note positions - pub pos_map: HashMap>, + pub pos_map: HashMap>, /// Maps a nullifier to the note position to which it applies pub nf_map: HashMap, /// Maps note positions to their corresponding notes @@ -657,7 +687,7 @@ impl ShieldedContext { ..Default::default() }; for vk in unknown_keys { - tx_ctx.pos_map.entry(vk).or_insert_with(HashSet::new); + tx_ctx.pos_map.entry(vk).or_insert_with(BTreeSet::new); } // Update this unknown shielded context until it is level with self while tx_ctx.last_txidx != self.last_txidx { @@ -931,7 +961,9 @@ impl ShieldedContext { asset_type: AssetType, conversions: &'a mut Conversions, ) { - if let Entry::Vacant(conv_entry) = conversions.entry(asset_type) { + if let btree_map::Entry::Vacant(conv_entry) = + conversions.entry(asset_type) + { // Query for the ID of the last accepted transaction if let Some((addr, denom, ep, conv, path)) = query_conversion(client, asset_type).await @@ -962,7 +994,7 @@ impl ShieldedContext { client, balance, target_epoch, - HashMap::new(), + BTreeMap::new(), ) .await .0; @@ -1142,7 +1174,7 @@ impl ShieldedContext { Conversions, ) { // Establish connection with which to do exchange rate queries - let mut conversions = HashMap::new(); + let mut conversions = BTreeMap::new(); let mut val_acc = Amount::zero(); let mut notes = Vec::new(); // Retrieve the notes that can be spent by this key @@ -1286,7 +1318,7 @@ impl ShieldedContext { println!("Decoded pinned balance: {:?}", amount); // Finally, exchange the balance to the transaction's epoch let computed_amount = self - .compute_exchanged_amount(client, amount, ep, HashMap::new()) + .compute_exchanged_amount(client, amount, ep, BTreeMap::new()) .await .0; println!("Exchanged amount: {:?}", computed_amount); @@ -1357,16 +1389,17 @@ impl ShieldedContext { args: &args::TxTransfer, shielded_gas: bool, ) -> Result< - Option<( - Builder<(), (), ExtendedFullViewingKey, ()>, - Transaction, - SaplingMetadata, - Epoch, - )>, + Option, builder::Error, > { // No shielded components are needed when neither source nor destination // are shielded + + use std::str::FromStr; + + use rand::rngs::StdRng; + use rand_core::SeedableRng; + let spending_key = args.source.spending_key(); let payment_address = args.target.payment_address(); // No shielded components are needed when neither source nor @@ -1388,8 +1421,27 @@ impl ShieldedContext { // possesion let memo = MemoBytes::empty(); + // Try to get a seed from env var, if any. + let rng = if let Ok(seed) = + env::var(ENV_VAR_MASP_TEST_SEED).map(|seed| { + let exp_str = + format!("Env var {ENV_VAR_MASP_TEST_SEED} must be a u64."); + let parsed_seed: u64 = + FromStr::from_str(&seed).expect(&exp_str); + parsed_seed + }) { + tracing::warn!( + "UNSAFE: Using a seed from {ENV_VAR_MASP_TEST_SEED} env var \ + to build proofs." + ); + StdRng::seed_from_u64(seed) + } else { + StdRng::from_rng(OsRng).unwrap() + }; + // Now we build up the transaction within this object - let mut builder = Builder::::new(NETWORK, 1.into()); + let mut builder = + Builder::::new_with_rng(NETWORK, 1.into(), rng); // break up a transfer into a number of transfers with suitable // denominations @@ -1548,16 +1600,81 @@ impl ShieldedContext { } } - // Build and return the constructed transaction - builder - .clone() - .build( + // To speed up integration tests, we can save and load proofs + let load_or_save = if let Ok(masp_proofs) = + env::var(ENV_VAR_MASP_TEST_PROOFS) + { + let parsed = match masp_proofs.to_ascii_lowercase().as_str() { + "load" => LoadOrSaveProofs::Load, + "save" => LoadOrSaveProofs::Save, + env_var => panic!( + "Unexpected value for {ENV_VAR_MASP_TEST_PROOFS} env var. \ + Expecting \"save\" or \"load\", but got \"{env_var}\"." + ), + }; + if env::var(ENV_VAR_MASP_TEST_SEED).is_err() { + panic!( + "Ensure to set a seed with {ENV_VAR_MASP_TEST_SEED} env \ + var when using {ENV_VAR_MASP_TEST_PROOFS} for \ + deterministic proofs." + ); + } + parsed + } else { + LoadOrSaveProofs::Neither + }; + + let builder_clone = builder.clone().map_builder(WalletMap); + let builder_bytes = BorshSerialize::try_to_vec(&builder_clone).unwrap(); + let builder_hash = + namada_core::types::hash::Hash::sha256(&builder_bytes); + let saved_filepath = env::current_dir() + .unwrap() + // One up from "tests" dir to the root dir + .parent() + .unwrap() + .join(MASP_TEST_PROOFS_DIR) + .join(format!("{builder_hash}.bin")); + + if let LoadOrSaveProofs::Load = load_or_save { + let recommendation = format!( + "Re-run the tests with {ENV_VAR_MASP_TEST_PROOFS}=save to \ + re-generate proofs." + ); + let exp_str = format!( + "Read saved MASP proofs from {}. {recommendation}", + saved_filepath.to_string_lossy() + ); + let loaded_bytes = + tokio::fs::read(&saved_filepath).await.expect(&exp_str); + let exp_str = format!( + "Valid `ShieldedTransfer` bytes in {}. {recommendation}", + saved_filepath.to_string_lossy() + ); + let loaded: ShieldedTransfer = + BorshDeserialize::try_from_slice(&loaded_bytes) + .expect(&exp_str); + Ok(Some(loaded)) + } else { + // Build and return the constructed transaction + let (masp_tx, metadata) = builder.build( &self.utils.local_tx_prover(), &FeeRule::non_standard(tx_fee), - ) - .map(|(tx, metadata)| { - Some((builder.map_builder(WalletMap), tx, metadata, epoch)) - }) + )?; + let built = ShieldedTransfer { + builder: builder_clone, + masp_tx, + metadata, + epoch, + }; + if let LoadOrSaveProofs::Save = load_or_save { + let built_bytes = BorshSerialize::try_to_vec(&built).unwrap(); + tokio::fs::write(&saved_filepath, built_bytes) + .await + .unwrap(); + } + Ok(Some(built)) + } } /// Obtain the known effects of all accepted shielded and transparent diff --git a/shared/src/ledger/tx.rs b/shared/src/ledger/tx.rs index 08243a22e5..10094b4cff 100644 --- a/shared/src/ledger/tx.rs +++ b/shared/src/ledger/tx.rs @@ -33,7 +33,7 @@ use crate::ibc::Height as IbcHeight; use crate::ibc_proto::cosmos::base::v1beta1::Coin; use crate::ledger::args::{self, InputAmount}; use crate::ledger::governance::storage as gov_storage; -use crate::ledger::masp::{ShieldedContext, ShieldedUtils}; +use crate::ledger::masp::{ShieldedContext, ShieldedTransfer, ShieldedUtils}; use crate::ledger::rpc::{ self, format_denominated_amount, validate_amount, TxBroadcastData, TxResponse, @@ -1459,30 +1459,34 @@ pub async fn build_transfer< tx.header.chain_id = args.tx.chain_id.clone().unwrap(); tx.header.expiration = args.tx.expiration; // Add the MASP Transaction and its Builder to facilitate validation - let (masp_hash, shielded_tx_epoch) = if let Some(shielded_parts) = - shielded_parts + let (masp_hash, shielded_tx_epoch) = if let Some(ShieldedTransfer { + builder, + masp_tx, + metadata, + epoch, + }) = shielded_parts { // Add a MASP Transaction section to the Tx - let masp_tx = tx.add_section(Section::MaspTx(shielded_parts.1)); + let masp_tx = tx.add_section(Section::MaspTx(masp_tx)); // Get the hash of the MASP Transaction section let masp_hash = masp_tx.get_hash(); // Get the decoded asset types used in the transaction to give // offline wallet users more information - let asset_types = used_asset_types(shielded, client, &shielded_parts.0) + let asset_types = used_asset_types(shielded, client, &builder) .await .unwrap_or_default(); // Add the MASP Transaction's Builder to the Tx tx.add_section(Section::MaspBuilder(MaspBuilder { asset_types, // Store how the Info objects map to Descriptors/Outputs - metadata: shielded_parts.2, + metadata, // Store the data that was used to construct the Transaction - builder: shielded_parts.0, + builder, // Link the Builder to the Transaction by hash code target: masp_hash, })); // The MASP Transaction section hash will be used in Transfer - (Some(masp_hash), Some(shielded_parts.3)) + (Some(masp_hash), Some(epoch)) } else { (None, None) }; From dd776bde085b55b7d8a7f9d46e38dbbaf307577a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Zemanovi=C4=8D?= Date: Thu, 27 Jul 2023 08:05:14 +0100 Subject: [PATCH 2/4] test: add masp_proofs test fixtures --- Cargo.toml | 1 + ...9AC83E76506147445D4DC22D57CBC9869BCDDA80.bin | Bin 0 -> 9649 bytes ...AF5D4C1BF345378A4FB6BB0B179BA8BDB0D2A3C0.bin | Bin 0 -> 9208 bytes ...EA9CB1712CCA85B0E96A3330A63BE7CD9E5ECD22.bin | Bin 0 -> 7448 bytes ...C88B269A5436CD72AA758686960F409B04841707.bin | Bin 0 -> 9208 bytes ...BB79BAC90BA1F01653EBCFDCF7CC8AAA1BBEE462.bin | Bin 0 -> 25031 bytes ...227C98D1E5AAAA9988F26B1A47090ACCE693572F.bin | Bin 0 -> 7448 bytes ...544FDED28D5E7D3C6B52DCF38A5978CEA70D6FD3.bin | Bin 0 -> 9649 bytes ...D146763B3CE0BACFB7799C6744E50B9E7F43E961.bin | Bin 0 -> 17018 bytes ...EF2989556FD771D368849D034E22923FD350EEEC.bin | Bin 0 -> 19947 bytes ...711C0CA6AA6520A2AC8BC34A84358EA137F138D0.bin | Bin 0 -> 18792 bytes ...668DC6BBB31619C7E93A1A5A2E64B694DBE1BD6E.bin | Bin 0 -> 7448 bytes ...15344FFFAA6CA273027CD480AEA68DDED57D88CA.bin | Bin 0 -> 7448 bytes test_fixtures/masp_proofs/README.md | 11 +++++++++++ 14 files changed, 12 insertions(+) create mode 100644 test_fixtures/masp_proofs/0DAF8BDF2318129AC828A7149AC83E76506147445D4DC22D57CBC9869BCDDA80.bin create mode 100644 test_fixtures/masp_proofs/12C933751C24BDC39C9108F5AF5D4C1BF345378A4FB6BB0B179BA8BDB0D2A3C0.bin create mode 100644 test_fixtures/masp_proofs/1362F1CF9B836CF8B05D8189EA9CB1712CCA85B0E96A3330A63BE7CD9E5ECD22.bin create mode 100644 test_fixtures/masp_proofs/5B99F3D7E0CE75AB1F4B737EC88B269A5436CD72AA758686960F409B04841707.bin create mode 100644 test_fixtures/masp_proofs/889C046FA76727BC97433503BB79BAC90BA1F01653EBCFDCF7CC8AAA1BBEE462.bin create mode 100644 test_fixtures/masp_proofs/8B29BC2E1A96DF331C7C3A2B227C98D1E5AAAA9988F26B1A47090ACCE693572F.bin create mode 100644 test_fixtures/masp_proofs/A9FA2730222946FA51E9D587544FDED28D5E7D3C6B52DCF38A5978CEA70D6FD3.bin create mode 100644 test_fixtures/masp_proofs/AC308C08512AF5DAA364B845D146763B3CE0BACFB7799C6744E50B9E7F43E961.bin create mode 100644 test_fixtures/masp_proofs/BE57BA4D8FB068F5A933E78DEF2989556FD771D368849D034E22923FD350EEEC.bin create mode 100644 test_fixtures/masp_proofs/E76E54B7526CD2B5423322FB711C0CA6AA6520A2AC8BC34A84358EA137F138D0.bin create mode 100644 test_fixtures/masp_proofs/EE7C912B7E21F07494D58AA6668DC6BBB31619C7E93A1A5A2E64B694DBE1BD6E.bin create mode 100644 test_fixtures/masp_proofs/F068FDF05B8F25DD923E667215344FFFAA6CA273027CD480AEA68DDED57D88CA.bin create mode 100644 test_fixtures/masp_proofs/README.md diff --git a/Cargo.toml b/Cargo.toml index 16442008f1..099b6fa513 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ members = [ exclude = [ "wasm", "wasm_for_tests", + "test_fixtures", ] [workspace.package] diff --git a/test_fixtures/masp_proofs/0DAF8BDF2318129AC828A7149AC83E76506147445D4DC22D57CBC9869BCDDA80.bin b/test_fixtures/masp_proofs/0DAF8BDF2318129AC828A7149AC83E76506147445D4DC22D57CBC9869BCDDA80.bin new file mode 100644 index 0000000000000000000000000000000000000000..f20cf90f1a573ad377dd0de7a9925cdaee8e6ce2 GIT binary patch literal 9649 zcmeI2Wl$a6mWFW%hu|)uarfX5+|M~d6W}DcyA#}kTY|g0L~!@u5S-u~ENHM`!RF@P zFI6*N-Kxyg{F<7qs@=Qys;*kS`^U51y;dV4ARrL^WBfG4e~db}n#SP{i^8?9A5RoD z1ROcPN-z!Tgm}pefBB&xY)XrOupN#<*B4<^&%ObZ8`($hK52fE?GZFp;hK)9ZQS_O zl<5ITiiiV9%fpAJ^BN&6Z9U%OdejVCT8+p38Q^~s$!hj#idWRV~`G92G!c}juOuIJ&za zE$^e1(XiQlW!m?Zd&Vb8NgIc2EhoJ0rd%_Aa3lmbFheZ>El*+T1rS?ZE?*QIdNI1e%^f4hA+~eBwxy-hdGHeD0~O7C_1rTGTl#J_r9<1Bh4pk#5Q@cT z{nrAw{q8S673-H+nZU3f7y|S~XX)og#a|9dIoMqzkqVLUyx_~4nN%{gJ&x3PhdG}J zJdp992Hyzw8Qu?&k8%%T=~H{wq=BI8zWcH;3%4v5^71r!arn^v#(VvkH6Ep;9*<*DCe1C>Nq^{BqGJl{bilf!OgkRaiYOLJd9 z06&0aEN^VW354I8h_-(_s|ndy%c4x3WoJoHc-zg@#UO00!xIuv#|OlmL)n{=r{C-F z%2sKVcke)|8;MYp;LgYi5201lugHNyc`9h+q`CtyN?RS1uWDYGue--ZdCINa=!fRQ z&PGH)RQ(!{R|yX!XBOt;QEDkBx|Qfu*a)&jM?$kpJ|ubpsGv6~4k>$xA+GEh$C1HI z;!j5p)N4nJSDZX(v6Fli04asDsl*xCoi6zYq6>xO2~&{u^cwzCDUfNl;5C20Y`wya2(WgPJqdsNgWFA3lLGh>*)l2XAb&^oSDd$F`u|B z^AR?Ih7NS@526Ab?ie*`5%qFiXVk_aO1%YIuUYM(D46dcDZ!e?g7i8-xC@;Hn{Di~ zo3F5|p5hA}{*_`OJ1wa9GjgL6{_cD;K&k7?;pt9CVIHE-rf1DsC+9Bvkr6Y#AEP$T z)6)0P=m5J}^R^7Lc^`Y zid6zE)->dY4^8`zS@(HO4uVC2@W(o^azl)(s;wWcQ}Bu4Jr55`JvUtbh!G_YhEg>syu%egLuD*Gxunom`Q(N`daYn?+B?vTR9=wKD{=4#GCB zn$4%QuHLoQl|wIU%|1xbVW9M#1rnl&PHi{>>=STZJ9Ubumo9yb)I%j8_ds=fI_rza z{G-4gfi0L1cv4K~a%Taxim9DSLF1!|&P^JuPP$oIvEWJMO*!4r0z6_K6DOMC{V;p} z2zL_{$&T5s;Ya+wk70Cbf2+!akRI^2`k3DlE(axk{^Hx{Bay>ztcI@{^hom_OVr;r zSo_)n&={RDu!OAT&h+b`n_%IEkf;;Br_#^y$!9Jf)(tpt0ARDx(%L|o!!}N%@p%#C zf~f0Ji$fYVG53m(aCY5BBLMcCP*V)4ERNL-fOEbflevK*H>bh1Z4fw&6CHTX(E*VH za*MK0wQvSQ8%pT4GQw(9!R3~oS+2rEZ-qWqLL5N&b2LHfXijq#JJ0>2ag{CBA&0N} z1ZC*YyE5GxWeT4FdA$r*x}$~&8RnL@&HQ=Nsnhn@C7N9^rzMscxtWaQfR+U;Bvgu< z4ktqWl@5uHcwb4!{MJW!T!-=rYOty+AFxFdS!!eGHl;twCWEc;4WYK*(%*#;CWS|7 z#yPR@(E#Nas(#J?hbY|H^L$s1@5cx|_S+dW3nMr8R&dg5b(x7CJs4CP0c`Or=l!oK z>}StDQYFFK>}AOmli-cmON`0$8L2Z9ZR~uroXRaS(YJGV`R0(IJ76$v)m0nGh?2T1T2|3T1{6hO*Gn%pMd?uF@@|~oiJaR}asU~*a zJ1kPZEEF|FDFzk?I06EB{11NYKh*l89sg*@f2$quI0!{PxK6I_iB=RL$qK6lja=`V zqg{OoB{G=c4X+{t%oAJvw}aNPJ;`&4c=T6EZGBE+)89X26DGT}JjEUt1mZ}JE5yVH zIUsQXwD&L3H?@~p9-C#>Vvg5>2%?izSpbeYRM#HN-8wRmk9ARD5iXS60A3zlt>*2V z{J`dNn*$K$tGIR*!4!WJbP*6&Wb)nda~W=RKtY|ezR`oa*f0+d4-cg2do6YF zpc9Y4_wH4DX8_HNlPvAB46&RioAbAVLjMemXb&V=z;CB?%pk71R>HI;?2W(my61AJ z5FR(};`rGqGp0~08ZfFP+tCFex0{+ee80+*y-+ze(XzQcA$bwj`R0I#pABfe9I{_G zIHG|8DFZ6PUv5MPvzhIVALcn3J9pq1en$`fi*Wxefc~z2Xk=#?o^fVvR0%h*cz1K# zh2j|75VXf*FS{FRlx*-Zw~`3~E)_MJt!=gZJIRKC!0ZMmibjlU}LANE>YLQ#YSEemy z+_C3>(}sVR|G&P#&jSZ0Q!!(a>;2Bpo&U3?fcU%o{Hw6?@0tln1dp=yyv+tL7J1$i z_1RaDcH#DTI+JEx&XCFALJ_yN>Q#|2W*MMb?hahKsN>-#h1|=Rn*AGTmd5UCS>D=QwZt%Pt(%MUgxt-LKt2#d;UtnmQ)G zg|0!TDv#OuV!_li^R}?@9ed30@`@dhc$#4osx0uN#JPPVMrH`F?XwN%Qaiy*a^jdG zw4$X9|>;|1#i06mOygMa|CDX@G)dWM6i3z_+4V2zR7Sq zVp^U+c_m25F738g+AierecLAXGwL_U1r!+%9p#zAHIVr49Ll!TQvDP8!!+vNRwhQA zZ}==}yQoRfi=wNA`;xsYlYDA7T-O%4dF8}1d{Ph&_E#hEfh9?PP0$MB2oX6Tj4GV2 z*p}jozB#_BZYA0qisK;+q|)08quxZOg^_m=pb!5*uokPvH?4%E3m@3VH>L1gN#q`? zpbAkxUs1w3sVGJ!I2gymVWeBY&$s4z-0wvqu*NprH1QAd86B<^f??uES2dLVZaY2th5ZacF%CL)h2K%y57HL zwb@<5qk%J((;$S&lS^Sp`5HNJLc#dOg#)QT3 zQV;ZN(Gtu=ONe?XcNUcv$lmyBHCnaaV3(@EG%-rwj`Rxfk%K7vQW?Qy#2l-!mPm1< ztJp-s?4-gkHyo@o$BptAlkeQr@R>)fGR9Pn62k=1KOL@b(k)&x81ujigtT{Guz@f# zwrb)E>Zw_roCV{|W4jq|ty+mMM+s)>b zO`Typ{_c1wR29Kso7?hfNb$)b)KFtubilgtK&k8|CdKtFOK(b$e}VF)!MuGoZ%yIh z{=w6kT4WC*rqJbAxV5iUiN0PAzVQ6EOL%6Jf6ll@mg$s0L8sw{O?gz9*VqT?kUaa0 z=-DnvX8p90Q_~)C8iTPlX+7R%#bOt0PP$@V@;HitO1oFlZ=`9KI(av4TqLjoZ~c~P zf!RolY+Y*Ikaxp4PV*GNCL1;0EA z&SvyM|AC}TW+|E!E+bGOZH`NWDLGpC!K*%%@n%kU_Wo?rugqs+g;Xg4t6~D9IJ-Kh zYA|$2waWO#rgHA{z!A0#n>;oK#NF1@evBXF4ZHCqW<*S@*T}k?Q9So0kakkauf?o& z6m8d$^9hL{Z=A)Z&s=Uu7fW;uFu~mnlcu%oH)^jE6Cvt!#=4TzMwyN6;W6U7=Dhfy zZSy`dc{y8&W}}#~HO7B&RUsnY$>GMW+gA71p=)0BIeZf3APEYeJ$TSZ4NAfFdA=Kq zoFR2jOYI0~2{9*9vSq+`H0+|Eb7QScy73%tppS%4O+M+{1hea3+cAjuWXj8-| zZAL}egev(@^)5ii-Ci((%33aig+B4*3W1V3BNq%IyKY$d!R%qe5zm-s?t}Vj77OSG zHhC{dO3YHo?I=`{WWAo|(kWKSE2tL4kE+W~&0iZ%p(ze82MvG(8lUck`F*QKxtV3? z#fC7mkgZ^!$l%S5MfeeL*VJL=IL7FpuW&URGxaXWO^fopaSEnXN`8dMszi88(qZM? zZv8`PJU{F~KfE({7cNLWWg?LERg6jTV|as^pSlt=L&Qx@R+gG5D?Pga-)yw_{ujxB z6P)CCfV zDre}ot0dF^-_EnYG|BJ!^uKGjzc<$yNYS`L+W&rd&m9)!C#<_p++h(2A9~=ZkK%-r z-oRV8wm=X@PcBe56Bpx7l;qm)68;qS+x|>s|6qCw;EjY%vwpt*UUj;@nv%T4rmBI6;U}JmNMBreYc?# zTDqKp7_W&OELw$!A+UVi!c&b!K~~vqDFn55(|FJ5l{Sf*XU8jEjCuF5R-4{lzlbjl z&3=0j;)F93^hiI5r}l$3kF)${4)=;=OLk)%^g(t3$4lLDHaY@tWO)loAkpdj`Rl8=VI87^;X zB-syxNPKX2dSA5PIg=)7?auA&&zqFQlCQ*?#m6rj_KkB7WmirducQyIxuN0sJ>mi0 z3+yhMHZ@(AjNn1Vo{p9oS~$FK=NTL^7ZK-_#z<7>*>|g@s4W||4rOEt z*IK=Ysu&tY7a_RYSeWl)>Ff}#lWVfSX9}yCSRCNuUd`}ZE%(h8qc)c#G4@d*FN)BTpGTQz=AYiD_SGad+t@@-s`GY_Jkc=hI8v zCb{)##s`x*^_+y`r=QyBQ&vdhsMMYvCgvke)7EW3oFtJoCQd~TrmO2`FT6hVLMSr4 z+Pd@Wy((*t7Dhw+){n%6tCn+mbYSOT@Ai^jyraOj)Y_r9C0^`9RAhbLl+%86Ryoll zUaZFZL@}7NB5C)76tS%z3HwKl&>?%mWY$Q?%YTmHQ${&vO1o9{6}gZOt^8=WEQN)kl4}=iC(>;awo(6E*B@{x;P!BNzgeR z?~Pgub;!3aqN_z|Iwy!xD=JCqBclD5JV`6-l9Pp22)LiT}R@a zYzCF-9gY{0gAbT`IW>(cP*rbOK26J}>a|^y_8RO|MAgbUckg1|n7Xa>v6kKmWh=)< zKhaC(9VU7yG_xjvKkl2EljOMTpRG(n4?whF!2ttBasrt}1vpkuXOHc5)} zkvo>*7OQKw?|pKrn9r0l%$OrpAMIXQ9@}k6MtMn!Nn>Eg6&!a28!Zg@1oyz;76@*^Em$BBG!XXY zeQ&Dvt=g))Tl?kR+Iy<{>F%da^{M{y>vR4G0RR9H{4stR!XJa^!fEgo=ad%07gZEo zRkZuUk4Eb1nh@Z1$dHj+kx@UuDgxt|Z;3PGPgUWkpgL!DY&xhLn>rUxGlC<-E(v9} z0p{g2gOznD+oPf_CCarg<%)sNsRd8Tu;#A-|C1oU0{t=s!wDgyBIs4)(K>OSmuYPi z2Q}Xzf$Y}8EO+$`1tOCj(m(zF`K|U5!^Do6ETg3o*j2!xH71dZen7kaVwU)xX^q4; zd#X!^02dgi3?zp(g5X6H$vz2U|m-QqeFEy^2SNF3rl2WrMd2GF)C>1Q2U;^;*PHf6H z$-2U&WB6jey63wWiwj0Gn!LEgj>~txtb>gNBGQ8_&lIhXwcr7bgp;@TuCBwta-yr} zo~JCMTVI5etkH>mR6x?szpn*{4J=&k-7AOqq&=Q>8k}J}=O#d1?hO`yj(ZhiN6ReGyLE?L8#VRe)Z_8$46lRN z)Vl;!I4|rFJb7maGNSTo%mk`z`yETYwBk8U;`chvkcht)lMEDc-~b|n!E2JYW6sAf z5k{boBmt#k?iLLjgV-Nu&sO2zRtq&AvBB>MZd*|Nq`1EWiDt&#NR)$w>Qt$o;&Q>mY#sV92vTQ;hXD_{wtsZx1Kr;_G_DY4V18J^S4qJY`m(Hk=(Tcmq0smwy<2aC0XSsYc6F>935L$u5U==8u5Z)mMp?c-kD z@4vk5FS~xiw_YabpsnKbg4DE}udfIOmhW9Wy*TJ8DMawy^=jOLa~!grnKI$}Gw421 zt*CuL3wBtr{E!V>_I31YS0{eGv}_`6%+PXyvuVhqS1oazXbfJ(MvLNlN9chXUsc0R zwt)v?$wb1!vKaoxattv)2@wWI@any+GC{ws-@9|2-JA|N^7JG(bi?6`{Ag;UNQ6iY zZWHtzX_d9N71Br&3Ci~xtT{rs>P#cE6km43FZQj_1w(BHY$W8rjC2K%Y*#s!c>tFk z;mRf?{e%UiWbmG5EU;XHUuBjOhO+gsRvNPF%({$Cy2?S#0$Li#x-%ut!33Op625cW zVL7XPThrBCrE=2*doMt8hyYm{%Hod9uph2d3^Ja*FYOEaS9;o3+YkSSh zHvvAvvsdB)i{|UI%_D!9F&j~g*UB7Q(9xlDdKH3`n z6mE5BbA305iLL-xJTh2(R2)h3p5uJ$D{s+{n}Afso@e>?G3j)KZr#Yn;3);ITq~Aa z!KIbF@u*`?B8lq0LD!A7C7lLFz}fsJ1bo~o|8prjs8~aEzcxG}x)n5Dp|vWU{T}aO zb3z?@qJj7uRln!|LlmBE1rtBBkF|AIE+X=Amwi{>`EzgBDufpTa;sHWN%#1DrT;aB ztNpQZYl>&PwFFzkwv|CQe*Wo8zGc{t0Ae*cZ?+m*KltI7Z=62Xoqb9Hp(}xw6y>x^ z{(%{^^#XmKXE6+bzbX7Th5x4T|6>Zr2+~Ap_($w-b8Jk-Ks=q!j1-11?Sx@5pLO!f zgx})+OCJ0STmSA9-teD3p{*pcz-yP?eSqe`V9twIsAHk}_x_pe=RytK8_1%fp;1eF z4^p7tl}F{u7xU4%tkib_lbSs8_L$N^3HL2J$8xoA%Dn^#*w$XYs?#rOp2K`2dT|W^ zR~b5$rr8PbW>P0Gb1+_vCKw}TLN-gyqQAH@6`gU3cx4~AtIYj8)24zxkb78k!nope ztH>bm5q+9t>M&<_0c$AxB9RnXc{+=RxEu5V@EqxH3ja;vzbX9hN@4$akw?AM%NUie zas2DzFsHqPd!*|34hk3Ty^0vO+dN>pO@z|1z45X4yg6iz)x)ueWM;CK2Vb~Cm0t00 z74ag186D|G48X{F=kdDgPde{WOX|p4Fmk#rBS$Q4A#w`Oz*h`gBstE>WVD)Y*yLv= zg>6I1J>r*>2wvR+B(|z;9GHJ5jK8D~#J>_$%>Q)$J^d91vmgJ}Tx8ig_0MhW&P3vg ziTIvT8J~ZV?|M=lW_8WCQ-Npo_~rCtv>^=@x_}FKJ>3tGMgIMky@#q=(|ur1#!F1` zNNfk&P7ySgI0mu+7eYVx+76r{oE3y4ox-azgi}AgNe)kh^o_?68PG3+!C}kKB$6Ot znCPvBeiKpY!Xd2q=cbu{QC-l7Ei~;c0GOsdZz4r-YGpR*q?;O6*0^_<4Jd11I6=PZ zjEnOJ;(?o{eJSS1gO(glD#DW2&^J zA}@wSRjD|0F&xkh7FX(PFJambp{Y{?)z;M9D1l+5VFeA+T4%h)$*wx-U-v;g`fH-- ziKugN36as4?om-+5LhQuhSe#CYl}Rw8u31SkAv3?_$H8w?s3C*c>z)?kd}NV3@K%y z%4(A^ALA$QeGO0TwIPt6U$P%JmSIr99Iu1%v#R@1!E>s$!fgEq) z=8{5e8T<7_gWHhM^8JSnis%&}?XgkskZ_a%qNWFA14V5sVm@>|ZJo6GB<%qKF8+Ak zEywa?t56~_7Awn+H9@HHs2%x%Z$My@x7m1Xoo3e@H0aG1iw6ct9Sj6!&QIvBNK#^V z&7n1ps>iPH-#^b!s1F({$SK$evKr#l#I1I(jE&G;T`A8ZkX<_cgwxPv3I{iMclnYtnpAhKTjEe-ich?I@7nc+u8@@;;jrss82yg4^)QJDM!>l714(~3n)|U_xto}Lzl^1s z?8A?!<>VBg&y&yXlbmjd*Q>PjF9i;>&D*!~;?+G;Qj|4l&Gg0ROmo`0BVwN&T0(Fq z?F;J|ysoL~%50n>4Obq?c@ zvLzmAs9uA$1({OFS+h3}G#z4exIpVOZrrCkXdfeHr=vpgv_94Su+t+p(pxyxjGELo zc0V-HkG(Wi`q`(9^XWy%Iy^+u(IWg|LMSMZRE~e+(LG{9H^s zvJ1H;Du<<$I*_R$N_ndm(8|@z$f^}5O=w8XF8?r@MU@+03mO6Px2Yb5`+sdfzF(jp z#8zfvCRxWmmwdYPDbgR0tFaj~|8=Y$+B#>48ROuJ^qeqvymJV-d>SPJi#+}VQICyF zx9y$$R8cs_@Fu+Aa8rP4)|@|gUxZPvE}|9YuOZJwA9>%Ho2xF&LdV9>vk>#_cu_py z{7G63>2uvEatB!}(R8^CjGsj^5cjQP`2yeFE}4u$yiT^j0&AX+;k;gYsumHEBNmbt z(kA|g@{+^dC=1}L+D02_d(SjqghG{b*P!aUqCM&kpWTR2tkDqdskzd<>(3hhlPp<* zS+uz%=Q`%6&(oa{U`Vbu!A9*l;mkd!@JHiF!T0!a4AnXxQ)42&@=)2LtSKkN6DgB! z>q1N?(Fj+U^QpDP-`q5R-Ct(fX|i$LSE9Ih8!Ky-C7p^ERG@>6k$!0r*3c)DA=o5{ z;ouq{^7-wHE)w|sYeD)AxjKkZV^)M1p4P*=w}G)u52%ENiCHvsWxJ!3eXRHuqT>s1 zrgZlULmjz4jd=ahEx~W_i89p!#P1l?aEcZfIJJfwch;JBNl}40l7+A^*X{8g5%Rq% z&ZG+lW1?tP#@g3jQwqTo2&kml13YHKkeC=FS?$a(LWn3X*~+g=wJhGUV+5cP&i4kt zA3PIp2v8Jf6xr21ke|MpoXS|N6?mwT$fm}o?O+NlhSMyD4?}Fgez9U#fiRA((S+O-B@%}Vf z;Yknt-g(7Os5@KPr5_kUBhC;qexE^6R$CX5tIMT!(!HeGpCkWZyhF<+ce{u%A8Y`YiVplLY+5#;uwe@6las3AXazm zb-81iU!d)va>q^4>=I#ov+JN@i!51&mG1B7`ES3| ze?InrziQk5Rrj@}tQ&Wy7Jn3Y8eR89hw_cui{2LJTQ!_iHkH#B!xg=s#0!*U`rkNJ zTQ2mG_Qd9zc(#43`goAlrLQ@~UZh&>1R>4&C}w)l>LURcYvB8%8gBC{{GMx3frXO_ zIV^qnG&s5G&7D6ME{bx*yKC7Nb;uN}!`4C%?`V~0xEw1*SUMQVqF3mcdMDdFYqXFl(JFi*(GZntz}wllYK5_ zJSr`UH>;S(4_K+0_8d zpC>Z?Rb?hweJWplzxd=CbH*75C0Nc6S)6~A)^wawATEeunvMO*C?J<(?Oj3cYA ze}qtPs|{@&HO;@WC>xxDBkO&c8pyxUY^+oeD4Ml=i@7j{tRY(4FC^@vTp+0Kq_f9@_jz(pgM9P_;Zc4?E)@s9Av}AnH$#NmAks8SLR!LdAVB)NK za3TSEAg!Xm5EX9YKhHtks$*M9u(TVfAQ?5!k1;alnYBP=byfXq)wQQeGlWF1FNK6U zPi-+NzYmD3fug>A7frBQ(mZtrJZ&sVYj)Lo9+S?Ju=zSnwAA6c4ly6UeM}r`=$_!Q z6<-|cvicMVrm-f_o{&-xq~GK3>ge6$)#a5ylIFU#&V#jAgvKz=$a2V-G#V2;7=V+6 zrKpdhaQZI$0NHC?DOWgRyXz?4zDIo0a%y%8KR$0H7MCgQK~C}{y~`#(pk#+6r-)_n zahj8`W9JdXCfzwdv8U(G1iil<7saEVSMz?fLPLGD=QF3n4RmpbNh)IDh8JUUF6xr1 z;*VJg@vmLIl7GO`e|g^NT3P>evS~I*>Umff+=p;a&&gd-kd}h7hA2`MUjF`3%fqyD ztw6?c48_GM98Ip#s5|dl&k6iqNiex>IeQApQu)QBHo8NQTvD=UBDa1f_Wix*VHscA za3!-aqC|$t*7`#hB_^LKTrNW%t8uQaOeGBaG0ZFKwmwH>#nba_S?yhEtggkEQ3hqK zTy-q?{)EQ`qh$0&AUQ4osNllG9@51SUKn#kl0VpDt{LO*@eOn%hR$l<96PKfCDCY~ zn0$TAC!$zfcNyx}e;<7xnrT+B$0+P^hx>5?uBE<&Y}pF7%@UrU$AixWQ6^Pw8P-X% znjwnI?>)!y)Hzsn#K(YiRBjB}yeyVFKcuADIxFMvbBXgh_~v}|ju$HX?b)al;E){V n_61<9KA}Tw^A=62VxXQv9N|B!{=bX3-~HI%``@ew{kixLD$4#8 literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/1362F1CF9B836CF8B05D8189EA9CB1712CCA85B0E96A3330A63BE7CD9E5ECD22.bin b/test_fixtures/masp_proofs/1362F1CF9B836CF8B05D8189EA9CB1712CCA85B0E96A3330A63BE7CD9E5ECD22.bin new file mode 100644 index 0000000000000000000000000000000000000000..db2cb751aab73b21904e6bf7cdbb2318337809fa GIT binary patch literal 7448 zcmeHMbx<5zv&Y>bIJ>wz1PhSh65Kt35P~jQf_s853Bldnogj-_fB*{wcY@mmf&|%x zm)!SRy-K~CTi>7ec2!UH%=B+gb)$KE)XqSL-;x|&|!N)(b0LPK5iEwWlmBS^wnO4FI~dpy;?Qp%q4=0Y{ex zq?*i2e31-~vOgT?A6f1~c-ZD3>|4MgMXJs3`$UZV8CT)2Der9F< zWQU$uQ`ovX-lcy)@|<50!5tE%ma-3bCDY%e{rCI(OIm+|w7*)={MV#~HcsODG;Pr8 zVc4_U`EKE`6|ok&-R=Ik`1>y5SBux5 zmHEF~L;MW;t4sOMu)jK^eun)XHyZcGh1?m5A^HlVR67(~W=sX#aw?QFMa$j;vI-N$ zlTuwf9XP=R(ws$MqX!MS1AG`yk^@r%9ziyEXiyTf6tPStKruz1*M@DQNj73Pi83cl zS|!zXKX>m{)~O%(AE7?Pd)35%Z1Qo0B3Ym+A*zmdF&GRlfZQZ&BXj7+yl+M9D-tx0 z=4(W-mJTM6a_k$d3pVXjR0^>%dzp~2M$VD;;6jWMW-s6xDl4}DU;|9cuW#WFjgGUyH@h*X_aw1|5 z5HZ3&ZZgu_x7B#HzGQDSOcM~dwM{a3u=RoUD)R-)n!dP&IT<8OWzC&zi_R1@(~Z_~x-6(hg}*8d6qkqE|j@-7+0?7<{j8@rdfYZ=OKM$3U=+WhMC z+OeW{_$)|;vI>AoR&I}t#T0fYc0Oogzmi0hEDF)4yu&Rn2z3yu_N|8q^dP->rRidx zzC3u^mCXv=b=G0jz|QezMkiPN0h=tT(#-@tU!F3qO~ItfOFw@Z>Bk4(JfD)|*Y>8) zNV=zPXGqeL)p0A2f};V>ax3q*wnwlkD(BkGPcsH)w(M$l#4NNhqlogCSKwi>3u=L% ziiDt8Z1)8Pkm;m-Sdx_hg?;m;^5H|z)$wisRavx-TIKE>Q!}^s{I0P5f)HS~wAZoC zs=gcEwv4O|p~|YD9r2)@Op&-6;Y>G?7b1KMrsTsixGW@xeR=}~C~`fYoy^mVgeyo1 zyJl+^;N|*M1)^vr^bXJ9kkoT0MH6*ZU*3!{T9o>ul19w2IEtM&oB`Z)J{E}>FGpD&Nlcor9C-17b>V;)(d+CCh3)}14`#%ZufC| zPrG20zhwAQeNmXCqG-dI0=+2EG_WF9<3uiDvdpg)-4|)jwPlHQn|09-EOCidH9s(A zmG9?^prry^h?Q}Qlh0l_K2C?~NZJbO(%a+vuZEv!-~}$yb%xMkDDn%Bq(FDQ7Zi&s zypo*pBPx<~j*7Z6-fshRtB&u=42WETWDe)d0WKP79M)>-7=p3j%=^myN)yq@c5B^DE=7v1d80^;%)wLf z(G6L;x7Q%asb#yYn9IZ9ucv)+Pd8#x)%-iHU-l}i;bncK;HVdd*sX|WH4|c@8!fm2Pf^ zlhTG$#hW!!GJXnJ_-yVk>pvtlH|~TaXBoBgDP@R-W9=LPNI9OmT zaXnc}#(;cDEy?S}aB!zTbU1RAj>c=SwCriWMqBoI&*ahVs@ZhZPA0o?ms5ImISfy^ zeA7R7;t4U!nHN>#epH)+=xd|h%eqbgVS}*GHHGtwuSq&>9STi}wLP6*0xe)lDVGC583gpnLBMg9Rn?D`s%&16WdT+8N*r( z3(kJ01>MZi3b0!@p0LnyY`YV5Rzag<(CLG^;VkVC6Z-1bJE2z}tlSZe-eVgdZc_ z%f7iMsY@7#O|o-v_$~wyaD!gKagF)#k)RO{1&3Vk4NtN>q~sx!;>YxiTmSG@UTZhk zledITZ7+^2E|;oL`mZjrZ?Ba|>kXV-973(d%dgSPUjH^-?Cl<&RLgNbf%nW`SzK0c zCeK)r`wOwiAX8FqK8sG^{TDby@8-DDnsQ&yLvM3~2XEm{@n@!LCnemr`;fE!K>+p= z!M19`q|?}Hmm^02KCY1Oyt}_ye$atMaVtGtCzUVoOet>HIYt4iQ`mgdT^^_Ez}Trh zU67@#*h6Kjye*_jUzzli+4~AV|@D$z~NBO8;5WqNe zO+*z(1#6;YC7ie_>v2(Mu7rwm+l8EKkg4Pa<;gxG3_$K*k_c)ldDf4)-oCZO=|H+y zw+9;wKR;CrKYZUslX*Ej>$PJoVU-64z1N?@MU&LJ4Sq&*{B;Tc`J*P%C}k{-4vit~ z7HtevDv4(FZnXHowk>7;xOzcrJmUIw+*k+Rt88kIwL#(gZT1-JhzeE<-`Cy1`WzWP z`wGr|yqS3 zJqF?2A8gtKa+&wwE;VqE^a-6TBNd&@KlB&WkwC~Km=i}(;kJ<~P>|c`XW+xO(>JJv?VKF|=h* zYhl8k#ob?~Yos`-+3t;r|ysx{@MGjUfZ3B8%hDF#AOC(P}Nmi6kiAut* z_rWD$tSUCf^|}n~S@gv4Yv!i)!dv?#xM%*38hc%`4NE_{t>so9L;Li}#^X6}51^EF zJw1HAxkED3y%5LFCRs1P0HiqwA`id!+c_UMV4iX?yt+X^vRXiHlM0fhgUZZ8cW{cn zl^ohNmLQI~*=?cNM@`zRONG*GFFeEm1c!hwFGspgInl|EPQFjn-t*-XMq3I${>GiC*`&5id zLsZa=^~PpxO;13R*o;6GR6n2I)O0`%GUs^-zod>a|73I9Qw!Lddb`@HQ}6E(LH)qY zSjdb&D~<|*CpwjfNk1@F7o$D&TO&mm8cRRdblA1}JP-ciNcBV$rdd?DwN2oGUCS$iE`P9-u zTE-;!=#ljeMzy*o-}U>HWKTfLNnW!R?lq*k47Y=Zmu^jC2t&rj1oBO(23RhAD^HuA z?}htjQ3m-BH&Oqm)sQ=Mc13w zS-d7$Ztc{&nkldm8)%_KgOuK?thll_*2#hl*$k|uZVKIR{{mEt)gKixuk)GV*1tM? z;W(!$9+t>0198bXe1Ywx@wL#7LM3jSS3w$j;bOFUmGM29Pr&)(Ya!dvSgYykj!{&r zR13j9pG%4L)U)oa)qc6fvJq!XhEN{9hOkMcyrM|pu0u6%@v~8eR9^%#+h$egR@5CO zrYgf8ZegmW)!q2jX^e=FMCyoppvh~F#T_!?iEMgtm@Zt5@X9I@#k>PR)q$+R8Z>zM zBsKcsuD1;X5P@OJxuR&QhrMVZQ5!ujU95w6;r~WCVl#X9zUmRQS9f~^BRVX_7nAiZ-z%5X(M#PH*^_^1itot1@ z3SJmSR&RI7?7wI~bb>*|45YKs|aR6&G9X-RGB4@1x`4n&L)OQ@yZAEq|O zWGgfpbbRIeDo~whA8xuIU3ksMKkLn+6wgeMq~&-ypPLe|?^_QP-y2PkU8oGAyKBiU p|2josTJ-^k!R#i&#QDdMjNj!)kMl>X?>`0gA1D8G`r-3K{s)%tOLYJM literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/5B99F3D7E0CE75AB1F4B737EC88B269A5436CD72AA758686960F409B04841707.bin b/test_fixtures/masp_proofs/5B99F3D7E0CE75AB1F4B737EC88B269A5436CD72AA758686960F409B04841707.bin new file mode 100644 index 0000000000000000000000000000000000000000..30b0e399a357823df00588f75d8cb3fe88b633f1 GIT binary patch literal 9208 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 N{~tXR6wse9{|2EzDjEO) literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/889C046FA76727BC97433503BB79BAC90BA1F01653EBCFDCF7CC8AAA1BBEE462.bin b/test_fixtures/masp_proofs/889C046FA76727BC97433503BB79BAC90BA1F01653EBCFDCF7CC8AAA1BBEE462.bin new file mode 100644 index 0000000000000000000000000000000000000000..525e1e63ee265df1384210ff91e0ac248d049253 GIT binary patch literal 25031 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 I+Fs><0Lca^(EtDd literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/8B29BC2E1A96DF331C7C3A2B227C98D1E5AAAA9988F26B1A47090ACCE693572F.bin b/test_fixtures/masp_proofs/8B29BC2E1A96DF331C7C3A2B227C98D1E5AAAA9988F26B1A47090ACCE693572F.bin new file mode 100644 index 0000000000000000000000000000000000000000..77f5568490073f7a005b95c12fe8efe977a06dc5 GIT binary patch literal 7448 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 literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/A9FA2730222946FA51E9D587544FDED28D5E7D3C6B52DCF38A5978CEA70D6FD3.bin b/test_fixtures/masp_proofs/A9FA2730222946FA51E9D587544FDED28D5E7D3C6B52DCF38A5978CEA70D6FD3.bin new file mode 100644 index 0000000000000000000000000000000000000000..634d326dcdc00719d8f0f737b56dd64af89d3350 GIT binary patch literal 9649 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 L{pUOWZyWyx8{+`r literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/AC308C08512AF5DAA364B845D146763B3CE0BACFB7799C6744E50B9E7F43E961.bin b/test_fixtures/masp_proofs/AC308C08512AF5DAA364B845D146763B3CE0BACFB7799C6744E50B9E7F43E961.bin new file mode 100644 index 0000000000000000000000000000000000000000..b67b3c8cd080323210873fd902f72c278f1f4854 GIT binary patch literal 17018 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 JdIku{{{f9vBg+5) literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/BE57BA4D8FB068F5A933E78DEF2989556FD771D368849D034E22923FD350EEEC.bin b/test_fixtures/masp_proofs/BE57BA4D8FB068F5A933E78DEF2989556FD771D368849D034E22923FD350EEEC.bin new file mode 100644 index 0000000000000000000000000000000000000000..c05883cbab75dd3e0b4adb8f5e9f8896b780939f GIT binary patch literal 19947 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 CT6y*W literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/E76E54B7526CD2B5423322FB711C0CA6AA6520A2AC8BC34A84358EA137F138D0.bin b/test_fixtures/masp_proofs/E76E54B7526CD2B5423322FB711C0CA6AA6520A2AC8BC34A84358EA137F138D0.bin new file mode 100644 index 0000000000000000000000000000000000000000..4df2e0be9f296c431ccbf45a93b596618360c138 GIT binary patch literal 18792 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%0AZ#;eA|76Rb`B;G|kS4*m#I&fP@uXgr)O_6b!x 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 Ct%%V8 literal 0 HcmV?d00001 diff --git a/test_fixtures/masp_proofs/EE7C912B7E21F07494D58AA6668DC6BBB31619C7E93A1A5A2E64B694DBE1BD6E.bin b/test_fixtures/masp_proofs/EE7C912B7E21F07494D58AA6668DC6BBB31619C7E93A1A5A2E64B694DBE1BD6E.bin new file mode 100644 index 0000000000000000000000000000000000000000..56b269667b85a1d899ad3cf4957cb9665f6c6378 GIT binary patch literal 7448 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 uE?rN|N$s3*$M0VI8o;nOl#z({ Date: Thu, 27 Jul 2023 08:07:09 +0100 Subject: [PATCH 3/4] make: add recipes for integration tests with saved MASP proofs --- Makefile | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a347ff8e27..cab65553cf 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ package = namada NAMADA_E2E_USE_PREBUILT_BINARIES ?= true NAMADA_E2E_DEBUG ?= true RUST_BACKTRACE ?= 1 +NAMADA_MASP_TEST_SEED ?= 0 cargo := $(env) cargo rustup := $(env) rustup @@ -115,11 +116,14 @@ audit: test: test-unit test-e2e test-wasm -test-unit-coverage: +test-coverage: + # Run integration tests with pre-built MASP proofs + NAMADA_MASP_TEST_SEED=$(NAMADA_MASP_TEST_SEED) \ + NAMADA_MASP_TEST_PROOFS=load \ $(cargo) +$(nightly) llvm-cov --output-dir target \ --features namada/testing \ --html \ - -- --skip e2e --skip integration -Z unstable-options --report-time + -- --skip e2e -Z unstable-options --report-time # NOTE: `TEST_FILTER` is prepended with `e2e::`. Since filters in `cargo test` # work with a substring search, TEST_FILTER only works if it contains a string @@ -135,7 +139,23 @@ test-e2e: --test-threads=1 \ -Z unstable-options --report-time +# Run integration tests with pre-built MASP proofs test-integration: + NAMADA_MASP_TEST_SEED=$(NAMADA_MASP_TEST_SEED) \ + NAMADA_MASP_TEST_PROOFS=load \ + make test-integration-slow + +# Clear pre-built proofs, run integration tests and save the new proofs +test-integration-save-proofs: + # Clear old proofs first + rm --force test_fixtures/masp_proofs/*.bin || true + NAMADA_MASP_TEST_SEED=$(NAMADA_MASP_TEST_SEED) \ + NAMADA_MASP_TEST_PROOFS=save \ + TEST_FILTER=masp \ + make test-integration-slow + +# Run integration tests without specifiying any pre-built MASP proofs option +test-integration-slow: RUST_BACKTRACE=$(RUST_BACKTRACE) \ $(cargo) +$(nightly) test integration::$(TEST_FILTER) \ -Z unstable-options \ From 83f5c2de5c90bcf935e61ae95c0f8a46bdfe6632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Zemanovi=C4=8D?= Date: Thu, 27 Jul 2023 08:09:03 +0100 Subject: [PATCH 4/4] changelog: add #1768 --- .changelog/unreleased/testing/1768-pregen-masp-proofs.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .changelog/unreleased/testing/1768-pregen-masp-proofs.md diff --git a/.changelog/unreleased/testing/1768-pregen-masp-proofs.md b/.changelog/unreleased/testing/1768-pregen-masp-proofs.md new file mode 100644 index 0000000000..7f86b1621f --- /dev/null +++ b/.changelog/unreleased/testing/1768-pregen-masp-proofs.md @@ -0,0 +1,2 @@ +- Added pre-built MASP proofs for integration tests. + ([\#1768](https://github.com/anoma/namada/pull/1768)) \ No newline at end of file