From f8e2b359b2d1fcd48d90d6f1c29ffb8c22a356f7 Mon Sep 17 00:00:00 2001 From: Erwan Or Date: Thu, 4 Apr 2024 09:13:21 -0400 Subject: [PATCH 1/3] proto(dex): add `max_positions_per_pair` to dex params --- proto/penumbra/penumbra/core/component/dex/v1/dex.proto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/proto/penumbra/penumbra/core/component/dex/v1/dex.proto b/proto/penumbra/penumbra/core/component/dex/v1/dex.proto index 4ba3cbb394..88bf102fbf 100644 --- a/proto/penumbra/penumbra/core/component/dex/v1/dex.proto +++ b/proto/penumbra/penumbra/core/component/dex/v1/dex.proto @@ -702,6 +702,10 @@ message DexParameters { repeated asset.v1.AssetId fixed_candidates = 2; // The number of hops to traverse while routing from A to B. uint32 max_hops = 3; + // The maximum number of positions per trading pair. + // If this number is exceeded, positions with the least + // inventory get evicted from the DEX. + uint32 max_positions_per_pair = 4; } message GenesisContent { From 92749dde521bd59ce22747b9443870d4b1fb9e1f Mon Sep 17 00:00:00 2001 From: Erwan Or Date: Thu, 4 Apr 2024 09:17:34 -0400 Subject: [PATCH 2/3] penumbra: regenerate protos --- .../src/gen/proto_descriptor.bin.no_lfs | Bin 88631 -> 95074 bytes .../src/gen/penumbra.core.component.dex.v1.rs | 5 +++++ .../penumbra.core.component.dex.v1.serde.rs | 20 ++++++++++++++++++ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 382778 -> 379727 bytes 4 files changed, 25 insertions(+) diff --git a/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs b/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs index c2c1f4df906c5e549e4bf4ff1514fc587b551e16..d50e1bd8818eb8b4d521b590c16703d42bad4e23 100644 GIT binary patch delta 20237 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 bfV?~$!Ml3V^q_EN)y%3n>1V%bz3+bkz^~Z- diff --git a/crates/proto/src/gen/penumbra.core.component.dex.v1.rs b/crates/proto/src/gen/penumbra.core.component.dex.v1.rs index 316658f996..118449a51b 100644 --- a/crates/proto/src/gen/penumbra.core.component.dex.v1.rs +++ b/crates/proto/src/gen/penumbra.core.component.dex.v1.rs @@ -1509,6 +1509,11 @@ pub struct DexParameters { /// The number of hops to traverse while routing from A to B. #[prost(uint32, tag = "3")] pub max_hops: u32, + /// The maximum number of positions per trading pair. + /// If this number is exceeded, positions with the least + /// inventory get evicted from the DEX. + #[prost(uint32, tag = "4")] + pub max_positions_per_pair: u32, } impl ::prost::Name for DexParameters { const NAME: &'static str = "DexParameters"; diff --git a/crates/proto/src/gen/penumbra.core.component.dex.v1.serde.rs b/crates/proto/src/gen/penumbra.core.component.dex.v1.serde.rs index b7294296fc..a82e8bc664 100644 --- a/crates/proto/src/gen/penumbra.core.component.dex.v1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.dex.v1.serde.rs @@ -1052,6 +1052,9 @@ impl serde::Serialize for DexParameters { if self.max_hops != 0 { len += 1; } + if self.max_positions_per_pair != 0 { + len += 1; + } let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dex.v1.DexParameters", len)?; if self.is_enabled { struct_ser.serialize_field("isEnabled", &self.is_enabled)?; @@ -1062,6 +1065,9 @@ impl serde::Serialize for DexParameters { if self.max_hops != 0 { struct_ser.serialize_field("maxHops", &self.max_hops)?; } + if self.max_positions_per_pair != 0 { + struct_ser.serialize_field("maxPositionsPerPair", &self.max_positions_per_pair)?; + } struct_ser.end() } } @@ -1078,6 +1084,8 @@ impl<'de> serde::Deserialize<'de> for DexParameters { "fixedCandidates", "max_hops", "maxHops", + "max_positions_per_pair", + "maxPositionsPerPair", ]; #[allow(clippy::enum_variant_names)] @@ -1085,6 +1093,7 @@ impl<'de> serde::Deserialize<'de> for DexParameters { IsEnabled, FixedCandidates, MaxHops, + MaxPositionsPerPair, __SkipField__, } impl<'de> serde::Deserialize<'de> for GeneratedField { @@ -1110,6 +1119,7 @@ impl<'de> serde::Deserialize<'de> for DexParameters { "isEnabled" | "is_enabled" => Ok(GeneratedField::IsEnabled), "fixedCandidates" | "fixed_candidates" => Ok(GeneratedField::FixedCandidates), "maxHops" | "max_hops" => Ok(GeneratedField::MaxHops), + "maxPositionsPerPair" | "max_positions_per_pair" => Ok(GeneratedField::MaxPositionsPerPair), _ => Ok(GeneratedField::__SkipField__), } } @@ -1132,6 +1142,7 @@ impl<'de> serde::Deserialize<'de> for DexParameters { let mut is_enabled__ = None; let mut fixed_candidates__ = None; let mut max_hops__ = None; + let mut max_positions_per_pair__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::IsEnabled => { @@ -1154,6 +1165,14 @@ impl<'de> serde::Deserialize<'de> for DexParameters { Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) ; } + GeneratedField::MaxPositionsPerPair => { + if max_positions_per_pair__.is_some() { + return Err(serde::de::Error::duplicate_field("maxPositionsPerPair")); + } + max_positions_per_pair__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } @@ -1163,6 +1182,7 @@ impl<'de> serde::Deserialize<'de> for DexParameters { is_enabled: is_enabled__.unwrap_or_default(), fixed_candidates: fixed_candidates__.unwrap_or_default(), max_hops: max_hops__.unwrap_or_default(), + max_positions_per_pair: max_positions_per_pair__.unwrap_or_default(), }) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index d2be9305bfb238b8d714e9072848c7084214b0c8..5c5a38007f0f3ea943adfb4e1452c7cee9443fae 100644 GIT binary patch delta 20509 zcmZ{Md3=?{)qiH5?dG{zZk~iKfLy}98c-CJU=f0iV4#>Tf)r4$NX3K#)w=akfl{@Q)VPI$Kfg7Vnv|NJ zynD*b+fgr-oSK?AW2T>+QhQgbc4po5dyh1ga zzC$)R!iX5)V1XIo+;+NH*jU!V&-1xGC~)6&&@JZ2eajw%nr}L>=Kf{q%pjf<*bU*P z8rH8}gTo7jI)tdx;3P^l1Y1KU_xo(TZ9Vd(72a_Zo6WzmGoRnYQasVp_fnID$6MyZ z&$*fO%`6k^^u6y_jjkM;;6dOQj2L`v<%sd4D@Rohu7S)dyVWllS(~c6Eqp!2I%d)- z_O#D_muWYRea6ea;}=v)zM-kxCjM;d%pj`;CR(VP!P@2~mifLvEH!cF&!(qtOw9~x z!@KWi*Y|jA;T+&j&3$R zH4XNpCJm!TDr;}8qnHSO&HNTKW=_X{$BWj--!*aSlt~jQMnz;6^z9SAeiv(9-TOvS zOKATfs&j4ItR{<8lesqxt{ytLX5{FbMmLk(|DhG!7vA>^Htfm{S;{Sxa^Z-|>g#I0 zJATyY%3)PMg5iaCre@5TI5`!WoC?4E1sga}`qEm&q-*k(zB72lh><@W?f+y(UG1>C z>32??84UIFrcbO@YE@0XFrz2`gMZi)At&J;)y5;mBXHU;1mFwrF~H&Y6>W|5t2Qu74?J2Eu$`&X2?Dh3wLT zfw9*9089ynDPdKF4=-d__pjhSW{^WN2f}!fMhqxuu8{@Qs?_f;v{5uD{AMBR*?&-^ z&7eIf(q>d8Xr;6nvt8Okd0-6=Z+VzrWB(zMHdYF2NIaqHThJa-RHhLrbn4>YE41yv8WxUyg5BSLSfp)3dsw6m zhgrjll1kf#_OK3}{40buDprMsA?u&6inJXU!g#5w??Ah%br+4GUDdq@)+F*dDqhcf zsUjDaTpy9RR2IKPmx1K^c3m|B$@M*YDiSZShV$NORpx3E(6Q(vThoI zWq8kCiX|3UBY1CB6a&eKh$IG*5%G4q3?w6xnj{925kxXlbSO8lsyVH{6g|0Msg783 z!BQR9(US|7>K3|txnQYoU*?~st%h+wuxi4Ei`cmVHIcdx^_sX2A0O&9rQKCSKGbV^ z_4Zdw^>|>73Ey~sh@{_j*D8#LrdeLmh#ZjxG3uL(9*az zm-t;V3whv7%=u-QyM%R3PmHw?!@y}4-ojf8VgL}|qKJV&e2XFm0`Va0Li3?gu#uI)L5d7Y9>3$*Z~B~q^{i*3npbsMFi&@EUAcv0yh=0P#AUx+^xGZ1$wuuc>+rWlFkPL z%k65O0DP*vT`3H3f$x!~7>PUVJcBV7cjRM_*X3ZlqqwEPX!(xTZ3H{%qj;*_8swEf|G(rc zjUG+SVyA_3Y8E>U)70YT5j&03RE%~$Y$tY%RIPn!R7_)4n?*;XRhwUC%0XA#p}WCp z@YQ1e$ml`i)1q;Az%?xzGFsWDsY%E=t!&du4 z;rEBHJ;j!%X~sf=>i769)bNPC@818<*rO2b-W$17Zi@FtqXP`Gd!w-jM(g)RW6x;p z@6%(S{*TB)DcJAJVyCgcFN>W_y)PPj)Cc>0(M-px{Q#!`rx`@6_5+cFXw`loF4s7e zf#!i$UF4<&2$l!14b2uF;<WUdW} z?06O{>xi~#p1HGG&YzgfwaMYLS*)#3dxAx|_S|s73iiEmb2T}HE~E_emdF92GMBZx zOhb^*WmgP9h=Kt#*PX}sQ_PaZGj2_Hq zaAqWc;(S)z$_UWVe1<&aUd4n8kAzRJWcOD-lFfusu^(ai#gQV01%i^cMgXQqShBsp zf+;E<*pG!1R^}LjbCdG-6f` zVrE&`a}Dd6?J9fjohHLQIH|2srvBkbxK|3jE~mR(a+&%BoY5NgmC@wPUc@GPsmX)Uu0W#37R zrq{BdSQ-Wa=+`k@MGavoP~IW|G}f`Az+Wt#0|Q=Uyt4FR7JmIK>yh8}mP`9y+5gJ^ zmtEQKif&=odiLX+P%dYv#j%5;dc2M54UPVbtZg?91sPUk=~D|{dy(}Xs-Z`4zz}~7 zPRA5To5Bz3+0DH-vHX^@ibF#QC>H?Bq26s`&069JO?$BWGRs*OPI->?Eq|HC+K8!Y zlh0mZyh%+}U~s&`ytscOTn9)~b#u7$IrjaU&DwQB4D!v|btHh^pS9}*mICQIA%Mo8 z$#r)tX5g*i;B~Aj+`N{R*KB3Bsf;bs-b$4zWJnvn*~aV=F?0fh9s)U*LI90zWRRvu zAnhRfd(u0ynUTlYJF=PK$~T$aEMmqkNrHqCK;unTToT!WQG6>~16v{qjD`!1w<3)+ z%*Wt0VCRT9vHy`E-w2@6z!F7KBN+X+vpb9pfdr<*F=)I^9X?J=1-Sq-{5`0Y{)HuL zCQj}(DK&M?(;9t;EaO6-p}k7Q8x>q0)bq6$y)_b+0RNS zOOx&^4D18h8imk+z-Sag;{a)NQ5uQB{%ctG0_#@x*KG4~!nglQ=IeS`?+#MEPS+QK z^I&$}BGf%7yNWTyBJLhy{8%&{X#qOKygZ!R$w(wCfqeu4d(AeC7Gy)e`iJ7C|Y*@PDU-IVE=>hR;5TB z=_yrA%f2!4f5k-4gmOTKX9-=wQlemZ{#z`m>7DhJ^O^ z)5cM>v!7;x_A2e`r`aX#{9gzT)IGz(H#V{KpfiTT5n`1K+LZaD7V-?)OQimQNDcl= z+5w}#VwqWgVgVcUl_7CK@|CfJmbtHVLTPhk{(!i=og;mNCGKk$HfGq|imwfa2ad0e ze`($Onic7BMdA;Li=hjW1B>45@UfTJ#q?|*`7{QK**xkCErhdqo}p6Z!T{sGi0cOX)Z^HHsty-;=;POG}G)Aw#lwoYDj#T zvy?|ejGGO>geJk&1|ZVxGHkj|;4bGmt3q!J?%$VlY`SEmL(^mhSJMOtMgmGB0l~jQ zcNY-+E4Z2_fZ$(&2vkfcT&cV3h-m_-nJ7tHsk_?=#iF+AFCeH^Qh&R^R5x(f@SNAf zU0Yb^^cs#^Ml#hUQ=ieM0>M;3*#IC+eMXxK2>xfZses^rMw{x=%&O-&r&0(4feBDE zk*W1O-a(Y6Q7meAl&KLQsOmXVBWV<7^jeN8|xUBY-L}kH*lOe+hFZQP4dM?{(p|0 zbXF0iFayQ%G$RD?&PJ|IGeQ7UHgcRiBNZ64k>lW?TR??PT%0}SrN;N=t%j~oPD8nA zf)>I}*-en&HgOz3BNa5Ui3UNOtzBBdUJXCm#?}pd)wqmStyj6qOHl_TukyA%l*?$< zdX@LS)SoIM0yb<3-+hDCR%|g0v}A2Dkw8n<7Ou{oE}b_45ovu8X)(d)t%v=e~P9-wRw5Kh>qodAgT_Gu>oqP>0Ogpf9rT=K%fu>39dWcr|?pb$7{D5&!X zIo>MBWT=4RAjh60jX~#|IF~2eToD0)+8DYUXfjOHToVu4Dkh46CXOoxFntfqfQLBm zq)KtQN>EeL96ZEv|0AuSIe3V-k|P9Fq1&OOUn#l;)uZ8)4eYuxM-2nb!J~R($`#K> zM|nas&>TFOqUHIP z$^Zb-@_Z|hOFAH0o^N4E|ALlup9Wz;rg{&X!73IQ4jS|YhJyxuffdN0h7LFuSh&Al zV+jt7`l8G?d)c#W%p$`?bjv@6Hj>5Vg@N?mPsF!}uQm1UHM~m}w7S81~QGFVlbr!!`8H;;x zf^v4D5VLEYr7}N2G`-GhDJKIU`n}HTqDPKmcbyqIirsZIa>sq?T5xU1-0(h|#40wJ zCMa9pU;>P?qJ1C`oUA2>jHI!4oZYAW>1c-)Sx4L#$zKjX3 z9s@N*L$6y`T&)^H#=X_}oic7f-4NYLZ#5mFjC-r;5M|t3)22tcXlSeHQ7#(VYI=lp ze4E9!6+RjQ)D2NqzRfg5S@||Ap$C|<@@-ZZnNDI9(atujyNs3Qz-VZj)$c0*4DA{| z$3;d%_}35Emtz`C3wV*V8%zs$k_1#ApFjmIG+1rrF#r%PG+4<#%4Kmh&|vi__tSzO z7a+UB&VOUS9J|Z#;~mo8W%%h*WS6CuZ=d5O5)jYWw0r}Cf0xx+F5iIQ-(~gb=RYPp zfcuihkRN9Y2R51p^3gz}2~fI2X|(VqgJjG{1C2BkRl-DEpX?3y9B0ET_8Nu)Fzhu9 zbfvP_3gq7C^8zsJweU_aPL)2#eM(bi%!jO)4Qw(Th2Us19CXRjWY+RRa5P!C(WS$! z&vC(WB&`2Cn|19G!;k>O5yOBlD*z)a5@0w&R{UAI0(URRE#9g0`S7PFSTcP0BevvP z2z1;Of$X>;qx+fTmP%ZGUIen^7EW{TNU|WXPguNn>8lZ0>u}Y_>^FlT)ruPp%>Pgp&A`P(F8abSOHg?FA{Z&ZA0IEumXso^LF$EU_g#o+jqoJ9BMJ}<$2 zfFRk{u4HI zFa)||&A@fWQcplWZw9V2mU;pL1lJi0Pe6F+v22=-=Pe{+_lD&y`QY%xCu~Uiyrr(H zeQ{L{D6gskv6P>;a8*s8e)(8YzOs0MTwijrn|x)(^JSQd=Zb6yMFHtmD;~HPt(;x9 zeAS`}deOocWCtDeF3u@Ucr>%_BzvEaeH4d#K?pG{ebiQaIv}(jwG%QER!TN9VVWd> zn0AlaYDWabw0qRXj`&X+%s6Ep3&X#iVyDI~G!0PVvCuR?iN``aaj9aY#ABh|S3abH z0Szp)FR#?4Xkejz%~1a{*#LUGIP7+seV$%y8latTv1x#;SZu3>Db6V?S#0C3NA`fS zlErqrat+bIV!QjL!trr9eyPoih2!Jo_@#C{Pu3KUH!z(`Lnbh7H*s3nm)ZsL-V5kI zps0&dSyv$3?F)-Uj=t13P?s)ug->Dr2Af|}`d@CcdSp%IRmq`s$=bS1i!WHhx*8>V z94UF)V7x%d(*`>sk0o)DJZ-S?ZrBk4M*Z9r-g1_8?zPEukTkL(>=3Y>()g1dK3~dP zhmB{MbJ?Ga9_3Kk5PAZhq)akSr=@K+A60rN6Z;Y=sdyo}qR*B6%KHo`?-t&7j!hnm za@`Bc&$gLf5cf7aA(we@!5Q1^0dn60#8_^#2aXgeAVE=FQ7zVmIEBTIu;M(srecR_ zfD)k{wptKS2Mz47)q(&Bh8;E*1bPXM)6uTM4kxZ)*Ix^Oo-`ODd=&twRs)oRsKHjN z0U(GPY^(hR>yllDDAh^eJ&u(+Hd1{NTCM^2ky69 z%M2S3lVQKzxhMRI1}MQjVDk@cOV$=oV+U;9#kWKLiej?hpluhHh8HiewjJ`x;RAm@)EHm(b@X_Z@$8gdYSuxe5Z1)&N6Foza0Qk7A-lGJDCIs?zNeDy@ zk_ciLKGCs-QlXcSSKWYc%_roV#k5@J zks0Ug%vImAB|Lr3kWfsVv(-@ywLo&t#+O;rp|seXvvHxNApCpIZYz&0s0{y}v%B_D z{>59zd7IC2w13H<^R|~So=x)PTgO*;xGW88aBA*=|H}6sQ3Uh8vT;V}CcGvdH!j*C zu4%h>xR_m$+f(BMQ$VX%Yv;eGj)FB?FXkfL2L-s#p1E5+PE{*e(W7e7m=oG)!G(Zc$ zTKx@mo>&0ZI%>B7L<4IbwOat9fwc~Hi)%y&5DM$VV|je=*!6~=jzQ}UKdlSvjfZGm zSnsru%W@uf!N1-qmD?*I_}4p~y35;}Jc^eW!~663lRtjZG(cyh7fl0nMtadn=#Zl` z(u)qxS<*vvMtadHliMo@iP7oR*WV#LgtuTfsNpPRmwm-in#2PE>9n;M~@ ze1!svHqJcSyEi-dP*C=b&UAo!dgJ>cKzyI4O40mgr?n0h+8Z`II05}ZEE)(T7rzd8 z&#_9E@?;JD2q4oh!P~R+8;;jP^+|jRwB51WsKrWt_5*=@Rn4RCfMDQu2iK)?^}=+) z24eaIECsqt5I|!GbxCUgzvctt$eom{ zK_K4 z5Ps)8yJ83+ya+7E0}#DGp}hzQ-4oi2fav`R2Y1Aj*ydA&oRnU?763#i4H3PKoYZba zsi>>m2neE++KqIha>|j3Z9XNor?fMHpa&?O35afN06!?htwF2tj1t+X)#XlZ% z!En$7xL`P_XBYI=4;^q^&|5zs7Mcrs>j%VAb%C~iIt~>e7%n<=979ym93*Q-4joA!%$eiRXRY~7KSCurs8E5$b6k~f0m9-r zt~w3@!s0pZ0C~d>2#e>qS67S0g`g-Nc!LO^0&a!vTkwHH@E?r#Jktg}yv%de^g}7y znCGhL2MCgRt_qw2%Gn-r<%tMDpvYLfp`%dEKa_&#Ay)+sAc!7v)%>H2v`1VKI8R){ zovKG%H3+)8t3JDcu%@X#IQDmgsWg*2~M z>G1)A9-tf_Ky+!99-joBMBJQL)%eiGadl8kWmL6z8aBOtd^)w*7xY1SD z(}3{eMi9D|P1_GIT z2?6@?o{Mz2BT^9(pu+BOMK|8LY`3evD;8qZ+wC@Q;a{oh0XK%9bmIfkjjs9>lj_k> zG`iw5Sn4}Y%zIqE*Ol*ez!)0{@f?{VA6+YLZCVUMfc4*}tXy{;=C z6ae9by>3y*JQ1x$)bIfrtwR9N&H>X7#lQg_t|&!22XwdsqMZX2t`tl~gql<^0f4B< z5Yd!u(!qpM5H;yw0u-uh#iV=s!!nrq6;Uu9*1-e>JwO>ufUx~A1=GV8_Syg`g`4x0 zo4KYZpU+A@a`9=?PTG(H%1;03^3UAN;aVsR&;OL{k^mJ>xps$$lZFoh#hIoWAU#Drq0e`OiqOGR zcO(GmDOyn}MGeTz(=L}E8~}k3P{sow+_yi)T&baEe1rQ`>Tzu&-&4K67y6WT*h_C_F=FmES)-aJf z&bom-prSIE&boMm6^D?3;FqrY@&*V!1JqP>4fCa|Zuw9OsxRFl`IH4Hbn)elGzzNc zT=lhBAU174%|!Pt=ZsObX`ge`>e~X;2Gu#^Zd5++a{1r|kAWFbQ_;=Jd1Dlv7tgyz zdTi)w^*lv`GzvrWFIRn26NtN2K+SYLU84NUSVafPf4PCY)Ie=e{maEiHUFRhFAm%} zUd{oJmHyg_QmQL2zoK8iK9^t7EtBrc8(De|E<(hateBR!xgLMWlhi8`%DnKC5q(XpU{*|ZBq$EIvd7k=ET3{)VflY!mo%-i_g$XeiNCN!pY!%{w zz^KR?SsLi{e9x92&k+L+It22^8bSch`5qQkI(rtQ8}7p%U*Oq@cl=-x0t^=<(#e1r zf`>iz!3`kj9`;(vhaW&R_ppbDpF&I)KzzXUu-9_|yhgK`1bA5djc2zPGm~&J{PsxX zHxhvHx1LRNHw`->DM6J-J-b4U1eWv1JpM#960~4H=6Qw6N#bMg-x{*(Ge~$_g2U`LGcQ+ zS9$!|$gi~NLZJOho9-%4eX@tzU|Z$2@2}iS%jGKX>Ve9w$dW-;@vL?$?iMLte{cNC zg-;PFk-NYLg3fgTCUT3#?CL2NIWk)X}z1v3(O0{~gNVv`;Ue5r+z z_@fyKeEf#^ebI~r1fbktM#2&!vC*>!sgb~sxiTJqH5v)pwKAT%y)MR=>mYn7Y5_P+ z5e|vG$rUxw<(E7ht7L@ZCls>1lq53etykU7ucu`y4Sqc@@)VRetpfuSIBbVpf74)^UAkI zZnep+o1;$SHI&@?XX#e4{z3xEEyk~SOhlE}J)1tFgMr8e+&4V_R^(UO!r$;b`J*fp zlV7(RFUpVeA&>_EQ2|}v?y3855`bZcXQ$<_tAs#G-=8iSBL!iw(%=2s^Eop{!IV_cN({%1`OPlEl882-}UUPMD|lmYgwbmtJLB} zFUx@1V0u|@H1<;R)95vqNf%UMZ==^qeoq64V@#vh?YnXX0VL}hz3$hEiz@n#W)H5= z!|zn^OM33{)ES{z92v493>Gkn+bvSs8$MLQ%X;oL8Z;lWAv6T+pfvV}2P=4|^8H@E zeB3G)V-F~gC4kV_?=@@Xzt51hl?3h)FXw11>@bAyE1~alj(E5#co2U%$1b5bo1cjf z<-dqc0)Ttw$CP^j;hy<1wZQ^Hb$+ZwzJCG2J@aE?UW15^I1k16k(f;OfKmIQ7|uEK zJ?w?R)YQt%sS$j(l@<_{y#$;uz zO%FeT-_b|``o1#Ow!6QFt7bt`AG3RwZsp0rQ}3R5&y3{lnbV_q1rt_KPJv>%R}urA zLh7@vpy8;`wt^Ci`fMxcfLot!1*4adda`15p0Wah_hWXq(uMdd66$YZW!8@730GJ_ zJ1~lk6?B4mKc>!nWEM@$_hTjU@k$6_#rrXwVrVjx0QgYM?jHGu_7VsTCmm%DWpmPg zawr`up&2RtNn6UH82-+OCI!dgnB6z3Knp1ZhLlb19;Fc{o4`Z=b{?8GW%_vkpj)m*S@EK_UwE3})NQJ%rEgDrJu3_Q&T4?JkrUk zN%&)9Q}7q5W{AHomYSNnGgTWtHI~<=MMao_nzHLcfUcj^ks<^jKdB={2w==f9VtS9 zNI9t^MG6oYCn-`!Dto|jDrR>qy(Y_^@Zp>JfE%d3ILK!kA8Ule;^#MG~egbFCXh~YqgNP7{2bFpyu zIKFQrRiM~Am(5ABcP^WgV((l`{d`EM2nuX9KapnA>G49${$=>zKjstLpoTa;UWnxu z`NJ^Tg@6X{Vl1p1&nx;U0cbDAT;DJ9b9Ei`_hJnB^1w(9mA;9EN5=EZ%B333@o!>o zZk8G)A>YKXS@w_AAej|@X96#$c%YLdv}WbH@hmNJ?yOvVe?}7swP<2Ln5*)Afu+Di z5#=He=H|^nfW$EXF2$dQU1z9Xe<)i=KJIkG`ZNLBX@jN_Fe(%iu=AC!m z+1{CZ-d@sXXemR!gdKRA8gk_V5K zw0^#Hf0^sA+{=6~a56HsM)y}b169k)0<*U$DH5+ctQC$C6D3$Q8kdN$Fv|8bA)M;))@ zouYfkvvPZ>;}=BtU%?Ba+zQsJsr>|YDepDF_Y##=4OO)@ZF54_BWFO{ep72}r&cHW z&8VwwsGU4>O1~1B-Zb?l))Wgzmkb?OGCa=;0zYTe&?`ztO&n8l?R6u^K*ozJ{KBZy zL{=zkm^y{6@Y$Ls?`P}?A3WaAQB1=VQ_5#nHw0;QTmPTB+cdBa@%%G!-ye}EZZ zRie6bbX}r8QB#o!rbK`IB^%hkvmkT@VP@bC8&x*8WVoP<2X@)$lG3)HdShaVnwitb z&7P469*FX9W8->s{}(lemJV0tz%qL1u&aSS^`beqv9?9G__;G1rVN~Tb9r@DWx418 zTNt5N^!=MzyAl1aL+bUZ#4DsuvXRiDw5+s5Xawf#OU8^G@k7!nhbT><;FhRMl8v}9 zOw+6|$Q@NudgZtuOdLI?WW>lDg@R*przh&`%cmwvYAR|gt7@hOw?-?IZ1DFl5GAdp zOd6w25R59ha_F!hPQ0RI?6`>~BSw^sk#_b2XXvO=WjBx({!i*_Yev-8O)qbVM$KVI zhY#~}zTKLjo!{oVaU%v!yng7Yk;8|M8(CI5@w(EhOUrI3&C3X4zGz+^3w&QSE{{hK z&t**)T;;|-_3{pS#b>!67*|jpRUh2w$10_F)wgA#)gyDjU}4Ur&e6{l`nETYNfiu+ z`nl7qYO1EsoIX*H4cRsSacqpqQ3VvIpeVn^P$V(Fod4a&!68d1j-or5-}XOg`+pca zV`zZe%W_5K~pJ)hcr-VPPshw35!gyr6`hGtCSq`RKYp|2$U*g+N24-aIGTyqVZ#XoZ zQC(hN6AI$?_d4%aT+Y#*>f(6}Ix{alwpghVwQ> zU$JmhVrqHC?67`zO+)!DVX@YyxL-&b*C)amb&0;1K@urd`-GEcHiVNC)5>p7gwtnM zObe^4ewy&Z%BuQ?s+x)hoiSOT;;1OE=}tw$ne~avu%R}rpOL7jnld|VfKgPHWD~I{ z_~DeQ>O{S)W{RATLkv5N8DT2aS>F)W&zv!%dbTVv;550Czb?^{m zgaMKv>YVM%w%1i*(o8knLVK>_IjVIQ+Im%fEB}|GId))`@}i;{;pjA%({3SruOUGl zJvG#QgXOKZdM5Qvs>4bBWJ-Tu_B-4bhL|my5!TLZsIRI_P_Gjo4FKt>HgqfHtu%se zrESkqo#F&m881>v4l+s2suZ$@1!Wbz`8b-(L=^- zQyD#Eyf&3F7Fc6a8Dq#eCY3RUjAM}TJZ!PBU%Ecy7FN_bj6S=E_0G9I*3KV<{S~9p zd_z=xFS~T$4O}#qWN6V1nPQL<0_zPyYtoYt9P5U2iu_)pG?H$N7T?SI47@Q_nxXWK zsnX=lHwL1WD9up%#`Ycj3q@%tI3YTHFS~f)gj8vc(i2jp$;BrG?N!|zr6+U@{cA;O zfSaPJ_pz}9Z%UQ6Q2M4!F(gnMIn+)0!rp|aK-cd6&qZlC)THS6eeBkOlTxK^l%A9- zOau^?s0@98{Ak?xT23rgk46#cPUssfv6Q zuj$**e?k_|46KG|{36ykxFJT^6*Nl^H04EYQs=&>fxyx>+4M`aLk*c;NgZyjAH51mauOhyw!gtr&6SJDdi@ZCqLa03^4iNEo!cO?4R3 zC}-GJItUk!mtba5Qe#X(b6LA?8j8X_sUg%Vl%2;gB)prCAtoy$aDUDCUCffnR+7$&zs9c8Z|}R5PAAIw%>IG+`?H3DcbpS5eBssR~pXLdW(P;yK1U#mc`QM#!DGbRLSRiN)6 zz+$eoLhnHUC&*Ea;DLQ7v(HOqAPYiZIMIy|WEUq*7LeY_I`=XHklx8KfMg#)i3JQ! zAqm&oe_b{%#2D2PN&4g(VFr^gMNx-5`ipc}hJuK+b)qjd62wDx?2N_?&qM^&! zqe)S_MV5Y$`E69+(Ryev`cK}0R49OCZDt5ywMC}uAOPVa;~fw{jYY;gum%S9VrD0$ zdwkbBkc=vjZmJ;fSe#x3>Acu@hgel1fOp7_j0JYYcpqg3OzH%+%`mG2X13M##-0KA zobEa|w2c^6s$U74ah$rBN2iyw`8O^%9C2v0oMF0>J%~viFwh-}Ssk#r3$)=_HQh&8 z#yd>LcF+a(BP`azr)9$;Td!bI$JYF+D14Z?H?7cBAPH)&&|@AD1y`_+7l;}GQN;>& z@gOngEgJJH8DFo)JTP*vWPU6EYK#^@s%Ta8tB2V&!&hm`3NhNTN?TS4P;eD1I7bW- zAwWf|7&a_FS4_yz7!^LkZY^m{XQDo8WZ5`VVj7`>)JKi1u!9kRsgZ@9d?+TB!VrEc z`pYA1RmoH7RM-I7Po-0l!#u?b<$Ocjn1vz0e6w9sLGWy}>9_2il4sMYup6?UW!d>D zCCL8IvY^Nas3hxfuD?K2!CTfvJ6Eu~hpkJe!q&)Mmrg}n%5~{f=xPW+)dh1n)P(0W zMJpd=-3BzV>>OQVociY50@y(ao+Xd7sI{A-(~q*}f3(TC1C};>6T>!wJPvs%6Khkf zA*$ZQy2@DssTcs8Soab!SrW`A++(;uL{xzKnpw2AGandz|1suX-fXI&Nwb+{wo<&L zOEYUN7amL4y_t3D?0=tlY|EJ& z5~Jp=jKT>jALzF+TR9CfP_rOV#v%bqY-9O>f48&^+W8jaB}KPIcRj{BX4RF~OvTz2 zjw>5p7CpI&{dhc5;Ftse%eKwlt^(lfA|I4c8FU?ptio zFn>G(vgAc?vnb5x*I$5G0D2+ElNiO~0L)~YRHx3q}6yI97H(HD=i0sVKe zSbH&AZL-^L#=lad6&M`5nV0F0g;@Y;w7wgaKEbXV_pUad5QF?(Z9Wp9+0!|Q%x;yU$60{{c}9Q|`&mI@N+I;+U(-v_q6vX1 z;iAM}QzepU1G?~ItR*Q8q7DcXAdHF_0pdvrAtY+bCs*Tqesfj1$T>;HZ6_jpEdsZb^r2tvGnQX~{k|I)z3d0}p{U;<*m=c=(oN|j;~`ei%I~ZinHkuJqvRi0*W}@J!c62l zOoZBNvI6@^dMDw0KmudGER;CH0@JP8f&FE=2WO)M1g4L&QQ}LMr#$ngXje{PA7yr% zR4?YB2n2GDr-tXC$Wd0{2_k&6-#m=d`tag0iIR}Ib!?Bmfrt69(D zA>VOQU+2TTdV=zGEy)MxiS)er$a_LI6}HA=;htptY--HYOm~ubSqLN0h{G-^u)mIm zJ<0kczcx+_F=)PKt#o6==IOL)3^0fw&~6R^N}Q$=Z_$cI)DZj+iWI%bM6|Om@w1t5 zvdXZ!d~%{Xtg1)&3L(4l>gw8AkS42YzU#7xAHiEyFb{FCl;iqgRYUjsFmcO_>Z*#W z1{wI9hIn3s2&(;yi%$|4FB1{F6gMv^w@rCE0+C4(iJXdPY{N9@CIXsOwRI`aMtjg? zG{`hrwh&FG?VnAioWpU>q?sKEGZUa(6#y~!%;9S51_-V>97j!+*$R@tYA0z^O>;Sy zO9&9C05uiudFFD2OJrH?G z22=e*JnH`}n?K|s!{LGBA=5uJ|3Ad@b!XD)=pl|^+CL-*CjXVu@n_kYoS%Q4K{Dh@f^Bgn|<9fZ%^gHy056FX_Pn2>zG!*l@^4n{{)6zyzq7XusO5o7)x1BDZQU zAgG$Dz1^Xz8@O9|#z#?~4Xj&o3rA#@RCP(!ty)zeQ~)R|0EDVrwW@&N->Ovw1pij8 zs!OWA%GJpp2uy&QiBx@+XLc6-mPE41-9>H`0YUXDS4Vr7#_{VMp+53vAW#8nDjLVH zbG1uHDwtm9i1w+>V0xV+-1juOzDuXJ9h~pxR?%;HIEJ>eVQn<_PpnJSu#x>watHU@ ziBmapk}Y=fe;czAsZayS^2jU%u+C1d0xCiPRd#X}vk?L)vy-cs4GEB87Z))b85O$D zgoQ*hszAD_f@Z&6=~a;3c5xN65k*kNF6xBUG{Rh(w%(6Q{=}Xd{Jt?6&06nswM$1H zki5@3$e0=+mErx)^Q#2|bl4m9-Nb5!>@^HDW$iVdKvULUJyp1L00)Gpoexj*0{5>x zqa}K86Sk;-k7CcarfJKu~?o5r2_N!3c-B z3V+3f5dbw68R0Nj;V-0u=`dH}FF-II=7@gvhY{j|dyHrN6GkZhmJ!-CvyS7BaYSUO zzBn1-xHbY1R0ovx0m2B!wGjYO-*IgOK-71fj1ZB#$4Q%$(S6NqS@NWzAQw1kD5&u# zIqr98hCmTeoTN2LDuc$K;<((BiR1x*S{VwHoH9&Q-6^_HSDC?diX++rrfb0rc$)LB zDwRUjfSQWN;Ax&I&$P%3s?+=&*+YP$Z09b1iD(vzo{3IxW>=0sV;E=*p3w_aTwJ%E z;dz>Y#^4za2B{l760qyV8e;W6!~0*P_`!5GTK+P-@}{$fpY{}I4L|KE&KiE&Q=B#Y z4*1U+eh2(#iT~*wID#LzE3J&BcGG3Au)bd2N-I_%uU~xX`^M-OZ?Ka?8ZBiT2vKvR zrFJubsJYP!BneF_o)-sHm!Y=)w3aM4F`4lTEjt|zSat4v<79svDU&( z!0#-Bs-Ye$U3gU^u9|U$E5f&KJJ^f|Vx+JRmq;u)4{~0uUB>!RmR5urMGj z@Pc*WAit-m0C_h=lip^%f3(5yQ;=hW;U^#1VCBj1h%bC#gVle4BBW@^2J3?1;)sP* z+6Zm1E*$2!NHf4kHaC6xHk-z7+H9&IC)sSOpox03m8Z=>PO{nRDQA8$Z2|TfqH4s{ z4fwsm{wQh!g;2Iw{PpOm9qj7-EtXf{5658#a_YpbQEVq0QM}c%`RMfYs)d+<&IkNjv28Pe$7IFf<`JHlmzx0 z7Qa*}OIHVga(E#T!|M%8ZT$dI^&3`OIT`@b?l-LNy6eb!-!NTA&ie*+-N(K(Ex2|x zt=YvY*^nKk3feC3FdjzR`q&5KwS|<>Gzoi(UyCkX%KC>_a#k>;;3k! zX;B;%?K3UHetf^hwH7`q0@M}JwtT;-h_>bXtvubqv@PFnb(i}|^djonZ}pPC(i#{Q z?YAzv#6LmHhR+dfX^Fn~KKuLl7E=SRaqSjU1MYDF)$>mjK@BYyu3l+=1w;)kR(QUK zsG!B_-QQ0NegtU_MYn&z=1w?d__M%&$naC(=8&c4Z=d647Z7*JV&fRPhZ)n;0SfaNTDJ^JjbE|AF`{5 z95W0#U^r$NDC~303gqJG^Bgc7v+%e<94mc}n9r%EjUTcCHu#j`$OXqK!$E_1Akco353)ISYHgty(i~eIa($i;vN<-6b8kqp0GF&b?^pCe=Njs=FJ02~YK)QVRC zjs-T1M0W{3FGN7V7Iz6(0$^AyG(?4%s}|boG6AU|T4<}w1V9iiB%)gdQ7eQ6Y<@{m zO_XykzbKmfF&jP<0^P7y;JV*dSKvNx1+M#TbsYu>uKR6VhvD_4Wz%q6Y-1<(^XTc; zd}ws#0X8hT*j6!nU&QPIWy~HBQ~6>WF?)J^?PErXZ1DyQ&5L6-iR{d5>Gc&d!q; z(;5qxk5>+2V1<%=+5BHDA3eej1(On1G(d2ql0j+%NO$DUIdRt9Q znPOYA-bS!Twt%)J>+O#HHADsL?Ox{z!)LdxxL}t=iVZY5s7j18vb_Bc8=-`)Z>W?7N8q;2E zztNc3_S<=KN=IpEyx$%q*C;^r+kSg+nb__T6v;zM#T<}HE^t830mA@L^8r&2?R^gD zIRL4s=YXCA06}zs<^Z}5&!ppAi!HCiXB=bhr7ebs-b}RU@sFI~Y0={!5Iik3{^`1o z*2>SKXOFQTjr>dx`b;tC0p*|vguOnaK~G~hD{#NCGk)dDu}h2J7j~@Be}GJxMLWt9 zP1hf1i&*l6RtQokbi!7_UqBQ(VXKHOAQU=b<19#S1_%S5u-nPqG$0)RgxyWP*vX>J z>{m9Q>sT_kxDWiw#@#?i>{XFW8l1H4+@h%JE7qYi{*XV4>4x=6qkfr|czRW*LQgR{_5E1>yjtD^!2NJRx(9USNn$_haBW^|v;4~>7*R6r4fH%$dJ z@w};jFqI`Ho;Mw}Fae^1HyyPw0iuF89V|?jiw3|Swnw`iK6Ju%!%ru!?S`Kwr0vE+ zG$Czw+Q=0ki@V_8?i9(D91#55ovyuPq$rD=W@j|R<;#A&(^Npmv7M#@I*#ph^0eR4 zacrl9Bb~Gm9mjS$#d0MFAu&3A2l!isg>e7wzU%Nk(NvFbNxtiN@;WgK7fo=$_Z(Zk zhY=XnKp?N?g#iBYo`VT!82o(3a-6QJMAj8H0^b8*jhu!*rb5USQi(3Vfr)uLetfl&)T z5r7~~Etu+{=^RT0;vmqS0|81LMCT+^mB7tDOD{qr1p-q9Pxv87d4NUpmV4yCsp?)Z6nOFjGwh9uhWERIM05MV&+w!;U$NN+nu2_P_Sr?(hiq_-U#tHX}n zE@e*I7D6E3kWweo1Bk;k|HI3Ya5EG*>Tr232ZHSYwVTm>-BCvc*pUjdqmBx&1EOn= zIykV3d7f@^jywGCdY-pLWZ1!zThSVMeRIOGJ4xLLUy0fvk=H3%Btd;AoNQ%85}?Kt zPAlbNp4prqhnv3TAOcDb6@zD>xJYL}v^U9-#xOvmjDIbjDF95JKxQ?M{PSPBr@N{wv!Il z**qh9v=twGIsQQ7?{Jl00;2JExXOxvD0PRctO$t4-{B%2O&jWL&Z2g$d1>@f9(M;X zFdTFRv%pmbL@sbFaFqc8!Lh(q2Bf$Ren}VR^9dsty2^Oj!gzqvcz|fuLRamka{~81 zH)E}87R71qa}i{p1dVcNy;Y8L_&g_R5C(C%$@bZ%>Y z?cmjhfqsy%T00Q(fMK9;Cizrg}j2mm~pCT8?B{y0Zm9^ogZ(66df)G`$(-s6onRVI&0HM`7?E!$W;5zLA zfbf8I@AXwE>3#!V19BfPiTJdTl^Jkz0*HKvcAz#^741D_XTFI`ZaGDHJ$mOVfY)Wy{=UQgleyA8v>%>>)Htcq1x*%R)hEH=$S|6+1<3e z9pA&o?=~DXAT@@7vgb{bUh>FupnMY&vU1>!84Nc!Q zwa|X&U2R09qLz2H5dl%lyV{5p9sWQ$dmb6_18qbglmnDT1VoJ=Xd~ta?p`Z(_&l#hDis4Jc#Q`>QZKJM}puDm4# zM&CdnM#f*aSyIAZ^1%~Dj$gQamK%u)mwV@OOXmPive%m1g z(En}^uMKFwO9EtA=-Hi9oYZX)D9$A10O>*xEukNbh$5m4?io@7kS_EvkJ6eOkec^; zT)uAr0wJLE13+}syrW5K{)AR)=QyMTUvYvB(SL85Nnqw8+Da zFPM^04{))k9{K>GWq_KBA~B0S6=y^$s1|$q^5P6ol*L0IsT7JX@zmqAK>UgjP%}}; zWrj2vb0c%)ae2K4i-8$XQ&DgwGD^{rG4k?t-%wOHB5#mNp=*|U z>IqLEehUYvnTAjtWvS7M&XP;LK*lwY8&pd@yy4kH4qgzrk9!&4c&z9f9Om(xkEVsa z`8zE6IKm&|BvwE(*%KaL?a5dwF!-MEJo(}rklg5Zo;q|3j0_OSlc*4&XMg9ZlPC$0 zq0v*X#RZlE>B}TY(pkUJ%gqz+PZHqYrxzg(2uu-~BdrA5`3KLIKXD=k>SqY#Ph*4t zoPY2zf6|Gw0L^fp^!Rh04Hr*3BtQ>ABJBzYt3T~B8t}>&Dj;=FZ1B?t1$j}7Ji?GZ(FR5Y^BtecB zJQYP1SPEnqTnM1U3!VytlK{BMQ@>FV7$qQ(A$B1UIS^u(mWS3GJpPifJQ)waWW?ha zV|iMVHt4Ac$)MXnb0tkhfUx`q8XMB`Sdze2{8GyD;G#_@{J1 zk}SW8>`GH7WudFqKYR92WoU%|HhX+)%Ftw`&7McUM?!DQDB#PU-9wfqj0_OS`CDXw z4PN#z&*&1!@QSutl5$WxA<<@o07YK$gxO>zz+23qkWoMg^q`PYz%6nZk&8p?Z61Fs zWoX)#L7+XHR_1LUy(3Ht%TlAZd7TC-L({Cf&AW84GBmc(U>ovQ%Fvu#{8eLUE)4ye zad8O1__{GP7asnGacBsT<4rG_@@Ok?w|jhN%Fr~5w|ibIWi}CLeA}}_WoQ{_gg^$Z z3RIx+Z4YN%X=o8>e8)Jn3^YQZ9hw4-@V|GAMh?M%;l_j~<6 zfen(P3AmPpq5qm{G%y+ZV`FFtKzYCz8kd~N@i)&N1uM{uj2{hr>haH0{!0t{r=BN& zA%|o#>p^2h`3r%AnE&N@K;%G^4|*yjO#)DS=BW+7z)~Qe<_Q5xeCFY4p6m&S?0U$I z31F0fKn8NDgv^0JuAGsRQ2PsypGeu2b}JBQyV4!>7oG~46^Py67hY?*#Q=m|zo0FK zv@5QHK-TR<%6}a)>tSP7N0{|Unjk6c`lYcevY-t|(*}8)7QJ`n@!)nP_9oT@Exar_l+d_ z5}5gB5`Ku;Firjht#w1Z@6K4ZoDqqG#@3y&wsO%I0+8Mr!*h5V z?S-V~f*3zvwnFUV0ac^KK7K(=|2PSmLAD^)MSj}?5L63d=k@pJQ6Q&~X3BeFyn9iD z_@$@%JfZj~TWuYU6=k!q2fhd=zx>iOoHY&oD}HM^tGu4P05+dlLBHTMFF0h+CGj;g zxb~H-QXtPYfRo65S-saZjv3o-Cm;T5wMc$LiZ<3ows7 zKrOgMwm^OyQF(mw|E7NG{fQsSUt<3ohNt%;Xr;{ED3;Ww&`jB zQO&lP3SgL;p>y!sh{Jl-D(N7|N$vNs$wJAglCaA;8kIFQ$G%CIn#L7b}pCEdveAO#IZ<3iz^E0}j3{0xZ}Wu!T10WgbZGJ+0r1ke-794q+EhbeI4Q8R zG@X+U3rmynLOHhx4ncx%R%udjEQ{L%QlzwjguswejAvOoDQzN`#S3Y7F8heKk;~%! z&!<9ibtDEd3^!^b*_r5 zaRCU2T@_cGD?pT76>lwXE&x&6syL=P+NrfBhkZQGo0Y=?BlqKRztF#zeya{lRW-(= zWo7)%q=2ZbQ8!Qs(7?vH@=759MPpofr4XRX#<=oIA%H(L#+6q}0lL324u2?9wSr@H z-0o6zdDFbFTpLFabC0$a1kcB#zg^3Bmr(}tu; Date: Thu, 4 Apr 2024 09:41:09 -0400 Subject: [PATCH 3/3] dex: add `max_positions_per_pair` to params --- crates/core/app/src/params/change.rs | 4 +++- crates/core/component/dex/src/params.rs | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/core/app/src/params/change.rs b/crates/core/app/src/params/change.rs index 9f96c61478..78ff79d57d 100644 --- a/crates/core/app/src/params/change.rs +++ b/crates/core/app/src/params/change.rs @@ -25,7 +25,6 @@ impl AppParameters { new.check_valid()?; // TODO: move the checks below into their respective components. // Tracked by #3593 - let AppParameters { chain_id, community_pool_params: @@ -75,6 +74,7 @@ impl AppParameters { is_enabled: _, fixed_candidates: _, max_hops: _, + max_positions_per_pair: _, }, // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! } = self; @@ -169,6 +169,7 @@ impl AppParameters { is_enabled: _, fixed_candidates: _, max_hops: _, + max_positions_per_pair: _, }, // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! } = self; @@ -244,6 +245,7 @@ impl AppParameters { *min_validator_stake >= 1_000_000u128.into(), "the minimum validator stake must be at least 1penumbra", ), + // TODO(erwan): add a `max_positions_per_pair` check ]) } diff --git a/crates/core/component/dex/src/params.rs b/crates/core/component/dex/src/params.rs index 32233c251b..29ae3b2649 100644 --- a/crates/core/component/dex/src/params.rs +++ b/crates/core/component/dex/src/params.rs @@ -10,6 +10,7 @@ pub struct DexParameters { pub is_enabled: bool, pub fixed_candidates: Vec, pub max_hops: u32, + pub max_positions_per_pair: u32, } impl DomainType for DexParameters { @@ -28,6 +29,7 @@ impl TryFrom for DexParameters { .map(|id| id.try_into()) .collect::>()?, max_hops: msg.max_hops, + max_positions_per_pair: msg.max_positions_per_pair, }) } } @@ -42,6 +44,7 @@ impl From for pb::DexParameters { .map(Into::into) .collect(), max_hops: params.max_hops, + max_positions_per_pair: params.max_positions_per_pair, } } } @@ -63,6 +66,8 @@ impl Default for DexParameters { cache.get_unit("test_btc").unwrap().id(), ], max_hops: 4, + // TODO(erwan): setting this to 10 for testing. + max_positions_per_pair: 10, } } }