From 227f00617954ca7246836f94fa6dcfd8ea63b692 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:15:55 -0500 Subject: [PATCH] add clone property and shift feature restriction --- artifacts/program_methods/amm.bin | Bin 534992 -> 535024 bytes nssa/src/state.rs | 5 +++-- programs/amm/src/full_tests.rs | 2 -- programs/amm/src/lib.rs | 2 ++ programs/amm/src/tests.rs | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/artifacts/program_methods/amm.bin b/artifacts/program_methods/amm.bin index 0afa906e1c23390e30f945030f81653094762d62..788ea2bbc77f3fad94f03acd7a61c4a5c34d27b9 100644 GIT binary patch delta 12248 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 z⁡k5cy)sh5N9seLwmqT?!x$(cabc3s3r6>iA11HpGQJF)xa5Qxch!b+*iCfwE z6#I?M1lQg5D4gYz-=&82oPJ$Qpds5eU?n{FN9V=tKX4)a z_9I2FTHXv?jU~DU3)S1nQy=BUGpiHP7jFU@c2|Q{4>h&&YnIl* znX0$OGkQ%Odi~om#LsY9uYjnR^3y-ZP*(-SG+9;F!+l&HI}Il?zopz)pD!?^%TT4p zglO+R9xgwiiuHCv^FtiB#Kjk4k7BrkT=!n|7@XjiLX?V{55u?!49ZK*!@|Uc93|W|1xQ(0;BOVuO8F9`ymv& zFCb#oa0)jbGM;Gfo#|B;8u3ZqeU~<0&BU_OfY>4(aQL9%$@0$hC|Snr8@x4Y=E5V~ z57 z7Q6*Utd)r~;O#En3GZ-?k8h&n!1g&f6#mfFKM$^P&Ho(U>98&mP;`T9!bo_RGeA7@ zGe1kX`1DC`Mlg1<6wLfZ5g)jCD!d7{H?$e9buNaa}`>J+C$PQXdKmzufSB@Q-a0tqN}z1-<|e{5JeSVDfKp&+iB$0d z;S@6a2VYGIZx<9*_|@cjaMk7EBi-ckOpe~4H0wt(lb`F$20sa3Kb!MFDz?$!);PZ( ziA-hQC>2@-kGMblBx(xibRCD(cFhVolOKZDV&V~Uya8vl4T_VJ+g*>#w4j(K70iS8 z;G$UibyL7D8ft$De*~LcaU;nY2#Sqz!nbg3wqI0r5AU$^KwkI1_KU$+gn1lX_O4$P zw-56oc;K`ADAqR2wQzkN-*}WNQ@;Nutd?#)vFKLAP#TJQ2CR=lbHK-gaLH}q-x*C# z;uxRL;}rVv4&)UN!|AOxF^sG>`_CWD>(@Y7?)Vyb%V14ZQEtrs39y>2i6xSk!6PO=pV|lPF5sJ&W1CZ zX^|kD2`|u{nAia4nfXLH5KZ8t9kLztc!`sg>XSy_^aIH z&G6ddpup0Wyne&6=yWU~NLI+8DjLlJu*cb<7{iTo2jite;yzqR z3=M|O80rR}_)K?9w4Mfcp=dkST_}iPILkabrNG$xc@}FQ6j@RM10LHYXuU|73U3{c zLceIjFJop@J{zJxUC!4gkVX3MXiOrS6M9VM#xYlm`211018HKH+PC23dxO@|V~)=) zq;%u+JSngOUgvVret5BqgHs5?qddLH@v|P|D{Mr$qhTAWVY;87k}>ctJf|5S9dZYk z7c0D+I~J>e*KXCsDk<;;Tu@Oc?& zxRMg6BGWxG5oxgXcq;ii_!K)vKP!q$;c`Au%>Uwu z>SxUHu-*SL9LxRAwph_3(wMWt{N6Mzpnpk2dRM+!q|XyyChrNdM9CxJKKDC$Kj2l) zZ!C~31r)&z6P>JRc#ZjFi5-;JFFDf%ufeXZ5cLfiwdOLXoNFTwi>Izr3Z@#k<}Mo?xM{=axB0(mXTmOJ`p876Md`;m-+ z=_?d5Rl~#xi03x=DeOMqA6dx)KWo;F(lluuyq40OFXi=G#YE~rrR0NfC2Ts)I{#;_ zKJ&_S;|J9D@!{tjQ(y^vG=ncSxr4GTn9$|p4RC>r8{tA1kJ*NWDAmPMfvoL}=Q*gD zEV0i2B_E$z`C@jSS^0+Vrtn-Fuq#urDg~fjS4j0J&C*gr8kSd<5lkXD10d2x#xF0Lg^kCw9a>P z!EtcqeH>=e9`8;Rs-ui_%$M7BS#YDF_%d#TWxW?PQP1-s23gsU1Z9A*r(X*p33N7sx z?GH^n?0f5ML*^aEAft}_nL$#{y|8J{Hp%Dich*n)-go?*>yJEo_VrEW+MIiNt2_1F zt50~zcS-2^Mqdk~(=p#XrTPE2ZD>=Q=sV7)Rw(nh@7}X^EGqMjY;(>v!@f#LJGWNh z5uuk(_+rlO?9l!{?M_JT^*=PYH0@8kV%o*PE~k}qYjElR+CiK2bE*(ZZt`_GtMROO b>3;5sO0_S+*wy5lx<>iPxOHjti;w>wuhWPj diff --git a/nssa/src/state.rs b/nssa/src/state.rs index 0d5e6364..4ab71da3 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -16,7 +16,7 @@ use crate::{ pub const MAX_NUMBER_CHAINED_CALLS: usize = 10; -#[derive(BorshSerialize, BorshDeserialize)] +#[derive(Clone, BorshSerialize, BorshDeserialize)] #[cfg_attr(test, derive(Debug, PartialEq, Eq))] pub(crate) struct CommitmentSet { merkle_tree: MerkleTree, @@ -64,6 +64,7 @@ impl CommitmentSet { } #[cfg_attr(test, derive(Debug, PartialEq, Eq))] +#[derive(Clone)] struct NullifierSet(BTreeSet); impl NullifierSet { @@ -104,7 +105,7 @@ impl BorshDeserialize for NullifierSet { } } -#[derive(BorshSerialize, BorshDeserialize)] +#[derive(Clone, BorshSerialize, BorshDeserialize)] #[cfg_attr(test, derive(Debug, PartialEq, Eq))] pub struct V02State { public_state: HashMap, diff --git a/programs/amm/src/full_tests.rs b/programs/amm/src/full_tests.rs index 51fbea8a..5c918eae 100644 --- a/programs/amm/src/full_tests.rs +++ b/programs/amm/src/full_tests.rs @@ -1,5 +1,3 @@ -#![cfg(all(test, feature = "with-nssa"))] - use amm_core::PoolDefinition; use nssa::{ Account, AccountId, Data, PrivateKey, PublicKey, PublicTransaction, V02State, program::Program, diff --git a/programs/amm/src/lib.rs b/programs/amm/src/lib.rs index 476e4776..1219592c 100644 --- a/programs/amm/src/lib.rs +++ b/programs/amm/src/lib.rs @@ -7,5 +7,7 @@ pub mod new_definition; pub mod remove; pub mod swap; +#[cfg(all(test, feature = "with-nssa"))] mod full_tests; +#[cfg(test)] mod tests; diff --git a/programs/amm/src/tests.rs b/programs/amm/src/tests.rs index 203e3284..9d2213a2 100644 --- a/programs/amm/src/tests.rs +++ b/programs/amm/src/tests.rs @@ -1,4 +1,4 @@ -#![cfg(test)] + use std::num::NonZero;