From 9ca9918a0076da59566f055d47f7bcb9054b37e9 Mon Sep 17 00:00:00 2001 From: Jeb Bearer Date: Thu, 21 Nov 2024 07:59:11 -0800 Subject: [PATCH 01/15] Add range queries to nasty client (#2317) --- sequencer/src/bin/nasty-client.rs | 123 +++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 2 deletions(-) diff --git a/sequencer/src/bin/nasty-client.rs b/sequencer/src/bin/nasty-client.rs index 7a5829d67..7fff64412 100644 --- a/sequencer/src/bin/nasty-client.rs +++ b/sequencer/src/bin/nasty-client.rs @@ -25,11 +25,15 @@ use futures::{ stream::{Peekable, StreamExt}, }; use hotshot_query_service::{ - availability::{BlockQueryData, LeafQueryData, PayloadQueryData, VidCommonQueryData}, + availability::{self, BlockQueryData, LeafQueryData, PayloadQueryData, VidCommonQueryData}, metrics::PrometheusMetrics, node::TimeWindowQueryData, + types::HeightIndexed, +}; +use hotshot_types::traits::{ + block_contents::BlockHeader, + metrics::{Counter, Gauge, Histogram, Metrics as _}, }; -use hotshot_types::traits::metrics::{Counter, Gauge, Histogram, Metrics as _}; use jf_merkle_tree::{ ForgetableMerkleTreeScheme, MerkleCommitment, MerkleTreeScheme, UniversalMerkleTreeScheme, }; @@ -163,6 +167,14 @@ struct ActionDistribution { #[clap(long, env = "ESPRESSO_NASTY_CLIENT_WEIGHT_QUERY", default_value = "20")] weight_query: u8, + /// The weight of query range actions in the random distribution. + #[clap( + long, + env = "ESPRESSO_NASTY_CLIENT_WEIGHT_QUERY_RANGE", + default_value = "10" + )] + weight_query_range: u8, + /// The weight of "open stream" actions in the random distribution. #[clap( long, @@ -224,6 +236,7 @@ impl ActionDistribution { fn weight(&self, action: ActionDiscriminants) -> u8 { match action { ActionDiscriminants::Query => self.weight_query, + ActionDiscriminants::QueryRange => self.weight_query_range, ActionDiscriminants::OpenStream => self.weight_open_stream, ActionDiscriminants::CloseStream => self.weight_close_stream, ActionDiscriminants::PollStream => self.weight_poll_stream, @@ -239,6 +252,7 @@ impl ActionDistribution { struct Metrics { open_streams: HashMap>, query_actions: HashMap>, + query_range_actions: HashMap>, open_stream_actions: HashMap>, close_stream_actions: HashMap>, poll_stream_actions: HashMap>, @@ -274,6 +288,18 @@ impl Metrics { ) }) .collect(), + query_range_actions: Resource::VARIANTS + .iter() + .map(|resource| { + ( + *resource, + registry.create_counter( + format!("{}_query_range_actions", resource.singular()), + None, + ), + ) + }) + .collect(), open_stream_actions: Resource::VARIANTS .iter() .map(|resource| { @@ -339,6 +365,10 @@ trait Queryable: DeserializeOwned + Debug + Eq { /// This may be none if the resource does not support fetching by payload hash. const PAYLOAD_HASH_URL_SEGMENT: Option<&'static str>; + /// Does this object use the large object limit for range queries? + const IS_LARGE_OBJECT: bool; + + fn height(&self) -> usize; fn hash(&self) -> String; fn payload_hash(&self) -> String; } @@ -347,6 +377,11 @@ impl Queryable for BlockQueryData { const RESOURCE: Resource = Resource::Blocks; const HASH_URL_SEGMENT: &'static str = "hash"; const PAYLOAD_HASH_URL_SEGMENT: Option<&'static str> = Some("payload-hash"); + const IS_LARGE_OBJECT: bool = true; + + fn height(&self) -> usize { + HeightIndexed::height(self) as usize + } fn hash(&self) -> String { self.hash().to_string() @@ -361,6 +396,11 @@ impl Queryable for LeafQueryData { const RESOURCE: Resource = Resource::Leaves; const HASH_URL_SEGMENT: &'static str = "hash"; const PAYLOAD_HASH_URL_SEGMENT: Option<&'static str> = None; + const IS_LARGE_OBJECT: bool = false; + + fn height(&self) -> usize { + HeightIndexed::height(self) as usize + } fn hash(&self) -> String { self.hash().to_string() @@ -375,6 +415,11 @@ impl Queryable for Header { const RESOURCE: Resource = Resource::Headers; const HASH_URL_SEGMENT: &'static str = "hash"; const PAYLOAD_HASH_URL_SEGMENT: Option<&'static str> = Some("payload-hash"); + const IS_LARGE_OBJECT: bool = true; + + fn height(&self) -> usize { + self.block_number() as usize + } fn hash(&self) -> String { self.commit().to_string() @@ -389,6 +434,11 @@ impl Queryable for PayloadQueryData { const RESOURCE: Resource = Resource::Payloads; const HASH_URL_SEGMENT: &'static str = "block-hash"; const PAYLOAD_HASH_URL_SEGMENT: Option<&'static str> = Some("hash"); + const IS_LARGE_OBJECT: bool = true; + + fn height(&self) -> usize { + HeightIndexed::height(self) as usize + } fn hash(&self) -> String { self.block_hash().to_string() @@ -591,6 +641,55 @@ impl ResourceManager { Ok(()) } + async fn query_range(&mut self, from: u64, len: u16) -> anyhow::Result<()> { + let from = self.adjust_index(from).await? as usize; + let limits = self + .get::("availability/limits") + .await?; + let limit = if T::IS_LARGE_OBJECT { + limits.large_object_range_limit + } else { + limits.small_object_range_limit + }; + + // Adjust `len`, 10% of the time query above the limit for this type (so the query fails); + // the rest of the time query a valid range. + let max_len = limit * 11 / 10; + let to = self + .adjust_index(from as u64 + (len as u64) % (max_len as u64)) + .await? as usize; + match self + .get::>(format!("availability/{}/{from}/{to}", Self::singular())) + .await + { + Ok(range) => { + ensure!(to - from <= limit, "range endpoint succeeded and returned {} results for request over limit; limit: {limit} from: {from} to: {to}", range.len()); + ensure!(range.len() == to - from, "range endpoint returned wrong number of results; from: {from} to: {to} results: {}", range.len()); + for (i, obj) in range.iter().enumerate() { + ensure!( + obj.height() == from + i, + "object in range has wrong height; from: {from} to: {to} i: {i} height: {}", + obj.height() + ); + } + } + Err(_) if to - from > limit => { + tracing::info!( + limit, + from, + to, + "range query exceeding limit failed as expected" + ); + } + Err(err) => { + return Err(err).context("error in range query"); + } + } + + self.metrics.query_range_actions[&T::RESOURCE].add(1); + Ok(()) + } + async fn open_stream(&mut self, from: u64) -> anyhow::Result<()> { if self.open_streams.len() >= self.cfg.max_open_streams { tracing::info!( @@ -1104,6 +1203,11 @@ enum Action { resource: Resource, at: u64, }, + QueryRange { + resource: Resource, + from: u64, + len: u16, + }, OpenStream { resource: Resource, from: u64, @@ -1147,6 +1251,11 @@ impl Action { resource: Resource::random(rng), at: rng.next_u64(), }, + ActionDiscriminants::QueryRange => Self::QueryRange { + resource: Resource::random(rng), + from: rng.next_u64(), + len: (rng.next_u32() % u16::MAX as u32) as u16, + }, ActionDiscriminants::OpenStream => Self::OpenStream { resource: Resource::random(rng), from: rng.next_u64(), @@ -1209,6 +1318,16 @@ impl Client { Resource::Headers => self.headers.query(at).await, Resource::Payloads => self.payloads.query(at).await, }, + Action::QueryRange { + resource, + from, + len, + } => match resource { + Resource::Blocks => self.blocks.query_range(from, len).await, + Resource::Leaves => self.leaves.query_range(from, len).await, + Resource::Headers => self.headers.query_range(from, len).await, + Resource::Payloads => self.payloads.query_range(from, len).await, + }, Action::OpenStream { resource, from } => match resource { Resource::Blocks => self.blocks.open_stream(from).await, Resource::Leaves => self.leaves.open_stream(from).await, From c2c2dc7a2b1f1c82a65e019e95a4b5c504d5bb95 Mon Sep 17 00:00:00 2001 From: 0xkato <0xkkato@gmail.com> Date: Fri, 22 Nov 2024 21:29:11 +0400 Subject: [PATCH 02/15] add final light client audit report --- {Audits => audits}/README.md | 0 .../EspressoHotshotLightClient-2024.pdf | Bin 268204 -> 270721 bytes .../external-reviews/EspressoPlonk-2024.pdf | Bin .../EspressoFeeContract-2024internal.pdf | Bin .../EspressoSequencer-2024internal.pdf | Bin 5 files changed, 0 insertions(+), 0 deletions(-) rename {Audits => audits}/README.md (100%) rename {Audits => audits}/external-reviews/EspressoHotshotLightClient-2024.pdf (94%) rename {Audits => audits}/external-reviews/EspressoPlonk-2024.pdf (100%) rename {Audits => audits}/internal-reviews/EspressoFeeContract-2024internal.pdf (100%) rename {Audits => audits}/internal-reviews/EspressoSequencer-2024internal.pdf (100%) diff --git a/Audits/README.md b/audits/README.md similarity index 100% rename from Audits/README.md rename to audits/README.md diff --git a/Audits/external-reviews/EspressoHotshotLightClient-2024.pdf b/audits/external-reviews/EspressoHotshotLightClient-2024.pdf similarity index 94% rename from Audits/external-reviews/EspressoHotshotLightClient-2024.pdf rename to audits/external-reviews/EspressoHotshotLightClient-2024.pdf index 6e304c4ae1bbd438a1fd2cc9d94fe192c9ddb14e..79969e74deec53d34ef4938b124a62691822307f 100644 GIT binary patch delta 14052 zcmbWe1z42b^Eb}YU4nqr(j7}I-3`*+xkz`{(x8Y)$RgcJND2rj-QC@SNC`@Z@Gk1} zJm25%`M&@6y8bMC@7e2|ojGUDoSC`r`Am5wepn|y0fUCDJO_xAACsZ=JpUGxS1^%) z3e3wZ2;@=(8Uy+Gc=&-lU>=|;kV_rN#|z|=1A;)jU~UkQOAQF(26E}Zy9EUKKtOSE z7&Qs92NEW)P~rj*Aeh`nNRmtlkcJ8Zc|gAiD7o0W0(k_1+(0cLmzJxm7m$zp_ZMyZ z00@wWA5Kog1LE_WA`kF?{c$PD0*ytvLAF*l{M_)jH7~EF6$ET!Z3~82f~_sBc=;`P zg~Ua9tZZz-Le_jX0z9^08*Ty{TV7j!K?uZBkWUD{G7w+#CV*Zy2-CJU4Du#I5myeM zZNssk%_(I|_juRHr zXJ#Q~LKRF7DnEheNixaE2rH^MaTVDh zDQho#R~I1o&*Ig+y`1b_;A41r1(Sj33;=;-d2}j7J`l|C0WvM30MET7p=v-OJ|LI8 zy@#h4P!J>p7dNJ-mj}es8PhLw*+|usT!8S?VWs3Nu6`*}zOf7CBCS{68%_@1Zu9+m zHO9uJmk7>!Hd-n#toBy7PhUTZ>8cPh3Ejc3{c9LnTRv3 zTy-soF~ll8q`8=DF6d>Ua#VNHT13GbG;GQ}rFL#xkqU0ZemXr?1^LOKh-c;H?rr`i zbXQV_u$pI@h6zGeT44MmGW|nco&kAl9anid+%gDTA zZGC_;y12xM@?K0Bl&7S-FA?Q=qBSA6{KIek;dpe6#xxqK>)51p_V~<605n==l|c-F z=hf@hc9vy|@*p*CPDQLmbr%clmO7c7aLD5`nIBKAQkiUC(0|5y%Gmxo7V-jH<^Ez$;~E)UCEEc-M(y%6^O5xly{Tdlzug+- z(mjp8f^`(if6|(c^RK*pS2|mI<#O4n6?{4!dST@3mQ#1!^3})Ndz@>q+o9!aYgKMR z$L;2*t9VgqE2qAxp{31Jr6f=e9%To$FjRZ`yfi>}fy&nz-H5qHXcv28?bOJppTNFn zW-y#H<8~LC|901_LhPuA>G7M&a1Rz|JqXh4?ySwk_NS9V`KB1Wl zImU&CvyMN!v?eqkg>4T`@5ME7(89p>8;f{9p}w70ZgCB-ksjgK)mO$D7=OC?g2K*B zO&{e<0_AP^d2%el5V6PnXqeRbWeEvvd;1P+7)e-m0=e;QXPl~JJYv$`PR&fAN(e`F z9BLnkCL&grDnDCxc5pMB4=WRxsFWoqP0$F<_iS8{YKAn=G@~1tzZ1Z?5Pn%vwAv+S&eKBhM>HpHJ$7lK*4C}lX;uw`EbViPHigAdt=x+r6i&nuvw z#fC`I7F_6qC0?}@yQEsCvk>ZYbfahXXV~+qGN$R8F>bMA%il^adT-r3qxof?xPFe- ztZow3l&6y5N+1vriS}{##3uT=y3xZ}w$;7C>B3G3vf7!v?$w!;&|5O#(MYl<5ttDk z&dkB&8db}xizNqN_YS|vGhGsm%~ybyYq;7UbP{`q#PT(xw5V$)gw5{_i4r_dlM~O0 zgn)&6nv2${L!FO=HPX<(+z}< zmz3x#*DObWkeF{J`)SMu~0rlw%pL&rR=D8OgCk1^7PC%OO^@agxKW%;o z0rQ*Q0fdy}{t|w#SdRs6uXmZ*59QEeV-R$=DolIjV_DB_{KEW>s5WS}k-9ol^Blh) zZ89q(KT8S}l-nm%o);C=R!&OSNZ`&?B6PcYPxxNQ9Gsw_c@ijyPw2x)#Lj4c`OUoL zS)Ds@P>tPKd?s*3!7t;wYPL}TI-c#tR~SCnc}m5{$2vv7$uy--5v%~0YHs>B(|%lM zLt}}vx?bk=Ose1lk?_;k?^Uc9e2B81+lu(_haR&$f4Z;vUVR}0v@ZJWOKiA3>te`- z?N76M-vH`udmrnlF6MN@!BPFjqt;e^5Bxy&{8js)85~*cZ2MGY_d~y+pEFDM z>zSzc2^$JCa%ao)oFZ%zR3eCr2{H|!8g$cE_Btv{Y4vE>lQ*fj{;RbNy^XQfG-6^t zb9q3k6`7R21S3)=`cf9v2Luco)>xQ6HAN1QtW@Teob zrDtsJ+~%8UpZ67>@OQf_YMJEO*6XA*y!PnCJ^9*M^o1t^H?+>Q!a|wI1^!;x@yAma zC0>K)GmPp*i-84O3MCK5$AZ0DVf$lXnv^#`4z~1PXv2o*3yfYX3xJrSQ!qEyuUyAetp10 zRvA|pFNlkmCp?aYjqxBd6M=tsacMz3UA;Z5;XxNz04DVjK%Pv`&kO~E1o-a**?%Id zcLpk+i(vegZT%xX2Zw6E@6*{%>JwmhD(#Xt^l0gk^pBaf07@da=gZyUgbcjNBkxJD z3=o>*Tw6`qhr^xQ!dK0!sBc!v&2N4ve*x$x>O4iC$q0R8pTbK;j}aHC(cXk99?jJp zF>N}_nF{5J@03_*S*#ON{Wj#&@KW?-a&h6SElsyzD;4V`mw2UlL>Au~w%0br0rNu! zcM5h0qAej$?LyeA5HzMD?8=6EgIM+;lUP1>hlxA`gl|PdC5pAomP)_^(GexUdGn?X z>{+Can{mT>0~tSUQZ@&1yp>nV>6H`gBwK;~TRejXrXEa#Cu`4Fp>ts0zo zH$cLZo*>W5!}?KEk-%i%w`u2#5<#~Kplet5>7J#Cm)Li`O?_F+_DE?I3z0Y;GM*F8w zVl-@;bgf^bv9m3Rlm1kELW9OMYwcD`>hgtPD^Y~B_DH={;$hh<^s>Bt9DG|;;Fqr? z$2b0o$?Ll%d#6;|qPmtCg}kO{0bX*03XeK=6Qf;<&M`6dFPBi!6RYW?78*Mip1Rd~ z=0Y9I3qz?W2piE=^p(_)UGUDau$tHC6W55}E#{vD4&7?(eUgZ-5Vn+QEvpAl_Z2*j zCV09kphD{ca=EFXTh3gRGi}g$1LKLFLn2c0_n?G`dt&G7JmjQM`{sw;dY%jL|9s=d z@3=wWf-pe5tWz6LT4vFi{ccH;d^WaKy6wrfjXCs+&2GKsI({@f0{;Xg!YZIUYqpzw9f#gk&mcCzAMOR@7-6sr4kscGBlAjvg_WXVpsnUGtH- zRfEReQ5e!~`1GjCvm&jJKPoDTiM*-Np4xc#Wqp@VEU*A0@{$OBtKcE+p_@}j z^aBu&iotd!ouC2jykh^|8S#~+rI8aWlP?5=we}=e$4icB^6YV==_YyN$+nXS@u9LW z3)Jb!gb&`WEWPW?7;(zTSI{yWANcGtLC_vdNah|gZXzhonoUO(lgA}$+>bwSDnLz< zyO&1B+?%N@nnA>$)Q~*OPD|kB1!Z-z$9Bu$a3_8xDQucZRUSF&3BU|GR1r;~`zj!N z@w6LTn%pye0kqnR%gvLL1mr3mC^B15co(EFZ=@1VXTo>t-4VZo64uVw#vOG<^cjXf zSMtnoMCxqK3}f+8&`*f;?F-z_jsgzc5WM*?G4q%i+(5!?5zIJk1p6XwxYfLUQDsuVU`#w+C@wqJB3CYMnxGwd2S`@O_DJ? zw~T$3J;2j1KIMEI9nE&Kw`=1*A~&Q9FjAxN(MC=tO?~l`Q1Q)6yS+Tr%Mr_@{%W?F z5Q(XAv`O47mEs}aXBEbSn@^$W^CkUVAimeNG`?9+WM6F&n|(YTK5yxMY5BTD{>52T z$qvWb`YSH^I!+VQsOo9*-6dkNr$CRi4GZ2W{`j62Ju8+|^_+v8*$O|cCL-*%rm4Jqn=ObpER}8x#MN;Xv6O)#4SWaSAW#6*%tnCDBa0JF z#6Cq#N6wJeEp0pZs}o8x4&eJ?Jc{l$;>y8S5o*q(#sVHt$OrVhbq}#0lHt4h#WS@z z-X!K6v(|$2Egfh3kniU9)XC*d+dP+|y*VOpqd%jqB*u>FqHnmpN+sU$KWi<7?UCFe zfKeu5|8dxuu;CH_TC$WDbIl_L@?>dUrrO8+XB5e<228c~TJwm>8`(^-(P997ZM^OV zVlvV=Ywc?TMR`~&D}b#QJLe1pGthvyIL4C=Vc%Z^m>RZO0Uiu6U>3X?ssV6Uf~n^M zSR2UG0VqhYpaK93>`^)Z*07cZa7Bc@Ee5D0$Lo?c)aC;E5di`)nk)cwLs0<$2?-#0 z|Ai&lNtXuJTLAEEuzdsn1wiQj@dyx^kB?X2uLmUHzaNkYfd7XZKQP(zT>L1h_@j;go@5u}Vs<%R4j!_U3uW(0<$e8{}o;^Sgp8f-)? zi}MCN1Y{OVuO42@$F?+4Djn1?G5|D)5ivFTv3+i}=p04BWuDeo1hNkV03}n#ln%n&gsipr$N)64Kr~-9n@z@- z7A6WA7Fk3WXY#YozL6&renXLu1DwA37e__{K1l+&>3AVXV}7qna`R;Dav5sYRf};y8x}LUJYk{ znH!KoJ)xH}dV(^6+!rcc7@D0&*C#oOtAjlz-D8a!06mMW9uX~-#6%(+BhJnC2RtRh zQ;dM$uyFa1TVRMBHhVi$0MOEv#8*P6N#!zziI6Fs)i&!#=xS)wRq-8NFw0@LefXtJ(69k)v?Ho=_bNXy@i*UW5 z61zpqKW1FA8BkuH@bY0%!LIfEadvU?Rrll_xwB!DF;Af{ch@2|C1*u0A<>DIu$h$2 znC3~J7X`o3vsgLW8E6-NO?fU$bmNRcWgN8DVcP2!S(vDQYz2CO7Co`lzG+c63UV5$ zw5`qiaQv;mzYLZD$e1kP1mg=fyeevNdh&+l5MAWytn;LhXvp_<^h=?Gt43;z-jn%t z5#2hvU37_|kwsVxwV4Eik8p8$wCJFV;fUI3QuBqoa|jhAEgM0^^~Iwr1&EmGkTrBX z;<%~BU&n=P#G~Nh8X(EOq zni3DA7v?F#rC=8lHbtj3rD>D4m{E@uyD$XfE(W!HbpCoee zfpBfm;s{52V0WoaZO=HA8RbJYl)qpA%~^gWa$xa$Uus48r#QXON=33L8B{{77t2T# z$hAxB;{8n&upFbbr4E-v$d>Sk)7?kOKC{2vrHUYHpY72KN5GF#9&mfvt-V zTgH-1jn8?c`rNw}=*r?WHQhnqEjM1_Rb(Q_N3rHrP5Anf?a-*Ti5nZGL6t4c=^_T} zZe65zmrYUi=7k#Kdlj9JExOMUvHYHce9zM&RX=mDA_^AFTb;C`pw;^di7k94z}Z1z z-#T))===1Ou|tWQZoSuGBZWvgWg=d-N|Y2-U7TrPSkg94|NM|j4Y^C}3IA{#Dm8&L zd)-V3SBPiAE4GVgxGtYO_@Scu?NF`{H*V#1AA0lo!zPhajPpEO<9B9P;?mDJRmVAp z-LsKeWCELTy^jl-E9B1#^j5ZezAZL*h3?Im@rmP4?x9(gKmyJZv+;{!0yG5*z1{j*qgXTsh1p2C$Pr%;)WwP`HQ#-Q$m-Ws2)_8Y{}rcvxcRX znnitSN;t-1JmwR|g1~+8q7nXV_Tr-VsQ4*2m7-?X3z|dAtj`+5n7`z{A`i+3OF9?E zs4C=Kg}fYVEFcfKK`-*F384<^cy~l5jORw%%ljj^#QTLpgIJK-LdWB$Qs z&Qs2*iURP`R%SEDF4~sAJI0T#sun4y94StcUQfN1O*0ICO0Y98Z zMvG6&^UsmeJ)@QQU%PP%Z7(25U~=|}FjozWnbhZf2OWB`x-M%6Lov<)oFscQTZ)TQ zQmyq4(-?i$uV0*22gUc+r0dujPP3Zp5@pAPjhjA=+E;c8B+Q`Ct5ecyTpucxzoNc7 zVUxu=zT0aJ3YJ}Z)i-@NS^1JS9XChy39dPoC)EJ^er7PLCu6Du3WFaj1S8l$d5flY zVvFb4ujUnVW_OSiHS}1mLzP%Yv=d!+rS zdO1Shkt*gx^Ec&pvnKQ|Ql7L$)%42SQN2mbB;rBRdjstO^b0y`j|3y!aQC!Sm@Nj| z2teeDUTV;nUB*$vVuU>((WYM`e^kK4o3wpofUe%1h^0)qPAt^$F36nK`jNBza-pa} zlbt&#feiyE>+mIvnuN_6q%CglO`@lagi(20vG|C&+VGun0&w>fy=;d4s}mn zcQ2h;a)`<35!pK~<_NlocbzR-8nQ(nBQM}{bvz%y4!DP9XtD-ts zug*Hml`|!Gp6%@V7>-{o%va*f9&_QKg~1-{Pivp7K!}s~aPqAn*<(zgnGqjelRj#M z>(J^)KJLiayr;ayW|m5ii#pr#1g8aqkkf?wq;Qfu$Fn9f?c##ZlfHg?PH>x$Tj6;~t6d1mT~XtJlLTbM`qkj$#{anNMd zxWB4Sd|+OJx2ZCv&R$SoaxTb4xK;vvuuf!B5!2g^FyAIW7E*x%@J@X{KG5)9p@=eT zK$TjFxEQKJ$wD+d!^+8W{VX8A)je-@f-BYMJr#F6gC^UQiz@kE zos>A=`y(ZljHXzPA?Wi_fF6U(?e{o*9|MzHo%KoEmmM7k{?%PEvUqcJXK9o*O#3W> zJt0<5h5fWoHmy|;&Qgh;x|H=eZR3QXP(W0sz)KGaw7=^2^7gbf}$j1=z+ zfUQZKMjkqWD(4uQ;VGi-G>-Xa?}~E_hj%@Lw9M|RE%f(&&(N-iTB@McP~E|9fVgtp zka!oK%3Q6XdwqutK@jTM#rF-*Gsm;Bx&1t7mtUy)h6Viv=^or_=@xf>$(!fuma9AM zIMy^BD&8u%B*Xvgi|FnB-PbGmtnAG@62tjxWReifaZ&wwywT3cEl^;$S*<{%Rfntc zOVvO{8d-1hG_mg*@TdDUI&&SJN8(hU64;`@udTDK7jtPq z&yOSOMe#J>Y0_@H5-C14#+dR=%bAbcWl+1fScN<1kGF=^!iUj6jIRh}e?(T+EEX4BUHG(s9`&4m!T6SXK{YXT2E`qF z=1JBO?rE6WeLJVEHu)iTDSNP?Yd<*0Q}u0wFUIM`skVwvle64&+ixqR@()BbeqKjn z+=%a|Uy`#Dm;3UIV~rcymW zpNDU{zT2fTcE#D-*aT{QOiz%S@Te~Lxi~#->ZvOE>aK13xlGs5bnso2>Um(KiPM{@M^<0FyfHCCgFa6)igo~CBmj_T8pgtvJBvA(xx zV!5JkJM;oR5KCwJhzOvgcR3hKLqA1Uhm9dQgtJa1Q;j9lcM=CkYF>1ZLG^I#FiSOb zqw(};CcYSr?h~9ZYks*%oWZ5hG`7_+-c(0A!{UF-!TXlu>4FE64?uS=kDLlK&nK{v z27ix(%=f~wuy+-QjFcosH{wwb*g>QHtvUZ&bDhdZI$RF=hg-2p6yFIMVL@+J#+Xll zLvJ;*G>Stc>2^4pz3>(~&7mmsDQiyaM(2XYCVRTFdE|^Tu>NA6IXz#ZrUeQDjRV9k zrXxMTGZN`CAjQ~dwn^vYSeZDU*0<5kK4-?5x8L9B*u7U}Lx?&b96O5Gg*`*MYD_gN z5zSq7*?CopbXAw?h&(^GQ;%HFCK-bXoh=eU#iqD|*zFjz=O=p3vk}TV7e(pC01{gy zm@4jYSV$65U>}#1 z1mcEy5+jNd{fi?A1cJc{P{3A+5m}+|+|qw$gocfbT{r8AL(VHT%n(&;to(?Jh*(~- z`*?3=qSEr>zNz@lnc^$|1erED*2thKTrteppsvm-%ZuMTRzkiQVzeDVGUB5{{- zE-jHw;h67_n6OlCP9lm?HnYE9$5G=!fI-vQFipE5JcP5-a!t2r2J1n30LfcFjCgsN z`lK}nWH%9t@)(0wo2)A-nO-Sk`fPvW0gi{?1=i35d%~s0JmU)tT0+W{_TE}3h2#;D z9<#M{9aXp_LI4z*meIXKLCVc?+7nrpu}W=h5yPWT7XRJk&Vpb0Hr)X6^Fk}q;hKsG z+!1Ylv?afHes|SGu6lBukZ&#RrAoFU<4rS`43u$ewH6z4^AI0 zxY#l1OwW<3e^Ax4ldaNW`C?M+aBl@eqw*6ywbMQ#24NDkr@HHdf>m+Tn0Et<@+1;E zCvCUx1-b5tQlYRKBYP;1INs~Y>gfK=Uqliyo}=5yP-x6EL zFFjn(edT2kc|kyk>Y2{ z1Asb32J}bnE-CPKkSih4*HEu)bkGV*4qJ!3S6;SPSixw#TQOPD!d}B~$chj?3so!B zd9_}TFJpADNo07U?=^_o{6c#>#C%Hi`j}GyN>TG;r^K_CI=dkPwlkT|O)x66>Q!!e zW&82~xm=U#UGB=Or5G>%m4dsgWtED{_BO^&=r^?xes9gK2lnyS9nph_-`}hCJ}UNx z^J#me;Fw8>K`!5`D=O>Q+7+(+%u@d6dEZe+X4Bly$H;76?wDXBG88t zwOzr~G!rX)oeDn)GeropJfYmGx+_NQk6(D0DCTXlrn+hgw5cP14^6a? z^&#hROO)$M%U}1e!x#Nn%e$UM@B}%wTWWjCo|#~MwbbQLepJnbf#|wk` zvz`xw+abFMI^4v{Ki@n(gcdwb)7_g%&P}(}a*3W!vg?2>lx%%8aHTMI9qc%km(+Yq z6S%4WP()o=W%6sL_LqU#TXI~oPJLN?vse41&GRm`SGQ4>%+I@wd}=rZZimY52LoP zO~tM2MjgmMsvX83g}JePc=d9Zy9@{Hvm%JT!YL3%U2Wt>>C)zG0j%}KNQ(}fh<~dZ zQai|7N#_`z2(2}aTP?8h;Zu=*Mk4S!48gBipXy9JNmt~POb)e&HFRZ-=*aD1{%Tr& zcT02r^2HlL`zJGyYR>X6CgU^Zx+`mA>HeQvnd7XY}uD;*dQ{4IB6X7%c)m}b1bmJ z8LF3RCx^3Qu3MM028LAhA5AnJ{+RL)!)+#MM7Ioj-`&(s;LWaNBXX$dE4M?8%6214 zD$kr}MJ-?9=y^Trn9;DJkKfOPf{N2@*|^$mGh7ufqx)gj!Fctt$`g%0BnuGcE32M5wns6)hdPywT}ef#CUWn&WliF?MwyI!^*jdF6vU=OoIqkP>d6nM$p~<&w|5M265tLai z-HO~BvS(c#$5S?VEl1DN6x(csy%@^=LU_n|s9LP|8P6gf){ps_Wm|~$0n=0hp=!jZ z<@XCVmzve6j%Z8EB|zn{n313>g>O|kH(XxA#5OPqN<>zgKTi4&JQ&3D$4T@42FZeW zL9l0(|J7LwaQ|}F4QG^y9vJYf&{HNvesYlD?-&6j_}jaK1b>GiAVDy!k?FtE5fu7O zhk+R}81=8|2>yu~g#P?o=yww8e1|!KVBk^)`|4C`VVc5SRzx;gvBMOPv5>xNw z#$Uc97O8cb0=2~ozh{u4pHNo4x~sOvQ*y%makS~%;(M4iM6A<>{uMn< zatwjjuD%UX9@!vb`qnlVw-6=f%(6D@)N!#+1~2DmPT)=6r_3BZz01J^XxcY6Y=w5J z8P}MK{_K4IkhAN^aFm0VC%9Pt5Lu|^(#$8`5I-%#RPHfj`Y73FW6>E=h& zHjO5`gbs;xNRA$P#eC`u|U;`M;3n;->#&*Q~7&0E}>KF&bGKDJki- zBz+7hcIpy~o(v^U(&-^De*X=kEYBva?IALb0-nJka@7SPem@zGtvMjk$sXPP3nzCo zf-KKz#QZ7HW9vbc6H(ua0J&sgGKs+^gTWSkm9k2%=9=q;&kmBX~!z&$Fi4lRnZZA0gKW;DX2V?$W`HyrN{w-4Y4acvs|FP=7 z*9KqiAD&8-h(PiGrO1GyADT)o|ZJly|Vq`!Ra z-{;fA)yCTz;sIoKwzO8)2I@gPJnySiK>VECKoe$ZZ+j;jD3FIwikFw)gaxSSZRz0^ z0E8D0{bJ|m#SWBmgV(m$sJhxffFMo~3nrJ8x0jtOoFEI3OWWJZ0b=d-tF7Z<2_I<# z_iUCuV=Y0jgh@KEX=aPaC!29Kz~_nBW`AHCT?yfIAu7K|22jO z1m@@A7BqtQ!~bDDM98%G8ai?YobujIPF9vKE)Wk)7%eff5k4lD3dG;n)x*Z~o~O8Y z@)#NMJ(iT^|A8g_pL;>){ zSL9*?xi@|w_)7r(7P@bNfKd3A_rA%0f4T2~7X^XfrB?SBLHLD_7ZY?}w)LlKN?ux) zpBw&`;pLT*mIKSm$b;piz%o+Oy!=x4RZ}v&^0GYqf`TAvAwfB?pgg}6x4eLioRAc^ zES~_647d0_t^X+6q6Kp4|C$vaoEN<7F~sGGmmQE#=&u?s5E$-JiGwk@{wePI&jK)U zao}I|O8{#di$rcK3*@9Xl7)qIX*XE3MYs`)JJR?ppYa&mH)^(k^%O|4DV3H82)kQo kxc>oJ`t4|daKJ8H9sN8YwwOEu+`M3TH5-GRx;*Cp0joQL5&!@I delta 12176 zcmbVyWmFu`_AP_EI{^lF8Qk41NYLOgxVsPTfsg?PcXubjf(0j7@Bo28aCgni{pJ4O zTld}f>GhZD?yB0S>eO1j_v*9525@WYaq$>5)ZhAYK8`pMDJ>h#ScD=1;evAV?S}A%PBdv39j| zK!>`+J0PI*3c`RuL=tp0u#2si-Jh|7&~tneSP(IyFjN(Q2Kj>v`Uh9p#l{uLBLw6I zY6H2nU0uC^y#IdCu@3+PdH95YT$&zWpML`Ja0CCZi%VG!_*M*L#m8gC$8BvX$PMPT z<`(3&v=QdB~n}8_YyJkkd{X(eLA6$*qI9{LkuGtT%QS+EG&rxF}XPu{sB=G{hzJ< zD@kHve==y{4E6-_^8elXYd5fqw3U~=s|%3--wAl_?d4?e@@EVWFCP?$$^hVnDxgxq z^9sZK2@rvZe-g<1ucSgWfWm(cM8V#}(+emB0{!bOJiR=?7S8B?Icr9%E_8zU!5j5J zZm!XYW%edNjBvP7dMMTcPK0~Y5(a#+YZhKnN>{Cq&C_jQ6@$NXd9#ah-Vz8i!@4@l zno@7R^1vlORZD_xn3YssxKb*w1!C#g>jwyhwo-x66@@chO zIWrbwy9~sz!n2~l%4a4@Yq`qh_=K?Fd0VyEdn7OA-(LL-zWIgL@2hodv7!* z_Yi|usAE6AH9T&Ao^pW&V3OY4q7(r)q8HQIihe>ilp_G{owQm;;z;378Z{}83{Bt^ zyFRz4hDRWxUlW$fp4=zOhWBX*NSyQuM(_n6BWmO!ir@NtpaZ6My>HkD;E(868vuLY zeN zSlGF4$f1OeAI4`RXj1lU*{^6A_v73z;P@J7i9;!!A`EbCUZFNhO(Yr`E||aK9Ubw@ zOao&<8YL_ZWsi~(bqUPV>9Yl9Rz3&am$LTg{*DIpf!8ax=DYMItGCpMHtIu+E9-m6 z>3j4jK206?Zya=VcI@dN%L|&_m>C$@g?WzTZ*-{=ZPav>9dkGLQIF@^+Ka~kR9e1(0k*cvYUeeLn-!1WaG z?cM$)&LX_Gq#1`GOd@dcmgJBterq5Gr^B=x^4ZAL>)7c<3;9b2*Q3A5w*>#rqec17 zA=ks}gAUJiGoSf`C(A~o7mpXm)k)jSHc>9vq&OcaA$u-*?u!*y zg`WPs7gmvZKUmA3;%ON3Dmy?=YmN_;I{z|8XYP<{}60gMG!+sCTu(cP^iDu}K5=Sm?bR|amhI^!)1 zzM}6<7oMx>$6FoY4$BEuzy@PhvX2uhaXi-5YziIL4ViBA9GYS0l`K|&dHD#`+z%@c z{>JAQJ`dp7YD_Y(m1N^i@Sjgx>oVDh+`~*Mf8Hiz5aT1by8R zLnR|}aeUr#KG!7Gn{9bI8ms4V2_kuf13O9w7R-bmv2F5Fx9LZDNWIPub0ceOq%pgVQ&2KGoK7Ux%pDuW2R%=~*Qb&Ir zmi*0-Si{g7KV&zGlMYMx@*DaKA}t~}8#%alUMfziX&02m$5c-@ox}L95ai0rTBy?ldf+=LN`!vap0)yXLCJfL-as>g#CRddmHk_UQcpgA4E?u@Z~h z(ax5&&!<-lTqKt-=y?bb;pK+Q(XW**CgP#KXcb|u!8XT+=!oT5?ED#U5UM;S@nQc- zj*X9-0Mg$4exDxw4_~8mJ(aKV`awxeu>2$Nm{q@oeI;=j+Q5-IIqx=zdh`#?xlb`W z@nQRAH6WZWc`ZIBi5~p?`S$zn($+Vt$5cLHe&?XQC&0LUL`R=(v0;^`a!vG@w^9qW zc(5O-v1tzNu8^=dAx>N{M5$iu?gZBZ0K!eX)(N%C_IW+ohz&|ED3!38QtGs4mgIH7 z!N&7%59GXY|G3d$F*(xQ9x}kJW|EhoAQ5a#)$i(qdi?Z@Md~W%{+&88IJ)zO0)sZ1 zOS~soOs~7+l0p?Z(|YCpU8@G~?r!*af{rc6Q}pC!NVBZnu3(@vYwZ znze@C!&OX0U{lX~DQ9uVei!tCy?F+-&VdC{Ttco#h>Gif<<;cd{&c1OLW-`gRCB~1 zwbhjH8rbSrp(!PtpJOCDtht9==!hO{ic8r?+h^~O)?$@H+OlaIfnhKh*r4=Pv0;R` z(2>~R2bTd}E~ZNxVh+=s+ulqOw$*!;lEFjUaH*t8-QG}5Tz#+!jDLYcfTyteuy`$n zRxwg7NP#k?Dt6x8Ummb^3paIr6WHLZvjRMo!Fp z+Rmi%c3~k|9F97Tv0O3#_}$0@W}dQ@;nxZ;o~+~TPYCdDAf&483Z=ob>xreB#j~$c zL|)6U;+*Q9$_K*kY2J_NBNCL7alFo5#j|7ozIIz)8v^4b%~johH@X9KiF!i^?Mf$e8T!MYnDW0-SRxs-a8#xbL+MXN-V;#FNI= z!&Ztg24ed3dm)D)BeO(6(ePi9CN<~cWx=`EGa&qo_ms-Qv+L)A1EGt2gi7-h!1_7? zM6CS6|7axv?!OJ_Z^QFX^GBk}y1ICQUA#Pjd_1r-9(ZQLKg#v5tOR?ydV5&?QBnf@ zFbh<83aBz3EzB(!fC2#t^7HG^l)-OpBwAD_@WLno~qZd13V zR$C_H*o9MDvY&5}P{-1p!Lyk+O^nj`aFRiAg<$A$q&DD8_5_R}Ci^iL&*0X+k zi0)D>ch#5qI>fkKBiw2$B zkF(PK*y1T@qs(Or;qw#4Hr=#`;?On3_FklXGrso5wYp5!)BEdNdEj#gK6PG+LK2I2 zo)`_#kt-J5fcjgGlQkn&dggdP+(Wik6FpPpPN^HKNN?>X338(dUwu#N`-1<`04{a- z#k{{rvhqoYU60ntw|W8IOySHTFBpxh&M_zP*Oa>BO~z(syk4*HDqq2Hjs5+IjDdL5 zbbX6-*iF=wYbdIrqBe7`Cwp$J07P{7)1VCck3Jf$Si2pJef#yJ&5#ry9SwXm)0vLB z>W1MHoYLhOtGy}`y(`gr)y@<9)Ny9U^G64TuKDMoQ<2%kPqpJsWjx|gv`DG~C4Htv zEn@s(S{1hAfz6$~p|egzEG3H57%oGEWH$tEjeKhRgKji@sl}PIt#43gUq~DI!>f<* zOuc!Up_M)ySX{k`XjJu`-1aLg%MPm0m6_8%q|adj!(WOo;KIBuLasQ=?o(Xp3XpG} z`Eps7gi%p7VkUY&Iq#9QXoWB6TER-CD-#9wI5=;$mc#h*z7twST*Nj5q%HIt;xP~+Lur&SQ#pMsGW}9g0(>;U^%X;J-wn)@ z23!XapkA`zvT9PI7_bx4bI1?XR9w8D&U}d`)Lo+L^-Z7k50Kx6V@o`!Q)Qt}?z3~{+DU9|%Sd>^_TT5=SG$uY9`Zd6K zwcEJJonV-kbNx{!m~pZVo*WPdRLobN){Q(m@gr5Oj1AOVd-tss+VgamUh*#Y4PZ_g&7U$nof;5eADA6dec zF~=W5&`M;L5-~I*f_6cp;0?m;2I_;o;@Zw3CLJmf`Hfo0&V^j$(>Loa(yWP@_m5wB z%f>FyxlCi$1I?^P8YXH2liF6&uZYi>y?#w|Ihg5N98E-%`^vwjjTI{sTJi!b7x&bs z8K?}*?XDcIq+zPSELm3;GBAW>+=!qO&r0}STW4se^%37~g=J-5*nm0c=rJaEoqO?1 zjqR7J11@wB!s0{P&ixd}i7L+s1!1XDeKthw%U6WCwdPGUz|C&=0*Cs|wWQCNoACLf ztR&Ad38>VZ?czA}6(L|%-UnUZ^LdZe7}+hhqpzmvXDK(J$wgJpxhbnB|4@e|$OdJc zU#$#brggx+uJJR;{?67H$-L(2m;Z~qHSsZF>{$ScW-f9D3g|9AQ*$8y%_}G>Ia70n z_A)&54L=j?r3^sd+@-q(4|UgOYW`xNssMG5hI2FwDmLbG*6+P4Y-qwuiT zxd4{-Z^Zxv1XxG`KoxdV4Df7EEC1KX>S6#UERq0`2$7FZ`0t-2sVV?AMCd=L``Fmg zlVEiICC?0``-t?}6%_orRQoNGjRj>FMifoM^45S7`SRGghoUSYveS5Xo3koWviU9wLnzEk`fDOIq`$iJ4(hQF8*hQP@-GWdl^d` zCapp|4I*v)1Pu~xl&TCFkz}M?4nqBm=`a(9iY*MV@JytPKPrP5SBs|kSb~gWSZi;* zPfo|1!U!5uFN=~QbWQFLvCbCkk%-w*?ysEulF=bR0*L~A?$q&Dg{W^qYhI@j0`Xhu_1J;z0=R%RiSL)?S&tsirjz+t%u)s<+Xf^dRcn`H~Qxt49H$ zHEn1<)VkcP;#^Wqg@>fq6E~lGXp=PTDgEa0DMvD!Vx0UU!kYYWLmKeBy5(VvjJ&{4^{5d(=YIw^k-%v7kz!V0@)6c!6a&%-Tl#s z7zmS>X=HMi$DQ1qZ~^;f^s;cE_rt}u;YDroYSV*U^fn;c30C-XhhLb>r}Lc#|TNAdcvhu)(1bZQy35#9GYr=&HiF<0iTTns#rv#kIL z>Uhz5>Rj>1eVPV;|Jh;WLLVH8FSky+1uWD&l%5g$ukt0HcOvinmv22Kdy|&HG1PD7 zY361Ij=CQ9?_j%jA7|IrWwv)Tj5b%6hk#o9NRqu%b}4h1fE4vwnG7u~5L6f}>U!I#@L zmE;a%6^c)>FYYQ&pVFE-M?=nqTpi}32;3L5%-758XBfwKt9R~dTrANcSEM!br`feA z@(>+Lh-XoWbG^rz=+V%_iw|9^Zs~CP4&Aq982CLnG;Qs}$}+xaiNyKm(GOX=CcNd7 za#p{$gNVX2l5%QG=Csuy;q^>&=4`K6tE#Fjd=qSR-(~Z^tsl~Sx|jD9%ctp2JKTBV z)MHdhdJ}0v|6-HTpiI((sf5;`bPS$wWo7jDOo7&GPXsD!OH==t|S|IBi8==8kpXLeXUuEimsI-f@lMs z{fyM=Pyf)T$xa~*V*u-Zj8oAEN^J2l4Q z(mmTi=iJD3;E=GI%j&a77-K5D^p6?l3O40i)5(f2=NtBipasQz^%6h0anV?L_dUtT z-;6wP^;0QAU7+oZ*PM#0i_uQXz24iNpQ)$I>n9rXi>?j6zSdYMWxIyUDOiF^Q5zrV z#zl`9-zvKF*;C&C$*>*s7d&{By>TxBjQ+^NnF|OP+=>EXUKi zH@P3jI|g~x^r!7x^85ph-J7r8N7O$>e(Y**l;zs3N=!H&YUE4hu6P~1KBf@UyKZ3| zuUg#cNP=woe9p8NR16&;K6d z(!|e7I#DP2s+n_P*DNIb2rmpZYL!X2kdxlCV$+>Xcw3hmh12Gh*>6}?eqMP(FJKwf zC?wm$Mn7f{Ep_SjwkDR%o!k-ehAUg-LZ{C6EguA*>A6k6(sy-%QnvO=YMR(oNC|eQ z;+1>f(2UH%w4NGISVif~aW3aa6Q1Ukn4~nwL;689%^ksrnNBId_9kRq!FYCzW~)Nz zoXCrc2KTn10yl-HwY@nUM`K0V5zo8IyRxOsP=`$a=6{U; zgEC~+f3uQdR9-NDq(j9ZnLZocID$9Q^GMZME=&PgBX${Ae)k+F#jo1#BUAsITg}|j z-oTBw{GJz8p@`2v+t*$gbtNv>SS{FeH05UN?_>jGa566zJvN&EY(A9 zrTPaAT^kjM=VsaoOeo+GIKGDrETr>X&#B^)51X%5Im|&3m9Et&^cfE^#-_&_ymQ#( z6Dt~Bps*l?%wPNI_8bxHTOOH4%yYmYGL2s-e4F+o%$!4H&t z;l5K#<4uYpG4CAOMJuc12NijAY~fxK#mcgHk|Ax%V@a*xjfm(zb}nP^)m)dtO$^Jr`wA2vV)2ba_( zKMl)g>55v4r&UJDd5WF*d@um|u>*P}3ls8Q7LsB}dX^b9omj zVCpg(vHXWevzRk-5tb9uTCF!Q77BLuI-orMvXG~-I_VjyAl|csX5VBm=@fVxc~9EtqDCQbi!>)f>${GB06HtNdu;5%zf zl69onI#ey0)1Nl{3TR;if_;Q&VyU=WA?w>6`eE?s#~0m+k4%*NGJ}xmF=O@8>$fH| zA|`wt_*$W=W&!W>wl-R3PWNC&fkrrQ%F;{Hgj{5^A6jW7_!RDHN}bJQnCCaj9^no_ zlrPTHNTPLhAvOChyd@1EyDId&pnFt-y;MzBH?hyXRL#`OXrf@r#{6Znz%Q%Xb=V@C&sWZ+FEP~#0ev<{f&#WMr@nNjPZi5VomKkHJCU_Z zS+%yOh67m`9Xjhzjn<1tzBed=QxXl3Cdfkd4&IuI>co0^viQ^7J`z=?%HWjSx_+jKe8NFnX39aRj z8v=gaJV)=H-w1=a<$Z4a!yXFN4o`2_CJycA7WDZJhni_6W+b*8mdDLm&Oc}898**H zzMU|arN}Q{4R-(Yf0Yfa7&N?Y^5-+!Dqmj%88$W>66Bw%`We(qJWzM=u+f8=RrLIk zA*5)lig+`YRk{Pf7p8>!wSFxVJLX9 zrolHqWPXBd{N^-%;jzq4lh5{d?#n$QRmb(z?y}%UgIU0+b1#xD3cm5iPov#ymu!9`ahs z_ty1A&AvjhJJmjnYzPiNh) znh?o6eHh2l?op7gzJbjm%kFi++C~7CQUvIryR&W)a&^RBIyh>VN3gZS4rNAzmcr zbg7p1c)~kBN$^GJY}uPv(cpWcc&^D;a-)Ow;+?w}L!H{J;`ISzcIEz)4@)iYKKsJ6 z#7!)Jg|rTOx0_MU+_(hRy63i$ucbMS@SHRXsi zpN{uDBJ-Xyd_(nVTnIZ~v){^j2P@x>$cN@3t(uD*BtzD71vjC=)zQhf`(n3gZTI%5tuNLWQhwQS`o z{A}3IC$$IQFHE>9LAjzY-b5EKU=G+!>_Fy=;?z!Si!h1wl4yn)kC^zTG6a`+ODWB! zQ$fBFhgBmVk%*UYh*xkZukb{yeBdi2%X?qYBm8iLdnitZb7xUh4mq_lH!;$~a>y8} zkVb-r%ol_xcROfymza37DW=Zg)xS3$iwK}A)%WvrFd?3xzwiF z#+~a}b2P91T>*WKhwMSEEw@lqoMx!=6&^&hX;td(jx(9wbgxNHJBk9!dQUe$@Y4-s zCZ$siTWd}-3}1gWNu=2dA^v`m*n&?ZYRO_SLGStpj<(&`@*(%fxN}Kk>WHJ6~4uDuGWAvnVL)JK3DQ_LGFfGN(^;MJ$b zCh?b!ujgEIu;Ue2eJ6k!hxczChwq<8kQer=6CjHJU!@yCm^mu^tM=DjfZwVF|J5tR z)BdNhgO7yy*G?lO@Gmf!I~F_}tO^TW@V_Sr^Zru_YRAEb=S0E!TS@|P|APw?A%drY z1rosv68=}5KSrj1=D{|J;MpL&|5-blGYJhQf8hX+><@>+@aXcVIGS4UB*22bd?=fDSFUxcD+RJF>CatKo7Su2M)o=IScJ)k@fD=DjVnI$L#j>cMyrl}_D7SFG zzNfy|_@P4>oziSTofGm!1D;C~jxs@JSK+nEKr#(6I+Lda^;6G4xI%-hq?AFd1aUOr z#2l{x0xXFz&@B5l*Efh`kzdd*zI`Se9T_|1X!UlAatw?pUz49LldFg&iZM@EBf_xi z{5N@XT&N!w6y@+xd(hPI0@Gx zwTnFU)s#vmEu!y7gAD6C-v8dbR+B{OpDISRIC%~Ko51h7Uoy%m@QfT;vMjcb;$7Ki z9fN0nXBmU^Lzf4FacI`7`7nVP z;*W$e4I8)j(@n{MM^~?&GicA=}QI?jI^QD zOH)l2u3uMT?FW5S{QdL*T7074d|#-+L=6FF5|1hwM8KuITm%Z${Pe#b5DEKdiH^85 z)YysS)de^UK5i*GMU@#|64S}8sB;#!h4s*IiW-6i%pD2T@zIAJ* z_8N{No@FXC8647BpVZ5rJadf8TnG8id_#zD65u7S>i+QHKBIx#3n9XUw|WF@O_Hc( z7=HuSmc1E6ERwr%l^~3L&}zPidVQMBcx6*5kD?p(%v#8K)5O<4{ek&HgPE~I$+^BE zA;GXe0yy?uac|sYI=pjCx1j>3v?8%tOV`5n;@=OTAVP$4z;vjS7%_u zoG-Ta$cR$Dq6l;H&o^@LgngTV!+CiZ_v+b%r7b$8Y5uzPTOCs>h&g2YWlfKldBGK^ zErG93il}`Rzgd{4vfvRr@QazNl6#R$*{yqvTbY}`+?!khn5y)?=%!}~63fo9>=+IA zA7+x#xxmK*GPWwU-(AccVG;rRj37v|5hQqc1tW5my@W2ZWk%0m z#xnFk1>fC;a-VUsrr$hAB+x zQIdv1_;_oL*x;&uPFeYaIs_F_WE%TN%JzK2>z0WpeIF)CLmf_X&W(Gc` z{&mja+`NqgleToT@6YXV>5L|U>dPG*K3QMDKB97$K~BbUl0-Q3q3kYR85J4D3LWu0 z{MZyt%X+>)Ygh#kcl3%XC+uYP#)S3>tJ{6JZG}$!4px<`D;E?1NbkE^wsXcY`2#v{khS`5t3U>vx*sB1Arh9l}<0ABofueW|?ZpXx^*Z-c!X z<*iH>${Xw3deYQSM^K0KjN%9}WHd2U2)oJNVr^f$iJoM8T!Fb$f_r~S9=;Goy26>k zWtfd7uJ`brK<>6&ZUAgl$q4_aEcriPavmWV1`#4VD!0%dAGZK6H%yWUQTqQp#S$TY z2k`%ov0T#XPp1C=?BM_92A44Tk5pS(!T}f+hSqjTVN@iDEJ|1guAq!=L^%)nhkI-;o&e!QbeNv1r^G7o&W#< diff --git a/Audits/external-reviews/EspressoPlonk-2024.pdf b/audits/external-reviews/EspressoPlonk-2024.pdf similarity index 100% rename from Audits/external-reviews/EspressoPlonk-2024.pdf rename to audits/external-reviews/EspressoPlonk-2024.pdf diff --git a/Audits/internal-reviews/EspressoFeeContract-2024internal.pdf b/audits/internal-reviews/EspressoFeeContract-2024internal.pdf similarity index 100% rename from Audits/internal-reviews/EspressoFeeContract-2024internal.pdf rename to audits/internal-reviews/EspressoFeeContract-2024internal.pdf diff --git a/Audits/internal-reviews/EspressoSequencer-2024internal.pdf b/audits/internal-reviews/EspressoSequencer-2024internal.pdf similarity index 100% rename from Audits/internal-reviews/EspressoSequencer-2024internal.pdf rename to audits/internal-reviews/EspressoSequencer-2024internal.pdf From d899a3f2239e68fe97a01c6b66087edb2d31481b Mon Sep 17 00:00:00 2001 From: Mathis Date: Mon, 25 Nov 2024 12:25:07 +0100 Subject: [PATCH 03/15] CI: group dependabot updates (#2322) This should make dependabot make less PRs and remove the need for the combined PRs action. The combines PRs action also had the drawback that it cannot automatically run CI. --- .github/dependabot.yml | 10 ++++++++++ .github/workflows/combine-prs.yml | 24 ------------------------ 2 files changed, 10 insertions(+), 24 deletions(-) delete mode 100644 .github/workflows/combine-prs.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d69e05329..c5b6638f4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,10 +2,20 @@ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" + # Group all updates together + groups: + all: + patterns: + - "*" schedule: interval: "daily" - package-ecosystem: "cargo" directory: "/" + # Group all updates together + groups: + all: + patterns: + - "*" schedule: interval: "daily" diff --git a/.github/workflows/combine-prs.yml b/.github/workflows/combine-prs.yml deleted file mode 100644 index 50256ed20..000000000 --- a/.github/workflows/combine-prs.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Combine PRs - -on: - schedule: - - cron: "0 1 * * MON" - workflow_dispatch: # allows to manually trigger the workflow - -# The minimum permissions required to run this Action -permissions: - contents: write - pull-requests: write - checks: read - -jobs: - combine-prs: - runs-on: ubuntu-latest - - steps: - - name: combine-prs - id: combine-prs - uses: github/combine-prs@v5.2.0 - with: - github_token: ${{ github.token }} - labels: "dependabot,combined-pr" From 60283a53d709f789fdcccc6bac27a9f2204797f1 Mon Sep 17 00:00:00 2001 From: Mathis Date: Mon, 25 Nov 2024 16:12:24 +0100 Subject: [PATCH 04/15] fix cargo audit: rustls 0.23.16 -> 0.23.18 (#2326) --- Cargo.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d6ccbb79..a83ba7e05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1551,7 +1551,7 @@ dependencies = [ "rcgen 0.13.1", "redis 0.25.4", "rkyv", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", "sqlx", "thiserror", @@ -1585,7 +1585,7 @@ dependencies = [ "rcgen 0.13.1", "redis 0.26.1", "rkyv", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", "sqlx", "thiserror", @@ -3530,7 +3530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", ] @@ -4687,7 +4687,7 @@ dependencies = [ "http 1.1.0", "hyper 1.5.0", "hyper-util", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -5916,7 +5916,7 @@ dependencies = [ "quinn", "rand 0.8.5", "ring 0.17.8", - "rustls 0.23.16", + "rustls 0.23.18", "socket2 0.5.7", "thiserror", "tokio", @@ -6010,7 +6010,7 @@ dependencies = [ "libp2p-identity", "rcgen 0.11.3", "ring 0.17.8", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-webpki 0.101.7", "thiserror", "x509-parser", @@ -7675,7 +7675,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.16", + "rustls 0.23.18", "socket2 0.5.7", "thiserror", "tokio", @@ -7692,7 +7692,7 @@ dependencies = [ "rand 0.8.5", "ring 0.17.8", "rustc-hash", - "rustls 0.23.16", + "rustls 0.23.18", "slab", "thiserror", "tinyvec", @@ -8393,9 +8393,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.16" +version = "0.23.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" dependencies = [ "log", "once_cell", @@ -10212,7 +10212,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", "tokio", ] @@ -10648,7 +10648,7 @@ dependencies = [ "flate2", "log", "once_cell", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", "url", "webpki-roots 0.26.6", From c9f95836072d4bb0e0112dc252ef1367e0d8616e Mon Sep 17 00:00:00 2001 From: tbro <48967308+tbro@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:03:34 -0300 Subject: [PATCH 05/15] Add `from_bytes` method. (#2329) * Add `from_bytes_unchecked` method. Closes #2327 --------- Co-authored-by: tbro --- types/src/v0/impls/block/full_payload/ns_table.rs | 7 +++++++ types/src/v0/impls/block/full_payload/ns_table/test.rs | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/types/src/v0/impls/block/full_payload/ns_table.rs b/types/src/v0/impls/block/full_payload/ns_table.rs index 994d68710..bbab22eb8 100644 --- a/types/src/v0/impls/block/full_payload/ns_table.rs +++ b/types/src/v0/impls/block/full_payload/ns_table.rs @@ -100,6 +100,13 @@ impl NsTable { self.len().in_bounds(index) } + /// Instantiate an `NsTable` from a byte slice. + pub fn from_bytes_unchecked(bytes: &[u8]) -> NsTable { + NsTable { + bytes: bytes.to_vec(), + } + } + /// Are the bytes of this [`NsTable`] uncorrupted? /// /// # Checks diff --git a/types/src/v0/impls/block/full_payload/ns_table/test.rs b/types/src/v0/impls/block/full_payload/ns_table/test.rs index 2c515651d..676c89da4 100644 --- a/types/src/v0/impls/block/full_payload/ns_table/test.rs +++ b/types/src/v0/impls/block/full_payload/ns_table/test.rs @@ -25,6 +25,13 @@ fn random_valid() { } } +#[test] +fn ns_table_from_bytes() { + let bytes = Vec::from([0; NUM_NSS_BYTE_LEN]); + let ns_table = NsTable::from_bytes_unchecked(&bytes); + expect_valid(&ns_table); +} + #[test] fn ns_table_byte_len() { setup_test(); From 14ae7719c4dc5319586c991c8c3100f0fbe5b1f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 09:52:18 +0100 Subject: [PATCH 06/15] Bump the all group across 1 directory with 3 updates (#2330) Bumps the all group with 3 updates in the / directory: [cachix/install-nix-action](https://github.com/cachix/install-nix-action), [crate-ci/typos](https://github.com/crate-ci/typos) and [DeterminateSystems/update-flake-lock](https://github.com/determinatesystems/update-flake-lock). Updates `cachix/install-nix-action` from V27 to 30 - [Release notes](https://github.com/cachix/install-nix-action/releases) - [Commits](https://github.com/cachix/install-nix-action/compare/V27...v30) Updates `crate-ci/typos` from 1.27.3 to 1.28.0 - [Release notes](https://github.com/crate-ci/typos/releases) - [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md) - [Commits](https://github.com/crate-ci/typos/compare/v1.27.3...v1.28.0) Updates `DeterminateSystems/update-flake-lock` from 20 to 24 - [Release notes](https://github.com/determinatesystems/update-flake-lock/releases) - [Commits](https://github.com/determinatesystems/update-flake-lock/compare/v20...v24) --- updated-dependencies: - dependency-name: cachix/install-nix-action dependency-type: direct:production dependency-group: all - dependency-name: crate-ci/typos dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: DeterminateSystems/update-flake-lock dependency-type: direct:production update-type: version-update:semver-major dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build_static.yml | 2 +- .github/workflows/contracts.yml | 2 +- .github/workflows/test.yml | 4 ++-- .github/workflows/typos.yml | 2 +- .github/workflows/update_nix.yml | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_static.yml b/.github/workflows/build_static.yml index 5e5a78cfe..dc78e9b68 100644 --- a/.github/workflows/build_static.yml +++ b/.github/workflows/build_static.yml @@ -43,7 +43,7 @@ jobs: uses: actions/checkout@v4 - name: Install Nix - uses: cachix/install-nix-action@V27 + uses: cachix/install-nix-action@v30 - name: Enable Cachix uses: cachix/cachix-action@v15 diff --git a/.github/workflows/contracts.yml b/.github/workflows/contracts.yml index 0d5fad542..5d6a2f13b 100644 --- a/.github/workflows/contracts.yml +++ b/.github/workflows/contracts.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Install Nix - uses: cachix/install-nix-action@V27 + uses: cachix/install-nix-action@v30 - name: Enable Cachix uses: cachix/cachix-action@v15 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2dadf8554..fb91b5978 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -130,7 +130,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Install Nix - uses: cachix/install-nix-action@V27 + uses: cachix/install-nix-action@v30 - name: Configure PATH run: PATH="$PWD/target/debug:$PATH" @@ -175,7 +175,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Install Nix - uses: cachix/install-nix-action@V27 + uses: cachix/install-nix-action@v30 - uses: actions/checkout@v4 diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml index 43b51d8b4..54b4ea5f3 100644 --- a/.github/workflows/typos.yml +++ b/.github/workflows/typos.yml @@ -24,4 +24,4 @@ jobs: name: Checkout Repository - name: typos-action - uses: crate-ci/typos@v1.27.3 + uses: crate-ci/typos@v1.28.0 diff --git a/.github/workflows/update_nix.yml b/.github/workflows/update_nix.yml index f7dfd33f6..ae8a02ca8 100644 --- a/.github/workflows/update_nix.yml +++ b/.github/workflows/update_nix.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v4 - name: Install Nix - uses: cachix/install-nix-action@V27 + uses: cachix/install-nix-action@v30 - uses: cachix/cachix-action@v15 with: @@ -25,6 +25,6 @@ jobs: authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@v20 + uses: DeterminateSystems/update-flake-lock@v24 with: pr-title: "Weekly PR to bump flake.nix" # Title of PR to be created From bebccbd2d9d7fcb883a8a773f04954f703e8ffe2 Mon Sep 17 00:00:00 2001 From: Mathis Date: Tue, 26 Nov 2024 14:31:20 +0100 Subject: [PATCH 07/15] flake: add target/debug to PATH (#2332) We now compile mostly with the "test" profile which uses the "target/debug" output path. --- .github/workflows/contracts.yml | 2 +- flake.nix | 7 +++++-- justfile | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/contracts.yml b/.github/workflows/contracts.yml index 5d6a2f13b..ccc37ed94 100644 --- a/.github/workflows/contracts.yml +++ b/.github/workflows/contracts.yml @@ -73,7 +73,7 @@ jobs: - name: Build diff-test run: | - nix develop --accept-flake-config -c cargo build --locked --bin diff-test --release + nix develop --accept-flake-config -c cargo build --locked --bin diff-test --profile test - name: Run tests (quick version for PR) if: ${{ github.event_name == 'pull_request' }} diff --git a/flake.nix b/flake.nix index 80e45363f..42e9a06f7 100644 --- a/flake.nix +++ b/flake.nix @@ -225,12 +225,15 @@ ++ lib.optionals (!stdenv.isDarwin) [ cargo-watch ] # broken on OSX ; shellHook = '' - # Add node binaries to PATH + # Add node binaries to PATH for development export PATH="$PWD/node_modules/.bin:$PATH" + # Prevent cargo aliases from using programs in `~/.cargo` to avoid conflicts # with rustup installations. export CARGO_HOME=$HOME/.cargo-nix - export PATH="$PWD/$CARGO_TARGET_DIR/release:$PATH" + + # Add rust binaries to PATH for native demo + export PATH="$PWD/$CARGO_TARGET_DIR/debug:$PATH" '' + self.checks.${system}.pre-commit-check.shellHook; RUST_SRC_PATH = "${stableToolchain}/lib/rustlib/src/rust/library"; FOUNDRY_SOLC = "${solc}/bin/solc"; diff --git a/justfile b/justfile index 1bfd6f3ee..2b0a6d9ce 100644 --- a/justfile +++ b/justfile @@ -7,9 +7,9 @@ doc *args: demo *args: docker compose up {{args}} -demo-native: +demo-native *args: cargo build --profile test - scripts/demo-native + scripts/demo-native {{args}} demo-native-mp: cargo build --release From d76d32effa5285d6821bb5992cd9e88abfb50f8a Mon Sep 17 00:00:00 2001 From: rob-maron <132852777+rob-maron@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:49:30 -0500 Subject: [PATCH 08/15] fix timestamp drift log (#2333) --- types/src/v0/impls/state.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/src/v0/impls/state.rs b/types/src/v0/impls/state.rs index 0bbec1d52..37e87f2ac 100644 --- a/types/src/v0/impls/state.rs +++ b/types/src/v0/impls/state.rs @@ -102,7 +102,7 @@ pub enum ProposalValidationError { proposal_timestamp: u64, parent_timestamp: u64, }, - #[error("Timestamp drift too high: proposed:={proposal}, system={proposal}, diff={diff}")] + #[error("Timestamp drift too high: proposed:={proposal}, system={system}, diff={diff}")] InvalidTimestampDrift { proposal: u64, system: u64, From e03304d9e70a42ae31dc9f3224941717d8a6f50e Mon Sep 17 00:00:00 2001 From: tbro <48967308+tbro@users.noreply.github.com> Date: Wed, 27 Nov 2024 13:29:29 -0300 Subject: [PATCH 09/15] More robust smoke.rs (#2334) Remove explicit loop from smoke.rs in favor of block stream listener. * add `fn subscribe_blocks` to client * add some fail cases to process-compose.yml --------- Co-authored-by: tbro --- client/src/lib.rs | 12 +++++++++++ process-compose.yaml | 8 +++++-- tests/smoke.rs | 51 +++++++++++++++++++++++++++++++++----------- 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/client/src/lib.rs b/client/src/lib.rs index 9f20f8f71..80b112ff5 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -56,6 +56,18 @@ impl SequencerClient { .context("subscribing to Espresso headers") } + /// Subscribe to a stream of Block Headers + pub async fn subscribe_blocks( + &self, + height: u64, + ) -> anyhow::Result> { + self.0 + .socket(&format!("availability/stream/blocks/{height}")) + .subscribe() + .await + .context("subscribing to Espresso Blocks") + } + /// Get the balance for a given account at a given block height, defaulting to current balance. pub async fn get_espresso_balance( &self, diff --git a/process-compose.yaml b/process-compose.yaml index bf0a95b44..825c13aa5 100644 --- a/process-compose.yaml +++ b/process-compose.yaml @@ -84,7 +84,7 @@ processes: success_threshold: 1 failure_threshold: 100 availability: - restart: "exit_on_failure" + restart: exit_on_failure state-relay-server: command: state-relay-server @@ -155,6 +155,7 @@ processes: condition: process_completed availability: exit_on_skipped: true + restart: exit_on_failure readiness_probe: http_get: @@ -216,7 +217,7 @@ processes: path: /healthcheck failure_threshold: 100 availability: - exit_on_skipped: true + restart: exit_on_failure sequencer2: command: sequencer -- http -- catchup -- status @@ -263,6 +264,7 @@ processes: failure_threshold: 100 availability: exit_on_skipped: true + restart: exit_on_failure sequencer3: command: sequencer -- http -- catchup -- status @@ -310,6 +312,7 @@ processes: failure_threshold: 100 availability: exit_on_skipped: true + restart: exit_on_failure sequencer4: command: sequencer -- http -- catchup -- status @@ -353,6 +356,7 @@ processes: failure_threshold: 100 availability: exit_on_skipped: true + restart: exit_on_failure node_validator: command: RUST_LOG=debug node-metrics -- diff --git a/tests/smoke.rs b/tests/smoke.rs index c16557421..941eac6dd 100644 --- a/tests/smoke.rs +++ b/tests/smoke.rs @@ -1,7 +1,12 @@ use crate::common::TestConfig; use anyhow::Result; -use std::time::{Duration, Instant}; -use tokio::time::sleep; +use futures::StreamExt; +use std::time::Instant; + +/// We allow for no change in state across this many consecutive iterations. +const MAX_STATE_NOT_INCREMENTING: u8 = 1; +/// We allow for no new transactions across this many consecutive iterations. +const MAX_TXNS_NOT_INCREMENTING: u8 = 3; #[tokio::test(flavor = "multi_thread")] async fn test_smoke() -> Result<()> { @@ -13,13 +18,18 @@ async fn test_smoke() -> Result<()> { println!("Waiting on readiness"); let _ = testing.readiness().await?; - let mut initial = testing.test_state().await; + let initial = testing.test_state().await; println!("Initial State:{}", initial); - let mut i = 1; - loop { - sleep(Duration::from_secs(1)).await; + let mut sub = testing + .espresso + .subscribe_blocks(initial.block_height.unwrap()) + .await?; + let mut last = initial.clone(); + let mut state_retries = 0; + let mut txn_retries = 0; + while (sub.next().await).is_some() { let new = testing.test_state().await; println!("New State:{}", new); @@ -37,20 +47,35 @@ async fn test_smoke() -> Result<()> { // test that we progress EXPECTED_BLOCK_HEIGHT blocks from where we started if new.block_height.unwrap() >= testing.expected_block_height() + testing.initial_height { println!("Reached {} block(s)!", testing.expected_block_height()); + if new.txn_count - initial.txn_count < 1 { + panic!("Did not receive transactions"); + } break; } - if i % 5 == 0 { - if new <= initial { - panic!("Chain state not incrementing"); + if new <= last { + if state_retries > MAX_STATE_NOT_INCREMENTING { + panic!("Chain state did not increment."); } + state_retries += 1; + println!("Chain state did not increment, trying again."); + } else { + // If state is incrementing reset the counter. + state_retries = 0; + } - if new.txn_count <= initial.txn_count { - panic!("Transactions not incrementing"); + if new.txn_count <= last.txn_count { + if txn_retries >= MAX_TXNS_NOT_INCREMENTING { + panic!("No new transactions."); } - initial = new; + txn_retries += 1; + println!("Transactions did not increment, trying again."); + } else { + // If transactions are incrementing reset the counter. + txn_retries = 0; } - i += 1; + + last = new; } Ok(()) } From f999be4264920823994ccce13f1667ff1c800ef0 Mon Sep 17 00:00:00 2001 From: rob-maron <132852777+rob-maron@users.noreply.github.com> Date: Fri, 29 Nov 2024 14:01:01 -0500 Subject: [PATCH 10/15] Timeout L1 provider (#2340) * print derived PID * [Backport release-shibainu] Bump query service (#2303) Bump query service (#2301) (cherry picked from commit 239e3e27a91fe961f94eea0300f30291db7019ad) Co-authored-by: Jeb Bearer * L1 timeout * capitalization :see_no_evil: * fmt --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jeb Bearer --- sequencer/src/lib.rs | 3 + types/src/v0/impls/l1.rs | 116 ++++++++++++++++++++++----------------- 2 files changed, 69 insertions(+), 50 deletions(-) diff --git a/sequencer/src/lib.rs b/sequencer/src/lib.rs index fe07de294..143e229b0 100644 --- a/sequencer/src/lib.rs +++ b/sequencer/src/lib.rs @@ -297,6 +297,9 @@ pub async fn init_node( ) .with_context(|| "Failed to derive Libp2p peer ID")?; + // Print the libp2p public key + info!("Starting Libp2p with PeerID: {}", libp2p_public_key); + let persistence = persistence_opt.clone().create().await?; let (mut network_config, wait_for_orchestrator) = match ( persistence.load_config().await?, diff --git a/types/src/v0/impls/l1.rs b/types/src/v0/impls/l1.rs index 51137ae05..958d4b3ad 100644 --- a/types/src/v0/impls/l1.rs +++ b/types/src/v0/impls/l1.rs @@ -394,59 +394,75 @@ impl L1Client { }; tracing::info!("established L1 block stream"); - while let Some(head) = block_stream.next().await { - let Some(head) = head.number else { - // This shouldn't happen, but if it does, it means the block stream has - // erroneously given us a pending block. We are only interested in committed - // blocks, so just skip this one. - tracing::warn!("got block from L1 block stream with no number"); - continue; - }; - let head = head.as_u64(); - tracing::debug!(head, "received L1 block"); - - // A new block has been produced. This happens fairly rarely, so it is now ok to - // poll to see if a new block has been finalized. - let finalized = loop { - match get_finalized_block(&rpc).await { - Ok(finalized) => break finalized, - Err(err) => { - tracing::warn!("error getting finalized block: {err:#}"); - sleep(retry_delay).await; + loop { + // Wait for a block, timing out if we don't get one within 60 seconds + let block_timeout = tokio::time::timeout(Duration::from_secs(60), block_stream.next()).await; + + match block_timeout { + // We got a block + Ok(Some(head)) => { + let Some(head_number) = head.number else { + // This shouldn't happen, but if it does, it means the block stream has + // erroneously given us a pending block. We are only interested in committed + // blocks, so just skip this one. + tracing::warn!("got block from L1 block stream with no number"); + continue; + }; + let head = head_number.as_u64(); + tracing::debug!(head, "received L1 block"); + + // A new block has been produced. This happens fairly rarely, so it is now ok to + // poll to see if a new block has been finalized. + let finalized = loop { + match get_finalized_block(&rpc).await { + Ok(finalized) => break finalized, + Err(err) => { + tracing::warn!("error getting finalized block: {err:#}"); + sleep(retry_delay).await; + } + } + }; + + // Update the state snapshot; + let mut state = state.lock().await; + if head > state.snapshot.head { + tracing::debug!(head, old_head = state.snapshot.head, "L1 head updated"); + state.snapshot.head = head; + // Emit an event about the new L1 head. Ignore send errors; it just means no + // one is listening to events right now. + sender + .broadcast_direct(L1Event::NewHead { head }) + .await + .ok(); } + if finalized > state.snapshot.finalized { + tracing::info!( + ?finalized, + old_finalized = ?state.snapshot.finalized, + "L1 finalized updated", + ); + state.snapshot.finalized = finalized; + if let Some(finalized) = finalized { + sender + .broadcast_direct(L1Event::NewFinalized { finalized }) + .await + .ok(); + } + } + tracing::debug!("updated L1 snapshot to {:?}", state.snapshot); } - }; - - // Update the state snapshot; - let mut state = state.lock().await; - if head > state.snapshot.head { - tracing::debug!(head, old_head = state.snapshot.head, "L1 head updated"); - state.snapshot.head = head; - // Emit an event about the new L1 head. Ignore send errors; it just means no - // one is listening to events right now. - sender - .broadcast_direct(L1Event::NewHead { head }) - .await - .ok(); - } - if finalized > state.snapshot.finalized { - tracing::info!( - ?finalized, - old_finalized = ?state.snapshot.finalized, - "L1 finalized updated", - ); - state.snapshot.finalized = finalized; - if let Some(finalized) = finalized { - sender - .broadcast_direct(L1Event::NewFinalized { finalized }) - .await - .ok(); + // The stream ended + Ok(None) => { + tracing::error!("L1 block stream ended unexpectedly, trying to re-establish block stream"); + break; + } + // We timed out waiting for a block + Err(_) => { + tracing::error!("No block received for 60 seconds, trying to re-establish block stream"); + break; } } - tracing::debug!("updated L1 snapshot to {:?}", state.snapshot); } - - tracing::error!("L1 block stream ended unexpectedly, trying to re-establish"); } }.instrument(span) } @@ -525,13 +541,13 @@ impl L1Client { continue; }; if finalized.number >= number { - tracing::info!(number, ?finalized, "got finalized block"); + tracing::info!(number, ?finalized, "got finalized L1 block"); return self .get_finalized_block(self.state.lock().await, number) .await .1; } - tracing::debug!(number, ?finalized, "waiting for L1 finalized block"); + tracing::debug!(number, ?finalized, "waiting for finalized L1 block"); } // This should not happen: the event stream ended. All we can do is try again. From 886bb778d4940f444e26e770c87d7a4bc62e039d Mon Sep 17 00:00:00 2001 From: rob-maron <132852777+rob-maron@users.noreply.github.com> Date: Mon, 2 Dec 2024 12:22:10 -0500 Subject: [PATCH 11/15] Fix clippy (#2345) clippy --- sequencer/src/options.rs | 3 ++- types/src/v0/impls/block/namespace_payload/iter.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sequencer/src/options.rs b/sequencer/src/options.rs index 88544ec0f..9882283d3 100644 --- a/sequencer/src/options.rs +++ b/sequencer/src/options.rs @@ -1,3 +1,5 @@ +#![allow(clippy::needless_lifetimes)] + use core::fmt::Display; use jf_signature::{bls_over_bn254, schnorr}; use sequencer_utils::logging; @@ -40,7 +42,6 @@ use crate::{api, context::ProposalFetcherConfig, persistence}; // BEST NOT TO ADD REQUIRED ARGUMENTS TO THIS TYPE, since the required arguments will be required // even if the user is only asking for help on a module. Try to give every argument on this type a // default value, even if it is a bit arbitrary. - #[derive(Parser, Clone, Derivative)] #[derivative(Debug(bound = ""))] pub struct Options { diff --git a/types/src/v0/impls/block/namespace_payload/iter.rs b/types/src/v0/impls/block/namespace_payload/iter.rs index 3f460e09a..f681826ab 100644 --- a/types/src/v0/impls/block/namespace_payload/iter.rs +++ b/types/src/v0/impls/block/namespace_payload/iter.rs @@ -36,7 +36,7 @@ impl<'a> Iter<'a> { } } -impl<'a> Iterator for Iter<'a> { +impl Iterator for Iter<'_> { type Item = Index; fn next(&mut self) -> Option { From abf9a9b7122a6a178b6c5d484854723102ac9912 Mon Sep 17 00:00:00 2001 From: Jeb Bearer Date: Wed, 4 Dec 2024 08:01:02 -0800 Subject: [PATCH 12/15] Add L1 client metrics (#2346) * Add L1 client metrics * Log L1 RPC errors at RPC client layer This ensures all errors get logged straight from the RPC, even if they are ultimately swallowed at a higher level (as in the Ethers `FilterWatcher` stream). This will give us much better insight into future problems with the L1. --- sequencer/src/lib.rs | 6 ++- types/src/v0/impls/l1.rs | 87 +++++++++++++++++++++++++++++++++------- types/src/v0/mod.rs | 4 +- types/src/v0/v0_1/l1.rs | 18 ++++++++- types/src/v0/v0_3/mod.rs | 4 +- 5 files changed, 101 insertions(+), 18 deletions(-) diff --git a/sequencer/src/lib.rs b/sequencer/src/lib.rs index 143e229b0..3bec4535c 100644 --- a/sequencer/src/lib.rs +++ b/sequencer/src/lib.rs @@ -495,7 +495,11 @@ pub async fn init_node( genesis_state.prefund_account(address, amount); } - let l1_client = l1_params.options.connect(l1_params.url).await?; + let l1_client = l1_params + .options + .with_metrics(metrics) + .connect(l1_params.url) + .await?; l1_client.spawn_tasks().await; let l1_genesis = match genesis.l1_finalized { L1Finalized::Block(b) => b, diff --git a/types/src/v0/impls/l1.rs b/types/src/v0/impls/l1.rs index 958d4b3ad..aac8404d6 100644 --- a/types/src/v0/impls/l1.rs +++ b/types/src/v0/impls/l1.rs @@ -19,6 +19,7 @@ use futures::{ future::Future, stream::{self, StreamExt}, }; +use hotshot_types::traits::metrics::Metrics; use lru::LruCache; use serde::{de::DeserializeOwned, Serialize}; use tokio::{ @@ -29,7 +30,7 @@ use tokio::{ use tracing::Instrument; use url::Url; -use super::{L1BlockInfo, L1State, L1UpdateTask, RpcClient}; +use super::{L1BlockInfo, L1ClientMetrics, L1State, L1UpdateTask, RpcClient}; use crate::{FeeInfo, L1Client, L1ClientOptions, L1Event, L1ReconnectTask, L1Snapshot}; impl PartialOrd for L1BlockInfo { @@ -79,16 +80,24 @@ impl L1BlockInfo { } impl RpcClient { - fn http(url: Url) -> Self { - Self::Http(Http::new(url)) + fn http(url: Url, metrics: Arc) -> Self { + Self::Http { + conn: Http::new(url), + metrics, + } } - async fn ws(url: Url, retry_delay: Duration) -> anyhow::Result { + async fn ws( + url: Url, + metrics: Arc, + retry_delay: Duration, + ) -> anyhow::Result { Ok(Self::Ws { conn: Arc::new(RwLock::new(Ws::connect(url.clone()).await?)), reconnect: Default::default(), retry_delay, url, + metrics, }) } @@ -97,6 +106,13 @@ impl RpcClient { *reconnect.lock().await = L1ReconnectTask::Cancelled; } } + + fn metrics(&self) -> &Arc { + match self { + Self::Http { metrics, .. } => metrics, + Self::Ws { metrics, .. } => metrics, + } + } } #[async_trait] @@ -109,12 +125,16 @@ impl JsonRpcClient for RpcClient { R: DeserializeOwned + Send, { let res = match self { - Self::Http(client) => client.request(method, params).await?, + Self::Http { conn, .. } => conn + .request(method, params) + .await + .inspect_err(|err| tracing::warn!(method, "L1 RPC error: {err:#}"))?, Self::Ws { conn, reconnect, url, retry_delay, + metrics, } => { let conn_guard = conn .try_read() @@ -131,6 +151,7 @@ impl JsonRpcClient for RpcClient { if let Ok(mut reconnect_guard) = reconnect.try_lock() { if matches!(*reconnect_guard, L1ReconnectTask::Idle) { // No one is currently resetting this connection, so it's up to us. + metrics.ws_reconnects.add(1); let conn = conn.clone(); let reconnect = reconnect.clone(); let url = url.clone(); @@ -174,7 +195,10 @@ impl JsonRpcClient for RpcClient { } Err(err)? } - Err(err) => Err(err)?, + Err(err) => { + tracing::warn!(method, "L1 RPC error: {err:#}"); + Err(err)? + } } } }; @@ -190,7 +214,7 @@ impl PubsubClient for RpcClient { T: Into, { match self { - Self::Http(_) => Err(ProviderError::CustomError( + Self::Http { .. } => Err(ProviderError::CustomError( "subscriptions not supported with HTTP client".into(), )), Self::Ws { conn, .. } => Ok(conn @@ -210,7 +234,7 @@ impl PubsubClient for RpcClient { T: Into, { match self { - Self::Http(_) => Err(ProviderError::CustomError( + Self::Http { .. } => Err(ProviderError::CustomError( "subscriptions not supported with HTTP client".into(), )), Self::Ws { conn, .. } => Ok(conn @@ -250,6 +274,12 @@ impl Default for L1ClientOptions { } impl L1ClientOptions { + /// Use the given metrics collector to publish metrics related to the L1 client. + pub fn with_metrics(mut self, metrics: &(impl Metrics + ?Sized)) -> Self { + self.metrics = Arc::new(metrics.subgroup("l1".into())); + self + } + /// Instantiate an `L1Client` for a given `Url`. /// /// The type of the JSON-RPC client is inferred from the scheme of the URL. Supported schemes @@ -266,19 +296,36 @@ impl L1ClientOptions { /// /// `url` must have a scheme `http` or `https`. pub fn http(self, url: Url) -> L1Client { - L1Client::with_provider(self, Provider::new(RpcClient::http(url))) + let metrics = self.create_metrics(); + L1Client::with_provider(self, Provider::new(RpcClient::http(url, metrics))) } /// Construct a new WebSockets client. /// /// `url` must have a scheme `ws` or `wss`. pub async fn ws(self, url: Url) -> anyhow::Result { + let metrics = self.create_metrics(); let retry_delay = self.l1_retry_delay; Ok(L1Client::with_provider( self, - Provider::new(RpcClient::ws(url, retry_delay).await?), + Provider::new(RpcClient::ws(url, metrics, retry_delay).await?), )) } + + fn create_metrics(&self) -> Arc { + Arc::new(L1ClientMetrics::new(&**self.metrics)) + } +} + +impl L1ClientMetrics { + fn new(metrics: &(impl Metrics + ?Sized)) -> Self { + Self { + head: metrics.create_gauge("head".into(), None), + finalized: metrics.create_gauge("finalized".into(), None), + ws_reconnects: metrics.create_counter("ws_reconnects".into(), None), + stream_reconnects: metrics.create_counter("stream_reconnects".into(), None), + } + } } impl L1Client { @@ -346,6 +393,7 @@ impl L1Client { let retry_delay = self.retry_delay; let state = self.state.clone(); let sender = self.sender.clone(); + let metrics = (*rpc).as_ref().metrics().clone(); let span = tracing::warn_span!("L1 client update"); async move { @@ -354,7 +402,7 @@ impl L1Client { let mut block_stream = loop { let res = match (*rpc).as_ref() { RpcClient::Ws { .. } => rpc.subscribe_blocks().await.map(StreamExt::boxed), - RpcClient::Http(_) => rpc + RpcClient::Http { .. } => rpc .watch_blocks() .await .map(|stream| { @@ -427,6 +475,7 @@ impl L1Client { let mut state = state.lock().await; if head > state.snapshot.head { tracing::debug!(head, old_head = state.snapshot.head, "L1 head updated"); + metrics.head.set(head as usize); state.snapshot.head = head; // Emit an event about the new L1 head. Ignore send errors; it just means no // one is listening to events right now. @@ -441,6 +490,9 @@ impl L1Client { old_finalized = ?state.snapshot.finalized, "L1 finalized updated", ); + if let Some(finalized) = finalized { + metrics.finalized.set(finalized.number as usize); + } state.snapshot.finalized = finalized; if let Some(finalized) = finalized { sender @@ -463,6 +515,8 @@ impl L1Client { } } } + + metrics.stream_reconnects.add(1); } }.instrument(span) } @@ -787,6 +841,7 @@ mod test { prelude::{LocalWallet, Signer, SignerMiddleware, H160, U64}, utils::{hex, parse_ether, Anvil, AnvilInstance}, }; + use hotshot_types::traits::metrics::NoMetrics; use portpicker::pick_unused_port; use sequencer_utils::test_utils::setup_test; use std::time::Duration; @@ -1088,9 +1143,13 @@ mod test { let port = pick_unused_port().unwrap(); let mut anvil = Anvil::new().block_time(1u32).port(port).spawn(); let provider = Provider::new( - RpcClient::ws(anvil.ws_endpoint().parse().unwrap(), Duration::from_secs(1)) - .await - .unwrap(), + RpcClient::ws( + anvil.ws_endpoint().parse().unwrap(), + Arc::new(L1ClientMetrics::new(&NoMetrics)), + Duration::from_secs(1), + ) + .await + .unwrap(), ); // Check the provider is working. diff --git a/types/src/v0/mod.rs b/types/src/v0/mod.rs index 59a44cf65..c5d67031f 100644 --- a/types/src/v0/mod.rs +++ b/types/src/v0/mod.rs @@ -123,7 +123,9 @@ reexport_unchanged_types!( ViewBasedUpgrade, BlockSize, ); -pub(crate) use v0_3::{L1Event, L1ReconnectTask, L1State, L1UpdateTask, RpcClient}; +pub(crate) use v0_3::{ + L1ClientMetrics, L1Event, L1ReconnectTask, L1State, L1UpdateTask, RpcClient, +}; #[derive( Clone, Copy, Debug, Default, Hash, Eq, PartialEq, PartialOrd, Ord, Deserialize, Serialize, diff --git a/types/src/v0/v0_1/l1.rs b/types/src/v0/v0_1/l1.rs index 5259aaa9a..6aa3f3e9d 100644 --- a/types/src/v0/v0_1/l1.rs +++ b/types/src/v0/v0_1/l1.rs @@ -5,6 +5,7 @@ use ethers::{ prelude::{H256, U256}, providers::{Http, Provider, Ws}, }; +use hotshot_types::traits::metrics::{Counter, Gauge, Metrics, NoMetrics}; use lru::LruCache; use serde::{Deserialize, Serialize}; use std::{num::NonZeroUsize, sync::Arc, time::Duration}; @@ -86,6 +87,9 @@ pub struct L1ClientOptions { default_value = "10000" )] pub l1_events_max_block_range: u64, + + #[clap(skip = Arc::>::new(Box::new(NoMetrics)))] + pub metrics: Arc>, } #[derive(Clone, Debug)] @@ -115,12 +119,16 @@ pub struct L1Client { /// An Ethereum RPC client over HTTP or WebSockets. #[derive(Clone, Debug)] pub(crate) enum RpcClient { - Http(Http), + Http { + conn: Http, + metrics: Arc, + }, Ws { conn: Arc>, reconnect: Arc>, url: Url, retry_delay: Duration, + metrics: Arc, }, } @@ -147,3 +155,11 @@ pub(crate) enum L1ReconnectTask { Idle, Cancelled, } + +#[derive(Debug)] +pub(crate) struct L1ClientMetrics { + pub(crate) head: Box, + pub(crate) finalized: Box, + pub(crate) ws_reconnects: Box, + pub(crate) stream_reconnects: Box, +} diff --git a/types/src/v0/v0_3/mod.rs b/types/src/v0/v0_3/mod.rs index 86a0150a3..838696a6c 100644 --- a/types/src/v0/v0_3/mod.rs +++ b/types/src/v0/v0_3/mod.rs @@ -12,7 +12,9 @@ pub use super::v0_1::{ UpgradeType, ViewBasedUpgrade, BLOCK_MERKLE_TREE_HEIGHT, FEE_MERKLE_TREE_HEIGHT, NS_ID_BYTE_LEN, NS_OFFSET_BYTE_LEN, NUM_NSS_BYTE_LEN, NUM_TXS_BYTE_LEN, TX_OFFSET_BYTE_LEN, }; -pub(crate) use super::v0_1::{L1Event, L1ReconnectTask, L1State, L1UpdateTask, RpcClient}; +pub(crate) use super::v0_1::{ + L1ClientMetrics, L1Event, L1ReconnectTask, L1State, L1UpdateTask, RpcClient, +}; pub const VERSION: Version = Version { major: 0, minor: 3 }; From d6a7a181137681702f76bb04dde97b8c2a004425 Mon Sep 17 00:00:00 2001 From: Abdul Basit <45506001+imabdulbasit@users.noreply.github.com> Date: Thu, 5 Dec 2024 00:04:21 +0500 Subject: [PATCH 13/15] Ab/sqlite (#2284) * update query-service to ab/sqlite-support * .. * use embedded-db for devnode * uncomment marketplace builder tests * point query-service to ab/sqlite-support * migrations to update state tables columns * update comments for sql options * update justfile * enable embedded-db for devnode * fix record action query for postgres * fix record action query for postgres * try with only testing feature * rm settings.json * lint * add process-compose for sqlite, fix migration, update query-service * update query-service * pass persistence to init_node(), fix migrations, rm create_catchup_provider() * fix migration version * fix migration version * fix migration * fix migration * sequencer-sqlite * update sequencer-sqlite lockfile * fix archive name * fix archive name * update name * fix test_integration ci * fix sequencer-sqlite dockerfile * try with disabling aggregator * fix sqlite migration for merkle root columns && enable restart_tests * enable aggregator * set ESPRESSO_STATE_SIGNATURE_TOTAL_STAKE to 7 * fix merkel_root_columns && use same persistence in test_restart * set connection parameters, revert tx delay to 2s, update query-service * comment out max connections setting * set max_connections for tmp db options * add sqlite nodes in docker-compose * enable embedded-db feature for devnode * merge origin/main * nix: fix process-compose demo - Add `test` profile to sequencer-sqlite crate to avoid compiling everything twice. - Rewrite just build / native demo commands to to work with the nix dev env. * ci: compile diff-test with test profile We previously changed the flake.nix to add `./target/nix/debug` to the PATH instead of `release`. * remove docker pull from integration test * comment out cleaning up tempdir in demo-native * update hotshot-query-service * ci: don't clean up process compose storage dir * ci: upload demo native process compose logs * ci: dump logs to terminal instead - reduce timeout: the whole job takes 5 minutes on main now. - remove `process compose down`: I don't think the CI minds if we don't run it and it will save some time. * ci: dump logs of process compose services * script for running sequencer binaries based on flag * increase blocks timeout to 180s, update query-service * adjust sequencer_blocks_timeout * try with timeout=25 * revert timeout * try2 * update query-service * max connections as env * wait 5s * update query-service to 0.1.74 * logging * cargo sort * more logging * catchup from sequencer0 * catchup from seq0 * catchup from seq5 * exit if any one of the node has seen the upgrade * catchup from seq0 * remove test from archive in integration test * Upload logs as archive For me the logs are always truncated if I download them from the browser. * integration test: more debug output * use archive * set max connections to 3 for sqlite * try with 5nodes * sequencer_clients * slow statement threshold * fix state peer * use embedded-db instead of all features * lint * make seq0 state peer for seq3 * add api peers for seq3 and seq4 * try with only 1 sqlite node * remove seq3 and 4 from clients * update docker-compose * catchup from seq4, set slow_statement_threshold to 1s * pass storage-sql in the sequencer-entrypoint for sqlite * use sqlite sub dir * create sqlite sub-dir if it does not exist * create_dir_all * set default slow threshold * fix dev node test * fix dockerfile --------- Co-authored-by: sveitser --- .env | 3 + .github/workflows/benchmark-build.yaml | 4 +- .github/workflows/build.yml | 11 +- .github/workflows/build_static.yml | 6 +- .github/workflows/cargo-features.yml | 2 +- .github/workflows/lint.yml | 7 +- .github/workflows/slowtest.yaml | 44 +- .github/workflows/test.yml | 115 +- Cargo.lock | 39 +- Cargo.toml | 6 +- client/src/lib.rs | 6 +- common/mod.rs | 0 data/genesis/demo-marketplace.toml | 4 +- docker-compose.yaml | 10 +- docker/sequencer.Dockerfile | 13 +- justfile | 36 +- marketplace-builder/Cargo.toml | 1 + marketplace-builder/src/builder.rs | 2 +- marketplace-solver/Cargo.toml | 1 + marketplace-solver/src/database.rs | 8 +- marketplace-solver/src/state.rs | 4 +- marketplace-solver/src/testing.rs | 8 +- process-compose.yaml | 6 +- scripts/build-docker-images-native | 8 +- scripts/build-docker-images-static | 6 +- scripts/demo-native | 14 +- scripts/sequencer-entrypoint | 16 + sequencer-sqlite/Cargo.lock | 11272 ++++++++++++++++ sequencer-sqlite/Cargo.toml | 33 + sequencer-sqlite/src/main.rs | 4 + sequencer/Cargo.toml | 15 +- .../{ => postgres}/V12__network_config.sql | 0 .../{ => postgres}/V13__consensus_state.sql | 0 .../{ => postgres}/V14__state_tables.sql | 2 +- .../{ => postgres}/V15__undecided_state.sql | 0 .../V16__merkle_root_columns.sql | 0 .../V301__merkle_root_column_indexes.sql | 0 .../V302__update_state_tables_types.sql | 13 + ...31__drop_merklized_state_created_index.sql | 0 .../{ => postgres}/V32__saved_proposals.sql | 0 .../V33__chain_config_table.sql | 0 .../{ => postgres}/V34__builder_urls.sql | 0 .../V35__add_upgrade_params.sql | 0 ...__alter_merkle_root_column_expressions.sql | 0 .../V38__add_quorum_proposal_hash.sql | 0 .../V39__upgrade_certificate.sql | 0 .../{ => postgres}/V40__anchor_leaf_chain.sql | 0 .../{ => postgres}/V41__epoch_height.sql | 0 .../V42__index_quorum_proposal_leaf_hash.sql | 0 .../sqlite/V102__network_config.sql | 4 + .../sqlite/V103__consensus_state.sql | 22 + .../migrations/sqlite/V104__state_tables.sql | 25 + .../sqlite/V105__undecided_state.sql | 7 + .../sqlite/V106__merkle_root_columns.sql | 12 + .../sqlite/V107__saved_proposals.sql | 7 + .../sqlite/V108__chain_config_table.sql | 4 + .../sqlite/V109__upgrade_certificate.sql | 4 + .../migrations/sqlite/V110__event_stream.sql | 4 + sequencer/src/api.rs | 24 +- sequencer/src/api/sql.rs | 24 +- sequencer/src/bin/espresso-dev-node.rs | 38 +- sequencer/src/block/full_payload/payload.rs | 3 +- sequencer/src/block/namespace_payload/iter.rs | 2 +- sequencer/src/catchup.rs | 11 +- sequencer/src/lib.rs | 49 +- sequencer/src/main.rs | 379 +- sequencer/src/persistence/fs.rs | 9 +- sequencer/src/persistence/no_storage.rs | 2 +- sequencer/src/persistence/sql.rs | 348 +- sequencer/src/restart_tests.rs | 23 +- sequencer/src/run.rs | 378 + sequencer/src/state.rs | 1 + tests/common/mod.rs | 3 +- tests/upgrades.rs | 34 +- types/src/v0/impls/instance_state.rs | 13 +- types/src/v0/traits.rs | 11 +- 76 files changed, 12482 insertions(+), 678 deletions(-) delete mode 100644 common/mod.rs create mode 100755 scripts/sequencer-entrypoint create mode 100644 sequencer-sqlite/Cargo.lock create mode 100644 sequencer-sqlite/Cargo.toml create mode 100644 sequencer-sqlite/src/main.rs rename sequencer/api/migrations/{ => postgres}/V12__network_config.sql (100%) rename sequencer/api/migrations/{ => postgres}/V13__consensus_state.sql (100%) rename sequencer/api/migrations/{ => postgres}/V14__state_tables.sql (99%) rename sequencer/api/migrations/{ => postgres}/V15__undecided_state.sql (100%) rename sequencer/api/migrations/{ => postgres}/V16__merkle_root_columns.sql (100%) rename sequencer/api/migrations/{ => postgres}/V301__merkle_root_column_indexes.sql (100%) create mode 100644 sequencer/api/migrations/postgres/V302__update_state_tables_types.sql rename sequencer/api/migrations/{ => postgres}/V31__drop_merklized_state_created_index.sql (100%) rename sequencer/api/migrations/{ => postgres}/V32__saved_proposals.sql (100%) rename sequencer/api/migrations/{ => postgres}/V33__chain_config_table.sql (100%) rename sequencer/api/migrations/{ => postgres}/V34__builder_urls.sql (100%) rename sequencer/api/migrations/{ => postgres}/V35__add_upgrade_params.sql (100%) rename sequencer/api/migrations/{ => postgres}/V36__alter_merkle_root_column_expressions.sql (100%) rename sequencer/api/migrations/{ => postgres}/V38__add_quorum_proposal_hash.sql (100%) rename sequencer/api/migrations/{ => postgres}/V39__upgrade_certificate.sql (100%) rename sequencer/api/migrations/{ => postgres}/V40__anchor_leaf_chain.sql (100%) rename sequencer/api/migrations/{ => postgres}/V41__epoch_height.sql (100%) rename sequencer/api/migrations/{ => postgres}/V42__index_quorum_proposal_leaf_hash.sql (100%) create mode 100644 sequencer/api/migrations/sqlite/V102__network_config.sql create mode 100644 sequencer/api/migrations/sqlite/V103__consensus_state.sql create mode 100644 sequencer/api/migrations/sqlite/V104__state_tables.sql create mode 100644 sequencer/api/migrations/sqlite/V105__undecided_state.sql create mode 100644 sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql create mode 100644 sequencer/api/migrations/sqlite/V107__saved_proposals.sql create mode 100644 sequencer/api/migrations/sqlite/V108__chain_config_table.sql create mode 100644 sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql create mode 100644 sequencer/api/migrations/sqlite/V110__event_stream.sql create mode 100644 sequencer/src/run.rs diff --git a/.env b/.env index 66bb2e900..128a6994d 100644 --- a/.env +++ b/.env @@ -148,3 +148,6 @@ INTEGRATION_TEST_PROTO=http # Version of sequencer protocol we want to test. If this is set to # `03`, marketplace upgrade will be tested. INTEGRATION_TEST_SEQUENCER_VERSION=02 + +# max database connections +ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS=25 \ No newline at end of file diff --git a/.github/workflows/benchmark-build.yaml b/.github/workflows/benchmark-build.yaml index 5b949e22b..d6113acbc 100644 --- a/.github/workflows/benchmark-build.yaml +++ b/.github/workflows/benchmark-build.yaml @@ -38,7 +38,7 @@ jobs: - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features benchmarking,testing --bin espresso-dev-node + cargo build --locked --release --features benchmarking,testing,embedded-db --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -80,7 +80,7 @@ jobs: - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features benchmarking,testing --bin espresso-dev-node + cargo build --locked --release --features benchmarking,testing,embedded-db --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b699000a..3af5eb5b7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,11 +46,14 @@ jobs: # Build in release without `testing` feature, this should work without `hotshot_example` config. run: | cargo build --locked --release --workspace + + - name: Build sequencer-sqlite + run: cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features testing --bin espresso-dev-node + cargo build --locked --release --features "testing embedded-db" --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -79,6 +82,7 @@ jobs: target/release/marketplace-builder target/release/node-metrics target/release/dev-rollup + target/release/sequencer-sqlite build-arm: if: github.event_name != 'pull_request' @@ -100,6 +104,9 @@ jobs: run: | cargo build --locked --release --workspace + - name: Build sequencer-sqlite + run: cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target + - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | @@ -132,6 +139,7 @@ jobs: target/release/marketplace-builder target/release/node-metrics target/release/dev-rollup + target/release/sequencer-sqlite build-dockers: runs-on: ubuntu-latest @@ -286,7 +294,6 @@ jobs: with: images: ghcr.io/espressosystems/espresso-sequencer/dev-rollup - - name: Build and push sequencer docker uses: docker/build-push-action@v6 with: diff --git a/.github/workflows/build_static.yml b/.github/workflows/build_static.yml index dc78e9b68..d5fbeee4d 100644 --- a/.github/workflows/build_static.yml +++ b/.github/workflows/build_static.yml @@ -68,7 +68,8 @@ jobs: - name: Compile all executables # timeout-minutes: 120 run: | - nix develop $DEVSHELL --accept-flake-config --option sandbox relaxed -c cargo build --locked --release + nix develop $DEVSHELL --accept-flake-config --option sandbox relaxed -c cargo build --locked --release + -c cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir 'echo $CARGO_TARGET_DIR' - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -95,6 +96,7 @@ jobs: ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/marketplace-builder ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/node-metrics ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/dev-rollup + ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/sequencer-sqlite static-dockers: runs-on: ubuntu-latest needs: static-build @@ -377,4 +379,4 @@ jobs: platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.dev-rollup.outputs.tags }} - labels: ${{ steps.dev-rollup.outputs.labels }} + labels: ${{ steps.dev-rollup.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/cargo-features.yml b/.github/workflows/cargo-features.yml index 262f678fc..a09650744 100644 --- a/.github/workflows/cargo-features.yml +++ b/.github/workflows/cargo-features.yml @@ -13,7 +13,7 @@ on: pull_request: workflow_dispatch: -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f9daac209..31067da01 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -32,5 +32,8 @@ jobs: - name: Format Check run: cargo fmt -- --check - - name: Check - run: cargo clippy --workspace --all-features --all-targets -- -D warnings + - name: Check (embedded-db) + run: cargo clippy --workspace --features "embedded-db testing" --all-targets -- -D warnings + + - name: Check (postgres) + run: cargo clippy --workspace --features testing --all-targets -- -D warnings diff --git a/.github/workflows/slowtest.yaml b/.github/workflows/slowtest.yaml index 4eeb90f14..d53550d56 100644 --- a/.github/workflows/slowtest.yaml +++ b/.github/workflows/slowtest.yaml @@ -23,7 +23,7 @@ env: RUST_LOG: info,libp2p=off,node=error jobs: - slow-tests: + slow-tests-sqlite: runs-on: ubuntu-latest steps: # These tests need the `anvil` binary provided by foundry @@ -46,11 +46,49 @@ jobs: - name: Build run: | cargo build --locked --bin diff-test --release - cargo nextest run --locked --release --workspace --all-features --no-run + cargo nextest run --locked --release --workspace --features embedded-db --no-run timeout-minutes: 90 - name: Slow Test env: NEXTEST_PROFILE: slow - run: cargo nextest run --locked --release --workspace --all-features --verbose --no-fail-fast --nocapture + run: cargo nextest run --locked --release --workspace --features embedded-db --verbose --no-fail-fast --nocapture timeout-minutes: 40 + slow-tests-postgres: + runs-on: ubuntu-latest + steps: + - name: Fix submodule permissions check + run: | + git config --global --add safe.directory '*' + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - uses: taiki-e/install-action@nextest + + - name: Checkout Repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Configure Environment + run: PATH="$PWD/target/release:$PATH" + + - name: Enable Rust Caching + uses: Swatinem/rust-cache@v2 + with: + cache-all-crates: true + + - name: Build + run: | + cargo build --locked --bin diff-test --release + cargo nextest run --locked --release --workspace --no-run + timeout-minutes: 90 + + - name: Slow Test + env: + NEXTEST_PROFILE: slow + run: cargo nextest run --locked --release --workspace --verbose --no-fail-fast --nocapture + timeout-minutes: 40 \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb91b5978..85e4f0ecf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,10 +20,12 @@ concurrency: env: RUST_LOG: info,libp2p=off,node=error CARGO_TERM_COLOR: always + # Save the process compose logs + PC_LOGS: /tmp/pc.log jobs: - build-test-artifacts: - name: Build test artifacts + build-test-artifacts-postgres: + name: Build test artifacts (postgres) runs-on: buildjet-8vcpu-ubuntu-2204 steps: - uses: rui314/setup-mold@v1 @@ -40,13 +42,40 @@ jobs: cache-provider: buildjet - name: Build and archive tests - run: cargo nextest archive --locked --workspace --all-features --archive-file nextest-archive.tar.zst + run: cargo nextest archive --locked --workspace --archive-file nextest-archive-postgres.tar.zst - name: Upload archive to workflow uses: actions/upload-artifact@v4 with: - name: nextest-archive - path: nextest-archive.tar.zst + name: nextest-archive-postgres + path: nextest-archive-postgres.tar.zst + + build-test-artifacts-sqlite: + name: Build test artifacts (sqlite) + runs-on: buildjet-8vcpu-ubuntu-2204 + steps: + - uses: rui314/setup-mold@v1 + + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install nextest + uses: taiki-e/install-action@nextest + + - name: Enable Rust Caching + uses: Swatinem/rust-cache@v2 + with: + cache-all-crates: true + cache-provider: buildjet + + - name: Build and archive tests + run: cargo nextest archive --locked --features "embedded-db testing" --workspace --archive-file nextest-archive-sqlite.tar.zst + + - name: Upload archive to workflow + uses: actions/upload-artifact@v4 + with: + name: nextest-archive-sqlite + path: nextest-archive-sqlite.tar.zst build-test-bins: name: Build test binaries @@ -63,7 +92,9 @@ jobs: cache-provider: buildjet - name: Build Bins - run: cargo build --locked --profile test --bins + run: | + cargo build --locked --profile test --bins + cargo build --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target timeout-minutes: 30 - name: Upload archive to workflow @@ -93,9 +124,10 @@ jobs: target/debug/marketplace-builder target/debug/node-metrics target/debug/dev-rollup + target/debug/sequencer-sqlite - test: - needs: build-test-artifacts + test-postgres: + needs: build-test-artifacts-postgres runs-on: ubuntu-latest steps: - name: Install Foundry @@ -108,25 +140,55 @@ jobs: - name: Download archive uses: actions/download-artifact@v4 with: - name: nextest-archive + name: nextest-archive-postgres - name: Test run: | - cargo nextest run --archive-file nextest-archive.tar.zst --verbose --no-fail-fast \ + cargo nextest run --archive-file nextest-archive-postgres.tar.zst --verbose --no-fail-fast \ + --workspace-remap $PWD + timeout-minutes: 20 + + test-sqlite: + needs: build-test-artifacts-sqlite + runs-on: ubuntu-latest + steps: + - name: Fix submodule permissions check + run: | + git config --global --add safe.directory '*' + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install nextest + uses: taiki-e/install-action@nextest + - name: Download archive + uses: actions/download-artifact@v4 + with: + name: nextest-archive-sqlite + + - name: Test + run: | + cargo nextest run --archive-file nextest-archive-sqlite.tar.zst --verbose --no-fail-fast \ --workspace-remap $PWD timeout-minutes: 20 test-integration: - needs: [build-test-artifacts, build-test-bins] + needs: [build-test-bins, build-test-artifacts-postgres] strategy: matrix: - version: [02,03] + version: [02, 03] include: - version: 02 - compose: "-f process-compose.yaml -D" - + compose: "-f process-compose.yaml" + - version: 03 - compose: "-f process-compose.yaml -f process-compose-mp.yml -D" + compose: "-f process-compose.yaml -f process-compose-mp.yml" runs-on: ubuntu-latest steps: - name: Install Nix @@ -144,7 +206,7 @@ jobs: - name: Move files run: | - mv nextest-archive/* . + mv nextest-archive-postgres/* . mkdir -p target/debug mv test-binaries/* target/debug chmod -c +x target/debug/* @@ -152,23 +214,25 @@ jobs: - name: Install process-compose run: nix profile install nixpkgs#process-compose - - name: Pull Docker Images - run: docker compose pull || docker-compose pull - - name: Run Demo-Native ${{matrix.version}} - run: bash -x scripts/demo-native ${{matrix.compose}} + run: bash -x scripts/demo-native ${{matrix.compose}} --tui=false > ${{ env.PC_LOGS }} 2>&1 & - name: Test Integration env: + RUST_LOG: debug NEXTEST_PROFILE: integration INTEGRATION_TEST_SEQUENCER_VERSION: ${{ matrix.version }} run: | - cargo nextest run --archive-file nextest-archive.tar.zst --verbose --no-fail-fast \ + cargo nextest run --archive-file nextest-archive-postgres.tar.zst --verbose --no-fail-fast --nocapture \ --workspace-remap $PWD $(if [ "${{ matrix.version }}" == "2" ]; then echo " smoke"; fi) - timeout-minutes: 40 + timeout-minutes: 10 - - name: Process Compose Down - run: process-compose down + - name: Upload process compose logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: process-compose-logs-integration-v${{ matrix.version }} + path: ${{ env.PC_LOGS }} demo-native: needs: build-test-bins @@ -197,6 +261,3 @@ jobs: set -o pipefail scripts/demo-native --tui=false & timeout -v 600 scripts/smoke-test-demo | sed -e 's/^/smoke-test: /;' - - - name: Process Compose Down - run: process-compose down diff --git a/Cargo.lock b/Cargo.lock index a83ba7e05..a538a0269 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,13 +14,19 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "adler2" version = "2.0.0" @@ -1048,17 +1054,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", - "windows-targets 0.52.6", ] [[package]] @@ -3317,7 +3323,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -3653,9 +3659,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -4242,7 +4248,7 @@ dependencies = [ [[package]] name = "hotshot-query-service" version = "0.1.62" -source = "git+https://github.com/EspressoSystems/hotshot-query-service?tag=0.1.72#7074bee49d7377abaa9e23d46b1622472c84247d" +source = "git+https://github.com/EspressoSystems/hotshot-query-service?tag=0.1.74#d17f0d667b590b5131d30b47ce1842eb59035127" dependencies = [ "anyhow", "ark-serialize", @@ -6462,6 +6468,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + [[package]] name = "miniz_oxide" version = "0.8.0" @@ -6859,9 +6874,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index db2fd96b8..34f8f6e82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,10 @@ members = [ "utils", ] +exclude = [ + "sequencer-sqlite" +] + [workspace.dependencies] anyhow = "^1.0" ark-std = "0.4" @@ -68,7 +72,7 @@ marketplace-builder-core = { git = "https://github.com/EspressoSystems/marketpla marketplace-builder-shared = { git = "https://github.com/EspressoSystems/marketplace-builder-core", tag = "0.1.56" } hotshot-events-service = { git = "https://github.com/EspressoSystems/hotshot-events-service.git", tag = "0.1.54" } hotshot-orchestrator = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.81" } -hotshot-query-service = { git = "https://github.com/EspressoSystems/hotshot-query-service", tag = "0.1.72" } +hotshot-query-service = { git = "https://github.com/EspressoSystems/hotshot-query-service", tag = "0.1.74" } hotshot-stake-table = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.81" } hotshot-state-prover = { version = "0.1.0", path = "hotshot-state-prover" } hotshot-task = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.81" } diff --git a/client/src/lib.rs b/client/src/lib.rs index 80b112ff5..a9d5cc995 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -1,6 +1,7 @@ use anyhow::Context; use espresso_types::{FeeAccount, FeeAmount, FeeMerkleTree, Header}; use ethers::types::Address; +use futures::{stream::BoxStream, StreamExt}; use jf_merkle_tree::{ prelude::{MerkleProof, Sha3Node}, MerkleTreeScheme, @@ -48,12 +49,13 @@ impl SequencerClient { pub async fn subscribe_headers( &self, height: u64, - ) -> anyhow::Result> { + ) -> anyhow::Result>> { self.0 .socket(&format!("availability/stream/headers/{height}")) - .subscribe() + .subscribe::
() .await .context("subscribing to Espresso headers") + .map(|s| s.boxed()) } /// Subscribe to a stream of Block Headers diff --git a/common/mod.rs b/common/mod.rs deleted file mode 100644 index e69de29bb..000000000 diff --git a/data/genesis/demo-marketplace.toml b/data/genesis/demo-marketplace.toml index da76f8636..aa7737b7c 100644 --- a/data/genesis/demo-marketplace.toml +++ b/data/genesis/demo-marketplace.toml @@ -19,8 +19,8 @@ number = 0 [[upgrade]] version = "0.3" -start_proposing_view = 5 -stop_proposing_view = 15 +start_proposing_view = 10 +stop_proposing_view = 60 [upgrade.marketplace] [upgrade.marketplace.chain_config] diff --git a/docker-compose.yaml b/docker-compose.yaml index c12d4c5c3..a036ee88d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -222,6 +222,7 @@ services: # Run the full API server with all modules, Postgres storage command: sequencer -- storage-sql -- http -- query -- catchup -- status -- submit -- hotshot-events -- config environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT @@ -278,6 +279,7 @@ services: - "$ESPRESSO_SEQUENCER1_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" command: sequencer -- storage-sql -- http -- query -- catchup -- status -- state -- explorer environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT @@ -334,12 +336,13 @@ services: - "$ESPRESSO_SEQUENCER2_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" command: sequencer -- http -- catchup -- status environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer1:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer4:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer3:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_L1_PROVIDER - ESPRESSO_SEQUENCER_L1_EVENTS_MAX_BLOCK_RANGE @@ -384,6 +387,7 @@ services: - "$ESPRESSO_SEQUENCER3_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" command: sequencer -- http -- catchup -- status environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT @@ -431,14 +435,16 @@ services: image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main ports: - "$ESPRESSO_SEQUENCER4_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" - command: sequencer -- http -- catchup -- status + command: sequencer -- http -- query -- catchup -- status environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=true - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_L1_PROVIDER - ESPRESSO_SEQUENCER_L1_EVENTS_MAX_BLOCK_RANGE - ESPRESSO_STATE_RELAY_SERVER_URL diff --git a/docker/sequencer.Dockerfile b/docker/sequencer.Dockerfile index 29de81c03..8a802d1f7 100644 --- a/docker/sequencer.Dockerfile +++ b/docker/sequencer.Dockerfile @@ -5,14 +5,15 @@ ARG TARGETARCH RUN apt-get update \ && apt-get install -y curl libcurl4 wait-for-it tini \ && rm -rf /var/lib/apt/lists/* -ENTRYPOINT ["tini", "--"] - # Download an SRS file to avoid download at runtime ENV AZTEC_SRS_PATH=/kzg10-aztec20-srs-1048584.bin RUN curl -LO https://github.com/EspressoSystems/ark-srs/releases/download/v0.2.0/$AZTEC_SRS_PATH -COPY target/$TARGETARCH/release/sequencer /bin/sequencer -RUN chmod +x /bin/sequencer +COPY target/$TARGETARCH/release/sequencer /bin/sequencer-postgres +RUN chmod +x /bin/sequencer-postgres + +COPY target/$TARGETARCH/release/sequencer-sqlite /bin/sequencer-sqlite +RUN chmod +x /bin/sequencer-sqlite COPY target/$TARGETARCH/release/utils /bin/utils RUN chmod +x /bin/utils @@ -34,6 +35,10 @@ COPY data/genesis /genesis # Set `ESPRESSO_SEQUENCER_GENESIS_SECRET` COPY docker/scripts/sequencer-awssecretsmanager.sh /bin/sequencer-awssecretsmanager.sh +# Copy entrypoint script +COPY scripts/sequencer-entrypoint /bin/sequencer +RUN chmod +x /bin/sequencer + # Set a path to save the consensus config on startup. # # Upon restart, the config will be loaded from this file and the node will be able to resume diff --git a/justfile b/justfile index 2b0a6d9ce..5d7521a92 100644 --- a/justfile +++ b/justfile @@ -7,13 +7,19 @@ doc *args: demo *args: docker compose up {{args}} -demo-native *args: - cargo build --profile test +demo-native *args: build scripts/demo-native {{args}} -demo-native-mp: - cargo build --release - scripts/demo-native -f process-compose.yaml -f process-compose-mp.yml +build: + #!/usr/bin/env bash + set -euxo pipefail + # Use the same target dir for both `build` invocations + export CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-target} + cargo build --profile test + cargo build --profile test --manifest-path ./sequencer-sqlite/Cargo.toml + +demo-native-mp *args: build + scripts/demo-native -f process-compose.yaml -f process-compose-mp.yml {{args}} demo-native-benchmark: cargo build --release --features benchmarking @@ -38,22 +44,30 @@ anvil *args: docker run -p 127.0.0.1:8545:8545 ghcr.io/foundry-rs/foundry:latest "anvil {{args}}" test *args: - @echo 'Omitting slow tests. Use `test-slow` for those. Or `test-all` for all tests.' - cargo nextest run --locked --workspace --all-features --verbose {{args}} + @echo 'Omitting slow tests. Use `test-slow` for those. Or `test-all` for all tests.' + @echo 'features: "embedded-db"' + cargo nextest run --locked --workspace --features embedded-db --verbose {{args}} + cargo nextest run --locked --workspace --verbose {{args}} test-slow: - @echo 'Only slow tests are included. Use `test` for those deemed not slow. Or `test-all` for all tests.' - cargo nextest run --locked --release --workspace --all-features --verbose --profile slow + @echo 'Only slow tests are included. Use `test` for those deemed not slow. Or `test-all` for all tests.' + @echo 'features: "embedded-db"' + cargo nextest run --locked --release --workspace --features embedded-db --verbose --profile slow + cargo nextest run --locked --release --workspace --verbose --profile slow test-all: - cargo nextest run --locked --release --workspace --all-features --verbose --profile all + @echo 'features: "embedded-db"' + cargo nextest run --locked --release --workspace --features embedded-db --verbose --profile all + cargo nextest run --locked --release --workspace --verbose --profile all test-integration: @echo 'NOTE that demo-native must be running for this test to succeed.' cargo nextest run --all-features --nocapture --profile integration clippy: - cargo clippy --workspace --all-features --all-targets -- -D warnings + @echo 'features: "embedded-db"' + cargo clippy --workspace --features embedded-db --all-targets -- -D warnings + cargo clippy --workspace -- -D warnings check-features *args: cargo hack check --each-feature {{args}} diff --git a/marketplace-builder/Cargo.toml b/marketplace-builder/Cargo.toml index 90291b6e8..7ddf1183e 100644 --- a/marketplace-builder/Cargo.toml +++ b/marketplace-builder/Cargo.toml @@ -7,6 +7,7 @@ edition = { workspace = true } [features] testing = ["hotshot-query-service", "sequencer-utils", "tempfile"] +embedded-db = [] [dependencies] anyhow = { workspace = true } diff --git a/marketplace-builder/src/builder.rs b/marketplace-builder/src/builder.rs index f9b03fb31..4b8d024dc 100644 --- a/marketplace-builder/src/builder.rs +++ b/marketplace-builder/src/builder.rs @@ -265,7 +265,7 @@ impl BuilderConfig { } } -#[cfg(test)] +#[cfg(all(test, not(feature = "embedded-db")))] mod test { use std::{ str::FromStr, diff --git a/marketplace-solver/Cargo.toml b/marketplace-solver/Cargo.toml index b6fdbfbf9..06d8b5b1f 100644 --- a/marketplace-solver/Cargo.toml +++ b/marketplace-solver/Cargo.toml @@ -9,6 +9,7 @@ testing = [ "hotshot-query-service/testing", "portpicker", ] +embedded-db = [] [dependencies] anyhow = { workspace = true } diff --git a/marketplace-solver/src/database.rs b/marketplace-solver/src/database.rs index b603cb40f..c2d09f84a 100644 --- a/marketplace-solver/src/database.rs +++ b/marketplace-solver/src/database.rs @@ -106,7 +106,11 @@ impl From for SolverError { } } -#[cfg(all(any(test, feature = "testing"), not(target_os = "windows")))] +#[cfg(all( + any(test, feature = "testing"), + not(target_os = "windows"), + not(feature = "embedded-db") +))] pub mod mock { use hotshot_query_service::data_source::sql::testing::TmpDb; @@ -143,7 +147,7 @@ pub mod mock { } } -#[cfg(all(test, not(target_os = "windows")))] +#[cfg(all(test, not(target_os = "windows"), not(feature = "embedded-db")))] mod test { use crate::database::mock::setup_mock_database; use hotshot::helpers::initialize_logging; diff --git a/marketplace-solver/src/state.rs b/marketplace-solver/src/state.rs index dd0ea77af..038c53e0d 100644 --- a/marketplace-solver/src/state.rs +++ b/marketplace-solver/src/state.rs @@ -308,7 +308,7 @@ struct RollupRegistrationResult { data: Vec, } -#[cfg(any(test, feature = "testing"))] +#[cfg(all(any(test, feature = "testing"), not(feature = "embedded-db")))] impl GlobalState { pub async fn mock() -> Self { let db = hotshot_query_service::data_source::sql::testing::TmpDb::init().await; @@ -340,7 +340,7 @@ impl GlobalState { } } -#[cfg(any(test, feature = "testing"))] +#[cfg(all(any(test, feature = "testing"), not(feature = "embedded-db")))] impl SolverState { pub fn mock() -> Self { Self { diff --git a/marketplace-solver/src/testing.rs b/marketplace-solver/src/testing.rs index 5d5ad1246..c65ca78dc 100755 --- a/marketplace-solver/src/testing.rs +++ b/marketplace-solver/src/testing.rs @@ -1,4 +1,8 @@ -#![cfg(all(any(test, feature = "testing"), not(target_os = "windows")))] +#![cfg(all( + any(test, feature = "testing"), + not(target_os = "windows"), + not(feature = "embedded-db") +))] #![allow(dead_code)] use std::sync::Arc; @@ -116,7 +120,7 @@ impl MockSolver { } } -#[cfg(test)] +#[cfg(all(test, not(feature = "embedded-db")))] mod test { use committable::Committable; diff --git a/process-compose.yaml b/process-compose.yaml index 825c13aa5..ba66f7417 100644 --- a/process-compose.yaml +++ b/process-compose.yaml @@ -171,7 +171,7 @@ processes: - ESPRESSO_SEQUENCER_API_PORT=$ESPRESSO_SEQUENCER1_API_PORT - ESPRESSO_SEQUENCER_LIBP2P_BIND_ADDRESS=0.0.0.0:$ESPRESSO_DEMO_SEQUENCER_LIBP2P_PORT_1 - ESPRESSO_SEQUENCER_LIBP2P_ADVERTISE_ADDRESS=localhost:$ESPRESSO_DEMO_SEQUENCER_LIBP2P_PORT_1 - - ESPRESSO_SEQUENCER_API_PEERS=http://localhost:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://localhost:$ESPRESSO_SEQUENCER4_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://localhost:$ESPRESSO_SEQUENCER2_API_PORT - ESPRESSO_SEQUENCER_POSTGRES_HOST=localhost - ESPRESSO_SEQUENCER_POSTGRES_PORT=$ESPRESSO_SEQUENCER1_DB_PORT @@ -315,10 +315,11 @@ processes: restart: exit_on_failure sequencer4: - command: sequencer -- http -- catchup -- status + command: sequencer-sqlite -- storage-sql -- http -- query -- catchup -- status environment: - ESPRESSO_SEQUENCER_API_PORT=$ESPRESSO_SEQUENCER4_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://localhost:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://localhost:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STORAGE_PATH=$ESPRESSO_BASE_STORAGE_PATH/seq4 - ESPRESSO_SEQUENCER_PRIVATE_STAKING_KEY=$ESPRESSO_DEMO_SEQUENCER_STAKING_PRIVATE_KEY_4 - ESPRESSO_SEQUENCER_PRIVATE_STATE_KEY=$ESPRESSO_DEMO_SEQUENCER_STATE_PRIVATE_KEY_4 @@ -332,6 +333,7 @@ processes: - ESPRESSO_SEQUENCER_IDENTITY_LATITUDE=-25.2744 - ESPRESSO_SEQUENCER_IDENTITY_LONGITUDE=133.7751 - ESPRESSO_SEQUENCER_PUBLIC_API_URL=http://localhost:$ESPRESSO_SEQUENCER4_API_PORT/ + - ESPRESSO_SEQUENCER_IS_DA=true depends_on: orchestrator: condition: process_healthy diff --git a/scripts/build-docker-images-native b/scripts/build-docker-images-native index 345cc160b..31f0222f2 100755 --- a/scripts/build-docker-images-native +++ b/scripts/build-docker-images-native @@ -92,7 +92,7 @@ mkdir -p ${WORKDIR}/data cp -rv data/genesis ${WORKDIR}/data/ mkdir -p "${WORKDIR}/target/$ARCH/release" - for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils"; do + for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils" "sequencer-sqlite"; do cp -v "${CARGO_TARGET_DIR}/release/$binary" "${WORKDIR}/target/$ARCH/release" # Patch the interpreter for running without nix inside the ubuntu based docker image. if [ $KERNEL == "linux" ]; then @@ -103,9 +103,9 @@ done mkdir -p ${WORKDIR}/docker/scripts cp -v docker/scripts/sequencer-awssecretsmanager.sh ${WORKDIR}/docker/scripts -# Copy the dev-node launch script +# Copy the dev-node and sequencer-entrypoint script mkdir -p ${WORKDIR}/scripts -cp -v scripts/launch-dev-node-with-postgres ${WORKDIR}/scripts +cp -v scripts/{launch-dev-node-with-postgres,sequencer-entrypoint} ${WORKDIR}/scripts export DOCKER_BUILDKIT=1 docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/orchestrator:main -f docker/orchestrator.Dockerfile ${WORKDIR} @@ -124,4 +124,4 @@ docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/ docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/marketplace-solver:main -f docker/marketplace-solver.Dockerfile ${WORKDIR} docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/marketplace-builder:main -f docker/marketplace-builder.Dockerfile ${WORKDIR} docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/node-validator:main -f docker/node-validator.Dockerfile ${WORKDIR} -docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/dev-rollup:main -f docker/dev-rollup.Dockerfile ${WORKDIR} +docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/dev-rollup:main -f docker/dev-rollup.Dockerfile ${WORKDIR} \ No newline at end of file diff --git a/scripts/build-docker-images-static b/scripts/build-docker-images-static index a6e7f0ebf..af87a0a2b 100755 --- a/scripts/build-docker-images-static +++ b/scripts/build-docker-images-static @@ -41,7 +41,7 @@ for ARCH in "amd64" "arm64"; do ;; esac mkdir -p ${WORKDIR}/target/$ARCH/release - for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils"; do + for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils" "sequencer-sqlite"; do cp -v "${CARGO_TARGET_DIR}/${TARGET}/release/$binary" ${WORKDIR}/target/$ARCH/release done done @@ -49,9 +49,9 @@ done mkdir -p ${WORKDIR}/docker/scripts cp -v docker/scripts/sequencer-awssecretsmanager.sh ${WORKDIR}/docker/scripts -# Copy the dev-node launch script +# Copy the dev-node and sequencer script mkdir -p ${WORKDIR}/scripts -cp -v scripts/launch-dev-node-with-postgres ${WORKDIR}/scripts +cp -v scripts/{launch-dev-node-with-postgres,sequencer-entrypoint} ${WORKDIR}/scripts export DOCKER_BUILDKIT=1 docker build -t ghcr.io/espressosystems/espresso-sequencer/orchestrator:main -f docker/orchestrator.Dockerfile ${WORKDIR} diff --git a/scripts/demo-native b/scripts/demo-native index 987baa598..b4e07fc39 100755 --- a/scripts/demo-native +++ b/scripts/demo-native @@ -18,13 +18,19 @@ ESPRESSO_BASE_STORAGE_PATH=$(mktemp -d -t espresso-XXXXXXXX) export ESPRESSO_BASE_STORAGE_PATH echo "Using sequencer storage path: $ESPRESSO_BASE_STORAGE_PATH" -# If keeping the storage path, is desired for debugging, comment out the line -# below or set a custom storage path in process-compose.yaml. +# If keeping the storage path, to keep it around, run with env CI=true trap "exit" INT TERM trap cleanup EXIT cleanup(){ - echo "Cleaning up sequencer storage path: $ESPRESSO_BASE_STORAGE_PATH" - rm -rv "$ESPRESSO_BASE_STORAGE_PATH" + # Don't run cleanup if running in the CI. We may be running process-compose + # with --detach and the cleanup will remove the storage path while the + # services are still running. + if [ "$CI" = "true" ]; then + echo "Running in CI, not cleaning up $ESPRESSO_BASE_STORAGE_PATH" + else + echo "Cleaning up sequencer storage path: $ESPRESSO_BASE_STORAGE_PATH" + rm -rv "$ESPRESSO_BASE_STORAGE_PATH" + fi } process-compose "$@" diff --git a/scripts/sequencer-entrypoint b/scripts/sequencer-entrypoint new file mode 100755 index 000000000..d602689e8 --- /dev/null +++ b/scripts/sequencer-entrypoint @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -eEu -o pipefail + +export ESPRESSO_SEQUENCER_EMBEDDED_DB=${ESPRESSO_SEQUENCER_EMBEDDED_DB:-false} + +# Trap SIGTERM and SIGINT signals and send them to the process group +trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT + +# Decide which binary to run based on the environment variable +if [ "$ESPRESSO_SEQUENCER_EMBEDDED_DB" = "true" ]; then + echo "Starting sequencer with sqlite..." + /bin/sequencer-sqlite -- storage-sql "$@" +else + echo "Starting sequencer with postgres..." + /bin/sequencer-postgres "$@" +fi diff --git a/sequencer-sqlite/Cargo.lock b/sequencer-sqlite/Cargo.lock new file mode 100644 index 000000000..17a3ef03f --- /dev/null +++ b/sequencer-sqlite/Cargo.lock @@ -0,0 +1,11272 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +dependencies = [ + "aead", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest 0.10.7", + "sha2 0.10.8", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71892f265d01650e34988a546b37ea1d2ba1da162a639597a03d1550f26004d8" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "rayon", +] + +[[package]] +name = "ark-poly-commit" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a741492629ffcd228337676dc223a28551aa6792eedb8a2a22c767f00df6c89" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "rayon", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-srs" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6e9a7036d369a637b2b9f871bc06cefe52a947c98e898dbafab26548f8aa22" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-poly-commit", + "ark-serialize", + "ark-std", + "directories", + "hex-literal", + "rand 0.8.5", + "sha2 0.10.8", + "tracing", + "tracing-subscriber 0.3.18", + "ureq", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "asn1_der" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-broadcast" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-dup" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2886ab563af5038f79ec016dd7b87947ed138b794e8dd64992962c9cca0411" +dependencies = [ + "async-lock 3.4.0", + "futures-io", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.2.0", + "futures-lite 2.5.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.5.0", + "once_cell", + "tokio", +] + +[[package]] +name = "async-h1" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1d1dae8cb2c4258a79d6ed088b7fb9b4763bf4e9b22d040779761e046a2971" +dependencies = [ + "async-channel 1.9.0", + "async-dup", + "async-global-executor", + "async-io 1.13.0", + "futures-lite 1.13.0", + "http-types", + "httparse", + "log", + "pin-project", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.5.0", + "parking", + "polling 3.7.4", + "rustix 0.38.41", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-native-tls" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33" +dependencies = [ + "async-std", + "native-tls", + "thiserror 1.0.69", + "url", +] + +[[package]] +name = "async-once-cell" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.3.1", + "futures-lite 2.5.0", + "rustix 0.38.41", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.4.0", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.41", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-sse" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10" +dependencies = [ + "async-channel 1.9.0", + "async-std", + "http-types", + "log", + "memchr", + "pin-project-lite 0.1.12", +] + +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 2.5.0", + "gloo-timers 0.3.0", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite 0.2.15", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-tls" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" +dependencies = [ + "futures-core", + "futures-io", + "rustls 0.19.1", + "webpki", + "webpki-roots 0.21.1", +] + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "async-tungstenite" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07b30ef0ea5c20caaa54baea49514a206308989c68be7ecd86c7f956e4da6378" +dependencies = [ + "async-native-tls", + "async-std", + "async-tls", + "futures-io", + "futures-util", + "log", + "pin-project-lite 0.2.15", + "tungstenite 0.13.0", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.1", +] + +[[package]] +name = "asynchronous-codec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" +dependencies = [ + "bytes 1.8.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes 1.8.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atomic_store" +version = "0.1.3" +source = "git+https://github.com/EspressoSystems/atomicstore.git?tag=0.1.4#64c092596e889b9f376fd4bae8974404c43cd12c" +dependencies = [ + "ark-serialize", + "bincode", + "regex", + "serde", + "snafu 0.7.5", + "tracing", +] + +[[package]] +name = "attohttpc" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "automod" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edf3ee19dbc0a46d740f6f0926bde8c50f02bdbc7b536842da28f6ac56513a8b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes 1.8.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes 1.8.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "getrandom 0.2.15", + "instant", + "rand 0.8.5", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-bytes" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce54e4e485fa0eed9c3aa5348162be09168f75bb5be7bc6587bcf2a65ee1386" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake3" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.5.0", + "piper", +] + +[[package]] +name = "blst" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.8", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +dependencies = [ + "serde", +] + +[[package]] +name = "bytesize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "capnp" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e985a566bdaae9a428a957d12b10c318d41b2afddb54cfbb764878059df636e" +dependencies = [ + "embedded-io", +] + +[[package]] +name = "capnpc" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ba30e0f08582d53c2f3710cf4bb65ff562614b1ba86906d7391adffe189ec" +dependencies = [ + "capnp", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cbor4ii" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "472931dd4dfcc785075b09be910147f9c6258883fc4591d0dac6116392b2daa6" +dependencies = [ + "serde", +] + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cdn-broker" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "clap", + "console-subscriber", + "dashmap", + "derivative", + "jf-signature 0.1.0", + "lazy_static", + "local-ip-address", + "parking_lot", + "portpicker", + "prometheus", + "rand 0.8.5", + "rkyv", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-broker" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "clap", + "console-subscriber", + "dashmap", + "derivative", + "jf-signature 0.1.0", + "lazy_static", + "local-ip-address", + "parking_lot", + "portpicker", + "prometheus", + "rand 0.8.5", + "rkyv", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-client" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "clap", + "jf-signature 0.1.0", + "parking_lot", + "rand 0.8.5", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-marshal" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "clap", + "jf-signature 0.1.0", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-marshal" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "clap", + "jf-signature 0.1.0", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-proto" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "capnp", + "capnpc", + "derivative", + "jf-signature 0.1.0", + "kanal", + "lazy_static", + "mnemonic", + "num_enum", + "pem 3.0.4", + "prometheus", + "quinn", + "rand 0.8.5", + "rcgen 0.13.1", + "redis 0.25.4", + "rkyv", + "rustls 0.23.17", + "rustls-pki-types", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tokio-rustls 0.26.0", + "tracing", + "url", + "warp", +] + +[[package]] +name = "cdn-proto" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "capnp", + "capnpc", + "derivative", + "jf-signature 0.1.0", + "kanal", + "lazy_static", + "mnemonic", + "num_enum", + "pem 3.0.4", + "prometheus", + "quinn", + "rand 0.8.5", + "rcgen 0.13.1", + "redis 0.26.1", + "rkyv", + "rustls 0.23.17", + "rustls-pki-types", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tokio-rustls 0.26.0", + "tracing", + "url", + "warp", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clap" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "clap_lex" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" + +[[package]] +name = "cld" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021080b0a3dbefcf1c1f0b3ad6a923b81f16801d874ec338c168ac0b0762baf5" + +[[package]] +name = "client" +version = "0.1.0" +dependencies = [ + "anyhow", + "contract-bindings", + "espresso-types", + "ethers", + "futures", + "jf-merkle-tree", + "sequencer-utils", + "surf-disco", + "tokio", + "tracing", + "vbs", +] + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58", + "coins-core", + "digest 0.10.7", + "hmac 0.12.1", + "k256", + "serde", + "sha2 0.10.8", + "thiserror 1.0.69", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec", + "coins-bip32", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror 1.0.69", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes 1.8.0", + "futures-core", + "memchr", + "pin-project-lite 0.2.15", + "tokio", + "tokio-util", +] + +[[package]] +name = "committable" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05a8809c2761232ce27226ef1ca1bc78b480b558406895848f76ab8fce04076c" +dependencies = [ + "arbitrary", + "ark-serialize", + "bitvec", + "derivative", + "derive_more 0.99.18", + "funty", + "hex", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +dependencies = [ + "async-trait", + "convert_case 0.6.0", + "json5", + "nom", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml", + "yaml-rust2", +] + +[[package]] +name = "console-api" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257c22cd7e487dd4a13d413beabc512c5052f0bc048db0da6a84c3d8a6142fd" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c4cc54bae66f7d9188996404abdf7fdfa23034ef8e43478c8810828abad758" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "const-hex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_fn" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "contract-bindings" +version = "0.1.0" +dependencies = [ + "ethers", + "serde", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" +dependencies = [ + "aes-gcm", + "base64 0.13.1", + "hkdf 0.10.0", + "hmac 0.10.1", + "percent-encoding", + "rand 0.8.5", + "sha2 0.9.9", + "time 0.2.27", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-any" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62ec9ff5f7965e4d7280bd5482acd20aadb50d632cf6c1d74493856b011fa73" + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher 0.2.5", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "curl" +version = "0.4.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.5.7", + "windows-sys 0.52.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.78+curl-8.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" +dependencies = [ + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "custom_debug" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89e0ae2c2a42be29595d05c50e3ce6096c0698a97e021c3289790f0750cc8e2" +dependencies = [ + "custom_debug_derive 0.5.1", +] + +[[package]] +name = "custom_debug" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e715bf0e503e909c7076c052e39dd215202e8edeb32f1c194fd630c314d256" +dependencies = [ + "custom_debug_derive 0.6.1", +] + +[[package]] +name = "custom_debug_derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a9f3941234c9f62ceaa2782974827749de9b0a8a6487275a278da068e1baf7" +dependencies = [ + "proc-macro2", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "custom_debug_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f731440b39c73910e253cb465ec1fac97732b3c7af215639881ec0c2a38f4f69" +dependencies = [ + "darling", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.89", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "data-encoding-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +dependencies = [ + "data-encoding", + "syn 1.0.109", +] + +[[package]] +name = "delegate" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2323e10c92e1cf4d86e11538512e6dc03ceb586842970b6332af3d4046a046" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.89", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.89", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.89", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "diff-test-bn254" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/solidity-bn254.git#050a98a3b389862c50d0bbbea620d8dc278c275a" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-std", + "clap", + "ethers", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "edit-distance" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3f497e87b038c09a155dfd169faa5ec940d0644635555ef6bd464ac20e97397" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enr" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes 1.8.0", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "espresso-systems-common" +version = "0.4.0" +source = "git+https://github.com/espressosystems/espresso-systems-common?tag=0.4.0#5abd890f79014a86db31286e1f3a529f161e69de" + +[[package]] +name = "espresso-systems-common" +version = "0.4.1" +source = "git+https://github.com/espressosystems/espresso-systems-common?tag=0.4.1#2e889e878866c2a5cce1daaab947f7c93d5811ae" + +[[package]] +name = "espresso-types" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-serialize", + "async-broadcast", + "async-trait", + "base64-bytes", + "bincode", + "blake3", + "bytesize", + "clap", + "cld", + "committable", + "contract-bindings", + "derive_more 1.0.0", + "dyn-clone", + "ethers", + "fluent-asserter", + "futures", + "hotshot", + "hotshot-orchestrator", + "hotshot-query-service", + "hotshot-types", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-utils", + "jf-vid", + "lru 0.12.5", + "num-traits", + "paste", + "pretty_assertions", + "rand 0.8.5", + "sequencer-utils", + "serde", + "serde_json", + "sha2 0.10.8", + "static_assertions", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "time 0.3.36", + "tokio", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes 0.8.4", + "ctr 0.9.2", + "digest 0.10.7", + "hex", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", + "uuid 0.8.2", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror 1.0.69", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" +dependencies = [ + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" +dependencies = [ + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "reqwest 0.11.27", + "serde", + "serde_json", + "syn 2.0.89", + "toml", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" +dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.89", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec", + "bytes 1.8.0", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum", + "syn 2.0.89", + "tempfile", + "thiserror 1.0.69", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-etherscan" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" +dependencies = [ + "chrono", + "ethers-core", + "ethers-solc", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes 1.8.0", + "const-hex", + "enr", + "ethers-core", + "futures-channel", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http 0.2.12", + "instant", + "jsonwebtoken", + "once_cell", + "pin-project", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +dependencies = [ + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.23", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi 0.5.1", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fluent-asserter" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cd2a1243f15c8c9d37acc8ab4ba837e50823561cb124af8406a6f676d04341" +dependencies = [ + "lazy_static", + "num", +] + +[[package]] +name = "flume" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132" +dependencies = [ + "futures-core", + "futures-sink", + "spinning_top", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.15", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand 2.2.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls 0.23.17", + "rustls-pki-types", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-ticker" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9763058047f713632a52e916cc7f6a4b3fc6e9fc1ff8c5b1dc49e5a89041682e" +dependencies = [ + "futures", + "futures-timer", + "instant", +] + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers 0.2.6", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.15", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes 1.8.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes 1.8.0", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes 1.8.0", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1 0.10.6", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hex_fmt" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" + +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2 0.5.7", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest 0.9.0", + "hmac 0.10.1", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "hotshot" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bimap", + "bincode", + "blake3", + "cdn-broker 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "cdn-client", + "cdn-marshal 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "chrono", + "committable", + "custom_debug 0.5.1", + "dashmap", + "derive_more 1.0.0", + "either", + "ethereum-types", + "futures", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "jf-signature 0.2.0", + "libp2p-identity", + "libp2p-networking", + "lru 0.12.5", + "num_enum", + "parking_lot", + "portpicker", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "surf-disco", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", + "url", + "utils", + "vbs", +] + +[[package]] +name = "hotshot-builder-api" +version = "0.1.7" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "async-trait", + "clap", + "committable", + "derive_more 1.0.0", + "futures", + "hotshot-types", + "serde", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "toml", + "vbs", +] + +[[package]] +name = "hotshot-contract-adapter" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ed-on-bn254", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "contract-bindings", + "diff-test-bn254", + "ethers", + "hotshot-types", + "jf-pcs", + "jf-plonk", + "jf-utils", + "num-bigint", + "num-traits", +] + +[[package]] +name = "hotshot-events-service" +version = "0.1.49" +source = "git+https://github.com/EspressoSystems/hotshot-events-service.git?tag=0.1.54#6c831301f1ff7fe7d2b5a6da4f6ff849cfe74b4a" +dependencies = [ + "async-broadcast", + "async-lock 2.8.0", + "async-trait", + "clap", + "derivative", + "derive_more 0.99.18", + "either", + "futures", + "hotshot-types", + "rand 0.8.5", + "serde", + "snafu 0.8.5", + "tagged-base64", + "tide-disco", + "tokio", + "toml", + "tracing", + "tracing-subscriber 0.3.18", + "vbs", +] + +[[package]] +name = "hotshot-example-types" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bitvec", + "committable", + "either", + "ethereum-types", + "futures", + "hotshot", + "hotshot-builder-api", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "jf-vid", + "rand 0.8.5", + "reqwest 0.12.9", + "serde", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "hotshot-fakeapi" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "futures", + "hotshot-example-types", + "hotshot-types", + "rand 0.8.5", + "serde", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", +] + +[[package]] +name = "hotshot-macros" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "derive_builder", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "hotshot-orchestrator" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "bincode", + "blake3", + "clap", + "csv", + "futures", + "hotshot-types", + "libp2p", + "multiaddr", + "serde", + "serde_json", + "surf-disco", + "thiserror 1.0.69", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-query-service" +version = "0.1.62" +source = "git+https://github.com/EspressoSystems/hotshot-query-service?tag=0.1.74#d17f0d667b590b5131d30b47ce1842eb59035127" +dependencies = [ + "anyhow", + "ark-serialize", + "async-lock 3.4.0", + "async-trait", + "atomic_store", + "backoff", + "bincode", + "chrono", + "committable", + "custom_debug 0.6.1", + "derivative", + "derive_more 0.99.18", + "either", + "futures", + "hotshot", + "hotshot-testing", + "hotshot-types", + "include_dir", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-vid", + "log", + "prometheus", + "refinery", + "refinery-core", + "serde", + "serde_json", + "snafu 0.8.5", + "sqlx", + "surf-disco", + "tagged-base64", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "tracing-subscriber 0.3.18", + "trait-variant", + "typenum", + "url", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-stake-table" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "ark-bn254", + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "ethereum-types", + "hotshot-types", + "jf-crhf", + "jf-rescue", + "jf-signature 0.2.0", + "jf-utils", + "serde", + "tagged-base64", +] + +[[package]] +name = "hotshot-state-prover" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ed-on-bn254", + "ark-ff", + "ark-srs", + "ark-std", + "clap", + "contract-bindings", + "displaydoc", + "espresso-types", + "ethers", + "futures", + "hotshot-contract-adapter", + "hotshot-stake-table", + "hotshot-types", + "itertools 0.12.1", + "jf-crhf", + "jf-pcs", + "jf-plonk", + "jf-relation", + "jf-rescue", + "jf-signature 0.2.0", + "jf-utils", + "reqwest 0.12.9", + "sequencer-utils", + "serde", + "surf-disco", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "hotshot-task" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-trait", + "futures", + "tokio", + "tracing", + "utils", +] + +[[package]] +name = "hotshot-task-impls" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bincode", + "bitvec", + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "chrono", + "committable", + "either", + "futures", + "hotshot-builder-api", + "hotshot-task", + "hotshot-types", + "jf-signature 0.2.0", + "jf-vid", + "lru 0.12.5", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tracing", + "url", + "utils", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-testing" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "automod", + "bitvec", + "committable", + "either", + "ethereum-types", + "futures", + "hotshot", + "hotshot-builder-api", + "hotshot-example-types", + "hotshot-fakeapi", + "hotshot-macros", + "hotshot-orchestrator", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "itertools 0.13.0", + "jf-signature 0.2.0", + "jf-vid", + "lru 0.12.5", + "portpicker", + "rand 0.8.5", + "reqwest 0.12.9", + "serde", + "sha2 0.10.8", + "sha3", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "tokio", + "tracing", + "url", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-types" +version = "0.1.11" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "ark-srs", + "ark-std", + "async-lock 3.4.0", + "async-trait", + "bincode", + "bitvec", + "blake3", + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "clap", + "committable", + "custom_debug 0.5.1", + "derivative", + "digest 0.10.7", + "displaydoc", + "dyn-clone", + "either", + "espresso-systems-common 0.4.1", + "ethereum-types", + "futures", + "jf-pcs", + "jf-signature 0.2.0", + "jf-utils", + "jf-vid", + "lazy_static", + "libp2p", + "memoize", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.9", + "serde", + "serde-inline-default", + "serde_bytes", + "serde_json", + "sha2 0.10.8", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "typenum", + "url", + "utils", + "vbs", + "vec1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes 1.8.0", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes 1.8.0", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes 1.8.0", + "http 0.2.12", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes 1.8.0", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes 1.8.0", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "http-client" +version = "6.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "http-types", + "isahc", + "log", +] + +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel 1.9.0", + "async-std", + "base64 0.13.1", + "cookie", + "futures-lite 1.13.0", + "infer", + "pin-project-lite 0.2.15", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "url", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "h2 0.4.7", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite 0.2.15", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.31", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.5.1", + "hyper-util", + "rustls 0.23.17", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.31", + "pin-project-lite 0.2.15", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes 1.8.0", + "http-body-util", + "hyper 1.5.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.5.1", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "if-watch" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +dependencies = [ + "async-io 2.4.0", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration 0.6.1", + "tokio", + "windows", +] + +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes 1.8.0", + "futures", + "http 0.2.12", + "hyper 0.14.31", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", + "serde", +] + +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "input_buffer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" +dependencies = [ + "bytes 1.8.0", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" +dependencies = [ + "bytes 0.5.6", + "crossbeam-utils", + "curl", + "curl-sys", + "flume 0.9.2", + "futures-lite 1.13.0", + "http 0.2.12", + "log", + "once_cell", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" + +[[package]] +name = "jf-commitment" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-std", +] + +[[package]] +name = "jf-crhf" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "jf-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "jf-pcs" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "itertools 0.12.1", + "jf-utils", + "merlin", + "rayon", +] + +[[package]] +name = "jf-plonk" +version = "0.5.1" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=jf-plonk-v0.5.1#7e2eeef8c06a12f17015d457f1b3ea80b0de3333" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "downcast-rs", + "dyn-clone", + "espresso-systems-common 0.4.0", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-pcs", + "jf-relation", + "jf-rescue", + "jf-utils", + "merlin", + "num-bigint", + "rand_chacha 0.3.1", + "rayon", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "jf-prf" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "jf-relation" +version = "0.4.4" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "downcast-rs", + "dyn-clone", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-utils", + "num-bigint", + "rand_chacha 0.3.1", + "rayon", +] + +[[package]] +name = "jf-rescue" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-bw6-761", + "ark-crypto-primitives", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ed-on-bn254", + "ark-ff", + "ark-std", + "displaydoc", + "itertools 0.12.1", + "jf-commitment", + "jf-crhf", + "jf-prf", + "jf-relation", + "jf-utils", +] + +[[package]] +name = "jf-signature" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "blst", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", + "zeroize", +] + +[[package]] +name = "jf-signature" +version = "0.2.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=jf-signature-v0.2.0#ca160ce3452b560cad512b750a742a87c48c5881" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "blst", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", + "zeroize", +] + +[[package]] +name = "jf-utils" +version = "0.4.4" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "displaydoc", + "rand_chacha 0.3.1", + "rayon", + "serde", + "sha2 0.10.8", + "tagged-base64", +] + +[[package]] +name = "jf-vid" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "anyhow", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "displaydoc", + "generic-array", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-pcs", + "jf-utils", + "rayon", + "serde", + "tagged-base64", +] + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "kanal" +version = "0.1.0-pre8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05d55519627edaf7fd0f29981f6dc03fb52df3f5b257130eb8d0bf2801ea1d7" +dependencies = [ + "futures-core", + "lock_api", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.8.5", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.9", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "libc" +version = "0.2.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libnghttp2-sys" +version = "0.1.10+1.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libp2p" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681fb3f183edfbedd7a57d32ebe5dcdc0b9f94061185acf3c30249349cc6fc99" +dependencies = [ + "bytes 1.8.0", + "either", + "futures", + "futures-timer", + "getrandom 0.2.15", + "instant", + "libp2p-allow-block-list", + "libp2p-autonat", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "multiaddr", + "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107b238b794cb83ab53b74ad5dcf7cca3200899b72fe662840cfb52f5b0a32e6" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-autonat" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95151726170e41b591735bf95c42b888fe4aa14f65216a9fbf0edcc04510586" +dependencies = [ + "async-trait", + "asynchronous-codec 0.6.2", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-request-response", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.2.0", + "rand 0.8.5", + "tracing", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7cd50a78ccfada14de94cbacd3ce4b0138157f376870f13d3a8422cd075b4fd" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-core" +version = "0.41.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a8920cbd8540059a01950c1e5c96ea8d89eb50c51cd366fc18bdf540a6e48f" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-identity", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "serde", + "smallvec", + "thiserror 1.0.69", + "tracing", + "unsigned-varint 0.8.0", + "void", + "web-time", +] + +[[package]] +name = "libp2p-dns" +version = "0.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17cbcf7160ff35c3e8e560de4a068fe9d6cb777ea72840e48eb76ff9576c4b6" +dependencies = [ + "async-trait", + "futures", + "hickory-resolver", + "libp2p-core", + "libp2p-identity", + "parking_lot", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-gossipsub" +version = "0.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d665144a616dadebdc5fff186b1233488cdcd8bfb1223218ff084b6d052c94f7" +dependencies = [ + "asynchronous-codec 0.7.0", + "base64 0.21.7", + "byteorder", + "bytes 1.8.0", + "either", + "fnv", + "futures", + "futures-ticker", + "getrandom 0.2.15", + "hex_fmt", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "prometheus-client", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "rand 0.8.5", + "regex", + "serde", + "sha2 0.10.8", + "smallvec", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identify" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5d635ebea5ca0c3c3e77d414ae9b67eccf2a822be06091b9c1a0d13029a1e2f" +dependencies = [ + "asynchronous-codec 0.7.0", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "lru 0.12.5", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "smallvec", + "thiserror 1.0.69", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identity" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "hkdf 0.12.4", + "libsecp256k1", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", + "zeroize", +] + +[[package]] +name = "libp2p-kad" +version = "0.45.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc5767727d062c4eac74dd812c998f0e488008e82cce9c33b463d38423f9ad2" +dependencies = [ + "arrayvec", + "asynchronous-codec 0.7.0", + "bytes 1.8.0", + "either", + "fnv", + "futures", + "futures-bounded", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "smallvec", + "thiserror 1.0.69", + "tracing", + "uint", + "void", +] + +[[package]] +name = "libp2p-mdns" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49007d9a339b3e1d7eeebc4d67c05dbf23d300b7d091193ec2d3f26802d7faf2" +dependencies = [ + "data-encoding", + "futures", + "hickory-proto", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "socket2 0.5.7", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-metrics" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdac91ae4f291046a3b2660c039a2830c931f84df2ee227989af92f7692d3357" +dependencies = [ + "futures", + "instant", + "libp2p-core", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-swarm", + "pin-project", + "prometheus-client", +] + +[[package]] +name = "libp2p-networking" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "bincode", + "blake3", + "cbor4ii", + "custom_debug 0.5.1", + "delegate", + "derive_builder", + "either", + "futures", + "hotshot-types", + "lazy_static", + "libp2p", + "libp2p-identity", + "libp2p-swarm-derive", + "pin-project", + "portpicker", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", + "tracing-subscriber 0.3.18", + "void", +] + +[[package]] +name = "libp2p-quic" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c67296ad4e092e23f92aea3d2bdb6f24eab79c0929ed816dfb460ea2f4567d2b" +dependencies = [ + "bytes 1.8.0", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "parking_lot", + "quinn", + "rand 0.8.5", + "ring 0.17.8", + "rustls 0.23.17", + "socket2 0.5.7", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-request-response" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c314fe28368da5e3a262553fb0ad575c1c8934c461e10de10265551478163836" +dependencies = [ + "async-trait", + "cbor4ii", + "futures", + "futures-bounded", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "serde", + "smallvec", + "tracing", + "void", +] + +[[package]] +name = "libp2p-swarm" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80cae6cb75f89dbca53862f9ebe0b9f463aa7b302762fcfaafb9e51dcc9b0f7e" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru 0.12.5", + "multistream-select", + "once_cell", + "rand 0.8.5", + "smallvec", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5daceb9dd908417b6dfcfe8e94098bc4aac54500c282e78120b885dadc09b999" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "libp2p-tcp" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2460fc2748919adff99ecbc1aab296e4579e41f374fb164149bd2c9e529d4c" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "libp2p-identity", + "socket2 0.5.7", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-tls" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b7b831e55ce2aa6c354e6861a85fdd4dd0a2b97d5e276fabac0e4810a71776" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen 0.11.3", + "ring 0.17.8", + "rustls 0.23.17", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser", + "yasna", +] + +[[package]] +name = "libp2p-upnp" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccf04b0e3ff3de52d07d5fd6c3b061d0e7f908ffc683c32d9638caedce86fc8" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "local-ip-address" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3669cf5561f8d27e8fc84cc15e58350e70f557d4d65f70e3154e54cd2f8e1782" +dependencies = [ + "libc", + "neli", + "thiserror 1.0.69", + "windows-sys 0.59.0", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] + +[[package]] +name = "log-panics" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" +dependencies = [ + "backtrace", + "log", +] + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.1", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef3aab6a1d529b112695f72beec5ee80e729cb45af58663ec902c8fac764ecdd" +dependencies = [ + "lazy_static", + "pipeline", + "regex", +] + +[[package]] +name = "marketplace-solver" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "bincode", + "clap", + "cld", + "committable", + "espresso-types", + "futures", + "hotshot", + "hotshot-events-service", + "hotshot-types", + "jf-signature 0.2.0", + "rand 0.8.5", + "serde", + "serde_json", + "sqlx", + "surf-disco", + "thiserror 1.0.69", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "maud" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df518b75016b4289cdddffa1b01f2122f4a49802c93191f3133f6dc2472ebcaa" +dependencies = [ + "itoa", + "maud_macros", + "tide", +] + +[[package]] +name = "maud_macros" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa453238ec218da0af6b11fc5978d3b5c3a45ed97b722391a2a11f3306274e18" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df4051db13d0816cf23196d3baa216385ae099339f5d0645a8d9ff2305e82b8" +dependencies = [ + "lazy_static", + "lru 0.7.8", + "memoize-inner", +] + +[[package]] +name = "memoize-inner" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bdece7e91f0d1e33df7b46ec187a93ea0d4e642113a1039ac8bfdd4a3273ac" +dependencies = [ + "lazy_static", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mnemonic" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b8f3a258db515d5e91a904ce4ae3f73e091149b90cadbdb93d210bee07f63b" + +[[package]] +name = "multiaddr" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.8.0", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc41f430805af9d1cf4adae4ed2149c759b877b01d909a1f40256188d09345d2" +dependencies = [ + "core2", + "serde", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +dependencies = [ + "bytes 1.8.0", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "neli" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1100229e06604150b3becd61a4965d5c70f3be1759544ea7274166f4be41ef43" +dependencies = [ + "byteorder", + "libc", + "log", + "neli-proc-macros", +] + +[[package]] +name = "neli-proc-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c168194d373b1e134786274020dae7fc5513d565ea2ebb9bc9ff17ffb69106d4" +dependencies = [ + "either", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-proto" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b33524dc0968bfad349684447bfce6db937a9ac3332a1fe60c0c5a5ce63f21" +dependencies = [ + "bytes 1.8.0", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "netlink-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" +dependencies = [ + "bytes 1.8.0", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes 1.8.0", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes 1.8.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-scale-codec" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pathdiff" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", + "sha2 0.10.8", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +dependencies = [ + "memchr", + "thiserror 1.0.69", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pest_meta" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.6.0", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.1", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pipeline" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.2.0", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite 0.2.15", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite 0.2.15", + "rustix 0.38.41", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "polyval" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +dependencies = [ + "cpuid-bool", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portpicker" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes 1.8.0", + "fallible-iterator", + "hmac 0.12.1", + "md-5", + "memchr", + "rand 0.8.5", + "sha2 0.10.8", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f66ea23a2d0e5734297357705193335e0a957696f34bed2f2faefacb2fec336f" +dependencies = [ + "bytes 1.8.0", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi 1.0.1", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.89", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307e3004becf10f5a6e0d59d20f3cd28231b0e0827a96cd3e0ce6d14bc1e4bb3" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 1.0.69", +] + +[[package]] +name = "prometheus-client" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes 1.8.0", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +dependencies = [ + "asynchronous-codec 0.6.2", + "bytes 1.8.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" +dependencies = [ + "asynchronous-codec 0.7.0", + "bytes 1.8.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes 1.8.0", + "futures-io", + "pin-project-lite 0.2.15", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.17", + "socket2 0.5.7", + "thiserror 2.0.3", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes 1.8.0", + "getrandom 0.2.15", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash", + "rustls 0.23.17", + "rustls-pki-types", + "slab", + "thiserror 2.0.3", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" +dependencies = [ + "pem 3.0.4", + "ring 0.16.20", + "time 0.3.36", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +dependencies = [ + "pem 3.0.4", + "ring 0.17.8", + "rustls-pki-types", + "time 0.3.36", + "x509-parser", + "yasna", +] + +[[package]] +name = "redis" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d7a6955c7511f60f3ba9e86c6d02b3c3f144f8c24b288d1f4e18074ab8bbec" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.8.0", + "combine", + "futures", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite 0.2.15", + "ryu", + "tokio", + "tokio-retry", + "tokio-util", + "url", +] + +[[package]] +name = "redis" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e902a69d09078829137b4a5d9d082e0490393537badd7c91a3d69d14639e115f" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.8.0", + "combine", + "futures", + "futures-util", + "itoa", + "num-bigint", + "percent-encoding", + "pin-project-lite 0.2.15", + "ryu", + "tokio", + "tokio-retry", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "refinery" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0904191f0566c3d3e0091d5cc8dec22e663d77def2d247b16e7a438b188bf75d" +dependencies = [ + "refinery-core", + "refinery-macros", +] + +[[package]] +name = "refinery-core" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf253999e1899ae476c910b994959e341d84c4389ba9533d3dacbe06df04825" +dependencies = [ + "async-trait", + "cfg-if", + "log", + "regex", + "serde", + "siphasher 1.0.1", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tokio-postgres", + "toml", + "url", + "walkdir", +] + +[[package]] +name = "refinery-macros" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd81f69687fe8a1fa10995108b3ffc7cdbd63e682a4f8fbfd1020130780d7e17" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "refinery-core", + "regex", + "syn 2.0.89", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes 1.8.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.25.4", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +dependencies = [ + "base64 0.22.1", + "bytes 1.8.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.7", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.5.1", + "hyper-rustls 0.27.3", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes 1.8.0", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.11.0", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes 1.8.0", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.6.0", + "serde", + "serde_derive", +] + +[[package]] +name = "route-recognizer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e" + +[[package]] +name = "routefinder" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0971d3c8943a6267d6bd0d782fdc4afa7593e7381a92a3df950ff58897e066b5" +dependencies = [ + "smartcow", + "smartstring", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rtnetlink" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +dependencies = [ + "futures", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring 0.16.20", + "sct 0.6.1", + "webpki", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct 0.7.1", +] + +[[package]] +name = "rustls" +version = "0.23.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" +dependencies = [ + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "sequencer" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-ff", + "ark-serialize", + "async-broadcast", + "async-lock 3.4.0", + "async-once-cell", + "async-trait", + "bincode", + "cdn-broker 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "cdn-marshal 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "clap", + "client", + "committable", + "contract-bindings", + "csv", + "derivative", + "derive_more 1.0.0", + "dotenvy", + "dyn-clone", + "espresso-types", + "ethers", + "futures", + "hotshot", + "hotshot-contract-adapter", + "hotshot-events-service", + "hotshot-orchestrator", + "hotshot-query-service", + "hotshot-stake-table", + "hotshot-state-prover", + "hotshot-types", + "include_dir", + "itertools 0.12.1", + "jf-crhf", + "jf-merkle-tree", + "jf-rescue", + "jf-signature 0.2.0", + "jf-vid", + "libp2p", + "libp2p-networking", + "marketplace-solver", + "num_enum", + "parking_lot", + "portpicker", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "sequencer-utils", + "serde", + "serde_json", + "sha2 0.10.8", + "snafu 0.8.5", + "sqlx", + "static_assertions", + "strum", + "surf-disco", + "tagged-base64", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "tracing-subscriber 0.3.18", + "url", + "vbs", + "vec1", + "vergen", +] + +[[package]] +name = "sequencer-sqlite" +version = "0.1.0" +dependencies = [ + "anyhow", + "sequencer", + "tokio", +] + +[[package]] +name = "sequencer-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "clap", + "committable", + "contract-bindings", + "derive_more 1.0.0", + "ethers", + "futures", + "hotshot", + "hotshot-contract-adapter", + "log-panics", + "portpicker", + "reqwest 0.11.27", + "serde", + "serde_json", + "surf", + "tempfile", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-inline-default" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3acbd21cb24261fc36f595b38d3b34d0ff4e31a6b42edd6a43387d27c5787c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "serde_fmt" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.6.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time 0.3.36", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-async-std" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4aa94397e2023af5b7cff5b8d4785e935cfb77f0e4aab0cae3b26258ace556" +dependencies = [ + "async-io 1.13.0", + "futures-lite 1.13.0", + "libc", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel 1.9.0", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "smartcow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "656fcb1c1fca8c4655372134ce87d8afdf5ec5949ebabe8d314be0141d8b5da2" +dependencies = [ + "smartstring", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "backtrace", + "doc-comment", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive 0.8.5", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror 1.0.69", + "unicode-xid", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spinning_top" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +dependencies = [ + "atoi", + "bit-vec", + "byteorder", + "bytes 1.8.0", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.3.1", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.14.5", + "hashlink 0.9.1", + "hex", + "indexmap 2.6.0", + "log", + "memchr", + "native-tls", + "once_cell", + "paste", + "percent-encoding", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlformat", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.89", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.89", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.6.0", + "byteorder", + "bytes 1.8.0", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1 0.10.6", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time 0.3.36", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +dependencies = [ + "atoi", + "base64 0.22.1", + "bit-vec", + "bitflags 2.6.0", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time 0.3.36", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +dependencies = [ + "atoi", + "flume 0.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "time 0.3.36", + "tracing", + "url", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "standback" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" +dependencies = [ + "version_check", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version 0.2.3", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1 0.6.1", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.89", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "surf" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "encoding_rs", + "futures-util", + "getrandom 0.2.15", + "http-client", + "http-types", + "log", + "mime_guess", + "once_cell", + "pin-project-lite 0.2.15", + "serde", + "serde_json", + "web-sys", +] + +[[package]] +name = "surf-disco" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e00ab9d939d04110f14281d5a1e45b6c8acdfbc42e720cbfaef33007c907e6" +dependencies = [ + "async-std", + "async-tungstenite", + "derivative", + "futures", + "hex", + "reqwest 0.12.9", + "serde", + "serde_json", + "tide-disco", + "tracing", + "vbs", +] + +[[package]] +name = "sval" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6dc0f9830c49db20e73273ffae9b5240f63c42e515af1da1fceefb69fceafd8" + +[[package]] +name = "sval_buffer" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "429922f7ad43c0ef8fd7309e14d750e38899e32eb7e8da656ea169dd28ee212f" +dependencies = [ + "sval", + "sval_ref", +] + +[[package]] +name = "sval_dynamic" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f16ff5d839396c11a30019b659b0976348f3803db0626f736764c473b50ff4" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_fmt" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01c27a80b6151b0557f9ccbe89c11db571dc5f68113690c1e028d7e974bae94" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_json" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0deef63c70da622b2a8069d8600cf4b05396459e665862e7bdb290fd6cf3f155" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_nested" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a39ce5976ae1feb814c35d290cf7cf8cd4f045782fe1548d6bc32e21f6156e9f" +dependencies = [ + "sval", + "sval_buffer", + "sval_ref", +] + +[[package]] +name = "sval_ref" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7c6ee3751795a728bc9316a092023529ffea1783499afbc5c66f5fabebb1fa" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_serde" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a5572d0321b68109a343634e3a5d576bf131b82180c6c442dee06349dfc652a" +dependencies = [ + "serde", + "sval", + "sval_nested", +] + +[[package]] +name = "svm-rs" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" +dependencies = [ + "dirs", + "fs2", + "hex", + "once_cell", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "sha2 0.10.8", + "thiserror 1.0.69", + "url", + "zip", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagged-base64" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b74bbf1db405a3fd2c6f8cd403bfa14727faa145925efe3012fa270b61551f1" +dependencies = [ + "ark-serialize", + "ark-std", + "base64 0.22.1", + "crc-any", + "serde", + "snafu 0.8.5", + "tagged-base64-macros", + "wasm-bindgen", +] + +[[package]] +name = "tagged-base64-macros" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcdea3c0150898fad2f7196a173ec3264f7fc455ba570939163c558f48ae85ac" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand 2.2.0", + "once_cell", + "rustix 0.38.41", + "windows-sys 0.59.0", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tide" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0" +dependencies = [ + "async-h1", + "async-sse", + "async-std", + "async-trait", + "futures-util", + "http-client", + "http-types", + "kv-log-macro", + "log", + "pin-project-lite 0.2.15", + "route-recognizer", + "serde", + "serde_json", +] + +[[package]] +name = "tide-disco" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9819433f7ede35c0ef6dd1dc669b39663e48fdb58653712cc39db272e4589978" +dependencies = [ + "anyhow", + "async-h1", + "async-lock 3.4.0", + "async-std", + "async-trait", + "clap", + "config", + "derivative", + "derive_more 0.99.18", + "dirs", + "edit-distance", + "futures", + "futures-util", + "http 1.1.0", + "include_dir", + "itertools 0.12.1", + "lazy_static", + "libc", + "markdown", + "maud", + "parking_lot", + "pin-project", + "prometheus", + "rand 0.8.5", + "reqwest 0.12.9", + "routefinder", + "semver 1.0.23", + "serde", + "serde_json", + "serde_with", + "shellexpand", + "signal-hook", + "signal-hook-async-std", + "snafu 0.8.5", + "strum", + "strum_macros", + "tagged-base64", + "tide", + "tide-websockets", + "toml", + "tracing", + "tracing-distributed", + "tracing-futures", + "tracing-log", + "tracing-subscriber 0.3.18", + "url", + "vbs", +] + +[[package]] +name = "tide-websockets" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3592c5cb5cb1b7a2ff3a0e5353170c1bb5b104b2f66dd06f73304169b52cc725" +dependencies = [ + "async-dup", + "async-std", + "async-tungstenite", + "base64 0.13.1", + "futures-util", + "pin-project", + "serde", + "serde_json", + "sha-1", + "tide", +] + +[[package]] +name = "time" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros 0.1.1", + "version_check", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros 0.2.18", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" +dependencies = [ + "proc-macro-hack", + "time-macros-impl", +] + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "time-macros-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn 1.0.109", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes 1.8.0", + "libc", + "mio", + "parking_lot", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio-macros", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite 0.2.15", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b5d3742945bc7d7f210693b0c58ae542c6fd47b17adbbda0885f3dcb34a6bdb" +dependencies = [ + "async-trait", + "byteorder", + "bytes 1.8.0", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite 0.2.15", + "postgres-protocol", + "postgres-types", + "rand 0.8.5", + "socket2 0.5.7", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-retry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand 0.8.5", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.17", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.15", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes 1.8.0", + "futures-core", + "futures-sink", + "pin-project-lite 0.2.15", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.6.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tonic" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.21.7", + "bytes 1.8.0", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite 0.2.15", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite 0.2.15", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-distributed" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de30b98573d9e63e82996b3c9bf950210ba3f2dcf363f7eec000acebef1a4377" +dependencies = [ + "itertools 0.9.0", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trait-variant" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093" +dependencies = [ + "base64 0.13.1", + "byteorder", + "bytes 1.8.0", + "http 0.2.12", + "httparse", + "input_buffer", + "log", + "native-tls", + "rand 0.8.5", + "sha-1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes 1.8.0", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1 0.10.6", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + +[[package]] +name = "unicode-bidi" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "universal-hash" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +dependencies = [ + "asynchronous-codec 0.6.2", + "bytes 1.8.0", +] + +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls 0.23.17", + "rustls-pki-types", + "url", + "webpki-roots 0.26.7", +] + +[[package]] +name = "url" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +dependencies = [ + "form_urlencoded", + "idna 1.0.3", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "utils" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "tracing", +] + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" +dependencies = [ + "value-bag-serde1", + "value-bag-sval2", +] + +[[package]] +name = "value-bag-serde1" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb773bd36fd59c7ca6e336c94454d9c66386416734817927ac93d81cb3c5b0b" +dependencies = [ + "erased-serde", + "serde", + "serde_fmt", +] + +[[package]] +name = "value-bag-sval2" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a916a702cac43a88694c97657d449775667bcd14b70419441d05b7fea4a83a" +dependencies = [ + "sval", + "sval_buffer", + "sval_dynamic", + "sval_fmt", + "sval_json", + "sval_ref", + "sval_serde", +] + +[[package]] +name = "vbs" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf4ed425fa4976d51e35f5882764612c5f735457118d6ef7b6c684b7d34a74d" +dependencies = [ + "anyhow", + "bincode", + "derive_more 0.99.18", + "serde", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec1" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322" +dependencies = [ + "serde", +] + +[[package]] +name = "vergen" +version = "8.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" +dependencies = [ + "anyhow", + "cfg-if", + "rustversion", + "time 0.3.36", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "warp" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "headers", + "http 0.2.12", + "hyper 0.14.31", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "whoami" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +dependencies = [ + "redox_syscall", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +dependencies = [ + "windows-core 0.53.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.1", + "send_wrapper 0.6.0", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "ring 0.17.8", + "rusticata-macros", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "xml-rs" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af310deaae937e48a26602b730250b4949e125f468f11e6990be3e5304ddd96f" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink 0.8.4", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time 0.3.36", +] + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes 0.8.4", + "byteorder", + "bzip2", + "constant_time_eq 0.1.5", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "sha1 0.10.6", + "time 0.3.36", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/sequencer-sqlite/Cargo.toml b/sequencer-sqlite/Cargo.toml new file mode 100644 index 000000000..fbaeb12a4 --- /dev/null +++ b/sequencer-sqlite/Cargo.toml @@ -0,0 +1,33 @@ +# As a workaround for feature unification by cargo this separate crate that is +# not part of the workspace that allows us to compile a sequencer binary without +# the embedded-db feature turned on. +[package] +name = "sequencer-sqlite" +version = "0.1.0" +edition = "2021" + +[dependencies] +sequencer = { path = "../sequencer" , features = ["embedded-db"] } +tokio = { version = "1", default-features = false, features = [ + "rt-multi-thread", + "macros", + "parking_lot", + "sync", +] } +anyhow = "^1.0" + +[profile.dev] +# No optimizations +opt-level = 0 +# Skip compiling the debug information. +debug = false +# Skip linking symbols. +strip = true +[profile.test] +opt-level = 1 +[profile.test.package.hotshot-state-prover] +opt-level = 3 +[profile.test.package.gen-vk-contract] +opt-level = 3 +[profile.test.package.diff-test-hotshot] +opt-level = 3 diff --git a/sequencer-sqlite/src/main.rs b/sequencer-sqlite/src/main.rs new file mode 100644 index 000000000..ef15b568e --- /dev/null +++ b/sequencer-sqlite/src/main.rs @@ -0,0 +1,4 @@ +#[tokio::main] +pub async fn main() -> anyhow::Result<()> { + sequencer::main().await +} diff --git a/sequencer/Cargo.toml b/sequencer/Cargo.toml index eb1789656..41848e92a 100644 --- a/sequencer/Cargo.toml +++ b/sequencer/Cargo.toml @@ -16,10 +16,11 @@ testing = [ "hotshot-query-service/testing", ] benchmarking = [] +embedded-db = ["hotshot-query-service/embedded-db"] [[bin]] name = "espresso-dev-node" -required-features = ["testing"] +required-features = ["testing", "embedded-db"] [dev-dependencies] escargot = "0.5.10" @@ -30,10 +31,10 @@ hotshot-testing = { workspace = true } pretty_assertions = { workspace = true } rand = "0.8.5" reqwest = { workspace = true } -tempfile = { workspace = true } # Enable "testing" feature when running tests sequencer = { path = ".", features = [ "testing" ] } +tempfile = { workspace = true } [build-dependencies] anyhow = { workspace = true } @@ -48,7 +49,6 @@ async-lock = { workspace = true } async-once-cell = { workspace = true } async-trait = { workspace = true } bincode = { workspace = true } -parking_lot = "0.12" # CDN imports cdn-broker = { workspace = true } @@ -75,12 +75,9 @@ hotshot-orchestrator = { workspace = true } hotshot-query-service = { workspace = true } hotshot-stake-table = { workspace = true } hotshot-state-prover = { workspace = true } -libp2p-networking = { workspace = true } # Dependencies for feature `testing` hotshot-testing = { workspace = true, optional = true } -marketplace-builder-core = { workspace = true, optional = true } -marketplace-builder-shared = { workspace = true, optional = true } hotshot-types = { workspace = true } include_dir = "0.7" @@ -88,13 +85,16 @@ itertools = { workspace = true } jf-crhf = { workspace = true } jf-merkle-tree = { workspace = true } jf-rescue = { workspace = true } -tempfile = { workspace = true, optional = true } jf-signature = { workspace = true, features = ["bls", "schnorr"] } jf-vid = { workspace = true } libp2p = { workspace = true } +libp2p-networking = { workspace = true } +marketplace-builder-core = { workspace = true, optional = true } +marketplace-builder-shared = { workspace = true, optional = true } marketplace-solver = { path = "../marketplace-solver" } num_enum = "0.7" +parking_lot = "0.12" portpicker = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } @@ -115,6 +115,7 @@ static_assertions = "1" strum = { workspace = true } surf-disco = { workspace = true } tagged-base64 = { workspace = true } +tempfile = { workspace = true, optional = true } tide-disco = { workspace = true } time = { workspace = true } tokio = { workspace = true } diff --git a/sequencer/api/migrations/V12__network_config.sql b/sequencer/api/migrations/postgres/V12__network_config.sql similarity index 100% rename from sequencer/api/migrations/V12__network_config.sql rename to sequencer/api/migrations/postgres/V12__network_config.sql diff --git a/sequencer/api/migrations/V13__consensus_state.sql b/sequencer/api/migrations/postgres/V13__consensus_state.sql similarity index 100% rename from sequencer/api/migrations/V13__consensus_state.sql rename to sequencer/api/migrations/postgres/V13__consensus_state.sql diff --git a/sequencer/api/migrations/V14__state_tables.sql b/sequencer/api/migrations/postgres/V14__state_tables.sql similarity index 99% rename from sequencer/api/migrations/V14__state_tables.sql rename to sequencer/api/migrations/postgres/V14__state_tables.sql index d5704006c..4770f5ffc 100644 --- a/sequencer/api/migrations/V14__state_tables.sql +++ b/sequencer/api/migrations/postgres/V14__state_tables.sql @@ -34,4 +34,4 @@ ALTER TABLE ADD CONSTRAINT block_merkle_tree_pk PRIMARY KEY (path, created); -CREATE INDEX block_merkle_tree_created ON block_merkle_tree (created); +CREATE INDEX block_merkle_tree_created ON block_merkle_tree (created); \ No newline at end of file diff --git a/sequencer/api/migrations/V15__undecided_state.sql b/sequencer/api/migrations/postgres/V15__undecided_state.sql similarity index 100% rename from sequencer/api/migrations/V15__undecided_state.sql rename to sequencer/api/migrations/postgres/V15__undecided_state.sql diff --git a/sequencer/api/migrations/V16__merkle_root_columns.sql b/sequencer/api/migrations/postgres/V16__merkle_root_columns.sql similarity index 100% rename from sequencer/api/migrations/V16__merkle_root_columns.sql rename to sequencer/api/migrations/postgres/V16__merkle_root_columns.sql diff --git a/sequencer/api/migrations/V301__merkle_root_column_indexes.sql b/sequencer/api/migrations/postgres/V301__merkle_root_column_indexes.sql similarity index 100% rename from sequencer/api/migrations/V301__merkle_root_column_indexes.sql rename to sequencer/api/migrations/postgres/V301__merkle_root_column_indexes.sql diff --git a/sequencer/api/migrations/postgres/V302__update_state_tables_types.sql b/sequencer/api/migrations/postgres/V302__update_state_tables_types.sql new file mode 100644 index 000000000..10624f16d --- /dev/null +++ b/sequencer/api/migrations/postgres/V302__update_state_tables_types.sql @@ -0,0 +1,13 @@ + +ALTER TABLE fee_merkle_tree + ALTER COLUMN path TYPE JSONB USING array_to_json(path), + ALTER COLUMN children TYPE JSONB USING array_to_json(children); + + ALTER TABLE fee_merkle_tree RENAME COLUMN index TO idx; + + +ALTER TABLE block_merkle_tree + ALTER COLUMN path TYPE JSONB USING array_to_json(path), + ALTER COLUMN children TYPE JSONB USING array_to_json(children); + +ALTER TABLE block_merkle_tree RENAME COLUMN index TO idx; \ No newline at end of file diff --git a/sequencer/api/migrations/V31__drop_merklized_state_created_index.sql b/sequencer/api/migrations/postgres/V31__drop_merklized_state_created_index.sql similarity index 100% rename from sequencer/api/migrations/V31__drop_merklized_state_created_index.sql rename to sequencer/api/migrations/postgres/V31__drop_merklized_state_created_index.sql diff --git a/sequencer/api/migrations/V32__saved_proposals.sql b/sequencer/api/migrations/postgres/V32__saved_proposals.sql similarity index 100% rename from sequencer/api/migrations/V32__saved_proposals.sql rename to sequencer/api/migrations/postgres/V32__saved_proposals.sql diff --git a/sequencer/api/migrations/V33__chain_config_table.sql b/sequencer/api/migrations/postgres/V33__chain_config_table.sql similarity index 100% rename from sequencer/api/migrations/V33__chain_config_table.sql rename to sequencer/api/migrations/postgres/V33__chain_config_table.sql diff --git a/sequencer/api/migrations/V34__builder_urls.sql b/sequencer/api/migrations/postgres/V34__builder_urls.sql similarity index 100% rename from sequencer/api/migrations/V34__builder_urls.sql rename to sequencer/api/migrations/postgres/V34__builder_urls.sql diff --git a/sequencer/api/migrations/V35__add_upgrade_params.sql b/sequencer/api/migrations/postgres/V35__add_upgrade_params.sql similarity index 100% rename from sequencer/api/migrations/V35__add_upgrade_params.sql rename to sequencer/api/migrations/postgres/V35__add_upgrade_params.sql diff --git a/sequencer/api/migrations/V36__alter_merkle_root_column_expressions.sql b/sequencer/api/migrations/postgres/V36__alter_merkle_root_column_expressions.sql similarity index 100% rename from sequencer/api/migrations/V36__alter_merkle_root_column_expressions.sql rename to sequencer/api/migrations/postgres/V36__alter_merkle_root_column_expressions.sql diff --git a/sequencer/api/migrations/V38__add_quorum_proposal_hash.sql b/sequencer/api/migrations/postgres/V38__add_quorum_proposal_hash.sql similarity index 100% rename from sequencer/api/migrations/V38__add_quorum_proposal_hash.sql rename to sequencer/api/migrations/postgres/V38__add_quorum_proposal_hash.sql diff --git a/sequencer/api/migrations/V39__upgrade_certificate.sql b/sequencer/api/migrations/postgres/V39__upgrade_certificate.sql similarity index 100% rename from sequencer/api/migrations/V39__upgrade_certificate.sql rename to sequencer/api/migrations/postgres/V39__upgrade_certificate.sql diff --git a/sequencer/api/migrations/V40__anchor_leaf_chain.sql b/sequencer/api/migrations/postgres/V40__anchor_leaf_chain.sql similarity index 100% rename from sequencer/api/migrations/V40__anchor_leaf_chain.sql rename to sequencer/api/migrations/postgres/V40__anchor_leaf_chain.sql diff --git a/sequencer/api/migrations/V41__epoch_height.sql b/sequencer/api/migrations/postgres/V41__epoch_height.sql similarity index 100% rename from sequencer/api/migrations/V41__epoch_height.sql rename to sequencer/api/migrations/postgres/V41__epoch_height.sql diff --git a/sequencer/api/migrations/V42__index_quorum_proposal_leaf_hash.sql b/sequencer/api/migrations/postgres/V42__index_quorum_proposal_leaf_hash.sql similarity index 100% rename from sequencer/api/migrations/V42__index_quorum_proposal_leaf_hash.sql rename to sequencer/api/migrations/postgres/V42__index_quorum_proposal_leaf_hash.sql diff --git a/sequencer/api/migrations/sqlite/V102__network_config.sql b/sequencer/api/migrations/sqlite/V102__network_config.sql new file mode 100644 index 000000000..ad8390a97 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V102__network_config.sql @@ -0,0 +1,4 @@ +CREATE TABLE network_config ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + config JSONB +); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V103__consensus_state.sql b/sequencer/api/migrations/sqlite/V103__consensus_state.sql new file mode 100644 index 000000000..5f1c07593 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V103__consensus_state.sql @@ -0,0 +1,22 @@ +CREATE TABLE anchor_leaf ( + view BIGINT PRIMARY KEY, + leaf JSONB, + qc JSONB +); + +CREATE TABLE highest_voted_view ( + -- The ID is always set to 0. Setting it explicitly allows us to enforce with every insert or + -- update that there is only a single entry in this table: the latest known view. + id INT PRIMARY KEY, + view BIGINT +); + +CREATE TABLE da_proposal ( + view BIGINT PRIMARY KEY, + data JSONB +); + +CREATE TABLE vid_share ( + view BIGINT PRIMARY KEY, + data JSONB +); diff --git a/sequencer/api/migrations/sqlite/V104__state_tables.sql b/sequencer/api/migrations/sqlite/V104__state_tables.sql new file mode 100644 index 000000000..df47a7bda --- /dev/null +++ b/sequencer/api/migrations/sqlite/V104__state_tables.sql @@ -0,0 +1,25 @@ +CREATE TABLE IF NOT EXISTS hash ( + id INTEGER PRIMARY KEY AUTOINCREMENT, value JSONB NOT NULL UNIQUE +); + +CREATE TABLE fee_merkle_tree ( + path JSONB NOT NULL, + created BIGINT NOT NULL, + hash_id INT NOT NULL REFERENCES hash (id), + children JSONB, + children_bitvec BLOB, + idx JSONB, + entry JSONB, + PRIMARY KEY (path, created) +); + +CREATE TABLE block_merkle_tree ( + path JSONB NOT NULL, + created BIGINT NOT NULL, + hash_id INT NOT NULL REFERENCES hash (id), + children JSONB, + children_bitvec BLOB, + idx JSONB, + entry JSONB, + PRIMARY KEY (path, created) +); diff --git a/sequencer/api/migrations/sqlite/V105__undecided_state.sql b/sequencer/api/migrations/sqlite/V105__undecided_state.sql new file mode 100644 index 000000000..52930572c --- /dev/null +++ b/sequencer/api/migrations/sqlite/V105__undecided_state.sql @@ -0,0 +1,7 @@ +CREATE TABLE undecided_state ( + -- The ID is always set to 0. Setting it explicitly allows us to enforce with every insert or + -- update that there is only a single entry in this table: the latest known state. + id INT PRIMARY KEY, + leaves BLOB NOT NULL, + state BLOB NOT NULL +); diff --git a/sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql b/sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql new file mode 100644 index 000000000..5d3dbd982 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql @@ -0,0 +1,12 @@ +-- Add block_merkle_tree_root column as a generated column +ALTER TABLE header +ADD COLUMN block_merkle_tree_root TEXT +GENERATED ALWAYS AS (coalesce(json_extract(data, '$.block_merkle_tree_root'), json_extract(data, '$.fields.block_merkle_tree_root'))) STORED NOT NULL; + +-- Add fee_merkle_tree_root column as a generated column +ALTER TABLE header +ADD COLUMN fee_merkle_tree_root TEXT +GENERATED ALWAYS AS (coalesce(json_extract(data, '$.fee_merkle_tree_root'), json_extract(data, '$.fields.fee_merkle_tree_root'))) STORED NOT NULL; + +CREATE INDEX header_block_merkle_tree_root_idx ON header (block_merkle_tree_root); +CREATE INDEX header_fee_merkle_tree_root_idx ON header (fee_merkle_tree_root); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V107__saved_proposals.sql b/sequencer/api/migrations/sqlite/V107__saved_proposals.sql new file mode 100644 index 000000000..d51ccf70f --- /dev/null +++ b/sequencer/api/migrations/sqlite/V107__saved_proposals.sql @@ -0,0 +1,7 @@ +CREATE TABLE quorum_proposals ( + view BIGINT PRIMARY KEY, + data BLOB, + leaf_hash TEXT +); + +CREATE UNIQUE INDEX quorum_proposals_leaf_hash_idx ON quorum_proposals (leaf_hash); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V108__chain_config_table.sql b/sequencer/api/migrations/sqlite/V108__chain_config_table.sql new file mode 100644 index 000000000..c9bcae866 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V108__chain_config_table.sql @@ -0,0 +1,4 @@ +CREATE TABLE chain_config ( + commitment TEXT PRIMARY KEY, + data BLOB NOT NULL +); diff --git a/sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql b/sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql new file mode 100644 index 000000000..2becbc6f2 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql @@ -0,0 +1,4 @@ +CREATE TABLE upgrade_certificate ( + id bool PRIMARY KEY DEFAULT true, + data BLOB +); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V110__event_stream.sql b/sequencer/api/migrations/sqlite/V110__event_stream.sql new file mode 100644 index 000000000..0ca028763 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V110__event_stream.sql @@ -0,0 +1,4 @@ +CREATE TABLE event_stream ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + last_processed_view BIGINT +); diff --git a/sequencer/src/api.rs b/sequencer/src/api.rs index 4ca7046cd..3f547c981 100644 --- a/sequencer/src/api.rs +++ b/sequencer/src/api.rs @@ -9,8 +9,8 @@ use data_source::{CatchupDataSource, StakeTableDataSource, SubmitDataSource}; use derivative::Derivative; use espresso_types::{ retain_accounts, v0::traits::SequencerPersistence, v0_3::ChainConfig, AccountQueryData, - BlockMerkleTree, FeeAccount, FeeAccountProof, FeeMerkleTree, MockSequencerVersions, NodeState, - PubKey, Transaction, ValidatedState, + BlockMerkleTree, FeeAccount, FeeAccountProof, FeeMerkleTree, NodeState, PubKey, Transaction, + ValidatedState, }; use futures::{ future::{BoxFuture, Future, FutureExt}, @@ -20,7 +20,6 @@ use hotshot_events_service::events_source::{ EventFilterSet, EventsSource, EventsStreamer, StartupInfo, }; use hotshot_query_service::data_source::ExtensibleDataSource; -use hotshot_state_prover::service::light_client_genesis_from_stake_table; use hotshot_types::{ data::ViewNumber, event::Event, @@ -41,7 +40,7 @@ use self::data_source::{ HotShotConfigDataSource, NodeStateDataSource, PublicNetworkConfig, StateSignatureDataSource, }; use crate::{ - catchup::CatchupStorage, context::Consensus, network, state_signature::StateSigner, SeqTypes, + catchup::CatchupStorage, context::Consensus, state_signature::StateSigner, SeqTypes, SequencerApiVersion, SequencerContext, }; @@ -505,11 +504,13 @@ impl, V: Versions, P: SequencerPersistence> StateSig #[cfg(any(test, feature = "testing"))] pub mod test_helpers { - use std::time::Duration; - use committable::Committable; + use hotshot_state_prover::service::light_client_genesis_from_stake_table; + use std::time::Duration; use tokio::{spawn, time::sleep}; + use crate::network; + use espresso_types::MockSequencerVersions; use espresso_types::{ v0::traits::{NullEventConsumer, PersistenceOptions, StateCatchup}, MarketplaceVersion, NamespaceId, ValidatedState, @@ -1069,6 +1070,7 @@ mod api_tests { use data_source::testing::TestableSequencerDataSource; use endpoints::NamespaceProofQueryData; + use espresso_types::MockSequencerVersions; use espresso_types::{ traits::{EventConsumer, PersistenceOptions}, Header, Leaf, NamespaceId, @@ -1095,6 +1097,7 @@ mod api_tests { use vbs::version::StaticVersion; use super::{update::ApiEventConsumer, *}; + use crate::network; use crate::{ persistence::no_storage::NoStorage, testing::{wait_for_decide_on_handle, TestConfigBuilder}, @@ -2066,7 +2069,7 @@ mod test { .state(Default::default()) .status(Default::default()), ) - .persistences(persistence) + .persistences(persistence.clone()) .network_config(TestConfigBuilder::default().l1_url(l1).build()) .build(); let mut network = TestNetwork::new(config, MockSequencerVersions::new()).await; @@ -2123,12 +2126,7 @@ mod test { let port = pick_unused_port().expect("No ports free"); let anvil = Anvil::new().spawn(); let l1 = anvil.endpoint().parse().unwrap(); - let persistence: [_; NUM_NODES] = storage - .iter() - .map(::persistence_options) - .collect::>() - .try_into() - .unwrap(); + let config = TestNetworkConfigBuilder::default() .api_config( SqlDataSource::options(&storage[0], Options::with_port(port)) diff --git a/sequencer/src/api/sql.rs b/sequencer/src/api/sql.rs index fd9458b41..54f0970a5 100644 --- a/sequencer/src/api/sql.rs +++ b/sequencer/src/api/sql.rs @@ -64,6 +64,7 @@ impl SequencerDataSource for DataSource { if let Some(limit) = fetch_limit { builder = builder.with_rate_limit(limit); } + if let Some(delay) = active_fetch_delay { builder = builder.with_active_fetch_delay(delay); } @@ -455,12 +456,23 @@ mod impl_testable_data_source { use crate::api::{self, data_source::testing::TestableSequencerDataSource}; fn tmp_options(db: &TmpDb) -> Options { - Options { - port: Some(db.port()), - host: Some(db.host()), - user: Some("postgres".into()), - password: Some("password".into()), - ..Default::default() + #[cfg(not(feature = "embedded-db"))] + { + let opt = crate::persistence::sql::PostgresOptions { + port: Some(db.port()), + host: Some(db.host()), + user: Some("postgres".into()), + password: Some("password".into()), + ..Default::default() + }; + + opt.into() + } + + #[cfg(feature = "embedded-db")] + { + let opt = crate::persistence::sql::SqliteOptions { path: db.path() }; + opt.into() } } diff --git a/sequencer/src/bin/espresso-dev-node.rs b/sequencer/src/bin/espresso-dev-node.rs index 2a45ad7d4..a6e19d41c 100644 --- a/sequencer/src/bin/espresso-dev-node.rs +++ b/sequencer/src/bin/espresso-dev-node.rs @@ -541,9 +541,8 @@ mod tests { use espresso_types::{BlockMerkleTree, Header, SeqTypes, Transaction}; use ethers::{providers::Middleware, types::U256}; use futures::{StreamExt, TryStreamExt}; - use hotshot_query_service::{ - availability::{BlockQueryData, TransactionQueryData, VidCommonQueryData}, - data_source::sql::testing::TmpDb, + use hotshot_query_service::availability::{ + BlockQueryData, TransactionQueryData, VidCommonQueryData, }; use jf_merkle_tree::MerkleTreeScheme; use portpicker::pick_unused_port; @@ -580,20 +579,16 @@ mod tests { setup_test(); let builder_port = pick_unused_port().unwrap(); - let api_port = pick_unused_port().unwrap(); - let dev_node_port = pick_unused_port().unwrap(); - let instance = AnvilOptions::default().spawn().await; let l1_url = instance.url(); - let db = TmpDb::init().await; - let postgres_port = db.port(); + let tmp_dir = tempfile::tempdir().unwrap(); let process = CargoBuild::new() .bin("espresso-dev-node") - .features("testing") + .features("testing embedded-db") .current_target() .run() .unwrap() @@ -601,16 +596,13 @@ mod tests { .env("ESPRESSO_SEQUENCER_L1_PROVIDER", l1_url.to_string()) .env("ESPRESSO_BUILDER_PORT", builder_port.to_string()) .env("ESPRESSO_SEQUENCER_API_PORT", api_port.to_string()) - .env("ESPRESSO_SEQUENCER_POSTGRES_HOST", "localhost") .env("ESPRESSO_SEQUENCER_ETH_MNEMONIC", TEST_MNEMONIC) .env("ESPRESSO_DEPLOYER_ACCOUNT_INDEX", "0") .env("ESPRESSO_DEV_NODE_PORT", dev_node_port.to_string()) .env( - "ESPRESSO_SEQUENCER_POSTGRES_PORT", - postgres_port.to_string(), + "ESPRESSO_SEQUENCER_STORAGE_PATH", + tmp_dir.path().as_os_str(), ) - .env("ESPRESSO_SEQUENCER_POSTGRES_USER", "postgres") - .env("ESPRESSO_SEQUENCER_POSTGRES_PASSWORD", "password") .spawn() .unwrap(); @@ -853,7 +845,6 @@ mod tests { } drop(process); - drop(db); } async fn alt_chain_providers() -> (Vec, Vec) { @@ -895,12 +886,11 @@ mod tests { .collect::>() .join(","); - let db = TmpDb::init().await; - let postgres_port = db.port(); + let tmp_dir = tempfile::tempdir().unwrap(); let process = CargoBuild::new() .bin("espresso-dev-node") - .features("testing") + .features("testing embedded-db") .current_target() .run() .unwrap() @@ -908,20 +898,17 @@ mod tests { .env("ESPRESSO_SEQUENCER_L1_PROVIDER", l1_url.to_string()) .env("ESPRESSO_BUILDER_PORT", builder_port.to_string()) .env("ESPRESSO_SEQUENCER_API_PORT", api_port.to_string()) - .env("ESPRESSO_SEQUENCER_POSTGRES_HOST", "localhost") .env("ESPRESSO_SEQUENCER_ETH_MNEMONIC", TEST_MNEMONIC) .env("ESPRESSO_DEPLOYER_ACCOUNT_INDEX", "0") .env("ESPRESSO_DEV_NODE_PORT", dev_node_port.to_string()) - .env( - "ESPRESSO_SEQUENCER_POSTGRES_PORT", - postgres_port.to_string(), - ) - .env("ESPRESSO_SEQUENCER_POSTGRES_USER", "postgres") - .env("ESPRESSO_SEQUENCER_POSTGRES_PASSWORD", "password") .env( "ESPRESSO_DEPLOYER_ALT_CHAIN_PROVIDERS", alt_chains_env_value, ) + .env( + "ESPRESSO_SEQUENCER_STORAGE_PATH", + tmp_dir.path().as_os_str(), + ) .spawn() .unwrap(); @@ -1036,6 +1023,5 @@ mod tests { drop(process); drop(alt_providers); - drop(db); } } diff --git a/sequencer/src/block/full_payload/payload.rs b/sequencer/src/block/full_payload/payload.rs index bc1101887..bf2398c65 100644 --- a/sequencer/src/block/full_payload/payload.rs +++ b/sequencer/src/block/full_payload/payload.rs @@ -88,7 +88,6 @@ impl Payload { fn from_transactions_sync( transactions: impl IntoIterator>::Transaction> + Send, chain_config: ChainConfig, - _instance_state: &>::Instance, ) -> Result< (Self, >::Metadata), >::Error, @@ -102,7 +101,7 @@ impl Payload { // add each tx to its namespace let mut ns_builders = BTreeMap::::new(); for tx in transactions.into_iter() { - // accounting for block byte length limit + // accounting for block byte length limit block_byte_len += tx.size_in_block(!ns_builders.contains_key(&tx.namespace())); if block_byte_len > max_block_byte_len { tracing::warn!("transactions truncated to fit in maximum block byte length {max_block_byte_len}"); diff --git a/sequencer/src/block/namespace_payload/iter.rs b/sequencer/src/block/namespace_payload/iter.rs index 09da31b9a..cf136f76e 100644 --- a/sequencer/src/block/namespace_payload/iter.rs +++ b/sequencer/src/block/namespace_payload/iter.rs @@ -54,7 +54,7 @@ impl<'a> Iter<'a> { } } -impl<'a> Iterator for Iter<'a> { +impl Iterator for Iter<'_> { type Item = Index; fn next(&mut self) -> Option { diff --git a/sequencer/src/catchup.rs b/sequencer/src/catchup.rs index 99301a1a4..6d87f1cde 100644 --- a/sequencer/src/catchup.rs +++ b/sequencer/src/catchup.rs @@ -4,11 +4,10 @@ use anyhow::{bail, Context}; use async_trait::async_trait; use committable::Commitment; use committable::Committable; +use espresso_types::traits::SequencerPersistence; use espresso_types::{ - v0::traits::{PersistenceOptions, StateCatchup}, - v0_3::ChainConfig, - BackoffParams, BlockMerkleTree, FeeAccount, FeeAccountProof, FeeMerkleCommitment, - FeeMerkleTree, Leaf, NodeState, + v0::traits::StateCatchup, v0_3::ChainConfig, BackoffParams, BlockMerkleTree, FeeAccount, + FeeAccountProof, FeeMerkleCommitment, FeeMerkleTree, Leaf, NodeState, }; use futures::future::{Future, FutureExt}; use hotshot_types::{ @@ -53,10 +52,10 @@ impl Client { /// A catchup implementation that falls back to a remote provider, but prefers a local provider when /// supported. pub(crate) async fn local_and_remote( - local_opt: impl PersistenceOptions, + persistence: impl SequencerPersistence, remote: impl StateCatchup + 'static, ) -> Arc { - match local_opt.create_catchup_provider(*remote.backoff()).await { + match persistence.into_catchup_provider(*remote.backoff()) { Ok(local) => Arc::new(vec![local, Arc::new(remote)]), Err(err) => { tracing::warn!("not using local catchup: {err:#}"); diff --git a/sequencer/src/lib.rs b/sequencer/src/lib.rs index 3bec4535c..79475b6ae 100644 --- a/sequencer/src/lib.rs +++ b/sequencer/src/lib.rs @@ -7,17 +7,17 @@ mod external_event_handler; pub mod options; pub mod state_signature; +mod restart_tests; + mod message_compat_tests; use anyhow::Context; -use async_lock::RwLock; use catchup::StatePeers; use context::{ProposalFetcherConfig, SequencerContext}; use espresso_types::{ - traits::EventConsumer, BackoffParams, L1Client, L1ClientOptions, NodeState, PubKey, SeqTypes, + traits::EventConsumer, BackoffParams, L1ClientOptions, NodeState, PubKey, SeqTypes, SolverAuctionResultsProvider, ValidatedState, }; -use ethers::types::U256; use futures::FutureExt; use genesis::L1Finalized; use hotshot::traits::election::static_committee::StaticCommittee; @@ -33,7 +33,7 @@ use url::Url; pub mod persistence; pub mod state; use derivative::Derivative; -use espresso_types::v0::traits::{PersistenceOptions, SequencerPersistence}; +use espresso_types::v0::traits::SequencerPersistence; pub use genesis::Genesis; use hotshot::traits::implementations::{ derive_libp2p_multiaddr, CombinedNetworks, GossipConfig, Libp2pNetwork, RequestResponseConfig, @@ -51,13 +51,11 @@ use hotshot_orchestrator::client::OrchestratorClient; use hotshot_types::{ data::ViewNumber, light_client::{StateKeyPair, StateSignKey}, - network::NetworkConfig, signature_key::{BLSPrivKey, BLSPubKey}, traits::{ metrics::Metrics, network::{ConnectedNetwork, Topic}, node_implementation::{NodeImplementation, NodeType, Versions}, - signature_key::{BuilderSignatureKey, StakeTableEntryType}, }, utils::BuilderCommitment, ValidatorConfig, @@ -65,10 +63,13 @@ use hotshot_types::{ pub use options::Options; use serde::{Deserialize, Serialize}; use std::time::Duration; -use std::{collections::BTreeMap, fmt::Debug, marker::PhantomData}; +use std::{fmt::Debug, marker::PhantomData}; use vbs::version::{StaticVersion, StaticVersionType}; pub mod network; +mod run; +pub use run::main; + /// The Sequencer node is generic over the hotshot CommChannel. #[derive(Derivative, Serialize, Deserialize)] #[derivative( @@ -187,19 +188,19 @@ pub struct L1Params { } #[allow(clippy::too_many_arguments)] -pub async fn init_node( +pub async fn init_node( genesis: Genesis, network_params: NetworkParams, metrics: &dyn Metrics, - persistence_opt: P, + persistence: P, l1_params: L1Params, seq_versions: V, event_consumer: impl EventConsumer + 'static, is_da: bool, identity: Identity, - marketplace_config: MarketplaceConfig>, + marketplace_config: MarketplaceConfig>, proposal_fetcher_config: ProposalFetcherConfig, -) -> anyhow::Result> { +) -> anyhow::Result> { // Expose git information via status API. metrics .text_family( @@ -300,7 +301,6 @@ pub async fn init_node( // Print the libp2p public key info!("Starting Libp2p with PeerID: {}", libp2p_public_key); - let persistence = persistence_opt.clone().create().await?; let (mut network_config, wait_for_orchestrator) = match ( persistence.load_config().await?, network_params.config_peers, @@ -517,7 +517,7 @@ pub async fn init_node( genesis_state, l1_genesis: Some(l1_genesis), peers: catchup::local_and_remote( - persistence_opt, + persistence.clone(), StatePeers::::from_urls( network_params.state_peers, network_params.catchup_backoff, @@ -558,16 +558,21 @@ pub fn empty_builder_commitment() -> BuilderCommitment { #[cfg(any(test, feature = "testing"))] pub mod testing { - use std::{collections::HashMap, time::Duration}; + use std::{ + collections::{BTreeMap, HashMap}, + time::Duration, + }; + use async_lock::RwLock; use catchup::NullStateCatchup; use committable::Committable; use espresso_types::{ eth_signature_key::EthKeyPair, v0::traits::{EventConsumer, NullEventConsumer, PersistenceOptions, StateCatchup}, - Event, FeeAccount, Leaf, MarketplaceVersion, Payload, PubKey, SeqTypes, Transaction, - Upgrade, + Event, FeeAccount, L1Client, Leaf, MarketplaceVersion, NetworkConfig, Payload, PubKey, + SeqTypes, Transaction, Upgrade, }; + use ethers::types::U256; use futures::{ future::join_all, stream::{Stream, StreamExt}, @@ -583,6 +588,7 @@ pub mod testing { use hotshot_testing::block_builder::{ BuilderTask, SimpleBuilderImplementation, TestBuilderImplementation, }; + use hotshot_types::traits::signature_key::StakeTableEntryType; use hotshot_types::{ event::LeafInfo, light_client::{CircuitField, StateKeyPair, StateVerKey}, @@ -590,6 +596,7 @@ pub mod testing { block_contents::{vid_commitment, BlockHeader, EncodeBytes}, metrics::NoMetrics, node_implementation::ConsensusTime, + signature_key::BuilderSignatureKey, stake_table::StakeTableScheme, }, HotShotConfig, PeerConfig, @@ -964,7 +971,7 @@ pub mod testing { &self, i: usize, mut state: ValidatedState, - persistence_opt: P, + mut persistence_opt: P, catchup: impl StateCatchup + 'static, metrics: &dyn Metrics, stake_table_capacity: u64, @@ -1003,11 +1010,13 @@ pub mod testing { let builder_account = Self::builder_key().fee_account(); tracing::info!(%builder_account, "prefunding builder account"); state.prefund_account(builder_account, U256::max_value().into()); + + let persistence = persistence_opt.create().await.unwrap(); let node_state = NodeState::new( i as u64, state.chain_config.resolve().unwrap_or_default(), L1Client::new(self.l1_url.clone()).await.unwrap(), - catchup::local_and_remote(persistence_opt.clone(), catchup).await, + catchup::local_and_remote(persistence.clone(), catchup).await, V::Base::VERSION, ) .with_current_version(V::Base::version()) @@ -1038,6 +1047,8 @@ pub mod testing { state_key = %my_peer_config.state_ver_key, "starting node", ); + + let persistence = persistence_opt.create().await.unwrap(); SequencerContext::init( NetworkConfig { config, @@ -1048,7 +1059,7 @@ pub mod testing { validator_config, memberships, node_state, - persistence_opt.create().await.unwrap(), + persistence, network, self.state_relay_url.clone(), metrics, diff --git a/sequencer/src/main.rs b/sequencer/src/main.rs index c49492998..ef15b568e 100644 --- a/sequencer/src/main.rs +++ b/sequencer/src/main.rs @@ -1,379 +1,4 @@ -use std::sync::Arc; - -use clap::Parser; -use espresso_types::{ - traits::NullEventConsumer, FeeVersion, MarketplaceVersion, SequencerVersions, - SolverAuctionResultsProvider, V0_0, -}; -use futures::future::FutureExt; -use hotshot::MarketplaceConfig; -use hotshot_types::traits::{metrics::NoMetrics, node_implementation::Versions}; -use sequencer::{ - api::{self, data_source::DataSourceOptions}, - context::SequencerContext, - init_node, network, - options::{Modules, Options}, - persistence, Genesis, L1Params, NetworkParams, -}; -use vbs::version::StaticVersionType; - #[tokio::main] -async fn main() -> anyhow::Result<()> { - let opt = Options::parse(); - opt.logging.init(); - - let modules = opt.modules(); - tracing::warn!(?modules, "sequencer starting up"); - - let genesis = Genesis::from_file(&opt.genesis_file)?; - - // validate that the fee contract is a proxy and panic otherwise - genesis - .validate_fee_contract(opt.l1_provider_url.to_string()) - .await - .unwrap(); - - tracing::info!(?genesis, "genesis"); - - let base = genesis.base_version; - let upgrade = genesis.upgrade_version; - - match (base, upgrade) { - (FeeVersion::VERSION, MarketplaceVersion::VERSION) => { - run( - genesis, - modules, - opt, - SequencerVersions::::new(), - ) - .await - } - (FeeVersion::VERSION, _) => { - run( - genesis, - modules, - opt, - SequencerVersions::::new(), - ) - .await - } - (MarketplaceVersion::VERSION, _) => { - run( - genesis, - modules, - opt, - SequencerVersions::::new(), - ) - .await - } - _ => panic!( - "Invalid base ({base}) and upgrade ({upgrade}) versions specified in the toml file." - ), - } -} - -async fn run( - genesis: Genesis, - mut modules: Modules, - opt: Options, - versions: V, -) -> anyhow::Result<()> -where - V: Versions, -{ - if let Some(storage) = modules.storage_fs.take() { - run_with_storage(genesis, modules, opt, storage, versions).await - } else if let Some(storage) = modules.storage_sql.take() { - run_with_storage(genesis, modules, opt, storage, versions).await - } else { - // Persistence is required. If none is provided, just use the local file system. - run_with_storage( - genesis, - modules, - opt, - persistence::fs::Options::default(), - versions, - ) - .await - } -} - -async fn run_with_storage( - genesis: Genesis, - modules: Modules, - opt: Options, - storage_opt: S, - versions: V, -) -> anyhow::Result<()> -where - S: DataSourceOptions, - V: Versions, -{ - let ctx = init_with_storage(genesis, modules, opt, storage_opt, versions).await?; - - // Start doing consensus. - ctx.start_consensus().await; - ctx.join().await; - - Ok(()) -} - -async fn init_with_storage( - genesis: Genesis, - modules: Modules, - opt: Options, - storage_opt: S, - versions: V, -) -> anyhow::Result> -where - S: DataSourceOptions, - V: Versions, -{ - let (private_staking_key, private_state_key) = opt.private_keys()?; - let l1_params = L1Params { - url: opt.l1_provider_url, - options: opt.l1_options, - }; - - let network_params = NetworkParams { - cdn_endpoint: opt.cdn_endpoint, - libp2p_advertise_address: opt.libp2p_advertise_address, - libp2p_bind_address: opt.libp2p_bind_address, - libp2p_bootstrap_nodes: opt.libp2p_bootstrap_nodes, - orchestrator_url: opt.orchestrator_url, - state_relay_server_url: opt.state_relay_server_url, - public_api_url: opt.public_api_url, - private_staking_key, - private_state_key, - state_peers: opt.state_peers, - config_peers: opt.config_peers, - catchup_backoff: opt.catchup_backoff, - libp2p_history_gossip: opt.libp2p_history_gossip, - libp2p_history_length: opt.libp2p_history_length, - libp2p_max_ihave_length: opt.libp2p_max_ihave_length, - libp2p_max_ihave_messages: opt.libp2p_max_ihave_messages, - libp2p_max_gossip_transmit_size: opt.libp2p_max_gossip_transmit_size, - libp2p_max_direct_transmit_size: opt.libp2p_max_direct_transmit_size, - libp2p_mesh_outbound_min: opt.libp2p_mesh_outbound_min, - libp2p_mesh_n: opt.libp2p_mesh_n, - libp2p_mesh_n_high: opt.libp2p_mesh_n_high, - libp2p_heartbeat_interval: opt.libp2p_heartbeat_interval, - libp2p_mesh_n_low: opt.libp2p_mesh_n_low, - libp2p_published_message_ids_cache_time: opt.libp2p_published_message_ids_cache_time, - libp2p_iwant_followup_time: opt.libp2p_iwant_followup_time, - libp2p_max_messages_per_rpc: opt.libp2p_max_messages_per_rpc, - libp2p_gossip_retransmission: opt.libp2p_gossip_retransmission, - libp2p_flood_publish: opt.libp2p_flood_publish, - libp2p_duplicate_cache_time: opt.libp2p_duplicate_cache_time, - libp2p_fanout_ttl: opt.libp2p_fanout_ttl, - libp2p_heartbeat_initial_delay: opt.libp2p_heartbeat_initial_delay, - libp2p_gossip_factor: opt.libp2p_gossip_factor, - libp2p_gossip_lazy: opt.libp2p_gossip_lazy, - }; - - let marketplace_config = MarketplaceConfig { - auction_results_provider: Arc::new(SolverAuctionResultsProvider { - url: opt.auction_results_solver_url, - marketplace_path: opt.marketplace_solver_path, - results_path: opt.auction_results_path, - }), - fallback_builder_url: opt.fallback_builder_url, - }; - let proposal_fetcher_config = opt.proposal_fetcher_config; - - // Initialize HotShot. If the user requested the HTTP module, we must initialize the handle in - // a special way, in order to populate the API with consensus metrics. Otherwise, we initialize - // the handle directly, with no metrics. - let ctx = match modules.http { - Some(http_opt) => { - // Add optional API modules as requested. - let mut http_opt = api::Options::from(http_opt); - if let Some(query) = modules.query { - http_opt = storage_opt.enable_query_module(http_opt, query); - } - if let Some(submit) = modules.submit { - http_opt = http_opt.submit(submit); - } - if let Some(status) = modules.status { - http_opt = http_opt.status(status); - } - if let Some(state) = modules.state { - http_opt = http_opt.state(state); - } - if let Some(catchup) = modules.catchup { - http_opt = http_opt.catchup(catchup); - } - - if let Some(hotshot_events) = modules.hotshot_events { - http_opt = http_opt.hotshot_events(hotshot_events); - } - if let Some(explorer) = modules.explorer { - http_opt = http_opt.explorer(explorer); - } - if let Some(config) = modules.config { - http_opt = http_opt.config(config); - } - - http_opt - .serve(move |metrics, consumer| { - async move { - init_node( - genesis, - network_params, - &*metrics, - storage_opt, - l1_params, - versions, - consumer, - opt.is_da, - opt.identity, - marketplace_config, - proposal_fetcher_config, - ) - .await - } - .boxed() - }) - .await? - } - None => { - init_node( - genesis, - network_params, - &NoMetrics, - storage_opt, - l1_params, - versions, - NullEventConsumer, - opt.is_da, - opt.identity, - marketplace_config, - proposal_fetcher_config, - ) - .await? - } - }; - - Ok(ctx) -} - -mod restart_tests; - -#[cfg(test)] -mod test { - use std::time::Duration; - - use tokio::spawn; - - use espresso_types::{MockSequencerVersions, PubKey}; - use hotshot_types::{light_client::StateKeyPair, traits::signature_key::SignatureKey}; - use portpicker::pick_unused_port; - use sequencer::{ - api::options::{Http, Status}, - genesis::{L1Finalized, StakeTableConfig}, - persistence::fs, - SequencerApiVersion, - }; - use sequencer_utils::test_utils::setup_test; - use surf_disco::{error::ClientError, Client, Url}; - use tempfile::TempDir; - use vbs::version::Version; - - use super::*; - - #[tokio::test(flavor = "multi_thread")] - async fn test_startup_before_orchestrator() { - setup_test(); - - let (pub_key, priv_key) = PubKey::generated_from_seed_indexed([0; 32], 0); - let state_key = StateKeyPair::generate_from_seed_indexed([0; 32], 0); - - let port = pick_unused_port().unwrap(); - let tmp = TempDir::new().unwrap(); - - let genesis_file = tmp.path().join("genesis.toml"); - let genesis = Genesis { - chain_config: Default::default(), - stake_table: StakeTableConfig { capacity: 10 }, - accounts: Default::default(), - l1_finalized: L1Finalized::Number { number: 0 }, - header: Default::default(), - upgrades: Default::default(), - base_version: Version { major: 0, minor: 1 }, - upgrade_version: Version { major: 0, minor: 2 }, - }; - genesis.to_file(&genesis_file).unwrap(); - - let modules = Modules { - http: Some(Http::with_port(port)), - status: Some(Status), - ..Default::default() - }; - let opt = Options::parse_from([ - "sequencer", - "--private-staking-key", - &priv_key.to_tagged_base64().expect("valid key").to_string(), - "--private-state-key", - &state_key - .sign_key_ref() - .to_tagged_base64() - .expect("valid key") - .to_string(), - "--genesis-file", - &genesis_file.display().to_string(), - ]); - - // Start the sequencer in a background task. This process will not complete, because it will - // be waiting for the orchestrator, but it should at least start up the API server and - // populate some metrics. - tracing::info!(port, "starting sequencer"); - let task = spawn(async move { - if let Err(err) = init_with_storage( - genesis, - modules, - opt, - fs::Options::new(tmp.path().into()), - MockSequencerVersions::new(), - ) - .await - { - tracing::error!("failed to start sequencer: {err:#}"); - } - }); - - // The healthcheck should eventually come up even though the node is waiting for the - // orchestrator. - tracing::info!("waiting for API to start"); - let url: Url = format!("http://localhost:{port}").parse().unwrap(); - let client = Client::::new(url.clone()); - assert!(client.connect(Some(Duration::from_secs(60))).await); - client.get::<()>("healthcheck").send().await.unwrap(); - - // The metrics should include information about the node and software version. surf-disco - // doesn't currently support fetching a plaintext file, so we use a raw reqwest client. - let res = reqwest::get(url.join("/status/metrics").unwrap()) - .await - .unwrap(); - assert!(res.status().is_success(), "{}", res.status()); - let metrics = res.text().await.unwrap(); - let lines = metrics.lines().collect::>(); - assert!( - lines.contains(&format!("consensus_node{{key=\"{pub_key}\"}} 1").as_str()), - "{lines:#?}" - ); - assert!( - lines.contains( - &format!( - "consensus_version{{desc=\"{}\",rev=\"{}\",timestamp=\"{}\"}} 1", - env!("VERGEN_GIT_DESCRIBE"), - env!("VERGEN_GIT_SHA"), - env!("VERGEN_GIT_COMMIT_TIMESTAMP"), - ) - .as_str() - ), - "{lines:#?}" - ); - - task.abort(); - } +pub async fn main() -> anyhow::Result<()> { + sequencer::main().await } diff --git a/sequencer/src/persistence/fs.rs b/sequencer/src/persistence/fs.rs index 8a492d2ff..2f7167808 100644 --- a/sequencer/src/persistence/fs.rs +++ b/sequencer/src/persistence/fs.rs @@ -62,10 +62,13 @@ impl Options { impl PersistenceOptions for Options { type Persistence = Persistence; - async fn create(self) -> anyhow::Result { + async fn create(&mut self) -> anyhow::Result { + let path = self.path.clone(); + let store_undecided_state = self.store_undecided_state; + Ok(Persistence { - store_undecided_state: self.store_undecided_state, - inner: Arc::new(RwLock::new(Inner { path: self.path })), + store_undecided_state, + inner: Arc::new(RwLock::new(Inner { path })), }) } diff --git a/sequencer/src/persistence/no_storage.rs b/sequencer/src/persistence/no_storage.rs index cf6394eed..1421effc5 100644 --- a/sequencer/src/persistence/no_storage.rs +++ b/sequencer/src/persistence/no_storage.rs @@ -29,7 +29,7 @@ pub struct Options; impl PersistenceOptions for Options { type Persistence = NoStorage; - async fn create(self) -> anyhow::Result { + async fn create(&mut self) -> anyhow::Result { Ok(NoStorage) } diff --git a/sequencer/src/persistence/sql.rs b/sequencer/src/persistence/sql.rs index a736d1c0a..1dd8771a0 100644 --- a/sequencer/src/persistence/sql.rs +++ b/sequencer/src/persistence/sql.rs @@ -3,17 +3,18 @@ use async_trait::async_trait; use clap::Parser; use committable::Committable; use derivative::Derivative; +use derive_more::derive::{From, Into}; use espresso_types::{ parse_duration, v0::traits::{EventConsumer, PersistenceOptions, SequencerPersistence, StateCatchup}, BackoffParams, Leaf, NetworkConfig, Payload, }; use futures::stream::StreamExt; -use hotshot_query_service::data_source::storage::sql::Write; +use hotshot_query_service::data_source::storage::sql::{syntax_helpers::MAX_FN, Db}; use hotshot_query_service::data_source::{ storage::{ pruning::PrunerCfg, - sql::{include_migrations, query_as, Config, SqlStorage, Transaction}, + sql::{include_migrations, query_as, Config, SqlStorage}, }, Transaction as _, VersionedDataSource, }; @@ -31,29 +32,14 @@ use hotshot_types::{ use jf_vid::VidScheme; use sqlx::Row; use sqlx::{query, Executor}; -use std::sync::Arc; -use std::{collections::BTreeMap, time::Duration}; +use std::{collections::BTreeMap, path::PathBuf, str::FromStr, sync::Arc, time::Duration}; use crate::{catchup::SqlStateCatchup, SeqTypes, ViewNumber}; /// Options for Postgres-backed persistence. #[derive(Parser, Clone, Derivative, Default)] #[derivative(Debug)] -pub struct Options { - /// Postgres URI. - /// - /// This is a shorthand for setting a number of other options all at once. The URI has the - /// following format ([brackets] indicate optional segments): - /// - /// postgres[ql]://[username[:password]@][host[:port],]/database[?parameter_list] - /// - /// Options set explicitly via other env vars or flags will take precedence, so you can use this - /// URI to set a baseline and then use other parameters to override or add configuration. In - /// addition, there are some parameters which cannot be set via the URI, such as TLS. - // Hide from debug output since may contain sensitive data. - #[derivative(Debug = "ignore")] - pub(crate) uri: Option, - +pub struct PostgresOptions { /// Hostname for the remote Postgres database server. #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_HOST")] pub(crate) host: Option, @@ -79,6 +65,59 @@ pub struct Options { /// Use TLS for an encrypted connection to the database. #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_USE_TLS")] pub(crate) use_tls: bool, +} + +#[derive(Parser, Clone, Derivative, Default, From, Into)] +#[derivative(Debug)] +pub struct SqliteOptions { + /// Base directory for the SQLite database. + /// The SQLite file will be created in the `sqlite` subdirectory with filename as `database`. + #[clap( + long, + env = "ESPRESSO_SEQUENCER_STORAGE_PATH", + value_parser = build_sqlite_path + )] + pub(crate) path: PathBuf, +} + +pub fn build_sqlite_path(path: &str) -> anyhow::Result { + let sub_dir = PathBuf::from_str(path)?.join("sqlite"); + + // if `sqlite` sub dir does not exist then create it + if !sub_dir.exists() { + std::fs::create_dir_all(&sub_dir) + .with_context(|| format!("failed to create directory: {:?}", sub_dir))?; + } + + Ok(sub_dir.join("database")) +} + +/// Options for database-backed persistence, supporting both Postgres and SQLite. +#[derive(Parser, Clone, Derivative, Default, From, Into)] +#[derivative(Debug)] +pub struct Options { + #[cfg(not(feature = "embedded-db"))] + #[clap(flatten)] + pub(crate) postgres_options: PostgresOptions, + + #[cfg(feature = "embedded-db")] + #[clap(flatten)] + pub(crate) sqlite_options: SqliteOptions, + + /// Database URI for Postgres or SQLite. + /// + /// This is a shorthand for setting a number of other options all at once. The URI has the + /// following format ([brackets] indicate optional segments): + /// + /// - **Postgres:** `postgres[ql]://[username[:password]@][host[:port],]/database[?parameter_list]` + /// - **SQLite:** `sqlite://path/to/db.sqlite` + /// + /// Options set explicitly via other env vars or flags will take precedence, so you can use this + /// URI to set a baseline and then use other parameters to override or add configuration. In + /// addition, there are some parameters which cannot be set via the URI, such as TLS. + // Hide from debug output since may contain sensitive data. + #[derivative(Debug = "ignore")] + pub(crate) uri: Option, /// This will enable the pruner and set the default pruning parameters unless provided. /// Default parameters: @@ -123,7 +162,7 @@ pub struct Options { /// /// Any connection which has been open and unused longer than this duration will be /// automatically closed to reduce load on the server. - #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_IDLE_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "10m")] + #[clap(long, env = "ESPRESSO_SEQUENCER_DATABASE_IDLE_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "10m")] pub(crate) idle_connection_timeout: Duration, /// The maximum lifetime of a database connection. @@ -132,9 +171,12 @@ pub struct Options { /// (and, if needed, replaced), even if it is otherwise healthy. It is good practice to refresh /// even healthy connections once in a while (e.g. daily) in case of resource leaks in the /// server implementation. - #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "30m")] + #[clap(long, env = "ESPRESSO_SEQUENCER_DATABASE_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "30m")] pub(crate) connection_timeout: Duration, + #[clap(long, env = "ESPRESSO_SEQUENCER_DATABASE_SLOW_STATEMENT_THRESHOLD", value_parser = parse_duration, default_value = "1s")] + pub(crate) slow_statement_threshold: Duration, + /// The minimum number of database connections to maintain at any time. /// /// The database client will, to the best of its ability, maintain at least `min` open @@ -142,7 +184,7 @@ pub struct Options { /// connections when at least this many simultaneous connections are frequently needed. #[clap( long, - env = "ESPRESSO_SEQUENCER_POSTGRES_MIN_CONNECTIONS", + env = "ESPRESSO_SEQUENCER_DATABASE_MIN_CONNECTIONS", default_value = "0" )] pub(crate) min_connections: u32, @@ -153,41 +195,162 @@ pub struct Options { /// (or begin a transaction) will block until one of the existing connections is released. #[clap( long, - env = "ESPRESSO_SEQUENCER_POSTGRES_MAX_CONNECTIONS", + env = "ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS", default_value = "25" )] pub(crate) max_connections: u32, -} -impl TryFrom for Config { - type Error = anyhow::Error; + // Keep the database connection pool when persistence is created, + // allowing it to be reused across multiple instances instead of creating + // a new pool each time such as for API, consensus storage etc + // This also ensures all storage instances adhere to the MAX_CONNECTIONS limit if set + // + // Note: Cloning the `Pool` is lightweight and efficient because it simply + // creates a new reference-counted handle to the underlying pool state. + #[clap(skip)] + pub(crate) pool: Option>, +} - fn try_from(opt: Options) -> Result { - let mut cfg = match opt.uri { - Some(uri) => uri.parse()?, - None => Self::default(), - }; - cfg = cfg.migrations(include_migrations!("$CARGO_MANIFEST_DIR/api/migrations")); +#[cfg(not(feature = "embedded-db"))] +impl From for Config { + fn from(opt: PostgresOptions) -> Self { + let mut cfg = Config::default(); if let Some(host) = opt.host { cfg = cfg.host(host); } + if let Some(port) = opt.port { cfg = cfg.port(port); } + if let Some(database) = &opt.database { cfg = cfg.database(database); } + if let Some(user) = &opt.user { cfg = cfg.user(user); } + if let Some(password) = &opt.password { cfg = cfg.password(password); } + if opt.use_tls { cfg = cfg.tls(); } + cfg = cfg.max_connections(20); + cfg = cfg.idle_connection_timeout(Duration::from_secs(120)); + cfg = cfg.connection_timeout(Duration::from_secs(10240)); + cfg = cfg.slow_statement_threshold(Duration::from_secs(1)); + + cfg + } +} + +#[cfg(feature = "embedded-db")] +impl From for Config { + fn from(opt: SqliteOptions) -> Self { + let mut cfg = Config::default(); + + cfg = cfg.db_path(opt.path); + cfg = cfg.max_connections(20); + cfg = cfg.idle_connection_timeout(Duration::from_secs(120)); + cfg = cfg.connection_timeout(Duration::from_secs(10240)); + cfg = cfg.slow_statement_threshold(Duration::from_secs(2)); + cfg + } +} + +#[cfg(not(feature = "embedded-db"))] +impl From for Options { + fn from(opt: PostgresOptions) -> Self { + Options { + postgres_options: opt, + max_connections: 20, + idle_connection_timeout: Duration::from_secs(120), + connection_timeout: Duration::from_secs(10240), + slow_statement_threshold: Duration::from_secs(1), + ..Default::default() + } + } +} + +#[cfg(feature = "embedded-db")] +impl From for Options { + fn from(opt: SqliteOptions) -> Self { + Options { + sqlite_options: opt, + max_connections: 10, + idle_connection_timeout: Duration::from_secs(120), + connection_timeout: Duration::from_secs(10240), + slow_statement_threshold: Duration::from_secs(1), + ..Default::default() + } + } +} +impl TryFrom for Config { + type Error = anyhow::Error; + + fn try_from(opt: Options) -> Result { + let mut cfg = match opt.uri { + Some(uri) => uri.parse()?, + None => Self::default(), + }; + + if let Some(pool) = opt.pool { + cfg = cfg.pool(pool); + } + + cfg = cfg.max_connections(opt.max_connections); + cfg = cfg.idle_connection_timeout(opt.idle_connection_timeout); + cfg = cfg.min_connections(opt.min_connections); + cfg = cfg.connection_timeout(opt.connection_timeout); + cfg = cfg.slow_statement_threshold(opt.slow_statement_threshold); + + #[cfg(not(feature = "embedded-db"))] + { + cfg = cfg.migrations(include_migrations!( + "$CARGO_MANIFEST_DIR/api/migrations/postgres" + )); + + let pg_options = opt.postgres_options; + + if let Some(host) = pg_options.host { + cfg = cfg.host(host); + } + + if let Some(port) = pg_options.port { + cfg = cfg.port(port); + } + + if let Some(database) = &pg_options.database { + cfg = cfg.database(database); + } + + if let Some(user) = &pg_options.user { + cfg = cfg.user(user); + } + + if let Some(password) = &pg_options.password { + cfg = cfg.password(password); + } + + if pg_options.use_tls { + cfg = cfg.tls(); + } + } + + #[cfg(feature = "embedded-db")] + { + cfg = cfg.migrations(include_migrations!( + "$CARGO_MANIFEST_DIR/api/migrations/sqlite" + )); + + cfg = cfg.db_path(opt.sqlite_options.path); + } + if opt.prune { cfg = cfg.pruner_cfg(PrunerCfg::from(opt.pruning))?; } @@ -269,6 +432,7 @@ impl From for PrunerCfg { if let Some(interval) = opt.interval { cfg = cfg.with_interval(interval); } + cfg } } @@ -277,12 +441,15 @@ impl From for PrunerCfg { impl PersistenceOptions for Options { type Persistence = Persistence; - async fn create(self) -> anyhow::Result { + async fn create(&mut self) -> anyhow::Result { + let store_undecided_state = self.store_undecided_state; + let config = self.clone().try_into()?; let persistence = Persistence { - store_undecided_state: self.store_undecided_state, - db: SqlStorage::connect(self.try_into()?).await?, + store_undecided_state, + db: SqlStorage::connect(config).await?, }; persistence.migrate_quorum_proposal_leaf_hashes().await?; + self.pool = Some(persistence.db.pool()); Ok(persistence) } @@ -293,6 +460,7 @@ impl PersistenceOptions for Options { } /// Postgres-backed persistence. +#[derive(Clone)] pub struct Persistence { db: SqlStorage, store_undecided_state: bool, @@ -307,10 +475,13 @@ impl Persistence { /// and if so we populate the column manually. async fn migrate_quorum_proposal_leaf_hashes(&self) -> anyhow::Result<()> { let mut tx = self.db.write().await?; + let mut proposals = tx.fetch("SELECT * FROM quorum_proposals"); + let mut updates = vec![]; while let Some(row) = proposals.next().await { let row = row?; + let hash: Option = row.try_get("leaf_hash")?; if hash.is_none() { let view: i64 = row.try_get("view")?; @@ -327,6 +498,7 @@ impl Persistence { tx.upsert("quorum_proposals", ["view", "leaf_hash"], ["view"], updates) .await?; + tx.commit().await } } @@ -359,11 +531,11 @@ impl SequencerPersistence for Persistence { } async fn save_config(&self, cfg: &NetworkConfig) -> anyhow::Result<()> { - tracing::info!("saving config to Postgres"); + tracing::info!("saving config to database"); let json = serde_json::to_value(cfg)?; let mut tx = self.db.write().await?; - tx.execute_one_with_retries("INSERT INTO network_config (config) VALUES ($1)", (json,)) + tx.execute(query("INSERT INTO network_config (config) VALUES ($1)").bind(json)) .await?; tx.commit().await } @@ -402,8 +574,8 @@ impl SequencerPersistence for Persistence { // Generate an event for the new leaves and, only if it succeeds, clean up data we no longer // need. let consumer = dyn_clone::clone(consumer); - let tx = self.db.write().await?; - if let Err(err) = collect_garbage(tx, view, consumer).await { + + if let Err(err) = collect_garbage(self, view, consumer).await { // GC/event processing failure is not an error, since by this point we have at least // managed to persist the decided leaves successfully, and GC will just run again at the // next decide. Log an error but do not return it. @@ -600,13 +772,14 @@ impl SequencerPersistence for Persistence { if !matches!(action, HotShotAction::Propose | HotShotAction::Vote) { return Ok(()); } - let stmt = " - INSERT INTO highest_voted_view (id, view) VALUES (0, $1) - ON CONFLICT (id) DO UPDATE SET view = GREATEST(highest_voted_view.view, excluded.view)"; + + let stmt = format!( + "INSERT INTO highest_voted_view (id, view) VALUES (0, $1) + ON CONFLICT (id) DO UPDATE SET view = {MAX_FN}(highest_voted_view.view, excluded.view)" + ); let mut tx = self.db.write().await?; - tx.execute_one_with_retries(stmt, (view.u64() as i64,)) - .await?; + tx.execute(query(&stmt).bind(view.u64() as i64)).await?; tx.commit().await } async fn update_undecided_state( @@ -690,17 +863,21 @@ impl SequencerPersistence for Persistence { } async fn collect_garbage( - mut tx: Transaction, + storage: &Persistence, view: ViewNumber, consumer: impl EventConsumer, ) -> anyhow::Result<()> { - // Clean up and collect VID shares. - + // In SQLite, overlapping read and write transactions can lead to database errors. + // To avoid this: + // - start a read transaction to query and collect all the necessary data. + // - Commit (or implicitly drop) the read transaction once the data is fetched. + // - use the collected data to generate a "decide" event for the consumer. + // - begin a write transaction to delete the data and update the event stream. + let mut tx = storage.db.read().await?; + + // collect VID shares. let mut vid_shares = tx - .fetch_all( - query("DELETE FROM vid_share where view <= $1 RETURNING view, data") - .bind(view.u64() as i64), - ) + .fetch_all(query("SELECT * FROM vid_share where view <= $1").bind(view.u64() as i64)) .await? .into_iter() .map(|row| { @@ -712,12 +889,9 @@ async fn collect_garbage( }) .collect::>>()?; - // Clean up and collect DA proposals. + // collect DA proposals. let mut da_proposals = tx - .fetch_all( - query("DELETE FROM da_proposal where view <= $1 RETURNING view, data") - .bind(view.u64() as i64), - ) + .fetch_all(query("SELECT * FROM da_proposal where view <= $1").bind(view.u64() as i64)) .await? .into_iter() .map(|row| { @@ -729,10 +903,7 @@ async fn collect_garbage( }) .collect::>>()?; - // Clean up and collect leaves, except do not delete the most recent leaf: we need to remember - // this so that in case we restart, we can pick up from the last decided leaf. We still do - // include this leaf in the query results (the `UNION` clause) so we can include it in the - // decide event we send to the consumer. + // collect leaves let mut leaves = tx .fetch_all( query("SELECT view, leaf, qc FROM anchor_leaf WHERE view <= $1") @@ -750,14 +921,6 @@ async fn collect_garbage( }) .collect::>>()?; - tx.execute(query("DELETE FROM anchor_leaf WHERE view < $1").bind(view.u64() as i64)) - .await?; - - // Clean up old proposals. These are not part of the decide event we generate for the consumer, - // so we don't need to return them. - tx.execute(query("DELETE FROM quorum_proposals where view <= $1").bind(view.u64() as i64)) - .await?; - // Exclude from the decide event any leaves which have definitely already been processed. We may // have selected an already-processed leaf because the oldest leaf -- the last leaf processed in // the previous decide event -- remained in the database to serve as the anchor leaf, so our @@ -793,6 +956,8 @@ async fn collect_garbage( leaves }; + drop(tx); + // Generate a decide event for each leaf, to be processed by the event consumer. We make a // separate event for each leaf because it is possible we have non-consecutive leaves in our // storage, which would not be valid as a single decide with a single leaf chain. @@ -837,6 +1002,7 @@ async fn collect_garbage( .await?; } + let mut tx = storage.db.write().await?; // Now that we have definitely processed leaves up to `view`, we can update // `last_processed_view` so we don't process these leaves again. We may still fail at this // point, or shut down, and fail to complete this update. At worst this will lead to us sending @@ -850,6 +1016,22 @@ async fn collect_garbage( ) .await?; + tx.execute(query("DELETE FROM vid_share where view <= $1").bind(view.u64() as i64)) + .await?; + + tx.execute(query("DELETE FROM da_proposal where view <= $1").bind(view.u64() as i64)) + .await?; + + // Clean up leaves, but do not delete the most recent one (all leaves with a view number less than the given value). + // This is necessary to ensure that, in case of a restart, we can resume from the last decided leaf. + tx.execute(query("DELETE FROM anchor_leaf WHERE view < $1").bind(view.u64() as i64)) + .await?; + + // Clean up old proposals. These are not part of the decide event we generate for the consumer, + // so we don't need to return them. + tx.execute(query("DELETE FROM quorum_proposals where view <= $1").bind(view.u64() as i64)) + .await?; + tx.commit().await } @@ -861,23 +1043,31 @@ mod testing { #[async_trait] impl TestablePersistence for Persistence { - type Storage = TmpDb; + type Storage = Arc; async fn tmp_storage() -> Self::Storage { - TmpDb::init().await + Arc::new(TmpDb::init().await) } async fn connect(db: &Self::Storage) -> Self { - Options { - port: Some(db.port()), - host: Some(db.host()), - user: Some("postgres".into()), - password: Some("password".into()), - ..Default::default() + #[cfg(not(feature = "embedded-db"))] + { + let mut opt: Options = PostgresOptions { + port: Some(db.port()), + host: Some(db.host()), + user: Some("postgres".into()), + password: Some("password".into()), + ..Default::default() + } + .into(); + opt.create().await.unwrap() + } + + #[cfg(feature = "embedded-db")] + { + let mut opt: Options = SqliteOptions { path: db.path() }.into(); + opt.create().await.unwrap() } - .create() - .await - .unwrap() } } } diff --git a/sequencer/src/restart_tests.rs b/sequencer/src/restart_tests.rs index 50732daaf..66efbe464 100644 --- a/sequencer/src/restart_tests.rs +++ b/sequencer/src/restart_tests.rs @@ -1,9 +1,17 @@ #![cfg(test)] use super::*; +use crate::{ + api::{self, data_source::testing::TestableSequencerDataSource, options::Query}, + genesis::{L1Finalized, StakeTableConfig}, + network::cdn::{TestingDef, WrappedSignatureKey}, + testing::wait_for_decide_on_handle, + SequencerApiVersion, +}; use anyhow::bail; use cdn_broker::{reexports::crypto::signature::KeyPair, Broker, Config as BrokerConfig}; use cdn_marshal::{Config as MarshalConfig, Marshal}; +use clap::Parser; use derivative::Derivative; use espresso_types::{ eth_signature_key::EthKeyPair, traits::PersistenceOptions, v0_3::ChainConfig, FeeAccount, @@ -27,18 +35,9 @@ use hotshot_types::{ traits::{node_implementation::ConsensusTime, signature_key::SignatureKey}, }; use itertools::Itertools; +use options::Modules; use portpicker::pick_unused_port; -use sequencer::{ - api::{ - self, - data_source::testing::TestableSequencerDataSource, - options::{Http, Query}, - }, - genesis::{L1Finalized, StakeTableConfig}, - network::cdn::{TestingDef, WrappedSignatureKey}, - testing::wait_for_decide_on_handle, - SequencerApiVersion, -}; +use run::init_with_storage; use sequencer_utils::test_utils::setup_test; use std::{collections::HashSet, path::Path, time::Duration}; use surf_disco::{error::ClientError, Url}; @@ -247,7 +246,7 @@ impl TestNode { let storage = S::create_storage().await; let mut modules = Modules { - http: Some(Http::with_port(node.api_port)), + http: Some(api::options::Http::with_port(node.api_port)), status: Some(Default::default()), catchup: Some(Default::default()), ..Default::default() diff --git a/sequencer/src/run.rs b/sequencer/src/run.rs new file mode 100644 index 000000000..a7f864e12 --- /dev/null +++ b/sequencer/src/run.rs @@ -0,0 +1,378 @@ +use std::sync::Arc; + +use super::{ + api::{self, data_source::DataSourceOptions}, + context::SequencerContext, + init_node, network, + options::{Modules, Options}, + persistence, Genesis, L1Params, NetworkParams, +}; +use clap::Parser; +use espresso_types::{ + traits::NullEventConsumer, FeeVersion, MarketplaceVersion, SequencerVersions, + SolverAuctionResultsProvider, V0_0, +}; +use futures::future::FutureExt; +use hotshot::MarketplaceConfig; +use hotshot_types::traits::{metrics::NoMetrics, node_implementation::Versions}; +use vbs::version::StaticVersionType; + +pub async fn main() -> anyhow::Result<()> { + let opt = Options::parse(); + opt.logging.init(); + + let modules = opt.modules(); + tracing::warn!(?modules, "sequencer starting up"); + + let genesis = Genesis::from_file(&opt.genesis_file)?; + + // validate that the fee contract is a proxy and panic otherwise + genesis + .validate_fee_contract(opt.l1_provider_url.to_string()) + .await + .unwrap(); + + tracing::info!(?genesis, "genesis"); + + let base = genesis.base_version; + let upgrade = genesis.upgrade_version; + + match (base, upgrade) { + (FeeVersion::VERSION, MarketplaceVersion::VERSION) => { + run( + genesis, + modules, + opt, + SequencerVersions::::new(), + ) + .await + } + (FeeVersion::VERSION, _) => { + run( + genesis, + modules, + opt, + SequencerVersions::::new(), + ) + .await + } + (MarketplaceVersion::VERSION, _) => { + run( + genesis, + modules, + opt, + SequencerVersions::::new(), + ) + .await + } + _ => panic!( + "Invalid base ({base}) and upgrade ({upgrade}) versions specified in the toml file." + ), + } +} + +async fn run( + genesis: Genesis, + mut modules: Modules, + opt: Options, + versions: V, +) -> anyhow::Result<()> +where + V: Versions, +{ + if let Some(storage) = modules.storage_fs.take() { + run_with_storage(genesis, modules, opt, storage, versions).await + } else if let Some(storage) = modules.storage_sql.take() { + run_with_storage(genesis, modules, opt, storage, versions).await + } else { + // Persistence is required. If none is provided, just use the local file system. + run_with_storage( + genesis, + modules, + opt, + persistence::fs::Options::default(), + versions, + ) + .await + } +} + +async fn run_with_storage( + genesis: Genesis, + modules: Modules, + opt: Options, + storage_opt: S, + versions: V, +) -> anyhow::Result<()> +where + S: DataSourceOptions, + V: Versions, +{ + let ctx = init_with_storage(genesis, modules, opt, storage_opt, versions).await?; + + // Start doing consensus. + ctx.start_consensus().await; + ctx.join().await; + + Ok(()) +} + +pub(crate) async fn init_with_storage( + genesis: Genesis, + modules: Modules, + opt: Options, + mut storage_opt: S, + versions: V, +) -> anyhow::Result> +where + S: DataSourceOptions, + V: Versions, +{ + let (private_staking_key, private_state_key) = opt.private_keys()?; + let l1_params = L1Params { + url: opt.l1_provider_url, + options: opt.l1_options, + }; + + let network_params = NetworkParams { + cdn_endpoint: opt.cdn_endpoint, + libp2p_advertise_address: opt.libp2p_advertise_address, + libp2p_bind_address: opt.libp2p_bind_address, + libp2p_bootstrap_nodes: opt.libp2p_bootstrap_nodes, + orchestrator_url: opt.orchestrator_url, + state_relay_server_url: opt.state_relay_server_url, + public_api_url: opt.public_api_url, + private_staking_key, + private_state_key, + state_peers: opt.state_peers, + config_peers: opt.config_peers, + catchup_backoff: opt.catchup_backoff, + libp2p_history_gossip: opt.libp2p_history_gossip, + libp2p_history_length: opt.libp2p_history_length, + libp2p_max_ihave_length: opt.libp2p_max_ihave_length, + libp2p_max_ihave_messages: opt.libp2p_max_ihave_messages, + libp2p_max_gossip_transmit_size: opt.libp2p_max_gossip_transmit_size, + libp2p_max_direct_transmit_size: opt.libp2p_max_direct_transmit_size, + libp2p_mesh_outbound_min: opt.libp2p_mesh_outbound_min, + libp2p_mesh_n: opt.libp2p_mesh_n, + libp2p_mesh_n_high: opt.libp2p_mesh_n_high, + libp2p_heartbeat_interval: opt.libp2p_heartbeat_interval, + libp2p_mesh_n_low: opt.libp2p_mesh_n_low, + libp2p_published_message_ids_cache_time: opt.libp2p_published_message_ids_cache_time, + libp2p_iwant_followup_time: opt.libp2p_iwant_followup_time, + libp2p_max_messages_per_rpc: opt.libp2p_max_messages_per_rpc, + libp2p_gossip_retransmission: opt.libp2p_gossip_retransmission, + libp2p_flood_publish: opt.libp2p_flood_publish, + libp2p_duplicate_cache_time: opt.libp2p_duplicate_cache_time, + libp2p_fanout_ttl: opt.libp2p_fanout_ttl, + libp2p_heartbeat_initial_delay: opt.libp2p_heartbeat_initial_delay, + libp2p_gossip_factor: opt.libp2p_gossip_factor, + libp2p_gossip_lazy: opt.libp2p_gossip_lazy, + }; + + let marketplace_config = MarketplaceConfig { + auction_results_provider: Arc::new(SolverAuctionResultsProvider { + url: opt.auction_results_solver_url, + marketplace_path: opt.marketplace_solver_path, + results_path: opt.auction_results_path, + }), + fallback_builder_url: opt.fallback_builder_url, + }; + let proposal_fetcher_config = opt.proposal_fetcher_config; + + let persistence = storage_opt.create().await?; + + // Initialize HotShot. If the user requested the HTTP module, we must initialize the handle in + // a special way, in order to populate the API with consensus metrics. Otherwise, we initialize + // the handle directly, with no metrics. + let ctx = match modules.http { + Some(http_opt) => { + // Add optional API modules as requested. + let mut http_opt = api::Options::from(http_opt); + if let Some(query) = modules.query { + http_opt = storage_opt.enable_query_module(http_opt, query); + } + if let Some(submit) = modules.submit { + http_opt = http_opt.submit(submit); + } + if let Some(status) = modules.status { + http_opt = http_opt.status(status); + } + if let Some(state) = modules.state { + http_opt = http_opt.state(state); + } + if let Some(catchup) = modules.catchup { + http_opt = http_opt.catchup(catchup); + } + + if let Some(hotshot_events) = modules.hotshot_events { + http_opt = http_opt.hotshot_events(hotshot_events); + } + if let Some(explorer) = modules.explorer { + http_opt = http_opt.explorer(explorer); + } + if let Some(config) = modules.config { + http_opt = http_opt.config(config); + } + + http_opt + .serve(move |metrics, consumer| { + async move { + init_node( + genesis, + network_params, + &*metrics, + persistence, + l1_params, + versions, + consumer, + opt.is_da, + opt.identity, + marketplace_config, + proposal_fetcher_config, + ) + .await + } + .boxed() + }) + .await? + } + None => { + init_node( + genesis, + network_params, + &NoMetrics, + persistence, + l1_params, + versions, + NullEventConsumer, + opt.is_da, + opt.identity, + marketplace_config, + proposal_fetcher_config, + ) + .await? + } + }; + + Ok(ctx) +} + +#[cfg(test)] +mod test { + use std::time::Duration; + + use tokio::spawn; + + use crate::{ + api::options::{Http, Status}, + genesis::{L1Finalized, StakeTableConfig}, + persistence::fs, + SequencerApiVersion, + }; + use espresso_types::{MockSequencerVersions, PubKey}; + use hotshot_types::{light_client::StateKeyPair, traits::signature_key::SignatureKey}; + use portpicker::pick_unused_port; + use sequencer_utils::test_utils::setup_test; + use surf_disco::{error::ClientError, Client, Url}; + use tempfile::TempDir; + use vbs::version::Version; + + use super::*; + + #[tokio::test(flavor = "multi_thread")] + async fn test_startup_before_orchestrator() { + setup_test(); + + let (pub_key, priv_key) = PubKey::generated_from_seed_indexed([0; 32], 0); + let state_key = StateKeyPair::generate_from_seed_indexed([0; 32], 0); + + let port = pick_unused_port().unwrap(); + let tmp = TempDir::new().unwrap(); + + let genesis_file = tmp.path().join("genesis.toml"); + let genesis = Genesis { + chain_config: Default::default(), + stake_table: StakeTableConfig { capacity: 10 }, + accounts: Default::default(), + l1_finalized: L1Finalized::Number { number: 0 }, + header: Default::default(), + upgrades: Default::default(), + base_version: Version { major: 0, minor: 1 }, + upgrade_version: Version { major: 0, minor: 2 }, + }; + genesis.to_file(&genesis_file).unwrap(); + + let modules = Modules { + http: Some(Http::with_port(port)), + status: Some(Status), + ..Default::default() + }; + let opt = Options::parse_from([ + "sequencer", + "--private-staking-key", + &priv_key.to_tagged_base64().expect("valid key").to_string(), + "--private-state-key", + &state_key + .sign_key_ref() + .to_tagged_base64() + .expect("valid key") + .to_string(), + "--genesis-file", + &genesis_file.display().to_string(), + ]); + + // Start the sequencer in a background task. This process will not complete, because it will + // be waiting for the orchestrator, but it should at least start up the API server and + // populate some metrics. + tracing::info!(port, "starting sequencer"); + let task = spawn(async move { + if let Err(err) = init_with_storage( + genesis, + modules, + opt, + fs::Options::new(tmp.path().into()), + MockSequencerVersions::new(), + ) + .await + { + tracing::error!("failed to start sequencer: {err:#}"); + } + }); + + // The healthcheck should eventually come up even though the node is waiting for the + // orchestrator. + tracing::info!("waiting for API to start"); + let url: Url = format!("http://localhost:{port}").parse().unwrap(); + let client = Client::::new(url.clone()); + assert!(client.connect(Some(Duration::from_secs(60))).await); + client.get::<()>("healthcheck").send().await.unwrap(); + + // The metrics should include information about the node and software version. surf-disco + // doesn't currently support fetching a plaintext file, so we use a raw reqwest client. + let res = reqwest::get(url.join("/status/metrics").unwrap()) + .await + .unwrap(); + assert!(res.status().is_success(), "{}", res.status()); + let metrics = res.text().await.unwrap(); + let lines = metrics.lines().collect::>(); + assert!( + lines.contains(&format!("consensus_node{{key=\"{pub_key}\"}} 1").as_str()), + "{lines:#?}" + ); + assert!( + lines.contains( + &format!( + "consensus_version{{desc=\"{}\",rev=\"{}\",timestamp=\"{}\"}} 1", + env!("VERGEN_GIT_DESCRIBE"), + env!("VERGEN_GIT_SHA"), + env!("VERGEN_GIT_COMMIT_TIMESTAMP"), + ) + .as_str() + ), + "{lines:#?}" + ); + + task.abort(); + } +} diff --git a/sequencer/src/state.rs b/sequencer/src/state.rs index 1aac21dde..b44615c35 100644 --- a/sequencer/src/state.rs +++ b/sequencer/src/state.rs @@ -166,6 +166,7 @@ where .write() .await .context("opening transaction for state update")?; + store_state_update(&mut tx, proposed_leaf.height(), &state, delta).await?; if parent_chain_config != state.chain_config { diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 5b1bfcdfb..52afd6496 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -11,7 +11,7 @@ const L1_PROVIDER_RETRY_INTERVAL: Duration = Duration::from_secs(1); // TODO add to .env const RECIPIENT_ADDRESS: &str = "0x0000000000000000000000000000000000000000"; /// Duration in seconds to wait before declaring the chain deceased. -const SEQUENCER_BLOCKS_TIMEOUT: u64 = 120; +const SEQUENCER_BLOCKS_TIMEOUT: u64 = 300; #[derive(Clone, Debug)] pub struct TestConfig { @@ -113,7 +113,6 @@ impl TestConfig { let sequencer_clients = [ dotenvy::var("ESPRESSO_SEQUENCER_API_PORT")?, dotenvy::var("ESPRESSO_SEQUENCER1_API_PORT")?, - dotenvy::var("ESPRESSO_SEQUENCER2_API_PORT")?, ] .iter() .map(|port| url_from_port(port.clone()).unwrap()) diff --git a/tests/upgrades.rs b/tests/upgrades.rs index 1cbe2362c..5d6893844 100644 --- a/tests/upgrades.rs +++ b/tests/upgrades.rs @@ -1,10 +1,10 @@ use crate::common::TestConfig; use anyhow::Result; use espresso_types::{FeeVersion, MarketplaceVersion}; -use futures::{stream, StreamExt}; +use futures::{future::join_all, StreamExt}; use vbs::version::StaticVersionType; -const SEQUENCER_BLOCKS_TIMEOUT: u64 = 120; +const SEQUENCER_BLOCKS_TIMEOUT: u64 = 200; #[tokio::test(flavor = "multi_thread")] async fn test_upgrade() -> Result<()> { @@ -28,30 +28,29 @@ async fn test_upgrade() -> Result<()> { // Test is limited to those sequencers with correct modules // enabled. It would be less fragile if we could discover them. - let subscriptions = vec![ - clients[0].subscribe_headers(0).await?, - clients[1].subscribe_headers(0).await?, - ]; - let subscriptions_size = subscriptions.len(); - let mut streams = stream::iter(subscriptions).flatten_unordered(None); + let subscriptions = join_all(clients.iter().map(|c| c.subscribe_headers(0))) + .await + .into_iter() + .collect::>>()?; - let mut upgraded_nodes: usize = 0; - while let Some(header) = streams.next().await { + let mut stream = futures::stream::iter(subscriptions).flatten_unordered(None); + + while let Some(header) = stream.next().await { let header = header.unwrap(); + println!( + "block: height={}, version={}", + header.height(), + header.version() + ); // TODO is it possible to discover the view at which upgrade should be finished? // First few views should be `Base` version. - if header.height() <= 5 { + if header.height() <= 20 { assert_eq!(header.version(), versions.0) } - // Track how many nodes have been upgraded if header.version() == versions.1 { - upgraded_nodes += 1; - } - - if upgraded_nodes == subscriptions_size { - println!("Upgrade succeeded @ height {}!", header.height()); + println!("header version matched! height={:?}", header.height()); break; } @@ -59,6 +58,7 @@ async fn test_upgrade() -> Result<()> { panic!("Exceeded maximum block height. Upgrade should have finished by now :("); } } + // TODO assert transactions are incrementing Ok(()) } diff --git a/types/src/v0/impls/instance_state.rs b/types/src/v0/impls/instance_state.rs index b6385e81a..19df55e1b 100644 --- a/types/src/v0/impls/instance_state.rs +++ b/types/src/v0/impls/instance_state.rs @@ -1,11 +1,13 @@ use crate::v0::{ - retain_accounts, traits::StateCatchup, v0_3::ChainConfig, FeeMerkleTree, GenesisHeader, - L1BlockInfo, L1Client, PubKey, Timestamp, Upgrade, UpgradeMode, + traits::StateCatchup, v0_3::ChainConfig, GenesisHeader, L1BlockInfo, L1Client, PubKey, + Timestamp, Upgrade, UpgradeMode, }; use hotshot_types::traits::states::InstanceState; use hotshot_types::HotShotConfig; use std::{collections::BTreeMap, sync::Arc}; -use vbs::version::{StaticVersion, StaticVersionType, Version}; +use vbs::version::Version; +#[cfg(any(test, feature = "testing"))] +use vbs::version::{StaticVersion, StaticVersionType}; use super::state::ValidatedState; @@ -187,7 +189,10 @@ pub mod mock { use jf_merkle_tree::{ForgetableMerkleTreeScheme, MerkleTreeScheme}; use super::*; - use crate::{BackoffParams, BlockMerkleTree, FeeAccount, FeeMerkleCommitment}; + use crate::{ + retain_accounts, BackoffParams, BlockMerkleTree, FeeAccount, FeeMerkleCommitment, + FeeMerkleTree, + }; #[derive(Debug, Clone, Default)] pub struct MockStateCatchup { diff --git a/types/src/v0/traits.rs b/types/src/v0/traits.rs index 02b2b6140..7447a500d 100644 --- a/types/src/v0/traits.rs +++ b/types/src/v0/traits.rs @@ -371,19 +371,12 @@ impl StateCatchup for Vec { pub trait PersistenceOptions: Clone + Send + Sync + 'static { type Persistence: SequencerPersistence; - async fn create(self) -> anyhow::Result; + async fn create(&mut self) -> anyhow::Result; async fn reset(self) -> anyhow::Result<()>; - - async fn create_catchup_provider( - self, - backoff: BackoffParams, - ) -> anyhow::Result> { - self.create().await?.into_catchup_provider(backoff) - } } #[async_trait] -pub trait SequencerPersistence: Sized + Send + Sync + 'static { +pub trait SequencerPersistence: Sized + Send + Sync + Clone + 'static { /// Use this storage as a state catchup backend, if supported. fn into_catchup_provider( self, From 306f2ee77799f9801d52f552d7eafc47368f7a6a Mon Sep 17 00:00:00 2001 From: Abdul Basit <45506001+imabdulbasit@users.noreply.github.com> Date: Thu, 5 Dec 2024 02:30:23 +0500 Subject: [PATCH 14/15] fix docker-build-images scripts (#2355) * fix docker-build-images scripts * fix arm build --- .github/workflows/build.yml | 2 +- docker-compose.yaml | 4 ++-- scripts/build-docker-images-native | 11 +++++++++-- scripts/build-docker-images-static | 11 ++++++++--- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3af5eb5b7..64960a227 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -110,7 +110,7 @@ jobs: - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features testing --bin espresso-dev-node + cargo build --locked --release --features "embedded-db testing" --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/docker-compose.yaml b/docker-compose.yaml index a036ee88d..1e0fe5e8b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -229,6 +229,7 @@ services: - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - ESPRESSO_SEQUENCER_HOTSHOT_EVENT_STREAMING_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer1:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer1:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_POSTGRES_HOST=sequencer-db-0 - ESPRESSO_SEQUENCER_POSTGRES_USER=root @@ -285,7 +286,7 @@ services: - ESPRESSO_SEQUENCER_CDN_ENDPOINT - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer2:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer4:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer2:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_POSTGRES_HOST=sequencer-db-1 - ESPRESSO_SEQUENCER_POSTGRES_USER=root @@ -342,7 +343,6 @@ services: - ESPRESSO_SEQUENCER_CDN_ENDPOINT - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer4:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer3:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_L1_PROVIDER - ESPRESSO_SEQUENCER_L1_EVENTS_MAX_BLOCK_RANGE diff --git a/scripts/build-docker-images-native b/scripts/build-docker-images-native index 31f0222f2..e047d6c98 100755 --- a/scripts/build-docker-images-native +++ b/scripts/build-docker-images-native @@ -48,7 +48,12 @@ esac # Compile binaries case $KERNEL in linux) + CARGO_TARGET_DIR=target cargo build --release + # espresso-dev-node requires embedded-db feature to build so we build it separately + cargo build --bin espresso-dev-node --release --all-features + # building sequencer-sqlite binary + cargo build --release --manifest-path ./sequencer-sqlite/Cargo.toml ;; darwin) # Use a different target directory for docker builds to avoid conflicts with @@ -74,7 +79,9 @@ case $KERNEL in -v "$CARGO_HOME/registry:/usr/local/cargo/registry" \ -v "$CARGO_HOME/git:/usr/local/cargo/git" \ -it ghcr.io/espressosystems/devops-rust:stable \ - bash -c "cd /work && cargo build --release" + bash -c "cd /work && cargo build --release \ + && cargo build --bin espresso-dev-node --release --all-features \ + && cargo build --release --manifest-path ./sequencer-sqlite/Cargo.toml" ;; esac @@ -92,7 +99,7 @@ mkdir -p ${WORKDIR}/data cp -rv data/genesis ${WORKDIR}/data/ mkdir -p "${WORKDIR}/target/$ARCH/release" - for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils" "sequencer-sqlite"; do + for binary in "cdn-broker" "cdn-marshal" "cdn-whitelist" "deploy" "dev-rollup" "espresso-bridge" "espresso-dev-node" "keygen" "marketplace-builder" "marketplace-solver" "nasty-client" "node-metrics" "orchestrator" "permissionless-builder" "pub-key" "reset-storage" "sequencer" "sequencer-sqlite" "state-prover" "state-relay-server" "submit-transactions" "utils"; do cp -v "${CARGO_TARGET_DIR}/release/$binary" "${WORKDIR}/target/$ARCH/release" # Patch the interpreter for running without nix inside the ubuntu based docker image. if [ $KERNEL == "linux" ]; then diff --git a/scripts/build-docker-images-static b/scripts/build-docker-images-static index af87a0a2b..9f892328a 100755 --- a/scripts/build-docker-images-static +++ b/scripts/build-docker-images-static @@ -7,8 +7,13 @@ fi set -euxo pipefail -nix develop .#crossShell --ignore-environment --command cargo build --release -nix develop .#armCrossShell --ignore-environment --command cargo build --release +nix develop .#crossShell --ignore-environment --command bash -c "cargo build --release \ +&& cargo build --release --manifest-path ./sequencer-sqlite/Cargo.toml \ +&& cargo build --bin espresso-dev-node --release --all-features" + +nix develop .#armCrossShell --ignore-environment --command bash -c "cargo build --release \ +&& cargo build --release --manifest-path ./sequencer-sqlite/Cargo.toml \ +&& cargo build --bin espresso-dev-node --release --all-features" # The rest of the script doesn't run in a nix shell but we need to know where # the binaries are. @@ -41,7 +46,7 @@ for ARCH in "amd64" "arm64"; do ;; esac mkdir -p ${WORKDIR}/target/$ARCH/release - for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils" "sequencer-sqlite"; do + for binary in "cdn-broker" "cdn-marshal" "cdn-whitelist" "deploy" "dev-rollup" "espresso-bridge" "espresso-dev-node" "keygen" "marketplace-builder" "marketplace-solver" "nasty-client" "node-metrics" "orchestrator" "permissionless-builder" "pub-key" "reset-storage" "sequencer" "sequencer-sqlite" "state-prover" "state-relay-server" "submit-transactions" "utils"; do cp -v "${CARGO_TARGET_DIR}/${TARGET}/release/$binary" ${WORKDIR}/target/$ARCH/release done done From a48b5b2f4ed978512d7ea90c385eff6cd83c192f Mon Sep 17 00:00:00 2001 From: rob-maron <132852777+rob-maron@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:23:36 -0500 Subject: [PATCH 15/15] CDN upgrade (#2187) * cdn upgrade * merge update * update some deps * cargo sort * remove unused deps * namespace comment --- .github/workflows/build.yml | 2 +- Cargo.lock | 1117 +++++++++++++++------------ Cargo.toml | 4 +- builder/Cargo.toml | 9 - client/Cargo.toml | 2 - contracts/rust/adapter/Cargo.toml | 2 - contracts/rust/diff-test/Cargo.toml | 1 - marketplace-solver/Cargo.toml | 3 - sequencer/Cargo.toml | 3 +- sequencer/src/bin/cdn-broker.rs | 8 +- sequencer/src/bin/dev-cdn.rs | 8 +- sequencer/src/network/cdn.rs | 68 +- sequencer/src/restart_tests.rs | 8 +- types/Cargo.toml | 2 - 14 files changed, 696 insertions(+), 541 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 64960a227..5ddc82e0f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,7 +48,7 @@ jobs: cargo build --locked --release --workspace - name: Build sequencer-sqlite - run: cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target + run: cargo build --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. diff --git a/Cargo.lock b/Cargo.lock index a538a0269..4a1f39a24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "Inflector" @@ -132,9 +132,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -202,9 +202,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "arbitrary" @@ -480,7 +480,7 @@ dependencies = [ "rand 0.8.5", "sha2 0.10.8", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "ureq", ] @@ -534,8 +534,8 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", ] [[package]] @@ -546,7 +546,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure 0.13.1", ] @@ -558,7 +558,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -701,7 +701,7 @@ dependencies = [ "futures-lite 2.5.0", "parking", "polling 3.7.4", - "rustix 0.38.39", + "rustix 0.38.41", "slab", "tracing", "windows-sys 0.59.0", @@ -735,7 +735,7 @@ checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33" dependencies = [ "async-std", "native-tls", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -760,7 +760,7 @@ dependencies = [ "cfg-if", "event-listener 5.3.1", "futures-lite 2.5.0", - "rustix 0.38.39", + "rustix 0.38.41", "tracing", ] @@ -776,7 +776,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.39", + "rustix 0.38.41", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -843,7 +843,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -873,7 +873,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -909,7 +909,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-sink", "futures-util", "memchr", @@ -922,7 +922,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-sink", "futures-util", "memchr", @@ -976,7 +976,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -993,7 +993,7 @@ checksum = "edf3ee19dbc0a46d740f6f0926bde8c50f02bdbc7b536842da28f6ac56513a8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1005,7 +1005,7 @@ dependencies = [ "async-trait", "axum-core", "bitflags 1.3.2", - "bytes 1.8.0", + "bytes 1.9.0", "futures-util", "http 0.2.12", "http-body 0.4.6", @@ -1031,7 +1031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", - "bytes 1.8.0", + "bytes 1.9.0", "futures-util", "http 0.2.12", "http-body 0.4.6", @@ -1052,6 +1052,15 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "backon" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5289ec98f68f28dd809fd601059e6aa908bb8f6108620930828283d4ee23d7" +dependencies = [ + "fastrand 2.2.0", +] + [[package]] name = "backtrace" version = "0.3.71" @@ -1188,9 +1197,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" dependencies = [ "arrayref", "arrayvec", @@ -1259,10 +1268,8 @@ dependencies = [ "anyhow", "async-broadcast", "async-lock 3.4.0", - "async-trait", "clap", "committable", - "dotenvy", "espresso-types", "ethers", "futures", @@ -1270,21 +1277,14 @@ dependencies = [ "hotshot-builder-api", "hotshot-builder-core", "hotshot-events-service", - "hotshot-example-types", - "hotshot-orchestrator", - "hotshot-stake-table", "hotshot-state-prover", "hotshot-types", "jf-signature 0.2.0", - "libp2p", - "libp2p-networking", "marketplace-builder-shared", "portpicker", "rand 0.8.5", "sequencer", "sequencer-utils", - "serde", - "surf", "surf-disco", "tempfile", "tide-disco", @@ -1343,9 +1343,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" dependencies = [ "serde", ] @@ -1395,20 +1395,38 @@ dependencies = [ "embedded-io", ] +[[package]] +name = "capnp" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bce4e2d41c16cf9188f47ca4d59fdcdca1f33705af211bdb41f0afbd3442f8b5" +dependencies = [ + "embedded-io", +] + [[package]] name = "capnpc" version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c75ba30e0f08582d53c2f3710cf4bb65ff562614b1ba86906d7391adffe189ec" dependencies = [ - "capnp", + "capnp 0.19.8", +] + +[[package]] +name = "capnpc" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa3d5f01e69ed11656d2c7c47bf34327ea9bfb5c85c7de787fcd7b6c5e45b61" +dependencies = [ + "capnp 0.20.3", ] [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -1424,7 +1442,17 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "cargo_toml" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +dependencies = [ + "serde", + "toml 0.7.8", ] [[package]] @@ -1438,9 +1466,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.37" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ "jobserver", "libc", @@ -1450,9 +1478,9 @@ dependencies = [ [[package]] name = "cdn-broker" version = "0.4.0" -source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" dependencies = [ - "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", "clap", "console-subscriber", "dashmap", @@ -1467,15 +1495,15 @@ dependencies = [ "rkyv", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] name = "cdn-broker" version = "0.4.0" -source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade#849e7edb32788e42738541ba4d5c64d3e061d86d" dependencies = [ - "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade)", "clap", "console-subscriber", "dashmap", @@ -1490,7 +1518,7 @@ dependencies = [ "rkyv", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] @@ -1505,45 +1533,45 @@ dependencies = [ "rand 0.8.5", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] name = "cdn-marshal" version = "0.4.0" -source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" dependencies = [ - "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", "clap", "jf-signature 0.1.0", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] name = "cdn-marshal" version = "0.4.0" -source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade#849e7edb32788e42738541ba4d5c64d3e061d86d" dependencies = [ - "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7)", + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade)", "clap", "jf-signature 0.1.0", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] name = "cdn-proto" version = "0.4.0" -source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" dependencies = [ "anyhow", "ark-serialize", "async-trait", - "capnp", - "capnpc", + "capnp 0.19.8", + "capnpc 0.19.0", "derivative", "jf-signature 0.1.0", "kanal", @@ -1555,12 +1583,12 @@ dependencies = [ "quinn", "rand 0.8.5", "rcgen 0.13.1", - "redis 0.25.4", + "redis 0.26.1", "rkyv", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", "sqlx", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-rustls 0.26.0", "tracing", @@ -1571,13 +1599,13 @@ dependencies = [ [[package]] name = "cdn-proto" version = "0.4.0" -source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade#849e7edb32788e42738541ba4d5c64d3e061d86d" dependencies = [ "anyhow", "ark-serialize", "async-trait", - "capnp", - "capnpc", + "capnp 0.20.3", + "capnpc 0.20.1", "derivative", "jf-signature 0.1.0", "kanal", @@ -1589,12 +1617,12 @@ dependencies = [ "quinn", "rand 0.8.5", "rcgen 0.13.1", - "redis 0.26.1", + "redis 0.27.6", "rkyv", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", "sqlx", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-rustls 0.26.0", "tracing", @@ -1656,9 +1684,9 @@ checksum = "b67261db007b5f4cf8cba393c1a5c511a5cc072339ce16e12aeba1d7b9b77946" [[package]] name = "clap" -version = "4.5.20" +version = "4.5.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "69371e34337c4c984bbe322360c2547210bf632eb2814bbe78a6e87a2935bd2b" dependencies = [ "clap_builder", "clap_derive", @@ -1666,9 +1694,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "6e24c1b4099818523236a8ca881d2b45db98dadfb4625cf6608c12069fcbbde1" dependencies = [ "anstream", "anstyle", @@ -1685,14 +1713,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "cld" @@ -1705,12 +1733,10 @@ name = "client" version = "0.1.0" dependencies = [ "anyhow", - "contract-bindings", "espresso-types", "ethers", "futures", "jf-merkle-tree", - "sequencer-utils", "surf-disco", "tokio", "tracing", @@ -1730,7 +1756,7 @@ dependencies = [ "k256", "serde", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1746,7 +1772,7 @@ dependencies = [ "pbkdf2 0.12.2", "rand 0.8.5", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1766,7 +1792,7 @@ dependencies = [ "serde_derive", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1781,7 +1807,7 @@ version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-core", "memchr", "pin-project-lite 0.2.15", @@ -1831,7 +1857,7 @@ dependencies = [ "rust-ini", "serde", "serde_json", - "toml", + "toml 0.8.19", "yaml-rust2", ] @@ -1870,14 +1896,14 @@ dependencies = [ "tonic", "tracing", "tracing-core", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] name = "const-hex" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -1997,9 +2023,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -2134,9 +2160,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" dependencies = [ "csv-core", "itoa", @@ -2182,7 +2208,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "socket2 0.5.7", + "socket2 0.5.8", "windows-sys 0.52.0", ] @@ -2226,7 +2252,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2240,11 +2266,11 @@ dependencies = [ [[package]] name = "custom_debug" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e715bf0e503e909c7076c052e39dd215202e8edeb32f1c194fd630c314d256" +checksum = "2da7d1ad9567b3e11e877f1d7a0fa0360f04162f94965fc4448fbed41a65298e" dependencies = [ - "custom_debug_derive 0.6.1", + "custom_debug_derive 0.6.2", ] [[package]] @@ -2260,15 +2286,14 @@ dependencies = [ [[package]] name = "custom_debug_derive" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f731440b39c73910e253cb465ec1fac97732b3c7af215639881ec0c2a38f4f69" +checksum = "a707ceda8652f6c7624f2be725652e9524c815bf3b9d55a0b2320be2303f9c11" dependencies = [ "darling", - "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure 0.13.1", ] @@ -2293,7 +2318,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2304,7 +2329,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2355,7 +2380,7 @@ checksum = "bc2323e10c92e1cf4d86e11538512e6dc03ceb586842970b6332af3d4046a046" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2412,7 +2437,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2433,7 +2458,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2443,7 +2468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2456,7 +2481,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2477,7 +2502,7 @@ dependencies = [ "convert_case 0.6.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "unicode-xid", ] @@ -2515,7 +2540,6 @@ dependencies = [ "ethers", "hotshot-contract-adapter", "hotshot-state-prover", - "itertools 0.12.1", "jf-pcs", "jf-plonk", "jf-signature 0.2.0", @@ -2609,7 +2633,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2761,7 +2785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" dependencies = [ "base64 0.21.7", - "bytes 1.8.0", + "bytes 1.9.0", "hex", "k256", "log", @@ -2781,7 +2805,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2802,12 +2826,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2864,7 +2888,6 @@ dependencies = [ "fluent-asserter", "futures", "hotshot", - "hotshot-orchestrator", "hotshot-query-service", "hotshot-types", "itertools 0.12.1", @@ -2884,9 +2907,9 @@ dependencies = [ "static_assertions", "surf-disco", "tagged-base64", - "thiserror", + "thiserror 1.0.69", "tide-disco", - "time 0.3.36", + "time 0.3.37", "tokio", "tracing", "url", @@ -2922,7 +2945,7 @@ dependencies = [ "serde_json", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.69", "uuid 0.8.2", ] @@ -2939,7 +2962,7 @@ dependencies = [ "serde", "serde_json", "sha3", - "thiserror", + "thiserror 1.0.69", "uint", ] @@ -3018,7 +3041,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3040,8 +3063,8 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.87", - "toml", + "syn 2.0.90", + "toml 0.8.19", "walkdir", ] @@ -3058,7 +3081,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3068,7 +3091,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ "arrayvec", - "bytes 1.8.0", + "bytes 1.9.0", "cargo_metadata", "chrono", "const-hex", @@ -3084,9 +3107,9 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.87", + "syn 2.0.90", "tempfile", - "thiserror", + "thiserror 1.0.69", "tiny-keccak", "unicode-xid", ] @@ -3104,7 +3127,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -3128,7 +3151,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "tracing-futures", @@ -3144,7 +3167,7 @@ dependencies = [ "async-trait", "auto_impl", "base64 0.21.7", - "bytes 1.8.0", + "bytes 1.9.0", "const-hex", "enr", "ethers-core", @@ -3161,7 +3184,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "tracing", @@ -3188,7 +3211,7 @@ dependencies = [ "ethers-core", "rand 0.8.5", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -3216,7 +3239,7 @@ dependencies = [ "serde_json", "solang-parser", "svm-rs", - "thiserror", + "thiserror 1.0.69", "tiny-keccak", "tokio", "tracing", @@ -3243,9 +3266,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ "event-listener 5.3.1", "pin-project-lite 0.2.15", @@ -3318,9 +3341,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -3526,7 +3549,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3536,7 +3559,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", ] @@ -3643,8 +3666,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -3710,13 +3735,13 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "futures-core", "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -3725,17 +3750,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap 2.6.0", + "http 1.2.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -3772,9 +3797,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -3828,7 +3853,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ "base64 0.21.7", - "bytes 1.8.0", + "bytes 1.9.0", "headers-core", "http 0.2.12", "httpdate", @@ -3904,8 +3929,8 @@ dependencies = [ "ipnet", "once_cell", "rand 0.8.5", - "socket2 0.5.7", - "thiserror", + "socket2 0.5.8", + "thiserror 1.0.69", "tinyvec", "tokio", "tracing", @@ -3928,7 +3953,7 @@ dependencies = [ "rand 0.8.5", "resolv-conf", "smallvec", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -4049,11 +4074,11 @@ dependencies = [ "serde", "sha2 0.10.8", "surf-disco", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "url", "utils", "vbs", @@ -4072,9 +4097,9 @@ dependencies = [ "hotshot-types", "serde", "tagged-base64", - "thiserror", + "thiserror 1.0.69", "tide-disco", - "toml", + "toml 0.8.19", "vbs", ] @@ -4101,7 +4126,7 @@ dependencies = [ "tide-disco", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "vbs", ] @@ -4111,8 +4136,6 @@ version = "0.1.0" dependencies = [ "anyhow", "ark-bn254", - "ark-ec", - "ark-ed-on-bn254", "ark-ff", "ark-poly", "ark-serialize", @@ -4148,9 +4171,9 @@ dependencies = [ "tagged-base64", "tide-disco", "tokio", - "toml", + "toml 0.8.19", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "vbs", ] @@ -4179,8 +4202,8 @@ dependencies = [ "serde", "sha2 0.10.8", "sha3", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tokio", "tracing", "url", @@ -4202,7 +4225,7 @@ dependencies = [ "serde", "tide-disco", "tokio", - "toml", + "toml 0.8.19", "tracing", "vbs", ] @@ -4215,7 +4238,7 @@ dependencies = [ "derive_builder", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4236,10 +4259,10 @@ dependencies = [ "serde", "serde_json", "surf-disco", - "thiserror", + "thiserror 1.0.69", "tide-disco", "tokio", - "toml", + "toml 0.8.19", "tracing", "vbs", "vec1", @@ -4259,7 +4282,7 @@ dependencies = [ "bincode", "chrono", "committable", - "custom_debug 0.6.1", + "custom_debug 0.6.2", "derivative", "derive_more 0.99.18", "either", @@ -4288,11 +4311,11 @@ dependencies = [ "tagged-base64", "tempfile", "tide-disco", - "time 0.3.36", + "time 0.3.37", "tokio", - "toml", + "toml 0.8.19", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "trait-variant", "typenum", "url", @@ -4354,9 +4377,9 @@ dependencies = [ "serde", "surf-disco", "tide-disco", - "time 0.3.36", + "time 0.3.37", "tokio", - "toml", + "toml 0.8.19", "tracing", "url", "vbs", @@ -4403,8 +4426,8 @@ dependencies = [ "sha2 0.10.8", "surf-disco", "tagged-base64", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tokio", "tracing", "url", @@ -4448,7 +4471,7 @@ dependencies = [ "sha2 0.10.8", "sha3", "tagged-base64", - "thiserror", + "thiserror 1.0.69", "tide-disco", "tokio", "tracing", @@ -4503,10 +4526,10 @@ dependencies = [ "sha2 0.10.8", "surf-disco", "tagged-base64", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tokio", - "toml", + "toml 0.8.19", "tracing", "typenum", "url", @@ -4521,18 +4544,18 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "itoa", ] [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "fnv", "itoa", ] @@ -4543,7 +4566,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "http 0.2.12", "pin-project-lite 0.2.15", ] @@ -4554,8 +4577,8 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "bytes 1.8.0", - "http 1.1.0", + "bytes 1.9.0", + "http 1.2.0", ] [[package]] @@ -4564,9 +4587,9 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite 0.2.15", ] @@ -4631,7 +4654,7 @@ version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-channel", "futures-core", "futures-util", @@ -4642,7 +4665,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite 0.2.15", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -4651,15 +4674,15 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-channel", "futures-util", - "h2 0.4.6", - "http 1.1.0", + "h2 0.4.7", + "http 1.2.0", "http-body 1.0.1", "httparse", "itoa", @@ -4690,10 +4713,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.5.0", + "http 1.2.0", + "hyper 1.5.1", "hyper-util", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -4718,9 +4741,9 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "native-tls", "tokio", @@ -4734,14 +4757,14 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.0", + "hyper 1.5.1", "pin-project-lite 0.2.15", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -4885,7 +4908,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4937,9 +4960,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" dependencies = [ "async-io 2.4.0", "core-foundation", @@ -4948,8 +4971,12 @@ dependencies = [ "if-addrs", "ipnet", "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", "rtnetlink", - "system-configuration 0.5.1", + "system-configuration 0.6.1", "tokio", "windows", ] @@ -4962,7 +4989,7 @@ checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" dependencies = [ "async-trait", "attohttpc", - "bytes 1.8.0", + "bytes 1.9.0", "futures", "http 0.2.12", "hyper 0.14.31", @@ -5002,13 +5029,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.90", ] [[package]] @@ -5049,12 +5076,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.15.2", "serde", ] @@ -5079,7 +5106,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", ] [[package]] @@ -5108,7 +5135,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.7", + "socket2 0.5.8", "widestring", "windows-sys 0.48.0", "winreg", @@ -5196,9 +5223,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jf-commitment" @@ -5466,10 +5493,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -5567,7 +5595,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata 0.4.8", + "regex-automata 0.4.9", ] [[package]] @@ -5581,9 +5609,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.162" +version = "0.2.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" [[package]] name = "libm" @@ -5607,7 +5635,7 @@ version = "0.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681fb3f183edfbedd7a57d32ebe5dcdc0b9f94061185acf3c30249349cc6fc99" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "either", "futures", "futures-timer", @@ -5632,7 +5660,7 @@ dependencies = [ "multiaddr", "pin-project", "rw-stream-sink", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5702,7 +5730,7 @@ dependencies = [ "rw-stream-sink", "serde", "smallvec", - "thiserror", + "thiserror 1.0.69", "tracing", "unsigned-varint 0.8.0", "void", @@ -5734,7 +5762,7 @@ dependencies = [ "asynchronous-codec 0.7.0", "base64 0.21.7", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "either", "fnv", "futures", @@ -5775,16 +5803,16 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec 0.3.1", "smallvec", - "thiserror", + "thiserror 1.0.69", "tracing", "void", ] [[package]] name = "libp2p-identity" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cca1eb2bc1fd29f099f3daaab7effd01e1a54b7c577d0ed082521034d912e8" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" dependencies = [ "asn1_der", "bs58", @@ -5796,7 +5824,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", "zeroize", ] @@ -5809,7 +5837,7 @@ checksum = "5cc5767727d062c4eac74dd812c998f0e488008e82cce9c33b463d38423f9ad2" dependencies = [ "arrayvec", "asynchronous-codec 0.7.0", - "bytes 1.8.0", + "bytes 1.9.0", "either", "fnv", "futures", @@ -5825,7 +5853,7 @@ dependencies = [ "serde", "sha2 0.10.8", "smallvec", - "thiserror", + "thiserror 1.0.69", "tracing", "uint", "void", @@ -5846,7 +5874,7 @@ dependencies = [ "libp2p-swarm", "rand 0.8.5", "smallvec", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tracing", "void", @@ -5897,11 +5925,11 @@ dependencies = [ "serde", "serde_bytes", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "void", ] @@ -5911,7 +5939,7 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c67296ad4e092e23f92aea3d2bdb6f24eab79c0929ed816dfb460ea2f4567d2b" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures", "futures-timer", "if-watch", @@ -5922,9 +5950,9 @@ dependencies = [ "quinn", "rand 0.8.5", "ring 0.17.8", - "rustls 0.23.18", - "socket2 0.5.7", - "thiserror", + "rustls 0.23.19", + "socket2 0.5.8", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -5984,7 +6012,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -5999,7 +6027,7 @@ dependencies = [ "libc", "libp2p-core", "libp2p-identity", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tracing", ] @@ -6016,9 +6044,9 @@ dependencies = [ "libp2p-identity", "rcgen 0.11.3", "ring 0.17.8", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-webpki 0.101.7", - "thiserror", + "thiserror 1.0.69", "x509-parser", "yasna", ] @@ -6140,9 +6168,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "local-ip-address" @@ -6152,7 +6180,7 @@ checksum = "3669cf5561f8d27e8fc84cc15e58350e70f557d4d65f70e3154e54cd2f8e1782" dependencies = [ "libc", "neli", - "thiserror", + "thiserror 1.0.69", "windows-sys 0.59.0", ] @@ -6200,7 +6228,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.1", + "hashbrown 0.15.2", ] [[package]] @@ -6283,7 +6311,7 @@ dependencies = [ "tide-disco", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "vbs", ] @@ -6312,7 +6340,7 @@ dependencies = [ "surf-disco", "tokio", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "url", "vbs", "vec1", @@ -6327,7 +6355,6 @@ dependencies = [ "async-trait", "bincode", "clap", - "cld", "committable", "espresso-types", "futures", @@ -6335,18 +6362,16 @@ dependencies = [ "hotshot-events-service", "hotshot-query-service", "hotshot-types", - "jf-signature 0.2.0", "marketplace-solver", "portpicker", "rand 0.8.5", "serde", - "serde_json", "sqlx", "surf-disco", - "thiserror", + "thiserror 1.0.69", "tide-disco", "tokio", - "toml", + "toml 0.8.19", "tracing", "vbs", ] @@ -6392,7 +6417,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6488,11 +6513,10 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", @@ -6551,7 +6575,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures", "log", "pin-project", @@ -6603,21 +6627,20 @@ dependencies = [ [[package]] name = "netlink-packet-core" -version = "0.4.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" dependencies = [ "anyhow", "byteorder", - "libc", "netlink-packet-utils", ] [[package]] name = "netlink-packet-route" -version = "0.12.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" dependencies = [ "anyhow", "bitflags 1.3.2", @@ -6636,21 +6659,21 @@ dependencies = [ "anyhow", "byteorder", "paste", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "netlink-proto" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +checksum = "86b33524dc0968bfad349684447bfce6db937a9ac3332a1fe60c0c5a5ce63f21" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures", "log", "netlink-packet-core", "netlink-sys", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -6660,7 +6683,7 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures", "libc", "log", @@ -6675,9 +6698,9 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" -version = "0.24.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", "cfg-if", @@ -6707,9 +6730,9 @@ dependencies = [ "serde_json", "surf-disco", "tide-disco", - "time 0.3.36", + "time 0.3.37", "tokio", - "toml", + "toml 0.8.19", "tracing", "url", "vbs", @@ -6860,7 +6883,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -6910,7 +6933,7 @@ checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ "arrayvec", "auto_impl", - "bytes 1.8.0", + "bytes 1.9.0", "ethereum-types", "open-fastrlp-derive", ] @@ -6921,7 +6944,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "proc-macro2", "quote", "syn 1.0.109", @@ -6950,7 +6973,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7073,9 +7096,9 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" [[package]] name = "pathdiff" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pbkdf2" @@ -7140,7 +7163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", - "thiserror", + "thiserror 1.0.69", "ucd-trie", ] @@ -7164,7 +7187,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7185,7 +7208,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -7228,7 +7251,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7266,7 +7289,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7357,7 +7380,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite 0.2.15", - "rustix 0.38.39", + "rustix 0.38.41", "tracing", "windows-sys 0.59.0", ] @@ -7390,7 +7413,7 @@ checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" dependencies = [ "base64 0.22.1", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "fallible-iterator", "hmac 0.12.1", "md-5", @@ -7406,7 +7429,7 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f66ea23a2d0e5734297357705193335e0a957696f34bed2f2faefacb2fec336f" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "fallible-iterator", "postgres-protocol", ] @@ -7449,7 +7472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7472,7 +7495,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit", + "toml_edit 0.22.22", ] [[package]] @@ -7506,9 +7529,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -7525,7 +7548,7 @@ dependencies = [ "memchr", "parking_lot", "protobuf", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7548,7 +7571,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7585,7 +7608,7 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "prost-derive", ] @@ -7599,7 +7622,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7659,9 +7682,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" dependencies = [ "asynchronous-codec 0.6.2", - "bytes 1.8.0", + "bytes 1.9.0", "quick-protobuf", - "thiserror", + "thiserror 1.0.69", "unsigned-varint 0.7.2", ] @@ -7672,46 +7695,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" dependencies = [ "asynchronous-codec 0.7.0", - "bytes 1.8.0", + "bytes 1.9.0", "quick-protobuf", - "thiserror", + "thiserror 1.0.69", "unsigned-varint 0.8.0", ] [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-io", "pin-project-lite 0.2.15", "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.18", - "socket2 0.5.7", - "thiserror", + "rustls 0.23.19", + "socket2 0.5.8", + "thiserror 2.0.4", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", + "getrandom 0.2.15", "rand 0.8.5", "ring 0.17.8", "rustc-hash", - "rustls 0.23.18", + "rustls 0.23.19", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.4", "tinyvec", "tracing", + "web-time", ] [[package]] @@ -7723,7 +7749,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.7", + "socket2 0.5.8", "tracing", "windows-sys 0.59.0", ] @@ -7861,7 +7887,7 @@ checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" dependencies = [ "pem 3.0.4", "ring 0.16.20", - "time 0.3.36", + "time 0.3.37", "yasna", ] @@ -7874,24 +7900,25 @@ dependencies = [ "pem 3.0.4", "ring 0.17.8", "rustls-pki-types", - "time 0.3.36", + "time 0.3.37", "x509-parser", "yasna", ] [[package]] name = "redis" -version = "0.25.4" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d7a6955c7511f60f3ba9e86c6d02b3c3f144f8c24b288d1f4e18074ab8bbec" +checksum = "e902a69d09078829137b4a5d9d082e0490393537badd7c91a3d69d14639e115f" dependencies = [ "arc-swap", "async-trait", - "bytes 1.8.0", + "bytes 1.9.0", "combine", "futures", "futures-util", "itoa", + "num-bigint", "percent-encoding", "pin-project-lite 0.2.15", "ryu", @@ -7903,23 +7930,24 @@ dependencies = [ [[package]] name = "redis" -version = "0.26.1" +version = "0.27.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e902a69d09078829137b4a5d9d082e0490393537badd7c91a3d69d14639e115f" +checksum = "09d8f99a4090c89cc489a94833c901ead69bfbf3877b4867d5482e321ee875bc" dependencies = [ "arc-swap", "async-trait", - "bytes 1.8.0", + "backon", + "bytes 1.9.0", "combine", "futures", "futures-util", + "itertools 0.13.0", "itoa", "num-bigint", "percent-encoding", "pin-project-lite 0.2.15", "ryu", "tokio", - "tokio-retry", "tokio-util", "url", ] @@ -7941,7 +7969,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7966,11 +7994,11 @@ dependencies = [ "regex", "serde", "siphasher 1.0.1", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tokio", "tokio-postgres", - "toml", + "toml 0.8.19", "url", "walkdir", ] @@ -7986,7 +8014,7 @@ dependencies = [ "quote", "refinery-core", "regex", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -7997,7 +8025,7 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -8012,9 +8040,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -8049,7 +8077,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64 0.21.7", - "bytes 1.8.0", + "bytes 1.9.0", "encoding_rs", "futures-core", "futures-util", @@ -8090,15 +8118,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", - "bytes 1.8.0", + "bytes 1.9.0", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.6", - "http 1.1.0", + "h2 0.4.7", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-rustls 0.27.3", "hyper-tls", "hyper-util", @@ -8114,7 +8142,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "system-configuration 0.6.1", "tokio", "tokio-native-tls", @@ -8193,7 +8221,7 @@ checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" dependencies = [ "bitvec", "bytecheck", - "bytes 1.8.0", + "bytes 1.9.0", "hashbrown 0.12.3", "ptr_meta", "rend", @@ -8220,7 +8248,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "rlp-derive", "rustc-hex", ] @@ -8266,9 +8294,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" dependencies = [ "const-oid", "digest 0.10.7", @@ -8286,16 +8314,19 @@ dependencies = [ [[package]] name = "rtnetlink" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" dependencies = [ "futures", "log", + "netlink-packet-core", "netlink-packet-route", + "netlink-packet-utils", "netlink-proto", + "netlink-sys", "nix", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -8317,9 +8348,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc-hex" @@ -8370,9 +8401,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.39" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -8408,9 +8439,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.18" +version = "0.23.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" dependencies = [ "log", "once_cell", @@ -8444,6 +8475,9 @@ name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" @@ -8509,9 +8543,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.5" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", "derive_more 1.0.0", @@ -8521,21 +8555,21 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.5" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -8675,8 +8709,8 @@ dependencies = [ "async-once-cell", "async-trait", "bincode", - "cdn-broker 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", - "cdn-marshal 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "cdn-broker 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade)", + "cdn-marshal 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.1-upgrade)", "clap", "client", "committable", @@ -8692,7 +8726,6 @@ dependencies = [ "ethers", "futures", "hotshot", - "hotshot-builder-api", "hotshot-contract-adapter", "hotshot-events-service", "hotshot-example-types", @@ -8735,11 +8768,12 @@ dependencies = [ "tagged-base64", "tempfile", "tide-disco", - "time 0.3.36", + "time 0.3.37", + "todo_by", "tokio", - "toml", + "toml 0.8.19", "tracing", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "url", "vbs", "vec1", @@ -8775,22 +8809,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.214" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde-inline-default" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3acbd21cb24261fc36f595b38d3b34d0ff4e31a6b42edd6a43387d27c5787c8" +checksum = "59fb1bedd774187d304179493b0d3c41fbe97b04b14305363f68d2bdf5e47cb9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -8804,13 +8838,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -8824,9 +8858,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -8842,7 +8876,7 @@ checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -8876,12 +8910,12 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_derive", "serde_json", "serde_with_macros", - "time 0.3.36", + "time 0.3.37", ] [[package]] @@ -8893,7 +8927,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -9048,8 +9082,8 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint", "num-traits", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", ] [[package]] @@ -9154,7 +9188,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -9169,9 +9203,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -9187,7 +9221,7 @@ dependencies = [ "lalrpop", "lalrpop-util", "phf", - "thiserror", + "thiserror 1.0.69", "unicode-xid", ] @@ -9266,7 +9300,7 @@ dependencies = [ "atoi", "bit-vec", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "crc", "crossbeam-queue", "either", @@ -9279,7 +9313,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink 0.9.1", "hex", - "indexmap 2.6.0", + "indexmap 2.7.0", "log", "memchr", "native-tls", @@ -9291,8 +9325,8 @@ dependencies = [ "sha2 0.10.8", "smallvec", "sqlformat", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tokio", "tokio-stream", "tracing", @@ -9309,7 +9343,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -9332,7 +9366,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.87", + "syn 2.0.90", "tempfile", "tokio", "url", @@ -9348,7 +9382,7 @@ dependencies = [ "base64 0.22.1", "bitflags 2.6.0", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "crc", "digest 0.10.7", "dotenvy", @@ -9375,8 +9409,8 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tracing", "whoami", ] @@ -9415,8 +9449,8 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", "tracing", "whoami", ] @@ -9440,7 +9474,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "time 0.3.36", + "time 0.3.37", "tracing", "url", ] @@ -9564,7 +9598,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -9708,7 +9742,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "url", "zip", ] @@ -9726,9 +9760,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -9743,9 +9777,9 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -9770,7 +9804,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -9856,7 +9890,7 @@ dependencies = [ "cfg-if", "fastrand 2.2.0", "once_cell", - "rustix 0.38.39", + "rustix 0.38.41", "windows-sys 0.59.0", ] @@ -9893,7 +9927,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490" +dependencies = [ + "thiserror-impl 2.0.4", ] [[package]] @@ -9904,7 +9947,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] @@ -9966,7 +10020,7 @@ dependencies = [ "edit-distance", "futures", "futures-util", - "http 1.1.0", + "http 1.2.0", "include_dir", "itertools 0.12.1", "lazy_static", @@ -9992,12 +10046,12 @@ dependencies = [ "tagged-base64", "tide", "tide-websockets", - "toml", + "toml 0.8.19", "tracing", "tracing-distributed", "tracing-futures", "tracing-log", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", "url", "vbs", ] @@ -10037,9 +10091,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -10049,7 +10103,7 @@ dependencies = [ "powerfmt", "serde", "time-core", - "time-macros 0.2.18", + "time-macros 0.2.19", ] [[package]] @@ -10070,9 +10124,9 @@ dependencies = [ [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -10125,19 +10179,33 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "todo_by" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e25529b77ab1841ec52a4e8356632b417698b53ea9ad62c6be7d04d5e420dc4" +dependencies = [ + "cargo_toml", + "chrono", + "proc-macro2", + "quote", + "semver 1.0.23", + "syn 2.0.90", +] + [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", - "bytes 1.8.0", + "bytes 1.9.0", "libc", "mio", "parking_lot", "pin-project-lite 0.2.15", - "socket2 0.5.7", + "socket2 0.5.8", "tokio-macros", "tracing", "windows-sys 0.52.0", @@ -10161,7 +10229,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -10182,7 +10250,7 @@ checksum = "3b5d3742945bc7d7f210693b0c58ae542c6fd47b17adbbda0885f3dcb34a6bdb" dependencies = [ "async-trait", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "fallible-iterator", "futures-channel", "futures-util", @@ -10194,7 +10262,7 @@ dependencies = [ "postgres-protocol", "postgres-types", "rand 0.8.5", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tokio-util", "whoami", @@ -10227,7 +10295,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", "tokio", ] @@ -10260,17 +10328,29 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-core", "futures-sink", "pin-project-lite 0.2.15", "tokio", ] +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + [[package]] name = "toml" version = "0.8.19" @@ -10280,7 +10360,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.22", ] [[package]] @@ -10292,17 +10372,30 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.7.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.20", ] [[package]] @@ -10315,7 +10408,7 @@ dependencies = [ "async-trait", "axum", "base64 0.21.7", - "bytes 1.8.0", + "bytes 1.9.0", "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", @@ -10366,9 +10459,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite 0.2.15", @@ -10378,20 +10471,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -10406,7 +10499,7 @@ dependencies = [ "itertools 0.9.0", "tracing", "tracing-core", - "tracing-subscriber 0.3.18", + "tracing-subscriber 0.3.19", ] [[package]] @@ -10432,9 +10525,9 @@ dependencies = [ [[package]] name = "tracing-serde" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" dependencies = [ "serde", "tracing-core", @@ -10451,9 +10544,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -10478,7 +10571,7 @@ checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -10495,7 +10588,7 @@ checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093" dependencies = [ "base64 0.13.1", "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "http 0.2.12", "httparse", "input_buffer", @@ -10503,7 +10596,7 @@ dependencies = [ "native-tls", "rand 0.8.5", "sha-1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] @@ -10515,7 +10608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", - "bytes 1.8.0", + "bytes 1.9.0", "data-encoding", "http 0.2.12", "httparse", @@ -10523,7 +10616,7 @@ dependencies = [ "rand 0.8.5", "rustls 0.21.12", "sha1 0.10.6", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] @@ -10578,9 +10671,9 @@ checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" @@ -10632,7 +10725,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ "asynchronous-codec 0.6.2", - "bytes 1.8.0", + "bytes 1.9.0", ] [[package]] @@ -10655,25 +10748,25 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.10.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ "base64 0.22.1", "flate2", "log", "once_cell", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", "url", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", ] [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna 1.0.3", @@ -10807,7 +10900,7 @@ dependencies = [ "anyhow", "cfg-if", "rustversion", - "time 0.3.36", + "time 0.3.37", ] [[package]] @@ -10853,7 +10946,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" dependencies = [ - "bytes 1.8.0", + "bytes 1.9.0", "futures-channel", "futures-util", "headers", @@ -10894,9 +10987,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" dependencies = [ "cfg-if", "once_cell", @@ -10907,36 +11000,37 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -10944,28 +11038,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" dependencies = [ "js-sys", "wasm-bindgen", @@ -11008,9 +11102,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.6" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -11065,29 +11159,30 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.51.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" dependencies = [ - "windows-core 0.51.1", - "windows-targets 0.48.5", + "windows-core 0.53.0", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" dependencies = [ + "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -11097,11 +11192,20 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-result", + "windows-result 0.2.0", "windows-strings", "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -11117,7 +11221,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-result", + "windows-result 0.2.0", "windows-targets 0.52.6", ] @@ -11269,6 +11373,15 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.6.20" @@ -11313,7 +11426,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -11342,15 +11455,15 @@ dependencies = [ "oid-registry", "ring 0.17.8", "rusticata-macros", - "thiserror", - "time 0.3.36", + "thiserror 1.0.69", + "time 0.3.37", ] [[package]] name = "xml-rs" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af310deaae937e48a26602b730250b4949e125f468f11e6990be3e5304ddd96f" +checksum = "ea8b391c9a790b496184c29f7f93b9ed5b16abb306c05415b68bcc16e4d06432" [[package]] name = "xmltree" @@ -11390,14 +11503,14 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ - "time 0.3.36", + "time 0.3.37", ] [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -11407,13 +11520,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure 0.13.1", ] @@ -11435,27 +11548,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure 0.13.1", ] @@ -11476,7 +11589,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -11498,7 +11611,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -11517,7 +11630,7 @@ dependencies = [ "hmac 0.12.1", "pbkdf2 0.11.0", "sha1 0.10.6", - "time 0.3.36", + "time 0.3.37", "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index 34f8f6e82..d15148305 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -84,8 +84,8 @@ hotshot-contract-adapter = { version = "0.1.0", path = "contracts/rust/adapter" hotshot-example-types = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.81" } # Push CDN imports -cdn-broker = { git = "https://github.com/EspressoSystems/Push-CDN", tag = "0.4.5", package = "cdn-broker" } -cdn-marshal = { git = "https://github.com/EspressoSystems/Push-CDN", tag = "0.4.5", package = "cdn-marshal" } +cdn-broker = { git = "https://github.com/EspressoSystems/Push-CDN", tag = "0.5.1-upgrade", package = "cdn-broker" } +cdn-marshal = { git = "https://github.com/EspressoSystems/Push-CDN", tag = "0.5.1-upgrade", package = "cdn-marshal" } jf-plonk = { git = "https://github.com/EspressoSystems/jellyfish", tag = "jf-plonk-v0.5.1", features = [ "test-apis", diff --git a/builder/Cargo.toml b/builder/Cargo.toml index d23387f87..590abddf4 100644 --- a/builder/Cargo.toml +++ b/builder/Cargo.toml @@ -9,10 +9,8 @@ edition = { workspace = true } anyhow = { workspace = true } async-broadcast = { workspace = true } async-lock = { workspace = true } -async-trait = { workspace = true } clap = { workspace = true } committable = { workspace = true } -dotenvy = { workspace = true } espresso-types = { path = "../types" } ethers = { workspace = true } futures = { workspace = true } @@ -20,20 +18,13 @@ hotshot = { workspace = true } hotshot-builder-api = { workspace = true } hotshot-builder-core = { workspace = true } hotshot-events-service = { workspace = true } -hotshot-example-types = { workspace = true } -hotshot-orchestrator = { workspace = true } -hotshot-stake-table = { workspace = true } hotshot-state-prover = { path = "../hotshot-state-prover" } hotshot-types = { workspace = true } -libp2p = { workspace = true } -libp2p-networking = { workspace = true } marketplace-builder-shared = { workspace = true } portpicker = { workspace = true } rand = "0.8.5" sequencer = { path = "../sequencer" } sequencer-utils = { path = "../utils" } -serde = { workspace = true } -surf = "2.3.1" surf-disco = { workspace = true } tide-disco = { workspace = true } tokio = { workspace = true } diff --git a/client/Cargo.toml b/client/Cargo.toml index 94c5e7d81..85db2033c 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -7,12 +7,10 @@ publish = false [dependencies] anyhow = { workspace = true } -contract-bindings = { path = "../contract-bindings" } espresso-types = { path = "../types" } ethers = { workspace = true } futures = { workspace = true } jf-merkle-tree = { workspace = true } -sequencer-utils = { path = "../utils" } surf-disco = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } diff --git a/contracts/rust/adapter/Cargo.toml b/contracts/rust/adapter/Cargo.toml index d242940fc..717c9a92f 100644 --- a/contracts/rust/adapter/Cargo.toml +++ b/contracts/rust/adapter/Cargo.toml @@ -8,8 +8,6 @@ edition = { workspace = true } [dependencies] anyhow = { workspace = true } ark-bn254 = { workspace = true } -ark-ec = { workspace = true } -ark-ed-on-bn254 = { workspace = true } ark-ff = { workspace = true } ark-poly = { workspace = true } ark-serialize = { workspace = true } diff --git a/contracts/rust/diff-test/Cargo.toml b/contracts/rust/diff-test/Cargo.toml index 91414de0f..210dbb03f 100644 --- a/contracts/rust/diff-test/Cargo.toml +++ b/contracts/rust/diff-test/Cargo.toml @@ -17,7 +17,6 @@ diff-test-bn254 = { git = "https://github.com/EspressoSystems/solidity-bn254.git ethers = { version = "2.0.4" } hotshot-contract-adapter = { path = "../adapter" } hotshot-state-prover = { path = "../../../hotshot-state-prover" } -itertools = { workspace = true } jf-pcs = { workspace = true } jf-plonk = { workspace = true } jf-signature = { workspace = true } diff --git a/marketplace-solver/Cargo.toml b/marketplace-solver/Cargo.toml index 06d8b5b1f..07895157b 100644 --- a/marketplace-solver/Cargo.toml +++ b/marketplace-solver/Cargo.toml @@ -17,7 +17,6 @@ async-lock = { workspace = true } async-trait = { workspace = true } bincode = { workspace = true } clap = { workspace = true } -cld = { workspace = true } committable = { workspace = true } espresso-types = { path = "../types" } futures = { workspace = true } @@ -25,11 +24,9 @@ hotshot = { workspace = true } hotshot-events-service = { workspace = true } hotshot-query-service = { workspace = true, optional = true } hotshot-types = { workspace = true } -jf-signature = { workspace = true } portpicker = { workspace = true, optional = true } rand = { workspace = true } serde = { workspace = true } -serde_json = { workspace = true } sqlx = { workspace = true, features = [ "postgres", "macros" ] } surf-disco = { workspace = true } thiserror = { workspace = true } diff --git a/sequencer/Cargo.toml b/sequencer/Cargo.toml index 41848e92a..5fb19d8f6 100644 --- a/sequencer/Cargo.toml +++ b/sequencer/Cargo.toml @@ -10,7 +10,6 @@ testing = [ "hotshot-testing", "marketplace-builder-core", "marketplace-builder-shared", - "hotshot-builder-api", "espresso-types/testing", "sequencer-utils/testing", "hotshot-query-service/testing", @@ -49,6 +48,7 @@ async-lock = { workspace = true } async-once-cell = { workspace = true } async-trait = { workspace = true } bincode = { workspace = true } +todo_by = "0.3" # CDN imports cdn-broker = { workspace = true } @@ -68,7 +68,6 @@ ethers = { workspace = true } futures = { workspace = true } hotshot = { workspace = true } -hotshot-builder-api = { workspace = true, optional = true } hotshot-contract-adapter = { workspace = true } hotshot-events-service = { workspace = true } hotshot-orchestrator = { workspace = true } diff --git a/sequencer/src/bin/cdn-broker.rs b/sequencer/src/bin/cdn-broker.rs index a45c9f446..33df26813 100644 --- a/sequencer/src/bin/cdn-broker.rs +++ b/sequencer/src/bin/cdn-broker.rs @@ -1,7 +1,10 @@ //! The following is the main `Broker` binary, which just instantiates and runs //! a `Broker` object. use anyhow::{Context, Result}; -use cdn_broker::{reexports::crypto::signature::KeyPair, Broker, Config}; +use cdn_broker::{ + reexports::{crypto::signature::KeyPair, def::hook::NoMessageHook}, + Broker, Config, +}; use clap::Parser; use espresso_types::{parse_size, SeqTypes}; use hotshot_types::traits::{node_implementation::NodeType, signature_key::SignatureKey}; @@ -125,6 +128,9 @@ async fn main() -> Result<()> { private_key, }, + user_message_hook: NoMessageHook, + broker_message_hook: NoMessageHook, + public_bind_endpoint: args.public_bind_endpoint, public_advertise_endpoint: args.public_advertise_endpoint, private_bind_endpoint: args.private_bind_endpoint, diff --git a/sequencer/src/bin/dev-cdn.rs b/sequencer/src/bin/dev-cdn.rs index 5434c392b..4ad18f7ca 100644 --- a/sequencer/src/bin/dev-cdn.rs +++ b/sequencer/src/bin/dev-cdn.rs @@ -4,7 +4,10 @@ use std::path::Path; use anyhow::Result; -use cdn_broker::{reexports::crypto::signature::KeyPair, Broker, Config as BrokerConfig}; +use cdn_broker::{ + reexports::{crypto::signature::KeyPair, def::hook::NoMessageHook}, + Broker, Config as BrokerConfig, +}; use cdn_marshal::{Config as MarshalConfig, Marshal}; use clap::Parser; use espresso_types::SeqTypes; @@ -69,6 +72,9 @@ async fn main() -> Result<()> { private_key, }, + user_message_hook: NoMessageHook, + broker_message_hook: NoMessageHook, + ca_cert_path: None, ca_key_path: None, global_memory_pool_size: Some(1024 * 1024 * 1024), diff --git a/sequencer/src/network/cdn.rs b/sequencer/src/network/cdn.rs index b3b7a667b..a69c79518 100644 --- a/sequencer/src/network/cdn.rs +++ b/sequencer/src/network/cdn.rs @@ -3,9 +3,9 @@ use std::marker::PhantomData; use bincode::Options; use cdn_broker::reexports::{ - connection::protocols::{Quic, Tcp}, + connection::protocols::{Quic, Tcp, TcpTls}, crypto::signature::{Serializable, SignatureScheme}, - def::{ConnectionDef, RunDef, Topic as TopicTrait}, + def::{hook::NoMessageHook, ConnectionDef, RunDef, Topic as TopicTrait}, discovery::{Embedded, Redis}, }; use hotshot::types::SignatureKey; @@ -15,6 +15,7 @@ use hotshot_types::{ }; use num_enum::{IntoPrimitive, TryFromPrimitive}; use static_assertions::const_assert_eq; +use todo_by::todo_by; /// The enum for the topics we can subscribe to in the Push CDN #[repr(u8)] @@ -26,6 +27,8 @@ pub enum Topic { Da = 1, } +pub enum Namespace {} + // Make sure the topics are the same as defined in `HotShot`. const_assert_eq!(Topic::Global as u8, HotShotTopic::Global as u8); const_assert_eq!(Topic::Da as u8, HotShotTopic::Da as u8); @@ -43,22 +46,45 @@ impl SignatureScheme for WrappedSignatureKey { type PublicKey = Self; /// Sign a message of arbitrary data and return the serialized signature - fn sign(private_key: &Self::PrivateKey, message: &[u8]) -> anyhow::Result> { - let signature = T::sign(private_key, message)?; - // TODO: replace with rigorously defined serialization scheme... - // why did we not make `PureAssembledSignatureType` be `CanonicalSerialize + CanonicalDeserialize`? + /// + /// The namespace is prefixed to the message before signing to prevent + /// signature replay attacks in different parts of the system. + fn sign( + private_key: &Self::PrivateKey, + namespace: &str, + message: &[u8], + ) -> anyhow::Result> { + // Combine the namespace and message into a single byte array + let message = [namespace.as_bytes(), message].concat(); + + let signature = T::sign(private_key, &message)?; Ok(bincode_opts().serialize(&signature)?) } /// Verify a message of arbitrary data and return the result - fn verify(public_key: &Self::PublicKey, message: &[u8], signature: &[u8]) -> bool { - // TODO: replace with rigorously defined signing scheme + /// + /// The namespace is prefixed to the message before verification to prevent + /// signature replay attacks in different parts of the system. + fn verify( + public_key: &Self::PublicKey, + namespace: &str, + message: &[u8], + signature: &[u8], + ) -> bool { + // Combine the namespace and message into a single byte array + let namespaced_message = [namespace.as_bytes(), message].concat(); + let signature: T::PureAssembledSignatureType = match bincode_opts().deserialize(signature) { Ok(key) => key, Err(_) => return false, }; + todo_by!( + "2025-1-4", + "Only accept the namespaced message once everyone has upgraded" + ); public_key.0.validate(&signature, message) + || public_key.0.validate(&signature, &namespaced_message) } } @@ -78,18 +104,33 @@ impl Serializable for WrappedSignatureKey { /// Uses the real protocols and a Redis discovery client. pub struct ProductionDef(PhantomData); impl RunDef for ProductionDef { - type User = UserDef; + type User = UserDefQuic; + type User2 = UserDefTcp; type Broker = BrokerDef; type DiscoveryClientType = Redis; type Topic = Topic; } +todo_by!( + "2025-1-4", + "Remove this, switching to TCP+TLS singularly when everyone has updated" +); /// The user definition for the Push CDN. /// Uses the Quic protocol and untrusted middleware. -pub struct UserDef(PhantomData); -impl ConnectionDef for UserDef { +pub struct UserDefQuic(PhantomData); +impl ConnectionDef for UserDefQuic { type Scheme = WrappedSignatureKey; type Protocol = Quic; + type MessageHook = NoMessageHook; +} + +/// The (parallel, TCP) user definition for the Push CDN. +/// Uses the TCP+TLS protocol and untrusted middleware. +pub struct UserDefTcp(PhantomData); +impl ConnectionDef for UserDefTcp { + type Scheme = WrappedSignatureKey; + type Protocol = TcpTls; + type MessageHook = NoMessageHook; } /// The broker definition for the Push CDN. @@ -98,6 +139,7 @@ pub struct BrokerDef(PhantomData); impl ConnectionDef for BrokerDef { type Scheme = WrappedSignatureKey; type Protocol = Tcp; + type MessageHook = NoMessageHook; } /// The client definition for the Push CDN. Uses the Quic @@ -108,13 +150,15 @@ pub struct ClientDef(PhantomData); impl ConnectionDef for ClientDef { type Scheme = WrappedSignatureKey; type Protocol = Quic; + type MessageHook = NoMessageHook; } /// The testing run definition for the Push CDN. /// Uses the real protocols, but with an embedded discovery client. pub struct TestingDef(PhantomData); impl RunDef for TestingDef { - type User = UserDef; + type User = UserDefQuic; + type User2 = UserDefTcp; type Broker = BrokerDef; type DiscoveryClientType = Embedded; type Topic = Topic; diff --git a/sequencer/src/restart_tests.rs b/sequencer/src/restart_tests.rs index 66efbe464..91159df1a 100644 --- a/sequencer/src/restart_tests.rs +++ b/sequencer/src/restart_tests.rs @@ -9,7 +9,10 @@ use crate::{ SequencerApiVersion, }; use anyhow::bail; -use cdn_broker::{reexports::crypto::signature::KeyPair, Broker, Config as BrokerConfig}; +use cdn_broker::{ + reexports::{crypto::signature::KeyPair, def::hook::NoMessageHook}, + Broker, Config as BrokerConfig, +}; use cdn_marshal::{Config as MarshalConfig, Marshal}; use clap::Parser; use derivative::Derivative; @@ -860,6 +863,9 @@ async fn start_broker(ports: &mut PortPicker, dir: &Path) -> JoinHandle<()> { private_key, }, + user_message_hook: NoMessageHook, + broker_message_hook: NoMessageHook, + ca_cert_path: None, ca_key_path: None, global_memory_pool_size: Some(1024 * 1024 * 1024), diff --git a/types/Cargo.toml b/types/Cargo.toml index 5d3989063..0c4151f69 100644 --- a/types/Cargo.toml +++ b/types/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" testing = [] [dependencies] - anyhow = { workspace = true } ark-serialize = { workspace = true } async-broadcast = { workspace = true } @@ -27,7 +26,6 @@ ethers = { workspace = true } fluent-asserter = "0.1.9" futures = { workspace = true } hotshot = { workspace = true } -hotshot-orchestrator = { workspace = true } hotshot-query-service = { workspace = true } hotshot-types = { workspace = true } itertools = { workspace = true }