From f4b772a8813059ccd5c1bf667ea2018ac3839714 Mon Sep 17 00:00:00 2001 From: "krinza.eth" <44579545+kaymomin@users.noreply.github.com> Date: Mon, 25 Nov 2024 18:11:49 +0500 Subject: [PATCH 01/35] docs: add interop docs to mdbook (#3327) --- docs/src/SUMMARY.md | 4 + docs/src/guides/build-docker.md | 3 +- docs/src/specs/img/autoexecution.png | Bin 0 -> 171317 bytes docs/src/specs/img/callride.png | Bin 0 -> 57747 bytes docs/src/specs/img/chainop.png | Bin 0 -> 211190 bytes docs/src/specs/img/finaltx.png | Bin 0 -> 224872 bytes docs/src/specs/img/gateway.png | Bin 0 -> 84829 bytes docs/src/specs/img/globalroot.png | Bin 0 -> 103225 bytes docs/src/specs/img/interopcall.png | Bin 0 -> 135446 bytes docs/src/specs/img/interopcallbundle.png | Bin 0 -> 120702 bytes docs/src/specs/img/interopmsg.png | Bin 0 -> 84777 bytes docs/src/specs/img/interoptx.png | Bin 0 -> 126524 bytes docs/src/specs/img/ipointers.png | Bin 0 -> 180971 bytes docs/src/specs/img/levelsofinterop.png | Bin 0 -> 163344 bytes docs/src/specs/img/msgdotsender.png | Bin 0 -> 85269 bytes docs/src/specs/img/paymastertx.png | Bin 0 -> 106992 bytes docs/src/specs/img/proofmerklepath.png | Bin 0 -> 69251 bytes docs/src/specs/img/retryexample.png | Bin 0 -> 280184 bytes docs/src/specs/img/sendtol1.png | Bin 0 -> 84799 bytes docs/src/specs/img/verifyinteropmsg.png | Bin 0 -> 164358 bytes docs/src/specs/interop/README.md | 6 + docs/src/specs/interop/bundlesandcalls.md | 278 ++++++++++++++++++ docs/src/specs/interop/interopmessages.md | 181 ++++++++++++ docs/src/specs/interop/interoptransactions.md | 196 ++++++++++++ docs/src/specs/interop/overview.md | 166 +++++++++++ install | 64 ++++ 26 files changed, 897 insertions(+), 1 deletion(-) create mode 100644 docs/src/specs/img/autoexecution.png create mode 100644 docs/src/specs/img/callride.png create mode 100644 docs/src/specs/img/chainop.png create mode 100644 docs/src/specs/img/finaltx.png create mode 100644 docs/src/specs/img/gateway.png create mode 100644 docs/src/specs/img/globalroot.png create mode 100644 docs/src/specs/img/interopcall.png create mode 100644 docs/src/specs/img/interopcallbundle.png create mode 100644 docs/src/specs/img/interopmsg.png create mode 100644 docs/src/specs/img/interoptx.png create mode 100644 docs/src/specs/img/ipointers.png create mode 100644 docs/src/specs/img/levelsofinterop.png create mode 100644 docs/src/specs/img/msgdotsender.png create mode 100644 docs/src/specs/img/paymastertx.png create mode 100644 docs/src/specs/img/proofmerklepath.png create mode 100644 docs/src/specs/img/retryexample.png create mode 100644 docs/src/specs/img/sendtol1.png create mode 100644 docs/src/specs/img/verifyinteropmsg.png create mode 100644 docs/src/specs/interop/README.md create mode 100644 docs/src/specs/interop/bundlesandcalls.md create mode 100644 docs/src/specs/interop/interopmessages.md create mode 100644 docs/src/specs/interop/interoptransactions.md create mode 100644 docs/src/specs/interop/overview.md create mode 100755 install diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index c0dd8638c8d9..ca34a5190d3a 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -79,6 +79,10 @@ - [Fee Model](specs/zk_evm/fee_model.md) - [Precompiles](specs/zk_evm/precompiles.md) - [System Contracts](specs/zk_evm/system_contracts.md) +- [Interop](specs/interop/overview.md) + - [Interop Messages](specs/interop/interopmessages.md) + - [Bundles and Calls](specs/interop/bundlesandcalls.md) + - [Interop Transactions](specs/interop/interoptransactions.md) # Announcements diff --git a/docs/src/guides/build-docker.md b/docs/src/guides/build-docker.md index 5dd9cff022b9..6b0608275d8b 100644 --- a/docs/src/guides/build-docker.md +++ b/docs/src/guides/build-docker.md @@ -10,7 +10,8 @@ Install prerequisites: see ## Build docker files -You may build all images with [Makefile](../../docker/Makefile) located in [docker](../../docker) directory in this repository +You may build all images with [Makefile](../../docker/Makefile) located in [docker](../../docker) directory in this +repository > All commands should be run from the root directory of the repository diff --git a/docs/src/specs/img/autoexecution.png b/docs/src/specs/img/autoexecution.png new file mode 100644 index 0000000000000000000000000000000000000000..bef85e282012f49b071aeadaf1b7f9539ce28c38 GIT binary patch literal 171317 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 z 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 y2Rq@08NADZUbY6il(L;pt>yOu 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 VFu(DyRq(%~hxGo)JZOFG{{s(%mWBWT literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/chainop.png b/docs/src/specs/img/chainop.png new file mode 100644 index 0000000000000000000000000000000000000000..bd18e98b0e1a466a6eca757287057ddc8b1a7801 GIT binary patch literal 211190 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%0AGdb6D4xYhLxJ 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

@&sZL-|U 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 DgolPD literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/interopmsg.png b/docs/src/specs/img/interopmsg.png new file mode 100644 index 0000000000000000000000000000000000000000..5469b1a4e3ff1d589aa9cf7801f01b500ba7255f GIT binary patch literal 84777 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 F{{lk|l*|AC literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/interoptx.png b/docs/src/specs/img/interoptx.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9fe295fe4e22746180b8a1497e8a113f068423 GIT binary patch literal 126524 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 VD2$CVOMM40TKX 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�zqjbhELEJ;DUeM>RvXvZm`T4z|T|9#bWXg4QNg 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

cA2H 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

)JEagp73TDs%3d-nl6;fDf=%SJLrjbta@9H_-T zwyBjfJuUFY0;=;K&J%-h@0lf<9IDEBSFNo4R8 zW30G2Q0>rS#IL%Jgt%e&s~bS4WdBUPm1X8<%!DyIc7YT`8pi_`wRFpZ^cQTX(r`Mc z&fmMhvgHAR^9Fjdr1SLfu8r#h_3y#nETIF4&Ol46 zXOX0Lj)ZPZXRJCx-;cME|jwJ)t z&Zntm%a@@1qbfLS|LHu`=#IJ^k!z&L$m}|ut7NQKqxID!c00y!Ti}2@0s8%OLW7^L zM$$+(!HJ6DIV(35DYzcZ)*^;I1*Bi|(vV5>oQEur@a+~rgw%&(i-!oH+o5yV=&uBo zw)>C~*;3sX5qVBZJbtE6I~hPEt$$`@!IXWHuhWL1fOeiE$Ln)S*Tu6^czShL% z>vo(%IFLh$gn!enku<-qB!7+h_|`Jen7urDIWpVfptrG~9}69-X0amZ`z=D!mvUDU zCb5@|lj?rlZbEcf7S>2V_)Tx2<(N=7SEL;j@O~fz16ur_zcfkUiT%9YYjQy7a!j?4 z!Gj);;b(B=Y&J{pY>7YFWttG!Sa*JSKuttC;p`}$SHp3Xe1nH&W6~K-c|~J%o-K2` zae1bM(0#D>O~5OBAB9;_H*Sy+bce$(=hitNEo`lM;NgYZvUzF@0(G?y+q zPt`9zzE6(MRcpnr0gsjig6sD^5+{;gugGqqlg>|d-vqNJtFO(v8YxBcX%m}>j5720 zA#208D)_h8Tfb`Opr4cLbb1TDrh|jGfDX*8S_?TH^3AR7_cyG0|8K9NGcDn_2@8ql zqK!A^?h>2NzF)*w8hRqZk8iJjsGkrt&A~|16%zfL@Nmo_RsTuaWi#$eAv4cd%o$Y0 zbDnv@X4ZCc`AErL%0|0#zwK&T$!$XNu>&aH3TD1$XNyx$8+P4F`j#++-R7G`OI z9;)_$3Z|ZO(45-$^I<8SJ@OzB?@R7}l1aA6;MHZ)t=DbVB&h3cxbBYgWe**@`?pdk@ z3226`_HRAx_xXilyodP*@k%klZk4+E9YmTjZEKpf#g)9oNA_@3>@-yx3WM5M;>oM@ zFaFBQzt6>=AzQRQ{w%pZ?n%sREfuasNFv5qBXXAP6^v$+m!R;U1~Axd1s)`)4TN&~9Zr>Ir2hQ=}N`)t-3H!Q_Kx;Zx}4eWDv5qQa)g zO15N$&9ZeaX%#*)N8R>W8xt+kx>riYoJ=)}d$%Fs=Xm$Y+>iuAGy3h>jM`jePJQl|k`9sbgoPQEbw!W$cNS$kQ-EZ$&zY!@LkZ&y(a;mi<@??uplbl{ zI5h7K=uFHvgbhs*CxgSQ_cdo=WE_vFl2K&fa6e0@)5GsQYtTRS<*QjGjv@;_@jQ!9 zNUayo54emD?S*|7B2nV1&&=3Dw3#o5Rt7lN92sli*17Won1Y3!#wD_Qg`kinx^bb7 zOloW+e(9Dhj2-vP`_J4rAN9ILPBP)R)>G^T%{2zsIML}7G1yl77zmvSKhjvL?=)A$ ze-4$dxW97LTJ|#8Uz&S}0>5CD&7*E1r2sODP+6g}J63FEbiR^jl<`}5OQ_xQGE4}%p8G`eZ5CBfO+C(Cac>=aX_UAJTARz%;`KA&$SEnz>7 z3Z&MzX;@%P`u!$I+NR@~_|;odw*%jX`9by_*U8wbdFL7B?YEX4Jq_$Y)bn}_i*9pe zO>H0K6Gzg!J=+4U^s5`2(qQkxf8UajrR}82-Y$B(Pw2&eHOdys9!c9@GqXO*ru(w4 z=T0^)eY%Ou+*n}I{#$CMpP<-eqD}2|TVJ)&^{uKtJAyzN`(t`QJk{E*cAcGXlT^!W zl?D~K@oUG5Abbjd+5_>fsS{pR2P^Q@@0iFeBGq+*)Xhndxhqvy0d|5jpIek&!fxk~ z;`qIR>sCHSV4C|UYL<`aJ( zs#Pv-5veQQ8t!CRG7Q(kY;i!J4!YFIevCeFuH4oMsJOTzLH!dl#j zBwnlY?+QdkN$Jt~oJA_=V#BRmqFAg8TMKCQBOuGh12MO&(r>iRMo`=pef2!4-=W~Q zDfbNSz_}^i2X(J@(=@&|VIixfs2Lvh-ex;bd}c6CXJ$ntwa%xkSCRUBl{WN(YK&c; z5jTM&5lpL&oDNt4p%^B)wRgug^>L;3M?<0s-FAS48x_23l&G9ia&30XL3ucasYs!W zEjmG`x$;|9KK*S|6B^C5bQC?llp0h>{%8Zu$&<;6o&2xl4G5JTaVz5^$Dz-8UB=5d zVYvfRYa}>t`bAHbcXI9qes5y6`w|k?Q)5Qm)r~VSms2qEO=FE^+nz(q9@Pw>_3GLD zTy*TiA@~d)BNL`BmwZrQ(~gO~i$%O_6sphj>y+6E5WIQhX&|uSIC7apBj2+Av`Ivd z7_uCfw*?|>ZKmXw9#bEFuNS&U=h7>DH>w<>7tBS0G>uy@LCM&%{80*os6g;zk=6l7 ztM@+NZoY+^2Q>3ck@UtdTzLKEYp+5lxw-`k@5-_Sj=6+&Yhm{#Uw1QTJwN=5EkFrVXactc$+r&pAu8XN$~RzJuiDxfZkkO9S_?=d&R_ z#%~*cTAa!Ey$!bFSR*c9&@>I{zbD89ak1UOpz@B_mXCZ7giQ zzmNM6_v;4VSMD*>uPtrvwHo6+*FIO%1H@OMFX1^`wprgXXd6D%%+W6jcCEY8+#_E| zjw8tm{JwH!s(S&JwC1s3={x?%LPa#XA}~=&a%RNu)1zur&EB)4^V*d;uV-J*$5W%t z!^eo&J=Oh>Z0Q7DwwZKsvT-U8ot3bKoHpilm|erLFrU-H=kd5~sNzd~a9B1iZltwv zc{q+!hk!SUijZLOAeS z!0nIqS?IYIHG|uk6E#R6+*2h$=07AwniJ;IoF<=kN}bVDogBbo!nR(EYEwTf*wg{C;EtUaNuTewO zZvPja<1@8D;9hy~Ggg=i<0`gsPM&NyjV+YSK5c)QtAnKhet5yHeq^rH{h4$j&jtt> zWzNhpg%1o!EA^wZa1I-xidPA~Rl;xkmyR_ykdM;qHwrZn$~0Cti|1Q5{`g8TqNE!A z>B%niJHh2n>Xqj<7-)?vk|Vq(eK~?FyTql8!dh$D!pcX>eCG)&TuM$@l5k4zPHimS zH(cIi!nsdNvX{Sp%(Lhy`W(lOAvh9ep1YqtM|iDsWOD5A0FEu^Z|~#SbN=PX3w=%pCllCHlk8+^LiCn8K)tBjjF#THbEPz)M z1Xnf`&{tQP&osKxn9fMt$pm2n$g{<#y{KN-nZ61h88*8%6VZ>eYw7LU9tF9f(BWzK z1q?ncQNUm8BOL?lT(ESG=io3+=f0pOgAWak%jQ;xlCId)14~Q?&Yjr=*Tt(52uSz#`xMo)NMC7JhXPzoPM~ATE`_xZ9s@p|DCGqCOQ? zED0Z_M&G%S#UdCOD-@jQp6B31FYN9m9mG)o-q3}PP86Jo3-4q~AuigZo8p%mzsrFy zyNvrOb*+cV7Z~8wymJd4;zTGxv4@OJp2cU7Dg92tEDon^QYlg?PHx79X=+Q-ThNX zaLOay_MJsvC!MvnKp3YuKivnKK1KDlW;a6}vH-{;otG&- zqq&-8A0g|sr0#9%v8sEkWCY|-^`T3T?yAHC6P<`lzVZ0)i9NY&yXD!*g=BH7f&T8y zMNPJkI_#J}I7pnmVfq-5F-um?2!(Xbgl%sPIgqsCF2n=H9|ywFpE?_~KOhdkE4|B- zvyNF$dqry})6XR-qPEXiZ18P~Im?FuT_ox^^GB9NcU<#Nsw4Of>K6O6L++!#P9~@_ zfH*pXb9!H8Jmteh{s6;ZD^1y_33j-+y6W+kS#LYth;e_#{pypjG?AuA`fl(M_u>;) zc-D?APsT(mHf{n?Aq%DYnF#8}LF@$|Gq7%|V*I&K@6}cdJH9`S1m0A0VYoeR3TGSy z{&~BCiZ?n~wP`XiuJh#}sbGa9J7quA%$TrWZbBg4sL+WxVa@+3($9(TfKV8IW+uON z&*>`8B8g^>b;BDEi;L0~j3G-mPxdOVQ1v@hu2K?ub;eO#1~AV6uy&7`K{ z=(#F|zq>><%%XqvzOsi6P36O*pju7`{tvS@8rU8oEdCVMY4AzBUP5#WlzdY>>$*dM zIb{i_oOEB6L!rN5l(Jz*vT{7sd-d&OZeQ-f-V&XY10xCs2XCLJ3&G9T-_t**vam-t zK6vr{Q&7VX<9=C{kzi>%Lg2eFZ230+5crZ_b+8niw!J@+Ow_G!Zn(W1q&&VnfESZG z-mOHJlw$=goE0h3dZ-ykBm}|qr1ii5w!ibb<*U?&hQvt{1;~G!xPB}|D$aHPVTOH7 z@%z_G%;US zntM8Bi?GXa`Y8^fXYrnV@>F1n(f@h%#@+MTODh9?HT3PJ`$KDt0-1c_nFD-ZO2phjxvoiSzx|3kGw9PPS*MI2TrBk8<+^K z_|vVd_eX|a(B`o8YmkKv{aZIdJF!!b(k%UNFQHL#X2Y~WDhsed$I>(tm0!n=H=iY; zk+<=Q@MuK8s{-M|=}LC%DWPzKY`2x65EO0AAcvTMsNS-o_0*84eHG-oM!rj&&&Rq6 zVdXeu0Ic5))_~_}(46wv#eDU`x5<*DE8rqthnQeY-$m3f{bK)<0!*cNN6B2R8YQu|A3du^3$T!$S9+2^jKh(^WGRL`&uH@_s`cBBDLU_%*m0>M zeO3((QSMCT(#pqOyw(zrE$>u5?M@gbOWKT!jE>lcFg*;mGmII842@Y3J)YLK2IaL9 zTo~2M$dC-l*;kES;vx5!vPx1=y=06*-M=v%jr~D2Cb`;>hhAErV=4En`Qo>EvNn|{ zcIykCXNeIBaApH0vv?6jv9fcTu-4dYZ15&3wpZ^0Bw8*6tDosI(fh#8JS=W_gTEYsKdyr> zHxqbJudvV!S?X*uo3cAL^VJ{^@t9ZZf|m6sJ%kS)-iZ?L+9XT5ESGMQPM-{5a0ljw za21B6JRX^YNZHAIx6Q50M}+U){wn=e!fXhqo`c67>ezSnlT?rrh(Zjie7fLZR0qmiWSQJ_-Bmclm+VBy>75>YHs0G7y-_?6 zh1z@y^iU6UnPeh0+g8bhNcwki58(dJ9RV@Hx>&|EIEei&DkP(;KII}}-)9=AcS@kUO z>$cqKw|$O{p--aU?vKj+a3~1Hy^J5iHYf(t9nWz$o15u0_w|ONiLCHj2)A)VyR!5z z2wkgTHelwGM%hYAEOHhLKHnqg$I=Sg<~H&^ zaN5z{zn>Sb(TSdY~9UJV;MpH+z)tqh$VHDI*sW$GeMugGwo@-h)%k zA;Nh+667(;(gd6u*3-s^pCw$xyaVJDX7)8R-+_+gjPOwJlem<8%L4GHiDXA)uYa<6k{x6c;* zq%ItZ`1(ng$s5OCw+RcrZoKQEAQ{G@NNyzj6JKkEI7bXij1JNV9MjpEDb?Qwo2*xG zHVKKtHi0-#Dy_$+XgTAk9kfA7T)=E*$e|Lu5^>x-=Uh5tiA9FZGPqXiv}1V8D|rM- zv%{WZbQl(Zb63OWuO5h9k5_#Yuv(TqYH6PN*4xtDr_s940TG7u`A(4$3JX#;k^ME+ z{*JQJ+sM->T|Joa4X;R84*(vBeIJ65_yI4?D>Xw;VlhPQOCns%>(Hhu;4)1IUF-V< zK1)t$-S;&r(=6Idat)0AiSp2DZ)V89n*4D|(gDY%7`QMF>**)RNk;1&HDM>%@&#?- z0(4nm%0jcwas})XsgoT&nJV-b>Jk=n{`ra9(|C5b)(HJqOxTGo?=1N**y*AAKqDCj z)POps@u%TPkRsQ>mH9a`=|H~s)*ur{k}+IRdq}i*ctrm&D}c!bGt~sLq8 zb&>Hba>Rjtq@v|exx$OT4L7b+5G?fP+n%p3PoL}(+ z`S@z{_hLzzo988d ze@}BwF0il6_r*JOI|I1JE5sQMjHLJx-#G7@1900Ce86v;#U@=o*eAI|q`fsD^; z{HHd9ML0U^3XWqTJv03m`-_VaKiZmr!^YaKIjV^!(pE-StF&=lr)_awN!JLg;D z-rQ5PWP|5RFhM){4`i-@DV$|LJU@&ohq)}2{u2nxUz;l}H!YjT@ThxSQ(rxZXv9ZR zB8Dk!GUHz}UPLu^AO4`D3`{%BbpM%UA?r~ZJ1Z<|OJR&>j<+27Zq?O7QKWLU9zN*Q zFmj?BHK}|BQA$v7!KUc9mFW$stL$2N2>1PRU~@gdUcq!$)b7f0OkZLgSzBX5=aDYC za)hd!!-Fl-M{Eqb`HY7T_KHUJgt*i%qeNnoNy$9)Rb&<$KiZ^|CxpW6= zT6O)@_CNNeFV!ze(6fLQ(&Vv~A3WIW2OG<=m*MKDO7djM-WOSEs-rKI1SbVogw6z0 zOOJ=$q2*T#Pn_ugh6l99yd4kUrFcdtyxTc9!^YC2_2LpDe?Mpl^zHk03fc4modK{G`5JJu?4A zMsZml4cP&vOMmkT5L7OP45Y-VaOL1~43Hv%%#Ak-Ipcf)Ghj)YD21QBv@&2K&zfGl z7jr+dM1%v_%Tyx|=cUd&3C3m?3r7wiW6MB9QS3Un9!V_UvnMtkO-g|=Aj2H8M#7WQ z@zNiYOp!wl>KwaWhjNZz?>hP6CYXF56f*&&0n-xUY>NXI&|dka0V7Pe0dtU1AG;A^ zK}&QBN`ykFE*CX_Jf_b8_?W@Dh|^$irplZ?-;MA?$b#yG=nfEM7e%t9^jR4hI&JXX zdoFv!B3-tf9oG~w)Tw)eA2hGEDf|8#Oz}@a?KDHfL>O44vIMKenx(*=aC-j9eJ=DZ z6+wI}$pRlL<%W7u{2k@!>(qB@C7!TEM?*8!DWkcssy;Jk+)XNqj% zO3p=X8A9dv&U8FAU}I!a_9PjVhvc(GI80{)Kl&Z6c>8*-Hhqrou_|RKE`W1_lu9K; z7&LfjAtUfuu7s7+Y?JAQbyfkRS{g8(vmvbh4@!iF_pL#lGJiW@<@Y6HkR4S|k@ zx<~gP!d$B8BAN8eA@La#ATN;q6WG9c?l)2qa!`f!@lF`K-s?e(A2e=t53F+gU8vAt zuhfNK@%PS>I?n)Y!7w0iWXCZ!+&yOPo4WOkhp=iMY}Lnb%O6Xp75x&cOewGQ^Mis! z+<~KdLVV3@pk^1n@qOp#v+Df7TnWBi_dA^n*uK)Gvqw_1y(%9BM%NzF$xv% zAjCzpCh8{_Z1G>8sO)_DLPc@%$%yb54JGn0L!#>8f5;M`Tmv&=0b98v6ENL{I>-rF z_y?$z=b<+S1Wc|ohY1rn4pD9OZCL{kAkFhFuymX?;WJ_kyeYMUw$MIi_5*HT>?!|k z#@Snqmay{hN+#u=LVNX`++V%X6e$d-3Y2+koa73zyS2XLQ>$)UpPU}Z>K$E79(V!% zff{8phmb~F;-!9mgRV$TEH2CJ^C=#E`UlXMY(32`0y@cAlv5N#K8*@^@cKI>$aB08 zm6mY^$yYuwe{ih^N+u@D>}_-o{*>IijIV3q6aKHWCj~6-Y7dc91lD9dY7e#bxN-&V zaujmoxJj-02<2c6NfQwC$JMGEU@MuN%A06&=QQt>|LI+rmcv6H{8e3_0PX;nnrnE_ zFcEltjE&?)>X>%AQE|oEV>k96^;}jBUX)+_mY)B`RTmUS*540Ykdp?93oIPX_M1Tq zXw6b!Kb{Mc_H@nz<)C^Z5nvck7OIOAG??Q*GMbo}>@|j{Z}-Y@p5UWPx;O0z3B#EF z8!V|ok>lahMo)wi{&H65rfWSSVw$N<3)i_l{W$Db%qN#GUld>P@hYx)H;V6L3)S@7DII07z0sSEX=onQ12D$0AH?VLb4j*peM zt%mqP5L^oCH+V;`q{jh=N!-^f-BNCzAb#nuyAVEU-ACY|$)1tMVij7@SZ!6t49 z>9L%32pyMhsKd=NM$xYC9Q4}zZ*=0NbIPwjW%t9{@!c|nzG4J<$cBhjC$kc!o0$bQ z%NS^;?r_ZfbCxi=$?V!Qf8()t$wBgpQ03Y2<$#a39ye<>_b0#dI|zvOt43A;fXf;0_ba2x9kvL6!qP>q8jIq7o4!V@QX@^l1hjqJ*;u!qBIf zUlxONw#9FhXAn|wW6*ndMYM!ZOk?NrL#(87KQSl+8E}CUf=TSA2EB`g--KNnSd?@%8>HW%YVXR93 z3(Egogm|Koa}Zv_->){S&5b zU-E3`$?$z=k$dX)1nOOKYwx32-dqB=lwHUjiUb(%{pcec92sNVB}!~etA5^F!JO9f zR=r&vZqwj^;aC8MGkq`b7-^NcD_F`b7bqmJen^h!l2O7_Lg}ewC016Y8u&s$9}v~t zs%XnKh}5Jx=Sow>;g7yF;tJ>?OdN%hKn}bB$J>6L`Euej`-Xap(xdx_thn((UXp@B z1_?x|Moz76nlk$(AEJ0VUTmTayo>TVgdD0U!6Xy2W`FDZ3Mrj}ukF@~@5Ox>9m(2R zVO;P$rV`q)R1nLJO9wqw`&m8yxtP&MeTP9&daZQ?hk4k>&-?%yk8JpYvdud&kVVTc zgzg(Dzvx+}PUgYd{cU4HenZn=tN{{J_4K3o05Xs{^KW39F^}X-5LQNce;ODhHjNjm%=z2TtjZrM~_qKdV!!=1XK4Vb%|W zlSluA7!Ytx42w^W6(Q>K9mR%!f9HR~!7uW+?wtUg|MaqX*$-WjX-l^~@f~C~usI^N zv~oPr&{`yR0QF6v;w5Od&5Tg6BXR@gSQH;c_I)7X=zQKuAR~I=Nm_~g|M^;c+4nSD zeVF0aI~2Q(-$*U@P^b4*6zj_7$MLVh zA;sLheQg*F&X?vm8~4~B-I`cLI%Ihter9)6`T?@^e+}q;I<(D=!9M#YR_P=`@sb`JVT$|9**y zMlwyzqONMbRzxb5V&J z1C&tx<_-8EvGzjiU-v5e9+yxtJV3We|LTi-n?(pd&GZ8iLe$94mBzV;*IFaCx>yaA zQY~ByGS*e@JuQ0tuZM9=0m>4FQi~EYi%D*>h?8Ic&!cjDcVJo3yc`Tl>N|6fl-6N*MC9K6VO&s75^Y;TFm zo6*J+q~M?9V9_5j~&w64+~l{K&Z zuUpn(gfTkT=$7900ei+`vEg4xo_{95!~Li?OuPP4yRzrIffJzjaOxd5LG z%KTCM7YFN~Uy25Q>U<*btShL_;3rbOpGSO7-4WS;+w0Qp%4>T6@rm0VZHIx9M`kDg z%uUprRsGi#JJ_T^SI7t-*PyNaKVu$8heooZ$Zk?FXB{(ojp=ce7g` zm~}aov-~qsf87^qUVWDRbiHmOw}@oMs(db|`+HS0`u}|92R%$XLGN2$`?#rA|9X$M zi_7&#rB*uT^7Jfxh6wgdvYqjQq>fJO16)_B)dZ`FRtM|MQT7 zq>Tur4Pt5r*$Pty4S1G2X;w`=ozCXcTVt2*&!)@k{ruO*N9X>U`{&{R|G6&>{SJp| zXHHmg!Jh$h6e>f`$CCBxF?OxnBU1SXNto?^L*{oQ{tiO^cag`q=sf5O+uJX!WhP+4 zi0Fqn!@#M%YD7X{z&$(I|9lCxm#A3z(z$ZTiB%g!fucBF=Jh0 z%|e6T{Dg0zb-DZ^e_-|i&i@AXeLZ1V8KSnl+!2M@Q0`u|K zFbX%R8k7y%Kn{ry{O|ewwc>hWqb2R3UUYhKRL|q`x4e&38@NYD9?IV-^zH4*V*DGk z_V?-}015cjT2w&4rH32{ zk0<8RpW6}q;*-j7#uHUD!4~lG@ZXQ-3~=8_!2z9b-b8*8dAE&(RxODH+vi^&k%k_# zqa&hqlG9!VM%JP*3@Bpp5T=||f-s_y5uIhCMvM91W59uqsLeY*{Bg%?giyGHN$AB7 zRkHuz}TkqKz{&$D|w6gSdx&U1{ zEPcl0{~=mlAW^;+$G-)74d{A;D5~tm_0h;M2;@@g^%vHzfJtiz)nsd}WSe=465KRq4(}IrYDu{e~6L#L0uD zI?7v*P}pOR=J?y~l62dzX0>_z?cl^XRG8!YLf6pt-VsRM)wbWdf8o&i5*Xt1 zC8qlwf1rB@C<4u^x}Jqi6J~yMJK#*P29Q>&rZ0dFkq@O7Mfs_}ig6bS{e4*XPhpG; z?LZy0hJc+YTR*R+I54Y0J=Q_i!B`Zr|N75BQ%t-egY$r_!O6e3Z!z$eWuYErfrQfH z^QtF&2A+soPC@=|#u$W;7-voQV>(>=Xlziv{`3G8!WOI`eroBCzXLl^ z6(ryDZo2V~f3T(FA2Fz5ThZz8zw73yr)ghBHdSpV@Upl)*i+S_Qtr0s`+4JjRMTNIt8 zF1He%;L#o(Qtku2MzOPoh>gb0{Cr%23uanL&4hTy5-ibbKfcCv4Ij@aEIxg9Seed*-~cYo$$N!r4aMZ^J2Rmn`D>x_|MKvC=?QNJ-zsQOYWq2|Y6K+sqb`}tJ1-RWi(6G_~ zCQmf~HF`eL(&KH?ph02|t%<_osst(4lk^8aHPTFr4}f=D2uX?f39u!6 zs6LiiPc|-5eIVnc%R#SROcdD7@nzp^J0RDFi#38-UQnQcI@b~rKaXH7_@op&2QV7o zY&w$(>^KN>pQ|B-#aki1?U%2WH+ufsht%MjCx-9vsK(ezfQ~P9u{7PlO*AF6V4 zzc&A8S;2r>I(!;q8?2aS1noLdM0kkQ$SfAVA5e|3p!rnNY>MxL#caSAqb0G@d<_hAqCsFH=ru6c{8=W+Ok`)D|9ub3@&wld_Ynl(yX)vnt4~$llfn(@b5?Tb`Id3xxVjjP7`*_fX>|%{hv_wWLX3~19-ydrm6HI0Pn~S`Fz2|I;TD6Y=ttTC|UV;M-OL+e0C)#RO zw+U!7uQO0pEP(GzTHQVQBMXV~NjL**oVsyw>)`-9_NFjMPE!3!_uMKXZUMAdG7M{? zf98S*fvAqWU}dhH;ZO529bFLvsvob`bbw01k6qHji_^@jHN(jB-1j+G>}y|pKh-U8N&#O&=)n^)cGH0mc?n9|%o0lmf%kh`uY-!>NBDjL ztn2Y0wB$o`w&oPvdO0)MYzojKBS_7CwTt=~F2=>v(?OBwZqWTQ z8BL>wTMRTxBQ!9WlDL~+)W-3U+h&f6p#7&*`!NZQ*AY-l5ElFz+uGaU247M!FCH(9 zP*6UO^i!N2AWJExWNJWYxCNh)FeL%lJNFT}t;K9WXuQT5WLW?@*@f$(^bkm43k%N% zofXP!yZ@W=I&EtO-K>)QW(Brka?tGDY=K9_3Gq25*ObA12e7JRytdQay>tUe`hShg z|Kf0_f;l4RE%|_958I#d%_$2!ER~KhS>u^~<|~=PBKx<6^q7HONQZ2OZ3rpIa@>ca z5=#g{>i_L$eq10K@AFE4Zzl=99o+lI+{eAMeJJ$%vMJI_pblb%bcNi2cwC$hf@3!# zp7A%!%0W|H9ZR-KFus0T#1|TR7-TxC$jzB=|M{)g=Nm}NoEMVIJLruD2bv{>VwFNv z%&Cgv7GN~2NkDJY2<`-&Wal!$Hp>iOuWps0)P5H!W#L_V+y zB%C)Za?I91M&@{z()V}O_ZV)Gfadi5{*2aeHxwW+Nk4nzDF*e3mT@qv8c|Bmpi-jl zYnouh*QlPq*_*E_r6;r+r}@tfJOBrBXt=~n%H^|GQLUc*QU@0qDnH0Uduw1f`8 z=kJNozKr{<$9V^I1ld7@QsXBN1kvuP`e1d`p=Aj7~eQ`%)q;ug8L;*tK$kH=3O*R~{UuF5Z~Z*#)gMS>0@de-%#~SH=_C3rx(-AyM7u?N6S&Rz~1I z?*dYVEk{CORNng*ujE%aMQ#0ffA^8s0-R3Lp$(bl1AyY0ClD(^<|9O+y(0fpZ+@2~ zwV*J$XpEcelw4@{&XpttlfOZfo8c@&6RFlO2ZgvT@{VS=ZWGT)XOoV>loOCoH zmcJ#1{kj0*h1$CR#THbF_O?K&%|I|lGw)*SOB5HFdwMUBJ6$Gf86k_``&H_>&fqj8 zh73^|fFPlc`7&{M3@ndzbb#Ju>L7O z*oAJEppNQ+h>FNbz(8X`k=i(r^xNrv2-fUtGx3j+SwjB}xEUbedQ|H(`sh1y`l)tA z5d3gzH|6B$K&PQ~v;n&1FA^!67}?*|F@fK%V=tERi`Z=qkZGRtAJo16SddWGAso8R+zFe}ReE{rf ziWs^tT*8=YSWBC)%;zi7^pN;=E<|ySoL!o<;Yu!$XU7fF3m2!f^hetL7Lz zGZNFqF8BQmE|M%3qQn&df*a_I@iKm(mmf7<=m9|H*!sub{|7+)ise_t38dhUyQ{%p ztfhe*jPjq%a@hJ9_YP8H@sCWdb1+ zh3ys3lfgG&yd-85jww@%K_NBP_-M6FR~xuBn2!)P)q~%JwMS}V8rk8HqILe19{|a&;8Jn6;ZGMRyWVMFJ}zlKmK+UTNvQQn-y;UV!!RuK z=D$~r1YEI(`8=P))8Son_=mQy37_EIC@s*|d#yhsHvy7D4=jSn?R&_AC=>BO*l(FO zj#GRPDyEMfMnMfunyFaYiy90+%B8SJa9FWmA#~t))=M6 z3F;d7b;>NHuSp#(A7_Fj*lt<3{9fN8DmqX`nD?So#}q2c3PY1N3FDYy~xMMnDGmnII7wEKMKvU^0mh6LBlTZ)q< zf3ykgdO)dY=rnxEq74T!t~D%OJ(A$#?Wjzd*5tYp?SmaWwbuQ>PXrf^lKi zRPotpHMpv;QyZf&tw^z05R1=F!003&>)K*9|1Yige*qwHsI_;^L1MZCQx0sWFB430 zNXHK@G}AU%=n<&9^{@yBElQhea(HkFJNk}#K`u?|m}{L^Rj|DbAf#e^jU?v-_%IX3 zK^=Z|t%J$RTdH4?&jp2nBtI6S>ww^gQeDQuH!<%j2sDXIuq03KE1(MfTJmGIYCP)N z0Mlv0Iv19bx|K%`pv`+ic?epd5FE7>^!9;gsw-Hc=3gb$wb3%PjyvWIymoaK3sjbX zPgAjq*!L3trgM-Nu-M}G)PsjBL5z2As09kWG((mzBf<~rV$S_ZZb-{lmibBzrs2N> z5u5XAQ?S}m9Y@gIMXWmziYAue*525<{>&INQHD8R;^9}nV2h`;IDa*=j%4tXlWk4E z_&-*MFnVa6Xsu&!tA4!d^A6JTYIf31X&JprIhThNvj5lY7mJcwq|Y*ay_oo*~F6*Y68rv@t|RBWWa zymAcj$@+|5g`*x@gV?#@v3RYIDQ*fXx>C9W`WrWyG?XGi&v$_jn8(Wakb9werQ?RK ze;&^`RG#B=6(r0duJ@KcT}z^*FdzJ(1B6Q--#>jmn?T51H*(ZXZUk}%+KLlkU_Yso z@5jGTYcKQ zFk7?vs@FVP`VAgRFxQXfGT$4mW0OttnOV+Ne-b=MA5(64^@o88_jg;#|3H0zDY0rydN|krR@3oBYhtzv0b4m|5qrL8J(X4ppVd4PrbwceSPmS zWBfUp9ru3tw_#}#;=Th#mt9iTY36T@DBK@{GilVXrqm7G?$@ti6@9f$I3M!4tK49F z4O#>>ZQ#ijp24KmDze7K06LO_Z^fy~6Q+NWk=R+IoJeS)n z&&|WXAZd$T^k*hHxjrO%>_KNFyHARmE3;I)Xt;9uvZG*HJOAfEj1vF@`41+wiowXl zSdj?NSE;7$TLk{ML2)r6)FK_z6tf(Vum!UQloM{9m!sb$jb1`sHVnWR`+J;|0^KXE zG@!^SO9pL^S5z#A3{m_lZCfRRB$oz7ofQK;Xb(iwX>PHLt%7o}NsCXCTvvBfj zLmSE7Mb(t?wMXFNzJTV{BLa4z-@y#>{((@hy~-xTs>A2^{gt2#>rE1LnE}odF%JJ*zdn}YZF z8P7?ARgJJ@|Mi5O8FBiLmMRv&iTuw^e=7(Nb9XJq>nDl(NNVd#RWtna+eE$wPuffa z@Hz0*;{wv;0rj9SN6}z|y?cjmL8u8RaWw>D50X>>NSB$)WOg6(Es&)v_AsSE&)o#p zQ{{0FN=`a{lA1maPy@C?pDKRqf7+7DPoE^;1Q?|<5}T&qex-!{togIR$Qr`*+K z|7+sl$j~9DrKhO{A5Wk7#kq*b!%v53@YJ!li?uuTN@SF$`~pxdA&O8&Ghv2h36iHx z7_lamB3k`s8{$)qhiqnRaO2Z_sQ~paP8bfM zhg$%{R;hc`BP1iNbKLc|Ep{KEGF)Md6~UK%n$1Ri z_#^N&^e%DsIR^Vfh89Z6#PkxjZboYXjDclU-`d&|8S#vq7ob&npK4`G4B;3Pu2Gx6*Hwdm9On~1WXE%5w*!2tdZcjk_^qB_L-vbMW^k%p zB3%6SemU9WYcum|5^~)W!sn*pWDB7T%!Y`D?4V&>}Fn$YqgaA-xgIepR zIzD5kWVzqwb4}OO+=y;Lr<}`w!rm75UnjA{1I#g+r{1?ev?=74Xco#cs}s|H9l<#= zo1(n9eUg?x9OSRKs-jei6gX zOc>P-WRFKX91<6oEz>Qw9sc}#9$9uPmadfeFimXfMBQ55-TU<=f^egs9FiIQM9xQA0Rb906^5# zXrj7-N63%PC?a_>H;%wVGloQgQaG%|n8)63LZ$=QGuC7)yFXas=S!e*$@|U09;n%< z`_L9jA+@&jY#;JQaTs8e9+?CE3|Ptud>Bmt1{8A7_4*ihEeKs~INCHs3EO0k$#3%J1#vEhV{V9wEKcs_18cLSdx3#^>04>)KiuE1EOpcf4p z5nny~2257Cz>9QI#2O%zQAph@>V5GIMawUl36?bt_AdrNV{48ldj+|ypk;}kv%T?z zZ`S&`R8x|0xU(BJ^7lmg(^Ggh#0H%>>;q=<&Vy+k(qj8^++DrGE_SXK?eUIMoe`=To#BKhJ(EbtdZE!b+l-Jh>p$!&9|P-Ap5_6%5+14 z5=O17yNt=0bpw%Cca0FHCy332e}!Z4(9VRU`+L+q_48+7naik$HwD;jU8?0rz%aF0 zgt)8XdL;(SoB)_@=v}y8jpYBH2Gn~vhm3Hkv~E~)YJ8aj^b+hr#HU)_s_~P2f*@Pi zAzj7V9Za_Fkp8squ&V~l1e7ru$iUk7a;>pH3Ky#u4ik|22w8u6uyhCfO{f+TH->^p zyx;!v1er5Vc|%~87xdGC1?pe_w2}cL!|igPISnM|cel;Mj9wu=EuO0FIDc9Ew&l^B z+MkB=Pg>&zRVCfSZu06=O25&bjRIA!T0rm2hZ^)9?B9|P#s_yDG7>k)x)d0{OQo=! zhlEiFBhS5Os$YwB>Ue~ULfc2C_VODi&V+J}5k9vay0oeSn`8>pFJ!ks4?0FA&vyxr zCz#3J^=anBaIB0#7C7%o&rANAD}w?mUv}eGHw=xv11SxZSZzh1wU!kmgMT=(1CVP} zqwchKzUAu|Ex)~tI8AcxP|WUKu04`?wZOvynK~F1n@oNa=)g%XJpB!NY~z|~Q$l_V z`&+PJ)CP6;PTMBb0Y*5(nm;=p<=`BHxvlH!ebKpkFJFZK+wvCvQ#(-J6}G3H0%4Ll zBG)B9-9&n=`#HI>^2J&S!078%p-sU34xzK}W0I*I%`H zQ1E1F$GpUJ#Dh?aDfB$uyv$0RB8HCN*=uQ80?hEf`X|pWzAl`Vsp!c!Y%3e<&uXnZ zPHd?nnj8R{mI{L2xR>sgAZ6rk4wMz;ivst$Y(;}I=M&KVR<(;ECkDvVvxE+H+Lu$+ z^1HYrhHy77qcIq62=dd_e}u%i7dyR02uqxTZs(fL>k%l>%3Vmyg0m$Qa)f~#^Fn=y zI#S8SakQKDtmNSZ@Y-2*5boiB4KwY=>Qm*`U}0(gmFWglF5)h9fq|uYkNhj*A;F6@ zm{s-o&a;@V3q#<6C_9%u50L!_yQE2tpFa^^_mn)Th?`P3d2GB0*4H$hs|%F>?#1De zum!WmLi)~&Yi0__j;Zg-E>dgq)|7LaB8|?f&P5nEu{gC{Nr(|%(=%?!F|M)b$ zitJm;dam%T*_ahMr3JjbE8j$OBQXfCG>!)UHD1Wjm{)h^3X9{SS}dp*Ou7L zjS>UZMW=1+n@@x`jl%}{#{E=Dx<>C&2u*3m^{%@R3&X)QWpX`G*H5NWZwx0wy1iEo zn9mRI}}Mk4?htEhp~dE_hCz7ECiNmY^1E=Hbt`0JCR0*?oi~!LS_ z?xp;7(E1avAiGiO1^y_@B-AQNP7Yvabo~dRMLk z>W{r5Fm7aX^4ssdhm5fO9`dx4ee!vYdR2I3Ro8Vn@P0j%WPu4|kDteNTeYq|liyxr zvxN*PV@t(GaVcXM#a!2=QOmF6q?mJH6xg@)h?TMqP8X=aVkJ3rn3GfgmB5~P{uFfp z*xUP1s%Fq=7?P-8Qy*|UoqT}roXrPw=2HGi$JEi-( z8N#7>5r5+fW;YB6Dn~nnuv9#o>=rq-Wl2&lCBRa(@UFK>&HfNU_sWiciuv2Bgo4<$ zHl5Y$ylof^siRpFTB}hXkbKo}?lN_eUY(J2cGsk)yj7bu?J{tMaxzY`E01&1JNYpC zjQKA*TaBP1=<;bv=5Bf-fV1&MUa?s;BQT|lbOYO+0{|jTL4OMBgCK}`^MFw;cv>_Z zN9V=CNtD{sjsTUR&IpLI-R7`j+ z=)C3l%~fMRrd~2LbSLbw3Fj zyYJ@H)6=~+K2Ez`2(-}g$mzV%tHoZ^i@zvLt{%&>-oDx>ebYvJ^Zi(9vUp=HHN(~` zHh23guD89KE-{TRnp54JxJRCunvczue*CfXaIL<{aW$@Omchu~Qi6vrVIT$9v?W+F z_K(%SxntVzL9V}m+7xcV=`>!4#+U~c8WG_?w`Zygh0O|I!yXzhG`bZ?M?H(#P43Bi znyfFEHVLz$&aDYHh~>Vd8A@>Sm2iwb(@4~{mp#lV+9e}zd&E$*6hVObu*LQgGOoikek2E5WGr($1Ei`g6e@7lsRE>X9UL$sTD&5>V5=h-d0*xhWp zBM3L=3l^tMN0y%a;^p+rqDpsXl!1Sr#L|!>-Z3bAPXW>=FtX- z-h)T?6&Xaz+7Dm*>aTZ9k?L$bUQ{R7tCZNHqafU)SNcj4&-Z6v-!QY;wj#glZDu&? zsNGcULpY|bw{LR4SECLU+-*BfzmXSNu(HMjPGEIt0#m`o-F-BHCB<%>1nJ2(W2;oCWhX==8*Sd+ZcuPO-<=#v9g&@gh5?g2 zh2eUARyh1@$}cZKq+X8Lip{UfDl#T0fxK7^EcQrf&Xqo}iYk5-n0Ad*a07#pSvTRO z_3ni5C3ELE3@!E)r5PstBPxn^WAo}muS1Uo0)fGtelK+B)xJ=KHd9!nqPU@&&Ls5PICO89q-n3ZLYlaq^Wd+wt4o*emsKH zTf8xfLKWXK3$%2&$l3QDo>Q%R41Y#Wx`BYzWZ{qM z*M8(Eb71`ho>KysX~=@Uq}AV^Cnkosf;p;ah-@^yS4|1>Mz6&UD*9bHV_xVsn#R_t ziuzNw!oQU!!!r{spflNgZ36wQ&MkmIk8`H6$mDjGAwe$lctz9sUTWd_HLap#LZdu!%-7{o2D1@TW&~XtQl;v$R{y#< zt9)6Vw!Bo!U7_#?Md6-Zts&c*u5s$N z*$Cgp#R^&ecX^{=Df@PI9y~+_3;5-h7FaGxlKyj_&DD_t3#(6XzW-d{MAJ&ANUqfo}#kCbyu; z?Q04f4aqDhy1FFLja4v()L_{vBrra*!J%IO{Ddrs*5G?tfqo5Ko8b-9{yanI!`3O1 zS_OU4AUd~>YvofEA@Z-doHQPuY`fOz5E!+|=Hq!m8HL2XtliFwFo3Xji?=9~p0>K7 zJKHHkv4A9Qn2acGHWa#0QP%J_)lI(!q3!HD%gq`c`@}LKA?s%Z2k^}!MN zsdZ%ZBE|AD>ZuwA*dy*SQ6x1#UtIU9*0_W^@$T$n`Nh*Fttzx8Px4EhABpgh28!3K zS_gE;5BovAR|2;7AGld|I|H6Z9vDwMrd^|feV83&p}R6LyHWr^jr$#GB-#ItBoURt zF2cwL-lbJRM(+YK{PF7aA$H8w5A&h7qiDzUll4`HN%>iwykw~gx2qW`Qb{4(-X-Fn zP!S5|sExlZ*65kJD8b68Bd*YY`m{`iGe-9D9;#s{th6co9o{5oAMv~!QO9_*F_3Hy z+Up3$eE^wu5Js%F&{8-;>{y>@ZGfZ4D-=%DJ8X*Z(EJsE{{Dam7-dfIX8o7T1+ryB zvA)|6-PCvWW-j`N)Y8!1iP4djDPoa_>IOBoj>5!?b8uXQmk%(1h#AHQs_ed(=$v$7 zDqJ{JsZp!83hoQD`jFog@0cYJpqS#^ety~EFQSLk(?GeeHp5jwJWH(EH#c@CJKIgb zGo7fR^O)yd1wIDN;j%jjCJk5H%02`-BY>%=36P1MI&aYB7N~rYa!Tv}*6MeE92^2d zq*a8!V#{B5sZ|i(EWQ7R*1q(~u2Bs5*f{A_W{WIz^81bnt9-or*`8M1`=_-LEJv0d zIUL)vb7jOYxlC+S+GJxDxw!CPLsgY(mP)&G>C>A|*?CbA0wvm29{;>1C4d&S6hOT$4BIwIl*~ z`Bi>lS|&~bz9+9@nL~I^HU>|;IR-L>Tej^Jlkz<-4ip!MBL4HLFELqfe}%a73BUZ3 zhn|Q77gw1jrvy{gzZpQczTx0`@B0#l#HVh~G7?`uxMA0nXQyv z$s_Z<40o!WJs$Vi3?nGqX)k;;lIuA2cmPLpZ7q3tc5H!vJP9`Nd^LTf%G~+91*wi<_r@vmch5O(2_(TM6*1~dm1ju#OC#s5097Buz zFk9|vmLXd~G?*qgV)xf-m4jhE3($C0iwNW>dK;gD?c`(^n>t|k4$kgyLM zG!s{B@JjIQ93vlJTW3~eZR~nEVp!Cy+|9S4#=rY%O zy=X7E`-U1LRTk|Pk&7?=xJU8>{QDO|S0^5s7WA{#)zSIWxp>?|4g_aE)L(kyVX$;)asC?A-KSfib zH_UNqG$|PhBV-~`dg*9ZM}+j{78-Ij+e_?Q%A>(`$L0IiaiXFef#p2L z0_P(lBt}YutA>nP;hOpWZym3G{a`lLkw>?E`IF;zI8rW@5Mvh>^Up* z=FL<%g}AEq33wVhf3C|_`woN&jB>A{$s@7)lC)Ibd7qoDr zHpF;7lWM~oVviGoL_bl&%YIj9%cn=x7+rKiSc#>78fE1HpW{*~M{YO%XtYEBSbX+_ zRX+I=NAKvVI2k<*&*!JawCvM=V}h@UJ3RFpb+u4W5-An3B1ZU}MIPpf$*hk@Z5R*5 zVAUa;HT-ad4>Q87PXFBPpNWPe@}BPcjcS1+=uSJnAK~esQp|a25Mh^)lcdW;N1PBN<%gHG zda}4MZFim<;JccuG5~HcYFgY~PwF!o61WOB`fiEP-G9FWm|qkJa~YA1X5*+T31mCL z%POJE&Qk?tZ*wQf*VO20| z2T8W0u)ziMvKb(~|M!aEWAunsVW^^8v(ux;(xv(K_U^>`#;s}L*z%x0Disnyhc8F4 zydf{)g~eGq=QD)|en&*A!T<*gUK4SJ9uEy(=_otMSM{Dl{?v#=Wx_Cz_w(ux6cH~L zo4sz6c>ec$(90-E7vENJHsmP&VngCKBu~?f5K%`+qwFqV?S`pVrvx=Q(HN}mIVfVw zn!nMltS&g)1RgkQ5QL=-(7ACyTvi*mG^o7~k~oXwPESp=<&5KpH~mC#G&&zc@_Qe) zLJ0RM2a#P!KU%zy*OhA$jGrbF^WTG4#qU>yNH~bKEEQ+)$_bwOVK9SIKlt_WehkhU zz(`RTp@P!D{FN@2e%xLs+qCweR+)hxfuMWUS1^@n4EXA_n?tSqvFNMI;evMC+A~%09u>kxCQcg z5Hck%BUK4Qn~eJ2lat~d-lnxeZF}o!D|eet?WBO1I=W=tw-1G{wkXbKEK2kBo80rk z?33%o4|~NLlSG)5)4?3fX=jYic0Mr9?PMb#h&3@9^Z`C>E~GFb@{|U>jLHBL8{O7Y zcBb?BQKFiz`Ov=ox-%m}8fHI@4Ow>vXG`b@E8++UeL7K&}(_TVazxc+?| z7WLS|<_K+4`TD+VSbyB<4`(Zeus{o<9n+|)>Jlq=dZo#|zF3@eJY5Do50BGDih1g* zSqoy*4DA!PY@t3hk)4+(PwGdl;KB7vL~B~BT$eQ;r#4vq=^)uEdpx{mwz@Z6IgTMs z^x2qY7K}fN-Ou-?Rel2AO*0UJmg}zH_Y1d-!C)@2RDqA2qF#aOr@heRDHS$&*+tf4 z6k(u>7rNe~=U_GC0ODak8gxXNvJ+2Ze!Of`TqsI6_0Ii>S{S-2#_yRTfnLYN@Gxd^ z8{1U`iv~75*72nt5!`=~S&Sb(_fvc8e%qKmzo zCs`FUsGbO0PjDoSUb{i(V?H(D$-vl?gm_Uu)Pm6hNc8uN@bEv7yx_uf%?p#p16Q|cFiTvGNJG#u;O2#IFH zP%HbqgZg!ki`H1Yr6QPhSlPjU2e`my@$Tr$mAN_S?ma|$G_8(;khZ5alM~?kTD~C5 zHRnMdWu+_QKPMVJ4+oBEhP5w8qf^fGC1&0`hw;;ETAP><{bRXdd7FQYO0f}ck9dF;VHm-4Q-x6za*OpMu>52WhI*=iy#7HONYXWN zIszUZ&3Lg+ZO-W6Y8MaOCLrOw1QSV}XHk@cT%^&b2Xf~pcS3LPcM!uk$`gZ;c!=xR zc|}@#5nh*vkZxf2r{?~XC|`KNuVBYk2RjZaNzJIWDD;Y+BNUJ>eXtyuH56fSTQ8>g zG&{0qK}I)`?AyD&`OY_vLyi_a9H@)~gnjeAcshNYt%atB+Ghh`@On@j_S|Zws^`p( zS}`Td{o-IhgiAf2AG|ZL;5v5HO>$_m3dY_q95x12Y?{szV>!De;4@mTgn~3tQsCI#Q?RNRpc^`8Z%9+4p+ZR8iC53cJ|5ZPT{jti z1H zOaQ`4ayy7xsyxOfMJ=X-F0-@d=NqSo10Hc?wv`+bPfZp*wsIIB5+4pdheF_=6x$jq zQa4%aqZUEg+C#t)F7Zx;(hp>vxuvhZssSfSf1kzUGqNACBC-C}!7fwArfFU#v$#}C zJu_V726fGUwN3!k$-M$-`xu}VmjW4ODknfJG%-3CM-$BAnzLP|A%mQ&}Y|Go4FFcH3b}29`NfMxTD<=%-+TqnD3iVj)a5=>pKN2nSrt z76uLlW9+Zh4+rZyt;%7qk;bA#(pFz?R#`sGnTp{EOnH1hEU!PAxb#u~SoGPx=SBsn zW8xVbym*%bu*OP#Zg)k->j61weCeD2eZ!J8(DW}>T1^ze>XRumC!)#3)pC{6?LFQr zwpD0E#Sa2r>OsVV*y?cO!H-#rd~lB2BUE&cCR4ygL#0^afaBOmr2Kw`i$J7Eo+=2h z#6=_vMeTbC;0LOoCf4@EXOo(SF&qj^&!~*MQj3y@c~T*ht88<>#%hzrmTd#YY7w%U zXsfI}LHxc!!ttjhPsie{Bu|bc=O<3E07dgxea?5!zyyu{W_BBp#ENIYibr~p6xcY; zbd}cxg>B>3W$}%EK)5zE6RHMAW;)t1g{rLc>^+ydr|_KuRQbhYxTH&O zF{k%H>A5UJ|4%9O2Pvgjya$(iw(=#(lS16Rmz&*eGn%sd)ik+ftd$AB&-KM&=>qt! zBI9nLZ5{{1CUm6!-8H~Xuf?>KI27`<$Uy^%DSp5?>$EaR^K%ym|3jS2l ziK~-`qp3UW8f6s#q3#ic+)DF66CkAa=2y3{MmLc|cuZ;0J_XkmG=5NoWT%KlTP_D} z#sJqY(^&20T+IM`e;zRH)h({*qqkFOw8eM_#kL&9)QyC8P#rYc)`MPpQj^@;s%luu z9IQ{8X`_ce7nxv=^#ly_*Tilxpc0y}rumV^sg2{9mU+LZ4Ll6;RnqRS*}w{B;@&$}L?A5thq9<5(gelgB(phPwP(IaaT{ z&JsY#>=yI=efx^&99nK7W!w)L>s`D(aM^*%=EbXt+C~g!l`q=QT$kVg{E>&6+vNS- zrR7@h3=-6}r!S*Z%>m3ZJ~`>?nSMuGK&Q4dcGp0rl(+(+uBnQpVXq=U>zh3A^UCMu z)SfKS^T+di1L~dd0t`QyK1GQlptm;eB7L*`>u7Zx>{^mj$l#}g^<|XNElH_6n@{1o zGk|M6P8LLDgq;~Xf-x+EkOwGhtaK@uY;S)|ukPkf-Y;QPM5 z1OYK%mm4YIQh6;UT;Pcfv@ja0!pL4g+1NW~ct_WL>Vy#z33dUzQl|9-;zyN*_2yky zBl1VFMI{3g>X_tOV=#C@(ul$=-vSB+;SJSf0_HoM<$6*-)4-}W3cR*BJR2POc{*54 zF$W1mu1WvL^C5xNgx6|rodQZBwv=voa79~82e&x<=-3qu5m`2Dx7e;0|L^-l+IvKX z&oJtj|Bad##WCg=uKG`A-}6nZr%t z-}S<@XGdVoX@vAqPrPnAzsvauCYvo-4(85bpm2l=U36uMw2a%mH*ymg3A=z8~?jOamjAF1Q4WG-n-H%C2AJGckXG%|?O=vKa$^l*VCp z_Nz{3tfN;sG&;`HCj8cJ;FpX;_%Gc%CkZ(_QVM_O`ZdhzE&>a!`7_`)-ARZM&vB;n zQVc8>_(9Z`xJ+YrCbKIJH}rR6&UJCkou{fx#j?hgpdfuuk^i5u3-ph99DY3A+27+I ze;=pJ6-`FfFq8l%Lp5b~R3795la}_E4j^T*Tg43%brZYjE_Gsd-vKi7eM2*4V>M-0 zAtT*z%n5&R)uw0F~{i|ER>U=o_{wX;7j)Y-qMRiVaVgKq2N>I;<;De zT>yMMmrvu;EoJntuRzknkz71DHhQ|GxNr_sYL@BHEzO_h7!kW3;SSn^!h< zO}@_uWGmU>@X6Smz~>8T>|(LLsvFm-?1TxyA5WQbp8NWK`Tu)7yP#o#<+S_iAAils zS{#-4#;E*y5u23ORn5uF1M~UmPm;Gin#)2T{rg#hSt`#r$)DihXp7@U*_ecBSIXxI z=ztOLSd8?u{AXULDurt%q0IQjU!)JF<|xH_K^1jh#Rtf%xPLK$_hU-y=^;(-Vlu~q zQz!|vN<1?M0;t4woyMB+=(sXVyI6*&{jcs`_Fh}ffO+?QD%G`QE{sndHK29R%TCmm zyFH5XQG+OBU%?h%0?*Vc7lxg6%kBA;ilqIk5dtapcjh1hUrf}y0isU)&A$AMgm1jr z`ticb433+1@}bSbB{PK=LfT3`#S->V8jaZBL)L%7t!<=8?1^}|6G*{3h74SZ_3s}v ztz{#m%x+PUtZ8iOAIFYn)#NB(Xjq0}*{*5BYM}Lhl-=46MICDA8EZhOboG~kR6GlN z<7gPnEJiKaji9_VQQPCr5zF%1RNJPDWYUpww6-_iN`)fWIGrT9jmf+Lr0cN{Y_H*y zAPK$q7%%RS*qhR2JE9!{5!~k5CQR^d{?I!YlF6RhwHNIJTjS>;5hp+Zs1REI#xlwz z4?%*ApxxS($DHu(PQhXzm+lN`{+k>D)qXqDqU~2^81qXAJ zl0uZ?yLXQlS&~ib);bg#I~yxz`eTRJ&Rr4G=6=Mo{@XYGm5Kb!(aSE`4&L4GFo6rw zKOP)+a_^OPD70X4>n#o=4`D{cv*HK4sPRY)chIy^Rj|wSL?zgq|q*thOG?{X) z#^I5qs_sw*H3tEoFYh&rYGcR`!-jd=c9b2U|A8h!!eeW&=lI4i7?%bxjKZ)#$L4&D zqZ^W_Ln^&w2jU2v2CcqRxqV*+p#}dvr)4T1VXIpF=cXN@&)Ef2gGB+Ou3X*T=V~;g zF-EGQM#VJ@D~Iwod#8@;EJ*j`V9o0bB$@k@>hK25=a)Yqm-rL>>Xn3{$w+)`@oXC{2muDit&{9jL^59801Sj(bwNWpgR%`H7YjkPHSm*_oZ2&GA6 zCf0SVB||?MKCZU$DF}uFpY6DsYLlDHW&w^Pu-PokxXok! zh!aCrg3-+B8U)QTK)igGJOBnH`-*}z6tYld#qu50`iI3{4q$X5y>J4aS0PaLV>(Vj z_y~k@cfkJ<+1UK;0bw5aF=36<;IG>tGpP%DoLkmWf{-DT_)O59Ls$NhE0_w7fh4z3 zwxFUb7(2`l$(M`Aavg2}br=uj4zs$;U0=Z2Q3|=2&~19fWxIS$73G%+F)qRMEF1p$Su(s`Sz)Iug!#%Pst zVtcLJWta;eWtjwr-Sww|6IdawiT8rJ^l2dd4C6k2fk6p~khreR3K`U+dDGS^6t)s- zF+VkGY3*p~6){-9I&NoXO66|-qDixTN5EzjAQUmzUHuvpc1&?8R~b@9%-Oa9)^;?3 zV2NCunzSxHSr%elWNRtfGqB+T3IAXEkCl3#F;IOezDW(1u4s<@$!=xmlWSr;2?~CN zT5c!7?WP2TerwH?zW8?TY0u~6OU63B5G+f{`EPIe_h>GG!r}_q% z4WJ?!-x~gMe;BGhr<~MoFd#)|8!JK#UZ@@ZO-0ofk94VGv4}vfoi-KuF+_VvIyULr zBt2Ovoew5pr4kQqfW_=0XTzl5sF**F0@^cS4?atk^o(U3*Y>ycjyW5WDXz%qrYi0P z#rwT-jK79>n9$5;mNJGSRtQP*E^^Stt)`L_VDRAf?V?zi=)`S0zU!gDk$sT&e zN&8wjd3J&xx2^s51V7{#UOn1)4b|-h9xQI@tCTTWd(PDP5p?ayHz12=8zOXr(PAFh zZWWHG%x?Gw0#ys4Irfz_SKrXE(!DP=;!wlRlLdp6$>Andfsoq5h{_5a z#FDQ-le>{t$Fe-|D+pfq;d=pfKmY3DFe5%-oD*M#a<{1n{7Ba?_VhFb2E2v43!mSb zx6lIkL&BlWf#fd%UanYNDyoHntCHzqB8(ss#nDZJ_6G+E_cN7%WCoHWMAe1x22$&} zkfQ77W+Pdx>wtrxJr8y({K|@y&_StgmJ|uyfJGx`-aLH(o$e&yEIix4vcQERx zg19htnR2t>!OQofAhD+0WePT};gy#OLJw$=OtzKIfk2|11w5iJC~1GjzZ`rvQ2)RH zd(oV*57Y`@yHkEonUNYu$%bUe2m4RW5e`+7jC$X{Qsv1(|O6 zvSM&HfzE6{$2fu=bL`^Fy$FBnz7x4tY$czfN(pvE|w^lfO`Si zONrJZSY>?CL+k}@3|k;sWaI?4(F5YtKvkNuGgECr+Gw-b97FK|Rp6%xv^uO6;s^?z zVxV793BTQ^X7w_+V!^WcRUi7R%I~@I+taKpt2zTzQm|P75pk-F{BQF1ceTz2=3`y` zw)*ecsCm7e=GfC7oW@R`;vIlOweFr<^ovv2yhrb@E=^N65>LuV+wHjKt9{3?H+7fZTlbU!p4fap&AFU_>^+7j~dOSFFmCRcti+I5% z#Qlqa$;}XgX_vJaX?OU@xnH2~mlp*6@(!?bI-Y2b8D?hhlahL24b%bTI>LTdS^7Pc zO6v$QB!5{9blovrC?ED}Klj)xmln@5l?+}4nj>;|-a*{3`?LZhrU3ui(OJCG;4$yM z1R!DQcb?TJRPe7xsJ~>b9s2rI;v23<*?6Q;e%;|nG08oALqchAGWg+?`Jw9S!25gf zktkFv|99ES2A4{*s*YjXXFDcwMxC2+3A__D|8ho0S!V~2epO!^9x_4#1K6YC7ZvnVKy*TTbHk)ld|Y)eE$|Co&A zSwW)O{X}U6*2gl&K@*Q19BUd82lN|DcN!LNt(UxcF^-JDboMP$(mniPGUw~sp9IWc zmoh2V$phTW-)A88NGl<3MosP=L2Ln`>%CFi>v%fV_@dD`=eXgpif1oe<2aopcp!=A z_9XJ5Z0jCcI*f_T8d@^jgSmQhAY>CBx`07Vk=+$ZT=*B#!1~*-XqiGRDxC7zhJ8JK zD&s8i^!v`6gz22OggaHWm!<)3HB^zlaZJiD|L;@9`_HKoO(AN*YrFc~sT1d4Q3DvI95#5>q}`UWC#grNDO0qkuuLpCf@}F6^+=SpSac3VI3GT=GXhRHa&-+Lj~_mX#R{ zJ`#!C2dG*#1+GX2MEg+NNzGc$fCSWJ4(`Nb3I6qX)v-bDMIxlQIDk5C%1MxBycl|Xwt-(;5vgt5(ANps~c?7{Pi-@c@iu!7Fxb^XD=(aquu4`gg!;^ ztTx1Upm0=~$Q1qy2!)t&Nq5}gJ+fzE{#se78_{QnpuovJdzpL3v=;Luk+NikX|mmi zAHr`B>$@rmon=^nRZ2!1h5x6XFNXnR#eNksj^vPH6>TJJpgrI)i5&H5T*3={<6 z`MaPwR&1G63Gg1--@z_~#9MOfQ2?jMaVaSIcK;E*99tqaM@{HATJyLFVhCmY8R)ev z?aR6A_xgxJ_O$vtd_;iS;42l)hc`;)IsP8sndn;!sfkyH`qet8uMfiMGx~sShm#R6 z@%3#YKZPvY=GTvgoKUpE`!e@qm7l8XrZ-=4p3_IZ?D_gSp!)t$qklj^L{}<6WxL*u zSR+@DWsJix(0`e0PZH$YkDrj19|h;Mk?(e4ZaMxDt(!wh zAkjGJ_tjL|HBJf5(>021ypwvADL)-(nOcGo11ymCT9m9)Uk{@5nr2Gd`;9;PM^o@w zU8pl&Z!6ZIoXx))u)`6@-IyqO6(a~Q8w`{BV4hGg}CP|1io4ejlllNK-2=G-qAl0(?qgLs(FPI zWfR@Njz}eD+#2P4F+LsH7aHygGz+FtTBigI5s3Ue-39rpd}JaP z3d9Wg90F9SJ%GTJ59ENhM^}>HlXYP**tm4Qh#cRpmB*5}68h_i?4L*9IwFlQV4%yZa9YP>X`^X)6$mqo|c!Cx_Z zl2Iu=EC{KmV!rm*|#AH9Oj|yhU|3jK$mYp#l|{@lz;&$C&hJ}#V#Y#+tcIF2%Sjc9=b?I zR{{bjOQiKb?h`&@s0r0$=vNA}Erkf$M=S3BjHMe_#t4La10Xf_wbG%ls$-OoPbM*f z327%L-;OAH$#45Ey(aP~hVG-Pe5?#8IQj?MoP_}JaER1$4$eckc>S8K%iOiRUzJQdk>dA~=Mrj}V6{K**0wTN#9LUw(GQ?kwF zupN5E&l^vczEBhn^M7CI@L?FsWfDS2RGx5>>zUXX26xS|InYt5AxQLXxz)dg4jAlb zy723c9Y$dC%QE3UQzN$j)UWe6QBRJyU6IT=k<4cmb}>T=&7Mf-3<=u$(Dz608TB3c zt>3Bxqw`yum7C^Im)C~WkacAC=O&~FHrOqdFkM@4m4Vyx#2X zjzP3Smmo=58=CNjFr-${AE^?!kUxj0*~kg_tD%{W1u^{_aR*R1+ZgKk{>gjcX>bAP zJak={eOuc7BAm=n$9MX4UIZR*WeiU**^dt$w3C*-kBR>acKy2p5#}FBl=bmLL;lr( z&z2muvo~;(`9@e!ZF9zJQ_HlIfuXKvP!}=nqasI-pT>~!Tejo7I6aX}r)L)W#AVI~ z?|KYO2&Y=|03c9U2u>U_A(6Pl*vt5?_SaC9Z^>(CXHI3?*UmNx>)WKdH(th@w-Ual z5~UzJDL{MAHfvLg~ zR2w1jdz#530R@}UXX(o!wkA}By)0Wk$q(o~Z~TXquZ1SOW+eNRpOQ4Z>G*(FUdfWY z($G-_EpW@On1R14gnu<;qK@FG&V`-6HE~LK3qj%jL`;ps z=y6(Ch{Xy)SU|w^9Z*$@fJ*&RGU3$k55^21Ec^cd)dy=gn8RGnkH1A$66vp{<7;tU zx$L-VwSe$5iU63MtY!obFTfE2n&OcQu;71g425+Mhr+t;MqGovtKK3=GzI&^?LfK7 z6B0iHk}moAWPG#|zPc|vGQ1=4YhA*Ax;gY<3>zf5g8XRBg*pYA_ikPGF3MZ9lM96A zCb~Ev%c=?TlBX?Qptqo_d(BOT=IwnV3fjxd(#q{s6^_+SVuqjpt(Zd}@pw*sv#Fw# z2-T(*G4qNrPm|mG&iMp1A=Qhbt=8EDjxMh5`v9(GqUq0;iL6TGwFokRH(bAct6)QA zwNUjm?`7yy{kDhChw_nz=klSORKbd(Fl#>6mK~Xj!8#d)j&Y2^XIbSYM^j4RMbS=D z2OK*^k_Z0iTK5wP3Da?i0E&?!IfngbGguG`#DcK?uNGt&Ll5Y3A=RVklum7l)6RD# zW5LUm2Lpuh4KI3}!SyX~TOP#rFWyumB|i5rL&dZ;MMsida7yubX~zi5rp~N8CL$24 ze>nG&sc1^lz?@F)Bd1F!1K2jBx0_@de!~-;2@}M;%gAAZ_B}Tw;3XIHa+UJZM^&xh z!r^BO{9jKK&E!C}Ylndo?$zx0n))M-R3%oCS^UCG1R?v`9d1UrAj|km!*6#(1L%Ty zmfs=Q&_R+bnxeNvV_Rqx^Oz=IWz3quU)aBYC|cpWvgulqoknRxjqV_$%xzEM7VNlS z6s@{g05Eu^QoW`_15SXbc#}N{CSU?%z3=*Ko$*Wdfb!m0+2w|gIOhDnurhyy#rS!Y zDA?k2=Z{NCY9q_ebELdOcmYmMqy^@&)FhDSwMdPpu^gVIx3*k|My` z9e`HZGk9fDccjS$jSeoMQ~kMWy3kuLMS_k&WFTi12w4tSU$bR+4q1u7@t`XSS2)pG zEn3Lt=gPD{9V2kPB8mMAJ@aS1?VU3k-*vROxq}&wGcXIgVQYTIp9z|2KD<{g9Av?w=Qvwyfe=S1OLgblzz{A%a9;uj10KT$!XT%JB*N^i z!Z1$93`=zC1i+t)A-3i6>zt5m`26$!D$dd7$MFQNnmAoFA~>qY@fC0mImB3Sh?1Sx z^LAg-P5!WR9Y2Zk>3DJF*^V!PYm!Y{>L86P)KBtYTp~I`9OM=Up|e4X>1Q@W$u*kX z*>@kzRwAXk?}vj*7CMGvMwt@DPK(Ba~vGh;=94!iD=uEZf6)#BrJsN0sQELCrBZkN)Fl4*k*+ zI)hSvN-P$9$Cz39@iYA%KSJFo<)HBEX1Rvkk_jodK>DY^rZ)|53Mum~eSGct|MmBUR0qp^nuAX@TC%I& z{*Pj{n-%%?+CmqC@>vVSOKsszBEA3c(n#$G&&aV)eQ zK#Hm$I-Z&4x24a%4g)V|&s=U>3L>O~!jIb$$o%4pc>^vLp=|~52qy|U#6@qqHIBhC z%G1#^yYI>~PXNcCE`62~954T5$SeW;2R{1H!A(VWsgP!}+T6nE%NeNVFe-8H(40-? zPp*>fyWCLvRR1FufxZwje}jx7m5r#3E28M^%$mo4LdR*fJG)wlZ9m>PD?K_OzCB(} zySMqlWLuU_@EQ$Gw12)4YoU0kK-KX8K*N*L0XN{S_o3 zr>sp+BPr06%Ytjs@;-O=ds(`s?31oU5?~KB?Z4{fC{jS*FG<|jLkm|7hN&RuR^_8% zvkK%uPki7YAAKMKIuHoZh!9GadGG1@w8s%iVElN0FPt2Y`!4sqJi4!4Zmp@)H z9yUp1eZJR4M2l~37|@SNbrP!-2tOa>edii1kos;VkXq5ONwQ1rAymJr;9nI&wYTv? zb7_FTg4f(w!x5f2D|E`^2EGtTR8i8=f94v0U37ITh~>3)DQOg{UYT3Oez{wf3XLT+ zw3Qy&?z1fJZ{`{g$&<#=S984Hb1d-LgZ3^P!9}=46v@ZV>z4zyoXze|wCn<+)}=G% zSgztIVr4uGz?MNM79M5#?ZIHMlq!v~Dz(o7tvhr}jyD$as9b9>J)x?+%K7Q|2nkrh zDlsQbDL5I@l!v^CAS1rueWj~9MsEHL!uFj@l^0qHJIx@Ij-!TyC1xO8_{x7BK!+94 z`&G4`pfEAfo~&PPEyFhq#fw3ZPtO}N@-$j~6>%U6gHi{fmq0fY-u@kw;AIhF!97KsM;U8}L6^En-zNh^u@$=Jg4j0ALqL_Lak@3q+=2SR-2FlkvX9#@zzYfC1Mh(#764R$?RZwd&5X>I{2T$|MBrUp$! zj3o}!WeBDcO-2iuCZegGtPBb|z7x1c@3@{jWVwoQAsBw;rDYX`)ali<&5}YQ{QJ=r zVV@AmFYin{2wnk~nGfmvn zFVmGhl(n<58Sypl?sg(@mHQXiyl3DiN+5vqWu*VvI0oQu^ZQhHuANUsB&>Ju)yyFB zWyv1JQ&&1r8t#Z?(1n7%-Sg$v&qlT}e`x_wxH#fFSh5LsP$Y|^`aMtMM2RaUCorK- zOb8M8w*VZcEqwTI_WcOjUZ!F8$Gb%Lxf9-f#BxOenM&;Yfa*d}{C>3xzH*Omh^ELU zIz@I|@`(*rV&B;V46HWP6Lh4qV18&JLhQE3O9nryp9;_kJiBEGQlZCOVvphGpM-pP zS+7lQtQ3KK0+U|*$?+|OQVs8Vn+BPYXW#yi_KzK`v*>ixispRw8Hh{MU3jQmug_ux zfB&TZ{AlHd}@ai5_-B+M{Y|V)}R&F4erTbUXM8Vug59ZYTtQ z%Di+x*X+xu`ugbi!dy;>PC21jN4*pD_!ae}oyvwHl`}tof}84738!NB9<~Z$D0Hqw zq?P;Io<9aPnyW$Y@m=`>6*Lch>;hSU2ir5o71x3ZZjS*IJXBacpscF%^4Z&b{Fr6- z{t|2&SMUXoVKe)sfqWFvoOrU3lfkSHPe91im{VNUl15;M1Jo6MArW6-ws4~GjU3pP z_yI%#PvFM5i!TuJ#VF`!c#$GO673a*E zq>Vv%lT(SviT!BzIf@}bI#>69c6sCuwCU|3CUoZ6hDb>Z@TsO!)vTt_JY520_xBv* zWO3iBi`qFwcgmqZmgMYI&DGcq{h;OSL04Wn)5(SaMOoHSM+AIFo+F`TP&g0BG+kso z5zQhzOmcI1gde{(G|^w->g3Ocx9^04LIrW6I2C?+VX#|8A-IQ5h6i#obhGmLq~Xw3 zL!wYHDnKO+^_S2%*2fGZx;aKkD%x9oYqFzp-?kt@_vt?u)YPBCt@oT}6GNR^7jg-~ zaa^jL_yj(u08nuN)_Ao5R^m)EK-2dJpbtm}DGVYwJ_u*3P_1?!8m%Qh8w&)OnP%k% z1~y=$oF8rFDU}5ZgWUz-6Q`ZyJ><3rkiy(b*no%>9F#!l|Ay<$dOv1(xG+EAG3GRZ zIpt?Od#U3Rn(}9Kh=Hz>Y;5~NG@lTGAA%Qoku7-RPb%7D+XL`F0~&Hv=R$74$bmdq zkSKnR+VRt5>DEA(g0*cd_79Rf6#cQb3a(Q)QHf8TPNOLeHAh;cfc?S9`p?w@ee2^0 z#8MGjXy%XRHKHXmo_s0r*ZO1kU>asLq47cSprFH^UAAxFZQV3x8poW(ny*RZu_9umZ`Rw%YUH?VHA z3@eCOl+@45!t(H$6b>(s92L_qHQyG?${S620&9EIZUhk2^&vzEZl!%40*t|4&UJBB z!UTNRo4ASFnQ{+wK%v8dCL_Xs=lz4*#F(z1vtT!`B7Hk#5Xx+(Wop_5m@9_V!_!=6 z9^Cx1?)2e877TsLfVMvcX8p-Hw0@Q<`c>CYmZHYK!7!L9%dvizCfehy0a0kkow^YF@A16YFuC4D(CU zJqPGKldFpGrCJ8)?EfqTz&O9F69{T+aMyghYXDPOj!x}L=je-qZt!OQ3yH7Q zGXoINkYQqo2;w2C`55#qk>92O;3ltVQ;zTlWNp8A>(S!qU1^>$>Q>iQ#;pbGu||B&^Zy_`W;adtmvrrcD;8cuvbntxNTjL` zhw4 z5 z2f6ypxR%_RT)_6>D_{`axM0QyL`eh>E+}R)RQV{MKBfwgTEi56{GMOO+ielr%wG_* zCU^b$c>u;)(TJ%wAcAR+i{21T;Gb-gUha(_`p}YmgEHmCbN6D>qAfm(H7IOvNW;e@54BSbdB~j>S}Knz(NP zj3LWM=1xu-=%6$<5tU?JzTH*<@e$~>WFwtJX)Wj4O&z4W5`^uGg5;Ys;2T(B<471d zkI%%6Ft6tq&X{ajPT^HgxqKl8QX>497$};O`Zm4MqQ?1) zEd*zD?%0h`A%-v)`x~qCpLGM+Qll}v&kLf5fit4Z>A*^@XL;wz@MWs~71rBPj>`Qp zLb#<_1idk7#6<@@|JG4q*FOM+V#+hlSVYZ!5N1UV;NOOs;(6fTh4F7A=_-E@mL6UK z7>Iw`#&P^7$X(pZep~hXF46#H+Zds2&xamz*eSFRXTN=;2t`Byo&e5~n?uQ`gH$Uw zMw+lR{q16Aw4)S_bII*?TVet^fTW9Asw6VT>Ctg1YE40vx-d!jhV`UzBA;fCYxr1( zEJJHc>^CqsG6*yyfCc8MzIp}O8IGBo`2)-~Xzw}El%$A34unYXLCFIGi`pg(*7|l8 zFGAn8A_eZSXk6CeT>d)vXDD$ek}HFM#zOLJR~e?l(eZ}u;!C#4$-PKU&6#8Uk1b*H zWCS^%WeCEi7zCh^jdCwjBcc01n%=JK)Bv*Sf-sE;Z;M6LD@>?>T;|N%TDX)iIg{5DZOaGVDrK%3kD2`H=*Sc@tFx7V|{LV6UUz22~Y@CS~SJBrr z4Dm0|JDn{43c6&2kTxaNif`4i1k8f@)umgmD8r+~svCjGL4j7Ts{Nk~WEXkW!1La9 z6P6p1A(y6{pd-j8wl)v;JuHRoFZ~=m<~J{op(e~u$)A^ouEi1aP6p6I!J!v9)LRfC zkiYKrV_n~4)vJ`TV<-IHpoziagGEL)?wyUwoR^|QU=rFXj7VHNt2hbujvciMtAQIN zCBD0mnW)dL^}H59Ie3dye@5JRQ$i>>&Ec;=GI$_biEB|N{w721w<@4%6oS!lM@zsN zT56|%u#Ek10+}F!@PRh$+Ai4_Q=k7%-)pU;Mx&rNNkJ>#TP+%m?Gop@#oan$Jm`u} zDTt%=IE=CNhbZqjzQbd%e4-~5A&N#(CZ=4~Xm~@LsPNvCf$mDM@{KJ(!+Qh@`tscR z;pz^3@{8jKU~*+T1Z?bH96f`TOuf+~T%Z)sMfHM9@44h}^bnL~smyjw5&1934YpLF z8zcoo_Y4=6sD2{wECN)M;Xslwpm5z@XI#~6qoQnB8zu!K;xefh;-z-f?)mbY; z_kV8d(p5oajk_X7EE)am1Y|{2cS3n;n zAMA+;elf@iOTIG+*&x5 zP<66Eg|htZ1Rp^!DMIE|!Z_wrx4>BckhXT#@R`y9@wIcV)60ZoZt}ZIJU?f4*5?Zm zv1fZgY^4484y`(2npYv!eTBN*l^~Ct4@s)(=3>8`LPGZzFu#4j^o1Oiu!pu|@p(gfSnx-z| zh{%sgVC<$a5J6A~h^=*{8-om!Jad-hNgi$luFF`0!v$eZ+=LWrk$x^LPmE)WS-KM2 z7$CC2N;*YqvMI1UdT(Ooq~H;%Vl}Em5>xhsy)jDJD(6FnT}xW;rJu@>aNk*Lj)&Yy z9?51Al9BGGAFUTPnb|YmfrRS7MPQ1y=l57%?E&qI{Le@_X>!|pv+2TtIv#}($C@xQ zOl3fUIW>#=&Yl~id2~_ijrTI7`M^fuhmOX3C|jMKJu~si*10~|_h8Ptajh``r(Pb$`Ig9ZOpR7jWj@{^E3HHZKA}RrcP5sT4 ziqE_07%SQD-rc_V`XsQ^sg%Y*uE9}(;OyVa6q0yI<>|TlsUE`G*;B`jzqc_88+0Xo zZkKIf?WzhRz4%#*#uGQlAdRn82RQ)^j#W8WQbEUDUKuwNe^i#rt4vZR2DT(uAeB^P4~l6n?nr8$cAHvG1!O{!)Eqy`hHLP6-$!G_v~mU(cZ3ySs=xjgxfGPO&j0U zm3*Pk{45AYGT<^=)io)2*d=jQ+#4m?g3qFvvmNIt^wYrH+}K()&CmIxJOQdL@_NI` zL&0n|J~&Exe>XTl`V(bZW8N#b{hQP_hK=DEsO0NX~514k3}+ z?ir$T(=@*+z~}q}Tq(%ExWDh5Tk|Zo;iW-hLGV*2`38o`$1ip6NAl~16)97UJ@0&I zg=r>y?rpQf6w>lx<5<5Z8B{cFEnK7qc9a`Zgv$`Ov&62xkaQB1$bv+{-reKG} z9-Wx#to+w>)(*bIQt3vx34!P-P3vUM57&9!;LFzi+i_`N2w8}zo~{rW`4X0zMB$5( zG=<59sJ8o_A7&EE{SDF4DJ5LkeaA5=Qb+ef%hKaGErjy+N)?Ql;w0%Rh}9jv zN3(+bEu=!RhfcJ;V#AQxVwgXDi|KXh$%=eCD@Mau=7$3l)ihxYBcwqO)F}}RQ5Yz& zo^gFD&Kf0Ks&?0}v}VrkU*c!eFVAl(H1LirM;G@H3j|3vpn$Y3K^mx=OmLe#^VF8T zA-phjqax}cW_c#dP&u=9b=ant`rlsH99~x`BP25B+?!yf4>(y5g%Pf4lIK!mg>a&j?#8Ug9yv;@ek6b)_lXit zl*-QxH(Fu`0Pm=u4q%|wGi=xhN|L_xGpp)a+JdHU+S!0l4(TxHIt_U z*iK?`dRv`S3VW{dpSHV!qp(^S-c!fmyDt-}zKkGn)|mah9!gmB6DeCYyoe7q-TeX~ zM55b?LxyS;Kd&IOuL?e=n}e2ihrA4Kg3sI6ER(}k+?otrqbBbQ?vCKg1Dm9_@zb7k zVB$4U_C;G1NJF$YMaOsOVLk-U-9qG}jF#=3ub+Nx?^$b)|1v;Q43+FTpdDQ3G{*8W zx6S(&)#ORE0VB=bC8U!81umkPX>sM|m=PIt%3E~o#h7=Yv{OPmJ zt~1C}`m~=qCWIkYYRGYNt2BC_<+w)UX4D(pbJiDgHPSy4!{I%>ddrQ`VfX75`K~$+ zfL#2OJxyOaqnIKZn{Q7x%7k7L*w;&{p_#5wIL4fOAOAU(JAEt71hFOq)!EApi;^0{ z0OdE!^Tz-CE2FkCSB)A7GOD~AI%bUbn=*FsoDMce5 zP_cqpz2?(eJQ3jE&-P|xn|?COrj_c@d)iAi=DL$NlGTh;) z!1XbG#x{qfJ%u_;3gPQn60a%Yq~W6bPF{?@8aw(hut@hSbk4rZ09-`uM%tm<+i)Jy z076@n6Ua@^{2(~#h;N(bUvr}@ubP8v;;qj8_ZJUtWfQo~UJ9g?5RamLCoegQKaz#_ zsEVPx_0uHCHw)@K?e3eWx}4wq zkgIk1Fww55ee+x<-DeaFT&w@nqa ze-`K0x-8!%uWs(GkdVBKcf2MVA2>^tvBZc}TzGZ5;FVkhYuzlqYnV+B(V=P+Rw~^Y zC(8ev&3n`d%6G&TD|%M@VL9L2v?4LKxrLUjr`if-wJP)bD?U#771BjXh;!0?;UNvA zV*ORkS#pUXl+A6sS^VC&X+$TMV4AR04UtO19hau^dC|8lAE8F)MDW zn|VK{Q|3k!(>|x=RR>mHMCFH@xiNE>wyGJVvEO;{Wys^lx?Z*gQbRfQFEx}Uj!DdH zQA**c8>4TEe9u*r({_&}jWZoH-WFtfWv;VQCR1(Z_9OmXfY5Y6g+8WC3U-bgs#(*C z>(YmOS`U8SYyZs4HjJ|i8x`sF^C2QhCw=2_f5;7oq`GAauC+_0wor7RB0vI$fFa!W zPuj8{D|&bz5QAh@dQu7#jw;`UlEbl!V1NhUQ1C%QOeH6z(}5^BW}+FDeNlGBmT>cv z!_(&2l%-wcEYq1@U(t|@2Yc3>BtQEeo%R0db;_3a$nTz-pX&l&dU;%j9wdFUXSi`%yn2{nph}1N1(P8 zMbdi{3vQN1Uh-ZwvpvBD?8TL9{A9Q@EuNMPb!K1EM=*zR{j<>tZq%}pH~MTb0OoM z`26`)qV8aI%nw|e@gH^!7rsKmVct9rWVf2J$X8q*|2%A03QSMkzXgLdhmDO zz_(J)R<8$l(-P16FFTCD&+i-eUood&8s??fsm1-#f=;RKj<2lXENcnn8cm$wut>e# z$6xVn=6tkic%5->?PrH%W(y#l_tqRvibGsIn}(coLi_DrWP;eFjEY|L5>Q z?j=Z_MZ3#qRkv|zhO13vt@IX1Lpr_cZZpw^FukG1*&zfGt$3HKOBn3m1YCb_>pLd+ zjWyNFJ4zpATq zzF9l*WK(#4)d8%G#=P!0(xRf61l&Cpa@L3Qf6vQkVMwokE**WqAJFHy#9G#(LIygr}s(g zSu&fJIq9s=qo<{xFqE=;vdhN`2DOq|N1O_z0(GI=Px>^keagR*tXSp zOnkZFS5IQQ@sj9%6hRNsyG<6yyb_zKZ+SmLq|6jken*Fr?C?~BryureG1%_%8P!8; zjAee;gA;|N>pLkF%k9ed&I4UhJwtluCK;XDnDz-iB!5k}0}V-)Oov6_(8qmqK{oaPWm^hzWiBbZ|z|HgW z)n{U6iiGy}iuz9F#sqgy*|-{0qekzq4ZmKqjPa*;YG@86GU9z9__S1XuERA>6(hR~~?ItloAM-zON&(|J&>oOFu>l1UnCuxnoy%zJt%T6IVpgrci z4l~geIFfq*awOBK(3CMvZ$j_FvBauMo)QTW?l{JHr8MF>{Lts-K_8;@+B}<`q`KU! z@$&&Oeu%8qKV@l>ACFPWe!QB)W^UVpk$>jvGtSK>5MyyeLph4(oiTa?L)H9gDgJeS zDzq$fBM4mArW6Z)fBZlDG;oF3E~mp6ahhP$P^YDDQE1emM9FF~l#`rrdM#qp@)RHr zSlMv~U4oJ;4fOANoMfm9;I<2AL-=yWGwtNx6R8GVoGLoG*c2`+?A6Nj3}5o#Q}OPo zMro`|od1AJf6g&x0+O)Nn;%`6X@d!F%M5a*XyW z&%<6(EI{NW78vuYU+1Pt9r10hw{;&iV4%5j&rt>=vND}e=_G2%A>te?S&UnuX zMH+UW0ca}!WDpvLaP`kIhdbR)3gFI&bd`K=7eu{XeI=cRHyPLq1;+S?+J0w7u84*F{{4q*qx3!XWXbLT3P;FQnahm zG)9(YXfAgJKR~XEW2N7&+%wp}g#UK@FP;KrbZ~IuM++(LSqM2@9+BKEqdpIK zfEVAlKbTym6cMVt=We%3b>(Z~UH=(_P}8%At`H9H0HmdgH3V%(8&v{gAIJ$S(G+@i zK6z6hV%1_cvXn>hu?llmH}$)DGRdu3tir~lFJ<>zDRwgoFGY(0x_3Az0_f=?V=`Q`T6S|D_85++F9@ zR_6GubjaNY<$_@+&G2obBn?g!{bDUSnP0W?boTyMvq=V}RJt&Z-6+9_I;o^Cx5`yM zKVJ>moySo1ymU?BkS~{H#0-n5UHhrw?C^pMol=~H_QhDrNv3#r7oDRgsoqk}A#l0o zaJHOXL-VerFxv4~&idC_txLQ4plu;t3KbZ0?{$GgE=H9gub{u#Bl6@>u4}<7Gi4Rr zECLAuoOs!(;i`M)qGv3P?k>|lv2QzA8!vN-nllR zJadMuhZN0YtEOU0^jTldl&RL0NhY92a;>bN*UcS9_jV=v4xwLJ$>@QiP~ zggC+kJi-F}4r5!P#TD!aguuvYA>gUajc8;o;h0s(sYlVRuehNMwK3GvZ$2o((CF0Ho6GU-Wk*6Qy9@I5+F z{}S>!rWOI?i^o?I8Hheg~iP~lBv8RO#gI^6=+%i*dgTE zC;O1dV#uISR_-_^KtFeC`9Q}72Dtof zKcO9fi|T*i7WowENiG^(eP&2t6Bv)71nxtSY=7w!;5m|u+{{Z7^(S( zR`1VIS#K1jyW_`md(TVI_8rX~^~E+21jVR6t62++xvRC}A@M~Rt zJ$=WT>Oo>uX;ij>aawea2K!IZY%#VL@sWYsBqMR8@n6=S1o~^;K5vRTbhY~cvOWCt z34k6&5RtiMt1*BtX!oXxi#p$i!FdQ`T%^b8tfggmgsYoXIH7B^5J9dEz`AtbHb;fQ z+z@^lk$q+J==2tXai3!rBCSK`qp#2d7%P6e>XGgcEe5MkREdl!i6SaJv^xXQ{vD+S z{6)-PMp;N%>M^0-&ofI34z=zkCi0-q+$kQ=1JvL5p6^}sFV55IJsmq|Ko5aDAwFcz+$9VLYa4W9YkN1o^bp~@j)w)`(lh835E}KVP1a(PyNS7pFHh*YMxtCn z02ewc#xuF`W`uHE-WT$p8!+a=4B`;6ekiiWAQUr*=KetjSb?VF{B*DSgsRG~^2Rp! zakCGAWY2)cGLcZ%?zN##eYci#g8)m)1&{`BB{b}P9Tt`WK3D*kacGg4fETs_VB7U0Oi&*ngJC?F z-+2(@$kE89AL09_&UuMN}O}JSH*oc)PbJpAzV1D!-FDCDS^#veUzKf zd^19kmnyTwZaJB8@`_Qq-od@;5P4vn7 zVvDvYZ6FV%O0-kxuY(rGvBm;dLgvYk6$E4eS|1VvfZTL^8`caEFb8psHnK#F(`A~T zMT6N2Iam$xm5C}iw3^Co!z9mqOA;d-lxClLpM3t(x_~Z}9+C(3e@Py`{Th2s^gKV` z_xp^*InrxiM$OM%RM%)eaV?#gn1jw(omfViAX}F+BmJ4rxf0vrkm+5TuLjLj=UQTQ z&~BGoB3~J6XcQS1pYmI}yXyime9&jVn8aCz#6$+>7?(6TW?=uH}-VxAvY z$$f}+r3~#B6?Ur*4DM`%TjP>-GaWoCBUmo zl#DH-?*ydFe#pAV}vR0RQRYuz< z3bfh#nTiUp&@2eYd@gU<;CQd4=`#s!A z;^J0elmFT!e93fWnmpd-TK%NRqOUVcHTmxcgO2oo=Axq2&G?_7ofZ!YQ7>bP5}#aj zNs9pbF4x=$-1KZ%W??(STh37*5}7vYmo^I$z+-^c@AJztZZYYu{JkJqxc? z^h^6P9#cX5x)>nK%K&(I+(}dMgXBA4fz1JEnPspkno&t{@ztHz9xKxK3?aIRT!uhI z`$XW~lj*BmeV*YkNSnTUzOTy3@csJW%%UK{&^imts!#R_ahtxHV3pozjwfzWyiL3! zgcE8(78^dqeyj`n=1t<`3+~7rB4_$vj&D~GfmWtNQe?gJS(^h8TYn5n2;=%3e)jkF zfduneA^df^_(cRmvjcENOJHZPZMuH{GPni~F>ZoYgW4Zqlg$Czd7bK{BLL*CLmbt{ z7JcS~Cn(4N{7lMD|0EI-A=8{dGzxkReq}{biN*!Vf~n~^MvPrRMagB(Q?qY7@tv5A)} zzI31ZOhLV@0@yVb6~cy&*3?WofcRl({`xb7K?@eWI+b8eU-+}S=a%~Ua_5_ao;kM9 zj&Em0J_lA-oha+p9vA>!0^)bHFLey;vNerGEQf$yePw-+T7(K>*J0IrScD5R3**jN zi&w#g+t~`N9>J{K$JgSsMhv9Qx$qT22|sb>j0JAb^cK6 z>nZ#>!9v=E;xqt7> zhwS0!f$8aBngDv0PT777F*xG@+wc?g#5~AC424s zX9yfgR%or01dil4b!PL9Tt9mvmi|ktNsvX+3L7|G^FQ}OJiCe=d%-t(Z}T)}l0oYM z+BMpZQTM+#0bi2lA`aTM;8_6#gSFH9oR^#8T7)}6D3I;00H~?N0tYu#D7`tcqD>yA zU(&B;tY*GnzpiGsn(XF6A@r>2#o|M!+u|V`;u6rX_;eE@rcOuz#0pg*oC>2>|B83h z>-BS*pwB;HjP+=(;p84HoeLPTdXqjzPd9(-i8&d2O&xm)Q%02n$m$~nF#I+>DVmdQ zF11@&9|(xpb%3^5_;?jaV-q#1k=(Bq=s;LU_C}Jg>`_@n$lDUen%rP!=DR?QRe1eg zFppCIge$~GyIoOJWQNP+epp$pBeW|v3gJF(pOp^^B#$sBIs_b1T_tqyZAUK zhlx3VM=RK?Us7&h5k_=ByBh*W>5yGyUf!6?uN*0;&HCdPdf-1 z1XT0YCN(x|#m|aws89NA_BpUDRk%(yHcUpG>CJhQ4uWAqnjS87JJ$KRkLt$qZk;@- zytwlP-({{Jw5n-8T)Pp8#2s^mid_f~it>6p?YY~pG(Vllx}27ko8Az5CdLzr*o=NZ zKJVS@e6(2(F=KKe%hu^8UY`zf@87%f#dp~7ROCy`wGaH@c9m<18WdV%uMzwwc7-T5 zU>t)!CO6Lf(7j1s{d~Xko_q4bE$?(0Uo~U~?yd6SE{&jr>wHuaw`*+EuQ2;>%HU%}h~lv;yP*-u^Rb1wlg z?zim?iqmt*(1}$M6)^}$W&x(XWdvL4y904LCE3Qeu|S}$w6o~RB%(V>-ay2+1hto&%pH&l(~XXGiramY|MV== z*i1`(CV6Wakz5-7Dp-8>Z!g?hUjtXftBLoxAL+Y7<}be3gL5hM;&%`5+~D(mvll(T5|~-(xc1=AUemVU6}O4Z{^+r_mk6taPCe71 zLM~|Q+jTXO3L|eC&Yqv48@umBTu)F5{sOjO2XsC^1{eIir9R29;)?~lATdK0#e2X= zN}O(mZ6)cFrHJBPI2h#b*`;>Ya2Xed(0qUsmEt%q%=X`QfyOjaQr)%LsG*2L_HJi_ z$IP>_S@4hf3vb*Y-syzlP#=?9(moh7*ZOV?eMP(@;uCNA8vUr9HST%^;UW3@O`YA^ zaH(Lt{-{)x)^1P400}FpETlr!mw54~G2)ott+-=_ zsdP$i?e4GM;YQ{?bj3);Bc)7@pKA(EdqFzvpL$&MgEjiURNv~O9YL7(YGua_I)fMb zk9-8S3Nw3gMYPRW`Z2%NUI^jE3&F43yo78<%x=>dWACN%lllys+)ytz$RfhCW#?F7 zDkWLe`$zb86;ovQzM6>76s=B?Y__KIA9L-y9e1(h|7q{NAF1yD|MBC5jEIObva?0@ zjOSQxdRvB?s9Df$h==a}Y#B`-aK$+wZDc;s zI*VecVcL(Nb6_$KkoL>-YK_zOz)Dd#&gD}y5OZ8Ufa7h`O9`}sqNHupyqfMt;9;RT z=S8pG*JJZ}8%~4vd8s4dW`3d>ziO??aslw;%IP!n)Az%ip5k`l8dndf(lA2`YxyQO zxAcpsX;u?Wb>7P6>JQPX6JQ2%P?29@4$Sy|3=HUk`I0r~d^aODu6MyfDyapG_%7k8 z);m``m^xkLxQ^v26!1SAeC0xGom}U574%8+2WP-wo{B5JtgQA5auSQ}z8hOt1M8Fb zK`G={CN*B+vjvT=(J+X}K%~JoxgsHUBi>zC-`BMIdGXb;cs~g)Ow5%@Hn64_^$#_h z+8>GUo@)|1(m?zY9c}5dU6(j5EV3osxj_U5b$xaY$Dqp3pmWc>OMOMz;KqJlu5vSi z5IqvJ!9D~|P(yu~YX_zPy#ujP-7WCIQ%HKh9`zwjcz80S#`|{61Ixq2wyAZTisLsg zC&LH_en`>-Cx_TOAm#))lU8_wuS1r!A~#AwK+G`PF=S)zgZs<874IrU_%(C+i<_?0 z?f`VIElN{k{a!lE(h8V!-6SL{7z}_MF>`r7OxixHtnTn*|8DOEy9p;4uW`z9`eo5T z=tgvRL-P0(Es^;P&wPLp-ngvJhgV=_# zftbgdhKz8S>g>4gX^86YG_MYoTB~*u4wZar@Z>sn?J-}FcUaw{X^31lr}9aM%P&KS z8>~QWd$2x@&MovEGObIwGsAzyk2BmkOQ8UU#TsFkYkXE^WK}@VL>-aUYArwdrKK18 zJnyafvg5Cx>>iU>P>3v0TF+ew z@5MK2+-LiqyI2Ch#++MkE_+d0ajo{uFmJwp_n7u@I9E#;N~h#0VaV}Fx9Y=4_%8QE zg(>nOO6Qv}`x8-x@i%Kf%>0=&7i-Gp$RQ(i#7wgNPWFBso8zR3d(7VVjHghMgi27S zjOY&kEJ~EIf1ALT;dx0XqF(^5X9qj4=A~Xw9)a0#X(AR9(0&~;x&PApgZEslcrT(d zwE~09UezWo??Nl?+)f?Cmmwi&2kVsEhf|}W5DcA5e%)R~CCF4aL^f$=4Z3~ad*6^G z(*ktGBD3j6pC2LK$_xTD)8Kx2{Ax+-rI(f-@ z=e~Ii3;u*ouB|Wq*xXuck;elCMujsXwr`7VkvLmKG5 zX20m9Y9Ky|xGef#kXn3UqcrV?1;^qt_gJ^sOmsdu1otMh5Zsq@*y5NQW?J;6dWXK4 zcZkF8VxA{F5HS88+~Oil33om7Zs#%srSQ(QxP9=y;%eC+ShiCRhYe{VE_2(%291??VL^gxID)R z#hYfs23#H4cY<;VRKTMS$hmpSdM|wdI7tb0v^qET;D?c&+wF_4K2TB$_rG>~nzkYhr4w~O z)^}WxVbY!H*RrHbbIkc+$^-hx4Y2MaD|z|k(R*_J@19|FuM|GBqP1Bo*P&`_5|kghF9Q zpf)8}Mz*z#@DelwPJRq$x2qE6v?Tk+;MJ?2^XW5IWHWCg)EAOv4LnlW(2r`*=^^Px zCcCx2{2@7~L3URbGSBvpZ&JH3T~IQahUozJUOK+n7*?DC1(G77j#!sD+WXy?KCW3P z0vjuK1tq_=7uYszpyn5}yJUN2^@7EK2wEZzd#HI%l-O5J5bTM1!aWIwEbbfWC-Gek zS%z8+49I_^o;RJ5kjc-Vv%G*xF~1GncpGQS&)dwYOl!?EYY=Y1gQi}#(!e^L+W zYsB=2G&#D&K`6dWBg0+%!OLa_A7dnc;%{2DVtt5CM6DvYB`L(W%?_h6Zeq}uT^qF) zpxlSAvsUGs=1`=V0BS`J8Oq=3$(>=wNHlD}iU@@(yk#onALbi%B&VsjVBFO#y&WmP z)=_$jhKJ{5A#}fM=^_tc;+P?<$odBkgKzQ!R1NyKZ8!}WDH_x};IOzqo4Svi?ww`s z#A6`n-wbCLnty495PljG+7B`s91umitmjABka;pN#!@WDyY)xy06W)V?Ew{^0Pird zDI?(k&918hECLCUGKi&H0b!jRI@5kTJ+!_esInH?Mz_+g zcTZbMs90XNW^EFp^WiZT14nuZ51YOGiR2slB))8O9D09Bfau?yDOzI2;ruhFB$%j1 zl@lQ%U%EAuB7Rsphiq-wKsB#Q)=5L!Y_A@Alf%fvX2k8SGsGUl8L7zA7mXo&w{~oL zxhyOufzVmx#&uB4ZiQ(#R8@ujS%iY;pF1;FMYQwohJ>vjBN2GwLGJKF^JUkmLKJzE z(A)ZM$UluJ}Zap&&GUm*VXt}%}FL>dTPAjjq>Q>KZ3wBfn{ zW0E}=`?V2-3Fhz_4+@Z#j-A3}DQ3*Odio@W(Cu|QuL;X8M*GGKGC=62QmuMCva85u z`$W25?oU3Ugl9qngtE=+PUU-PgNdKpI`5%$*aieJ|Vb=`<2Zb-25C#HF+ zA9Q6sS`sXNSwcmcXW$ej=FX>M+M7>Xk2I+7Z3DJjQ#wvbH1Q)p3U{@swU~=8-9qU! z3J~cGNZ~P_vj@|)9?Pq%_;~2ZEm7G;xPU;h`6;jnuItlY5-L5lg|?a~&Z>^Z%21R} zE&Jp&6k5_~FW|ZbGHxpe^FFE$DU7v4RYq4O%PDo8R#hv|fT3axZA%&8NwK=eC|!KlbbB=&zC5N3>gBfeHdp@sq~ z&x#g5&oM_His4sUqB+{HIQHa5$oyREX>SwjOiUAkm*A;nYrh@xyATj=n6N@dzJNjL zh<#-^ietD+G#YxV3J5AiF-@nOpS-xwrS%F8A~jJyt1~{42vpa4-toz_dbwNU+I<#` zwRMDkuFBDOi%7U#R?mt+JK!S!6WTFC=e{-K=fYzsEC_!^ZD{p7QSI3KyUyd+?PM+} zYu)W%mq-`fbBKM&R5dnV0`0?qtb;@Q_nVPZ#g_kn3-R#kfkLJLy(Tg;vB2}$q6H0* zo#*7|w|Mvhh7|>Ne-KoRq0*7a_+zQ0s{T$CSN1{%e)!b1lN!?tD%}B z3;WhAV29nkpr|Ez!5tT!cZcTDEOXrul#X*jbck4011KHvBI8`%nC(rU3VH}qf%UAT z@%U(oXTA8-^78C(=SLb!CksRaOx~~fWim>&#KD*U)9b4+7rC*wA(nvfP*QY?=KYX< zbt{;XdKxAk-y8Y62wtT2oCBVSUsOSof}-UkIF@n!3Y{&vsNJ}0+j8;Ko3E!jWj?Y| zG_>?T%EEn(jEQcEM%rxMsm^c25YqDsFp)gWY^dM==`ufDS;%McqSvDrkzCqdUz}Ah zw{L_Oa?s-|tXXB){W9jLMES8$>q9TSkKS885N09Jemte_!Idr9(rOHulp-omfj7SA zEKU{U^PiVXk*IwCEP_?g`t2cPw3%!khzpt9kJr_5w&xO{CB*s&uPDf~>oy662B>yz zPwmLBm{iX1n8qX4Y}M%jShEX3k)VrmM9v95=s_1%C4bf*5mU%AqMJ;qY5 zJ7vRnDmH$#36S%Q14%TIVnqDo3Sezz-5R{2dDXTrycSO~!MI(IbLWFYXAX#cxIZta z(q^LuGToeibZz%-HjN*+C z6h6w%|C9ix{g}N18W~*-<=wIJZBWwTUVr;6KbatnZmh3RKF-IKou6{mBr#TZ)G4rwn+I&)oYddiCFDKTmbW5LPtzvDX{nz$u8 z4BsF0lPzS3RnlW-;kvv>8J;z{vB zt+k#fzp5j(v!4r&@lS;`U~F(1uqWgU;JiX4T=J+qOx(p1gF4V6nS$(m9lI{n%)kcW z@Ori+X&@dJ^q6wibQo;u<+6z3Zf0H^Z&6rDy!BiJ9OK29f-1nHbB)Kcjs2wXu)}06 zcsToJM}!BcXzp9Ia^685MRVW$)Ys5G%^M=x6iOBY{J8D-Mu^DB!l3H;eKhU06&_lm zQLL!t5voZj_W}%1m+)s&tJBdMZ-Fd-R`=g*C5P2^lT2Z0yY`iHBSo!oh4*qw+R+dN z#sO=j(8tV{keq?bAXn=<@-PZ_VC17IOm3WYdS$DGcSh58pyI1_4={=nu)`C=_u#53 z`UT^_Kv}Rg)6~he<-)_Bw`t!w(jc@`LWA>QT=xO?U9F%qZ7bEj(tWL*$HYg{tm94t zjI2G0jO5NMf#`~oY$;ZEJZQhx35MQGx3~irQxn_+Pq(@tWZ>|dVwUJb&56zdlnv?w z(sOpX%QpC~A-xW|oEU?bERz3IDDOl6ZD!DBiiZhDZVfl3@N&C&a8F6cst|bM`QU$IsG!-UiqE7awFN zz`F7?@CWs5DxoF14iyeTj4SG}gd2y8q$AH-gyzU4G!j8ZO=K@JdW!tI2?dABJgSEL(I^JoH!+k#P&CTsC>I!tpE>KmPHF*|mz62- zM+Q9Sk*i|)B&Mj<=+@$;Pp@vf!(`BRK$Bpa_tXUi z#TkrFHsk3*JCICw2kguzQpSBs4e7;$rJ^}?k#9Q?yD|?G@Z!Dt&GKZDrYZ1xYO(zR zP9#Lax6Z2(lnt}N&Yg&SO{+Doi@iw&m~r$DQ17r$xNXrACmH*3%?QB}SheiFhVvcQ z9M<~&I;QmYTcG_$c`X|$J6fm4*U_qsAGTfCDeJRqLHH`brw1q;5)Q&NYzG=30HljUu29^xC)u##tv zcK^9Ps9-cnBAr=}gOyi#O6#OkbK)Y@+T^?*SAZRV2kCD?E9km1#Ul01N*6k5M0g4j zdGE|Pse|PLgRz=DA2Pn4r}zfpVjle%ZAJ5~+;jP1|LU7wl-6Me?+A9`PB_&j2(#)I zf6`aW(FBxEqScp0DCaqwYLi2)U*DPuchB$$v?7Y^MN3|oX-~U7W5Z0U_3mu}eB73< za1#mRjBIliBj?*{ucg9B-BZPN+XZE4#H{rwP2GjKTpwwTAMq! zy53)}ex|iqd?MJdO0FZ<9NtaO=nJaEQOs=TAOl``PR z7*lI@F2iK+jqGKJbx*@2UR^rUPv}dV?&mvc4GsuK)PGt(W=k4s?bNmMau2vKZ#WmQ z^Lu?VRd=#9jO$b9{aDAF3%tob#=wSCEaDdNLx>Xh1a)CawZ9C^OAcDfYw+Kx88u7zN%49Y-8)Q+(A-Mzh2>H{o&I%j@* z{=J|OBf2)#I5oQ72glP}se$6;9-7-4-jD@i#A+=E9@c+=DMuA2Mp!s$^$}v=6$wsl zRP#fSL4~Tf21Im9^yY1OP;(R#ESVfL_M4RfsO)QY_b#-7Xf{1HDtaf;Sd8}#J{)iS z{rhf6|K_>qaJ`hCyMzPjFoSpxXq-V3N z0{z`fI*H*56@e4c z#H~1%a9i^#^T20-w^2e^wc*Qwi79f49nl_dBbrd6EOMqtOY~Kj(&Fsn2UjTRy)U;L z5s7PVm75Y@?OS8HGw}p+Z=f$V#)#1Ey=skmBP@`XIeI~uA&aO< z=%il+Kq&p<8eemluh`2pXT_FMK4-!7+^uYt#B~iuM2U2&WpIn4)Dn5B$O>*sI`;D& z7j-avqvIe4(+=;grQc!-+SLzSFSIl|)YM;YtJ^guDW(not<=t{Mb>L+P`~$;OSkvv zoS?&3dn5*jNe)#pi4T}5Xk^qU<;ZytL_DD6Ic-G+c80vk^*$c0T57cRxc(Z2nZIs+ zPyX~t`ku|xX&Eg>YzRi%avUeddKZVucViC+-m7BpffSXdVviz~ZJFI~P17*?YaJWC zq2dFa5dZOmlS3s=pF&6lq5#W(A5*aP2z+N+g#>9h4SzHuCknZOY?oBOw_{QDOmZ2> z0Ji~Ei3>qlD;x)OK=MED-H^kigU>gF5`8*g+jCq7`YPB!qOsU^6zC4zh=3z!#BJB$ zk_mOXO*hlycK(Noo74G^Md|~y=;qVN?VOaltU3L%A8F_6%iC0SVDW!&n%w!fvXlv6 zED!mRx7^ieM1(HT!zhfBWCw;(x561TFP(;N2^$!waCH6>F}%}pNDWA2Z5Z5RHZ*eN zY>pSfF}d{8xM-jOku*1NExeqgdlpzi%JdJiw15qD`OP=mT<>+DiJt}5-fYYE-#+z5 zwL80$YZY0B-#3QV{gMy=ey*GXJMYLITyWCNw9R-77_T#)3UCt%;&3!firDL zf)J0nX3kpADCRL95$x#+t0GDudfCPhe$ISGl=(0+Xc` zsGAcy(J&*Z4a_KTs&6B@FNpK;j=s+zc@B8vv+5o+$jq}YRE(eR)^x&^RIh$FP9Y|R zhTd<<5asgROhYd>gy}uJk^&GeDHyb0k8=GmmAslp9fxI)_vzgW*acZtRNh$T)E%4^ zpE3lbREJmKYAL67GCPvC+MXiIMiTXy__bFMQVSq-=;ceErsYTuU@`&wC)DI?(9+x;+(cYC>U5S$P|%y*5CFC|2Wa z#62*ax@$(R;=mTk)COmsatCLdpB;Kv;sS7KjvWnkb+zK`s@UXt& z(M&iFBgz2J0HvzS9dRkLbzUoiz$`Am=DyE`4N@CK<`e>=ie8;*AcF7_*zJ1 z%`ouEKW|+%E)U{|W$vZ?Yprd4Bj<#Onb|q&Wh{4N)*qJ&yep5Syb2)q&tn}; zbp;AR3kcvJ^gg#*Ltaf&@f9J(BWRb;h19NJM8Oq=S&p>5#Btgld0oV%L{6ne7KHEW zZkn;reHyu6#$Wd}$V7{919vamTFsIdN^vz^yC!o9)nF6Ci#8hMrAB zq8k%ud_MnjZQblFLNLibNZ=ZBv7=*s=2Li$71X-QyE=P+XpX8p?U*5h7&YlE&`U=LTSuqAK`YX6_j609jB-3nesO6R1uF4nT+T%N? zVH5AAN_);RgT`_^P=cOawx~U_`?MUWD`6XT#Pn%P(C$GKupDX+GeKW?LTTYL6+aDUx^k*(OovqA4bP43VfogpE=TxT>RK>Qwc+jn(Y9Q%DWc9mNxCT3c7dJ7dat}SXnBppBi8p2{~CG`Z@iY=ubqZ#s=ntuQ~nd z3Lz68nNTMs*|5VnLbu7fQz7a9xvy zJDp<(8C)?k!0}0|fz~NAlBcotFI9qS1N)3j!U%8d<~ET_YdM2D?>!@5{=;-4?_%VD zq_s84v_Gf52uy7IIWgVOx}@8Yso-5=Il~E~rGTUTQ0HtFh76CPM>x{T^#oT_Sv~K%))o}_r(<;G9)kY0p4^X#13m~+w*M3EFsicuyr$TQYg2cW9lWiN=KQ=y zdO-eTnqH*qgam|}MNVZcCv!F*0wdcJhKa2-TpAN$E{A^KRv3OY*HI@@yxhyZe9Z#} zLmAHQNn#<}rcxtVjj6z%if$AbjQipS`Gl!Fd34C$O69?_*6@zXO}XhFB+jdu?LL=Z+Zh~+d>9OaTNw<;j%Y@2F{Nr{>L3tzBVEffA-Zz&(#o!@+V z;>-7}=BxKOtzO&#l)b#d%kdXaN#v>ag)|O(Y@v3u;QB?+)};T3`|Wme@`|+Qp#>}? zKkyOV+=ojY5YX2q3p4)BEIPUcJRa%HChVJ37@xvAi}i>EOt8Rb08W7pg8xD?<=~Ml zTyEFJigYGxh6Cv{3F(dQD46Ml9tKG$y(A~39BKjSqVA$JZa|9j)i3^0GlFVwB!LzgTZg^9;&ZVZd6Ku| z!Yu>(>%}UBHlV%gAxxZ5yxM_1zJr3ugPQCa7;m}Y9f#V5b!f+9B5-n?#1J<6DSS zmHpiK*oO3p0(mzI=0)DiRZgmdHuP>k`wH@(xk%AcL?)R$fF^zxaR5^HW9oWTI7j!8 z^aL_uG215!`8Ua>9{UUpb+{yolU;^6TISGZwmfvv5A`c!5TSXG&b4&O3)m-=oh-ZY zEU9nhWjuf^UO-H~_~3lJR_Bqx_xj;QKI7@Lx#hHYuBxm_x?udPqIv)E$_AHMnk}g3 zjH(@>X~_7*oT90HKw2s`X;mQkyvBEE5_|^$sToNf(v#c`1XKHgr>O|{EIjoI;cYo! zpl?ALc3!$SX`>bC-I<0i_9$osy$~t!ndmskoG!cVLBi3-orh&b+<={+`uHzVb7XkW z=a;f!d+1yhlM85x^D7mPuI-(Vhye($Z7~`kXK(G4G>(z_b&u<_)EkUi&!_zoFBI*q z!ZCBvh{Qc+&IFnGuHDYAWR5Zu39Hq$Bd7VRHcAi`0Jb=mj%N=~^9`!xsti;-;>@*W zAZu8!7d#%Ruc4?r?`0x49{|RDnrG%pPx-B#0Vk6$=VPj4Y==ADW~-F9pr#(145Qlq z1SW%t&|-TTCukbFdNMzqJUd-Rj6P1Bn8s@_zMBNrGl3&(;oVZnFEFR_qQAoCsWVfL zjl^yQ^{jpz3SYL0R5}f&lem4Ma{;jkBvRpO>1E3U2?;qp|#523SIU+Z!HAsl!6 z5~i%0`FNxd{ie(b(YZbC9Y6IGUkdm=qN=6qD;`aLwWhrUxfi8Fl7|uwV#P|LL>zC^ zrFUclZGo1c@>2C7*n0E6YaXO(+3-adIf)1k%joXrDt9k8ccBT~s7*`5C&(8BKQ zS?RufDBLP|!ajjJAx<-cQq8QP_ajH4r8E4XjOw{Mc?kwIB>}v7z7r}+_p6gyMp{Vx z{@2yR>p3+u${D*+EYL)E#O{XI0QoA>APd}1ImyH=*~#v}XG8i1v1mL$0Gn#d9Lo(Ds< zaeq?soLNFPb5ssy-YmM$gI)81NF?JlaER@DZxP{PJ+YD`xW<7O4}L0@N`1$qSf7rn zTOh`|krPd1NODV7wd_!AV(VLv>@op$1!i76gKsKrN)#+f$wIPhsce^*)!28Sf^BB$ zj*FkVb5n4bW^%?~J>WD5H)$8T>dO8@iCH?hM8$;PEPm5rP*|Yd_QLhb*AFR6ESZuf@D{ zJbI%%3oFjYjP=@TZEHJ?R;DI;soMuw%Fp8aC8*~fN=uAkHqhe4zNq;X*Q5v#WQruu zh2@OCJKoQQRZem@Yow+N#wW;>Ia7ARms8`oJyz=*D~lsOE77f=DUa4Y*k5r^xyNvw ziEosvEdXFNO;i<^qT$X#F@5-kY=($mjgq~m_Dikm0z;B;c@ngKVC^-QT_K0 zDbwB^{$Z=Q9M47eS}eAFZh(5$QY)BizuzOMe}DMy=clS~>h?AiB%voGnuQT3!se=y zkA16shpYX}R91YrBBx(G^9 zK=PzN>xVhCKD{~PLHeL-#&yYNkJtIia+Htj<*~M55uFdW!?RPYdzTHssXd{UrNhIn zwM(-8boAxl4c)AzR~{mquTJJ4={3?Cw0^K zpt5^6Hlw}sp&F;vCl!6aal0eM|xQO`dU7S6GDGHx=FFjH|g_W4j`ow9HaN>5Q zA+tkCR?QDF@m*yywJYE6^LpDH4_2YP>pNcEIWRMO_a)XRId3y!v{D(>{B=9S6Xypp zN74HGRRgcCekWa*AZx{UE2_!{9D|_1-pNZx`0%Dhua%$zL!R-LQo3*O!P^eBTxA)Xu z^(%QX5`P7Mg^PmIZUSqWmd2)&wEFG%Y?A77o|8lDzfcL^#mSGL)M;v63+ySnHPZFD zOcGdcYpcsI`vh>_CUka4TDczdCZK=%%dSJd=7w^*aWKsB*tucmU+l_MPdPj3@ABC! zVf5&~(Ltv)8a6IU+&i8pl*wR8&snjl_uP53)ui;k{3ZN~;L7+hG3Up8zLV7tEWh}V z%o35M^l6k^>f<{EJav7*;gR!U=j8DL=sWlqtWV^z{D@`8)pf_As_C^tfe^_+o@~)f z%-AWZK3==YW7D;bqRtemozly*OTCPbhou`sU-N~yJ7Ejg_5SurB2@cmgJ3Bdj^})<(XLFtK<7kAl=>**+Hsf0Is++cB)qivZo;-br1U5hRmRYQxeh5k8QkM9v&MV4$PX45ZxcQSN< zFb5*#_-G&(j1(rSHfZ4G2^o=^INmIn$1krL*Pbr8VliTywqqJG_et)|45cfnL}!w( ztToYCmDi#)(`@xykD|Jbz9|({9-Zh0=pp}cEfPM8S(B93*gic6ouhB;AG>aZ?aY%e z%t0UdhXX8671N##ynQQSP)o-#$hxQ5>&eCI$3M$3 zt(EIXU>$=yFB402cKIG|e7xBTK$J1x``8Y#ud7Q?)z!|oVK}J<@aumX!aB6u{*UJw zEGM0l0(5I4!yJx?NY?s=^uO%U-l}@u=36&B(F|>MRMm5RC)if-220MStJS}MIxDO+ z>e;;`UWke8`F2r1pOUKV#kiBt%oQUS%0kZ4cI@KG7F21!P-DvL0=>_>M0skRKc-$g zb|#^8zJyNUP^pNhb(nPyU_K9a6X|uT48Agw;=JFWiyp2j*z};JFNyIFln5r~#4Pe9 zSb7EqQyHZ9xa_RRm_4&(p7SN*srFzbcydZteEN}1Np20p3#?bMMg3_}jq@Y6$7)@c z9)qaO_1*(He+J8V`0gC(^{*ID+o%LcQr~(Sr442#EyQOJ%a*A4Yy7 zDth%Y2p_8$!+&P&TYQ0A{Aao6j}QATq@f~Zy%f}OjC8O$F@yiN#?qV2&+y%-rJSu* zp7Pvz#j2Nsk+#Y*qb|+Urj|-$(vKY^40go}n4w@M_b%`XmypdP9_uZz82|ZiEzPfp z40}jb=^dQtKVIxq^qZ7udQF{+mh3u9DiKV_=+KhHX-c&p%^XEFeqR;_F%VHp9BB!B z8=xcPdA@9&QXKf^Zf^#0Ex&xa8MAX1=Bu5@O|nMpOu?00kjQShpGFd#Y{P5#==P!Z z#3G?;@koqZ%A8k>PQcrrX;)XhD?DE>Nt56)>@3_mf?K7mKJsoy&*7vK+1%Vz&8g<) zE1x>rGDjn(zsjV-XyA?-%fQ?(sXu>Is4_nuYtx)F=bWCOZqr}o9q+8w(xrQ@@?sS~ zxMzLFZtDoMYm9Ti8?rIGpM(9HQWiqe4^&Xi9ljZcI7VCE8NZ^@9cEaUwmJ6fxL&4} zYhuKvpVOl(AVzHwM2DEOqrGq2ux1k&n1ZH_+tO3^BF2QvpSQ$ z5t%9P#Zs<4Gb_4(T#BE@q<|i9@VJzlxT_h#tJkjQP|(=sPQRHv@&4}v#%vK>b*7*z zonA37=YpzRB(#i0(tN~?w2AOZ428|_TvcgOVCLrieKLdJq1|qZCkxePu&rJ#W5L5} z4N7w1`0NjfXnZ%i@{5w79{%ecDY=lIJVB{4MqkKH`lD3gvljl_SF?`pv7*pJkkeR|VJvkI#mP7&jqkrjlDeleD$1~Ej zjVZh4r|?}@3`}CF|Fn=4;QB<#NPI)^aV~ZG2waM$G37o_VQbTohWsOuqrac`?{B{% zAeZ}LWd;pNKSJd$d^=~sL>>M6BhXq=Ks@%1Eos+63a)8l8++`Z*W_1V2;@jEEP&wU zuf2~7K{cjONAXMI<1uLRgj~iw5fMD!)_Qc?Kn|=xPBuissHgNd0x6OxFWN}YaRbV& z^jew6@_;3MZ2i3%?#?BV^wPcVdL^8FKG*17p?$pJ*Haw0&fB%D1tVV_Ju^e)&Y&g8ENZa~I7h}RPrfpOvSY|DO9=+4 zB8>s+pQ(PYp&b|8xWM9OHuR}I$>6)^dm7*M-uYFmIL=Q*mC8R+VBnXlbvyl3iTuIe z$%7Z|z`{iZOiFsGk!NRsg>16E6V!RN8Soi8=Zxjd3D zy;(8V-aqyJQBe~_SMGkUU*t4-*m`3trzz}?@5X9~Ck8Kw$HLsI-!B>Rw+4hgK!x32tsORl87(so%sR8?-Iw0?j| zl`cLi#|96VI;0zOvd`@%+KJ#FxhA6Jz}o2tc9FV?RgJJDXsZa1m+ zZJrZ|QM$K9aFz`fY)+ajRFh1sMsMx809@$#9<$uilGly<6n1uac^S`>V~TS0e*jjU zKND5Dk)PvVO8)w7FuJ3jGnjt2;?>sk=8A}?;n60P`=jn(Ke301ewES>`pKe388J%! zKIJcBZ#Yi6&K%_tTy#@1&_6KZ>LoJgz@6AxZ8kkP=g%M*%64lr(MDy&H>ij=c^r399U)r8t`twYH ztuaRrW3nQIhxKAq*di7`7&4;6o=`-2PpCZ+^50FUm|c?N;Md4op}A%*|MX+ zBO9E1aAK{TGU)CH=DyhQ9-s+_J7h-ToE{Wfom8UMV@+c1gZlZD-M_!fhvz#aVjM8+ z4zzQpeB##MzU%L=TIFDRG*wAwYd#FNhMeR2doR_rF&D-1^=Y@|@m)zQeqv>CkBhu0 zdb-w2V|4$5jmt}&SeCrF1 zsKgY0%{fM}2mysbu2+E?g8f` z^63rm_$20ASSj42_2<(Q4RV8p`HvVH=OfH|NK*&FQ-2*?(Cv=}g12^wni*qlTdT+O zf4OU}64*$ziCi8o4vHHrT_>SvC@sIpb@cyo*VLwPY=e0p8Q@xI+{KWFbsRK16-$D< zEdNNcp?jtwt~38%&erc;`R_6M?=kxCG5W7H!ZlOBtpk|K|5~H}I<@~gwg1LOxZ%ei hanS!;Y}BxS@VeN+yQY2@&!OOty0VVa)3a6~{~wd@lf?i4 literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/levelsofinterop.png b/docs/src/specs/img/levelsofinterop.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee15946935d23a4fd0138a7b6c8826e95184182 GIT binary patch literal 163344 zcmeFZbyQW`8#W3EvO#GOq)WPy?(Xgu5DDqrG)Q+zw*pFsbW4YTAV^7rbeBlo$@!h| zc)tJd9piqCvE6I0wdP!NzVn^WThB5~Sy2iF86O!21_nh&T3i(d20jl427v)`ADls| zQyPVVL9VbA6H}HE6C+i2w0mJ`Z3Y7)9hR7ksGcy5>9>FTE+jBXIX`eduMS346pgec zLRK0s5Yv?OX;W4GtCu3;@C>98U8T|d9 zu;Sm>+XkCpyYS;?d)QlVuCIM@9;0$ap}=5=+7nVoWriQ;mhB-MPW=$S(aG?&0MOQ$2K{>>^&rC{73_T`Ao!>E+?hlcgH z{O_KG{9u}@4?7iAso?fyS{QU8D|-jsFSK0PP42}mS5SI*`e;A1CRQkUMEfB15$$kP zr^~r^1rpZmgE52dN_bj-6HnXlWbN!E406NtX#KvR8vkW>d6NtHVRm~&;&!x)QDM9a zxTJQt6n|2fu?8J>H|+XS%;yi>k-|2g-d8o#$4?mH)RF(d@}UCmS;33-vaZ<$^OqO{ zUR61Iaj<@yFmD+2KIeNO9)II=$YmmjHO5s}-ODsW%F5?h3D-&cI~B?m(v z#%7VO9?3&k2nxCX5dwv!`pCzEB7%-eE`}|Qq#EK(O3?@RMocjlaTO6kOhuXDHOwIy zM)ji^I2_?1WmA;CEg8yqJ{k{>Bkkc&GSD`@3I9#=3EA~T0z zEl${@W<1#UlUtPi0sjrA?jzTd4;0-8Rw)-o7Vb&RnDFDb8#G+%Fm(7hF_>?@zCBXu zelM#|RP=ZvtT75-Tp>sBO{E2LS}><1Urx)Yu?43GhlhX%Un92n!#Te_;RQ*wT#q!f91;sQLiD4vjpSDU?&&*qIQwcSgIzdqWIit3;;o_tnkiuP=~ zvUJLDhs6~+q?2|j(muK#hVVgh^kC<1Z)Uqe$LW%!J;?zk)TJ3=9*ZPueT8c!;;{FS z@rU3QjZYe>!e_E6EI0_ED5o)XZun>UdI>x-c`UO~4{<3I8rHD-Fm2Hi3PUnM^47T6 z*w3#k5+L!5GS;tY;<%qUD40kuQ^+Jemv*G+jup=%%6prqIp#e^z?NDf=Sn7(@TH%x zk7IRkm3kE|9$N-Wrhrn)G2nUX^ML2st8%ojUPoh#Sp}&_t5=RcF4R-S8iThqu;j8# zI`Pk1}(3b9+ikIPAS(epDO<$6IQUA`?{oBuTW*Pl1+D7nMayO?IPz0 zXDv)(Tmm&>D&hz?)9^$XL6cP-NmJ*oqj4rf{y?;@pbfq}^gYbv&^;CEiRp z%{Gcc8O)O@W*4>zxzNDxw{P4JLqBg3Av93k#-Ppa& z+099yoMo;AJ4{pF)peChbwW0`$pMvORhg9@(9`af7RuR$@B4%1BRw{;M z-p}O7&>2n~Rx+s8=VqE@)fn{``Q=UeBSTK3sAQmtR0IF0pwHP2KEVeaSZsvAEq%+AgJ zT<%WWJZ`?3l^=8Ea&>VN1xxDpxPp4oA;)lWtKBG|Ld0LhOl0KMP{8DUw_s&a&0s<_ zcib)fM)niq6rU8D5&?ZWeyV1wEAK#0apSIMd6uh7r6y+Al97!T)FF%#QlC_bcox%OlX(jQ<@QFJ$k*r5HVXW8F3q4tJ zS#LT)4$f14qonLl``Y=nbT2i^+ofZv@$_xlJodL_a?2}tQDpV9zP?tJNPEi^*Sdi? zsvN8)snZkk>EIK)4x7$ZNtt!$j?MI2o-7`ra*=Z5a!aG)O4lzlxh|0|INQ0W4%@R_ z7B+ozELEc~S1J{{6#CPBX02-*?2l&|G4#@$G@Q7;quwr_irHj6&tlo%(+nvM@e#l6 zyR7s~U#q>IZT;?aWQU!CgN^GoKRoZVLVcVq>+`dg!bj>{F+CH}&DibG4Q0o5-n&G( zfaRS%bYx5bMWXu6)tfp`t-TgQYYi_85{GPyg=b+#GGBaluba+%nG_gynVlGmnYCya zG;eNT)`b^Dk^@{q)X{JVe>$hQ{V)vDk`T+cH9N%EiHoEdDe5TZ^)0y7S1Z*wP`+NH zx!qW-Tr?%(sO8}3)rj6N33@3}vqEj6c#`2PG_7u~ucg9lWMq$=ftl%XBe%nR@13_& z9nhUZzGA1^E5bE>pL^r6b1c&-Q`}S76XTxq>t3E8#Eu(`6nq3cL{>znB^o05^g;bE5a?TeZpzPMbX%5=PxO(^hI8OzxIvw~4fk zLce@}A(rei*|1RJ%QtEBWzK%^Oj9k!K*?!8em+TXy|s3BudaOFc)nqJe_??Sozs5b z_S4))&kRq~bG5xTkJ!U!KbLx>Qlu_o@=0)oRNPfBnm+EI25<)8hI|WY%nIiB=Ke(N zb0{@Kk}c(!9hZ$0Qxx+xQYX>?@0@Voy>;iJ@4?52&9G)6vl|BA!rP-ABPL%L1xdx| zX3W-~XC9XX`CL*9x-B-@$Qd3-Os8`vmse=AB+=e^zB^aghnCK~$LxDf{kQ?lLq^_h zf@DQe15E+IC8AcWjrpwGp;Iu^8X#w^F{0-K~>D&jCd%_cv zFfVkOeV+?XA^T-LfQj!r5Y6(|g|)V%B|g61w=Nf?7^9A5jwjY5aB4%en+o|T^t>$Q zmTBL2Sa|2u?zjym=^RO%=BD8SHxV+ag9EIteZID!QqL0E#nk0oJg zVD9~K9u5X3#1aPn&wCWX_uXGC_}sPm-}k-vU>HR33ln^xIdFg74WE~D@2_J725=2V zL`_Ua27IfTI+~f;I$78`BeT6&04I>_rFEQOU>-fW`@qVmQXYW*r!3XAowXI@c}?wX zn2ev>nV2y_ZS3#*f#HYpf4FI0g1k2`q5@!e@=a?(F;aegU4uC1U< zDrVm}W@a}xHzqfBCOb!SW>y{^ z9%dFcW;QlPa0jE4yREY^l+o6S;(wj|)sMKDlc}Sny|bmAE$Lmq#wK$npB)#G2+ zm17+r{`YxzS5IF1y;4_l@MQl#j0aptpzZxXb{PAAANYSo`hS(?Kbz+NH{0TTqkdX} zYi=C+nZT}@^_$o6kV0=%fJ)Ve)p)t+cxs~Sn1&zA5ivK(2Pl7lP|iE}u{QIQlb(5b zI7|!j_JzxuN`;)cW||v=EJrzp%C4#4rP)(}aD}ZK!Sh1m*qPCSKR0@YuCtZz1@Zlc zhdu6ap=!t)D_1OdoG{3$ox!!f_`}`QLGNxh39`li4Xf=I6ct|-`EX*IkB9kUYNgKI zFGB(3k+?|K5hK9Tc?i-9xqIezK+!4kPk0 zozwOIW8Yl0wr{@nYQ0hlZPE4S*sGco%# zySgNL|DKGn5+v`HMqM{ucVU+E()-r1SK~C>f<7$wDMTekX>Vv~1f!~=&mErp+q|6k z3Dc=|tFwqT*klBx*;&zG_r5SdC{!6M&qP*1R(_jj>Mj49CVR{0=)vK1yndrj;&uYz zPkS{E5#C=-k|J_Zf4|L}8m{ai>>@f{_1n5oDu=*0sasdft0Ako(8Lg!Vdwp<&c5i| z_F06ec#VfEd(Wf_CjHxh`LjyrU?GNIo#GTYlCR8HzEaOVb)WmpFY#V*o0~-H-}7(h zmL&~7op33VW~G(Sf7(;(jZi4Kwa;s)f~?{_ZY&u7@4jJ?o?^UbFSjW=Shy!qn9*17 zP(nI^c&*<{FH2U0#ycSOZ~IG0>aPpWi&KztoaHv}UNcksd5ScLl%wN%YL7xA6n_cz z=r))m*9`bJ&W z^kko28pVkusj#J|9hKcVJ^433#9u`!XCRfr8-s{X75}ZLk%$%Er4p+Z-qK9&K0cRs-5GbkhFkoVR(BfD67h-ICg_O~QZHj|wS8$x7b! z6=SGF!QP&T?#|Cb}ML@4nI+a#Y=sB$UOe@06~rp$>L)2;8o9FIq& zhfqj%qL#>8oW6*jqpR_6hyemo7Rj+9CXU#Cf+KTst0`gy@m4=0+aThA&(Zu{V_=c0 z$vzLr$%+)AGz&JCka7eL(_BKZ^MYZdtFP8aF?7&M3hA~jlf+`&SOa-A( zq=QS}E_Shm>OYdeBlp)dR1Mxm!LW@f0$U8uIn@n&XyXw#BtK>nJ2wi--hDLl^f@xk)qJzo#14OlUsvaxQPX@lZL7lOm=a z@YxU}p&R(b+DjPa(K0pdeLi=ufA!7vQF7bE2&P60erI}Eq(}!iCH_NkZI8`-0=tHt zs=;6&gJOrB=wG2BST^UAaUdta0$JA|+w{^def13bF;u~7vE-{}O}n)ZCJo#S4y)-) zDnwJD%V81MmwQdjS1Tm9G-rC(h$>rLZ5ImdYK2-!4^*WH9mKVLuTMQ)JompKz}dB4 zynt>MzUvUjQoyE4dG_jHtGGPa_vSdeJA2a5vy}Tgq3_N0zHi834*~Ply3j4{nb6e| zS_sd22D{hpOQQz~@@z7=Sv^#e1pfN5X&zgJox61lg6}7vF#vb#t-k}u^~o2sA{6>x zG%Qj8uC(JU*eOf!O#1953OkSYxgnJ_irdY5JFgXjB`|=!0~y3e3%%-n?(Lpi8$snb%k zyOvW;GVUegkRM%VWleiq)u}UU=b&xH=~ul;CcBT7B02K0q6a&a$={mxTlKc4FPavv znLe?P@SEOy{i~$|E-x3Sy6ZH{B7q7!ujp_z>e={1sS;0{Kk)}*1=VRywr#{)E)n=mCWa((Af z3F9=&g2(nlSid03$|L_OcV2klk9iUT_@5FoyXRd$2ZMpB$bZ;HZa1RuG=w8~a~KnH z*h?am;q!CT|K(_su2tc|m+YJBz7?#Is8t|B!P7#eAd>41DgO*@elD3wBd`m|xiENw z(Lbl?lea5yF9lLuY?ywZhfZDpoNQzA3B3h6=(g5^j)l(Ozs5f2`~_zjj;G+jgDgb7 z`h3Ax2>pI&$l!efYvt91@X2q{1n>j!v>m&TjJyt)FR7`=S7L;S=Y1}B$(f1UU>RoG z?Q~9j$hoEm=*#uf=tn3wS9-XQ82@%;g!$mi;^fC4+pfpCj;x)21=H0%wrtd0L+1YW zO8tu%C1S(k2M`6|lIW{G?{dW;tDSz4Zhx_s>~{5V)~?Na%BF6Px6C}qAAT6@7vc9W zsDl>+r(TC=j`v>f^$^%Gl(~#$ne`gL0XwZ?2bYg5Na zlmO;+n=?}v{|_RxPmw7nZKu{b<+t4InIaUT{(NU08?y>SP4cB1*XSEGAVHCr)@$j3 zkp#1Ys@kLfUBR{=QOkoI2b;B zVly6`P&s|$085%MTK;fcn zEo^%ytkLLa$%kQNEdv*gN;ZmpzSn_2xE8#eK2i%lF;s8+IZ=*mH%gOKwb%((05_uk z7u$y?g{00C6S?Z;O}HB#ZKx+wbWh*x)wpyc%=hB`DD`-wE^1M$U~6zF%-@Ex#$ zh}N6P`6K(8$%IstEhlUCn~xPSmZ8_DlObTgF_V5;J^Q&`9%7#5UI3AzFh|Laf7_4B zf6#6ZunrZvYUjPJ7X*>OGt+=lUby2ej9P4O8{K;Fm$Z1FPH1%kr6tJ%O6zw{VEnG3 z1?-0IA0H`R%vin~Vvdh<%Jxggdfefy6cV(_emYGU%DH1fw3aWL*f9Fq@0Q0)+xTu?OBiOR>2Vc&t&ZPqa= zO(=BOg@xN&!Yc)LR&BskA=-)Na}Y45(H0(ldyVFvKi7rdpw!p1n%>8ZwU`B_ZEko1>agI#V%K^ZK=U##U~1)&P;V442Zf{_xK;Kv<| z;27gHBH-4ZM>tYaT02v;TUzLQ@DUL=VI!+Uu47j{9#0}$s(bmn{6ev^(3Dep{uKLS#kyy z?y;!Uo=t$?hs}cYM_E=4>yWS&yN0!-gXs~U+P-^lQ5w*gQ1fjgD; zfB_ZeUMokB?x&CAGEIR4akr(3y%b9wO*>U`Y9Cw>Xz`ZgLStpgua>Hpeo`Iw1fI*Y z4?SHZGW6W7X|L;m!(x5zP_ZyE0Wc@gatzXU>NN09|Mj%0Zl} zUg`$RXiV@rT*A6yD&EaEBQBv;o-rbRg*nSI$h%=9$8{?9qf=lk7cRV z)TEMLDh;%Uc40_8Z7v&_(YDM_3|H>ff37e{E{S1* zKpONz>&3$5{5kT-o2r+GgbVnh_f0V1FneE?)@U~Czl_M~z12P>mustRW?Ol=U0OG+ zluX@!UgR8AghF|h53BN;|$vO@ZIp+OREs*oY5cN8K&-q#U!d1Z%t4t{K zE2k5P{6gGBlnvb0WCfp*(O(z+zPu&|{WrMr^YoNnS8z6n9DyBMpZ`_dB} zn+ikXhV_T;!2_Bq;v1c&!FI^sLkS@Gqmb0MzCIU&Mm=hbb-SVuG2TFHEsSoCk_mWX z6@{)(Imc5TR?>D8!d)+KUbky~vQegH8J z=MfbdOEp^$-Wz2rsBNNmK%~NaIf0}t8$U;JkIICAuKN>=v_AGEB-%&=A2jq=^~1NT zYQ+?)wgBxEY|y@{h3dOP1|e%Fvv(^7yKKnZ+D~6r|K=Gc4`~MGa_E5qo&&vDo*gx6 zZPETO7T5nP{1Fdd{%Ne$kTqpFowSRv5XmhJK~zcQ&*I%iSINQ{(EC7CJ5>t(4f;|Mv|@=P0C5%s6PcRKJ6`D(A_-E~DRuMO_R0EFZZWermmln> zq7|8L0i{n2B5};LgZMLYiBcgcL@vNIFAm{F_tc9y+n7OmyyQlI%*h08L0jjN&W#+p zaR|BxT9XaE5-tSLcc4sx9j^Byh+L;~4Oq+N{>d6Vj29L(f0vs3DeV3Qo+ijAh!j!L zgs%m7Qff_6?1Y(peY=*+e&|)qSlk`QMU7uPw&wo+AeQuXlzoQZ1@18?_&(f$P+{LN&D6c}%LmMo&+!8~*_*rg8iL zQyxL8Y_#0WyOU#vDi9~8g3UjYO{0f+R?%hvE!+?jL9l+HO~0scXzyW>#J6$CAh3xlgHXcXOrQ+P2@z6}V1v zr)nm~fW6oa54PwVi2tRu+kSvfGk6J7Li{C7qeTD|urFm|2dFpY)u}<;jyg|;UHm+* zuXzAH_Q1M*8_t+q;mn|BOn>H)yXk>pSkH6r^OLa28JkHR^GtgXK|aM&zOw|!Zlw)QmV1fATre8-HayVR^X!N=|eyXM<!{h@)}ukeBdfXAso<`Gz3qxWPNcxDWk1ihR{jE&c4vn$5CHq&_xwriTpn7Ov@ zp@bu$7M!EvST!vYI-#0GBSqCq{B5WS=k-TqYmWX;6q++@6ZR-*@(dr}WoUl%EBVAf zDy+#~$Ll082O(am1{b6FvKM^Xc#-&<>WAc?&4n(fsrHHB6+6@hyWZC=_%unMWP4(a zQe~+%{P<$4k5Sbp>o_XCdS{(_J57YjYQJ({v=PMzuB1*_b@Rd#@fUE;SiCLJpg*pK zW%}ta08f2wVgC(9|KOL$!-+9^= zdpeLTNlus31C=Jilg;|~oQ%23Uhv{2ef=dHYN3#0y{FBAXfqeDrLY2pKF zqNf~rZvsE%g{5y(1~WC0naEF5Hdw1lcy}aAQxcXkgeW%mJVHwbX$D3C4ce*2UE%jw zcPS|xLzYUDy+g70*jOVV7O8tmjWe%DX<8=BO+0Ise!dBEmRhUhGK1>7LI>^lx{Hi9 zPZi+{tL(G9hkQdPhxa*+Ps$mE3)3G-W9lRI3%?d0TZH-9NIQ zCWYBlN<91MNuz|BwSGj06=BNvF3ZEp67Ck7S*xnTh&D)R^mxgoun%h+)iu5Rh0fYs z;`)n$POS!^{?#vDTA}428uDBj^*B^mo^S&DUy{(d?UTIyR@s`V5`+b4V8PYjd&20X!Qn<VB;bIA;qB;x3~itIn-|D}4m=q@<}4xD>1v zhZf65vuZK8RASJ30=HMk{>{>>p5zP2^Z{hrpFk3*TUOt)HBXAzJ?}t#z$m+G@r#m> zw@)MYuz~91qo$uNumJ!?m=&ukJZOu$H>HJpLFw!70&k-7ENSC|CdJocMUGqDalnhlV3-NnM-&d^1m)SH>v-)nJ z6Z6aS9gVPScSUhQA9j$AE~6rgG51}G;_BEgZ!?5yvz@6j=l_Uyh)7BLPE3!*X_?@V z9*myMC>a~!)KLE=!j26kIeK5(7yY}=3x2gNTHY!2nW|a=>VIIDC01Clmmtjjvi;qW z{A0jvV57rXmo#~npoL(E$sd6p0a2lS@SzyG+G8nBKfY{XMlPa3qfnCI$u^Oyy+(`z zHH?)Pz)x^+)XCp}y?)srgt3L{nqLN8s2@TgalDBA)L6E*Bwb0o#0T}L#3T(%a#u=u zmt|PVFe`>8@U((l-1Z`6u-qw9ScGPJkh$%fv~zZnSV`Aqo*IP`2K@(#6~RD_XrY@Q zhw7y^I(Rr?{fAI1vq&z@CAnV7;-f=+GV=)LRw%|-Xg7{l*OwsN!P7~jg}%eY2!dvk z1?{ceukWwgGQUNHRH$H_{#s zQ0&_eZ zDp<%RCD=eIg_4`%f`S35%=t8!Z%bg7D>FVMK%bJAP=W8`f|9k$Wc8#w#!<}fbQ&Z2m5 zXakg!sZ8UV+AiU!&>}=jDeZNZ>j9)Af${cQdS8VK{hf(sE54~N*MfNl>1zq4Uauzt z10QCdyus;llOVr6;bUZSKFHSWKf_=>Zq|lkk-cW)JUHvRWUHb3$fKk`Vh2NN0U&E8Bxuy|?bzHx|ez5s{GMPdZL6qA;>SVJeam(u}Z%1u1=luSp!GZjB z^g~E~ho0F0?K^p9jUd(uR|%g5u{g1Ns%b{ig{t({Vl(_Th{tW?#xo8CG20R%tU8dW zBPHbOpbVJzaRtKBH6fGXAbC@#LG`8AG_&UrU~{306GJR^1nYs7|*}BdbgF`4Oo_ zJ=Iir4F`joiuheSPZf>`4^}zef5=>WErq3S3g!_5ChS+CTr@qaFItVW zo2s>Q6roc%i(Ztx$?|jJK)tRIh_@v{YZ}+v61eB~$$k^Ph_)Oq(=Yzy>4PIHA=hMTeB}Q>=J)P?+ zL@{jg1&m<4#NZ9q`9qV4bNXVVbNxLYDF_7|#e%+VWRw9Y=Lyf3XrtPRmq{rJYF>(E z4DN!;hSK2<^m=g@XK;OOF&ZKb=i8O)N-XOB!+hS5|GNOBKi#%*bGZ<9c6|G2m~Y>j zcEj~DJrYeUTJY#V<4If0+8CoKH&6MGC@Oh&g^KJXC!>GZ0nZLVLFxX8Ev406CgM)u zF~P}b33xX_nKFxT4;YkJ6UoZ4WrEB>`K{vt{OCKaVD2vQtcoVyufuZ4xdF`zs}HQq zSBc3hPoF)k4DRQj$1h~Ppc;=r;v};Qz|bE%JMc0lkAZdw_Jo@SDo@}DyuY{N+8^71 zNX%I+G@-8M;u0T$F5X6ZpA}Gp3KEsu*|i=o&w%o~N}xGLYvOl|;-ZA?5X3CzitbK` zL*+mdLwQ6>Czm+M!x~>pf~8>B0eGXmZf=Q_euV0)hN5VU<~}VAPD6|A#98fjzXi&! zRoC2F;9M3T?qr6Noe-_yEv32;vtf97A=W~vKT=%_j%{D~ z)V20E&nd<%Dc6dpUH+)iC4l0SUTKIbKQWdA72BL{a7%#J zo~%k%c0b3w)F`^|K?&*e=&qqmJh+Ep!#XX+nGV@&$wq<<%?BO+Yl~89$*<4#er zG~&62v%oNEmweTxYCZX>Bl+bT{Vh80<4czy+Af_Ai~cCiuMaW8GN6`IWEag4y(i7p zW$glA>wgITGPXI2SY}c2LEss!%gY$Y@ogR#2LJ6QV4Gz)zNMBVbI}`kOFJegwEtm?nxJ2Qn_Z z1l!Br6gLtZy^UzU6<{>QN8=JDIBe`>m;I%D5i48=0oB-u=XNuIYvcC;Jimfr1_y34 zg@6{Vu&g;W>aPIqPeLEw3ple^*z~fXd^X(aWu8v*5I7a6@AH>oCOj$!3=w0@M_Hx) z#7|kjMI5xeENgi2urKnk#fk~2R5`C7R zs7Z&Z{RMAH0aP)4wPtEC{*EF4Hw4otzgOcMTYzGM`cn?XLE4XYk^Q5%=DGFV=3Js` z`-Gl59^Oa&7drzqdJn>6zEp0aowh3^8woGtr7#yY&( zNz&zi$OeCq)BMo^Y!p;{yif2@xDqg2gYW7~?e0pE{CD#Ic^44=Aqdc$z@7W7V3P^T zRmKwM|)SvSIYl-gqj}4BnUBzZwX=8g z!CMCe|EN~793X&f0QfM2Zwx5xKO*1;g6vPtD6z38$UAthOcDLIUMsx*Z=-qX2)$26 z@3G)jalyzeWPsJqp$8i8XEs`f0R=3J&Z9x*KMJUChJfAY0Av6TgO>}zzfx?#B1XCb zF6`TKL=Z)6u!F%r)2S|oCkAy>6PFels#HosuY-@qWewlAtS&i!3Gx2Wxu>95itpX> z?w`^BvK9Y#=ueCR28OZ0G%pE+k^;1(z3TnHMF+GuM+%sSi{ERnte?BHbzZl*>Wgi{n) zN9hRGw$Bh~-hao5M+JA`B>?757r)U~3VQX9N3#b~Uerv;&6U z*6L2#sNl?wPfs*s1kSWQHhi)Hcduv~!|WbN!BO!?{Juf`;Df`2r@aJP5?`syzV$uB z$+J3>n1<1cEkYVG`HzJCjmg14l##NR! z-o}(!8;BHP4uu+mv4jE8qN4df48%hkY{ig@CMZ4V7c7g_tE&HYniB%-xCf*uq7L{^ zNNWGz>FO`V)|?;JIHMbl+&}=c`0@YpEc{vJ7vDrMAt&oQ%0N#>r8?oU2Zj?~-CGl6TeKDdP~Ljtr;aY3_AkHCSqaMUNW3Q3pH54opEr2fXj_KN~Uwf6&MS zveccKZu5`ts7Dp^9@`UTd`ZZHfKX&y+5PBc^H^msF~L_*W$!tZ-oFCugNG3eRnlKf z7u}rzXOJUvyKddqquyZ^#@Gp9KZCcPC>@~hOjMkV$%Qn0Pos|n(R}_IKP^CO!9UP? z1Zo15=(+$*{B`$VsPJB55twX9_RYz=&N~jCq&ucr%w3js#ldVnj5>=({MC=vL8c~a z?(LEf%S)kl<;_O}6&K&rxw1?F(4buIxB1quCFykl=`V1%0U-t5Iff29iu*{h)IcSY zEIn7yyf?)D;88nXWUnE)2jRoG=4WzS&LJR4O2y2v>Ae5TWy5D*J2u zi&3>(+1$~D-x75d8eJ{pMy)jRF}MCOf&Scl*9nLS*aayj;f)i)rGHTKN`ygCdq0Th zd&=9d-i{)mX88{F&KQ<9w$Qw$W)}kKtxili1`HtW(gKzWP`%)@2EuNEQtqpWECQ;X z+tN@Hatn?`x+1%#mab)f1xN-3gV~mE&e)SQgM)6aV^BHfmIoE+PH(>1sj@TIZFmeG9B>m<<^B~YB?FJ*sY!A99Z^0ZrS%PchEOq|15@vLY)OQQNfNu zgD(X<)OU&##a=2fY=L#W*tu(Exi-Q)W9EXM5~iwxzE1 zFv<=dGgYc-DVU%GFkSG_=Audc@0fB+K(nu6vz~!81EaX9_}3-82q>0g%(oxGQmWd+ z*}bMnCw%@@4IV!~{cE)Uwm&R>?MZsJkD1!8j(RTA?OJ){x#pasR$TeC^c^HDp?K~N zceyR&RN*>LD$%SPKuAQT33eL=V8*-X#jipojZqcy;|rQ(7R`}_u}W+Q!S3wBjqA$c zeFDd6i}uViOd0~U;}Id>JKyw=lwe?Bl@T%%lCF-bYI|cO2%G!UCIAsPM+vas)Fm zvHNNqdE4+`JV};2epm;L4TkQ-1Eu&ocGr@U?@zVEPY~60K#hUfPY16;mG+5@pO_Fw z;=%R|-BGlhZ?msfsf~khG%a|0Q%tOHZqD17y9xoik|<2Bz|xV(P zre|{7_pucIXPoe~zJRwPLg8ykU+}WX#7<0=NEtwxtiMslg4`ZZZi8%Urwbfx?^w@( z2I#p`zc*YCcz6|nLGtk6pj~cDO6aG`+>1udJ)mwVpg<|seoV>5-*}ghy>fQ&8WA`T ztvIsbN#@F?I9EPenD(Ud3dcQ{#1P`a<#BWgi5@+lBYQF~jVpGX3=(BjUl zwcj&kIRhSb2>UQMMFxlif>^r6lbRJkiTvzY+O{l_BQ25VPNjdFka70U@ps{Qi>zoP z!0*;rz2jrQgY%sUlCSZ2uP8>OSEJ!#1C-zabW(kq zN9^8lzsWNaGnDT*ZSMIy42IT#Dy6kz{f;a#QsxoL9TShhrlM2(`z(=N^I_UB+8PXV zsnPY8RyQ1iN(#Bq;}u0<3}>+J6t?CUg^lLjdhfRly(<}_od4+onK{+i#RxjrW3F!RIqT8zw~M-N=Dm7f{Itjsrh>>v86OAmH)5)qKLAbo5Qx z3};f$u7#XSy*apd{H~M?)ozgRBNHNU&xeFPp?q5R;~{g)iK@0mZV-MlMqca1klmwR zs6eIT_d5rO3QZU@2}`vJY;RWy?hdi|LwAs&3<5pY)K3Eb&*4GCh&NMgq%TWW@?EU^ zZ0}xxg_q}DZs6IcgkFUNVWGRQ>)rgujt+L7)zO_xJn*O24qmYVhPCA`*1F#@4;e|d zEJzKfTmS*%LacySpQ(8KGfcA&LZJK_R9KK!q+N-O7Q{<$wp8jbg)rM#JE5t^5d_hg z7{v0e)AKJY${h7*Eh9ZWE%y~5rK@1m|%w zg<=P`8bcEqE85{;Kbp|=oXf?#i)!|NczW|=B?PQW)sJDpv&xtWUB;t1w*|%y-eX9h z>qz&deT=5$ECY5de#6%TdCCR6uuY6esL#{^UmzsN{Og_Rte)|^etLCsM}mxCtkr(| z(6}nF=;*SOF0Ir@2v03C*Kis!|F8cGAQx|`X!Xs@(@%kj`&ENXHMX6{NO> z(PyGUW5H5*^N-}G2H{CX6I$<#eyVvEk2Oe5C}fdk@?VbloPFq^penr=;-xwlh2-fG z^Kp-&ne^%ENF8uwl06hq&IIR5dbvCKLX@l6D2%!25nZhU?JMz#mLf{K9>q5w6V)OU zb*?-d$@20#OkML#ml+RO zR5P#RQgSaMr%$XkhLyu_knU)kyUkAEw^W=IJ(^Oznk~sY)p=sQFA$s@FJaj3jp$J4jr$fe~ z^nVvB0VD|jF#p(AS>&x>NepHY-&G`2A2C*{@U>r+J0LXXb=Qqlo^pIMARARMYkN1o z7zdN6n_V<>nF}De)(#^EvC3DI-3iO2rrq$(bJC))^rm`5Qe#h}gr2-Fkmsvrd_yx- zT#dh}V4?`WUUs zt2(I9;Xl2ete3ZWjje%Vx1w$#!rWnAUFKO0Kg-u|$c$q#Y$UZ(6u`#-~61(x~!z>(|i+!)-90ayEsMjBi}S%LPbwxm`I5S1!DY zq0||F@}ks7n#KanYyo%SB#$wtlP!QW9rVdgTk?I5wo6$oQ7zxsj{YaDJJgq31 zf>8CJS#7ru%Bd<)WaEdIRWH+Tc`%8cPFTc{Gd-a_w?&=DvcGV89^13PK%kLZ_Dl?a zQM8WE0|2G&=U)zu?1N_Fh@AnerTK3dWzY=|j0pY6iT{ktSwoqK_@n`-@zo~!1!;cj z0U{oOH!mCzdWGz}5hW8oAy3vQJPB^#ny-q_i^7A)9RxME%ifvUPB`weKJua5M19-urT*83LOp_vVhkVIxGVuyhG zLi+-Sf(ziSazf-}rY!a7(j=;EGD|WXRLvq>M^BDO$>uI`*X6im{4v+!Ra9Q*w)SQ` z1e~D4wMCNk+nF=rQP*Yj*=07-;J-&8zl0GZm!F@KT+@)rQH3bKds_#Wx8Xs8yH04ND{j50kJ zOTWw;quAn$eM;wF^7wpHp6_Cg;gl_^9$U;~Y-bOGX2>`gs@N&i*%jyMq+eKx_MT_M zF^qLnjFx}-V5ESN;#GPl59gYT-$OVu?^MPch|etebXx?%BSPsM;ctWWntf}D2B=Y= zdZH@tkya~I;gLinEgr0Irq4G-= zzCH& ziyWo*DvQZ<`Akr511!Y2B`NoW1n#P(3U?unXG8OqQPUHVqC7DKlig=rAqSRJL9u zz4OyzII@TFbwQxq{kV{~Yf%qrSlWk*QPUby5sgwR8Y8jUde6A%$+2&`W#Zt%gb7jd zU1UCShO4()d;pHobcZ-kZ(nrw@NV-I$K-q{gYh>hvR`p$Vpw9~7;+gurD*F~C6ZJ>U(Isam-X6)Dv%?irK zb0nobZ7+&9)h4A)%SjXADO-7VN!x^0-WD{Dz$BpBXR@D*!ejF(q)FX2zb_g>^CDidMAbq&Lr`BQt&gE- zWHq27bJOv*uxvu9KQxHx7Fp0v<4t1acV@*D0?2CM-5@-=2i4#jS9rhS&>c59hmc(_ zu?dR=GYb_YxB*5?&CQmKyst9##h3}S_uQ?ZuCNpXdg<|1diQcMP@@OK6O#MfRuhA( z)agmgKqYqtyTeAd3Ma8C$;iHrzOvAlOr7m`{N+v3{8D?WYV^I?iTCv>=AwvtZM3!a zue_ZZY`Ju7o7>I(j_@V;bNI(iqIA%1E_{2w21yxVO3|Onj2x@pc|QU8>*dWe9K9Jy zaOwibrkQ`PmV+Mjn&``3@_wBz?)Hy)9GJs;qW0u~p6 zULNbYAcR|h5DsCaf1?+snaEhRYX9bfYZaL~r^SBV*HegKy7Q;4wg;4C-vk^Y$j^0) zCDF`K9G_CF1+pv4oGs~T+a?x2Fg0Dsx=Xb9rtZGun=w4kSHtATu4kEcpNH>WXt1O@ zEKD{iR)6Pkv$tI*@M^vH@WXm}i_4kEKw_h@Um ztNHIsFl_kMJ5;tbLl?GK-h?vvq9;&Zo0-#K+MTAB#zBbNGh;YOahp$bIb81Ptu{!b z-sp1rR`k##^H&JO00aX+V3zlm=(MUacT4W^w?uXMX)fQ#bP^g9ATRWvXU@*x z6=z9&{p{|ZV)HN1JCP4`H-KqzviZZ6XFQW;!v?os4xAUMOQ=M>VV8=4-&xmB_HN?b ziR8`I$}tNTp1jLN!4KQDXqoD99Z0Tzh?2b+|DedCaH>0LJ5v%l%HpS%Hm2X_T2fZS zE-g$&&}s&YSLS*5$WoDgma6;B7L)8|*Zc4T6|B4RHf2&-bI9O1Vpqkj6NJceAddwV zaf=ZWi6o2TyQSm1c+|RB#ol?70uXp2#1;e1~pNmbudGX=R z?=Npi3DG8);Xh|@ZMYP3p)G3^7HkopvK*>Z(domo1i3Pp23N9wU`$^63>O}zR2EjRbn9j>3d4mc2`VKemxy!YVW?xes;Be9t;ld%%`bOs z=rg6x&rw70;cRZP2&R_h0044mcfq4p>Mg!z9=o2BrO)N`g&e@BL;SNbITP^ z?zh!73(iXVLTmucC~($0Bgqlj>mXXjXg zpTd4s`h%tg=)`T=`!QE5B8ruCHRn(1;VfY*_<6+1<#?TZ^g6aLOzG{qki;AC79))S z%-fd$hPF~&yBE{V#-x!(p>0r`;DggDG&c4m-Fg&AKh<}h4Ii(KR`wc74TnDtQ$trS zh1ANizex0~jB^X;ePsHnJKUlvXO9Vq2CUs^n0WAXOOd(mZ`H zlk6!l<`a5TO=xv_Mq+J}c}px?L@)b$q#ODZ30`sa8w$EWS&^plZvx{Hhmc5nf^W zL&HYqWv&m0Y9Y4tV4_o8C#lW6#5;K7Xh1=x5Z3B;%YCb10STDzP)dOX`B!46fFl3 zO0bPIno2mnCklHqZ6Oqubp5btfuVyAZ+>S)&BWVU^RBQZNkqy_Ly~`BC8l!#ASV*0 z)3}-0pPypU#7y!hUzF-$hOY#Yz&n_(so~cS=k0x_7cOV$w7r zs`ICNO=%9LUl818YuSEDNq@|WdO56F)kK@>ghT~ zC#N?Ki3c%hae8%6SBMfES^AKfEL(1N=(Dk+c9q7eVIpBH$I6a&DtH#vt~mJoVL%Z% znV0m%B0xGX=)=DQGm|t$ySsG1=HldhS!5eWZ}jqSucL1zQYGl&Q%pLM$7|{cN)U*; zvc+)}+2Nv1yZ9Hmv^x#1e|;{llJ+`5hGW1{yXfSt)Hew(Qr z+Y5_6dT}Ii7zwN@m>&tg7?WO&bART1V+mHZkfy2pZf$t`oA_d+htz>-CX@7QQkCJi z4^3&ABMKLvZigjdMw49bPQ939?H2P>Q#;RhjVwnMquZD=Nm#1wI4*VyCQ+{L=f{xD zFn`DrVRibJP-ElV@DuN`ncH}k+d=HXra+Tx5SdNu4BCP7@;NoYYkQc5;FOSjz} z{mj~;zx0B?xv^h?-NW_&B96ZxnoX!jj>X)??BBZW<8-d_53)GFq9UWv7NUa?I={MvPoDkD`d71Z4+MG{je-mFmr=+D#U(O zN^41-qIcgsl2Yy$+pnhkx~VPOgfZ_?J2eyoqSrR0gpe~Yhw@*IiQ+EvhQQPH8S_T) z*UKjN((y0IK)a$Q9}*c=Kq8|P_1j&4ii~nt0t9w~*)gixo=2k&)%NY#z=&xRjPsPi z??9S1rX9Eorjn1vhO_o=T|bap8cy-&+7kR( z1a)o-W^p$NaXeoZY}3Ke#4js_k!<^NP=?4G+wETs-KSO^@TXw#%$pF$bupj!L$Pl; zF;B-NQMhe<9NO^}|2~0)7|2;IslUatw~m6wn4KE8I-U<-)KC>d{T7j&B_v8aV@!-~ z`miYgwUMFI&o6^o@Kj+Au)*9dJquJUu9zBINO2<10f3Qylvq{+=yRM0*a1bG;T@}~ z`lp7=4$i1HTm(kR<&|7p3kdsZD5k;G+XYqAS)cvOz?4ZoU!3D>ReCxk?=gM-PbI|q zKPn;c8LmreSV&7Mt{Npj%=GKSp4JZSfn3QH;Es9>MiF1LNJ`t2PIV5}R1bss8s91r z^G10+qtE-46(E%0BL_ErcMMwZ_a{!po&}DcR@v025W8OFP<$i1EccfLNK(q5mKW-} zEo@y}@$RGNgXQ`Quaa;~LZm~qCZz0R#HjsdGwT4`ajrxo{>h~&K#WGV{j^mj4M|w! zq@JaiP5b>g0%U&|c7p%oaZEE=VpmGfb^xZvq*P0}dfKK`#RHHy9jy-mCYtf_tyC)= zc%u)`nMEN;YvQ!g5yP5&bkgdRL;4&2g1nPx<*@6WODgMsL(b>k3DoFRg04kUC zW=Qn&6ouA!AkNP{0$-xyCH6Xw_fs}Z@pPabq>%OS7r}71n*FJ1JASH zlXa$SKSzOmPz)qkd0sRP>=xN!ji!f}va9B?nHcFE2-gS?m03>pv$ zMZN5ZyJf5EZ^n(yKpSAE-DdxL=Yr-Og7nzmmZ24)Qt-c<#}&f44=#}QRpyFtfu3Up zc`Pt>%V8T(EvYsJZ~s?JGZ@q-xgvfr2bpO7n(dB%_p&Hk1n5RD|90Q1Uj@!`l6d)% zlH$6$vD9KGML?lZf%`vcI{+w~xPHrv$@g7(0g>E+oZ!H;P1co9gv&--@mpCR*9qU9WElXlHLWT5VIIaa?7!n3yuI=0AM>1 zv5{-VCFOR-cg(i|UtIYuli>HF02ws2C|+JbvG{)$8hKCpxAh+IS#v!A{xa7fdogny zYSw!@DRCzeYzjR*%rYGaY;rF+g`d|&^dI1a{7)sN0;HtG_o8&l2iOUiasLlt-CwddAoha%c4H)oTY&=C zPFnj9g86qJYmwdzV2x{FOfZd!?)&C{%8@!H3asQFJsb%IUJ%IapyO9Y6zt54E3L|;JV<2#- z1d_U)1H#5E@CX5?%sGs^ew^}CKy%PX53xM|qTRXwC6pW;oxC+}L#~&{^c9?{MrD} z!&SDCDhp)M^byofyDHBOhMb^L*^Ni|;m-QQ*gu?f2`jwJ^navgYY| zXw8Wz0v-pB>K!$-K6IfCe+>47hT3T-P00-)Z+7}yAo7J3PR3fqwM{H_eColew|X{Y zeEc6n$EaXknq-gI@k&!ifuBG>6TwYHI|86D@ogzPc&xHiC{y9kZB_I}!aPjL!N z6p6`Hc%^zpjDH7JBk(~&B7bbwmVlnh<(GtU@wb2T)slF0q>NfIvG1mVzljM3Xs$*M zzo~m>UgG@6zmZ^<`%eX<7P_9OI8M9*S&{2L2oztWfR(6x2yEwGJJ+(1GO2IgI*F4HlhQ152C)DJpQ9>}cn5AxPHwI4S_sPUhL-*``loh z>;v-^bhRTJ)NCc$5@sF(-P3K8X z!X=xn!;e$fluUYyuSt{m?c_6@ zcRkt6jzQrR(IDqVJQ#v7rPN2mO09q%C4--10WNZZeNYb9G4@C zL9tczd#yoQYQR(s`QHI*N>7AFd!`!fJ*>I@O^@v!q}l;SqJB17^`M7p1v2a}LhH43 zvchde(=Zn~?5{ZjiPYaokx~v?Q*~?0m}17HvoA$J&BL_l`F8=gPgq(zm_84r*DwR( zVk%x1D7S0Gt%4{*AFF8#1R<9*d0qixK%^jB8}ivp1xBeo5qs^zI%^NerKB&pwe~&) zqbWUVPdI@znhBCdzj#%xpdH)euSJ(ksF8SGDGy2&AQ#3;dJvX2{al>~#jB%T;@Ga@ zgjjqCZ{P|ky$Z3!@xv;}gpUAsJ5GR#`1#EzxNg>S-JPevi{+}{Dl&!JKGep<0Vlr?stuee8iy zWcBT~0EzZ0Y4elx*?M+SAk#iq5@dIx0Ohi0pm6iu(IXlVSUrcUkswikei&eb<$18YBj>q!N1TpaJ(>yZ#(LFhX{y6!Q| z0QtPNfGTb5D?jEVK*FjNO=pDkt7Yg`pX=Ptu5SWpRxl)?jm|?#J_9%pb?0JBKO{gr zu37JT1@Pvos<|f77<=EeM8A1(RkiK2 zF&ha=QmMf2K~SS1D)nbcU;syh6^b}kIK1c;#*F4dTrC5DmKmUKo$LxZoi%_@I~}h& zQui*MA+Vl2#}U5NQSeLIJc+lk08nwj?4K<0_z@x#)SiVO4GZcTds;&7*Y;u; z@Gf6Qom~57Q$IC;H1QWvNV|S2>c*n9t~RH2RqAypN8H7UZvWI0^snb z9JmW|Pvg8?vT@0)fjTHu>!CSxl30zd&0pntlS^%W^}XECtN5yqcxQ*c>dJOc!wVq6 z)A8$05b=n?-rPNd-^Rv{gGmDrLbk^Aux?LT;34 z>KPAns2V~v&yl|dk&Pl-0G;#$RNB#2@Yi>Ni*ScaktjNY@37Mlxj!7?2#(|3d7#^m z2t7|mTD?fJ2eNS!oQawuA&aYKg6Rj?E!}CjFOa%3xK@#F{(@AL><_f+(kGrqFx2_7 z5-5gKo@O1V^**Iy1*h68)iPPXhdb11pI~+z%&3pnQQ#3uE7e{O_?l|*)K;LkwidK` zx1WBV7hHix0_s+aOQ=^4Yd~`C;+@Bk-R^%g$##jklwIux_r_$uW`wxhi`LfSk2qSR zFjt89Q%`JiXy1m06LdB@s#kV1@saR|;ENv-w}8hRDEEE;DE9{i@nIhjXZIL@topgN zd3+RayF2C_i#6sQB(j61f;do7t9L0gsGVH=Yl+OngWfzwNYz`z_UGT}d0HoF>#)fR zv7|!twXq1N^D}BQH;mPie19gnjvhin?CT=rFaFzKc+>=#TebiQ_><83gB4I< z!N7#iUG-p(X<)5>r(`8p2fM^13;)1Ieg#bYG=lFlyt}tmIzN*|X->Idk#-}gcEsLz znpmxj-6h&NWUIL+0%E-(v_-jB;|g&JB#ZMaT*y!q>kgS@0R6sF-QJ`<%|7BdevF~P zF|4w$5k3z~0U-z|B6W8wNX(12W1Y9%BquGR@0g?wI6&gp1c68~-=`kyJ0s+b#PAoZ)( zT1uPTdRa;qGB&Cg3GSWa{~R514-K&Rw$`UL82FaMP;tEaqF930ON77rwTh(2AuAIA zfHO8AQfJ%UiwIWSBU1huka_1=${)yxAkp0?7<1H0PtCjK_6eb#L786q!p&<(9fD0m z$ib?3=3IMpefzX@)y+kcp&bi`BR!P1L&FyasPC);HjUK#bJ?wN4@LKlr14u?uW*os z(h%>whw6abr8{w$FQmR1Gx;Je(YG(6S>%|B$j#n;9G-rJE?NU;^IXJy zU)nFH=9vAZli}Iav*f2w0^2F|`jkPZ?WLSEHp`DD)&2b4(eII~AP4}j|EL~z&IgDj zv=kGRW#HEr`+8+7{bY*dyxHuA3FqhVS|WSY(%;3AsCEpGPemu|(?6F@gS?P|8DLuI zIb$h+%ys%(ZDj%te9(o=6?|i{FbS1=q16uF+?9h)`g&&HWFD}(NnNa{d!#`Zxi}W+ zp)Amni3^t)2!P9!zkJQGX{RJtF>!(3T0JUkWm8fZfK-v*ruDTw{|x`=y`IxwdH19* zvS1&3=T7u~3(bo=n>n0_>Kz68h13w=_S;}7!yZJP*kHBUdq>DCh#yCGj)O*K@&&zE zRh{6#V84Oqx#ZxFxM-#w@Q#gCRa?CPy5#WF$2Q5Co4ladwTr|~F=Gf`@YSP5T~kJJ zX&>S@l+`G*G1~L~s^`T3-1=4?)GhWmp3KC8CIb5hFz_?*jF~)|6dV3}B-A24DU>;m znXn=t7smBXtcT@=%7c2fw4|h>=@s$)`m-&BE8RYr6m6$WW0>(3x7xoNm-8abhM{5*yq{K#bOBt?W-`s$v3}O(c zN4vjm#!-d)3x@LekYDu3NV{)Z*T;jBi#&3)F--PJf|}gkSL(j`sr>-zdoxI4+tz6W zw_obh|CGD}5RP03%n)gfvxBnw;jv$8)g%Z@*F63ihW{DS3{;xeAOquOWXywcOzlU| z+{gtwvxK9|EAwdUlVDrSM9;Hs41T+`pq@~!sJ)aV*?<;}oe=HYN}SmM6+K<$FioyB zTJ3TN{N=U#kA{-9_4%G|=8opGR`~PE)lnbj6t|T%Ug_jCc@IS0x420@$;Iz}(BsBx z6OwSMJzKdNxo@EYcMbWM;UMf>*rS(A(v;%{!Sb>9=!THBI!u(}AOK}!P$-$gt*}WUEkcV>FmDAvc&rTip0RYvOyAY}gwPfbIi(-Xq zzUu%?610ulea~krAm|tIM=A$5wiM74X8r=MOIk1!rMM1mgm5U`W4%S8*$<1z`@UJ< z!3&x3zn9)<{CSH+ftJrS&`5_nyOr!*3_`XP=oVmR=he%ehEioyZz`3oGQ2(Ly)Atu zo5eDa*fR(g6cyq@i*TzaG0?q!Fuxlg!mge&Sp3yemnC&+-XqK-lY<{$!_`WTIO(-Y z*0Da=YbHg)A;l=W;eEyZUVJu8A9$$^>ZMaBaje*7c}ylrp#HMb1UmML$11XNAUI8n zXyGv?^0`?R)~Th0oBT~rhnM%LP78@=uOe@@A^mU|1ue(J=kk<1Oa^INM=~=NT5Wl1 zBYXqW7cH~RE!RBnf{bwmRF3NpX~T6uaMOV1)BgpzVIvb+p6t)QSLYl^3z>-cN>Qer&4v;Y1c3LjbLP(|zsAd~z+`K} zsH#uwcDKZSQiXTnOBMb1>Su^S|NiLM?H7Q@FDi4_BO8LXmkc7up##?{lVjJ^|HUAD zs&!kS#vlc>mZ}=s=NeaeKHbWA^Y>W2sS24Q>ommQzhwM?q^n}1K&PUfbF`dgCzpi_ zn?HR4+X^6{hXEb9ZSz#%sRDCyBdGV}793nD_|(@z;to=k1dR<3-8%PTz^o=Tc-zrB z?AQ~E2T+3V{<6T`^||paOWN(5ualnmX)QT35nQX!)u625vn@%$cU*JM`uHN;0G=fts86m z6r!MB8ITuvUftnFp7B-qC8oWZ?{6q71uH4E946$dI85cr=^DZ=-u7*n_}( zGPjX2+bxkM_F41^C}f0J30gMc3G)RqySh$8jqpKcDd<^HAB$-rzWj8D^;K>@?w43s~?m2H( zyZ-k3q_Tox`9P|Sa2oJR4uJC?S1Pt~l74;l<`d<%+0pW$7%28h>!W`N*I+gfD)XM9 z3R3{qB?%5%unp~0`~Imc|JW7H2fWA(teOs&-7*xU`2u5{8#x*mbN4MfqNs*eF-~19 z3j^Rr6*6}jMOO0?dzgIVw&UdM@Wx#9IJ(?tQLHtiZ#i_q`vxI|Pg0hx+fIeHF=x9- z2tX9yU9`vNy~mNMBEHAyCzRp#u*I7s@PHl?#Uo>De9{7TLE?5}r9drtb6es%{FhN@ zv{mtCCGll*^hr0*Ut*lglCrtNu!i;7jDFCDwYM89PC|?)G?a=kba@|qrd9RUYRDE0 zqxM#LOE2eps{iy0b_%l^JIii@_o&hTKyqJV*fw&G3@2_*>wAS$f=Za)7)#}PKI`=$ zhu|!k&yhK07(%o%7110ogUa0`V;a|raddf#(5oV6jx=BA9RCv#+;tp;h8@9qk zGw^T@1S5_X{MIAou>=qx$-?02T&i06wR8nT+)_yp; zM>O4vQ?gka|I=|(_m``53iOv}?9+@uI*qD#H1@&Ico|9SEDk2}6h(vIQAP9Jl5^Ft338bQ7bt zr5*PqGB<%A|abJSV)K|k@F#K`Ez2x}^ z6D!Q3*nkCA2di7}?q-R6E@$SUY-5~aFsJg-|KuX)+}UT+&L%56X}%LY9{YWlG)wU? z^6>iSw|#4i`_ZA=;!=6>jdj7C^?e#nx7e+k;3$Y@$+SaXPkJKm%8k=KYu*Du6UwW- z(z_=&<9C?5-i9!)tl0D}WPN=<&{(qG6JP4J5}CN}e&WL+uTFo*YqrAVJw_o>;u*mG zgX#gWN%qC{2RBS|!5y>Vyu?x zCZ5(U68KrLIjxi!vFGD21jZYW5wC22hu;ocxo9B|4|viAUxwd+uU1nFKZE7B@n7cQH4#8MTy`dJtoD{E zoy(WtiXx2*ue{mYO#I6AsN@1qxth6m8*N8OGs(?12@I^!0xniw4Q-kq_^{9_aYDx zh}U)5j3dug`AZWi?&M|eQb)av^-x7rFyI^!6HC2jmYuDk0(g`y(hZN-99)8G(b0o~ zp6_sBE5M{%IPO{Gbl<#nTi=#Kb+s7(U~y> z(h+{KPFtb~wgC|a{i9=Gzm@OVb5plQZJB!B2DqU0aLRwK2`hwoqtuw?qZEDQ59$L3 zTMrZ`)n3>bh~J(PG|bl4nYW*9^4Ux)G|8?t$H>&4zV^w!oE>T|^nAC_6&%Y27^4nz zO{hwsR@fcKM3A0&iJMB^PRRx)D$5)(G2%hL?%l^jatY65lTDjHl~C5bGu7&lc#aM_&g&lmb_mIBVId z8plX#J~Kn~>0Fi642|!HcEfXONPOh4K?yVQ+qNEj6pRm|tC*tV@I@n875PpC-@IKI z8@1BfXNI1jkSvx_Tcp9RCXq2Ipy@w;;$H{ouiuL$C4nhWPRe{d_+*mcYtP0PL*f6w zeo2zU6l06=c5WI0GrkL9(AR2^{|<5>&i(Q01>RXg4Q+qp5am0uJ!jOx*D4k>{a(<& zmi3?CwHXlM(t_CG9^y*5Ch}a}gh@sD0LpiknS}{hTcHwJ#(7&xiAe zX$3TcBW5^XbqZ$fI5{PFqz{;UD)aIiY(zgpH6fUkpJSG4pm zVE_Bg|ML-l?}GDqqy@!i-VvohE0g#Czg5g}-eZ^KX}u0T!HZDQ|JSD-6nyf}OO`eQ zCToGWPJz`6ey{e8|M7B|1`oip-x6Q!r~_LyN(=nu_=R@=Yk8!=^031iqEg~PaciX* zYXB}^`}lPzpMNjsKfiuZfDkC=XhMiv06RW#3?!>ofK(R%AXKRBR85&anC4Tdb^7uV z+?zHm;B4%19h^XSXzj(%U%w1?sJsK%a)BCuJ*af zzia!yj*b8u9`L`3{0s=h%XwOSd%*E0y+2EoVno(m4&*OJvVcKB(aYf5TXd7|fM+u& z7Mlitv}pe85zmrzDb9iJix;qj zRxa=d>W_s8h{C@OuA7qybZ`LPR?#>zONU}RawcA%pF1~{>YvmD|A;>5V)5tNB|1)3 zhv1So=J{11mE#xl+TlG%a76&v6zb+Zy#k%#99n$o*&jO`QpL27Xo`rz0j>|BcLIOR zzx=Dr{2gZ=AS;1}ffZ#3BZNwhj!(rpgm}O-C_xw~YRFR3dCda9fyc>HA^3eLmGE+% zAD8n;70182H~j|G23T^hI|BWQ@~U6k+I(WSpORTB`xxnCfF#8T8g0bxbt`E z@%zEf;(JT2f?G2M?l(Mkl#Ed=Vq?$-V1L;mVC(ZUCV`9&@@&)|qB#b=Ti?xI&V;(< zFcRjE;D0~6F%kd;F|Bm4AMcPkAMAo>cyQyt_G7>W_~!YS(A9V$H`Dlz)@q+o2|5|! zwZ|f4@{A0_TjWt_@E`ktb}zmzu!WsW=n<5*u0w|gzv*mB5;&3BV4vq`{nZEkE}Ez% zn<)xl=b4czRv*Fbj;3%w?*@QltL(3TIa!bwrkC(-{0xx1g{CwfS(&uopD_b`M!NyY zt#Q!5#-;twzYs2QMHma;27^beWU%)Mfke*)s*57;qyS$RI1yuy7(D*oZ8DjrL_gB6MlYA9JXtlO^ZhvlF3*>7fNtye{bpsVjT)LE3v;cO=|D?2Ze(|#El%N8u zi(s2%UId3n>feV)@)hGIaG6RcBx6YhA8-QRkz|FL&H|S%3K!|8XPovqz2JH?s$rGo z{)rFVR%3LvNms=WjH_p)3A2y*4=*p zk^cVa!6Gq#FXyY&Yg`72Z)Ux-!~oK71$0l*C5o{T>Neom*qQ0z810ob8l)BH4MpXMCMPs;v%Odq>DM^_JM__zA!)v1g+)pg9 z0zT=p4>bL%=Dxr(Ee$x{yeswKx9qvv`V8p#P^%sQb-H={ZK5jQ7Q{9Eio$;IX49{L z8fjNB1%&(l|2$AQ_?*lM@Gpw_RX4VI6N>jtF=^LRjE2RuN5$!R>Xymy_CTGJ3L2@_ zkKk2V0WU?~uq)p8D5`-LYl;?FqPX0egycA$@9x!AfK{5(3kd3<1-wF^i^SNB6t4^n zDJ*mZDQ4TO0F@Gj@>GNycLC{vql`J=y4Qed6ffk0cXt=)J-IH9_X^LG$6_;)lQ5~M zdMz168gcKsdO*VBLN3JTWXOI&ET&1rU)4YvGuQ3m^(Zcelqc);ou$=1>@~J>HPieS zGJ09S)QEJvjX!FI%q31_0_YiRFA&o^KwDDw3mE@mA&n&q_G4hI$pXSg%PsuYsi#}9 zIbsivGbijy%06B*bTIn_tZ%_p#FH;nz-BvyYBxVOkhT^xgGmdv-q+_V#Pm-D{gZzs zw^<~ati*Tj53$HTc(?nBAF?VzCS&?TdrHSU0Gyqn>(H#c1WccZ+(}aA4`uSK#y8=% zBhRA^6DRh!S09p|{kVLfq;-XMt}t*v`u?r{ia=H>dO73?i<-u@7_O<#6cb);-h(*=HG|=bY*0fyYz-D=@LSsU4HeJWt1kShH<~T$AKcW_s zQpdb@zMA!;wm)iBl$V~o$Ohf@2%`CYJtQUWzswe@btOKXEtWCKh5gTidrQHecm!yn zxN+B7lmj#QlWJaS7Ez<_S5xQe9TyRsi3CSg(&Mf!ZQrf(VQicR;+5z2y#l3# z1?7c8td~nWYa<;>b<@j5j-ld?cNdyUAw8`5)&>wR)-`>R!iWHxmbr=!2$O}X;O}ZtUh=Fr0B+?V|G>%t4*1ChSWw{Nt`I(km z@cJ#ggx|0){>z_FE`b?(1L1lTeay}Mvmfi^q= z8awp~hx8j4h<%;3WgKcP#&kd^_zC45zbg@R0U+Frj6AIsHpSz|hhP;y7ZH+D(TQn?r zeN1!Sv|0x~qZX%HN}ZL6#(slIcAq`(CN9F|?rki!TTEzd27jcd2|x%JH*c>N5jvt3 z!9`LSvE;}gQ7gaM%el%VSE%b&s5G6q+s-u5*V+?k1cwgwQt@NA1y&)T(W2NFEO z6C~j=s7J{h0#~S&Ynihf_JH_8KDQ9qi-sD~uJvlN6NF!s&G}3MJ83$Lf8=cU>YN6F zASVd7NPw06s|vOYJVSpQEs$uA=7TS5bGNnz6Pwwii(-3=fG0-Hjmd@c0q_9p82i$& z4u#kDVfT=?_qO-uf-#hGH{HhT#1|h%n;7{Fkcy9fiRDCv06h>}t-d)!Rn$YVS(wZ! z=vj<@T-1OGp=aSN%d;tt%{&98(uz)b0wD1f6 zj1=0a-rbR=2K@@MrzWhR-S__FV-jnAUQoxC;}iUWDKEWh#y;;IeWGvSBoH1l0 zvl)-w@B(IfuKl-Ug?hi0N(OK!&PTh0{D^(csNw-kGM@I56x8uZmZ_$8KS63Hz-91yu97o^ zB7x%~maOrBmt{QKkYOmSQfB`g`FxKT)n_T3dVi;97kuJ)uzk>V7sD4%(M65d0R-b_ z#AH(-u~Cs$9uajXS-i`2I0sf^OdM5muq6B-OdWHywEciE`f}A7HHHQ|Y9IcA%8N^V zE#C{>R{Diy7-^&KvCVGUNlh%MrGLO!cah5suZHw=cVeH*HotSO#|=(N^7)b7XXAmV+iZm3xoF6JUMZemInuv zothz-&)#~Z3*)&mp>3V!!cIu+`46F@-S0*?u~f3Z*jmuM68ij>Fs(3Kgz^zDaq!x_ z%Y3ihs=Ui)i~GlrtgKpl=9+yv)f!d^!4L&;)-+5Yd~9l8}r?um*VaB$d5)GTvSbK zJg;|yxn>Bnw@a6wh=fF|*u3dvvQj2fMEy-{z`gD`jsPDIu$D*%VU9 zURj0gm26ol{?}J}-}m>v|8tyzl_xHZ9`?{{rxLVkiP$YBV0#goVyDVqOk{kjZ znYQep;pvQ@5=&fkD{O~W!14BZFaN>GJQtvAv#6j_{V!^=ttVS9ed%nJYC`gjGt?wG zBR9Z}5D(Ql8;%q9O5yVnP zN|S=Vo86C-3tDL&dXFv%c+;s~kQn`WQK6icp$TL!H@c#aJ3M@)Y;9@C)$>v{!tw0q zdrJmCM#OQ+eVx!Y2qF~J#XHD&PCa0jbJR)xhUjQaLVD7A>?^4IM51DnV}BvSk8_-h z`3rMNwO2`2o41ZI=Gp;MHZX@4G#>und{3pcwxhIiBX93II~l8gSdVt$_6J1-w?g=m zKjG`;;A;OeBrb&@ap|c&5|n`f<4`;5*JBH2qqE5H)+$K=Hm~cH==sKO(ws8yvm2vnUUVGc4 z^1wYHt_p8x4wcHcj+5zF_|j-gPwBpz5oL+l?F`Oq#Sdj-CVH~_Gjcg-mgV-aD0OZu zWzn4Xl^1y{76m5dz7&ifUyCwcdAvMgqi+k1yQi0Zy4>D4%JnTh12F0ef69r3eO>2h zJF|tqnnTY&6C)n%ZGbz*-+MciigpY87W<%SVphjd6!R;RO)3$zV(j=|88uJ(1YG1C zaC(3hX+y=`Ok}cF9V+)JEPk4DCue1NB|7$vi%b}$X}_NJ1sJucN}8T)9y|X~s9%3asLy|wFATMT`{iL8Uq#W!ryRXw(hn)* zmgq#K+R98?x%LAwn2v3K3cU4_XOf{kTaWPW-g6lB9nh6b{|x6UP0~>x)$)}Ro0lwXdH-wi#Ky1&0SsCli|5c?Q_z;-@sp6UB!m;OY$%th8 z*#{MIi%{IBm>j=Q^M|u%J7q_&8-Q_?jk;<(8po6J6y3U(89u~yEAU%lF(?g= zM?V|7j23Sp*Zm1PkYzbV*7inzy0w1X=wgoC@f|7JtjJ9BZ*TP9qgHW?IX1?hOmu|3 zZF!!oNfY%@z*Nane!4O#*(uO9C3bw_lZOxCyN6w>OCeHAHMPZ#1X4?!n-FZ6N;!X*-H;UHE8FO9xg;9MU7drZLQEsGZwlG3qm+ms1A$!8JzY z0yNY7e=fkgAOzEx?U>z+;1-gXv%j-9y zxEYitp3D>@X8xy=Zc{vj^{jSt2?z}D)MA;v_r-fMKcw*M$3{q! zY?8o1PZ$)|>F0xfd_t~J)qh=~+Ye%Xy<+)#rL|*HcOoBO_F9!Oj8Bn#IG|obWFT_8 znS2^wa`U6FdEvzAyJ-^s0jSx<(p4r0VHF!H?UFY@J|_sOb>EmL50aS@Vc03=tEa%p z_MqFvY~E3|k*rLa3)w~Y=GqRGm3`}71PvEz)J^UadVrK8-A`n#InNhU2xaJrU0ET< zwvJ#LRiRZWUNiRHlw0ozFOgjmwYzoiZO~hVB<~U0x+L>#=oFT*7G@-uFntdSK1PU8 zTAJh=iY-51N)Ei9fjL25VKdS*#Z$LVSiBrNdVlLwR2b6?({$&pz$$&4LTOEMZuXLu zBP=(J3CAC+$>a}D5Ap)^TuSztbgEl}xehYU)f*zOo z7NJXvi>_t6ayD)DY+RuN^{t4~l2_;4N9<51i0=}sQ?8BM?K0ZnN1>Cu?(=_wK7o0Y za9^dG+z4noI5wVChDry&+S!LR%zQxZ=57B^JlbwBavd@n>DWdfhW3? zcy=zt;qfh|U>52w&lk`}&0(b`T=nl8`N_19Vem5M@-Wr9Z@H#GnA-#528mAm&i)v- zYYg_q5-uTU>9*>5TCdg>Jw&xB;A|DbWQY9zI>#k zrG?QU7Vd~g%sG3mzz%=kb;8*9h}j}gVB|Ks3SFK~oL*)WYAy0Lblmq1kOB=O4`z@-m_nN#?#`j}qp z4G+>_9rmTQfzA2{trII|9xG_^FDJ`M>Priw;C_FKR_F??;7;fgwCxW;l>_{|kNNkj zd=Y4NbHUTtnY%Lk{pQt+CBQs8`2Vwb+X9bq?*hrH?owHPq7{#MN2oT*E;KeL#rujY zPLKK?fItX>h==NObN5t!f!ul-C$9bjvkf@X`mq3@1P45h^vay21{N!iS-_q;Ru^u? zR)QJc+Yhq&>bTkO%@3_=;YF8z5Q zfC?txuNle_J)tWLz#~W2+xf5WII-ih51&u%C=O@E7&ed1r&sZffM!~M2%|bfH}Ina znmm^I)tiHucu?NozYFefN+G8&Ok7(0i^|b^9LuwO;DgZZvwk>P=VSKrCq+N$nHJz; zve^%wN|z0u@0tK)9KvRxUdlRo4m$ZSpIkJS5bB5ierG7Pz@>kF^hM&8w?na3FI{Io z&;{YJCCfpJ=^Z3`vWzm-&_cgsDi#wl}W4 z6G5j7yKmY&+R92GK?2i^+(DxG`XJG4OdT|X`yLM|e~_hpZb?GHearW(5ay1DQ;M{5 zQ7=G=FF^jSn=0yHKFCIe<;6mE<<4{6n?A?dz&_#T`-qd(#g%dP%^`ylc{76a$e@d-(131W6o%@r4d%mA(-mLK>`)c` zb^G$?+obD2K}e83ty_vC}&Al0e)W7iMq5=T<_iDo-Qg(=bKmP~ye;$OY0HSo;LE1q+q50P9 z*Mx~He%}GP0K7V)Ehg#cH7`It`{LS56|=02xZpJ^m&L)p66=AEg6zp7So~xWJ-C{P zxI;x*Cvqaa>WdR`*1@XI#~th>!GoQ&fAW;_H1>5IF)i}L%RrC`8QJp$`23=@0>;LO zd4)%tN{XN^PL@$F z?FrHD$S4!>pB9-Y&MP--@3XcQq1yB!^ zRYEE<8AW$*E(Hjs;Xx6fn>A(ulH;EI5XNKVvFe9@w^L%-ldASsN>-YhUI8864t;j% z604_L2#6$??zGIwBnJcyH#2DMy5>j=q&G1$|At~R?XgpM;cQyDt1!!vbBm(IgJ&F% zp2tr8>sZT<0m{n<`!M`nNG7CbW?+!R4FYk0q#fN3k}D!7c;y5D%Q1QEZgL&0kK**N zLKtipKS6VwD9tubFzC294ZYmPd>;p=7l?@4ATw_Ri!3{YTd)p{g9PB!cUOUlm;;S> z0I|rL4xgL&G*BtH5d|~0s>LzkPYjxsGFO;$=nli(d;-E1c!t}jeJ^n^SryqtQSd}> zW@R5=atjgDSMjZSeI2QG9}x_@OQOp3;pQR)yi1U;yb%s9)17Cc{ONLk ztORbm`UcoUufBfFQ1q~ITgjvpzE@HSl3RxEj<_M)2wLH`rYJ_`gv+)z>VUR^%ZAy< zboroNvtxD0&@XlWfg3>kn7ou%bSACq;Ku9~J^;P}vki{t*~cnZCNDFWN66?0N6!!M zC!Axm`asliW0sJ@R2o{jz9QhxjDotCadkR?fXa+m%%D}HF|TtEka4q3cn%d6k&PQ5 zx;9!Ldq_lCd|8Zj-w7J zG>GmtG!J=EkQg$L%|@_)U$*)+V%c-H5;+gRbVR+<)H=LRuyKgf5HyPx>=$Z3e@}%@ z*Siw?QITp1#-w*tE#w!#AK)DH?~?1ui+kmHx4(_`>)Z4B?(4pRL)iv!mkrUia-_ef zy^{cUYH9~$Ds~7UET!vo<-RPC-yH4uN?K^qkswX;G&qAsRB>Sur3a)l2DP_9H&WP1 zv-0Ld_N8nJlVw?Dua2U`@1u-`!X>3w-+?i^XQmCmTZ8oucDDq2N=t%w#TG~uykHsU zZ)6ZPN#i!$jUbn+rEn)iGv2?QMe4S))d55SYXl&!z|3`}97i#S6zWmuEEc|gRysrJ zh1k^(<-&b*TC(a36cg=Z?;cK?xc(fSmN3)|I*#;I;Vbhb_Fkvk@eAVFn=gS#gK{Ff z*JSI2rxE9S7+D#J&)tDI5)V!ltg};)o!KL1SFFRQh_Zod&_3ojHMG4t`7lM-tJ;xn zQhhS`HWQtZRaOSc<7N$(?y-WS68n(&JgC3`W@m=*(jrbSMs7b#pFxryYcue3aS3_) zvu1hYw*8eDk3C3-4}Q z#<;}JK~?fX^?_#8`jqHgStSnJ-%nPKr1qO7_}6jgX3q|S49@a8n)7ze9WfeToHZt` zLEICJ=i3I6B2TZ>%Ji=Qv%R07cx4j!X$v}vi0^v@0Y`J?Ciu%eEwdeZEv@X8>~R}c zu_h|5b&H;n?I#2$G96PFDG|McT8$oiL%G(CS{>(_XWL6S3$tv>k*QR|-=*Jcy8M3E zX5vT2Eyrqog4_x27F3WoMfFxXnU}MY7}$p5Wj_k7~cv_ z+}?VHfYl)Es|a!b3B<89(PP>3B?l2sjFEI@|6xF@-(H^GlyT-R39yyfNuI9Bk>e@# z{mxsS@?nuYiM}$padGfg$b~k5t_>qw!IZ=v8P!)|SgI}Mv_B9#^$js@7drPQIwL&K zy8Pl52=ogn0zX&k+SO%g$ms%HS1!K+q5y+xVY1f`HuVfm2j=eP(Gw9OKQfWnh%o8e z0pYUME3-M99hY^=VHM$zLA&xY(1|cFE;nethCZ94uaHoq#KiQlCk(&X-oV z8%f3@_h{W0xJ^EDAw(vq3uX{L&f;Kc>wv-R@3fW@NjYV(^?mG^VoBvAq zvH#{_c2+BuQ)>%+RXnmku{-s=^O$?_%D6X7`S8tt5$6fr#u*sC#?5p@mI6J_pGx8l z6q~{aBT~RZdjocbrW1Q8`h&8fI66Zm_1)-+J$85BN8{D&2+<6gX1ZCk11u#*@qoxi zAY42Fn$^{pS0(5KW&_|j!MswF`V=Gsf<&i@R84z2ve8l zs%x9^4$u%Ns%j}7li#_rnH;b!an}{v3>*lLF0d7x%@3Y^#bw%g7)og4(bj<&Dz)9E#E0w|hVAq7GMrU95IrL}xD(UyQ4VnF-cP!`Pi! z>>BCe_LaX+z7D*-v!hpmjCVvg^i|18uBxtA*)+x$zB}X0u?@tw#3*1cBkd4J9a?p;~=NUPg(rVEA-H1RG<5>+qC82%leOC|0T zx!2QFDG*6yF^aMWA5VCx6ioBokj6jtGOfOOOAOl!Xl8GA zA!E*>wn@+YEQMpEKe`m{j8yXF0nE0lf?t`6f$}}Ofnj({ayKp)-27dG`hM9|ei?xb zEJ$k9(m1%roa8NCH^1>y-&d96ab@;pxCWstqfT;|VHn{XhjASiSrC!9USL>F!f|Ql zPTLYb~KGWCE|Mi5&{3$>lENj_pFFFw?H7imQIkh4M*KZ3EgtlE6Aybfv^dXd=EA_^4eQvCAc z6&PpexN_iT6~)J@-uv;5G*<$hxY|&1m_fjl_yLZqAA?<4#j~Y`_Z}|0UTgX_l$Yaq za3TO0J%v4`qGwy$r!fBm9HN6I3l-+amSqBOATDXCAs>FKQu&ssCDBzqEgQLKeZUZ{ z@pLclk~k^7Vvz1~==vg%Y~`nf1|f8(b%~c7#tGVazVQaKl8m9)W<|_}i3vzk z%%N_JzPTRB8gK6>IX{V-2^P1c)j;McPN7V>LSdv1vj!E}C6bIutZAx&QP_4)QkwG) z1ye`rh9YK%W-``xn^@!)p?(Xh!8?&*H2U+W;WJsAb>TtWuO@!d)=akEV2iboa+rLC z$@7dXQ{+7__vx-+NZWy6 z+Ta|Om7jbhQ3jLq>QQ2H&x!7b)H3duM@DIB6ZaHkS3%^Gc@vr zFY@xZ7UJ0-6sV6!(A6H!I)7!rUfSaeUS<<5NxmYIZFCcTi2AlPQkSX zxuVUIJvW0wbcInqjnggiLixC=)S_M<25!JdRl=};CdE*X_svp1pfHXF`Fe)Fjagf~ zF$Gu9*o`!iTWOsS1Tn&BdOdg0oTvFNY{p-ZAM|u^1j;Wj48Zi!Z(pGXP3YYga5msT znnzN?haD$gLacqaQ~4j`_gDL_xOG>#$I@#}{5*p{6#ZB;=w=@fE|Hr5JPz@(75rPK zWxR}Jt!Ic<^w3zY&|doZlw2!3AjUncgg7fzaD&|&G^YYN2~o0vdAzqe=kZ-;x#2xh{2BElf zD$gi_=r~o&FWe0yb{=-ez<;zOc7ZyrXEgk4i=Y&L3i606`JF1PQCFvRB?uRnB@qk8 z4lCD`h~uKO6hY1MEwl0v7e#Z!3%g&qZ!ImHJEeMwzgzG59lzEmyE{0>ZFYgID1aYY z8fDdQq?x`~V}hGUH{iaPu6#vImWTd;F1oH>|JDeH-p^&@a`e{^1SG}W9&l9ffVB`~aDdG86rHQ31FaL0-2N~3z4he^xGR5gfMNB2X z`!Nl=cbkfbtpcyEkE&$M&PtJs#98fBi#YSy|MlNMGQ#VC7D>J@~AhG(Dx z-*hIUln+d|zf*U#<;I21f;#TbXK!25-cHcptr|A(GBPGc*@BevQs@PyDRd@sBhP?y z821JJvQq?-2tf_LOwSSjIR4m8^9fof^D3SO0Z!tJjzPQiUtD>4X}@y{a4|5&4wOOW z!7~`Nj&O0*BO{Ro?s_cjNa#OGXS{#?WRSu$#sC!U)unldvamPIr#jjzrwV+};2S{| zU+w>9`6QDs-RsmaeSX`~&Jbsaa}>Tjr-&H5GbG=){McNiN}S~q{T|Leer#zFaz+aT znLI81{>d8+Gz*Fnb@w_!C%>pvH&G5_Ok^xc-p*t?bwmYplpBUY)KjKc(y(rgR1r)R zq7#9PjwB_!X!pJOV3si8g2LQIo{(x#(ep8Nc~z?D7=ak3|E?LCcsvC-GWpc!cVl=I8;hwOi^- z7kufgaqs!QF0@J>`p~H??J4>*>{5N6GXIyDFVuCUtsB=F+QI-)4^(=1oS-N`UDN~f zN$afqN{5G^P}(`Acw*)Z*{Pxr)x<@gvb8w$$)*<^Nq><#${F%lr^$p}VtIDwfpDk< z{`mO0;0RT#1F@9U^HiLVHPy^ATF#U$_qg#iOl!|7WX`y9aIyVWkv!$VBFUUAeQ>{r zc)f0r_%#$3I+~CB*N+v>_g+&~E^#5X4Di}v9(}~2b~|ew;F70E8ICA#j;rS=KIT-n zc%FQd#^C}}1=I2EEpgTWvX{ihh>LawUh2u6q@wr@g|$XM*;o#P?#FK*+-h=fd;5Z` zwh(^|`Wd8J4?Cft8s`ssR75Is7YubzILV+=(&xpReLIUCmxStMdb&B)vsU=zB=!P+nEK0p;MC zg9Zo^6!z=9d+8(7nbSGzPdMC!a}|<!T38kw3L&Kki+pW2E|a<(RXDEwrhI7O}!^ z3uOch6w^$oPIEg3M^W{wi?|UbBMQ`v-|4+{O_c0J&gn1N>BbUqv0K;q6YyZ}7~{tI z4Gy`wD%!DB&FAh&Jmp#$H=e%Nx|1V9LK65GhMQGDeomD{wY9g%x3~!l6G1Vqd)c%l z#-iZ^)bFE7{lK(FasVtGCKa2*I#Fzcs1R5l3QjU-`7JUaR&_}Y|#AWR&Z)MMH^7itHBnXs0X8i%?nTyx1!cP<#w zIFgKKMfVZQH>vyTs6lpdih;IjOzP1ZQRc^_~0Zl6L;V8$kHSTV|-2 zSi4Zk@o_vw>VdsA#&evxBVJBK1$#w8#{0WWUVFI1< z2e$P`$+dod8M{IGp>!}0s&I$n_FUirxFQfg+DFpI|V^23Tf8d#Untbz%uuhxEhz67Xz6xCiPhM;s z9D^&Q_+K~}mHvEg8@$M>XDcjK4<#hz(HEz*CGLoM(08JY@93`W(<_bp_11XqN-@~v z%f_D_kqx8=D+^Vo$el^K94D~2k{LJj0-7*m88Vc01~duhgS1k(>4~9HO+Jugm^;S%oZ)g# z0Hq8E{+48DJ!3n+Q6!A`7W@!GxT~;MW=*utD}m17%#)_A_jlN`Dol^( zFa2)0NIn06H}=FC02pcccQ=*`Gy=lRyFr;`c5idR5<+jt6*f%PudEw_SlaGPY(n1n zXD8^JM_0=jUg`!A(%|!T-~HWl5W-pW)c^KIkf=gX5E3WUIga*>E<=T!rGGRb*BQi? z(xCnHQrZO*iO};aCeg^1>@`G5W0fSIgcel3ZK?t9kOa^bTB4- zeB5ugA1uTzU%M^a!Cgk(e#2DuMGo@Z#Cl+AV(3KpG)*7x3@|Vl+e}irggM#Nvr)A< ziibJd?>6oMFX8n$wK;da5p@^g>Y#UukqTq1qvB}k$Mw086mpIp>x(`_75+k&;hSD= ztRQt4p}Wkd;1A$+6JZ|wzRx6N$vY(p)Q01MJFi*O*FI{eYKlBSJXj8LmB0V((!?Vp zNvp7D=C*%Y3<6>7b$0b^>_`{9|K~$8sIjI7CUifz>B5&GO`!ciQ@ui=;JkXav#Zq~ zeD@zO?2LPRM`Xs1T)EeIM#!0kBwa$2GV6S+;!CO7FdU;Ve~~f%S`*Dgu{dJk<80j7 z^Vj<3jz-e=%>_DfMK)Ye=Q85tkNxZC{`v;cFlt_KFtCEc=laTVvKKnU>d~3N5K-uf zmnM&6)yin@Ha+a}9bksP7pXLY8^k47j?{CE7#p3J@$}{R&AIq$N z26hOeQ{skSUx*$f=?mk(e+>58!B;&_FkX8I)vwYt4|UG4nNoNX{xerw**#n&@6WJ^ESL@SJz^gS&ctjx#B8hjFhVbZP6u&7ncRjZ*${KE$M$FER65zAsAtDD$W zF({Gv;{_1Ad_5!0a!Nk?;S#V2R+z{cl^m!v;;k{4_;~-l2Qp2t1JynOCf^Psg^(Ij zJauVC>oo#khrc6x%%J3;fAsjN%!hA!i2u9jR$*e2$5`D(NmAj{cmf^HgMrV(AopTJ z-pbk*0DG@FHm6VP){*9>{EnM{FOgU*Zj9pnqPoY#rt%gEGJvyFKB45CJ#mclQH4U> zEs`vSloyv7)C941Biz3V_nIr>jco|nQCHc#u!a=Qc4aZdRm99eYG`(L zMc_KJhbbk-@M}JEw2!8v&DZT@FK;WDOj_S+-H>cwE{`|aJz5rjxm2_KG(|rNQP_b2 zi2}1)+gqayL&-(T0I|8Ps1KEo?&WD=-}AP1G2_j@N8d$}8tpw=m8PJvbgkRrG?#arfh1lnKgC)uJv*hjOYQGS@cYq&)Hrvp{vvL4StChu zwh(vw*cwUt(|1hf)zbCs0}{sGeI3nYl+jns7DN90fy2cYyFmKtfhzNdxtVdN0*=Bg zlJ72I5}*YjXGmW+MUREt$Z*xO6VEO@RtADTk=K0y6&CmEYrnxqA-2Tq&KW-{+aT@K z6@Azz_j^aohl_!`1c%7XW!pi`pHEXxx&kp+(}3R;G@p5M*LAKN`yIcbI-&S*C94pZ zmlD9wF#j@37n@_uIB1=EwsNuFlFYAm|M`Rtcoj*id$G9zWG+l?JI>Aqwunky_$Z&F zC!Px5B^0Iqf0mE|i{qwzu9Z~NydWw3nI{+dsugh6`iJBVRg~?$Tx9mjJoHm5^P7OQsAvvAb!$z-PmYQqb9g7lWs^!5=_b`0qcZ`RIOqmcmE7q=85D zeNwYDD15AJgNbODZ#X&vkFiT{=`z1eF;G%CTb$sX6SGNRd98iduBieM>;2>C2BXKk z-jMZl^U%KrUo&952U#MXO6Dfe(ShxOxD{RVTCa6Ar9n2U!2 zAu5>eV*VHo;jh}P$$-@30e1VVxtm=rzlfX#mK*m-)H_64zvx_8=h&*w7Ck)gtS5Z@ zgUK2~Q_!~*`oG2OdVOz?iuG9C*#0%NxAbB8iR;_#q`d+^p_dBGFI`1o^+cisui6FT zn(m_tMb*AXh$Sl5_yb4{ky8&Ptw`zdL5AR$G|!}|W;r!cDXp1tVhf?o9CA z{&!rmV8R9lfJ1L_yRbo<=^e+&i(03+`w;IEL3cvLMK;yoJSus6oE|H?`J346cgoJj69)o70Qnvqp?lwM^TK_H6U$n8TT9c%D zl6BGaT9VNyN(F7S0)u8?(%+1#zn)-=H2t?Nwt?u2TAX0XOb2&}V7czPlzd=zH(u|n zzkclSo996!P3%hYF;=NWVo&TqSMo$Gt~lZR-Bc#2*yxHM2;t~|zgXk$`)1t=%BoQm z14pK`mR*cAqBXlKi$=3^(Iy@eB>(X{nHPP|zmKWPU>9O@xg!8?=aRgi;Y~bszDw%= zJu890^gC~9&ZIDX)4Kl{FgR9kcOo6|DZa6T}u`JV;yDI#rRQTRGkzEJTkTN2!s z;`5o~t}|?8<991cr;+~qr~{`-PApZEMn&(K|9QxWBEKk3xuck6D$`52{*xVaY2wc5 zS7f!_-dU1-pt*DX^nyIsO>wF0f2CPSjU$DZo>8DKl66jS{2207vBahYFK}lYF!e?J zXEDU8p&6PHqnd4KUh>@m`tON1X5uWlsA=XhT0_;z|9ihaJ>tU~K#);ri5;z9e*v&u zZ0#&9x6h_$cpN6`pUse@IYwswBcA-(X=jOXJy|%M3(hK4Ifaml-G4i#nS(7 zdyA(y5-IL$kF1_LEsn(EusxPJyCuoa^@T&TAT+Ws_P>kzg%sCssaY|5>1F8{0jyDA zW(odUID1%v-oKL$Xw`{g!z+6^K`$FMV=$r~c0}vOzb|h1DP82JimoNxGa*UW=#KG{ z7*WqCzV`o=2s7Yp$edBaue_xTW(+fxvCt{>$-esE^J6BC{NU7#vfDhA%6ILiX|&9q z&#V0RVSFZDsZNg>uKKD{jgxh$!&a_6!@ZIs4psD;#OD(6Hd4+4T719*s}sG0Zq;Dv zRWXfaxp;T&_Bxo&JVjiI&I4>7OLss2pQcu7m$6fpt?tUl64)!dFo|b}_Mq?wt^%c~ z{XW*w77RI3yLPEzBkirTd{&yh?Ld;YAiOem{~2d-Z?k3kgKXmKFv7bX@Ygi!QGl)x zgAuK>0i3_FfW!Ng78Z`3s8MfO`hn(I^CoZ0IX(CWD~AKcO6v2+Y^WN{DD=(1B|99U zteFD^=Y@30=^$4@RywRI#S?_o7N@V@#3}|eocOTIgRGw_so2A=H0(cb{%1&?e|&$L zIpbCJkHl6FM)2f`P>Gryj$jzl9KVNfZPc#fY>s++uLDQC{^&h~UZ$aVf&73j2@_I` z!Psd%lfV{{=@kPnNyb~yb-@B=+lcePyn%B+dc_@Z!bN^qI00S;sb+|X;USsvRdgu_mzn}4U8!6)lAt|r(oT}DcGgkz@? znyE(POM(;a;jh-0b&aJM97JTiUps%jwLR%>GW{)0AlXTBb?nG8;sbOdh(pdn<8AH~ zy~cq{((m-Gmj+7|TmEkPydC~Y!s`z-#ic&8Z*!f@Bg=mrmS`0umVvhbc!L?}8CFeY zBWM$&hpW^Q&p*)gz_JghAA;F8KA(YWjo|lWo3pFqE1=_QTJ=XjN`#f`WVQRC7l3&j2l%CGZAH8C5Z~ z0!%GZ*csH~YmrH5h`~|C1aRcqVW`TPgGT_(Vw%1kV1AJ-1`E@Regvf78h%ui2WG0A z9;#~Y_lDI<-5RMD*Y0+b+`h5}zwiWX!`}3@fi08S4A6h1o*Wo!{fU0_A@}LZSP+>n zSE~hhV8M*{@b??|N7z@t1AJ+c4_1Pid?~63KjjH{ttc!gw`VJlfjJFtG>hs1C#7#T zYFKsZevvD%3Z6ih`V#;{865~A5t_m`Yxeitd7NgHAn-~dCOs@an(y7e$Y;?-|L{y? zTRhOhIL!S%M$&JJCH4!oLL*96rsM4tZ(k2Y?(SwxJ}pibm`c}G z!R2Y@N3MMl@eA`Xj{!o>*BO5*yNk%sGqSSpz&4R_K@nvt)=Ygk9Me^w z!D{y{1w!!w_NZFucUdFI`@=1@9PPX|r00t#_So=V)(*Je8!y57X8UL50YhvCUM+l? z^Sh1d0p*RbGLumFd)FK;Y6B!D7s1*xWDjv*y;rcEoCHQEKa?jYfw=Q&WuX(S5*&1$ zh8>Psy6>lueqHO5n6(Z>OQXg3Gf3EsA`J4yPy%elJAIC}CK4b80mM_mAQHuS`Wsw!y3&@-JsnqbzL=~)OvS)zt8}1G)np|DG%4y&s7afoeZ*H%Q zM`5g6d%OsVm)sEEG!S$?X9q0;3~h^WsLZMrMz!^AP0uMmjTw6&hk&XqEyNwWfVMn_ z32zjB|ERQ|FX3%>(BTi|?6N5jL;8sm{*lmw|Gl2OJhV=eAJqjKFo1^cvInb9i-&mj z$AN-g&&z(_#w_`7)#Exrd)M@JB3On1+|tV~eVk=5gCdEWbbGXRThh9op_k4NMx%~9PF+^I2;)Eu=b zZl7R~kjUGnJ#z>|{5}rPIq_H{G;gTr&xnIMHG3OiNsbmJNKvg;ql(`B* zNr689neJ3$El+U(V#6;%G{DpeYJDpr6$_ORV!Q125!gUC2g~h^Hdo2!FEY7q3j`GP z;@t?CbpjN3H4E6rpChTVBgeV@?kohX2?I4+fTNv!K8NjDGKjZIemwW)O3~VsQ&Gjf zXYK0?i(kE|_J^v8L{A?2nK+~PvH)1?-6R{ahSMEq(y#l4-npo|Nc@}h`M7DrR5pP4VL81(%rN=l z!VXvh_Q2rCvzxDO4UKy5e*s&?OF`du_A^bhqUXkzkB(BULJ+zP+vk*4I~(K6K5&sE znf_A5B8eR;JP=cU;CBXG=>(?`jKu`o*QfhDSEi(=`v*YB_E%Xg=80N4#x@<5U9i*2 zuZM_yZeN*gEcuw;Z%8b%gm@9LniJl2#8rOk(yyCF%+aB%4<|kC+2ztlN}tc9uXrHy zdrk=yQt(%rtfX6Xr}{lH2^V0%vPF!ka4I~EH8#CUZLj!%|9!my_?ipQATXHOo5iva z?Vh@a^DumfC-?U3-?UNMeL#(ZJk)W`F_$WT!{$KW>p1RHKUm=~8LW3|47{hf5dxwu zZ4e|AKks-98@PHDu(*#RGnx=num$51PZ&$phKy5uygIzFz-NU&aX ze`BeZ-*E%dKl-gm`e}E4-W8It{^2to$4^lZ-*w{~JQgyCf$P0HU>3@34XK>{oECQT zMrtRe?#15cSFlw@cG3}dFOsm8S8oulIDi9>SXpogiTFixiHO*QGT1G189tX<4{Sfm z_1}VVnDvbdx3i)xR<^KGO!E0DPGaSjd{juues@Xe?5ahHKV|{npsXs(e)T-~4grza z3E}Y;a1RjkZ2`l$0+)*qN9{nm`KK4sgXrKa+f3$w3GbIlratqQx-_m!Xf$to#}2tO zq#VaQY+F5-VD2U#@D=S!Cg@TWm+&nb3{OT)wefVGFMBe71}t`1-nU-Y>MR9Tf6w>1 z?z#)XTb|?hNpbNI)v>`#lB)EI z1(3aGe*efGF|>LY-BSuqeHX|1v=raJzN+#+O`I5++WndQQZj*zFR^;!(62a}d{i{4 zG|7-q6wGhLry{aT&?2^AqDMfILcx=w15O+Kh_4;nsT^4W1+?++dy5-ugYSQz=gwGdeV%WX&M-b=mG^bHvRMCizoEOW z(?PhT+`X^X2~fs|$Db|I!rCD3prZRjl|*Jo-i4H4@>)X$X)yy5Yh#q8$I045D3FYJZpcM~yQ-~9 zK}~?9ik}!(ic+8|Vt=O#rWt9mIFNL7h_(Ne4wV0S->EJamwyOI&+U+D+X0n0cJSTZ z*+g?ra50?|O0n|Q|NP^;v?{i1xe+^JsfSo6`ClyLWvp5R>0gL%E&^J#fsv*eGH79s zzJ!mr@r(qe@y$R^#BDC7#0wf1%2X;U0uwYrXN2mcb z^FMY{fv;W~r=&kmUv}9g>sNZ|x|5|kmvR-ghzI6rEGW0f#=W6AF|Lh_d;ViIsR2BOgMV8w14x9@F4N-VKELtnu8C`EN=t5^r9AcS^NXLc%Y3HqiR^M*e!W?)Hk?*&mYxG!P_z6MTK|zPEwo zD6DD{BSO5eBGYQV=RQoO!oHPLp8 zT{R2;Ql+zc2<;(S@nfn4LL9k;8nlM&HF6IIqK0b7R^J=eeL;lGW`H-k zhG=Z9#)+w!oUhq=K$hADlHc1%Zt&J>;)*jJt~Apvx9V_`Fzgc-C9jJGvfaMJ)Xnoi zO=MC;o;Rtp&escJ54(}#-wjc{cNNo$482z;ai}N6QA|oa|AEIZ@S^L&r`~x?68au8 zsy537vqzkgO9Qr4{vKBOrdgBy<-0W};`dK6+Pw%0D@o(fOrU=7DtOV6;O*>;Q|(L)N482BKMGXO^`G0XTHP&e6td4%VgH{UPv~=R zZz-R!@JA&y?vJ;{(zPn+Y%s`G1DcG-^+4m1;v|79tau|1p4P;}T_{e%NDO!Bo|WC& z-}}`L{;xJfX^YS|C!KCVFWA8>kYFi%i5-I!dh6@gQ%#odtDP5-xsejW?%{!eBZ%AhMA7g@AO{r7R(}EOZx$ z;e5z2(-GG_S@)3^??fpZ6RoPqos=Y<8!oZpQWi>eR841CKjzDR8V0S3Qzr%{MzR;;stt_f zz%@+n&Pnza+7*$ee-`iAvbCzQ*SJQ%^f7AF>BQ0Z-M^b{F5a?rgpC<>(eP}39(18W*(A@ z-*+!OjsJCG_?2;;qa)Gh%Qm{z1cjMkAzrSC{rEdADFPl4?%`c_58Mkyo(exkBF+~!e z{)(T9UQRvlA~89x`x-QAk}ogCMqLeZ%Z!W)X(RVIc{l6bgGhess)vDGHRA;JyVhYV z9S;cwSxHRs9NNusn*bUi&>pXz_~O(^og1$ae|kp2rK-89)bzpykC?7o5+^;yL)}ij zbA=cdAt44Pt3Pl!s+iV)2^A0g4~X!56(k;3LS=mmx{wIW?LN>HZYcUe%QE#E9g|D3 z?!=5fy&9z`r;TQGJ{6JfA;aMO9+Qg_{0_O)C-5-z@}d*G*;eC*s(e1I^?DOT&#a;C zZ=WX<^GeFIspIPnxAaAm=^J*xZnk&gQkhu{ z6*K1&jW_evUzXw@AoheK(pP~i{z+MrF8Q}A?@vnDfH?e9%m*9F!GhiyD5iITXOIB% zY|q!Yi_FP|8-%W^cLu!SlgRK`y&oYU@wtg_`rekW2#&3&>$j5{1Unaju3Uva-_1uA zJ{5-&4AhC+UG4A$nr^;bsl`5M`}hM5(5(}EF>$TIcX&ubXA#F4&evtTSgI9ga*n?a z%G_yUF|M?3`vq>BQ>UeOQ$E>9q1JFKJ%8*|@b=G#qTdnOlWSl8?(~EHUSwU#l4aY->S&#jePyF0LQ#koOoYZwtvt++Z7aGkFz z^Z+Zd_qS0PgZz?rlkWW)zI=3{aT1qEX@IyM)1lk`k&mQ?$8asHQpU4h zW=o)CcJ&@ZcMabN7D>??nMbZh&rap#H#yaJp5s^jj3j#)!(p$|e|FZ@&SLNJ%bD!G z#F#G0>G(h$eO%~74ZW5s$3hhGX97h=n_TDuN_W$rn0P0eID7c^=#CJr zjW?6`xq=WroHL_6jY%9O8=`tyo!fFFVf;9iIS4}<&t|W23)DQ8Kk4q5B=cH68aL_V zr<$31yxWNJ+YWk;7q#AS^euQcSL?EFN!ECv^VKSt##Q!$18Po0y%A&_P&yekVUYC! z-+6D|43jwCJOJdPXLge3KQ8rkzVvgWFxEf3th^{#Om1eB#cJ!Zt;sMt6Bx&dLJKKe z$lgG`anqzc<(0f>44;wQS?pG%aEz8qj1;XJ^_cW*=wVCNEvQsuwU|3|^wVo&$EwDk z3wX>)jV45>wmkbriG-yuZ-(kHikaC77Bu56Mt(hKC~QrnoP|DOUc?j4bgBxf>dpz5 zd;X;qMY?k^qTuIpVb^kEm?-{@lwrVe`R=nCpAV$ypO=r62sAe34>gd*Fq2t(WrhwV zMX1!H>RD|DODuzkt3Bj{ZAGEkl%)&h=%R7SQv+6%lL6ZF#Bz{ET*k{c9up)fc3y$h zNz{R6z=>5l+rEFMc%gdVC$XV;e&7A#2ctfMPLelk=#8JR6ok@NB3sNck183Oq09Fe ziXqkE8?4^yHP#u4>kTRu6QxCC4^AFW*bd6GWyU!@DjE7yeJZfXzdRz@o8z}$;Ie#0 zqP5>%Ayc7n&KUapSlA2|IvotRl?)c#`=|BM(Y`-ZhE=O{FjsbF0@#1d=24ioR+e#$ z5f_EvnqT-Hp6=J%?Qftq<%@rI{64y{jqd0~`tGyHoUmkvnl9?s{zm@4DcmyyegA}W z#U@ceO2OFVd@hD9*;QZ;vp(smBxJ7>kBc`vU4AlFMwI6)Jwo@UR}fng?GUtDS!pmQ zx;ROT!WEBHySktDdF!@Q;}iSj$O6PGn&O<)RgpWtJQOfVl^hk*-$u8Nq%A>TCH`Ku zno;hNnR5moiUS<X49${KOXkS_P?A8q>&{o0yxK(*@ff8Sx=0SGeM+a(n;GSLK=nSsUPv)82(7rD zy(U~YT;|L8V||Is=BCbI$>PsD;@TCA@}396oEw^U-3wKi@+4j#m3y<4et@0j@?FFUO zkIFX^6Vj~WLWT}gCmoY744HH5OG!(#ky#V3_PsM1ISQBUo+;=nAwjLHBVP=dzy5v&EM3C6WMpV^LAnkP>v+r5w_~u zMsA+tm=uIqPWQgEHWaL&udR9?yJzqpi#yFf7V7s*PB>+w;Ae3etn`fo;{i;$T7*S` zs#5|Ui7o5@guRhdVUyWbWiL{MY4@f;0nMN75!aOoHqWLi*Q1DAeo97X&!l}1%h0xpm6l-+ExFv% z-Lfg^MrLh8kM64!aH;2lzUkFDKLvy@tFBO8l;(8D7ZA5#zO>iDul*BMGX3|2(?jMs za;VpS9>>&zmeVUHcE98%eKuWUTX2ahFP8JWk?@~V`E!1c&gpG8@WwIm2lpsq-+~8C zz1kg8Z;$Xk+s0`2-yoQ8dz8dCqywgxrV!)nx}SA@Pk}@B%fB3H0G(6rLv6l&s+~|U zWSFwv2y@NbpF>YZ|5<8Xr)&b6L0Q-KmI*(s>T?7 zWk0#D&?BZby;tQ#7v*tfD<2nQF7SEiS&-0lF|@AaWTU&Zw?6FL$s9hC9hIQg>TdL*3+lP?djnsBQCF;dGW%6jaRo__uYRKjZ2Z9BRA5PZF z%>+trk3as4EFV4mkrr#JcEH}~;*7`?TeuUOb;>EKrSREe@PD|K0=aF?~1QEu-|}rbs}$0^&|rL0+pv{u zzMzIrlYEXVZYD1`-6DDw-HAw;>z-*{oh<~$TtIVyDy`yagVQ>>y7iS1Lwd5#T@_n% zDfieu!&HW{WkUtcWkRXk2^EbbcVcTa>!?uXgX|U+0Xi$x8Bx0tk&XyVYvyo$kAFu` z)6S3w~(M6V^eR@J+6_meWSi#B|`6cYmgdb<>H`*A-E*Hz25erhHB ze3w?)sM&Ds>`d^bWqaxIR)&rf+3q^df3DFtL~Fm@2wIt5km*`)J|mFyrCXXPZ)(+j zVuFH`1*gURVN7>oM>#!h<4`6RXC6K+6oYD1tFoweXV;+i;2^r85+~E?s2Z7i7RWgz z$@FV-B2f6qE26)OolnSk#J_Z^GePUL|6vR$+AR0C!0{Y!ZmbI8SlwUgLh;=%6E|>) zIV%D7HIM**#-V zIluh}?im46&T3m}!(FNho=R~8x4-lSL^Dix#MBTI-C{vJo?PmPaTmWn`?Bul?p|hy zg71RqQQi^SMoE&hCCsdL9o#JN2lj;;@b}d@(6#dvo$iU6hO+8UiYai*R(qUH`+{5h z#h^d5+2!q}^jao)7|QR#2vPoBDU%ZA{y9>4eAK%;56Bt10E%^dcs|cIClW=cry?ER zb&!malX?VQgRWieirAe>U7NK}_A4oCR!r7+;gc8zEme|)$m$RDg$P0Vp4Ok1wgd*B zlUxz|gA~}phZuC9{Zy&STtO<;NmmBC_$a2R!X3DGtS@Y&>qJhZvoL8NyC-4P2?DG| z*UW5U0RAc+r~1f~fXu_T4q&$74ZhpAo?p*6deTesZ0U%RW#dJfmy#Yj%A}O@L9rCZ zf5|ZcK@1{2bSN^pWG-3WR7X0}%uB$k{~CuGv_5up^TFdAcDdB&s53Md&L7~d>^>fP zy{$85>ifv19-X6qh{tY=lIUIK_qFY^w*`4PqpG?n>%Yd(y=+M9bsP?7uuJ))_(VU* z#P%%+)%y&U)kE5hfpZ!W+6y}z-O zZw9LqRviyt47G-7RoDzadM~(kZd5j7EJm^ z>@_e(x!Ud$P9Zv?glkSX6q))7Eq!C!tik2L_}y*wZoyc`q$o7HgvN2$=1%*ydcy3z z$EZlR@fKArj5QC3r1;NGnT3KI>r)Ae*D>G7uOC>TdINP_E$;{SYnE%_+<~kvCgW-EpbonX*M2uYenPA z>@1WZfg^imY;laK6jaqEsh%t)Sf;aD1(z6!;>W-zakDw`U${jRaVTh5(he8R~z z+2o!R=26%N!zn_0SpceW>h9X|119%5*{#WTIw!9xqd zRa*tmv9{JEPyF%EN0{r|*eAs_+zW0#Yq>d2_TEOOVY|m^eqWsDOvhJ;;`3wBA$bAj zZ}Gf>5I6olBR%FXXKHz}@zLszyYJ8OA)ry~IkIt&gZjXoRvZCVA_r@m@utwqD&{4_ zodd~=M2uFNu64eoee3IV$A>4)@{fIdQ5dUz`p)^ZwAVv*F8i6p_2z7QDzWGdTKDZbiT3Ys9TFtDv${M@5>=J#P$_sn~Ff#!T(tcQ6vI^-Ln|;fpMTg4o^wd#3ys zQj>A-p#PsYy)IoT@xl^kjRZG#Yjf}Jyt2y6l?yDg1`?F_k+7BO+rRm>e2z?)co^I< z)Si*~73=tL{i)5B57){b3SQ7YW_9J>Ub5kdWnK>*M-n;a+6O(o;B=xG*|Fq)o|>xH zJ%AuG#Ah0rSe?=R`l#Pm`myFFm12K;C_}*EGX_^Jip5bxLi|+B>WBu1{}DB2a@EEo z{-g53H+*x&7p))kacWccWSK{xbmxRQgM;>^yChVLh2M-^BS!!|KfqF*0{SRLCLHB0 zCl6#lIJdixPBbxod>dyp`#IL6Njq;n$*py-Kp%eGV^!{5u`!x%`HiJVFFZz#flkG4 zA)-YW;0@t#sjj+x(P*2AeK1Gk1&eRcer>K>3mn%QP4fssYfE(U za~*{)U)FKCh|N7V1uPMry%h|H6-e3o5++DdCWT5aqVYWYFK6}#7j3eSrcvvIlFQMYGC9+SVKcnESePxP>&e-j+FSQnRuw^(*!Z z70^%IOY|O&B*+}3we%FCzb_6T`W)-Q?mC6mm+3CRZtmRm~8}anyGCva7el3v0I5y36@vogqd^+k|!GTC(mpu&C)1{cdnh z?Fm1H^V0XECgZ%%^tqI_1){m}IZ06;PIDdHqxXjBu4f$fJ}pv(-=0w;@mc^20xjNSS zi(Ucst_C_b#m{w67PPuS&||t6a-a$6DSItX6qy%8$Yv7n^Y|RTvqtk*$iTMZ2@v%< zKLvsz;Kzi&6iT%W12DM$2J&qaQW`>5$_V(GFY=*!fvWz|eD#lbg|s&v0v_bgmD5PntnI#?~2n zztx5~7GD8gYe%9yaB9BgzsP*})%eO9W4P}_!e0hz>5o#j`qu;k*nR%eMo==8a^}?A zDe$YkBBRPCAf!-^Lao(DMcf^fPxx*xK}Jb=(v+cr?sVE1l%I;{SAl0z%VccYFxlY> z-H}H%_&hj$s9Ft!CpY(p6d&phl0f~TEf}!%l^yr27=l^r5<07B{1$;*iPX$6d{G{} zX!DTSHnp-?5Fpzf4M4}He^lUeG7L(CQECqP({+NK{Kg3tb?RaREE0cPPv zfzXDN8yTa!t)vG-z7k0S%cV^;aUK435$*VasYQ>_os41N<9$|_*!3soqF)a+G#C14 z-U6ndALx58aE(F7=?h=jBjB5>Lea|Bi*tWYQixRsH}T#oshKH%;Ufyw@Lhl}kKZ=m zEQcq07ieeyc%qPznZJ2)80N*Z#^%?bomz}^|BE(ZrE3GWa9+^sxz4--M$OHnQU$N_ z7+SQ(ie=;7C}POM#=@X9#R~yCDNY^9K$u>$ceKIw@1E)bLI%5t@!U6XA~8=~`2+kX zFA(`9PVUnceTbGl>hA#-2E{6FG8P!pjaPIhN3($A)oBHQ-t|M^2RHg1KI8$X?EHsA zwAeAdbANsrlDFNZ>pA)7sZB*(+IC+T0vN8%c^7%m=U!O-=Nij}QOgW)lcHB;1*#h$ zjBbv$3L)2rz2cJq%Nw;{6kIg%IWY4O#~L~B1GIG$98BGQJe$ei2eu_&R3k~_Jwq}$ zRLE$CJaYg3#$j9CzwzhlPX|g9xpxFT|(pize)hV4`_GBvU3m1q~sx z{GMdHg*^Lj=I&8+0LN|VU*Fm0LG&zUUR$_}FKJXC8?oZpxN^L)GkVt$rKTh0!iJG2 z*r>PU0@I-0&PPFDjBtIObv%lo56)$I^P_J=lf0aAq67+FMA4-3$M*rfAQ2aWq%5ks z^;y&m`Xe?Sao?;E=2nxm+iHiPAAo?x8Njko5F6in%}(1IKU)Wr*5s+FsmqO!1gTdI zue`vhLDgXsFa?#^c<^?YKffu|^x$gs+dpmrSfz#C*>n5aA(7~qwrVFXu2z#CQzUzG zDAv3RkDMP)hff->VWP5i$RFN25K3w>7z5(L#W$^Q-&HKs{B@R_ryscU5sZ^2>i4!? zAouBW4Vz;cX6-COKoAh5xBCP^j0Wu&57PaB=cS`EDRuA2(YO15mcN5%P8NRn@Qcq@ z_#^l{i4ENVNvB8&K5QOna2Qs=Li5y%ulssyv^1Jr!Ic&_8xAvsO@^8ruiXIlK@G%+ z3dq$I2}R=Ca>S8gzNf)9qC0)?P%Swo65RssSi@zb;DIaK!f3!}doR{6^W9fhBK8ju zka`hQpr!XBFT02td-4{IZy;^VN^|d&S^>{jqshy;;;)XWP)_y~yzN`KLv^ZMx1^`K z-N(af920KZ9;i7t3-9wRP`9MoYP-0IR43Sc+dSBo<=)!MjLVH&E4tt1LG2)sLQr7)*&(X97+yq z?iIL!1-9bhoT}Gx!I6(w;V)H!HC_$)P@VBoyf1swVC=ymfzT>}o_bEqM@SCLIj2*- ztNIRzSXUF9gvC}yImpWqOCmZSw7KbF51@JX&YKMb9f)M@l=pgu66BN0AZZs-DTQ zTm@!)L)I6JnO&K!y=g8V@le19i)KWBI4X!fT@6;bDIPaZeqW3xX?YmWegJEMB)(3~ zF)=&b`Ef}Hw}DdIDDKG~BvUJD?q__{B5Vhb4VVT!<8&IY;@KfK!QUt^{OYu4OPfd? z|0?dd9phVz5vt@3PRUOvmJg6UKSQ1m(GuS>zm}mY#SSWLe5Kr2l>UOO?Xy2ZQy8SK z`3D>SwBkVlUHmTh!xiz(uOiPyIB#n!CRYIo?A6SoR`a5wcaW`TFZY091(FVut~@M- z5(dwZ$O;hqqrzHUcuuP%HySN8x)jxiA3c^l6cF2?NOsKn{6(=U!wK!XFHrjfW7Ow? z#QkA4(#L}&W3Li_l(7D3^&V;CF(kZx;1bY5RX6gwB5drsTc63^E&z#AX6eaYn(`MS zaTK$ShjIxw?{aJK_!6HNouPUOJF9;YPTh}wZNKGwy8@+xHgEPpi$Z!yP^Kc1;5BcIavSvaLAzTE}cH9G@4C?(RyJ7$qevoq!8qbj8)iZ zmp0Zt^;7*pf5e9v>csXE%V`hH^Wc?}Lk&le*UWP+lJmUtA;*>F2$)5u^`Fn9fIB)C$P*;+R**(}lAmL}vd z{Nsl8H(LE-?5%qqN8-7Sjf23m_#5boUOJn-AGbXN!}?*(3-wXG$wi5imv2?v5nP#T z>TG*Ki7G@~hU5D9Y9d}FZyZ~7-~`Eh^oj-E**NHzV~fLp8`J~WwKBxpm}#GyZ}p>M zROjM?D{L)%vz9aE{mB$Z$uo_KJEF$7OWml)Q7lw`G~f*!;#x$sF)A>KSi#jWwD8!P zrneTbC!BsnQ6!6RESDprpvv(WvFqro@dYpJYs4?6RjK8;oG((?HpH^fSyJs;?{Fsz zPndMFd+R|D^d9%Su``p@9;dl9=6YIQS#`(wO+p8M()Z4#x+=I}rDXHhZcC_&=<&3UEiyz`Q?>4sygCjZX<&W1>@XwB@WNhQ4lHlis~I9z5&s zU%#>;^i_#UHkMVA$5(q+?a3m-T&Tt9a>1ZII;Wlk!eB{PuK&e+3j4})=~~W%4K>_H zv~M5EKB*q;)f@zhD-jb}f$=lGck~9>{KFTn(O{xFu63=%+1PO*o}gyqiS%pcHWS@9 zY`?BNk_S%n!jCD|mz>R90*@K=&e~S$Bqkf%WPdj`wM~3g#2s#8dG_*ex3T;?ZPBtS z4;HRvhHy7?(}z#qesMu4U`uA@>>AnKbCD(;&=zJ+9jf3ILXxd(LA?_Ek?%`kyO-Y? zar(>2`$DHPsc5sXba%_~?NXdF&63AvSKWMDahtC?T{}h@JLkhM9j7v&ZV^z?14>C3 zWjt@KxrFu_seIyu`jfaTEg#6xQV2RFpf^4h>oTQf*Ebl45*t^vOa1`WqDYOt>4)XE_g-$`cbJdXJFCCM zODrn771umv?b>J&-QnV_Q>y*-@dM2npo!{`vv#&upC86jVZ!|7GJ*yNn8lB0cAl^n z!X>9lD*WhKa~uNa{A9Hm{|)8X95Lf#6%-Ssxbt~b_Z$|qRk#AkN!A}*fsK5ES@*XY zsp#t45T;p*d*x(z#J=0{mW9FbwP++gr=yl7bE;NT zVgXEtaq@%l6rYHN{@Hn`AJz%oYmVhS*IRV=1MR>Q#}9h9U>-yB^FiB&5m7 zs1tp1^)mb(YVVh!vN`j=JhehMpUtQ2Bsjdz&d@{h9j7j1NsZKZ+Oc8eh6G@_JhfFE^9;c!_R%e6sNTt0Y zkWXL}yZ*&Mn>F_(SfgURzM_gd8Fp8$Q8dNpU3{IgQ659#D6>mLiu00G<>q&~zadZ2 z$=H$A*GFV^As()q_V3u7_dUUoi7kW*HdwStSK5S?C+hq@anf$6;H=f zu>?c(`AQY%>#QmlmjtjYDwjomTW!XfFvPXr(ztWW1<%0qE1=0fu1{W-cZ!8h%yHM4 z?gD$XX>90bu!MHJe{{>xXE{1&2heq!`~ND~0M8H~r5Y1{t?8VPhyTd|b!H8dpryJu zLvae|^4I9?Ocz^?uQfaswyZfOeuP|{h%=?@DLJ4qTofH4Yw%jixGHeS1*ci(=|Hf6m9;exQSLM0{; z_EG3^`EbMCqfYfF$ZOIxEfg2qh;xnGzI}=%UNgLlm>S%Ax?%#s1ezu2M@Zh_8XHA zAp&q;wvP9+fR=US_OhLb{IKuZ6na?X3xV=qf=@$!wBBn(LzBndz{gS6L5bBtrISZ6 zQ}Phll{8bt*Px!4_Z%EMAGR58+9>r~$GO9*d8&d=L&{#@6V46d-+ss79^ixWHlRf^ zENa#;b(k|^m~@8lt@XL~&QUcQQO~2{ne1QM&`;6Nh-UiC!~1D@J&NcaLqcBEsQ^E29UUhDN~?{UDcky z9bug)Ivl=r>ZYQlhVc4?Tt@`^{lXafQDP{9Uwf7W^&d z@Ij*luNqd!dAEPA01}xYK|W+%WIoJZ(cg8a%u?FNTUIPu_QPQo%Y>;kyH9BkPW%M_ zxtjn$TrQDdVsQSHvFq2Sbk&u|#fxovdc0h;2#4RGA2IsM88C;Dg-UPub4MAqPdTTw z@jGR1wQoG+v^|WOk&<9)pB;=J3m4hL2v6~+{eC=u!5a5vOp@{V#)}?66>0PZcTks6 z#wbP^QF_T3@@>~TpTBNX_qAqTYzRu1H#fets(0h+(37diQIpyD>=Vh`PHNWcbfSg8FXH(xHg{M982dhcuXIie z%IG+=Rb0TY+(v~Gr`p47SdnL?ZO~1-(uiinveSyM9t*#tH&WnaTQ4~D%8r$IU8K^y zqq%st59|;ZfOnlP6XvX$H7}_qsUrL%e*Hpz>TscmKS>AgOn2n?@f>;;re(<;ylvUg z5Cnf5r>2^G%=e|IlK9xCJm$jAyV+EBKX*?QKLY zv~>I7a18SR@s!SeapFp2!4@Ge<|r+v9B4I(yg|`XKlze%8lO>OV!euJGzf{}U^^=r z7SY^pTT)p10jl-nqGK~XlG%!zV|N)On*6usIvlU%>g&X>7O+8XIzo4a7` zP1JI)=sNW9P%9PPQ^c1%dOn4e_gXuOA;=3{CmjqeMTQ=+ga~=8UAa|45PbUQ_f|=h zk&xN?2g-+)kDY9@>?l@2-!nfoytckLfUtU(a+CE|A0&&ljZYlpv)1H$>FBGjlTlh{ zZe{g{ zW7)IC)gu?0UqHzsKq{w9zGcAT5efZjLZUevY{kwe3IT`}NSd+`w4 zWMW{2{Hd{%E!8+s;PzdfpUnyKz$xi~v1SLwyo00Hb)(v_b>(vHeTpnBnBfdk6cDYM zA)JGm>TMgIEEbKZcKp~J+dyxAY2B@cn4M(StX|>mnbD@ws|&n)m{Vh(QSt(PMEMQ~Ws{7ke`ua< z=qcUZ>~Tzmwx(EXMc?##Vm-;af^ziq zXB~#%x7Q!|Rd6PL+^8G6zk!NSuaCd6IQI}$Nd^<^Vu=gW+i>i$%l>0f@b}p#AfU`+ zN1rhKY~J2V18)vKj>+WnclR=!6+Gd}uzb-Xt=;B>DeZUjUG@7zwKqi8C)#g27vBeohK`J|&+#=AYgsZmMGlI=u(2~iwt&yI$1pzdbcJy&3>e}2{P%yC65#y5 z^TfO~4X%N^5cKgs*T6q6gMVHLci^67BJaD?0$~O0r=ezP$ba~6YTLhMw~R<=Aa@?K zD16e?6YT_H3cbGrVE^_6KoloWxZw#LK3`=6uB`k=b^oLK`S)*l80eS6sDi^W@JW)+ z`+&iJPr#^3o$(uXldT5XkJE=A|NgQ6`tuVkeE#&{nLu6md<{S{D4Yv;{(rw6%xCDK zToo*376u_#vkm+s2X&2*@AqH-J<)@;{7L>*r3KcJRTMt+Nq+SI^6S57zoWcj$fX$I z{kS*}Cyji#ogpmP?dQV({;U4^=SzYIYoD<8K@&?+rX2&@Ls9~27-a*df0LR0{S5Mw z;W5dFRb9FT|M(FwwE2JigHB_@0GMyM2WfV?XUFmGD`O4r$i!vNAyJAc)msIgAqJUJ zk=q-{Kzu=SDLknEUc4t16yLzs!u^4juXeyI7_huSQY?JtzlweS%;O-%@CKVKgKzMC+l zegkM1W^oWfo}n7(|CRRm|8g06&yyix7v;x?fHLzfC+5^p!&gHq@(_WWaG}*Atwu{3 zjQ(ojls>2E_(CgP=P+WRe>xU+O+>cqn+RA}R{HNAYIiqYd-Y;(_L zf-<>=!*>7!-+hf9hrraZN9GVII=|4yA!Q4l71E# zQ)i+6e&r7lJQv(SgzX0`;87BYOrM@08V4hgZqL4Zz& z%^f!PK+|((BXoZw)E!{LTSZ?YC6K7NxwBzu+-Jb&q8d0Ve#Bc<5_-r%8g})+p2~G{ za3DWX4H|z(fjxo-5=bm8vz5W{TVvBga}i2$Kj_u{H8W0Hj#6F${aB6yq;paAn>3X0 z-hR;w@jx7ndUW>c3fP3!R5xIZEx~L`*CVu*&FM8%tkSR(jnfh3HO!!bu5;ACwQY*1 z0TP9*;tLLVYdqntOP%~mS%qv){{P&Z$}iB$u|w{)i{F6mk$j!2C#Cq+kg!)=IiQ$+ zGnRvQVR9~!p8KHqs)wS87D;?^m#U_y2F0y`qzn1PWX5Ax2^o$LueWwIjZsf49{KSO z25~=+(6FcdxR@w~TU3P1r1SvP3vfM%&A3sJFE#4}htVYjv;8L}gq|0!uz!D#ozI4e z*KhKq@2>eJ_o7`82MK5EOpwHS~3HGE55T8R%>v%!KnrFxOT0 zkfG}@YC!K*GjU5FZVf)~dwsuFp2$OvF1@7z`cUj5_c6^QdG{4-w^Q3onJ zF(~8hCSvj!hrs#)X~4~de_e;Pk`COfm5qltjcQkvtm@)tyRYu8vS^MJ1l%+F<_@#L zfWrKs$K((VY+e21d4}VSaW-TwUJI~_gx4N8L|kapb~`1F&0R_Pd4u;VxWOx?j{F8v zUm>bY#u~z+{5DycD>&T3A(HFT(2p9hSR(!%228>8P zjCl7%zQL;GapQX(QVjb@LdRzTJ4TEu91B)6K_Bm0`3|Z zdE$+RvFg|giZzWBZYgGxy-FU5_F4Nk;1($fyneHl@^TnS zkgt@0d7n@{55Z@Cc)wyW5n<{>n^08oU8Bk_0x~+2gE@)35t-a3{*eDj4)bKa8B5$d z*;YTcAuvLk1d>4cis6F=@ycEmHjk!{Pc==xRcoZl;m7jZ}W?I#Mmh(Z5N6|TO zXYNKSbLqGXliTp5$S?lq&pm(OJeZFjOxL!n8z<2!Z9Y*QSn&l12opTbmW%7Todsz> za7q)fbx~rZ$#(jv&f)_$2&yM?64gw$GG_g}XEEj5kCqRl;pRQB~UzE^f&(0!Tv?=pOlbr)%6AYPWV?@if zq*{T{l9ds(+Tm9AuninB6vcJk++%&ydfbI?>kT-4rw#3*k9wwYxTrHI{>!mrFQ{7Vi7f{`}Sb3wTj+_rZB~27zjr z1+<=W_yDDh{}R|Gy?-=$Kr)(q=AJ3Z9nw#=v(9;3vHp0_i!1~R+U$($&(nqJWkcar zr?4jyuuf?eKd(BMmC?S8+?irW+C3x}RDrK+CG%aixieQ0yq-Vv2pU=FN2ee~y)qDT zm?JZQNk}iA1~X|HMGwD~T)UuR%s0gHUmNbrt><-**gwBO!U-?}_bK*OxM70zM_6SM zeL?$OT_dFkpNNQt$6lv4UREJOy>5Oi>S#ta`F&RS%tMWygl1mzMIj!ndSLD=wk*&VC}HtURt7UumJ zo8MU2(V?95$u!j6OZZC+B>`#qjB@WL=0jgD7H{>*@ccP?=gjw`{2Om^B>Zvg( zzZXz944!cv7(SdxvgJeVAfY1C#xtahqDwCsVJApBnS@QslWB^cW9)cMs)X56`;Nmsv@(59 z@~G=4Z9!dZA<>Uv`41GPrbgGw7Q@?qosdNCM_PT81qKyk!_zrZb|*L^BrCEr32Hb& z-{+VC%)-E}nD5CR=~ELp-Imx}sKX)y;ged>?tza>fr@A#}x6ubP zHY2F9&3&e#*DdZCO6sLwq0f~%i?oGEXZW1F{iGK}P02SW^|t$|a-JxW#$2P1Rc@Sm z$gYILdjqGn=*o>OrpXm+%I<*A`2Jlb6~;S;&QrH}_ykUiaNneE_yHAxH&Qb4GBSoiK>c|;b_aqB(>YlN5eL6S>{D?nkJq!|C$>FZ;l+291w*fh7dbn&oLrPE zH1~Cn#rZKcYM*^o*`d&Oc9mw5tts%%<}9@yVx|I2G|0Wx;1PHx*hM2(f{t1B3=W1H zM!Vhk%uAtWt`UA?PQFp2%oo%(y{7A@9F2owQ==a9Uaz5+Q$70#?C7Lh5V}VMKEd%g zHO(GGveW_}Nb;;fAd4gJRg2n5&u8Ieys?PEkIqx1)BSSRCj0QJ`!w6=72dbY#GN_f z{{Ue-0ECf4kkY?!4dsh;&@I#cyzrVsiQV5LXwDc{KN5^hTQNon&Jj+7b4T$|id8l> ziSSJsB{yPcYYr07Tm+31NR;LI40M49KMvht(SBAuZbWBMz6VL6TC1c@@_wAsco-vP zu+HtKT}j+~?&y}HhXZJlt5fVz{i=!KmRjo()O48T+_;GzRcr!K74{bQx0EdRfI~STMHXesN z37yilAJ<2CM=~*p>kn)Y9nV{aA_pnamhJ`dWQF!gko70ZjyDSqnAyY6nFOBzYdX?RXxj; za&H<(4_u8T+U#1NQTejrc0+`$SO>xW;;k3!FD4Xp=j8xV^k3LtuOoSTsA`%Kn|=9* z+&VhPaC(8yMUMBK;Oq}ncc#k}fvx9g9 zoUW;Q&ZdlGiESr(G~K!9!|+dhq2rWa4f3})!fy6UiD;!#yG2j4u3;iwj)m8@rel5-?S# zerI&poIUuQ+xiq=ZsyHK3a|M-uY=2Zm(tD?&rcE9{7ZyRL`aez^dUS(X|t;2i=)hP zDJxg(c=YReJQr42#(RH@gaM#+o^!nE94xI0?Z7t0~p; z<+IE2Ot#KP!=xFNf`^s7KXT2w`G+=5Eu|DXIkcrkGHEY2`88ACA_l@W?5$x#xx>Qn zoDNUtMhq{M_AHsB46F}H6ss9TKW^+h@1| zW>e(Z`M5(ve(zcMzp$3ojCl0)BQyF$xH0%cN1fZ8II}Xf?-)jXgy0gghXw!e zS*c_{sK$o%w+3MzU(M-k34}gVt|p&D%}GHJCa~bF6HdI4Ud=S6BRfxdUf?t~1=ZFN z$a`8K$=5FW5@WzDe!6gxVY{uasr2Mk&X;V>R31|~jgv3T3HQY_sujUL>>D&t8Gdqd zJrxoS{GleA$1o9UA6aYSkgmPb9GEdmUxxR z0<49$BOEsCxLxV#%>T~?Rtlf;61(Sd{}_HD!DF!$R?cO;4L54i8{hbH*@kK3Mv{K% zc&DEZw>f1f@ia;ZiMW5*; zY0FnMyFoXL{-MIVUy-kOFVcSadby;=ReGrB)Q$86E%0oF+ z#;<*LbP^;YM#VoG`-^&88z~;eu&K!RFs+@6^*80Am(&}v!vw0o-`w_%xqX4)ltv{k ziumFPbnK@}3+Ltp(`|A=ySs1yF%GJV4l0cE8%DBgLjUY@ zW!QR_&-(aOXt}>bk>4>)0H{VnlRgukjk^g^Z{!@iV<4JXvs};Az2a>%;jz5j*q= z2&YOO>z_Ji79pD;t0ubq?3!W-x(a<4@e6d0!>DO_o(-oM4zBfeQQbnZ@K>ACRfyDF ze!+QOnEA-{I)aM+*-=5PpO$i#69T*PtZdHX*6=wjv-ZH6%bCh}fAPceut<5;h_`>C z2>npoXh-2RZ-s5_*No`p?L(bX+bQcOPH55g^$BqZ&=|DA|2%Tk54;OEe!^D(S-x#{jyzC90v&$9(24I z-?T4pGKuQ8J5z7V3hOWzzCk_nQ9@HK=cc;CYCLAwr~)Y;cxAZd2T3pLnXKEBr&Pt< z&Z&k?fETGZN&;84!kO5d;dZ&=P6`vgplS^uO(Se40wyt=T}!;tm*j%~%2OG>eE82R z%yZ)b614%#@3LNf1-9Jp&@Fy5(S5Zt!9l4i5gdk;!))<4?v%ixP~~6HD7of?zU>Rp zQC{9$XX&(AQ=f#Hu7u@y;wW>{QlxQitauOW7)R^CG@G>}%80`@ss9yFt!wE@-=5#w znnF)#SN;Y9O%w?xUH>}C2+BuM1AR*cXTqI6A#Ms{cIs$KCJLq)8Rkb_7oBwzk^ZMc zOf97NCfS9FRT%mY-D8s$Aaym~bq0YJ%KYB)#K&g*7C3Sht<0^SS-~}|J-d%t9Uo*2 zAae77dDsn`DfIv#C~_nR%ls#Ti#Nv)1uDZeNcpzyNX0(F}RgyVmt8(J$7yg%5LD#J3r% z+qk-5p)WvwANcyic0bDgD6ra@2+6EumR>NQ%Xcu*ZAu0$L@!!;#d$u@> zba%2vq%{RzFcsJ;TTu%D>4sDf+Xy~&NJU>cw42g#FX;6&$MkX)0EcG3zN-{nW4AjJ zid{h8l(!=kCT$IxT%0Bu@=Y1(P1~?*b8~#1s%e#BPR$j+Ue++X`n8 z)fPlaG2Y{@mB-lMmet9WtVjH$XQVi- ze;s|vGLm=`{0fphM1M)BeBtx%jy^(QL|qHPO3Q9d-^LFj;<)l{zVTp!QnpD3Q*Jx0 z+JNAO^1YW!o~ zDK~KZ{lPzE+jWEDQ#~0OXVey5sN|}Or2B}9xDfV0u_nJ<9{NBX(@9mc#*n6shW^MC z%fHE}M91`zNzC6f>PnbV(;s5l5rP8nK>pt&RT!fR6ijKBYrJO3w#4~;ks_Xj0@xB` zd5N}x>T)|3D@q?{njjrnDx=WgxPA^V;i1!-j-%JR*10X!_sU=UO<`Yy$f3*Qz~a-5 z8E^On*?xuuud>oNl~=+z$eFQO=zEa%nvoxtc1QV;_@H!i2SV{o zqi^)R=VGs3`(((@qRHh48rMzSxnPfpW>7a<1qn^ zA1Ph>hHQuw4=h03V+F3CwfKn$vy9_0L)sFHo-YkoUq0d?q!p{DP8+gGQvvbFLov3_u`G@4A*k) z@=x}Oqt8o2ks#2`bY<72ZYF=Ns_Q|82$Y&JGQ9Ev=i-wmI(a4V0JlWgRr8vD(%xu%$pp>EtIuM6_WarRo_=P zFq2RoFih5J&f3W2$z0_W2mSAvwpPk3xC2{#bLemF>JD`~L7O9>(0quhQmQr_=r`Xf z)#&B-SISQLCi2TWhl}deYnvq5=(qYNRFC;b8C7_!J-%+zfHHRZn+K}lVIPa)Mf&=+ zOnY9N4I9K0aP(f(L6I!3F9K{XU76i{WLo_ z|JS;vaNpKMGgu0QFzBAXJn`&GPC8$@6h&Kc|HY55R_J+H=z@jpezA-b5>y%+3&JCq zu8SK-@ckeh@egk7#IswV$OyIw?`48o;{$tAVGod7I)ty`9{D^Que#swG)#-VU*NBe zah1G`>Ax&?@bJfRNK7uP7V?fYRdwgZwyLP&5z!F1I-M_iI@zV5isDkC++oe>1_|{t zWCziWy!lyAJs88EILkRj$_X~kFXE>$uCq;z!5$qwG^!$&DE;-=2o9n0G*J}-;2(9< zJeMOxp}nrP*0G6(F3}z4h*P!iI-{F^evM8k^YI2XZm%R+S&gjNg@m81{f_x!uq;~t zy)3czWPEa(SnlQ$EmOLQLtBn3Px9KRoY~Jg&iqC(pp^Ttm!+5sPaO7n`)o7b;-;NBfNzA1lfD&%YXTb zpOy|A_?EE;ZfP@@MMh*PuC$mv%~Qy|U5+SY3GZJ2f870dG}rzA2acDN7fD8xjBME}o9xUeAtMSI5y~bb zdKuY!Q>0{XvSn|QEqfBBpk>fRv%gb9px; zOD)m%{@t&(WzR{mLtc;j2ohGy8d&}R{n0;gE^#48Sl(5wx3S1~w^VE$Y;^PMbM(_A z(1qO#NV{bcrXDuGj@&_x-Brk=Gce_TgEuU4W57!D6c7aaz5Ah0GGCOH_BIv$PzFyF zhg#k|9~9D$ZVQ;ILJ43oKUfm}3i%C>(_@5*C$cII9!k+Kccc>HAQF22)9G5gkifUI zYUu@Lx-nV0HNsQy)cJ%+GGL_s@67u1wyz^tk-rZ+KU%XqpcbId9{?c{UpDa<=e$D@fn)fJ7vduy1HPihq{%^B zK=#LW`_JZhiODx~=Sc%g+eAd<4twRQr2Fe1w&s_Jkq*Iwft;bwJVpw`sHgFdrRL`_ zB7E~#rFc9%uL`Nwhz|TvVY@{1V=Bmpn7z8rJOKlee(3+W!!9uH5ryJ0DECHxZ~zY( z8^n`7dRu}Y!OD50U>ew1eS`w1LS9)r0=>EXpPw>^3H9pYyLMH2RnBDqcpd?%`CGc< zSYy`^n3W&WAnAa>LsiXlK*uzk`>(fwru*?Ti(JjbEWwPW>7NLB3xiq%WD*lnssB(! zKw{D77AQnY4+%7F5wdtZ)Mj6FtEVazr6~WjlnRJOUR)elZoz{RaBO%O;Ckk_zzit$ z)Oi4$NOO9cQ?;#K+Ct;6CZh8f>1nsE%-h7-dapkKb$Jd} zQ{x@vtPcOH5!8>3$P*^2AQLGECekz4n;+o4vD^OD+&z4llKD%6HHXEIpfbXelr0zQ zrvO+(UQ__NVDAc~UhbvCVeW$ktkz2pWgU>br?l_-N)|vFKEu4<@j(_VTN-49jLL_6 zlwQ;w0xmyc-jAj7k5)z-5S`|Q70}OwMfFumm~xTGQOrcp6)1}}Nh-UMWb~r|KZ`Iy z5eE7Fp(=o_ksq1lG8&`aI^Dbt zpo~|LS-yFT9Jnn(;bh5EILN(}Dhpw3$6_&_eviz4!NJfc2!yT^PJqN$5j&xrM?0U1 z7upks;9XR&cMdYjo-gY~0*FLKq;rGf+#T3=a?F5kB;UJzdv{X;z@qtbAqJOxQ;>$?0uvy>h>#+-yjgo(-Hc=dI>u%z>(S>VSGEE)ljYg6Rlpu z72AX(Ns7J^p!B8wD*uX4IRTz8RygDg9%WOrthfTi%MwOvX=eqLnn&0Gh(^3%hd>MS z5kOv)NntSpBlXpk@G~}O6;|ZS{iii(dblxv0Mx)Opr|IF{4$b0wp|Y*PJNYNt*`^< zkLdDc__#&<2~d4tIucY1#ia!eP_5o9)4aNZAijP= z;*yC@XHhj~w;j~e*tLkw)t5n5naBaaTXqKBI%!LwIo^WQi-{>LBNoD}9R1l!9zgjz z4T?fWO+4A;pBmQhJlq3fr)|yt*cZ>R5m5SA#6|FEPs}!oAjF*2gq`P)SAoS9k&3R` zEQ@)~qkkG^f1ZoU=VtJ$lWYZ?*c?K3SGpN2IDf8mt%=N}E6@rHWjm`|K(digX!KDO zKqQf40MHCcA86SRiJ-XNru{Agex`E`5yk?-bb{Z)w@xd!8OPJ-?;#o( zGD#W3#_^rh=XmQhwGUy=W}4!7*a5UCM<5pgI0e$*`93kFGnitKByDa55EXKrgT>w{Ww0M5^kx5v}i4F&H?9%_$T} z1V^s^uSR>bHy=L+swW|r&n8Ksg}jh7cy;JLKxXB`mX~08wL91Ywtxcv_gwdH?O@wr z8~fGKJrSnWJ%RIrMXL#4`*YnQnFc>&{m`}n$Fi9H7{tg$7$gF0at9wx!P&(D&VjkF zNgjPiRvw9G(0s#6_cR6#Bdav{G<+J!@Kre0)AED)sZJ7xymrq>f5p7z2p7dZ0!@x^ z`(Zagh|23A$X{dnF4e%yUPpNqz>n^JVia@yVMrN*oZDX5d38d|a9A z79{1Y@nKT@gYxe=f`OI`_4mGZK1?CJ5bNz7Ftd9w>yj?3bWhyjqa{W+-ujuTz#j1I zC|`zY+Wxe51CpJoQ_>JInQ&t-?AlUU|!_f}Xkz#vjST z)4sI5I!S;@idEn7i;^cZom5u3_PYN7*>GmV4g9gXprvkSDl9F}W=wZO%{!!s3xKgg zhaGT!wL3{7BeeGH`vD{A4B}`VemYZb%*^QiWw!APVev%0ix!dU8V?ast8e-~rBGK_ zCOlzE<_tTAqCZ~=o5&*sh1jvA+3V~Uj)*}NkxzFZs!HUAA19$1wL-}gm$Ulhx{5{W zXBHtfH(RXRHJHvw7H;+Ge{0c)BzN4sdc$iBQK}(kAd(Jr`y&0U&w#K~sb~&%ugI z#c=Hqa!^@cO+kxOf`&#NNJ=sc8A?$Ie)_{S-P6ke!VM2e(o6>2cPF)^(~D1jEIEs( z!!3}N_w7+VYG1y9Q`6#LCP_$b<;V2u0mw*Pl|kuV>nA2oJp^ni1I>9FiJRyV>eqFx z^Nj1RvOS2_eE6-KvwG99=A?BrGjejtS6|~vRXV&$yI`KQ2S{L!KKtTFh!PDFyLO(T z_IZ!X(=q7{%&jDj8EP3vdLXqDx_`$zeyf_XiT{%I69|j6rqVO^Ii>m_3dtq1+!VZ2 z;dfz15|4ZNxQUc1!3^JsDXq_7A2>|j?zai(DFLBRdtcqowcE zY5XGm6cB?YPRc3o=6{T(UhELGFb0{;jP1_xyWl7YYOPU)hya*60)h2Qo8v$N7xZs| z%SHJ~fRf3rzvslxHbRN|UUrP_;~tSwl89;LX<$P?*G}SAnzjc!qEym#lr9`t(xXrA zP)igf-lDlR25PjHVe$;E6|UBh&4ubkshL>)2|qL&^|e02QkQtdzf&0Eif{VH!uN;r zq!(8i*XC;r>56EKAXiOWOCZ$XIu&gKo-LJ9=t2ytIr$We`sDWvo=3n4Q(js^Ez?mf zD-D%`LwP;XVm8ln57Ern)o{#sn;XZETZfZ$|8T#S2s@b0iqn_=jO-6fE!X_=(%GAm zrZ}g#2y-ddEfB1P90vfawB>WMH>D#JArRojE|zA+IhBt|fTRE7X0DzklC0zqmb^5m zX&Bg1Hgr@^jkB0#aZR+2fFSBo2Le9&h`z7d9Y>ss@8tB%kFJ~1=f*`(?kHbT==8*@ ztD6Gzp>h(K2Y_v>p~2D^LSc|mdyDWVz2tn^{Zluo@WNr25j!T9({y1*!XDf(zt-RN-{}SFX`J9$N=`gqJ4eobZp=$xIv3lgT?N6^ z)IG-1sksEk<7Q00WXSfo=^@4h{lp2UX#6y6J9ILCSm4Guk)(OxPV|>Lzd~Oz0FzX( z>4lcEv5H@$Pxjn$4x7H`BW`wFcVu1!cekW%z6@voHTWbV2V#2O9b4^3EXYpUc-aqj zr)UuE{9kqF`5r3oBVlVgqE-YgSWBh!FcF)W=o-T_C5*FB{A<{+_kMQw{OgU!BJxPd zp@?KJa5vhe@={E#*SIW-<)GcHBSwvjy3zjyrQx((qR4f;T$G4iCH1RGdXLF7@tj|+ zIbC48elbnZnzCm5^r@CFOO|gVuZT<59T`u3GS3E4?6Uw|SUFe;XLA*R$S&-fFbIZe za(?H5dyP+DDJ=<-F48_>knXqdO} zPU~YyiIh9;WDS!mZhu8^!;mYk=d)A^BbZ2unbbF0?tz>TVS?Mf)nQ?jMl4f*D zhYVDD}`zO;&W0=gOXCkQz$7)-y#ZJGylOv*GC=)wmr>Vd{&n5-UT^jZgeJ zzB_jvzdsPOGLmZGmX;=KJ2%i@jfz0>4ZuQCEGz^65N1KjHy1WIERy@bUbv&Ffk?|D zKRq3oEoo}z(-DL2>%wasvw@tI^rr2H<}R%0R^>{9u2p^{j5MTd2HDK*@nk!N8wN$Y-oBlm&;)lxojA-)LyZOMne zPp1)fdTeTw$ZZ3qSXSDk;Z-`}WKoFpSn3KFY0G>irwBg}Y^2DMj?i?VLfOvL2?SHe zQGE!ZeYz%rX%t4O9eTGTf{~7SQ*x;V=Z=0-@(|tA1Ovy!#(<|HPK~U&0Ci-N=kDG& zW}9d75~J_tYQkvhK_Ue2F^#Lh*6ta@`_x(8dv$J2pAU7jIpFz)AD z`E2%Kz3?I=IkLWr^dDYMI{Q`1ofNAw{0=dZ`!}9BY}Em&&S(?=Yft6;9n^Rc-ck6( zvpn1s9!ksPW`a73DRlA?iv0nLl&w5nNr63!bcdH>Begs$pvH+4uefbk(@yLK)dNH;QH)FHl{+RJVK9fnhh9>)pJIfW*e26i0$c?rHQh z2s}q`%9l7&g`h}JNA{p@(p55SO23|;d)UF%d{={@{z*H|Z6$?ZAn?;YQ@D7hAu5b9 zbO+KV6!uJ@lymtON(#UASUu*1b1zj4bv4?%xe*c{lu3Th15^QT+s;$ohk9iNfP7ij z9iXK4EryYx+w%y2zuJvG9XcK9%mP7l7L^^abm)jyI!@tGqCM4E2T8t!&MCh4eFiGY zl9mOIZL4@8XUI5ed+^Cx-pzD6=d31Dp@&kJD)%9<&7N_Rs+Z#6_`u29?4~3jaZx%I zM@ri%_Xm?qs5>7Xoz^_1%zBo1kYM8VV4+EOk-#*WQ?vng!G64-so6If5>C)ZrI1i5%rC5q#VKAa%3)e^Mt>N zl$y`DYV>7B+H^+)+Q|$!dFuYxmi0h>$@NyesX z+)S-udDbKXG^tmn!`}M9vfqY?gP!9U$k4>j2Ci+bL}63u2|Df$p{E^%xtws>_+qno z%jWi+wqx$dva=)&o?nQ$!sF_qe*L%BL>a=R zAz>rY-iyJG>USe~(Xp$fYpQiTnE}+cj#D(_2)yp^uf^ zGzz4gP`c^u=KSnjA|mY#5%>GT`IXllKT#)4ww^gp>4~Zz-?cxdBCS^~6;#!TRwW_y z#V+W}pU$=NIZ#BsAIK7DvK!}hD>NWsQ4vJ*vvAvtJHLL2w~-t!c46*&bpI}XMRq7v zQtBG#{HSrHG?`z(kux}IC8yT!Q;Q5wnBNZiLP_!=bEM6=T4WSC0)7Ux=WEn3ZhHvp zh2+Eu;aHR{8n6RFJ?5XwVb>1|{zYi$xey{BK_e|q)whS^_}<2z4iP0 zSCSaT1ZmSBo=fq$c$erB55Xx>!xy%_GDlc7XYb zoaZjSx8ilId`^Zd1Sgs?g>ZG&6Q#%t_2>`dCPvg3R@HEb9_(AoluQXw7l;4>k~ryJ z7Vg>YV!flRn{F>u(AHj=^Xl!zSDeO;Dm5xYrJt>8TggaTY*>pRg$9^dkOkSGhw{M_BP4f0gBbJSrgal4#oTi;imb>L#CzEKmkM&{jom+cE*lh-w)_zjl(7xc}b{{IjVjb_xz5#_}V z>}{(Ra$O}fnMta83>X00U{XwV4MH*|2+QT4+|3y}{Egi^{p=izXYMnwHKj)1ZAgwj z;$#ye-IO(g`K;A&ac^o_hvS@kk_GEMKEcd`)WoOsPoGMi6txn#Z7aW@7x=*ahZNKl zPVU0WO(Lw*2AQSA>QipBBu`F zkTFs}t+r^O)JXN$VvQ|llMUjlp6FryUOBsvf1s%^{K;orcZzp;?u_E)3sF1!8V6VI z&z5>j2q*EMd6!;asz@p@U8dc%8Z%vrl`B75ZFM@BsXF{Y)XjHB)17P}Tcx;FMKYkmvof z6r{OCd{DU?-i|)k&YstkQmU(J#5^gS3`|deV13G*wIq-wNV-4%90~^1M7?nfRd?IH z_;F<7DzEXk(Q<2gu-#`Y3EshDc{BXQ7k?5C!6q52odj-6Y%1i1DfDwrvZNI~I;``t zXD%-z369yy^_>l!N@7xBmL4hr?@SZbalht-Q8@mD;fro_v7A42DOs<{`apqWst>Xw zH{>UkV`wHg%RcM|Eq^;?`SNvxv@#y$FLR`*dj({2I%ZwxM)SX9TZMB?$8&ron_0dm z>_(VZ^X!^$wyBU?@4b~YD70B0{JMeCT*Ep_hBKGR9Xs{CQHfRS9_ywW&4CwjL5oM@ z<+5xB;Nr~2tS58rH9UH{?1-8Q#Gmh9Gg|YLs6=fD4%5v7*v?t)qG3U7=}5#@Kpy2a zC;fYlRrpCV=LnPalXp&rYcNC|Nc7E|pUZ!s+V!x?Dd06xA?Ieu@}}^aa{@OrajCUY zCzC_teK{}Gd250(M5DJEwacW%U6~Y-+)ERe<=@oL4(30o)MTd)QyFayC4O%(t$cs0 z)-2fz^s8dg5?cQBpM#23RPRX=Y~YSR*qJ}B;NCIdz3l}Q5{y9Rg`V@*?Ky+yRv>NCcLmnQ__@d4X=HUsRk&K3#cxU0RE6Rs?A1qBx=uWCfBWtwSA z@NT<>-lcro7oWQvyitPEce#+fmPCu|(08X<7?XCqU4+_S9b@lXJJG8w6Dm)R8YdTi zC;j5hL{4+e(HPD~E6g1hLXx5Dco`ETn4hfJRiH3h+}yXL=NZ9xeF313iM49C{wGqQ zfPaVk2Hm?$DVXi$qpftM(gFI`LWq&InUF7ks=!IYTh| z?1?7cj`^VcBnn3k&UZnggWYTg2NP!9D%fIs#=JS#dfp0q+~Ve|WWQh0a)=0S5GjW- zhBpWlX&c>nn_4zd=xtH(#fD4k%bBKcz}4(dd>p=jliyCpDmQ&WIcTNLDu9>TWni?^ zk1yHB-|88*3#&YT>zdQ&VUuTLQ${|~=ZRd=@iFgCP~X!RWAb_9-7+7zAc1?TQNg{_ zDtjkdx1YV_BeflY<(;>p_|6$~c7>A4tWF{ZEl{KUQW0r6)#4XdS(qQv+Y@dEr5t-y z<@o9%P8B#Qd81PZ6xvG3h?LHet+Q<*^6g*fTsn1FyCW%{3`riZc6&2d+RkuUR)i6k zCrU&#OUL}#2b0Sk(N>-Znw3^?O2Zp}c7PpNUa3;KkDezGTB(}Y^*JWpJJgm`eX5$@ zP0Y1R#JyVXGxu$c(Y0uVCPo3~&;Jr|Bg_+Y`Iwb-W{0IA|0^kr95FA)mFtH<1ydFY zt1F)spcy3Ch717%rK;XFeGH#F>K0*Fsvdap1;w7bF-SJu03;*Q#E^aN;*vu_gXEjO zTC=?cPNDbX9Y5i}+JshMtiv{V{ET&!cy!gJR*@MJO<8HzHN{F)T4o?K9eK;Iijhl& zZ31uHGVgTY2N}9;hBSgYql*u&v3I}dn5WQ&Jl>0Ok%1=+l@6hvtq z>dOL`L7BRlf8}DI7gI=S1&y+^H1bL{bX> z#Y8`*SOYc5 z9yRwROa+bAq9ikY(n@|U!T#@8tl3D$&kww-Mu`L01}v+Q`0}T2_+Kh;3i#qwwWGfB zH><0y&( zdGwmLz~tj&%nTLP%EfF%G9qj)>xSzDp*LGbAYV3vuUffqQqUa#+3IN%Ev3PCWVz=b*m14jA@H;ZdhV`)I%9?7%gH&99?gbT zO^gmG8USCn9yAFS2SzgAVH9iqC8v zkm)!FNEK$xy}Q#~`9bAd&V`i#Ay2=v_$4u#4EGD`_!I`L{6+ z9FFhLE_-1@T-MJuu<;$nzOJFMEUYr#Hl z(s5`^&*;8)dfeR6culyeqE1-4zy`gbscOwpyEZ;sF&N`Tg5R8t5?@PW_ZN>9bOmWuSV`O>^9pj(}^>?>x07`b22( z@ovn~+Y@+oXNW8tPA~*G8Q{1!haa^%UYXglFcXN)NVLOwA*x2Bo8)L4<8j#!5*?`e zjQd@&G)8a4>M-;jXD=7bwA*kAHphFThX?LstoF<_N6p2MUmd5tXg~JMus5Lj8m~$u z=fus6s9nA~wq!Km0+rC|m0Yt)s7RDozlc_yy^|OL)2igtHSG4Uu1)u$$fSZtV2*`H zz6b&&&o(J`<|@xk1^eHZk5GA(yrw%TXd3wN0^fbjOD0hq{tFa!MW?Jb2DJo3ZYdpB z%fkqERY?@i_j0R^V~rneR1RN0OKqQxUV6Q^@Vbq6_cUT2ZAo+gojNNK$TFL71m z>X<8jN3F2VoKhHdG(u9u_g+&kjDumO?E21-=c!v91_yeRf+Xi>8VbE7Z5^uyE>CQN z42sQJ*VpQ|2b(Ya2vxIwgsSnFVaB^RseVB5exjF(aE^vOq@^K_J>YhdJ|q78+~&js zDh|D(w!-->qN5(G^$%178S(V!MNFz_^v7Mbmqhe@XBP~z*7DjnhFI2>e09;B>p9c~ zQ|d*a*h8EyG#(}4`$UY=g|C6_gjdgvnDy#uif9vGUB|amZ*TUkCe^ zWkbuc-q_}~fMSvnkovR*WW{9w1jC?+pzpohj4YbJtN%(rUqVer)?E+@gPKTUs(TiY ze-yqSek1CRNEw&Ey7S<;5ZZ*0k^?G2#fDo&Ih)GNJyj(aJr@YaA5jpLj$lYroIc94 z9yq1dQY!z3O_FnO64Y2;%~ssCt8xucXa7HBJxGo~Iw@pyG zs?2II8z~t=vnOm3w%~_m3gR`-l=6#JS;dI1jiB2v zwS=F7OMm@&5fOQixW=Zb1a)|cpH3=&*WrJ5%MZXDqV};8i-Mzw}!F8tgx`TTwqd0aNW{5`qcn`GJrO<5d4E9Qw5nXpq7Wwkp9j zHb(_ye)#`DLe{DM4fp!x&b|otl3q?mym*ocHgT+<;8*M$f7OV7=}~DaNx-v3Q4t^Q z_e?`}{h}Xe+yCo@!I_Nq+Q=+`-SBW{SqnSD04&b@L<$iV`}3!V8s@1GIyap~5!_B! z!SeKoh&tke^v93Kc>s|0AL*-$26w$Xt8{X9N0Ksr!asj)S6}f{a6hvnW>f8OTTVy# z$D&>~+aaz_Xx#{iT8IF*~Z=U9&viKO7D10jM$48DL|7gMI-0l+p_<+De zP2wH-nd6Qc^nd-=&ud6An#M`xDA;L2m@mdXNjcJ;@$0WsiBn0{4hbJiub078JuYK& z?aZWBs!>rqf))PJ*OKN$ z98@X}PBi5ijC2g8Ov1nJ_2a!gNIh&nv4zA*d|ahR-n#dRB$fK(d+NV^7ZoRMNKn;r zRUSEtYC3pzZRcwumoF!EE!ar-|M`iSuP~N|bf|dymv-{uCGD3as6&`*i0MSAp2(O{%|reLSytY#_vuUr0i18%s%UyZMQUe4=PLc8`6vp>Ex1cgc^ z43S8}ffi$e7cczd#We|b_cj)mMoXc0mC3x=56fqeuQvYf)DP1#rZ(|M(0B zjHNgGYinz^m!B~zIu2z%hE}$=xq$_@e*R}?KpfJCX_)5&P2$;gTs2wntR{J*Y3SW2P~i=?ic<85I2nKT`JZ1=iTz=0%r%d5{IK@j7LkXV{$B4B+Di*Zn52t^ ze(&4e+f)=b!nF4i#$YIEwr@_NI?IC8s5APp|CuRN;*+ZwHYW7gsZGOdn5tgIO5G-> zI-%FDXDk2KYd&Y?I7}_GLt?ZXUE*zj-K;Zl^nAQsk2LnqZ+8>FqkG4)*JoK498yZq;u)%q zy_TDfm zz}=1~mfXZv<@xQR2bvyb;%#)nTn<@bOb2Eh@O`fsxw;l}Dej%-$2l!c@s+yi{vLwqHlb<61`y8~upk z>ofgMBx_08X(Mx{qjwS92?u#`COpiW1UOfee8QEC+ zKZjCn=<%qgZe!WNnwzLp``2qDjh&rgBS&?^fBV{=$XZos6SbR0mF0yP>6uIHxsFTI z^ZHk@hK$6%{I(9)zQIr=5>%Q5SNEkT>{QiIh3;s)oO>IR>HqqWGafJH$=M&;M2Jq> z63VS;F27vzc^_<>ca>L!;n(r$@ebaxjlm*7Z!dV1G34vw^>4$y9(>=ZlKa%^4S!qT z!Lo*VY+kj?&jV2_>hmuSBo92a~SC( zGMciff4k6BN&H;Dro{QhAn}h^WZu}WHnPj1|8+N+I~F3J)T*vCS6K*Ss*YCrMd=CK zaa>}LV5TYI{;gv!(dCg`DSKrt)mZ-UCZ;O?iEiwdlF{T5{Oke2w7-3K28OwQ1U9L9 zS%tY0)fP5=`>B`Y3D2&PUy%Q8f;3{7&*;sJ8BBjB!*}+zMv==zYtJ#3MG7 z^BLMfzYSSS`Vbx#=FP^KZ4Kh385>O1Q+@Z$FK(@_K7hU4>iI(Xub*=iLzbk4q8sN$ zP-S$7RfV|O_}qN1xAfl9($ePFuW?($c=N0bCkcLC=xXsW$|Tfct`RilGN^yLhVF_# zBgd;z`{9X@y$zW%%o~9us-?fgH&mRD zA9H;?B6I&f5vFP&@!gTcY%CW|e#{$F_LrZ1AKyRyTaV$txpHUurBR)UfXtWkONKeL zAs?TA9>lz%U)T}%@%fu_xnH`&!y8i)MQo{)^N_s43imwyhXvS&ts~BBF~H49s?U{t zkd*ue$|!}eN}g*){o0yX1Q)TBF+#PjV+~(twt6L=!M&IrS7AS(hMOiSmN?*$X|_lH z>%c6c$CrG)dUM?U+tHOqb}T^(B}Vdazzj4tgGmL)>fTn}thyGxk9B~tlj=q4MMFov9e{dq8{H<}R55xsQ!+3u4%vDx&#gNTvCzMpGXNcpoBAFz7tKKdG^Bl=C$-M_o4pYMD)>rERWJnWj_8LO?hnn&G!w_cV0bNUH;;qpx*xJom+~_BA`8JzGO(Sn+7=i+3$iCwGS}3LU@SG z-t_X7N?@eVD_B?HHEO9%5gk`Awb_yXb?Gyer|R;=akUoGQ;a07;J`@FU*7K?Xx#9t zXH6IAx3OsIi{`j}ShBIu{mgx21LL=0Q^bL9a@p&~i5bJG8~b)-We~iCX6~0*P@^-p z2G8Kt@>V?Miimf8?|&5=r5w-f)AiTB5l3jcXjx{i!xmZDeK7^4s` zj#kF$Id|hTD=*<5d9Nnw`6)K1`91E8$(Az*dDhJ`$MSnsB*oH?#T7BuCSs$$rgC7a zdMsJJ*c9!?E@H@Au-Y0Zu`4=6=l9r>=Pwky&)_l_rd=8J9~q8TSNq|^Z!VQrpGxWcX)=PBw-2yrGIIFkhjk3K>zfZ?@0HPLVu9?=q5qG49uGLi`CvF-8Vw zlC99~C&xd(QN&0O@+;-_^`nj$R-qu)y7_C&mRDFikUv)>{4nLo`@L7pl(%VDFB~~? zVpV=<*ebyy<7|wvwZavYVTac%* z`#UeAxfuq~Iwn5!BuizMK%M=jEqEPx8VZ8IXU3fRujkgE|9-wqC;*DRVew)>OELG( zL)4`~xwzjYNg4mB${k?LQ_9$|?}@AJ3s8x#afP7z6I@?w{Fzk}FC;R}6rk777=BdZ zGztty`TY~Q7tyc5vXi^ei!g=z-Qr)g#($2a;$+yf4+Bt{Q5T7Odz|&)aJn95cBf2% zqvmvbxcS{PE{>l^}+zENj@#cxy zGX3j-e00H#;MFYKOGX9`0Jb~H_m|yzd6xX86L<{RS$brER=~fG)B;DFvNVgynkn$ZIULO{9xmk46T5VLEgMpY4nFV6QJEf4sY zxq!G7>TaNW*&E57^S#Ftry&nf4tJ7G-g3lBhJ{ebfRY3D}|5@BF&6Q2Q`YR z3^M{#YYfo(_5VRR*9f{GHhvX^OPBaqoZ2E1o}c>d%NEg?1=37{X0~-*ta+`F=0%fg zMABc8KaR(APZv`=x)$ciN05OY-#pPAKsxhvb1B@iFf2`}6?^2jIpCqJKt)oXw)T*5 zrNc80^bDv%O5#{06matBUs@2DUd7P3Uk>#*T>zUXSn{dFh7lG0J|z-k#P4rAb&5

44nXt9S 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

5y;x`{!kG!cX$GiNZ)dqsDv|&3pB1E{S)*w90 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∈fE)|L0QGO*B|K}WbO+FL`h)Q?>c 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�X)`3^ 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 A#{d8T literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/paymastertx.png b/docs/src/specs/img/paymastertx.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f25936b8ddf83c7b7e0df8724a5284243c3814 GIT binary patch literal 106992 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 Ud+j%cvB00Z3L5g2cT9u-KR3*5$N&HU literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/retryexample.png b/docs/src/specs/img/retryexample.png new file mode 100644 index 0000000000000000000000000000000000000000..6c79ef63734067ff4ef3d411a5012ce94f2b3f5a GIT binary patch literal 280184 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

-JC2p-tOzmwxB1>cXv3BywZte(tD9=j zsh3Cqwml1 zG5}`d|1wUbD5@AAMvk9-~8T5MqH$pcZR(2hlm1VuQ z)vC{o<|2BnTLp0GzeNcUhFGOl64OynI> z$zP}{>sN;_+V1y1)mlqt(uuq*_Rrtxb4L<-wfuna<@JZ;&5g#(5sgpOANRh>zlN5) zKA0E~qXYj~^khB0lBma%KoB&@FsjE);FZ=jR72bsn$+ zXVWFYwsXrH^g{V0M&6it8&on+PMK`&eFLXwyFtuC)8u$S0QI^&v|cA7*sfYBk6iRo zXaLq)(JDdw2LTc#@K=;b{j?RIHn;A9J^E9&_y# z62t5IMIxHxQ|@qFr2LX+x)BaH46hf*r{3{47B0kh@m6xa+DG#p0Hb0Amq+}w_EDjc z*6b0Kjl93_)4wbHmh7Y+h)m%$&m5&v+3h+ z_!GAZOW^4{)vap6-%&+>_k3635y~IZBPx<4@>3aE1%)2C_w-4Bal;5>dL71l=6h_b zKeX(*o;1f-ZS|kr%OcHH?|Md5?YIVak57c-5a zx9~slvlqDcS@l(TL;PZ2f$*mAUj`LUUzes%3|KmeJPOwxsDgA*sCj^4T8iYAzbVh<3K)0n~IrCwx9p#6IDf%aE4O&s-J{=c4z~$T#VReBl0**4ZZnwl=i6F6u)h zJgM2|+pg&b*X5=uptJ0L3PbZKvvxFZJEgY)xlrL)-h3)k-Xi$vaN2e^bqRM}C}u#b z*+o&h-_t>!SXKsLdS5${LR~x#@1|wfv6zjwQlMEi;Zt79(PH=tkW?sigFMO&FlpfC z8vd%Of#|#U=0t%Y;|A$>Knvk;E}rxI`t#~!l36o9l@E+2kK;Ue+NlYeQEtGlQ0V)& z1c?UF?PWNhiCoV$F>S+RYIj!V+@(?Bl9|$4(ctP2`=_Ut2YTu6^kOO(s}||C1{5rP zDGd49T%K9|p(`wylV?2DJOgsCfu#|$1(u}hLJVmSDHw=O^_7f#C|KZie`be%kfW>- z+=q+?uXoGNOSduvaas(a#_>}3HO`Na192?DZ7??iq(AO9NQxG!p`RR1QuMYqoG->E z09Q1lx{r0BqQ!E2i|2LdMN^s;h1&PrqYCihsV zfTwj&8RJ%K1kVx*euSpWEwn61nr{FYk}u?_x1S&}#joGZA{a zG%pudfbilS?RhDoh$%k7j(VvKOEO%flFuuhMBFc*0dBVx)*>?0S7?dqgn$D~&6R)%V$cuc3MP^$zJOkc-MJ*iZpSAw7Iu%M@0LZb~h(QmLScz2QTRF zp{fOd&&eh)a6g5Sg#;14mh1>?KP5;J0XR<_vW48@fF{DVp_`1u^@w=blFd)%Qb~Sf z!&$t|X?7x(3De~CAXRFIg?yO;z?n=t?seZ0Y;k|OZx$9ESN!lb6J(eBn6E${((;jFx?;8Zp+stbD z*))epkQXX9F-xCczHMH{%>vIm;<6cHwNI|v=$hsC1M6quQNOzDxJ1d*8%GGtC&~i4 zzzT78Ci`@CQuohidJE5!vdo8rbUYi`-=FN9!Ahn&fInxLj{JbNvTbKlTV7+YYb3-8o!HDMEJG3o`KRB+HGket@xFqdt zjrBzW&Xy!Gb{ec9j6H_11Gw~JSEyKWm8qQ@MdTXlts@vJGEu5YB}p|tZ5oyHRW8}q z$Axm+pt#ZV4lb`rQ5m@-$yREr>jxL^T&dl=%FX*mov{nl-pg?AaLkOINmtctUuXbz zMv8X?%7F^4fiysPhbvU+&Wk_(eADE7RtLugkTWAKyRW+YG3qd~s3Ob_>ntZnLzb`5 zf1}PFUE8Oc(qyB!zyS>L-ebINU99w#R;jD8PEr&UPlSLXmx090`H9ltv`%E7$e7r+ z;eN%!fg$ny7_D!<;+=)eCzXzfH#E{V?GMl9`I5RIoxq=NwV0Q(v9ixZZjTMEBkDK6 z9aGG&*8qC0;BeGM&;Z#DM2G(&4k+oe4o!jxjF~*P6nK^xn<@vQ^;+7k;3{=Db9=c7 zo74hfGG~IQmnF#e8-Bdukt68ckCH=%bR*Jr=!=T*z7jfGv6S&Ymk>~Z>`&7Pk;B`1 zU>+wgd)(|@X3pLwmxS=Hld^8aW>&d19U!Z**#HThXOHrHLHts~8bb&)sZj19Q@SYv zr&h^+E0gal=OfjYYH?kx%9PNXz$`V1KyiHYYe<-g+I(kF>b0RB<*kt3>ZW$?BX+N| zR8O}YOXPduERR8})f~qum1M}_OM&~RP`%M6ZWN5HC>S`{Ix$yyZ`yE!_7+vV2z+2- zQo3$|m4Dirnm}q$0$65Ic4LUu?e9pt80^XAO48?_ssfRJ2?cRR4x$vYo zY3u{*goPyTwM`Xj+Mn~`KpZU;eF?{tpdxiIhGsO(Kpjq=Ea(X~>Fe~q7o~k`Rp`qS z*``m1(Zst_A)vF>=2@pmk<@$nBdScRO%N)%ZU1X6Z{PXHg@uP%DFEDrLuC+b{8iHX zX}^suNRS}BRE$;w1@yDIVx+ql=CcT8%ML7;i0$2ylR~xke@9$&K$xqkO0mdspxfq26atOm`$H;LDIgbnQaiK+eaGO();qJ7g+_^c$ zzsC6qmZeuk4s>km^F4134{*N%XS1RtM@!!?UuN^a#zkuR6>02RO>rbak_2H)Tk6aw` z(%YXcKYO3W)>{6$-Ua{86`Z z)!gp4sFa=de+#QR`=>wh)e66R2p_zUnmc zciLlza)yyFyi`R?-(w#J$w){OGxuch37Cl4;*r_t2XMm1H;)&vNy!+5uSe6QW2h4| zxd{_Dfl2l595ek%TFo)T$RlY&{R*VqNI_K!o*!1)q%S$-ZZd9G*&2u^n@(;o24Btj zXdYH$X#_{Ko22q-Q}QRx35k^9i`Z#iSbjL%OrXh*HNYsAr4IysECERAaLt=6M_w+R&EYX7@cp{&y+Ine}gBa$;dn4@ON4t_a%yP>)HR$m|4 z1^fhkxdNaPjx8FE1dn#7SdXXmgjou4E!d1tlmZ8>GFa$QAsvmI`6jC16TD62Ri?%4 zq4-~V(@o=zIwM#~%&z5BJikv#qfQ}tvDuUBsMYh$Rd4q}SG@_>1ICi8siLbRIu=gK z#&S%QO4TiYXWM%O6{Z*R>MSOO+xmcSS{CfmJ7596gd(raCVOe1yIjM+b)c}jy0zx~ zlhsA|e44N0Vcl5M)aierHj$hCi-BRP#l?PLL>aD)G?puN0T6bXb7d!1mOmvOp5C2{ zV%OVIlp5A6N9k7?W~$@v3Q@2o;E?G(17l;Eji)J-+Vp*?PJ9Ezd~J4e#%VOc znKT+r(CoJwNblL{0E5>CRAqxXeL^hp4Y$YP)0BF99*Q50 zzZnue4;3s;NgpmHrfrvFlmH1&m#GJNINoc;E3Fl2I#y=Q^K-cF`Us@}c_k6r^0tGZ zc(57|g=68P9&?n7&nfzW}yjpXF=`h*!}y>;+gB!0nKf*=sSFPyutKz(mFHQL?+{l%G}dwKJ98h zPU*BGS0M#>XMB7*xu0;=1ydWo*f9ssQ+e24gK50(eqpKH0?xMFV*3;M)wl&;ZcgxK zcvpTkYBV-Wl$h20BlPIfB&#@+_lCk!f{S%7*zv2{BSk5BbM|8pefc!e8H^$^Bpl%= z2)KBOA7O6F^df)x6l<0!=Sb!7ba8s67fx}t>9_n=Xv%)SIfkSD6h8sVTyT$_7*-XQ zM96VCgX>fxVb_<+n07oPpVO(N{@CArKa;4Dd*JI@Y6tW(>G+L~xsq~?Z7xgsCFDZ& zL3%iQZ7+@SO_nA}YaikC!R9L|hvTo>!-Ux5EoF|DRp{TuDTBK>U`q(2sUZV^kQ5j+ zA$@D;FV{%laKO z_P|vl9jj#yMqc_Pt%^O9@%@K*;nn;l zhhhc)g=d_#sVWej56fF?9io%uA^&C z&#U-wZF6_Q+~mEhqP>uDd^(O0nu_?P-pA%i8#!NiJEp~%(4T=N^TRI z1t=+#D(++sL#qJe3Q(x2qHT^$%YBeNp%;cfj{Xkjcdu)Do*`A1A%2!e)8_i%QVqU# zRmo9}DS(Ks(-}**`7rR&CHXfK=h^TLb2a#T`w)%oNXgZYLbnf>-|_13`epX<|A>Lo zNf;pd`_scF>vC7e5UB|U;L134oZaDTboLa@Fc47TS=lgK_ht9M8$g@yXS&`YcfF}~4YQqSF+rPB!K%kKkK zMk9*}rWo4<)9HwxitG@LiVjAK^l^tymy^@TEgwajn%`Q+Kovd;qBpP%D@jbD{dzo2eUPWs}Isr{tR&Ijp*=bJZc$oB*nVt25PD${SXHF6V27e zlT+J+h+0>=>n-5oa_j+OG|J1f1S~lIj<;U?8i_Fmn7Kx3)Lv$^(8;I*N{W1=wc8>^ ze0mn{4WuDImru1CC3o{Nm|RIqHc`xS;jnphH;E;zU)%)}_e=S##=Xk#&VEd@g5ZM^ zvKk9bA5`|swj3$?R;!#oxijn5T_o23ex%0U`lcuB6ATT%o%Jx0cQMm_ehJ^6nhkJg zReJ@-IE$uou$3&8yQo&pa9xe~?^xBDW@};ab69bwXSC|f=1K3J#&AJYIK_6O?l&Kr(tA2qojG;`9v-xU@ zi|n507U~tfHtMZyxZ?YGFe%%uFvQU-x9P5r`5G-^N{ekrBV^ZKG-LW7z=J2BUs1$< zVjSH>7r^c^uMb-sTrdpXQ7oE?Ry584pQbcu}g?2THpw9Pk0 z`wgX^!ev>qZR zrQ`vJPv#DrjZx9D5oP0@hV7V{P_EqI*~(IzwRaT5JEcbyi>5x$r&w%jloJiyhg{A+ z9h2ur_!wTH-)$J<_fuu7CkrCrRdPSqTOJUZPhsLV!3n6`muiU9s(}3%NfaYSe}yNKj3qXx zx12$vfB+a3KI`Ae@>Mn`74On2kk&0Y1pouYm9bs#1`itQ^Ba--YOOEgsRTpG>=b*Q z=9*oghmYB{ix2kHQEx0za6Y0OGdW(t=G z6Z8H$TI_pgJQ>$>_$hRrz77$+u;`hs?r8jC9G+*XeBPcqj-5n@Qr75zdt2$O@=&xp zF&uid(k?Kk79E(hcc^~#y|(XNmHz@eY-7>2_`S)40De;szT`@ib@WLa8AtQb0RN4# zgd|&;cD`gjZA8OS(5m|%U06ewwnsH`)yjlv1C>VA7wQwf!P;>BXb?jpCw^RFE(E$wBkbTK79wRB7 zk5o_hU88m!cUFFi#&H@82(JB0B>&YtAc2$)sU1%ygGZ1-q9{ z-Efh21HWp!=TWJ+VE1Z2EdJhOH0_Ew7$&NFT5+k#ek$PUS%q9_;4A(G*x?}%jc4iD z$&6aC7jXWhP)d5RC{6<$%<-&lR%eBZ2Er>O^DwBJxV5r!EPj|OX%sUmy}6KkJka6r ze1_7WMdlkTp=-Cpr|mQB7X-;YbRNy~Bo!dVF|By=(Htz!S}A{8ygA8jqh=&AMsu^y zS2`aT)tZrB{lqIp2dG3o40y(Q8U+`2J*G$7CBI1F=?0gj`Xh~h`IZ6lEvn>a%$1Cf z0Iikjw0;3(+}Elb!blm<06`dRzgXAU&1(DEGeEnRqit;F9W;WLMh`h`tTPsAFaiwm zFa8XGo@xpLNL}JYtQ6hJg5$CVE^>EQFta^)PA`;SnGr^@CIP=@sf4<^qWEv7i5bPF$r@rtK_tW9?lFFbF< zM&h(cqWH`_S^W{}K~jCjN(Ggg_u~bxJC|qes5^$y`i4CQeM!{8o9E8ojRnh(Z8i6; zvipPQ_!=x=a+SuTsK#KCfv8Sf9;9D9oE79KUyrwWLkoZoTZ~|W2$RbBcq-rclFVl8 zgVD4MWYT??M&nX~+BB>~qw3`!J(r9q1qQuM=;FQTOnj`o^ zO6WhaY^gmjAFmRh3IY`boRUzV;h0{bSO{O{Xx3$39ElranPU6RJ(q_a3w17okEJOM z-F0m+IYgY@9|k3X)TXI4r{>GWW!7j?11SsW-OX*H;<<OnQTqq#`VO3_3y3BqF+Nq$!}i7bwcW*7{sFkEr7 z+e3GqsB7QbR|Pp|bL@ots0+AYnyUP}+BWzgckrsWBD2POk(9V!?-3M+a}m*drrc@);X$_O~$*dyBA&Ou7Y^WGj@ zjw9L6!A64!Zwb$@qzR$@l_7cypi+H_dnL;t6OQ2TFfze;5!9oE1@1 zTGJVjsi>VD@#gzWu4=h2OkdP(d3N<+Jk6c3y*rYY4JzgKJRgTI-nkq4HtX~>cQ2W) zd5YWoRZ=SIrd5tfw))Ke@$v*PTDaKbRNPr-VEFKppXilp7WpQ-rjbojtYIZ+0<&wd zDqDb@qwR(~w4ASlKkI4`z2N#M8zK;w6?OEGpDgnp_~kWeLW>ti&FYl}qD83h%;%u( z>>k2nSXRAb+8?vaR6pxGpJ`X?;dxc0pDKq_wwH)O{fIG;e&V^cu4MPhnu)m@07KhwP&l=kvP_Gn7Dq6F+9)F;rT#K3NN zx~gA{XeGY13Z|VO%2pq)U(Fyp;Mx943zfVv(;&?H)P=o#Fd1$2cTf<&_7<5x&V zsKo_%;Uq~NJOFk78x>JtgS2|PYkku%>3ys)e7Ruc#pV!v+2Ho)1vv$3lz~CQGNM#n z$?zs`XlKL{+OpWHJXzWKTRzwk9^-8ZAuFP|qXh0mF-;+g3C1)9oU~*mn;yOb)$wxZ zVM=)T%AfPZmsiyUpAUl!NSE`aZRy4}I*xjD+(oqVWb9{8hpe$Vf3&=(nP*@+qDU5= z{gyfKnAqaVB<|ZG^tT(f;hOG**5d`c& zL|qxlJ9i38R0Nk-)Aq|?It1wh| zjIZV9z)V2QF9tO2JbXT`Yf0;x9iqZxs+WOYm#4r31yQj7#(er*069Ck)bx{?!gk&$ zndzyLPX1v0;zp7vHA!#VLf__?JWEEsx0F&cT`z4G%Va3Svgw7_B^o$QSxNTCeAV3D z6*z@1_V|)p`zIws*HSKA!$z5Tn1-~@D7Zu;e%UM5tumzw**bTsxZ(VbHj-?Qd-OrX zZQ%|}!5&jCxyG~qUiqTu`1T~`{&hMVg^(16cWqzUHtwuphPx)(wol84pyqsK+m&l< zQK1=@q??y3J>$52<*tQBv}#kd02@@up_4-pmyA0`s$1p6*H$Vbbftoa+|)uCdw`qZk;p^s0zGVz739=XiDQjXF5qz3;nb>$CPDM`;G8gQA5ZhNDbE zkQiez_&aCSrl?ZAIfZ;8o@*|MC*qVa=;ayZrA2)wXwtB3$)M*4i0!Y@ikSeR6`)A9 ztN65ti1XCh%ypk+mdMw0+82}(y{S}s3LxK209pNbgtj6Qw?^8awdO2)d~O~@A6qzW zv!(IW4#!jUYByEs`5a&|{>zl_G6XtrwOlhdzu8_%olwk(1J^yalsjm91Sq(!7=O3o zRgL$boHJcltJ9VvsbqI*vC!ajy{kH?EIz7yyfaa){^nteHXSblU!5_T>Knis)G;0x zeX-u@@7AysjGPGGpL;l+{B*OFO=q(@x}Gt!(JLXjp?rAgS!(&bHAiW*SYN%x5^NyG z4Zh|3)-9vo-ZGi-wpFP*k2R)mn%aiA+dcRo6=quZ1n&(|&Dxu0;opd#p+VN2G z&60Go#J4-ru|EMkccSyb^0kQ2qpwFkQ5e-O7lcmF70?w9y*Br5LquJi#HtOD<1$k6 zcc&+9ZtOs+9r>*uznJ@jVklXe^Lsb0ev81YA_LloZ!7Uv^JjN{8#d)ULUdr4Wx2S7 zkZxtv`maUA{)6Z^DwheDap5zQqUJrBvMW2epp>iQZEY-;#HB!+*gwV|TaopgC~PVp zGIs;-l{A$(`%fE_W$^A}J?0%_O5fE@tXq6xtGKTtimOSO9-NT)a&V&68f`EXGRbDU zI!I_oiiAsdjxW3ig#3Vq#Dl!$M-L#q^j8Z1rJiRq8j}Ff^n0Qai)~OImcp7)(KHcdTI3hiKggXvY-ezFipC3Yb$3 zyliFr?GV+`>~X|8RQ@QHeZEyIIYqt!kihe2-5XncK$OPLbE;wQ3Za*(k-7MPP-mZaCZAg$WkGF@~^sGTbBqlpk@BZskpx(*>;ika=my(4v$%6 zxBdu4IrIDbZwl}c63=#Hw~te#!H2m(68ZA+>QQ-rbvgyVkdMU4898tpw4dAu{X6F8 ziAYfZBch`u#%accCeu+C6{T!;nEN@B8D2@2OvB@u(kUmOn{x9sz2K~m=4ytqfOX+f zXGi@?RZ$r=+YMptBkCJX4%G-aku@~OZ|x}@LVb69feKYOa|{Drrx7r&;X4B&A5Ub3 zOyqMB`ZK`Iw`aBA_+;x*0MoA=YPBhyn*wSM!_wgQh!XT*L@q~pZ$csN1>{}F654jN zq7MK^YZ%dp07dLSb~>w+VE5Ti>Gz+whya=?DybqPYQXzU!~NzF7~;iY)w7Cs-GscA%S_9M)lu*=O23M82ZLU`}62z2MfCTOGQ1&X;yIaj|uE ztN^cA$dH(F>&^F#HX~0qB@Sx+@-K=C_>>y|7=F^m)_A}m?Xu}9;V5iV@N!?kY9|}y zx^(PwJ`jjMd7axE9#I2FG-RjB{!>0rvJ{=9UuoNP1RpK(rj7Pgl(Y`6N>aJ(NE?6N zFNjxTp^T!R@TsBcU5vHx5p|`Jt&z5ap+D$_~C$;j+ zcp$rzA(Elbo@RdBj>e%0Wp3FM=s&G3+I}B3J9cKv;#X$Q1Jn%-bFoYq& z4kXZSg(YD`Kki@;m;`LwyPuRkCiCxZ!()Ck3#GNwIZ&*#t>I*zMVbbOlF@2Qb!~23 ziIlloXM+1XykdkU%KL7n9Lz0*j4#2y))-u<0 zgEpFnCgxHP$nt|3D;k@kfR#o@=hD{{P=q-G6<}WQjPv^qU(}|O8QN-Gu zQ66(}Y)JWkJ00Ow#`S*t>|?ga%kx!fsMGu4sI&P&-4SM>j6HwcJN9h`04sGQc z9;Jb6V`kr?)i<+$YJH}j?dpy!iCl`$Q6ZH|h)A>dl%~AZb`OeB$1d~%aR^&5*R?i} zb}y+yS=ZVs5SLX66QIO%-%mLSic$iZJYa>-m*2&{Q2#AIQ!2f1qKQ<=#K;0%R!((u zzWOOA5b?#B)?vG+R3+GC8L_h=7X5{WyGNPya;|9SsxlgHx&)Fyt)24B`57);KAYi~ zVt%=w`#uVSBPM;uyaAfeS@|OO;s~xeafwt7E=GO|s2ER`uRN(#E|ZiPhqyK|$&nO)^?6o%mxVSY1|MZaZh_lyq% z?=6$0Zt~>Qz1?_r;ngwB9-kx*bv8Czmg*UdMq;I@7&Wal+XcL-?B&|HR`eSRo?8N( zNH$6-1NVrn;T37?)ra?`k>j0&r$Zdvnj$yYPl7nWi}aE5dF#k^b zUQ3Jm{q$89MTVlErCKT|P%Km}sJdH)a@Fnkh84M79_ubj<7CH@L zT>OdHTC-XH^EHOUmQ<*bV=`*9z^%<9xp6Kwy%YL&^zjfRp(X&wk=HAXgj)tORkTp& ze&Mcl%Jj2^N8>#!8*2k-TIjh(p{5;>aizMBBBgWsBI%j}2ULnfIGA;`@*H5g}+Q4*qpV`8TT6UrAtHXar^DbLWy;dGyO* z6aqyeqmla*a@*5A+U;V?bna7W)7ynrMz!*ajpu5y;Q1*t#cRWgEavY4+DefqHBy-# zRZ*j#F;KO3RHMg&L;uKCOu}VGQhA{^*LNG4o#m<$*@6se|FU8q8|$ZdP~(IGUFIn_ z@2mQwkX^}AJvGftC;6n|63K{*VyWf_4b4a9zKh0GtW1~PqXxW{`*+e7oKhUhzF(9I zVfs*9D#R@7HQH7^0`jLPd9wi`k!wvP->SZ^KOmbyNqW`P&9$+kN@VpuVc;KNnoo&2 zf2UG@Q*0o*@P2*9s+2OKnfJt3d3K<5@^PhgKX9X`)^yy=k7ZQ;y6hFOe9Hvr^b7n6g^nDUXK-1o9-)6@zS66 zL+=*lfF!y_W>k*y$TP(ukzlX1lXvwTtn19rbSb0g(yI;^jzGh>2+#hB)h+4_`&6w9S%|Xs};U9CW^ZFCYDg9tj^M}(8`Pnj_G!arSU#=*6InorBIJ26J;SN_Ijtd0ns(z&eoQJXYzo=rOuuv+=dM5Vdf-<}DpWW?vi7px_Rn{$%7a^qzltyMd#9b8H;) zg4=4!RR8BTU+#x*w0+wj8FY#PFHOT6la0DT+GCyi;BWOz9t8#ER%E)R=}#Oq_#gAj z%UUpzhK;Y7VSZ7rXV1H8?MGJm^4zlzVn}wWku&5=NEdwtkJu0Q_&pBeu$gqj^Tb$Q z)C3{=)n|zo^OOO$t+CS~smb)QzG<0Vo=g{)0#T}~sw7<3$`-G>b3h2H?1|rxu;xPL z^q`AHK}y;i!DgH#LXKL=kFFx@RH8o^Dms_dE#5S&(}$_&`La{KwFr#yv$vWX8}mJo zYcXzhnL3D7K>%|zQXfpMb&Rd}gbLa2j4j_R?~ZG#b?l_BzTAEu{#LKF^JZe;Uh|d{ zIxilJR5^~WXl-XjQ&uf>Tk`HJ?@{?w&t7s3O8YLA{SV-~!;4KbZM8|WV7V?u>P1I(=?kk66l5xzy*b&Mai$lGh%~HS`R2i`M zx^X=eE~!rTjy86{(3Dx=Dl{OI;4nEY=d`9$k#}^kGLq?A@k~Ey*u}H0q%n#6ZJKxzpeRC&em6BCr%ci zknXiIQ`9$e5H^klNQ0~(k38Cd@t!!}RyhSzqCB0{8gu)HJF{j(@TBc_Q&&2xevYSU z@w#6e*W=mqwC(MB67)?K8Wij@KmVMhJMX)Q-(_)sx=1m$+y5{bRjAc2n(-Q>DI$d*p)$N}p}wh_%+0I7!uhdh)4R70FDUyVNj%N!BVT7RSgv45NCO$@0}en! zSQrtRiN3kbaeW79R3dK&r6$J1N+LgNk#nGV4uETGJ!TIOOuyuss=q8M=*%9h9Kio@ ze*!qny1@Zu5>yaM6{mnMsLH-P`}DyTDd6!fzUE_n!4`deNQOZ z_Kc@onyiHxmKNw6(!D8`N)bAH@7lKX<#O&*B1h{~_1jo8xgO0U7SHu=j`%r)vN@A; zeh1g9h{n0E+SEiV?se6o%VD^NPhJqc;ao~_m_$BcHKv*4us_+K6$EhmD(BA=&u^|% zdM@P;8?BN}-_tdRlybCvD@L-F_}+paxXl>s9bc@kRj{#8;1eZZo0h}*j>ofpW~ZUz z6k(xl3x}q-g;n>kN_2ieDpv79x6GKNqfk>_4N5tE{u{H#f}7P|6Ki=fbNMK(TH`Ha zy|o&%H8qNo8!l`at-uVp|3GW8|1^iPH>#~P+7s;iTEFGJ-}^DrFvY61Kdk!$LN{=%8d{jBep-Hg13jgq)_E|- z$DQ@lq4y3JGrE6J%9jVy(}^BEcoG7&kShw#c88Pgf^Tkb00X@P@S)wWcb)02c7cp} z;+sXE?bE-_+UL$&gnss#JVXHL=neGYPe$B*VRG1K@gVf9G`fV+K@R&`_0u3WA(|c) z(?Pk?vgSUy{Uyy?9%-h^&rGNe24^YDH*<&*U>H;+;SUH9Ou+!Xf+>e?zRPorbV#qI zr!EeVYoJ}GFnag=Ky5hPgRA+hfXbRpF{=&zeCRTxTF;K0yTyw8-H*O=CdI=jx-r*s zY$FyD`9Q9}$=ELsN!nn0=Sa%jJzq<(iS3fKSHQSigpkhQ3JI z`6)lKIn05ndRvUM!a5vyx5pcaVo=r$Y9LD+v3sWAGIz!;_l4Va z6~9c=DkZV7Uko)Sou)$ zu~5=c9?@D3ET?B^d^>2nb`LQ2CysNR;rk8vL4vc1YiY~H^1^efkoLO>w%x<>K?9*G zn^y2*VDyyL39fqMG82D%H(!6>r998#Ki;VHe&vZ8Zdg3YTF{~DEpy8BsP*bPp#iye z`!5WEH2r3*eY+8rnAW&qeL)ytdu-lmmC$7`sPYlG&cS54iMwf)LZRiR91y`(bkaoS zXC*2X86Dx~>(l(Cr~8isX}al`mmJ>$DAk}w>Vl2*PDJesER17`POYCwLlKu7s0&rE zV81un2dC*{nz%4XL;l2Mhq2Vd;DS5jdJ+qRrU;Gwfi>2DS8rQfKGYic)phRE3jAqH zc8Zk9GZS-sssA1=SVa)OR9iYVAFEw+f|D|ljm~|ko$u?#mU`qdi{g$RmpC`17Yd0k zcy~2@(l<7c&!p(V29yq%4kdk(pxE$kEJku%9CA(8589TVx-N!qOnrk8SM}!8(?!=;&Ms?o z+DC^KBbEz(pk1&Ia;8w}f5ba!L3l^WsGOxxZ`4JuAcY|U|B$6~{VCfTeDA6#@txa8 zYmjyP5eQB9Xx99~5bjOxhpb>q%g1H)7fot{Zuu`h%*{0(GjQs>1AE^F0(&B~(gWQ| zPpWoquC~TZWvo^nL_teW2ZiYq@o2oPH7ZbdbwMmyAk#7(y?71W`b|JX=I5dG5%pSo zi{~rJ>wthXNN%fZZMNK=1ZB~Z>MI7$l5VM3g2|U;SUa5sMRgUw;s(0pN$V7U^dQA3 z$HOw$(`(iLqw6Zes@$5kASfsxAzd3}(;-NA3GPiwcc*kWh;(-AE}NN_R=; z_i*&!Ip@8;e_rZd&#YN9_r#hth%N7h)piLmg*1xJUhS zzTTNDK#6MH^)99hW=z=dykew3HQ;!%YHKR5uk@1X?iTm1ab=`dHSyN~=|!f~jcwyc zCJQ!aJSqM3VI9;Rs_3WCxDxfxn8-(NO3KS}8($%~YPDR%eG}A*siRrqkjJ67+tw>A zem+kM$;MIE&Vnv3Od(p5Zc}zrvY}x*lA2bt!L_q%Ho$ba&)HC}CnfYBdXcbvx(+7} zR&i)mZaaT2lPH&Vs7nW6s_+DS2EnZTG#HYsCGL^jSbmw@T!am?!L2%zTyLH5MWdl- zg60TlhHHB@fXnHAQPFP=(hq!2rrF+1S&~INi}mgMB+4odJ)Nebr!&jDEQwaPN(`vl z2hR>x?P?vM82Iz%w|prKsi!2`v8rgo^L;CkF)=<20=>F?XYach)HgNKX64r6DWf=8 z1F1uFp2n7$_GU#vu)#El_Nwu-09`E@=axz}ZivT(Rsur(9UMF|pm4bAe;huG076(#Cj&Al$n zMW0>Pa_4_NbVjLyU)!f$3unNflwZ>{>BhjQK+cA{$Z2YieHc;$HDPNmZKBLORd{S* zUs9MXZt1iQtHQVTR7gHXTIcwSB9Ja9uq#?JXCMtg;51NFI3!YhchTUN9SYr#{Bm=% zWwCjXx3)Jt&EKdPno%(|YNEU%k2&$WsA-vSIQKLWIa5eA*t|miI4i_ICTJ=-#fnX0m&WNZE#myx;X(AgX6k>gC5&qn==$G#_ErP<{tM-!@0+E%I~tYLKnZM#Y0WZXx_&u`iqMfT>29&ZQWs;}6KZCP-3 zm*8|T(xOK_+HdvH#d^>&C)e5)!UKoI@qF&ft_u=O=9JxAU`zw@I1&A+4!U8-;+E|- zK__@3Ylt^{#1*Fy+Bo$t6JFIq2~nVc6_F~chD4VgMU3Qzb3R!Gg;)}Jw`M?z1yg{m z>K6~p1v*4i^@@&ccac;O4Dc5cdyHJJcgoZ(YY=CuX)}C+Qx*S`qOfJ^U@^4+`NOVR zh5n(N?N?R2iG}*=iW4sEhM|5m1;zCavStbOR1*4I@oVDaj5*Xj7ySJCD@)TD_StK6 zbiiDucRc3F`YdIXE@h_5SOml$D;L}hslts2i}ZgmD2fNi+PMM`5!q8;Qh(q_zyMlY zAXtQUeoaOI-!(w=EhdfNZxIK{_@JMcd+ha@5m|9p92+u(M}6r^JK7Y1Hnq8DTj++B zew3#-%Cb05R7GJg?s#J68nfaVQ;%O9a&yuBZR=~bDUDmimImf4AtE&no8Due#v0Di zT=O)PZ1HD?cG&rg)IIHNBGs8~L(#SqKi5KH?8KK22x&XvES3s&c;6&lVG@A@-bMvJ z8!V0_sMx!H$5rgK_sWaqeUtmI3lbi_Gp^e$WxNYDMK}5WOF^lak851t(t`;a)WjA` zj1^`^$P`#t$*_><3{IG_AJdfvp1$zno4CPr-YmvLO!Pw#E30&NQQ}h~Y*JNrd|o6M z94JpC6!%3VYw)Kc&FKzuXhIa}pc~ZVlKSoLlc#xJ)DF@m{Tqq$^k4Bp--#`LkxT;~ zS(X{ka(%)q=yiyIyqeaZRSyw1tU&&3i zW@~gle}egL(-@uFN+ipisEHG@h*D(gGF0kRF-f^})}lpLzxBixy(}x1%INw%?kgj5 z)#mlFPX>c|8s7>oNGBQr-L7ggV$p#so~-*etbtNL@u|M7sBV(h_epZXz=y~VwvpV8 zZR>)-#g{9iK0$I7=c*S4%SZg`CKb`TDz;iy1Ic8pP;9Kgo5f+sU2Rz*&^Wx8wje%A zN!%>)Wvk2?UGKOK*sy-MMA8KF#PX_t)-<+diw;^&#M)HDLth;`w}QEYOR@S@*kh9?;f?h zZ3{V}+&r(WSEA;AyJy^PS$)&c>9?o5{ynGB*ZMrN=`!$#uh#A&wV_t_iLY}c8q6Em zfS^kXkK84fu+g)Nhun2;RT6a0IV)mBE0Ry#&n~zUzZnFV7Zha+hm_N^X;Y15XYiHW z0CS*ugw{gStZOk|c}!XC3eOq_IL2<5=&g!ol|Mhs)1yWe^Q%y18Xn}kt>AtTM-CKq zdG(E7@0}XRvbp!(*j+O4>hVGEUZfjOZvMF4PC=X%|90EmOer=_nUyhYknc~F0dJh{ z(>MM>MkbarJteXe`g6c~Z{V^) zW1w*@_1JB9;FS&U>E$(%+|OZu6PCFe`%_!lYjehH_5eIa_)MmXH;3z(WwEd7;$^p= z<%V43<>*QxW7|k#@!7Y2TUkp-!cVE4x4ks*jnUjwgkv;r z9SY@&Rp(}XtP77L%6S9a-bkL#=`Kp7!j@$-N`fAEN~7XabuATzq5DNPBi9TPqbn zVsG4NeOs{=*JyoHEEHMZYBJ%+!7v^3?TBq5`ev#4Mmr^t6)N%`}m^@u*jm-Bp!Xv9AD z;Dh}qo~EQg5hm8VAHr_FxzxrZSpnsdMWs6W5sNQ?E)K*DP*p@dFX?il3+@CK>w;W6 zf4kM2q3u-GG!DVqGUvX{E~o{TMy_y7+v}ocsbuGJ6QRciiRK=Hr0#!;`xFYE@d$fEyQ~NxDIO zdBx;;yZy?Sb%y+c#rAmhL^GvIjV{|7x*X?YjL=A;sG{9oohKZ6>&Ul$oXC|a)k2t> zQz{L{R>w|QR=sLgV~G}eUtcSnD#?cxlXOC3{m}{rjvGS5%w-hoLU-0K=MUcv?OxP@ z)2IY?TH{Y6=G96k>LQZA=4S_QIXeVb`lf1@8v0GL7$;S$*4AF`XFIG6mc7!sV4|L7 zUUQ#nhQco~-`Wj@rmdi{_!_~0n%@r!{M=m=f%V6a+b)u+@R_n3GiM7F)<_X<|B@MF zC;!xATz)!anlM+17!c&lnV6?Vq?b1o6>hcbvI&;o5X5c|lGi_;#8DM8e1`97Gyb{U zsoiHHB)55CshMxLd2n8vxUoZV+Q-L+Lf=qqB0g-l6T0hJ<)ym|qrUdZS@cb{72EPt z77;FuQkCKPf~AD*$?PISsIb}qrp)d$2jF{eT{qQMMmON!QSSm zar)p?w=KFEc2Wa+=NB^@#(TBE>zqO#UuPNP!09~Vv$LgDa>6hZnm7&>SB`Xhvl%AI zq#I4~MB3M4HzwoxYQgebUwf;X)N|(b=ngD~*EGM%vb)o2At}C9k=tOk_HM{cjhE05 zM6oZqR5;-I1?5^a9U5Zy$`)rF*7FLs$`?UOb3!0wtkO=|6#Y?%d- zBBN!n?YXjH?+*23qk3RfM?jTnS)p#PEMKS!bx_O@o9QRLOO62lcbsRg(d?_a^!mw& zvpMq%QAcaJRIh0r2tE`i1+Ea&D^(4!qP%s7@$)k1CN5R`dK_)7awIPJq>nxFB_`0F z4uqK1-j@|{fij{L09HyktB1d;nIq*5;ESzQ>D#GRP|}H>>?DDVI}?37QrbAwBA&`! z=Zz&l-JPcib08*}Hj9pEfUUt_37(KJX_8Oc97kStO#MPUaZIFKZ5uM8rdB#VsMw6X zS6&%tX+5TI`!Vf=FS}nk6hC9SPIO2@^^+^7MS@R+dFFXc@k-IwO&R6aHG2ZvCaly8 z9zJnm@@U(lNIwQ#>S?BrA0a{TYsd{9W7qL1>zV45>dqcgPIU|IC0H<$x?kz5>E)BY zkCcIv`zR7i_g*(*9gw>*s52d^OjRqrrIIn##LW5ZzaC;vxU|GpiP&T_BUNtm(;joy z<#Um|6??<3G6l>KPMm!Ji$=HQx%1};{mTOQ0LgY2C1Du#{Xr{+sjfYolh(8NGnTXg z4Lz%c+|CDPm1t7VCtae;Q4>X}#E&S0o`3FVq2os~pX5n3_}QOo=`LHlUe!<67Sxmn z-}j^VamVbfuS?0*qpzMR#{pw%DQb2bCl%5z^C8&%R)%XFfzF&LU#rtxsnQsfsA%TT zUW(Xmuic>AB7><%@w&t^$-Dq3{yD9N1nOT@;FIlPO zF1jaYelV>!*C{LumG!J8PGX_qdjui#?HW#x#la3xDUZ)tbHu?wP^;Y@f%%?G87G~n zSw6>=H9m<2cH>k|tCA`Q~!ZO+IMWkWMwwnQTbWsoCcP6H4<^ zHUV54^!7EiwhajFWCNC^Re`KC7C@ zrIV4pVeY|D(=I7T_SRI@hgkLV56j@6Zqe)PM~NosS>fG#59wBoVcH7D?Kzoj(b?3z>FP2z>ricohoZ3fF!W~F|(j6+N%FdS=nvQ;Upw> zC{J~P2;=9};j|Eg@Zw@kC8nE1Q0z2M3P$O-J$F)!QbPUw9Ni_OgNft}KEGg-hnj>W z)2}scM|Z0$@ac22l)ss(sZxJqSAy;#qclcBQJxaIgTN`aG-EJSabSk zR*f-ut4%7$7{ffdvlizWCz|QEvIj5C1FbVLs=@EynGcnu=^s}w^!O6Hhx53cLcLyu z1;ZIv!Rg+Xs!n7QQqOmOnd1}t))!;8B;lG@#9g8&RdG3IYqzt#5Tp`5yqlL?WK?A_ zQ?gq1n)T{TH)}ziS~BS5w!ZWUsirtQ4MPsCV&8UkS~QJ3v@eF1O8;v!Uo=g{PQ86^ zEFo94Ql$i|#R5IP{59RCd@lB0jnE0z+r$H5S~WD@B^@!ho?W)Os6+X}t_kE#m@OShY^ZdRDn>o5#qJD}DM=ilZM= z?cv8aj>cqJElL^nuI=qU1aL(OgmNh11SJ4zPf+EZHP;Vyt2!dEPZ#!3B%XiA zKOozyv6TrQ;T6g)3=g7bc&t!N8xzVdOr0koQ(uE&ZniPF$LD@IH&WMDT+(!sWiKQPif4&fY>+uECOk5nBpEHx z%@`t_i!Ihs%jB%5kHXAlpPEkB{m4|r>ZwBJ6Dd;KtbCVMgp227Jr=8_qQ_hmQUS8x zYG90D&A1#{o96k-`#PpFSV9f2{&2*p-+-!2fB5W;{npk@e|}tbAU*n&Lp+aj-9Xw| zTCQKb;H`mC+0uXp_8a}<+Lf4jg`Gi#J^dGz#P-=n0)5F9;Z`0qNxB`G_|e~#vlAaD z1&M@KiZKojQJD*f`>--yIB~*$1U4LG&rF=zbUxQ^n3ahKK|yK6Be_Tev8lk#n5<9 z=VHT_?vXJgDQDy55rLEbnaw#&(GX7HX5Qbu0Pt-gwh>v$CRR|sZ#PL7#Z>P;t6S7; z)i8nkqNA5&YX0MgKd|MlO@fJROf!WtjAfTcI+v%;TQwx_#9AGZ6EOhe*#hw;Js|jAd(Go&94etBE8Zk~I$S^0M3Tg}fC}{Cq3`HZpru$T1cs?Pd^MR+BjI46M zyqa6-!{}v*bZDiLnH1R{ft{y$k<%B}_c~EhG|jq5jr$5uH2o!MPN;&;<}$|tQfFn6 zy`5v3b(}$H<)Vsb5a53HA%dc_2&{AnYur59s&NilXR`u0f^=VhPwkD;P2Eprv(A!J zlnV7D&7XWx%AiioP(U%yr%}(kuoE>gnN;xc(;D+TGP=!gae` zVS}k)vGJk+B}(~O4-bw;cQ@mdi8p=GG)dE6j0s^;-#>tpfdXC4qZdP%cSR{lcp;k; zB-=bS*I%9lZP7J8a>h6e@<|hk&0PE;PfBkaJjmaORzfrp+x+dDa2i4wGr{n!1`a0# zOUh%$-gcTZJAE35r%7Iy~ z8`T^$(Ic7HeI%l7+i+_I#o^tNc4ye`vh%2HAnaIbjjN`MRp#W8LZ(>Tca5 zLhzr?YO=BnYj&o^-+bYUr7E6~!p`aOiOSA=o@^u*RmxhZWtqgmZ^fgZqMz!Zs#zl?NU@7@`gTR|y{a5nOWgQ0+( zB8_GrWKcX*98e~uSx}+oB=^JeMJZI2-K;PL`Au+*GUiz~n2vi~`7~S(Y?Z4Wuf$Z~ zm%aFgap70UzdRiycOY|8;@>!pIAh1PmD6CK+v`(pkK8F|Ta+Mg;YOA;VIIAM?-8A{ zU=f#AeM81)HWd;6KEtPO^l`N8Z6BprIumuyV5>}}xgE#)`nz<@cEPf6W1_4odgW}L z*an^rdC@rQRg!N5Tq5t7xkU;Jhx`icOdM6F; zZe!wFVfk^o^An#VVo#gLNS`{qhGAL_X@bzv;Q&4$@IQb>eS-~fBT{raj3r=~ZpOWZ zEDS`43x^6tLT|VLe{wk0m}=4%BV+9gl~7$d)%1vS3)-Q{riqSWia7~`b9DHOcQ7M` z({EfD{FuI`lj*37FiC8tHHFSen`gx2x*lD&;<9|<%6;atP~|pb)3tOvcQ$TE zv7}vSX>kza0ftV{$RiRm-*j9=Ge0^RC^h$>y-V~WUPbb@ojYiZDZ?V_cwi&`@QxXBX z;kLFS{zbR9KVVNXJna!*8s^rbL=ecT=75T|Z)g`*z zp;R`jJuThD)wV|!=#rAg!!42Bzt*`s-Ja*3VG6~Or-~)fz*ECqQv`{36R}-T+Kss; zx4w%vqV4WJ=(Fb8x-4xAj|CxT6XCc()ww;yPON=57Dhj6i>|+e-SaPo6j1=I-v`@Y zl3EZscU+HqBPtuqTX$nf^>j>VypmFUWWNrY(6EgF53z4By4Exlcw^eA?0@&Nwv3@( zr41#yXAB6zh$hNMh5h_!EIK6DquxHEs+}_N%&H#qoSs`B+IKc$d4h_=@-8}NuW2<5*drQboeajN9{Mj)^VnY>TZ=4polj_{@@YErU0L4L^0L=!3*oY9y$6S3 z{H20-5{Ie>3-|uk(C$hpYCRI@Fn%~kPz20+f-~X4kvKyX-{ycSH2)0HCl$ixrS24q z`Lt{W`%BUg9(uyq)lZ{DY3%|kp9ZLWERk}Ra!kWZhY~eD^JJQ%q-gkFFr8$aL#zks zL?|wXti91h$!NCSR=g{4&-%B#;vi(vJa8Q@68}Vw*gl8b#7G+LZ83;r^$D?o(>Za# zMW;$XJT7FL%5KQisCNnOH}4+-yeCo0R;#2wH#;TbXzKn}?y@)Ut!O+|b0E_sc<#L= z`}>%H55alzmnbJ_NuYbz(_eOdCyz$bWTd(z9|#78>%bB>mh^N*vx0mgqsO;=`H z6{{E{KiHc{B%5*nq&FCX`#k{2M>$&Is8Awaop+~MyF{fPZV?q?`y0%u^iH|W_*qLL z;r&ImbsV7YZ^n6v3L|^Mx=uF5db>hM5>mpnsZ+Kp;h&N+ie1$#)@9llZaDAO^5W$n z{GuD!G6J8ct#Sf$zO3jb%?~p9-clCGQdfvRFjglY@6nC{6^wTzt-4Z9%v;!@`7?jl z!|BJ2x;1t;LNW!e8-EU801U|P*O)TgIL$(Ib-U|}V^ZP{cjYo;RypOFD)XrMXMALP z#cCVuyE&VWuRaU;`ah@NR`PxNi{p2ygOBJv*9T`3Y1%;J^@;)*s8$63qL&DkW|cM~ z_cAObVYu`3IDAQ!C9s#`;cvl_yHi?q+$5_`Gx>}qn<5RfF`1svHy2{5@f@oYh$=nWo4A+&gK1UOSJ*EBR2`WUCVE1x3OYR7o{IR9rqSGl)Lc+6$No_eC$~NR53)fK zfHa%%vjzau5TBAC_>)bY2!X*tl9^S2_?ni5BYMJOoLP3cFq!o%#oAvC)u>XB=jr^D zB!DLxgh^$!Zna_bLjd+g590I(nToS`<2Do*GgH6C~x!KyGT*Sw2q zxZTJdiHo!^fyYQ$ECW>Ja;LndJKkR+5@>DQ>pSZ%h72ehMFP;7lPsuZ7LlPp+3yD1 zxa9g1O*W9O=zW)H{~HU8NxqXs>&;k%7nMle&OXZDTa<7(x?A{tZ;oe z-cg-^z;jmXi=*f-17R@`?r}1-pbe3;2C0nXX!SzAr2 za;b=lV~FT)ebqw)`j27tGFL5~kVVhEB;}(-G&T40<-Xry_)oaeABp|FePl!taB->} z9)(yqfWCO5joz81U+C4NatA}|D%A|Bexn*WQR|YKzH&hTf9M zf*mEoZ@2{hcX-mB!H~(5CdrPu+IebOq7t>fca@?HHiyA*@;?@ z&;9bKsDME^P!A7(T4KH8uZX_LVz~ZCljiQ$Tx88v!-Ozn)K7YM7+ck=&X$ry*ZllJ z{b#@Wcl*_Jt7f>gmrXjE)Q!yT{D(^i*po$2I0_9${g35>e!6PE3~OcX@_Ny$)!J+O zw&PgMKwui+--}H_fbA}C;gvoudD9Sixz`P^*fWvxL+Bn+#nAz6gJgsZfx zo!~|lTWqG8jVF!n7>dICLwphfJ0jRQbn0kdfn?=&GVS3qYDvk=n1TIRz*QdSrKy_b zR4d7|Kj+fIb_ZX}8I<4GJoD6+7cW;UsQjgM9{SMUpZ)_+1Wz`i6cP(=ruJB1VhUZX zmO-7{Mm7Ec@?0Gx?emxNdSRl!w{l0xBKh6M>5$f=X#@s$bfSeB#5;6c`=ZxPznCG^ zTpP4ybUeaQ{zJ1LaBZO1t8?kJNb6kS4;~R_|04;gl$3yP`~*6zvS4PjpcV<*Gr&9P zHm5~{ZYM+lQ)%uTEZ~#YK7c%8727t@*BpJdFkR4at~7~z{XG83AG-LZ5s+}W6mkaB z81j!kBs~S*t~akO1@>Qm5v8T>Z-l_j?N%2Y&r0`lX^?e7%^w`FpaRT8{hUdD&w?I%KxCEc z+5+GlCMZAA_KxCzFuq^hlNt4mFd3sa5>LZOrf9Bh^weT(U#U`tHu~~)v+9$(&l24K zXBY$}Al6oL()*^Iq0!;i>5%+`W=D{-SXHxePYS zLdhEwrD+^oa@_~66V*!u1-<0PpAf(hSjekC67dvRUGGOmV(#;yXOuQPZozgCX0$K= zU|I&EW9N$idW&QiWlp13VTvMgB%PB|cOP&EFiaHv(#2oxp8F4AA}WbXVh`dLOoDU( z!&-H&JwSU@4b>)aWa`8Up#M03(`Rp z3|Qbwv%dck=oHYn<@rQ00e3m{YO==`I5|M@`dgKrdkPo7VQ!E!@5==U90DU{+>Kw; z|Iy~-T$4%_W3n{ml=u`#wBWMO-OGa~DqunoM|8k8dGKgrN9?HLk+pag@b_ze5c>#% z4XElF#y{Aw*3NETqSt7ctbP+tdHmA<>4EFQvvyZ>bs8HUZ}eBlf5Mapa09^Z2bit5 z*;9$7?2RgvtYwN-YL?2qg#O?S0*B`Z1TyE%gjv@K`n-zQo$Di+vUN|KLpkBU^^v9S zUH00C#LDa=vW7}Wg4hfGkW2u?v5^mhwpltI-T9{~ee41VF%SPJ6g%Q`IS`~8GXPuv zTAeMfSbXuiBn{%(Z$kIfdXC1ue;+gI$tbtoy#xTyC?)Su{AqmAkM7HdeI=T37+loL zf4*mlN}0!>VTijdaiUhmbbyYSu{R7V)jd+WPIX}fo@a z(}bBs3MUJyu0s+a|G+3Q$Xk^AWtPbS=X6%hVM3Wg_9cmL0L?pk!F!VvjP}MC9x@4s z&IR12?3zqeMdWgm;61rGpu*=_|Y4YdarKq=c>-to<8H$XL{h;uqe&y4@Lm5)`$NS za*Y7k0*pd6s{g5Ibawe*fPFtu8jOrn{^zs;5y->{M%w#DJUdWa%9|g~9H;+eqT(lG z>V8?jC`f5l_q6vPHf0zPtD0x7Xm6JNqE*|K5^6?%;N9aEB@WDs-JVO%8~+Q%;b$2fy^ve`wY;xWH>1E`ee9b-AqPY< z8Lv3P()daFavGc&g)!7oPSrFjYEbTfpo3_nEu4!smP_#(htau5-m@dV`J4rF!E0~_ zzk36Vv;huIS8a8|Hf&_pA){O4Cqa{rOooK)Kdd)M>@U+Pm}7&Nf0b^8KvA;}T>}~e z{k<7&(s0utw4bwRq65r2VaKOhDdoL=9b&@%+52JmRls}IN%bdssS^ZfP}o{iq$l^s zlobP*Qxz*iMZ^5(;z%-_B>|EM6pzp}KKr~sII<{T`>ge?K#$FMCe?loy(1b4`;|bl zB4>9N{FZnwITexDO;Ti$9ABrd#5lV#MFZSGhJWg7YTmV@%OHx=-HSf6AXSqZu9qkW!YUnE^MXSeC71EaAf%4L8#Sig~OnG6utWVMrJNtN6E zVZH*HYrPbr$}&$w(+rZ2WDay=Qz`=9A3pfQz|Vb`>U<>6Svv->0SG(07AhS@^{)tn zt2Masi;=JV`MDgrxZwI`P+#7VZ#G+WE#%u?HIAGv+<7xzv2?HdqRVh`mE945+>vk) z*vZL>Dnvih{|w_%86fXNDdPV?=NUkdtX;07crR_Qr7Q4jZptj?+4~I8Iwz&emQYi$ zOY^i$hlQ(`>{3IK2}>C*e|!Vc1Ihq;wR2Yo4o$ z#MsW_&C!AODrT8zYp*Q`n;~?D>Ban8BP+pNIk@*jA^;&|^IXA)fAfYP0Cd3Z({_B> zv-b{dV2&Z5EKY3VS*N3~nJMZzr@`A!qjnRaF3L4USAS7kexsM`hfjV<;Ts~Dp9}8w z3Oh~DCSzszqnxy7HUjB1YVeA5BVgJKqmZey|cI&D^0!Rcwc;zL~#^GSiRDQ_AQ@3rlLo(W2@BLJ}CcMDKeurz`@j+>gbKG$z1~ z*iOwT^0&SEAldRMb_DAM=WDeHW9=;44UZc%2Qo{sc>lBT9gpb%nl+Z%YI;%N@s4l#LfYQwk6-HDyX-Is%NYEWy`rrG;RrZ{*{VN>zbM_djPzbH;|oHK;-WksN57xv@0A0ho_@KBSoc@GEllC;lIU|s zftgPO$@yE(>SOr7)fC3xvUaIYrGL1=PcnjbI-(Pbg>T`ev0eNeVmFs79On}ffkQkT z&DJyR@)FFi`ZRu;*tB+WyoG(rjgDsbK}&g&#azvz(~U+N=AI%wLV%(o)zR6M@G=t2 zMh@NT5e#*5hy3eTHo7+CMg&ZaR;dtrQ`g5k=6c+~ElnK)j>pjT(c0-=?VJNl{mFHe zp`zki!mWAyt#86lI}Y9@7Whbfn9>lp>be89F;ZX21Ap>>V7f7#fQfiC=whu2NB>0*jN!G zc54Gm3>8Xy#_?B{_!q68fMn>uqqx8RUYq1&=M%cvJ7}{BKzXoGrrTWumt-3V7+vk! zC|rua4F_ru0dT4VWx0lbtJ!aLfPlk+P4KK6mA%LV{7Q(71tZ=+)c-D!r2#_Kd$;GW zuhvSoh=JZ<5!1!5X914X&MOsD$aws~j$=pw4%k42;GS2Wvt)o%mbCSy=pTL+fExrP zAAMj`MpqJP=4+^cLBMuMIBCIPK}yJ@*VBJI;VB8=>-7_HQ~&-tY7fPCFy1n@_|H~A zlx4>=Cz8u3A-K+XzW3mgewR8<%+~q%FQz|$ixdK-0CA$oY>kyJ@LV-8EyF5KfHD9d z7xNw+_`lp8SS{GF?LWW0dGQ@gcBRNvDViUsxX8js3zexasrY04+xP)$kqSF-{=L;A zicdh+qnm?Xt!DTnG4%0bZ1QI9x8CJSxjWA&LGA6uAF}_tiV3yTiT>B8`CAZ;(qC|D zIZt{AfN>MiG_*Hils93*|j^ z{N#5&X(X@P{b~Jmw&@h#E76EA5Dm0od!LInjQin$ah0^{{s1@3U76=6cy0E7e+(Gm zZr0&v!rF>!R<360RQya3VmZz|_Copc$ELU6Cv(W69mcMle9`>A(aCahDk@7 z(0p;d-^JaLduE{zmq9pf*TcWE8jF)DD*%k0vSP!1sgtB$MT|C5r{>W}qqh^x_Lyw3qYsHpFgJZSA|MflX<)0!wa$*BYxl1g-JMw;XQd zQxdbgspT|=%Tsd}T`boHdpt``L8tB}PG(7OWa&!J*S^itcemc%kL%Er^b0 zU5{PQJP9-wn%uHAo894wk|w6L-pXioG~vBu6&v&k36V}QG=<_$EX^e|Z64qez>eUj zj3gzj4nn4D0Aiv6*{|4wwFkvg_Ge!qO>j{shc^|&}ue6JD&M+ zb3-??gm*k3WYmLw-@_Fy_)>C$X~E@!`{HKIsf)*G)W-+o97p**&rlu#(Njx7kc$z!cKz|uoQp^IqDy&u;pI1W^@Fm zg-Fmm`(hpT{s*3D5WPReK`~z%@xeg`GaM4E$^&z&!E@JD9Ddk~Kxy=0A8n<7@$~^* zxzBrTCPOP*j}8B-x97@9ZQSR==Jx~Rs7-~qT3|WfCU81DF|xU%OEu?j@Djj zUO|X&%NX4~j{jErE1{PD%}kILv|;*-NKoWQGi&QKAy5&VwZuzERm(dp_JItM1|1Ql zy|i_!nE)n9(%_T_nKMG(0Xgq@*cNP7X;v?Xl8N0I@V3&=bG=w}0-RWwJc6Yo&sntK z{=2h}2$RYQ&pQ%@g$BXtWK&7W@QqX{tVIJmoMsvuOe6S8tIh)KtgK(3Fk$5mO7ofJ z=wb{Fv6nZBm-vI>F_n%l)gKp*Q%%2nF|!u|8XS@gw!+h7;%!f!4rN=|TXU=1qZ=Ii z9{uD%xY?qPkMX63TC@}zV62{dW-I?oxB>uD zVmBrY4-te2z@yUzg95WQ9%Us3qrUWx(lgZ(kpd;LGGkyuK9L4A(XbEM!S^(;tG?`gR7Uoe{^GND z{1fHFRV_RS#m5E30F|nPdFX|8#~eryGTW2)_nqba!rCO^5`vHh{3QPu+O=Z1hMWlN zr(u%4=n`$Tu^pGnIz>|PYo-I9iU?U=5BADzr6t{o0pH0G3KZ_#ukqI(QBm)TKsxF- z+M@DdYGH6iK!_ce?$(LII6hv&YeZeOoW=O(K*@xs@VrIMcj&}s$BCCTdcQZpe@~+a z9d-%?EHu*QYY;ozApRm7ZqZGX1DV`(k1aQZKlgm&>eJwe8NHepP$&S9*zSe0p^<)j zVRPYXI$Ki)^ru*9{y@S@4de<*i1>v5kw5s0Vox|kZ*|H52QMGwK{$)&1uL|kjtjc> zAKMP$97%0fUUiyx_ImNV!r8i()rK{ZX}a$xlm=>_iyyEgpke}js7G`d<^D^ue;9wf zPoyIo%hYi2-uy>qAOS{hTR(J4o>QC3i_(tq{lGnS-RU49gDM;p&JF9%XV|u%5Xnv5 zYK)jp#%|L3=H4y&%~Mb>TpMjP`?XfJP={~MU4jdh*i*OzF4OO0^W&uyeEiC;zQZS; z%jo+wv0CzxYP;?#HW%|gTXcL!ln;Nw-Jj#}Bu7<9Crg!(U}b*j_LQk69L;~N5u2y- zqq*t3YQ8&Ba;_;^6G#c#`dEwL84e7ukKM24xef~W|Ku4}1c+lprhm|oX9tka@q^e9 zIxdNr^Wf}sU(KJx&2e^pAEW^)j9W?_1GEz6F-0gL3>MCRyv^UT%#4nZDZO|kG>3wZ zpJ*@F&!}G{WcWh{EtLyBTX0b5gQ8(%vWEj3QMgdGsSs}8Y#hh-pZO00$ z6TWEwu|DtlVGz9~C=Whc>3{^t7~cSISiYkAD{2jAA}n_0jIE{-vhXTy=Y>B8{(Ao> z8}Sb&mhDVcyU&M!Ynao?@n7uq4&|Q&CP=X|PjMs8?ex4CdIL&5&0=f>HL_iscHk|E z{QATZ+CI9Tmr-^sFXzSzbRzm2Z;+J;wR$P2&|*S62Z-~4kZ^nGS-b6 z!pxN?C5CMUeLu#<5T>cr3K!d@oE?V=id-(wVfn9^^#HXsh+qw=n8XA4jR3o!HSE6p ztmyutro%sRJj^bWp*X-1e=QXbr5Du1~?EBk#YHE1y4RprSU~} z5AW+Ild_HlE@pZnLu8aXOBLqW``{L!=}$8p1m_aU77e3jU$R5JJ{Mf2*EOWAc`zcFyrPn9wh=@x{2OiO$MYo26e zZ}YSb*ibHJJ}Ja#P2u~(m+d=Z@$%TxUCNC1dZ@qlzByU>l(mgH2KQ_{9(_J`=% z<_a5u5O;$@^j9!LX&-5_A>Zw5ZVVG>%kf<1}i=dbKe&+Ho z%5tOX(106}P&&H*;m897y&&nxfx!q(`<;jx$-41!PULCkn3MLBie;1PvfYQ6gU-%i++q)p+i%OhJ#T~7LdM;nYbTt)L})`QDQwb(j6O0TZ`Q4{9B9^vUS!7I@aegQ(K z52%(dd!*)A-bFU*-spGU@_)sc78Fh=2w`Fq+4e?n{0fx%kS`igJ&jGFIs@&Wx5XSf zo<=Z&8EQ-Y2qp^Niu2+sz;4(l81Bq1B+M8Tn!}`b5Q{ixGx%8KB}@kTEl9MI#7*(HmfW&g+Qo(n`5;A%fj<=Sbv3^JC4bAN;fez1++oDK{Rhjx7w~Vvee+ zwk=z>S`=>)^B-n;MJ3`G!jKUA?n`tHP_;xR*s^gA$OMAK9w!2LKA7?!w~xP|hvY6i zuXmIbgoFh=%yw?q)u9QGvV*(1_{o54dxgpPvu@i{L#A5a3#cF32DVg$%ko#PC=jO{ zpjx6sZSnn+55kWW$9H}b1fhE%QT@4y`;FQ#2f3IQ~Ura{GMsO z6e2BS*;MgAsEPa6E*?k<_Tuu)^lk8b36mSfdOX8s76TOEhV$_4!~%YDKX2zrKu5`B zF7R^fZC#dJp2}OmSP;y>aClOD(w`&8b-Iy=wTk^!>jwjrhR(yyre2I!zN$^%Ade=S z$p#v`LjlWhfNqJdgT}c8-cTn>??^%e|HC}}^+!<0U+`yUkfZae1422{?<%~+S#H=p zRDSTelt)oLZigx7nP)Q(1irN8nWkAR+8S~>QV~#nPW?B{RDv-^wcGWn~m5aS?`QPJ<+7F9j_;}2;GQ|-^EMmH}| zevx2SvM~*O9El2$nMsVhqu$V~U#TD#*j=s*mR!Yi-C{?17<`_1iT|P z?RO)9M+B1N4b|NGTQeSAb24QjG0~M$?W7)8Cw{Kg&W%P6%6zWZDXz^5*O%6r&!=+z zqu(9~qZE2%CA&@~^btPIIOIby^>^ z(`tj}DR-{=t38~Jn=}3)YZ1@1rUiP3l=&g{kcQN$OIYKPYi=io$0@yo;;hO%77u}znfpLp;^YVJH)v-NL#_Abf{?$G zGJIPL14u}WRO(nVnxi-8T`|$CM!%~u|ENKmAZQ!7AxtVNT(}k{*WjY2>X$qC)MxGJ zm6+BURa2}zpo_zjTx#x2R zI4=mP03neIJ^Gm1(~>1|GQJA!iBf^w-&S!J4sbg7Vuf})EepC8`_bva-In+7UC<5rU3%R z*A*<%q`eZ9=XxikP71Z!HexDSo5w}+mXy^jE9weWM;>k4`F5Aiw>6R;Y7X6#AH{a5n*4gL6 z`&NqaM$rNAWrp9Rc6ARyhjk?xdkknU0tq=e0;ySux) zySt>ja})2)Ip=wwN6z@(@%`Dr7>s+bd#*L-yyi7ySy3}yR@28fL-TVHe-Pu2L7t6K zPW6u!Jto9H;mCO5I6LtvU`=9cly7?0CCbtmW=sZsbEt53d+i_4@SAJuVrrt?HidDQ zS~|IBGOor0?k+k2((Q)3eri-(kns753^1yo%$~nQ6yw z3M=0huG!f-zy44IPUbWgZ)1y3>Z^&^X1C8JyKN%5=CKWnkD6Y`R3a)L6x_&Ky>%tsYq|F3G2w zrdf3}$sj ze|~?YuN&>9?9#*$7k%w@T+;zAjdnb@PFrO%)0NqOst5G8_O+@1 zvT#3Ns-(%Z`EHJDiUi8_-wZoa8dfkoVRGbE2!r7RAA$Da74UE0 z3cD81mTQS5{f&!O!eH@X1zc*xVPP9zZAO;g7YR{jzQMG^UC*=FAItArTAo4` z4+Gk$$7CvwH@L)X9KiKbSU7I7>(X^;{hMU1uP2V9?Rs>I)!IJ&Br^(08W?3)LqxQ8 z=09?3Rr)y#J8Zpvw1}&a7eSA2&Zt<#$y|f)Pg`iZ#^<<~emFE0ZoT_#w-rSqEV_HR z#bWj)`0l&Xl#X?B0hxQ86L^2WPv zW{q7{*!8Tx<49LBXFE@pE#WOXM``dH3)A+vSpVM4yoDv0wc`9MDYwoyHd>UwI!At-JC0+=O)gby4sErF%zKoldUikJ{5jC|6lY}DmF7&<6jpr+Mr?mxAdzw`juvd zdNSmeFjD{wTw4J>;#P4U5mFfGN*cVH;EDlDFGykm!SaLf^bwpSAo(-jc~_^PT83-Z zo;FhK1lsiln=C+*uj&p95FZuTG+%yRghZchQIC_hxpH+p7Lj?pb%Q|zP-M=cU*g)ByCieF_*fU>N0I!!0w(IjVNdNq z0xVq3;L7ZkUf10`y}>G>Nl!x1xlM#|2VqEpV(|AqO;cY4>0cd~VGFm>np12TwOnjJ zdV0>esP;KwLgI|kT_ECukQ7O-eyh(laxn~swbcH_ZdHE+^v7W3Wq}3k7FE;_68M^B zr z`CF-q9O5`RWhiwdgQEWIX=&Pm&VVU-M9_{=7kEXt57rZwllD|CXB_BIs}9`WXa9N~ zkI&t+VOPPX^3`x?)yo>Er>P9}SCK%Gb&_pVw1GO4X2r*%^~^W)sdoW2tDzIz!7Kz( zOA1VDD!_OWkue>U))kYUNMJMsR;We4;ozCBk*zvAg?v%~EBlfTeyrQ!u?0}aei!i- z*ACN%)AB&PgO{&oPHCrrk-gDg|CkFe^&a{#UgroC9K^2mdx3H zKTH+(^n-+%X4$84i>nV5DF~%;Bq;&8obxzyWzdBP#7=(&VzYZ(8P=XAqP6QCSGk-ZhV+iys0`wcU5^00^Hw)W~Y6YbgHD5@=|8_g;fZm{Z)fQD-g)d=9O%lawHy72nzdU5<~B{%l= zCbRv(Fo+%)CxgDgTswt!_T~^yhOt0FyiQjSC^U^Ko&CBD>9Pd*v+wc{%^*7fHQ%>c zPKoblri2DilSrbG)*l8T!SV>-XrT^f-%^bqxAvbZYo-9l!|Lt3I^Tr>vIO{lgbF@M~hs;m5 zt61zHq4JL`EypO)H--J{<4-8)0^gNuzL^rln;T%*zasMoTVOwS-Y zmCQ9;c&s%8g7kg2HxmoVGy?TECsb1>mla2ITNb(l{d3)I%8prbH$+ButE@6t9>tfZ zc>t%mW&vs~_)8GhZ_%UVsmakZX&*NNEQo!Z^ zG(yg0V_&HJ1xs@p8;yWs48F!~_HXUM+55<>-#)oVBY`f-KmBiC^$hz&K$Of%)k{X7WXhP%19Ke2zyDXvS_ zn+LdDjSH6x&i>Xg^!N4b&@fk}V=Flg#9tllH&`{8QT8>gP@TRBSDns-A8T+pm!*I2 zua3`o$LLfh?>Q*>d9rzBE<-Lh8h!i|lfj8;4z*%`#Wq8J?LQ>iS#HX5;l>J-I=5bxFU4(G-9BoM#+oRur`e*NX zh(Gz%ckj?_0MzMIB@~-YCWzheK~tmhMzn`gfqRL3lYWyF96#69Ps6U;aXzz>Nc__B zxvx1kwm`+0qnt&S^%b&R-}G7?+nOVQg?l4S=GxWifH{!Nqzkc!eSWq_2W|X)%HhlR z7&Zg8qoaCVZ2fC?d_@K9SQ9!@z^d6_S)R8FQCG(&UM{~xRqkeu%Z)4%xXnO#MHA}) zqKW*ds6Z6RUS8Px^e{W4fG(CI6zb@Y+lNC5pHA8;^Py zI_1AI<+)6ajmowqwRv9a{N+$NCB5tVX9@A?Y%af0JiAD_OWo9P{rqTydRsJku?0G~ ze&%OfT4PilT`<<%fOQTjTYeXR+>iFwH$U@V<9p0j-lpKdzA`fspsq2f-6QB;Q38-PC zHc(v|8yeA_e|3i>CgcfM@}mb%o(d*R=?K7*%^E~BvEh#B_y-{e57Fa$ zqbe>1SI{8mS+FZZ=?$?6F9`FY`&mX{X?=R?Ii2Z#TmCaVDf)Y43?0X~YpP4p*ECkJ z#HVwT&9CX{u1g7<#O#CDlB*CIZmI}vs&zMV)p0j6?%X>KxA|(>mzfIE*?8)ojma$! zf>nH0pE?3C+3C~%Vbsyq_W{*z5*^y`C-@TIC`Ax#)n2~o0;-Tq0k(gVM^qY%Pt>n* znEGKrhVcCn-_IMiPi-NU%QwQQ0#P@nRDF1tv9*j-lssz8#TlcVC0gQ_KRNdz#`X&e zR|s>u)w8={pBr{>KARi8q00SKH9s7)S2Fr$_nYr_;!>C~fvL0EVh(XD5~X=SAMIe3 zoyQzD<4d;tvZ_>WW_l&drB#HnS59@)#IjzNaWPDY zu6+7iZ;*7hc!(5%La0=WRrLSIk$9dtGZrF7Nh5Y2=*~`GL`T-cvLj#0n`*P|TrH8k zb?fK3v>ng@$Kh($E578YEe1&@a9H*|E?%o!4R_(Dm!ifT?doJ^5vE2>J|5VZQV3$N z3E9aIh}&^022t%VZozM9`dyP0^Z+Hk3{#mvncWa^Y_0IPmM6IpwD zK~?Ny1g`V<1w4=*)h?kr2gUlnxZ7v_ zpjeEN@!fqcYFHQ*W@tihK;knDUVKG{sSzxM;y90y^(@EvR&x3gk?S`}B$jrg|E&-E z+t7HTq4AIxX_C}j5LWBPG(~iY;;SlAZZ`gwJj20X76YqlJ&)v^Wq#7y8lR$j%ATM! zJw#?t8$~4Oj~&=$-yM0kVj6YoF(%WPl`DH&^_Z=zDu{y%4-)yV#)Wta`$)^9N5<>#`v5_tB?JACRfJu#t{tt=K|bYQKUpp@JhdsEb$i{n zn4*~8E0BwJJkkD}4b!2h0vc>0kuK21R5WIUR5V7~<@{R&0R1813uOD3sl@?oPCwWd zi23v?{IInoR6bU&)Dy@M7ld!TxG3PhQp4h4`76O%rLs! z!mmb#?`58>`ZG*gsOEB=fks5cKCI!|db!bTPblhJ{S*0Mq^-(l-7!~aouGTut7_&2 zIVnmfdw^HafE+dv3P=MtD$AxWErRdq(KuY)E79pdIba4J7;Ua%x`*b;3QW zG6_yDwwY6xsa)@)*~G(qy&YO1f5PhCpuU-vz3_>S*9AidhCq;#czs=0bKbo?C+z#u z$%3Td(Vh_NvMmtGgr#+&Eq^>R#?H}MolWb8Uw#K>Jr)I~F^YX=;=U&p!KtSVlfh0?7aBU0(L;S#p{(*6fUxxYb?s||l^&l%=!ju$(;D$bhWPPY6J zRG_iHEY7)$KWdq#i*EQDURew%D0M{vQcM3|q0;Z?u9w^3l_=bHHtere!}l?Tta99^ zG>EchL*qSvu-S3VylLH(XG}jkVVm zW6+ZoyfCv?cFpyELVQznZZByPlOop}YW}O;kG~qY8B-V2L@wl(agVuL+_4bJyy&n6lZCLDAjnK$z zU44fWiLpkUupKkaeQ zFAjUD-jS<*rrWCFO#)2r<=A$OHWIemwjto2H^qR!x!yC=jRp8=%*j$!f>0n!ucazz zaZpitq^1Z)RF_7fJ0?h=*r&Ar{9~Jbw|g_Xi=~H4@Vuxr@9oXu%)Vuf9|O+i=c*)} zk;Ajj_6Dr4wCXe-N<7D#?STg9Or`-bZ9g?O#Kvj}U$OHi_NNYc<)h#13^(IH zFY9ax=7hIOGZWn7H=6c#Yu@wC0<6p{v*sd=QmJH=`qN1&N`)SjOIyEPMKyCr7%zoF zvXYwy^=^34Vy5}kKbVuD|dx`hsr3RsgMk63-ONJBbjtMmd>F4@@|W6LD@1L zlTJ7vLS5wcy^3G=DGCieR+%JY5Cs608^(T9X5=xuoujFiI+T3f;!r)8wzS2PugumS z*&V{=c${g1t#eNe;=Blgh%uoC8G{aGX+CaNe%Kd}4|O1xW-9aUZ3Biz=DOR204X8$ z_=ZztWoBn-fdJ#Vf;zm6-?gc1@1UvCA9neP?2!S(`#bO^tmfmKL6Fq%exHApW1?9B z#%3PnqIppC-uaaymYwqR>ji#w$!WLxQYKceH_K4=DDiPIHjM_g9-o)$omNe{y2$3E zZLp@Y)M8S?^lGkeO`#kz&*5{a8pn~Q-7<%8!{Ousz>Nt||A^II-Y9pUsuK32q=MM= z;UNJ|U)5uby!?S60kXd8(WKa&mDyZs@0{D|*gZb$}th)|bu3LvPC8FvSS?~={ zDU7xu^48pt3bH!Ng?zPj*3xLl4v`m_2I{!m0Sr&SJZ8s?L4%qvZXHFKFQc$R7#X?!X zx>KkZsWn^51#k^tX6v+=&J_xlTU_wknNHvQK=s#q@#ue5%`BoL6-)gtgBw1YW*$C@W^Vf4?F&TjF2HvF z9o0j`8@HXm?U`TriHhzqvBcm44BB!l>};0`Xa=^fB}hl{hDwe$w0!*1{!dfXe_yi; z=nH`01>MJplfbJMt@F_W>D;ftvk?t8DiFOefB^>oZ2uiZ^0zZjvE1f^UaIaxWUvN3b^?$k>}qF`#^ z`Cacf=U(#tWFfxKZvO!gczl6F;pK4nh7Ey_hbWWpr_g%&p^r&}yLmp%Hgi|TF&6{? zEuHNH^|xdrt9JyU=8!Eiyj7X^))A$R$CuwQDOUy-(6!bhWrGH0zihBlAk5CU2tBQw zXApV4GZx5{U-7IxeEN^C1o#lNNASE@VzX{g6B|?ACyP(CkwS=d;U-tLv ziYm(~zcH6K26OYnSdW}M*gRH|L-D^TG8!`Io?G>(XzmjLyoca3@8 zeNQ1qZ!x6*8Z}qo2Kbevwy*-ZIWt^$sc-$L#oIm!x(nK{%t~s#G&#i60++Y7(}L;#lXe?zo8q>!(v#+jqm9GDTOs zwXTJ#OxC$BK!OIFw5z4c@Vm<5CN)*r)HD>-1FnBuQOkIR)k3Ty0}@I z6Wp&Uh{L`n(U8W<(1W~U$MeEQjoiLrFl4{(ycuEXndokbcwVx*^#g#JfL|)F!?IW_ zXt<_4j~`o5@GzWBiYl#3^EV6Cq`i_O)jXG~-=>=3V~$#%pA?nYb4l;RT+byOcc;^t zUcj=~6!PEou?>AM?_fAo8*Cc$i68GM_luD_nwei%sTmljLg(Xn+^|1c z`gxCQ*=dHWnrl|kIL@hdb$Y@5j>fv9ff@joLl6slnS3ip%#_sF9rv$@Q?+ZVQ^{&S zqhx1P*}%&$`}&m2I{=;|bv7=rs4iV61TT}?-UbhH4@D}dCZ@s}8JxN8WAIegzb=0? z(3s;={pcm`RG~4o|>!=*01;At{vR)aE)ESEIgTBzq;K-@a?2r@nA>j7*q`Q-RhsF+(tN zn0Hl^5XL=(MQ11a>yQo8`W{g4(i)h>&#cwOf8-NA3ZK6>yGNf!{yUfOA4jO`%L5p$ ze}-smiy=nfhT|LKq(^vzI>~ZDj>C+a;qej7s z$tNz{r+x~<*%s`=J!rd$!Zm0!b!HK1pIxo4nAU|aTGcLCS|}3h5@35hZ8^H%Fu*&* zX2*mWW;dZIT?6L`fac9114uzf6#Vd2(0Bj{0jKu*2ZARx@qLwj1dEa)d4&83^h>h$ zs{*+iN7ug+E5Mk`g5>aR2?fF-zOI$+_Rb6oSKX`}$$#oKl*MmNQ0s^+K0AO&7rIu* z|6!K{DGHX0ORMYofl^hS6u*cgAa~ZQeAzL5qj0AfoA-X#>%G~b6%3|BY$t;lJ3XLw*q#$0&w66!9~fmGqCNm`4nL3GBMSb0--27QF)j8x4X8x; zWk7etba7vfqCYnf*0N2wnR9*b^j!@W-pGzqLpO-l?8`TBWrYk3bAGC>1(o|giy3zz zPNA)4O0T88FLa|nWVgF3Roye3W=y}cWA$wU|iZ3go_n*Ojb7>+PcM*Fbeq*S` zb>?J)c+UF#RW`ai4m&s(dg}yLHLIue+6sVKN!_JU-^tchkB^X&Id0WSg}r)QVm==g z8H{bB4b|0_-+1*WVgvd}??dyfPe#w-(f)4C1(7IoyOjuHH5`;v%UFK8R*D=261M#t zj-G}^O*ESxdn{wyShB5nGs~yK8c-IX*)TmI#B$Z^)+*I6DtUyk;pW{hyDHUs^{W2L z*gL1o$$G0^ijH+4+iFLfYa?}Hl29$!jW0J(t`Dm=zU^ShnlPL(5lWA77OAPEQW<=E zH2z(tQba2Sd14}qMKU<8fVvPmG+O|$Tp&7C$y(-pph&6WNFx{c(GeZ~uWjN7HirQr z-uzuKKSJy*f)Rq7Hbd$&U|_t})M+@r1wKsY(uA;c_7Irmf9IPo3(SjL{q{~hO}x!& zDB@_KOz>wpHGKvZ!6un-f=lf6#i{;Vw>_fcw8-W3h|&NAm5Cxg8&k}h#e>rUBWnEp zDz^0eex(n3`Ms6fMm=RH77c1gv>am)Y}aDf5e3K6WA$R4fyn8)h1kr(Rd_eRHveod%H40JrS#&@Wz|j{WdS4!MM`wk$p{O> z7Z@k%w6=4-JU3(Cl@hT)3}huD5;9QlSwbgnY}|}C8FH}1KQA@-|9Giylu$#w$6I!` zY0ad*R0OnqL>~}#m{S9r^oFg7GnW}AQ(?B-6{@;hiybSz?PbKcC-Oo0l-|#(YCISa zLMI5E-n9pY)4S1dsj;|b;z^YyhhRFYGn*uFuo%{Y27nibX4|yBEB+mb8t12UROT_f z+!bRwr|}k1vHwOSev7^RQ=j{oYgt`h4xZdG+EmH1!KD~7JzzYiEZuBXnS*->HbAJh zI5@9}1qWO^ujyq<9fq#YD$K5>_c(LhZ>wf_?*k3nhBGS z2-d_{j;~ELL3#lwY~)T2n=NX~DI3LXpKjv%uBL+~412caRo&Dw)YO67B@ihWZ-7f0 z{IaZW`y#|bB{J66Er9+Xp?G(IkWYBbnPC-1*}30vgQX*=oxgB~wOXCaZ*8qGPEg~T zzaeUHR05hwynnH-a!doR2bySge;vn5TBj%J*UK!bx`(9|0#C`gZl=q_Gjc{)V-o|2 zr@;1nyMVn6L5W_6*MU;`ktszcJz%4{% z*k7ZQ?^@Ji&#@e4vu~ZS&c$NFIUw5r6F!eWhQ(RCty}L~-+pRvTlX=U4Uvkz`EWC0 zD+pO|<8{Dd+fuc$&B(?k)um&XNo2`h`7(t}t+GopLq_MKa)l(%YJc%NbC3FnB%l24 zxSh4!uF{EUy1}~x zq$V4oF=Lti_@bq?oUG5|L+Y2g2z82dX35ME9(S7+zqMkN?U!bF`)jwVlu_QG6rO$9 zsPF7lsTto$&x{*ef22=9Q{gVb?WEj|_uS{DTxx``t_$x>jk%NbFUUntt=~$2?DG!F zfu`YUF_2DwKh?WUwiKRk4CmVF!4av1>X?t+p9W*w$XLW<_MM@`ViTWDODkEPA=8;T zDn@eDpM1ibpj8Cu$h&~+!RK0xg&T3cvERwTlsqHHP9fr=o^=Vnv;2@*O0nta?4a4| z<~5rov#czMzKxynj%YlP(0O+!(H}4V_aAR);AHKf)YkUx^$_TgMAQi;+8Y8Kq2&^m zi<>;uWBlDhFWCMLg}y9i>FbBfL=*I;yyG`=VMSkRowsB&!fq3&iDrva+E?X5V_A)yw?L2Mb0kiOIO!4WJX|uF}Tb>Kj9hrzQ4nua0A7#rdO15UX3{}FB zEX-}D-`l9cApWkcH~#p=LK0t-W=Uh-;e!N=)(b+-ef zgLVN~HA1a2byu}A<+0h$YR9J8cGFF+Ovth~D{myDm%94?bVvic>}l_v^6Glff&bHs z_bS^s(zaE65WINBFGCa(1XM+|4kaYn-V;$9_EomteQ|goopZzu9nKIu(A}d)kM8c^ zsnWdvbGgFK9P;dovAf1Yx@RCTwAA+iMKsMfgLAlku)txIo6=h@IYA0CDAX+z4$WIN z5KZG0ohAh1QeG$fiuozXK<{ER);9a&q8P3Bk=I6w)$gPt=D>Cy>;>I3(ox% zWg|*nh;RsKJdghG2hl!)P{5ma#KJ)~b$jD;Ga}nL)0KOY>p@(BbYobW`x`%o^|Uq3 z2<%8n5034*yIt|0bfMxhtG>*2G{mp6o2Ci>IQPS;_n=YFzRO@gZ&Yt&kE+7iv1((_ zeE7hNxb)J7y+sC99sgKsVas0e^#ZEI#I&sych*d)=SY5O#^((VIRzS(J%@Nxw=-4+ za{iw&<7QB@C!fRRQR37gc|tzyHDaM9C~By8M$4#2!>%POG4h(CQR+P+%j2I{FTfJk zeF^#a?mHL!%&tY!^_Mnv*M*iPJF*t;S#E=FGL8wHX>wUI$Z>WZ`|P?UOUm`X_hho1 z!XP>gYV`_2Ww=Vkc?v-vO`p9;xmc}X!dW{6}sW(W{Ftb&X(82UOkd?Srj_%8_!cpR^?)5?5 zY9CXr7todCb^m7{+%B%+9UXf^gA$(poQ)oPIjKrZ;8un=m}&RkXVqrDKrufQ9s7Bq zn$8GwhiJ_^MWx}%L6i+H#iPrc97V8sLBC3vNFoWVVi4c|ED%^KQph7u2pW@6cy{sH zcS(Oj-z_)Zc*8_p(~cRzFx=7Mo26Tsnyv;6T3YH;k;>n!b{>20a6KUh%xC@F_TB4* z*OK$jYi7zdx?#XohhYWXd#VlTAGy-9K7MfezPqr<2CV9J;bl zp@tI?`Z>;H&)S>krv&Yxt93_Tc$JPp4S`5vYuFEbBqEPT@c;dgMkkWO2n&B!AD_^0 z$L*+h&3I%4% zg=y}~^KIMxOBU6BHK|FN>9c)9Q5}A|M3`FFMAGqzcGo@#U^4NA-~X{xBmn^r9#H`t z%0^?ivsev8UB0Q`rV0z#f6;^k1YV)34q3bKgNv6LLf7 z!gIruH;+w^Qz8-Lti~LzjL*y0($`Itww9EKI64!Z6GanAP|Y9F4!uuwT6=C`9SYiw ze3_Tp_c`J}dyNF$*u|IwCz43h9|2<-{zryL0un^Mo)`smYtQpSCU?_;k~=*FdWG5| zlA_0fvu=+;GZi}TJGz6p0~m7^$7v_<`h3|%?R3yHwKyP1et=?A=2l^r|?>!l`c^#CS3s2<7H;ONRZ zAgRJd7PwjTPrH)~k091O&CoOsMikv^a40mfcu`Pt`2w2jVEt2ki>tY;(u4q)=qZ81 zgl)rg(egPy!)0_x5dSxIj?x%BH+_`dLt}%#<i(Nyr+^d7RF<= zi#a6n1w3pi{f)dqUPYyPge<_h|Kq zX?j{AOIp6aAx-wM7Nkk7Zq~KUBE^um?{K;3jTo-e7sxNc#z$LMkWrQ8I(Kw4z_8(E zV&)iK&Z#l|V$T%(OA-mp`FlI8U`EUJe)lx@J9jkCJ=W${D)MH;C?TEeI$gYu^%&y= zVQQvW@Sv*6Y_(VayK6)q9)kD#Hph=+p6EQA_e3A6I3m#F{weDc= zW&g(?*2)(YD>Oh8-1Gv*cxoeMk%glzW#1etiF5xtNlSfiAmDhLQ=}Oe>F@sSqL-X@ zD55V~Gy@CW^1U=^4{;3SOq zLa=Jkf#W?+u`tnc#S_XSTE7rARdb6i+z-8crCBJ~xLwi*i3-&A1l*%7v{PS_spFX- zM+lE-D{k=C1HA);2Y3ME{WCOyU7Zb@v_s9+=$2pebb6yxG>i1Qt3*9l0$K@hFg3Tubba4)cLExD)#?#O85OAC~G+XsMj$KEyol@-`p#WK;PBj2JFFuY!45w;7J!z5GK9*MCDZ= z4b#&R0-$|sSoA9vk<{-U3>!*MNTMJG>I0i#1FwY&{qRv@%_0h}ucpgFwL)29cBL0< zxG54kXXaRX{zjS2ph(aD7)6p{jk{_T629>xx>x=47C}v{Eq_w%`BK zw6ADN`X|lKts8;Z4Qje4^X$zVZ5_X97O}{+UNTzL2w0(!iwgMHK3vmlB`_rrGsuAq~*731|w_qa4r0SZ_iPa_($eg;JAFML5LGeBr%lk=6?XB;s6IS$Rw&jRSI-{>s>gqOm7VW z8YBZ~60nR9upr@;IHO}~SPpFw-Tsk2VHwHHsRyuXQ2xJ?ZbkDRbOv4CkmUaZ1H#L8JtSlX_jFaO#Q=|rM-{RD6G80g z`pM!Ex=5&pYN9|~Py^~WeljVHSPAejg*DR@lf@=PXba#v$!>S-;T80DV& zRCqpywof2EW9GZ!AJljj=AaA_3c)%l*enA#DaBfG{A1i&K+?E-n#-g zHE#G#0FpuoCN5-CT`@Ntf!&jG_g05}sj;G6#Jd~Qbdz#v zZps2D6kQUytP*grGHF8cs@00kM=V^>F2!G^ddE1=D5y^h z3DSi{znTHq?h{z-A%xEYHaeJDJUsh!p3$Nw;1+edpUa`ifkLyXip)oq4r<5G1_mJK zO!qLzbm6QffMHGKXF`ksKI6eDER_#v*Y)v9Bgn_>UB=himBtu%T0P8bP9qKu1|I8G z3F#M4Br#%pDe&iU|L^Hi{%Bp#!K9nLt6M=6Po&oqQI?kD^^e`3KFe|x%a3*ng;L6Q zmk-c18O5WAolp8pgdCe+b62$ZjR1k68R*!?KP?Y5w^#ePk{Mwf<(MvNxfA5LoaR}?tPN7lxtNGI=0g5{CTi}>nm~At^9juL6 zu77E77e;D;{b|o%^4f47cJy^%=&-A8##QqT>6o#C{j34$kH3AEFwgmi5fhOzcQItQ z&x&;LpeAS8_wc+Z2LvxwMyojBLH)F;58(bvFwf{?5J&IxGkurSCWFP7Nx3O#OWwXa;$$r1tsg>l{}HK;y7z;*%F)h>8hs~q1Esk_1Qf(Z7UZ^XpdlH z&^^{7O`r+-%=aEX1bvY+HY)wS6y&Wz|3gI<1bm`$E9z2~CLSkvjr$@tPhZ0m!?w{E zR{6;ie>4o^3m}74xQ1~-3e~X7`fS;;$^prRshH3 zxm`v}0I*m!ep`sh72dqb)wbRAiPngH+Z06NO; zFzGHi3{1NpxP*vrpL>|p8$aEl@rfH3Kg%vFxZaP`%ZI}#@z5xF(o=tm`jN%80odt! zs#vnODOluPYr$U}t-xQSkW#4u^rOe8iHJsi*d{>wM}+dolN>-0KdrVAHP2ye&%@P!|d0LS~-*vlVpevNdh@`|blGxJ^H zlX|xVP@may&Z>!?ZjGmT4d;lw)LQeqxYa`07{|3SJ-{y7*!E_)R(l9A`*aMA0Um;D zE=kQq?p|W)tH4KlRLP%#HIlA0U>dOw`5m@0%-xmz(i@Dkl*4f3SJSJ`RfcVFsTMRS zU)5X=ScH!)PPSV$E%pPf2__>&+5`|gr1^J-e79{`);(5SKoGN9d9uuKB*SxFmCRFo zIR!C!!Iwxfp#t6J{nKg`A`83&2$46CKFySw57tCWDUSPHEu49E!hZ!#Z{Y$2u$Z!7 zEu6wV01Uli%LNSo@bBi(R3K=nKZ5nW4tKi9v&df?sq-nh{2+@>E^QXlSG~Gb*J%3= z4GJ&{f^px^Eu@CuBZz$~NhNt8+Tdqs+jjrg!{UoR`&^$V2WIPNAcpD$`2| zt-LdrDlpXDW~x801v!e%J2(U_Cykj*1Y_;0cB31V26JZ1TlKyY&{o<)Z!Hrjdp`HL z&y=fobPTNg$~SNeU%2j=mxpBsi+>%_`6=*C}>n7LsIR509be?tTA39czBJv zCL}1rjBj-!lx<|X%;Y<#78aNap!JF!+$0|QBGA3Qep@d^S_x_N>gU%ROI|If>OX4{ zFYw7j&^G%l1P`BtHi)PxkLbAnWJVki+iB{@2Vz5eCcr5L*?pS#&QvDbi)RBN8Har7 z7-Um{fytMs)VRyow(<_JPzcA_DA3ohUw58tj(lg8MiNUB7DdAGr2O;HO`!pXTi`s$ zffNs!DFByJS+$2I8OgX^g|%fr%JoMHpHaF`#m;s=|Eh z3}I2)(hn1VB5xw1D&U0o(2Z2Zp#kAlBJ9*&2?+n&t9?9-fiZ|;o`{}1&o;Oud!xNK zt=n>CX=}H*hymZmhhqKWfh!L|hHki>_VJ6G>moE$Bsv$qP1khYcFK(^*2*qWCeuLg zB!io4aT@XD`ALDklhYs1BU(5PeGse#gFG`&$fY@|>9#mpdxu}N8lev&39NGFptMFu zbR4LrBNQO%YVcs&1m?YPM`<-isK|#=-{VEbhj>v}nn>&~X*>ExwZ-_#5-$?nuc;ka z6PM=b>X3C`Qiv!YuzA%3kjW9BLu*jEo3sY-sMYb5y$7#WkC6PDeCTE?#wW5qIz}8x zSDfekD`NoaN81ECQXDvC*>8#n3}lO#tshM=+6OR8%%$ByQW&RLskaXv6b~=`44Uab zXImG5GjWO5yOs7}D^1y!TN&wshNja(3joQyV9k~hHguv%@ zm}3fQ^ADbf<(Y{nX462uIx!!fuJ_n87kPug{Kuu@LiGUlE5_bamhDa|_$s2sjED%w zxLUf;KTm1_;^h}r+5-UOB|>Bj2tEqGLO9^l}Pu~JebQ*v%wFV{HC1B z!bIJGutF}je{;U2!`La$r`eFk$Yn}8h zsNeJnk&>GLD2T@i;kp*Jk5PCDI94Wdnzrut=;S|*b7U<3v|4cfJg*;vs)+?$v2Y%*j5+^3UBF2bc*I1+@WV$C-9JM6 z7$^L@581oQs!To&U)v{W;ih6X&EIU zDqR>n3VajNg==RNRl~K!N2O%wWiRrYMhbKm;{Z0bWH*K&I;%Sz0l-Pua%jKxrIM|t`0dhOb{mKuvm4P}K<^E+4i&CqOP|hb!v;i?8ksNW!o_4kQM0Y&__ny5o z1dw|)Dm*WOFf{bazGh5*U34z}#gQkC&BVs()WD!>k_iK)*PqJ`4&b3h5F526yL!Zk zP57I1^|*?0W8&uvHF1p;I_@S@_OST zD^(Rrm|^Qm0AkuBJG`HN zt^ja>YRFLXBVB?oM`)ycEL8G+kvt4d=p|N{AAEQi5}49|P2{|l@6?MdfE%RFIOW!A~_(6Ii2lL)H$7swM3Q3>So2Y zL*itu75=moo~F-MR1yW0)2|L>I8&uj3n2I}J6sNOO%#u@m#R4qVb@$Ie%!Qf?53z~ zzqccHcXbKuwzlv_ze`nUR&Mv>*U;U@%bv?hoquEKnP5d2UH=>$US!tJ27gHsJdi-F zWo`h_i01!?ueX4Ts{7u@1wl$gK|y-x1_9|7knWOJ0g-O$RuGVIXha$*X{n(^x&?+# z>F&<|8D8J_^VRiR|Fu{y#hH8Wxo4k!_I~!WpF_I(*N$~JPL%bQ?0v=D2B^!-NZ`_< z|JKNNNoAbGx!z80py{W)h3$1gdTy#XGXD7#5!|l!#joSw`Q_eRs016mUBwHWzh2-S zjCu1E2`-hN4NwyEH>{|>q9}25tv%8>c-0sT=uKEZ-Kh#lV*90L`(F4xvSN;t-c=y%Lx9hz$9sKvjifmR zJ#HRutrId$p9QD+Un@5vLsS?=R-TAVGXb}Taz+Vq7&{}ly>Gh66FWNB-DT6`ZrtOa z(LXqW?G=+<9?Bu@q*8lJO>j`f=?IU))+8 z_rDgiy)+~lnWnh=iyy7|i)RJT9t_>Po4SPVjD&c{KDZF&AD({&KoLC1Cq(o?HqSY2 zUtYpS*0g>U*N=sgx(n6m)sMHIKjC?AXmpluSW-X6Ep(CC+Bu;_Sd~b3n4~sLc$R0I zW$4pd9fN#CsgQw`-UshQwK- zVQSA?7|_LU(4K8bVP8MS4+@a|lWd5x{Pj>A5b*n(ZQjX0SkRx$P&rsdbj82C$>xR3 zilPfuS$v2Xs&5gf!eHozD3kv+@NbCUCk@?x-$i`nDDw+NT$X;XACy1;A*F~t z%M};8{$xKrFoMv^`+sHCcUgV)(4)FYc>o#wGwH*xe8neX3Tv@Z+F9|JzqU<7w4&xU zn3C(OON>9I)`O|HZ>~wMVHG~~a_GpbM(aLPnsi>Nn?{e}ExTie7|kY_>-Jjih2Xy) zPYF~7~;7gK^k zdG_F)5Lti$^$w*aRSJPJQl!KZC&jZg9uqcjv%4BVS*7|_R~!Y4&bRlg3!|(0=2^uf zsxtrQ;Ss}V!}85Wk*%rw+RB5EV>2f?^7MPXXj-HFj@O=zoFZc6j6lcU9b_T0a;i#y zj2#Hi`TqFvgn^OKzI)iozFt}0V=8MWv%u-Ybc6V~%f0e@(u$Ce6jd(MG^SlD2vc|l z;JW`;a5Qs`_7-t(zseFt!37~N8TB*hU8Z=j=6#hxIDp}_r_A@~y?r65Kga+80wuF( z5FdMnJ#-IU(+5QPN!PjaTmA2AHje_PFx|0KMgIIE(lnx4vu!)%3>X`}->_VS9&<8@ z{_F>d3V0pw3w(x6g?*vRd3VLS*!eii1Sa!RZoYjCuGhM_*;0E%NMs zr6;^L3lcCw-jayF=ofdLd{MFR+uA--h0xh-jh343EHLX;KKd3}b>;~XupEub=D|LY zf^Z-k;PiB1R<&OP#G*|oHNsmfD!9eBGGTw&0VUPb5A=7SO}YS?ddmSU zVqv1@PQWocjf*720eSzhBazD#;jKz&W)3PI`a&(sZZG|Xok+`y9#ET2*VWDyhZ1o? z!$mGf?2=`>hPL^<$eM7e?X0-pKqB5C*Z>DkVV0f&$GIf&*F*iMyj*niuLTi|40Dyf z!#i_ByWY!l$0V9jL-x()gjrRSrO^C7C%_M_wG)D|Q8*Z9mV|N{o9^lnTHz}qqDK^3 z;Eo>2V*ce_+sb{$BXnQYI*Qxme3yxp@yxUyxb^DrL#^9|&gUs=LJLgAw?64U!#BT; z_`B32vLA3Q32~76CZ$%S^@YK4|9HSQccjS(T}&xd8R3(8ypx?)a{c_0zVxQvBHevj zJ1dSiD9lAxo!lq(CqxK^)smA=n@q>}e${e4ZH8)HJ_fZn1UV|sA~}Qe&lyVP;(dBa zE@#gV8CA4?xO1Ox$Y3K(_8D-;#YA8Ka^Dh~-}88alCcB|rv6;iQK$#~C z?Wuwok*^{56?37In}I>{DU^2Duo_V_Rb2J>lK6ASakR`syZ5{b+OS5Uv+neYYMIF0 zYv_7M#Kqe_{Qy9$mr3(a|L2yjSGJ$%T`^pZ4NJiZ+0BbvAlEaY+9u*sS`7g+ z^Hvh<;LmjY-2Mbk(WzxedxEWft%OBkMMfdNQJ%5VBI^PsR;bB?jeP!ewfg> z_wk#xzYa15_3NdtOa_#88w0vamb?ZLRLJhmC9YnSFM0y1!mb!&`Il^Zo} z#G}1;c@@0%Y2+sS(x5b;iFV=Kjj~pj<02lqcdQ2iH;$kM?zSBe9Wat!UeC+_HVIV% zdS>RRw6ruh)@k)yc@g-2LYvU?>3Q)Sj_b>x#;(qXy3Ja8spgVZ)-8}6)pYac0r&4? z`<9V=F&eSjk=d`E>+;LgE`}P1n@4AOyxXNA$e{H|_H1n|aqO9ee!E3S!Wv7w7d1Zs z1r$jAh8~aIMID3{%7aqNHC+6sS)l7dmZzw5{lw5{Ygly%fYeTrQ2k|%#x1geN!9!> zR$-BE#0!ctia(wqb6O`rfL3SN#*-`0HIx4HX}Ym~BfL88gUqj9&Y9|?6}fO8T1Pgp z3`QpT>NgJ_vEYNr{d#K+;p<&cYlO#v*P1F%fAxpg5;ed=;qrB7ei;WM^0?$C24z+2 zqg@V{23{41Z$Vy>S6 z`=qeEpZgcUkU}6WWrOR~;&D4Fd#w&Z>T6`qaf+EB__sV+j#caOnuqVa3%}eEcOBU) zaGFy2Wd#)~@Du3iAjErAj_LH56S94P?q-1NL^=5BR7x$=T@Sd_mbW<{xy2MHh8+E2c=i4xR0UtI3@M25#0oRZpAZLG3Z9TAyLz;akVqc|f?o(&5I1DLu2u`Pj>2AGD{ zfYpv(U@+L&J;jJ(YL+QdMdr(dH5|ea)xz=PFeLg z@%re=KP8I0nBan`uWvE>{&7JF2<^j8q!W9LzL@YU1EmDZc!4+Nu5O(c{HwFv`$IWe z713(2&srW{gL5-yg*@#?hF(m%-V>CWag5%uZO(?&J~#S+Fyu%+fI5W3mWG@YdS zt8;r}iFkg~;Y^!x=v%j4zjfOKK)k5|=8>C&iyq}707Xm{x<80P_<g-MUNs zv6YYtU1e2W$=#C@Z(kdiFUImEtr{Juxjl#9|7*dd;7QX+_t&`Y&8ET}7tTgwR{|4Y zYzz8yN0BfE;^UlhnqGuQ@g%^G32hNSaAdJMHKat{&<$P<#jDOHWA0q6V*NEf~{F0OXAL?*zY!TJSFVLa%laEkkq4}M`Jh5#Vn^eeE+PT98 z6lh%eY-M)}P4~%04RbduV!`9E?r~B%?m#`O2cu!%Dx&rJ|}#_VxVR4w|doJ~L>wtiY`s8^>4r*+Y=- z_sTH;{7EiZQAN~vZOz0$dHn)Od{Vl^WO}E8s}gtNIK7C?rOaWrs>&e`viTXAM+(Up zEGMc^c}i8JBJ^MC{(7D3lyr`IZ7_}1MXQDJudgRhZ>-{te!Co>^<142-hS_9FPiQ@ zUo_N>*yosAk0*Z$J)=^d)%xfGEI{-S)iHS~_YHumr=PnsoP5C*vbV z_mSOY+$3UQg{e6HR%qt%*M_Ix=fBTBesJ4m^)PT@PHVbiK4|)V|IJrif% zS3jW0_RlHi{2#}RaM1yxjACJB7Q?|>O7|bg6Y}++LNw5lS44xXN0N-mOS~R$3At8+ zVndf?^0Z>k4&5T&@O{OhE9uTYdiEId5e%g=+qgaMTu8P{9 z!DAMRDh4#JR>pkLKKbg0QiO!ix#pgEoE)fRc=32iUS;2-*WNi2q*yG=(c-d<;e%^f z!cJ`YxLM+zvP9b-;JL|#!qD2@W1;aTjjsrrw-taWl6QmAnvKhGKrTJ`F4sOZd10cC zpxy4uIXC%hvuhH}D))YOoFTOS1eLC%9?d`#bnys3b~8WM8c<8usBl>Lme*TBf>*s0 zcn?lEzVk-=sL!;xy?$%XUY#r=jUO-`Lbdu?uVB z$hQ$N7@1DiB}4~RTa<-VJMjB0uZ9bzPZuvRj#4ziex-IHpj%z%52uWcuOH9Lf=b1r7vy4iXSVZXC~ z**fr98dui+*A(II*gOGCt0T#1BRYQ#V=|G@<8xM0DLtmZB>O0qYFI%$j|jb7D4!y( zwt7Tr>j$whpC^{CHxryo4{)p28f9qkd><$i*8PPck=JU>^BAa=|MhYY|06FR4Z0%@SLr3SlEUn_%&iHR$$Re&Pv_?<1(P0zq{ z*;Ouv`+|*q(do5`jNB`uOYz?Jkn~sDck;a_UWC=JYk^a=);(h2Os}b{HOBPe+wwp$ zL7S0SEOe4_)0#ot>inhrsqn(s$KB@s!E#S8T)6mA9_{3_3Gp9HSBPNkz>9Eul|HA^ z*<^Hg4xi9O9&!m1C4=UNwG@gmLBrw-xU7g^o-raVZUApdhy}J0vya^G64=>>^;CWd^SxG zAXApmBc7F0rKnz*IFea#uT8twMbc7r2ex|8Vew!?0yX(?qC&^+(GFcYw)13uVxOF; zlJ2Dhh?=O=B(J00L`1YZ$_mH)GvDX)g@Ayx8KmBX(mM(DO&GibzEF(Mp)Wq-^WlUT z_iX%9?^W-g@-Pk)6tGOld~d|YFWFPQbH!}dZkdgC#du?;jKpcm&c2TQYd`23ax-C> zx|$>)HhDQ*Z4$|j6J)J|)5xS%NE!VBZQ9)W=RzxMS-?$G}c=XZ~Qvp;FLc*l2gi$ib?aJ~AZGkOn(UWTHd~+n1+y`sS{f z-d3#KX6;j=3TyLr3+wE&mm}JqT?)fm52Dr{!veFDB*oZZXcjAOIB1^OQP(>LB<)O4 zOIUufNB?g&WQnM<814fUl@M#cHxHy$Sz`#=b`Z#%Ul*@=& z_xx3Wp%uaw7slm6Q)4y<$#e=`#a9IDDz<{=DlWG}KGbaE50jBFF5AOLQA@nj{Vj!5 z5(9q1nksu*S`JoYWVFJIP{rLq2pLmTBMp$}d;xg*RzmBoHV~`;&TSI=k)dEy4B4lj z-!^va7o7+?K)XdVEnRH^ZI&VL8dto-RisSpFUOggG&@zV@JZP>h`u~Ry9O4T@x@?F zD46w(riC~Ec{KXP+rMjygA>n(np^&yq%P$hdPdgwaI}xz1;?!=O zlA+Q`l{t`2w)%~M#gNsIDSfP}cQTbMDlawaT=@8EFI>cAmy3!ta8uPpUwG4vZ@JB% zbPY7>Pj_x)?U!uqIpn90O)`RS8u1+_3X@t2*>&AEy~wIn|Ej6|W%_Z0Jfo}C;9wm5 zf(TUJW4k@I$f_IgcgopwV3Ek>*$cMTn3x>G0WTwJcPi$m>pFfEPsTQ#*irbLd_usQ$@$^0zDklFWBH2A|C$+Yw zk5lO~qG5kb*p1k@Tujafc6Z~lX2BBpxhkAlzwW7wJub{C#&dgQ26e71GF_lsAZ^(vR#?rnEMB-v=eb%QU>!U?iD7@pXBC?r{*jpTU(dd?!@U$KGo54DT(4- z9F#V(vllw)C|&qKMlcdQd9tLaA|x^7d0yplQSY=n7|do2@}3VAJ-HpiPKVKvg}l0q zn;KQ~m4hwH_Bap4JNQ`W9QhT9lKbIt_v@_NZH)~H8_Ha9gqav$->+9MtWM5O5`>w6 zW~9nH?VA6zUuFvkE_kBIs?uiM_$Ma-#fE|V>L`D@GE!fNKeepn1yqUP{LvDvit9z9 zZgoUjW&uKvAeWekh_tk zFTMaCWQtHkhy!lCX|C#=wGcD>^lYBbzbjio{uZPDzPlwfQEo1I6ZHAAAd^P1~2s zi$QMX+K(QW{XJ+n4VjiD)Bu9|E}wbN-v#Kj5OgQ9DPhN(x34-1#oQL=K36Q*OsAiN zogdt?TWwD75ZRm^vbU}exkzNp6oefWCyOe{(k+2w;XxoO3JM7*9WpQe2;oJ&uuw>; zRT6^sX;n@Dg#~rVq#X-uzPN6VMd0YV|EFJx`SSdI{O)N6L2&rM!5u;`MUm0USN@qE z2g+BPMg>6})iK2xYut%$n2B#TPWp2@t6+^1-4^zSfeqz+PiJw0lYJ&8u0E?Ay=dWD z#-Dtb_7ik*`Qc|GO70MMu&Jiy_`1i-cCqz3QAOE}hF$F8N$QM)MEhds5e)tPIhXQe{@a#lr2c zww*GbQKy=v-8f>|yr$^u*Qg|-!&*099UGt>H?Xb62zg|j%Jto7G2GKB!JFz$ebp2| zZTbOvv-qk#kElgP-+w%9)y|*Y)irZfgQT>E*Zxaa^0Ag^d)LpUlNTk!zJuKg(}m{N z5fztb!OUK}*u6&TwTJ+Nq>$lqCXQ1xnJiZJ{)Ml3im3=Xqmh)OFAPJ4IQ> z>r+A3Ui6>K_=9JQ`xaL$-E6!vvE3zG3&l$9Omj))84Mu}SS=@Hi{19Ne#9uUxF}Qt z2ypHt0vfd@$^Da+BOwWihXiTemC$!jtCfMX!>Z)rUKKRt$cXM=mLo&UEupmPL&+BZ zQ|+5{+9NON*uy7xp2z+|bfg!{*u(i+rOyOl&j5K|*ZWw~TIiBUH|En)s3W#=woGes zy(z5bMOXbVQ#)eoF0-VMBfBs`7k{`#A3b+_$tK(=>vtDjj7N~ArA~#4!KeKiM9=ur z3n`){GY1Dct1W2nlrF;@TkU|VCZ+gW?K>YvZ4;6+2A0YCm*=TM94=noW;pDtaW0+nNwxS^`k$pV(Ge6VHWYy#5W}}IGk6bZRk#5MILB0wcax*oW=3IyJG?2S zqP4?1`i-;Tv_oT7JF!|m(tB|54@;<$#j8%B_aIacG3H7ZhBGEIXSzs}&}({_f_1Y7tHs&=K;ig=$torTrUs~bsYhkz(#I5gRl zrLniV4@7k|gG1;B88DBlL0VU<-Myz3V0Wye|{(&EJQmB$VlxSb|eTp5k`Qx z7I@}=LTVCEA<>W^Yu0-p_-nK;vzeY6d~(1YWC+a(*A6JqdKXWZtyP#>(f@!R(Lrx7 z*Pv0}xop<8Qk2}7ct^zhEd91Xb>Vrr)2D?v;-o6ML*eWI8U-u)npFeslOa_(STdh7 zGulJq#_({T?RlDs0pY4EtG}v=lDb&pGIp~U!b!c`LKXP0%65*f@&G2mbga?S+0oDfwHtt)GoqTuOk=^NkXQ7 z7T_pZBIK1{wtOJ$Pm>IpT^l+$moDcCVm*HOG8VwMaKVQ=a?@?^TvYi=XV#Ej_NRlS}Y4nIM3#2Z?apgl8HkO>z&iZ`=Qx>CDs~ z$D2?zk#SDQYG!zrvIs$h%ix%l36t9cPBHZ_VCq{bu}?)<<(8Psqh44$dRNvXuqTIs z-POku3FEfrF*mu0$-CVR$u{}MV#HB9U<$B4t-Eb+illz5;nY+2PFvwbIsVi2He=_w zS`7%q*3#FR?=u96DU&AqPeK=9W=i-|=Q_W~^okS1)fa7Kl1__Dbc@V()UPtHw{8yv zXu+izodJ{XhZD+|1P>lpfc#2Xn@@t;`>`h4Tq}6Rse4gGQx1Zjh`#2HxUN1!! zMU!lq?r;W6Grmi3v|ALzQwXD%8Gyz3&I0bJ+7))}RFhOp19g!2zALeDVc?*ntd~an zHGasYlkvD^3fhc1!(Cft&c;D8ji#h{@*&5@RQZJoLL4P9$46ml=Zax7-e^2WMp-DH zJLg2+>v%NI*@Pzth|Vx*z|`CC*$ADM2y*V%Bl4Hcv2H;zKvKte@{t2!akc=a!jKYB z#`+Vc;y`Xkk@=!jak)C4$I}iDiO$T+C9Wt)DXd+6(Xc1Ukw1NNOi)o^ z&YzsI7wF@3lI9myn1tILS?QLyi|cRVbFI`?xhTw7FLD~z8&vfyGjM#LVD@rK$eROg zP=rE{HcRJ2CSQ*(kmQ(7#G04vO@62nS69j&S!lJXi^a|xYOgMxh62nycv7Q=%-gD% zFp<{L`O}Q>A#dS9v<;gR$)Y@ImY?0ylvvgT8hh#35k={{#EhifDmPto{0#tAP8O`hhh)LpK--9 zCN&YY9j5uRA7KuNvU1o)mhmws=i`#=5`LCRGVXR`TdQUL|U%<4fFt8h3I={ch$~?N{yb!&k)Y)m2#MtijL~5>~ zwoi`wO`ni)c(-Xmo~VD-`bha?X@!EPQBP#g+ji5F`RSf%z56oku~D~Wy7XkHH`o0 zSu2O1JiP2hT5Y!9R|1o3@*XuSpl8@|hW+0t3<+gd74jYuu zbB|Gg+wj~?7*!VjcCN8^#q_Mqt48MhO`t&N31<)Md!=%#)?V*EfW$BCvL6PHmfzIJ zg)2YjwDD3N^4QKXx^v)DKlotjwL4?>O^q271itmD#a3bQr;#~*7RX4ctD`2HRm(ZX zcFqpp1_pCrolHIqFn9cw-;8sqabv0E%v}a_`gKn>7kXdrWU*Vqjhe+1wcnt8vujA{ zTv*NnNHgAEV0m)6G%Gr>+ROxH`EgKrEE?2t49;*O zawrp2v6lyOB%R%bp-}tkXeJrC;b2x}XnX2;zmsPag4r-12`XnE=2is=9?}2alC&zM z4Qz`0}@$z|QTk@lYKy2Gc`JI(KsQMmukhG@?aw zfDIV$!E8)$(h1&T;$}a8n%g-hb`m8Pxp#N5{NPz?d>`?z z_ncV9TRLaFi+wb?H+&KzYAsLf&9Eevd&tW?&CwaS8csoVF4BHbY2DFn$M(ev<_#KE zF|Mvp2@?jWy->m{mV^M8B@ifnSSg$?s52o)$@_ATb&ka22r3-cTu~{t(#a@ z-zX`bzeVB@jl1Ae-}gY%g;@>+vGxTX7|Q!1V2|iLWEy|+*!me}=(e9HO)EjDKG({q z3*qJzYTN8_fr9_(~wQn*048|h~>F~0tr?1rsh;-Oh-$R_F!<})ff<}8qL;GU4o;^#&roX zsNT6Iq9I6L7W;`0|5zjFg`$*VXd+^iT2TM1XvXAB4>O zq=yKf*aw*NxcP@^<$osWIw=RA8+&_8k#`>beb5wQq zLAPWaP0&U^Nelu(9}kOSK;mb)9sU3qzV#J zB&b0z0rWI7_TMZ(-f}mZwS9Vq)aQU0;{jIl4u&K*V&6mt`zGa2Y4tzluB2nZ#a<+F z_8Cww+QA?nv?8ec!0DDzdbSOy92P^&rEW1`@4Y4|e-8vr3gptp2&OJ2C3rGQY)P&^ zci|M&a})wx>}O3wDgOPp(uZD&LYAHR;MGIO<>tPTBEmm5mM z@|hTLj8?S;eQ}j2IUo@lV5Wia;XDG&OaX&NUdVX#rytNkRzwOgMt-oPwSn)Wa^mO< zHSX1a_KY525<7!Mmc4Q8;$syyHZq(%=uvT?#ly$P5J~@g>Ds)PYK7U&ddZL1@<5PI z1i~?KBk`JP{2#~xh>t{mowqr%lc)iOS2{;lv4NmeR6jyu0nv}lzCR>_`<3D@qOakX zC4o7D5Km17UI!sp*k5hwwh!7IZE!X2P4W$TIncAaMbTs915bx&skj>)g`nHKMSyR- zW4=27Bk~~r#zzq$YXg;_vkgbx0}Yx0F3v7JLMMmLYim<&W^v=_d45OKkgUyTx_STt$NWOf=Qu7 zjz{Owi?z8vi(b{W;=nB(1@MQk8 z>QH3QWv|~pdOh$d+ZFe?ZcBe(c>%J71b+{o`#()agJt#;EKy(M`gtuU_rT0q{q?U` z`8_=8gXw7qvRuxPn3STjOjcuEHpa4>Q${IRJU2oyo0gFoL1W3A3Kc_?5;ia&XI7%v z2=hz<84n7L44*dMqnnV`RQGj%53(Po`7*rhzl(nvkh{cDLD;)ZU-0x~kmAG#XlLl2 z{d%*j4)Pz4i$nmAe-d5+@8c_YVB-bee|9Ux!JrLO0}I&?nJKpwI8tlGn$B(%EK0eWoW4#KlDqtpGBefmBwlryljDSQXF3a*j= zgSdjoGek3=-cji_eGH-pjP%DK8GO+O>A^$xo0KTxl`Q{-IakOiO6R&CIeC!^Mc-}8 z=Ny8|6X4?qZ@T*ve!v*`sr%c@RrkXMV5yGrBg0N20^o+#2+LpV9YsV8DG0=qMb=dY zBTne4x~;?!DqYSGKJ@=K3Q@TK%QAq_U}2*m6STbop%gn_%7Z&$^=d$`d0&Fy0Lu;^w=~Zy+g<}Kz@L6Qck$2we!bq7!+a8ypj$a8>4t$}nLrn({WaVq!D&c>n5wCpBAG9L>1b6s6SFnFQZSaOqrW z(FVo#Y+F2s_be7oRakXpS>pKCEYwO97qMjF5agsnZpE&8^{Mcx1VNrPM_)9ypq$xpM`DYSn-QM zuX)vCG-%lU$ilm?&aaQ;Ym6z4W)mqsiUL*LFdE zoyO(IX4G?`)KP<$RD56F1|2J~Fmy?(D{7eTVjx|D^s(jWeZy90yEbU*DaAq%Y(x*Bitxpv&U19^5g$Q?T6wNlVwFXzIwQA#?M8UV&sLm zH;<<@Gp6km!^$4uM{eg!eW#?&^C+D(+@?HyICO8DD&5X@(Rp;MSFBdSx zZE!O;HE=*HVI5C0>7gNz28v}Nu{20&p*4A8n@Cc&@)Vk>bU zZX(>z?=}jFEc+K&5phT#)nFA2PpKc`es*UVO@N`kndsmo=dRjN;ug|hpw&$tnN!6U zjo-=};YhC|oAzhUUX#(P%Jpi!{|!AiL7O2^^oiyOpV=KOV=5oqv!8r{W>t@IkP2ts zZf--|BeVBh25AmGfLke(=RFb8j(Y#uLg zSUBwXIl@NkkY?>)DW$_gC!|2&`?WYRa%QSg|1t;d2FwFVgvrjs=%_v*!q)cX$}@Fj6yUfu>| zVemi*uXSnOk5+vfw|kLG4-2JzQWm~U1Y46cPgv!1ACFr5&zZBe$#rVE!=u9pRmGX#SVM{NDwjpk zy6%;z91-y)Fz(|DN<<65T~shTDz7sm;3`L%l%yKeywE!u9sdbuUEWhRyycffB7E7f zFJfxMLVy6&vn`Z{*>*r&bnLKNH-LZwIru&lZgy7grbz{<-X(OLEh{nE>-Dxezqk_H z`Vfuar(AoC(VVCFO-2@MGS|6{A7W~b>lxB*g<$;s=@MD# zqgi$GA4vH6%LJ+yf4+6TNAlb9ulEn%DAcYbTCoETif2&!$hYM_KrC|wM(5}o?&pUb zFYF0xR*e-I0R8TPUr}Tw-dt9xosxOQXJQYw6q%@5no%#K2LB_yS!TQncodKMPo%G3 zPR&#!phSEe(kk0Agz#O*uqBK@WYF&P6Gz?y?3sBKS*WP|VTdwi79}tAJ-+L|VXp5! zCdz0hwLVVk0F&s7HJBqF=_SvUyvT9aNw*Zx0Bv!yo{7j%30*9mN@1R z_V@GtqRO@Ma00A@?=Z;_{FCo71H*CaNB)GIuQKv4oSf_h*g(QH@nsqaPX~M+Y*qc` z{eXlK;AvI}uJm)j^)Pu^;m$&+RDI}SHn^bo|27zAcyUqDBP(&Mdyw`g{`Ru}nkobp zsls|W=>E##+NDGX#O4si5eY*-zkhNQw#8y?1Tw(BvS*ct`4`)2gbwW+F|wpiJ?#CL zVXW7j=^@Yks)^wj5i~|(FXYU|>(l?X5U`Nxzp36@i|aX&ewfVZkKLa0?`rjZjGjUC zNajd<@39_-I+?jj7`FDKZY;Wv#Gg%D4)1P zXW;cEaWL;QxR=d;>Yp6k=B^ozM1zRg@kS~2Gi>g^#{iWk+(&&v-|uWaSaRcX*z;?~|mxeVA;j^nRM&z8WE7sau3hSLfs~EgB zPl2=6dkPRwdpwnN6m?(Uu6D{`KgXAQiLB@gW#r23P;l5%_zJO)1!(l|n6nK7siM9U zobrX?-SH<)l%uw6FLgj>U$` z{-4kX#6MMxDQ>anyA3=DPXAAuSG&G$PaaS?6#M8ZH-tzHr#G&RIBq#tf3XyVJDxo$ zxLu->>^M%RbD3V-+Sbn(!V-88=amOU%gbq4VtKqS%k zcO7?E1dL2DIjV7J@l5U$TfAud*0@(J&zBl{ws6;uvUP+Qou|P=+DzGK`|ik2feFyU zV6n(2!&)IY3{a9P`kBLcvcr0-NV5=Cfl!+Gn+`j1#`XJ6y4eQQ`g8{&O0N)z&Ob0I zL<#k9v@F=;(Pi1&z}b#wLvzUsd|NE~?@ekq136Zci9PdDQHzbxVs{oB`{5(TxD zx=+OI7G`53vddjcrU`!t&c}@61LcRH?fN^frxbuDTeoT-DCEnXU@owjtxO%eEf6$2 zuzQ}bp4BN1{uV7Ybe-eO*V!(XuiV`{HZ~mBr#p-WMQ_J0pxT{QV@PsRX=VMe^+{+` zqoM^ZkSJ8`h+$icp~)JU1XB|NbjAi0dYdVHMDJi$dVX1&b-s^G(}G>|ya5?Be|pMR z*mHZCMXSE!`yVm~VM1nnw!6ICj&Z=+-pod+-JrCSVcmeDU#wy#P+`&8azx@5RXMHV zO@tSCWYIqwBX;1UEJQIIyHRfyOWNXX;>@;W(Gzw&H(74Tv$)`LITdeRtv^ucYUxAb z@=SmDLQz0C>8ehCgMG{_w(v36?P2dE*reS?i1EKxcLPbv*LaZyjEpLbmqMXyVTwAqrl{y=aTXqE^Ph|m z@jgnw&3D4Dn`xckUikH5Mh$TefJgNq@rl>P)A4ORbLcMPnL1}cLoP*NxuEPF;ksfY z+h$D{`5)v@Qx@Z^$)eK;_l#8WbZd=|2m42s?S7eRzmnIvde81!YppVziLVc7v?_7e z2kI;$ocrtu9m&ZR6QEGPP(#cXGp3+QtRwFZeZN6HLin4n;1dFZL4r6vg*RslQPXQQ z(z9B@i1r9X>IVKO2J_XQJt0zuhL&!U(owj5J!75 zn#TiXuqkx)>gYDcCf{n!-2D30H?}0DrZr`*bGQ-DhsXyu%sU-Af;>`^M%GYsv`wll zp^F$6??P>H$np30RkRkqV6O z1gGsg7tEpZQZG6o0%jyMCSBaUk0a93|EH!R`u%ncb-ykJL46dpXiW6ipl?c+sOgV* zg0u}Mxp3*(qf4%GY4MV6n~Ox5(%g(4J&VHOydy%k#e2P6f)&*TU_hO3uRp3$x)Rg( zdEVPLe=&G*9tCs~3wER+SpUr3^#taiQ{yoMgQU%Q_+@XzxSmIXB_*@ENB&Aw{wPy$ z+I`>qH&y++jqAb86@Pkc;P~6^J#sfi0}`&zof<1NM<_l)B6X&0to=kGGTEmgZ;R2a zMYXDfe0J4W!yGY=4s)f=ohIiC;@t|JYw!HoVqaM)6=gJAHxUn7Oeyn+Z*A~O$#M8X z5p?x@SXujc(3nyFBmloF+astV z0BBQGYJUlnUaS^}`%!nO@;DoTZqN7vxi6cX^-Hd%r+FM_hk-(+c?OhcgM~Ei!&6eZ z@N8NEuW44q$>o_XiR9Lu7^F&(r8djY$Me^k`+w_ZkA|`1)t$Wr43oTYfZcBF&S0w+ zN>Twq=N-6}8tIZ4-)~M`w`D=0A@iBM*Ys{)RN=E!m)8Xx)x2oNxS&PPfYa*C@MV;9 z%9`uwPOQ&n15vMfr5xCdK>Npk$U7z;y`6E8!Ap)gth~H=^8Mv9F0TIw9%+<6OP=73 zR?9!wIeT80k|O#=DVZ#~GsIZvqFnO48K@-?$XMzgMMR6X3sNcXzGr&vZ$vEDAelcu zV?-oym~sp{-hfu`*?i}M1xe?_*ZaHK%2iL=g}LU3gqDsFV%3Z?oLa24^;snLv-cLi z%&m=wcSmP!xpmo17ZZGbDergbUG5297lnUVeG9jU^uZWcM(dpa&5ib*$pmbU^+d07 z{wBJ|R_--=yvz0s8XZ-`@*bBS(?hj^t_9F7XSCt)8^|iS%LB)%t*eWxM-eq^D$w;< z(o1${55xZ>UvM`?G_3(jFC2jr!L%Vsvo}eRYn28*y0Y~I7WnmqjNT4QFdOou^`lUR z+vJ7dGy$TOxJB>rGj1X=zvIj~>GVM9Ja4!6Up?G&h#N`*edAGUT zA}vSH9W3nu0seqvW>BR(=%wk8X8G~TT|sOjB5qL>sP^1z9zIcXzteKYdycwF&R&^>nD1V!$g zwR8GdnbuIKKjz}=+IV|V>}PH0CLABpj?P-W#m}(8kr?f|{TtVa`xI9Adxt*vKI}oB z3SJGG6L*gFk!FO1LNecGqoe!L<49!OCx=W@lHy`YJHJQ9$)Jh8MJ`R1IcOb1&K(=fipDxk(|1S1k(@L6fbo?MqWxIfR#Mj31e_$LdoZY5uI1 z|JLFrS=bY-kgIZV=OA;4-_3+lrN9|GUNU8x?qeId(JiFAH;@ePK5~lSyzWW8si zl6KTMjgEWyp17}p5B%qUKZba1P(Ma>^7`O)pCwp^Y^Tw2u!uDcs|SII-&jCyoo zH#~V8Cxkxgx44~z3U^WItE3U6zh&W6HIYpZRHrg!3crjVGoRNG`KmA|>^8t~Rnqv7 z|C?9gUYs+G`7DZKseP5wLFCw}^+m#N1G;nZ;&By^K}xpRR&^U+T^sLj&%(KTF*{YV-uBJ*Co7>5pnR&Z59W`H=LYt9S+<2|Ty&PY6VpIdxwU?!Cu2 zXFL7$Lt0aZ)E9w7QSZBz72!tzjSPIWjrzHkHf{kqlbzFn(8-&bx_}ZcjH7xn|6BKo zi94%V8GcSnK8^hPv4EbhYK>mOT)1oDbX%;pP9djDH=4^{s9`g6{I%GYS;7Dp|4>#( z_f;u9;en>J5hyjgXEqH7lG+eAn+) zNQAU469%M7bYkHmMuYwoSvd-2PGd(b`NR1Jk%q{5miE&uyE`bNH~#l?{xroFs;5pb zV=Z-|NxS*WuhTj9NpH!I?02@xnkx*lE)%}z+#CtUp^lR6fQFJ;_drL^ra5f-cFNb2 zWN4Ba7F%+iG~N_3by?c`q`}Bt!Px0|&mZpoEATqQ#MYX{?J?{{!y2YllevaLd>M;IXT8>dWuV!!L^@qfqH%HFd>YoWbU-mV~LNsqxWhsWB z@kz{0lNv9_Flhy4NqQ6YMZUA|^LO_iI1nlL|9JY!uqc4-Z$XrjZYf222|>EMLuzS| z?(P-^X^>dDVX39N7L=5h&ZRq+2I+UX_x|7K;Ts0TPXQ6=Td>H8y( zF=A8jr5P&XAE!f>iA->QfQO?+;RC3X;k>qmPcOW7@DBUKI#wh_+2$ok0!0){Ig7wD zISoY@^PgV(HI0k@ZwFLMt-@m#dqg!=;ruE=D=o5zWt&^OyeuH;qQCUHC|)~iq{^m% zf;S#fuPrECS}r#i-%}*f4lnIeeb1+5J64!&?1T#hW0&8IYca-pyLL=RXSX83=6y}C zYb!2}!fz%9g0Rt6Ovc|Sr1Is}!HK$eCT92#o|jwAMD0vHYL?0HO3D55knWc53fCd^ zwxZsMO`~|$PqW;YZ2w7u9E`D(Y^YnaE}fP9=25*&Q*DRo97s0^{77OEa4SEUz$-|n zn6;Ew{w1{cp%XqCfLH(c2=j}5@N0U^52JDR`#sppq+7N*YJ0`9qQU_!5{Lt3!6831 zeo&-EfE4OP-_l|ES8Z;w0+gmO!0CqMpTXBg8ded_0nit}Qtcv|^^sm8>I9k^a$*J! zn4m3I-jBL+g~FtY@pMxX6+lrqCiWM@q6l{X;i=%}!9c0`yXT8tQnarxo_|ttNr6yE z--9ePaHK>Dsz6WYA~1zsV(6?}lOWTMe_YkfFhjd`R%3l}MEGYwxnO!X_%Q6+D>2BH z&u^Fa?P7Ij{Tb~*V&v-XE5;aSERcYPo%QLsA0HxUWx*KTdgUHmYYCKK~BeFMQQ%Sx5p&t7nS1sGba*jDTkH*-hmTy z`hCW4T?{JebK^6~^LD%XYoh`GWCiW9A3qJ7d z3TB(Y^j|VOAFFrfXuC}9J}=hJ7H1z!L!kLR)>=t|Z$z+B=?3;5I{)&UNMy3cOhN4G1L&b3=pH6#6NuIw^;J*TlqTEIYg4Rm_rW*1uJceiG$+_jEO0l>KrQSq1(E5KtFYq=ePZ9O*{%z}bp5hfNk_45 za8b#>`R)bsJ6si%i@>N;(mY1=-+-fmFqL=8gGcY6uG{#qcJ~-g^D!lxx}p@~hn-W= zddp#n1-<~#xxc4LWMQ7hbe-eqTjb;rjd>|vOP^d1R3m?VQ2It)}*Q*W2i z^|ea9mt;489TxlTKRfa3*LS(s9~y=x-nX&=U$C{Km27}?bkPVaso5Xf%d-6iorAg} z8shV5|02OIm;Hu?bUNpooq`qakDA=WomGkI#t-NZaQuyX?!CpEs60iv*FEkAODCLw zg}kB2^x|D8qpiAYAK_WS7yaWJDrvQ!PWlIuXm#PE(z zyBdOW0C}KZThz8Y*|GmeOif0K-cYdAJ<4eo=hg4lAdB+KV?HaH@07r@`rEUOpLZO^ z#f$@)yyT~dAzEl(zXqY5gu#Wwj(6@ZnogeXo4j#qRCmL0sL(JQ{t+7MK!kBCsUADr zR%$TfR&+}_i^0+SwV%^j_U{Q8OdAd*xpiop#D%1JstvQK9jIz)wy%6yZ503BhHU%f^ zAb$FlzKbTFi%jk2kfXrc?2i$9{GpBp&6epYuplU#sk;#Sl4R{Q@^vAJn4!a79$R;1 zRbcA1@R2_BJ6jfCv519V=Uy}Rg*|wE)YZO$bL%_asM&Jqc#VjbqfxhXkw~-aKC(mV zBkPe-t1_$Syw&TMUMjBf(i6es=j7$*Z1L^^AA!$Tz{d|?3Qw?`Ryu8oO)3~U?!Ib% z_ii%$#C$7$a&z+-IKipM8yL|F34{eTD8qhYVnd1lx zeow8%M|m*mQ`8+(_l957Q$Ep$?eWT9{lXhQHrdc0?2}Q)S|1*XKPkvI9TtOVO77|M z+*f;U1XKde8sIpewKCIuGi?(Sbv4JrJ>k3_T zVps>4yzDr*+$nRmfm+Nk$4F!BjGY?_POm&@S>}&>efFO6?l|e)n=#N#Y6bGp%_l|N6tl7?C9Ij;k6@QP|v?xj5*ye z;Cjkf$ex6>+BZJBLBrkFfQ!}mZt!$3LD1h`Ugb3qep z;SU0^%)TwBd|+h>ZwUnIEkQlPYDxacr=6J>5Zb8gK*T^%Aa>p!nymVHPIYxW(MiYk zl?EJYA==p9ff<1PZwg}_p2dhxA7dSvoH>tZxKXF_&7g?lq3@7NtIK10xM6KyUb}oE zo$yvrP05B+odB>T>sCUzD!z@FiadMeb7$ACD584M;{LsR+^h*pT-3d`BWsMr7o-;a z-I~7^b^B1*p$}uvXOD}yueq(IG@h|2WF%{KYMrGTW3;6xlAA|xnv8KRp{EDO}p2Tk6=KB21qZI*fI z0k9>R%*poWDTe!Go`^p0+ycbTwLV?NX|=>)(9KvYp;hbSH}958U$QT8-L1tc90Ghu z!C7Kr33qMb;zJlf-ha6|lu*OxO2MFfZs(DhkUoTZH3u1ofb)As`>}&I&FxNe5V;RZ zeA%w~qyE2ZSbi^O1oRWz=L!WtBm^mWNzsIK0X%WwB-3dDd^9O!BqMpRttn}NmL1ZE z*7NZ0swSdqOqYS}J=f5^?@Wg4wV2lAC=%Zgr?D{K+3C!8_J;_iM?|URhg*T_Gw9icuiZD{awKpF-@j50!@_*N5*HzKSG@9^*0+njxA^gV% zHZ3mwY$+!g+&+dGR6%1ThP~!xKx{vj$b+og7p~DnB*|n}$$&ghS^o+diS8E?YY@yM zDR9v(6VVavYAyZz>UsYZvjx!jsi$&4MWS4wjElyE>>HV|V+$%SdCwXkki1tRGjZyG zigm!ESHZA{uPR`wP>gc#8AED?y!XjrmB&)s z%LoPuVdXI(n~KGOb{<3asCX%7VIE2ZzPFy%-{eo~NzN~Xu?xdckk_PEM@IzRosZ%! zHh42$!n4O_DIPcm4h}@}MR3txBl{*|Kc?1m)iJ7hJAYhly5*_cLN#KFs<=j(0@4{| zj7z-N0qvgitQToBXCgj*IPCaI#(`W~(JbX=Bdef4ZOivq1pH>ni3#xs2d}>SQnb2h z^m>Amm9He1z0~!@*fz>^o?X zQOEnG<1B_)$(~^UsvM|Nxz1Kk&<1{lRZLSvFAoAhBsC4!UD(rA+>K+3=78fbeHDH4 zh<;zjB+I{}t7blpZOl4;4F)?m(XY9rBOVUfbQ1;lehdSsg?8TY{0wk$BJW3hzk0|r zke{HX&q<8`f5YTnACaLa@0%1e*0eIS%vH!A3Ng!w%DjH$<3D70A45pz$=AALL48O) zawN$#@xCuYkemWF`{YD=b4I9~VjO7|1V|29{xcln)DE~nt9pRAea$2ia zPny#uBF31ZttAK2>kB$^ROGZ9xG~p-kBm$A?4mXG01l3qnw6WXmU0(o9}BT2JBWfI zakmz!N2a%viDTOrim(zwltWz7S?hNQXw#*FXR~ZTmtC|(ms6CqH~HDrL>Q!5&Z7F0 z7O#S=O>TC?c+4Y5qqUr@@KPKN`Q0ita?r|MhNJO=#(kUoPH1R<{$t(!1a8}|y+Gsl zdblFP*kmN$`I`+;yKwF+P~}~Iy--N-`_FvxY|KftO$8hU15a`~NS0yE&#SoX?8TiM zo!Epx)nctHoVPmKx0u)Z80hxm@8IYA9@DqvDOY}hFs51)DK!-#=hz93$M$urR) z$~GB;Ig8AL!l;1!<1JPiZuQytd&qiezEA0|C~2k~=bFTad4nW5Mrm^!SP0$4Lytwe z##)*4^czBCL*zJWVb6B2s>~KK?GQ{!&%GYU_laN?xO3Z;`ELVFM7I?t$OBVw?n-*m z_D7H70wC}-bnLF&Jlq;|ooz#AZ2nO_iSe>7;mWV(-Nsz<%g8@9%JCvZ9>(0?5-`93 z^(FkzZL8n3B5oS0Z%1+~neav4OmAR;zQUKR%2l+D`47K~E#Xz?&uuP?tKoaiqOpEQ zz>TkD!E~$)8us?(T>7*uZ!rK-_z=gYu7UKB<0a__s|gjnsd-`OLJ=F3;^9Xd-)1cD zh>kQwh84}b(`PH-96gKCX3!kTX)*Eju|elnYP%8u_;`*&ukMYvYe>H^(PM)kiYDu{ z6!-`~v?vngKDQOfHD0|qTu&QJ>Ftle<}=#+=}##XN0!5&(DjyH?s0dtZ(nhnSqN!l zd5;RdA9(84nh&xi(T&&nhV!YWe!Sj9HWc*&6$SBi;pz7zo-HTYaIvIEPBYq-VgP?4 zewBt#tD>}5XW`tVP^XETcCR8vIY$Yk+itE1{8VBW8G<8u>8-2And^dMBjzJAD}EqOSWJG;{$RCp9sOFH7jSXh z-Fz}|BxcFl8^8>NM$1qsAY+@03j3OiwPqGLQw{#pv{Yb!v>3>W!RRy?+yNBMJIoob z@f=o(9)DKHlba>^y?zXPjM~1=Jaon3qMQ|fo2!kLpbdC(Ipl&t1H-6bPZvfxzJqVa5tMR&~eLAYgC0Ji>5?}S(fVX;qoaTA2BE7i=?H_bIN za7-lqNLI=#Zdi-wkQ$}vcj^F`KFW75EaWQ318O|n$FkI(&f9*vRpiee*r(>$DDC{7JBx zdqg>6H4efNPwY?$qPpj_`cNr5@@U3%wNT4RqnlFk)tI58d`teSWrvUAinE{?9vl3O zjip-`Svy|QsHk;Ohj9cszJV+nJADKHmo2gGpVeVvk>|mT!Z&8f{yd_6r8}s5Z!`FQ z2~YU+B9UV`BeRj1srMzlNn%+W}!Fe+9iq*awJFd-Xm2}(mSO--^JCYZ_(&iR76T!#amTW)W zP>ul185{h}E30(MK4=%{2K*ku9eccqDscYFoPjQ~Am(WnF6zH5<<=s#Ce)M*)&0Mf z)vjC^{z0?#b!bI2^1_|{w1+i=`;QAdi0(J&6F1N{*+4nj%nAK@?@mKqmveG;@dl&N zsU9Exo{A_U2tm;d%(m9)8imzB#iz4{2Kopox(JE5&a?|)I4Y+~1d%j4uoR$;rH>m< zj$n6tu)OLqo~v#LZSHkj++ujrN{>kaBggGKO~-WSdiu4R%c`lF78-prh-62=H(7$? zeF6W5AaRs@7}THqA#j%v*5MKrspXel)>!T!;L?$M&9wm43?hPp9%}%p>)eB%V`+St z3Us71P+B?(R4?qaTOwy-_3cZU;8qQdPU>k*klnucpITg!O4)69F+2WQ#5k^u zUz0e?t9AJ~e|WMj6^6fQ653nxIsMW-{QxI2z++3gDxZ^K@T39{6|-Bz6@j0@W7!cC z=qao|Jt$PF;dRKpD-kbgobGH{j||$SCyS9yIqSlksWE}fY{;2+o$Slepznh0gkwFy z+@cecTNoO@Bc)5FDln2^c4Q3?1z*mUSIE*?*c-~Fs~RebBlu|?i-V?mc&L@Y+0l4K>_+6ycryry*Q zjv4D@m^&DfYz+gdG(Xw#{@l^MX|uZV)Z?(Ptn3Wg6nNLS2m<~zBp+a2Oy1kyQo(iQJVaLd!`uco%FU}$Cr6ST$c={1&A zxxcG0m^w10Mxn|2I&GE2|7stKw>OKjfnda6Ahn^u4?D#kLKn55giM_g-7;#X79OMk z1qCVXq9`24UBm02iK5Lf|y~P{Zm0p00ki4VrQy$@-8UPgCKdF-Be=HasAz2y0R4T zH&E1_5Y?Ni+wB)Uz={M6sOCi8FTdK)Y;E0WI)O$mBQC;1F2`n51FUtkf17efX3b0A z8fKI=_-G*Xu3s~liRpo5rF{XR`%MUXBbj~H_KXbuU$(7CM}Zn~iret{3@F2WqWSkpnQ)|z z8^aZUQ-(pqGqMzpG|K9XimEo%vt3HCw%0j2B_%PT?+z5?Mp1Oog}>L=0-#apBSMXm z>YCPyoa%D;QZ$uB<6!Gjq5fpYw2k@-sqMpE?Kxjus>`nngnp$#bJ{d1e9FB=Dz#kb z2nZ82koDD&eK&M=9PY6};#ZIRjflS2m|d~gC}4R?uYWLg{Z_YrLRQcRcgip)nL!~z zPM5z}mUU{$>35mbv4R9P@*~{~JN&0J>7)N(8Z>0*woCS{>d#3!4=3{hXD=L@>)3Ix zwSO)A)sGkiDC!5z4;4SGHg>={gCF^P2i4fCE~4LFbijK^QIQ_Y&b_-us)us-DfbVy z`Q1)XV(e(W-h=h!Jo1e?Ej5db=s-PBZDG7{@cdDq_cSiRdp~fZN1f7_!&Xn_h z$g)puau8HEjG$_?rdoV3B6>t%ND5*iI0hQD%brLJ+P$cmZ^;j3DLT89@F{NOG6SFL zKV&Gr%sc6FYjK) zKVI}cz1SGq)ihz;ZdSQhG5kO%?YUl5{d6!mVk<{P@B?cOhttgr|^^z59UuNw7rP)FP}3qsDrgn zML-~FF_g>=VJjciuMzR0b}lT>bfa#%_5SlCqIHG>9z{O2DZ(K7f?t{$C(t;2CtOMIYmYA8W&mQ z1WGUN1Xh*S9w*nly_UC^=PZrzY-ld3#!Xf38vVukvuRz;D4rf5tR-ABn1 z$okI>G#VSSjKZ<&*5LU4&G~moci^G24x>VOD{OEkznNOCPkFkAgWP)H-O=E1de*)M zT}}E-%HA{eM*y^M>4N+M^{{b^1Z|iN0i1lMMNp}DUFmv$|L|gkNkk;lftSGN8kPAs znU$q;R{otB4uwZIi$u|!mdjN5H7`33`GBkm@H+imLeqrPzqil{5kRN{+ACGbyj>1O zOlgA%Lz<2dKU3);@Z^s22F}N)a+=f!Sccc$nbQtMGJ_C*{~!iXubJVBsndT~n}&D* z2VU&&Yj9M+Te=_C;4tfB*sT0kw>ag!z96X9Lp3XIl(tgvA4Qlm~Q#7 z<$G}30=cl^KI#!sy$$5*q{a$psN3T3(S` zv~cH8ZdvY$a!=8D=R+PwE+M!T>m({SSs-g0`KSEL+Non$^RzOr3t9|Z({2IIS!(Qf=p1scg;~kZK(4z>wSclK%v=7r?+#)84GyDv zcpvP7jobQ?zuxmE8h+Q4cX?pZ+bbycLGW5KK*D%)Ez>Q1@e#oZL&s9x>br`P5=O(J zJ~2IKovfd|WgeGAJtAoT;=Yder29d<*yCw9|4gqx)to#(_`lEh@OTP$j8TLan>DgU_Z{npAav=5XR?l2|>3*J^lb zh`zv~-QK=qb_qqbS$-*i96F#0~ zY3(;T5WffINIR8t(sYc2)^;$4^=KM8HsV3**bP&<8g+V?$in2M@6-55$Hs)g$4B(g zhzE+$^UsSu0f#^t-^#_PWuSyr2B;WJSSXX_+NCHNuL>5s6eM1VSlEgf`(ofy8jza!!U z-o^PN#_*#=FV#245zWxTrJUb9FOp>7F<%*~8b@`DOTPsih_V|5xacu`6L%sO&pRp_94XU?QBm`Z z;y*udDVchW7cm=&{P9d5X(-RjV%_Ic0a$+Q^_u`$@k1;CL z|E67WjT>=G=39a*&tzbz5H?qDn&`>t6?RAzIXtY5yt1^b;V*kv?@zz8;)Fk={Y2MM zu-xgr%j_+pjr|(upI4>FICUN)ptJJ!fuwWvJ#%(|q5#WV^LZ>H0NI_kEkyHZ>CCOP zCvCMO*7uxXPw=;{n3e1{hFX@^7_xF!7*W!+NZC&Pf=15yj)-bk9YB13g{#gp&G?og zt+2AR*?x9Ql1T&3FkI%6J*#2O|LHy`4Aw4eT*YZInmGO5Bnq797mH4JiLv+4m1bnC z8)amtfBeL)vvTip!4;s^Syl8R4i>3ysPQ-d%lWX@TRU9OBc1B}77+a7Y18404c#5Yz7_iw{-RtydUuuLnY;|aM(7Yeg)HUj#ud+X zp@s1C>p>D83Yg>RKN;w>z5oXoLc~r6YBEQc+w-d20TBUInZ(POxD_x4mNC5`#0dsi zn{K8KD)x}w$W}epVOK#_otoXhiZ$ZM`NRL`+MKN|!_r$}UB;B@!%=^rVU!CJwu+%FN`V!LneQG#3aI~JDeREm zG3YKaS7s5hY%Y2o%rL??=U%gKVbIzGd>zJnm{%e3+lu%f)KDqN_iR3sZL51rEDol4 zJX<)s(0P<%5(tEZF}Z=)@@b4z3-BsfnTC@%2a~lM;+%y3x+j3Ndu#8gJY`cv>}0}* zN()O9G!UXXrPf{xwZD}P7f}-_W&~?vE26t`AF&t$9O>wOe1rv0T(>G(W_|yW6DUV# zG>gOKq?PsuBeyjm!`D0_Z<1S*BQB$Yn4cb`wrGR-)jZ}1bk_vcq ze;m`gz`MA)nA1tyvzfp>WhmAM`Jt|rntYkPT*!{6@`JDzZCp9V`gKP3UGx6YN<3C&j|(4y`>ew&}am36%{f3hL3Xuk`8wPo=? zzqX|d=x?}~DB+9|IzHXs3UcCJ8^iKnbN>1{wWq1t0$IWWzCT59qI+gzX_S>o4b@-k z&I0Ad++x|)w3X)W0EQv~@iOhphE2Wzw!eX*{*irLy9^a(bHQmvH5`G9cb}B)Ii>WL z4gXzz-HuIt33mnb`#zq+h87yuO-PjdLW~0+e>-eW928XfDVh~A9v$?ye;&;M?SNJR zvVEkj_iI)VXn3(%;S2Qz%!Z0=J7I_dvudB9w2t?E>v@TdT6Vn?`Q(^;XmdGDM{ytb z+b_*!S!SnG1VCdMp!Z>5iB$w~ExjDEu~fPm8h@Ya3PuIESXT}I!+IEL@6+1!+3aKU zVK^NvB!o!eIP#yAjQp5ILHV101=Fa?skF&Kl{=|E`%YpGS3bu?BU3stsK`k8Q!FVR z^e%Pi%>s9C0(V08W#I%{C+foJ5yGtoR+E}wZ4)t{4Tld*&goLT2`H@QN}w~c{`GJs zo4};dO!Cya`vqC@;tDSJI%{GGD`~d0 z7jcJ3<9Z+MUwcFsdi=vaRW30DYkI`-O64!>?r(GmLPz7Kw-J63P4n)H z*ss`x5D5Ba+wa^(zE{sT3PLq{(WI}(h%kVmTQ%voBVQ*@uySjI9)@^{L|Ox~F6d8e zJsrdZw<~xv!|l26%$^bR!u{4;J$}=UdOL1GSv7FcGPd&w0Lsv#sBtiiOh`8kJ@p{yf}KG z$d9q(Ns>Wz9_bQ${yqwtPw3g4W_y=BX)6`q=EQ#QpDZ(TaKz?GrEfT1b=_V|vx=|- z7XEGp$>^YWLEy(LQ1HTqMuX`b}F&pwK z?6`uM2mRGOb6)tYVtKglb=?d?wR45CVDqcyUbC*~)p?6CO_?hRGHdqgjJqBTD!L}j&CKwOjuV}AGN%ynrV^u zM3iJ9d;{XJF97#z7~U7@FVvfJdVOS6tJNfzqin`#@ndS@{Pziqg5b8KNnzVcZEdPT z47mb6H`dYP+FhsGqRhBDruC@9mRD6HaE#WoT%q|@^V(VTCxzgzf=GxF&|)1VOLvj~ z^US&-SJRJkV%SJW#IIObl&l?kMg@4`1XM(EYVOQrM37q1B~S{_3MG`Y(MZd8Nf_}D ziwyBEhx(oM-Ab~{p!ajF&f!1GSwbx4x#eBfwoB*iEVv*w)Q=B80}a}HKQ^MF>Q^n) zHrmX_0DGB3eO#*+o4S>>#Q--J`k#22ml@@gu9~qLE8}6*nZ*crRoFwKHpr-t&2x_s zh6eM7JjD*B6w*1oTBrV7oAdJN`m=M=l(YTsw=ea>NtxNpq$eH_d=;MKuh)uWWavb6 z^7kQ6t@sOd{(`+1>CCLAy{%tCbo!kJiYt-L>YnP;y9*bl1=^I31BXeILw=9{$RzEg zJU9B`JxMMH)7`Fh%`{`v%&KaV^--8p9*$49f_n5xa=rtR0BH~1$Bh2thL8w+0YYJ5 zUmjc4GVg81WWcoZ;Li_r0&Qbgv;H+ddC(59uFZS73*-HSow6Ok?89Cv{WV=(=AAUI z^E|k-ZH3M7T0)kw{Boy`BqjuaQ26fr=I<_oM&xrn*@BvH2M+BcQyX6n#A=~84Gbof zRV<^WD#{zj5L`Yp1=Wz;kOW$tN{U;g=Ogcm>~&?F`xtXcVko=swDA*|q;rF|@Lw89 zHBdXGS@ZZqXN_~4x>UK)mB&O>nCXsbUV=o zJ4FpRSpDRYy{ei-%OUK4@-uKbP|j=m(`>(wARC$efO2$vjtAJOssX|11bkNHzpx&v z5qd56?X#POf6R^E9SxaoWjoW-2T;JBan1qULD`90-IjkfqV^EseB~-pK!w?v_kz>? zp1wW&JE$ZGd3vJehOscM8*ouM7_m_oEs_?hHNuR#L+^GRkdeNb$+#Do3uhEq=n3p0{l2}rz zS~qwtLSYpoWV4d4wik>L4dmz1I;&?oBAndhb_Ic|l*Da0YNAXs(LF-#`q_&v6O$p* zYmmy0~h)gr>7@3ni_@|WQ&OW;v4s*{G>!(j7BT98Cl~$gwpbby-XbH zZw8vX(xqgi0UNn+WsIru?0=n`-D$$eMd8(gHW2r>iA~SK?k@qPwq)As_1aNl{%6nW zyGpcQ=~5~pheUL16giu#t%es`JE!S@MT`03Bz{$3%#yx%5Qn@Yp=1{{FfAeEd{;R{ zA07K(`G;%yPFKHmf)vxiz}1){uk~lGl{Q|DTYTX*hApNvV}33ewhuV5lIS(bRc}a= z+MA!ezFhejF-9Cm#nW$mAwOf1Y-+uQmyCq*enAnIVPJ;m_MOS&Ys076ix zpGreyTtYPG|3q$0z`^=9;>UaYra$f|62F_p{$atpNa6+3S5L>BmH9UoR@)hNc~onO zy)rRLU@mZJ$M*0Wd_0y_nM^I|Kopo{!*~xpu0O8Oa#C{Ua-xw(nTE^-&>4tzb0XRG zS7qjHk{zAaPuHNJD3L{${ zU&%Gln?xdPj%zqM_~W3x_3z|Y@KoG^iXEE5Cmd5y5h|cM=En#;+?TMaBVopROH|eR zw6M`{J%aJ-{8(O()0(HZ&wh%q;nTpKjuJ7|e7iA9ipY9N7{l!4H$igcd^-UXjn#;; zs~RlS-PaBOCz_5JS=SlgU*g=hS1#H1R0_UzII6@K=5-RXxnH(+$Rzr3Z8j~~uB@du zeuU8CgYk0D5AUy&fd9n!(Y!Q3_7l-Vl8e5%8G`kYIth&UYAA4pYJzTrl@_s*(HN9 zsqTGCZp$N)?S>+MKp31{I-9YLRS(;)hXzk8hG+r@70>=LA;jQ}Z07V?1#b7PVY=JB zHbeKDDWAdQCnjcgmhaI?KYXLeFP8iFRd$)G0qCz3mGi7mwHEk}^z|Nkc_;RNP-e=X zuJ=x6Vs2ZhP3p40Ld^X&o#p69X(}&s#@Kb#mhTdxxsm+rDVjQ9X`g1bTlD@XkZwsE z+8JuOv3g$4;$pAAr$4~QxhjeqE{0qlZot0u_UU#*ZKxoOF2X|d55g+)0@+0&S3ka} z^+@)XCLdAENn7w%0iz_m`cdnxB%)KQyA`<Y4;V|97TuvAh#qMe(3G z_&Fm3;V4XkJxh!pUq}f%1P@Ibkt`2&Phx4B@135 zf%iM)E>Y{NCqh=voSnTJz2m{jldWnUoMVG3Eq~@hY5LJOUSTS5-nA8w$o@dQ`}L;4 z3$l#k+*Wy<)UoeySq?!2XL9nb24JAjuDTLlqc+#xvYtPbTFs1@(S3{?#Cz1=IO#2G zztl0WJ^B`~tepw9WVC4p`o6*-=nF-) zI?cr2yBO3OR>-np6|FNrEl9HGY9}Is7|HOv&+jWA`V}<0+5C!nS>UaC9OI}M3K6l= zYa5R2KRhm6UXgVimP@-nIS#uxbvstPyHFp}yU<(oopAFE-HFSgi_N1~WJgQ+*$`?c zr;7nb+|xmAwIx$pf2@Pml$73pSoLQd8^l2?mE7n_wAscT&&wa58gQXc$x826ks#6G zOuM@07P3Q6ar`vZ; zH4$zyal)}y0UrQ0%j();E!Lk{_jxrESIPvd5Xl&2ge*0gl+uFAk$z9sZihjqkUpo2 z14zB9n%_%xhWejnx_R)ZDk10yoGqeCi)<$2xmxmfR=tjbzLoua8QF_?P0UI-agOt< zpBAH&x9xa3UJ{k>LNAlk07bD~Sa|wJ%?x$9tC=|7VSeTn*dX8_tSoqIuap?LVd&XIr2jV1N9 zq{z>XmFT4{T`VO;Y;dnalp&k3DKXlBbMUc}*`xFHv@Q0<)u4-k{iSKBu18Z5$y4dd zj7yS`gTmfVz8}hC_^x*80?@Y_H?Ot8ThWy+Tb9$MGR2HG{DKm(S=>b?qOdtG4__$5 zErT}SkNrC9us8wswiVk&#&lCNvuV?vz!HGMA+x;qYJ7*@sL!eJ9J&kypXx_(Vml{F zo~cFG40yi>lVW(nsVycbEERM;?bEnklW>;A_60GSglXgaN2tq$_^%8rR0aGcsb?gP zD}XY*eElzgqAN0iQqXhvR&QHB>49}N>&#?#se;F^j6^3RAgRud%(z&1s7XVqs`SV7 z4EzxrdV`@lRB}#_%$Vz$XQ^c;1_G zpf?*N?lgE_?t*b_Z8m-1>U<)hKU@f9;I)9abH&Wz?&`jDChDkV96#3>b2za*xGr|T zv^DU(MwuOZPDqv*tyn%$H9vIPn!j;KZ&^?-6E+{py8SMa8?9;coPGJm?35lDP7X|w6plh0-HeeQh*!R|1}?H2EU06bH|Gl?Qls8E(Q1*_jpZ-? zYLHeBb&L*)g8HOZBQNNmVfw)M(V|K6h7y8frG9X^NK#*Fu{daa!#{lNW`z_bSbY5? zv7%}u-rq!7ulbENVWIz`Ao^RB0PKIgwBF`Ylk3quY^Hv9%pFE?mLIGr!Czs8HFa>O z)^*FCRi|trs~Vr1xs$3Y^gBlfjH^BR%5*51fV1~=LtMzKnXo=$o$IGoRcKDi6C3B9 zV5!&2+g_&eDA~Tue;vE6rX>}rJaB*hqR|UrPU3KD;`!OP5YO|wJtF{=gXsw6uCC-_ za=#G~({#66k%p~|=1~>*{Lz!?LxXIYYaR{^mn*E>o=w>!|5|2z8aZ+TN5t258s3HSO#8hyWa#m60X1iyKfhPr~kE*sFt zVRgnmLA%}`_zu}`ks7Z$$ExOA#s5yk8KL(qywLqLJ`$z9Hx|XayS;U=zJgV=ex|xU zP}eJJ@q)}&dSd1f(-KVsyxQIcJ@%X zsvfgXmcJ+mupshapZfX03{UJyEgTyfzRCE98-_gmW}7&$k^rYMGA4yvN2-JBuP2RI zjfH#c^gNgJRKl11V~&P%u4XG`l&yxFcaVzk*`J7Xl}&bNfYsmUAj^)qgb|rhk&(r7 z%JQ&Y(y}M%ZcS7p1di;Ua)w zKHV6bd|(J;;-o@Gwu(Ant0qPe86KJX1^A2c`W>p(&gM}7Ny?b#lA%lee-x%XWifV{ z5>95F#Ct^=M2^R$AyU5O_kDv!&|z3_VRx-+=R{WZRlP$2x&U;54_tv$>{Z+@0P#!` zg6l)4GqcN$c0k~6yGv)ME*E=Z>m}>UoBjhC^@Vc1R}-3R1jbI%EwC@+6Do^@Y}ANh zBLu-I76XGAzPkKr!^5rxrir!}3J0yR(_OV^wq&Sh%WbBD2%s=>VFdp-@`A(WHmS9F z=&>E1_=bp;E$u1jmqH7IOD`%OB63Y*vFsg*>jEtyMS>MW4g6DVN~+RbXSxY4UotnjQ9-;8`v}xhEQTsNw)78{wS`=aOA(o>cPvr(42t{JfB4wS zmoDhtr#%44Z!;{*^R)`dXQ>IQl!Xzv&G8xh4wo?u#N(#Y=O%EPt3g z%Ny;F@fbQk=S6h0>k)8-L?OGDl3hR%>UOX_EBHI{*sh;-Jb;>c3qzAdM!Ca!$JE1; z_(Q(s?CYe5G>Rl4WrbGXZTze`x8cv?`SsJ@o3fglAoZRZ_6_nOqFsdUkdF|VnWQuI zKX|E)DwR<-8u-+HR`Fd=E8dOppMNzLRN?(dtWbk$s)h_mK3;iuE4Fl63RC7J91#sXct&FQDm)z~pg&z|LiF22jwqCaxA;Ih|+XhXro!M?Qp5Ll(3+aM)9^Owy zfqy%Y-B>p*k`$~iDi{hqCNvC9PFi59?JLG8FW2a2z zw1D7st0rnmgrwD=p2dZuO3a`P`UW?6npE!;YLNwFp~gFJT!89*FC=W@{C#jr$(sX? zh_OnhfUK_Y^MI+RF!bd02tLeG&zWdLDe|K7&+_dnTBt~~Zb2pWGI$93+TKaLT*EX^0n8P?g;x zM#+ZJk@z|VT0%1%GuxB##ckZShMpoas@>!W&-V*(% z#j!4eTkxVuhL{d$px@He+us(lZjtx-S97rhJIK9U$TNkUlKfSM#ZWMg)s=gBCUAdM ztD~Ris2JScF@uG?=r1A5e3I|KwH0$tgLVnYO4{erzj7Gu7@xEl$>rZE{mQ_*(TkX6 z#hWg)0a_aA_qwRpRpzhLT1`i$!bmk4VuBUIy_O)E%eIA6hWM(f&)I)Xyltbf>5c#9 zwEEzQ26UphgmiS+%aE%S3ZS&nW<$2=?U9THg@Ug=uk@AiLmFL$50Citf;M8pL`_ zt_5+gac06eNANhRVjZ3abmK(5E(m#Qd1A6BwHK$rWvq6BPbwc*qB`$Y^gHy5+x`Z# z+AZ{6a5tDv*fn{_)b@=1P>UoYey8|)lxJ|g&aHMw6X;Vd6jj@CqtOR%x>8<{Dv*s! z<{_|6CPv6rLe~B$3hYpAiMr-^1E1>Vy&6unRiZb9uY*6*yx5W>HB@@@3IT{r(W?)7 z2S$FpjittnFgQho1!<>Vww!Ou~YQvo_+Ry*Sprc z;#tpP0|g|gPi0TfO~tC1k~Dul;YRXQUPGhf7~cdHE?0y=NH|)lvMWYyX)MZ zP7`IzpE*!3`eJ4#AC{HurV=~r>wVWvbZ3Y86X3Go8#;aXYV_Uu9?k4C=^nHhWS9^O zhp1FfP3^;dL5gv}S>;=uLJ`7)Jt;%Hdd#)0)~$wNwxcK@?4k9lows?gTJkP39;jjj0|4k}jj1ag2<$>wx;pPh)!ur2&AiltK1w(en+%;|!7! zi{{?f4jmSY)=`bdec9)>u%3o<{6IDFkOt7WOjN#HiwM9oJAv@XeL>5A+N$bbmf9lN zQ~PLm%hM6sO&IC5+^3p6ZBY421W2%r?rGtf1EJefo*J(%*1^4TmHPg;M@#L}LsNLE zcO_7=y2bGA?i&Jz<`q-HRY#IFGSmuLxnnV!$r`c%!Lc;*lbN#Yc^pqWJbI6FN2^8; zN<=+YqX-KY z#U#3eP5B6z^00;Tg-ob{8&(u~iY z6A9eTo>d`O7a1EsC&an36zvw@?CGy{pl4Qcv2dm|g))JwMtF3(k5ffNqfq#0gNUz~ zvOt!n9_2AE2mWOgSi0k?i>t^LNpcfF!q5QmDQV)6)s?dP9d zRFO!{Bwb^Vi##4SJDAT;I z3|KII-ITrvSE%sZOW_)HYaZ>eELl-vXehEbZj^zEelr_D+sqnqWqEk26>qLstWe=ng%*z|&3ho?=$l)vXXWVJD@PH_3ZC(iHHD z;|CCajjH!nVc8&(p-{ColV~k6!g>2Py5fVg$+;GBM%FT8H@lY{7>L8!2as-R#Ix;g z4NT-hJHoxcGb-9koD|)qs&UZkSGeCQ71y|~nIrt*7*b#PWRhfdi4@Y5WSzy+pelL@ zn*i|opsy(tw)M94jM+1-QbMsolm&WNtU8Vp8m3Ekf`E?88Ft z7P`>Kozd=Kw`NEHs0FIE(XK52>!6O5t|@e&fSaXo=V_-L%Vop9+w`ftG{m04a?@d9 z*1I=Co7h;5iPqQ>#1-Hb-!x0`-koUaX+F!e&i1~9)H*0;*mBeMw1IB)zT_7^GiK2-#-*Pk1QOOfCC zHuOW!qkp%g??G=fhM(6^u@1#~yO=xdy+p<=)Ao(v42fW_PR2cI6PxyQ`DD9ACGti^ z&xajgVla<32=I{0f=I{(3IU1gQ@wqkY4IAo0$C5gM2o~~r*vxr9VpcvVa)t-YK&pR zLs+Z;Qd*kQnPB`^RW{wq%HCaYl!3J`06pWm9rltrAR|>tRNh*P7Bhe)7)^adfc^s?j;S=XqyolO9~zqV6j4H z;=m|Rin;hJu_HQCSmb}z)sols?D}1c0Z5Q+e z9ChAfRfI4caV3owz1ai2tDxD6yT(qu$CMA74eDMua7KMe-LVXAipH-SIn?WV<>J?! zCJsl%uF|~rPNkCX+uwaFDcN@(qkF_?#J{)hKvQs0DOva=LdAG+pQdZn^Cl~myZllV z8zIklod>qKZ!JEsBX(CsMhD}l0U&8xS|@o7f_>+CnyM(CR~EJGV#b`034i+Qyo*If z{t&==GU(+R=B>z0XDzkf&%b;lr*T(ObcSS0eYFdhUX#(qYR}>8#+H z^b(gULe&UtXXhVxx~X=q2L%^(k9l`oL?m4wsp+8PVMXLY6*NhuFwDUrR-P>+OucJ| z+ti!xy+IinJEi}rx_x1#b3r)hteF&f zNDA~((LoNNX?Rs!km%%V0HD$!F9B3gG%vrxb=6)Q9(Gx%2sAELwXE)^lxu<>hM$Bd zjSQZ=p^R8$WT^M+-H|r)%wy&{@yJQS0s|U0Y>h0-&%i($k`*_g4?dNdhi9K6vNYkE zaH|)q2I7MKWclfggm8K>r8XpvDw2qw0&RFqKwnFAOtF`$I+!I+o9@26IO?QEX9-+; zN9Q^oPifSMX;!2`H$%^uNjBQ-_};Fg?*i^4w&qgDIvku1r868>@K-8Ns8Qvwwe9c- zGBMe|%H^>_QE9mvKob7U0$RvI89XCUdU9O za(G;R0h2Gsf-jQrBQn47?sTDJVM{-*QW5G%{w(+HN{AhHeSmkqxuxzmJDBN?Z|FTt z2Tgu{f4#!^wefULUW5dlwhSnXmEnDBGv}*x=d~L+ga=KRQUQ4?9!Aa2Y23%OMvTYc zQp{9z$M+n#8i1%vR(6 zfe2s)Gj8`UQLiDU)@X$X7^a|d(d>+)1c||zDp6|Y=w0WSm$0siQ%azXUEtkaocNwO6l+qFf^ zazm9NlybX2783zm=R2;rldbO6w?=8(kdxdm8JOY2&2sJS{G!pk+KkY$yWQ-(u-o;; zzeZo4?K0C&!SB-gM+&lqw;iO=n<}_M8HN1m+4zf1@i+nkOty5Qkbo>9(tDg?T-X!* z088F>s5Er%=sR=7*Z5wKgLdgUpf>DetoQ7@$CAtWSxrVNL%^3^D%lDgKCMl)3SR*t zBig7~Gzw``Fu|50bYATnaUhwkDE_#3&|+RksvNlq4GmNX8lcP4o5?Vm@3w3CdIA8p zYYAlpUZx{kJqo%y&Q~z4J)F{5z(j!Z;v#_vz<29z<(anO!XUx#_oJ6YCzsk^{vqe~ z6AkE)@9OH3ovk$Tv$m9tfnFqM+K-yt!`yFQM1l#4eXd0Ob)iB-m(YmU6}LB0(ZI@b zHvm*1<(hEkq$O~?Sg~r;!#cTpTV*3ws}2J1eWAg`W+b3AYJ%Kea6IQR%R=5~PXt@{ zMADQ?3!3K?anL;XARH`UIq6=ns3KU_x5Xa2STAG)tafNeMbP?a{8{BcCB%EjzkbCq zQ@HKs9+roR21;UW>^?^n47o=XbaC+r$^dtRwK$`SEJA7B${M7g8rnp{>og!h_)8S9 z`cNNR_ZAzGEG%3|0Lm;ypf^I^7q|9aNEjY!RZ`daj>%EA4#{4IZ`wn8r_$IKd;ND) z1@KTL@!q2_O7CbuUp%k+8T8*pyq_8ti&9gveXoWF=knsm?>hVQvaCn|zp=9j!1}w= zf*+YM$ZsueUje7V2Uzz>BVGc{Mu~9^DiEs}@n4S=Yzy^q^QQgswULTAn&m^}u|{~w z4_ZBG+4v8)i@qn%*xTQiDmessh?4x}SwLDgv_R#-GBgz=RF<^vY`)GYfI_qggcJ#R z1^2uMfa|q1F&KkfnI7#r1|U_8*c{FvT2Y4qHF{pYs7fxR(ZtMgO^fkx*70J*_h*l4s6GZ$}{5vz|_j1|qp#X9m!GhN_&5pG6+k9H% z2ivoJ)H1#IZ@B(EJ27f6bOWXt4S{Dl6=+|&WL;R+mCFxgdX+4shNcJ*iTx%AdKPG~ zFqCtNSY67s)&5PlZ+4f1GZh?=3L=C4yNCZg?@zm8I6l;$9T02?)m}#B(_ebr#FIq_ zH@p`r_q!$jc{#3wytQc24n@l8+)q(nKTX4nggoKqyac`}fX?Z1&Kh2}tTGPzCy4!L zNyyM)jYUEhdmVw*DCMdDi$v6-c)XmUA^;)j51$`Ue(`?3Js~q-40JwGftpN$-vIk+ zEwSyP@v6Wj$yAE55_>@80Q-FW=i9&b2853o1!_qsS|bRp4ik2;5vMO^q{(`l?H}3c z!UAo#6ZUjyxuUW$RAf!_LUL;a0^n!%Ml>j4?VS%C44UKTuOJuM{%5~*w~qsx zlNqLWr=qkiHKj;{{^BbHG$c+CP>+4}*i?QGZh1zXnJ@F`{b+=|7!-OA2)e|7Oa=s$ zuQz3d7>2DX@7Ji~L3T1sa#rd~y1%&qc%1h$fkr3l=L}pX&~76({7iO&+5$Z#r3#er zH1lwEr|!85Iy)dS7`1r^xt{IC^F@pX2c44LRTcwH8!fDto#*56NASQ5 zB+`{|U;m!a<*t_2HCga=I<+}8u!&wkwI1>cDJ&5&Sk?b&Z`$F4{UbHvF<9tWfZ`Dn zyx*|mC;O57yU`Mr#HU}fiT;-tqDTMtzdjWc>#1nmr_@=_Rz?R79jymscO3rVtJgZQWAT<6j-LsnI_j-5E=Cu^h6#Q&H?2p>VT;{ad(JA{7oCml8_(ETtD zJ)jKG!ENaq^VE6Mie?s0u55XyNJXIEviNOaqCe;Y03k;JsWce%qF!k5dEEn(`!Q>v zWc-?neSXnvd7lP*$tD&Q>Jt5VAVFeTX!l%vx!bVi4tTgH>ny4hMx6;{K)8ZXDE@b) zka2UPfF`h(#uuGIO%h$Vd_)FJ#c$j9;f;^3EO^GQJ^-attWh{*pJwa}YddclnI2YSw}p@X9>(>wX_1*f8M1MjtU-4hgvj| zf>!KP1u9ex%;l1AHd%So=o=tv%z)!{y$;@V#Fr3dKX9o5Uxu7d?DlJe87yAqBl7$$ z)nmORCIJdlrFJmxhDbZ#;Y%wnzn;R0cfXxjP5h-P`SSU_!WBm?STD< zMQLKs*y8!lM=$71s+-7{mw*Cv_(L?Vr~_mS&s`Hha}7uHTmwUHZw!Ov#~{5wxAAs) z{=rA~gIb=|@W>BGWe#<5HEvI;1g+VuKDi-E`afa*7=dUJ!BU*n=({od4^n8#Wae+| zs!&A47i>j~|Iy;-52%#TYalt_Ix;)^`pzObFKUU2D2#5nepEzlsaJP@za}m;R4$I3 zsnGlEsNg#*vF8(%*o(6Y#(n6=gGT`2Kko>9fTs4T1N^)P&jdXoO*CB0pBPZiN0hm# zlp0jhyjg+Ff8UZD8mbgW?x!GdOW1UJ4Dxmd`VsWM75(>Nf6U_puu<+yn|E%+FWdN( zo3$M_Zxs6!$5HNAhM_}s-Gwsj{(X=vqsxNdQo0b3KKAtLFnk|yMR^&5n^ng{*K!f&&h^1qz=kJanqpn$i0S`8MK=kZOo#DTh` z+}svDt!N*ZS{ML%D27!K83KZat3>cU{NKg$_7;GHmX{mLeE%XeJiM9}pGurgPl)0L zR7v9c9X$>Ph3lfBNGKhy)IM%n>|{5ymo)EPmG#vLbmy;lw~RmCf*%BrjzSr4w|kd~ zXbFD1(VZ*{3b`wb$1lv;IegU#CxAF$Lp1gVxu& z8?cnx(26ydYOU3Np&l~CfTjOPJHF!Df5id!Y67<{`ahW~d_LweDI>^BFftyCyJ z{N8_1A`nv)J|yAJe;+g7;R-NGdC^qE0sB9(=kdIo`CC?8C645U0aNzdHvaYRheyD< ztpDj`f}H(2k+vtx|TPlf7?VT89}*VFttJ;*n>(0%8OvFNQ4Ts7Ro#K zOs)6N<-#{_l}K#JUCokPIC4uGza zga}1jfcf7iB1U}=eV;{DQB3y!_!72ZwZpxjA?Rt~#MyBZ2ZQWwZ74 zI?yZ~0cG$kQ31Am7VUAOQV$WE;W$-*2HF zvq0Klk{dI9>-m@3LpE^o9gOelh?~TX`I5c45Pi`ZcAV=tb z{h(l*C}8VOUW+OIhPwXqwJgClJdu#Jm4k8s;NA%7@xS&1&=lR@?|94UCjw_}4){j0 zq{rKgyd`qyhd z``>_Q$#guv5CAUb5Zt~_wcn<5#;<)*A9#_1o$Ck;f%opfiM}eb0?;Bjx-JicxgEHR zj)(d&1oV85-w^+H`APQRfaNek`$Pe4ZeH6tt?3NW9_#~Nj?Br&f8koD{5kZ^7_M|&HS~J#T|u`mD;>W zpx^P^cO|YW4YzkjTi)3w7hidYH(Uq-jx#{-?xh4}}! z!U@Wu1egy983IV!0=Gr#>0FZ6OC9(%UQ&R#lP z697r){~RKK-3K_puEQ*&rrb0nhdi{e3=+h-d9>(HLDc5Fr=&b0QPU(o1{x?MU#4>C zHXj-BXyqz5hQ-w~hNRWb1jsKPWH*~;sUg=0?_sC~-GFvgAz_`pY_o%xOmNy7l7anW zLn0|=a;-@W`F$cvSq&MicG0WE?y%y39vVz zrM`?<&(-H`Bfo_p=<~9-I$>DoJmMO2f4X@3>(SWy`9nYNaIjOSa+GpV*1TV6aF30!c?x;F*&?C==!U^$Z$ewJd9gr6FerrFG{%qP z0{HJ$yju4ygE7^C30#>H`3#&!&d%u!Dv56pA0Zg(_XVq>Tr4{wQw z{6+_($xcF===S|d)licwkLAXQyAY-8+79JKrJ%K6TMkTQfk`jc7#cvj`pgkJWW(MF zraf~uDw@tO45OPsX-TOAPfVFTH;!HeR7Oy4kkHo)4D&uRNCZ8rH3`zoA3)XyRrL9# zoEthB8v5etE%ISc|H+>JG2enCXn+f0${2pceK}p)I8oc=?BrTsK%;mSOVMHh%XSk0 z(I~Z!xxG6f27Svw0p+=uE5NvzNt$vsx`ZhphG_`ma?YJHSC#=rkmQqeObJ7oAg5>A zg}(wx;B`|a&3m97=u~&+YUTnsR^y&qhRQnLI=j_3r8oL-weHs8jRukev?I!dcdAUj zFObjj4FqUNAAoN9uqriW>J0IL!a!I6PNamKXJ9`L6EdLOD-j%0SK?^WW0_ofApwY~qoJGUWb7blJ zPhjP6bt)&gZX;E-G0#^tjj>C&6xZ&kjp3Xs8469s862YmB^N=V!iOuf^^bg<0V;K z@}G0!JsTH)b2S8!V6F1^;b-jFc4AaBs3uDLffrG&4wd27>i$9Ec zS7kYA#x@go9!&XSCK^x#{=$j@yn(kM{_A5!IVf^*e64q^|Ktb%SXr0ngNeXyf#cmX zfe?jnMX^GFi*_D|YfCYfo`4wKJ-%CTUiJMzt_x<0V$O6Ut7Ehp7iYyC&Y(F<@(ier zkL}G;Xs8n7I#6j6fdZ(Sa~36Pffw+~qN+}u5qCZO~8y&SJr{i_YpafgWL{I5|h zrP2M+8Y1PcNik*PYwussYg8qdsBv@QHk^BhTH#V@v{U0lOy=J;Why400$^VdkK;HL@~EM0jeD}1lqXz7<^(BN0p z;yY0cdT?f%J27Rsjg1QaT5=7!24-Yr;8!~zp*LQ%o*^%t{HSMfF*b2AF@D2Tn;6*8XTFxIsb9s03R>JTLz%l z*_+NE8Ie_Z43;Ai&A|q(kxL1_Z_N9Nmou>ki?3A`>3cUcIzVeO>po$qFDjKpi|gFZ zR(vBSjEx0SefQozt?l?!Yv<%3Xe@&5jy)^;qF-zeAdnSt`L-}MaiJ=Z9Fs3mNF6pH z8L2sl7edUY&RoK9An&a>E{8xYR!)P}CsA>}{JP_~ejBnBCij46d^Dbc%k^ zo?j~gra}i&M%Iwb>aVqkm#Y*pDjLg8&!a0ctQo|@Vps44CJkYc zzrp|c?EAlf3?^HJz!d(^p>d4_2}|x-6}O2n>a~;3_TOo{RzC?{1x0hL8(|EP3=lK#}nT(!2yONPl7kj{kDY{fb5}D zbze9bWF}r~7Pvc_kM*WcRyW*x$zEcyKbn?436^Q?nm3e?w81r4tT|zD6tg&CquFG% z!b#ntZSF;~{Axoksgss6(c`ed(@5H~H7ddvKw{ZEYbFnyHx}o&-&DZFBKrC#H&q`o z=^9Dqt3RQa5>;uQebQOWO5%LZ9rC}2APJGNM5h4CME~n$qlQ2egFlem2fKdfPjpj7 znI$z}TDna&xyl%+=cC;I6;GPi-Z<&-)MP+FbEd@htQtL2hxr>G#um4RKkr^wYb~fK z7_&J@;2%rdFfX9iQq00o7i@hrh;k`j|9Iid%=BJQe{*a*{Lg4RY*(YC!4`?#7T{!=GQ3$9< zX$YYZqQm1e(c$gshkWX+>oG2oKt**f3uL*MeQE-HXYsQaEzKyMGpzI8$ zOoLB56~WvVuKJ@CT8EOC^`F-QMZPEq5ab3;AB|N7$xwT)L4zsWTtOFh+_j2ffI&G?di_uJQbt;(~i%8Yqmh$1~ z=xKD6&CTj)Tlj?K>GTExluYq5w>N$X3!i__59n#l1Csxx)jrT z7c+Pd!B8KyR!=UXo6APxoA#p=54L6IA_50)*9Q{^q}1^=X6&KWlB8>{1>v_3TV`{U zxHFon8F3Tfx4+X8dgLobVjaVct{3L2L}8ErS!3cA2WWQ?m3Rh!vv3>irnKV|Kwzlo z;ywPNDkrmt^$@G8nN_tbzM^rFLJMot!2}P zYt#n&dyd?nwj1ACiX9O$eXBvL&Q@J}Gu&3>2ii@u@6zLZ%hiul=Un~c9n*?FgK6!I zuTh_}VHXLhiOlAzcX*Y-%SeR;E)RWZk-#_q& z-#4W&r#|dj9d>`x$Bsx175T)=9g zpxTO(t@a2}oj|xF{w62+ztslTnHYS%5YLtVjwqhtfT`1tR8AvXT%=E-@LlduOhk6i zxjP+n4L&UHyWv9J97*uYFVgKV7SSX)rNzXa>N`Y+n2b2{r?ZjztejbBOF_XF3=P;-ZD%BMt<@OIcs@x!2l96^^la9q5!3mV$@WPWhP>!gIam^0 zmP|G&_JtIgGhKqARc5m6?sSVHld=ar^@_^dMWUQyyQB%ZFfL8-rqHv@F&v79D5yE0 z9WWd*gPN+xkdZG7zf!8`GFi4dVHTtoKAHQa1TNw$Dth`{6 zDoy0v>`vUBQ)P*ulQl%q<(F_9VlB~`Ql_?GZ3w@FPv6c-o)ie z5@F74Sx3d6|HAKvui?{mNidva3gJ>6>7z^JAM@Mk)#I&KD(N{mP`3h>1Kd}8PnV{tmx;j=H&Mh``IYn@V&%n%$&wjhoQ zTF46I|38WTw#qHfHtO3^ruAbZwpF&1LBbx0z~p9x#c9g1gH1^tl*Cj$sHNg=_vz3& zrarWi8LM%12ZuL!jlz8z2R9vVocT8 zq9Rah(k)JeUMr6e$iV5Ke@#?^ZKLV4^m&UQH>rPGM_6Wjp{;`9s%p$931(wS8h&n8-H0J1L?cMxHLNk+Oy`Y0fnGqqm%Z zU+W=C>h!pgi^4vG^<*%)qyG5Y3)^Hj0NDtcTWBk&HlO+`VYi@gOVU$M9F3R`G=PTi zUI7nzN^uMAaP>_jM?=FH>n(?a1~g8_<%aC|MgJ|8(S6mWkFEF?T`yfS`~;o!Mc{Y) zsY&Hl06RO!dIKXh|J#$4wRor})j+I};3M3cy4g#v7+{`sWBK)S0eNnfV)e`n_%vLKBVFo?P!{92)=;UJ9xfkfbk$= z%|L#t(^%}b)%og)JD+f~<6wl0-H-2?Nr}vdh>rd8rMbsPCGP2}`ofsW;(ktR;bq?+ zFP=bYEtzAbMMWu~BStt{?FEo*p=FPD7gBQwSwO8DntWl z_NW*Bz+A3=ip`OJ*%&~%zhm-uW*lpHqFpNBRl3RZta~_&mVOlg=#jQWn}Qc3u<~>C zKf3<68UcLnh=%ZwvGvEp6?RzJU?NF}@OpjJ+vO{s^sPu9%TCtRn840;o=JV-bLDx3 zyQx~CgO-M5D975~aR!I~SY8M%Vo;MZN{AYn8u5al7PqVRE$`#l(>QmoWm$Jw=nUq3 zch+6~A|;}gn>CJ9?^vIfG!o5hJD9YGz>I1EyW&FZ6J{0!3s6Mu*zm+|7D~Mw@|Pc)54yh9*CSxTsLgV-Qe7sx7%-bK;;tP z%Z}jJotCd^U;9Iu1)p;PG}r3RQ~IW62BaWiHPI1K(z#_8mRLeI83|9GCyrarjN$&&{8Yn z-@0-e(MJbeugD$|?g3#9Ym>Xm&bqw{otTqvvcdwidV=~syP0NbOESNE@Um5@L&9r| zj|{oZ61C>H_JOU3K-x3>tr%zHq1uu~JpD{<19~H;zKUpN*WRjAFIvx50be;+1q8;@ z&X1&G_I@}S{`?Q)p^D$%e+JR$d#Q>WA5L5gwis4{q=QsBlxD8(gOK)KGH=Z?ep`41{3S z8KB=f>C^h`HoqwhW4-zo;MD%>_C+p30nj^}6s*tM_+sdA^CKi4A@lvhC_qbdF&DzPK%W@!)qG^An1p zwm>oWm1)5QMuyzSH_oR2YfsExY#m%MurCV+mL59yI;yG8^6` z!=P5?EAD&A$GQ44PSY<~e93z7_&Rz`oJ~rUv_2(VpDv(Z^L)s-Zad$*Y2Nn3$30i7 zxpyI1xfsSnHr-Wc+?B#TGa3a`Cp9lyXR+n9C{&JFY%p9{+M$9om&QKo(XndS-~?4W znT%$AJYuv88jSeyCw5vG`MO*a0+z*>=KXa5k+=`Mv(?5r`a`h#`oYnH%Zl#>|MFYeAq6;e35dlXf_#9-I> z?-Fd#vFIdN7bR*6B$c|{jN*m-YRCJsJ{DtRiOg3Tm#Z}jKuFuoFrZ~w%W#TVWGn6#Q;=YTC07>9M*2^R zvi0>bZq~0hpBEUYs4G#ew4P@K$iGbDDqnE$U(=t9h=XVrq`QMLW78Kti=hO3d)!+? zFm4Vbtu_(FKX6siQ2($r&@4T&WJa>$%In7S5FST7>~5>0RyWWq$Iz;X zIu^NOp1w#IUN+S~X&pabg(*`-ora_gy9;SZg5F4Epx381$GYRTdTZJIeRgF87lYDM z(`@k;?(KJr$5&DWPhXC->w0Zbhr;dS2Ssz$6|=ZVHiNXAY@Im;z72ljZoT@tsRjx} zDW`S3?l|X*CUB+om|fJ|iB|%btTq@dxz2H(xJiAU{Z_2deOb+B1PY{Q|ERQUtxBXJ zisc`PO}JnkZ|DCU)lxSKqIkyjboxeQ{7GWdmU6dj>F8JgZ(c zS*+T4;o?k1P_OJn8IW_o9;eviZ}a*a~r1K>60tdV5e z0bS2*6NY7<>mU(e@15Ms;4|h>l5P+#NQ*DWrf_L*1RAG3IC=_So6%oM_^1(nzWJbH@a#a%CU*$AM<44?!#BZVLQ*>ck;K-pl9jPVVh-JkL4yw)s zUEL~H_HN~M-m^NeStZqs$qwtw&Ifo5%x}#jbUQkrr3RRj77M zxzrBna9HIiVpymSQS_0c9kwip-}5;C+FE4Q3S*~|V7p_@>+kW*#Rayr_L$>6N2fsN ziz}&E`0>h1K6|!UOpCsWprT}WL%?AoiSy2R!b+5qd^$tS>iUAw_n&NPHVu#@lhfUr z9e$Vy^kbtPOcX$<)}GN&*p%M+yB?U68M%%A4!-^z5`$yM>&)VV%vFkbX~XmwH~{?v>p z?5VaN*15bInjafc7?#7bH6UGi@{P@)rrDqkhtE)mu!~a> zPhDKl=h_^WzgqSEQs(c7{#>p!Gi-`JRB{sw12A0awyN~XS=!TrHJ_5CY+q`7n#_wx>6iIlTPMtvJKNRBJ{=L~n zu#MTWi$GyYY?7@0CcpIftbX3;Haj?9{%ugH(NStAG8V1I&^|~lbR)iIiSzTzgT$&K z*{y=eF;xm!S||5Gjrw z_Q&6|ss7K;IpzZv-Q8wbGo498$yW1)lRZ|3;NsLMU*z6T^G-RP+=x=C>ePccj9g?At_`|9X_?x=i1$h7JoBu^8+3PR!YE3Ep8b4Az z!;c2CeM%8sOYlVC6WTHhd;k&(2mLG_Rh_JoE_!zSoyUxK*sPbcn}SGugg7JwkWx zz0%HO1#8-d(U$ahVow=c^w5oSIGJ7$JFKfz_}QLdsV=^YXz*T7mNa`eQ&_%AMG@i3 z+hSr-Lfhk&^P+uz=Q{Akt+`qHI=>wvy2wZrJ6eEog`(ks8lok4eJlmTM8AOch&PE9 z;-COcOl(VXsnd>;=~tSlhtz^1DVsrLZ7H5i04Yf<32n%rScb`2eX36b~@ zO>e{+&$zvy~fTE5NJ!g)mT@dYp}e-sUfTBE8UKKmTRO%m)u zEjmayeX_bAAZ%iq5Bt+&bww@zfiqB?Z?&v1iI@ye%=n^h4{nZ4WNJYkxAAq#v51$j zhMFdFQa?*Xh}>qedElew3YB+bgYezas~P>0g8u8JfyKlIt(DY6aJ?-uP!)MxNJnRF zJ%Dygx7kH9Bd6mDwdk8kQ)>0~0c4ce%_8@v!F-X`^vN+aWkoBu@u9(fn*>Ow>kXeF zHR={E6-VcNVKFGaV7}*dg2(-U5`fy^H7mn@WgaM91XW{OL|dXU=5-ofG;u#ASAvLa zJj4KujZT(=Rvsqtf4x3u2-$yQhA)^Nfa#&Hmu+&mnXLcl!Tf7Q62PDtU`>BmR=z~u zp8t7z&vQN!*=V|Tk0hUY0xwo99 zQgqh^V#t0QzB!+NBJZV0ABu5-wyK=g+g9^y2`bdI7aCoAHkT+q--4g31oJ+JFtaRm zR->z?+L|sqGoRh!<+iYi~))-istawLHBug(T3d2y3*ESM6q)eIG*ivzBfO zmMH#ej&-W-{C1~*ZSV1Y^5S)NOosJ24g(P9B<#vdOgKSx3{+|*4gTjhtd8!$bf+T0QY=)b+Pxiezak)W-(&C37Ll;K)!P= zArSBF_NmB^m8APg=_>>bN6l&`*Lt|&c$-+l)O9v8JUrLXf z%*qST2!(8E{3`MSRSl=t6*HqwleT^kUE%3V9+FirMDZ3fsb7@$ml64H;;qGh9ZZVm zro+o*tn^wFPe%#OH&ob`7OyfslT%IHznjlyZf`)K8{3sz1AJ>#L>9_w76>dT? zlH482RCUM%u;A-&-&XW*4-91>MQ$~F0x1NuwAnKxKTfJoH}~WOh_liHAsJ3;vQD|Q z8Xiu_xRN1D64@BDWz1oeQZJ(IF7IY7y#_vTJzN`q#**N)N_)ICpORKS+&yBO#d*%O z1mldN3BfI~{zq$20r-q;_Qq;$y%C?uoBMqgQ1M3`t$M!EL#{Sh1eK5J6USLu)SeVh3xXC}GZOgTIR@h@Ws6}%j`WA^^!vZQ;~ zUInQfW*xx{uza_wDu}f8IIqZB06`Ahsjuq==2dpOV8I5)vk@*iY&{n$DB3qRZKloU zOV|QWuKTZtXkQ_?Si)FJP9W7;ue6xG8eN~5BK`h#Pti%?u6dGe_}LRY;MY6qdCrue z`3`z9Nev*M-I(|-hKhs{4lX@SYLmm+!N;Kv&~ zx~J0+IJUbsgdfJ$!LJJ#UBV2~f zP!&|SaJUzxP?2W`eE*@^i{3h1R*MFgovw67_ z)Uw4|E&k0_V_Kq_)T}PIJ38&BIg^o$)KOz2yFYAYX!`Z(%S(R@(g!~_(Ad^hWbbC- ziyqC6mQ;>32}$m;{r;4ct%?-_yvS3#PH@cg?@6UKbI4~QrNlAOtD2D!7A~gc%@>S^ z$%j16c{=kV1was%EJ75<;f%Y_`!Y1_n-HcAybQ|}Ku?jfuHijZ-Ekqg@#2@0Xq%8# zMq@zPOVa1}RFGCJ$i*VL-(ZW8Xw@2$!Y96X+sn&kLm(EMD{M}-^6hLAl4n*_>E%La zn7WI_E@+#scBB1ZbqLH#*EcjpVcg!teBcM0>!XT=YEE-kRmU$OXs z5@aw!7n2qA><s#b-#6*iscjB@;B^2I$A^91gdXhA^eY$=|;6WP{mez)tqz1f1_cY|r7Q1VTb-SA!S0}v?vkkXc%BvXRjeeOt z^5^e$iA^b8p6i@tk|grFsOvnxK253gY^R!{s?OPM?eHWw$<2J8EDy75OE?GJX_-J- zt6+jMcD~!V#%-0aE13z~0t8Ceih?TPPc?90n27|XEG{xWsp>@IEfjrf8K>3HcCYg> z?@VTZ-UQX_(<2W6=PPbGTd)nv)A6(l#wVVo=9w}XoUOpQalA%NE;3ZV_PF=$%+XqU zyS9A$IuUCabPWKZ&RboGOwPX*TRy%!ZVZP3S!j~aZ}v}z5Q_5t%1tD zc;>`1hG2MtCa>mvyYW6EI;kzMR5nGkIc&Mh^mVn?p`XPC>w!+f?MVm?Hz(aT=1D#& zh^8){SD;{l`{Ojp#dTo|0Fnl+_+a7dpFN`xu>` z?+;2ifA>roo0<9=@~JJeMN}hLxYJ;bPsRnV9;>5LsG55@nSjuy+ghc>prK`9?Y-^O zd+2);)@cNTr|(}$S!%VAF%=09Jxtl3JL2@sj*fwhV>>uU$jflSHKvw=uJQ72O(ssO za^l&{N5o0Gt^ViC^)45FxB+1Ug`*v)2thsJ-Fg~29+Cg=qdkjzY3j-*_3_)30SY%K zLIavs=!3m$jiuoX8a{Df<`T-*J9B(JEQ7C}yj#H-_bOicX-@e#>_*-`7n~HqvXyNg z5#^1%qjT=PHh;cRf$P`h3CS@}hV0jqXy-mrO_cVS@^XiiaYrj5k`Cai_dAL{W zpn|iK`0nKyma{bOWqE%*iC#@GmjDy`96u;XD)F)nXy`}wBDM@x-(93s-t37 z2mP;@;vL&=H0;N@&=)s1w_EDY>U1Wi^8#-TU`HDLO*mEI@y@Z=a1X+(A*>_BEpDmq zkSqBg@e<`#rJrBakgi7GqBuq73oP1KBFWi$kDDu#G&^?e&DEMNw+^c;^amIDyI)Mu zxH#wHK&^ju(Z8cjtEGjfZ z^4{10N2vP<=Ed88ya490P3bby@T2YR9{P2kg-G~EVYW>-_^WJpIx}G?rCOia$S{6| z!L}ht%$nOzYgFR;Ebysu`EX$mipkZKA+t+pKYL&W?Tg2Vy(W}3{VEIpf$n#Xh&%Im8s^&shJcv^icvpOJi{i~$okq3~-{z1cL7428Eroj^ zx$^w(X@$ffxzU=7{UY7Z(^F;`z4U6ny?KG#;NUR6n$ccd$fFZ9y<=5u1y9v_iDNYU zuc)~!4Hn9MEGod{Bx^lYS+>Wh+JxIG`g_GrNeR_4Jgx+`oJkt(oud5LnPhC|Xz4@CC zX7B4CwT6%PK<6n=mPu;o8{oxGV&ZTdeV}?XF=*mae(xdSpx;J~lS08D@;r?3*uAVC z1HM>zg$@J?!Ry7LZ4a2&8sqH(|IQl$7()4Z_YF+>$@0O4)q|Uk)y2w?Lgt_osvv#p zxT{jy*0?R8v{EYE6cQZzA3ZZdsCd0B+2nH_*CgXHqK*Z4t(dIH;*24>DY*uTvV8YC z-}XaM%4cP9MMpF}h}~8>t90n^7elV9W}wS=GCK^KAF5XI1OTo=9NvJT7%W>{;6^fA z@^pqANO|G%j(U=I5yY3Q>P(j&0E00@@LPrmjHaSkGz^(WMqpj6;!<$Md!8z5R6E@4 zu<8b$TYWDz%I2XS)vvc&woYCpi0u1i@vvWuqTbCk*Jmt_b7X|J#Ny6it-d4CsItt(=LkdzjeFTD@T5Ozsdq1kD*b6T&VVg3jSQ^PW=lpFIfNLZy# zJ_;VQa*~lOzR+q3fV=;jj!pU*^r|slx$?$M^%?L8HJ%B>#J9?#I?U0y_Fz(&KlR{t z@=7C(QIcMT2Y+0d zsCneA^9H)W7oT37)9VAFhitq`6XgI(1lncKFgm0DT&`GAoSC`NhHG9Q6yL4;HeBCv zgU-9}i=sS6+~T)wnk$DllLo%3U&N2-^jBcG>PAf@r&0aCWMaCXTt}fz6F=PCFBVv! zX3XfC^`Juy%uedZsqG5xdJo_*WOQTCS#S~QH7|0RelMd_SZ#Jcp3T6I@VzJ2ZILJB zzZ>0y!;)_xUo|{L=srjkr;7{CJfpOojD^? z!nlr0Gd?+1X$AABA|3XO+G}L}NmEiu}9AEq%!C=@=-0(If=hj5{I$T$S`wtp^SgCKbO+`BWMS3B^_!1p_4DUz>p@p z&nI4<1!ac|XWNnoVFbgJ{rh_#CITJC7li-3tS{}?gQ1{P(ALt#EA0>pyS)8zRB#2p zg2#F5@J0P1OLdAz4s4iD+5bE5Ipcn`^AFa+Li4Djdw}~}NPh1Me1RRi`Z$2u1$bZM zth3<^%7EPYY_nmR6)!06@KZSJzj~TpDd3wKEC>t&#q;l7m5t_K(XeVPSMfYdlqJHt zXqhhha@!L&OZ+Tg>A$u7;QcV5A?l9&pGe^q4)#OlkFu93B^a-RNcOD;(9J|z8NZ0o zD!Za<{P%8xLUWgW1mHKA|Gb<@2`+=Co@tJn2z@1#rJJM@8V|HAWd4tq1=vh7%~7>~ zTYP>b7=DH;A!*i5(&$vthj04pik2~tq)I*oDj5f3{P^FhX7IB(6$D8gvo|UIyBtfs zUD$3j=9Km@u8sd&y~ zY|${lF8SAu7Jk$*cZBjkzefjtueGs~F;bV;E1H?)1&O`?%$X@<50wyzhKWM|U$+Z~ z${iChE#Y?!TGIhbGEK$o%1?%~SdNZ8?>sieBo%T&Xm4TS#V&x1r%@p6*v>}fii>l8 zKPEaFK|Gg_=}ay=l_y)DF9=Kqo%X@T2GfhF5Fdssx9lSEM@s@ue zg$&~p1glD`;Ydxq{J)NrM=)OEv@d{c8x{tJXTH1~_cU7$wu;v-GOQ$~l4MW#4!nNBY#BLHYP4?;YovnT|$5_@1>*|NA2n=pCA%?`2m6wn)Z1 zS+26z%5yLW*CWuC7-*rC&_*u3J>&0!!)($DG|$9y8JNu8F-AJl|IB}KFRAt^lpzQM z`{~@j+r@sQOPFQ#r1497XWY;huEYg^Kw_0RdDfeCdM`y{*&jbRAHi*9J0vJGXMg>n4ESwNT#daq-WS1|a-~CjiTBv}!TM$5tv4|DuxT*vOwT zzS2-VlmZcJ9&8vC_^SUzhd)0kXZRT)P(=)vX7iO3OI^t)K+V*@Vc64dP;Ri6k+ThZ z-|~y5%A7WW6gq-eKHs2@WSqa$J?B`hMT0^Zp8 z-@o4a_POO8c8&H!Osc}R<;W_qv1n%pk3dkAiK%u(p+y;}2-!4oi~GJEki~y%{Dk$d zRA3w6;~22#f*huBrG!;4tHf|E>6PV5z5YNaZux7bTYLVZVB9iwj6bGX-2Tq2Her>Sdm z4y8b#xpmTTv00hHAzT$rhu(NoFc|#0Fv5`pq2`m2g#IkIaF+FV4pJ#S@O;) z2?D;2*fYf2K)*o&9aJNycwJ3mGN6|W67nx3PcGE6V14C)CgDzuCYdaHNd-@}+>1l; zuP6DE8ieK6MhE60?e+Ddt}0TQv=gzUuOcQRXiE*4gubGQ9uCA(fUd-@c8Bkgy8a}Z zGhU3AmGmerpeLPX93bHwJ66?&sNTs3CSX&8?YJ!4ZUBSXBO~sVzQz;~TIGo*iG_jw zI#>yV_2Us1xZXul$E9}Pef#+oCji6n&2xC85c3!IQDAaG2P0x5{(MB;5`jf$tYXsA z;JDm5MUX@FJNpn0!Z>8eGVLno+d4JSAjkT|!e8Q>HFY|j$-=3+*CIjqt$>aAn+-l0 zCNm6|g1!jfddY|Ad5Zye2tg!k|FkZrrr`ujzOk)o!I<0RCh0-^SupAQ7BziHK04Ht zBO|%)QQX%Z4TN*8g#nLtV4%v$myiO&^q(5}El`KjrXd=MlcB%RfTxP>B2t9)FH~qx zAvKb4bd*r4VAEGy#4K5KgKwZ1YaqwdA|eruIrze!Ob3LQJD{u3Fg#e`@#XE^I}h)% z&gUCOQtL{CGps=83GWMiq7#$z`bI&TWWwR6xJ)uzW!C=XwUYLfO=3R((T#M`$kb6P zo59G(MYp*1+It6i!ll-Ex5u>h0dC&jR?H(p|1h8p(m$E2ZAPeoJqorXdGwU8V=5b+c=ZG+EV^879ImiS+)uG6n3Plj^t5E(Wb9OX%2WTIvc*4dv0d+z` z#0!I7)?W9#nQdblG|^7&l_>AYGyE2SC+-t5lwr!c%h7^N^Rj%VadqqP6R&$ZPW*9o zh$vTzo8)_F_#z(hqP?^ML}v8PSqrL{I)xC;v@ra$I#!hc%V;k7tG$Kxc6eCukjKil zrx+d&^Bv64TmsGI%z^jTlk8BIy~LA7kVOx}GYPkk!)W5A0G^1QCOmmYe#8+Z^J_nW znSe%&S;&*c9T9?|0OzPX$cd=*Yl$*42LYa9>GKmI)nDi@=Z{W|+V~&QF01!U;RmFb z-kk+oZrhhvtjP z2UVEZDm&|$#P>zQ>IQm<>wA9S2!V4{f`uj~|D+jN!2@m7EvCf!TURO0236}0y-XR$ z{Wu2B-;os5afF{d#@|b+@8yA`lvDNdL?d&8y_SUPJGpMO875u2QcUIqfMYo-V^iwB z>WdphR-G-E*o{74KyO~XuWjaNl0og7Ac(w8JyxePrcJ_5MxZLiJ77trDG*|@@&2(7;`2A-iyJXH=Te(ecQK3sUE0iKPA zABrVkJwg4@nGN5IgmQEAJ-1>Pq^4 zZ}yYp4sd`ZV6Abc<0Z_^e-jSRO;YK+SPNmjwST56k-x_54NPgI80Y_n%FagI$bgf} z(pz`ZHEAqOdYI^^zogVq7>vRkA!8iUDeRhnKsJXmMaHI0tBMJ@0g$TPF~*Ply?EW) z%lrTbJxcQly?LEim#1S7Zv0*uD||UkU1GBai&}ZUBUm@f0yo7EZ&fx}?surUtIUfv z)7m98O!ppTAVHU5g5&Sk_GB^E?VFGttlNfOHgxWlhES3$g}tQn0w9+u`kgGyAmcZS zeV~%^ZxVYlm_xyEVcEo)J{Rj8KU@HW>ydJ_PCePby1xe2)bu_b!uXF`Gh1eTZ1jW! zh>VAvjg+%H{N*UopJTGS^KSbl7Zw!Yay1NRGQF6vK^o6@n+HjG4qBMwx2+L2)Y>9zf1B1N zzOpf*PO9*8WxFT#BJHveQP^12(L{}TEuPh7&*JMgK2dPQs8yy4p^;+fYS?(3;eOp9E z_J#66WujX3hHguB`I!0jGGVGW$AGSocS=47UT)DjCvj>Y#VR^e=)6FnK8@YH2WVmgpb2C3Z*qlCq^VrV;GHv0PZiao8Y6SDk` zF&I&`KMbqf-(h7yhp(g}WlL+iJ-rhF_DRCD2qb0t?0|~cvbmq|Gxh4}AC7X)?_l?> z8)mJ~|8-LuarOuTp)7>8oBE?nPyK1Wn%0-1LnvlYyasw~5BELZ3Z z3_?@(N^;T78@thSBbkoXD%_UU=uRUnZm zW@|3pPPGd^m5)$S{-E`{RfCV$TeJWLOv(`Ok~zYp`NT0ht_qrT%EQO7a~NaPUZa_y z@GMIaU790~Z&Y#x;l>RHVkt3J%^=!3(&SBKyv#Ujp|ruLVkIh;D` zP39PlBU-?_hAk@nSO`;Q5C&<@hWPCIY9R$4szXHa=~V@W5)ui2BE?Zxx<#d7=Yfmn zq8>c;{`Z(BZ@?g#Z|UtX#Vj;v6MV~i4jN;$GRwKaYNoc}kf zB{$K&Vcg!W;o{y{*-6=q`@iXuIhR+(Fx>7!swQa)P~Libn6*LDpy|4eE|1rscLVwp zz^LPGn10(;NPlga0?GOfPf3^d{)o*g=e8=;a$M1Z;huic&&bac>5!&1bGFD$zUo}i z0YsFo8Kf;FD9#I)=dkOxs+3?4rBY^Aj8r z<*ovfIt2=879ymI^m_m30r`MVLys}p@zG^xaOvB%LlNC%Hh6adNXpPAv9EYI+d{*U zD@QZ*Xqkxc24aU0?vDg%eR0`@aLlr!^%hlle0s2}x8lN;+?IyhOP4&t=uySB+9#R! z62?WjC(l679E%`51Ki%RiP!6EBrLQI2ZYyV%~QtyJK970k|el&ef9Qv+{Qz0;{4%@ zBljA=2ca=V)~4(^9wnvkxJYALl#$vzAnu^OE*jfOoL8y1sk6ZW*IctotZ(3>{~d}CwFwcbij zT{wJv>!s}7lS=i=o^{ZMqyDICW~?RgtFyP#;RD6cXZBkWd(LdN2;OKF5ryFfacYlri2Z7=2ZP zL!}k5mW{*y;JIkFTA}m2Zt$(g1{sz72Nin4{_7X?t3sFj%lO|$*_Gg+<%F5s9re)# zF7=5v0#91Wy$*HfrP1Ud8h3SsZ}(+N*S|4j`~-M+HXH<)xWdzQ!{4YQDa{hXC`>@u zM{=kA;!TV3_;zyo3+L6DRf)(BZV3_j=K_bQ&t{9j46Br zgkofiEnnYwuEpUCj3Q2nX9?;=;7EjRRZV%Gi!$ENcDIU|FkL>=XN)GXOxf78> zn;P&OBI)tD^x+Jq>D_Lch&eKT2%`J&9qt92lKl~^*Yy_?K9`g3kiM1^{8d}Z8&cS_ zIUY%NR4qyKg!VmpmoizvSDO~e(`wSYI}k?M>AQIeVb3dMJs;<2c1w)^AV3M zw@;(!haJ>6Q-jVe+B2~(*J7G8PjM2twoQZSA}Eo5D14HY8Yyo6aiI0-sz!lMCY_2% zPr%8)ZbVON!!@&Fnt@w@JF>13UG=z%0gmgTY(q{y0ec5-|L}H{9bcz9rX#L!xP2X% z@JIvI^3ygq8%ZD8tPVcY$;AHOl1O?S4m*a|fqC}2pWjl^vq0DAII-vNZ)|2T`9Hz3 z%CRzD=Z%3KK3fg68i`{{J(r<2dv{SJb|{>77O%42KRN23%CP#W^aArc5@CNNk(R3? zfp7i35|8*gXURjm$~sC1Ku~JSqkYP|vMH_G2$ZePGAhV{%Y4EDUI{Qq0w|g!DWmU* z7$X9KCzwr840EeMd$m?R@aDRlL4EpQdQVi$^?N^A1b>y}n$6W1(`O})504gi*&_5T zwp0^W8jHXvcA&1m|Le-}?wEcNMyby{;pv(#X>}@{Qgs6pbGYF1FK-^bGTMWZFLIn8 z`;4*56oIp9{S5Uiim5b7ZA(8>hU;ps=CKZ|<8wEcmB0i0PQB!u8p#IXpA5QLTbKuC zIhA&hih|>nt#`F<_aYCoII4>^e`|}Xo3c)Rd2Xg!B}0SIL)Q^Rb9?n+oGOFR*l0B}2GCt2xKN(Xq?*?=PR#kc2KuV?gRQrebJGCX{`c+Sy zBn-#hvAg4?e-ZO2?{_cgsqpLfP0BMy`OMqX2i?G#9p>!#OZhQ^Z|;E-2w z`&hO`1s>!j$_K=v(i1;lmuSkiW2#dcuxtiDL|a$>IR;1#{U1FD9N0f{ho{DQl!E{t zJ6MuueH(vhgk_dd?; zq*jEnson%g(>i9ztIkk5J#uzDnyMFJp$IBxY1bTC_P&7$0r^?XtAo%1Ot|YvNKuQT ziaQ?nNo&ctPAffGz#Otl;AXa~;Pls&SQJC3g=q2MB*W zfqW>Tv>=?5R_Ym&DQEYVp_?rY7tvUah7P$E{rwOiOpcyv%>~WJPd@wpk!Pu?Anu-2 z)|j?m-= z;cwg;@7q|mCp)vnMmx$Z26*^!Hh0Z zN88PQ1R>2mtL)cRCH9lvq3<+;miCl$jHS!;grT3k@0K3e05}gs1B5??k$n`fag>>j6^GpF+v3yrD(~5IM9L#yfGNFAkTo{aj zaxPf3|46>2dgDce(@J66vD8N)I2UeA_7cQrh(elHw3Lp>4$%E0dBqP6aYIOOzHIdO zI#05?eJ^krUdxd(k|WI7zA%sY%ObsiKU_R5(@qvdo1V!&soJSp_vFUntAQ34_*8mxtp$a?*OPil!AG>2amF zlrh8SdP3gPDq>hX^>CmyrKjy?I;oGiC8VKU!1BwbPHRG=TVI;7c5LZ9dXB~ExkE}s z;TXB!#Rkz%Dslfw!|>dv7Z?=Gg#2RFI#KIJyM5@>5h254jLY=Wi836eFB|)@Kh-p{ zDc5X{+REE!w8;EiFQJOI%25PezI^-QcRLY#SL}Q-LWHx!Z zUzMd^iiGblxz=;G94Q6Prp_Mz9wyQ4v1S#d4sTkaMH65$R+p8i&PO?MuQ zL%ytE3p>3vcUMP_;_G~3e3&wbQ_LbDr5l5rU2`J6eE!C$Ic$t&$_xkD6UQOH)+EvD z(OS9s1P;HxYT*D6pRL=k2e;|Ys2U&L3VU&rMAYQR8)sEvlrp7qmzJE(1m28{(5G9i zp;@fj@Ko2`m2~uO$lq~ojtN6dAVBbA2cQbE;%Gu%D^h!DU^_5SVounI@OqtG<}Eyu z)W_3AY#9LqqRNfyCBf>g%^!DOJEPqP=JO&J7{W zJ^OYHs5T6l%cRG?R;XFO_7+&SIZ}LP?Q3ZJUbQ}>6~p^{!YrDBb6=^%pJO%*+o z(0xL+_p!~NOAcPSs;;;?a03`TVnK^5hOpwaW=wy82;bPt;Sg(-m5q~R=BFY* zi62mna{T-a>#YWT4;~ij3 z_gUS+;Yz@PtF(GvrE^zrX@R!Ur#X;Z6OwLz^egrq>B3I>NFgKA{t84HU8;4l zJ+nkuFSI$({|P4+BMuR%`+^Kotc`%Ecl6P*Sc~+prHcvWBbQZY#2?gk>zm_FfmP33w1-ar=`G40++?f=+jC7wB_;ZyDKqC1&kJot zWNNZ+x8f$bVqcTFgugR2940;=$TpNCHCYK!*1qwIEyki=jj#2IADGFAfx)5K05cm) zn|81~*DyJi?~4V>E7W(4J+DQ`M%YY3F6xz*w z+r>)Lpri?vjLQ8){3cF{_&y zrLyrbPypy?Tjiz*uCwvS}K_7-|Sobob#X*@*-y+II-xO0y#MHf4v2>Z?D)z%L#e{zSp8d9}Se*9iEy`}F*0B#3asdqs4r zZ03njGA+)fQ!P;5Q@Po3le!x)(Rm=z02=>iQV-vZY!ZP<>EsZdZ`2Cb^O^)8`25?b zv+5`6VPAd+XPa-u7v6k(e=m44la(mHuoxMs@}@(1-6zgm<0CX0^)~wxBzD zOw)fXSR8U%-vZ(|6UIv10%Gvb!w%O-9#&)==FKeKBI(qd0M<{oM*{nLEn*PiL*IBo?u6F(&$%=pLk^^>SKZziw&e<7CK4!T zuA0{oh$I086WPMcbpN3urS!OWtc`}9xOd1$FaB0a@pT)Wm;|U}W5n!oJ7?H|sDrsY zM=P5VOlt-Y2et6$%rKZoCvF;6o2<<2+C zgausLKjeWCG)F20+HQ=I=e@MbA0XY21vf1;M}2$XCs=e>e@CZq+n}KFFc580Q!O*f)+n%<^vqok;Z! z_}Rb24Uz{fR)X9`$0JwHk~IRm>v8{_w6_{1P3_0gNz&tr$?s*bJ61PyXJd_ygo#Sa zY_gez0tSmyj3WVkTTCHgsMP5Q)Br>O$>=a)(#M!FapnbK(|`U^>fbt(@vxEUYw1`N zohb3bQ)&)`m#Bd z6X3#@z4y9>1Eib|v|U{hbMrex^W_fvcY;M~$r*FLa&U=uADXDG*(xb|9_B65dA{Gh-*WjZFucAxCTq@d5EDoLG^`hS zpD#p^J}$5-sh@$-X>645;7g7}ejh_XUp}4C%SBK7!9*&E$Qn?%YA#w>N|YrvcFab0 z93ZW#z1F=Aj_5(4^|hMLmQUShltGz!F}pR#nGWFs9P&Y%KMXlqWK}$O3eo;`>aT?H zV(w@nlw#>KCxUof=uZNEFclQ^p-FdPO74+SD=BwNSVbo&fN*T&LKlZyT&oI0mruE$ z5~5BDr$VtYK(vVgS+L3&P3x=*}6&t!2W zAeWTU`FP!sA+tE}53ako81Si>>}78i_UrP$Ni?q|%%dkWW(d??LDNe&4H?oMVLV2J zqE(;MJiTe$fjE7;a1VKZX0$5WTWPHmb1Hk^_;IBXNZ!>=o*7Ypu6eM3lsAx|eDbu~ zo$Ypa>cms_LXO=p;u*@C70TXEQR%wU{^!;BT z&T}C>jnM2ET_{i@no6%=tf*A#Y1fOR2{GoIOv+KRhQJY~VQp-3XQL^Y+|y6(}6OgfN6wq+au z^|6(4v$GenD?_egG|KFmU8WF5ryN4*^DY}gT3thlm}m0~bJnDeo^U{KQ0u^-75EjJ z@-HWCI?gsxa8}mGn8hOhv5<|!2m?3p#(Ne})`kJq(>uM*P^G`0ftwfA8XT|w>a(r?Fk+fuE=hEL zbAON-5CD~s3eV?`EIx=tCz7xc28EDE7zzrCS$<^)wgv4&HTyDiumVdXL%C5q_k- zytT4lFB_7m(68@|Kt)!!?nEQ*6`Mys92%$j)UX&?V{B}He5*TOES34X{7lPlQ|GzT z_*ZLckX)TgD7}t4?DU@H`~jSFLYYh^q@70cm_KM`CYMg`f+;#CNXgst1V3~YfF@o3 z4*urOfaN}Whlcrk`HkXFMkdhTvM66Aa5;1o3_3_@Zp_bM$Nn*y?ObYu*KY>fjAQ%h zY*mco6+o_WkGKV=5p&thc15C%jx6(7mrRH78bi7#7u zxIwGN9QZ#IRm`Ld)U=xJ$uihKtGGq+QARI*ax3U&rLG&%x3QATL-$o42=Lb;jCk#- zFvI8*f9_>guOv@n#bh?vO@ZP((y@PL1=_0J_6>s=)%}bswqKIykb7j~{F0$`2z9Zc z!?e7x%}Sa&C)GN%GwHOnU)WYslky@NrU$@jJ0tZ3ek*a2f%yA1O;ihsxpu(`bhKCy z1W{}0WT;N=pKXovQssF%?cBN;+n{@^M2PBIa601GuUUKzJ(;o&KDoX~88|HhK$ojc zDS<^9qU?K8Z%k{B&zx&TyQy1@5hAulc{nY{;jH+fl@R+3VPVPkZJ{PpZ!@!s=dsFR zAKCt}_>c{t%bMl_UShP~_>cZ!i;_qCRk!WAQ~${XlBDKx4=K?Ol|iNE^=5T0{X9np z)w0d;buQ{YBS8$Rhiq*L8wzOkpxXNuU zho>+JsC^WhyOZvRF(QaS|2O|a=(=4?bxa3kf?zBhSp1f4^@@IN(Dr^BvS;o@Jrf>! zrN{53z#dJ*=8^Sl?IfwjWEh{f#yQ5$$N#mb(z@s@lTi3YnJ?L%zd(8B3m#d<&!t4w zkq{HzAMuN6#>oAnAgBc_T1ai}?q^!vC9k>4(%LUxg^=NsZG%P`#9J$>aNSZ)W81w9 zbl}Fi3tm)Nvjm@J+K^B)!bM#RWy}!iF6mB}I`4ky0Op6n@uVP)eW=rVSbThkc!X*N z=sPXxe#PX{n)eyUt~kjge=3U!O2ah=*V`yu&PC)BFhdZO#j9)Fr3Urxo12{ApfR>B90C{csBr6#{c|XeHbGg<5q*0s>_;EZ^2K1!0UFcU#6P zl6qgCCervX3M49Lk^Mm=V$ds&FFe3N%_7+(X2Ci(Il%pjhH$@3qG--`*1G#Ks(o7XOG8Yp>CGk@hbiSI_WiIY*U~%&o)Mp%NIDI zav@=zpuI#d=~{T^z) zzthQb3z2E0CRl0ZSu|b`AAEzce83|2LZwAA?4Rv&3BGc@hoj?jZ06lmzJtRwR>>z& z2jn1)Yd(Km4dw4h);>jLAwC!foJOn}xd(~A+NZE#4@y3h@H++&+l$&NR)SvZ7tIIw z>iO04c?k?1OQnJo{6Fqa)=8SYZZ&|_d}iJyb3Y-7lClttwS-C#eTrpEPOqPC&*}F7 zP6rCZH4>w;!Dn#EW#18Xbl|CsRznsRB-*iU;=ue0kLh2m1b?~R@Nm$>#>Jhm8a%?i z?|sDDX@W5F?bc!pC9ox)yS2R)s(kNA+Ah*VGS?s*V?USE3zUCzW<8MvQVrU&;$e%5 z=C3<&*w1}MzI7QPj*-Qb{GeEI8myk=OdAWUddO_4_N&geez+8KdnxVaCi9X)MFww| zTxCVJo+B>eC4#KX%ZLiRPeIUQD*^FA(BzdtZvy=$9{8spbS?Hjrtn?tx41dnuAjVJ zOgZ^@pP@A;(Dq_PwK}rqqYyzRg2?uDu+5vhU8iY>cZjp_Q|QZo?M>7eSB{Og18SV0_t zhe*J9B2cp^9j6c}IB5*m#CYwYXr=~VkpB^wkzT^{+<3=Wlz7<^dsX*F3ImcL@Bpv~ z`7Lz$M}kEUjV7n|{PuKomSotmcc}m=#K;Q1!8sL%xt?S5{hxvw9vynvho$$xi|m-( zFqIi3r7IZBSYU4YKlL`+bBcD~_@i2<^)|QaD)o~?iH27y!vi7^-YXT*7$|(We84yQ zJHp#Zaq0V<-Rac??7PPuMHpfn-{2u%i{`8OGTlirvA!7l0u3m12`E$W7a1B zOHKx+-3>?IHM0}i`ZbB|E%N@k9rq&b+g2D2bH_1fowR>eW+hR$N({Bgb3ox;ps=AE zk+LExkOoq!fBsx- zwJH_-Zgf2i%stRW!Z<+x4gi0#)DZ-C?dN?DD(L;Ht!R^bw)-Ko8<=O+D1bOU8(_%8 zj9#(gid1%`D;nPU2Q4HM_EStCOs-8Jr=UQ#h|r{ZXZapo6msXj8=HLo^B&0mOAavn zOv#7TbOva0zZj6S#D`(kA7~6G_i!LsbalP<};EKJffj@y)*RvM)48MdnIH%O^letmyKT*vQZAq0% z8dWg6qT=~h(2|dAIP6z6P@7VA;}DMj=VKm0`BH;3wYm5)h<0A1O&9Q*PR+sNlnbjd ziGMN}=uEH#TMJbmjJ~j}Jw9#Eq%(g6y${*P#M~4Ad#dpv1{99$pai!tYy9LOhl<}}m9W$i za{1fn_Jdfb*{na!VSQHKd#4|EG?d0G?E?=0zvcM@kY54Jsd_{LfuOx1*>{$3?FY(> zr=mxH*04kLMV`2?l@!CfQE;hmoN(iR`%;4sDRDTEMyo(16bN!qCdavgc08CD{`~oK zE|kv#jRMz?e?15apYq9?ANzWK@$onDrKEP;cH=Ce@pP1R8HPZMHdMA-HRWqdx-I8PbC5nQH2dHKAL<_bLE&Gc3iM`Ks< zhd-fMlSZ#F2R)VGi2UgQiHr@s;z>n64VQIJwaqI_Nh>F@<8Y3WJx`9vGi zuyw*^avh28e7QqU|E~bAY(cA%-?;BW28V`5hby*>QqsJ52Mdh@M8f%N)8i4JtDV#r z&{19qeB@(oc;(k*5JoI0aY~2^QiqR6^3iyP$;w(+i<2M z?<^(U(Eu4g@U`LyNasHJ@qeUaA37Nh=5T~pmenF zOHTn+Mfy<~EeTOMvX&Epnt%r{y@F(w0CL}Ruf4b=z(!nGSGReBK^+Ey7hER_2@6K> zKdO)h!U)p0DeHs{7#bINXyf3aiCFU0r@3RmEA-t!aW8@9!Ic2@AR`_YGP<=rQ@OZ}fHlmJUg=0_Gr1nr((L^P^qO^L z@M2wfa{j`tv5F4>qNT+nse=YBG6eSFLJJnYT52_Bn2<-YV@x_-sD??2X?}3{PRfdt z{odm0e2!_{`-sfg{G)Tki>77pJy#9&{~6sPFgjW5x{dl@D-Nu5u%N?I>Rp$}_EN2; z*KOt-o@=*TKceh}H2`4%w1x`#O&QFALin0X!8O%JzH!(%D~fPZNHiNPS3OmCDWz?N z*SoXaCK=8ElO{I5`3({X2ee;0#c4dlIZO~=NWHy(65bt&QKYd z@#oP3`=?&5wXpW_H&pY7PGw8Eyp9isRYiAZEEQBS`6~Pt!DmJZvYmD~HG2we=#Fdn z*e_R5AmzSn{cN4$U05ibd3aMekx@bOaQq9Z(PfoVE382>PUchk#9jDAT2sXQU?TVR z`e^)|^8>e)XP(UV>`2%6XU}?yNWkSP8ssczO^kh$TvBlcSJQz;A6p3wIRH3zY2Hj@B&_d_rwz-i7&LAKXU)-)w#;+FX3P1P zR>*WN!(H}_y3iEMQW}I1nncGjY__PJ5+J*^o2h1&it4t1030CCRz7UP=Lg6O&6<>_+weT~7rG;>GS%C!MYJ}0OkR_3q#z9i#QI>M zD70@nJzs4O^tTz$b7n2tLi{#obXV8gt}TcL`m`Gfdqi5jk3QF63TNDO9V64@Bg+ug z(GNRJL{kCvh!r{Y1W{38r7_R3+kqY$E#p3)uqwF8R;U}iIs3kv+#Ulk33Q|Q17N;d zrHN2{`j|7gTzmaWo%3@;Z)%$^%I@*p3-FbQraJeT6+jj1i6D6bDk_MG4l&?ADvBLC zIS9ETAt(2&OAbz-VDE!ZmUU@#8F6 zW^M9R@80#Eg9&ScmS95_cP+sdQw#ZB$pMOnf{24XryEmN_>~fN&g<{iB+Q*B1|x;} z{?#Krf8+PE9c(y3$UY~+OqUc=oK4aFR0BJfZPk@NwdL^u94eMg`3vpLShPm4=1*(i zzv_j*`remK(9_-h@qpf!j~;L(P$i3k8vaPvpU>_O5JtK}<}a}|fD3fC7#^f79dpb@ z65DN9BUooi3=fjHmCOSIqpk*H!Beynt3*!UEa_cy1j)j1;Xo;yNa@WO!R!TL=E&A5 z;O^JP+Y$sU7;`0BM`drBS*e1Ou*w!Re`|4hN~<*6I$M~sX4i}$eqn*UYh4hN6Wqkb zBy=+NVGbX=`c7p$*zAz#s*3OiF%2~2DdQ)*R%O5^Y6DPx#qc{tXP#@d4vF^th~e3h zc`abj@xY+D9{Z!n6!i78CklYVM+eGP=r15hkpl&ShWc8miu#jUDaLcNvnitF zny*hNObUNTH`zl_s%J6he9UuFS{GkPr8RpWU7a`?CO%1Xv~&2A5ccOol9P%4#UU;# z(C0cEVp-m913~H0qrhTk_+=zLbPnC@ z^6vk&yLFjp|7Z09o?IXk%7K}ob0#@|&7B9- z@hUQzowHV^{f_xLDdm?aW$&bNvCJ(!rG=ho9j+!E`jH3J7~7CV*KRhN^}jHpihnwo z5B;<=*{!@WH(}JReYo6g9rM`gk+z0#LiRb*ua=z(F6w=*eu2E~ZE^y+r|)$otqv5# z8y}50%b)R$9?Yy&VNO!~U%EGV>3)(82W;Ekxf1~8Z#RF=eYTd?8SXZy_84A>$f zlfN?P%62L0^Wx`>HUIgWWfx1DMSW%lunc&>*cGEt!uupZ=RbWS3PpUb^FP9}qfzKG zNfr49RWZ~91&ZTKx~b$gUseF9qb3v|J`C~bn{u5_OW(*KG?HDjVdx5qGtcv@s=YVfz{-7^6zEYFWcj-WeDkI z*%qA{)t;)pdrWRslx$oH?l8!Q}FZdcD&9=2 zGo!PQ8piLP;WRnj{Cn9>n`IeKE`01ahCpxFyXVJNtSKsVw~eZurewxBrZi@>p#!)P)>8XiTCxzU*QEt@mWFh266y>fcYrF%J) zxz0;)iaXL;)GM3ouGTWmgNuj=DI(B63w1{B*$Hhab$U3pfG*dRS87>D7a%u+>f+#t zos6bBZ$%2eflTMB%c77$8 zcsWAeXnRUm7M8K|O6l?k2oI8 zLd~7()_m?;Kt_5qLAr->L6OI(3)B)CMp&PGG8y~J4K0ZQMGK- z{GrE*IDStX#m!hN*}$Zbdg@QEQgFX^{*hHYjs?obJ$4rMecU6vsGIUZdQl$jxWy_W z_2*2Xw=bL=2bAAqVU#Kdj~fi?nCwRoJqqgWdhlIYE!MS(?Avn|qCtN|OzE?pSSiC3*}<4ugSJva`#6~6-ynsZw*E60tq zS_9v&jDdmLh6<7TV$s=~JS9EkccU?p49;1|#f(j4swZvQU%eJZ*@VoKn%E9y2dWFm zHO4ffb9AIBKh-r49)&XI$~Fu>y7k!g9a&_YzVy4~f)XdUx%?V;i_}ztg!pr#uTH?t zf#G?9HXrY|E0R9~5A;u!$f+O1WldBb?y7a|HY_o<1*Q=nw`1ktERqsr$89?J22@(D z`5+@|N)sa?Z50#!7rWg+UfJO+C9AhFcw+cE;t0>*3xO5Liel}fK+>Dza= zPK_QXiQGIdXGWvhs9L_!a2t%Ir38muvjD1_-ePb{GMuK$qC@?J5WjL1iW9SaVdyRHRiAGF_ay_XGM8;A z!r~>udnOGpeXCsQzFx($1-wgpbD~*coHp$(q?F9O(bNg56kLVWN*KL`;*DD_w$!Y3 zrB*c-Q=Y<>thv<7$+ie;fs&MJ0gjhBOpj`2lWd`s%the}pW)HJ0#&YF5q}Io2Q&al z&0;+DGb@vi82PwXN4J}}RsgQftaglM4@);FRD64W=vNwWVX$N0dPg2GhYTb+pfnko zn3s~K!d=OD!8);Al`dz5u1$(a+vo~9imwM=S8|yC(7fBMAD3B;laO85X~||F3^$(_ z4RMoF2v%>5L$T~m^g8D)Gw0#KN@~S3EX@W2FICK#w9zFWEq9xp%L~j%0q-JDh@A(r zY=JEcbNsNZR&BRxs=HJ%^An7T+NZ3VD3$HSGBJdww(l})(Pr{7lq_WjipLCQUwaa) zMCcgpgR&6Fch0BUF#v?eL<~VFPmtqlf$YfG~Mu|pH$VGN{8YsJpr!dfP zH(q&zEtUOBs?DEiiBWta4`-tSW4JkCl@^XX4`)+>FtrZ9ClKelP2TeO=qerGHy^#` zsP>G=MKaPw3i;x7_$YP$eVo)fcOV~YoiO<3bhLixVCv59R=#7PhsC2Ya>dJtHm#Wt zD?Bx4534kA0=wTlbYkm=5YCx?hJL{#np++-5y?Qx7|XKB;UEc?7OQS zJru9rLN`vwoL+!md!}-0-K=6F_camGa>H0e9SEZO&Jah#LC45uKE6XB6BoFt>0SI^ zG?jZE+61gS*cK(@#cRyd|r71%I{o=zL`)fm`W z<>29??R=U`Q;g+8ek;Toc*eHU1p|a1mUO?5Wkua>K9vE(?q?FcFa zscqh)Chq87 z8nqg?B}K|Fw`4}F0e=6Y*vcN<)u>l?zlib>{Fd^y*{6)PmQB1$(RDIDU)0lWlU48^ z9I~w3!FB7!YTbiwkK>w*0s85nxD}$A1Q5;1sz?IC2hv??NFC+|d9*Xox1!`B>FY+R zX^6PEkAv>l!(*Ysv;kLMAqmMzBi)2>EETZh44LuM=3OQ{W!3a%qz(}SUd_Pt+Zy0)(5Pd~n&@E|#- z$Ggg2{l_2A1EVi|yh&CpIGLjZR6R8RGy~X^=gibm;zJ z!C5AW^t$nJGik_08(@@?(IgrrHJ~w-?aXOnLgO#Z^wfUE6tK75hz{S^T4gAQ?bA)J z8YCYHo@;|~Q$9?m`#Lg}85k)M;tDAI#!H0hX* z`VRVJhsE>;-}U+9`t41ZZPcpPvOm(e?hGeJ*T_l-f4I)OzA_D?k&e<^h1lywYeMO| zAOfzOr;2ukZLnAEY8H<3Z|W0#1wpezSRs(6a;Zg9snEt5yH#4nafp0wBSsDt=#O+EOs{pgc38+`>O#*5#>D@6_vj zTcyCEb=IHoMA0)WYze>hVas3&Za=|)^6^i#6O}Hgau{8Tdy@yaa@+f@tUnf+dJJE? z4`iwrxdIKqcqE3)2dO<(@XG|0B;@a8?${F@c9!cN#1Wc=clX11V5?dN8()8BZ@9u9 zwq#R|Qff6(($GZjYd=mDi0sDenwQO~GZV9YWU4Se5v%IpxYBuwv3}^E6JrX0*VVB& zh1KM>N44mmptTH#Wn39$cwaSdt7}B5SrVPg5n?g;Y9tp*pk7%!^}0@V=@UKI;NwE) zS!e&Uj;hvB2RI`%0!u>l%&P?8uF-tNu%w1~%Oa{IvDn|?Je%h3P=V8-9Hy2TQug`x z;Xn*V>as(n^y{4_)7J!x#|Re54FfT`=KK{Ume_V(ymZS#MLg=6J6&pA$Woul;2it9 zP7r53V%9G<105AlhH=9UHC(S$G3? zKxc)gB{3}uvC8+Cu0zgUp;pF6g=zb&7f=XH+$y2j=ycigNgj{Xb}U;#{KsxYq|@)R z*fI1SaT+S!uA)j6Pp9Awm4euI@&dx5dr=rTgB&i8DH0z?$fXu?geAYt@WAHvTOm1! z{UpD)g>$u<_BxSf4hx1(i%+1FHcm!9DjQQOc2rApYv@};$3PHuvRceoz_N;ObYepD zttSFFy*DMF6KSh3`e}YOpx`EPkQ8;@P)FJ)^M0$u8Z4o;^m-IX-e0em+AW&MLY`bx`5hZXl@mzTKhl5c-Og1>n`wK*FQ%`kc;>cd@QLqpnTawMoIP5+5SGM{ za^QZIOUCfLp&{ZDWtclEh0fj-XUyq1!#jCy!AhZAkZ0G3~;$lkh{ zb!r){6mGfM$>x1nE%eI(-ApjO0Lenu`e;)v_Lu8E|4WTM-hnn(W6K@bZo$i}>n zAD{_m-;8uj+@QY)Fs31M#5k;v6$i*%V`=i^(f#;EbK?tG4}4~%v~im@?#XOI zi>Z<>RUglYxSfTv%r2u_IY)Hse|UaUZQiZ5&#$J#Ou3E@8`@Cb68=IVGv_<*`cL5Q z?P2gb%Y7bB^jj%-QM-?M07&`#^y@uP`Ofd2>cxxygzEU(mw_}15qJNz_j-=?BD!XV zAThQ-swjU~@RJ7>m1U1X^msUjbo-Wv(Y7xyR+&PqdWe*LQQXjlGLWS!IH>-loJ3De zhEQILPJ5?rK=~*RL#bE;4RnDmyl!;6U_DShg|g5(ZjqO?d$Lw|pEDAztfxSx9R5jY zOzspr4}Z4hDh?%J&9{+YBY`dKYwM((*!)p5&hpuyTr^3Z*$J{`5Zz^-AJR+;A-!va zGn9wxAgo*4z!!{+lhLKN34D^+AGC<2!vZpzT0oX^x<~VKE`G?{x>7?V3TyH)h2jV3O}PO@FEgUs?ue0k5rn-!JK*!b#2AaCfKxslup~fvli_&Zr1zH zj;8(l)u?HwY7FO0Vj-?*ZAkcS0m}|qXjm<6!N@*)cH2}42x%*kHic8IBvVHxKoo*V zMm-{IjH>qMK%j8IjiIjJehSmN>uFpTbJGL6iT2dOWESe%0NHTVn|;fhM-E)Uq|MS? zAac9AdpydP*4dQ<0C9u{p$dKic)R!2(|A?Spee|(wvZy)x^A}fhpCs|s%!m9up_m; za^yDmsHttRRt%*I#h5>1R;I%lAf3Cc#nN^XABS64rqS=8{Pu-{rc~clUQV(mz-Eo8 zq`K(Eubcm1b&6pG^r|>cl^4@+>!r#r=dU@7*{>KJ?1?)uBU0N_w8Qp}Q~}Gi`+36L z=M18^A?%1aLR_ydYW4_pmaw(sD-_S*TF$-bhFf8&r_4m(i=!GMqWmK>FEv zsPH-@9!_-u(^JNbH;A#gNT2>I;@L}6X#Rxb6L6@n+}0*1@xfCnSrwPg54Eqzu<7Mw zxlDYPT9oJgHiMM2h4-XXs(ksz^$6Gr0~It3N)N|3z(u9}oM66wf_uF3q2uw;vrnjC zD@22Lgau`k55#Ao_@twYm-4g-Cmj*dCo=6nKODr!=g^_7O7LK-j)8X@%`#Vgys<+%V{g;d4^=g!IGI&ISm}q@5*9`ZbK-O85 zjP$ra%#f&dEUZH%z~F7GpB}L#rZwKahSXNI86vP=$slP^&aSOyBe3V%Y?4z%7i z1K{A*mZ$JFL7zOgFiaV@wZf!QbYj=FiHHwGDQ0Yby%@NXM*)_z4CBE9?IBTXDE-KZ zNFfnR`zQJxk1dQvLSBg(I-cmJV~F0wYgM+69TQ5bHnVs*amLl@kK_%Gm+)a$liEx& zPG~V*W(rj#B}*lQlNZF%&=;q=w$eb*%mxy6?!W8)1G?B;x7*Ouz0r?O1v={Z*g7~o zymqmK12bbooE-Zbw67F-1FqfNWlfDML!xN2%tn&3Qj(@8>n)__(m!~LhvL?81t1f- zypBjq?@*Ryd6y0w*sN%-Sw!c!(^cv*M0?R|1x}MMUnhO*1C zm;;b+u@OzAgkD@qvkr;*_9lg+lTadjq)>FAUX|6wXkzlB0laKnk03LvHtBTW1pY!# z0b<|ak~1&vj z^yAD4@CR|=tQq5!MSP~VoKmQz=kX_*A8O-OU>JC-27mO#=@Bdhk)j|7VG@1)Qe^kd z;lkj&^Z@H9o4Pl$u{6dA^WoFcawICLv~iB}j~IZ@Wh)U5R|E?kEvtJe!89s%0|iee zu1FOs`ky2RGW5L^y^pHzjJ!zuzEvxqebifoHS^!|qP<-|95>tHG*)c0+<(RIlPxmh z^lX0fu=wS5;5>N3q<^+X_w$ui^sC}cn}O~W>9bd|zu=!dr0DJ%n}wE6&(+&7tEo)U z0MEVZF#F59FNFe&I!^q`Z2V7)7kI-r%g}v>`J-%E6jkgOYr75`zqPwhnDNVIVL{+n z4iWFebcI-C5VSk)@97-8#>#(!2(K;7#9lA_lQ-nYn_VbOqSERkWW;XBz&(C|mS3c9 zn8yeKr7`0auPe1Ua4&G?Ssvw$vIP?FXy;3H>*{|UeQ9hiE^x_|`Mcm~_nP07lXp;v z&LN>uD^Y%FL~4rku4@0cY6Gbfh57m2CF4NXy>!~oij=Q0*$0-GqkahGAq_Gb5g9-( zV|IY^j`v-iHsjdTw$|O{`l!hk7O!ceDW$Z(K3!r+W}MY{kXxef+YaB)4~JIrJ$0rW zh9o6#b7;m7NWIeH%Lv?e63r#d{`6hpWu(Dtr0}3PNFHEjJk9v3VYk z1-f?I+^bSrae1_(j_SpzLu4|4Rc|`O_SHU$Z$+f$7QHR)9B#9ml@8OVNsc;=rr~oL z#F%b48@DGH!w!;um=4VfZTJ*DNzaz@bnsg04N(Tw@6w-6I#SFuc+46zgdtGWsQG1i zGO6R~jJ;&|*U->u(Vt0%_vdSM2uf129heL@y1%IXAVCaH!Na-n_K) z?s)kC8KVL{d+eYDMt;NY@SSKb3-KI^;gqE~nq3wpCwPB^lcpGYlebHYRLycJzX%JQ zh{!m{41UAQVy0yePZBB?E2}MBAHw|-Wjz34Qr$2wx9mBQ3zkYo*I3ggxmE28+iCD9 znK0vm3Pzb2!tT-)eF*4JF{|6@IJi6CeuQ#8UqR`KAc~MT`Y3^Os-MvMMmidUjV@9FDRP)B)-O*sQ(g3aS`xi93bRBd zvbISt^v#?hyHz3pc^J1BRGr8V35wU2`5CHAv}1a4!{N(_HIz}s$z=UHcFf_?K`ftk zFzE>FN51cm%pVRIy|*;S@a^eMD9Sd__r3fbFll(l)Teq= zz0_AbY}h2nRbEsL#M=s_cszJ0d@Du)UvefdVUJSlbI|95?u}}TF{DI%pmX~9$c*Xo zH{5em%d*k8a0ndXrN!6WrE{&{53|E1kJoxrdEKO;#A~YR_O9vwW@&)CKDNhURYCh6 zF~97?QA8H66OmGqd0rR(pbZ2jRU0a85B_=&d5oHMi{~S}MSO)k;5u~q-<6=7$j?sP zTkB8os4q$o5s8sDdUD%B96XvP<$9`-90r8&*tmqh(6n+12dTqz0S6A!YM5U4KL^e_ z#GB3^)xaA_4_1ZQ_!!R+Y!a;Mg%EFzDjo&VLqD`vYt__So^kNM|}vCXPJFX zwa@moX37JG#*V+s;%sKI8O8LyGWo-xG$D3FliY6p5z-NN`sWzVBB@#U_{sc2G@;_JxA_Ab!vdFZ`Gp#15v&7>TXV; z-efj9V1r;;RTJIV&{?EbsoUZ5X|;a3V#}BQ+G`qhaMSB=#$4;EouXw(uG~b;vb&Vb z7`U=A&~uoGX`dwNKG1uzhW46Z3(21Oj+!Rqsw-vY=!A6Yae2=&?2CU+(D2JWXP2Ep zflG4*bU=jtXqR)HQ(+waDTU{D&-k?mi8R|u(3?4>%1G4f99i!T&l#}4AsJ-Uyd^gh`agfo26#G z_{^wQZ3CL!edTfmiep;Onwqa49DdbDNBNH`KRVjU2*z9EQwg8WB356rtC(DVHY>ze zUdX65iUMF@Xi58dJE#2!(IUyNKO%X*4%gsbbsna^jG1b}U_xa{4ht2Ilv$ogOI~#q zso-6Fu*zT49og=Vki1@FXTrAvL_>iP-;4ZvhY6FzO;j6x&fGy?ft2EhW>yw78}7-t zeZ@ChXH9YVEBlqqeH;8hn61SWi6g8o zzg+id22!~>g+&I~uDSSsegw9bIPL;LdybLP$BM}f>0XI^?qUN|os(f;X9w9yMf9@f zCK0YPY)ZETkLnloK7~*W5LMUM6`y|jN~H8Ht9*&({#p>5=MFQ)`=CT8{&0VS0k!_p} z^pnq%w8JA$gn|lP0ehyKG%A4{G?R^F6Bvy2#{o~(m|59ptogeALu*ng;bAOmk&SCT z>qaK08tPZ7K>jZ4Jw@b>AEg7g(Wt*REx(1)dF{RB2Q!&iFVj&ul6~%PTy%iFWb!6eyDmr2KuX-=%0H>8W%)3j$f$VyB1aLs`Vq~Q#LN|B()Q%BM>veG zXN~@1ALcz$4QI0@0&%H+zjV$qTvaNS2)VGi)4Q>9hirB&rM~$cO2;hL%EoC7yeIrH zWZH7n_qQ^}cXl&Y%v)ab&TNSt>|)lkcgky%aktPP&x2{I8Fjyx8Um>|FyhpalZimC zB#FC(tNBB73GFsVQ&!TXdEgFY>3V(a<0G{2zGX3+NvSvYGb~TrQ{jcr@Awq=reqD>uHV zzRg0NWvy~**Y-zM!$*}V5y&V66%0ocM$_8}NJSwX@n(;5ND@2ZCan-}S6- zb>}uZewm9YJ2R?zh?hR#EM?vrPg!!m_;mCAT+#1)5^WCD<9wTI(ro}^kp%8d8S@KnfhPApoJZ07qQ3Vy(0 zAm)c$3$qMAIfTjiW^zV%Ef3DLH*UZM@V&YYVmF;jUi1xtfB13>KP7#UjcPbEMT8z}|q=bY3MIYDOZ4Bh#wqDBJ z2*Q=tRcn6xPYwivR7Z(i&bUHnO{&80&W7vrnrT{~N@lUL^&*rUIgWZo)N0&LX(_xF z;wFWLHxQPjI)tGxxSb4;vZfCCaL~6PO~Y>ah^K7(!+Np0>XOr}IbfD9{Mrm)|OZy&rIT}kX**M>(!yplnVS)h=z z49on*JtcDUA+MxPkvv`?+hiI-mRY*D%am5Q>de^Z#qrxzNyFvWb;;5rOW|a5EJ#Iy zkxduC9D%|kIv~e48;ah1=^A`Fo4%!?*kS=ykPf0E!b>9a3ST66RrUb^bh4I^My|sU z0R#JP%payt#G~`TvTJgE^_pkh&wIrgx9Dm91WW^PkXtzOVHvBI?1qtp&Y zISf+JUdKJ3xW{8L-&0&_qv4gjo5#fJE2in=!laqwPC+UA10Z?wbk3OEm}RGaETrr6 z`WoE~VB?4#$F`g+?r0pl4D1<-?qfp6LT)PM08lmxQ@!>1>mFF2?l}`;BY_0Dv=05R ze}IVf;>6_sk$-^}ng%|n|8>$Qp*1nY(XmT|vBbGm4oy3{ryhx8>jmc9245!1c2;oo zvhA1MQO@BQU%Nu zZh8&7ut}1ZZp_xgcCrIQg>^M-=~tT8W|~vqA{i3FDUVa}-Q3Y;VOi!=h8>-ua-V5x zmTc#RGy>LVa7xi6^R9BW^NkE)*zgiG0`^z7djYa5d@S7&iU~s?^=N8W0=Df*;x||q z{bE_(hFr-OK1xj53Sha}INH=Wj>iS8>%{576r!V9MwlkNOsQkr_IZ^R&qioGZ;J*_ zk)$Xx&YwG(2g0!OER}m*jM}f?vn)`=GQOb-ns^Mew4-C~x}q(X zREDpi2@aj=r%`lX-(Y><8+6Pey8d+ zHqYV`M7vNma#Ul6iA0>sQNjGiV$f54Qjkbf zjaB)Vrp0X02ZNy~wOE>(2TDyO4+foB=23!oUMVBG$RQ}gc>`{94MSG^|edxAZ}xHGzW^ z^fx0cu>z*t8V{E=S`Cq|VON#DHPf3Nns>~+RHf5SbzE&|!vQrJzA+(93w|0G@pol= znLFRCLzG%9JO;E2;x!IbOZ3q+P~j?sF_MIoujoz?4^$h!15}$|j__Z!0(1JKW5+k# z#~d58B(ny(Z9Z!@T%RuxaUzZ_uQ5yYuoWt}2d#8L{@R6;vzMy>xL#y^5qUmxJrW?0 zAtf1xuDhFgQTn>4n!1U@U9?_8p--Km1UWmwPymic5^h|$uX-O$$_;9)>fzz%dXDY| ze!rIh05CzFV=BHuQ~(0}jc!n-fR7uJP==q$8R_q!?Pc>7rj346yNoRJm!~52*P2PG zA(~EYuyri^c~4jW!XC#?cB0{R^{VZ=2BH~eLdF?KLaBv3xJ~7XS;t(M?sMu)<$>HC z9RJ&f&vDJ+Cu@B(&~9wh`(JS?>zPumNj5_YK5^Kj8a8vPufH8gdN?)o3Y)$t$hVfl z4CRgcrN1>?d!rvRrNGUF=m=47*vWXegYVSadn6EZ%uzc_>Wnoc6Ags%w%!P)@V!M= z6oC5@5fnrM3-URK*DZdoG+N)TP-F<<zKdyEj- zR(N6Zvg<1nqab%_nYsMEfX=G9Ak_O*40tO(<57kcpuOWikxEug7FaL|7UJ3ALtX>O zuhHb}4`TEkL?;7<(1+YArJCa%PMY-JPGjh(hrck`!-C;=mH^57jguvjx6!&m;^)AWz zbhJxU_W>>BTu_{LF%BrM8XVd74OQS{I;|~rpNDogX9Mk{M?Hlu*;1qJgkvI|TxE7= zizY6L7ex!rCft*o&tN=&^VMVh0p|%0K6!;P2>!HumHnCuGi4tQ4Rk9Ivxw(kZe70NfFu)d`#G|AYA;9 z!1-Y((IJhto|^SkT+epX{{ryjfP8=6_1J&=zg~xXm-(TlqJ)6l8*slZDfbILeO);u zgxpy-1Q4`ymF&bN0#R;vb8`^mEQf{#k3G~giFpC(Be?SWmmYJ|l4=)(+Zh%A zBe&<(;Sxa3vY2gSV?2uURq#OEXW%A|#Abo%%1J+~Sp@5X&V9W~m^Zf++B!-t{0wgE@f!oii&ksGZ zPJ%ZtENDQ-gC?H1zDeNM(-F92PZ+(x6X@9EH~c)KRf?f^38`Za>IEf0j`;7Bfsz@r zY9>Qy&lAkQ;jW`(GpPgUV9)|V@D5L{0MYU2qGS6$sr_+^cjC0ej`<6<(i6z^LqLcR3##MOf%$*-En+T6hEmCe5^yuUNR7Bv8*D{sLM67%n_$!1Y=j2zF;8 zUo8VD#wRVj(4i+dO?F&Cg+!#8H}-#-Iw=G%!9ptwFlM4xuE<$vxLyHmCP5vwnej-^ zR+#Sxst(ET$y7ai*CU(Tv$(A2r<}K}m@WfYl}lEd^&)qz5B=XF*uFI2IqrUg=;(&{ z2um8~7x_2bEcgvJ_ci1+92dY_6KP(IA$)j{RVYxt3z$q-u>%0f;1O7Z>6hPO$1{K; zQ)1*Lteelf<|0o*Z&ni-p?%a$&~J7=*}gg3s-?V-A%4ZPRRkcAYTYy+h@hkD-x6It z2#^Qev9!ZNCbj={7q&?m%omse-e}ASA{2N^c8;Gf)O@~gF*e^ zef#&HA0>p5WzFJ7rx&tHvFey|N}2~vIv>4_(*|T6A#gynI71hCVevn;eT_X&$-o=p zT<4J639zB^-FpcGyv2JNx%{;0y&r0u8tvvp^NWn;WC6W z{N3nLVc9eMusXJ}j79|MopQYqo=F2SIvl%Q+zJ)xy=XNXG&;cR2bj#~w~ENclY4=0 zIO%WQkQl^Ye+MMU9vYw%1}VROkkmT@&?p82aY}lEkl;t5Ln`~B((WNK97Hp$BSNNv zcPff`4D)}h1uR=PiBDKsX(rGavu71{sOd7=8?vK2*)DxcfE?}|qx<^7zx^+MaW-Ir zYt4glxw^3J^_z8I>yHHiy?SpgNB=$zTs%}^ar^bN833*AWV~U}TJP1E?hYq1{o&^%sui4FOREm`Q{TFJSH3(O^GjyyxOd&dkcnIY!A63WgE+b0hryB<|z& zUhfGJ1xOc29~mnZ$nV*F+1BH9^xE0V;QdgStwrem>Ya4bm20<54w;A0<*$>>$M}-K z1feHPb!q>jmsb3|<=U_I=c*<&tXhPdoQ_!U$@|47_|w8xa$41NfeO#7p`ZSO`T3-P zi6_2H75olXNSY2qIM3FYSRW1uN`{x_0QCcMP$UJk_;#j>ur3alIQ5tDw59O{g6K@L z=>E>)8Xy|9ndGZ77T(eC;Yg zD>ND11ND$6%F68-c-;48_im37hWm) z&3jDjV^wTlmf0Ul1MB9j$1xoC}N#=^mi>4_O_!81aI64@&zFU@xcmHbY+a@ zpDFTv1o!hAAB^Zn00wl7`+q7F{0ko}_`3oj1nCNZb(Id()%kO7pqat8NQ*mm^DE$9 zJ9#0*{M^(83;xU^DQb_8B2B`H%Fm$+CalE9baOo? ztnjr%LS*s!qSP-!a-pBV0q^1I2$lZ#6bQC&I|)gVdP-aI}K9yeFX6H zNdqku_8*ZXz6MkOA6a@|55qyH$VQe4eBNdEO1~-o{#=E z9Q)gE_Xl{?r)7LUp#J&!;>GhF_k#x}oKZRM!z}~YX)T`E+<$~b2W-~H?*+)Yg@aA4 zP(uI-p8C!&_RpZW#8>9$sH)w141=+F30uZ0Us(^;iSKksw3V0gS)6$`A=p7_)Dp4Xf3(D%MFQqa|Ny<<1YHNMbR(vy$tS_9{g{JZoo6;*}I10 zzP-z^z%6sM5Gk`aMg5@wpIEWn?3~hye~SaAn|Vk(aIogOF8wOcE8)`Q@{A>IW06#e z_Hslel@bETT2mVpK4*Z_B*n7q76w$ipru(4Mp^$k{=XfR0(P)j49mhT7}!CX??Rma z?qCY=_g=9qBRg2iM;v;Jn?J7H6=;veHkj>m|NbWhfe-it9S)GoqNV9HXVWH>m)e}E zjK7D#Ts;j)FzX&jM~#aScd__n{m#tKL+bFce7v| zm+$RBs~O{4&Mao`>_6@bcp$hC05{A2qgf&9r-hmT*?B$a@FOmvA`!Zby{)p{d3z=D z56w1oG&@XMGvS;8xq|9JSDE3QN^t8xb)U0mQ zN?9{tcVH!vu4P-A_tKz=7uFU_0MV?_s0KgVJR`*9^fyecWA*d4zgG)o8LKWtyAND< zcPpJ?H)s{wH#X@JX&Aj$GyWf0Zy8qA`h5)xg0wV9Be11GkF!1v1f;vW zrMp2&K)OS^yYpQf^_<`TdB4ELC)T=S&N0TEb1Wikd0@8|-vID$&Ud7R@+oq|2v_}$ z+@Kqr)aHC|fW=GY558^R^)X&jyGqX7_=nIs$}f+0pi zKLP=?u3e^QI*{WpJ8cgAH0Z)NbR&J~F@SF;Omz(uW`$Wv7)-yLYvj%+6l|)XM^lND z4VVMBNAcg=yMF8M<(eKF9(>z?-NP=Qy=cCc?4i3 z?N1TlZ86!#@_Xo{4L8x`+{$ zkCqRXm<8)zH`;7O=B_7$PUSZJe5m;|VelK(1l~kr6=}uJ0=>Y>D9*&BRwj?uv+V9U z83Z_LxTWwQop4QXW9#f2)9)Wwqh14RLXK0XU??duoW_%N+M1S82`3|eb|TeqMFkNo zv$GH=b1=@ONLhUMlAi3}ooXS~y@0d&Q!U2r1e1{JJ{2YbDd10u*-HgJ{yueU`n506 z2p|Uc+}jHq@+D0FG;>)<{B2X>14qER&&RO`mXXBv(BOw?K%~kouaAr$b%W7jcM(zX z^HK3U+JCk3it53MXwLfUhGPO9k$TAmN&$b_#wd4!9Pqip-xrsH_GJEsMcI*^{eZe9YMbaGe)G7q^ra4r(sYel9V<-E`@d>Hp)OLDmh_InEgQTp9X7 z1%h`kSy2Ax<;Z}Sd+Up#Qv!Ws{e&vt3-taS7#hZWd&@IY&IS((6Z-n{#gk{Y8egt)7OvzU?K9boE47`P0``RB1DSDT$Tvtf?ag$sqvBDLPOC;OQv!sJlWG(|Iypb;=_^AfLt9Rb!%*0R*-07&&iVOqP6rBn0}J< zFr@-K5r)30KUER$^W2e7S7}x+&09wW%Dv4U?6sJDZDJgV?KA-8sS&;PM=sDOGu^N} z20Nw4FqTrpw!NK28BHoK0HM-Tq<}=mV}vj<8i>pEjpZ^EygY&N-W*OF8~+wDsvv0s zc8lB&{a|ipEipvQSuj+A-~{yDj7=K^89x6w;%(n(pr%;$(b$BmB#wD_#OZNE3tz3d zF)QIugW%K*5z4E8*ud7KpJ9m9K&;h4o4(qnnPs<)`JjRZK^`IP>;YEcN#Fu3mH>DL z?+iV}n{N%HSZ`yf-r`oDg=dTgZ}fy?T&~|b>0rb!ZDVrQoPNudC=&3>jTBrNCD}9@ zO%fz3o;Bz?P^%$5R5zW^%X~4M;a=p)N+^~RCLp%6p(zHq6kI8aC(_|&$Ad$ zX=STq0|t^I<{g#Ky*+)oiczKJKUg0p?&Hg*NK2U=&Y#7iuZ01f7n9%mQ;1wBR}@HR zy2J~Z8C#a+-(H-LwPpZAnqyUQWLh+Omm0?_-DA@e2ww!He0p`9j70sg05DPp4}7@$ zN`FeF$jjp|-S~s0yf&YLE1^UcRviqqGSy7ADXyQNA6{hHTn_cb{`~k`5okRp4>S7L$Gda5bXe;JEs7q1iNjzVXrf{URkWpEB@<Z;(F4ZXpF=qW=GKg=LVAmq;bt;;r*}QK zM>jlGK+|eL{z_1J49+{bMRZCWH*4!;RFBPMt>ILjtfH;&8-M~d zubhy%p=G**UN|6~&26}|;>wEfkHjP#zj$avNs|p`rpAiOxdr+*w&o)g5-Uo`U1g6s z4Ov)aK+z~p@8bkgcLv7xxq)#xz>lfSbW-ieQ41Cq1?YA7X5NuE5Zm6JSc~f1uY99q@*!>p_#yQQ$U2(3iO_Tq8s3?4@=-hM1<&G%kOHx(V2y>LZ%8H18-^iXTt3EtuHn#|!YcMy5{wsR`cIivl zM6QLJ^-T0SE%PH^nBifVy}fWC9i5%joSd^(P=BZi>krhJFA9LsRr{gi$U5I627{fR znKimi^bb*v;Ps4-35cZjMf;ozw0ei^KGxx=l}?|UJIdEU?rjNq|OPP2Pk8%13G%PT-oYE3Nm zkMG{S+o4G1Cw)rwK?-+Uguj_R%oFEn7w(C+2af*MSD0|`h4o_WQWL-gz>77c;iABRmH6nTlKZ6+$k;{aJ%8OoIaQ?9UI5^eHKWH!fq5(jFgt-K zR~<5ze%Xu6ddXY4PrP-fY=BQ!$gF|wYi65GhB^eg46n@H6?BbvwisP zGL17YZbS1uhHF_^r2&La@!#PBoFbo8$Fk`sji!|aj=Zl?>vc7LjoIPETQ7mw#r%_+kNz!-j zVfHL(TIsCkbmR(KCmd@+SRyyc-j5E^PvvyKpU1|Z`qny|?K%|ASOg!a6^^JvZ;YR; zt}@a^iUd9YDtH6AZ7aRo_nxu<2)`Iy2a=0?Bc3~z!XjM*4Q_ZEHo<%+v%^b<#ShYa z;VC=p*8_4l(#eQo@l@#8`SM>7ze$v=IB(A%<{2v|g|oQZcBHK$YjN2Im3C>4hN^vZ zx>&>0;&o0PBH|UM^yGMh?e}DkRl>WyqXIpDKX++tFj3k-U42zY9^+h6F*NjN&?$H4 zgm;!J4g(~fUD>D?KXXI=WN4BbEcXTDi=a=R<)rX$?Z8dE4KS-EX=u?zI5YGEm@RFz z?2A9TC-;*;zNwm-(*{EODbNSFG*Z#g{rKwfhs*h2x5u}C?v7j>+rE+s&`eBS*?io~ zi0bk#j49G~{56^Dvse-uIeh8Lb}-s;5Yc77Q1A4<<@Ao9>_SMnbLX!w*T(60bHFx{ zN}GF^p&FS$!LXP0Vxh|!AMe6vFmU_d8c%dj9D zJahP)4eziG?8A0-rZsxz0TM!x<1bbvw;~*1#=d08;pXn>K@eZLAgVN(4++%JuFm|; z%l>{|>2+dqHd1REy2W;?Y&%W2xj+sr!!J4q+#kN1t4eO2+xm+p$82Mwd{En(?DU~RYdUIpL;{Reh2o_u(I;h)D>4QMyJ$Q>>= z=QsmKYMM`a8}9fBPc_wFAA@xh54*b^-KK4sz_0VQs zJdsKhIC$}!ug%sm9uDrAhZvHXt^v9lbJ;3Pp7+E|wLE_LcG^uhE>#x%5D`(e@EBnT z$Y;t^ASm+9rTI0NRy_}lc+C@j&Ti>-akvwl``5=?@PN8gD0iExo!)HPyi~MaAGiP z7*y+RDZW09Tfv-is$uzCe~Scx0wGBPO>03ft#TqzJhLeY-}P_(DR7vlNOF7>==}bz|YzG)!e!r41eGO zcywqyf11bzT5`sgZ4Mvj(sv%02p5%;G4g>=E#F>UmbhYFU%cI>hGA$=%3AkzO*JDk za;s46V>u^co8+jBVXu}INY?(U<+h@$+38`YNGETfsR2d-xj*KvNaZxO*0W#fSTQCBMM&sa+maoWpw zHyj$Qx;R9twGs-HfO$N|_sZG-by+rh@WoIMD)NZxIzTs}u`DS-otv{X;X&vWat^#+^(6%y`P71LV zS=|$m6%!|vNx1xBIUd-A9r~mhz6H)09;2yQOVj{Kd)8OCr(@8+CZnG$Hgd0ny-M-! zuh4uI{A?xaDwz4^_{m==l`P2NFBf|Hobx1mhN2ZFyi*2@HN@A8bY3Ua(tvP_+q0Xj z<`w1>6?abxWgU!>vbSF+`Q$D^@Ud7i$!vH}plG1uwI2Djs^nK#F%^9LYEvALRD`1V z&H-I4-8PrcG<|I4?z*EkdLAi$J@&Nw=4j~I{&Y?v!xgjirQxjZW+HUCKGzi!{(sfj3Gtz{M|06yXN6@HSEUFDQ1aZ$ynDLvc|gBuI-PW%l1SqgQ~LDSRBEV zbW-Md=Qd{FnfIq(;BKhW%!I77mf+$h5U$;&qrE!RY~crS^tV z)Bi^X1OGK;N4o-o2FwG#{P;3Q6)^8OnqUCnMoxM{qq>CrQVOJtf$RGgf+BR@FVNhl z{)UH^A_@&=c;kaRskrCKkXG}>vdYSgiEInSObch@RK2x$e2tBg2t*bL-gz@H@>HN+ zbQ8@g!C5_XbbVd9$@**i=DH}6sUnKypEakM$98``k5j<-QeH=-jxkD$DZ}7O=Dm^J zrP!Dg`8-Z-qx-ST!bW8=N%wd2JTyuY16;T}Ww_6qstj)U-(w`+MB8a_j+gm9PenzF zQt%z%P!U2?VQ*S2gHwn=ZHWZA_CARU|Dm6emxrH(I|H>3Bz~9Bz0tL%&(2fKU z7{f;xNBc*q4+5j@-Y(3*P9D){Whd3RA*KT}^11wV6LbdN^ApyL(G?;VDYL^nf_~Zz z1z1sw!^FJ8V@r6TLH(@CXB#`go1R}zjVMOvy50JpGg%ugbF@eI-$@o9SUwV)8WKaOhO8sZNUR!=nn(IGNha>LHtK4#(V ztCU=uEb300&RUr)!1sdb$EDKumO}^m@vrp_2S21e@KOW-cb~?4mb{}3$Z2weM7<$*9IRp^@WJH30I-m5$=K8xWoQDY6`5QA?ccH}yCd#gq zQ8bV-v!WO)mN$kpW$@0|gYTbYvq&qyoECOnR=A;9;3x_y4;6+AM>0t8R&@)hjeg=J zTC7u1sJ73Bf2Na{{5_X~7x&=j%aWxm3iC^c_bze~J2@<@m0fi&?t721!Yf&)2d62} z*EBd5J_r}TC-8~kuEf+--qE1ee*;k~I4ofL<2=x?A##`?7!>tpa%RSg|1ODH7-Kh3 zE5u%#Iew)(gtCP4egBGy6^BF7rRUxPLX(uzZQF6r*VlMtf|!16iqT}3tmxu7-VcWP zaW4!_GO<7i)DW?#*ZSuhkdb5x#Rh-H>?8kq=2sZ~@oTM9=Lfrcl>wE*O_#i__t#B_ z9IpG-Q`)m_Pg=f&x$Dbv$jKjlhnw^6~X&Mf_D{LDBO$dkB z-0Y5=hndoG1KkVi1HfG6TZ2kO7!FuEWXhiMO50r$rf+>(xfpx795$F#1&XWe91smb zLHhpvssd8++CKO7t<{&I@y?E2%n4;2{ubtNOK(2u*lQcfx8K%Qoon)rP1++Y6n{3$ z=;>T4BAxZe-bL=4LfxnNq@8LghO~fys;cG_hM3pAlNUf$Jf*yIgG)HAjaywlB`w5tE0>d2A1 z^J}}#-#9giW$GtAwl@Zg-}v)$EQ{HgpS0s9(&*V@2okLx=LFYY z?L#%U(7TzJHog1F9tnnxW!N1N8P;=3xn1Epc^Df*F&;?_J!G9%92VQ{P?egB*(9EepRB3aCpa#6h=Amc5-0Yd0 zsOjzvp-N-nc*`+)=5wpxnSD6c01;_nqkj5$N1{~%dj`!5C`MEBfVAR9tB(hWfhfjiuv*k%H zrV@*9oE@i&P8OQVq&D-!_GY(#pQZdXD&=ovv8$uReAC6WA)pFq>3i=XTj7O z*IRc3C`N91#_lie(@*Pevp-H6A1hL?)GJT5Y}L@NRWz2eq!3Wcju!7KjjmjncF{aT zSD!|i%@2LwA!447PL*Zp!p)pCZltQwAo=ZOKYhY+LDR*Nlb}cSYE`VT)5oHKI_WI= zad+VJhO5+ePQz%=at;0-TF?C#CEV@lv-$X zwE3kl^{A)JY0HCl>h9a=im=CiUM&mf(mX7V4i}+*J@cv|JM;0d3FT^Slx?P#TEY+S z_f@Vq#yhE2uu=6(rUjpQ8z6n-6|eB4=EH+_@SKBn&h;{2mw)rL3(ue}VD}y#YPr(D zK`F@F9ysul=@d~@)N1Kc&S$x-=W^LnQe{<};R|8>K0lc{@)kzJQB2R%*H`-E<`>n6 z>gXiG=xnpi)K8=6lB!j0Y&UlD60|3b0<`8Fdap`5rFzsC=ali6>=LN8N|MTts-11r z$8O~FjuT38R8*j%=2iG2!+V>>K*|G=Qq%%E;NLr*?T%+A? zkK_Ceu)P}Ub|?Iqt5>n8dSvsi5?XyR$E!Zb~W0m8e~nd}-bn7u2q{?ZjND($ykY z;6x}#Pz^nib7wLd*$Ra9IJYQmn*H>}oR>wfSUbdDz3o`_`fzh;`i0mTw2L$eRnKH$ z;bDVE4zUPLnbRxNZenP73W>IDRPEdaNG#|28v!69kzr9khx#W!Tmlh^pak+uluel? z`&x_it#_oPcAn6JudCxh#N(NZwle+Io7b0X#!|zP1Zg!7pw@=T<&Qj4?I^XlFG=Y2 zSR%nO_6uzq*&lY1kb)O-N;cC)TzxG~QX+O=%+vK4j}h0;jN9qTXphWAE9nrdcW!>_ z6=iHP=1kr4W%c1S4w=-^rE=KNXEY|q-gq^t&NnVsF~`c1T|m?b7QdoGt|qNff5l~| zfZFJ4gqlj5?Brw~`*U@t`NsaS_|xKBipSf6xtv813W~AG<}f{%f$Uf#%C-eb{w`$! z3;npy^^sIb=xDJiEyvX`-^pn$UvK~QfI$n+5#rK#V8P-ck1@d&!tk(%f%m6b)Mymi zNj#>8{i)V!7B!KFB|(4ceq>nTa@(;=o;5{t7&SVA^S6c0-JPnm7ieHoHE3ziqmA`- z&~8O^2zVaIx+`z8pZ(6dnHW|#i$+Rl-WaslfTJ^7JUD14P;AVyK7rx;Fj1k%rzVay z!=CNZ`I|9s!}_b7;v2xTTNnQOK~_#^Et6{U=uu|n>`npq*tTPvcxl?nKKu-eXW)4F<@3Z z)3+(mW?~nEzdzym@Sb4^=i1OP^^4iql9G0jBn_2q3XW_Q;*i>Utwa{F2;RR(Q_#z} zHZlW}P=H1%8;NLG>itiqZ2RDC^c=J!>EUEM9q!nU)|(FwT1X^l-|FuyiRW8?u9it3 z*yOy=7=TH?SO7PZG-X-EPBy!;@tjc9h>+V!7N-#IJY2e*n~(c=TAi|gqPZ+?XIA~C za?*mJC(FKk->B$DT4wGm*X3eqp8Be z5iB9fvxZV)E?0V+I}P{4yB1V)rHme9HwQtqp&>aXAx%t3^u&bq&If~&zW{^`03g$bvn4_h1!X1xVN(dkFrhzzL9}lG8ayy^#PP=9 z!W+G(LCXh==gPEVdtesoeorN8H0a4Suh2g|tgzhFrdGH%;<%~PM-czFBu{I( z`_PV0VS*BB5kmDvhBJp0KnSk`uPG(>{?oihg<=v0B(zlQ%;8t)EZKhZkB}-) z<{PQ&qk6pSIEB_lPop8R0oZXR|0y`hXyLKV%}u3ts_KovomL@plZcySxSoEt%GO@S z3j0>TaC1;Nw%hXY+|jvZH49c*IV*rp23h<|j^{+QF;SKA3M7UeTOQ~pe*H~vNIqe- zliekoe;4UwYC0&_tvbIk5!zx`Mnf|t_n@+PH&HA@APB_`fZ45oVKxRxmn~5!CM_z8 zTun_ar~zx8^s5z+jSwhvz`yT3AuN0}`-#-E`caguU zj6|XHqZ}=l3ZzWWqs$%+i|(pFr74c#(C}@n>7#^{6ELiNJMG!nuTar&Y8II2kKL6j z)@qW^y-Zua$tdc~L3~-@)n%ULIun*D*PgrI`VhO+Qo?5$!86NAKN}#5NFt{gM&;m( zMepGo&0d%tO{V|}8z-KQqtb$CH0$TxUC+IgGr!RvV4cZ@#T<7bHc=o?hD2Aq zG|9hn9+>R4t}fy%CC}`aGyP8Z^D`%?pU{{5ec@hhR$CWcQWxx=W)3R(6rsPeYzLu`E*p%8~_G+<~8LCRkGd5eq@oHGi}( zQsh_{GUnP+mP?B>s&#L?>^Gx-cGVZH7MoXyZlN}-&izR{79^@frJq2F9yH#Wzx5Z= zIl+?MXAG1*u3&H686criiPyYc|BVfFu>#NTN8)dP5-(AgD2km{f|sE|5h5`L{bw2$ zmi-+1Rj`enleLLLF6?(Mzycy1#Jtq+p9tp_ICd$@MFI_SV9LH# zB3*?B{X+7+tzN}YI&@5Rn>a%{OdW&kFRw0qvx6Z{|EU${ts0AGg4?-A>D}4>&1d5@ zGOenQS)4XE-6%O1u;pm`q8-I~ja6yDK<*~u64W)IK?$>`RRm9kq*AI0@7taHx(wNaQ-#kYJc(GpF}jG>i1V(8wXqk}Wr0^mnRhq3+)uJ`T6sxEbGW zmH0C|{9ekZXK7+Y+eX#QT{!U|k?#})IL83X;UXl_(G=V0&AG0}5R&Cat@Yqa41%TU zpzTh4znzPi#U*&27PVs^8c(?$sSzy9lq}VYmzuuhm~oldP}^ifV(4`F(+%bXSeWoC zJw2hI7(`=$t(c|zZr746#qznwQD)6vuo;*+%Mcj5ov!~s&$G;&C^V7E_puomfsySp zcJNAn0XbV1`${~$i~4>4VEZTBhO%?k!V>2l@y$h)s zOf*W5HVqCM!!`3;G}KFLyLb7u-0pL--=ovN1H07geeVevG*{+`WGR?Wt@aLHtA6C> z?6yK(JTpV(s6I~kzYj!@wjDmVw`Z2XX=Ig5;_Pi@JwrT2mcPf2ja)fhXlhao5=|p6N&lZwg2nP4M=jpE-8p}#4d{JGse~Z4!tZs{ zqZ>^b5BK6l*v{KMhl07x5ADY}mh@kfTUHS-CX&VyQ$cLJ?s2a}iGJsvr?Y5@^fs|; z?p|;|6BAxN-4~r=vi@dqxET4Pjhzr0&-F1$Rqd1z&PmlO358~f+SvJ@1X z=Qz`TEZc3Ex*8Ju{ryI5K$Zn>+9YCt{5kB%gus+ZglX+u1E>hGqEL854W`-4hm8T| z>~@HzsAbD#>s^tnLMzY;$hG-GATT4AxEiCPZ>OKtQfS^ zVm7xR;QBC6AFkyVzBkuA#URmj2KNay&PJ(U^oQt+e;2{~45{wgCzeldY)NLEl+&9O zki&?CGl^x{b{*__RYPAKJSVsCQ)(X1{B;DUh7InVMfn86KmJHpbfWe?z-f%VCTE7azD{Kc0 zCJlsuGc!=L)0_TvdJcdqN{{Ka7Qgb$G(XI#{O0YjeF%H=p}?L;9_sEH~| zoD3tPT_0c+jn}`t^Ig!mH#T0EDn$_yT5F*veQ~ks-msGF3vvUeeYxo#r%H;#m{CrW zxZ+gfiC5AfgQnzH_nDkZfvmgJ0vESdOSBu4>MOc8#(E4w7DSQDQ!N2N|H*U&%Ebze zrL_T@p^;fM(bg$xU;YN>XVBZ2SB7^}Og3x1f!Mm}mw`eCNAX^1&p{(E#P86qj;Hte z?V;(=_65~x5kG?fuK0Rcnsj!UlpHc&A32}{jfY8PebZ6WKqvN?P7DC>SkG^&xqN`> zp`s@Jp($l3m-bE>SKKVw-@}7P^UZDE&DnXpE3o7fv$zl$lap-Q_8}`H98M-e7lSG@a$HfM$ZesH5ZAZ_Fe1;QxZ3*u(?eC0Nn@l8`8S@b7%U+_ItnO5LFx_(em z8AU(({LCAJ@eJBttQIT+3&E-x%g3bv3Lp$sKPwLaxtU3eEfs zGW&0H7jdl`8G=j@yfF?hDOsv;jx^E@% z72vA0_bsL(te}8L7$yeUm9uV*!EXon3duXU>F;^)|)APAdco4ciUsloe(Y?%X!Esd=R0(X5KrsOIvNUH2@#HSBj z(3lNwMkE8xbRm0@Y&j5r^5=m8w%7K8Pn_isaiOYrE1P!~RJld|AbQowg6ylMgK!0s zUHRBg|Cyqt;XJ<>6(-aDYf)m?=1({x32dI%X#1NXhe@ehtTYk2-d~WT+1;-v-J35= zLCxAt{~knmgD~)z{Q0R5g~cRDj^=J8k>gTCR%7R^HZkr&q_Oot3cYbT$nuTw4?!Tr z1OkUXpuW(K@xGS4VKS1ydmKUNc4md^)6R`QZH_c4IS{QJy8_XHdn6`m>~F+*Vukki z6~LrH&?d(hsA*|<$6TgH*zq>BiawVfSVw~CU4xwz53y&f3!*9aWXl`xUoGPBM*Sk& zBL{%(g{^RU*H(}ATNoxF12&YYSDS=2_hM;=aT5ytyF6l%U^;$`2VE)oPqJnZ*gG_; zAm&70owB^M*k5{hG;eFhWYsF2a&{-*!^WA?Fn!Div^3;>r$lqKULf6!#aU?u=>{>h z)Bc+2$A`Kxh@5Eb0^N0|0z}>%hL5;dlq8)bzb4g*UJRHdHs;Z$XLpGYI01^50U-K$pJ|ztU%!;Sszp zz&LVArx^87n*@nZq;%M$p{d<=)8N^jqD^7JFli}7yn7C0Nbci>_s=aOk&SG=!$Fc; z0s}5uaXp%`)JYb9bAYGY1|vZ_Ng5=t%Pjuwz)#X5bZqI<_CpfgXqow#R;y%-rIG6f zq7WA>ZWe^;QafXP2mrdt?(B(p(0C+NatnJOKRCvOGq(Jn2OWVvh7rFK*2#4BIT@v1 z-UK6LiH|yOTJ1~X1Tv4(j{D1jGVq&3m%jlk+KJONpb3E5$K6{oq{iJ^_;w7f&no{V zCLwrcdL)t=NKP!W7~4=7o|G}W7@0|H@H?3Y{5I*hC-*^C~dwQqwbKn5t*bg07c#SO?Zr^dyjryn(H@RGw zB8n_HJUrz6NINS1k#@)5^#Yr(!k2m5u3mHcSe_$Os66o6=j-c4IRKwy`x57&1mOgp z`FI`eqEjK@e&B-#7FEDyWFJd&C)&rV3A1;kOJ zt&*C(*^4}6ppvjRn!6BeUu5sWvwhaVQ=WQIbef5$B#_>vq9tLdK#I1#)Nn-eHk0C? zD}+W>zTIu~;8Zg5t;R0lXHPCgZYgpJuY8a$0*3g3!cN zmck_!AV(8k-Fh|g>SnsVJFUE1q)}?AnooHT?pLBd^jXXb4#Miay>WFe^*N8$06u_| zHEw2?NT`(YC7MbpbGgE#{W2k3Dq_7d7At$=DgOy;k5T>wT(OZHq!Y$@ZR!})8X|3Z^HbWpsBL>Z5Q#WqIM3$?aw%Wrn~ zCF^I)EF)u=d)KzLXMDAd86i(<>@0G_#MkfAN3b@;gtQV%5A)+cA6?fz8lQQFN^NH# zBu(DYnYOCZuZPhyR#(9;gkaHQxUl~`T;SaU$zp8Hd42CDUB0Ny!W|5Ev_sJLp#aL? z0+u3`b&cAJ4J~cEQ=35J$RET=djHR3S;F!IF=Z24KSHrgC`Uz}gC-BZ{+gf^17f|$SJ-4;w(T4K zM6GlRyjHPV#OVA752wZaJLA~T^Osfo-`YHFReD2G0*IuqmKq8C9b(=y3^V0K=>i&v z-kB~c6dMpF=BXkmw}9W87vIKk9rDOV&kYv~qzV5^`eI>Tyum^x!cVB_QW!q6OG*ri z7t`vdkygu7V+IxyDM!)>?sGpxjtQQixh-ZZuqcK;3{QSz+td1q^L_-RpQ9S2murXd z1=@n->SR?pi@-I3e)+;Si*|i|ecRGmnDj01?=!a`d5rtg-T90^A6s_c%v5ln3940fk%jpTNrt_Q6XEo!GfpMSr=OhK0CD5|H*x6yOvz5TXXQ z1)ARWl@+nQQjc1=ATz%I843{LJ=pm#G_Pg#4tpYg0IzU41n~j?L+EjVsAY)C>24ja zsL0eJCfe|(=f4XcNtvEI!&x%jSK-h{BR)=rp``JdqHp&-M!0O@qZV}z<^Y;iiX^@VLnQfPV#4;t05`&<%k)nTi ze8~Ob;gM^olFcOBA!swe0B^8Ty7U+g6?({AU2-T&o^7_CCACeVid5&kHBgCX$|e6^ zp>6Qf8%2Mxc>aq+A2Q&qhozcLm1_O4l_~Q4Ix*Qamodd&*k15AO+ACA#*!T~yT6{u z^$jB(DU$gr6t~Qx0NaE^Weu!*Ke!K6TN@kFsGZ`ek&g~H=dnOD=dnoE=(rcz;fEwK zvLbvsRZ6Aa6dz5e1))(aq3{dA8XBMLo!Vb)I#9uLIDhWX8eJr>O`Oa#4_smcZ?P;0 ze6$cNh3Ezlm|Q>Q06`y69$EoWD5w%HrKPu#TK&G$&B7rznzJ%EX>X1Hza$gol?Z(F zCx>92Z&*6)x`#nCy2HRh;{Lz0#fp{`A`MxNG4MobGeD%A3xsxz@?|9TZUa{OErd6HEphNkl4V z4-$*)CC;MbLo!fLUjww93Q+>=lTAymsz>v)YwzE^ad8umZ5@Z1^xjn-B3oH8aCbub|pi)3*Ta{Pex4@dY2aJ#J0W7+q3-jPaa3{eOR zqVd3oNFX^;g}r?!CgRoaO-!;x!{SbQh{$vL<5*$E&N6ND24nDi-t0Eon3Z7W^q4-E zx^7LV7K$CzPUg$Bm^$>_*ep{o^G|lV>9cW5iOPP!p1IC?gNWGg#pY?Y$Z!~*$RM$F zN4GP{+h9<<>hg}p=we`pBKfMHkV@H=D(nwaG3}&^^D(h~nJg zcy}hq%fd5RC{qRZSQ*z_qf-lEp4y8?OEJ&0`%KFwNFfXo;RDL(|jER%23ABHywfP6^9$1 z^ic53lXy~lt+3l$q5|0>a1gQAjS|7gky}rX zChYU^vU}HNo~~mXnznBaeUO>EPLb>TJgM2on%<>bRI!4JoVEND!?k?$C#@I4tZw&Y5m}aia-gpiF{$biFjZ}hEBNhx0clgA^ z9`46}vwb*pBl1vw9K{cU3TEUgVl6U#i%L(mCmRM!%>*!KhK=>`*zlL!dda$_I26}0?vcTwX6 z$Ml>nv8n3q%@_;hS7Gq1wfF{1HMB&fW+rTJNQ(qBC;8oYNdhA92OG3O^cJn(t)#bxpy=~Y z-Fn(9K6E$yG?=?wFN}^0rX-;>q>UTP&84C4hTueHc87>7C*`W^=2z`I>su1hnBtUF z@eq4}L$}z~2tHVw?PKOZ1~IFtr^2H2tCoWx;f4xOA=b4#+YKohQ%3i)J$Kbs0%HP8 z8nBQ=hZZJJqDgT_UiubA>fY0G}JATQVhQp0^+pou|&zajT(jG?}Uj_}*t@9vWrDifvFw`^ifm{JN^i zBeWq=BnbK1MW7ve`A;1Pm8bi}eXC0U7ha1CrHZz@uB21N2OTLthar~GoLtt?&iw`= zf9NVA>>qOcDNbxG{hM746T^GRwAvji4ZflsXW5G+0j$==E64Z$Lou% zEM1B zb>qk~OMkZXfo-#)FD=NM_A zcSVJ14}-J12H5TP`w}^JR;YiSm^zuEAp982hJr&GPiR z-GXwSpTV(~ClefUWS|DF&<_k=7c`|#;2N>nQ=mRkcrQ8dqvK+{i;>JD+tN;a>c<#L zwI%f82PqVkK&SJi7n7tThdA2kfieJv?9F2wjI2#_nt0~Cc#bTfYuu)kqlu#)F0YRig zLb_Rmba!KbbclqcfPx~uXprvikXBKo1r{LP-Hqfo7wX;{&pF>8aIV)Mwp?4DXXY4l z%rWl!ezM<88Z$~kzUMq0_C3ve-+V@~rkP*1oc&BagrF-f5Zp={-nww8 zDu1Xm=+)JoV==f>@7ty;W)RwC5M#w45i`P?7l%Xwf4%|hxse%B$6 zn{}qo3E{pe-gdOBKdgx#Uh@p0pCUm(ZKpa;|8+#5sX_`uUBPktn-a(=5Djf|)WE8vB|FY?2wx5XHv!d!K@&A;?cI*1jTf|mT=VyOC^^%S~6!mCETQa5wy%lJ%J^K#1v%;Id1&{SE|2HKmA2H*Hw5w2A* zt_NuzO82>N%Dw6P7L9~Z%3#Txem{hKI9^+x$-*!e4SV8INRVmB;hxa$vKJWLR>b%0 z;TopOR2Cfdjfeh8YCzTAq__J?AO;*Hq$Cx1R;dJAHq1HYwFX+Sq;^ZqiMAH`U7c1V z-jr4^fdh_#r+>R#L`4EKiQ46PET5u2qjut?c;%}tY+&=lFlhyaAR}XN5bNk&^$JG^ z298~l&bqDBy^K&E7vISJiijTk)>g#T<|S#=!j5WF|LXBaby-IMX%rH* z=3GHu*hkXW>0jEsOlj$2S+x2A`|sSkkLj zCtxprw3sJckBSXc=qsh&>7!Rt*?!O0-ZY#}i#!mVc40{v8S04mo4{oetZ7sj#{>GB)5kC47WJ!4#St4@pFcOZs_#m+> zADt}-3&Zcn`x30YssFI?l|W^G>dH{c1}8=a<NP770ba}Nvmw9Bgm_=uEpksy8#k!|&UHlG_8A#r&G-iofB)k=pP3>y#)dkbIS`+Kr~j{qnG{q%2HQ6~uQ_ zGDcN;ZFsF}%6yhg1h~H3G%DtkEI)(u>sVkWa|b!UZplFI;{;Hz@Z9D780P6f*YP`(0nCrpoXQxXhlZkyQiv+^)x4qBF!cm7ZZ6w@c*Wl! zk);rnbZuLfOa|ZuVPvdn+N;OK&NY_fJ2khD3h^un#Vd6P#UuKjHN^v5l8G+9MaE zPBl8ri(^B!-dAo6$d@aV53a@%^7A#W5Jtmm}zVjoER8xnM1YE?<95;+0n5l=5uiZ{)i*GyZcj2=)EmXODd`K(O*X zD02`M%n1ga_X!P$XG*17ps2F0wRJ&4(?8WPY*Q5Xw72zN-()c2RIL&^jK)=`}iiy}#A-ozQ|b&} z2%^6gXO!}Q_5iekxDhzn*y@*U#Uy_vbii{x(aj(Tfy28Nlx8qHXGmRRw^ zIYwsoUTLkcU2Hq)OS+^qld7{(+8J=;+tD8=G`9-rI^7OMMh^Bo8#jne48R?8S76D+nk^P{F|*#Q6@7D+Dh{%luRjQ?J=?JtOAs&nqLkEe!wZ+>796Jt2i({$i`jhzV5XMn zf{bLeG)eLV@<4+p-kjCYLckR%^weh+i&&;fN;XVv^!-)X4$%T0oWgNg>YCO@EfT&! zeZc?OAVQIb&k|`Q)(6+x|ThTjIomRN!S(Sy=$T~ zbMYr~m*D^q=M(6AZ!V0xJqxk6SyCvs1%*?skx5Ec3?5V_wa$%3ACHQ@x7SXzPMrff z(Plwz0H9PDkxqYwtc+&+?($f?>&)beb%w`sa{i+2`!BIKURn>{Rn+U&1-VTNp85Jp zU#Tx)xwm={od?#RjdxAj0Pmt7cK?0SDyVTjJpJ}+V@KB7hRH+^fO*YD;^i$o;Kro{ zveum=8{PDwSn(W~nOWxUI7o0Xt<1EjXW|n#;e}gy^bt8`<=K;g_ z!uV18zR0WcA;OxEvxeGNUJFXUD*PDe!HQ`rp)gn_*u={#u)61uIlstJUM)AONX5(HdEzp8S5Z zVhn;TPALh!qoT=?J+U&gYMtu14B5aNhYt}JC2sw=Vnjdyl-_+76bpL*vr$7eZBRb* zDNpw!lP~XCK-Nt;<2Hj*zr&}?1>UfXFiNWS#4WGdqcmQn9^=P%vb&QUUzbkv0~(!> zaA&6g3LtlKQm-Mh=eq3Y%(|z@!MM>M7xvJc*D?Xp$Xi)pr_y-lcRpPjShL+*2iP>f zaa4tY_(F#F74B=R44lOAvBH7_pd8Hz&MHX{gAYhT+tKnB#~$x1gwZ|f-hF)d41z;f z2h3;Meo>OtBjcFd%HH--Ea$x6xb%%*(Y!anC;xd0+0J-=pd7tkT2Y*=zdDh*@;0dU zbG|OjAA_2SELL~w`a%dgIz6mf%O>-WTKf|#q7_t8;uKQXJMP3h;adnvl3=q^UyiXn zQ`L1!PkaBu#erU}O6em}V%>3aE$5Cf>d_%dX2r7elshN|1CpCbtmkM}snS&l5>A2@ z3!<~6UAonOOH4=wcfo0|;w zJg}s#)gNW@Tm^&VhV934pa#LSgE-!wv;rr2c~Z?NWIuWSflGtSN4qw&PJ}bVEvG*B z0Snbk&XVhVtHY&=T=#S-&raNYkaZE&@9Dh@u4(jlx@UjI{{IWOIYSc3ok=5^G|DshAQ{SVPq z{0%P}5D1C*A6DZXM=~VpTV;#3HdZ+W7_=H}>HO4LW}gTY;uzVtE%^R zRq7s*=6;6fwi0s;+FLfx4~g!j2j7z#-=4Q78ea4}?&grUv7(O}bJzcPztRQ}Y%|;r zMgqK72pth*BNnORqLt-_dGPz(Sm^S0ZiSHRhkN^DCpePBh@O6d#T{>6p0w7Y*q}TW zfan2N^c~rzV{p;v#Z>!Pfy`FT5;x0cr^>b|SlNdWe+bV+mEtNqdC>LrC$UhhG^+m< z!;#+b%GHVCnU&m5_H6&wvPiSniRgV18Cr;qeuJFtkMa;E=GKML-Nl9UQarKNdM_OX{DB-uup@ zeb%=hnVEIE7{U`XW#HBHGx5f zWroFyI7fMvtmP$01@UkT532%XN8z2$mnQ%|IaH=xIHUONDNjgJyv5ZKig~>!4F#=m zqQq|&Sc-I2I?bU@Er5^8@FRG)qrmFr+|{XmW^H^6oQip$t1@a|0hcyEzi-RsBQFw% zjn(0*^DgS1K}ci(H&g~mEE6HH#iLv7PJOepLUhzXD6*GobqeNX>P#pN^}>|E$Uz)+ zd+n>uya#>QI)(kUo0N%0Il$4$tvV0og8&8z zJ^iPoevbN-%JnpaQ0vp|b$d)2@>6S!x9dQU=MW|o;DxKc zf;TSrF4bP)0r?9En7dz~x8v+>?@U?$W8@VLt4^HsU)%^tn|WPBGAdEx!P2NM8sKZOf+o_te=){*ane*XV6*sd&#`6Rke)u4hY!-i$wy;3VNg zKOGv7VwT>rr2oYi`cq$pkz;uIU=qp2!nMW)Ns~|^b_Q-$ z8={UMn2}&IAMVoT|8+M1LEhtRyoaT|sm~@$pW`KGcnyn&rFF^uM&_;DbHqUl0?$wE zP&57YJQG;NfloQ-hg^H3RqK7F;Xmys=lpTA41-OUDj58f&}dBJNT)eOM&5e=JV zl$8`NF1PQ$%CzWRZlUw~Y zl}Mb+rYn}pOK2_i#QCF@hwp~KmuD8)0YI6=U7QI{3m$Z?2oJb;&|>?50nrtGdv^(f zgZiHA5SPyHo22hGz;|iiS?CsX*;|S6V&LFa1$)OxMzL4n!s<6pLp;#J5dxV(_GIJ3 z({MGQ5EJg%D+bJdgc2WiQ1TLe# z? zXlT%se4o1pUJt)ZD$jm#j};=P+67Bl7OVXE+|wWtHp2U44w8+okW#~F`qIQiGwu7}76=~s4D8hC;Cjep2kozOU-E)G ztpy9;#3(2th>hlp+`~JR`BF$x1%&o<>UCfYn+AzWlo!TGPKkV@QDv_w6i!pL=daEN zXep7i>?yyZ3*=yDXN{|FbYNA3_ayDJuKo+&I}ccqEz*)c;KbSR1N~04zuC7F0DeGn z_M~5dM>vw6OJ8X563RJ*2%R2W;%mS!{8;5-XGeD8X+!T4_?(tZ72d^d3l+FK5dk3V zpZj9x5uu&auCAZ_WkA`g6!?&s?8^76Jh3t0F}Biivt95_Kk5#I=Fs zpCU*c-ws)Z`-RtgDuP{qke2#5Z*J%dqp@6OGO9`9(2U%N#TYWwBLny80T8KHqD`r)gT(2pZiB4#nuimQ>8)p z5Ng$68DZEkPCoo{l;Oy6EmUQ;O=_@pb|&pGQ)-h^_Ex9#Zjk1(JD~HIZ1ozKJn7}i zRy)z+{n`FfdNSpKO2@SSa$ukLbBi)^{e!P2yn3(Qq2enL{{XtlwQo?+y_oN9WjGhQ zwc+Kdnv^E-d8o%&G%>u)8z%iY=4|LF>RL@nuq6;O$exg)RS)f0=8o;zea+6&1)m$$ zmHlEKv6~iN=Tbg4T;|zhabgh8>3>7`*rtD$!R%QxCw=K=uMe2H?8+>QYE&@Of-XBD z34*Q}H7Xk!x1W3O378N zese}F{YPEnj^9AWHQHN&Ho-uD&24wmG&btKGkUm@oM!KLD3Ty|iQ>TlfUEe~)C9e| z*vLmD$UN^dUc`@s^<6`EmODcGzK?S9Hze=??w+?+F=?g3K71&Nr$WxfRmDcF`r5aerpOTh|-9;9uDZ(G#QO&5q9Tl zOjcH5Mpg#d`&fpjnn>{=WDfDMDth=2JWzA0oJ4~pBlqL`_qSVGTQNF1U7--<31O=* z^Xj6Fo?)ovYIIa=0f@Mnfb&GI)AQLrp(mEh8U-@WE!M+o=7zSu;rs>OHyM@nxC(ws zp99(I8l(WU#>&}xx70!!P`lEUCTH?A;cG61M|S1y9*({M_ug7^qTvUX$y2+L4&cCu zZnZ#_(n3;6>Ora8@SSXU!75#>EztnCO-rft*yb}1R222=2wM{utPOw)>Bp`jMWB>iBOU+66eCwe2zgj={2~cQ zz%@X9CfIo(NS_U;C0Svb{pR#mH1A$^Y_RRLb`34_Sdb9Z{bbOqZi7$dyyxqcLJ%5k z3|cIdNNO7Mr9^uT2xT=gw!=m%_2aq?)GHu@%c72S1C2;cf|$ z?rK=w?sN1!uC=RsLZTK|=zQ??*g+PtW0Xwd1%Q;(t`KSotUc@^far7z20BZ`iy}zN zNgGRJy67OgfO9{ny?my50=O8FU|-vq$~o3#*ePc+ilfTNMDq67wwuj23_YG>aU^@% z3J-WN+N-?&D=E8TX>MpL8WzVA_Ef*Hv(k0XS0tkm2ei*L4TO)RbNU6@`risdYw5u$ z6n7$;uY%m34*h!nfb)Kt9=SJgVB+zyIo-DvumV)n-=L`_2p%7GHME4ty2dOKc8M+i zQHN=@M1qUHOkDSSwvv`R1|oC(OFxCJZnivg$iXiI)kPGaTyXCM06_ZBsQn(rGDwVo z%3Xeb-3*0zbLRkYs5dgal&X`~y=WqdnBo}WP1{9+#KaKlZd0Od<`>2lKqLlV>~Z#1 zdir>?qAU>B04Y|dF_HwzZJK(UZ(|#=n6uR=mA87P2Bl5vej_Xi)f$jU(V{*dmGz$I zNRANd;?i|5+{=@T99063s zLRS@uZb;yLxJ%x!$rL5qmSFX`V0vCvI5Or{=B-ZQ@|GC8UUtE2W}7Q%HDl)DZR;dl z(qF=Y!%8B8E38_3t;p`@n|wm(R_FnC3v!DtARPvopo$^ibnTPTBD|YpEiB%K6gc1HhUG~f4B>}zbnogC%d;K7p(=8)5cO}0witCj%XWE0B(#M@qZ0XH( zpUwQx8W&Ixv&S^BI9O_nee}9>>&9*yh(QnTy?MAnfP#sV3$r(^`0bmKRCq6d9K`)* zov!?!l?HK=Fe(AF9-Y;2g+rbjLq`47WX==9A7o|3tG2tZ&LX#m3@u%Q;x146$LBs* z$T?$K6iP3Q>!qCAlວ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 literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/sendtol1.png b/docs/src/specs/img/sendtol1.png new file mode 100644 index 0000000000000000000000000000000000000000..b98e51879f34869688c8327e7618d340a771068a GIT binary patch literal 84799 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 Jsp__O{|$GLpy&Vq literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/verifyinteropmsg.png b/docs/src/specs/img/verifyinteropmsg.png new file mode 100644 index 0000000000000000000000000000000000000000..c59e5607f7da44a61131f23d2a6eae26237419a0 GIT binary patch literal 164358 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

FMasc%e+n#T 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�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 literal 0 HcmV?d00001 diff --git a/docs/src/specs/interop/README.md b/docs/src/specs/interop/README.md new file mode 100644 index 000000000000..88e3d514b562 --- /dev/null +++ b/docs/src/specs/interop/README.md @@ -0,0 +1,6 @@ +# Interop + +- [Overview](./overview.md) +- [Interop Messages](./interopmessages.md) +- [Bundles and Calls](./bundlesandcalls.md) +- [Interop Transactions](./interoptransactions.md) diff --git a/docs/src/specs/interop/bundlesandcalls.md b/docs/src/specs/interop/bundlesandcalls.md new file mode 100644 index 000000000000..e49e10e8eed2 --- /dev/null +++ b/docs/src/specs/interop/bundlesandcalls.md @@ -0,0 +1,278 @@ +# Bundles and Calls + +## Basics Calls + +Interop Calls are the next level of interfaces, built on top of Interop Messages, enabling you to call contracts on +other chains. + +![interopcall.png](../img/interopcall.png) + +At this level, the system handles replay protection—once a call is successfully executed, it cannot be executed again +(eliminating the need for your own nullifiers or similar mechanisms). + +Additionally, these calls originate from aliased accounts, simplifying permission management (more details on this +below). + +Cancellations and retries are managed at the next level (Bundles), which are covered in the following section. + +### Interface + +On the sending side, the interface provides the option to send this "call" to the destination contract. + +```solidity +struct InteropCall { + address sourceSender, + address destinationAddress, + uint256 destinationChainId, + calldata data, + uint256 value +} +contract InteropCenter { + // On source chain. + // Sends a 'single' basic internal call to destination chain & address. + // Internally, it starts a bundle, adds this call and sends it over. + function sendCall(destinationChain, destinationAddress, calldata, msgValue) returns bytes32 bundleId; +} +``` + +In return, you receive a `bundleId` (we’ll explain bundles later, but for now, think of it as a unique identifier for +your call). + +On the destination chain, you can execute the call using the execute method: + +```solidity +contract InteropCenter { + // Executes a given bundle. + // interopMessage is the message that contains your bundle as payload. + // If it fails, it can be called again. + function executeInteropBundle(interopMessage, proof); + + // If the bundle didn't execute succesfully yet, it can be marked as cancelled. + // See details below. + function cancelInteropBundle(interopMessage, proof); +} + +``` + +You can retrieve the `interopMessage` (which contains your entire payload) from the Gateway, or you can construct it +yourself using L1 data. + +Under the hood, this process calls the `destinationAddress` with the specified calldata. + +This leads to an important question: **Who is the msg.sender for this call?** + +## `msg.sender` of the Destination Call + +The `msg.sender` on the destination chain will be the **AliasedAccount** — an address created as a hash of the original +sender and the original source chain. + +(Normally, we’d like to use `sourceAccount@sourceChain`, but since Ethereum limits the size of addresses to 20 bytes, we +compute the Keccak hash of the string above and use this as the address.) + +One way to think about it is this: You (as account `0x5bFF1...` on chain A) can send a call to a contract on a +destination chain, and for that contract, it will appear as if the call came locally from the address +`keccak(0x5bFF1 || A)`. This means you are effectively "controlling" such an account address on **every ZK Chain** by +sending interop messages from the `0x5bFF1...` account on chain A. + +![msgdotsender.png](../img/msgdotsender.png) + +## Simple Example + +Imagine you have contracts on chains B, C, and D, and you’d like them to send "reports" to the Headquarters (HQ) +contract on chain A every time a customer makes a purchase. + +```solidity +// Deployed on chains B, C, D. +contract Shop { + /// Called by the customers when they buy something. + function buy(uint256 itemPrice) { + // handle payment etc. + ... + // report to HQ + InteropCenter(INTEROP_ADDRESS).sendCall( + 324, // chain id of chain A, + 0xc425.., // HQ contract on chain A, + createCalldata("reportSales(uint256)", itemPrice), // calldata + 0, // no value + ); + } +} + +// Deployed on chain A +contract HQ { + // List of shops + mapping (address => bool) shops; + mapping (address => uint256) sales; + function addShop(address addressOnChain, uint256 chainId) onlyOwner { + // Adding aliased accounts. + shops[address(keccak(addressOnChain || chainId))] = true; + } + + function reportSales(uint256 itemPrice) { + // only allow calls from our shops (their aliased accounts). + require(shops[msg.sender]); + sales[msg.sender] += itemPrice; + } +} +``` + +#### Who is paying for gas? How does this Call get to the destination chain + +At this level, the **InteropCall** acts like a hitchhiker — it relies on someone (anyone) to pick it up, execute it, and +pay for the gas! + +![callride.png](../img/callride.png) + +While any transaction on the destination chain can simply call `InteropCenter.executeInteropBundle`, if you don’t want +to rely on hitchhiking, you can create one yourself. We’ll discuss this in the section about **Interop Transactions**. + +## Bundles + +Before we proceed to discuss **InteropTransactions**, there is one more layer in between: **InteropBundles**. + +![interopcallbundle.png](../img/interopcallbundle.png) + +**Bundles Offer:** + +- **Shared Fate**: All calls in the bundle either succeed or fail together. +- **Retries**: If a bundle fails, it can be retried (e.g., with more gas). +- **Cancellations**: If a bundle has not been successfully executed yet, it can be cancelled. + +If you look closely at the interface we used earlier, you’ll notice that we were already discussing the execution of +**Bundles** rather than single calls. So, let’s dive into what bundles are and the role they fulfill. + +The primary purpose of a bundle is to ensure that a given list of calls is executed in a specific order and has a shared +fate (i.e., either all succeed or all fail). + +In this sense, you can think of a bundle as a **"multicall"**, but with two key differences: + +1. You cannot "unbundle" items—an individual `InteropCall` cannot be run independently; it is tightly tied to the + bundle. + +2. Each `InteropCall` within a bundle can use a different aliased account, enabling separate permissions for each call. + +```solidity +contract InteropCenter { + struct InteropBundle { + // Calls have to be done in this order. + InteropCall calls[]; + uint256 destinationChain; + + // If not set - anyone can execute it. + address executionAddresses[]; + // Who can 'cancel' this bundle. + address cancellationAddress; + } + + // Starts a new bundle. + // All the calls that will be added to this bundle (potentially by different contracts) + // will have a 'shared fate'. + // The whole bundle must be going to a single destination chain. + function startBundle(destinationChain) returns bundleId; + // Adds a new call to the opened bundle. + // Returns the messageId of this single message in the bundle. + function addToBundle(bundleId, destinationAddress, calldata, msgValue) return msgHash; + // Finishes a given bundle, and sends it. + function finishAndSendBundle(bundleId) return msgHash; +} +``` + +### Cross Chain Swap Example + +Imagine you want to perform a swap on chain B, exchanging USDC for PEPE, but all your assets are currently on chain A. + +This process would typically involve four steps: + +1. Transfer USDC from chain A to chain B. +2. Set allowance for the swap. +3. Execute the swap. +4. Transfer PEPE back to chain A. + +Each of these steps is a separate "call," but you need them to execute in exactly this order and, ideally, atomically. +If the swap fails, you wouldn’t want the allowance to remain set on the destination chain. + +Below is an example of how this process could look (note that the code is pseudocode; we’ll explain the helper methods +required to make it work in a later section). + +```solidity +bundleId = InteropCenter(INTEROP_CENTER).startBundle(chainD); +// This will 'burn' the 1k USDC, create the special interopCall +// when this call is executed on chainD, it will mint 1k USDC there. +// BUT - this interopCall is tied to this bundle id. +USDCBridge.transferWithBundle( + bundleId, + chainD, + aliasedAccount(this(account), block.chain_id), + 1000); + + +// This will create interopCall to set allowance. +InteropCenter.addToBundle(bundleId, + USDCOnDestinationChain, + createCalldata("approve", 1000, poolOnDestinationChain), + 0); +// This will create interopCall to do the swap. +InteropCenter.addToBundle(bundleId, + poolOnDestinationChain, + createCalldata("swap", "USDC_PEPE", 1000, ...), + 0) +// And this will be the interopcall to transfer all the assets back. +InteropCenter.addToBundle(bundleId, + pepeBridgeOnDestinationChain, + createCalldata("transferAll", block.chain_id, this(account)), + 0) + + +bundleHash = interopCenter.finishAndSendBundle(bundleId); +``` + +In the code above, we created a bundle that anyone can execute on the destination chain. This bundle will handle the +entire process: minting, approving, swapping, and transferring back. + +### Bundle Restrictions + +When starting a bundle, if you specify the `executionAddress`, only that account will be able to execute the bundle on +the destination chain. If no `executionAddress` is specified, anyone can trigger the execution. + +## Retries and Cancellations + +If bundle execution fails — whether due to a contract error or running out of gas—none of its calls will be applied. The +bundle can be re-run on the **destination chain** without requiring any updates or notifications to the source chain. +More details about retries and gas will be covered in the next level, **Interop Transactions**. + +This process can be likened to a "hitchhiker" (or in the case of a bundle, a group of hitchhikers) — if the car they’re +traveling in doesn’t reach the destination, they simply find another ride rather than returning home. + +However, there are cases where the bundle should be cancelled. Cancellation can be performed by the +`cancellationAddress` specified in the bundle itself. + +#### For our cross chain swap example + +1. Call `cancelInteropBundle(interopMessage, proof)` on the destination chain. + - A helper method for this will be introduced in the later section. +2. When cancellation occurs, the destination chain will generate an `InteropMessage` containing cancellation + information. +3. Using the proof from this method, the user can call the USDC bridge to recover their assets: + +```solidity +USDCBridge.recoverFailedTransfer(bundleId, cancellationMessage, proof); +``` + +### Some details on our approach + +#### Destination Contract + +- On ElasticChain, the destination contract does not need to know it is being called via an interop call. Requests + arrive from `aliased accounts'. + +#### Batching + +- ElasticChain supports bundling of messages, ensuring shared fate and strict order. + +#### Execution Permissions + +- ElasticChain allows restricting who can execute the call or bundle on the destination chain. + +#### Cancellations + +- ElasticChain supports restricting who can cancel. Cancellation can happen at any time. diff --git a/docs/src/specs/interop/interopmessages.md b/docs/src/specs/interop/interopmessages.md new file mode 100644 index 000000000000..cabfd0e56750 --- /dev/null +++ b/docs/src/specs/interop/interopmessages.md @@ -0,0 +1,181 @@ +# Interop Messages + +In this section, we’re going to cover the lowest level of the interop stack: **Interop Messages** — the interface that +forms the foundation for everything else. + +We’ll explore the details of the interface, its use cases, and how it compares to similar interfaces from +Superchain/Optimism. + +This is an advanced document. While most users and app developers typically interact with higher levels of interop, it’s +still valuable to understand how the internals work. + +## Basics + +![interopmsg.png](../img/interopmsg.png) + +Interop Messages are the lowest level of our stack. + +An **InteropMessage** contains data and offers two methods: + +- Send a message +- Verify that a given message was sent on some chain + +Notice that the message itself doesn’t have any ‘destination chain’ or address—it is simply a payload that a user (or +contract) is creating. Think of it as a broadcast. + +The `InteropCenter` is a contract that is pre-deployed on all chains at a fixed address `0x00..1234`. + +```solidity +contract InteropCenter { + // Sends interop message. Can be called by anyone. + // Returns the unique interopHash. + function sendInteropMessage(bytes data) returns interopHash; + + // Interop message - uniquely identified by the hash of the payload. + struct InteropMessage { + bytes data; + address sender; // filled by InteropCenter + uint256 sourceChainId; // filled by InteropCenter + uint256 messageNum; // a 'nonce' to guarantee different hashes. + } + + // Verifies if such interop message was ever producted. + function verifyInteropMessage(bytes32 interopHash, Proof merkleProof) return bool; +} +``` + +When you call `sendInteropMessage`, the `InteropCenter` adds additional fields, such as your sender address, source +chain ID, and messageNum (a nonce ensuring the hash of this structure is globally unique). It then returns the +`interopHash`. + +This `interopHash` serves as a globally unique identifier that can be used on any chain in the network to call +`verifyInteropMessage`. + +![A message created on one chain can be verified on any other chain.](../img/verifyinteropmsg.png) + +#### How do I get the proof + +You’ll notice that **verifyInteropMessage** has a second argument — a proof that you need to provide. This proof is a +Merkle tree proof (more details below). You can obtain it by querying the Settlement Layer (Gateway) or generating it +off-chain by examining the Gateway state on L1. + +#### How does the interop message differ from other layers (InteropTransactions, InteropCalls) + +As the most basic layer, an interop message doesn’t include any advanced features — it lacks support for selecting +destination chains, nullifiers/replay, cancellation, and more. + +If you need these capabilities, consider integrating with a higher layer of interop, such as Call or Bundle, which +provide these additional functionalities. + +## Simple Use Case + +Before we dive into the details of how the system works, let’s look at a simple use case for a DApp that decides to use +InteropMessage. + +For this example, imagine a basic cross-chain contract where the `signup()` method can be called on chains B, C, and D +only if someone has first called `signup_open()` on chain A. + +```solidity +// Contract deployed on chain A. +contract SignupManager { + public bytes32 sigup_open_msg_hash; + function signup_open() onlyOwner { + // We are open for business + signup_open_msg_hash = InteropCenter(INTEROP_CENTER_ADDRESS).sendInteropMessage("We are open"); + } +} + +// Contract deployed on all other chains. +contract SignupContract { + public bool signupIsOpen; + // Anyone can call it. + function openSignup(InteropMessage message, InteropProof proof) { + InteropCenter(INTEROP_CENTER_ADDRESS).verifyInteropMessage(keccak(message), proof); + require(message.sourceChainId == CHAIN_A_ID); + require(message.sender == SIGNUP_MANAGER_ON_CHAIN_A); + require(message.data == "We are open"); + signupIsOpen = true; + } + + function signup() { + require(signupIsOpen); + signedUpUser[msg.sender] = true; + } +} +``` + +In the example above, the `signupManager` on chain A calls the `signup_open` method. After that, any user on other +chains can retrieve the `signup_open_msg_hash`, obtain the necessary proof from the Gateway (or another source), and +call the `openSignup` function on any destination chain. + +## Deeper Technical Dive + +Let’s break down what happens inside the InteropCenter when a new interop message is created: + +```solidity +function sendInteropMessage(bytes data) { + messageNum += 1; + msg = InteropMessage({data, msg.sender, block.chain_id, messageNum}); + // Does L2->L1 Messaging. + sendToL1(abi.encode(msg)); + return keccak(msg); +} +``` + +As you can see, it populates the necessary data and then calls the `sendToL1` method. + +The `sendToL1` method is part of a system contract that gathers all messages during a batch, constructs a Merkle tree +from them at the end of the batch, and sends this tree to the SettlementLayer (Gateway) when the batch is committed. + +![sendtol1.png](../img/sendtol1.png) + +The Gateway will verify the hashes of the messages to ensure it has received the correct preimages. Once the proof for +the batch is submitted (or more accurately, during the "execute" step), it will add the root of the Merkle tree to its +`globalRoot`. + +![globalroot.png](../img/globalroot.png) + +The `globalRoot` is the root of the Merkle tree that includes all messages from all chains. Each chain regularly reads +the globalRoot value from the Gateway to stay synchronized. + +![gateway.png](../img/gateway.png) + +If a user wants to call `verifyInteropMessage` on a chain, they first need to query the Gateway for the Merkle path from +the batch they are interested in up to the `globalRoot`. Once they have this path, they can provide it as an argument +when calling a method on the destination chain (such as the `openSignup` method in our example). + +![proofmerklepath.png](../img/proofmerklepath.png) + +#### What if the Gateway doesn’t respond + +If the Gateway doesn’t respond, users can manually re-create the Merkle proof using data available on L1. Every +interopMessage is also sent to L1. + +#### Global roots change frequently + +Yes, global roots update continuously as new chains prove their blocks. However, chains retain historical global roots +for a reasonable period (around 24 hours) to ensure that recently generated Merkle paths remain valid. + +#### Is this secure? Could a chain operator, like Chain D, use a different global root + +Yes, it’s secure. If a malicious operator on Chain D attempted to use a different global root, they wouldn’t be able to +submit the proof for their new batch to the Gateway. This is because the proof’s public inputs must include the valid +global root. + +#### What if the Gateway is malicious + +If the Gateway behaves maliciously, it wouldn’t be able to submit its batches to L1, as the proof would fail +verification. A separate section will cover interop transaction security in more detail. + +### Other Features + +#### Dependency Set + +- In ElasticChain, this is implicitly handled by the Gateway. Any chain that is part of the global root can exchange + messages with any other chain, effectively forming an undirected graph. + +#### Timestamps and Expiration + +- In ElasticChain, older messages become increasingly difficult to validate as it becomes harder to gather the data + required to construct a Merkle proof. Expiration is also being considered for this reason, but the specifics are yet + to be determined. diff --git a/docs/src/specs/interop/interoptransactions.md b/docs/src/specs/interop/interoptransactions.md new file mode 100644 index 000000000000..feccc49ea91a --- /dev/null +++ b/docs/src/specs/interop/interoptransactions.md @@ -0,0 +1,196 @@ +# Interop Transactions + +## Basics + +The **InteropTransaction** sits at the top of our interop stack, acting as the “delivery” mechanism for **Interop +Bundles**. + +Think of it like a car that picks up our "hitchhiker" bundles and carries them to their destination. + +![interoptx.png](../img/interoptx.png) + +**Note:** Interop Transactions aren’t the only way to execute a bundle. Once an interop bundle is created on the source +chain, users can simply send a regular transaction on the destination chain to execute it. + +However, this approach can be inconvenient as it requires users to have funds on the destination chain to cover gas fees +and to configure the necessary network settings (like the RPC address). + +**InteropTransactions** simplify this process by handling everything from the source chain. They allow you to select +which **interopBundle** to execute, specify gas details (such as gas amount and gas price), and determine who will cover +the gas costs. This can be achieved using tokens on the source chain or through a paymaster. + +Once configured, the transaction will automatically execute, either by the chain operator, the gateway, or off-chain +tools. + +An **InteropTransaction** contains two pointers to bundles: + +- **feesBundle**: Holds interop calls to cover fees. +- **bundleHash**: Contains the main execution. + +![ipointers.png](../img/ipointers.png) + +## Interface + +The function `sendInteropTransaction` provides all the options. For simpler use cases, refer to the helper methods +defined later in the article. + +```solidity +contract InteropCenter { + /// Creates a transaction that will attempt to execute a given Bundle on the destination chain. + /// Such transaction can be 'picked up' by the destination chain automatically. + /// This function covers all the cases - we expect most users to use the helper + /// functions defined later. + function sendInteropTransaction( + destinationChain, + bundleHash, // the main bundle that you want to execute on destination chain + gasLimit, // gasLimit & price for execution + gasPrice, + feesBundleHash, // this is the bundle that contains the calls to pay for gas + destinationPaymaster, // optionally - you can use a paymaster on destination chain + destinationPaymasterInput); // with specific params + + + struct InteropTransaction { + address sourceChainSender + uint256 destinationChain + uint256 gasLimit; + uint256 gasPrice; + uint256 value; + bytes32 bundleHash; + bytes32 feesBundleHash; + address destinationPaymaster; + bytes destinationPaymasterInput; + } +} +``` + +After creating the **InteropBundle**, you can simply call `sendInteropTransaction` to create the complete transaction +that will execute the bundle. + +## Retries + +If your transaction fails to execute the bundle (e.g., due to a low gas limit) or isn’t included at all (e.g., due to +too low gasPrice), you can send another transaction to **attempt to execute the same bundle again**. + +Simply call `sendInteropTransaction` again with updated gas settings. + +### Example of Retrying + +Here’s a concrete example: Suppose you created a bundle to perform a swap that includes transferring 100 ETH, executing +the swap, and transferring some tokens back. + +You attempted to send the interop transaction with a low gas limit (e.g., 100). Since you didn’t have any base tokens on +the destination chain, you created a separate bundle to transfer a small fee (e.g., 0.0001) to cover the gas. + +You sent your first interop transaction to the destination chain, but it failed due to insufficient gas. However, your +“fee bundle” was successfully executed, as it covered the gas cost for the failed attempt. + +Now, you have two options: either cancel the execution bundle (the one with 100 ETH) or retry. + +To retry, you decide to set a higher gas limit (e.g., 10,000) and create another fee transfer (e.g., 0.01) but use **the +same execution bundle** as before. + +This time, the transaction succeeds — the swap completes on the destination chain, and the resulting tokens are +successfully transferred back to the source chain. + +![retryexample.png](../img/retryexample.png) + +## Fees & Restrictions + +Using an **InteropBundle** for fee payments offers flexibility, allowing users to transfer a small amount to cover the +fees while keeping the main assets in the execution bundle itself. + +### Restrictions + +This flexibility comes with trade-offs, similar to the validation phases in **Account Abstraction** or **ERC4337**, +primarily designed to prevent DoS attacks. Key restrictions include: + +- **Lower gas limits** +- **Limited access to specific slots** + +Additionally, when the `INTEROP_CENTER` constructs an **InteropTransaction**, it enforces extra restrictions on +**feePaymentBundles**: + +- **Restricted Executors**: + Only your **AliasedAccount** on the receiving side can execute the `feePaymentBundle`. + +This restriction is crucial for security, preventing others from executing your **fee bundle**, which could cause your +transaction to fail and prevent the **execution bundle** from processing. + +### **Types of Fees** + +#### Using the Destination Chain’s Base Token + +The simplest scenario is when you (as the sender) already have the destination chain’s base token available on the +source chain. + +For example: + +- If you are sending a transaction from **Era** (base token: ETH) to **Sophon** (base token: SOPH) and already have SOPH + on ERA, you can use it for the fee. + +To make this easier, we’ll provide a helper function: + +```solidity +contract InteropCenter { + // Creates InteropTransaction to the destination chain with payment with base token. + // Before calling, you have to 'approve' InteropCenter to the ERC20/Bridge that holds the destination chain's base tokens. + // or if the destination chain's tokens are the same as yours, just attach value to this call. + function sendInteropTxMinimal( + destinationChain, + bundleHash, // the main bundle that you want to execute on destination chain + gasLimit, // gasLimit & price for execution + gasPrice, + ); + } +``` + +#### Using paymaster on the destination chain + +If you don’t have the base token from the destination chain (e.g., SOPH in our example) on your source chain, you’ll +need to use a paymaster on the destination chain instead. + +In this case, you’ll send the token you do have (e.g., USDC) to the destination chain as part of the **feeBundleHash**. +Once there, you’ll use it to pay the paymaster on the destination chain to cover your gas fees. + +Your **InteropTransaction** would look like this: + +![paymastertx.png](../img/paymastertx.png) + +## **Automatic Execution** + +One of the main advantages of **InteropTransactions** is that they execute automatically. As the sender on the source +chain, you don’t need to worry about technical details like RPC addresses or obtaining proofs — it’s all handled for +you. + +After creating an **InteropTransaction**, it can be relayed to the destination chain by anyone. The transaction already +includes a signature (also known as an interop message proof), making it fully self-contained and ready to send without +requiring additional permissions. + +Typically, the destination chain’s operator will handle and include incoming **InteropTransactions**. However, if they +don’t, the **Gateway** or other participants can step in to prepare and send them. + +You can also use the available tools to create and send the destination transaction yourself. Since the transaction is +self-contained, it doesn’t require additional funds or signatures to execute. + +![Usually destination chain operator will keep querying gateway to see if there are any messages for their chain.](../img/autoexecution.png) + +Once they see the message, they can request the proof from the **Gateway** and also fetch the **InteropBundles** +contained within the message (along with their respective proofs). + +![Operator getting necessary data from Gateway.](../img/chainop.png) + +As the final step, the operator can use the received data to create a regular transaction, which can then be sent to +their chain. + +![Creating the final transaction to send to the destination chain](../img/finaltx.png) + +The steps above don’t require any special permissions and can be executed by anyone. + +While the **Gateway** was used above for tasks like providing proofs, if the Gateway becomes malicious, all this +information can still be constructed off-chain using data available on L1. + +### How it Works Under the hood + +We’ll modify the default account to accept interop proofs as signatures, seamlessly integrating with the existing ZKSync +native **Account Abstraction** model. diff --git a/docs/src/specs/interop/overview.md b/docs/src/specs/interop/overview.md new file mode 100644 index 000000000000..8ca28723e03a --- /dev/null +++ b/docs/src/specs/interop/overview.md @@ -0,0 +1,166 @@ +# Intro Guide to Interop + +## What is Interop + +Interop is a way to communicate and transact between two ZK Stack chains. It allows you to: + +**1. Observe messages:** Track when an interop message (think of it as a special event) is created on the source chain. + +**2. Send assets:** Transfer ERC20 tokens and other assets between chains. + +**3. Execute calls:** Call a contract on a remote chain with specific calldata and value. + +With interop, you automatically get an account (a.k.a. aliasedAccount) on each chain, which you can control from the +source chain. + +**4. Execute bundles of calls:** Group multiple remote calls into a single bundle, ensuring all of them execute at once. + +**5. Execute transactions:** Create transactions on the source chain, which will automatically get executed on the +destination chain, with options to choose from various cross-chain Paymaster solutions to handle gas fees. + +## How to Use Interop + +Here’s a simple example of calling a contract on a destination chain: + +```solidity +cast send source-chain-rpc.com INTEROP_CENTER_ADDRESS sendInteropWithSingleCall( + 0x1fa72e78 // destination_chain_id, + 0xb4AB2FF34fa... // destination_contract, + 0x29723511000000... // destination_calldata, + 0, // value + 100_000, // gasLimit + 250_000_000, // gasPrice + ) +``` + +While this looks very similar to a 'regular' call, there are some nuances, especially around handling failures and +errors. + +Let’s explore these key details together. + +## Common Questions and Considerations + +#### 1. Who pays for gas + +When using this method, your account must hold `gasLimit * gasPrice` worth of destination chain tokens on the source +chain. + +For example, if you’re sending the request from Era and the destination chain is Sophon (with SOPH tokens), you’ll need +SOPH tokens available on Era. + +Additional payment options are available, which will be covered in later sections. + +#### 2. How does the destination contract know it’s from me + +The destination contract will see `msg.sender` as `keccak(source_account, source_chain)[:20]`. + +Ideally, we would use something like `source_account@source_chain` (similar to an email format), but since Ethereum +addresses are limited to 20 bytes, we use a Keccak hash to fit this constraint. + +#### 3. Who executes it on the destination chain + +The call is auto-executed on the destination chain. As a user, you don’t need to take any additional actions. + +#### 4. What if it runs out of gas or the gasPrice is set too low + +In either scenario, you can retry the transaction using the `retryInteropTransaction` method: + +```solidity + cast send source-chain.com INTEROP_CENTER_ADDRESS retryInteropTransaction( + 0x2654.. // previous interop transaction hash from above + 200_000, // new gasLimit + 300_000_000 // new gasPrice + ) +``` + +**Important** : Depending on your use case, it’s crucial to retry the transaction rather than creating a new one with +`sendInteropWithSingleCall`. + +For example, if your call involves transferring a large amount of assets, initiating a new `sendInteropWithSingleCall` +could result in freezing or burning those assets again. + +#### 5. What if my assets were burned during the transaction, but it failed on the destination chain? How do I get them back + +If your transaction fails on the destination chain, you can either: + +1. Retry the transaction with more gas or a higher gas limit (refer to the retry method above). + +2. Cancel the transaction using the following method: + +```solidity +cast send source-chain INTEROP_CENTER_ADDRESS cancelInteropTransaction( + 0x2654.., // previous interop transaction + 100_000, // gasLimit (cancellation also requires gas, but only to mark it as cancelled) + 300_000_000 // gasPrice +) +``` + +After cancellation, call the claimFailedDeposit method on the source chain contracts to recover the burned assets. Note +that the details for this step may vary depending on the contract specifics. + +## Complex Scenario + +#### 6. What if I want to transfer USDC to the Sophon chain, swap it for PEPE coin, and transfer the results back + +To accomplish this, you’ll need to: + +- Create multiple **InteropCalls** (e.g., transferring USDC, executing the swap). +- Combine these calls into a single **InteropBundle**. +- Execute the **InteropTransaction** on the destination chain. + +The step-by-step process and exact details will be covered in the next section. + +## Technical Details + +### How is Interop Different from a Bridge + +Bridges generally fall into two categories: Native and Third-Party. + +#### 1. Native Bridges + +Native bridges enable asset transfers “up and down” (from L2 to L1 and vice versa). In contrast, interop allows direct +transfers between different L2s. + +Instead of doing a "round trip" (L2 → L1 → another L2), interop lets you move assets directly between two L2s, saving +both time and cost. + +#### 2. Third-Party Bridging + +Third-party bridges enable transfers between two L2s, but they rely on their own liquidity. While you, as the user, +receive assets on the destination chain instantly, these assets come from the bridge’s liquidity pool. + +Bridge operators then rebalance using native bridging, which requires maintaining token reserves on both sides. This +adds costs for the bridge operators, often resulting in higher fees for users. + +The good news is that third-party bridges can use interop to improve their token transfers by utilizing the +**InteropMessage** layer. + +More details on this will follow below. + +### How Fast is It + +Interop speed is determined by its lowest level: **InteropMessage** propagation speed. This essentially depends on how +quickly the destination chain can confirm that the message created by the source chain is valid. + +- **Default Mode:** To prioritize security, the default interop mode waits for a ZK proof to validate the message, which + typically takes around 10 minutes. + +- **Fast Mode (Planned):** We are developing an alternative **INTEROP_CENTER** contract (using a different address but + the same interface) that will operate within 1 second. However, this faster mode comes with additional risks, similar + to the approach used by optimistic chains. + +### 4 Levels of Interop + +When analyzing interop, it can be broken into four levels, allowing you to choose the appropriate level for integration: + +- **InteropMessages:** The lowest level, directly used by third-party bridges and other protocols. + +- **InteropCall:** A medium level, designed for use by "library" contracts. + +- **InteropCallBundle:** A higher level, intended for use by "user-visible" contracts. + +- **InteropTransaction:** The highest level, designed for use in UX and frontends. + +![levelsofinterop.png](../img/levelsofinterop.png) + +We will be covering the details of each layer in the next section. diff --git a/install b/install new file mode 100755 index 000000000000..8bf36687e20d --- /dev/null +++ b/install @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -eo pipefail + +echo "Installing foundryup-zksync..." + +BASE_DIR="${XDG_CONFIG_HOME:-$HOME}" +FOUNDRY_DIR="${FOUNDRY_DIR-"$BASE_DIR/.foundry"}" +FOUNDRY_BIN_DIR="$FOUNDRY_DIR/bin" +FOUNDRY_MAN_DIR="$FOUNDRY_DIR/share/man/man1" + +BIN_URL="https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/foundryup-zksync/foundryup-zksync" +BIN_PATH="$FOUNDRY_BIN_DIR/foundryup-zksync" + +# Create the .foundry bin directory and foundryup binary if it doesn't exist. +mkdir -p "$FOUNDRY_BIN_DIR" +curl -sSf -L "$BIN_URL" -o "$BIN_PATH" +chmod +x "$BIN_PATH" + +# Create the man directory for future man files if it doesn't exist. +mkdir -p "$FOUNDRY_MAN_DIR" + +# Store the correct profile file (i.e. .profile for bash or .zshenv for ZSH). +case $SHELL in +*/zsh) + PROFILE="${ZDOTDIR-"$HOME"}/.zshenv" + PREF_SHELL=zsh + ;; +*/bash) + PROFILE=$HOME/.bashrc + PREF_SHELL=bash + ;; +*/fish) + PROFILE=$HOME/.config/fish/config.fish + PREF_SHELL=fish + ;; +*/ash) + PROFILE=$HOME/.profile + PREF_SHELL=ash + ;; +*) + echo "foundryup-zksync: could not detect shell, manually add ${FOUNDRY_BIN_DIR} to your PATH." + exit 1 +esac + +# Only add foundryup-zksync if it isn't already in PATH. +if [[ ":$PATH:" != *":${FOUNDRY_BIN_DIR}:"* ]]; then + # Add the foundryup directory to the path and ensure the old PATH variables remain. + # If the shell is fish, echo fish_add_path instead of export. + if [[ "$PREF_SHELL" == "fish" ]]; then + echo >> "$PROFILE" && echo "fish_add_path -a $FOUNDRY_BIN_DIR" >> "$PROFILE" + else + echo >> "$PROFILE" && echo "export PATH=\"\$PATH:$FOUNDRY_BIN_DIR\"" >> "$PROFILE" + fi +fi + +# Warn MacOS users that they may need to manually install libusb via Homebrew: +if [[ "$OSTYPE" =~ ^darwin ]] && [[ ! -f /usr/local/opt/libusb/lib/libusb-1.0.0.dylib && ! -f /opt/homebrew/opt/libusb/lib/libusb-1.0.0.dylib ]]; then + echo && echo "warning: libusb not found. You may need to install it manually on MacOS via Homebrew (brew install libusb)." +fi + +echo +echo "Detected your preferred shell is $PREF_SHELL and added foundryup-zksync to PATH." +echo "Run 'source $PROFILE' or start a new terminal session to use foundryup-zksync." +echo "Then, simply run 'foundryup-zksync' to install foundry-zksync." From 193c855fc593f53b63d3eab9784ee2dae255205c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Ignacio=20Gonz=C3=A1lez?= Date: Mon, 25 Nov 2024 11:32:53 -0300 Subject: [PATCH 02/35] chore: Upgrade rustls to fix security vulnerability (#3331) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Upgrade rustls ## Why ❔ ``` error[vulnerability]: rustls network-reachable panic in `Acceptor::accept` ┌─ /github/workspace/Cargo.lock:601:1 │ 601 │ rustls 0.23.16 registry+https://github.com/rust-lang/crates.io-index │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected │ ├ ID: RUSTSEC-[20](https://github.com/matter-labs/zksync-era/actions/runs/12011183823/job/33479628638?pr=3199#step:4:21)24-0399 ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2024-0399 ├ A bug introduced in rustls 0.23.13 leads to a panic if the received TLS ClientHello is fragmented. Only servers that use `rustls::server::Acceptor::accept()` are affected. Servers that use `tokio-rustls`'s `LazyConfigAcceptor` API are affected. Servers that use `tokio-rustls`'s `TlsAcceptor` API are not affected. Servers that use `rustls-ffi`'s `rustls_acceptor_accept` API are affected. ├ Announcement: https://github.com/rustls/rustls/issues/[22](https://github.com/matter-labs/zksync-era/actions/runs/12011183823/job/33479628638?pr=3199#step:4:23)27 ├ Solution: Upgrade to >=0.[23](https://github.com/matter-labs/zksync-era/actions/runs/12011183823/job/33479628638?pr=3199#step:4:24).18 (try `cargo update -p rustls`) ``` --- Cargo.lock | 32 ++++++++++++++++---------------- deny.toml | 1 - 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3df58a9634e2..25bd07547b4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1040,7 +1040,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools 0.10.5", "lazy_static", "lazycell", "log", @@ -4156,7 +4156,7 @@ dependencies = [ "hyper 1.5.0", "hyper-util", "log", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-native-certs 0.8.0", "rustls-pki-types", "tokio", @@ -4568,7 +4568,7 @@ dependencies = [ "http 1.1.0", "jsonrpsee-core 0.23.2", "pin-project", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-pki-types", "rustls-platform-verifier", "soketto 0.8.0", @@ -4667,7 +4667,7 @@ dependencies = [ "hyper-util", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-platform-verifier", "serde", "serde_json", @@ -4920,7 +4920,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -6588,7 +6588,7 @@ checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", - "itertools 0.12.1", + "itertools 0.10.5", "log", "multimap", "once_cell", @@ -6608,7 +6608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.10.5", "proc-macro2 1.0.89", "quote 1.0.37", "syn 2.0.85", @@ -6798,7 +6798,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.16", + "rustls 0.23.18", "socket2", "thiserror", "tokio", @@ -6815,7 +6815,7 @@ dependencies = [ "rand 0.8.5", "ring", "rustc-hash 2.0.0", - "rustls 0.23.16", + "rustls 0.23.18", "slab", "thiserror", "tinyvec", @@ -7118,7 +7118,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-native-certs 0.8.0", "rustls-pemfile 2.2.0", "rustls-pki-types", @@ -7434,9 +7434,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 = [ "aws-lc-rs", "log", @@ -7521,7 +7521,7 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.16", + "rustls 0.23.18", "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", "rustls-webpki 0.102.8", @@ -9620,7 +9620,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", ] @@ -11494,7 +11494,7 @@ dependencies = [ "octocrab", "regex", "reqwest 0.12.9", - "rustls 0.23.16", + "rustls 0.23.18", "semver 1.0.23", "serde", "serde_json", @@ -12965,7 +12965,7 @@ dependencies = [ "pin-project-lite", "rand 0.8.5", "rlp", - "rustls 0.23.16", + "rustls 0.23.18", "serde", "serde_json", "test-casing", diff --git a/deny.toml b/deny.toml index 13ce6504107f..d72f3823761f 100644 --- a/deny.toml +++ b/deny.toml @@ -12,7 +12,6 @@ ignore = [ "RUSTSEC-2020-0168", # mach dependency being unmaintained, dependency in consensus, we should consider moving to mach2 fork "RUSTSEC-2024-0370", # `cs_derive` needs to be updated to not rely on `proc-macro-error` # all below caused by StructOpt which we still use and we should move to clap v4 instead - "RUSTSEC-2024-0375", "RUSTSEC-2021-0145", "RUSTSEC-2021-0139", "RUSTSEC-2024-0388", # `derivative` is unmaintained, crypto dependenicies (boojum, circuit_encodings and others) rely on it From 440fe8d8afdf0fc2768692a1b40b0910873e2faf Mon Sep 17 00:00:00 2001 From: Manuel Mauro Date: Tue, 26 Nov 2024 10:31:01 +0100 Subject: [PATCH 03/35] feat(zksync_cli): Health checkpoint improvements (#3193) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Add three new components to node's healthcheck: - General (i.e., version, last migration) - State Keeper - Eth Sender ## Why ❔ ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --------- Co-authored-by: Danil --- Cargo.lock | 21 ++- Cargo.toml | 2 + .../external_node/src/metrics/framework.rs | 3 +- core/bin/external_node/src/node_builder.rs | 8 +- core/bin/zksync_server/src/node_builder.rs | 10 +- core/lib/bin_metadata/Cargo.toml | 18 ++ core/lib/bin_metadata/build.rs | 75 ++++++++ core/lib/bin_metadata/src/lib.rs | 68 +++++++ ...3613cd34138b59ef3b9271fd0bfdaddd086f8.json | 50 +++++ core/lib/dal/src/eth_sender_dal.rs | 3 +- core/lib/dal/src/system_dal.rs | 35 ++++ core/lib/health_check/Cargo.toml | 1 + core/lib/health_check/src/binary.rs | 21 +++ core/lib/health_check/src/lib.rs | 5 +- core/lib/types/src/aggregated_operations.rs | 4 +- core/node/consensus/src/testonly.rs | 6 +- core/node/eth_sender/Cargo.toml | 2 + core/node/eth_sender/src/eth_tx_aggregator.rs | 19 ++ core/node/eth_sender/src/eth_tx_manager.rs | 20 ++ core/node/eth_sender/src/health.rs | 68 +++++++ core/node/eth_sender/src/lib.rs | 1 + .../house_keeper/src/blocks_state_reporter.rs | 5 +- core/node/node_framework/Cargo.toml | 3 + .../layers/eth_sender/aggregator.rs | 9 + .../layers/eth_sender/manager.rs | 9 + .../implementations/layers/house_keeper.rs | 2 +- .../src/implementations/layers/mod.rs | 2 +- .../src/implementations/layers/postgres.rs | 172 ++++++++++++++++++ .../layers/postgres_metrics.rs | 75 -------- .../layers/state_keeper/mod.rs | 51 +++--- core/node/node_sync/src/tests.rs | 3 +- core/node/shared_metrics/Cargo.toml | 5 +- core/node/shared_metrics/build.rs | 46 ----- core/node/shared_metrics/src/lib.rs | 9 +- core/node/shared_metrics/src/rustc.rs | 36 ---- core/node/state_keeper/Cargo.toml | 2 + core/node/state_keeper/src/health.rs | 30 +++ core/node/state_keeper/src/keeper.rs | 86 ++++++--- core/node/state_keeper/src/lib.rs | 1 + .../src/testonly/test_batch_executor.rs | 3 +- core/node/state_keeper/src/tests/mod.rs | 3 +- core/node/state_keeper/src/utils.rs | 5 + 42 files changed, 756 insertions(+), 241 deletions(-) create mode 100644 core/lib/bin_metadata/Cargo.toml create mode 100644 core/lib/bin_metadata/build.rs create mode 100644 core/lib/bin_metadata/src/lib.rs create mode 100644 core/lib/dal/.sqlx/query-3566423188a5d6bed7150f327d83613cd34138b59ef3b9271fd0bfdaddd086f8.json create mode 100644 core/lib/health_check/src/binary.rs create mode 100644 core/node/eth_sender/src/health.rs create mode 100644 core/node/node_framework/src/implementations/layers/postgres.rs delete mode 100644 core/node/node_framework/src/implementations/layers/postgres_metrics.rs delete mode 100644 core/node/shared_metrics/build.rs delete mode 100644 core/node/shared_metrics/src/rustc.rs create mode 100644 core/node/state_keeper/src/health.rs diff --git a/Cargo.lock b/Cargo.lock index 25bd07547b4b..e8f33f35c13d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11157,6 +11157,16 @@ dependencies = [ "zksync_pairing", ] +[[package]] +name = "zksync_bin_metadata" +version = "0.1.0" +dependencies = [ + "rustc_version 0.4.1", + "serde", + "tracing", + "vise", +] + [[package]] name = "zksync_block_reverter" version = "0.1.0" @@ -11735,6 +11745,7 @@ dependencies = [ "async-trait", "chrono", "once_cell", + "serde", "test-casing", "test-log", "thiserror", @@ -11745,6 +11756,7 @@ dependencies = [ "zksync_contracts", "zksync_dal", "zksync_eth_client", + "zksync_health_check", "zksync_l1_contract_interface", "zksync_node_fee_model", "zksync_node_test_utils", @@ -11921,6 +11933,7 @@ dependencies = [ "tokio", "tracing", "vise", + "zksync_bin_metadata", ] [[package]] @@ -12250,11 +12263,13 @@ dependencies = [ "futures 0.3.31", "pin-project-lite", "semver 1.0.23", + "serde", "thiserror", "tokio", "tracing", "trybuild", "zksync_base_token_adjuster", + "zksync_bin_metadata", "zksync_block_reverter", "zksync_circuit_breaker", "zksync_commitment_generator", @@ -12288,6 +12303,7 @@ dependencies = [ "zksync_proof_data_handler", "zksync_queued_job_processor", "zksync_reorg_detector", + "zksync_shared_metrics", "zksync_state", "zksync_state_keeper", "zksync_storage", @@ -12600,9 +12616,10 @@ dependencies = [ name = "zksync_shared_metrics" version = "0.1.0" dependencies = [ - "rustc_version 0.4.1", + "serde", "tracing", "vise", + "zksync_bin_metadata", "zksync_dal", "zksync_types", ] @@ -12683,6 +12700,7 @@ dependencies = [ "itertools 0.10.5", "once_cell", "rand 0.8.5", + "serde", "tempfile", "test-casing", "thiserror", @@ -12694,6 +12712,7 @@ dependencies = [ "zksync_contracts", "zksync_dal", "zksync_eth_client", + "zksync_health_check", "zksync_mempool", "zksync_multivm", "zksync_node_fee_model", diff --git a/Cargo.toml b/Cargo.toml index 44a00196fb76..88173e07af4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,6 +79,7 @@ members = [ # Test infrastructure "core/tests/loadnext", "core/tests/vm-benchmark", + "core/lib/bin_metadata", ] resolver = "2" @@ -277,6 +278,7 @@ zksync_health_check = { version = "0.1.0", path = "core/lib/health_check" } zksync_l1_contract_interface = { version = "0.1.0", path = "core/lib/l1_contract_interface" } zksync_mempool = { version = "0.1.0", path = "core/lib/mempool" } zksync_merkle_tree = { version = "0.1.0", path = "core/lib/merkle_tree" } +zksync_bin_metadata = { version = "0.1.0", path = "core/lib/bin_metadata" } zksync_mini_merkle_tree = { version = "0.1.0", path = "core/lib/mini_merkle_tree" } zksync_object_store = { version = "0.1.0", path = "core/lib/object_store" } zksync_protobuf_config = { version = "0.1.0", path = "core/lib/protobuf_config" } diff --git a/core/bin/external_node/src/metrics/framework.rs b/core/bin/external_node/src/metrics/framework.rs index fc9d4fe51345..228af8aa0417 100644 --- a/core/bin/external_node/src/metrics/framework.rs +++ b/core/bin/external_node/src/metrics/framework.rs @@ -5,7 +5,7 @@ use zksync_node_framework::{ implementations::resources::pools::{MasterPool, PoolResource}, FromContext, IntoContext, StopReceiver, Task, TaskId, WiringError, WiringLayer, }; -use zksync_shared_metrics::rustc::RUST_METRICS; +use zksync_shared_metrics::{GIT_METRICS, RUST_METRICS}; use zksync_types::{L1ChainId, L2ChainId, SLChainId}; use super::EN_METRICS; @@ -40,6 +40,7 @@ impl WiringLayer for ExternalNodeMetricsLayer { async fn wire(self, input: Self::Input) -> Result { RUST_METRICS.initialize(); + GIT_METRICS.initialize(); EN_METRICS.observe_config( self.l1_chain_id, self.sl_chain_id, diff --git a/core/bin/external_node/src/node_builder.rs b/core/bin/external_node/src/node_builder.rs index 5c70fd436781..c5d9228e9930 100644 --- a/core/bin/external_node/src/node_builder.rs +++ b/core/bin/external_node/src/node_builder.rs @@ -33,7 +33,7 @@ use zksync_node_framework::{ NodeStorageInitializerLayer, }, pools_layer::PoolsLayerBuilder, - postgres_metrics::PostgresMetricsLayer, + postgres::PostgresLayer, prometheus_exporter::PrometheusExporterLayer, pruning::PruningLayer, query_eth_client::QueryEthClientLayer, @@ -125,8 +125,8 @@ impl ExternalNodeBuilder { Ok(self) } - fn add_postgres_metrics_layer(mut self) -> anyhow::Result { - self.node.add_layer(PostgresMetricsLayer); + fn add_postgres_layer(mut self) -> anyhow::Result { + self.node.add_layer(PostgresLayer); Ok(self) } @@ -582,7 +582,7 @@ impl ExternalNodeBuilder { // so until we have a dedicated component for "auxiliary" tasks, // it's responsible for things like metrics. self = self - .add_postgres_metrics_layer()? + .add_postgres_layer()? .add_external_node_metrics_layer()?; // We assign the storage initialization to the core, as it's considered to be // the "main" component. diff --git a/core/bin/zksync_server/src/node_builder.rs b/core/bin/zksync_server/src/node_builder.rs index 794c847a24d5..7e7d219856ca 100644 --- a/core/bin/zksync_server/src/node_builder.rs +++ b/core/bin/zksync_server/src/node_builder.rs @@ -48,7 +48,7 @@ use zksync_node_framework::{ object_store::ObjectStoreLayer, pk_signing_eth_client::PKSigningEthClientLayer, pools_layer::PoolsLayerBuilder, - postgres_metrics::PostgresMetricsLayer, + postgres::PostgresLayer, prometheus_exporter::PrometheusExporterLayer, proof_data_handler::ProofDataHandlerLayer, query_eth_client::QueryEthClientLayer, @@ -138,8 +138,8 @@ impl MainNodeBuilder { Ok(self) } - fn add_postgres_metrics_layer(mut self) -> anyhow::Result { - self.node.add_layer(PostgresMetricsLayer); + fn add_postgres_layer(mut self) -> anyhow::Result { + self.node.add_layer(PostgresLayer); Ok(self) } @@ -760,9 +760,7 @@ impl MainNodeBuilder { self = self.add_eth_tx_manager_layer()?; } Component::Housekeeper => { - self = self - .add_house_keeper_layer()? - .add_postgres_metrics_layer()?; + self = self.add_house_keeper_layer()?.add_postgres_layer()?; } Component::ProofDataHandler => { self = self.add_proof_data_handler_layer()?; diff --git a/core/lib/bin_metadata/Cargo.toml b/core/lib/bin_metadata/Cargo.toml new file mode 100644 index 000000000000..e529ecfb49a7 --- /dev/null +++ b/core/lib/bin_metadata/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "zksync_bin_metadata" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true +keywords.workspace = true +categories.workspace = true + +[dependencies] +serde.workspace = true +vise.workspace = true +tracing.workspace = true + +[build-dependencies] +rustc_version.workspace = true diff --git a/core/lib/bin_metadata/build.rs b/core/lib/bin_metadata/build.rs new file mode 100644 index 000000000000..ff339ae5589c --- /dev/null +++ b/core/lib/bin_metadata/build.rs @@ -0,0 +1,75 @@ +//! Build script for the external node binary. + +use std::{ + env, fs, + io::{self, Write}, + path::Path, + process::Command, +}; + +use rustc_version::{Channel, LlvmVersion}; + +fn print_binary_meta(out: &mut impl Write) -> io::Result<()> { + let rustc_meta = rustc_version::version_meta().expect("Failed obtaining rustc metadata"); + + writeln!( + out, + "pub const RUST_METADATA: RustMetadata = RustMetadata {{ \ + version: {semver:?}, \ + commit_hash: {commit_hash:?}, \ + commit_date: {commit_date:?}, \ + channel: {channel:?}, \ + host: {host:?}, \ + llvm: {llvm:?}, \ + }}; + + pub const GIT_METADATA: GitMetadata = GitMetadata {{ \ + branch: {git_branch:?}, \ + revision: {git_revision:?} \ + }};", + semver = rustc_meta.semver.to_string(), + commit_hash = rustc_meta.commit_hash, + commit_date = rustc_meta.commit_date, + channel = match rustc_meta.channel { + Channel::Dev => "dev", + Channel::Beta => "beta", + Channel::Nightly => "nightly", + Channel::Stable => "stable", + }, + host = rustc_meta.host, + llvm = rustc_meta.llvm_version.as_ref().map(LlvmVersion::to_string), + git_branch = git_branch(), + git_revision = git_revision() + ) +} + +/// Outputs the current git branch as a string literal. +pub fn git_branch() -> Option { + run_cmd_opt("git", &["rev-parse", "--abbrev-ref", "HEAD"]) +} + +/// Outputs the current git commit hash as a string literal. +pub fn git_revision() -> Option { + run_cmd_opt("git", &["rev-parse", "--short", "HEAD"]) +} + +fn run_cmd_opt(cmd: &str, args: &[&str]) -> Option { + let output = Command::new(cmd).args(args).output().ok()?; + if output.status.success() { + String::from_utf8(output.stdout) + .ok() + .map(|s| s.trim().to_string()) + } else { + None + } +} + +fn main() { + let out_dir = env::var("OUT_DIR").expect("`OUT_DIR` env var not set for build script"); + let metadata_module_path = Path::new(&out_dir).join("metadata_values.rs"); + let metadata_module = + fs::File::create(metadata_module_path).expect("cannot create metadata module"); + let mut metadata_module = io::BufWriter::new(metadata_module); + + print_binary_meta(&mut metadata_module).expect("failed printing binary metadata"); +} diff --git a/core/lib/bin_metadata/src/lib.rs b/core/lib/bin_metadata/src/lib.rs new file mode 100644 index 000000000000..d8a5221e4775 --- /dev/null +++ b/core/lib/bin_metadata/src/lib.rs @@ -0,0 +1,68 @@ +use serde::Serialize; +use vise::{EncodeLabelSet, Info, Metrics}; + +use self::values::{GIT_METADATA, RUST_METADATA}; + +pub mod values { + use super::{GitMetadata, RustMetadata}; + + include!(concat!(env!("OUT_DIR"), "/metadata_values.rs")); +} + +pub const BIN_METADATA: BinMetadata = BinMetadata { + rust: RUST_METADATA, + git: GIT_METADATA, +}; + +/// Metadata of the compiled binary. +#[derive(Debug, Serialize)] +pub struct BinMetadata { + pub rust: RustMetadata, + pub git: GitMetadata, +} + +/// Rust metadata of the compiled binary. +#[derive(Debug, EncodeLabelSet, Serialize)] +pub struct RustMetadata { + pub version: &'static str, + pub commit_hash: Option<&'static str>, + pub commit_date: Option<&'static str>, + pub channel: &'static str, + pub host: &'static str, + pub llvm: Option<&'static str>, +} + +/// Git metadata of the compiled binary. +#[derive(Debug, EncodeLabelSet, Serialize)] +pub struct GitMetadata { + pub branch: Option<&'static str>, + pub revision: Option<&'static str>, +} + +#[derive(Debug, Metrics)] +#[metrics(prefix = "rust")] +pub struct RustMetrics { + /// General information about the compiled binary. + info: Info, +} + +impl RustMetrics { + pub fn initialize(&self) { + tracing::info!("Rust metadata for this binary: {RUST_METADATA:?}"); + self.info.set(RUST_METADATA).ok(); + } +} + +#[derive(Debug, Metrics)] +#[metrics(prefix = "git_info")] +pub struct GitMetrics { + /// General information about the compiled binary. + info: Info, +} + +impl GitMetrics { + pub fn initialize(&self) { + tracing::info!("Git metadata for this binary: {GIT_METADATA:?}"); + self.info.set(GIT_METADATA).ok(); + } +} diff --git a/core/lib/dal/.sqlx/query-3566423188a5d6bed7150f327d83613cd34138b59ef3b9271fd0bfdaddd086f8.json b/core/lib/dal/.sqlx/query-3566423188a5d6bed7150f327d83613cd34138b59ef3b9271fd0bfdaddd086f8.json new file mode 100644 index 000000000000..123afc6060a6 --- /dev/null +++ b/core/lib/dal/.sqlx/query-3566423188a5d6bed7150f327d83613cd34138b59ef3b9271fd0bfdaddd086f8.json @@ -0,0 +1,50 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT *\n FROM _sqlx_migrations\n ORDER BY _sqlx_migrations.version DESC\n LIMIT 1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "version", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "installed_on", + "type_info": "Timestamptz" + }, + { + "ordinal": 3, + "name": "success", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "checksum", + "type_info": "Bytea" + }, + { + "ordinal": 5, + "name": "execution_time", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false, + false, + false, + false + ] + }, + "hash": "3566423188a5d6bed7150f327d83613cd34138b59ef3b9271fd0bfdaddd086f8" +} diff --git a/core/lib/dal/src/eth_sender_dal.rs b/core/lib/dal/src/eth_sender_dal.rs index 4ce76547ac9b..4efead269d1b 100644 --- a/core/lib/dal/src/eth_sender_dal.rs +++ b/core/lib/dal/src/eth_sender_dal.rs @@ -669,7 +669,7 @@ impl EthSenderDal<'_, '_> { Ok(()) } - pub async fn get_number_of_failed_transactions(&mut self) -> anyhow::Result { + pub async fn get_number_of_failed_transactions(&mut self) -> anyhow::Result { sqlx::query!( r#" SELECT @@ -683,6 +683,7 @@ impl EthSenderDal<'_, '_> { .fetch_one(self.storage.conn()) .await? .count + .map(|c| c as u64) .context("count field is missing") } diff --git a/core/lib/dal/src/system_dal.rs b/core/lib/dal/src/system_dal.rs index 105665fa2ec6..6f2e64b1c1c5 100644 --- a/core/lib/dal/src/system_dal.rs +++ b/core/lib/dal/src/system_dal.rs @@ -1,5 +1,7 @@ use std::{collections::HashMap, time::Duration}; +use chrono::DateTime; +use serde::{Deserialize, Serialize}; use zksync_db_connection::{connection::Connection, error::DalResult, instrument::InstrumentExt}; use crate::Core; @@ -12,6 +14,16 @@ pub(crate) struct TableSize { pub total_size: u64, } +#[derive(Debug, Serialize, Deserialize)] +pub struct DatabaseMigration { + pub version: i64, + pub description: String, + pub installed_on: DateTime, + pub success: bool, + pub checksum: String, + pub execution_time: Duration, +} + #[derive(Debug)] pub struct SystemDal<'a, 'c> { pub(crate) storage: &'a mut Connection<'c, Core>, @@ -86,4 +98,27 @@ impl SystemDal<'_, '_> { }); Ok(table_sizes.collect()) } + + pub async fn get_last_migration(&mut self) -> DalResult { + let row = sqlx::query!( + r#" + SELECT * + FROM _sqlx_migrations + ORDER BY _sqlx_migrations.version DESC + LIMIT 1 + "# + ) + .instrument("get_last_migration") + .fetch_one(self.storage) + .await?; + + Ok(DatabaseMigration { + version: row.version, + description: row.description, + installed_on: row.installed_on, + success: row.success, + checksum: hex::encode(row.checksum), + execution_time: Duration::from_millis(u64::try_from(row.execution_time).unwrap_or(0)), + }) + } } diff --git a/core/lib/health_check/Cargo.toml b/core/lib/health_check/Cargo.toml index 6f1d863d8cec..0e823c848ce5 100644 --- a/core/lib/health_check/Cargo.toml +++ b/core/lib/health_check/Cargo.toml @@ -20,6 +20,7 @@ serde_json.workspace = true thiserror.workspace = true tokio = { workspace = true, features = ["sync", "time"] } tracing.workspace = true +zksync_bin_metadata.workspace = true [dev-dependencies] assert_matches.workspace = true diff --git a/core/lib/health_check/src/binary.rs b/core/lib/health_check/src/binary.rs new file mode 100644 index 000000000000..b14ed2ed9392 --- /dev/null +++ b/core/lib/health_check/src/binary.rs @@ -0,0 +1,21 @@ +use async_trait::async_trait; +use zksync_bin_metadata::BinMetadata; + +use crate::{CheckHealth, Health, HealthStatus}; + +impl From<&BinMetadata> for Health { + fn from(details: &BinMetadata) -> Self { + Self::from(HealthStatus::Ready).with_details(details) + } +} + +#[async_trait] +impl CheckHealth for BinMetadata { + fn name(&self) -> &'static str { + "metadata" + } + + async fn check_health(&self) -> Health { + self.into() + } +} diff --git a/core/lib/health_check/src/lib.rs b/core/lib/health_check/src/lib.rs index e4e8ba3c9a58..7dcdb47aa2f9 100644 --- a/core/lib/health_check/src/lib.rs +++ b/core/lib/health_check/src/lib.rs @@ -11,11 +11,14 @@ pub use async_trait::async_trait; use futures::future; use serde::Serialize; use tokio::sync::watch; +use zksync_bin_metadata::BIN_METADATA; use self::metrics::{CheckResult, METRICS}; use crate::metrics::AppHealthCheckConfig; +mod binary; mod metrics; + #[cfg(test)] mod tests; @@ -235,7 +238,7 @@ impl AppHealthCheck { .map(|health| health.status) .max_by_key(|status| status.priority_for_aggregation()) .unwrap_or(HealthStatus::Ready); - let inner = aggregated_status.into(); + let inner = Health::with_details(aggregated_status.into(), BIN_METADATA); let health = AppHealth { inner, components }; if !health.inner.status.is_healthy() { diff --git a/core/lib/types/src/aggregated_operations.rs b/core/lib/types/src/aggregated_operations.rs index dadfad265cb2..44b730c929a3 100644 --- a/core/lib/types/src/aggregated_operations.rs +++ b/core/lib/types/src/aggregated_operations.rs @@ -1,6 +1,8 @@ use std::{fmt, str::FromStr}; -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AggregatedActionType { Commit, PublishProofOnchain, diff --git a/core/node/consensus/src/testonly.rs b/core/node/consensus/src/testonly.rs index 225a38aee760..479ca1f244cc 100644 --- a/core/node/consensus/src/testonly.rs +++ b/core/node/consensus/src/testonly.rs @@ -584,7 +584,6 @@ impl StateKeeperRunner { let stop_recv = stop_recv.clone(); async { ZkSyncStateKeeper::new( - stop_recv, Box::new(io), Box::new(executor_factory), OutputHandler::new(Box::new(persistence.with_tx_insertion())) @@ -592,7 +591,7 @@ impl StateKeeperRunner { Arc::new(NoopSealer), Arc::new(async_cache), ) - .run() + .run(stop_recv) .await .context("ZkSyncStateKeeper::run()")?; Ok(()) @@ -665,7 +664,6 @@ impl StateKeeperRunner { let stop_recv = stop_recv.clone(); async { ZkSyncStateKeeper::new( - stop_recv, Box::new(io), Box::new(MockBatchExecutor), OutputHandler::new(Box::new(persistence.with_tx_insertion())) @@ -674,7 +672,7 @@ impl StateKeeperRunner { Arc::new(NoopSealer), Arc::new(MockReadStorageFactory), ) - .run() + .run(stop_recv) .await .context("ZkSyncStateKeeper::run()")?; Ok(()) diff --git a/core/node/eth_sender/Cargo.toml b/core/node/eth_sender/Cargo.toml index a33536baa986..90b5727d9500 100644 --- a/core/node/eth_sender/Cargo.toml +++ b/core/node/eth_sender/Cargo.toml @@ -11,12 +11,14 @@ keywords.workspace = true categories.workspace = true [dependencies] +serde.workspace = true vise.workspace = true zksync_types.workspace = true zksync_dal.workspace = true zksync_config.workspace = true zksync_contracts.workspace = true zksync_eth_client.workspace = true +zksync_health_check.workspace = true zksync_l1_contract_interface.workspace = true zksync_object_store.workspace = true zksync_prover_interface.workspace = true diff --git a/core/node/eth_sender/src/eth_tx_aggregator.rs b/core/node/eth_sender/src/eth_tx_aggregator.rs index ac9ed4aaaadb..f0d7201d1503 100644 --- a/core/node/eth_sender/src/eth_tx_aggregator.rs +++ b/core/node/eth_sender/src/eth_tx_aggregator.rs @@ -3,6 +3,7 @@ use zksync_config::configs::eth_sender::SenderConfig; use zksync_contracts::BaseSystemContractsHashes; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; use zksync_eth_client::{BoundEthInterface, CallFunctionArgs}; +use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_l1_contract_interface::{ i_executor::{ commit::kzg::{KzgInfo, ZK_SYNC_BYTES_PER_BLOB}, @@ -27,6 +28,7 @@ use zksync_types::{ use super::aggregated_operations::AggregatedOperation; use crate::{ + health::{EthTxAggregatorHealthDetails, EthTxDetails}, metrics::{PubdataKind, METRICS}, utils::agg_l1_batch_base_cost, zksync_functions::ZkSyncFunctions, @@ -65,6 +67,7 @@ pub struct EthTxAggregator { pool: ConnectionPool, settlement_mode: SettlementMode, sl_chain_id: SLChainId, + health_updater: HealthUpdater, } struct TxData { @@ -119,10 +122,14 @@ impl EthTxAggregator { pool, settlement_mode, sl_chain_id, + health_updater: ReactiveHealthCheck::new("eth_tx_aggregator").1, } } pub async fn run(mut self, stop_receiver: watch::Receiver) -> anyhow::Result<()> { + self.health_updater + .update(Health::from(HealthStatus::Ready)); + let pool = self.pool.clone(); loop { let mut storage = pool.connection_tagged("eth_sender").await.unwrap(); @@ -431,6 +438,13 @@ impl EthTxAggregator { ) .await?; Self::report_eth_tx_saving(storage, &agg_op, &tx).await; + + self.health_updater.update( + EthTxAggregatorHealthDetails { + last_saved_tx: EthTxDetails::new(&tx, None), + } + .into(), + ); } Ok(()) } @@ -670,4 +684,9 @@ impl EthTxAggregator { ) }) } + + /// Returns the health check for eth tx aggregator. + pub fn health_check(&self) -> ReactiveHealthCheck { + self.health_updater.subscribe() + } } diff --git a/core/node/eth_sender/src/eth_tx_manager.rs b/core/node/eth_sender/src/eth_tx_manager.rs index 6992bea1007c..f411e9b3ae4b 100644 --- a/core/node/eth_sender/src/eth_tx_manager.rs +++ b/core/node/eth_sender/src/eth_tx_manager.rs @@ -9,6 +9,7 @@ use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; use zksync_eth_client::{ encode_blob_tx_with_sidecar, BoundEthInterface, ExecutedTxStatus, RawTransactionBytes, }; +use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_node_fee_model::l1_gas_price::TxParamsProvider; use zksync_shared_metrics::BlockL1Stage; use zksync_types::{eth_sender::EthTx, Address, L1BlockNumber, H256, U256}; @@ -19,6 +20,7 @@ use crate::{ AbstractL1Interface, L1BlockNumbers, OperatorNonce, OperatorType, RealL1Interface, }, eth_fees_oracle::{EthFees, EthFeesOracle, GasAdjusterFeesOracle}, + health::{EthTxDetails, EthTxManagerHealthDetails}, metrics::TransactionType, }; @@ -33,6 +35,7 @@ pub struct EthTxManager { config: SenderConfig, fees_oracle: Box, pool: ConnectionPool, + health_updater: HealthUpdater, } impl EthTxManager { @@ -67,6 +70,7 @@ impl EthTxManager { config, fees_oracle: Box::new(fees_oracle), pool, + health_updater: ReactiveHealthCheck::new("eth_tx_manager").1, } } @@ -417,6 +421,14 @@ impl EthTxManager { ) { let receipt_block_number = tx_status.receipt.block_number.unwrap().as_u32(); if receipt_block_number <= finalized_block.0 { + self.health_updater.update( + EthTxManagerHealthDetails { + last_mined_tx: EthTxDetails::new(tx, Some((&tx_status).into())), + finalized_block, + } + .into(), + ); + if tx_status.success { self.confirm_tx(storage, tx, tx_status).await; } else { @@ -522,6 +534,9 @@ impl EthTxManager { } pub async fn run(mut self, stop_receiver: watch::Receiver) -> anyhow::Result<()> { + self.health_updater + .update(Health::from(HealthStatus::Ready)); + let pool = self.pool.clone(); loop { @@ -682,4 +697,9 @@ impl EthTxManager { } } } + + /// Returns the health check for eth tx manager. + pub fn health_check(&self) -> ReactiveHealthCheck { + self.health_updater.subscribe() + } } diff --git a/core/node/eth_sender/src/health.rs b/core/node/eth_sender/src/health.rs new file mode 100644 index 000000000000..1aff80dae6d2 --- /dev/null +++ b/core/node/eth_sender/src/health.rs @@ -0,0 +1,68 @@ +use serde::{Deserialize, Serialize}; +use zksync_eth_client::ExecutedTxStatus; +use zksync_health_check::{Health, HealthStatus}; +use zksync_types::{ + aggregated_operations::AggregatedActionType, eth_sender::EthTx, web3::TransactionReceipt, + L1BlockNumber, Nonce, H256, +}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TxStatus { + pub tx_hash: H256, + pub success: bool, + pub receipt: TransactionReceipt, +} + +impl From<&ExecutedTxStatus> for TxStatus { + fn from(status: &ExecutedTxStatus) -> Self { + Self { + tx_hash: status.tx_hash, + success: status.success, + receipt: status.receipt.clone(), + } + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct EthTxAggregatorHealthDetails { + pub last_saved_tx: EthTxDetails, +} + +impl From for Health { + fn from(details: EthTxAggregatorHealthDetails) -> Self { + Self::from(HealthStatus::Ready).with_details(details) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct EthTxDetails { + pub nonce: Nonce, + pub tx_type: AggregatedActionType, + pub created_at_timestamp: u64, + pub predicted_gas_cost: u64, + pub status: Option, +} + +impl EthTxDetails { + pub fn new(tx: &EthTx, status: Option) -> Self { + Self { + nonce: tx.nonce, + tx_type: tx.tx_type, + created_at_timestamp: tx.created_at_timestamp, + predicted_gas_cost: tx.predicted_gas_cost, + status, + } + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct EthTxManagerHealthDetails { + pub last_mined_tx: EthTxDetails, + pub finalized_block: L1BlockNumber, +} + +impl From for Health { + fn from(details: EthTxManagerHealthDetails) -> Self { + Self::from(HealthStatus::Ready).with_details(details) + } +} diff --git a/core/node/eth_sender/src/lib.rs b/core/node/eth_sender/src/lib.rs index 747ece93b811..fc6076ec640b 100644 --- a/core/node/eth_sender/src/lib.rs +++ b/core/node/eth_sender/src/lib.rs @@ -3,6 +3,7 @@ mod aggregator; mod error; mod eth_tx_aggregator; mod eth_tx_manager; +mod health; mod metrics; mod publish_criterion; mod utils; diff --git a/core/node/house_keeper/src/blocks_state_reporter.rs b/core/node/house_keeper/src/blocks_state_reporter.rs index 6f85aa0fbb09..abd2c6e8802d 100644 --- a/core/node/house_keeper/src/blocks_state_reporter.rs +++ b/core/node/house_keeper/src/blocks_state_reporter.rs @@ -22,7 +22,10 @@ impl L1BatchMetricsReporter { async fn report_metrics(&self) -> anyhow::Result<()> { let mut block_metrics = vec![]; - let mut conn = self.connection_pool.connection().await?; + let mut conn = self + .connection_pool + .connection_tagged("house_keeper") + .await?; let last_l1_batch = conn.blocks_dal().get_sealed_l1_batch_number().await?; if let Some(number) = last_l1_batch { block_metrics.push((number, BlockStage::Sealed)); diff --git a/core/node/node_framework/Cargo.toml b/core/node/node_framework/Cargo.toml index d85f3dc7c8e9..6334495885f3 100644 --- a/core/node/node_framework/Cargo.toml +++ b/core/node/node_framework/Cargo.toml @@ -41,6 +41,7 @@ zksync_vm_executor.workspace = true zksync_state_keeper.workspace = true zksync_consistency_checker.workspace = true zksync_metadata_calculator.workspace = true +zksync_bin_metadata.workspace = true zksync_node_sync.workspace = true zksync_node_api_server.workspace = true zksync_node_consensus.workspace = true @@ -54,6 +55,7 @@ zksync_node_storage_init.workspace = true zksync_external_price_api.workspace = true zksync_external_proof_integration_api.workspace = true zksync_logs_bloom_backfill.workspace = true +zksync_shared_metrics.workspace = true pin-project-lite.workspace = true tracing.workspace = true @@ -61,6 +63,7 @@ thiserror.workspace = true async-trait.workspace = true futures.workspace = true anyhow.workspace = true +serde.workspace = true tokio = { workspace = true, features = ["rt"] } ctrlc.workspace = true semver.workspace = true diff --git a/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs b/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs index 310580aeb3a3..235158544c54 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs @@ -9,6 +9,7 @@ use crate::{ implementations::resources::{ circuit_breakers::CircuitBreakersResource, eth_interface::{BoundEthInterfaceForBlobsResource, BoundEthInterfaceResource}, + healthcheck::AppHealthCheckResource, object_store::ObjectStoreResource, pools::{MasterPool, PoolResource, ReplicaPool}, }, @@ -55,6 +56,8 @@ pub struct Input { pub object_store: ObjectStoreResource, #[context(default)] pub circuit_breakers: CircuitBreakersResource, + #[context(default)] + pub app_health: AppHealthCheckResource, } #[derive(Debug, IntoContext)] @@ -133,6 +136,12 @@ impl WiringLayer for EthTxAggregatorLayer { .insert(Box::new(FailedL1TransactionChecker { pool: replica_pool })) .await; + input + .app_health + .0 + .insert_component(eth_tx_aggregator.health_check()) + .map_err(WiringError::internal)?; + Ok(Output { eth_tx_aggregator }) } } diff --git a/core/node/node_framework/src/implementations/layers/eth_sender/manager.rs b/core/node/node_framework/src/implementations/layers/eth_sender/manager.rs index 5462fa575f94..e9ce4cc19e1a 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender/manager.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender/manager.rs @@ -8,6 +8,7 @@ use crate::{ circuit_breakers::CircuitBreakersResource, eth_interface::{BoundEthInterfaceForBlobsResource, BoundEthInterfaceResource}, gas_adjuster::GasAdjusterResource, + healthcheck::AppHealthCheckResource, pools::{MasterPool, PoolResource, ReplicaPool}, }, service::StopReceiver, @@ -48,6 +49,8 @@ pub struct Input { pub gas_adjuster: GasAdjusterResource, #[context(default)] pub circuit_breakers: CircuitBreakersResource, + #[context(default)] + pub app_health: AppHealthCheckResource, } #[derive(Debug, IntoContext)] @@ -114,6 +117,12 @@ impl WiringLayer for EthTxManagerLayer { .insert(Box::new(FailedL1TransactionChecker { pool: replica_pool })) .await; + input + .app_health + .0 + .insert_component(eth_tx_manager.health_check()) + .map_err(WiringError::internal)?; + Ok(Output { eth_tx_manager }) } } diff --git a/core/node/node_framework/src/implementations/layers/house_keeper.rs b/core/node/node_framework/src/implementations/layers/house_keeper.rs index 1e2bc568d50f..af59a73554ac 100644 --- a/core/node/node_framework/src/implementations/layers/house_keeper.rs +++ b/core/node/node_framework/src/implementations/layers/house_keeper.rs @@ -56,7 +56,7 @@ impl WiringLayer for HouseKeeperLayer { let l1_batch_metrics_reporter = L1BatchMetricsReporter::new( self.house_keeper_config .l1_batch_metrics_reporting_interval_ms, - replica_pool.clone(), + replica_pool, ); Ok(Output { diff --git a/core/node/node_framework/src/implementations/layers/mod.rs b/core/node/node_framework/src/implementations/layers/mod.rs index 11a62c9333b2..28a6f65600ab 100644 --- a/core/node/node_framework/src/implementations/layers/mod.rs +++ b/core/node/node_framework/src/implementations/layers/mod.rs @@ -24,7 +24,7 @@ pub mod node_storage_init; pub mod object_store; pub mod pk_signing_eth_client; pub mod pools_layer; -pub mod postgres_metrics; +pub mod postgres; pub mod prometheus_exporter; pub mod proof_data_handler; pub mod pruning; diff --git a/core/node/node_framework/src/implementations/layers/postgres.rs b/core/node/node_framework/src/implementations/layers/postgres.rs new file mode 100644 index 000000000000..8a81b8709895 --- /dev/null +++ b/core/node/node_framework/src/implementations/layers/postgres.rs @@ -0,0 +1,172 @@ +use std::time::Duration; + +use serde::{Deserialize, Serialize}; +use tokio::sync::watch; +use zksync_dal::{ + metrics::PostgresMetrics, system_dal::DatabaseMigration, ConnectionPool, Core, CoreDal, +}; +use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; + +use crate::{ + implementations::resources::{ + healthcheck::AppHealthCheckResource, + pools::{PoolResource, ReplicaPool}, + }, + service::StopReceiver, + task::{Task, TaskId, TaskKind}, + wiring_layer::{WiringError, WiringLayer}, + FromContext, IntoContext, +}; + +/// Execution interval for Postrgres metrics and healthcheck tasks +const TASK_EXECUTION_INTERVAL: Duration = Duration::from_secs(60); + +/// Wiring layer for the Postgres metrics exporter and healthcheck. +#[derive(Debug)] +pub struct PostgresLayer; + +#[derive(Debug, FromContext)] +#[context(crate = crate)] +pub struct Input { + pub replica_pool: PoolResource, + #[context(default)] + pub app_health: AppHealthCheckResource, +} + +#[derive(Debug, IntoContext)] +#[context(crate = crate)] +pub struct Output { + #[context(task)] + pub metrics_task: PostgresMetricsScrapingTask, + #[context(task)] + pub health_task: DatabaseHealthTask, +} + +#[async_trait::async_trait] +impl WiringLayer for PostgresLayer { + type Input = Input; + type Output = Output; + + fn layer_name(&self) -> &'static str { + "postgres_layer" + } + + async fn wire(self, input: Self::Input) -> Result { + let pool = input.replica_pool.get().await?; + let metrics_task = PostgresMetricsScrapingTask { + pool_for_metrics: pool.clone(), + }; + + let app_health = input.app_health.0; + let health_task = DatabaseHealthTask::new(pool); + + app_health + .insert_component(health_task.health_check()) + .map_err(WiringError::internal)?; + + Ok(Output { + metrics_task, + health_task, + }) + } +} + +#[derive(Debug)] +pub struct PostgresMetricsScrapingTask { + pool_for_metrics: ConnectionPool, +} + +#[async_trait::async_trait] +impl Task for PostgresMetricsScrapingTask { + fn kind(&self) -> TaskKind { + TaskKind::UnconstrainedTask + } + + fn id(&self) -> TaskId { + "postgres_metrics_scraping".into() + } + + async fn run(self: Box, mut stop_receiver: StopReceiver) -> anyhow::Result<()> { + tokio::select! { + () = PostgresMetrics::run_scraping(self.pool_for_metrics, TASK_EXECUTION_INTERVAL) => { + tracing::warn!("Postgres metrics scraping unexpectedly stopped"); + } + _ = stop_receiver.0.changed() => { + tracing::info!("Stop signal received, Postgres metrics scraping is shutting down"); + } + } + Ok(()) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct DatabaseInfo { + last_migration: DatabaseMigration, +} + +impl From for Health { + fn from(details: DatabaseInfo) -> Self { + Self::from(HealthStatus::Ready).with_details(details) + } +} + +#[derive(Debug)] +pub struct DatabaseHealthTask { + polling_interval: Duration, + connection_pool: ConnectionPool, + updater: HealthUpdater, +} + +impl DatabaseHealthTask { + fn new(connection_pool: ConnectionPool) -> Self { + Self { + polling_interval: TASK_EXECUTION_INTERVAL, + connection_pool, + updater: ReactiveHealthCheck::new("database").1, + } + } + + async fn run(self, mut stop_receiver: watch::Receiver) -> anyhow::Result<()> + where + Self: Sized, + { + let timeout = self.polling_interval; + let mut conn = self + .connection_pool + .connection_tagged("postgres_healthcheck") + .await?; + + tracing::info!("Starting database healthcheck with frequency: {timeout:?}",); + + while !*stop_receiver.borrow_and_update() { + let last_migration = conn.system_dal().get_last_migration().await?; + self.updater.update(DatabaseInfo { last_migration }.into()); + + // Error here corresponds to a timeout w/o `stop_receiver` changed; we're OK with this. + tokio::time::timeout(timeout, stop_receiver.changed()) + .await + .ok(); + } + tracing::info!("Stop signal received; database healthcheck is shut down"); + Ok(()) + } + + pub fn health_check(&self) -> ReactiveHealthCheck { + self.updater.subscribe() + } +} + +#[async_trait::async_trait] +impl Task for DatabaseHealthTask { + fn kind(&self) -> TaskKind { + TaskKind::UnconstrainedTask + } + + fn id(&self) -> TaskId { + "database_health".into() + } + + async fn run(self: Box, stop_receiver: StopReceiver) -> anyhow::Result<()> { + (*self).run(stop_receiver.0).await + } +} diff --git a/core/node/node_framework/src/implementations/layers/postgres_metrics.rs b/core/node/node_framework/src/implementations/layers/postgres_metrics.rs deleted file mode 100644 index 238bee578678..000000000000 --- a/core/node/node_framework/src/implementations/layers/postgres_metrics.rs +++ /dev/null @@ -1,75 +0,0 @@ -use std::time::Duration; - -use zksync_dal::{metrics::PostgresMetrics, ConnectionPool, Core}; - -use crate::{ - implementations::resources::pools::{PoolResource, ReplicaPool}, - service::StopReceiver, - task::{Task, TaskId, TaskKind}, - wiring_layer::{WiringError, WiringLayer}, - FromContext, IntoContext, -}; - -const SCRAPE_INTERVAL: Duration = Duration::from_secs(60); - -/// Wiring layer for the Postgres metrics exporter. -#[derive(Debug)] -pub struct PostgresMetricsLayer; - -#[derive(Debug, FromContext)] -#[context(crate = crate)] -pub struct Input { - pub replica_pool: PoolResource, -} - -#[derive(Debug, IntoContext)] -#[context(crate = crate)] -pub struct Output { - #[context(task)] - pub task: PostgresMetricsScrapingTask, -} - -#[async_trait::async_trait] -impl WiringLayer for PostgresMetricsLayer { - type Input = Input; - type Output = Output; - - fn layer_name(&self) -> &'static str { - "postgres_metrics_layer" - } - - async fn wire(self, input: Self::Input) -> Result { - let pool_for_metrics = input.replica_pool.get_singleton().await?; - let task = PostgresMetricsScrapingTask { pool_for_metrics }; - - Ok(Output { task }) - } -} - -#[derive(Debug)] -pub struct PostgresMetricsScrapingTask { - pool_for_metrics: ConnectionPool, -} - -#[async_trait::async_trait] -impl Task for PostgresMetricsScrapingTask { - fn kind(&self) -> TaskKind { - TaskKind::UnconstrainedTask - } - - fn id(&self) -> TaskId { - "postgres_metrics_scraping".into() - } - - async fn run(self: Box, mut stop_receiver: StopReceiver) -> anyhow::Result<()> { - tokio::select! { - () = PostgresMetrics::run_scraping(self.pool_for_metrics, SCRAPE_INTERVAL) => { - tracing::warn!("Postgres metrics scraping unexpectedly stopped"); - } - _ = stop_receiver.0.changed() => { - tracing::info!("Stop signal received, Postgres metrics scraping is shutting down"); - } - } - Ok(()) - } -} diff --git a/core/node/node_framework/src/implementations/layers/state_keeper/mod.rs b/core/node/node_framework/src/implementations/layers/state_keeper/mod.rs index 55defd095be8..6f21a321eb1a 100644 --- a/core/node/node_framework/src/implementations/layers/state_keeper/mod.rs +++ b/core/node/node_framework/src/implementations/layers/state_keeper/mod.rs @@ -1,17 +1,15 @@ use std::sync::Arc; use anyhow::Context; +use zksync_health_check::ReactiveHealthCheck; +use zksync_state::AsyncCatchupTask; pub use zksync_state::RocksdbStorageOptions; -use zksync_state::{AsyncCatchupTask, OwnedStorage, ReadStorageFactory}; -use zksync_state_keeper::{ - seal_criteria::ConditionalSealer, AsyncRocksdbCache, OutputHandler, StateKeeperIO, - ZkSyncStateKeeper, -}; +use zksync_state_keeper::{AsyncRocksdbCache, ZkSyncStateKeeper}; use zksync_storage::RocksDB; -use zksync_vm_executor::interface::BatchExecutorFactory; use crate::{ implementations::resources::{ + healthcheck::AppHealthCheckResource, pools::{MasterPool, PoolResource}, state_keeper::{ BatchExecutorResource, ConditionalSealerResource, OutputHandlerResource, @@ -44,6 +42,8 @@ pub struct Input { pub output_handler: OutputHandlerResource, pub conditional_sealer: ConditionalSealerResource, pub master_pool: PoolResource, + #[context(default)] + pub app_health: AppHealthCheckResource, } #[derive(Debug, IntoContext)] @@ -99,13 +99,21 @@ impl WiringLayer for StateKeeperLayer { self.rocksdb_options, ); - let state_keeper = StateKeeperTask { + let state_keeper = ZkSyncStateKeeper::new( io, - executor_factory: batch_executor_base, + batch_executor_base, output_handler, sealer, - storage_factory: Arc::new(storage_factory), - }; + Arc::new(storage_factory), + ); + + let state_keeper = StateKeeperTask { state_keeper }; + + input + .app_health + .0 + .insert_component(state_keeper.health_check()) + .map_err(WiringError::internal)?; let rocksdb_termination_hook = ShutdownHook::new("rocksdb_terminaton", async { // Wait for all the instances of RocksDB to be destroyed. @@ -123,11 +131,14 @@ impl WiringLayer for StateKeeperLayer { #[derive(Debug)] pub struct StateKeeperTask { - io: Box, - executor_factory: Box>, - output_handler: OutputHandler, - sealer: Arc, - storage_factory: Arc, + state_keeper: ZkSyncStateKeeper, +} + +impl StateKeeperTask { + /// Returns the health check for state keeper. + pub fn health_check(&self) -> ReactiveHealthCheck { + self.state_keeper.health_check() + } } #[async_trait::async_trait] @@ -137,15 +148,7 @@ impl Task for StateKeeperTask { } async fn run(self: Box, stop_receiver: StopReceiver) -> anyhow::Result<()> { - let state_keeper = ZkSyncStateKeeper::new( - stop_receiver.0, - self.io, - self.executor_factory, - self.output_handler, - self.sealer, - self.storage_factory, - ); - state_keeper.run().await + self.state_keeper.run(stop_receiver.0).await } } diff --git a/core/node/node_sync/src/tests.rs b/core/node/node_sync/src/tests.rs index 172a00e8c14c..21058144f778 100644 --- a/core/node/node_sync/src/tests.rs +++ b/core/node/node_sync/src/tests.rs @@ -132,7 +132,6 @@ impl StateKeeperHandles { } let state_keeper = ZkSyncStateKeeper::new( - stop_receiver, Box::new(io), Box::new(batch_executor), output_handler, @@ -143,7 +142,7 @@ impl StateKeeperHandles { Self { stop_sender, sync_state, - task: tokio::spawn(state_keeper.run()), + task: tokio::spawn(state_keeper.run(stop_receiver)), } } diff --git a/core/node/shared_metrics/Cargo.toml b/core/node/shared_metrics/Cargo.toml index f30a2ba35334..23c669b4f963 100644 --- a/core/node/shared_metrics/Cargo.toml +++ b/core/node/shared_metrics/Cargo.toml @@ -11,10 +11,9 @@ keywords.workspace = true categories.workspace = true [dependencies] +serde.workspace = true vise.workspace = true tracing.workspace = true zksync_types.workspace = true zksync_dal.workspace = true - -[build-dependencies] -rustc_version.workspace = true +zksync_bin_metadata.workspace = true diff --git a/core/node/shared_metrics/build.rs b/core/node/shared_metrics/build.rs deleted file mode 100644 index d37fef0b1b0c..000000000000 --- a/core/node/shared_metrics/build.rs +++ /dev/null @@ -1,46 +0,0 @@ -//! Build script for the external node binary. - -use std::{ - env, fs, - io::{self, Write}, - path::Path, -}; - -use rustc_version::{Channel, LlvmVersion}; - -fn print_rust_meta(out: &mut impl Write, meta: &rustc_version::VersionMeta) -> io::Result<()> { - writeln!( - out, - "pub(crate) const RUSTC_METADATA: RustcMetadata = RustcMetadata {{ \ - version: {semver:?}, \ - commit_hash: {commit_hash:?}, \ - commit_date: {commit_date:?}, \ - channel: {channel:?}, \ - host: {host:?}, \ - llvm: {llvm:?} \ - }};", - semver = meta.semver.to_string(), - commit_hash = meta.commit_hash, - commit_date = meta.commit_date, - channel = match meta.channel { - Channel::Dev => "dev", - Channel::Beta => "beta", - Channel::Nightly => "nightly", - Channel::Stable => "stable", - }, - host = meta.host, - llvm = meta.llvm_version.as_ref().map(LlvmVersion::to_string), - ) -} - -fn main() { - let out_dir = env::var("OUT_DIR").expect("`OUT_DIR` env var not set for build script"); - let rustc_meta = rustc_version::version_meta().expect("Failed obtaining rustc metadata"); - - let metadata_module_path = Path::new(&out_dir).join("metadata_values.rs"); - let metadata_module = - fs::File::create(metadata_module_path).expect("cannot create metadata module"); - let mut metadata_module = io::BufWriter::new(metadata_module); - - print_rust_meta(&mut metadata_module, &rustc_meta).expect("failed printing rustc metadata"); -} diff --git a/core/node/shared_metrics/src/lib.rs b/core/node/shared_metrics/src/lib.rs index 2c41ec9293a0..e37764c5a6d7 100644 --- a/core/node/shared_metrics/src/lib.rs +++ b/core/node/shared_metrics/src/lib.rs @@ -5,11 +5,10 @@ use std::{fmt, time::Duration}; use vise::{ Buckets, Counter, EncodeLabelSet, EncodeLabelValue, Family, Gauge, Histogram, Metrics, Unit, }; +use zksync_bin_metadata::{GitMetrics, RustMetrics}; use zksync_dal::transactions_dal::L2TxSubmissionResult; use zksync_types::aggregated_operations::AggregatedActionType; -pub mod rustc; - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EncodeLabelValue, EncodeLabelSet)] #[metrics(label = "stage", rename_all = "snake_case")] pub enum SnapshotRecoveryStage { @@ -196,3 +195,9 @@ pub struct ExternalNodeMetrics { #[vise::register] pub static EN_METRICS: vise::Global = vise::Global::new(); + +#[vise::register] +pub static RUST_METRICS: vise::Global = vise::Global::new(); + +#[vise::register] +pub static GIT_METRICS: vise::Global = vise::Global::new(); diff --git a/core/node/shared_metrics/src/rustc.rs b/core/node/shared_metrics/src/rustc.rs deleted file mode 100644 index 11165dbf51b0..000000000000 --- a/core/node/shared_metrics/src/rustc.rs +++ /dev/null @@ -1,36 +0,0 @@ -use vise::{EncodeLabelSet, Info, Metrics}; - -mod values { - use super::RustcMetadata; - include!(concat!(env!("OUT_DIR"), "/metadata_values.rs")); -} - -use values::RUSTC_METADATA; - -/// Metadata of Rust compiler used to compile the crate. -#[derive(Debug, EncodeLabelSet)] -pub struct RustcMetadata { - pub version: &'static str, - pub commit_hash: Option<&'static str>, - pub commit_date: Option<&'static str>, - pub channel: &'static str, - pub host: &'static str, - pub llvm: Option<&'static str>, -} - -#[derive(Debug, Metrics)] -#[metrics(prefix = "rust")] -pub struct RustMetrics { - /// General information about the Rust compiler. - info: Info, -} - -impl RustMetrics { - pub fn initialize(&self) { - tracing::info!("Metadata for rustc that this binary was compiled with: {RUSTC_METADATA:?}"); - self.info.set(RUSTC_METADATA).ok(); - } -} - -#[vise::register] -pub static RUST_METRICS: vise::Global = vise::Global::new(); diff --git a/core/node/state_keeper/Cargo.toml b/core/node/state_keeper/Cargo.toml index 49d4209a4c4f..979a11dcbb4a 100644 --- a/core/node/state_keeper/Cargo.toml +++ b/core/node/state_keeper/Cargo.toml @@ -16,6 +16,7 @@ vise.workspace = true zksync_multivm.workspace = true zksync_types.workspace = true zksync_dal.workspace = true +zksync_health_check.workspace = true zksync_state.workspace = true zksync_storage.workspace = true zksync_mempool.workspace = true @@ -38,6 +39,7 @@ tracing.workspace = true futures.workspace = true once_cell.workspace = true itertools.workspace = true +serde.workspace = true hex.workspace = true [dev-dependencies] diff --git a/core/node/state_keeper/src/health.rs b/core/node/state_keeper/src/health.rs new file mode 100644 index 000000000000..4fc86263e439 --- /dev/null +++ b/core/node/state_keeper/src/health.rs @@ -0,0 +1,30 @@ +use serde::{Deserialize, Serialize}; +use zksync_health_check::{Health, HealthStatus}; +use zksync_types::{L1BatchNumber, L2BlockNumber, H256}; + +use crate::io::IoCursor; + +#[derive(Debug, Serialize, Deserialize)] +pub struct StateKeeperHealthDetails { + pub next_l2_block: L2BlockNumber, + pub prev_l2_block_hash: H256, + pub prev_l2_block_timestamp: u64, + pub l1_batch: L1BatchNumber, +} + +impl From for Health { + fn from(details: StateKeeperHealthDetails) -> Self { + Self::from(HealthStatus::Ready).with_details(details) + } +} + +impl From<&IoCursor> for StateKeeperHealthDetails { + fn from(details: &IoCursor) -> Self { + Self { + next_l2_block: details.next_l2_block, + prev_l2_block_hash: details.prev_l2_block_hash, + prev_l2_block_timestamp: details.prev_l2_block_timestamp, + l1_batch: details.l1_batch, + } + } +} diff --git a/core/node/state_keeper/src/keeper.rs b/core/node/state_keeper/src/keeper.rs index fe37ee8d8dd6..7fcc53ad2d26 100644 --- a/core/node/state_keeper/src/keeper.rs +++ b/core/node/state_keeper/src/keeper.rs @@ -7,6 +7,7 @@ use std::{ use anyhow::Context as _; use tokio::sync::watch; use tracing::{info_span, Instrument}; +use zksync_health_check::{HealthUpdater, ReactiveHealthCheck}; use zksync_multivm::{ interface::{ executor::{BatchExecutor, BatchExecutorFactory}, @@ -24,12 +25,13 @@ use zksync_types::{ use crate::{ executor::TxExecutionResult, + health::StateKeeperHealthDetails, io::{IoCursor, L1BatchParams, L2BlockParams, OutputHandler, PendingBatchData, StateKeeperIO}, metrics::{AGGREGATION_METRICS, KEEPER_METRICS, L1_BATCH_METRICS}, seal_criteria::{ConditionalSealer, SealData, SealResolution, UnexecutableReason}, types::ExecutionMetricsForCriteria, updates::UpdatesManager, - utils::gas_count_from_writes, + utils::{gas_count_from_writes, is_canceled}, }; /// Amount of time to block on waiting for some resource. The exact value is not really important, @@ -65,17 +67,16 @@ impl Error { /// a sequence of executed L2 blocks and batches. #[derive(Debug)] pub struct ZkSyncStateKeeper { - stop_receiver: watch::Receiver, io: Box, output_handler: OutputHandler, batch_executor: Box>, sealer: Arc, storage_factory: Arc, + health_updater: HealthUpdater, } impl ZkSyncStateKeeper { pub fn new( - stop_receiver: watch::Receiver, sequencer: Box, batch_executor: Box>, output_handler: OutputHandler, @@ -83,17 +84,17 @@ impl ZkSyncStateKeeper { storage_factory: Arc, ) -> Self { Self { - stop_receiver, io: sequencer, batch_executor, output_handler, sealer, storage_factory, + health_updater: ReactiveHealthCheck::new("state_keeper").1, } } - pub async fn run(mut self) -> anyhow::Result<()> { - match self.run_inner().await { + pub async fn run(mut self, stop_receiver: watch::Receiver) -> anyhow::Result<()> { + match self.run_inner(stop_receiver).await { Ok(_) => unreachable!(), Err(Error::Fatal(err)) => Err(err).context("state_keeper failed"), Err(Error::Canceled) => { @@ -104,9 +105,14 @@ impl ZkSyncStateKeeper { } /// Fallible version of `run` routine that allows to easily exit upon cancellation. - async fn run_inner(&mut self) -> Result { + async fn run_inner( + &mut self, + mut stop_receiver: watch::Receiver, + ) -> Result { let (cursor, pending_batch_params) = self.io.initialize().await?; self.output_handler.initialize(&cursor).await?; + self.health_updater + .update(StateKeeperHealthDetails::from(&cursor).into()); tracing::info!( "Starting state keeper. Next l1 batch to seal: {}, next L2 block to seal: {}", cursor.l1_batch, @@ -135,7 +141,7 @@ impl ZkSyncStateKeeper { None => { tracing::info!("There is no open pending batch, starting a new empty batch"); let (system_env, l1_batch_env, pubdata_params) = self - .wait_for_new_batch_env(&cursor) + .wait_for_new_batch_env(&cursor, &mut stop_receiver) .await .map_err(|e| e.context("wait_for_new_batch_params()"))?; PendingBatchData { @@ -154,22 +160,29 @@ impl ZkSyncStateKeeper { .await?; let mut batch_executor = self - .create_batch_executor(l1_batch_env.clone(), system_env.clone(), pubdata_params) + .create_batch_executor( + l1_batch_env.clone(), + system_env.clone(), + pubdata_params, + &stop_receiver, + ) .await?; self.restore_state( &mut *batch_executor, &mut updates_manager, pending_l2_blocks, + &stop_receiver, ) .await?; let mut l1_batch_seal_delta: Option = None; - while !self.is_canceled() { + while !is_canceled(&stop_receiver) { // This function will run until the batch can be sealed. self.process_l1_batch( &mut *batch_executor, &mut updates_manager, protocol_upgrade_tx, + &stop_receiver, ) .await?; @@ -178,8 +191,9 @@ impl ZkSyncStateKeeper { self.seal_l2_block(&updates_manager).await?; // We've sealed the L2 block that we had, but we still need to set up the timestamp // for the fictive L2 block. - let new_l2_block_params = - self.wait_for_new_l2_block_params(&updates_manager).await?; + let new_l2_block_params = self + .wait_for_new_l2_block_params(&updates_manager, &stop_receiver) + .await?; Self::start_next_l2_block( new_l2_block_params, &mut updates_manager, @@ -204,11 +218,17 @@ impl ZkSyncStateKeeper { // Start the new batch. next_cursor.l1_batch += 1; - (system_env, l1_batch_env, pubdata_params) = - self.wait_for_new_batch_env(&next_cursor).await?; + (system_env, l1_batch_env, pubdata_params) = self + .wait_for_new_batch_env(&next_cursor, &mut stop_receiver) + .await?; updates_manager = UpdatesManager::new(&l1_batch_env, &system_env, pubdata_params); batch_executor = self - .create_batch_executor(l1_batch_env.clone(), system_env.clone(), pubdata_params) + .create_batch_executor( + l1_batch_env.clone(), + system_env.clone(), + pubdata_params, + &stop_receiver, + ) .await?; let version_changed = system_env.version != sealed_batch_protocol_version; @@ -226,10 +246,11 @@ impl ZkSyncStateKeeper { l1_batch_env: L1BatchEnv, system_env: SystemEnv, pubdata_params: PubdataParams, + stop_receiver: &watch::Receiver, ) -> Result>, Error> { let storage = self .storage_factory - .access_storage(&self.stop_receiver, l1_batch_env.number - 1) + .access_storage(stop_receiver, l1_batch_env.number - 1) .await .context("failed creating VM storage")? .ok_or(Error::Canceled)?; @@ -287,10 +308,6 @@ impl ZkSyncStateKeeper { Ok(protocol_upgrade_tx) } - fn is_canceled(&self) -> bool { - *self.stop_receiver.borrow() - } - async fn load_upgrade_tx( &mut self, protocol_version: ProtocolVersionId, @@ -310,8 +327,9 @@ impl ZkSyncStateKeeper { async fn wait_for_new_batch_params( &mut self, cursor: &IoCursor, + stop_receiver: &watch::Receiver, ) -> Result { - while !self.is_canceled() { + while !is_canceled(stop_receiver) { if let Some(params) = self .io .wait_for_new_batch_params(cursor, POLL_WAIT_DURATION) @@ -332,10 +350,13 @@ impl ZkSyncStateKeeper { async fn wait_for_new_batch_env( &mut self, cursor: &IoCursor, + stop_receiver: &mut watch::Receiver, ) -> Result<(SystemEnv, L1BatchEnv, PubdataParams), Error> { // `io.wait_for_new_batch_params(..)` is not cancel-safe; once we get new batch params, we must hold onto them // until we get the rest of parameters from I/O or receive a stop signal. - let params = self.wait_for_new_batch_params(cursor).await?; + let params = self + .wait_for_new_batch_params(cursor, stop_receiver) + .await?; let contracts = self .io .load_base_system_contracts(params.protocol_version, cursor) @@ -353,7 +374,7 @@ impl ZkSyncStateKeeper { let previous_batch_hash = hash_result.context("cannot load state hash for previous L1 batch")?; Ok(params.into_env(self.io.chain_id(), contracts, cursor, previous_batch_hash)) } - _ = self.stop_receiver.changed() => Err(Error::Canceled), + _ = stop_receiver.changed() => Err(Error::Canceled), } } @@ -367,16 +388,20 @@ impl ZkSyncStateKeeper { async fn wait_for_new_l2_block_params( &mut self, updates: &UpdatesManager, + stop_receiver: &watch::Receiver, ) -> Result { let latency = KEEPER_METRICS.wait_for_l2_block_params.start(); let cursor = updates.io_cursor(); - while !self.is_canceled() { + while !is_canceled(stop_receiver) { if let Some(params) = self .io .wait_for_new_l2_block_params(&cursor, POLL_WAIT_DURATION) .await .context("error waiting for new L2 block params")? { + self.health_updater + .update(StateKeeperHealthDetails::from(&cursor).into()); + latency.observe(); return Ok(params); } @@ -439,6 +464,7 @@ impl ZkSyncStateKeeper { batch_executor: &mut dyn BatchExecutor, updates_manager: &mut UpdatesManager, l2_blocks_to_reexecute: Vec, + stop_receiver: &watch::Receiver, ) -> Result<(), Error> { if l2_blocks_to_reexecute.is_empty() { return Ok(()); @@ -530,7 +556,7 @@ impl ZkSyncStateKeeper { // We've processed all the L2 blocks, and right now we're initializing the next *actual* L2 block. let new_l2_block_params = self - .wait_for_new_l2_block_params(updates_manager) + .wait_for_new_l2_block_params(updates_manager, stop_receiver) .await .map_err(|e| e.context("wait_for_new_l2_block_params"))?; Self::start_next_l2_block(new_l2_block_params, updates_manager, batch_executor).await?; @@ -547,13 +573,14 @@ impl ZkSyncStateKeeper { batch_executor: &mut dyn BatchExecutor, updates_manager: &mut UpdatesManager, protocol_upgrade_tx: Option, + stop_receiver: &watch::Receiver, ) -> Result<(), Error> { if let Some(protocol_upgrade_tx) = protocol_upgrade_tx { self.process_upgrade_tx(batch_executor, updates_manager, protocol_upgrade_tx) .await?; } - while !self.is_canceled() { + while !is_canceled(stop_receiver) { let full_latency = KEEPER_METRICS.process_l1_batch_loop_iteration.start(); if self @@ -576,7 +603,7 @@ impl ZkSyncStateKeeper { self.seal_l2_block(updates_manager).await?; let new_l2_block_params = self - .wait_for_new_l2_block_params(updates_manager) + .wait_for_new_l2_block_params(updates_manager, stop_receiver) .await .map_err(|e| e.context("wait_for_new_l2_block_params"))?; tracing::debug!( @@ -874,4 +901,9 @@ impl ZkSyncStateKeeper { latency.observe(); Ok((resolution, exec_result)) } + + /// Returns the health check for state keeper. + pub fn health_check(&self) -> ReactiveHealthCheck { + self.health_updater.subscribe() + } } diff --git a/core/node/state_keeper/src/lib.rs b/core/node/state_keeper/src/lib.rs index c12e4163fdd4..323580ab0434 100644 --- a/core/node/state_keeper/src/lib.rs +++ b/core/node/state_keeper/src/lib.rs @@ -12,6 +12,7 @@ pub use self::{ }; pub mod executor; +mod health; pub mod io; mod keeper; mod mempool_actor; diff --git a/core/node/state_keeper/src/testonly/test_batch_executor.rs b/core/node/state_keeper/src/testonly/test_batch_executor.rs index 5625add021bf..9a675c7e97e8 100644 --- a/core/node/state_keeper/src/testonly/test_batch_executor.rs +++ b/core/node/state_keeper/src/testonly/test_batch_executor.rs @@ -204,14 +204,13 @@ impl TestScenario { let (stop_sender, stop_receiver) = watch::channel(false); let (io, output_handler) = TestIO::new(stop_sender, self); let state_keeper = ZkSyncStateKeeper::new( - stop_receiver, Box::new(io), Box::new(batch_executor), output_handler, Arc::new(sealer), Arc::new(MockReadStorageFactory), ); - let sk_thread = tokio::spawn(state_keeper.run()); + let sk_thread = tokio::spawn(state_keeper.run(stop_receiver)); // We must assume that *theoretically* state keeper may ignore the stop signal from IO once scenario is // completed, so we spawn it in a separate thread to not get test stuck. diff --git a/core/node/state_keeper/src/tests/mod.rs b/core/node/state_keeper/src/tests/mod.rs index ca078354c896..d47f8f45df77 100644 --- a/core/node/state_keeper/src/tests/mod.rs +++ b/core/node/state_keeper/src/tests/mod.rs @@ -417,14 +417,13 @@ async fn load_upgrade_tx() { let sealer = SequencerSealer::default(); let scenario = TestScenario::new(); let batch_executor = TestBatchExecutorBuilder::new(&scenario); - let (stop_sender, stop_receiver) = watch::channel(false); + let (stop_sender, _stop_receiver) = watch::channel(false); let (mut io, output_handler) = TestIO::new(stop_sender, scenario); io.add_upgrade_tx(ProtocolVersionId::latest(), random_upgrade_tx(1)); io.add_upgrade_tx(ProtocolVersionId::next(), random_upgrade_tx(2)); let mut sk = ZkSyncStateKeeper::new( - stop_receiver, Box::new(io), Box::new(batch_executor), output_handler, diff --git a/core/node/state_keeper/src/utils.rs b/core/node/state_keeper/src/utils.rs index 320dd49583ed..af4616fe11dc 100644 --- a/core/node/state_keeper/src/utils.rs +++ b/core/node/state_keeper/src/utils.rs @@ -1,5 +1,6 @@ use std::time::{SystemTime, UNIX_EPOCH}; +use tokio::sync::watch; use zksync_multivm::interface::{DeduplicatedWritesMetrics, VmExecutionMetrics}; use zksync_types::{ aggregated_operations::AggregatedActionType, block::BlockGasCount, ExecuteTransactionCommon, @@ -89,6 +90,10 @@ pub(super) fn gas_count_from_writes( } } +pub(super) fn is_canceled(stop_receiver: &watch::Receiver) -> bool { + *stop_receiver.borrow() +} + // TODO (SMA-1206): use seconds instead of milliseconds. pub(super) fn millis_since_epoch() -> u128 { SystemTime::now() From 26f630cb75958c711d67d13bc77ddbb1117156c3 Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 26 Nov 2024 18:56:30 +0100 Subject: [PATCH 04/35] feat(tee): add error handling for unstable_getTeeProofs API endpoint (#3321) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ This PR adds more information to the response of the `unstable_getTeeProofs` API endpoint, enabling the [client][1] that sent the [request][2] to determine whether it makes sense to retry fetching the TEE proof for a particular batch number. ## Why ❔ Currently, the [TEE verifier][1] – the tool for continuous SGX attestation and batch signature verification – is [stuck][3] on batches that failed to be proven and are marked as `permanently_ignored`. The tool should be able to distinguish between batches that are permanently ignored (and should be skipped) and batches that have failed but will be retried. This PR enables that distinction. Example use cases: - requesting TEE proof for a batch with the `permanently_ignored` status ``` $ curl -i -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "id": 1, "method": "unstable_getTeeProofs", "params": [14, "sgx"] }' 'http://localhost:3152' HTTP/1.1 200 OK content-type: application/json; charset=utf-8 vary: origin, access-control-request-method, access-control-request-headers access-control-allow-origin: * content-length: 207 date: Tue, 26 Nov 2024 12:42:48 GMT {"jsonrpc":"2.0","result":[{"l1BatchNumber":14,"teeType":"sgx","pubkey":null,"signature":null,"proof":null,"provedAt":"2024-11-20T15:43:46.112146Z","status":"permanently_ignored","attestation":null}],"id":1} ``` - requesting TEE proof for a batch with the `failed` status ``` $ curl -i -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "id": 1, "method": "unstable_getTeeProofs", "params": [15, "sgx"] }' 'http://localhost:3152' HTTP/1.1 200 OK content-type: application/json; charset=utf-8 vary: origin, access-control-request-method, access-control-request-headers access-control-allow-origin: * content-length: 194 date: Tue, 26 Nov 2024 12:44:19 GMT {"jsonrpc":"2.0","result":[{"l1BatchNumber":15,"teeType":"sgx","pubkey":null,"signature":null,"proof":null,"provedAt":"2024-11-20T15:43:46.121432Z","status":"failed","attestation":null}],"id":1} ``` - requesting TEE proof for a batch with the `generated` status ``` $ curl -i -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "id": 1, "method": "unstable_getTeeProofs", "params": [28, "sgx"] }' 'http://localhost:3152' HTTP/1.1 200 OK content-type: application/json; charset=utf-8 vary: origin, access-control-request-method, access-control-request-headers access-control-allow-origin: * content-length: 229 date: Tue, 26 Nov 2024 12:45:27 GMT {"jsonrpc":"2.0","result":[{"l1BatchNumber":28,"teeType":"sgx","pubkey":"0506070809","signature":"0001020304","proof":"1011121314","provedAt":"2024-11-20T15:21:16.129128Z","status":"generated","attestation":"0403020100"}],"id":1} ``` - requesting TEE proof for a non-existent batch ``` $ curl -i -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "id": 1, "method": "unstable_getTeeProofs", "params": [1337, "sgx"] }' 'http://localhost:3152' HTTP/1.1 200 OK content-type: application/json; charset=utf-8 vary: origin, access-control-request-method, access-control-request-headers access-control-allow-origin: * content-length: 36 date: Tue, 26 Nov 2024 12:46:08 GMT {"jsonrpc":"2.0","result":[],"id":1} ``` Relevant database entries for the use cases mentioned above: ``` zksync_server_localhost_legacy=# SELECT * FROM tee_proof_generation_details WHERE l1_batch_number IN (14, 15, 28, 1337); l1_batch_number | status | signature | pubkey | proof | tee_type | created_at | updated_at | prover_taken_at -----------------+---------------------+--------------+--------------+--------------+----------+----------------------------+----------------------------+---------------------------- 14 | permanently_ignored | | | | sgx | 2023-11-20 15:27:47.281293 | 2024-11-20 15:43:46.112146 | 2024-11-20 15:43:46.106042 15 | failed | | | | sgx | 2024-11-20 15:27:47.287777 | 2024-11-20 15:43:46.121432 | 2024-11-20 15:43:46.115853 28 | generated | \x0001020304 | \x0506070809 | \x1011121314 | sgx | 2024-11-20 12:56:33.055642 | 2024-11-20 15:21:16.129128 | 2024-11-20 14:53:14.25949 (3 rows) ``` [1]: https://github.com/matter-labs/teepot/blob/main/bin/verify-era-proof-attestation/src/main.rs [2]: https://github.com/matter-labs/teepot/blob/1a8a9f17fa7284f83c41a63d37fe380aef6d550d/bin/verify-era-proof-attestation/src/proof.rs#L15-L21 [3]: https://grafana.matterlabs.dev/goto/unFqf57Hg?orgId=1 ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- ...5e419ffae1fece87427c6571713047d44f015.json | 52 ++++++++++++++++++ ...3a0aedbd2455b2ff728fe88cab94728925c0e.json | 53 +++++++++++++++++++ ...5393ec02458104c483a2023b24881ae0c6716.json | 23 -------- core/lib/dal/src/models/storage_tee_proof.rs | 1 + core/lib/dal/src/tee_proof_generation_dal.rs | 32 ++++++----- core/lib/types/src/api/mod.rs | 1 + .../src/web3/namespaces/unstable.rs | 7 ++- core/node/proof_data_handler/src/tests.rs | 2 +- 8 files changed, 131 insertions(+), 40 deletions(-) create mode 100644 core/lib/dal/.sqlx/query-8065f779631edb7ba30229485ff5e419ffae1fece87427c6571713047d44f015.json create mode 100644 core/lib/dal/.sqlx/query-b7fa581d662640236d11143953e3a0aedbd2455b2ff728fe88cab94728925c0e.json delete mode 100644 core/lib/dal/.sqlx/query-cf3c7b918a3f82476543841d4dc5393ec02458104c483a2023b24881ae0c6716.json diff --git a/core/lib/dal/.sqlx/query-8065f779631edb7ba30229485ff5e419ffae1fece87427c6571713047d44f015.json b/core/lib/dal/.sqlx/query-8065f779631edb7ba30229485ff5e419ffae1fece87427c6571713047d44f015.json new file mode 100644 index 000000000000..7559630217be --- /dev/null +++ b/core/lib/dal/.sqlx/query-8065f779631edb7ba30229485ff5e419ffae1fece87427c6571713047d44f015.json @@ -0,0 +1,52 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n tp.pubkey,\n tp.signature,\n tp.proof,\n tp.updated_at,\n tp.status,\n ta.attestation\n FROM\n tee_proof_generation_details tp\n LEFT JOIN\n tee_attestations ta ON tp.pubkey = ta.pubkey\n WHERE\n tp.l1_batch_number = $1\n ORDER BY tp.l1_batch_number ASC, tp.tee_type ASC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pubkey", + "type_info": "Bytea" + }, + { + "ordinal": 1, + "name": "signature", + "type_info": "Bytea" + }, + { + "ordinal": 2, + "name": "proof", + "type_info": "Bytea" + }, + { + "ordinal": 3, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 4, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "attestation", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true, + true, + true, + false, + false, + true + ] + }, + "hash": "8065f779631edb7ba30229485ff5e419ffae1fece87427c6571713047d44f015" +} diff --git a/core/lib/dal/.sqlx/query-b7fa581d662640236d11143953e3a0aedbd2455b2ff728fe88cab94728925c0e.json b/core/lib/dal/.sqlx/query-b7fa581d662640236d11143953e3a0aedbd2455b2ff728fe88cab94728925c0e.json new file mode 100644 index 000000000000..89f0706843bd --- /dev/null +++ b/core/lib/dal/.sqlx/query-b7fa581d662640236d11143953e3a0aedbd2455b2ff728fe88cab94728925c0e.json @@ -0,0 +1,53 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n tp.pubkey,\n tp.signature,\n tp.proof,\n tp.updated_at,\n tp.status,\n ta.attestation\n FROM\n tee_proof_generation_details tp\n LEFT JOIN\n tee_attestations ta ON tp.pubkey = ta.pubkey\n WHERE\n tp.l1_batch_number = $1\n AND tp.tee_type = $2ORDER BY tp.l1_batch_number ASC, tp.tee_type ASC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pubkey", + "type_info": "Bytea" + }, + { + "ordinal": 1, + "name": "signature", + "type_info": "Bytea" + }, + { + "ordinal": 2, + "name": "proof", + "type_info": "Bytea" + }, + { + "ordinal": 3, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 4, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "attestation", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + true, + true, + true, + false, + false, + true + ] + }, + "hash": "b7fa581d662640236d11143953e3a0aedbd2455b2ff728fe88cab94728925c0e" +} diff --git a/core/lib/dal/.sqlx/query-cf3c7b918a3f82476543841d4dc5393ec02458104c483a2023b24881ae0c6716.json b/core/lib/dal/.sqlx/query-cf3c7b918a3f82476543841d4dc5393ec02458104c483a2023b24881ae0c6716.json deleted file mode 100644 index 59bfa4858c02..000000000000 --- a/core/lib/dal/.sqlx/query-cf3c7b918a3f82476543841d4dc5393ec02458104c483a2023b24881ae0c6716.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n COUNT(*) AS \"count!\"\n FROM\n (\n SELECT\n *\n FROM\n storage_logs\n WHERE\n hashed_key = $1\n AND miniblock_number <= COALESCE(\n (\n SELECT\n MAX(number)\n FROM\n miniblocks\n ),\n (\n SELECT\n miniblock_number\n FROM\n snapshot_recovery\n )\n )\n ORDER BY\n miniblock_number DESC,\n operation_number DESC\n LIMIT\n 1\n ) sl\n WHERE\n sl.value != $2\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "count!", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Bytea", - "Bytea" - ] - }, - "nullable": [ - null - ] - }, - "hash": "cf3c7b918a3f82476543841d4dc5393ec02458104c483a2023b24881ae0c6716" -} diff --git a/core/lib/dal/src/models/storage_tee_proof.rs b/core/lib/dal/src/models/storage_tee_proof.rs index 6f80c59511f9..6e031674b585 100644 --- a/core/lib/dal/src/models/storage_tee_proof.rs +++ b/core/lib/dal/src/models/storage_tee_proof.rs @@ -9,6 +9,7 @@ pub struct StorageTeeProof { pub signature: Option>, pub proof: Option>, pub updated_at: NaiveDateTime, + pub status: String, pub attestation: Option>, } diff --git a/core/lib/dal/src/tee_proof_generation_dal.rs b/core/lib/dal/src/tee_proof_generation_dal.rs index 4d19c3ff0c8b..e6b2df974b26 100644 --- a/core/lib/dal/src/tee_proof_generation_dal.rs +++ b/core/lib/dal/src/tee_proof_generation_dal.rs @@ -7,6 +7,7 @@ use zksync_db_connection::{ connection::Connection, error::DalResult, instrument::{InstrumentExt, Instrumented}, + interpolate_query, match_query_as, utils::pg_interval_from_duration, }; use zksync_types::{tee_types::TeeType, L1BatchNumber}; @@ -242,13 +243,16 @@ impl TeeProofGenerationDal<'_, '_> { batch_number: L1BatchNumber, tee_type: Option, ) -> DalResult> { - let query = format!( + let query = match_query_as!( + StorageTeeProof, + [ r#" SELECT tp.pubkey, tp.signature, tp.proof, tp.updated_at, + tp.status, ta.attestation FROM tee_proof_generation_details tp @@ -256,22 +260,22 @@ impl TeeProofGenerationDal<'_, '_> { tee_attestations ta ON tp.pubkey = ta.pubkey WHERE tp.l1_batch_number = $1 - AND tp.status = $2 - {} - ORDER BY tp.l1_batch_number ASC, tp.tee_type ASC "#, - tee_type.map_or_else(String::new, |_| "AND tp.tee_type = $3".to_string()) + _, + "ORDER BY tp.l1_batch_number ASC, tp.tee_type ASC" + ], + match(&tee_type) { + Some(tee_type) => + ("AND tp.tee_type = $2"; i64::from(batch_number.0), tee_type.to_string()), + None => (""; i64::from(batch_number.0)), + } ); - let mut query = sqlx::query_as(&query) - .bind(i64::from(batch_number.0)) - .bind(TeeProofGenerationJobStatus::Generated.to_string()); - - if let Some(tee_type) = tee_type { - query = query.bind(tee_type.to_string()); - } - - let proofs: Vec = query.fetch_all(self.storage.conn()).await.unwrap(); + let proofs = query + .instrument("get_tee_proofs") + .with_arg("l1_batch_number", &batch_number) + .fetch_all(self.storage) + .await?; Ok(proofs) } diff --git a/core/lib/types/src/api/mod.rs b/core/lib/types/src/api/mod.rs index b5d2b3276527..509dd8065281 100644 --- a/core/lib/types/src/api/mod.rs +++ b/core/lib/types/src/api/mod.rs @@ -878,6 +878,7 @@ pub struct TeeProof { #[serde_as(as = "Option")] pub proof: Option>, pub proved_at: DateTime, + pub status: String, #[serde_as(as = "Option")] pub attestation: Option>, } diff --git a/core/node/api_server/src/web3/namespaces/unstable.rs b/core/node/api_server/src/web3/namespaces/unstable.rs index 783088cdc36a..d323902b1dd4 100644 --- a/core/node/api_server/src/web3/namespaces/unstable.rs +++ b/core/node/api_server/src/web3/namespaces/unstable.rs @@ -42,7 +42,7 @@ impl UnstableNamespace { tee_type: Option, ) -> Result, Web3Error> { let mut storage = self.state.acquire_connection().await?; - Ok(storage + let proofs = storage .tee_proof_generation_dal() .get_tee_proofs(l1_batch_number, tee_type) .await @@ -55,8 +55,11 @@ impl UnstableNamespace { signature: proof.signature, proof: proof.proof, proved_at: DateTime::::from_naive_utc_and_offset(proof.updated_at, Utc), + status: proof.status, attestation: proof.attestation, }) - .collect::>()) + .collect::>(); + + Ok(proofs) } } diff --git a/core/node/proof_data_handler/src/tests.rs b/core/node/proof_data_handler/src/tests.rs index dae2ef8cd0c0..f02baeda0b16 100644 --- a/core/node/proof_data_handler/src/tests.rs +++ b/core/node/proof_data_handler/src/tests.rs @@ -112,7 +112,7 @@ async fn submit_tee_proof() { .await .expect("Failed to save attestation"); - // resend the same request; this time, it should be successful. + // resend the same request; this time, it should be successful let response = send_submit_tee_proof_request(&app, &uri, &tee_proof_request).await; assert_eq!(response.status(), StatusCode::OK); From 86efd40a1e6df76ae25aa9ae5538276bdfa5b800 Mon Sep 17 00:00:00 2001 From: zksync-era-bot <147085853+zksync-era-bot@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:10:41 +0400 Subject: [PATCH 05/35] chore(main): release prover 17.1.1 (#3312) :robot: I have created a release *beep* *boop* --- ## [17.1.1](https://github.com/matter-labs/zksync-era/compare/prover-v17.1.0...prover-v17.1.1) (2024-11-26) ### Bug Fixes * Add prometheus exporter to circut prover ([#3311](https://github.com/matter-labs/zksync-era/issues/3311)) ([920eba1](https://github.com/matter-labs/zksync-era/commit/920eba15fc64b40f10fcc9f6910d5e7607f3d313)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- .github/release-please/manifest.json | 2 +- prover/CHANGELOG.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/release-please/manifest.json b/.github/release-please/manifest.json index 7e3c7e01ae74..c3898055f848 100644 --- a/.github/release-please/manifest.json +++ b/.github/release-please/manifest.json @@ -1,5 +1,5 @@ { "core": "25.2.0", - "prover": "17.1.0", + "prover": "17.1.1", "zkstack_cli": "0.1.2" } diff --git a/prover/CHANGELOG.md b/prover/CHANGELOG.md index d30076cddcf1..e99c20193eb5 100644 --- a/prover/CHANGELOG.md +++ b/prover/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [17.1.1](https://github.com/matter-labs/zksync-era/compare/prover-v17.1.0...prover-v17.1.1) (2024-11-26) + + +### Bug Fixes + +* Add prometheus exporter to circut prover ([#3311](https://github.com/matter-labs/zksync-era/issues/3311)) ([920eba1](https://github.com/matter-labs/zksync-era/commit/920eba15fc64b40f10fcc9f6910d5e7607f3d313)) + ## [17.1.0](https://github.com/matter-labs/zksync-era/compare/prover-v17.0.0...prover-v17.1.0) (2024-11-18) From 533bfe65de9c18b0130f0ee8e7515a1303676a2f Mon Sep 17 00:00:00 2001 From: "krinza.eth" <44579545+kaymomin@users.noreply.github.com> Date: Wed, 27 Nov 2024 18:37:02 +0500 Subject: [PATCH 06/35] fix: remove foundry-zksync install script (#3336) --- .gitignore | 3 +++ install | 64 ------------------------------------------------------ 2 files changed, 3 insertions(+), 64 deletions(-) delete mode 100755 install diff --git a/.gitignore b/.gitignore index adf3b7799618..471a601cc34b 100644 --- a/.gitignore +++ b/.gitignore @@ -120,3 +120,6 @@ configs/* era-observability/ core/tests/ts-integration/deployments-zk transactions/ + +# foundry-zksync +install \ No newline at end of file diff --git a/install b/install deleted file mode 100755 index 8bf36687e20d..000000000000 --- a/install +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -echo "Installing foundryup-zksync..." - -BASE_DIR="${XDG_CONFIG_HOME:-$HOME}" -FOUNDRY_DIR="${FOUNDRY_DIR-"$BASE_DIR/.foundry"}" -FOUNDRY_BIN_DIR="$FOUNDRY_DIR/bin" -FOUNDRY_MAN_DIR="$FOUNDRY_DIR/share/man/man1" - -BIN_URL="https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/foundryup-zksync/foundryup-zksync" -BIN_PATH="$FOUNDRY_BIN_DIR/foundryup-zksync" - -# Create the .foundry bin directory and foundryup binary if it doesn't exist. -mkdir -p "$FOUNDRY_BIN_DIR" -curl -sSf -L "$BIN_URL" -o "$BIN_PATH" -chmod +x "$BIN_PATH" - -# Create the man directory for future man files if it doesn't exist. -mkdir -p "$FOUNDRY_MAN_DIR" - -# Store the correct profile file (i.e. .profile for bash or .zshenv for ZSH). -case $SHELL in -*/zsh) - PROFILE="${ZDOTDIR-"$HOME"}/.zshenv" - PREF_SHELL=zsh - ;; -*/bash) - PROFILE=$HOME/.bashrc - PREF_SHELL=bash - ;; -*/fish) - PROFILE=$HOME/.config/fish/config.fish - PREF_SHELL=fish - ;; -*/ash) - PROFILE=$HOME/.profile - PREF_SHELL=ash - ;; -*) - echo "foundryup-zksync: could not detect shell, manually add ${FOUNDRY_BIN_DIR} to your PATH." - exit 1 -esac - -# Only add foundryup-zksync if it isn't already in PATH. -if [[ ":$PATH:" != *":${FOUNDRY_BIN_DIR}:"* ]]; then - # Add the foundryup directory to the path and ensure the old PATH variables remain. - # If the shell is fish, echo fish_add_path instead of export. - if [[ "$PREF_SHELL" == "fish" ]]; then - echo >> "$PROFILE" && echo "fish_add_path -a $FOUNDRY_BIN_DIR" >> "$PROFILE" - else - echo >> "$PROFILE" && echo "export PATH=\"\$PATH:$FOUNDRY_BIN_DIR\"" >> "$PROFILE" - fi -fi - -# Warn MacOS users that they may need to manually install libusb via Homebrew: -if [[ "$OSTYPE" =~ ^darwin ]] && [[ ! -f /usr/local/opt/libusb/lib/libusb-1.0.0.dylib && ! -f /opt/homebrew/opt/libusb/lib/libusb-1.0.0.dylib ]]; then - echo && echo "warning: libusb not found. You may need to install it manually on MacOS via Homebrew (brew install libusb)." -fi - -echo -echo "Detected your preferred shell is $PREF_SHELL and added foundryup-zksync to PATH." -echo "Run 'source $PROFILE' or start a new terminal session to use foundryup-zksync." -echo "Then, simply run 'foundryup-zksync' to install foundry-zksync." From 7b6e59083cf0cafeaef5dd4b2dd39257ff91316d Mon Sep 17 00:00:00 2001 From: Alex Ostrovski Date: Wed, 27 Nov 2024 16:18:43 +0200 Subject: [PATCH 07/35] feat(pruning): Record L1 batch root hash in pruning logs (#3266) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Records root hashes of the last hard-pruned L1 batch in pruning logs. ## Why ❔ This allows to check tree integrity after recovery after pruning. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- ...f30cbc385e6fb6c8b8ae2c2d06b871a4cae72.json | 27 +++ ...b71ef6258e011f424c705d56c9827e8277c84.json | 44 +++++ ...dc766262b5bdc58be0444e164b1bd9feed02d.json | 38 ---- ...d_batch_root_hash_to_pruning_logs.down.sql | 2 + ...add_batch_root_hash_to_pruning_logs.up.sql | 3 + core/lib/dal/src/consensus_dal/mod.rs | 4 +- core/lib/dal/src/pruning_dal/mod.rs | 177 +++++++++++------- core/lib/dal/src/pruning_dal/tests.rs | 91 +++++---- core/lib/snapshots_applier/src/lib.rs | 5 +- .../api_server/src/execution_sandbox/mod.rs | 10 +- core/node/consensus/src/storage/testonly.rs | 20 +- core/node/db_pruner/src/lib.rs | 80 ++++---- core/node/db_pruner/src/tests.rs | 110 +++++------ core/node/metadata_calculator/src/pruning.rs | 14 +- .../metadata_calculator/src/recovery/mod.rs | 27 ++- .../metadata_calculator/src/recovery/tests.rs | 123 ++++++++---- core/node/metadata_calculator/src/tests.rs | 9 +- core/node/metadata_calculator/src/updater.rs | 2 +- core/node/test_utils/src/lib.rs | 10 +- 19 files changed, 473 insertions(+), 323 deletions(-) create mode 100644 core/lib/dal/.sqlx/query-3785c01a8eb1eaeaf7baf0a8ba7f30cbc385e6fb6c8b8ae2c2d06b871a4cae72.json create mode 100644 core/lib/dal/.sqlx/query-8bab3c429fc5bbf4a91819e55cfb71ef6258e011f424c705d56c9827e8277c84.json delete mode 100644 core/lib/dal/.sqlx/query-c9a842d04e8b225e43f07f76541dc766262b5bdc58be0444e164b1bd9feed02d.json create mode 100644 core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.down.sql create mode 100644 core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.up.sql diff --git a/core/lib/dal/.sqlx/query-3785c01a8eb1eaeaf7baf0a8ba7f30cbc385e6fb6c8b8ae2c2d06b871a4cae72.json b/core/lib/dal/.sqlx/query-3785c01a8eb1eaeaf7baf0a8ba7f30cbc385e6fb6c8b8ae2c2d06b871a4cae72.json new file mode 100644 index 000000000000..dfaccfbc99d3 --- /dev/null +++ b/core/lib/dal/.sqlx/query-3785c01a8eb1eaeaf7baf0a8ba7f30cbc385e6fb6c8b8ae2c2d06b871a4cae72.json @@ -0,0 +1,27 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n pruning_log (\n pruned_l1_batch,\n pruned_miniblock,\n pruned_l1_batch_root_hash,\n type,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, NOW(), NOW())\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8", + "Bytea", + { + "Custom": { + "name": "prune_type", + "kind": { + "Enum": [ + "Soft", + "Hard" + ] + } + } + } + ] + }, + "nullable": [] + }, + "hash": "3785c01a8eb1eaeaf7baf0a8ba7f30cbc385e6fb6c8b8ae2c2d06b871a4cae72" +} diff --git a/core/lib/dal/.sqlx/query-8bab3c429fc5bbf4a91819e55cfb71ef6258e011f424c705d56c9827e8277c84.json b/core/lib/dal/.sqlx/query-8bab3c429fc5bbf4a91819e55cfb71ef6258e011f424c705d56c9827e8277c84.json new file mode 100644 index 000000000000..0132af8fbe6c --- /dev/null +++ b/core/lib/dal/.sqlx/query-8bab3c429fc5bbf4a91819e55cfb71ef6258e011f424c705d56c9827e8277c84.json @@ -0,0 +1,44 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH\n soft AS (\n SELECT\n pruned_l1_batch,\n pruned_miniblock\n FROM\n pruning_log\n WHERE\n type = 'Soft'\n ORDER BY\n pruned_l1_batch DESC\n LIMIT\n 1\n ),\n \n hard AS (\n SELECT\n pruned_l1_batch,\n pruned_miniblock,\n pruned_l1_batch_root_hash\n FROM\n pruning_log\n WHERE\n type = 'Hard'\n ORDER BY\n pruned_l1_batch DESC\n LIMIT\n 1\n )\n \n SELECT\n soft.pruned_l1_batch AS last_soft_pruned_l1_batch,\n soft.pruned_miniblock AS last_soft_pruned_l2_block,\n hard.pruned_l1_batch AS last_hard_pruned_l1_batch,\n hard.pruned_miniblock AS last_hard_pruned_l2_block,\n hard.pruned_l1_batch_root_hash AS last_hard_pruned_batch_root_hash\n FROM\n soft\n FULL JOIN hard ON TRUE\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "last_soft_pruned_l1_batch", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "last_soft_pruned_l2_block", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "last_hard_pruned_l1_batch", + "type_info": "Int8" + }, + { + "ordinal": 3, + "name": "last_hard_pruned_l2_block", + "type_info": "Int8" + }, + { + "ordinal": 4, + "name": "last_hard_pruned_batch_root_hash", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + true, + true, + true, + true, + true + ] + }, + "hash": "8bab3c429fc5bbf4a91819e55cfb71ef6258e011f424c705d56c9827e8277c84" +} diff --git a/core/lib/dal/.sqlx/query-c9a842d04e8b225e43f07f76541dc766262b5bdc58be0444e164b1bd9feed02d.json b/core/lib/dal/.sqlx/query-c9a842d04e8b225e43f07f76541dc766262b5bdc58be0444e164b1bd9feed02d.json deleted file mode 100644 index fb28539ccdf6..000000000000 --- a/core/lib/dal/.sqlx/query-c9a842d04e8b225e43f07f76541dc766262b5bdc58be0444e164b1bd9feed02d.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n WITH\n soft AS (\n SELECT\n pruned_l1_batch,\n pruned_miniblock\n FROM\n pruning_log\n WHERE\n type = 'Soft'\n ORDER BY\n pruned_l1_batch DESC\n LIMIT\n 1\n ),\n \n hard AS (\n SELECT\n pruned_l1_batch,\n pruned_miniblock\n FROM\n pruning_log\n WHERE\n type = 'Hard'\n ORDER BY\n pruned_l1_batch DESC\n LIMIT\n 1\n )\n \n SELECT\n soft.pruned_l1_batch AS last_soft_pruned_l1_batch,\n soft.pruned_miniblock AS last_soft_pruned_miniblock,\n hard.pruned_l1_batch AS last_hard_pruned_l1_batch,\n hard.pruned_miniblock AS last_hard_pruned_miniblock\n FROM\n soft\n FULL JOIN hard ON TRUE\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "last_soft_pruned_l1_batch", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "last_soft_pruned_miniblock", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "last_hard_pruned_l1_batch", - "type_info": "Int8" - }, - { - "ordinal": 3, - "name": "last_hard_pruned_miniblock", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - true, - true, - true, - true - ] - }, - "hash": "c9a842d04e8b225e43f07f76541dc766262b5bdc58be0444e164b1bd9feed02d" -} diff --git a/core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.down.sql b/core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.down.sql new file mode 100644 index 000000000000..d6beeb80e8a5 --- /dev/null +++ b/core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE pruning_log + DROP COLUMN pruned_l1_batch_root_hash; diff --git a/core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.up.sql b/core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.up.sql new file mode 100644 index 000000000000..6a990781f61c --- /dev/null +++ b/core/lib/dal/migrations/20241112120944_add_batch_root_hash_to_pruning_logs.up.sql @@ -0,0 +1,3 @@ +-- nullable for backward compatibility +ALTER TABLE pruning_log + ADD COLUMN pruned_l1_batch_root_hash BYTEA DEFAULT NULL; diff --git a/core/lib/dal/src/consensus_dal/mod.rs b/core/lib/dal/src/consensus_dal/mod.rs index a091421d857c..7f3bcd1166ad 100644 --- a/core/lib/dal/src/consensus_dal/mod.rs +++ b/core/lib/dal/src/consensus_dal/mod.rs @@ -301,10 +301,10 @@ impl ConsensusDal<'_, '_> { .get_pruning_info() .await .context("get_pruning_info()")?; - Ok(match info.last_soft_pruned_l2_block { + Ok(match info.last_soft_pruned { // It is guaranteed that pruning info values are set for storage recovered from // snapshot, even if pruning was not enabled. - Some(last_pruned) => validator::BlockNumber(last_pruned.0.into()) + 1, + Some(last_pruned) => validator::BlockNumber(last_pruned.l2_block.0.into()) + 1, // No snapshot and no pruning: None => validator::BlockNumber(0), }) diff --git a/core/lib/dal/src/pruning_dal/mod.rs b/core/lib/dal/src/pruning_dal/mod.rs index bcd9fdcfc3e1..85127ac7030b 100644 --- a/core/lib/dal/src/pruning_dal/mod.rs +++ b/core/lib/dal/src/pruning_dal/mod.rs @@ -1,25 +1,43 @@ use std::ops; use zksync_db_connection::{connection::Connection, error::DalResult, instrument::InstrumentExt}; -use zksync_types::{L1BatchNumber, L2BlockNumber}; +use zksync_types::{L1BatchNumber, L2BlockNumber, H256}; use crate::Core; #[cfg(test)] mod tests; -#[derive(Debug)] -pub struct PruningDal<'a, 'c> { - pub(crate) storage: &'a mut Connection<'c, Core>, +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct SoftPruningInfo { + pub l1_batch: L1BatchNumber, + pub l2_block: L2BlockNumber, +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct HardPruningInfo { + pub l1_batch: L1BatchNumber, + pub l2_block: L2BlockNumber, + /// May be set to `None` for old pruning logs. + pub l1_batch_root_hash: Option, } /// Information about Postgres pruning. #[derive(Debug, Clone, Copy, Default, PartialEq)] pub struct PruningInfo { - pub last_soft_pruned_l1_batch: Option, - pub last_soft_pruned_l2_block: Option, - pub last_hard_pruned_l1_batch: Option, - pub last_hard_pruned_l2_block: Option, + /// Information about last soft pruning. Soft pruning is expected to be ahead or equal to hard pruning. + pub last_soft_pruned: Option, + /// Information about last hard pruning. + pub last_hard_pruned: Option, +} + +impl PruningInfo { + /// Returns `true` iff pruning is caught up, i.e., all soft-pruned data is hard-pruned. + pub fn is_caught_up(&self) -> bool { + let soft_pruned_l1_batch = self.last_soft_pruned.map(|info| info.l1_batch); + let hard_pruned_l1_batch = self.last_hard_pruned.map(|info| info.l1_batch); + soft_pruned_l1_batch == hard_pruned_l1_batch + } } /// Statistics about a single hard pruning iteration. @@ -33,6 +51,44 @@ pub struct HardPruningStats { pub deleted_l2_to_l1_logs: u64, } +#[derive(Debug)] +struct StoragePruningInfo { + last_soft_pruned_l1_batch: Option, + last_soft_pruned_l2_block: Option, + last_hard_pruned_l1_batch: Option, + last_hard_pruned_l2_block: Option, + last_hard_pruned_batch_root_hash: Option>, +} + +impl StoragePruningInfo { + fn as_soft(&self) -> Option { + Some(SoftPruningInfo { + l1_batch: L1BatchNumber(self.last_soft_pruned_l1_batch? as u32), + l2_block: L2BlockNumber(self.last_soft_pruned_l2_block? as u32), + }) + } + + fn as_hard(&self) -> Option { + Some(HardPruningInfo { + l1_batch: L1BatchNumber(self.last_hard_pruned_l1_batch? as u32), + l2_block: L2BlockNumber(self.last_hard_pruned_l2_block? as u32), + l1_batch_root_hash: self + .last_hard_pruned_batch_root_hash + .as_deref() + .map(H256::from_slice), + }) + } +} + +impl From for PruningInfo { + fn from(row: StoragePruningInfo) -> Self { + Self { + last_soft_pruned: row.as_soft(), + last_hard_pruned: row.as_hard(), + } + } +} + #[derive(Debug, sqlx::Type)] #[sqlx(type_name = "prune_type")] enum PruneType { @@ -40,9 +96,15 @@ enum PruneType { Hard, } +#[derive(Debug)] +pub struct PruningDal<'a, 'c> { + pub(crate) storage: &'a mut Connection<'c, Core>, +} + impl PruningDal<'_, '_> { pub async fn get_pruning_info(&mut self) -> DalResult { - let pruning_info = sqlx::query!( + let row = sqlx::query_as!( + StoragePruningInfo, r#" WITH soft AS ( @@ -62,7 +124,8 @@ impl PruningDal<'_, '_> { hard AS ( SELECT pruned_l1_batch, - pruned_miniblock + pruned_miniblock, + pruned_l1_batch_root_hash FROM pruning_log WHERE @@ -75,36 +138,24 @@ impl PruningDal<'_, '_> { SELECT soft.pruned_l1_batch AS last_soft_pruned_l1_batch, - soft.pruned_miniblock AS last_soft_pruned_miniblock, + soft.pruned_miniblock AS last_soft_pruned_l2_block, hard.pruned_l1_batch AS last_hard_pruned_l1_batch, - hard.pruned_miniblock AS last_hard_pruned_miniblock + hard.pruned_miniblock AS last_hard_pruned_l2_block, + hard.pruned_l1_batch_root_hash AS last_hard_pruned_batch_root_hash FROM soft FULL JOIN hard ON TRUE "# ) - .map(|row| PruningInfo { - last_soft_pruned_l1_batch: row - .last_soft_pruned_l1_batch - .map(|num| L1BatchNumber(num as u32)), - last_soft_pruned_l2_block: row - .last_soft_pruned_miniblock - .map(|num| L2BlockNumber(num as u32)), - last_hard_pruned_l1_batch: row - .last_hard_pruned_l1_batch - .map(|num| L1BatchNumber(num as u32)), - last_hard_pruned_l2_block: row - .last_hard_pruned_miniblock - .map(|num| L2BlockNumber(num as u32)), - }) .instrument("get_last_soft_pruned_batch") .report_latency() .fetch_optional(self.storage) .await?; - Ok(pruning_info.unwrap_or_default()) + + Ok(row.map(PruningInfo::from).unwrap_or_default()) } - pub async fn soft_prune_batches_range( + pub async fn insert_soft_pruning_log( &mut self, last_l1_batch_to_prune: L1BatchNumber, last_l2_block_to_prune: L2BlockNumber, @@ -137,6 +188,7 @@ impl PruningDal<'_, '_> { Ok(()) } + /// Does not insert pruning logs; the caller is responsible to do this! pub async fn hard_prune_batches_range( &mut self, last_l1_batch_to_prune: L1BatchNumber, @@ -159,42 +211,38 @@ impl PruningDal<'_, '_> { .fetch_one(self.storage) .await?; - // We don't have any L2 blocks available when recovering from a snapshot - let stats = if let Some(first_l2_block_to_prune) = row.first_miniblock_to_prune { - let first_l2_block_to_prune = L2BlockNumber(first_l2_block_to_prune as u32); - - let deleted_events = self - .delete_events(first_l2_block_to_prune..=last_l2_block_to_prune) - .await?; - let deleted_l2_to_l1_logs = self - .delete_l2_to_l1_logs(first_l2_block_to_prune..=last_l2_block_to_prune) - .await?; - let deleted_call_traces = self - .delete_call_traces(first_l2_block_to_prune..=last_l2_block_to_prune) - .await?; - self.clear_transaction_fields(first_l2_block_to_prune..=last_l2_block_to_prune) - .await?; - - let deleted_storage_logs = self - .prune_storage_logs(first_l2_block_to_prune..=last_l2_block_to_prune) - .await?; - let deleted_l1_batches = self.delete_l1_batches(last_l1_batch_to_prune).await?; - let deleted_l2_blocks = self.delete_l2_blocks(last_l2_block_to_prune).await?; - - HardPruningStats { - deleted_l1_batches, - deleted_l2_blocks, - deleted_events, - deleted_l2_to_l1_logs, - deleted_call_traces, - deleted_storage_logs, - } - } else { - HardPruningStats::default() + let Some(first_l2_block_to_prune) = row.first_miniblock_to_prune else { + return Ok(HardPruningStats::default()); }; - self.insert_hard_pruning_log(last_l1_batch_to_prune, last_l2_block_to_prune) + let first_l2_block_to_prune = L2BlockNumber(first_l2_block_to_prune as u32); + + let deleted_events = self + .delete_events(first_l2_block_to_prune..=last_l2_block_to_prune) + .await?; + let deleted_l2_to_l1_logs = self + .delete_l2_to_l1_logs(first_l2_block_to_prune..=last_l2_block_to_prune) + .await?; + let deleted_call_traces = self + .delete_call_traces(first_l2_block_to_prune..=last_l2_block_to_prune) .await?; + self.clear_transaction_fields(first_l2_block_to_prune..=last_l2_block_to_prune) + .await?; + + let deleted_storage_logs = self + .prune_storage_logs(first_l2_block_to_prune..=last_l2_block_to_prune) + .await?; + let deleted_l1_batches = self.delete_l1_batches(last_l1_batch_to_prune).await?; + let deleted_l2_blocks = self.delete_l2_blocks(last_l2_block_to_prune).await?; + + let stats = HardPruningStats { + deleted_l1_batches, + deleted_l2_blocks, + deleted_events, + deleted_l2_to_l1_logs, + deleted_call_traces, + deleted_storage_logs, + }; Ok(stats) } @@ -389,10 +437,11 @@ impl PruningDal<'_, '_> { Ok(execution_result.rows_affected()) } - async fn insert_hard_pruning_log( + pub async fn insert_hard_pruning_log( &mut self, last_l1_batch_to_prune: L1BatchNumber, last_l2_block_to_prune: L2BlockNumber, + last_pruned_l1_batch_root_hash: H256, ) -> DalResult<()> { sqlx::query!( r#" @@ -400,15 +449,17 @@ impl PruningDal<'_, '_> { pruning_log ( pruned_l1_batch, pruned_miniblock, + pruned_l1_batch_root_hash, type, created_at, updated_at ) VALUES - ($1, $2, $3, NOW(), NOW()) + ($1, $2, $3, $4, NOW(), NOW()) "#, i64::from(last_l1_batch_to_prune.0), i64::from(last_l2_block_to_prune.0), + last_pruned_l1_batch_root_hash.as_bytes(), PruneType::Hard as PruneType ) .instrument("hard_prune_batches_range#insert_pruning_log") diff --git a/core/lib/dal/src/pruning_dal/tests.rs b/core/lib/dal/src/pruning_dal/tests.rs index 70dda48d8c82..14f664a401fe 100644 --- a/core/lib/dal/src/pruning_dal/tests.rs +++ b/core/lib/dal/src/pruning_dal/tests.rs @@ -96,6 +96,13 @@ async fn insert_l1_batch(conn: &mut Connection<'_, Core>, l1_batch_number: L1Bat .insert_mock_l1_batch(&header) .await .unwrap(); + conn.blocks_dal() + .set_l1_batch_hash( + l1_batch_number, + H256::from_low_u64_be(l1_batch_number.0.into()), + ) + .await + .unwrap(); } async fn insert_realistic_l1_batches(conn: &mut Connection<'_, Core>, l1_batches_count: u32) { @@ -121,11 +128,11 @@ async fn insert_realistic_l1_batches(conn: &mut Connection<'_, Core>, l1_batches } } -async fn assert_l1_batch_objects_exists( +async fn assert_l1_batches_exist( conn: &mut Connection<'_, Core>, l1_batches_range: ops::RangeInclusive, ) { - for l1_batch_number in l1_batches_range.start().0..l1_batches_range.end().0 { + for l1_batch_number in l1_batches_range.start().0..=l1_batches_range.end().0 { let l1_batch_number = L1BatchNumber(l1_batch_number); assert!(conn .blocks_dal() @@ -150,7 +157,7 @@ async fn assert_l1_batch_objects_exists( } } -async fn assert_l1_batch_objects_dont_exist( +async fn assert_l1_batches_not_exist( conn: &mut Connection<'_, Core>, l1_batches_range: ops::RangeInclusive, ) { @@ -159,7 +166,7 @@ async fn assert_l1_batch_objects_dont_exist( .dump_all_storage_logs_for_tests() .await; - for l1_batch_number in l1_batches_range.start().0..l1_batches_range.end().0 { + for l1_batch_number in l1_batches_range.start().0..=l1_batches_range.end().0 { let l1_batch_number = L1BatchNumber(l1_batch_number); let mut l2_block_number = L2BlockNumber(l1_batch_number.0 * 2); assert!(conn @@ -204,55 +211,60 @@ async fn soft_pruning_works() { assert_eq!( PruningInfo { - last_soft_pruned_l2_block: None, - last_soft_pruned_l1_batch: None, - last_hard_pruned_l2_block: None, - last_hard_pruned_l1_batch: None + last_soft_pruned: None, + last_hard_pruned: None, }, transaction.pruning_dal().get_pruning_info().await.unwrap() ); transaction .pruning_dal() - .soft_prune_batches_range(L1BatchNumber(5), L2BlockNumber(11)) + .insert_soft_pruning_log(L1BatchNumber(5), L2BlockNumber(11)) .await .unwrap(); assert_eq!( PruningInfo { - last_soft_pruned_l2_block: Some(L2BlockNumber(11)), - last_soft_pruned_l1_batch: Some(L1BatchNumber(5)), - last_hard_pruned_l2_block: None, - last_hard_pruned_l1_batch: None + last_soft_pruned: Some(SoftPruningInfo { + l2_block: L2BlockNumber(11), + l1_batch: L1BatchNumber(5), + }), + last_hard_pruned: None, }, transaction.pruning_dal().get_pruning_info().await.unwrap() ); transaction .pruning_dal() - .soft_prune_batches_range(L1BatchNumber(10), L2BlockNumber(21)) + .insert_soft_pruning_log(L1BatchNumber(10), L2BlockNumber(21)) .await .unwrap(); assert_eq!( PruningInfo { - last_soft_pruned_l2_block: Some(L2BlockNumber(21)), - last_soft_pruned_l1_batch: Some(L1BatchNumber(10)), - last_hard_pruned_l2_block: None, - last_hard_pruned_l1_batch: None + last_soft_pruned: Some(SoftPruningInfo { + l2_block: L2BlockNumber(21), + l1_batch: L1BatchNumber(10), + }), + last_hard_pruned: None, }, transaction.pruning_dal().get_pruning_info().await.unwrap() ); transaction .pruning_dal() - .hard_prune_batches_range(L1BatchNumber(10), L2BlockNumber(21)) + .insert_hard_pruning_log(L1BatchNumber(10), L2BlockNumber(21), H256::repeat_byte(23)) .await .unwrap(); assert_eq!( PruningInfo { - last_soft_pruned_l2_block: Some(L2BlockNumber(21)), - last_soft_pruned_l1_batch: Some(L1BatchNumber(10)), - last_hard_pruned_l2_block: Some(L2BlockNumber(21)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(10)) + last_soft_pruned: Some(SoftPruningInfo { + l2_block: L2BlockNumber(21), + l1_batch: L1BatchNumber(10), + }), + last_hard_pruned: Some(HardPruningInfo { + l2_block: L2BlockNumber(21), + l1_batch: L1BatchNumber(10), + l1_batch_root_hash: Some(H256::repeat_byte(23)), + }), }, transaction.pruning_dal().get_pruning_info().await.unwrap() ); @@ -362,7 +374,7 @@ async fn storage_logs_pruning_works_correctly() { let stats = transaction .pruning_dal() - .hard_prune_batches_range(L1BatchNumber(10), L2BlockNumber(21)) + .hard_prune_batches_range(L1BatchNumber(9), L2BlockNumber(19)) .await .unwrap(); let actual_logs = transaction @@ -393,13 +405,13 @@ async fn l1_batches_can_be_hard_pruned() { let mut transaction = conn.start_transaction().await.unwrap(); insert_realistic_l1_batches(&mut transaction, 10).await; - assert_l1_batch_objects_exists(&mut transaction, L1BatchNumber(1)..=L1BatchNumber(10)).await; + assert_l1_batches_exist(&mut transaction, L1BatchNumber(1)..=L1BatchNumber(9)).await; assert!(transaction .pruning_dal() .get_pruning_info() .await .unwrap() - .last_hard_pruned_l1_batch + .last_hard_pruned .is_none()); transaction @@ -408,21 +420,12 @@ async fn l1_batches_can_be_hard_pruned() { .await .unwrap(); - assert_l1_batch_objects_dont_exist(&mut transaction, L1BatchNumber(1)..=L1BatchNumber(5)).await; - assert_l1_batch_objects_exists(&mut transaction, L1BatchNumber(6)..=L1BatchNumber(10)).await; - assert_eq!( - Some(L1BatchNumber(5)), - transaction - .pruning_dal() - .get_pruning_info() - .await - .unwrap() - .last_hard_pruned_l1_batch - ); + assert_l1_batches_not_exist(&mut transaction, L1BatchNumber(1)..=L1BatchNumber(5)).await; + assert_l1_batches_exist(&mut transaction, L1BatchNumber(6)..=L1BatchNumber(9)).await; let stats = transaction .pruning_dal() - .hard_prune_batches_range(L1BatchNumber(10), L2BlockNumber(21)) + .hard_prune_batches_range(L1BatchNumber(9), L2BlockNumber(19)) .await .unwrap(); assert_eq!(stats.deleted_l1_batches, 4); @@ -430,17 +433,7 @@ async fn l1_batches_can_be_hard_pruned() { assert_eq!(stats.deleted_events, 40); assert_eq!(stats.deleted_l2_to_l1_logs, 40); - assert_l1_batch_objects_dont_exist(&mut transaction, L1BatchNumber(1)..=L1BatchNumber(10)) - .await; - assert_eq!( - Some(L1BatchNumber(10)), - transaction - .pruning_dal() - .get_pruning_info() - .await - .unwrap() - .last_hard_pruned_l1_batch - ); + assert_l1_batches_not_exist(&mut transaction, L1BatchNumber(1)..=L1BatchNumber(9)).await; } #[tokio::test] diff --git a/core/lib/snapshots_applier/src/lib.rs b/core/lib/snapshots_applier/src/lib.rs index 2c68b56ca5c6..f75fb2917b8e 100644 --- a/core/lib/snapshots_applier/src/lib.rs +++ b/core/lib/snapshots_applier/src/lib.rs @@ -725,16 +725,17 @@ impl<'a> SnapshotsApplier<'a> { // This allows to not deal with the corner cases when a node was recovered from a snapshot, but its pruning log is empty. storage_transaction .pruning_dal() - .soft_prune_batches_range( + .insert_soft_pruning_log( this.applied_snapshot_status.l1_batch_number, this.applied_snapshot_status.l2_block_number, ) .await?; storage_transaction .pruning_dal() - .hard_prune_batches_range( + .insert_hard_pruning_log( this.applied_snapshot_status.l1_batch_number, this.applied_snapshot_status.l2_block_number, + this.applied_snapshot_status.l1_batch_root_hash, ) .await?; } diff --git a/core/node/api_server/src/execution_sandbox/mod.rs b/core/node/api_server/src/execution_sandbox/mod.rs index b560d161ab52..bcba200f5ebc 100644 --- a/core/node/api_server/src/execution_sandbox/mod.rs +++ b/core/node/api_server/src/execution_sandbox/mod.rs @@ -228,9 +228,8 @@ impl BlockStartInfo { storage: &mut Connection<'_, Core>, ) -> anyhow::Result { let cached_pruning_info = self.get_pruning_info(storage).await?; - let last_block = cached_pruning_info.last_soft_pruned_l2_block; - if let Some(L2BlockNumber(last_block)) = last_block { - return Ok(L2BlockNumber(last_block + 1)); + if let Some(pruned) = cached_pruning_info.last_soft_pruned { + return Ok(pruned.l2_block + 1); } Ok(L2BlockNumber(0)) } @@ -240,9 +239,8 @@ impl BlockStartInfo { storage: &mut Connection<'_, Core>, ) -> anyhow::Result { let cached_pruning_info = self.get_pruning_info(storage).await?; - let last_batch = cached_pruning_info.last_soft_pruned_l1_batch; - if let Some(L1BatchNumber(last_block)) = last_batch { - return Ok(L1BatchNumber(last_block + 1)); + if let Some(pruned) = cached_pruning_info.last_soft_pruned { + return Ok(pruned.l1_batch + 1); } Ok(L1BatchNumber(0)) } diff --git a/core/node/consensus/src/storage/testonly.rs b/core/node/consensus/src/storage/testonly.rs index 0f29e2468267..295ae4fc1790 100644 --- a/core/node/consensus/src/storage/testonly.rs +++ b/core/node/consensus/src/storage/testonly.rs @@ -247,15 +247,20 @@ impl ConnectionPool { .await .wrap("get_l2_block_range_of_l1_batch()")? .context("batch not found")?; - let last_batch = L1BatchNumber(last_batch.0.try_into().context("oveflow")?); - let last_block = L2BlockNumber(last_block.0.try_into().context("oveflow")?); + let last_batch = L1BatchNumber(last_batch.0.try_into().context("overflow")?); + let last_batch_root_hash = ctx + .wait(conn.0.blocks_dal().get_l1_batch_state_root(last_batch)) + .await? + .context("get_l1_batch_state_root()")? + .unwrap_or_default(); + let last_block = L2BlockNumber(last_block.0.try_into().context("overflow")?); ctx.wait( conn.0 .pruning_dal() - .soft_prune_batches_range(last_batch, last_block), + .insert_soft_pruning_log(last_batch, last_block), ) .await? - .context("soft_prune_batches_range()")?; + .context("insert_soft_pruning_log()")?; ctx.wait( conn.0 .pruning_dal() @@ -263,6 +268,13 @@ impl ConnectionPool { ) .await? .context("hard_prune_batches_range()")?; + ctx.wait(conn.0.pruning_dal().insert_hard_pruning_log( + last_batch, + last_block, + last_batch_root_hash, + )) + .await? + .context("insert_hard_pruning_log()")?; Ok(()) } } diff --git a/core/node/db_pruner/src/lib.rs b/core/node/db_pruner/src/lib.rs index 4b4a53c68aa0..6ec8b2ce4602 100644 --- a/core/node/db_pruner/src/lib.rs +++ b/core/node/db_pruner/src/lib.rs @@ -8,7 +8,10 @@ use std::{ use anyhow::Context as _; use serde::{Deserialize, Serialize}; use tokio::sync::watch; -use zksync_dal::{pruning_dal::PruningInfo, Connection, ConnectionPool, Core, CoreDal}; +use zksync_dal::{ + pruning_dal::{HardPruningInfo, PruningInfo, SoftPruningInfo}, + Connection, ConnectionPool, Core, CoreDal, +}; use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_types::{L1BatchNumber, L2BlockNumber}; @@ -53,10 +56,10 @@ struct DbPrunerHealth { impl From for DbPrunerHealth { fn from(info: PruningInfo) -> Self { Self { - last_soft_pruned_l1_batch: info.last_soft_pruned_l1_batch, - last_soft_pruned_l2_block: info.last_soft_pruned_l2_block, - last_hard_pruned_l1_batch: info.last_hard_pruned_l1_batch, - last_hard_pruned_l2_block: info.last_hard_pruned_l2_block, + last_soft_pruned_l1_batch: info.last_soft_pruned.map(|info| info.l1_batch), + last_soft_pruned_l2_block: info.last_soft_pruned.map(|info| info.l2_block), + last_hard_pruned_l1_batch: info.last_hard_pruned.map(|info| info.l1_batch), + last_hard_pruned_l2_block: info.last_hard_pruned.map(|info| info.l2_block), } } } @@ -188,13 +191,10 @@ impl DbPruner { let mut transaction = storage.start_transaction().await?; let mut current_pruning_info = transaction.pruning_dal().get_pruning_info().await?; - let next_l1_batch_to_prune = L1BatchNumber( - current_pruning_info - .last_soft_pruned_l1_batch - .unwrap_or(L1BatchNumber(0)) - .0 - + self.config.pruned_batch_chunk_size, - ); + let next_l1_batch_to_prune = current_pruning_info + .last_soft_pruned + .map_or(L1BatchNumber(0), |info| info.l1_batch) + + self.config.pruned_batch_chunk_size; if !self.is_l1_batch_prunable(next_l1_batch_to_prune).await { METRICS.pruning_chunk_duration[&PruneType::NoOp].observe(start.elapsed()); return Ok(false); @@ -207,7 +207,7 @@ impl DbPruner { .with_context(|| format!("L1 batch #{next_l1_batch_to_prune} is ready to be pruned, but has no L2 blocks"))?; transaction .pruning_dal() - .soft_prune_batches_range(next_l1_batch_to_prune, next_l2_block_to_prune) + .insert_soft_pruning_log(next_l1_batch_to_prune, next_l2_block_to_prune) .await?; transaction.commit().await?; @@ -218,8 +218,10 @@ impl DbPruner { "Soft pruned db l1_batches up to {next_l1_batch_to_prune} and L2 blocks up to {next_l2_block_to_prune}, operation took {latency:?}", ); - current_pruning_info.last_soft_pruned_l1_batch = Some(next_l1_batch_to_prune); - current_pruning_info.last_soft_pruned_l2_block = Some(next_l2_block_to_prune); + current_pruning_info.last_soft_pruned = Some(SoftPruningInfo { + l1_batch: next_l1_batch_to_prune, + l2_block: next_l2_block_to_prune, + }); self.update_health(current_pruning_info); Ok(true) } @@ -233,20 +235,26 @@ impl DbPruner { let mut transaction = storage.start_transaction().await?; let mut current_pruning_info = transaction.pruning_dal().get_pruning_info().await?; - let last_soft_pruned_l1_batch = - current_pruning_info.last_soft_pruned_l1_batch.with_context(|| { - format!("bogus pruning info {current_pruning_info:?}: trying to hard-prune data, but there is no soft-pruned L1 batch") - })?; - let last_soft_pruned_l2_block = - current_pruning_info.last_soft_pruned_l2_block.with_context(|| { - format!("bogus pruning info {current_pruning_info:?}: trying to hard-prune data, but there is no soft-pruned L2 block") + let soft_pruned = current_pruning_info.last_soft_pruned.with_context(|| { + format!("bogus pruning info {current_pruning_info:?}: trying to hard-prune data, but there is no soft-pruned data") + })?; + + let last_pruned_l1_batch_root_hash = transaction + .blocks_dal() + .get_l1_batch_state_root(soft_pruned.l1_batch) + .await? + .with_context(|| { + format!( + "hard-pruned L1 batch #{} does not have root hash", + soft_pruned.l1_batch + ) })?; let mut dal = transaction.pruning_dal(); let stats = tokio::select! { result = dal.hard_prune_batches_range( - last_soft_pruned_l1_batch, - last_soft_pruned_l2_block, + soft_pruned.l1_batch, + soft_pruned.l2_block, ) => result?, _ = stop_receiver.changed() => { @@ -258,15 +266,23 @@ impl DbPruner { } }; METRICS.observe_hard_pruning(stats); + + dal.insert_hard_pruning_log( + soft_pruned.l1_batch, + soft_pruned.l2_block, + last_pruned_l1_batch_root_hash, + ) + .await?; transaction.commit().await?; let latency = latency.observe(); - tracing::info!( - "Hard pruned db l1_batches up to {last_soft_pruned_l1_batch} and L2 blocks up to {last_soft_pruned_l2_block}, \ - operation took {latency:?}" - ); - current_pruning_info.last_hard_pruned_l1_batch = Some(last_soft_pruned_l1_batch); - current_pruning_info.last_hard_pruned_l2_block = Some(last_soft_pruned_l2_block); + let hard_pruning_info = HardPruningInfo { + l1_batch: soft_pruned.l1_batch, + l2_block: soft_pruned.l2_block, + l1_batch_root_hash: Some(last_pruned_l1_batch_root_hash), + }; + tracing::info!("Hard pruned data up to {hard_pruning_info:?}, operation took {latency:?}"); + current_pruning_info.last_hard_pruned = Some(hard_pruning_info); self.update_health(current_pruning_info); Ok(PruningIterationOutcome::Pruned) } @@ -280,9 +296,7 @@ impl DbPruner { self.update_health(current_pruning_info); // If this `if` is not entered, it means that the node has restarted after soft pruning - if current_pruning_info.last_soft_pruned_l1_batch - == current_pruning_info.last_hard_pruned_l1_batch - { + if current_pruning_info.is_caught_up() { let pruning_done = self.soft_prune(&mut storage).await?; if !pruning_done { return Ok(PruningIterationOutcome::NoOp); diff --git a/core/node/db_pruner/src/tests.rs b/core/node/db_pruner/src/tests.rs index 99fbada423dc..099914541fee 100644 --- a/core/node/db_pruner/src/tests.rs +++ b/core/node/db_pruner/src/tests.rs @@ -12,8 +12,7 @@ use zksync_node_test_utils::{ l1_batch_metadata_to_commitment_artifacts, }; use zksync_types::{ - aggregated_operations::AggregatedActionType, block::L2BlockHeader, Address, L2BlockNumber, - ProtocolVersion, H256, + aggregated_operations::AggregatedActionType, L2BlockNumber, ProtocolVersion, H256, }; use super::*; @@ -95,8 +94,8 @@ async fn is_l1_batch_prunable_works() { async fn insert_l2_blocks( conn: &mut Connection<'_, Core>, - l1_batches_count: u64, - l2_blocks_per_batch: u64, + l1_batches_count: u32, + l2_blocks_per_batch: u32, ) { conn.protocol_versions_dal() .save_protocol_version_with_tx(&ProtocolVersion::default()) @@ -104,36 +103,31 @@ async fn insert_l2_blocks( .unwrap(); for l1_batch_number in 0..l1_batches_count { + let l1_batch_number = L1BatchNumber(l1_batch_number); for l2_block_index in 0..l2_blocks_per_batch { - let l2_block_number = - L2BlockNumber((l1_batch_number * l2_blocks_per_batch + l2_block_index) as u32); - let l2_block_header = L2BlockHeader { - number: l2_block_number, - timestamp: 0, - hash: H256::from_low_u64_be(u64::from(l2_block_number.0)), - l1_tx_count: 0, - l2_tx_count: 0, - fee_account_address: Address::repeat_byte(1), - base_fee_per_gas: 0, - gas_per_pubdata_limit: 0, - batch_fee_input: Default::default(), - base_system_contracts_hashes: Default::default(), - protocol_version: Some(Default::default()), - virtual_blocks: 0, - gas_limit: 0, - logs_bloom: Default::default(), - pubdata_params: Default::default(), - }; + let l2_block_number = l1_batch_number.0 * l2_blocks_per_batch + l2_block_index; + let l2_block_header = create_l2_block(l2_block_number); conn.blocks_dal() .insert_l2_block(&l2_block_header) .await .unwrap(); conn.blocks_dal() - .mark_l2_blocks_as_executed_in_l1_batch(L1BatchNumber(l1_batch_number as u32)) + .mark_l2_blocks_as_executed_in_l1_batch(l1_batch_number) .await .unwrap(); } + + let l1_batch_header = create_l1_batch(l1_batch_number.0); + conn.blocks_dal() + .insert_mock_l1_batch(&l1_batch_header) + .await + .unwrap(); + let root_hash = H256::from_low_u64_be(l1_batch_number.0.into()); + conn.blocks_dal() + .set_l1_batch_hash(l1_batch_number, root_hash) + .await + .unwrap(); } } @@ -144,7 +138,7 @@ async fn hard_pruning_ignores_conditions_checks() { insert_l2_blocks(&mut conn, 10, 2).await; conn.pruning_dal() - .soft_prune_batches_range(L1BatchNumber(2), L2BlockNumber(5)) + .insert_soft_pruning_log(L1BatchNumber(2), L2BlockNumber(5)) .await .unwrap(); @@ -167,24 +161,34 @@ async fn hard_pruning_ignores_conditions_checks() { .unwrap(); assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(2)), - last_soft_pruned_l2_block: Some(L2BlockNumber(5)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(2)), - last_hard_pruned_l2_block: Some(L2BlockNumber(5)), - }, + test_pruning_info(2, 5), conn.pruning_dal().get_pruning_info().await.unwrap() ); let health = health_check.check_health().await; assert_matches!(health.status(), HealthStatus::Ready); } + +fn test_pruning_info(l1_batch: u32, l2_block: u32) -> PruningInfo { + PruningInfo { + last_soft_pruned: Some(SoftPruningInfo { + l1_batch: L1BatchNumber(l1_batch), + l2_block: L2BlockNumber(l2_block), + }), + last_hard_pruned: Some(HardPruningInfo { + l1_batch: L1BatchNumber(l1_batch), + l2_block: L2BlockNumber(l2_block), + l1_batch_root_hash: Some(H256::from_low_u64_be(l1_batch.into())), + }), + } +} + #[test(tokio::test)] async fn pruner_catches_up_with_hard_pruning_up_to_soft_pruning_boundary_ignoring_chunk_size() { let pool = ConnectionPool::::test_pool().await; let mut conn = pool.connection().await.unwrap(); insert_l2_blocks(&mut conn, 10, 2).await; conn.pruning_dal() - .soft_prune_batches_range(L1BatchNumber(2), L2BlockNumber(5)) + .insert_soft_pruning_log(L1BatchNumber(2), L2BlockNumber(5)) .await .unwrap(); @@ -205,12 +209,7 @@ async fn pruner_catches_up_with_hard_pruning_up_to_soft_pruning_boundary_ignorin .unwrap(); assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(2)), - last_soft_pruned_l2_block: Some(L2BlockNumber(5)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(2)), - last_hard_pruned_l2_block: Some(L2BlockNumber(5)), - }, + test_pruning_info(2, 5), conn.pruning_dal().get_pruning_info().await.unwrap() ); @@ -219,12 +218,7 @@ async fn pruner_catches_up_with_hard_pruning_up_to_soft_pruning_boundary_ignorin .await .unwrap(); assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(7)), - last_soft_pruned_l2_block: Some(L2BlockNumber(15)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(7)), - last_hard_pruned_l2_block: Some(L2BlockNumber(15)), - }, + test_pruning_info(7, 15), conn.pruning_dal().get_pruning_info().await.unwrap() ); } @@ -253,12 +247,7 @@ async fn unconstrained_pruner_with_fresh_database() { .unwrap(); assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(3)), - last_soft_pruned_l2_block: Some(L2BlockNumber(7)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(3)), - last_hard_pruned_l2_block: Some(L2BlockNumber(7)), - }, + test_pruning_info(3, 7), conn.pruning_dal().get_pruning_info().await.unwrap() ); @@ -267,12 +256,7 @@ async fn unconstrained_pruner_with_fresh_database() { .await .unwrap(); assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(6)), - last_soft_pruned_l2_block: Some(L2BlockNumber(13)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(6)), - last_hard_pruned_l2_block: Some(L2BlockNumber(13)), - }, + test_pruning_info(6, 13), conn.pruning_dal().get_pruning_info().await.unwrap() ); } @@ -302,12 +286,7 @@ async fn pruning_blocked_after_first_chunk() { .unwrap(); assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(3)), - last_soft_pruned_l2_block: Some(L2BlockNumber(7)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(3)), - last_hard_pruned_l2_block: Some(L2BlockNumber(7)), - }, + test_pruning_info(3, 7), conn.pruning_dal().get_pruning_info().await.unwrap() ); @@ -318,12 +297,7 @@ async fn pruning_blocked_after_first_chunk() { assert_matches!(outcome, PruningIterationOutcome::NoOp); // pruning shouldn't have progressed as chunk 6 cannot be pruned assert_eq!( - PruningInfo { - last_soft_pruned_l1_batch: Some(L1BatchNumber(3)), - last_soft_pruned_l2_block: Some(L2BlockNumber(7)), - last_hard_pruned_l1_batch: Some(L1BatchNumber(3)), - last_hard_pruned_l2_block: Some(L2BlockNumber(7)), - }, + test_pruning_info(3, 7), conn.pruning_dal().get_pruning_info().await.unwrap() ); } diff --git a/core/node/metadata_calculator/src/pruning.rs b/core/node/metadata_calculator/src/pruning.rs index 4ac05e55c302..77e4c30dc1d1 100644 --- a/core/node/metadata_calculator/src/pruning.rs +++ b/core/node/metadata_calculator/src/pruning.rs @@ -101,8 +101,8 @@ impl MerkleTreePruningTask { let pruning_info = storage.pruning_dal().get_pruning_info().await?; drop(storage); - if let Some(l1_batch_number) = pruning_info.last_hard_pruned_l1_batch { - let target_retained_l1_batch_number = l1_batch_number + 1; + if let Some(pruned) = pruning_info.last_hard_pruned { + let target_retained_l1_batch_number = pruned.l1_batch + 1; let target_retained_version = u64::from(target_retained_l1_batch_number.0); let Ok(prev_target_version) = pruner_handle.set_target_retained_version(target_retained_version) @@ -148,7 +148,7 @@ mod tests { use test_casing::test_casing; use zksync_node_genesis::{insert_genesis_batch, GenesisParams}; use zksync_node_test_utils::prepare_recovery_snapshot; - use zksync_types::{L1BatchNumber, L2BlockNumber}; + use zksync_types::{L1BatchNumber, L2BlockNumber, H256}; use super::*; use crate::{ @@ -194,6 +194,11 @@ mod tests { .hard_prune_batches_range(L1BatchNumber(3), L2BlockNumber(3)) .await .unwrap(); + storage + .pruning_dal() + .insert_hard_pruning_log(L1BatchNumber(3), L2BlockNumber(3), H256::zero()) + .await + .unwrap(); while reader.clone().info().await.min_l1_batch_number.unwrap() <= L1BatchNumber(3) { tokio::time::sleep(POLL_INTERVAL).await; @@ -322,9 +327,10 @@ mod tests { // Prune first 3 created batches in Postgres. storage .pruning_dal() - .hard_prune_batches_range( + .insert_hard_pruning_log( snapshot_recovery.l1_batch_number + 3, snapshot_recovery.l2_block_number + 3, + H256::zero(), // not used ) .await .unwrap(); diff --git a/core/node/metadata_calculator/src/recovery/mod.rs b/core/node/metadata_calculator/src/recovery/mod.rs index ce7207471791..372cbc96a6df 100644 --- a/core/node/metadata_calculator/src/recovery/mod.rs +++ b/core/node/metadata_calculator/src/recovery/mod.rs @@ -132,7 +132,7 @@ impl InitParameters { let (l1_batch, l2_block); let mut expected_root_hash = None; - match (recovery_status, pruning_info.last_hard_pruned_l2_block) { + match (recovery_status, pruning_info.last_hard_pruned) { (Some(recovery), None) => { tracing::warn!( "Snapshot recovery {recovery:?} is present on the node, but pruning info is empty; assuming no pruning happened" @@ -141,21 +141,20 @@ impl InitParameters { l2_block = recovery.l2_block_number; expected_root_hash = Some(recovery.l1_batch_root_hash); } - (Some(recovery), Some(pruned_l2_block)) => { + (Some(recovery), Some(pruned)) => { // We have both recovery and some pruning on top of it. - l2_block = pruned_l2_block.max(recovery.l2_block_number); - l1_batch = pruning_info - .last_hard_pruned_l1_batch - .with_context(|| format!("malformed pruning info: {pruning_info:?}"))?; - if l1_batch == recovery.l1_batch_number { + l2_block = pruned.l2_block.max(recovery.l2_block_number); + l1_batch = pruned.l1_batch; + if let Some(root_hash) = pruned.l1_batch_root_hash { + expected_root_hash = Some(root_hash); + } else if l1_batch == recovery.l1_batch_number { expected_root_hash = Some(recovery.l1_batch_root_hash); } } - (None, Some(pruned_l2_block)) => { - l2_block = pruned_l2_block; - l1_batch = pruning_info - .last_hard_pruned_l1_batch - .with_context(|| format!("malformed pruning info: {pruning_info:?}"))?; + (None, Some(pruned)) => { + l2_block = pruned.l2_block; + l1_batch = pruned.l1_batch; + expected_root_hash = pruned.l1_batch_root_hash; } (None, None) => return Ok(None), }; @@ -384,9 +383,9 @@ impl AsyncTreeRecovery { snapshot_l2_block: L2BlockNumber, ) -> anyhow::Result<()> { let pruning_info = storage.pruning_dal().get_pruning_info().await?; - if let Some(last_hard_pruned_l2_block) = pruning_info.last_hard_pruned_l2_block { + if let Some(pruned) = pruning_info.last_hard_pruned { anyhow::ensure!( - last_hard_pruned_l2_block == snapshot_l2_block, + pruned.l2_block == snapshot_l2_block, "Additional data was pruned compared to tree recovery L2 block #{snapshot_l2_block}: {pruning_info:?}. \ Continuing recovery is impossible; to recover the tree, drop its RocksDB directory, stop pruning and restart recovery" ); diff --git a/core/node/metadata_calculator/src/recovery/tests.rs b/core/node/metadata_calculator/src/recovery/tests.rs index 4b2ba578a5b6..8b5371441162 100644 --- a/core/node/metadata_calculator/src/recovery/tests.rs +++ b/core/node/metadata_calculator/src/recovery/tests.rs @@ -1,6 +1,6 @@ //! Tests for metadata calculator snapshot recovery. -use std::{collections::HashMap, path::Path, sync::Mutex}; +use std::{path::Path, sync::Mutex}; use assert_matches::assert_matches; use tempfile::TempDir; @@ -16,7 +16,7 @@ use zksync_merkle_tree::{domain::ZkSyncTree, recovery::PersistenceThreadHandle, use zksync_node_genesis::{insert_genesis_batch, GenesisParams}; use zksync_node_test_utils::prepare_recovery_snapshot; use zksync_storage::RocksDB; -use zksync_types::{L1BatchNumber, U256}; +use zksync_types::L1BatchNumber; use super::*; use crate::{ @@ -28,6 +28,8 @@ use crate::{ MetadataCalculator, MetadataCalculatorConfig, }; +impl HandleRecoveryEvent for () {} + #[test] fn calculating_chunk_count() { let mut snapshot = InitParameters { @@ -116,9 +118,16 @@ async fn prune_storage(pool: &ConnectionPool, pruned_l1_batch: L1BatchNumb .await .unwrap() .expect("L1 batch not present in Postgres"); + let root_hash = storage + .blocks_dal() + .get_l1_batch_state_root(pruned_l1_batch) + .await + .unwrap() + .expect("L1 batch does not have root hash"); + storage .pruning_dal() - .soft_prune_batches_range(pruned_l1_batch, pruned_l2_block) + .insert_soft_pruning_log(pruned_l1_batch, pruned_l2_block) .await .unwrap(); let pruning_stats = storage @@ -130,6 +139,11 @@ async fn prune_storage(pool: &ConnectionPool, pruned_l1_batch: L1BatchNumb pruning_stats.deleted_l1_batches > 0 && pruning_stats.deleted_l2_blocks > 0, "{pruning_stats:?}" ); + storage + .pruning_dal() + .insert_hard_pruning_log(pruned_l1_batch, pruned_l2_block, root_hash) + .await + .unwrap(); } #[tokio::test] @@ -425,8 +439,7 @@ async fn entire_recovery_workflow(case: RecoveryWorkflowCase) { calculator_task.await.expect("calculator panicked").unwrap(); } -/// `pruned_batches == 0` is a sanity check. -#[test_casing(4, [0, 1, 2, 4])] +#[test_casing(3, [1, 2, 4])] #[tokio::test] async fn recovery_with_further_pruning(pruned_batches: u32) { const NEW_BATCH_COUNT: usize = 5; @@ -459,41 +472,80 @@ async fn recovery_with_further_pruning(pruned_batches: u32) { .await; db_transaction.commit().await.unwrap(); - let all_logs = storage - .storage_logs_dal() - .dump_all_storage_logs_for_tests() - .await; - assert_eq!(all_logs.len(), 400); - let initial_writes = storage - .storage_logs_dedup_dal() - .dump_all_initial_writes_for_tests() - .await; - let initial_writes: HashMap<_, _> = initial_writes - .into_iter() - .map(|write| (write.hashed_key, write.index)) - .collect(); - drop(storage); + // Run the first tree instance to compute root hashes for all batches. + let temp_dir = TempDir::new().expect("failed get temporary directory for RocksDB"); + let (calculator, _) = + setup_calculator(&temp_dir.path().join("first"), pool.clone(), true).await; + let expected_root_hash = run_calculator(calculator).await; - let instructions: Vec<_> = all_logs - .iter() - .map(|log| { - let leaf_index = initial_writes[&log.hashed_key]; - let key = U256::from_little_endian(log.hashed_key.as_bytes()); - TreeInstruction::write(key, leaf_index, log.value) - }) - .collect(); - let expected_root_hash = ZkSyncTree::process_genesis_batch(&instructions).root_hash; - - if pruned_batches > 0 { - prune_storage(&pool, snapshot_recovery.l1_batch_number + pruned_batches).await; - } + prune_storage(&pool, snapshot_recovery.l1_batch_number + pruned_batches).await; // Create a new tree instance. It should recover and process the remaining batches. let temp_dir = TempDir::new().expect("failed get temporary directory for RocksDB"); - let (calculator, _) = setup_calculator(temp_dir.path(), pool, true).await; + let (calculator, _) = setup_calculator(&temp_dir.path().join("new"), pool, true).await; assert_eq!(run_calculator(calculator).await, expected_root_hash); } +#[tokio::test] +async fn detecting_root_hash_mismatch_after_pruning() { + let pool = ConnectionPool::::test_pool().await; + let snapshot_logs = gen_storage_logs(100..300, 1).pop().unwrap(); + let mut storage = pool.connection().await.unwrap(); + let mut db_transaction = storage.start_transaction().await.unwrap(); + let snapshot_recovery = prepare_recovery_snapshot( + &mut db_transaction, + L1BatchNumber(23), + L2BlockNumber(42), + &snapshot_logs, + ) + .await; + + let logs = gen_storage_logs(200..400, 5); + extend_db_state_from_l1_batch( + &mut db_transaction, + snapshot_recovery.l1_batch_number + 1, + snapshot_recovery.l2_block_number + 1, + logs, + ) + .await; + // Intentionally add an incorrect root has of the batch to be pruned. + db_transaction + .blocks_dal() + .set_l1_batch_hash(snapshot_recovery.l1_batch_number + 1, H256::repeat_byte(42)) + .await + .unwrap(); + db_transaction.commit().await.unwrap(); + + prune_storage(&pool, snapshot_recovery.l1_batch_number + 1).await; + + let temp_dir = TempDir::new().expect("failed get temporary directory for RocksDB"); + let config = MetadataCalculatorRecoveryConfig::default(); + let (tree, _) = create_tree_recovery(temp_dir.path(), L1BatchNumber(1), &config).await; + let (_stop_sender, stop_receiver) = watch::channel(false); + let recovery_options = RecoveryOptions { + chunk_count: 5, + concurrency_limit: 1, + events: Box::new(()), + }; + let init_params = InitParameters::new(&pool, &config) + .await + .unwrap() + .expect("no init params"); + assert_eq!(init_params.expected_root_hash, Some(H256::repeat_byte(42))); + + let err = tree + .recover(init_params, recovery_options, &pool, &stop_receiver) + .await + .unwrap_err(); + let err = format!("{err:#}").to_lowercase(); + assert!(err.contains("root hash"), "{err}"); + + // Because of an abrupt error, terminating a RocksDB instance needs to be handled explicitly. + tokio::task::spawn_blocking(RocksDB::await_rocksdb_termination) + .await + .unwrap(); +} + #[derive(Debug)] struct PruningEventListener { pool: ConnectionPool, @@ -519,6 +571,11 @@ async fn pruning_during_recovery_is_detected() { let logs = gen_storage_logs(200..400, 5); extend_db_state(&mut storage, logs).await; drop(storage); + + // Set root hashes for all L1 batches in Postgres. + let (calculator, _) = + setup_calculator(&temp_dir.path().join("first"), pool.clone(), true).await; + run_calculator(calculator).await; prune_storage(&pool, L1BatchNumber(1)).await; let tree_path = temp_dir.path().join("recovery"); diff --git a/core/node/metadata_calculator/src/tests.rs b/core/node/metadata_calculator/src/tests.rs index 9717ce5682ce..ff939d1ae582 100644 --- a/core/node/metadata_calculator/src/tests.rs +++ b/core/node/metadata_calculator/src/tests.rs @@ -402,7 +402,7 @@ async fn error_on_pruned_next_l1_batch(sealed_protective_reads: bool) { extend_db_state(&mut storage, new_logs).await; storage .pruning_dal() - .soft_prune_batches_range(L1BatchNumber(5), L2BlockNumber(5)) + .insert_soft_pruning_log(L1BatchNumber(5), L2BlockNumber(5)) .await .unwrap(); storage @@ -410,6 +410,11 @@ async fn error_on_pruned_next_l1_batch(sealed_protective_reads: bool) { .hard_prune_batches_range(L1BatchNumber(5), L2BlockNumber(5)) .await .unwrap(); + storage + .pruning_dal() + .insert_hard_pruning_log(L1BatchNumber(5), L2BlockNumber(5), H256::zero()) + .await + .unwrap(); // Sanity check: there should be no pruned batch headers. let next_l1_batch_header = storage .blocks_dal() @@ -696,7 +701,7 @@ async fn setup_calculator_with_options( ) -> MetadataCalculator { let mut storage = pool.connection().await.unwrap(); let pruning_info = storage.pruning_dal().get_pruning_info().await.unwrap(); - let has_pruning_logs = pruning_info.last_hard_pruned_l1_batch.is_some(); + let has_pruning_logs = pruning_info.last_hard_pruned.is_some(); if !has_pruning_logs && storage.blocks_dal().is_genesis_needed().await.unwrap() { insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await diff --git a/core/node/metadata_calculator/src/updater.rs b/core/node/metadata_calculator/src/updater.rs index 17fd5d900eab..2758bd1501c0 100644 --- a/core/node/metadata_calculator/src/updater.rs +++ b/core/node/metadata_calculator/src/updater.rs @@ -186,7 +186,7 @@ impl TreeUpdater { ) -> anyhow::Result<()> { let pruning_info = storage.pruning_dal().get_pruning_info().await?; anyhow::ensure!( - Some(l1_batch_number) > pruning_info.last_soft_pruned_l1_batch, + pruning_info.last_soft_pruned.map_or(true, |info| info.l1_batch < l1_batch_number), "L1 batch #{l1_batch_number}, next to be processed by the tree, is pruned; the tree cannot continue operating" ); Ok(()) diff --git a/core/node/test_utils/src/lib.rs b/core/node/test_utils/src/lib.rs index 9a02c18cd235..ac900e72bb6b 100644 --- a/core/node/test_utils/src/lib.rs +++ b/core/node/test_utils/src/lib.rs @@ -382,16 +382,18 @@ pub async fn recover( storage .pruning_dal() - .soft_prune_batches_range(snapshot.l1_batch.number, snapshot.l2_block.number) + .insert_soft_pruning_log(snapshot.l1_batch.number, snapshot.l2_block.number) .await .unwrap(); - storage .pruning_dal() - .hard_prune_batches_range(snapshot.l1_batch.number, snapshot.l2_block.number) + .insert_hard_pruning_log( + snapshot.l1_batch.number, + snapshot.l2_block.number, + snapshot_recovery.l1_batch_root_hash, + ) .await .unwrap(); - storage.commit().await.unwrap(); snapshot_recovery } From 40f8123a67970efbba3519f7954f807958a76cff Mon Sep 17 00:00:00 2001 From: Yury Akudovich Date: Wed, 27 Nov 2024 15:58:45 +0100 Subject: [PATCH 08/35] fix(prover): Create reqwest client only once (#3324) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Create reqwest client only once. Additionally HttpClient exports metric `calls` with all the requests and correct status codes. ## Why ❔ Creating reqwest client is expensive because it initializes TLS, loads certificates, etc. So it should be create only once and reused. Create new internal mod http_client instead of patching zksync_utils because fn `send_request_with_retries` is used only in prover_autoscaler and outdated prover_fri, which will be removed soon. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. ref ZKD-1855 --- .../prover_autoscaler/src/global/queuer.rs | 24 ++--- .../prover_autoscaler/src/global/watcher.rs | 37 ++++---- .../bin/prover_autoscaler/src/http_client.rs | 94 +++++++++++++++++++ .../bin/prover_autoscaler/src/k8s/watcher.rs | 15 ++- .../crates/bin/prover_autoscaler/src/lib.rs | 1 + .../crates/bin/prover_autoscaler/src/main.rs | 24 ++++- .../bin/prover_autoscaler/src/metrics.rs | 2 - 7 files changed, 151 insertions(+), 46 deletions(-) create mode 100644 prover/crates/bin/prover_autoscaler/src/http_client.rs diff --git a/prover/crates/bin/prover_autoscaler/src/global/queuer.rs b/prover/crates/bin/prover_autoscaler/src/global/queuer.rs index baeb5b70a4ef..bc781e793408 100644 --- a/prover/crates/bin/prover_autoscaler/src/global/queuer.rs +++ b/prover/crates/bin/prover_autoscaler/src/global/queuer.rs @@ -3,14 +3,8 @@ use std::{collections::HashMap, ops::Deref}; use anyhow::{Context, Ok}; use reqwest::Method; use zksync_prover_job_monitor::autoscaler_queue_reporter::{QueueReport, VersionedQueueReport}; -use zksync_utils::http_with_retries::send_request_with_retries; -use crate::{ - config::QueueReportFields, - metrics::{AUTOSCALER_METRICS, DEFAULT_ERROR_CODE}, -}; - -const MAX_RETRIES: usize = 5; +use crate::{config::QueueReportFields, http_client::HttpClient}; pub struct Queue(HashMap<(String, QueueReportFields), u64>); @@ -23,6 +17,7 @@ impl Deref for Queue { #[derive(Default)] pub struct Queuer { + http_client: HttpClient, pub prover_job_monitor_url: String, } @@ -40,8 +35,9 @@ fn target_to_queue(target: QueueReportFields, report: &QueueReport) -> u64 { } impl Queuer { - pub fn new(pjm_url: String) -> Self { + pub fn new(http_client: HttpClient, pjm_url: String) -> Self { Self { + http_client, prover_job_monitor_url: pjm_url, } } @@ -50,13 +46,13 @@ impl Queuer { /// list of jobs. pub async fn get_queue(&self, jobs: &[QueueReportFields]) -> anyhow::Result { let url = &self.prover_job_monitor_url; - let response = send_request_with_retries(url, MAX_RETRIES, Method::GET, None, None).await; - let response = response.map_err(|err| { - AUTOSCALER_METRICS.calls[&(url.clone(), DEFAULT_ERROR_CODE)].inc(); - anyhow::anyhow!("Failed fetching queue from URL: {url}: {err:?}") - })?; + let response = self + .http_client + .send_request_with_retries(url, Method::GET, None, None) + .await; + let response = response + .map_err(|err| anyhow::anyhow!("Failed fetching queue from URL: {url}: {err:?}"))?; - AUTOSCALER_METRICS.calls[&(url.clone(), response.status().as_u16())].inc(); let response = response .json::>() .await diff --git a/prover/crates/bin/prover_autoscaler/src/global/watcher.rs b/prover/crates/bin/prover_autoscaler/src/global/watcher.rs index 95b9e32cac5b..9a56471b72d5 100644 --- a/prover/crates/bin/prover_autoscaler/src/global/watcher.rs +++ b/prover/crates/bin/prover_autoscaler/src/global/watcher.rs @@ -8,17 +8,14 @@ use reqwest::{ }; use tokio::sync::Mutex; use url::Url; -use zksync_utils::http_with_retries::send_request_with_retries; use crate::{ agent::{ScaleRequest, ScaleResponse}, cluster_types::{Cluster, Clusters}, - metrics::{AUTOSCALER_METRICS, DEFAULT_ERROR_CODE}, + http_client::HttpClient, task_wiring::Task, }; -const MAX_RETRIES: usize = 5; - #[derive(Default)] pub struct WatchedData { pub clusters: Clusters, @@ -36,6 +33,7 @@ pub fn check_is_ready(v: &Vec) -> Result<()> { #[derive(Default, Clone)] pub struct Watcher { + http_client: HttpClient, /// List of base URLs of all agents. pub cluster_agents: Vec>, pub dry_run: bool, @@ -43,9 +41,10 @@ pub struct Watcher { } impl Watcher { - pub fn new(agent_urls: Vec, dry_run: bool) -> Self { + pub fn new(http_client: HttpClient, agent_urls: Vec, dry_run: bool) -> Self { let size = agent_urls.len(); Self { + http_client, cluster_agents: agent_urls .into_iter() .map(|u| { @@ -92,6 +91,7 @@ impl Watcher { .unwrap() .to_string(); tracing::debug!("Sending scale request to {}, data: {:?}.", url, sr); + let http_client = self.http_client.clone(); tokio::spawn(async move { let mut headers = HeaderMap::new(); headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); @@ -99,19 +99,17 @@ impl Watcher { tracing::info!("Dry-run mode, not sending the request."); return Ok((id, Ok(ScaleResponse::default()))); } - let response = send_request_with_retries( - &url, - MAX_RETRIES, - Method::POST, - Some(headers), - Some(serde_json::to_vec(&sr)?), - ) - .await; + let response = http_client + .send_request_with_retries( + &url, + Method::POST, + Some(headers), + Some(serde_json::to_vec(&sr)?), + ) + .await; let response = response.map_err(|err| { - AUTOSCALER_METRICS.calls[&(url.clone(), DEFAULT_ERROR_CODE)].inc(); anyhow::anyhow!("Failed fetching cluster from url: {url}: {err:?}") })?; - AUTOSCALER_METRICS.calls[&(url, response.status().as_u16())].inc(); let response = response .json::() .await @@ -164,21 +162,20 @@ impl Task for Watcher { .enumerate() .map(|(i, a)| { tracing::debug!("Getting cluster data from agent {}.", a); + let http_client = self.http_client.clone(); tokio::spawn(async move { let url: String = a .clone() .join("/cluster") .context("Failed to join URL with /cluster")? .to_string(); - let response = - send_request_with_retries(&url, MAX_RETRIES, Method::GET, None, None).await; + let response = http_client + .send_request_with_retries(&url, Method::GET, None, None) + .await; let response = response.map_err(|err| { - // TODO: refactor send_request_with_retries to return status. - AUTOSCALER_METRICS.calls[&(url.clone(), DEFAULT_ERROR_CODE)].inc(); anyhow::anyhow!("Failed fetching cluster from url: {url}: {err:?}") })?; - AUTOSCALER_METRICS.calls[&(url, response.status().as_u16())].inc(); let response = response .json::() .await diff --git a/prover/crates/bin/prover_autoscaler/src/http_client.rs b/prover/crates/bin/prover_autoscaler/src/http_client.rs new file mode 100644 index 000000000000..6710ea53a26d --- /dev/null +++ b/prover/crates/bin/prover_autoscaler/src/http_client.rs @@ -0,0 +1,94 @@ +use reqwest::{header::HeaderMap, Client, Error, Method, Response, StatusCode}; +use tokio::time::{sleep, Duration}; + +use crate::metrics::AUTOSCALER_METRICS; + +#[derive(Clone)] +pub struct HttpClient { + client: Client, + max_retries: usize, +} + +impl Default for HttpClient { + fn default() -> Self { + Self { + client: Client::new(), + max_retries: 5, + } + } +} + +#[derive(Debug)] +pub enum HttpError { + ReqwestError(Error), + RetryExhausted(String), +} + +impl HttpClient { + /// Method to send HTTP request with fixed number of retires with exponential back-offs. + pub async fn send_request_with_retries( + &self, + url: &str, + method: Method, + headers: Option, + body: Option>, + ) -> Result { + let mut retries = 0usize; + let mut delay = Duration::from_secs(1); + loop { + let result = self + .send_request(url, method.clone(), headers.clone(), body.clone()) + .await; + AUTOSCALER_METRICS.calls[&( + url.into(), + match result { + Ok(ref response) => response.status().as_u16(), + Err(ref err) => err + .status() + .unwrap_or(StatusCode::INTERNAL_SERVER_ERROR) + .as_u16(), + }, + )] + .inc(); + match result { + Ok(response) if response.status().is_success() => return Ok(response), + Ok(response) => { + tracing::error!("Received non OK http response {:?}", response.status()) + } + Err(err) => tracing::error!("Error while sending http request {:?}", err), + } + + if retries >= self.max_retries { + return Err(HttpError::RetryExhausted(format!( + "All {} http retires failed", + self.max_retries + ))); + } + retries += 1; + sleep(delay).await; + delay = delay.checked_mul(2).unwrap_or(Duration::MAX); + } + } + + async fn send_request( + &self, + url: &str, + method: Method, + headers: Option, + body: Option>, + ) -> Result { + let mut request = self.client.request(method, url); + + if let Some(headers) = headers { + request = request.headers(headers); + } + + if let Some(body) = body { + request = request.body(body); + } + + let request = request.build()?; + let response = self.client.execute(request).await?; + Ok(response) + } +} diff --git a/prover/crates/bin/prover_autoscaler/src/k8s/watcher.rs b/prover/crates/bin/prover_autoscaler/src/k8s/watcher.rs index b8476ab475ab..4730a0259e4c 100644 --- a/prover/crates/bin/prover_autoscaler/src/k8s/watcher.rs +++ b/prover/crates/bin/prover_autoscaler/src/k8s/watcher.rs @@ -13,9 +13,11 @@ use reqwest::{ Method, }; use tokio::sync::Mutex; -use zksync_utils::http_with_retries::send_request_with_retries; -use crate::cluster_types::{Cluster, Deployment, Namespace, Pod, ScaleEvent}; +use crate::{ + cluster_types::{Cluster, Deployment, Namespace, Pod, ScaleEvent}, + http_client::HttpClient, +}; #[derive(Clone)] pub struct Watcher { @@ -23,11 +25,13 @@ pub struct Watcher { pub cluster: Arc>, } -async fn get_cluster_name() -> anyhow::Result { +async fn get_cluster_name(http_client: HttpClient) -> anyhow::Result { let mut headers = HeaderMap::new(); headers.insert("Metadata-Flavor", HeaderValue::from_static("Google")); let url = "http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name"; - let response = send_request_with_retries(url, 5, Method::GET, Some(headers), None).await; + let response = http_client + .send_request_with_retries(url, Method::GET, Some(headers), None) + .await; response .map_err(|err| anyhow::anyhow!("Failed fetching response from url: {url}: {err:?}"))? .text() @@ -37,6 +41,7 @@ async fn get_cluster_name() -> anyhow::Result { impl Watcher { pub async fn new( + http_client: HttpClient, client: kube::Client, cluster_name: Option, namespaces: Vec, @@ -48,7 +53,7 @@ impl Watcher { let cluster_name = match cluster_name { Some(c) => c, - None => get_cluster_name() + None => get_cluster_name(http_client) .await .expect("Load cluster_name from GCP"), }; diff --git a/prover/crates/bin/prover_autoscaler/src/lib.rs b/prover/crates/bin/prover_autoscaler/src/lib.rs index 019fe2b7fb4d..1861f3af10da 100644 --- a/prover/crates/bin/prover_autoscaler/src/lib.rs +++ b/prover/crates/bin/prover_autoscaler/src/lib.rs @@ -2,6 +2,7 @@ pub mod agent; pub(crate) mod cluster_types; pub mod config; pub mod global; +pub mod http_client; pub mod k8s; pub(crate) mod metrics; pub mod task_wiring; diff --git a/prover/crates/bin/prover_autoscaler/src/main.rs b/prover/crates/bin/prover_autoscaler/src/main.rs index 98ffdb49d824..3baf3d13b2d6 100644 --- a/prover/crates/bin/prover_autoscaler/src/main.rs +++ b/prover/crates/bin/prover_autoscaler/src/main.rs @@ -10,6 +10,7 @@ use zksync_prover_autoscaler::{ agent, config::{config_from_yaml, ProverAutoscalerConfig}, global::{self}, + http_client::HttpClient, k8s::{Scaler, Watcher}, task_wiring::TaskRunner, }; @@ -74,6 +75,8 @@ async fn main() -> anyhow::Result<()> { let mut tasks = vec![]; + let http_client = HttpClient::default(); + match opt.job { AutoscalerType::Agent => { tracing::info!("Starting ProverAutoscaler Agent"); @@ -84,8 +87,13 @@ async fn main() -> anyhow::Result<()> { let _ = rustls::crypto::ring::default_provider().install_default(); let client = kube::Client::try_default().await?; - let watcher = - Watcher::new(client.clone(), opt.cluster_name, agent_config.namespaces).await; + let watcher = Watcher::new( + http_client, + client.clone(), + opt.cluster_name, + agent_config.namespaces, + ) + .await; let scaler = Scaler::new(client, agent_config.dry_run); tasks.push(tokio::spawn(watcher.clone().run())); tasks.push(tokio::spawn(agent::run_server( @@ -101,9 +109,15 @@ async fn main() -> anyhow::Result<()> { let interval = scaler_config.scaler_run_interval; let exporter_config = PrometheusExporterConfig::pull(scaler_config.prometheus_port); tasks.push(tokio::spawn(exporter_config.run(stop_receiver.clone()))); - let watcher = - global::watcher::Watcher::new(scaler_config.agents.clone(), scaler_config.dry_run); - let queuer = global::queuer::Queuer::new(scaler_config.prover_job_monitor_url.clone()); + let watcher = global::watcher::Watcher::new( + http_client.clone(), + scaler_config.agents.clone(), + scaler_config.dry_run, + ); + let queuer = global::queuer::Queuer::new( + http_client, + scaler_config.prover_job_monitor_url.clone(), + ); let scaler = global::scaler::Scaler::new(watcher.clone(), queuer, scaler_config); tasks.extend(get_tasks(watcher, scaler, interval, stop_receiver)?); } diff --git a/prover/crates/bin/prover_autoscaler/src/metrics.rs b/prover/crates/bin/prover_autoscaler/src/metrics.rs index 115ae3b74259..775f7ec22abd 100644 --- a/prover/crates/bin/prover_autoscaler/src/metrics.rs +++ b/prover/crates/bin/prover_autoscaler/src/metrics.rs @@ -2,8 +2,6 @@ use vise::{Counter, Gauge, LabeledFamily, Metrics}; use crate::config::Gpu; -pub const DEFAULT_ERROR_CODE: u16 = 500; - #[derive(Debug, Metrics)] #[metrics(prefix = "autoscaler")] pub(crate) struct AutoscalerMetrics { From cbc91e35f84d04f2e4c8e81028596db009e478d1 Mon Sep 17 00:00:00 2001 From: perekopskiy <53865202+perekopskiy@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:34:43 +0200 Subject: [PATCH 09/35] feat: integrate gateway changes for some components (#3274) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Generally moves some code from gateway integration branch into main. High-level list of changes: - `eth_watch`: refactors watcher's client so it can use L2-specific features if gateway is queried. New event processor is added for chains that settle on gateway, it calculates part of merkle proof for L2->L1 logs. - `api`: new method is added to `unstable` namespace that is utilized by the new event processor. This method encapsulates a few storage reads + builds merkle tree. This is a temporary measure and method will likely be removed (that's why it's in unstable namespace) pretty soon after a contract getter that does exactly the same is merged into contracts, replacing unstable_getChainLogProof invocation with a simple `eth_call` - `consistency_checker`, `tree_data_fetcher`: adds support for reading batch commitment from either L1 or GW depending on what the SL is for a batch. - adds support for new format of commitBatches, proveBatches, executeBatches data encoding - bug fixes: `L2_NATIVE_TOKEN_VAULT_ADDRESS` was used instead of `L2_ASSET_ROUTER_ADDRESS` in `core/bin/external_node/src/node_builder.rs`, mixed up if/else branches in `core/node/commitment_generator/src/lib.rs` - some clean up, renaming, refactoring: `resolve_l1_batch_to_l2_block` + `get_block_details` are replaced with just `get_batch_details` in `batch_status_updater`, some code for old protocol versions (pre-boojum or pre-shared-bridge) removed, `l1_` prefix is added to some addresses to avoid confusion ## Why ❔ Finalize and merge some gateway features ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- Cargo.lock | 6 + core/bin/external_node/src/config/mod.rs | 66 +- core/bin/external_node/src/node_builder.rs | 22 +- core/bin/external_node/src/tests/mod.rs | 6 +- core/bin/external_node/src/tests/utils.rs | 3 + core/bin/zksync_server/src/node_builder.rs | 7 +- core/lib/basic_types/src/lib.rs | 2 +- core/lib/basic_types/src/web3/mod.rs | 8 +- core/lib/config/src/configs/en_config.rs | 1 - core/lib/config/src/configs/secrets.rs | 1 + core/lib/config/src/testonly.rs | 3 +- core/lib/constants/src/contracts.rs | 2 + core/lib/constants/src/message_root.rs | 13 +- core/lib/contracts/src/lib.rs | 462 +++++++++- ...90ded732839b9f5bf16042205a730fac07c3a.json | 3 +- ...53b2126b52d568196f333973a345f984ea7c4.json | 22 + ...44469e431e35c4419fd710050d51eeefd6b8b.json | 22 + ...f98ded0ad3e59e6de69c2b13d92d8ab1a07dd.json | 3 +- ...f99779da93fc8939dc724a49b286c5568129.json} | 7 +- ...5204831b7ede1a8e3b3c2d441d505c4ca58f.json} | 44 +- ...7928aa933616d2186c13a4e005297b0ad63a7.json | 15 + ...55a360f8ae12b6378f8168c000d668d6489d0.json | 22 + ...ce5a6cca1524adfe99b0cb35662746479dcc1.json | 3 +- ...5d1cd01521f82e2962c3feebac395caef36f.json} | 40 +- ...53e30af54675ce58273cbb29312e6e88cbdf5.json | 22 + ...09fb7e3baa5ae84bd5e010008f8972e1a7f98.json | 28 + ...011081834_batch_chain_merkle_path.down.sql | 2 + ...41011081834_batch_chain_merkle_path.up.sql | 5 + core/lib/dal/src/blocks_dal.rs | 148 +++- core/lib/dal/src/blocks_web3_dal.rs | 36 + core/lib/dal/src/eth_sender_dal.rs | 36 +- core/lib/dal/src/eth_watcher_dal.rs | 1 + core/lib/dal/src/models/storage_block.rs | 14 +- core/lib/env_config/src/eth_sender.rs | 5 + core/lib/eth_client/src/clients/http/query.rs | 2 +- core/lib/eth_client/src/clients/mock.rs | 20 +- .../src/i_executor/methods/commit_batches.rs | 24 +- .../src/i_executor/methods/execute_batches.rs | 51 +- .../src/i_executor/methods/prove_batches.rs | 74 +- .../structures/commit_batch_info.rs | 152 +++- .../src/i_executor/structures/mod.rs | 10 +- .../structures/stored_batch_info.rs | 24 +- core/lib/mini_merkle_tree/src/lib.rs | 27 +- core/lib/mini_merkle_tree/src/tests.rs | 16 +- core/lib/multivm/src/versions/shadow/tests.rs | 19 +- .../src/versions/testonly/default_aa.rs | 7 +- .../src/versions/testonly/l1_messenger.rs | 178 ++++ core/lib/multivm/src/versions/testonly/mod.rs | 1 + .../src/versions/testonly/tester/mod.rs | 12 +- .../versions/vm_fast/tests/l1_messenger.rs | 7 + .../multivm/src/versions/vm_fast/tests/mod.rs | 10 +- .../versions/vm_latest/tests/l1_messenger.rs | 10 + .../src/versions/vm_latest/tests/mod.rs | 7 +- core/lib/protobuf_config/src/en.rs | 9 - .../protobuf_config/src/proto/config/en.proto | 2 +- .../src/proto/config/secrets.proto | 1 + core/lib/protobuf_config/src/secrets.rs | 10 + core/lib/snapshots_applier/src/tests/utils.rs | 3 + core/lib/types/src/api/mod.rs | 51 +- core/lib/types/src/commitment/mod.rs | 26 + core/lib/types/src/l2_to_l1_log.rs | 30 + core/lib/types/src/storage/mod.rs | 5 + core/lib/vm_interface/src/pubdata/mod.rs | 4 +- core/lib/web3_decl/src/namespaces/eth.rs | 2 +- core/lib/web3_decl/src/namespaces/unstable.rs | 11 +- core/lib/web3_decl/src/types.rs | 98 +-- core/node/api_server/Cargo.toml | 1 + .../web3/backend_jsonrpsee/namespaces/eth.rs | 12 +- .../backend_jsonrpsee/namespaces/unstable.rs | 14 +- .../node/api_server/src/web3/namespaces/en.rs | 6 +- .../src/web3/namespaces/unstable.rs | 65 -- .../src/web3/namespaces/unstable/mod.rs | 142 +++ .../src/web3/namespaces/unstable/utils.rs | 104 +++ .../api_server/src/web3/namespaces/zks.rs | 78 +- core/node/api_server/src/web3/state.rs | 29 +- core/node/api_server/src/web3/tests/mod.rs | 18 +- core/node/commitment_generator/src/lib.rs | 4 +- core/node/consistency_checker/src/lib.rs | 311 +++++-- .../node/consistency_checker/src/tests/mod.rs | 250 +++++- core/node/db_pruner/src/tests.rs | 1 + core/node/eth_sender/src/aggregator.rs | 5 +- core/node/eth_sender/src/eth_tx_aggregator.rs | 81 +- core/node/eth_sender/src/tester.rs | 2 +- core/node/eth_sender/src/tests.rs | 2 +- core/node/eth_sender/src/zksync_functions.rs | 42 +- core/node/eth_watch/Cargo.toml | 5 + core/node/eth_watch/src/client.rs | 237 ++++- .../appended_chain_batch_root.rs | 238 +++++ .../decentralized_upgrades.rs | 15 +- .../eth_watch/src/event_processors/mod.rs | 24 +- .../src/event_processors/priority_ops.rs | 18 +- core/node/eth_watch/src/lib.rs | 91 +- core/node/eth_watch/src/tests.rs | 791 ----------------- core/node/eth_watch/src/tests/client.rs | 487 +++++++++++ core/node/eth_watch/src/tests/mod.rs | 827 ++++++++++++++++++ .../layers/consistency_checker.rs | 20 +- .../src/implementations/layers/eth_watch.rs | 12 +- .../layers/query_eth_client.rs | 28 +- .../layers/tree_data_fetcher.rs | 30 +- .../resources/eth_interface.rs | 9 + .../node_sync/src/batch_status_updater/mod.rs | 115 ++- .../src/batch_status_updater/tests.rs | 45 +- core/node/node_sync/src/metrics.rs | 5 +- .../node_sync/src/tree_data_fetcher/mod.rs | 22 +- .../src/tree_data_fetcher/provider/mod.rs | 113 ++- .../src/tree_data_fetcher/provider/tests.rs | 216 ++++- etc/env/file_based/external_node.yaml | 2 - .../commands/external_node/prepare_configs.rs | 2 +- 108 files changed, 4908 insertions(+), 1594 deletions(-) create mode 100644 core/lib/dal/.sqlx/query-2d0a4e9281e53b0e410b9be0ebd53b2126b52d568196f333973a345f984ea7c4.json create mode 100644 core/lib/dal/.sqlx/query-2e3107b0c5e8466598066ceca9844469e431e35c4419fd710050d51eeefd6b8b.json rename core/lib/dal/.sqlx/{query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json => query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json} (57%) rename core/lib/dal/.sqlx/{query-d3760406b7bf5d14a3fe6cbc9fb3926df634ebf0d8286181fa04884fb747cee8.json => query-9b011c7afa158edd17fe0dc56dad5204831b7ede1a8e3b3c2d441d505c4ca58f.json} (52%) create mode 100644 core/lib/dal/.sqlx/query-c1f9ecf033d609457106189bc4d7928aa933616d2186c13a4e005297b0ad63a7.json create mode 100644 core/lib/dal/.sqlx/query-c2c288d268d6b266acbfc1058bc55a360f8ae12b6378f8168c000d668d6489d0.json rename core/lib/dal/.sqlx/{query-a88b113b5dc06ac990a66202b3c05e2c2f10d5cbdb03d02c3c541f7eaa1f58a6.json => query-cd6ab0aea6e1f72c58c189e098be5d1cd01521f82e2962c3feebac395caef36f.json} (51%) create mode 100644 core/lib/dal/.sqlx/query-cf8aaa95e3e8c376b6083c7015753e30af54675ce58273cbb29312e6e88cbdf5.json create mode 100644 core/lib/dal/.sqlx/query-f516657dd48332522a5580e26c509fb7e3baa5ae84bd5e010008f8972e1a7f98.json create mode 100644 core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.down.sql create mode 100644 core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.up.sql create mode 100644 core/lib/multivm/src/versions/testonly/l1_messenger.rs create mode 100644 core/lib/multivm/src/versions/vm_fast/tests/l1_messenger.rs create mode 100644 core/lib/multivm/src/versions/vm_latest/tests/l1_messenger.rs delete mode 100644 core/node/api_server/src/web3/namespaces/unstable.rs create mode 100644 core/node/api_server/src/web3/namespaces/unstable/mod.rs create mode 100644 core/node/api_server/src/web3/namespaces/unstable/utils.rs create mode 100644 core/node/eth_watch/src/event_processors/appended_chain_batch_root.rs delete mode 100644 core/node/eth_watch/src/tests.rs create mode 100644 core/node/eth_watch/src/tests/client.rs create mode 100644 core/node/eth_watch/src/tests/mod.rs diff --git a/Cargo.lock b/Cargo.lock index e8f33f35c13d..f5d23edcf3e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11784,6 +11784,9 @@ dependencies = [ "anyhow", "async-recursion", "async-trait", + "bincode", + "hex", + "itertools 0.10.5", "test-log", "thiserror", "tokio", @@ -11793,9 +11796,11 @@ dependencies = [ "zksync_contracts", "zksync_dal", "zksync_eth_client", + "zksync_mini_merkle_tree", "zksync_shared_metrics", "zksync_system_constants", "zksync_types", + "zksync_web3_decl", ] [[package]] @@ -12149,6 +12154,7 @@ dependencies = [ "zksync_config", "zksync_consensus_roles", "zksync_contracts", + "zksync_crypto_primitives", "zksync_dal", "zksync_health_check", "zksync_metadata_calculator", diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index 81604f83008a..49f37116de75 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -102,11 +102,15 @@ impl ConfigurationSource for Environment { /// This part of the external node config is fetched directly from the main node. #[derive(Debug, Deserialize)] pub(crate) struct RemoteENConfig { - pub bridgehub_proxy_addr: Option

, - pub state_transition_proxy_addr: Option
, - pub transparent_proxy_admin_addr: Option
, - /// Should not be accessed directly. Use [`ExternalNodeConfig::diamond_proxy_address`] instead. - diamond_proxy_addr: Address, + #[serde(alias = "bridgehub_proxy_addr")] + pub l1_bridgehub_proxy_addr: Option
, + #[serde(alias = "state_transition_proxy_addr")] + pub l1_state_transition_proxy_addr: Option
, + #[serde(alias = "transparent_proxy_admin_addr")] + pub l1_transparent_proxy_admin_addr: Option
, + /// Should not be accessed directly. Use [`ExternalNodeConfig::l1_diamond_proxy_address`] instead. + #[serde(alias = "diamond_proxy_addr")] + l1_diamond_proxy_addr: Address, // While on L1 shared bridge and legacy bridge are different contracts with different addresses, // the `l2_erc20_bridge_addr` and `l2_shared_bridge_addr` are basically the same contract, but with // a different name, with names adapted only for consistency. @@ -144,7 +148,7 @@ impl RemoteENConfig { .rpc_context("ecosystem_contracts") .await .ok(); - let diamond_proxy_addr = client + let l1_diamond_proxy_addr = client .get_main_contract() .rpc_context("get_main_contract") .await?; @@ -180,14 +184,14 @@ impl RemoteENConfig { } Ok(Self { - bridgehub_proxy_addr: ecosystem_contracts.as_ref().map(|a| a.bridgehub_proxy_addr), - state_transition_proxy_addr: ecosystem_contracts + l1_bridgehub_proxy_addr: ecosystem_contracts.as_ref().map(|a| a.bridgehub_proxy_addr), + l1_state_transition_proxy_addr: ecosystem_contracts .as_ref() .map(|a| a.state_transition_proxy_addr), - transparent_proxy_admin_addr: ecosystem_contracts + l1_transparent_proxy_admin_addr: ecosystem_contracts .as_ref() .map(|a| a.transparent_proxy_admin_addr), - diamond_proxy_addr, + l1_diamond_proxy_addr, l2_testnet_paymaster_addr, l1_erc20_bridge_proxy_addr: bridges.l1_erc20_default_bridge, l2_erc20_bridge_addr: l2_erc20_default_bridge, @@ -212,10 +216,10 @@ impl RemoteENConfig { #[cfg(test)] fn mock() -> Self { Self { - bridgehub_proxy_addr: None, - state_transition_proxy_addr: None, - transparent_proxy_admin_addr: None, - diamond_proxy_addr: Address::repeat_byte(1), + l1_bridgehub_proxy_addr: None, + l1_state_transition_proxy_addr: None, + l1_transparent_proxy_admin_addr: None, + l1_diamond_proxy_addr: Address::repeat_byte(1), l1_erc20_bridge_proxy_addr: Some(Address::repeat_byte(2)), l2_erc20_bridge_addr: Some(Address::repeat_byte(3)), l2_weth_bridge_addr: None, @@ -479,7 +483,6 @@ pub(crate) struct OptionalENConfig { #[serde(default = "OptionalENConfig::default_pruning_data_retention_sec")] pruning_data_retention_sec: u64, /// Gateway RPC URL, needed for operating during migration. - #[allow(dead_code)] pub gateway_url: Option, /// Interval for bridge addresses refreshing in seconds. bridge_addresses_refresh_interval_sec: Option, @@ -489,7 +492,11 @@ pub(crate) struct OptionalENConfig { } impl OptionalENConfig { - fn from_configs(general_config: &GeneralConfig, enconfig: &ENConfig) -> anyhow::Result { + fn from_configs( + general_config: &GeneralConfig, + enconfig: &ENConfig, + secrets: &Secrets, + ) -> anyhow::Result { let api_namespaces = load_config!(general_config.api_config, web3_json_rpc.api_namespaces) .map(|a: Vec| a.iter().map(|a| a.parse()).collect::>()) .transpose()?; @@ -721,7 +728,10 @@ impl OptionalENConfig { .unwrap_or_else(Self::default_main_node_rate_limit_rps), api_namespaces, contracts_diamond_proxy_addr: None, - gateway_url: enconfig.gateway_url.clone(), + gateway_url: secrets + .l1 + .as_ref() + .and_then(|l1| l1.gateway_rpc_url.clone()), bridge_addresses_refresh_interval_sec: enconfig.bridge_addresses_refresh_interval_sec, timestamp_asserter_min_time_till_end_sec: general_config .timestamp_asserter_config @@ -1340,7 +1350,11 @@ impl ExternalNodeConfig<()> { &external_node_config, &secrets_config, )?; - let optional = OptionalENConfig::from_configs(&general_config, &external_node_config)?; + let optional = OptionalENConfig::from_configs( + &general_config, + &external_node_config, + &secrets_config, + )?; let postgres = PostgresConfig { database_url: secrets_config .database @@ -1383,7 +1397,7 @@ impl ExternalNodeConfig<()> { let remote = RemoteENConfig::fetch(main_node_client) .await .context("Unable to fetch required config values from the main node")?; - let remote_diamond_proxy_addr = remote.diamond_proxy_addr; + let remote_diamond_proxy_addr = remote.l1_diamond_proxy_addr; if let Some(local_diamond_proxy_addr) = self.optional.contracts_diamond_proxy_addr { anyhow::ensure!( local_diamond_proxy_addr == remote_diamond_proxy_addr, @@ -1430,14 +1444,14 @@ impl ExternalNodeConfig { } } - /// Returns a verified diamond proxy address. + /// Returns verified L1 diamond proxy address. /// If local configuration contains the address, it will be checked against the one returned by the main node. /// Otherwise, the remote value will be used. However, using remote value has trust implications for the main /// node so relying on it solely is not recommended. - pub fn diamond_proxy_address(&self) -> Address { + pub fn l1_diamond_proxy_address(&self) -> Address { self.optional .contracts_diamond_proxy_addr - .unwrap_or(self.remote.diamond_proxy_addr) + .unwrap_or(self.remote.l1_diamond_proxy_addr) } } @@ -1461,10 +1475,10 @@ impl From<&ExternalNodeConfig> for InternalApiConfig { l1_weth_bridge: config.remote.l1_weth_bridge_addr, l2_weth_bridge: config.remote.l2_weth_bridge_addr, }, - bridgehub_proxy_addr: config.remote.bridgehub_proxy_addr, - state_transition_proxy_addr: config.remote.state_transition_proxy_addr, - transparent_proxy_admin_addr: config.remote.transparent_proxy_admin_addr, - diamond_proxy_addr: config.remote.diamond_proxy_addr, + l1_bridgehub_proxy_addr: config.remote.l1_bridgehub_proxy_addr, + l1_state_transition_proxy_addr: config.remote.l1_state_transition_proxy_addr, + l1_transparent_proxy_admin_addr: config.remote.l1_transparent_proxy_admin_addr, + l1_diamond_proxy_addr: config.remote.l1_diamond_proxy_addr, l2_testnet_paymaster_addr: config.remote.l2_testnet_paymaster_addr, req_entities_limit: config.optional.req_entities_limit, fee_history_limit: config.optional.fee_history_limit, diff --git a/core/bin/external_node/src/node_builder.rs b/core/bin/external_node/src/node_builder.rs index c5d9228e9930..5f9445d30fe8 100644 --- a/core/bin/external_node/src/node_builder.rs +++ b/core/bin/external_node/src/node_builder.rs @@ -57,7 +57,7 @@ use zksync_node_framework::{ service::{ZkStackService, ZkStackServiceBuilder}, }; use zksync_state::RocksdbStorageOptions; -use zksync_types::L2_NATIVE_TOKEN_VAULT_ADDRESS; +use zksync_types::L2_ASSET_ROUTER_ADDRESS; use crate::{config::ExternalNodeConfig, metrics::framework::ExternalNodeMetricsLayer, Component}; @@ -181,8 +181,7 @@ impl ExternalNodeBuilder { let query_eth_client_layer = QueryEthClientLayer::new( self.config.required.settlement_layer_id(), self.config.required.eth_client_url.clone(), - // TODO(EVM-676): add this config for external node - Default::default(), + self.config.optional.gateway_url.clone(), ); self.node.add_layer(query_eth_client_layer); Ok(self) @@ -200,12 +199,11 @@ impl ExternalNodeBuilder { .remote .l2_shared_bridge_addr .context("Missing `l2_shared_bridge_addr`")?; - let l2_legacy_shared_bridge_addr = if l2_shared_bridge_addr == L2_NATIVE_TOKEN_VAULT_ADDRESS - { - // System has migrated to `L2_NATIVE_TOKEN_VAULT_ADDRESS`, use legacy shared bridge address from main node. + let l2_legacy_shared_bridge_addr = if l2_shared_bridge_addr == L2_ASSET_ROUTER_ADDRESS { + // System has migrated to `L2_ASSET_ROUTER_ADDRESS`, use legacy shared bridge address from main node. self.config.remote.l2_legacy_shared_bridge_addr } else { - // System hasn't migrated on `L2_NATIVE_TOKEN_VAULT_ADDRESS`, we can safely use `l2_shared_bridge_addr`. + // System hasn't migrated on `L2_ASSET_ROUTER_ADDRESS`, we can safely use `l2_shared_bridge_addr`. Some(l2_shared_bridge_addr) }; @@ -278,7 +276,7 @@ impl ExternalNodeBuilder { fn add_l1_batch_commitment_mode_validation_layer(mut self) -> anyhow::Result { let layer = L1BatchCommitmentModeValidationLayer::new( - self.config.diamond_proxy_address(), + self.config.l1_diamond_proxy_address(), self.config.optional.l1_batch_commit_data_generator_mode, ); self.node.add_layer(layer); @@ -297,9 +295,10 @@ impl ExternalNodeBuilder { fn add_consistency_checker_layer(mut self) -> anyhow::Result { let max_batches_to_recheck = 10; // TODO (BFT-97): Make it a part of a proper EN config let layer = ConsistencyCheckerLayer::new( - self.config.diamond_proxy_address(), + self.config.l1_diamond_proxy_address(), max_batches_to_recheck, self.config.optional.l1_batch_commit_data_generator_mode, + self.config.required.l2_chain_id, ); self.node.add_layer(layer); Ok(self) @@ -324,7 +323,10 @@ impl ExternalNodeBuilder { } fn add_tree_data_fetcher_layer(mut self) -> anyhow::Result { - let layer = TreeDataFetcherLayer::new(self.config.diamond_proxy_address()); + let layer = TreeDataFetcherLayer::new( + self.config.l1_diamond_proxy_address(), + self.config.required.l2_chain_id, + ); self.node.add_layer(layer); Ok(self) } diff --git a/core/bin/external_node/src/tests/mod.rs b/core/bin/external_node/src/tests/mod.rs index 59aceea819f1..fd616a467ee8 100644 --- a/core/bin/external_node/src/tests/mod.rs +++ b/core/bin/external_node/src/tests/mod.rs @@ -35,7 +35,7 @@ async fn external_node_basics(components_str: &'static str) { } let l2_client = utils::mock_l2_client(&env); - let eth_client = utils::mock_eth_client(env.config.diamond_proxy_address()); + let eth_client = utils::mock_eth_client(env.config.l1_diamond_proxy_address()); let node_handle = tokio::task::spawn_blocking(move || { std::thread::spawn(move || { @@ -104,7 +104,7 @@ async fn node_reacts_to_stop_signal_during_initial_reorg_detection() { let (env, env_handles) = utils::TestEnvironment::with_genesis_block("core").await; let l2_client = utils::mock_l2_client_hanging(); - let eth_client = utils::mock_eth_client(env.config.diamond_proxy_address()); + let eth_client = utils::mock_eth_client(env.config.l1_diamond_proxy_address()); let mut node_handle = tokio::task::spawn_blocking(move || { std::thread::spawn(move || { @@ -140,7 +140,7 @@ async fn running_tree_without_core_is_not_allowed() { let (env, _env_handles) = utils::TestEnvironment::with_genesis_block("tree").await; let l2_client = utils::mock_l2_client(&env); - let eth_client = utils::mock_eth_client(env.config.diamond_proxy_address()); + let eth_client = utils::mock_eth_client(env.config.l1_diamond_proxy_address()); let node_handle = tokio::task::spawn_blocking(move || { std::thread::spawn(move || { diff --git a/core/bin/external_node/src/tests/utils.rs b/core/bin/external_node/src/tests/utils.rs index b26fa80d1a95..58e2a88e5fb7 100644 --- a/core/bin/external_node/src/tests/utils.rs +++ b/core/bin/external_node/src/tests/utils.rs @@ -23,10 +23,13 @@ pub(super) fn block_details_base(hash: H256) -> api::BlockDetailsBase { status: api::BlockStatus::Sealed, commit_tx_hash: None, committed_at: None, + commit_chain_id: None, prove_tx_hash: None, proven_at: None, + prove_chain_id: None, execute_tx_hash: None, executed_at: None, + execute_chain_id: None, l1_gas_price: 0, l2_fair_gas_price: 0, fair_pubdata_price: None, diff --git a/core/bin/zksync_server/src/node_builder.rs b/core/bin/zksync_server/src/node_builder.rs index 7e7d219856ca..d74928e8fbc7 100644 --- a/core/bin/zksync_server/src/node_builder.rs +++ b/core/bin/zksync_server/src/node_builder.rs @@ -161,11 +161,7 @@ impl MainNodeBuilder { let query_eth_client_layer = QueryEthClientLayer::new( genesis.settlement_layer_id(), eth_config.l1_rpc_url, - self.configs - .eth - .as_ref() - .and_then(|x| Some(x.gas_adjuster?.settlement_mode)) - .unwrap_or(SettlementMode::SettlesToL1), + eth_config.gateway_rpc_url, ); self.node.add_layer(query_eth_client_layer); Ok(self) @@ -283,6 +279,7 @@ impl MainNodeBuilder { self.node.add_layer(EthWatchLayer::new( try_load_config!(eth_config.watcher), self.contracts_config.clone(), + self.genesis_config.l2_chain_id, )); Ok(self) } diff --git a/core/lib/basic_types/src/lib.rs b/core/lib/basic_types/src/lib.rs index d79bc57cc5e1..8b8e24af4339 100644 --- a/core/lib/basic_types/src/lib.rs +++ b/core/lib/basic_types/src/lib.rs @@ -149,7 +149,7 @@ impl<'de> Deserialize<'de> for L2ChainId { } impl L2ChainId { - fn new(number: u64) -> Result { + pub fn new(number: u64) -> Result { if number > L2ChainId::max().0 { return Err(format!( "Cannot convert given value {} into L2ChainId. It's greater than MAX: {}", diff --git a/core/lib/basic_types/src/web3/mod.rs b/core/lib/basic_types/src/web3/mod.rs index e6d3cab37273..98625831c991 100644 --- a/core/lib/basic_types/src/web3/mod.rs +++ b/core/lib/basic_types/src/web3/mod.rs @@ -198,7 +198,7 @@ pub struct Filter { } #[derive(Default, Debug, PartialEq, Clone)] -pub struct ValueOrArray(Vec); +pub struct ValueOrArray(pub Vec); impl ValueOrArray { pub fn flatten(self) -> Vec { @@ -206,6 +206,12 @@ impl ValueOrArray { } } +impl From for ValueOrArray { + fn from(value: T) -> Self { + Self(vec![value]) + } +} + impl Serialize for ValueOrArray where T: Serialize, diff --git a/core/lib/config/src/configs/en_config.rs b/core/lib/config/src/configs/en_config.rs index 4cab47b0779e..13a0e1f2c99d 100644 --- a/core/lib/config/src/configs/en_config.rs +++ b/core/lib/config/src/configs/en_config.rs @@ -18,6 +18,5 @@ pub struct ENConfig { pub main_node_url: SensitiveUrl, pub main_node_rate_limit_rps: Option, - pub gateway_url: Option, pub bridge_addresses_refresh_interval_sec: Option, } diff --git a/core/lib/config/src/configs/secrets.rs b/core/lib/config/src/configs/secrets.rs index 75ff067c2473..8285d81e4bd2 100644 --- a/core/lib/config/src/configs/secrets.rs +++ b/core/lib/config/src/configs/secrets.rs @@ -16,6 +16,7 @@ pub struct DatabaseSecrets { #[derive(Debug, Clone, PartialEq)] pub struct L1Secrets { pub l1_rpc_url: SensitiveUrl, + pub gateway_rpc_url: Option, } #[derive(Debug, Clone, PartialEq)] diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 8a9e96c96a5e..d58867ea7418 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -852,6 +852,7 @@ impl Distribution for EncodeDist { use configs::secrets::L1Secrets; L1Secrets { l1_rpc_url: format!("localhost:{}", rng.gen::()).parse().unwrap(), + gateway_rpc_url: Some(format!("localhost:{}", rng.gen::()).parse().unwrap()), } } } @@ -938,8 +939,6 @@ impl Distribution for EncodeDist { _ => L1BatchCommitmentMode::Validium, }, main_node_rate_limit_rps: self.sample_opt(|| rng.gen()), - gateway_url: self - .sample_opt(|| format!("localhost:{}", rng.gen::()).parse().unwrap()), bridge_addresses_refresh_interval_sec: self.sample_opt(|| rng.gen()), } } diff --git a/core/lib/constants/src/contracts.rs b/core/lib/constants/src/contracts.rs index 4f0f362d9149..6e402c117bfe 100644 --- a/core/lib/constants/src/contracts.rs +++ b/core/lib/constants/src/contracts.rs @@ -135,6 +135,8 @@ pub const EVM_GAS_MANAGER_ADDRESS: Address = H160([ 0x00, 0x00, 0x80, 0x13, ]); +/// Note, that the `Create2Factory` and higher are explicitly deployed on a non-system-contract address +/// as they don't require any kernel space features. pub const CREATE2_FACTORY_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, diff --git a/core/lib/constants/src/message_root.rs b/core/lib/constants/src/message_root.rs index a8f4a034fb99..9bb8764cd667 100644 --- a/core/lib/constants/src/message_root.rs +++ b/core/lib/constants/src/message_root.rs @@ -1,5 +1,14 @@ -// Position of `FullTree::_height` in `MessageRoot`'s storage layout. +/// Position of `chainCount` in `MessageRoot`'s storage layout. +pub const CHAIN_COUNT_KEY: usize = 0; + +/// Position of `chainIndexToId` in `MessageRoot`'s storage layout. +pub const CHAIN_INDEX_TO_ID_KEY: usize = 2; + +/// Position of `FullTree::_height` in `MessageRoot`'s storage layout. pub const AGG_TREE_HEIGHT_KEY: usize = 3; -// Position of `FullTree::nodes` in `MessageRoot`'s storage layout. +/// Position of `FullTree::nodes` in `MessageRoot`'s storage layout. pub const AGG_TREE_NODES_KEY: usize = 5; + +/// Position of `chainTree` in `MessageRoot`'s storage layout. +pub const CHAIN_TREE_KEY: usize = 7; diff --git a/core/lib/contracts/src/lib.rs b/core/lib/contracts/src/lib.rs index 74efa72793aa..e60fdb0e59f3 100644 --- a/core/lib/contracts/src/lib.rs +++ b/core/lib/contracts/src/lib.rs @@ -256,7 +256,9 @@ impl SystemContractsRepo { "artifacts-zk/contracts-preprocessed/{0}{1}.sol/{1}.json", directory, name ))) - .expect("One of the outputs should exists") + .unwrap_or_else(|| { + panic!("One of the outputs should exists for {directory}{name}"); + }) } } ContractLanguage::Yul => { @@ -975,3 +977,461 @@ pub static DIAMOND_CUT: Lazy = Lazy::new(|| { }"#; serde_json::from_str(abi).unwrap() }); + +pub static POST_BOOJUM_COMMIT_FUNCTION: Lazy = Lazy::new(|| { + let abi = r#" + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "l2LogsTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "internalType": "struct IExecutor.StoredBatchInfo", + "name": "_lastCommittedBatchData", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "bootloaderHeapInitialContentsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "eventsQueueStateHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "systemLogs", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "pubdataCommitments", + "type": "bytes" + } + ], + "internalType": "struct IExecutor.CommitBatchInfo[]", + "name": "_newBatchesData", + "type": "tuple[]" + } + ], + "name": "commitBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }"#; + serde_json::from_str(abi).unwrap() +}); + +pub static POST_SHARED_BRIDGE_COMMIT_FUNCTION: Lazy = Lazy::new(|| { + let abi = r#" + { + "inputs": [ + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "l2LogsTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "internalType": "struct IExecutor.StoredBatchInfo", + "name": "_lastCommittedBatchData", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "bootloaderHeapInitialContentsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "eventsQueueStateHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "systemLogs", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "pubdataCommitments", + "type": "bytes" + } + ], + "internalType": "struct IExecutor.CommitBatchInfo[]", + "name": "_newBatchesData", + "type": "tuple[]" + } + ], + "name": "commitBatchesSharedBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }"#; + serde_json::from_str(abi).unwrap() +}); + +pub static POST_SHARED_BRIDGE_PROVE_FUNCTION: Lazy = Lazy::new(|| { + let abi = r#" + { + "inputs": [ + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "l2LogsTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "internalType": "struct IExecutor.StoredBatchInfo", + "name": "_prevBatch", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "l2LogsTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "internalType": "struct IExecutor.StoredBatchInfo[]", + "name": "_committedBatches", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256[]", + "name": "recursiveAggregationInput", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "serializedProof", + "type": "uint256[]" + } + ], + "internalType": "struct IExecutor.ProofInput", + "name": "_proof", + "type": "tuple" + } + ], + "name": "proveBatchesSharedBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }"#; + serde_json::from_str(abi).unwrap() +}); + +pub static POST_SHARED_BRIDGE_EXECUTE_FUNCTION: Lazy = Lazy::new(|| { + let abi = r#" + { + "inputs": [ + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "batchNumber", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "indexRepeatedStorageChanges", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "numberOfLayer1Txs", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "priorityOperationsHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "l2LogsTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "internalType": "struct IExecutor.StoredBatchInfo[]", + "name": "_batchesData", + "type": "tuple[]" + } + ], + "name": "executeBatchesSharedBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }"#; + serde_json::from_str(abi).unwrap() +}); + +// Temporary thing, should be removed when new contracts are merged. +pub static MESSAGE_ROOT_CONTRACT: Lazy = Lazy::new(|| { + let abi = r#" + [{ + "inputs": [ + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + } + ], + "name": "getChainRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }]"#; + serde_json::from_str(abi).unwrap() +}); diff --git a/core/lib/dal/.sqlx/query-228aa5ec4c4eb56143823b96a8190ded732839b9f5bf16042205a730fac07c3a.json b/core/lib/dal/.sqlx/query-228aa5ec4c4eb56143823b96a8190ded732839b9f5bf16042205a730fac07c3a.json index b8d6482ea744..32a2212dfdf6 100644 --- a/core/lib/dal/.sqlx/query-228aa5ec4c4eb56143823b96a8190ded732839b9f5bf16042205a730fac07c3a.json +++ b/core/lib/dal/.sqlx/query-228aa5ec4c4eb56143823b96a8190ded732839b9f5bf16042205a730fac07c3a.json @@ -11,7 +11,8 @@ "kind": { "Enum": [ "ProtocolUpgrades", - "PriorityTransactions" + "PriorityTransactions", + "ChainBatchRoot" ] } } diff --git a/core/lib/dal/.sqlx/query-2d0a4e9281e53b0e410b9be0ebd53b2126b52d568196f333973a345f984ea7c4.json b/core/lib/dal/.sqlx/query-2d0a4e9281e53b0e410b9be0ebd53b2126b52d568196f333973a345f984ea7c4.json new file mode 100644 index 000000000000..adbd2c0931ec --- /dev/null +++ b/core/lib/dal/.sqlx/query-2d0a4e9281e53b0e410b9be0ebd53b2126b52d568196f333973a345f984ea7c4.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n batch_chain_merkle_path\n FROM\n l1_batches\n WHERE\n number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "batch_chain_merkle_path", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true + ] + }, + "hash": "2d0a4e9281e53b0e410b9be0ebd53b2126b52d568196f333973a345f984ea7c4" +} diff --git a/core/lib/dal/.sqlx/query-2e3107b0c5e8466598066ceca9844469e431e35c4419fd710050d51eeefd6b8b.json b/core/lib/dal/.sqlx/query-2e3107b0c5e8466598066ceca9844469e431e35c4419fd710050d51eeefd6b8b.json new file mode 100644 index 000000000000..69dd87a6c355 --- /dev/null +++ b/core/lib/dal/.sqlx/query-2e3107b0c5e8466598066ceca9844469e431e35c4419fd710050d51eeefd6b8b.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n local_root\n FROM\n l1_batches\n WHERE\n number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "local_root", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true + ] + }, + "hash": "2e3107b0c5e8466598066ceca9844469e431e35c4419fd710050d51eeefd6b8b" +} diff --git a/core/lib/dal/.sqlx/query-3ee6c2a87c65eaece7048da53c9f98ded0ad3e59e6de69c2b13d92d8ab1a07dd.json b/core/lib/dal/.sqlx/query-3ee6c2a87c65eaece7048da53c9f98ded0ad3e59e6de69c2b13d92d8ab1a07dd.json index e2a808d41f89..8bab74d20f5c 100644 --- a/core/lib/dal/.sqlx/query-3ee6c2a87c65eaece7048da53c9f98ded0ad3e59e6de69c2b13d92d8ab1a07dd.json +++ b/core/lib/dal/.sqlx/query-3ee6c2a87c65eaece7048da53c9f98ded0ad3e59e6de69c2b13d92d8ab1a07dd.json @@ -17,7 +17,8 @@ "kind": { "Enum": [ "ProtocolUpgrades", - "PriorityTransactions" + "PriorityTransactions", + "ChainBatchRoot" ] } } diff --git a/core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json b/core/lib/dal/.sqlx/query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json similarity index 57% rename from core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json rename to core/lib/dal/.sqlx/query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json index 5f27c7549b47..c2ccaf3b3d7c 100644 --- a/core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json +++ b/core/lib/dal/.sqlx/query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, created_at, updated_at) VALUES ('\\x00', 0, $1, '', 0, now(), now()) RETURNING id", + "query": "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, chain_id, created_at, updated_at) VALUES ('\\x00', 0, $1, '', 0, $2, now(), now()) RETURNING id", "describe": { "columns": [ { @@ -11,12 +11,13 @@ ], "parameters": { "Left": [ - "Text" + "Text", + "Int8" ] }, "nullable": [ false ] }, - "hash": "5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231" + "hash": "5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129" } diff --git a/core/lib/dal/.sqlx/query-d3760406b7bf5d14a3fe6cbc9fb3926df634ebf0d8286181fa04884fb747cee8.json b/core/lib/dal/.sqlx/query-9b011c7afa158edd17fe0dc56dad5204831b7ede1a8e3b3c2d441d505c4ca58f.json similarity index 52% rename from core/lib/dal/.sqlx/query-d3760406b7bf5d14a3fe6cbc9fb3926df634ebf0d8286181fa04884fb747cee8.json rename to core/lib/dal/.sqlx/query-9b011c7afa158edd17fe0dc56dad5204831b7ede1a8e3b3c2d441d505c4ca58f.json index ed3270de573e..8de8a19da5f8 100644 --- a/core/lib/dal/.sqlx/query-d3760406b7bf5d14a3fe6cbc9fb3926df634ebf0d8286181fa04884fb747cee8.json +++ b/core/lib/dal/.sqlx/query-9b011c7afa158edd17fe0dc56dad5204831b7ede1a8e3b3c2d441d505c4ca58f.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n miniblocks.number,\n COALESCE(\n miniblocks.l1_batch_number,\n (\n SELECT\n (MAX(number) + 1)\n FROM\n l1_batches\n WHERE\n is_sealed\n )\n ) AS \"l1_batch_number!\",\n miniblocks.timestamp,\n miniblocks.l1_tx_count,\n miniblocks.l2_tx_count,\n miniblocks.hash AS \"root_hash?\",\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n miniblocks.l1_gas_price,\n miniblocks.l2_fair_gas_price,\n miniblocks.fair_pubdata_price,\n miniblocks.bootloader_code_hash,\n miniblocks.default_aa_code_hash,\n l1_batches.evm_emulator_code_hash,\n miniblocks.protocol_version,\n miniblocks.fee_account_address\n FROM\n miniblocks\n LEFT JOIN l1_batches ON miniblocks.l1_batch_number = l1_batches.number\n LEFT JOIN eth_txs_history AS commit_tx\n ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx\n ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx\n ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n WHERE\n miniblocks.number = $1\n ", + "query": "\n SELECT\n miniblocks.number,\n COALESCE(\n miniblocks.l1_batch_number,\n (\n SELECT\n (MAX(number) + 1)\n FROM\n l1_batches\n WHERE\n is_sealed\n )\n ) AS \"l1_batch_number!\",\n miniblocks.timestamp,\n miniblocks.l1_tx_count,\n miniblocks.l2_tx_count,\n miniblocks.hash AS \"root_hash?\",\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n commit_tx_data.chain_id AS \"commit_chain_id?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n prove_tx_data.chain_id AS \"prove_chain_id?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n execute_tx_data.chain_id AS \"execute_chain_id?\",\n miniblocks.l1_gas_price,\n miniblocks.l2_fair_gas_price,\n miniblocks.fair_pubdata_price,\n miniblocks.bootloader_code_hash,\n miniblocks.default_aa_code_hash,\n l1_batches.evm_emulator_code_hash,\n miniblocks.protocol_version,\n miniblocks.fee_account_address\n FROM\n miniblocks\n LEFT JOIN l1_batches ON miniblocks.l1_batch_number = l1_batches.number\n LEFT JOIN eth_txs_history AS commit_tx\n ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx\n ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx\n ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs AS commit_tx_data\n ON (\n l1_batches.eth_commit_tx_id = commit_tx_data.id\n AND commit_tx_data.confirmed_eth_tx_history_id IS NOT NULL\n )\n LEFT JOIN eth_txs AS prove_tx_data\n ON (\n l1_batches.eth_prove_tx_id = prove_tx_data.id\n AND prove_tx_data.confirmed_eth_tx_history_id IS NOT NULL\n )\n LEFT JOIN eth_txs AS execute_tx_data\n ON (\n l1_batches.eth_execute_tx_id = execute_tx_data.id\n AND execute_tx_data.confirmed_eth_tx_history_id IS NOT NULL\n )\n WHERE\n miniblocks.number = $1\n ", "describe": { "columns": [ { @@ -45,61 +45,76 @@ }, { "ordinal": 8, + "name": "commit_chain_id?", + "type_info": "Int8" + }, + { + "ordinal": 9, "name": "prove_tx_hash?", "type_info": "Text" }, { - "ordinal": 9, + "ordinal": 10, "name": "proven_at?", "type_info": "Timestamp" }, { - "ordinal": 10, + "ordinal": 11, + "name": "prove_chain_id?", + "type_info": "Int8" + }, + { + "ordinal": 12, "name": "execute_tx_hash?", "type_info": "Text" }, { - "ordinal": 11, + "ordinal": 13, "name": "executed_at?", "type_info": "Timestamp" }, { - "ordinal": 12, + "ordinal": 14, + "name": "execute_chain_id?", + "type_info": "Int8" + }, + { + "ordinal": 15, "name": "l1_gas_price", "type_info": "Int8" }, { - "ordinal": 13, + "ordinal": 16, "name": "l2_fair_gas_price", "type_info": "Int8" }, { - "ordinal": 14, + "ordinal": 17, "name": "fair_pubdata_price", "type_info": "Int8" }, { - "ordinal": 15, + "ordinal": 18, "name": "bootloader_code_hash", "type_info": "Bytea" }, { - "ordinal": 16, + "ordinal": 19, "name": "default_aa_code_hash", "type_info": "Bytea" }, { - "ordinal": 17, + "ordinal": 20, "name": "evm_emulator_code_hash", "type_info": "Bytea" }, { - "ordinal": 18, + "ordinal": 21, "name": "protocol_version", "type_info": "Int4" }, { - "ordinal": 19, + "ordinal": 22, "name": "fee_account_address", "type_info": "Bytea" } @@ -118,10 +133,13 @@ false, false, true, + true, false, true, + true, false, true, + true, false, false, true, @@ -132,5 +150,5 @@ false ] }, - "hash": "d3760406b7bf5d14a3fe6cbc9fb3926df634ebf0d8286181fa04884fb747cee8" + "hash": "9b011c7afa158edd17fe0dc56dad5204831b7ede1a8e3b3c2d441d505c4ca58f" } diff --git a/core/lib/dal/.sqlx/query-c1f9ecf033d609457106189bc4d7928aa933616d2186c13a4e005297b0ad63a7.json b/core/lib/dal/.sqlx/query-c1f9ecf033d609457106189bc4d7928aa933616d2186c13a4e005297b0ad63a7.json new file mode 100644 index 000000000000..90623e77e985 --- /dev/null +++ b/core/lib/dal/.sqlx/query-c1f9ecf033d609457106189bc4d7928aa933616d2186c13a4e005297b0ad63a7.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE\n l1_batches\n SET\n batch_chain_merkle_path = $2\n WHERE\n number = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Bytea" + ] + }, + "nullable": [] + }, + "hash": "c1f9ecf033d609457106189bc4d7928aa933616d2186c13a4e005297b0ad63a7" +} diff --git a/core/lib/dal/.sqlx/query-c2c288d268d6b266acbfc1058bc55a360f8ae12b6378f8168c000d668d6489d0.json b/core/lib/dal/.sqlx/query-c2c288d268d6b266acbfc1058bc55a360f8ae12b6378f8168c000d668d6489d0.json new file mode 100644 index 000000000000..751d272b0b0e --- /dev/null +++ b/core/lib/dal/.sqlx/query-c2c288d268d6b266acbfc1058bc55a360f8ae12b6378f8168c000d668d6489d0.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n l2_l1_merkle_root\n FROM\n l1_batches\n WHERE\n number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l2_l1_merkle_root", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true + ] + }, + "hash": "c2c288d268d6b266acbfc1058bc55a360f8ae12b6378f8168c000d668d6489d0" +} diff --git a/core/lib/dal/.sqlx/query-c2c40d5aae2e0276de453c78a39ce5a6cca1524adfe99b0cb35662746479dcc1.json b/core/lib/dal/.sqlx/query-c2c40d5aae2e0276de453c78a39ce5a6cca1524adfe99b0cb35662746479dcc1.json index 61832d25fd24..5e2ea45e0bc2 100644 --- a/core/lib/dal/.sqlx/query-c2c40d5aae2e0276de453c78a39ce5a6cca1524adfe99b0cb35662746479dcc1.json +++ b/core/lib/dal/.sqlx/query-c2c40d5aae2e0276de453c78a39ce5a6cca1524adfe99b0cb35662746479dcc1.json @@ -11,7 +11,8 @@ "kind": { "Enum": [ "ProtocolUpgrades", - "PriorityTransactions" + "PriorityTransactions", + "ChainBatchRoot" ] } } diff --git a/core/lib/dal/.sqlx/query-a88b113b5dc06ac990a66202b3c05e2c2f10d5cbdb03d02c3c541f7eaa1f58a6.json b/core/lib/dal/.sqlx/query-cd6ab0aea6e1f72c58c189e098be5d1cd01521f82e2962c3feebac395caef36f.json similarity index 51% rename from core/lib/dal/.sqlx/query-a88b113b5dc06ac990a66202b3c05e2c2f10d5cbdb03d02c3c541f7eaa1f58a6.json rename to core/lib/dal/.sqlx/query-cd6ab0aea6e1f72c58c189e098be5d1cd01521f82e2962c3feebac395caef36f.json index 28ffcc5ae468..1af3384a2d9f 100644 --- a/core/lib/dal/.sqlx/query-a88b113b5dc06ac990a66202b3c05e2c2f10d5cbdb03d02c3c541f7eaa1f58a6.json +++ b/core/lib/dal/.sqlx/query-cd6ab0aea6e1f72c58c189e098be5d1cd01521f82e2962c3feebac395caef36f.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH\n mb AS (\n SELECT\n l1_gas_price,\n l2_fair_gas_price,\n fair_pubdata_price\n FROM\n miniblocks\n WHERE\n l1_batch_number = $1\n LIMIT\n 1\n )\n \n SELECT\n l1_batches.number,\n l1_batches.timestamp,\n l1_batches.l1_tx_count,\n l1_batches.l2_tx_count,\n l1_batches.hash AS \"root_hash?\",\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n mb.l1_gas_price,\n mb.l2_fair_gas_price,\n mb.fair_pubdata_price,\n l1_batches.bootloader_code_hash,\n l1_batches.default_aa_code_hash,\n l1_batches.evm_emulator_code_hash\n FROM\n l1_batches\n INNER JOIN mb ON TRUE\n LEFT JOIN eth_txs_history AS commit_tx\n ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx\n ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx\n ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n WHERE\n l1_batches.number = $1\n ", + "query": "\n WITH\n mb AS (\n SELECT\n l1_gas_price,\n l2_fair_gas_price,\n fair_pubdata_price\n FROM\n miniblocks\n WHERE\n l1_batch_number = $1\n LIMIT\n 1\n )\n \n SELECT\n l1_batches.number,\n l1_batches.timestamp,\n l1_batches.l1_tx_count,\n l1_batches.l2_tx_count,\n l1_batches.hash AS \"root_hash?\",\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n commit_tx_data.chain_id AS \"commit_chain_id?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n prove_tx_data.chain_id AS \"prove_chain_id?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n execute_tx_data.chain_id AS \"execute_chain_id?\",\n mb.l1_gas_price,\n mb.l2_fair_gas_price,\n mb.fair_pubdata_price,\n l1_batches.bootloader_code_hash,\n l1_batches.default_aa_code_hash,\n l1_batches.evm_emulator_code_hash\n FROM\n l1_batches\n INNER JOIN mb ON TRUE\n LEFT JOIN eth_txs_history AS commit_tx\n ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx\n ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx\n ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs AS commit_tx_data\n ON (\n l1_batches.eth_commit_tx_id = commit_tx_data.id\n AND commit_tx_data.confirmed_eth_tx_history_id IS NOT NULL\n )\n LEFT JOIN eth_txs AS prove_tx_data\n ON (\n l1_batches.eth_prove_tx_id = prove_tx_data.id\n AND prove_tx_data.confirmed_eth_tx_history_id IS NOT NULL\n )\n LEFT JOIN eth_txs AS execute_tx_data\n ON (\n l1_batches.eth_execute_tx_id = execute_tx_data.id\n AND execute_tx_data.confirmed_eth_tx_history_id IS NOT NULL\n )\n WHERE\n l1_batches.number = $1\n ", "describe": { "columns": [ { @@ -40,51 +40,66 @@ }, { "ordinal": 7, + "name": "commit_chain_id?", + "type_info": "Int8" + }, + { + "ordinal": 8, "name": "prove_tx_hash?", "type_info": "Text" }, { - "ordinal": 8, + "ordinal": 9, "name": "proven_at?", "type_info": "Timestamp" }, { - "ordinal": 9, + "ordinal": 10, + "name": "prove_chain_id?", + "type_info": "Int8" + }, + { + "ordinal": 11, "name": "execute_tx_hash?", "type_info": "Text" }, { - "ordinal": 10, + "ordinal": 12, "name": "executed_at?", "type_info": "Timestamp" }, { - "ordinal": 11, + "ordinal": 13, + "name": "execute_chain_id?", + "type_info": "Int8" + }, + { + "ordinal": 14, "name": "l1_gas_price", "type_info": "Int8" }, { - "ordinal": 12, + "ordinal": 15, "name": "l2_fair_gas_price", "type_info": "Int8" }, { - "ordinal": 13, + "ordinal": 16, "name": "fair_pubdata_price", "type_info": "Int8" }, { - "ordinal": 14, + "ordinal": 17, "name": "bootloader_code_hash", "type_info": "Bytea" }, { - "ordinal": 15, + "ordinal": 18, "name": "default_aa_code_hash", "type_info": "Bytea" }, { - "ordinal": 16, + "ordinal": 19, "name": "evm_emulator_code_hash", "type_info": "Bytea" } @@ -102,10 +117,13 @@ true, false, true, + true, false, true, + true, false, true, + true, false, false, true, @@ -114,5 +132,5 @@ true ] }, - "hash": "a88b113b5dc06ac990a66202b3c05e2c2f10d5cbdb03d02c3c541f7eaa1f58a6" + "hash": "cd6ab0aea6e1f72c58c189e098be5d1cd01521f82e2962c3feebac395caef36f" } diff --git a/core/lib/dal/.sqlx/query-cf8aaa95e3e8c376b6083c7015753e30af54675ce58273cbb29312e6e88cbdf5.json b/core/lib/dal/.sqlx/query-cf8aaa95e3e8c376b6083c7015753e30af54675ce58273cbb29312e6e88cbdf5.json new file mode 100644 index 000000000000..b79441ab4d63 --- /dev/null +++ b/core/lib/dal/.sqlx/query-cf8aaa95e3e8c376b6083c7015753e30af54675ce58273cbb29312e6e88cbdf5.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT eth_txs.chain_id\n FROM l1_batches\n JOIN eth_txs ON eth_txs.id = l1_batches.eth_commit_tx_id\n WHERE\n number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "chain_id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true + ] + }, + "hash": "cf8aaa95e3e8c376b6083c7015753e30af54675ce58273cbb29312e6e88cbdf5" +} diff --git a/core/lib/dal/.sqlx/query-f516657dd48332522a5580e26c509fb7e3baa5ae84bd5e010008f8972e1a7f98.json b/core/lib/dal/.sqlx/query-f516657dd48332522a5580e26c509fb7e3baa5ae84bd5e010008f8972e1a7f98.json new file mode 100644 index 000000000000..9f7de50539be --- /dev/null +++ b/core/lib/dal/.sqlx/query-f516657dd48332522a5580e26c509fb7e3baa5ae84bd5e010008f8972e1a7f98.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n number, l2_l1_merkle_root\n FROM\n l1_batches\n JOIN eth_txs ON eth_txs.id = l1_batches.eth_execute_tx_id\n WHERE\n batch_chain_merkle_path IS NOT NULL\n AND chain_id = $1\n ORDER BY number\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "l2_l1_merkle_root", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false, + true + ] + }, + "hash": "f516657dd48332522a5580e26c509fb7e3baa5ae84bd5e010008f8972e1a7f98" +} diff --git a/core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.down.sql b/core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.down.sql new file mode 100644 index 000000000000..da7142b8f819 --- /dev/null +++ b/core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE l1_batches + DROP COLUMN batch_chain_merkle_path BYTEA; diff --git a/core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.up.sql b/core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.up.sql new file mode 100644 index 000000000000..8b133f70904b --- /dev/null +++ b/core/lib/dal/migrations/20241011081834_batch_chain_merkle_path.up.sql @@ -0,0 +1,5 @@ +ALTER TABLE l1_batches + ADD COLUMN batch_chain_merkle_path BYTEA; + +-- postgres doesn't allow dropping enum variant, so nothing is done in down.sql +ALTER TYPE event_type ADD VALUE 'ChainBatchRoot'; diff --git a/core/lib/dal/src/blocks_dal.rs b/core/lib/dal/src/blocks_dal.rs index 0cb607a304e2..5d27b6067cd0 100644 --- a/core/lib/dal/src/blocks_dal.rs +++ b/core/lib/dal/src/blocks_dal.rs @@ -22,9 +22,9 @@ use zksync_types::{ }, commitment::{L1BatchCommitmentArtifacts, L1BatchWithMetadata}, fee_model::BatchFeeInput, - l2_to_l1_log::UserL2ToL1Log, + l2_to_l1_log::{BatchAndChainMerklePath, UserL2ToL1Log}, writes::TreeWrite, - Address, Bloom, L1BatchNumber, L2BlockNumber, ProtocolVersionId, H256, U256, + Address, Bloom, L1BatchNumber, L2BlockNumber, ProtocolVersionId, SLChainId, H256, U256, }; use zksync_vm_interface::CircuitStatistic; @@ -1982,6 +1982,150 @@ impl BlocksDal<'_, '_> { Ok(Some((H256::from_slice(&hash), row.timestamp as u64))) } + pub async fn get_l1_batch_local_root( + &mut self, + number: L1BatchNumber, + ) -> DalResult> { + let Some(row) = sqlx::query!( + r#" + SELECT + local_root + FROM + l1_batches + WHERE + number = $1 + "#, + i64::from(number.0) + ) + .instrument("get_l1_batch_local_root") + .with_arg("number", &number) + .fetch_optional(self.storage) + .await? + else { + return Ok(None); + }; + let Some(local_root) = row.local_root else { + return Ok(None); + }; + Ok(Some(H256::from_slice(&local_root))) + } + + pub async fn get_l1_batch_l2_l1_merkle_root( + &mut self, + number: L1BatchNumber, + ) -> DalResult> { + let Some(row) = sqlx::query!( + r#" + SELECT + l2_l1_merkle_root + FROM + l1_batches + WHERE + number = $1 + "#, + i64::from(number.0) + ) + .instrument("get_l1_batch_l2_l1_merkle_root") + .with_arg("number", &number) + .fetch_optional(self.storage) + .await? + else { + return Ok(None); + }; + let Some(l2_l1_merkle_root) = row.l2_l1_merkle_root else { + return Ok(None); + }; + Ok(Some(H256::from_slice(&l2_l1_merkle_root))) + } + + pub async fn get_l1_batch_chain_merkle_path( + &mut self, + number: L1BatchNumber, + ) -> DalResult> { + let Some(row) = sqlx::query!( + r#" + SELECT + batch_chain_merkle_path + FROM + l1_batches + WHERE + number = $1 + "#, + i64::from(number.0) + ) + .instrument("get_l1_batch_chain_merkle_path") + .with_arg("number", &number) + .fetch_optional(self.storage) + .await? + else { + return Ok(None); + }; + let Some(batch_chain_merkle_path) = row.batch_chain_merkle_path else { + return Ok(None); + }; + Ok(Some( + bincode::deserialize(&batch_chain_merkle_path).unwrap(), + )) + } + + pub async fn get_executed_batch_roots_on_sl( + &mut self, + sl_chain_id: SLChainId, + ) -> DalResult> { + let result = sqlx::query!( + r#" + SELECT + number, l2_l1_merkle_root + FROM + l1_batches + JOIN eth_txs ON eth_txs.id = l1_batches.eth_execute_tx_id + WHERE + batch_chain_merkle_path IS NOT NULL + AND chain_id = $1 + ORDER BY number + "#, + sl_chain_id.0 as i64 + ) + .instrument("get_executed_batch_roots_on_sl") + .with_arg("sl_chain_id", &sl_chain_id) + .fetch_all(self.storage) + .await? + .into_iter() + .map(|row| { + let number = L1BatchNumber(row.number as u32); + let root = H256::from_slice(&row.l2_l1_merkle_root.unwrap()); + (number, root) + }) + .collect(); + Ok(result) + } + + pub async fn set_batch_chain_merkle_path( + &mut self, + number: L1BatchNumber, + proof: BatchAndChainMerklePath, + ) -> DalResult<()> { + let proof_bin = bincode::serialize(&proof).unwrap(); + sqlx::query!( + r#" + UPDATE + l1_batches + SET + batch_chain_merkle_path = $2 + WHERE + number = $1 + "#, + i64::from(number.0), + &proof_bin + ) + .instrument("set_batch_chain_merkle_path") + .with_arg("number", &number) + .execute(self.storage) + .await?; + + Ok(()) + } + pub async fn get_l1_batch_metadata( &mut self, number: L1BatchNumber, diff --git a/core/lib/dal/src/blocks_web3_dal.rs b/core/lib/dal/src/blocks_web3_dal.rs index 4699eac4e5eb..c7187a83006b 100644 --- a/core/lib/dal/src/blocks_web3_dal.rs +++ b/core/lib/dal/src/blocks_web3_dal.rs @@ -679,10 +679,13 @@ impl BlocksWeb3Dal<'_, '_> { miniblocks.hash AS "root_hash?", commit_tx.tx_hash AS "commit_tx_hash?", commit_tx.confirmed_at AS "committed_at?", + commit_tx_data.chain_id AS "commit_chain_id?", prove_tx.tx_hash AS "prove_tx_hash?", prove_tx.confirmed_at AS "proven_at?", + prove_tx_data.chain_id AS "prove_chain_id?", execute_tx.tx_hash AS "execute_tx_hash?", execute_tx.confirmed_at AS "executed_at?", + execute_tx_data.chain_id AS "execute_chain_id?", miniblocks.l1_gas_price, miniblocks.l2_fair_gas_price, miniblocks.fair_pubdata_price, @@ -709,6 +712,21 @@ impl BlocksWeb3Dal<'_, '_> { l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id AND execute_tx.confirmed_at IS NOT NULL ) + LEFT JOIN eth_txs AS commit_tx_data + ON ( + l1_batches.eth_commit_tx_id = commit_tx_data.id + AND commit_tx_data.confirmed_eth_tx_history_id IS NOT NULL + ) + LEFT JOIN eth_txs AS prove_tx_data + ON ( + l1_batches.eth_prove_tx_id = prove_tx_data.id + AND prove_tx_data.confirmed_eth_tx_history_id IS NOT NULL + ) + LEFT JOIN eth_txs AS execute_tx_data + ON ( + l1_batches.eth_execute_tx_id = execute_tx_data.id + AND execute_tx_data.confirmed_eth_tx_history_id IS NOT NULL + ) WHERE miniblocks.number = $1 "#, @@ -752,10 +770,13 @@ impl BlocksWeb3Dal<'_, '_> { l1_batches.hash AS "root_hash?", commit_tx.tx_hash AS "commit_tx_hash?", commit_tx.confirmed_at AS "committed_at?", + commit_tx_data.chain_id AS "commit_chain_id?", prove_tx.tx_hash AS "prove_tx_hash?", prove_tx.confirmed_at AS "proven_at?", + prove_tx_data.chain_id AS "prove_chain_id?", execute_tx.tx_hash AS "execute_tx_hash?", execute_tx.confirmed_at AS "executed_at?", + execute_tx_data.chain_id AS "execute_chain_id?", mb.l1_gas_price, mb.l2_fair_gas_price, mb.fair_pubdata_price, @@ -780,6 +801,21 @@ impl BlocksWeb3Dal<'_, '_> { l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id AND execute_tx.confirmed_at IS NOT NULL ) + LEFT JOIN eth_txs AS commit_tx_data + ON ( + l1_batches.eth_commit_tx_id = commit_tx_data.id + AND commit_tx_data.confirmed_eth_tx_history_id IS NOT NULL + ) + LEFT JOIN eth_txs AS prove_tx_data + ON ( + l1_batches.eth_prove_tx_id = prove_tx_data.id + AND prove_tx_data.confirmed_eth_tx_history_id IS NOT NULL + ) + LEFT JOIN eth_txs AS execute_tx_data + ON ( + l1_batches.eth_execute_tx_id = execute_tx_data.id + AND execute_tx_data.confirmed_eth_tx_history_id IS NOT NULL + ) WHERE l1_batches.number = $1 "#, diff --git a/core/lib/dal/src/eth_sender_dal.rs b/core/lib/dal/src/eth_sender_dal.rs index 4efead269d1b..0e5cbc0bac1b 100644 --- a/core/lib/dal/src/eth_sender_dal.rs +++ b/core/lib/dal/src/eth_sender_dal.rs @@ -2,11 +2,14 @@ use std::{convert::TryFrom, str::FromStr}; use anyhow::Context as _; use sqlx::types::chrono::{DateTime, Utc}; -use zksync_db_connection::{connection::Connection, interpolate_query, match_query_as}; +use zksync_db_connection::{ + connection::Connection, error::DalResult, instrument::InstrumentExt, interpolate_query, + match_query_as, +}; use zksync_types::{ aggregated_operations::AggregatedActionType, eth_sender::{EthTx, EthTxBlobSidecar, TxHistory, TxHistoryToSend}, - Address, L1BatchNumber, H256, U256, + Address, L1BatchNumber, SLChainId, H256, U256, }; use crate::{ @@ -421,6 +424,27 @@ impl EthSenderDal<'_, '_> { Ok(()) } + pub async fn get_batch_commit_chain_id( + &mut self, + batch_number: L1BatchNumber, + ) -> DalResult> { + let row = sqlx::query!( + r#" + SELECT eth_txs.chain_id + FROM l1_batches + JOIN eth_txs ON eth_txs.id = l1_batches.eth_commit_tx_id + WHERE + number = $1 + "#, + i64::from(batch_number.0), + ) + .instrument("get_batch_commit_chain_id") + .with_arg("batch_number", &batch_number) + .fetch_optional(self.storage) + .await?; + Ok(row.and_then(|r| r.chain_id).map(|id| SLChainId(id as u64))) + } + pub async fn get_confirmed_tx_hash_by_eth_tx_id( &mut self, eth_tx_id: u32, @@ -464,6 +488,7 @@ impl EthSenderDal<'_, '_> { tx_type: AggregatedActionType, tx_hash: H256, confirmed_at: DateTime, + sl_chain_id: Option, ) -> anyhow::Result<()> { let mut transaction = self .storage @@ -489,10 +514,11 @@ impl EthSenderDal<'_, '_> { // Insert general tx descriptor. let eth_tx_id = sqlx::query_scalar!( - "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, created_at, updated_at) \ - VALUES ('\\x00', 0, $1, '', 0, now(), now()) \ + "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, chain_id, created_at, updated_at) \ + VALUES ('\\x00', 0, $1, '', 0, $2, now(), now()) \ RETURNING id", - tx_type.to_string() + tx_type.to_string(), + sl_chain_id.map(|chain_id| chain_id.0 as i64) ) .fetch_one(transaction.conn()) .await?; diff --git a/core/lib/dal/src/eth_watcher_dal.rs b/core/lib/dal/src/eth_watcher_dal.rs index 062ad47219d8..84061a03650d 100644 --- a/core/lib/dal/src/eth_watcher_dal.rs +++ b/core/lib/dal/src/eth_watcher_dal.rs @@ -12,6 +12,7 @@ pub struct EthWatcherDal<'a, 'c> { pub enum EventType { ProtocolUpgrades, PriorityTransactions, + ChainBatchRoot, } impl EthWatcherDal<'_, '_> { diff --git a/core/lib/dal/src/models/storage_block.rs b/core/lib/dal/src/models/storage_block.rs index 159ed71cc3e9..54635932a1af 100644 --- a/core/lib/dal/src/models/storage_block.rs +++ b/core/lib/dal/src/models/storage_block.rs @@ -10,7 +10,7 @@ use zksync_types::{ commitment::{L1BatchCommitmentMode, L1BatchMetaParameters, L1BatchMetadata, PubdataParams}, fee_model::{BatchFeeInput, L1PeggedBatchFeeModelInput, PubdataIndependentBatchFeeModelInput}, l2_to_l1_log::{L2ToL1Log, SystemL2ToL1Log, UserL2ToL1Log}, - Address, Bloom, L1BatchNumber, L2BlockNumber, ProtocolVersionId, H256, + Address, Bloom, L1BatchNumber, L2BlockNumber, ProtocolVersionId, SLChainId, H256, }; /// This is the gas limit that was used inside blocks before we started saving block gas limit into the database. @@ -317,10 +317,13 @@ pub(crate) struct StorageBlockDetails { pub root_hash: Option>, pub commit_tx_hash: Option, pub committed_at: Option, + pub commit_chain_id: Option, pub prove_tx_hash: Option, pub proven_at: Option, + pub prove_chain_id: Option, pub execute_tx_hash: Option, pub executed_at: Option, + pub execute_chain_id: Option, // L1 gas price assumed in the corresponding batch pub l1_gas_price: i64, // L2 gas price assumed in the corresponding batch @@ -355,6 +358,7 @@ impl From for api::BlockDetails { committed_at: details .committed_at .map(|committed_at| DateTime::from_naive_utc_and_offset(committed_at, Utc)), + commit_chain_id: details.commit_chain_id.map(|id| SLChainId(id as u64)), prove_tx_hash: details .prove_tx_hash .as_deref() @@ -362,6 +366,7 @@ impl From for api::BlockDetails { proven_at: details .proven_at .map(|proven_at| DateTime::::from_naive_utc_and_offset(proven_at, Utc)), + prove_chain_id: details.prove_chain_id.map(|id| SLChainId(id as u64)), execute_tx_hash: details .execute_tx_hash .as_deref() @@ -369,6 +374,7 @@ impl From for api::BlockDetails { executed_at: details .executed_at .map(|executed_at| DateTime::::from_naive_utc_and_offset(executed_at, Utc)), + execute_chain_id: details.execute_chain_id.map(|id| SLChainId(id as u64)), l1_gas_price: details.l1_gas_price as u64, l2_fair_gas_price: details.l2_fair_gas_price as u64, fair_pubdata_price: details.fair_pubdata_price.map(|x| x as u64), @@ -399,10 +405,13 @@ pub(crate) struct StorageL1BatchDetails { pub root_hash: Option>, pub commit_tx_hash: Option, pub committed_at: Option, + pub commit_chain_id: Option, pub prove_tx_hash: Option, pub proven_at: Option, + pub prove_chain_id: Option, pub execute_tx_hash: Option, pub executed_at: Option, + pub execute_chain_id: Option, pub l1_gas_price: i64, pub l2_fair_gas_price: i64, pub fair_pubdata_price: Option, @@ -432,6 +441,7 @@ impl From for api::L1BatchDetails { committed_at: details .committed_at .map(|committed_at| DateTime::::from_naive_utc_and_offset(committed_at, Utc)), + commit_chain_id: details.commit_chain_id.map(|id| SLChainId(id as u64)), prove_tx_hash: details .prove_tx_hash .as_deref() @@ -439,6 +449,7 @@ impl From for api::L1BatchDetails { proven_at: details .proven_at .map(|proven_at| DateTime::::from_naive_utc_and_offset(proven_at, Utc)), + prove_chain_id: details.prove_chain_id.map(|id| SLChainId(id as u64)), execute_tx_hash: details .execute_tx_hash .as_deref() @@ -446,6 +457,7 @@ impl From for api::L1BatchDetails { executed_at: details .executed_at .map(|executed_at| DateTime::::from_naive_utc_and_offset(executed_at, Utc)), + execute_chain_id: details.execute_chain_id.map(|id| SLChainId(id as u64)), l1_gas_price: details.l1_gas_price as u64, l2_fair_gas_price: details.l2_fair_gas_price as u64, fair_pubdata_price: details.fair_pubdata_price.map(|x| x as u64), diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index 0fd61fd173b6..d95c6dd3658f 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -23,6 +23,9 @@ impl FromEnv for L1Secrets { .context("ETH_CLIENT_WEB3_URL")? .parse() .context("ETH_CLIENT_WEB3_URL")?, + gateway_rpc_url: std::env::var("ETH_CLIENT_GATEWAY_WEB3_URL") + .ok() + .map(|url| url.parse().expect("ETH_CLIENT_GATEWAY_WEB3_URL")), }) } } @@ -97,6 +100,7 @@ mod tests { }, L1Secrets { l1_rpc_url: "http://127.0.0.1:8545".to_string().parse().unwrap(), + gateway_rpc_url: Some("http://127.0.0.1:8547".to_string().parse().unwrap()), }, ) } @@ -140,6 +144,7 @@ mod tests { ETH_WATCH_CONFIRMATIONS_FOR_ETH_EVENT="0" ETH_WATCH_ETH_NODE_POLL_INTERVAL="300" ETH_CLIENT_WEB3_URL="http://127.0.0.1:8545" + ETH_CLIENT_GATEWAY_WEB3_URL="http://127.0.0.1:8547" "#; lock.set_env(config); diff --git a/core/lib/eth_client/src/clients/http/query.rs b/core/lib/eth_client/src/clients/http/query.rs index de115cf6e7a6..f0f745a8b4db 100644 --- a/core/lib/eth_client/src/clients/http/query.rs +++ b/core/lib/eth_client/src/clients/http/query.rs @@ -425,7 +425,7 @@ where let chunk_size = chunk_end - chunk_start + 1; let fee_history = client - .fee_history(U64::from(chunk_size).into(), chunk_end.into(), vec![]) + .fee_history(U64::from(chunk_size).into(), chunk_end.into(), None) .rpc_context("fee_history") .with_arg("chunk_size", &chunk_size) .with_arg("block", &chunk_end) diff --git a/core/lib/eth_client/src/clients/mock.rs b/core/lib/eth_client/src/clients/mock.rs index 8e81b6c6f209..2b0100a39dc6 100644 --- a/core/lib/eth_client/src/clients/mock.rs +++ b/core/lib/eth_client/src/clients/mock.rs @@ -10,7 +10,7 @@ use zksync_types::{ api::FeeHistory, ethabi, web3::{self, contract::Tokenize, BlockId}, - Address, L1ChainId, L2ChainId, SLChainId, EIP_4844_TX_TYPE, H160, H256, U256, U64, + Address, L2ChainId, SLChainId, EIP_4844_TX_TYPE, H160, H256, U256, U64, }; use zksync_web3_decl::client::{MockClient, MockClientBuilder, Network, L1, L2}; @@ -237,6 +237,7 @@ pub struct MockSettlementLayerBuilder { non_ordering_confirmations: bool, inner: Arc>, call_handler: Box, + chain_id: u64, _network: PhantomData, } @@ -267,6 +268,7 @@ impl Default for MockSettlementLayerBuilder { call_handler: Box::new(|call, block_id| { panic!("Unexpected eth_call: {call:?}, {block_id:?}"); }), + chain_id: 9, _network: PhantomData, } } @@ -315,6 +317,10 @@ impl MockSettlementLayerBuilder { } } + pub fn with_chain_id(self, chain_id: u64) -> Self { + Self { chain_id, ..self } + } + fn get_block_by_number( fee_history: &[BaseFees], block: web3::BlockNumber, @@ -449,12 +455,12 @@ fn l2_eth_fee_history( impl SupportedMockSLNetwork for L1 { fn build_client(builder: MockSettlementLayerBuilder) -> MockClient { - const CHAIN_ID: L1ChainId = L1ChainId(9); - let base_fee_history = builder.base_fee_history.clone(); + let chain_id = builder.chain_id; + let net = SLChainId(builder.chain_id).into(); builder - .build_client_inner(CHAIN_ID.0, CHAIN_ID.into()) + .build_client_inner(chain_id, net) .method( "eth_feeHistory", move |block_count: U64, newest_block: web3::BlockNumber, _: Option>| { @@ -467,12 +473,12 @@ impl SupportedMockSLNetwork for L1 { impl SupportedMockSLNetwork for L2 { fn build_client(builder: MockSettlementLayerBuilder) -> MockClient { - let chain_id: L2ChainId = 9u64.try_into().unwrap(); - let base_fee_history = builder.base_fee_history.clone(); + let chain_id = builder.chain_id; + let net = L2ChainId::new(builder.chain_id).unwrap().into(); builder - .build_client_inner(chain_id.as_u64(), chain_id.into()) + .build_client_inner(chain_id, net) .method( "eth_feeHistory", move |block_count: U64, newest_block: web3::BlockNumber, _: Option>| { diff --git a/core/lib/l1_contract_interface/src/i_executor/methods/commit_batches.rs b/core/lib/l1_contract_interface/src/i_executor/methods/commit_batches.rs index 67819f7d7ccd..01e362fb7d65 100644 --- a/core/lib/l1_contract_interface/src/i_executor/methods/commit_batches.rs +++ b/core/lib/l1_contract_interface/src/i_executor/methods/commit_batches.rs @@ -1,11 +1,11 @@ use zksync_types::{ commitment::{L1BatchCommitmentMode, L1BatchWithMetadata}, - ethabi::Token, + ethabi::{encode, Token}, pubdata_da::PubdataSendingMode, }; use crate::{ - i_executor::structures::{CommitBatchInfo, StoredBatchInfo}, + i_executor::structures::{CommitBatchInfo, StoredBatchInfo, SUPPORTED_ENCODING_VERSION}, Tokenizable, Tokenize, }; @@ -20,13 +20,29 @@ pub struct CommitBatches<'a> { impl Tokenize for CommitBatches<'_> { fn into_tokens(self) -> Vec { + let protocol_version = self.l1_batches[0].header.protocol_version.unwrap(); let stored_batch_info = StoredBatchInfo::from(self.last_committed_l1_batch).into_token(); let l1_batches_to_commit = self .l1_batches .iter() .map(|batch| CommitBatchInfo::new(self.mode, batch, self.pubdata_da).into_token()) .collect(); - - vec![stored_batch_info, Token::Array(l1_batches_to_commit)] + if protocol_version.is_pre_gateway() { + vec![stored_batch_info, Token::Array(l1_batches_to_commit)] + } else { + let mut encoded_data = encode(&[ + stored_batch_info.clone(), + Token::Array(l1_batches_to_commit), + ]); + encoded_data.insert(0, SUPPORTED_ENCODING_VERSION); + vec![ + Token::Uint((self.last_committed_l1_batch.header.number.0 + 1).into()), + Token::Uint( + (self.last_committed_l1_batch.header.number.0 + self.l1_batches.len() as u32) + .into(), + ), + Token::Bytes(encoded_data), + ] + } } } diff --git a/core/lib/l1_contract_interface/src/i_executor/methods/execute_batches.rs b/core/lib/l1_contract_interface/src/i_executor/methods/execute_batches.rs index fe5213d8c561..649a7ca2b419 100644 --- a/core/lib/l1_contract_interface/src/i_executor/methods/execute_batches.rs +++ b/core/lib/l1_contract_interface/src/i_executor/methods/execute_batches.rs @@ -1,20 +1,55 @@ -use zksync_types::{commitment::L1BatchWithMetadata, ethabi::Token}; +use zksync_types::{ + commitment::{L1BatchWithMetadata, PriorityOpsMerkleProof}, + ethabi::{encode, Token}, +}; -use crate::{i_executor::structures::StoredBatchInfo, Tokenizable, Tokenize}; +use crate::{ + i_executor::structures::{StoredBatchInfo, SUPPORTED_ENCODING_VERSION}, + Tokenizable, Tokenize, +}; /// Input required to encode `executeBatches` call. #[derive(Debug, Clone)] pub struct ExecuteBatches { pub l1_batches: Vec, + pub priority_ops_proofs: Vec, } impl Tokenize for &ExecuteBatches { fn into_tokens(self) -> Vec { - vec![Token::Array( - self.l1_batches - .iter() - .map(|batch| StoredBatchInfo::from(batch).into_token()) - .collect(), - )] + let protocol_version = self.l1_batches[0].header.protocol_version.unwrap(); + + if protocol_version.is_pre_gateway() { + vec![Token::Array( + self.l1_batches + .iter() + .map(|batch| StoredBatchInfo::from(batch).into_token()) + .collect(), + )] + } else { + let encoded_data = encode(&[ + Token::Array( + self.l1_batches + .iter() + .map(|batch| StoredBatchInfo::from(batch).into_token()) + .collect(), + ), + Token::Array( + self.priority_ops_proofs + .iter() + .map(|proof| proof.into_token()) + .collect(), + ), + ]); + let execute_data = [[SUPPORTED_ENCODING_VERSION].to_vec(), encoded_data] + .concat() + .to_vec(); + + vec![ + Token::Uint(self.l1_batches[0].header.number.0.into()), + Token::Uint(self.l1_batches.last().unwrap().header.number.0.into()), + Token::Bytes(execute_data), + ] + } } } diff --git a/core/lib/l1_contract_interface/src/i_executor/methods/prove_batches.rs b/core/lib/l1_contract_interface/src/i_executor/methods/prove_batches.rs index 935d8a44e0b7..a54cf407d09f 100644 --- a/core/lib/l1_contract_interface/src/i_executor/methods/prove_batches.rs +++ b/core/lib/l1_contract_interface/src/i_executor/methods/prove_batches.rs @@ -1,8 +1,14 @@ use crypto_codegen::serialize_proof; use zksync_prover_interface::outputs::L1BatchProofForL1; -use zksync_types::{commitment::L1BatchWithMetadata, ethabi::Token, U256}; +use zksync_types::{ + commitment::L1BatchWithMetadata, + ethabi::{encode, Token}, +}; -use crate::{i_executor::structures::StoredBatchInfo, Tokenizable, Tokenize}; +use crate::{ + i_executor::structures::{StoredBatchInfo, SUPPORTED_ENCODING_VERSION}, + Tokenizable, Tokenize, +}; /// Input required to encode `proveBatches` call. #[derive(Debug, Clone)] @@ -15,13 +21,14 @@ pub struct ProveBatches { impl Tokenize for &ProveBatches { fn into_tokens(self) -> Vec { - let prev_l1_batch = StoredBatchInfo::from(&self.prev_l1_batch).into_token(); + let prev_l1_batch_info = StoredBatchInfo::from(&self.prev_l1_batch).into_token(); let batches_arg = self .l1_batches .iter() .map(|batch| StoredBatchInfo::from(batch).into_token()) .collect(); let batches_arg = Token::Array(batches_arg); + let protocol_version = self.l1_batches[0].header.protocol_version.unwrap(); if self.should_verify { // currently we only support submitting a single proof @@ -29,40 +36,53 @@ impl Tokenize for &ProveBatches { assert_eq!(self.l1_batches.len(), 1); let L1BatchProofForL1 { - aggregation_result_coords, - scheduler_proof, - .. + scheduler_proof, .. } = self.proofs.first().unwrap(); let (_, proof) = serialize_proof(scheduler_proof); - let aggregation_result_coords = if self.l1_batches[0] - .header - .protocol_version - .unwrap() - .is_pre_boojum() - { - Token::Array( - aggregation_result_coords - .iter() - .map(|bytes| Token::Uint(U256::from_big_endian(bytes))) - .collect(), - ) + if protocol_version.is_pre_gateway() { + let proof_input = Token::Tuple(vec![ + Token::Array(Vec::new()), + Token::Array(proof.into_iter().map(Token::Uint).collect()), + ]); + + vec![prev_l1_batch_info, batches_arg, proof_input] } else { - Token::Array(Vec::new()) - }; - let proof_input = Token::Tuple(vec![ - aggregation_result_coords, - Token::Array(proof.into_iter().map(Token::Uint).collect()), - ]); + let proof_input = Token::Array(proof.into_iter().map(Token::Uint).collect()); - vec![prev_l1_batch, batches_arg, proof_input] - } else { + let encoded_data = encode(&[prev_l1_batch_info, batches_arg, proof_input]); + let prove_data = [[SUPPORTED_ENCODING_VERSION].to_vec(), encoded_data] + .concat() + .to_vec(); + + vec![ + Token::Uint((self.prev_l1_batch.header.number.0 + 1).into()), + Token::Uint( + (self.prev_l1_batch.header.number.0 + self.l1_batches.len() as u32).into(), + ), + Token::Bytes(prove_data), + ] + } + } else if protocol_version.is_pre_gateway() { vec![ - prev_l1_batch, + prev_l1_batch_info, batches_arg, Token::Tuple(vec![Token::Array(vec![]), Token::Array(vec![])]), ] + } else { + let encoded_data = encode(&[prev_l1_batch_info, batches_arg, Token::Array(vec![])]); + let prove_data = [[SUPPORTED_ENCODING_VERSION].to_vec(), encoded_data] + .concat() + .to_vec(); + + vec![ + Token::Uint((self.prev_l1_batch.header.number.0 + 1).into()), + Token::Uint( + (self.prev_l1_batch.header.number.0 + self.l1_batches.len() as u32).into(), + ), + Token::Bytes(prove_data), + ] } } } diff --git a/core/lib/l1_contract_interface/src/i_executor/structures/commit_batch_info.rs b/core/lib/l1_contract_interface/src/i_executor/structures/commit_batch_info.rs index 6438aeb7f55c..573b3c65a3e3 100644 --- a/core/lib/l1_contract_interface/src/i_executor/structures/commit_batch_info.rs +++ b/core/lib/l1_contract_interface/src/i_executor/structures/commit_batch_info.rs @@ -3,10 +3,10 @@ use zksync_types::{ pre_boojum_serialize_commitments, serialize_commitments, L1BatchCommitmentMode, L1BatchWithMetadata, }, - ethabi::Token, + ethabi::{ParamType, Token}, pubdata_da::PubdataSendingMode, - web3::contract::Error as ContractError, - ProtocolVersionId, U256, + web3::{contract::Error as ContractError, keccak256}, + ProtocolVersionId, H256, U256, }; use crate::{ @@ -15,9 +15,9 @@ use crate::{ }; /// These are used by the L1 Contracts to indicate what DA layer is used for pubdata -const PUBDATA_SOURCE_CALLDATA: u8 = 0; -const PUBDATA_SOURCE_BLOBS: u8 = 1; -const PUBDATA_SOURCE_CUSTOM: u8 = 2; +pub const PUBDATA_SOURCE_CALLDATA: u8 = 0; +pub const PUBDATA_SOURCE_BLOBS: u8 = 1; +pub const PUBDATA_SOURCE_CUSTOM_PRE_GATEWAY: u8 = 2; /// Encoding for `CommitBatchInfo` from `IExecutor.sol` for a contract running in rollup mode. #[derive(Debug)] @@ -40,6 +40,21 @@ impl<'a> CommitBatchInfo<'a> { } } + pub fn post_gateway_schema() -> ParamType { + ParamType::Tuple(vec![ + ParamType::Uint(64), // `batch_number` + ParamType::Uint(64), // `timestamp` + ParamType::Uint(64), // `index_repeated_storage_changes` + ParamType::FixedBytes(32), // `new_state_root` + ParamType::Uint(256), // `numberOfLayer1Txs` + ParamType::FixedBytes(32), // `priorityOperationsHash` + ParamType::FixedBytes(32), // `bootloaderHeapInitialContentsHash` + ParamType::FixedBytes(32), // `eventsQueueStateHash` + ParamType::Bytes, // `systemLogs` + ParamType::Bytes, // `operatorDAInput` + ]) + } + fn base_tokens(&self) -> Vec { if self .l1_batch_with_metadata @@ -199,7 +214,7 @@ impl Tokenizable for CommitBatchInfo<'_> { // Here we're not pushing any pubdata on purpose; no pubdata is sent in Validium mode. L1BatchCommitmentMode::Validium => vec![], })); - } else { + } else if protocol_version.is_pre_gateway() { tokens.push(Token::Bytes(match (self.mode, self.pubdata_da) { // Here we're not pushing any pubdata on purpose; no pubdata is sent in Validium mode. ( @@ -211,14 +226,12 @@ impl Tokenizable for CommitBatchInfo<'_> { (L1BatchCommitmentMode::Validium, PubdataSendingMode::Blobs) => { vec![PUBDATA_SOURCE_BLOBS] } - (L1BatchCommitmentMode::Rollup, PubdataSendingMode::Custom) => { panic!("Custom pubdata DA is incompatible with Rollup mode") } (L1BatchCommitmentMode::Validium, PubdataSendingMode::Custom) => { - vec![PUBDATA_SOURCE_CUSTOM] + vec![PUBDATA_SOURCE_CUSTOM_PRE_GATEWAY] } - ( L1BatchCommitmentMode::Rollup, PubdataSendingMode::Calldata | PubdataSendingMode::RelayedL2Calldata, @@ -227,7 +240,8 @@ impl Tokenizable for CommitBatchInfo<'_> { // even if we are not using blobs. let pubdata = self.pubdata_input(); let blob_commitment = KzgInfo::new(&pubdata).to_blob_commitment(); - std::iter::once(PUBDATA_SOURCE_CALLDATA) + [PUBDATA_SOURCE_CALLDATA] + .into_iter() .chain(pubdata) .chain(blob_commitment) .collect() @@ -239,7 +253,86 @@ impl Tokenizable for CommitBatchInfo<'_> { let kzg_info = KzgInfo::new(blob); kzg_info.to_pubdata_commitment() }); - std::iter::once(PUBDATA_SOURCE_BLOBS) + [PUBDATA_SOURCE_BLOBS] + .into_iter() + .chain(pubdata_commitments) + .collect() + } + })); + } else { + let state_diff_hash = self + .l1_batch_with_metadata + .metadata + .state_diff_hash + .expect("Failed to get state_diff_hash from metadata"); + tokens.push(Token::Bytes(match (self.mode, self.pubdata_da) { + // Validiums with custom DA need the inclusion data to be part of operator_da_input + (L1BatchCommitmentMode::Validium, PubdataSendingMode::Custom) => { + let mut operator_da_input: Vec = state_diff_hash.0.into(); + + operator_da_input.extend( + &self + .l1_batch_with_metadata + .metadata + .da_inclusion_data + .clone() + .unwrap_or_default(), + ); + + operator_da_input + } + // Here we're not pushing any pubdata on purpose; no pubdata is sent in Validium mode. + ( + L1BatchCommitmentMode::Validium, + PubdataSendingMode::Calldata + | PubdataSendingMode::RelayedL2Calldata + | PubdataSendingMode::Blobs, + ) => state_diff_hash.0.into(), + (L1BatchCommitmentMode::Rollup, PubdataSendingMode::Custom) => { + panic!("Custom pubdata DA is incompatible with Rollup mode") + } + ( + L1BatchCommitmentMode::Rollup, + PubdataSendingMode::Calldata | PubdataSendingMode::RelayedL2Calldata, + ) => { + let pubdata = self.pubdata_input(); + + let header = + compose_header_for_l1_commit_rollup(state_diff_hash, pubdata.clone()); + + // We compute and add the blob commitment to the pubdata payload so that we can verify the proof + // even if we are not using blobs. + let blob_commitment = KzgInfo::new(&pubdata).to_blob_commitment(); + header + .into_iter() + .chain([PUBDATA_SOURCE_CALLDATA]) + .chain(pubdata) + .chain(blob_commitment) + .collect() + } + (L1BatchCommitmentMode::Rollup, PubdataSendingMode::Blobs) => { + let pubdata = self.pubdata_input(); + + let header = + compose_header_for_l1_commit_rollup(state_diff_hash, pubdata.clone()); + + let pubdata_commitments: Vec = pubdata + .chunks(ZK_SYNC_BYTES_PER_BLOB) + .flat_map(|blob| { + let kzg_info = KzgInfo::new(blob); + + let blob_commitment = kzg_info.to_pubdata_commitment(); + + // We also append 0s to show that we do not reuse previously published blobs. + blob_commitment + .into_iter() + .chain([0u8; 32]) + .collect::>() + }) + .collect(); + header + .into_iter() + .chain([PUBDATA_SOURCE_BLOBS]) .chain(pubdata_commitments) .collect() } @@ -249,3 +342,38 @@ impl Tokenizable for CommitBatchInfo<'_> { Token::Tuple(tokens) } } + +fn compose_header_for_l1_commit_rollup(state_diff_hash: H256, pubdata: Vec) -> Vec { + // The preimage under the hash `l2DAValidatorOutputHash` is expected to be in the following format: + // - First 32 bytes are the hash of the uncompressed state diff. + // - Then, there is a 32-byte hash of the full pubdata. + // - Then, there is the 1-byte number of blobs published. + // - Then, there are linear hashes of the published blobs, 32 bytes each. + + let mut full_header = vec![]; + + full_header.extend(state_diff_hash.0); + + let mut full_pubdata = pubdata; + let full_pubdata_hash = keccak256(&full_pubdata); + full_header.extend(full_pubdata_hash); + + // Now, we need to calculate the linear hashes of the blobs. + // Firstly, let's pad the pubdata to the size of the blob. + if full_pubdata.len() % ZK_SYNC_BYTES_PER_BLOB != 0 { + full_pubdata.resize( + full_pubdata.len() + ZK_SYNC_BYTES_PER_BLOB + - full_pubdata.len() % ZK_SYNC_BYTES_PER_BLOB, + 0, + ); + } + full_header.push((full_pubdata.len() / ZK_SYNC_BYTES_PER_BLOB) as u8); + + full_pubdata + .chunks(ZK_SYNC_BYTES_PER_BLOB) + .for_each(|chunk| { + full_header.extend(keccak256(chunk)); + }); + + full_header +} diff --git a/core/lib/l1_contract_interface/src/i_executor/structures/mod.rs b/core/lib/l1_contract_interface/src/i_executor/structures/mod.rs index aa9872049015..9583e0204f75 100644 --- a/core/lib/l1_contract_interface/src/i_executor/structures/mod.rs +++ b/core/lib/l1_contract_interface/src/i_executor/structures/mod.rs @@ -6,4 +6,12 @@ mod stored_batch_info; #[cfg(test)] mod tests; -pub use self::{commit_batch_info::CommitBatchInfo, stored_batch_info::StoredBatchInfo}; +pub use self::{ + commit_batch_info::{ + CommitBatchInfo, PUBDATA_SOURCE_BLOBS, PUBDATA_SOURCE_CALLDATA, + PUBDATA_SOURCE_CUSTOM_PRE_GATEWAY, + }, + stored_batch_info::StoredBatchInfo, +}; + +pub const SUPPORTED_ENCODING_VERSION: u8 = 0; diff --git a/core/lib/l1_contract_interface/src/i_executor/structures/stored_batch_info.rs b/core/lib/l1_contract_interface/src/i_executor/structures/stored_batch_info.rs index 26f9b30392ea..d2090097dbeb 100644 --- a/core/lib/l1_contract_interface/src/i_executor/structures/stored_batch_info.rs +++ b/core/lib/l1_contract_interface/src/i_executor/structures/stored_batch_info.rs @@ -23,17 +23,17 @@ pub struct StoredBatchInfo { } impl StoredBatchInfo { - fn schema() -> Vec { - vec![ParamType::Tuple(vec![ - ParamType::Uint(64), - ParamType::FixedBytes(32), - ParamType::Uint(64), - ParamType::Uint(256), - ParamType::FixedBytes(32), - ParamType::FixedBytes(32), - ParamType::Uint(256), - ParamType::FixedBytes(32), - ])] + pub fn schema() -> ParamType { + ParamType::Tuple(vec![ + ParamType::Uint(64), // `batch_number` + ParamType::FixedBytes(32), // `batch_hash` + ParamType::Uint(64), // `index_repeated_storage_changes` + ParamType::Uint(256), // `number_of_layer1_txs` + ParamType::FixedBytes(32), // `priority_operations_hash` + ParamType::FixedBytes(32), // `l2_logs_tree_root` + ParamType::Uint(256), // `timestamp` + ParamType::FixedBytes(32), // `commitment` + ]) } /// Encodes the struct into RLP. @@ -43,7 +43,7 @@ impl StoredBatchInfo { /// Decodes the struct from RLP. pub fn decode(rlp: &[u8]) -> anyhow::Result { - let [token] = ethabi::decode_whole(&Self::schema(), rlp)? + let [token] = ethabi::decode_whole(&[Self::schema()], rlp)? .try_into() .unwrap(); Ok(Self::from_token(token)?) diff --git a/core/lib/mini_merkle_tree/src/lib.rs b/core/lib/mini_merkle_tree/src/lib.rs index d34f57999961..fed28edb10c0 100644 --- a/core/lib/mini_merkle_tree/src/lib.rs +++ b/core/lib/mini_merkle_tree/src/lib.rs @@ -159,7 +159,7 @@ where /// Returns the root hash and the Merkle proof for a leaf with the specified 0-based `index`. /// `index` is relative to the leftmost uncached leaf. /// # Panics - /// Panics if `index` is >= than the number of leaves in the tree. + /// Panics if `index` is >= than the number of uncached leaves in the tree. pub fn merkle_root_and_path(&self, index: usize) -> (H256, Vec) { assert!(index < self.hashes.len(), "leaf index out of bounds"); let mut end_path = vec![]; @@ -170,6 +170,15 @@ where ) } + /// Returns the root hash and the Merkle proof for a leaf with the specified 0-based `index`. + /// `index` is an absolute position of the leaf. + /// # Panics + /// Panics if leaf at `index` is cached or if `index` is >= than the number of leaves in the tree. + pub fn merkle_root_and_path_by_absolute_index(&self, index: usize) -> (H256, Vec) { + assert!(index >= self.start_index, "leaf is cached"); + self.merkle_root_and_path(index - self.start_index) + } + /// Returns the root hash and the Merkle proofs for a range of leafs. /// The range is 0..length, where `0` is the leftmost untrimmed leaf (i.e. leaf under `self.start_index`). /// # Panics @@ -280,6 +289,16 @@ where hashes[0] } + + /// Returns the number of non-empty merkle tree elements. + pub fn length(&self) -> usize { + self.start_index + self.hashes.len() + } + + /// Returns index of the leftmost untrimmed leaf. + pub fn start_index(&self) -> usize { + self.start_index + } } fn tree_depth_by_size(tree_size: usize) -> usize { @@ -314,6 +333,12 @@ impl HashEmptySubtree<[u8; 88]> for KeccakHasher { } } +impl HashEmptySubtree<[u8; 96]> for KeccakHasher { + fn empty_leaf_hash(&self) -> H256 { + self.hash_bytes(&[0_u8; 96]) + } +} + fn compute_empty_tree_hashes(empty_leaf_hash: H256) -> Vec { iter::successors(Some(empty_leaf_hash), |hash| { Some(KeccakHasher.compress(hash, hash)) diff --git a/core/lib/mini_merkle_tree/src/tests.rs b/core/lib/mini_merkle_tree/src/tests.rs index 5aadab1d4e6f..51a684d945fd 100644 --- a/core/lib/mini_merkle_tree/src/tests.rs +++ b/core/lib/mini_merkle_tree/src/tests.rs @@ -4,6 +4,10 @@ use std::collections::VecDeque; use super::*; +fn empty_subtree_root(depth: usize) -> H256 { + >::empty_subtree_hash(&KeccakHasher, depth) +} + #[test] fn tree_depth_is_computed_correctly() { const TREE_SIZES_AND_DEPTHS: &[(usize, usize)] = &[ @@ -29,7 +33,7 @@ fn hash_of_empty_tree_with_single_item() { let len = 1 << depth; println!("checking tree with {len} items"); let tree = MiniMerkleTree::new(iter::once([0_u8; 88]), Some(len)); - assert_eq!(tree.merkle_root(), KeccakHasher.empty_subtree_hash(depth)); + assert_eq!(tree.merkle_root(), empty_subtree_root(depth)); } } @@ -42,10 +46,10 @@ fn hash_of_large_empty_tree_with_multiple_items() { let tree = MiniMerkleTree::new(leaves.clone(), Some(tree_size)); let depth = tree_depth_by_size(tree_size); - assert_eq!(tree.merkle_root(), KeccakHasher.empty_subtree_hash(depth)); + assert_eq!(tree.merkle_root(), empty_subtree_root(depth)); let tree = MiniMerkleTree::new(leaves, None); let depth = tree_depth_by_size(tree_size); - assert_eq!(tree.merkle_root(), KeccakHasher.empty_subtree_hash(depth)); + assert_eq!(tree.merkle_root(), empty_subtree_root(depth)); } } @@ -285,20 +289,20 @@ fn merkle_proofs_are_valid_in_very_small_trees() { fn dynamic_merkle_tree_growth() { let mut tree = MiniMerkleTree::new(iter::empty(), None); assert_eq!(tree.binary_tree_size, 1); - assert_eq!(tree.merkle_root(), KeccakHasher.empty_subtree_hash(0)); + assert_eq!(tree.merkle_root(), empty_subtree_root(0)); for len in 1..=8_usize { tree.push([0; 88]); assert_eq!(tree.binary_tree_size, len.next_power_of_two()); let depth = tree_depth_by_size(tree.binary_tree_size); - assert_eq!(tree.merkle_root(), KeccakHasher.empty_subtree_hash(depth)); + assert_eq!(tree.merkle_root(), empty_subtree_root(depth)); } // Shouldn't shrink after caching tree.trim_start(6); assert_eq!(tree.binary_tree_size, 8); - assert_eq!(tree.merkle_root(), KeccakHasher.empty_subtree_hash(3)); + assert_eq!(tree.merkle_root(), empty_subtree_root(3)); } #[test] diff --git a/core/lib/multivm/src/versions/shadow/tests.rs b/core/lib/multivm/src/versions/shadow/tests.rs index 4466d96a96b7..354459853f11 100644 --- a/core/lib/multivm/src/versions/shadow/tests.rs +++ b/core/lib/multivm/src/versions/shadow/tests.rs @@ -3,11 +3,11 @@ use std::{collections::HashSet, rc::Rc}; use zksync_types::{writes::StateDiffRecord, StorageKey, Transaction, H256, U256}; -use zksync_vm_interface::pubdata::PubdataBuilder; use super::ShadowedFastVm; use crate::{ interface::{ + pubdata::{PubdataBuilder, PubdataInput}, utils::{ShadowMut, ShadowRef}, CurrentExecutionState, L2BlockEnv, VmExecutionResultAndLogs, }, @@ -126,6 +126,13 @@ impl TestedVm for ShadowedFastVm { ShadowMut::Shadow(vm) => vm.push_transaction_with_refund(tx.clone(), refund), }); } + + fn pubdata_input(&self) -> PubdataInput { + self.get("pubdata_input", |r| match r { + ShadowRef::Main(vm) => vm.pubdata_input(), + ShadowRef::Shadow(vm) => vm.pubdata_input(), + }) + } } mod block_tip { @@ -297,6 +304,16 @@ mod is_write_initial { } } +mod l1_messenger { + use crate::versions::testonly::l1_messenger::*; + + #[test] + #[ignore] // Requires post-gateway system contracts + fn rollup_da_output_hash_match() { + test_rollup_da_output_hash_match::(); + } +} + mod l1_tx_execution { use crate::versions::testonly::l1_tx_execution::*; diff --git a/core/lib/multivm/src/versions/testonly/default_aa.rs b/core/lib/multivm/src/versions/testonly/default_aa.rs index 9255854e8703..0ae4cc2bbe50 100644 --- a/core/lib/multivm/src/versions/testonly/default_aa.rs +++ b/core/lib/multivm/src/versions/testonly/default_aa.rs @@ -34,7 +34,12 @@ pub(crate) fn test_default_aa_interaction() { let result = vm.vm.execute(InspectExecutionMode::OneTx); assert!(!result.result.is_failed(), "Transaction wasn't successful"); - vm.vm.finish_batch(default_pubdata_builder()); + let batch_result = vm.vm.finish_batch(default_pubdata_builder()); + assert!( + !batch_result.block_tip_execution_result.result.is_failed(), + "Batch tip execution wasn't successful" + ); + vm.vm.get_current_execution_state(); // Both deployment and ordinary nonce should be incremented by one. diff --git a/core/lib/multivm/src/versions/testonly/l1_messenger.rs b/core/lib/multivm/src/versions/testonly/l1_messenger.rs new file mode 100644 index 000000000000..daf07b2750f7 --- /dev/null +++ b/core/lib/multivm/src/versions/testonly/l1_messenger.rs @@ -0,0 +1,178 @@ +use std::rc::Rc; + +use ethabi::Token; +use zksync_contracts::l1_messenger_contract; +use zksync_test_contracts::{TestContract, TxType}; +use zksync_types::{ + address_to_h256, u256_to_h256, web3::keccak256, Address, Execute, ProtocolVersionId, + L1_MESSENGER_ADDRESS, U256, +}; +use zksync_vm_interface::SystemEnv; + +use super::{default_system_env, ContractToDeploy, TestedVm, VmTesterBuilder}; +use crate::{ + interface::{ + pubdata::{PubdataBuilder, PubdataInput}, + InspectExecutionMode, TxExecutionMode, VmInterfaceExt, + }, + pubdata_builders::RollupPubdataBuilder, + vm_latest::constants::ZK_SYNC_BYTES_PER_BLOB, +}; + +const L2_DA_VALIDATOR_OUTPUT_HASH_KEY: usize = 5; +const USED_L2_DA_VALIDATOR_ADDRESS_KEY: usize = 6; + +// Bytecode is temporary hardcoded, should be removed after contracts are merged. +fn l2_rollup_da_validator_bytecode() -> Vec { + hex::decode("0012000000000002000a000000000002000000000301001900000060043002700000012703400197000100000031035500020000003103550003000000310355000400000031035500050000003103550006000000310355000700000031035500080000003103550009000000310355000a000000310355000b000000310355000c000000310355000d000000310355000e000000310355000f00000031035500100000003103550011000000010355000001270040019d0000008004000039000000400040043f00000001002001900000005d0000c13d000000040030008c000000fe0000413d000000000201043b00000129022001970000012a0020009c000000fe0000c13d000000a40030008c000000fe0000413d0000000002000416000000000002004b000000fe0000c13d0000008402100370000000000202043b000300000002001d0000012b0020009c000000fe0000213d00000003020000290000002302200039000000000032004b000000fe0000813d00000003020000290000000402200039000000000421034f000000000604043b0000012b0060009c000000fe0000213d0000000304000029000700240040003d0000000704600029000000000034004b000000fe0000213d0000004403100370000000000303043b000400000003001d0000006403100370000000000303043b000200000003001d000000040060008c000000fe0000413d0000002002200039000000000221034f000000000202043b000000e00220027000000058022000c90000000804200039000000000064004b000000fe0000213d00000003022000290000002802200039000000000121034f000000000101043b000500e00010027a000600000006001d000000650000c13d00000000090000190000000403000029000000000039004b000000f10000c13d0000014e0040009c000000fb0000a13d0000014001000041000000000010043f0000001101000039000000040010043f00000138010000410000049a000104300000000001000416000000000001004b000000fe0000c13d0000002001000039000001000010044300000120000004430000012801000041000004990001042e000000000800001900000000090000190000014f0040009c000000570000813d0000000403400039000000000063004b000000fe0000213d00000007024000290000001101000367000000000221034f000000000502043b000000e004500270000000000034001a000000570000413d0000000007340019000000000067004b000000fe0000213d00000000020004140000012c0050009c0000007b0000813d0000000003000031000000840000013d000000070330002900000127053001970001000000510355000000000034001a000000570000413d0000000003340019000000000330007b000000570000413d000000000151034f000a00000009001d000800000008001d000900000007001d000001270330019700010000003103e50000012d0020009c000003c20000813d00000000013103df000000c0022002100000012e022001970000012c022001c700010000002103b500000000012103af0000801002000039049804930000040f0000000003010019000000600330027000000127033001970000000100200190000002450000613d0000001f0230003900000130052001970000003f025000390000013104200197000000400200043d0000000004420019000000000024004b000000000600003900000001060040390000012b0040009c0000023f0000213d00000001006001900000023f0000c13d000000400040043f0000000004320436000000000005004b000000b10000613d0000000005540019000000000600003100000011066003670000000007040019000000006806043c0000000007870436000000000057004b000000ad0000c13d0000012f063001980000000005640019000000ba0000613d000000000701034f0000000008040019000000007907043c0000000008980436000000000058004b000000b60000c13d0000001f03300190000000c70000613d000000000161034f0000000303300210000000000605043300000000063601cf000000000636022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000001020433000000200010008c0000000a05000029000004210000c13d0000000002040433000000400100043d000000400310003900000000002304350000002002100039000000000052043500000040030000390000000000310435000001320010009c0000023f0000213d0000006003100039000000400030043f000001270020009c000001270200804100000040022002100000000001010433000001270010009c00000127010080410000006001100210000000000121019f0000000002000414000001270020009c0000012702008041000000c002200210000000000112019f00000133011001c700008010020000390498048e0000040f0000000100200190000000060600002900000009040000290000000808000029000000fe0000613d000000000901043b0000000108800039000000050080006c000000670000413d000000520000013d000000400100043d000000440210003900000000009204350000002402100039000000000032043500000134020000410000000000210435000000040210003900000000000204350000042d0000013d0000000403400039000000000063004b000001000000a13d00000000010000190000049a0001043000000007014000290000001101100367000000000101043b000400e00010027a0000025d0000c13d000000000900001900000000050300190000000003090019000000020090006c000002f20000c13d000000060050006c000002fd0000813d00000007015000290000001102000367000000000112034f000000000101043b000000f801100270000000010010008c000003030000c13d00000000060500190000014e0060009c0000000604000029000000570000213d0000000403600039000000000043004b000000fe0000213d00000003016000290000002501100039000000000112034f000000000101043b000000000043004b000002fd0000813d000000e8011002700000000703300029000000000432034f0000000503500039000000000404043b000000000031001a0000000607000029000000570000413d000a00000031001d0000000a0070006b000000fe0000213d000000050600008a0000000a0060006b000000570000213d0000000a050000290000000405500039000000000075004b000000fe0000213d0000000a08000029000300070080002d0000000306200360000000000606043b000400000006001d000000e006600272000500000006001d00090110006000cd0000013f0000613d000000090800002900000005068000fa000001100060008c000000570000c13d000000090050002a000000570000413d000200090050002d000000020070006c000000fe0000413d000000f804400270000000400a00043d0000004406a00039000000800700003900000000007604350000002406a000390000000000460435000001410400004100000000004a043500000007055000290000008404a00039000000090900002900000000009404350000000404a0003900000005060000290000000000640435000000000752034f0000001f0890018f00080000000a001d000000a405a0003900000142099001980000000006950019000001610000613d000000000a07034f000000000b05001900000000ac0a043c000000000bcb043600000000006b004b0000015d0000c13d0000000703300029000000000008004b0000016f0000613d000000000797034f0000000308800210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f00000000007604350000000907000029000000000675001900000000000604350000001f06700039000001430660019700000000066500190000000004460049000000080500002900000064055000390000000000450435000000000432034f0000001f0510018f000000000216043600000144061001980000000003620019000001850000613d000000000704034f0000000008020019000000007907043c0000000008980436000000000038004b000001810000c13d000000000005004b000001920000613d000000000464034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000000312001900000000000304350000001f011000390000014501100197000000080300002900000000013100490000000001210019000001270010009c00000127010080410000006001100210000001270030009c000001270200004100000000020340190000004002200210000000000121019f0000000002000414000001270020009c0000012702008041000000c002200210000000000112019f0000800e02000039049804890000040f000000000301001900000060033002700000012703300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000805700029000001b80000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b000001b40000c13d000000000006004b000001c50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000003480000613d0000001f01400039000000600110018f0000000802100029000000000012004b00000000010000390000000101004039000100000002001d0000012b0020009c0000023f0000213d00000001001001900000023f0000c13d0000000101000029000000400010043f000000200030008c0000000604000029000000fe0000413d00000008010000290000000001010433000800000001001d00000004010000290000012c0010009c000001e10000413d000000090200002900000005012000fa000001100010008c000000570000c13d0000000103000029000000440130003900000024023000390000000403300039000000020440006c000003660000c13d000001460400004100000001050000290000000000450435000000200400003900000000004304350000000a04000029000000000042043500000150034001980000001f0440018f000000000231001900000007050000290000001105500367000001fa0000613d000000000605034f0000000007010019000000006806043c0000000007870436000000000027004b000001f60000c13d000000000004004b000002070000613d000000000335034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000000a030000290000001f023000390000015002200197000000000131001900000000000104350000004401200039000001270010009c000001270100804100000060011002100000000102000029000001270020009c00000127020080410000004002200210000000000112019f0000000002000414000001270020009c0000012702008041000000c002200210000000000112019f00008011020000390498048e0000040f000000000301001900000060033002700000001f0430018f0000012f0530019700000127033001970000000100200190000003720000613d0000000102500029000000000005004b0000022c0000613d000000000601034f0000000107000029000000006806043c0000000007870436000000000027004b000002280000c13d000000000004004b000002390000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f0130003900000130011001970000000101100029000900000001001d0000012b0010009c0000038a0000a13d0000014001000041000000000010043f0000004101000039000000040010043f00000138010000410000049a000104300000001f0430018f0000012f023001980000024e0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b0000024a0000c13d000000000004004b0000025b0000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000049a00010430000000000800001900000000090000190000014e0030009c000000570000213d0000000402300039000000000062004b000000fe0000213d00000007033000290000001101000367000000000331034f000000000303043b000000e00a30027000000000002a001a000000570000413d00000000072a0019000000000067004b000000fe0000213d0000013600300198000003130000c13d000001390030009c000003190000813d0000013a003001980000031f0000613d000000070420002900000127034001970000000002000414000100000031035500000000004a001a000000570000413d00000000044a0019000000000440007b000000570000413d00090000000a001d000a00000009001d000500000008001d000800000007001d000000000131034f000001270340019700010000003103e5000001270020009c000003c20000213d00000000013103df000000c0022002100000012e022001970000012c022001c700010000002103b500000000012103af0000000202000039049804930000040f00000000030100190000006003300270000001270330019700000001002001900000032a0000613d0000001f0230003900000130052001970000003f025000390000013104200197000000400200043d0000000004420019000000000024004b000000000600003900000001060040390000012b0040009c0000023f0000213d00000001006001900000023f0000c13d000000400040043f0000000004320436000000000005004b000000090a000029000002ad0000613d0000000005540019000000000600003100000011066003670000000007040019000000006806043c0000000007870436000000000057004b000002a90000c13d0000012f063001980000000005640019000002b60000613d000000000701034f0000000008040019000000007907043c0000000008980436000000000058004b000002b20000c13d0000001f03300190000002c30000613d000000000161034f0000000303300210000000000605043300000000063601cf000000000636022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f0000000000150435000000400100043d0000000002020433000000200020008c0000000a05000029000003420000c13d00000000020404330000013d02200197000000db03a002100000013e03300197000000000223019f0000013f022001c7000000400310003900000000002304350000002002100039000000000052043500000040030000390000000000310435000001320010009c0000023f0000213d0000006003100039000000400030043f000001270020009c000001270200804100000040022002100000000001010433000001270010009c00000127010080410000006001100210000000000121019f0000000002000414000001270020009c0000012702008041000000c002200210000000000112019f00000133011001c700008010020000390498048e0000040f0000000100200190000000060600002900000008030000290000000508000029000000fe0000613d000000000901043b0000000108800039000000040080006c0000025f0000413d000001060000013d000000400100043d0000004402100039000000000032043500000024021000390000000203000029000000000032043500000134020000410000000000210435000000040210003900000001030000390000042c0000013d0000014001000041000000000010043f0000003201000039000000040010043f00000138010000410000049a00010430000000400200043d0000004403200039000000000013043500000024012000390000000103000039000000000031043500000134010000410000000000120435000000040120003900000002030000390000000000310435000001270020009c0000012702008041000000400120021000000135011001c70000049a00010430000000400100043d0000013702000041000000000021043500000004021000390000000203000039000003240000013d000000400100043d0000013702000041000000000021043500000004021000390000000103000039000003240000013d000000400100043d00000137020000410000000000210435000000040210003900000003030000390000000000320435000001270010009c0000012701008041000000400110021000000138011001c70000049a000104300000001f0430018f0000012f02300198000003330000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b0000032f0000c13d000000000004004b000003400000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000049a0001043000000044021000390000013b03000041000000000032043500000024021000390000001903000039000004270000013d0000001f0530018f0000012f06300198000000400200043d0000000004620019000003530000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000034f0000c13d000000000005004b000003600000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001270020009c00000127020080410000004002200210000000000112019f0000049a000104300000013405000041000000010600002900000000005604350000000305000039000000000053043500000000000204350000000000410435000001270060009c0000012706008041000000400160021000000135011001c70000049a00010430000000400200043d0000000006520019000000000005004b0000037c0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000068004b000003780000c13d000000000004004b000003600000613d000000000151034f0000000304400210000000000506043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000160435000003600000013d0000000901000029000000400010043f000000200030008c000000fe0000413d000000010100002900000000010104330000012b0010009c000000fe0000213d000000010230002900000001011000290000001f03100039000000000023004b000000fe0000813d00000000140104340000012b0040009c0000023f0000213d00000005034002100000003f05300039000001470550019700000009055000290000012b0050009c0000023f0000213d000000400050043f000000090500002900000000004504350000000003130019000000000023004b000000fe0000213d000000000004004b000003ae0000613d0000000902000029000000200220003900000000140104340000000000420435000000000031004b000003a90000413d000000000100041400000011020003670000000a0000006b000003b40000c13d0000000003000031000003be0000013d00000007030000290000012704300197000100000042035500000003050000290000000a0050006c000000570000413d0000000305000029000000000350007b000000570000413d000000000242034f000001270330019700010000003203e5000001270010009c000003c90000a13d000000400100043d00000044021000390000014d03000041000000000032043500000024021000390000000803000039000004270000013d00000000023203df000000c0011002100000012e011001970000012c011001c700010000001203b500000000011203af0000801002000039049804930000040f0000000003010019000000600330027000000127033001970000000100200190000004320000613d0000001f0230003900000130052001970000003f025000390000013104200197000000400200043d0000000004420019000000000024004b000000000600003900000001060040390000012b0040009c0000023f0000213d00000001006001900000023f0000c13d000000400040043f0000000004320436000000000005004b000003ef0000613d0000000005540019000000000600003100000011066003670000000007040019000000006806043c0000000007870436000000000057004b000003eb0000c13d0000001f0530018f0000012f063001980000000003640019000003f90000613d000000000701034f0000000008040019000000007907043c0000000008980436000000000038004b000003f50000c13d000000000005004b000004060000613d000000000161034f0000000305500210000000000603043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001304350000000001020433000000200010008c000004210000c13d000000400100043d00000009020000290000000002020433000001000020008c0000044a0000413d00000064021000390000014a03000041000000000032043500000044021000390000014b0300004100000000003204350000002402100039000000250300003900000000003204350000013c020000410000000000210435000000040210003900000020030000390000000000320435000001270010009c000001270100804100000040011002100000014c011001c70000049a00010430000000400100043d00000044021000390000014803000041000000000032043500000024021000390000001f0300003900000000003204350000013c020000410000000000210435000000040210003900000020030000390000000000320435000001270010009c0000012701008041000000400110021000000135011001c70000049a000104300000001f0430018f0000012f023001980000043b0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000004370000c13d000000000004004b000004480000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000049a000104300000000003040433000000f8022002100000006004100039000000000024043500000040021000390000000000320435000000200210003900000008030000290000000000320435000000610310003900000009040000290000000004040433000000000004004b000004610000613d000000000500001900000009060000290000002006600039000900000006001d000000000606043300000000036304360000000105500039000000000045004b000004590000413d0000000003130049000000200430008a00000000004104350000001f0330003900000150043001970000000003140019000000000043004b000000000400003900000001040040390000012b0030009c0000023f0000213d00000001004001900000023f0000c13d000000400030043f000001270020009c000001270200804100000040022002100000000001010433000001270010009c00000127010080410000006001100210000000000121019f0000000002000414000001270020009c0000012702008041000000c002200210000000000112019f00000133011001c700008010020000390498048e0000040f0000000100200190000000fe0000613d000000000101043b000000400200043d0000000000120435000001270020009c0000012702008041000000400120021000000149011001c7000004990001042e0000048c002104210000000102000039000000000001042d0000000002000019000000000001042d00000491002104230000000102000039000000000001042d0000000002000019000000000001042d00000496002104230000000102000039000000000001042d0000000002000019000000000001042d0000049800000432000004990001042e0000049a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000089f9a07200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe000000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000003ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000007f7b0cf70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000001f0000000000000000000000000000000000000000000000000000000043e266b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffe0000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000000ffffe00000000000000000000000000000000000000000000000000000000001ffffe018876a04000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06b656363616b3235362072657475726e656420696e76616c69642064617461000000000000000000000000000000000000000020000000000000000000000000206269747300000000000000000000000000000000000000000000000000000053616665436173743a2076616c756520646f65736e27742066697420696e203800000000000000000000000000000000000000840000000000000000000000004f766572666c6f77000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000000e901f5bd8811df26e614332e2110b9bc002e2cbadd82065c67e102f858079d5a").unwrap() +} + +fn encoded_uncompressed_state_diffs(input: &PubdataInput) -> Vec { + let mut result = vec![]; + for state_diff in input.state_diffs.iter() { + result.extend(state_diff.encode_padded()); + } + result +} + +fn compose_header_for_l1_commit_rollup(input: PubdataInput) -> Vec { + // The preimage under the hash `l2DAValidatorOutputHash` is expected to be in the following format: + // - First 32 bytes are the hash of the uncompressed state diff. + // - Then, there is a 32-byte hash of the full pubdata. + // - Then, there is the 1-byte number of blobs published. + // - Then, there are linear hashes of the published blobs, 32 bytes each. + + let mut full_header = vec![]; + + let uncompressed_state_diffs = encoded_uncompressed_state_diffs(&input); + let uncompressed_state_diffs_hash = keccak256(&uncompressed_state_diffs); + full_header.extend(uncompressed_state_diffs_hash); + + let pubdata_builder = RollupPubdataBuilder::new(Address::zero()); + let mut full_pubdata = + pubdata_builder.settlement_layer_pubdata(&input, ProtocolVersionId::latest()); + let full_pubdata_hash = keccak256(&full_pubdata); + full_header.extend(full_pubdata_hash); + + // Now, we need to calculate the linear hashes of the blobs. + // Firstly, let's pad the pubdata to the size of the blob. + if full_pubdata.len() % ZK_SYNC_BYTES_PER_BLOB != 0 { + full_pubdata.resize( + full_pubdata.len() + ZK_SYNC_BYTES_PER_BLOB + - full_pubdata.len() % ZK_SYNC_BYTES_PER_BLOB, + 0, + ); + } + full_header.push((full_pubdata.len() / ZK_SYNC_BYTES_PER_BLOB) as u8); + + full_pubdata + .chunks(ZK_SYNC_BYTES_PER_BLOB) + .for_each(|chunk| { + full_header.extend(keccak256(chunk)); + }); + + full_header +} + +pub(crate) fn test_rollup_da_output_hash_match() { + // In this test, we check whether the L2 DA output hash is as expected. + + let l2_da_validator_address = Address::repeat_byte(0x12); + let system_env = SystemEnv { + version: ProtocolVersionId::Version27, + ..default_system_env() + }; + let mut vm = VmTesterBuilder::new() + .with_empty_in_memory_storage() + .with_execution_mode(TxExecutionMode::VerifyExecute) + .with_rich_accounts(1) + .with_system_env(system_env) + .with_custom_contracts(vec![ContractToDeploy { + bytecode: l2_rollup_da_validator_bytecode(), + address: l2_da_validator_address, + is_account: false, + is_funded: false, + }]) + .build::(); + + let account = &mut vm.rich_accounts[0]; + + // Firstly, deploy tx. It should publish the bytecode of the "test contract" + let counter_bytecode = TestContract::counter().bytecode; + let tx = account + .get_deploy_tx(&counter_bytecode, None, TxType::L2) + .tx; + // We do not use compression here, to have the bytecode published in full. + let (_, result) = vm + .vm + .execute_transaction_with_bytecode_compression(tx, false); + assert!(!result.result.is_failed(), "Transaction wasn't successful"); + + // Then, we call the l1 messenger to also send an L2->L1 message. + let l1_messenger_contract = l1_messenger_contract(); + let encoded_data = l1_messenger_contract + .function("sendToL1") + .unwrap() + .encode_input(&[Token::Bytes(vec![])]) + .unwrap(); + + let tx = account.get_l2_tx_for_execute( + Execute { + contract_address: Some(L1_MESSENGER_ADDRESS), + calldata: encoded_data, + value: U256::zero(), + factory_deps: vec![], + }, + None, + ); + vm.vm.push_transaction(tx); + let result = vm.vm.execute(InspectExecutionMode::OneTx); + assert!(!result.result.is_failed(), "Transaction wasn't successful"); + + let pubdata_builder = RollupPubdataBuilder::new(l2_da_validator_address); + let batch_result = vm.vm.finish_batch(Rc::new(pubdata_builder)); + assert!( + !batch_result.block_tip_execution_result.result.is_failed(), + "Transaction wasn't successful {:?}", + batch_result.block_tip_execution_result.result + ); + let pubdata_input = vm.vm.pubdata_input(); + + // Just to double check that the test makes sense. + assert!(!pubdata_input.user_logs.is_empty()); + assert!(!pubdata_input.l2_to_l1_messages.is_empty()); + assert!(!pubdata_input.published_bytecodes.is_empty()); + assert!(!pubdata_input.state_diffs.is_empty()); + + let expected_header: Vec = compose_header_for_l1_commit_rollup(pubdata_input); + + let l2_da_validator_output_hash = batch_result + .block_tip_execution_result + .logs + .system_l2_to_l1_logs + .iter() + .find(|log| log.0.key == u256_to_h256(L2_DA_VALIDATOR_OUTPUT_HASH_KEY.into())) + .unwrap() + .0 + .value; + + assert_eq!( + l2_da_validator_output_hash, + keccak256(&expected_header).into() + ); + + let l2_used_da_validator_address = batch_result + .block_tip_execution_result + .logs + .system_l2_to_l1_logs + .iter() + .find(|log| log.0.key == u256_to_h256(USED_L2_DA_VALIDATOR_ADDRESS_KEY.into())) + .unwrap() + .0 + .value; + + assert_eq!( + l2_used_da_validator_address, + address_to_h256(&l2_da_validator_address) + ); +} diff --git a/core/lib/multivm/src/versions/testonly/mod.rs b/core/lib/multivm/src/versions/testonly/mod.rs index 38a09049b15a..a0f08546197c 100644 --- a/core/lib/multivm/src/versions/testonly/mod.rs +++ b/core/lib/multivm/src/versions/testonly/mod.rs @@ -40,6 +40,7 @@ pub(super) mod evm_emulator; pub(super) mod gas_limit; pub(super) mod get_used_contracts; pub(super) mod is_write_initial; +pub(super) mod l1_messenger; pub(super) mod l1_tx_execution; pub(super) mod l2_blocks; pub(super) mod nonce_holder; diff --git a/core/lib/multivm/src/versions/testonly/tester/mod.rs b/core/lib/multivm/src/versions/testonly/tester/mod.rs index 32499e409d82..d3cf2d6f782f 100644 --- a/core/lib/multivm/src/versions/testonly/tester/mod.rs +++ b/core/lib/multivm/src/versions/testonly/tester/mod.rs @@ -7,17 +7,16 @@ use zksync_types::{ writes::StateDiffRecord, Address, L1BatchNumber, StorageKey, Transaction, H256, U256, }; -use zksync_vm_interface::{ - pubdata::PubdataBuilder, CurrentExecutionState, InspectExecutionMode, VmExecutionResultAndLogs, - VmInterfaceHistoryEnabled, -}; pub(crate) use self::transaction_test_info::{ExpectedError, TransactionTestInfo, TxModifier}; use super::get_empty_storage; use crate::{ interface::{ + pubdata::{PubdataBuilder, PubdataInput}, storage::{InMemoryStorage, StoragePtr, StorageView}, - L1BatchEnv, L2BlockEnv, SystemEnv, TxExecutionMode, VmFactory, VmInterfaceExt, + CurrentExecutionState, InspectExecutionMode, L1BatchEnv, L2BlockEnv, SystemEnv, + TxExecutionMode, VmExecutionResultAndLogs, VmFactory, VmInterfaceExt, + VmInterfaceHistoryEnabled, }, versions::testonly::{ default_l1_batch, default_system_env, make_address_rich, ContractToDeploy, @@ -228,4 +227,7 @@ pub(crate) trait TestedVm: /// Pushes a transaction with predefined refund value. fn push_transaction_with_refund(&mut self, tx: Transaction, refund: u64); + + /// Returns pubdata input. + fn pubdata_input(&self) -> PubdataInput; } diff --git a/core/lib/multivm/src/versions/vm_fast/tests/l1_messenger.rs b/core/lib/multivm/src/versions/vm_fast/tests/l1_messenger.rs new file mode 100644 index 000000000000..c7d4594d7692 --- /dev/null +++ b/core/lib/multivm/src/versions/vm_fast/tests/l1_messenger.rs @@ -0,0 +1,7 @@ +use crate::{versions::testonly::l1_messenger::test_rollup_da_output_hash_match, vm_fast::Vm}; + +#[test] +#[ignore] // Requires post-gateway system contracts +fn rollup_da_output_hash_match() { + test_rollup_da_output_hash_match::>(); +} diff --git a/core/lib/multivm/src/versions/vm_fast/tests/mod.rs b/core/lib/multivm/src/versions/vm_fast/tests/mod.rs index 0a26e895b5a7..2093d0ec496f 100644 --- a/core/lib/multivm/src/versions/vm_fast/tests/mod.rs +++ b/core/lib/multivm/src/versions/vm_fast/tests/mod.rs @@ -5,8 +5,9 @@ use zksync_types::{ }; use zksync_vm2::interface::{Event, HeapId, StateInterface}; use zksync_vm_interface::{ - pubdata::PubdataBuilder, storage::ReadStorage, CurrentExecutionState, L2BlockEnv, - VmExecutionMode, VmExecutionResultAndLogs, VmInterface, + pubdata::{PubdataBuilder, PubdataInput}, + storage::ReadStorage, + CurrentExecutionState, L2BlockEnv, VmExecutionMode, VmExecutionResultAndLogs, VmInterface, }; use super::{circuits_tracer::CircuitsTracer, Vm}; @@ -26,6 +27,7 @@ mod evm_emulator; mod gas_limit; mod get_used_contracts; mod is_write_initial; +mod l1_messenger; mod l1_tx_execution; mod l2_blocks; mod nonce_holder; @@ -167,4 +169,8 @@ impl TestedVm for Vm> { fn push_transaction_with_refund(&mut self, tx: Transaction, refund: u64) { self.push_transaction_inner(tx, refund, true); } + + fn pubdata_input(&self) -> PubdataInput { + self.bootloader_state.get_pubdata_information().clone() + } } diff --git a/core/lib/multivm/src/versions/vm_latest/tests/l1_messenger.rs b/core/lib/multivm/src/versions/vm_latest/tests/l1_messenger.rs new file mode 100644 index 000000000000..7d301f33a131 --- /dev/null +++ b/core/lib/multivm/src/versions/vm_latest/tests/l1_messenger.rs @@ -0,0 +1,10 @@ +use crate::{ + versions::testonly::l1_messenger::test_rollup_da_output_hash_match, + vm_latest::{HistoryEnabled, Vm}, +}; + +#[test] +#[ignore] // Requires post-gateway system contracts +fn rollup_da_output_hash_match() { + test_rollup_da_output_hash_match::>(); +} diff --git a/core/lib/multivm/src/versions/vm_latest/tests/mod.rs b/core/lib/multivm/src/versions/vm_latest/tests/mod.rs index b059c9716d89..aac3b1655b3a 100644 --- a/core/lib/multivm/src/versions/vm_latest/tests/mod.rs +++ b/core/lib/multivm/src/versions/vm_latest/tests/mod.rs @@ -12,11 +12,11 @@ use zksync_types::{ bytecode::BytecodeHash, writes::StateDiffRecord, StorageKey, StorageValue, Transaction, H256, U256, }; -use zksync_vm_interface::pubdata::PubdataBuilder; use super::{HistoryEnabled, Vm}; use crate::{ interface::{ + pubdata::{PubdataBuilder, PubdataInput}, storage::{InMemoryStorage, ReadStorage, StorageView, WriteStorage}, CurrentExecutionState, L2BlockEnv, VmExecutionMode, VmExecutionResultAndLogs, }, @@ -46,6 +46,7 @@ mod evm_emulator; mod gas_limit; mod get_used_contracts; mod is_write_initial; +mod l1_messenger; mod l1_tx_execution; mod l2_blocks; mod nonce_holder; @@ -188,6 +189,10 @@ impl TestedVm for TestedLatestVm { let overhead = tx.overhead_gas(); self.push_raw_transaction(tx, overhead, refund, true) } + + fn pubdata_input(&self) -> PubdataInput { + self.bootloader_state.get_pubdata_information().clone() + } } #[derive(Clone, Debug)] diff --git a/core/lib/protobuf_config/src/en.rs b/core/lib/protobuf_config/src/en.rs index 9d1a39310604..700a1f0a8104 100644 --- a/core/lib/protobuf_config/src/en.rs +++ b/core/lib/protobuf_config/src/en.rs @@ -34,11 +34,6 @@ impl ProtoRepr for proto::ExternalNode { main_node_rate_limit_rps: self .main_node_rate_limit_rps .and_then(|a| NonZeroUsize::new(a as usize)), - gateway_url: self - .gateway_url - .as_ref() - .map(|a| a.parse().context("gateway_url")) - .transpose()?, bridge_addresses_refresh_interval_sec: self .bridge_addresses_refresh_interval_sec .and_then(NonZeroU64::new), @@ -57,10 +52,6 @@ impl ProtoRepr for proto::ExternalNode { .into(), ), main_node_rate_limit_rps: this.main_node_rate_limit_rps.map(|a| a.get() as u64), - gateway_url: this - .gateway_url - .as_ref() - .map(|a| a.expose_str().to_string()), bridge_addresses_refresh_interval_sec: this .bridge_addresses_refresh_interval_sec .map(|a| a.get()), diff --git a/core/lib/protobuf_config/src/proto/config/en.proto b/core/lib/protobuf_config/src/proto/config/en.proto index 69412704ea0f..a8d304c8289e 100644 --- a/core/lib/protobuf_config/src/proto/config/en.proto +++ b/core/lib/protobuf_config/src/proto/config/en.proto @@ -9,6 +9,6 @@ message ExternalNode { optional uint64 l1_chain_id = 3; // required optional uint64 main_node_rate_limit_rps = 6; // optional optional config.genesis.L1BatchCommitDataGeneratorMode l1_batch_commit_data_generator_mode = 7; // optional, default to rollup - optional string gateway_url = 8; // optional + reserved 8; reserved "gateway_url"; optional uint64 bridge_addresses_refresh_interval_sec = 9; // optional } diff --git a/core/lib/protobuf_config/src/proto/config/secrets.proto b/core/lib/protobuf_config/src/proto/config/secrets.proto index 7c9d0f928237..46392920369c 100644 --- a/core/lib/protobuf_config/src/proto/config/secrets.proto +++ b/core/lib/protobuf_config/src/proto/config/secrets.proto @@ -11,6 +11,7 @@ message DatabaseSecrets { message L1Secrets { optional string l1_rpc_url = 1; // required + optional string gateway_rpc_url = 2; // optional } message ConsensusSecrets { diff --git a/core/lib/protobuf_config/src/secrets.rs b/core/lib/protobuf_config/src/secrets.rs index f5bc10a3e340..e0f41e325b79 100644 --- a/core/lib/protobuf_config/src/secrets.rs +++ b/core/lib/protobuf_config/src/secrets.rs @@ -86,12 +86,22 @@ impl ProtoRepr for proto::L1Secrets { fn read(&self) -> anyhow::Result { Ok(Self::Type { l1_rpc_url: SensitiveUrl::from_str(required(&self.l1_rpc_url).context("l1_rpc_url")?)?, + gateway_rpc_url: self + .gateway_rpc_url + .clone() + .map(|url| SensitiveUrl::from_str(&url)) + .transpose() + .context("gateway_rpc_url")?, }) } fn build(this: &Self::Type) -> Self { Self { l1_rpc_url: Some(this.l1_rpc_url.expose_str().to_string()), + gateway_rpc_url: this + .gateway_rpc_url + .as_ref() + .map(|url| url.expose_url().to_string()), } } } diff --git a/core/lib/snapshots_applier/src/tests/utils.rs b/core/lib/snapshots_applier/src/tests/utils.rs index cf68d2e181a6..4d16292ebf29 100644 --- a/core/lib/snapshots_applier/src/tests/utils.rs +++ b/core/lib/snapshots_applier/src/tests/utils.rs @@ -195,10 +195,13 @@ fn block_details_base(hash: H256) -> api::BlockDetailsBase { status: api::BlockStatus::Sealed, commit_tx_hash: None, committed_at: None, + commit_chain_id: None, prove_tx_hash: None, proven_at: None, + prove_chain_id: None, execute_tx_hash: None, executed_at: None, + execute_chain_id: None, l1_gas_price: 0, l2_fair_gas_price: 0, fair_pubdata_price: None, diff --git a/core/lib/types/src/api/mod.rs b/core/lib/types/src/api/mod.rs index 509dd8065281..4a45756823c2 100644 --- a/core/lib/types/src/api/mod.rs +++ b/core/lib/types/src/api/mod.rs @@ -5,7 +5,7 @@ use serde_with::{hex::Hex, serde_as}; use strum::Display; use zksync_basic_types::{ web3::{AccessList, Bytes, Index}, - Bloom, L1BatchNumber, H160, H256, H64, U256, U64, + Bloom, L1BatchNumber, SLChainId, H160, H256, H64, U256, U64, }; use zksync_contracts::BaseSystemContractsHashes; @@ -196,6 +196,13 @@ pub struct L2ToL1LogProof { pub root: H256, } +#[derive(Debug, Serialize, Deserialize, Clone)] +#[serde(rename_all = "camelCase")] +pub struct ChainAggProof { + pub chain_id_leaf_proof: Vec, + pub chain_id_leaf_proof_mask: u64, +} + /// A struct with the two default bridge contracts. #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -466,6 +473,45 @@ impl Log { } } +impl From for zksync_basic_types::web3::Log { + fn from(log: Log) -> Self { + zksync_basic_types::web3::Log { + address: log.address, + topics: log.topics, + data: log.data, + block_hash: log.block_hash, + block_number: log.block_number, + transaction_hash: log.transaction_hash, + transaction_index: log.transaction_index, + log_index: log.log_index, + transaction_log_index: log.transaction_log_index, + log_type: log.log_type, + removed: log.removed, + block_timestamp: log.block_timestamp, + } + } +} + +impl From for Log { + fn from(log: zksync_basic_types::web3::Log) -> Self { + Log { + address: log.address, + topics: log.topics, + data: log.data, + block_hash: log.block_hash, + block_number: log.block_number, + transaction_hash: log.transaction_hash, + transaction_index: log.transaction_index, + log_index: log.log_index, + transaction_log_index: log.transaction_log_index, + log_type: log.log_type, + removed: log.removed, + block_timestamp: log.block_timestamp, + l1_batch_number: None, + } + } +} + /// A log produced by a transaction. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -819,10 +865,13 @@ pub struct BlockDetailsBase { pub status: BlockStatus, pub commit_tx_hash: Option, pub committed_at: Option>, + pub commit_chain_id: Option, pub prove_tx_hash: Option, pub proven_at: Option>, + pub prove_chain_id: Option, pub execute_tx_hash: Option, pub executed_at: Option>, + pub execute_chain_id: Option, pub l1_gas_price: u64, pub l2_fair_gas_price: u64, // Cost of publishing one byte (in wei). diff --git a/core/lib/types/src/commitment/mod.rs b/core/lib/types/src/commitment/mod.rs index 1eba7e7a9ec0..786ce03e671d 100644 --- a/core/lib/types/src/commitment/mod.rs +++ b/core/lib/types/src/commitment/mod.rs @@ -21,6 +21,7 @@ use zksync_system_constants::{ use crate::{ blob::num_blobs_required, block::{L1BatchHeader, L1BatchTreeData}, + ethabi, l2_to_l1_log::{ l2_to_l1_logs_tree_size, parse_system_logs_for_blob_hashes_pre_gateway, L2ToL1Log, SystemL2ToL1Log, UserL2ToL1Log, @@ -73,6 +74,31 @@ pub fn serialize_commitments(values: &[I]) -> Vec { input } +#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] +pub struct PriorityOpsMerkleProof { + pub left_path: Vec, + pub right_path: Vec, + pub hashes: Vec, +} + +impl PriorityOpsMerkleProof { + pub fn into_token(&self) -> ethabi::Token { + let array_into_token = |array: &[H256]| { + ethabi::Token::Array( + array + .iter() + .map(|hash| ethabi::Token::FixedBytes(hash.as_bytes().to_vec())) + .collect(), + ) + }; + ethabi::Token::Tuple(vec![ + array_into_token(&self.left_path), + array_into_token(&self.right_path), + array_into_token(&self.hashes), + ]) + } +} + /// Precalculated data for the L1 batch that was used in commitment and L1 transaction. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct L1BatchMetadata { diff --git a/core/lib/types/src/l2_to_l1_log.rs b/core/lib/types/src/l2_to_l1_log.rs index 1b84a79024c7..be4275ac5fb5 100644 --- a/core/lib/types/src/l2_to_l1_log.rs +++ b/core/lib/types/src/l2_to_l1_log.rs @@ -79,6 +79,26 @@ pub fn l2_to_l1_logs_tree_size(protocol_version: ProtocolVersionId) -> usize { } } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BatchAndChainMerklePath { + pub batch_proof_len: u32, + pub proof: Vec, +} + +pub const LOG_PROOF_SUPPORTED_METADATA_VERSION: u8 = 1; + +// keccak256("zkSync:BatchLeaf") +pub const BATCH_LEAF_PADDING: H256 = H256([ + 0xd8, 0x2f, 0xec, 0x4a, 0x37, 0xcb, 0xdc, 0x47, 0xf1, 0xe5, 0xcc, 0x4a, 0xd6, 0x4d, 0xea, 0xcf, + 0x34, 0xa4, 0x8e, 0x6f, 0x7c, 0x61, 0xfa, 0x5b, 0x68, 0xfd, 0x58, 0xe5, 0x43, 0x25, 0x9c, 0xf4, +]); + +// keccak256("zkSync:ChainIdLeaf") +pub const CHAIN_ID_LEAF_PADDING: H256 = H256([ + 0x39, 0xbc, 0x69, 0x36, 0x3b, 0xb9, 0xe2, 0x6c, 0xf1, 0x42, 0x40, 0xde, 0x4e, 0x22, 0x56, 0x9e, + 0x95, 0xcf, 0x17, 0x5c, 0xfb, 0xcf, 0x1a, 0xde, 0x1a, 0x47, 0xa2, 0x53, 0xb4, 0xbf, 0x7f, 0x61, +]); + /// Returns the blob hashes parsed out from the system logs pub fn parse_system_logs_for_blob_hashes_pre_gateway( protocol_version: &ProtocolVersionId, @@ -117,6 +137,7 @@ pub fn parse_system_logs_for_blob_hashes_pre_gateway( #[cfg(test)] mod tests { + use zksync_basic_types::web3::keccak256; use zksync_system_constants::L1_MESSENGER_ADDRESS; use super::*; @@ -142,4 +163,13 @@ mod tests { assert_eq!(expected_log_bytes, log.to_bytes()); } + + #[test] + fn check_padding_constants() { + let batch_leaf_padding_expected = keccak256("zkSync:BatchLeaf".as_bytes()); + assert_eq!(batch_leaf_padding_expected, BATCH_LEAF_PADDING.0); + + let chain_id_leaf_padding_expected = keccak256("zkSync:ChainIdLeaf".as_bytes()); + assert_eq!(chain_id_leaf_padding_expected, CHAIN_ID_LEAF_PADDING.0); + } } diff --git a/core/lib/types/src/storage/mod.rs b/core/lib/types/src/storage/mod.rs index 84a29ed8c039..0f851857e6a4 100644 --- a/core/lib/types/src/storage/mod.rs +++ b/core/lib/types/src/storage/mod.rs @@ -91,6 +91,11 @@ pub fn get_system_context_key(key: H256) -> StorageKey { StorageKey::new(system_context, key) } +pub fn get_message_root_log_key(key: H256) -> StorageKey { + let message_root = AccountTreeId::new(L2_MESSAGE_ROOT_ADDRESS); + StorageKey::new(message_root, key) +} + pub fn get_deployer_key(key: H256) -> StorageKey { let deployer_contract = AccountTreeId::new(CONTRACT_DEPLOYER_ADDRESS); StorageKey::new(deployer_contract, key) diff --git a/core/lib/vm_interface/src/pubdata/mod.rs b/core/lib/vm_interface/src/pubdata/mod.rs index f901687b5fa6..54d7ebf5e1b0 100644 --- a/core/lib/vm_interface/src/pubdata/mod.rs +++ b/core/lib/vm_interface/src/pubdata/mod.rs @@ -13,7 +13,7 @@ use zksync_types::{ /// bytes32 value; /// } /// ``` -#[derive(Debug, Default, Clone, PartialEq)] +#[derive(Debug, Default, Clone, PartialEq, Eq)] pub struct L1MessengerL2ToL1Log { pub l2_shard_id: u8, pub is_service: bool, @@ -63,7 +63,7 @@ impl From for L2ToL1Log { } /// Struct based on which the pubdata blob is formed -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct PubdataInput { pub user_logs: Vec, pub l2_to_l1_messages: Vec>, diff --git a/core/lib/web3_decl/src/namespaces/eth.rs b/core/lib/web3_decl/src/namespaces/eth.rs index 40cb6300cffa..4db58a06c59d 100644 --- a/core/lib/web3_decl/src/namespaces/eth.rs +++ b/core/lib/web3_decl/src/namespaces/eth.rs @@ -183,7 +183,7 @@ pub trait EthNamespace { &self, block_count: U64Number, newest_block: BlockNumber, - reward_percentiles: Vec, + reward_percentiles: Option>, ) -> RpcResult; #[method(name = "maxPriorityFeePerGas")] diff --git a/core/lib/web3_decl/src/namespaces/unstable.rs b/core/lib/web3_decl/src/namespaces/unstable.rs index e6b36dd26846..f666f02f2811 100644 --- a/core/lib/web3_decl/src/namespaces/unstable.rs +++ b/core/lib/web3_decl/src/namespaces/unstable.rs @@ -2,9 +2,9 @@ use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; use zksync_types::{ - api::{TeeProof, TransactionExecutionInfo}, + api::{ChainAggProof, TeeProof, TransactionExecutionInfo}, tee_types::TeeType, - L1BatchNumber, H256, + L1BatchNumber, L2ChainId, H256, }; use crate::client::{ForWeb3Network, L2}; @@ -31,4 +31,11 @@ pub trait UnstableNamespace { l1_batch_number: L1BatchNumber, tee_type: Option, ) -> RpcResult>; + + #[method(name = "getChainLogProof")] + async fn get_chain_log_proof( + &self, + l1_batch_number: L1BatchNumber, + chain_id: L2ChainId, + ) -> RpcResult>; } diff --git a/core/lib/web3_decl/src/types.rs b/core/lib/web3_decl/src/types.rs index 36ee48a54a1b..375e5c4d992c 100644 --- a/core/lib/web3_decl/src/types.rs +++ b/core/lib/web3_decl/src/types.rs @@ -5,19 +5,16 @@ //! //! These "extensions" are required to provide more ZKsync-specific information while remaining Web3-compilant. -use core::{ - convert::{TryFrom, TryInto}, - fmt, - marker::PhantomData, -}; +use core::convert::{TryFrom, TryInto}; use rlp::Rlp; -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; +use serde::{Deserialize, Serialize}; pub use zksync_types::{ api::{Block, BlockNumber, Log, TransactionReceipt, TransactionRequest}, ethabi, web3::{ - BlockHeader, Bytes, CallRequest, FeeHistory, Index, SyncState, TraceFilter, U64Number, Work, + BlockHeader, Bytes, CallRequest, FeeHistory, Index, SyncState, TraceFilter, U64Number, + ValueOrArray, Work, }, Address, Transaction, H160, H256, H64, U256, U64, }; @@ -101,71 +98,6 @@ pub enum FilterChanges { Empty([u8; 0]), } -/// Either value or array of values. -/// -/// A value must serialize into a string. -#[derive(Default, Debug, PartialEq, Clone)] -pub struct ValueOrArray(pub Vec); - -impl From for ValueOrArray { - fn from(value: T) -> Self { - Self(vec![value]) - } -} - -impl Serialize for ValueOrArray { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self.0.len() { - 0 => serializer.serialize_none(), - 1 => Serialize::serialize(&self.0[0], serializer), - _ => Serialize::serialize(&self.0, serializer), - } - } -} - -impl<'de, T: Deserialize<'de>> Deserialize<'de> for ValueOrArray { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - struct Visitor(PhantomData); - - impl<'de, T: Deserialize<'de>> de::Visitor<'de> for Visitor { - type Value = ValueOrArray; - - fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { - formatter.write_str("string value or sequence of values") - } - - fn visit_str(self, value: &str) -> Result - where - E: de::Error, - { - use serde::de::IntoDeserializer; - - Deserialize::deserialize(value.into_deserializer()) - .map(|value| ValueOrArray(vec![value])) - } - - fn visit_seq(self, mut visitor: S) -> Result - where - S: de::SeqAccess<'de>, - { - let mut elements = Vec::with_capacity(visitor.size_hint().unwrap_or(1)); - while let Some(element) = visitor.next_element()? { - elements.push(element); - } - Ok(ValueOrArray(elements)) - } - } - - deserializer.deserialize_any(Visitor(PhantomData)) - } -} - /// Filter #[derive(Default, Debug, PartialEq, Clone, Serialize, Deserialize)] pub struct Filter { @@ -185,6 +117,28 @@ pub struct Filter { pub block_hash: Option, } +impl From for Filter { + fn from(value: zksync_types::web3::Filter) -> Self { + let convert_block_number = |b: zksync_types::web3::BlockNumber| match b { + zksync_types::web3::BlockNumber::Finalized => BlockNumber::Finalized, + zksync_types::web3::BlockNumber::Safe => BlockNumber::Finalized, + zksync_types::web3::BlockNumber::Latest => BlockNumber::Latest, + zksync_types::web3::BlockNumber::Earliest => BlockNumber::Earliest, + zksync_types::web3::BlockNumber::Pending => BlockNumber::Pending, + zksync_types::web3::BlockNumber::Number(n) => BlockNumber::Number(n), + }; + let from_block = value.from_block.map(convert_block_number); + let to_block = value.to_block.map(convert_block_number); + Filter { + from_block, + to_block, + address: value.address, + topics: value.topics, + block_hash: value.block_hash, + } + } +} + /// Filter Builder #[derive(Default, Clone)] pub struct FilterBuilder { diff --git a/core/node/api_server/Cargo.toml b/core/node/api_server/Cargo.toml index debabb8d3666..794a0fb275f7 100644 --- a/core/node/api_server/Cargo.toml +++ b/core/node/api_server/Cargo.toml @@ -11,6 +11,7 @@ keywords.workspace = true categories.workspace = true [dependencies] +zksync_crypto_primitives.workspace = true zksync_config.workspace = true zksync_consensus_roles.workspace = true zksync_contracts.workspace = true diff --git a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/eth.rs b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/eth.rs index 342756013752..93f0205c77fa 100644 --- a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/eth.rs +++ b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/eth.rs @@ -262,11 +262,15 @@ impl EthNamespaceServer for EthNamespace { &self, block_count: U64Number, newest_block: BlockNumber, - reward_percentiles: Vec, + reward_percentiles: Option>, ) -> RpcResult { - self.fee_history_impl(block_count.into(), newest_block, reward_percentiles) - .await - .map_err(|err| self.current_method().map_err(err)) + self.fee_history_impl( + block_count.into(), + newest_block, + reward_percentiles.unwrap_or_default(), + ) + .await + .map_err(|err| self.current_method().map_err(err)) } async fn max_priority_fee_per_gas(&self) -> RpcResult { diff --git a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/unstable.rs b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/unstable.rs index 91330aa7d949..cfa8c84b05b0 100644 --- a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/unstable.rs +++ b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/unstable.rs @@ -1,7 +1,7 @@ use zksync_types::{ - api::{TeeProof, TransactionExecutionInfo}, + api::{ChainAggProof, TeeProof, TransactionExecutionInfo}, tee_types::TeeType, - L1BatchNumber, H256, + L1BatchNumber, L2ChainId, H256, }; use zksync_web3_decl::{ jsonrpsee::core::{async_trait, RpcResult}, @@ -30,4 +30,14 @@ impl UnstableNamespaceServer for UnstableNamespace { .await .map_err(|err| self.current_method().map_err(err)) } + + async fn get_chain_log_proof( + &self, + l1_batch_number: L1BatchNumber, + chain_id: L2ChainId, + ) -> RpcResult> { + self.get_chain_log_proof_impl(l1_batch_number, chain_id) + .await + .map_err(|err| self.current_method().map_err(err)) + } } diff --git a/core/node/api_server/src/web3/namespaces/en.rs b/core/node/api_server/src/web3/namespaces/en.rs index a09a0cb92fc7..56a7e2df458c 100644 --- a/core/node/api_server/src/web3/namespaces/en.rs +++ b/core/node/api_server/src/web3/namespaces/en.rs @@ -151,18 +151,18 @@ impl EnNamespace { Ok(self .state .api_config - .bridgehub_proxy_addr + .l1_bridgehub_proxy_addr .map(|bridgehub_proxy_addr| EcosystemContracts { bridgehub_proxy_addr, state_transition_proxy_addr: self .state .api_config - .state_transition_proxy_addr + .l1_state_transition_proxy_addr .unwrap(), transparent_proxy_admin_addr: self .state .api_config - .transparent_proxy_admin_addr + .l1_transparent_proxy_admin_addr .unwrap(), }) .context("Shared bridge doesn't supported")?) diff --git a/core/node/api_server/src/web3/namespaces/unstable.rs b/core/node/api_server/src/web3/namespaces/unstable.rs deleted file mode 100644 index d323902b1dd4..000000000000 --- a/core/node/api_server/src/web3/namespaces/unstable.rs +++ /dev/null @@ -1,65 +0,0 @@ -use chrono::{DateTime, Utc}; -use zksync_dal::{CoreDal, DalError}; -use zksync_types::{ - api::{TeeProof, TransactionExecutionInfo}, - tee_types::TeeType, - L1BatchNumber, -}; -use zksync_web3_decl::{error::Web3Error, types::H256}; - -use crate::web3::{backend_jsonrpsee::MethodTracer, RpcState}; - -#[derive(Debug)] -pub(crate) struct UnstableNamespace { - state: RpcState, -} - -impl UnstableNamespace { - pub fn new(state: RpcState) -> Self { - Self { state } - } - - pub(crate) fn current_method(&self) -> &MethodTracer { - &self.state.current_method - } - - pub async fn transaction_execution_info_impl( - &self, - hash: H256, - ) -> Result, Web3Error> { - let mut storage = self.state.acquire_connection().await?; - Ok(storage - .transactions_web3_dal() - .get_unstable_transaction_execution_info(hash) - .await - .map_err(DalError::generalize)? - .map(|execution_info| TransactionExecutionInfo { execution_info })) - } - - pub async fn get_tee_proofs_impl( - &self, - l1_batch_number: L1BatchNumber, - tee_type: Option, - ) -> Result, Web3Error> { - let mut storage = self.state.acquire_connection().await?; - let proofs = storage - .tee_proof_generation_dal() - .get_tee_proofs(l1_batch_number, tee_type) - .await - .map_err(DalError::generalize)? - .into_iter() - .map(|proof| TeeProof { - l1_batch_number, - tee_type, - pubkey: proof.pubkey, - signature: proof.signature, - proof: proof.proof, - proved_at: DateTime::::from_naive_utc_and_offset(proof.updated_at, Utc), - status: proof.status, - attestation: proof.attestation, - }) - .collect::>(); - - Ok(proofs) - } -} diff --git a/core/node/api_server/src/web3/namespaces/unstable/mod.rs b/core/node/api_server/src/web3/namespaces/unstable/mod.rs new file mode 100644 index 000000000000..47e43f10282b --- /dev/null +++ b/core/node/api_server/src/web3/namespaces/unstable/mod.rs @@ -0,0 +1,142 @@ +use chrono::{DateTime, Utc}; +use itertools::Itertools; +use utils::{ + chain_id_leaf_preimage, get_chain_count, get_chain_id_from_index, get_chain_root_from_id, +}; +use zksync_crypto_primitives::hasher::keccak::KeccakHasher; +use zksync_dal::{CoreDal, DalError}; +use zksync_mini_merkle_tree::MiniMerkleTree; +use zksync_types::{ + api::{ChainAggProof, TeeProof, TransactionExecutionInfo}, + tee_types::TeeType, + L1BatchNumber, L2ChainId, +}; +use zksync_web3_decl::{error::Web3Error, types::H256}; + +use crate::web3::{backend_jsonrpsee::MethodTracer, RpcState}; + +mod utils; + +#[derive(Debug)] +pub(crate) struct UnstableNamespace { + state: RpcState, +} + +impl UnstableNamespace { + pub fn new(state: RpcState) -> Self { + Self { state } + } + + pub(crate) fn current_method(&self) -> &MethodTracer { + &self.state.current_method + } + + pub async fn transaction_execution_info_impl( + &self, + hash: H256, + ) -> Result, Web3Error> { + let mut storage = self.state.acquire_connection().await?; + Ok(storage + .transactions_web3_dal() + .get_unstable_transaction_execution_info(hash) + .await + .map_err(DalError::generalize)? + .map(|execution_info| TransactionExecutionInfo { execution_info })) + } + + pub async fn get_tee_proofs_impl( + &self, + l1_batch_number: L1BatchNumber, + tee_type: Option, + ) -> Result, Web3Error> { + let mut storage = self.state.acquire_connection().await?; + let proofs = storage + .tee_proof_generation_dal() + .get_tee_proofs(l1_batch_number, tee_type) + .await + .map_err(DalError::generalize)? + .into_iter() + .map(|proof| TeeProof { + l1_batch_number, + tee_type, + pubkey: proof.pubkey, + signature: proof.signature, + proof: proof.proof, + proved_at: DateTime::::from_naive_utc_and_offset(proof.updated_at, Utc), + status: proof.status, + attestation: proof.attestation, + }) + .collect::>(); + + Ok(proofs) + } + + pub async fn get_chain_log_proof_impl( + &self, + l1_batch_number: L1BatchNumber, + l2_chain_id: L2ChainId, + ) -> Result, Web3Error> { + let mut connection = self.state.acquire_connection().await?; + self.state + .start_info + .ensure_not_pruned(l1_batch_number, &mut connection) + .await?; + + let Some((_, l2_block_number)) = connection + .blocks_dal() + .get_l2_block_range_of_l1_batch(l1_batch_number) + .await + .map_err(DalError::generalize)? + else { + return Ok(None); + }; + let chain_count_integer = get_chain_count(&mut connection, l2_block_number).await?; + + let mut chain_ids = Vec::new(); + for chain_index in 0..chain_count_integer { + chain_ids.push( + get_chain_id_from_index(&mut connection, chain_index, l2_block_number).await?, + ); + } + + let Some((chain_id_leaf_proof_mask, _)) = chain_ids + .iter() + .find_position(|id| **id == H256::from_low_u64_be(l2_chain_id.as_u64())) + else { + return Ok(None); + }; + + let mut leaves = Vec::new(); + for chain_id in chain_ids { + let chain_root = + get_chain_root_from_id(&mut connection, chain_id, l2_block_number).await?; + leaves.push(chain_id_leaf_preimage(chain_root, chain_id)); + } + + let chain_merkle_tree = + MiniMerkleTree::<[u8; 96], KeccakHasher>::new(leaves.into_iter(), None); + + let mut chain_id_leaf_proof = chain_merkle_tree + .merkle_root_and_path(chain_id_leaf_proof_mask) + .1; + + let Some(local_root) = connection + .blocks_dal() + .get_l1_batch_local_root(l1_batch_number) + .await + .map_err(DalError::generalize)? + else { + return Ok(None); + }; + + // Chain tree is the right subtree of the aggregated tree. + // We append root of the left subtree to form full proof. + let chain_id_leaf_proof_mask = chain_id_leaf_proof_mask | (1 << chain_id_leaf_proof.len()); + chain_id_leaf_proof.push(local_root); + + Ok(Some(ChainAggProof { + chain_id_leaf_proof, + chain_id_leaf_proof_mask: chain_id_leaf_proof_mask as u64, + })) + } +} diff --git a/core/node/api_server/src/web3/namespaces/unstable/utils.rs b/core/node/api_server/src/web3/namespaces/unstable/utils.rs new file mode 100644 index 000000000000..2d3187fab6b8 --- /dev/null +++ b/core/node/api_server/src/web3/namespaces/unstable/utils.rs @@ -0,0 +1,104 @@ +use zksync_dal::{Connection, Core, CoreDal, DalError}; +use zksync_multivm::circuit_sequencer_api_latest::boojum::ethereum_types::U256; +use zksync_system_constants::{ + message_root::{CHAIN_COUNT_KEY, CHAIN_INDEX_TO_ID_KEY, CHAIN_TREE_KEY}, + L2_MESSAGE_ROOT_ADDRESS, +}; +use zksync_types::{ + h256_to_u256, l2_to_l1_log::CHAIN_ID_LEAF_PADDING, u256_to_h256, web3::keccak256, + AccountTreeId, L2BlockNumber, StorageKey, H256, +}; +use zksync_web3_decl::error::Web3Error; + +pub(super) async fn get_chain_count( + connection: &mut Connection<'_, Core>, + block_number: L2BlockNumber, +) -> anyhow::Result { + let chain_count_key = CHAIN_COUNT_KEY; + let chain_count_storage_key = + message_root_log_key(H256::from_low_u64_be(chain_count_key as u64)); + let chain_count = connection + .storage_web3_dal() + .get_historical_value_unchecked(chain_count_storage_key.hashed_key(), block_number) + .await + .map_err(DalError::generalize)?; + if h256_to_u256(chain_count) > u8::MAX.into() { + anyhow::bail!("Chain count doesn't fit in `u8`"); + } + Ok(chain_count.0[31]) +} + +pub(super) async fn get_chain_id_from_index( + connection: &mut Connection<'_, Core>, + chain_index: u8, + block_number: L2BlockNumber, +) -> Result { + let key = H256::from_slice(&keccak256( + &[ + H256::from_low_u64_be(chain_index as u64).0, + H256::from_low_u64_be(CHAIN_INDEX_TO_ID_KEY as u64).0, + ] + .concat(), + )); + let storage_key = message_root_log_key(key); + let chain_id = connection + .storage_web3_dal() + .get_historical_value_unchecked(storage_key.hashed_key(), block_number) + .await + .map_err(DalError::generalize)?; + Ok(chain_id) +} + +pub(super) async fn get_chain_root_from_id( + connection: &mut Connection<'_, Core>, + chain_id: H256, + block_number: L2BlockNumber, +) -> Result { + let chain_tree_key = H256::from_slice(&keccak256( + &[chain_id.0, H256::from_low_u64_be(CHAIN_TREE_KEY as u64).0].concat(), + )); + let chain_sides_len_key = + u256_to_h256(h256_to_u256(chain_tree_key).overflowing_add(U256::one()).0); + let chain_sides_len_storage_key = message_root_log_key(chain_sides_len_key); + let chain_sides_len = connection + .storage_web3_dal() + .get_historical_value_unchecked(chain_sides_len_storage_key.hashed_key(), block_number) + .await + .map_err(DalError::generalize)?; + + let last_element_pos = { + let length = h256_to_u256(chain_sides_len); + assert!( + length > U256::zero(), + "_sides.length is zero, chain is not registered" + ); + + length - 1 + }; + let sides_data_start_key = H256(keccak256(chain_sides_len_key.as_bytes())); + let chain_root_key = h256_to_u256(sides_data_start_key) + .overflowing_add(last_element_pos) + .0; + let chain_root_storage_key = message_root_log_key(u256_to_h256(chain_root_key)); + let chain_root = connection + .storage_web3_dal() + .get_historical_value_unchecked(chain_root_storage_key.hashed_key(), block_number) + .await + .map_err(DalError::generalize)?; + Ok(chain_root) +} + +pub(super) fn chain_id_leaf_preimage(chain_root: H256, chain_id: H256) -> [u8; 96] { + let mut full_preimage = [0u8; 96]; + + full_preimage[0..32].copy_from_slice(CHAIN_ID_LEAF_PADDING.as_bytes()); + full_preimage[32..64].copy_from_slice(&chain_root.0); + full_preimage[64..96].copy_from_slice(&chain_id.0); + + full_preimage +} + +fn message_root_log_key(key: H256) -> StorageKey { + let message_root = AccountTreeId::new(L2_MESSAGE_ROOT_ADDRESS); + StorageKey::new(message_root, key) +} diff --git a/core/node/api_server/src/web3/namespaces/zks.rs b/core/node/api_server/src/web3/namespaces/zks.rs index 05c90f0b0140..c692494d5091 100644 --- a/core/node/api_server/src/web3/namespaces/zks.rs +++ b/core/node/api_server/src/web3/namespaces/zks.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use anyhow::Context as _; +use zksync_crypto_primitives::hasher::{keccak::KeccakHasher, Hasher}; use zksync_dal::{Connection, Core, CoreDal, DalError}; use zksync_metadata_calculator::api_server::TreeApiError; use zksync_mini_merkle_tree::MiniMerkleTree; @@ -17,7 +18,7 @@ use zksync_types::{ h256_to_u256, l1::L1Tx, l2::L2Tx, - l2_to_l1_log::{l2_to_l1_logs_tree_size, L2ToL1Log}, + l2_to_l1_log::{l2_to_l1_logs_tree_size, L2ToL1Log, LOG_PROOF_SUPPORTED_METADATA_VERSION}, tokens::ETHEREUM_ADDRESS, transaction_request::CallRequest, utils::storage_key_for_standard_token_balance, @@ -137,11 +138,11 @@ impl ZksNamespace { } pub fn get_bridgehub_contract_impl(&self) -> Option
{ - self.state.api_config.bridgehub_proxy_addr + self.state.api_config.l1_bridgehub_proxy_addr } pub fn get_main_contract_impl(&self) -> Address { - self.state.api_config.diamond_proxy_addr + self.state.api_config.l1_diamond_proxy_addr } pub fn get_testnet_paymaster_impl(&self) -> Option
{ @@ -321,9 +322,9 @@ impl ZksNamespace { return Ok(None); }; - let Some(batch) = storage + let Some(batch_with_metadata) = storage .blocks_dal() - .get_l1_batch_header(l1_batch_number) + .get_l1_batch_metadata(l1_batch_number) .await .map_err(DalError::generalize)? else { @@ -332,13 +333,71 @@ impl ZksNamespace { let merkle_tree_leaves = all_l1_logs_in_batch.iter().map(L2ToL1Log::to_bytes); - let protocol_version = batch + let protocol_version = batch_with_metadata + .header .protocol_version .unwrap_or_else(ProtocolVersionId::last_potentially_undefined); let tree_size = l2_to_l1_logs_tree_size(protocol_version); - let (root, proof) = MiniMerkleTree::new(merkle_tree_leaves, Some(tree_size)) + let (local_root, proof) = MiniMerkleTree::new(merkle_tree_leaves, Some(tree_size)) .merkle_root_and_path(l1_log_index); + + if protocol_version.is_pre_gateway() { + return Ok(Some(L2ToL1LogProof { + proof, + root: local_root, + id: l1_log_index as u32, + })); + } + + let aggregated_root = batch_with_metadata + .metadata + .aggregation_root + .expect("`aggregation_root` must be present for post-gateway branch"); + let root = KeccakHasher.compress(&local_root, &aggregated_root); + + let mut log_leaf_proof = proof; + log_leaf_proof.push(aggregated_root); + + let Some(sl_chain_id) = storage + .eth_sender_dal() + .get_batch_commit_chain_id(l1_batch_number) + .await + .map_err(DalError::generalize)? + else { + return Ok(None); + }; + + let (batch_proof_len, batch_chain_proof) = + if sl_chain_id.0 != self.state.api_config.l1_chain_id.0 { + let Some(batch_chain_proof) = storage + .blocks_dal() + .get_l1_batch_chain_merkle_path(l1_batch_number) + .await + .map_err(DalError::generalize)? + else { + return Ok(None); + }; + + (batch_chain_proof.batch_proof_len, batch_chain_proof.proof) + } else { + (0, Vec::new()) + }; + + let proof = { + let mut metadata = [0u8; 32]; + metadata[0] = LOG_PROOF_SUPPORTED_METADATA_VERSION; + metadata[1] = log_leaf_proof.len() as u8; + metadata[2] = batch_proof_len as u8; + + let mut result = vec![H256(metadata)]; + + result.extend(log_leaf_proof); + result.extend(batch_chain_proof); + + result + }; + Ok(Some(L2ToL1LogProof { proof, root, @@ -361,6 +420,11 @@ impl ZksNamespace { return Ok(None); }; + self.state + .start_info + .ensure_not_pruned(l1_batch_number, &mut storage) + .await?; + let log_proof = self .get_l2_to_l1_log_proof_inner( &mut storage, diff --git a/core/node/api_server/src/web3/state.rs b/core/node/api_server/src/web3/state.rs index d43771811ee0..900cd165c045 100644 --- a/core/node/api_server/src/web3/state.rs +++ b/core/node/api_server/src/web3/state.rs @@ -20,9 +20,8 @@ use zksync_dal::{Connection, ConnectionPool, Core, CoreDal, DalError}; use zksync_metadata_calculator::api_server::TreeApiClient; use zksync_node_sync::SyncState; use zksync_types::{ - api, api::BridgeAddresses, commitment::L1BatchCommitmentMode, l2::L2Tx, - transaction_request::CallRequest, Address, L1BatchNumber, L1ChainId, L2BlockNumber, L2ChainId, - H256, U256, U64, + api, commitment::L1BatchCommitmentMode, l2::L2Tx, transaction_request::CallRequest, Address, + L1BatchNumber, L1ChainId, L2BlockNumber, L2ChainId, H256, U256, U64, }; use zksync_web3_decl::{error::Web3Error, types::Filter}; @@ -104,10 +103,10 @@ pub struct InternalApiConfig { pub estimate_gas_acceptable_overestimation: u32, pub estimate_gas_optimize_search: bool, pub bridge_addresses: api::BridgeAddresses, - pub bridgehub_proxy_addr: Option
, - pub state_transition_proxy_addr: Option
, - pub transparent_proxy_admin_addr: Option
, - pub diamond_proxy_addr: Address, + pub l1_bridgehub_proxy_addr: Option
, + pub l1_state_transition_proxy_addr: Option
, + pub l1_transparent_proxy_admin_addr: Option
, + pub l1_diamond_proxy_addr: Address, pub l2_testnet_paymaster_addr: Option
, pub req_entities_limit: usize, pub fee_history_limit: u64, @@ -149,19 +148,19 @@ impl InternalApiConfig { ), l2_legacy_shared_bridge: contracts_config.l2_legacy_shared_bridge_addr, }, - bridgehub_proxy_addr: contracts_config + l1_bridgehub_proxy_addr: contracts_config .ecosystem_contracts .as_ref() .map(|a| a.bridgehub_proxy_addr), - state_transition_proxy_addr: contracts_config + l1_state_transition_proxy_addr: contracts_config .ecosystem_contracts .as_ref() .map(|a| a.state_transition_proxy_addr), - transparent_proxy_admin_addr: contracts_config + l1_transparent_proxy_admin_addr: contracts_config .ecosystem_contracts .as_ref() .map(|a| a.transparent_proxy_admin_addr), - diamond_proxy_addr: contracts_config.diamond_proxy_addr, + l1_diamond_proxy_addr: contracts_config.diamond_proxy_addr, l2_testnet_paymaster_addr: contracts_config.l2_testnet_paymaster_addr, req_entities_limit: web3_config.req_entities_limit(), fee_history_limit: web3_config.fee_history_limit(), @@ -213,18 +212,18 @@ impl SealedL2BlockNumber { } #[derive(Debug, Clone)] -pub struct BridgeAddressesHandle(Arc>); +pub struct BridgeAddressesHandle(Arc>); impl BridgeAddressesHandle { - pub fn new(bridge_addresses: BridgeAddresses) -> Self { + pub fn new(bridge_addresses: api::BridgeAddresses) -> Self { Self(Arc::new(RwLock::new(bridge_addresses))) } - pub async fn update(&self, bridge_addresses: BridgeAddresses) { + pub async fn update(&self, bridge_addresses: api::BridgeAddresses) { *self.0.write().await = bridge_addresses; } - pub async fn read(&self) -> BridgeAddresses { + pub async fn read(&self) -> api::BridgeAddresses { self.0.read().await.clone() } } diff --git a/core/node/api_server/src/web3/tests/mod.rs b/core/node/api_server/src/web3/tests/mod.rs index feac8eb8d17f..f447f135917a 100644 --- a/core/node/api_server/src/web3/tests/mod.rs +++ b/core/node/api_server/src/web3/tests/mod.rs @@ -1313,7 +1313,7 @@ impl HttpTest for FeeHistoryTest { .map(U256::from); let history = client - .fee_history(1_000.into(), api::BlockNumber::Latest, vec![]) + .fee_history(1_000.into(), api::BlockNumber::Latest, Some(vec![])) .await?; assert_eq!(history.inner.oldest_block, 0.into()); assert_eq!( @@ -1346,7 +1346,11 @@ impl HttpTest for FeeHistoryTest { // Check partial histories: blocks 0..=1 let history = client - .fee_history(1_000.into(), api::BlockNumber::Number(1.into()), vec![]) + .fee_history( + 1_000.into(), + api::BlockNumber::Number(1.into()), + Some(vec![]), + ) .await?; assert_eq!(history.inner.oldest_block, 0.into()); assert_eq!( @@ -1357,7 +1361,7 @@ impl HttpTest for FeeHistoryTest { // Blocks 1..=2 let history = client - .fee_history(2.into(), api::BlockNumber::Latest, vec![]) + .fee_history(2.into(), api::BlockNumber::Latest, Some(vec![])) .await?; assert_eq!(history.inner.oldest_block, 1.into()); assert_eq!( @@ -1368,7 +1372,7 @@ impl HttpTest for FeeHistoryTest { // Blocks 1..=1 let history = client - .fee_history(1.into(), api::BlockNumber::Number(1.into()), vec![]) + .fee_history(1.into(), api::BlockNumber::Number(1.into()), Some(vec![])) .await?; assert_eq!(history.inner.oldest_block, 1.into()); assert_eq!(history.inner.base_fee_per_gas, [100, 100].map(U256::from)); @@ -1376,7 +1380,11 @@ impl HttpTest for FeeHistoryTest { // Non-existing newest block. let err = client - .fee_history(1000.into(), api::BlockNumber::Number(100.into()), vec![]) + .fee_history( + 1000.into(), + api::BlockNumber::Number(100.into()), + Some(vec![]), + ) .await .unwrap_err(); assert_matches!( diff --git a/core/node/commitment_generator/src/lib.rs b/core/node/commitment_generator/src/lib.rs index 2ce0152abab6..71b019e230a7 100644 --- a/core/node/commitment_generator/src/lib.rs +++ b/core/node/commitment_generator/src/lib.rs @@ -293,13 +293,13 @@ impl CommitmentGenerator { }; let aggregation_root = if protocol_version.is_pre_gateway() { + H256::zero() + } else { let mut connection = self .connection_pool .connection_tagged("commitment_generator") .await?; read_aggregation_root(&mut connection, l1_batch_number).await? - } else { - H256::zero() }; CommitmentInput::PostBoojum { diff --git a/core/node/consistency_checker/src/lib.rs b/core/node/consistency_checker/src/lib.rs index e13e479117cc..a73adc44b83e 100644 --- a/core/node/consistency_checker/src/lib.rs +++ b/core/node/consistency_checker/src/lib.rs @@ -1,9 +1,12 @@ -use std::{borrow::Cow, collections::HashSet, fmt, time::Duration}; +use std::{borrow::Cow, cmp::Ordering, collections::HashSet, fmt, time::Duration}; use anyhow::Context as _; use serde::Serialize; use tokio::sync::watch; -use zksync_contracts::PRE_BOOJUM_COMMIT_FUNCTION; +use zksync_contracts::{ + bridgehub_contract, POST_BOOJUM_COMMIT_FUNCTION, POST_SHARED_BRIDGE_COMMIT_FUNCTION, + PRE_BOOJUM_COMMIT_FUNCTION, +}; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; use zksync_eth_client::{ clients::{DynClient, L1}, @@ -11,16 +14,23 @@ use zksync_eth_client::{ }; use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_l1_contract_interface::{ - i_executor::{commit::kzg::ZK_SYNC_BYTES_PER_BLOB, structures::CommitBatchInfo}, + i_executor::{ + commit::kzg::ZK_SYNC_BYTES_PER_BLOB, + structures::{ + CommitBatchInfo, StoredBatchInfo, PUBDATA_SOURCE_BLOBS, PUBDATA_SOURCE_CALLDATA, + PUBDATA_SOURCE_CUSTOM_PRE_GATEWAY, SUPPORTED_ENCODING_VERSION, + }, + }, Tokenizable, }; use zksync_shared_metrics::{CheckerComponent, EN_METRICS}; use zksync_types::{ commitment::{L1BatchCommitmentMode, L1BatchWithMetadata}, ethabi, - ethabi::Token, + ethabi::{ParamType, Token}, pubdata_da::PubdataSendingMode, - Address, L1BatchNumber, ProtocolVersionId, H256, U256, + Address, L1BatchNumber, L2ChainId, ProtocolVersionId, SLChainId, H256, L2_BRIDGEHUB_ADDRESS, + U256, }; #[cfg(test)] @@ -33,10 +43,10 @@ enum CheckError { #[error("error calling L1 contract")] ContractCall(#[from] ContractCallError), /// Error that is caused by the main node providing incorrect information etc. - #[error("failed validating commit transaction")] + #[error("failed validating commit transaction: {0}")] Validation(anyhow::Error), /// Error that is caused by violating invariants internal to *this* node (e.g., not having expected data in Postgres). - #[error("internal error")] + #[error("internal error: {0}")] Internal(anyhow::Error), } @@ -213,6 +223,13 @@ impl LocalL1BatchCommitData { .map_or(true, |version| version.is_pre_shared_bridge()) } + fn is_pre_gateway(&self) -> bool { + self.l1_batch + .header + .protocol_version + .map_or(true, |version| version.is_pre_gateway()) + } + /// All returned errors are validation errors. fn verify_commitment(&self, reference: ðabi::Token) -> anyhow::Result<()> { let protocol_version = self @@ -220,11 +237,13 @@ impl LocalL1BatchCommitData { .header .protocol_version .unwrap_or_else(ProtocolVersionId::last_potentially_undefined); - let da = detect_da(protocol_version, reference) + let da = detect_da(protocol_version, reference, self.commitment_mode) .context("cannot detect DA source from reference commitment token")?; - // For `PubdataDA::Calldata`, it's required that the pubdata fits into a single blob. - if matches!(da, PubdataSendingMode::Calldata) { + // For rollups with `PubdataSendingMode::Calldata`, it's required that the pubdata fits into a single blob. + if matches!(self.commitment_mode, L1BatchCommitmentMode::Rollup) + && matches!(da, PubdataSendingMode::Calldata) + { let pubdata_len = self .l1_batch .header @@ -258,12 +277,8 @@ impl LocalL1BatchCommitData { pub fn detect_da( protocol_version: ProtocolVersionId, reference: &Token, + commitment_mode: L1BatchCommitmentMode, ) -> Result { - /// These are used by the L1 Contracts to indicate what DA layer is used for pubdata - const PUBDATA_SOURCE_CALLDATA: u8 = 0; - const PUBDATA_SOURCE_BLOBS: u8 = 1; - const PUBDATA_SOURCE_CUSTOM: u8 = 2; - fn parse_error(message: impl Into>) -> ethabi::Error { ethabi::Error::Other(message.into()) } @@ -290,28 +305,80 @@ pub fn detect_da( "last reference token has unexpected shape; expected bytes, got {last_reference_token:?}" ))), }; - match last_reference_token.first() { - Some(&byte) if byte == PUBDATA_SOURCE_CALLDATA => Ok(PubdataSendingMode::Calldata), - Some(&byte) if byte == PUBDATA_SOURCE_BLOBS => Ok(PubdataSendingMode::Blobs), - Some(&byte) if byte == PUBDATA_SOURCE_CUSTOM => Ok(PubdataSendingMode::Custom), - Some(&byte) => Err(parse_error(format!( - "unexpected first byte of the last reference token; expected one of [{PUBDATA_SOURCE_CALLDATA}, {PUBDATA_SOURCE_BLOBS}], \ + + if protocol_version.is_pre_gateway() { + return match last_reference_token.first() { + Some(&byte) if byte == PUBDATA_SOURCE_CALLDATA => Ok(PubdataSendingMode::Calldata), + Some(&byte) if byte == PUBDATA_SOURCE_BLOBS => Ok(PubdataSendingMode::Blobs), + Some(&byte) if byte == PUBDATA_SOURCE_CUSTOM_PRE_GATEWAY => Ok(PubdataSendingMode::Custom), + Some(&byte) => Err(parse_error(format!( + "unexpected first byte of the last reference token; expected one of [{PUBDATA_SOURCE_CALLDATA}, {PUBDATA_SOURCE_BLOBS}, {PUBDATA_SOURCE_CUSTOM_PRE_GATEWAY}], \ + got {byte}" + ))), + None => Err(parse_error("last reference token is empty")), + }; + } + + match commitment_mode { + L1BatchCommitmentMode::Validium => { + // `Calldata`, `RelayedL2Calldata` and `Blobs` are encoded exactly the same way, + // token is just a `state_diff_hash` for them. + // For `Custom` it's `state_diff_hash` followed by `da_inclusion_data`. We can't distinguish + // between `Calldata`/`RelayedL2Calldata`/`Blobs`/`Custom` with empty `da_inclusion_data`, + // but it's ok to just return a `Calldata` given they are all encoded the same. + match last_reference_token.len().cmp(&32) { + Ordering::Equal => Ok(PubdataSendingMode::Calldata), + Ordering::Greater => Ok(PubdataSendingMode::Custom), + Ordering::Less => Err(parse_error( + "unexpected last reference token len for post-gateway version validium", + )), + } + } + L1BatchCommitmentMode::Rollup => { + // For rollup the format of this token (`operatorDAInput`) is: + // 32 bytes - `state_diff_hash` + // 32 bytes - hash of the full pubdata + // 1 byte - number of blobs + // 32 bytes for each blob - hashes of blobs + // 1 byte - pubdata source + // X bytes - blob/pubdata commitments + + let number_of_blobs = last_reference_token.get(64).copied().ok_or_else(|| { + parse_error(format!( + "last reference token is too short; expected at least 65 bytes, got {}", + last_reference_token.len() + )) + })? as usize; + + match last_reference_token.get(65 + 32 * number_of_blobs) { + Some(&byte) if byte == PUBDATA_SOURCE_CALLDATA => Ok(PubdataSendingMode::Calldata), + Some(&byte) if byte == PUBDATA_SOURCE_BLOBS => Ok(PubdataSendingMode::Blobs), + Some(&byte) => Err(parse_error(format!( + "unexpected first byte of the last reference token for rollup; expected one of [{PUBDATA_SOURCE_CALLDATA}, {PUBDATA_SOURCE_BLOBS}], \ got {byte}" - ))), - None => Err(parse_error("last reference token is empty")), + ))), + None => Err(parse_error(format!("last reference token is too short; expected at least 65 bytes, got {}", last_reference_token.len()))), + } + } } } +#[derive(Debug)] +pub struct SLChainAccess { + client: Box>, + chain_id: SLChainId, + diamond_proxy_addr: Option
, +} + #[derive(Debug)] pub struct ConsistencyChecker { /// ABI of the ZKsync contract contract: ethabi::Contract, - /// Address of the ZKsync diamond proxy on L1 - diamond_proxy_addr: Option
, /// How many past batches to check when starting max_batches_to_recheck: u32, sleep_interval: Duration, - l1_client: Box>, + l1_chain_data: SLChainAccess, + gateway_chain_data: Option, event_handler: Box, l1_data_mismatch_behavior: L1DataMismatchBehavior, pool: ConnectionPool, @@ -322,19 +389,49 @@ pub struct ConsistencyChecker { impl ConsistencyChecker { const DEFAULT_SLEEP_INTERVAL: Duration = Duration::from_secs(5); - pub fn new( + pub async fn new( l1_client: Box>, + gateway_client: Option>>, max_batches_to_recheck: u32, pool: ConnectionPool, commitment_mode: L1BatchCommitmentMode, + l2_chain_id: L2ChainId, ) -> anyhow::Result { let (health_check, health_updater) = ConsistencyCheckerHealthUpdater::new(); + let l1_chain_id = l1_client.fetch_chain_id().await?; + let l1_chain_data = SLChainAccess { + client: l1_client.for_component("consistency_checker"), + chain_id: l1_chain_id, + diamond_proxy_addr: None, + }; + + let gateway_chain_data = if let Some(client) = gateway_client { + let contract = bridgehub_contract(); + let function_name = if contract.function("getZKChain").is_ok() { + "getZKChain" + } else { + "getHyperchain" + }; + let gateway_diamond_proxy = + CallFunctionArgs::new(function_name, Token::Uint(l2_chain_id.as_u64().into())) + .for_contract(L2_BRIDGEHUB_ADDRESS, &contract) + .call(&client) + .await?; + let chain_id = client.fetch_chain_id().await?; + Some(SLChainAccess { + client: client.for_component("consistency_checker"), + chain_id, + diamond_proxy_addr: Some(gateway_diamond_proxy), + }) + } else { + None + }; Ok(Self { contract: zksync_contracts::hyperchain_contract(), - diamond_proxy_addr: None, max_batches_to_recheck, sleep_interval: Self::DEFAULT_SLEEP_INTERVAL, - l1_client: l1_client.for_component("consistency_checker"), + l1_chain_data, + gateway_chain_data, event_handler: Box::new(health_updater), l1_data_mismatch_behavior: L1DataMismatchBehavior::Log, pool, @@ -343,8 +440,8 @@ impl ConsistencyChecker { }) } - pub fn with_diamond_proxy_addr(mut self, address: Address) -> Self { - self.diamond_proxy_addr = Some(address); + pub fn with_l1_diamond_proxy_addr(mut self, address: Address) -> Self { + self.l1_chain_data.diamond_proxy_addr = Some(address); self } @@ -361,11 +458,36 @@ impl ConsistencyChecker { let commit_tx_hash = local.commit_tx_hash; tracing::info!("Checking commit tx {commit_tx_hash} for L1 batch #{batch_number}"); - let commit_tx_status = self - .l1_client + let sl_chain_id = self + .pool + .connection_tagged("consistency_checker") + .await + .map_err(|err| CheckError::Internal(err.into()))? + .eth_sender_dal() + .get_batch_commit_chain_id(batch_number) + .await + .map_err(|err| CheckError::Internal(err.into()))?; + let chain_data = match sl_chain_id { + Some(chain_id) => { + let Some(chain_data) = self.chain_data_by_id(chain_id) else { + return Err(CheckError::Validation(anyhow::anyhow!( + "failed to find client for chain id {chain_id}" + ))); + }; + chain_data + } + None => &self.l1_chain_data, + }; + let commit_tx_status = chain_data + .client .get_tx_status(commit_tx_hash) .await? - .with_context(|| format!("receipt for tx {commit_tx_hash:?} not found on L1")) + .with_context(|| { + format!( + "receipt for tx {commit_tx_hash:?} not found on target chain with id {}", + chain_data.chain_id + ) + }) .map_err(CheckError::Validation)?; if !commit_tx_status.success { let err = anyhow::anyhow!("main node gave us a failed commit tx {commit_tx_hash:?}"); @@ -373,14 +495,14 @@ impl ConsistencyChecker { } // We can't get tx calldata from the DB because it can be fake. - let commit_tx = self - .l1_client + let commit_tx = chain_data + .client .get_tx(commit_tx_hash) .await? .with_context(|| format!("commit transaction {commit_tx_hash:?} not found on L1")) .map_err(CheckError::Internal)?; // we've got a transaction receipt previously, thus an internal error - if let Some(diamond_proxy_addr) = self.diamond_proxy_addr { + if let Some(diamond_proxy_addr) = chain_data.diamond_proxy_addr { let event = self .contract .event("BlockCommit") @@ -423,10 +545,9 @@ impl ConsistencyChecker { let commit_function = if local.is_pre_boojum() { &*PRE_BOOJUM_COMMIT_FUNCTION } else if local.is_pre_shared_bridge() { - self.contract - .function("commitBatches") - .context("L1 contract does not have `commitBatches` function") - .map_err(CheckError::Internal)? + &*POST_BOOJUM_COMMIT_FUNCTION + } else if local.is_pre_gateway() { + &*POST_SHARED_BRIDGE_COMMIT_FUNCTION } else { self.contract .function("commitBatchesSharedBridge") @@ -434,12 +555,16 @@ impl ConsistencyChecker { .map_err(CheckError::Internal)? }; - let commitment = - Self::extract_commit_data(&commit_tx.input.0, commit_function, batch_number) - .with_context(|| { - format!("failed extracting commit data for transaction {commit_tx_hash:?}") - }) - .map_err(CheckError::Validation)?; + let commitment = Self::extract_commit_data( + &commit_tx.input.0, + commit_function, + batch_number, + local.is_pre_gateway(), + ) + .with_context(|| { + format!("failed extracting commit data for transaction {commit_tx_hash:?}") + }) + .map_err(CheckError::Validation)?; local .verify_commitment(&commitment) .map_err(CheckError::Validation) @@ -450,6 +575,7 @@ impl ConsistencyChecker { commit_tx_input_data: &[u8], commit_function: ðabi::Function, batch_number: L1BatchNumber, + pre_gateway: bool, ) -> anyhow::Result { let expected_solidity_selector = commit_function.short_signature(); let actual_solidity_selector = &commit_tx_input_data[..4]; @@ -461,11 +587,45 @@ impl ConsistencyChecker { let mut commit_input_tokens = commit_function .decode_input(&commit_tx_input_data[4..]) .context("Failed decoding calldata for L1 commit function")?; - let mut commitments = commit_input_tokens - .pop() - .context("Unexpected signature for L1 commit function")? - .into_array() - .context("Unexpected signature for L1 commit function")?; + let mut commitments: Vec; + if pre_gateway { + commitments = commit_input_tokens + .pop() + .context("Unexpected signature for L1 commit function")? + .into_array() + .context("Unexpected signature for L1 commit function")?; + } else { + let commitments_popped = commit_input_tokens + .pop() + .context("Unexpected signature for L1 commit function: no tokens")?; + let commitment_bytes = match commitments_popped { + Token::Bytes(arr) => arr, + _ => anyhow::bail!( + "Unexpected signature for L1 commit function: last token is not bytes" + ), + }; + let (version, encoded_data) = commitment_bytes.split_at(1); + anyhow::ensure!( + version[0] == SUPPORTED_ENCODING_VERSION, + "Unexpected encoding version: {}", + version[0] + ); + let decoded_data = ethabi::decode( + &[ + StoredBatchInfo::schema(), + ParamType::Array(Box::new(CommitBatchInfo::post_gateway_schema())), + ], + encoded_data, + ) + .context("Failed to decode commitData")?; + if let Some(Token::Array(batch_commitments)) = &decoded_data.get(1) { + // Now you have access to `stored_batch_info` and `l1_batches_to_commit` + // Process them as needed + commitments = batch_commitments.clone(); + } else { + anyhow::bail!("Unexpected data format"); + } + } // Commit transactions usually publish multiple commitments at once, so we need to find // the one that corresponds to the batch we're checking. @@ -473,15 +633,15 @@ impl ConsistencyChecker { .first() .context("L1 batch commitment is empty")?; let ethabi::Token::Tuple(first_batch_commitment) = first_batch_commitment else { - anyhow::bail!("Unexpected signature for L1 commit function"); + anyhow::bail!("Unexpected signature for L1 commit function 3"); }; let first_batch_number = first_batch_commitment .first() - .context("Unexpected signature for L1 commit function")?; + .context("Unexpected signature for L1 commit function 4")?; let first_batch_number = first_batch_number .clone() .into_uint() - .context("Unexpected signature for L1 commit function")?; + .context("Unexpected signature for L1 commit function 5")?; let first_batch_number = usize::try_from(first_batch_number) .map_err(|_| anyhow::anyhow!("Integer overflow for L1 batch number"))?; // ^ `TryFrom` has `&str` error here, so we can't use `.context()`. @@ -511,24 +671,31 @@ impl ConsistencyChecker { } async fn sanity_check_diamond_proxy_addr(&self) -> Result<(), CheckError> { - let Some(address) = self.diamond_proxy_addr else { - return Ok(()); - }; - tracing::debug!("Performing sanity checks for diamond proxy contract {address:?}"); + for client_data in std::iter::once(&self.l1_chain_data).chain(&self.gateway_chain_data) { + let Some(address) = client_data.diamond_proxy_addr else { + continue; + }; + let chain_id = client_data.chain_id; + tracing::debug!("Performing sanity checks for chain id {chain_id}, diamond proxy contract {address:?}"); - let version: U256 = CallFunctionArgs::new("getProtocolVersion", ()) - .for_contract(address, &self.contract) - .call(&self.l1_client) - .await?; - tracing::info!("Checked diamond proxy {address:?} (protocol version: {version})"); + let version: U256 = CallFunctionArgs::new("getProtocolVersion", ()) + .for_contract(address, &self.contract) + .call(&client_data.client) + .await?; + tracing::info!("Checked chain id {chain_id}, diamond proxy {address:?} (protocol version: {version})"); + } Ok(()) } pub async fn run(mut self, mut stop_receiver: watch::Receiver) -> anyhow::Result<()> { tracing::info!( - "Starting consistency checker with diamond proxy contract: {:?}, sleep interval: {:?}, \ - max historic L1 batches to check: {}", - self.diamond_proxy_addr, + "Starting consistency checker with l1 diamond proxy contract: {:?}, \ + gateway diamond proxy contract: {:?}, \ + sleep interval: {:?}, max historic L1 batches to check: {}", + self.l1_chain_data.diamond_proxy_addr, + self.gateway_chain_data + .as_ref() + .map(|d| d.diamond_proxy_addr), self.sleep_interval, self.max_batches_to_recheck ); @@ -658,6 +825,16 @@ impl ConsistencyChecker { tracing::info!("Stop signal received, consistency_checker is shutting down"); Ok(()) } + + fn chain_data_by_id(&self, searched_chain_id: SLChainId) -> Option<&SLChainAccess> { + if searched_chain_id == self.l1_chain_data.chain_id { + Some(&self.l1_chain_data) + } else if Some(searched_chain_id) == self.gateway_chain_data.as_ref().map(|d| d.chain_id) { + self.gateway_chain_data.as_ref() + } else { + None + } + } } /// Repeatedly polls the DB until there is an L1 batch with metadata. We may not have such a batch initially diff --git a/core/node/consistency_checker/src/tests/mod.rs b/core/node/consistency_checker/src/tests/mod.rs index b09ef2b2272c..1635bddffb83 100644 --- a/core/node/consistency_checker/src/tests/mod.rs +++ b/core/node/consistency_checker/src/tests/mod.rs @@ -7,7 +7,7 @@ use test_casing::{test_casing, Product}; use tokio::sync::mpsc; use zksync_config::GenesisConfig; use zksync_dal::Connection; -use zksync_eth_client::{clients::MockSettlementLayer, Options}; +use zksync_eth_client::{clients::MockSettlementLayer, EthInterface, Options}; use zksync_l1_contract_interface::{i_executor::methods::CommitBatches, Tokenizable, Tokenize}; use zksync_node_genesis::{insert_genesis_batch, mock_genesis_config, GenesisParams}; use zksync_node_test_utils::{ @@ -30,9 +30,12 @@ pub(crate) fn create_l1_batch_with_metadata(number: u32) -> L1BatchWithMetadata } const PRE_BOOJUM_PROTOCOL_VERSION: ProtocolVersionId = ProtocolVersionId::Version10; -const DIAMOND_PROXY_ADDR: Address = Address::repeat_byte(1); +const L1_DIAMOND_PROXY_ADDR: Address = Address::repeat_byte(1); +const GATEWAY_DIAMOND_PROXY_ADDR: Address = Address::repeat_byte(2); const VALIDATOR_TIMELOCK_ADDR: Address = Address::repeat_byte(23); -const CHAIN_ID: u32 = 270; +const ERA_CHAIN_ID: u64 = 270; +const L1_CHAIN_ID: u64 = 9; +const GATEWAY_CHAIN_ID: u64 = 505; const COMMITMENT_MODES: [L1BatchCommitmentMode; 2] = [ L1BatchCommitmentMode::Rollup, L1BatchCommitmentMode::Validium, @@ -72,14 +75,10 @@ pub(crate) fn build_commit_tx_input_data( if protocol_version.is_pre_boojum() { PRE_BOOJUM_COMMIT_FUNCTION.encode_input(&tokens).unwrap() } else if protocol_version.is_pre_shared_bridge() { - contract - .function("commitBatches") - .unwrap() - .encode_input(&tokens) - .unwrap() + POST_BOOJUM_COMMIT_FUNCTION.encode_input(&tokens).unwrap() } else { // Post shared bridge transactions also require chain id - let tokens: Vec<_> = vec![Token::Uint(CHAIN_ID.into())] + let tokens: Vec<_> = vec![Token::Uint(ERA_CHAIN_ID.into())] .into_iter() .chain(tokens) .collect(); @@ -91,18 +90,25 @@ pub(crate) fn build_commit_tx_input_data( } } -pub(crate) fn create_mock_checker( +pub(crate) async fn create_mock_checker( client: MockSettlementLayer, pool: ConnectionPool, commitment_mode: L1BatchCommitmentMode, ) -> ConsistencyChecker { let (health_check, health_updater) = ConsistencyCheckerHealthUpdater::new(); + let client = client.into_client(); + let chain_id = client.fetch_chain_id().await.unwrap(); + let l1_chain_data = SLChainAccess { + client: Box::new(client), + chain_id, + diamond_proxy_addr: Some(L1_DIAMOND_PROXY_ADDR), + }; ConsistencyChecker { contract: zksync_contracts::hyperchain_contract(), - diamond_proxy_addr: Some(DIAMOND_PROXY_ADDR), max_batches_to_recheck: 100, sleep_interval: Duration::from_millis(10), - l1_client: Box::new(client.into_client()), + l1_chain_data, + gateway_chain_data: None, event_handler: Box::new(health_updater), l1_data_mismatch_behavior: L1DataMismatchBehavior::Bail, pool, @@ -111,23 +117,51 @@ pub(crate) fn create_mock_checker( } } -fn create_mock_ethereum() -> MockSettlementLayer { - let mock = MockSettlementLayer::builder().with_call_handler(|call, _block_id| { - assert_eq!(call.to, Some(DIAMOND_PROXY_ADDR)); - let packed_semver = ProtocolVersionId::latest().into_packed_semver_with_patch(0); - let contract = zksync_contracts::hyperchain_contract(); - let expected_input = contract - .function("getProtocolVersion") - .unwrap() - .encode_input(&[]) - .unwrap(); - assert_eq!(call.data, Some(expected_input.into())); +fn create_mock_sl(chain_id: u64, with_get_zk_chain: bool) -> MockSettlementLayer { + let mock = MockSettlementLayer::builder() + .with_call_handler(move |call, _block_id| match call.to { + Some(addr) if addr == L1_DIAMOND_PROXY_ADDR || addr == GATEWAY_DIAMOND_PROXY_ADDR => { + let packed_semver = ProtocolVersionId::latest().into_packed_semver_with_patch(0); + let contract = zksync_contracts::hyperchain_contract(); + let expected_input = contract + .function("getProtocolVersion") + .unwrap() + .encode_input(&[]) + .unwrap(); + assert_eq!(call.data, Some(expected_input.into())); - ethabi::Token::Uint(packed_semver) - }); + ethabi::Token::Uint(packed_semver) + } + Some(addr) if with_get_zk_chain && addr == L2_BRIDGEHUB_ADDRESS => { + let contract = zksync_contracts::bridgehub_contract(); + let function_name = if contract.function("getZKChain").is_ok() { + "getZKChain" + } else { + "getHyperchain" + }; + let expected_input = contract + .function(function_name) + .unwrap() + .encode_input(&[Token::Uint(ERA_CHAIN_ID.into())]) + .unwrap(); + assert_eq!(call.data, Some(expected_input.into())); + + ethabi::Token::Address(GATEWAY_DIAMOND_PROXY_ADDR) + } + _ => panic!("Received unexpected call"), + }) + .with_chain_id(chain_id); mock.build() } +fn create_mock_ethereum() -> MockSettlementLayer { + create_mock_sl(L1_CHAIN_ID, false) +} + +fn create_mock_gateway() -> MockSettlementLayer { + create_mock_sl(GATEWAY_CHAIN_ID, true) +} + impl HandleConsistencyCheckerEvent for mpsc::UnboundedSender { fn initialize(&mut self) { // Do nothing @@ -141,8 +175,8 @@ impl HandleConsistencyCheckerEvent for mpsc::UnboundedSender { self.send(last_checked_batch).ok(); } - fn report_inconsistent_batch(&mut self, _number: L1BatchNumber, _err: &anyhow::Error) { - // Do nothing + fn report_inconsistent_batch(&mut self, number: L1BatchNumber, err: &anyhow::Error) { + panic!("Error on batch #{number}: {err}"); } } @@ -163,6 +197,11 @@ fn build_commit_tx_input_data_is_correct(commitment_mode: L1BatchCommitmentMode) &commit_tx_input_data, commit_function, batch.header.number, + batch + .header + .protocol_version + .map(|v| v.is_pre_gateway()) + .unwrap_or(true), ) .unwrap(); assert_eq!( @@ -174,8 +213,7 @@ fn build_commit_tx_input_data_is_correct(commitment_mode: L1BatchCommitmentMode) #[test] fn extracting_commit_data_for_boojum_batch() { - let contract = zksync_contracts::hyperchain_contract(); - let commit_function = contract.function("commitBatches").unwrap(); + let commit_function = &*POST_BOOJUM_COMMIT_FUNCTION; // Calldata taken from the commit transaction for `https://sepolia.explorer.zksync.io/batch/4470`; // `https://sepolia.etherscan.io/tx/0x300b9115037028b1f8aa2177abf98148c3df95c9b04f95a4e25baf4dfee7711f` let commit_tx_input_data = include_bytes!("commit_l1_batch_4470_testnet_sepolia.calldata"); @@ -184,6 +222,7 @@ fn extracting_commit_data_for_boojum_batch() { commit_tx_input_data, commit_function, L1BatchNumber(4_470), + true, ) .unwrap(); @@ -197,6 +236,7 @@ fn extracting_commit_data_for_boojum_batch() { commit_tx_input_data, commit_function, L1BatchNumber(bogus_l1_batch), + true, ) .unwrap_err(); } @@ -204,8 +244,7 @@ fn extracting_commit_data_for_boojum_batch() { #[test] fn extracting_commit_data_for_multiple_batches() { - let contract = zksync_contracts::hyperchain_contract(); - let commit_function = contract.function("commitBatches").unwrap(); + let commit_function = &*POST_BOOJUM_COMMIT_FUNCTION; // Calldata taken from the commit transaction for `https://explorer.zksync.io/batch/351000`; // `https://etherscan.io/tx/0xbd8dfe0812df0da534eb95a2d2a4382d65a8172c0b648a147d60c1c2921227fd` let commit_tx_input_data = include_bytes!("commit_l1_batch_351000-351004_mainnet.calldata"); @@ -215,6 +254,7 @@ fn extracting_commit_data_for_multiple_batches() { commit_tx_input_data, commit_function, L1BatchNumber(l1_batch), + true, ) .unwrap(); @@ -229,6 +269,7 @@ fn extracting_commit_data_for_multiple_batches() { commit_tx_input_data, commit_function, L1BatchNumber(bogus_l1_batch), + true, ) .unwrap_err(); } @@ -244,6 +285,7 @@ fn extracting_commit_data_for_pre_boojum_batch() { commit_tx_input_data, &PRE_BOOJUM_COMMIT_FUNCTION, L1BatchNumber(200_000), + true, ) .unwrap(); @@ -265,6 +307,7 @@ impl SaveAction<'_> { self, storage: &mut Connection<'_, Core>, commit_tx_hash_by_l1_batch: &HashMap, + chain_id_by_l1_batch: &HashMap, ) { match self { Self::InsertBatch(l1_batch) => { @@ -291,6 +334,7 @@ impl SaveAction<'_> { } Self::InsertCommitTx(l1_batch_number) => { let commit_tx_hash = commit_tx_hash_by_l1_batch[&l1_batch_number]; + let chain_id = chain_id_by_l1_batch.get(&l1_batch_number).copied(); storage .eth_sender_dal() .insert_bogus_confirmed_eth_tx( @@ -298,6 +342,7 @@ impl SaveAction<'_> { AggregatedActionType::Commit, commit_tx_hash, chrono::Utc::now(), + chain_id, ) .await .unwrap(); @@ -367,7 +412,7 @@ fn l1_batch_commit_log(l1_batch: &L1BatchWithMetadata) -> Log { }); Log { - address: DIAMOND_PROXY_ADDR, + address: L1_DIAMOND_PROXY_ADDR, topics: vec![ *BLOCK_COMMIT_EVENT_HASH, H256::from_low_u64_be(l1_batch.header.number.0.into()), // batch number @@ -432,7 +477,7 @@ async fn normal_checker_function( let (l1_batch_updates_sender, mut l1_batch_updates_receiver) = mpsc::unbounded_channel(); let checker = ConsistencyChecker { event_handler: Box::new(l1_batch_updates_sender), - ..create_mock_checker(client, pool.clone(), commitment_mode) + ..create_mock_checker(client, pool.clone(), commitment_mode).await }; let (stop_sender, stop_receiver) = watch::channel(false); @@ -441,7 +486,112 @@ async fn normal_checker_function( // Add new batches to the storage. for save_action in save_actions_mapper(&l1_batches) { save_action - .apply(&mut storage, &commit_tx_hash_by_l1_batch) + .apply( + &mut storage, + &commit_tx_hash_by_l1_batch, + &Default::default(), + ) + .await; + tokio::time::sleep(Duration::from_millis(7)).await; + } + + // Wait until all batches are checked. + loop { + let checked_batch = l1_batch_updates_receiver.recv().await.unwrap(); + if checked_batch == l1_batches.last().unwrap().header.number { + break; + } + } + + // Send the stop signal to the checker and wait for it to stop. + stop_sender.send_replace(true); + checker_task.await.unwrap().unwrap(); +} + +#[tokio::test] +async fn checker_works_with_different_settlement_layers() { + // Use default action mapper. + let save_actions_mapper = SAVE_ACTION_MAPPERS[0].1; + let commitment_mode = L1BatchCommitmentMode::Rollup; + + let pool = ConnectionPool::::test_pool().await; + let mut storage = pool.connection().await.unwrap(); + insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); + + let l1_batches: Vec<_> = (1..=10).map(create_l1_batch_with_metadata).collect(); + let mut commit_tx_hash_by_l1_batch = HashMap::with_capacity(l1_batches.len()); + let mut chain_id_by_l1_batch = HashMap::with_capacity(l1_batches.len()); + let l1_client = create_mock_ethereum(); + let gateway_client = create_mock_gateway(); + + let clients = [l1_client, gateway_client]; + let diamond_proxies = [L1_DIAMOND_PROXY_ADDR, GATEWAY_DIAMOND_PROXY_ADDR]; + + for (i, l1_batches) in l1_batches.chunks(2).enumerate() { + let client = &clients[i & 1]; + let input_data = build_commit_tx_input_data(l1_batches, commitment_mode); + let signed_tx = client.sign_prepared_tx( + input_data.clone(), + VALIDATOR_TIMELOCK_ADDR, + Options { + nonce: Some((i / 2).into()), + ..Options::default() + }, + ); + let signed_tx = signed_tx.unwrap(); + client.as_ref().send_raw_tx(signed_tx.raw_tx).await.unwrap(); + client.execute_tx(signed_tx.hash, true, 1).with_logs( + l1_batches + .iter() + .map(|batch| { + let mut log = l1_batch_commit_log(batch); + log.address = diamond_proxies[i & 1]; + log + }) + .collect(), + ); + + commit_tx_hash_by_l1_batch.extend( + l1_batches + .iter() + .map(|batch| (batch.header.number, signed_tx.hash)), + ); + let chain_id = client.as_ref().fetch_chain_id().await.unwrap(); + chain_id_by_l1_batch.extend( + l1_batches + .iter() + .map(|batch| (batch.header.number, chain_id)), + ) + } + + let (l1_batch_updates_sender, mut l1_batch_updates_receiver) = mpsc::unbounded_channel(); + let mut checker = ConsistencyChecker::new( + Box::new(clients[0].clone().into_client()), + Some(Box::new(clients[1].clone().into_client())), + 100, + pool.clone(), + commitment_mode, + L2ChainId::new(ERA_CHAIN_ID).unwrap(), + ) + .await + .unwrap(); + checker.sleep_interval = Duration::from_millis(10); + checker.event_handler = Box::new(l1_batch_updates_sender); + checker.l1_data_mismatch_behavior = L1DataMismatchBehavior::Bail; + + let (stop_sender, stop_receiver) = watch::channel(false); + let checker_task = tokio::spawn(checker.run(stop_receiver)); + + // Add new batches to the storage. + for save_action in save_actions_mapper(&l1_batches) { + save_action + .apply( + &mut storage, + &commit_tx_hash_by_l1_batch, + &chain_id_by_l1_batch, + ) .await; tokio::time::sleep(Duration::from_millis(7)).await; } @@ -515,7 +665,7 @@ async fn checker_processes_pre_boojum_batches( let (l1_batch_updates_sender, mut l1_batch_updates_receiver) = mpsc::unbounded_channel(); let checker = ConsistencyChecker { event_handler: Box::new(l1_batch_updates_sender), - ..create_mock_checker(client, pool.clone(), commitment_mode) + ..create_mock_checker(client, pool.clone(), commitment_mode).await }; let (stop_sender, stop_receiver) = watch::channel(false); @@ -524,7 +674,11 @@ async fn checker_processes_pre_boojum_batches( // Add new batches to the storage. for save_action in save_actions_mapper(&l1_batches) { save_action - .apply(&mut storage, &commit_tx_hash_by_l1_batch) + .apply( + &mut storage, + &commit_tx_hash_by_l1_batch, + &Default::default(), + ) .await; tokio::time::sleep(Duration::from_millis(7)).await; } @@ -586,7 +740,11 @@ async fn checker_functions_after_snapshot_recovery( if !delay_batch_insertion { for &save_action in &save_actions { save_action - .apply(&mut storage, &commit_tx_hash_by_l1_batch) + .apply( + &mut storage, + &commit_tx_hash_by_l1_batch, + &Default::default(), + ) .await; } } @@ -594,7 +752,7 @@ async fn checker_functions_after_snapshot_recovery( let (l1_batch_updates_sender, mut l1_batch_updates_receiver) = mpsc::unbounded_channel(); let checker = ConsistencyChecker { event_handler: Box::new(l1_batch_updates_sender), - ..create_mock_checker(client, pool.clone(), commitment_mode) + ..create_mock_checker(client, pool.clone(), commitment_mode).await }; let (stop_sender, stop_receiver) = watch::channel(false); let checker_task = tokio::spawn(checker.run(stop_receiver)); @@ -603,7 +761,11 @@ async fn checker_functions_after_snapshot_recovery( tokio::time::sleep(Duration::from_millis(10)).await; for &save_action in &save_actions { save_action - .apply(&mut storage, &commit_tx_hash_by_l1_batch) + .apply( + &mut storage, + &commit_tx_hash_by_l1_batch, + &Default::default(), + ) .await; } } @@ -654,7 +816,7 @@ impl IncorrectDataKind { l1_batch: &L1BatchWithMetadata, commitment_mode: L1BatchCommitmentMode, ) -> H256 { - let mut log_origin = Some(DIAMOND_PROXY_ADDR); + let mut log_origin = Some(L1_DIAMOND_PROXY_ADDR); let (commit_tx_input_data, successful_status) = match self { Self::MissingStatus => { return H256::zero(); // Do not execute the transaction @@ -771,12 +933,16 @@ async fn checker_detects_incorrect_tx_data( ]; for save_action in save_actions { save_action - .apply(&mut storage, &commit_tx_hash_by_l1_batch) + .apply( + &mut storage, + &commit_tx_hash_by_l1_batch, + &Default::default(), + ) .await; } drop(storage); - let checker = create_mock_checker(client, pool, commitment_mode); + let checker = create_mock_checker(client, pool, commitment_mode).await; let (_stop_sender, stop_receiver) = watch::channel(false); // The checker must stop with an error. tokio::time::timeout(Duration::from_secs(30), checker.run(stop_receiver)) diff --git a/core/node/db_pruner/src/tests.rs b/core/node/db_pruner/src/tests.rs index 099914541fee..7afd5044c73c 100644 --- a/core/node/db_pruner/src/tests.rs +++ b/core/node/db_pruner/src/tests.rs @@ -391,6 +391,7 @@ async fn mark_l1_batch_as_executed(storage: &mut Connection<'_, Core>, number: u AggregatedActionType::Execute, H256::from_low_u64_be(number.into()), chrono::Utc::now(), + None, ) .await .unwrap(); diff --git a/core/node/eth_sender/src/aggregator.rs b/core/node/eth_sender/src/aggregator.rs index 432804a21b2e..3bdbf23242f0 100644 --- a/core/node/eth_sender/src/aggregator.rs +++ b/core/node/eth_sender/src/aggregator.rs @@ -181,7 +181,10 @@ impl Aggregator { ) .await; - l1_batches.map(|l1_batches| ExecuteBatches { l1_batches }) + l1_batches.map(|l1_batches| ExecuteBatches { + l1_batches, + priority_ops_proofs: Vec::new(), + }) } async fn get_commit_operation( diff --git a/core/node/eth_sender/src/eth_tx_aggregator.rs b/core/node/eth_sender/src/eth_tx_aggregator.rs index f0d7201d1503..7b6280c9592f 100644 --- a/core/node/eth_sender/src/eth_tx_aggregator.rs +++ b/core/node/eth_sender/src/eth_tx_aggregator.rs @@ -387,7 +387,6 @@ impl EthTxAggregator { tracing::error!("Failed to get multicall data {err:?}"); err })?; - let contracts_are_pre_shared_bridge = protocol_version_id.is_pre_shared_bridge(); let snark_wrapper_vk_hash = self .get_snark_wrapper_vk_hash(verifier_address) @@ -429,14 +428,7 @@ impl EthTxAggregator { return Ok(()); } let is_gateway = self.settlement_mode.is_gateway(); - let tx = self - .save_eth_tx( - storage, - &agg_op, - contracts_are_pre_shared_bridge, - is_gateway, - ) - .await?; + let tx = self.save_eth_tx(storage, &agg_op, is_gateway).await?; Self::report_eth_tx_saving(storage, &agg_op, &tx).await; self.health_updater.update( @@ -482,19 +474,9 @@ impl EthTxAggregator { .await; } - fn encode_aggregated_op( - &self, - op: &AggregatedOperation, - contracts_are_pre_shared_bridge: bool, - ) -> TxData { - let operation_is_pre_shared_bridge = op.protocol_version().is_pre_shared_bridge(); - - // The post shared bridge contracts support pre-shared bridge operations, but vice versa is not true. - if contracts_are_pre_shared_bridge { - assert!(operation_is_pre_shared_bridge); - } - + fn encode_aggregated_op(&self, op: &AggregatedOperation) -> TxData { let mut args = vec![Token::Uint(self.rollup_chain_id.as_u64().into())]; + let is_op_pre_gateway = op.protocol_version().is_pre_gateway(); let (calldata, sidecar) = match op { AggregatedOperation::Commit(last_committed_l1_batch, l1_batches, pubdata_da) => { @@ -506,17 +488,12 @@ impl EthTxAggregator { }; let commit_data_base = commit_batches.into_tokens(); - let (encoding_fn, commit_data) = if contracts_are_pre_shared_bridge { - (&self.functions.pre_shared_bridge_commit, commit_data_base) + args.extend(commit_data_base); + let commit_data = args; + let encoding_fn = if is_op_pre_gateway { + &self.functions.post_shared_bridge_commit } else { - args.extend(commit_data_base); - ( - self.functions - .post_shared_bridge_commit - .as_ref() - .expect("Missing ABI for commitBatchesSharedBridge"), - args, - ) + &self.functions.post_gateway_commit }; let l1_batch_for_sidecar = @@ -529,37 +506,27 @@ impl EthTxAggregator { Self::encode_commit_data(encoding_fn, &commit_data, l1_batch_for_sidecar) } AggregatedOperation::PublishProofOnchain(op) => { - let calldata = if contracts_are_pre_shared_bridge { - self.functions - .pre_shared_bridge_prove - .encode_input(&op.into_tokens()) - .expect("Failed to encode prove transaction data") + args.extend(op.into_tokens()); + let encoding_fn = if is_op_pre_gateway { + &self.functions.post_shared_bridge_prove } else { - args.extend(op.into_tokens()); - self.functions - .post_shared_bridge_prove - .as_ref() - .expect("Missing ABI for proveBatchesSharedBridge") - .encode_input(&args) - .expect("Failed to encode prove transaction data") + &self.functions.post_gateway_prove }; + let calldata = encoding_fn + .encode_input(&args) + .expect("Failed to encode prove transaction data"); (calldata, None) } AggregatedOperation::Execute(op) => { - let calldata = if contracts_are_pre_shared_bridge { - self.functions - .pre_shared_bridge_execute - .encode_input(&op.into_tokens()) - .expect("Failed to encode execute transaction data") + args.extend(op.into_tokens()); + let encoding_fn = if is_op_pre_gateway { + &self.functions.post_shared_bridge_execute } else { - args.extend(op.into_tokens()); - self.functions - .post_shared_bridge_execute - .as_ref() - .expect("Missing ABI for executeBatchesSharedBridge") - .encode_input(&args) - .expect("Failed to encode execute transaction data") + &self.functions.post_gateway_execute }; + let calldata = encoding_fn + .encode_input(&args) + .expect("Failed to encode execute transaction data"); (calldata, None) } }; @@ -607,7 +574,6 @@ impl EthTxAggregator { &self, storage: &mut Connection<'_, Core>, aggregated_op: &AggregatedOperation, - contracts_are_pre_shared_bridge: bool, is_gateway: bool, ) -> Result { let mut transaction = storage.start_transaction().await.unwrap(); @@ -620,8 +586,7 @@ impl EthTxAggregator { (_, _) => None, }; let nonce = self.get_next_nonce(&mut transaction, sender_addr).await?; - let encoded_aggregated_op = - self.encode_aggregated_op(aggregated_op, contracts_are_pre_shared_bridge); + let encoded_aggregated_op = self.encode_aggregated_op(aggregated_op); let l1_batch_number_range = aggregated_op.l1_batch_range(); let predicted_gas_for_batches = transaction diff --git a/core/node/eth_sender/src/tester.rs b/core/node/eth_sender/src/tester.rs index 646df1dc1a7b..b62223d0d68b 100644 --- a/core/node/eth_sender/src/tester.rs +++ b/core/node/eth_sender/src/tester.rs @@ -414,6 +414,7 @@ impl EthSenderTester { .into_iter() .map(l1_batch_with_metadata) .collect(), + priority_ops_proofs: Vec::new(), }); self.next_l1_batch_number_to_execute += 1; self.save_operation(operation).await @@ -514,7 +515,6 @@ impl EthSenderTester { .save_eth_tx( &mut self.conn.connection().await.unwrap(), &aggregated_operation, - false, self.is_l2, ) .await diff --git a/core/node/eth_sender/src/tests.rs b/core/node/eth_sender/src/tests.rs index 8e5032a69cfc..aab6d2e43d76 100644 --- a/core/node/eth_sender/src/tests.rs +++ b/core/node/eth_sender/src/tests.rs @@ -34,6 +34,7 @@ fn get_dummy_operation(number: u32) -> AggregatedOperation { metadata: default_l1_batch_metadata(), raw_published_factory_deps: Vec::new(), }], + priority_ops_proofs: Vec::new(), }) } @@ -208,7 +209,6 @@ async fn resend_each_block(commitment_mode: L1BatchCommitmentMode) -> anyhow::Re &mut tester.conn.connection().await.unwrap(), &get_dummy_operation(0), false, - false, ) .await?; diff --git a/core/node/eth_sender/src/zksync_functions.rs b/core/node/eth_sender/src/zksync_functions.rs index 85508c71c03d..f3e4998ef37c 100644 --- a/core/node/eth_sender/src/zksync_functions.rs +++ b/core/node/eth_sender/src/zksync_functions.rs @@ -1,14 +1,19 @@ -use zksync_contracts::{hyperchain_contract, multicall_contract, verifier_contract}; +use zksync_contracts::{ + hyperchain_contract, multicall_contract, verifier_contract, POST_SHARED_BRIDGE_COMMIT_FUNCTION, + POST_SHARED_BRIDGE_EXECUTE_FUNCTION, POST_SHARED_BRIDGE_PROVE_FUNCTION, +}; use zksync_types::ethabi::{Contract, Function}; #[derive(Debug)] pub(super) struct ZkSyncFunctions { - pub(super) pre_shared_bridge_commit: Function, - pub(super) post_shared_bridge_commit: Option, - pub(super) pre_shared_bridge_prove: Function, - pub(super) post_shared_bridge_prove: Option, - pub(super) pre_shared_bridge_execute: Function, - pub(super) post_shared_bridge_execute: Option, + pub(super) post_shared_bridge_commit: Function, + pub(super) post_shared_bridge_prove: Function, + pub(super) post_shared_bridge_execute: Function, + + pub(super) post_gateway_commit: Function, + pub(super) post_gateway_prove: Function, + pub(super) post_gateway_execute: Function, + pub(super) get_l2_bootloader_bytecode_hash: Function, pub(super) get_l2_default_account_bytecode_hash: Function, pub(super) get_verifier: Function, @@ -47,15 +52,14 @@ impl Default for ZkSyncFunctions { let verifier_contract = verifier_contract(); let multicall_contract = multicall_contract(); - let pre_shared_bridge_commit = get_function(&zksync_contract, "commitBatches"); - let post_shared_bridge_commit = - get_optional_function(&zksync_contract, "commitBatchesSharedBridge"); - let pre_shared_bridge_prove = get_function(&zksync_contract, "proveBatches"); - let post_shared_bridge_prove = - get_optional_function(&zksync_contract, "proveBatchesSharedBridge"); - let pre_shared_bridge_execute = get_function(&zksync_contract, "executeBatches"); - let post_shared_bridge_execute = - get_optional_function(&zksync_contract, "executeBatchesSharedBridge"); + let post_shared_bridge_commit = POST_SHARED_BRIDGE_COMMIT_FUNCTION.clone(); + let post_shared_bridge_prove = POST_SHARED_BRIDGE_PROVE_FUNCTION.clone(); + let post_shared_bridge_execute = POST_SHARED_BRIDGE_EXECUTE_FUNCTION.clone(); + + let post_gateway_commit = get_function(&zksync_contract, "commitBatchesSharedBridge"); + let post_gateway_prove = get_function(&zksync_contract, "proveBatchesSharedBridge"); + let post_gateway_execute = get_function(&zksync_contract, "executeBatchesSharedBridge"); + let get_l2_bootloader_bytecode_hash = get_function(&zksync_contract, "getL2BootloaderBytecodeHash"); let get_l2_default_account_bytecode_hash = @@ -69,12 +73,12 @@ impl Default for ZkSyncFunctions { let verification_key_hash = get_function(&verifier_contract, "verificationKeyHash"); ZkSyncFunctions { - pre_shared_bridge_commit, post_shared_bridge_commit, - pre_shared_bridge_prove, post_shared_bridge_prove, - pre_shared_bridge_execute, post_shared_bridge_execute, + post_gateway_commit, + post_gateway_prove, + post_gateway_execute, get_l2_bootloader_bytecode_hash, get_l2_default_account_bytecode_hash, get_evm_emulator_bytecode_hash, diff --git a/core/node/eth_watch/Cargo.toml b/core/node/eth_watch/Cargo.toml index 985649c35daf..2a2374cef70e 100644 --- a/core/node/eth_watch/Cargo.toml +++ b/core/node/eth_watch/Cargo.toml @@ -18,6 +18,8 @@ zksync_contracts.workspace = true zksync_system_constants.workspace = true zksync_eth_client.workspace = true zksync_shared_metrics.workspace = true +zksync_mini_merkle_tree.workspace = true +zksync_web3_decl.workspace = true tokio = { workspace = true, features = ["time"] } anyhow.workspace = true @@ -25,7 +27,10 @@ thiserror.workspace = true async-trait.workspace = true tracing.workspace = true async-recursion.workspace = true +itertools.workspace = true [dev-dependencies] zksync_concurrency.workspace = true test-log.workspace = true +hex.workspace = true +bincode.workspace = true diff --git a/core/node/eth_watch/src/client.rs b/core/node/eth_watch/src/client.rs index ac5fc86c6e9f..18e49aad0813 100644 --- a/core/node/eth_watch/src/client.rs +++ b/core/node/eth_watch/src/client.rs @@ -1,21 +1,28 @@ -use std::fmt; +use std::{fmt, sync::Arc}; use anyhow::Context; use zksync_contracts::{ getters_facet_contract, state_transition_manager_contract, verifier_contract, + MESSAGE_ROOT_CONTRACT, }; use zksync_eth_client::{ clients::{DynClient, L1}, CallFunctionArgs, ClientError, ContractCallError, EnrichedClientError, EnrichedClientResult, EthInterface, }; +use zksync_system_constants::L2_MESSAGE_ROOT_ADDRESS; use zksync_types::{ + api::{ChainAggProof, Log}, ethabi::Contract, - web3::{BlockId, BlockNumber, FilterBuilder, Log}, - Address, SLChainId, H256, U256, + web3::{BlockId, BlockNumber, Filter, FilterBuilder}, + Address, L1BatchNumber, L2ChainId, SLChainId, H256, U256, U64, +}; +use zksync_web3_decl::{ + client::{Network, L2}, + namespaces::{EthNamespaceClient, UnstableNamespaceClient, ZksNamespaceClient}, }; -/// L1 client functionality used by [`EthWatch`](crate::EthWatch) and constituent event processors. +/// Common L1 and L2 client functionality used by [`EthWatch`](crate::EthWatch) and constituent event processors. #[async_trait::async_trait] pub trait EthClient: 'static + fmt::Debug + Send + Sync { /// Returns events in a given block range. @@ -27,6 +34,10 @@ pub trait EthClient: 'static + fmt::Debug + Send + Sync { topic2: Option, retries_left: usize, ) -> EnrichedClientResult>; + + /// Returns either finalized L1 block number or block number that satisfies `self.confirmations_for_eth_event` if it's set. + async fn confirmed_block_number(&self) -> EnrichedClientResult; + /// Returns finalized L1 block number. async fn finalized_block_number(&self) -> EnrichedClientResult; @@ -40,7 +51,17 @@ pub trait EthClient: 'static + fmt::Debug + Send + Sync { packed_version: H256, ) -> EnrichedClientResult>>; + /// Returns ID of the chain. async fn chain_id(&self) -> EnrichedClientResult; + + /// Returns chain root for `l2_chain_id` at the moment right after `block_number`. + /// `block_number` is block number on SL. + /// `l2_chain_id` is chain id of L2. + async fn get_chain_root( + &self, + block_number: U64, + l2_chain_id: L2ChainId, + ) -> Result; } pub const RETRY_LIMIT: usize = 5; @@ -50,10 +71,10 @@ const TOO_MANY_RESULTS_RETH: &str = "length limit exceeded"; const TOO_BIG_RANGE_RETH: &str = "query exceeds max block range"; const TOO_MANY_RESULTS_CHAINSTACK: &str = "range limit exceeded"; -/// Implementation of [`EthClient`] based on HTTP JSON-RPC (encapsulated via [`EthInterface`]). +/// Implementation of [`EthClient`] based on HTTP JSON-RPC. #[derive(Debug, Clone)] -pub struct EthHttpQueryClient { - client: Box>, +pub struct EthHttpQueryClient { + client: Box>, diamond_proxy_addr: Address, governance_address: Address, new_upgrade_cut_data_signature: H256, @@ -62,12 +83,16 @@ pub struct EthHttpQueryClient { chain_admin_address: Option
, verifier_contract_abi: Contract, getters_facet_contract_abi: Contract, + message_root_abi: Contract, confirmations_for_eth_event: Option, } -impl EthHttpQueryClient { +impl EthHttpQueryClient +where + Box>: GetLogsClient, +{ pub fn new( - client: Box>, + client: Box>, diamond_proxy_addr: Address, state_transition_manager_address: Option
, chain_admin_address: Option
, @@ -92,6 +117,7 @@ impl EthHttpQueryClient { .signature(), verifier_contract_abi: verifier_contract(), getters_facet_contract_abi: getters_facet_contract(), + message_root_abi: MESSAGE_ROOT_CONTRACT.clone(), confirmations_for_eth_event, } } @@ -102,6 +128,7 @@ impl EthHttpQueryClient { Some(self.governance_address), self.state_transition_manager_address, self.chain_admin_address, + Some(L2_MESSAGE_ROOT_ADDRESS), ] .into_iter() .flatten() @@ -126,7 +153,7 @@ impl EthHttpQueryClient { builder = builder.address(addresses); } let filter = builder.build(); - let mut result = self.client.logs(&filter).await; + let mut result = self.client.get_logs(filter).await; // This code is compatible with both Infura and Alchemy API providers. // Note: we don't handle rate-limits here - assumption is that we're never going to hit them. @@ -216,7 +243,10 @@ impl EthHttpQueryClient { } #[async_trait::async_trait] -impl EthClient for EthHttpQueryClient { +impl EthClient for EthHttpQueryClient +where + Box>: EthInterface + GetLogsClient, +{ async fn scheduler_vk_hash( &self, verifier_address: Address, @@ -274,27 +304,31 @@ impl EthClient for EthHttpQueryClient { .await } - async fn finalized_block_number(&self) -> EnrichedClientResult { + async fn confirmed_block_number(&self) -> EnrichedClientResult { if let Some(confirmations) = self.confirmations_for_eth_event { let latest_block_number = self.client.block_number().await?.as_u64(); Ok(latest_block_number.saturating_sub(confirmations)) } else { - let block = self - .client - .block(BlockId::Number(BlockNumber::Finalized)) - .await? - .ok_or_else(|| { - let err = ClientError::Custom("Finalized block must be present on L1".into()); - EnrichedClientError::new(err, "block") - })?; - let block_number = block.number.ok_or_else(|| { - let err = ClientError::Custom("Finalized block must contain number".into()); - EnrichedClientError::new(err, "block").with_arg("block", &block) - })?; - Ok(block_number.as_u64()) + self.finalized_block_number().await } } + async fn finalized_block_number(&self) -> EnrichedClientResult { + let block = self + .client + .block(BlockId::Number(BlockNumber::Finalized)) + .await? + .ok_or_else(|| { + let err = ClientError::Custom("Finalized block must be present on L1".into()); + EnrichedClientError::new(err, "block") + })?; + let block_number = block.number.ok_or_else(|| { + let err = ClientError::Custom("Finalized block must contain number".into()); + EnrichedClientError::new(err, "block").with_arg("block", &block) + })?; + Ok(block_number.as_u64()) + } + async fn get_total_priority_txs(&self) -> Result { CallFunctionArgs::new("getTotalPriorityTxs", ()) .for_contract(self.diamond_proxy_addr, &self.getters_facet_contract_abi) @@ -304,6 +338,157 @@ impl EthClient for EthHttpQueryClient { } async fn chain_id(&self) -> EnrichedClientResult { - Ok(self.client.fetch_chain_id().await?) + self.client.fetch_chain_id().await + } + + async fn get_chain_root( + &self, + block_number: U64, + l2_chain_id: L2ChainId, + ) -> Result { + CallFunctionArgs::new("getChainRoot", U256::from(l2_chain_id.as_u64())) + .with_block(BlockId::Number(block_number.into())) + .for_contract(L2_MESSAGE_ROOT_ADDRESS, &self.message_root_abi) + .call(&self.client) + .await + } +} + +/// Encapsulates `eth_getLogs` calls. +#[async_trait::async_trait] +pub trait GetLogsClient: 'static + fmt::Debug + Send + Sync { + /// Returns L2 version of [`Log`] with L2-specific fields, e.g. `l1_batch_number`. + /// L1 clients fill such fields with `None`. + async fn get_logs(&self, filter: Filter) -> EnrichedClientResult>; +} + +#[async_trait::async_trait] +impl GetLogsClient for Box> { + async fn get_logs(&self, filter: Filter) -> EnrichedClientResult> { + Ok(self + .logs(&filter) + .await? + .into_iter() + .map(Into::into) + .collect()) + } +} + +#[async_trait::async_trait] +impl GetLogsClient for Box> { + async fn get_logs(&self, filter: Filter) -> EnrichedClientResult> { + EthNamespaceClient::get_logs(self, filter.into()) + .await + .map_err(|err| EnrichedClientError::new(err, "eth_getLogs")) + } +} + +/// L2 client functionality used by [`EthWatch`](crate::EthWatch) and constituent event processors. +/// Trait extension for [`EthClient`]. +#[async_trait::async_trait] +pub trait L2EthClient: EthClient { + async fn get_chain_log_proof( + &self, + l1_batch_number: L1BatchNumber, + chain_id: L2ChainId, + ) -> EnrichedClientResult>; + + async fn get_chain_root_l2( + &self, + l1_batch_number: L1BatchNumber, + l2_chain_id: L2ChainId, + ) -> Result, ContractCallError>; +} + +#[async_trait::async_trait] +impl L2EthClient for EthHttpQueryClient { + async fn get_chain_log_proof( + &self, + l1_batch_number: L1BatchNumber, + chain_id: L2ChainId, + ) -> EnrichedClientResult> { + self.client + .get_chain_log_proof(l1_batch_number, chain_id) + .await + .map_err(|err| EnrichedClientError::new(err, "unstable_getChainLogProof")) + } + + async fn get_chain_root_l2( + &self, + l1_batch_number: L1BatchNumber, + l2_chain_id: L2ChainId, + ) -> Result, ContractCallError> { + let l2_block_range = self + .client + .get_l2_block_range(l1_batch_number) + .await + .map_err(|err| EnrichedClientError::new(err, "zks_getL1BatchBlockRange"))?; + if let Some((_, l2_block_number)) = l2_block_range { + self.get_chain_root(l2_block_number, l2_chain_id) + .await + .map(Some) + } else { + Ok(None) + } + } +} + +/// Wrapper for L2 client object. +/// It is used for L2EthClient -> EthClient dyn upcasting coercion: +/// Arc -> L2EthClientW -> Arc +#[derive(Debug, Clone)] +pub struct L2EthClientW(pub Arc); + +#[async_trait::async_trait] +impl EthClient for L2EthClientW { + async fn get_events( + &self, + from: BlockNumber, + to: BlockNumber, + topic1: H256, + topic2: Option, + retries_left: usize, + ) -> EnrichedClientResult> { + self.0 + .get_events(from, to, topic1, topic2, retries_left) + .await + } + + async fn confirmed_block_number(&self) -> EnrichedClientResult { + self.0.confirmed_block_number().await + } + + async fn finalized_block_number(&self) -> EnrichedClientResult { + self.0.finalized_block_number().await + } + + async fn get_total_priority_txs(&self) -> Result { + self.0.get_total_priority_txs().await + } + + async fn scheduler_vk_hash( + &self, + verifier_address: Address, + ) -> Result { + self.0.scheduler_vk_hash(verifier_address).await + } + + async fn diamond_cut_by_version( + &self, + packed_version: H256, + ) -> EnrichedClientResult>> { + self.0.diamond_cut_by_version(packed_version).await + } + + async fn chain_id(&self) -> EnrichedClientResult { + self.0.chain_id().await + } + + async fn get_chain_root( + &self, + block_number: U64, + l2_chain_id: L2ChainId, + ) -> Result { + self.0.get_chain_root(block_number, l2_chain_id).await } } diff --git a/core/node/eth_watch/src/event_processors/appended_chain_batch_root.rs b/core/node/eth_watch/src/event_processors/appended_chain_batch_root.rs new file mode 100644 index 000000000000..68f731120c65 --- /dev/null +++ b/core/node/eth_watch/src/event_processors/appended_chain_batch_root.rs @@ -0,0 +1,238 @@ +use std::sync::Arc; + +use anyhow::Context; +use itertools::Itertools; +use zksync_dal::{eth_watcher_dal::EventType, Connection, Core, CoreDal, DalError}; +use zksync_mini_merkle_tree::MiniMerkleTree; +use zksync_types::{ + api::{ChainAggProof, Log}, + ethabi, h256_to_u256, + l2_to_l1_log::{ + BatchAndChainMerklePath, BATCH_LEAF_PADDING, LOG_PROOF_SUPPORTED_METADATA_VERSION, + }, + u256_to_h256, L1BatchNumber, L2ChainId, SLChainId, H256, U256, +}; + +use crate::{ + client::L2EthClient, + event_processors::{EventProcessor, EventProcessorError, EventsSource}, +}; + +/// Listens to `AppendedChainBatchRoot` events and saves `BatchAndChainMerklePath` for batches. +/// These events are emitted on SL each time L1 batch is executed. Processor uses them to track which batches are already executed +/// and group them by SL's batch number they are executed in as this data is required to build `BatchAndChainMerklePath`. +#[derive(Debug)] +pub struct BatchRootProcessor { + next_batch_number_lower_bound: L1BatchNumber, + appended_chain_batch_root_signature: H256, + merkle_tree: MiniMerkleTree<[u8; 96]>, + l2_chain_id: L2ChainId, + sl_l2_client: Arc, +} + +impl BatchRootProcessor { + pub fn new( + next_batch_number_lower_bound: L1BatchNumber, + merkle_tree: MiniMerkleTree<[u8; 96]>, + l2_chain_id: L2ChainId, + sl_l2_client: Arc, + ) -> Self { + Self { + next_batch_number_lower_bound, + appended_chain_batch_root_signature: ethabi::long_signature( + "AppendedChainBatchRoot", + &[ + ethabi::ParamType::Uint(256), + ethabi::ParamType::Uint(256), + ethabi::ParamType::FixedBytes(32), + ], + ), + merkle_tree, + l2_chain_id, + sl_l2_client, + } + } +} + +#[async_trait::async_trait] +impl EventProcessor for BatchRootProcessor { + async fn process_events( + &mut self, + storage: &mut Connection<'_, Core>, + events: Vec, + ) -> Result { + let events_count = events.len(); + let mut transaction = storage + .start_transaction() + .await + .map_err(DalError::generalize)?; + + let grouped_events: Vec<_> = events + .into_iter() + .map(|log| { + let sl_l1_batch_number = L1BatchNumber( + log.l1_batch_number + .expect("Missing L1 batch number for finalized event") + .as_u32(), + ); + let chain_l1_batch_number = L1BatchNumber(h256_to_u256(log.topics[2]).as_u32()); + let logs_root_hash = H256::from_slice(&log.data.0); + + (sl_l1_batch_number, chain_l1_batch_number, logs_root_hash) + }) + .group_by(|(sl_l1_batch_number, _, _)| *sl_l1_batch_number) + .into_iter() + .map(|(sl_l1_batch_number, group)| { + let group: Vec<_> = group + .into_iter() + .map(|(_, chain_l1_batch_number, logs_root_hash)| { + (chain_l1_batch_number, logs_root_hash) + }) + .collect(); + + (sl_l1_batch_number, group) + }) + .collect(); + + let next_batch_number_lower_bound = self.next_batch_number_lower_bound; + let new_events = grouped_events + .into_iter() + .skip_while(|(_sl_l1_batch_number, events)| { + let first_event = events.first().unwrap(); + let last_event = events.last().unwrap(); + + match ( + first_event.0 < next_batch_number_lower_bound, + last_event.0 < next_batch_number_lower_bound, + ) { + (true, true) => true, // skip + (false, false) => false, // do not skip + _ => { + panic!("batch range was partially processed"); + } + } + }); + + let sl_chain_id = self.sl_l2_client.chain_id().await?; + for (sl_l1_batch_number, chain_batches) in new_events { + let chain_agg_proof = self + .sl_l2_client + .get_chain_log_proof(sl_l1_batch_number, self.l2_chain_id) + .await? + .context("Missing chain log proof for finalized batch")?; + let chain_proof_vector = + Self::chain_proof_vector(sl_l1_batch_number, chain_agg_proof, sl_chain_id); + + for (batch_number, batch_root) in &chain_batches { + let root_from_db = transaction + .blocks_dal() + .get_l1_batch_l2_l1_merkle_root(*batch_number) + .await + .map_err(DalError::generalize)? + .context("Missing l2_l1_merkle_root for finalized batch")?; + assert_eq!(root_from_db, *batch_root); + + self.merkle_tree + .push(Self::batch_leaf_preimage(*batch_root, *batch_number)); + self.next_batch_number_lower_bound = *batch_number + 1; + } + + let chain_root_local = self.merkle_tree.merkle_root(); + let chain_root_remote = self + .sl_l2_client + .get_chain_root_l2(sl_l1_batch_number, self.l2_chain_id) + .await?; + assert_eq!( + chain_root_local, + chain_root_remote.unwrap(), + "Chain root mismatch, l1 batch number #{sl_l1_batch_number}" + ); + + let number_of_leaves = self.merkle_tree.length(); + let batch_proofs = (0..chain_batches.len()).map(|i| { + let leaf_position = number_of_leaves - chain_batches.len() + i; + let batch_proof = self + .merkle_tree + .merkle_root_and_path_by_absolute_index(leaf_position) + .1; + let batch_proof_len = batch_proof.len() as u32; + let mut proof = vec![H256::from_low_u64_be(leaf_position as u64)]; + proof.extend(batch_proof); + proof.extend(chain_proof_vector.clone()); + + BatchAndChainMerklePath { + batch_proof_len, + proof, + } + }); + + for ((batch_number, _), proof) in chain_batches.iter().zip(batch_proofs) { + tracing::info!(%batch_number, "Saving batch-chain merkle path"); + transaction + .blocks_dal() + .set_batch_chain_merkle_path(*batch_number, proof) + .await + .map_err(DalError::generalize)?; + } + } + + transaction.commit().await.map_err(DalError::generalize)?; + + Ok(events_count) + } + + fn topic1(&self) -> H256 { + self.appended_chain_batch_root_signature + } + + fn topic2(&self) -> Option { + Some(H256::from_low_u64_be(self.l2_chain_id.as_u64())) + } + + fn event_source(&self) -> EventsSource { + EventsSource::SL + } + + fn event_type(&self) -> EventType { + EventType::ChainBatchRoot + } + + fn only_finalized_block(&self) -> bool { + true + } +} + +impl BatchRootProcessor { + pub(crate) fn batch_leaf_preimage(batch_root: H256, batch_number: L1BatchNumber) -> [u8; 96] { + let mut full_preimage = [0u8; 96]; + + full_preimage[0..32].copy_from_slice(BATCH_LEAF_PADDING.as_bytes()); + full_preimage[32..64].copy_from_slice(batch_root.as_bytes()); + full_preimage[64..96] + .copy_from_slice(H256::from_low_u64_be(batch_number.0 as u64).as_bytes()); + + full_preimage + } + + fn chain_proof_vector( + sl_l1_batch_number: L1BatchNumber, + chain_agg_proof: ChainAggProof, + sl_chain_id: SLChainId, + ) -> Vec { + let sl_encoded_data = + (U256::from(sl_l1_batch_number.0) << 128u32) + chain_agg_proof.chain_id_leaf_proof_mask; + + let mut metadata = [0u8; 32]; + metadata[0] = LOG_PROOF_SUPPORTED_METADATA_VERSION; + metadata[1] = chain_agg_proof.chain_id_leaf_proof.len() as u8; + + let mut chain_proof_vector = vec![ + u256_to_h256(sl_encoded_data), + H256::from_low_u64_be(sl_chain_id.0), + H256(metadata), + ]; + chain_proof_vector.extend(chain_agg_proof.chain_id_leaf_proof); + + chain_proof_vector + } +} diff --git a/core/node/eth_watch/src/event_processors/decentralized_upgrades.rs b/core/node/eth_watch/src/event_processors/decentralized_upgrades.rs index aa43e7239f88..3f4b0f3cf5ab 100644 --- a/core/node/eth_watch/src/event_processors/decentralized_upgrades.rs +++ b/core/node/eth_watch/src/event_processors/decentralized_upgrades.rs @@ -1,7 +1,9 @@ +use std::sync::Arc; + use anyhow::Context as _; use zksync_dal::{eth_watcher_dal::EventType, Connection, Core, CoreDal, DalError}; use zksync_types::{ - ethabi::Contract, protocol_version::ProtocolSemanticVersion, web3::Log, ProtocolUpgrade, H256, + api::Log, ethabi::Contract, protocol_version::ProtocolSemanticVersion, ProtocolUpgrade, H256, U256, }; @@ -17,12 +19,14 @@ pub struct DecentralizedUpgradesEventProcessor { /// Last protocol version seen. Used to skip events for already known upgrade proposals. last_seen_protocol_version: ProtocolSemanticVersion, update_upgrade_timestamp_signature: H256, + sl_client: Arc, } impl DecentralizedUpgradesEventProcessor { pub fn new( last_seen_protocol_version: ProtocolSemanticVersion, chain_admin_contract: &Contract, + sl_client: Arc, ) -> Self { Self { last_seen_protocol_version, @@ -31,6 +35,7 @@ impl DecentralizedUpgradesEventProcessor { .context("UpdateUpgradeTimestamp event is missing in ABI") .unwrap() .signature(), + sl_client, } } } @@ -40,7 +45,6 @@ impl EventProcessor for DecentralizedUpgradesEventProcessor { async fn process_events( &mut self, storage: &mut Connection<'_, Core>, - sl_client: &dyn EthClient, events: Vec, ) -> Result { let mut upgrades = Vec::new(); @@ -51,7 +55,8 @@ impl EventProcessor for DecentralizedUpgradesEventProcessor { .ok() .context("upgrade timestamp is too big")?; - let diamond_cut = sl_client + let diamond_cut = self + .sl_client .diamond_cut_by_version(version) .await? .context("missing upgrade data on STM")?; @@ -62,7 +67,7 @@ impl EventProcessor for DecentralizedUpgradesEventProcessor { }; // Scheduler VK is not present in proposal event. It is hard coded in verifier contract. let scheduler_vk_hash = if let Some(address) = upgrade.verifier_address { - Some(sl_client.scheduler_vk_hash(address).await?) + Some(self.sl_client.scheduler_vk_hash(address).await?) } else { None }; @@ -128,7 +133,7 @@ impl EventProcessor for DecentralizedUpgradesEventProcessor { Ok(events.len()) } - fn relevant_topic(&self) -> H256 { + fn topic1(&self) -> H256 { self.update_upgrade_timestamp_signature } diff --git a/core/node/eth_watch/src/event_processors/mod.rs b/core/node/eth_watch/src/event_processors/mod.rs index f145181b0cf9..ddbf84e65937 100644 --- a/core/node/eth_watch/src/event_processors/mod.rs +++ b/core/node/eth_watch/src/event_processors/mod.rs @@ -2,16 +2,17 @@ use std::fmt; use zksync_dal::{eth_watcher_dal::EventType, Connection, Core}; use zksync_eth_client::{ContractCallError, EnrichedClientError}; -use zksync_types::{web3::Log, H256}; +use zksync_types::{api::Log, H256}; pub(crate) use self::{ + appended_chain_batch_root::BatchRootProcessor, decentralized_upgrades::DecentralizedUpgradesEventProcessor, priority_ops::PriorityOpsEventProcessor, }; -use crate::client::EthClient; +mod appended_chain_batch_root; mod decentralized_upgrades; -pub mod priority_ops; +mod priority_ops; /// Errors issued by an [`EventProcessor`]. #[derive(Debug, thiserror::Error)] @@ -50,19 +51,28 @@ impl EventProcessorError { /// feeds events to all processors one-by-one. #[async_trait::async_trait] pub(super) trait EventProcessor: 'static + fmt::Debug + Send + Sync { - /// Processes given events. All events are guaranteed to match [`Self::relevant_topic()`]. + /// Processes given events. All events are guaranteed to match [`Self::topic1()`] and [`Self::topic2()`]. /// Returns number of processed events, this result is used to update last processed block. async fn process_events( &mut self, storage: &mut Connection<'_, Core>, - sl_client: &dyn EthClient, events: Vec, ) -> Result; - /// Relevant topic which defines what events to be processed - fn relevant_topic(&self) -> H256; + /// Relevant topic1 which defines what events to be processed + fn topic1(&self) -> H256; + + /// Relevant topic2 which defines what events to be processed + fn topic2(&self) -> Option { + None + } fn event_source(&self) -> EventsSource; fn event_type(&self) -> EventType; + + /// Whether processor expect events only from finalized blocks. + fn only_finalized_block(&self) -> bool { + false + } } diff --git a/core/node/eth_watch/src/event_processors/priority_ops.rs b/core/node/eth_watch/src/event_processors/priority_ops.rs index 051c076850e9..cbb224da6396 100644 --- a/core/node/eth_watch/src/event_processors/priority_ops.rs +++ b/core/node/eth_watch/src/event_processors/priority_ops.rs @@ -1,10 +1,10 @@ -use std::convert::TryFrom; +use std::{convert::TryFrom, sync::Arc}; use anyhow::Context; use zksync_contracts::hyperchain_contract; use zksync_dal::{eth_watcher_dal::EventType, Connection, Core, CoreDal, DalError}; use zksync_shared_metrics::{TxStage, APP_METRICS}; -use zksync_types::{l1::L1Tx, web3::Log, PriorityOpId, H256}; +use zksync_types::{api::Log, l1::L1Tx, PriorityOpId, H256}; use crate::{ client::EthClient, @@ -17,16 +17,21 @@ use crate::{ pub struct PriorityOpsEventProcessor { next_expected_priority_id: PriorityOpId, new_priority_request_signature: H256, + sl_client: Arc, } impl PriorityOpsEventProcessor { - pub fn new(next_expected_priority_id: PriorityOpId) -> anyhow::Result { + pub fn new( + next_expected_priority_id: PriorityOpId, + sl_client: Arc, + ) -> anyhow::Result { Ok(Self { next_expected_priority_id, new_priority_request_signature: hyperchain_contract() .event("NewPriorityRequest") .context("NewPriorityRequest event is missing in ABI")? .signature(), + sl_client, }) } } @@ -36,14 +41,13 @@ impl EventProcessor for PriorityOpsEventProcessor { async fn process_events( &mut self, storage: &mut Connection<'_, Core>, - sl_client: &dyn EthClient, events: Vec, ) -> Result { let mut priority_ops = Vec::new(); let events_count = events.len(); for event in events { assert_eq!(event.topics[0], self.new_priority_request_signature); // guaranteed by the watcher - let tx = L1Tx::try_from(event) + let tx = L1Tx::try_from(Into::::into(event)) .map_err(|err| EventProcessorError::log_parse(err, "priority op"))?; priority_ops.push(tx); } @@ -84,7 +88,7 @@ impl EventProcessor for PriorityOpsEventProcessor { let stage_latency = METRICS.poll_eth_node[&PollStage::PersistL1Txs].start(); APP_METRICS.processed_txs[&TxStage::added_to_mempool()].inc(); APP_METRICS.processed_l1_txs[&TxStage::added_to_mempool()].inc(); - let processed_priority_transactions = sl_client.get_total_priority_txs().await?; + let processed_priority_transactions = self.sl_client.get_total_priority_txs().await?; let ops_to_insert: Vec<&L1Tx> = new_ops .iter() .take_while(|op| processed_priority_transactions > op.serial_id().0) @@ -105,7 +109,7 @@ impl EventProcessor for PriorityOpsEventProcessor { Ok(skipped_ops + ops_to_insert.len()) } - fn relevant_topic(&self) -> H256 { + fn topic1(&self) -> H256 { self.new_priority_request_signature } diff --git a/core/node/eth_watch/src/lib.rs b/core/node/eth_watch/src/lib.rs index 4185878d2ac4..908ff4da37f1 100644 --- a/core/node/eth_watch/src/lib.rs +++ b/core/node/eth_watch/src/lib.rs @@ -2,24 +2,27 @@ //! protocol upgrades etc. //! New events are accepted to the ZKsync network once they have the sufficient amount of L1 confirmations. -use std::time::Duration; +use std::{sync::Arc, time::Duration}; use anyhow::Context as _; use tokio::sync::watch; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal, DalError}; +use zksync_mini_merkle_tree::MiniMerkleTree; use zksync_system_constants::PRIORITY_EXPIRATION; use zksync_types::{ ethabi::Contract, protocol_version::ProtocolSemanticVersion, - web3::BlockNumber as Web3BlockNumber, PriorityOpId, + web3::BlockNumber as Web3BlockNumber, L1BatchNumber, L2ChainId, PriorityOpId, }; -pub use self::client::EthHttpQueryClient; +pub use self::client::{EthClient, EthHttpQueryClient, L2EthClient}; use self::{ - client::{EthClient, RETRY_LIMIT}, + client::{L2EthClientW, RETRY_LIMIT}, event_processors::{EventProcessor, EventProcessorError, PriorityOpsEventProcessor}, metrics::METRICS, }; -use crate::event_processors::{DecentralizedUpgradesEventProcessor, EventsSource}; +use crate::event_processors::{ + BatchRootProcessor, DecentralizedUpgradesEventProcessor, EventsSource, +}; mod client; mod event_processors; @@ -31,42 +34,63 @@ mod tests; struct EthWatchState { last_seen_protocol_version: ProtocolSemanticVersion, next_expected_priority_id: PriorityOpId, + chain_batch_root_number_lower_bound: L1BatchNumber, + batch_merkle_tree: MiniMerkleTree<[u8; 96]>, } /// Ethereum watcher component. #[derive(Debug)] pub struct EthWatch { - l1_client: Box, - sl_client: Box, + l1_client: Arc, + sl_client: Arc, poll_interval: Duration, event_processors: Vec>, pool: ConnectionPool, } impl EthWatch { + #[allow(clippy::too_many_arguments)] pub async fn new( chain_admin_contract: &Contract, l1_client: Box, - sl_client: Box, + sl_l2_client: Option>, pool: ConnectionPool, poll_interval: Duration, + chain_id: L2ChainId, ) -> anyhow::Result { let mut storage = pool.connection_tagged("eth_watch").await?; - let state = Self::initialize_state(&mut storage).await?; + let l1_client: Arc = l1_client.into(); + let sl_l2_client: Option> = sl_l2_client.map(Into::into); + let sl_client: Arc = if let Some(sl_l2_client) = sl_l2_client.clone() { + Arc::new(L2EthClientW(sl_l2_client)) + } else { + l1_client.clone() + }; + + let state = Self::initialize_state(&mut storage, sl_client.as_ref()).await?; tracing::info!("initialized state: {state:?}"); drop(storage); let priority_ops_processor = - PriorityOpsEventProcessor::new(state.next_expected_priority_id)?; + PriorityOpsEventProcessor::new(state.next_expected_priority_id, sl_client.clone())?; let decentralized_upgrades_processor = DecentralizedUpgradesEventProcessor::new( state.last_seen_protocol_version, chain_admin_contract, + sl_client.clone(), ); - let event_processors: Vec> = vec![ + let mut event_processors: Vec> = vec![ Box::new(priority_ops_processor), Box::new(decentralized_upgrades_processor), ]; - + if let Some(sl_l2_client) = sl_l2_client { + let batch_root_processor = BatchRootProcessor::new( + state.chain_batch_root_number_lower_bound, + state.batch_merkle_tree, + chain_id, + sl_l2_client, + ); + event_processors.push(Box::new(batch_root_processor)); + } Ok(Self { l1_client, sl_client, @@ -77,7 +101,10 @@ impl EthWatch { } #[tracing::instrument(name = "EthWatch::initialize_state", skip_all)] - async fn initialize_state(storage: &mut Connection<'_, Core>) -> anyhow::Result { + async fn initialize_state( + storage: &mut Connection<'_, Core>, + sl_client: &dyn EthClient, + ) -> anyhow::Result { let next_expected_priority_id: PriorityOpId = storage .transactions_dal() .last_priority_id() @@ -90,9 +117,26 @@ impl EthWatch { .await? .context("expected at least one (genesis) version to be present in DB")?; + let sl_chain_id = sl_client.chain_id().await?; + let batch_hashes = storage + .blocks_dal() + .get_executed_batch_roots_on_sl(sl_chain_id) + .await?; + + let chain_batch_root_number_lower_bound = batch_hashes + .last() + .map(|(n, _)| *n + 1) + .unwrap_or(L1BatchNumber(0)); + let tree_leaves = batch_hashes.into_iter().map(|(batch_number, batch_root)| { + BatchRootProcessor::batch_leaf_preimage(batch_root, batch_number) + }); + let batch_merkle_tree = MiniMerkleTree::new(tree_leaves, None); + Ok(EthWatchState { next_expected_priority_id, last_seen_protocol_version, + chain_batch_root_number_lower_bound, + batch_merkle_tree, }) } @@ -137,37 +181,42 @@ impl EthWatch { EventsSource::SL => self.sl_client.as_ref(), }; let chain_id = client.chain_id().await?; - let finalized_block = client.finalized_block_number().await?; + let to_block = if processor.only_finalized_block() { + client.finalized_block_number().await? + } else { + client.confirmed_block_number().await? + }; let from_block = storage .eth_watcher_dal() .get_or_set_next_block_to_process( processor.event_type(), chain_id, - finalized_block.saturating_sub(PRIORITY_EXPIRATION), + to_block.saturating_sub(PRIORITY_EXPIRATION), ) .await .map_err(DalError::generalize)?; // There are no new blocks so there is nothing to be done - if from_block > finalized_block { + if from_block > to_block { continue; } + let processor_events = client .get_events( Web3BlockNumber::Number(from_block.into()), - Web3BlockNumber::Number(finalized_block.into()), - processor.relevant_topic(), - None, + Web3BlockNumber::Number(to_block.into()), + processor.topic1(), + processor.topic2(), RETRY_LIMIT, ) .await?; let processed_events_count = processor - .process_events(storage, &*self.sl_client, processor_events.clone()) + .process_events(storage, processor_events.clone()) .await?; let next_block_to_process = if processed_events_count == processor_events.len() { - finalized_block + 1 + to_block + 1 } else if processed_events_count == 0 { //nothing was processed from_block diff --git a/core/node/eth_watch/src/tests.rs b/core/node/eth_watch/src/tests.rs deleted file mode 100644 index 12ac8bdbf3f7..000000000000 --- a/core/node/eth_watch/src/tests.rs +++ /dev/null @@ -1,791 +0,0 @@ -use std::{collections::HashMap, convert::TryInto, sync::Arc}; - -use tokio::sync::RwLock; -use zksync_contracts::{ - chain_admin_contract, hyperchain_contract, state_transition_manager_contract, -}; -use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; -use zksync_eth_client::{ContractCallError, EnrichedClientResult}; -use zksync_types::{ - abi, - abi::ProposedUpgrade, - ethabi, - ethabi::Token, - l1::{L1Tx, OpProcessingType, PriorityQueueType}, - protocol_upgrade::{ProtocolUpgradeTx, ProtocolUpgradeTxCommonData}, - protocol_version::ProtocolSemanticVersion, - web3::{contract::Tokenizable, BlockNumber, Log}, - Address, Execute, L1TxCommonData, PriorityOpId, ProtocolUpgrade, ProtocolVersion, - ProtocolVersionId, SLChainId, Transaction, H160, H256, U256, U64, -}; - -use crate::{ - client::{EthClient, RETRY_LIMIT}, - EthWatch, -}; - -#[derive(Debug)] -struct FakeEthClientData { - transactions: HashMap>, - diamond_upgrades: HashMap>, - upgrade_timestamp: HashMap>, - last_finalized_block_number: u64, - chain_id: SLChainId, - processed_priority_transactions_count: u64, -} - -impl FakeEthClientData { - fn new(chain_id: SLChainId) -> Self { - Self { - transactions: Default::default(), - diamond_upgrades: Default::default(), - upgrade_timestamp: Default::default(), - last_finalized_block_number: 0, - chain_id, - processed_priority_transactions_count: 0, - } - } - - fn add_transactions(&mut self, transactions: &[L1Tx]) { - for transaction in transactions { - let eth_block = transaction.eth_block(); - self.transactions - .entry(eth_block.0 as u64) - .or_default() - .push(tx_into_log(transaction.clone())); - self.processed_priority_transactions_count += 1; - } - } - - fn add_upgrade_timestamp(&mut self, upgrades: &[(ProtocolUpgrade, u64)]) { - for (upgrade, eth_block) in upgrades { - self.upgrade_timestamp - .entry(*eth_block) - .or_default() - .push(upgrade_timestamp_log(*eth_block)); - self.diamond_upgrades - .entry(*eth_block) - .or_default() - .push(diamond_upgrade_log(upgrade.clone(), *eth_block)); - } - } - - fn set_last_finalized_block_number(&mut self, number: u64) { - self.last_finalized_block_number = number; - } - - fn set_processed_priority_transactions_count(&mut self, number: u64) { - self.processed_priority_transactions_count = number; - } -} - -#[derive(Debug, Clone)] -struct MockEthClient { - inner: Arc>, -} - -impl MockEthClient { - fn new(chain_id: SLChainId) -> Self { - Self { - inner: Arc::new(RwLock::new(FakeEthClientData::new(chain_id))), - } - } - - async fn add_transactions(&mut self, transactions: &[L1Tx]) { - self.inner.write().await.add_transactions(transactions); - } - - async fn add_upgrade_timestamp(&mut self, upgrades: &[(ProtocolUpgrade, u64)]) { - self.inner.write().await.add_upgrade_timestamp(upgrades); - } - - async fn set_last_finalized_block_number(&mut self, number: u64) { - self.inner - .write() - .await - .set_last_finalized_block_number(number); - } - - async fn set_processed_priority_transactions_count(&mut self, number: u64) { - self.inner - .write() - .await - .set_processed_priority_transactions_count(number) - } - - async fn block_to_number(&self, block: BlockNumber) -> u64 { - match block { - BlockNumber::Earliest => 0, - BlockNumber::Number(number) => number.as_u64(), - BlockNumber::Pending - | BlockNumber::Latest - | BlockNumber::Finalized - | BlockNumber::Safe => unreachable!(), - } - } -} - -#[async_trait::async_trait] -impl EthClient for MockEthClient { - async fn get_events( - &self, - from: BlockNumber, - to: BlockNumber, - topic1: H256, - topic2: Option, - _retries_left: usize, - ) -> EnrichedClientResult> { - let from = self.block_to_number(from).await; - let to = self.block_to_number(to).await; - let mut logs = vec![]; - for number in from..=to { - if let Some(ops) = self.inner.read().await.transactions.get(&number) { - logs.extend_from_slice(ops); - } - if let Some(ops) = self.inner.read().await.diamond_upgrades.get(&number) { - logs.extend_from_slice(ops); - } - if let Some(ops) = self.inner.read().await.upgrade_timestamp.get(&number) { - logs.extend_from_slice(ops); - } - } - Ok(logs - .into_iter() - .filter(|log| { - log.topics.first() == Some(&topic1) - && (topic2.is_none() || log.topics.get(1) == topic2.as_ref()) - }) - .collect()) - } - - async fn scheduler_vk_hash( - &self, - _verifier_address: Address, - ) -> Result { - Ok(H256::zero()) - } - - async fn finalized_block_number(&self) -> EnrichedClientResult { - Ok(self.inner.read().await.last_finalized_block_number) - } - - async fn diamond_cut_by_version( - &self, - packed_version: H256, - ) -> EnrichedClientResult>> { - let from_block = *self - .inner - .read() - .await - .diamond_upgrades - .keys() - .min() - .unwrap_or(&0); - let to_block = *self - .inner - .read() - .await - .diamond_upgrades - .keys() - .max() - .unwrap_or(&0); - - let logs = self - .get_events( - U64::from(from_block).into(), - U64::from(to_block).into(), - state_transition_manager_contract() - .event("NewUpgradeCutData") - .unwrap() - .signature(), - Some(packed_version), - RETRY_LIMIT, - ) - .await?; - - Ok(logs.into_iter().next().map(|log| log.data.0)) - } - - async fn get_total_priority_txs(&self) -> Result { - Ok(self - .inner - .read() - .await - .processed_priority_transactions_count) - } - - async fn chain_id(&self) -> EnrichedClientResult { - Ok(self.inner.read().await.chain_id) - } -} - -fn build_l1_tx(serial_id: u64, eth_block: u64) -> L1Tx { - let tx = L1Tx { - execute: Execute { - contract_address: Some(Address::repeat_byte(0x11)), - calldata: vec![1, 2, 3], - factory_deps: vec![], - value: U256::zero(), - }, - common_data: L1TxCommonData { - serial_id: PriorityOpId(serial_id), - sender: [1u8; 20].into(), - eth_block, - gas_limit: Default::default(), - max_fee_per_gas: Default::default(), - gas_per_pubdata_limit: 1u32.into(), - full_fee: Default::default(), - layer_2_tip_fee: U256::from(10u8), - refund_recipient: Address::zero(), - to_mint: Default::default(), - priority_queue_type: PriorityQueueType::Deque, - op_processing_type: OpProcessingType::Common, - canonical_tx_hash: H256::default(), - }, - received_timestamp_ms: 0, - }; - // Convert to abi::Transaction and back, so that canonical_tx_hash is computed. - let tx = Transaction::from_abi( - abi::Transaction::try_from(Transaction::from(tx)).unwrap(), - false, - ) - .unwrap(); - tx.try_into().unwrap() -} - -fn build_upgrade_tx(id: ProtocolVersionId, eth_block: u64) -> ProtocolUpgradeTx { - let tx = ProtocolUpgradeTx { - execute: Execute { - contract_address: Some(Address::repeat_byte(0x11)), - calldata: vec![1, 2, 3], - factory_deps: vec![], - value: U256::zero(), - }, - common_data: ProtocolUpgradeTxCommonData { - upgrade_id: id, - sender: [1u8; 20].into(), - eth_block, - gas_limit: Default::default(), - max_fee_per_gas: Default::default(), - gas_per_pubdata_limit: 1u32.into(), - refund_recipient: Address::zero(), - to_mint: Default::default(), - canonical_tx_hash: H256::zero(), - }, - received_timestamp_ms: 0, - }; - // Convert to abi::Transaction and back, so that canonical_tx_hash is computed. - Transaction::from_abi( - abi::Transaction::try_from(Transaction::from(tx)).unwrap(), - false, - ) - .unwrap() - .try_into() - .unwrap() -} - -async fn create_test_watcher( - connection_pool: ConnectionPool, - is_gateway: bool, -) -> (EthWatch, MockEthClient, MockEthClient) { - let l1_client = MockEthClient::new(SLChainId(42)); - let sl_client = if is_gateway { - MockEthClient::new(SLChainId(123)) - } else { - l1_client.clone() - }; - let watcher = EthWatch::new( - &chain_admin_contract(), - Box::new(l1_client.clone()), - Box::new(sl_client.clone()), - connection_pool, - std::time::Duration::from_nanos(1), - ) - .await - .unwrap(); - - (watcher, l1_client, sl_client) -} - -async fn create_l1_test_watcher( - connection_pool: ConnectionPool, -) -> (EthWatch, MockEthClient) { - let (watcher, l1_client, _) = create_test_watcher(connection_pool, false).await; - (watcher, l1_client) -} - -async fn create_gateway_test_watcher( - connection_pool: ConnectionPool, -) -> (EthWatch, MockEthClient, MockEthClient) { - create_test_watcher(connection_pool, true).await -} - -#[test_log::test(tokio::test)] -async fn test_normal_operation_l1_txs() { - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; - - let mut storage = connection_pool.connection().await.unwrap(); - client - .add_transactions(&[build_l1_tx(0, 10), build_l1_tx(1, 14), build_l1_tx(2, 18)]) - .await; - client.set_last_finalized_block_number(15).await; - // second tx will not be processed, as it's block is not finalized yet. - watcher.loop_iteration(&mut storage).await.unwrap(); - let db_txs = get_all_db_txs(&mut storage).await; - let mut db_txs: Vec = db_txs - .into_iter() - .map(|tx| tx.try_into().unwrap()) - .collect(); - db_txs.sort_by_key(|tx| tx.common_data.serial_id); - assert_eq!(db_txs.len(), 2); - let db_tx = db_txs[0].clone(); - assert_eq!(db_tx.common_data.serial_id.0, 0); - let db_tx = db_txs[1].clone(); - assert_eq!(db_tx.common_data.serial_id.0, 1); - - client.set_last_finalized_block_number(20).await; - // now the second tx will be processed - watcher.loop_iteration(&mut storage).await.unwrap(); - let db_txs = get_all_db_txs(&mut storage).await; - let mut db_txs: Vec = db_txs - .into_iter() - .map(|tx| tx.try_into().unwrap()) - .collect(); - db_txs.sort_by_key(|tx| tx.common_data.serial_id); - assert_eq!(db_txs.len(), 3); - let db_tx = db_txs[2].clone(); - assert_eq!(db_tx.common_data.serial_id.0, 2); -} - -#[test_log::test(tokio::test)] -async fn test_gap_in_upgrade_timestamp() { - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; - - let mut storage = connection_pool.connection().await.unwrap(); - client - .add_upgrade_timestamp(&[( - ProtocolUpgrade { - version: ProtocolSemanticVersion { - minor: ProtocolVersionId::next(), - patch: 0.into(), - }, - tx: None, - ..Default::default() - }, - 10, - )]) - .await; - client.set_last_finalized_block_number(15).await; - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_versions = storage.protocol_versions_dal().all_versions().await; - // there should be genesis version and just added version - assert_eq!(db_versions.len(), 2); - - let previous_version = (ProtocolVersionId::latest() as u16 - 1).try_into().unwrap(); - let next_version = ProtocolVersionId::next(); - assert_eq!(db_versions[0].minor, previous_version); - assert_eq!(db_versions[1].minor, next_version); -} - -#[test_log::test(tokio::test)] -async fn test_normal_operation_upgrade_timestamp() { - zksync_concurrency::testonly::abort_on_panic(); - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - - let mut client = MockEthClient::new(SLChainId(42)); - let mut watcher = EthWatch::new( - &chain_admin_contract(), - Box::new(client.clone()), - Box::new(client.clone()), - connection_pool.clone(), - std::time::Duration::from_nanos(1), - ) - .await - .unwrap(); - - let mut storage = connection_pool.connection().await.unwrap(); - client - .add_upgrade_timestamp(&[ - ( - ProtocolUpgrade { - tx: None, - ..Default::default() - }, - 10, - ), - ( - ProtocolUpgrade { - version: ProtocolSemanticVersion { - minor: ProtocolVersionId::next(), - patch: 0.into(), - }, - tx: Some(build_upgrade_tx(ProtocolVersionId::next(), 18)), - ..Default::default() - }, - 18, - ), - ( - ProtocolUpgrade { - version: ProtocolSemanticVersion { - minor: ProtocolVersionId::next(), - patch: 1.into(), - }, - tx: None, - ..Default::default() - }, - 19, - ), - ]) - .await; - client.set_last_finalized_block_number(15).await; - // The second upgrade will not be processed, as it has less than 5 confirmations. - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_versions = storage.protocol_versions_dal().all_versions().await; - // There should be genesis version and just added version. - assert_eq!(db_versions.len(), 2); - assert_eq!(db_versions[1].minor, ProtocolVersionId::latest()); - - client.set_last_finalized_block_number(20).await; - // Now the second and the third upgrades will be processed. - watcher.loop_iteration(&mut storage).await.unwrap(); - let db_versions = storage.protocol_versions_dal().all_versions().await; - let mut expected_version = ProtocolSemanticVersion { - minor: ProtocolVersionId::next(), - patch: 0.into(), - }; - assert_eq!(db_versions.len(), 4); - assert_eq!(db_versions[2], expected_version); - expected_version.patch += 1; - assert_eq!(db_versions[3], expected_version); - - // Check that tx was saved with the second upgrade. - let tx = storage - .protocol_versions_dal() - .get_protocol_upgrade_tx(ProtocolVersionId::next()) - .await - .unwrap() - .expect("no protocol upgrade transaction"); - assert_eq!(tx.common_data.upgrade_id, ProtocolVersionId::next()); -} - -#[test_log::test(tokio::test)] -#[should_panic] -async fn test_gap_in_single_batch() { - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; - - let mut storage = connection_pool.connection().await.unwrap(); - client - .add_transactions(&[ - build_l1_tx(0, 10), - build_l1_tx(1, 14), - build_l1_tx(2, 14), - build_l1_tx(3, 14), - build_l1_tx(5, 14), - ]) - .await; - client.set_last_finalized_block_number(15).await; - watcher.loop_iteration(&mut storage).await.unwrap(); -} - -#[test_log::test(tokio::test)] -#[should_panic] -async fn test_gap_between_batches() { - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; - - let mut storage = connection_pool.connection().await.unwrap(); - client - .add_transactions(&[ - // this goes to the first batch - build_l1_tx(0, 10), - build_l1_tx(1, 14), - build_l1_tx(2, 14), - // this goes to the second batch - build_l1_tx(4, 20), - build_l1_tx(5, 22), - ]) - .await; - client.set_last_finalized_block_number(15).await; - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_txs = get_all_db_txs(&mut storage).await; - assert_eq!(db_txs.len(), 3); - client.set_last_finalized_block_number(25).await; - watcher.loop_iteration(&mut storage).await.unwrap(); -} - -#[test_log::test(tokio::test)] -async fn test_overlapping_batches() { - zksync_concurrency::testonly::abort_on_panic(); - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; - - let mut storage = connection_pool.connection().await.unwrap(); - client - .add_transactions(&[ - // this goes to the first batch - build_l1_tx(0, 10), - build_l1_tx(1, 14), - build_l1_tx(2, 14), - // this goes to the second batch - build_l1_tx(1, 20), - build_l1_tx(2, 22), - build_l1_tx(3, 23), - build_l1_tx(4, 23), - ]) - .await; - client.set_last_finalized_block_number(15).await; - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_txs = get_all_db_txs(&mut storage).await; - assert_eq!(db_txs.len(), 3); - - client.set_last_finalized_block_number(25).await; - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_txs = get_all_db_txs(&mut storage).await; - assert_eq!(db_txs.len(), 5); - let mut db_txs: Vec = db_txs - .into_iter() - .map(|tx| tx.try_into().unwrap()) - .collect(); - db_txs.sort_by_key(|tx| tx.common_data.serial_id); - let tx = db_txs[2].clone(); - assert_eq!(tx.common_data.serial_id.0, 2); - let tx = db_txs[4].clone(); - assert_eq!(tx.common_data.serial_id.0, 4); -} - -#[test_log::test(tokio::test)] -async fn test_transactions_get_gradually_processed_by_gateway() { - zksync_concurrency::testonly::abort_on_panic(); - let connection_pool = ConnectionPool::::test_pool().await; - setup_db(&connection_pool).await; - let (mut watcher, mut l1_client, mut gateway_client) = - create_gateway_test_watcher(connection_pool.clone()).await; - - let mut storage = connection_pool.connection().await.unwrap(); - l1_client - .add_transactions(&[ - build_l1_tx(0, 10), - build_l1_tx(1, 14), - build_l1_tx(2, 14), - build_l1_tx(3, 20), - build_l1_tx(4, 22), - ]) - .await; - l1_client.set_last_finalized_block_number(15).await; - gateway_client - .set_processed_priority_transactions_count(2) - .await; - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_txs = get_all_db_txs(&mut storage).await; - assert_eq!(db_txs.len(), 2); - - l1_client.set_last_finalized_block_number(25).await; - gateway_client - .set_processed_priority_transactions_count(4) - .await; - watcher.loop_iteration(&mut storage).await.unwrap(); - - let db_txs = get_all_db_txs(&mut storage).await; - assert_eq!(db_txs.len(), 4); - let mut db_txs: Vec = db_txs - .into_iter() - .map(|tx| tx.try_into().unwrap()) - .collect(); - db_txs.sort_by_key(|tx| tx.common_data.serial_id); - let tx = db_txs[2].clone(); - assert_eq!(tx.common_data.serial_id.0, 2); - let tx = db_txs[3].clone(); - assert_eq!(tx.common_data.serial_id.0, 3); -} - -async fn get_all_db_txs(storage: &mut Connection<'_, Core>) -> Vec { - storage.transactions_dal().reset_mempool().await.unwrap(); - storage - .transactions_dal() - .sync_mempool(&[], &[], 0, 0, 1000) - .await - .unwrap() - .into_iter() - .map(|x| x.0) - .collect() -} - -fn tx_into_log(tx: L1Tx) -> Log { - let tx = abi::Transaction::try_from(Transaction::from(tx)).unwrap(); - let abi::Transaction::L1 { - tx, - factory_deps, - eth_block, - .. - } = tx - else { - unreachable!() - }; - - let data = ethabi::encode( - &abi::NewPriorityRequest { - tx_id: tx.nonce, - tx_hash: tx.hash().into(), - expiration_timestamp: u64::MAX, - transaction: tx, - factory_deps, - } - .encode(), - ); - - Log { - address: Address::repeat_byte(0x1), - topics: vec![hyperchain_contract() - .event("NewPriorityRequest") - .expect("NewPriorityRequest event is missing in abi") - .signature()], - data: data.into(), - block_hash: Some(H256::repeat_byte(0x11)), - block_number: Some(eth_block.into()), - transaction_hash: Some(H256::default()), - transaction_index: Some(0u64.into()), - log_index: Some(0u64.into()), - transaction_log_index: Some(0u64.into()), - log_type: None, - removed: None, - block_timestamp: None, - } -} - -fn init_calldata(protocol_upgrade: ProtocolUpgrade) -> Vec { - let upgrade_token = upgrade_into_diamond_cut(protocol_upgrade); - - let encoded_params = ethabi::encode(&[upgrade_token]); - - let execute_upgrade_selector = hyperchain_contract() - .function("executeUpgrade") - .unwrap() - .short_signature(); - - // Concatenate the function selector with the encoded parameters - let mut calldata = Vec::with_capacity(4 + encoded_params.len()); - calldata.extend_from_slice(&execute_upgrade_selector); - calldata.extend_from_slice(&encoded_params); - - calldata -} - -fn diamond_upgrade_log(upgrade: ProtocolUpgrade, eth_block: u64) -> Log { - // struct DiamondCutData { - // FacetCut[] facetCuts; - // address initAddress; - // bytes initCalldata; - // } - let final_data = ethabi::encode(&[Token::Tuple(vec![ - Token::Array(vec![]), - Token::Address(H160::zero()), - Token::Bytes(init_calldata(upgrade.clone())), - ])]); - tracing::info!("{:?}", Token::Bytes(init_calldata(upgrade))); - - Log { - address: Address::repeat_byte(0x1), - topics: vec![ - state_transition_manager_contract() - .event("NewUpgradeCutData") - .unwrap() - .signature(), - H256::from_low_u64_be(eth_block), - ], - data: final_data.into(), - block_hash: Some(H256::repeat_byte(0x11)), - block_number: Some(eth_block.into()), - transaction_hash: Some(H256::random()), - transaction_index: Some(0u64.into()), - log_index: Some(0u64.into()), - transaction_log_index: Some(0u64.into()), - log_type: None, - removed: None, - block_timestamp: None, - } -} -fn upgrade_timestamp_log(eth_block: u64) -> Log { - let final_data = ethabi::encode(&[U256::from(12345).into_token()]); - - Log { - address: Address::repeat_byte(0x1), - topics: vec![ - chain_admin_contract() - .event("UpdateUpgradeTimestamp") - .expect("UpdateUpgradeTimestamp event is missing in ABI") - .signature(), - H256::from_low_u64_be(eth_block), - ], - data: final_data.into(), - block_hash: Some(H256::repeat_byte(0x11)), - block_number: Some(eth_block.into()), - transaction_hash: Some(H256::random()), - transaction_index: Some(0u64.into()), - log_index: Some(0u64.into()), - transaction_log_index: Some(0u64.into()), - log_type: None, - removed: None, - block_timestamp: None, - } -} - -fn upgrade_into_diamond_cut(upgrade: ProtocolUpgrade) -> Token { - let abi::Transaction::L1 { - tx, factory_deps, .. - } = upgrade - .tx - .map(|tx| Transaction::from(tx).try_into().unwrap()) - .unwrap_or(abi::Transaction::L1 { - tx: Default::default(), - factory_deps: vec![], - eth_block: 0, - }) - else { - unreachable!() - }; - ProposedUpgrade { - l2_protocol_upgrade_tx: tx, - factory_deps, - bootloader_hash: upgrade.bootloader_code_hash.unwrap_or_default().into(), - default_account_hash: upgrade.default_account_code_hash.unwrap_or_default().into(), - verifier: upgrade.verifier_address.unwrap_or_default(), - verifier_params: upgrade.verifier_params.unwrap_or_default().into(), - l1_contracts_upgrade_calldata: vec![], - post_upgrade_calldata: vec![], - upgrade_timestamp: upgrade.timestamp.into(), - new_protocol_version: upgrade.version.pack(), - } - .encode() -} - -async fn setup_db(connection_pool: &ConnectionPool) { - connection_pool - .connection() - .await - .unwrap() - .protocol_versions_dal() - .save_protocol_version_with_tx(&ProtocolVersion { - version: ProtocolSemanticVersion { - minor: (ProtocolVersionId::latest() as u16 - 1).try_into().unwrap(), - patch: 0.into(), - }, - ..Default::default() - }) - .await - .unwrap(); -} diff --git a/core/node/eth_watch/src/tests/client.rs b/core/node/eth_watch/src/tests/client.rs new file mode 100644 index 000000000000..04825f22d815 --- /dev/null +++ b/core/node/eth_watch/src/tests/client.rs @@ -0,0 +1,487 @@ +use std::{collections::HashMap, convert::TryInto, sync::Arc}; + +use tokio::sync::RwLock; +use zksync_contracts::{ + chain_admin_contract, hyperchain_contract, state_transition_manager_contract, +}; +use zksync_eth_client::{ContractCallError, EnrichedClientResult}; +use zksync_types::{ + abi, + abi::ProposedUpgrade, + api::{ChainAggProof, Log}, + ethabi, + ethabi::Token, + l1::L1Tx, + u256_to_h256, + web3::{contract::Tokenizable, BlockNumber}, + Address, L1BatchNumber, L2ChainId, ProtocolUpgrade, SLChainId, Transaction, H256, U256, U64, +}; + +use crate::client::{EthClient, L2EthClient, RETRY_LIMIT}; + +#[derive(Debug)] +pub struct FakeEthClientData { + transactions: HashMap>, + diamond_upgrades: HashMap>, + upgrade_timestamp: HashMap>, + last_finalized_block_number: u64, + chain_id: SLChainId, + processed_priority_transactions_count: u64, + chain_log_proofs: HashMap, + batch_roots: HashMap>, + chain_roots: HashMap, +} + +impl FakeEthClientData { + fn new(chain_id: SLChainId) -> Self { + Self { + transactions: Default::default(), + diamond_upgrades: Default::default(), + upgrade_timestamp: Default::default(), + last_finalized_block_number: 0, + chain_id, + processed_priority_transactions_count: 0, + chain_log_proofs: Default::default(), + batch_roots: Default::default(), + chain_roots: Default::default(), + } + } + + fn add_transactions(&mut self, transactions: &[L1Tx]) { + for transaction in transactions { + let eth_block = transaction.eth_block(); + self.transactions + .entry(eth_block.0 as u64) + .or_default() + .push(tx_into_log(transaction.clone())); + self.processed_priority_transactions_count += 1; + } + } + + fn add_upgrade_timestamp(&mut self, upgrades: &[(ProtocolUpgrade, u64)]) { + for (upgrade, eth_block) in upgrades { + self.upgrade_timestamp + .entry(*eth_block) + .or_default() + .push(upgrade_timestamp_log(*eth_block)); + self.diamond_upgrades + .entry(*eth_block) + .or_default() + .push(diamond_upgrade_log(upgrade.clone(), *eth_block)); + } + } + + fn set_last_finalized_block_number(&mut self, number: u64) { + self.last_finalized_block_number = number; + } + + fn set_processed_priority_transactions_count(&mut self, number: u64) { + self.processed_priority_transactions_count = number; + } + + fn add_batch_roots(&mut self, batch_roots: &[(u64, u64, H256)]) { + for (sl_block, l2_batch_number, batch_root) in batch_roots { + self.batch_roots + .entry(*sl_block) + .or_default() + .push(batch_root_to_log(*sl_block, *l2_batch_number, *batch_root)); + } + } + + fn add_chain_roots(&mut self, chain_roots: &[(u64, H256)]) { + for (batch, root) in chain_roots { + self.chain_roots.insert(*batch, *root); + } + } + + fn add_chain_log_proofs(&mut self, chain_log_proofs: Vec<(L1BatchNumber, ChainAggProof)>) { + for (batch, proof) in chain_log_proofs { + self.chain_log_proofs.insert(batch, proof); + } + } +} + +#[derive(Debug, Clone)] +pub struct MockEthClient { + inner: Arc>, +} + +impl MockEthClient { + pub fn new(chain_id: SLChainId) -> Self { + Self { + inner: Arc::new(RwLock::new(FakeEthClientData::new(chain_id))), + } + } + + pub async fn add_transactions(&mut self, transactions: &[L1Tx]) { + self.inner.write().await.add_transactions(transactions); + } + + pub async fn add_upgrade_timestamp(&mut self, upgrades: &[(ProtocolUpgrade, u64)]) { + self.inner.write().await.add_upgrade_timestamp(upgrades); + } + + pub async fn set_last_finalized_block_number(&mut self, number: u64) { + self.inner + .write() + .await + .set_last_finalized_block_number(number); + } + + pub async fn set_processed_priority_transactions_count(&mut self, number: u64) { + self.inner + .write() + .await + .set_processed_priority_transactions_count(number) + } + + pub async fn block_to_number(&self, block: BlockNumber) -> u64 { + match block { + BlockNumber::Earliest => 0, + BlockNumber::Number(number) => number.as_u64(), + BlockNumber::Pending + | BlockNumber::Latest + | BlockNumber::Finalized + | BlockNumber::Safe => unreachable!(), + } + } + + pub async fn add_batch_roots(&mut self, batch_roots: &[(u64, u64, H256)]) { + self.inner.write().await.add_batch_roots(batch_roots); + } + + pub async fn add_chain_roots(&mut self, chain_roots: &[(u64, H256)]) { + self.inner.write().await.add_chain_roots(chain_roots); + } + + pub async fn add_chain_log_proofs( + &mut self, + chain_log_proofs: Vec<(L1BatchNumber, ChainAggProof)>, + ) { + self.inner + .write() + .await + .add_chain_log_proofs(chain_log_proofs); + } +} + +#[async_trait::async_trait] +impl EthClient for MockEthClient { + async fn get_events( + &self, + from: BlockNumber, + to: BlockNumber, + topic1: H256, + topic2: Option, + _retries_left: usize, + ) -> EnrichedClientResult> { + let from = self.block_to_number(from).await; + let to = self.block_to_number(to).await; + let mut logs = vec![]; + for number in from..=to { + if let Some(ops) = self.inner.read().await.transactions.get(&number) { + logs.extend_from_slice(ops); + } + if let Some(ops) = self.inner.read().await.diamond_upgrades.get(&number) { + logs.extend_from_slice(ops); + } + if let Some(ops) = self.inner.read().await.upgrade_timestamp.get(&number) { + logs.extend_from_slice(ops); + } + if let Some(ops) = self.inner.read().await.batch_roots.get(&number) { + logs.extend_from_slice(ops); + } + } + Ok(logs + .into_iter() + .filter(|log| { + log.topics.first() == Some(&topic1) + && (topic2.is_none() || log.topics.get(1) == topic2.as_ref()) + }) + .collect()) + } + + async fn scheduler_vk_hash( + &self, + _verifier_address: Address, + ) -> Result { + Ok(H256::zero()) + } + + async fn finalized_block_number(&self) -> EnrichedClientResult { + Ok(self.inner.read().await.last_finalized_block_number) + } + + async fn confirmed_block_number(&self) -> EnrichedClientResult { + Ok(self.inner.read().await.last_finalized_block_number) + } + + async fn diamond_cut_by_version( + &self, + packed_version: H256, + ) -> EnrichedClientResult>> { + let from_block = *self + .inner + .read() + .await + .diamond_upgrades + .keys() + .min() + .unwrap_or(&0); + let to_block = *self + .inner + .read() + .await + .diamond_upgrades + .keys() + .max() + .unwrap_or(&0); + + let logs = self + .get_events( + U64::from(from_block).into(), + U64::from(to_block).into(), + state_transition_manager_contract() + .event("NewUpgradeCutData") + .unwrap() + .signature(), + Some(packed_version), + RETRY_LIMIT, + ) + .await?; + + Ok(logs.into_iter().next().map(|log| log.data.0)) + } + + async fn get_total_priority_txs(&self) -> Result { + Ok(self + .inner + .read() + .await + .processed_priority_transactions_count) + } + + async fn chain_id(&self) -> EnrichedClientResult { + Ok(self.inner.read().await.chain_id) + } + + async fn get_chain_root( + &self, + _block_number: U64, + _l2_chain_id: L2ChainId, + ) -> Result { + unimplemented!() + } +} + +#[async_trait::async_trait] +impl L2EthClient for MockEthClient { + async fn get_chain_log_proof( + &self, + l1_batch_number: L1BatchNumber, + _chain_id: L2ChainId, + ) -> EnrichedClientResult> { + Ok(self + .inner + .read() + .await + .chain_log_proofs + .get(&l1_batch_number) + .cloned()) + } + + async fn get_chain_root_l2( + &self, + l1_batch_number: L1BatchNumber, + _l2_chain_id: L2ChainId, + ) -> Result, ContractCallError> { + Ok(self + .inner + .read() + .await + .chain_roots + .get(&l1_batch_number.0.into()) + .cloned()) + } +} + +fn tx_into_log(tx: L1Tx) -> Log { + let tx = abi::Transaction::try_from(Transaction::from(tx)).unwrap(); + let abi::Transaction::L1 { + tx, + factory_deps, + eth_block, + .. + } = tx + else { + unreachable!() + }; + + let data = ethabi::encode( + &abi::NewPriorityRequest { + tx_id: tx.nonce, + tx_hash: tx.hash().into(), + expiration_timestamp: u64::MAX, + transaction: tx, + factory_deps, + } + .encode(), + ); + + Log { + address: Address::repeat_byte(0x1), + topics: vec![hyperchain_contract() + .event("NewPriorityRequest") + .expect("NewPriorityRequest event is missing in abi") + .signature()], + data: data.into(), + block_hash: Some(H256::repeat_byte(0x11)), + block_number: Some(eth_block.into()), + l1_batch_number: None, + transaction_hash: Some(H256::default()), + transaction_index: Some(0u64.into()), + log_index: Some(0u64.into()), + transaction_log_index: Some(0u64.into()), + log_type: None, + removed: None, + block_timestamp: None, + } +} + +fn init_calldata(protocol_upgrade: ProtocolUpgrade) -> Vec { + let upgrade_token = upgrade_into_diamond_cut(protocol_upgrade); + + let encoded_params = ethabi::encode(&[upgrade_token]); + + let execute_upgrade_selector = hyperchain_contract() + .function("executeUpgrade") + .unwrap() + .short_signature(); + + // Concatenate the function selector with the encoded parameters + let mut calldata = Vec::with_capacity(4 + encoded_params.len()); + calldata.extend_from_slice(&execute_upgrade_selector); + calldata.extend_from_slice(&encoded_params); + + calldata +} + +fn diamond_upgrade_log(upgrade: ProtocolUpgrade, eth_block: u64) -> Log { + // struct DiamondCutData { + // FacetCut[] facetCuts; + // address initAddress; + // bytes initCalldata; + // } + let final_data = ethabi::encode(&[Token::Tuple(vec![ + Token::Array(vec![]), + Token::Address(Address::zero()), + Token::Bytes(init_calldata(upgrade.clone())), + ])]); + tracing::info!("{:?}", Token::Bytes(init_calldata(upgrade))); + + Log { + address: Address::repeat_byte(0x1), + topics: vec![ + state_transition_manager_contract() + .event("NewUpgradeCutData") + .unwrap() + .signature(), + H256::from_low_u64_be(eth_block), + ], + data: final_data.into(), + block_hash: Some(H256::repeat_byte(0x11)), + block_number: Some(eth_block.into()), + l1_batch_number: None, + transaction_hash: Some(H256::random()), + transaction_index: Some(0u64.into()), + log_index: Some(0u64.into()), + transaction_log_index: Some(0u64.into()), + log_type: None, + removed: None, + block_timestamp: None, + } +} +fn upgrade_timestamp_log(eth_block: u64) -> Log { + let final_data = ethabi::encode(&[U256::from(12345).into_token()]); + + Log { + address: Address::repeat_byte(0x1), + topics: vec![ + chain_admin_contract() + .event("UpdateUpgradeTimestamp") + .expect("UpdateUpgradeTimestamp event is missing in ABI") + .signature(), + H256::from_low_u64_be(eth_block), + ], + data: final_data.into(), + block_hash: Some(H256::repeat_byte(0x11)), + block_number: Some(eth_block.into()), + l1_batch_number: None, + transaction_hash: Some(H256::random()), + transaction_index: Some(0u64.into()), + log_index: Some(0u64.into()), + transaction_log_index: Some(0u64.into()), + log_type: None, + removed: None, + block_timestamp: None, + } +} + +fn upgrade_into_diamond_cut(upgrade: ProtocolUpgrade) -> Token { + let abi::Transaction::L1 { + tx, factory_deps, .. + } = upgrade + .tx + .map(|tx| Transaction::from(tx).try_into().unwrap()) + .unwrap_or(abi::Transaction::L1 { + tx: Default::default(), + factory_deps: vec![], + eth_block: 0, + }) + else { + unreachable!() + }; + ProposedUpgrade { + l2_protocol_upgrade_tx: tx, + factory_deps, + bootloader_hash: upgrade.bootloader_code_hash.unwrap_or_default().into(), + default_account_hash: upgrade.default_account_code_hash.unwrap_or_default().into(), + verifier: upgrade.verifier_address.unwrap_or_default(), + verifier_params: upgrade.verifier_params.unwrap_or_default().into(), + l1_contracts_upgrade_calldata: vec![], + post_upgrade_calldata: vec![], + upgrade_timestamp: upgrade.timestamp.into(), + new_protocol_version: upgrade.version.pack(), + } + .encode() +} + +fn batch_root_to_log(sl_block_number: u64, l2_batch_number: u64, batch_root: H256) -> Log { + let topic1 = ethabi::long_signature( + "AppendedChainBatchRoot", + &[ + ethabi::ParamType::Uint(256), + ethabi::ParamType::Uint(256), + ethabi::ParamType::FixedBytes(32), + ], + ); + let topic2 = u256_to_h256(L2ChainId::default().as_u64().into()); + let topic3 = u256_to_h256(l2_batch_number.into()); + let data = ethabi::encode(&[batch_root.into_token()]); + + Log { + address: Address::repeat_byte(0x1), + topics: vec![topic1, topic2, topic3], + data: data.into(), + block_hash: Some(H256::repeat_byte(0x11)), + block_number: Some(sl_block_number.into()), + l1_batch_number: Some(sl_block_number.into()), + transaction_hash: Some(H256::random()), + transaction_index: Some(0u64.into()), + log_index: Some(0u64.into()), + transaction_log_index: Some(0u64.into()), + log_type: None, + removed: None, + block_timestamp: None, + } +} diff --git a/core/node/eth_watch/src/tests/mod.rs b/core/node/eth_watch/src/tests/mod.rs new file mode 100644 index 000000000000..df91074beb18 --- /dev/null +++ b/core/node/eth_watch/src/tests/mod.rs @@ -0,0 +1,827 @@ +use std::convert::TryInto; + +use zksync_contracts::chain_admin_contract; +use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; +use zksync_types::{ + abi, + aggregated_operations::AggregatedActionType, + api::ChainAggProof, + block::L1BatchHeader, + commitment::L1BatchCommitmentArtifacts, + l1::{L1Tx, OpProcessingType, PriorityQueueType}, + l2_to_l1_log::BatchAndChainMerklePath, + protocol_upgrade::{ProtocolUpgradeTx, ProtocolUpgradeTxCommonData}, + protocol_version::ProtocolSemanticVersion, + Address, Execute, L1BatchNumber, L1TxCommonData, L2ChainId, PriorityOpId, ProtocolUpgrade, + ProtocolVersion, ProtocolVersionId, SLChainId, Transaction, H256, U256, +}; + +use crate::{tests::client::MockEthClient, EthWatch, L2EthClient}; + +mod client; + +const SL_CHAIN_ID: SLChainId = SLChainId(505); + +fn build_l1_tx(serial_id: u64, eth_block: u64) -> L1Tx { + let tx = L1Tx { + execute: Execute { + contract_address: Some(Address::repeat_byte(0x11)), + calldata: vec![1, 2, 3], + factory_deps: vec![], + value: U256::zero(), + }, + common_data: L1TxCommonData { + serial_id: PriorityOpId(serial_id), + sender: [1u8; 20].into(), + eth_block, + gas_limit: Default::default(), + max_fee_per_gas: Default::default(), + gas_per_pubdata_limit: 1u32.into(), + full_fee: Default::default(), + layer_2_tip_fee: U256::from(10u8), + refund_recipient: Address::zero(), + to_mint: Default::default(), + priority_queue_type: PriorityQueueType::Deque, + op_processing_type: OpProcessingType::Common, + canonical_tx_hash: H256::default(), + }, + received_timestamp_ms: 0, + }; + // Convert to abi::Transaction and back, so that canonical_tx_hash is computed. + let tx = Transaction::from_abi( + abi::Transaction::try_from(Transaction::from(tx)).unwrap(), + false, + ) + .unwrap(); + tx.try_into().unwrap() +} + +fn build_upgrade_tx(id: ProtocolVersionId, eth_block: u64) -> ProtocolUpgradeTx { + let tx = ProtocolUpgradeTx { + execute: Execute { + contract_address: Some(Address::repeat_byte(0x11)), + calldata: vec![1, 2, 3], + factory_deps: vec![], + value: U256::zero(), + }, + common_data: ProtocolUpgradeTxCommonData { + upgrade_id: id, + sender: [1u8; 20].into(), + eth_block, + gas_limit: Default::default(), + max_fee_per_gas: Default::default(), + gas_per_pubdata_limit: 1u32.into(), + refund_recipient: Address::zero(), + to_mint: Default::default(), + canonical_tx_hash: H256::zero(), + }, + received_timestamp_ms: 0, + }; + // Convert to abi::Transaction and back, so that canonical_tx_hash is computed. + Transaction::from_abi( + abi::Transaction::try_from(Transaction::from(tx)).unwrap(), + false, + ) + .unwrap() + .try_into() + .unwrap() +} + +async fn create_test_watcher( + connection_pool: ConnectionPool, + is_gateway: bool, +) -> (EthWatch, MockEthClient, MockEthClient) { + let l1_client = MockEthClient::new(SLChainId(42)); + let sl_client = MockEthClient::new(SL_CHAIN_ID); + let sl_l2_client: Option> = if is_gateway { + Some(Box::new(sl_client.clone())) + } else { + None + }; + let watcher = EthWatch::new( + &chain_admin_contract(), + Box::new(l1_client.clone()), + sl_l2_client, + connection_pool, + std::time::Duration::from_nanos(1), + L2ChainId::default(), + ) + .await + .unwrap(); + + (watcher, l1_client, sl_client) +} + +async fn create_l1_test_watcher( + connection_pool: ConnectionPool, +) -> (EthWatch, MockEthClient) { + let (watcher, l1_client, _) = create_test_watcher(connection_pool, false).await; + (watcher, l1_client) +} + +async fn create_gateway_test_watcher( + connection_pool: ConnectionPool, +) -> (EthWatch, MockEthClient, MockEthClient) { + create_test_watcher(connection_pool, true).await +} + +#[test_log::test(tokio::test)] +async fn test_normal_operation_l1_txs() { + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; + + let mut storage = connection_pool.connection().await.unwrap(); + client + .add_transactions(&[build_l1_tx(0, 10), build_l1_tx(1, 14), build_l1_tx(2, 18)]) + .await; + client.set_last_finalized_block_number(15).await; + // second tx will not be processed, as it's block is not finalized yet. + watcher.loop_iteration(&mut storage).await.unwrap(); + let db_txs = get_all_db_txs(&mut storage).await; + let mut db_txs: Vec = db_txs + .into_iter() + .map(|tx| tx.try_into().unwrap()) + .collect(); + db_txs.sort_by_key(|tx| tx.common_data.serial_id); + assert_eq!(db_txs.len(), 2); + let db_tx = db_txs[0].clone(); + assert_eq!(db_tx.common_data.serial_id.0, 0); + let db_tx = db_txs[1].clone(); + assert_eq!(db_tx.common_data.serial_id.0, 1); + + client.set_last_finalized_block_number(20).await; + // now the second tx will be processed + watcher.loop_iteration(&mut storage).await.unwrap(); + let db_txs = get_all_db_txs(&mut storage).await; + let mut db_txs: Vec = db_txs + .into_iter() + .map(|tx| tx.try_into().unwrap()) + .collect(); + db_txs.sort_by_key(|tx| tx.common_data.serial_id); + assert_eq!(db_txs.len(), 3); + let db_tx = db_txs[2].clone(); + assert_eq!(db_tx.common_data.serial_id.0, 2); +} + +#[test_log::test(tokio::test)] +async fn test_gap_in_upgrade_timestamp() { + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; + + let mut storage = connection_pool.connection().await.unwrap(); + client + .add_upgrade_timestamp(&[( + ProtocolUpgrade { + version: ProtocolSemanticVersion { + minor: ProtocolVersionId::next(), + patch: 0.into(), + }, + tx: None, + ..Default::default() + }, + 10, + )]) + .await; + client.set_last_finalized_block_number(15).await; + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_versions = storage.protocol_versions_dal().all_versions().await; + // there should be genesis version and just added version + assert_eq!(db_versions.len(), 2); + + let previous_version = (ProtocolVersionId::latest() as u16 - 1).try_into().unwrap(); + let next_version = ProtocolVersionId::next(); + assert_eq!(db_versions[0].minor, previous_version); + assert_eq!(db_versions[1].minor, next_version); +} + +#[test_log::test(tokio::test)] +async fn test_normal_operation_upgrade_timestamp() { + zksync_concurrency::testonly::abort_on_panic(); + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + + let mut client = MockEthClient::new(SLChainId(42)); + let mut watcher = EthWatch::new( + &chain_admin_contract(), + Box::new(client.clone()), + None, + connection_pool.clone(), + std::time::Duration::from_nanos(1), + L2ChainId::default(), + ) + .await + .unwrap(); + + let mut storage = connection_pool.connection().await.unwrap(); + client + .add_upgrade_timestamp(&[ + ( + ProtocolUpgrade { + tx: None, + ..Default::default() + }, + 10, + ), + ( + ProtocolUpgrade { + version: ProtocolSemanticVersion { + minor: ProtocolVersionId::next(), + patch: 0.into(), + }, + tx: Some(build_upgrade_tx(ProtocolVersionId::next(), 18)), + ..Default::default() + }, + 18, + ), + ( + ProtocolUpgrade { + version: ProtocolSemanticVersion { + minor: ProtocolVersionId::next(), + patch: 1.into(), + }, + tx: None, + ..Default::default() + }, + 19, + ), + ]) + .await; + client.set_last_finalized_block_number(15).await; + // The second upgrade will not be processed, as it has less than 5 confirmations. + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_versions = storage.protocol_versions_dal().all_versions().await; + // There should be genesis version and just added version. + assert_eq!(db_versions.len(), 2); + assert_eq!(db_versions[1].minor, ProtocolVersionId::latest()); + + client.set_last_finalized_block_number(20).await; + // Now the second and the third upgrades will be processed. + watcher.loop_iteration(&mut storage).await.unwrap(); + let db_versions = storage.protocol_versions_dal().all_versions().await; + let mut expected_version = ProtocolSemanticVersion { + minor: ProtocolVersionId::next(), + patch: 0.into(), + }; + assert_eq!(db_versions.len(), 4); + assert_eq!(db_versions[2], expected_version); + expected_version.patch += 1; + assert_eq!(db_versions[3], expected_version); + + // Check that tx was saved with the second upgrade. + let tx = storage + .protocol_versions_dal() + .get_protocol_upgrade_tx(ProtocolVersionId::next()) + .await + .unwrap() + .expect("no protocol upgrade transaction"); + assert_eq!(tx.common_data.upgrade_id, ProtocolVersionId::next()); +} + +#[test_log::test(tokio::test)] +#[should_panic] +async fn test_gap_in_single_batch() { + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; + + let mut storage = connection_pool.connection().await.unwrap(); + client + .add_transactions(&[ + build_l1_tx(0, 10), + build_l1_tx(1, 14), + build_l1_tx(2, 14), + build_l1_tx(3, 14), + build_l1_tx(5, 14), + ]) + .await; + client.set_last_finalized_block_number(15).await; + watcher.loop_iteration(&mut storage).await.unwrap(); +} + +#[test_log::test(tokio::test)] +#[should_panic] +async fn test_gap_between_batches() { + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; + + let mut storage = connection_pool.connection().await.unwrap(); + client + .add_transactions(&[ + // this goes to the first batch + build_l1_tx(0, 10), + build_l1_tx(1, 14), + build_l1_tx(2, 14), + // this goes to the second batch + build_l1_tx(4, 20), + build_l1_tx(5, 22), + ]) + .await; + client.set_last_finalized_block_number(15).await; + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_txs = get_all_db_txs(&mut storage).await; + assert_eq!(db_txs.len(), 3); + client.set_last_finalized_block_number(25).await; + watcher.loop_iteration(&mut storage).await.unwrap(); +} + +#[test_log::test(tokio::test)] +async fn test_overlapping_batches() { + zksync_concurrency::testonly::abort_on_panic(); + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + let (mut watcher, mut client) = create_l1_test_watcher(connection_pool.clone()).await; + + let mut storage = connection_pool.connection().await.unwrap(); + client + .add_transactions(&[ + // this goes to the first batch + build_l1_tx(0, 10), + build_l1_tx(1, 14), + build_l1_tx(2, 14), + // this goes to the second batch + build_l1_tx(1, 20), + build_l1_tx(2, 22), + build_l1_tx(3, 23), + build_l1_tx(4, 23), + ]) + .await; + client.set_last_finalized_block_number(15).await; + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_txs = get_all_db_txs(&mut storage).await; + assert_eq!(db_txs.len(), 3); + + client.set_last_finalized_block_number(25).await; + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_txs = get_all_db_txs(&mut storage).await; + assert_eq!(db_txs.len(), 5); + let mut db_txs: Vec = db_txs + .into_iter() + .map(|tx| tx.try_into().unwrap()) + .collect(); + db_txs.sort_by_key(|tx| tx.common_data.serial_id); + let tx = db_txs[2].clone(); + assert_eq!(tx.common_data.serial_id.0, 2); + let tx = db_txs[4].clone(); + assert_eq!(tx.common_data.serial_id.0, 4); +} + +#[test_log::test(tokio::test)] +async fn test_transactions_get_gradually_processed_by_gateway() { + zksync_concurrency::testonly::abort_on_panic(); + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + let (mut watcher, mut l1_client, mut gateway_client) = + create_gateway_test_watcher(connection_pool.clone()).await; + + let mut storage = connection_pool.connection().await.unwrap(); + l1_client + .add_transactions(&[ + build_l1_tx(0, 10), + build_l1_tx(1, 14), + build_l1_tx(2, 14), + build_l1_tx(3, 20), + build_l1_tx(4, 22), + ]) + .await; + l1_client.set_last_finalized_block_number(15).await; + gateway_client + .set_processed_priority_transactions_count(2) + .await; + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_txs = get_all_db_txs(&mut storage).await; + assert_eq!(db_txs.len(), 2); + + l1_client.set_last_finalized_block_number(25).await; + gateway_client + .set_processed_priority_transactions_count(4) + .await; + watcher.loop_iteration(&mut storage).await.unwrap(); + + let db_txs = get_all_db_txs(&mut storage).await; + assert_eq!(db_txs.len(), 4); + let mut db_txs: Vec = db_txs + .into_iter() + .map(|tx| tx.try_into().unwrap()) + .collect(); + db_txs.sort_by_key(|tx| tx.common_data.serial_id); + let tx = db_txs[2].clone(); + assert_eq!(tx.common_data.serial_id.0, 2); + let tx = db_txs[3].clone(); + assert_eq!(tx.common_data.serial_id.0, 3); +} + +#[test_log::test(tokio::test)] +async fn test_batch_root_processor_from_genesis() { + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + setup_batch_roots(&connection_pool, 0).await; + let (mut watcher, _, mut sl_client) = + create_gateway_test_watcher(connection_pool.clone()).await; + + let batch_roots = batch_roots(); + sl_client + .add_batch_roots(&[ + (5, 1, batch_roots[0]), + (9, 2, batch_roots[1]), + (11, 3, batch_roots[2]), + ]) + .await; + sl_client + .add_chain_roots(&[ + ( + 5, + H256::from_slice( + &hex::decode( + "10a2ef76e709d318b459be49f1e8d7f02d7120f2b501bc0afddd935f1a813c67", + ) + .unwrap(), + ), + ), + ( + 9, + H256::from_slice( + &hex::decode( + "e0c3330f674b6b2d578f958a1dbd66f164d068b0bb5a9fb077eca013976fda6f", + ) + .unwrap(), + ), + ), + ( + 11, + H256::from_slice( + &hex::decode( + "d22fc9a7b005fefecd33bb56cdbf70bcc23610e693cd21295f9920227c2cb1cc", + ) + .unwrap(), + ), + ), + ]) + .await; + let chain_log_proofs = chain_log_proofs(); + sl_client.add_chain_log_proofs(chain_log_proofs).await; + + sl_client.set_last_finalized_block_number(5).await; + + let mut connection = connection_pool.connection().await.unwrap(); + watcher.loop_iteration(&mut connection).await.unwrap(); + + let proof1 = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(1)) + .await + .unwrap() + .unwrap(); + let proof1 = hex::encode(&bincode::serialize(&proof1).unwrap()); + assert_eq!(proof1, "000000000600000000000000420000000000000030783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303030303030303030303030303030303030303030303030303030303030303530303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307833373561356266393039636230323134336533363935636136353865303634316537333961613539306630303034646261393335373263343463646239643264"); + + sl_client.set_last_finalized_block_number(11).await; + watcher.loop_iteration(&mut connection).await.unwrap(); + + let proof2 = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(2)) + .await + .unwrap() + .unwrap(); + let proof2 = hex::encode(&bincode::serialize(&proof2).unwrap()); + assert_eq!(proof2, "0100000007000000000000004200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303031420000000000000030783130613265663736653730396433313862343539626534396631653864376630326437313230663262353031626330616664646439333566316138313363363742000000000000003078303030303030303030303030303030303030303030303030303030303030303930303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307861333738613230636132376237616533303731643162643763326164613030343639616263353765343239646436663438613833303932646237303539613138"); + + let proof3 = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(3)) + .await + .unwrap() + .unwrap(); + let proof3 = hex::encode(&bincode::serialize(&proof3).unwrap()); + assert_eq!(proof3, "02000000080000000000000042000000000000003078303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030324200000000000000307834363730306234643430616335633335616632633232646461323738376139316562353637623036633932346138666238616539613035623230633038633231420000000000000030786530633333333066363734623662326435373866393538613164626436366631363464303638623062623561396662303737656361303133393736666461366642000000000000003078303030303030303030303030303030303030303030303030303030303030306230303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307833373561356266393039636230323134336533363935636136353865303634316537333961613539306630303034646261393335373263343463646239643264"); +} + +#[test_log::test(tokio::test)] +async fn test_batch_root_processor_restart() { + let connection_pool = ConnectionPool::::test_pool().await; + setup_db(&connection_pool).await; + setup_batch_roots(&connection_pool, 2).await; + let (mut watcher, _, mut sl_client) = + create_gateway_test_watcher(connection_pool.clone()).await; + + let batch_roots = batch_roots(); + sl_client + .add_batch_roots(&[ + (11, 3, batch_roots[2]), + (13, 4, batch_roots[3]), + (14, 5, batch_roots[4]), + (14, 6, batch_roots[5]), + ]) + .await; + sl_client + .add_chain_roots(&[ + ( + 11, + H256::from_slice( + &hex::decode( + "d22fc9a7b005fefecd33bb56cdbf70bcc23610e693cd21295f9920227c2cb1cc", + ) + .unwrap(), + ), + ), + ( + 13, + H256::from_slice( + &hex::decode( + "53edc1f5ad79c5999bd578dfc135f9c51ebd7fafa4585b64f71d15b2dce1b728", + ) + .unwrap(), + ), + ), + ( + 14, + H256::from_slice( + &hex::decode( + "61b35796307159a6da8aa45448e6941e3438380582e2f3cb358db59598ae156f", + ) + .unwrap(), + ), + ), + ]) + .await; + let chain_log_proofs = chain_log_proofs(); + sl_client.add_chain_log_proofs(chain_log_proofs).await; + + sl_client.set_last_finalized_block_number(14).await; + + let mut connection = connection_pool.connection().await.unwrap(); + watcher.loop_iteration(&mut connection).await.unwrap(); + + let proof = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(3)) + .await + .unwrap() + .unwrap(); + let proof = hex::encode(&bincode::serialize(&proof).unwrap()); + assert_eq!(proof, "02000000080000000000000042000000000000003078303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030324200000000000000307834363730306234643430616335633335616632633232646461323738376139316562353637623036633932346138666238616539613035623230633038633231420000000000000030786530633333333066363734623662326435373866393538613164626436366631363464303638623062623561396662303737656361303133393736666461366642000000000000003078303030303030303030303030303030303030303030303030303030303030306230303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307833373561356266393039636230323134336533363935636136353865303634316537333961613539306630303034646261393335373263343463646239643264"); + + let proof = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(4)) + .await + .unwrap() + .unwrap(); + let proof = hex::encode(&bincode::serialize(&proof).unwrap()); + assert_eq!(proof, "02000000080000000000000042000000000000003078303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030334200000000000000307837623765373735373139343639366666393634616233353837393131373362636337663735356132656161393334653935373061636533393139383435313265420000000000000030786530633333333066363734623662326435373866393538613164626436366631363464303638623062623561396662303737656361303133393736666461366642000000000000003078303030303030303030303030303030303030303030303030303030303030306430303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307835353063313735316338653764626166633839303939326634353532333636663064643565623665343362653535353936386264616338633732656466316261"); + + let proof = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(5)) + .await + .unwrap() + .unwrap(); + let proof = hex::encode(&bincode::serialize(&proof).unwrap()); + assert_eq!(proof, "030000000900000000000000420000000000000030783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303442000000000000003078303235663065363031353230366661626364326263613930316432633438396536336263356564346231356266356330633963363066396531363735383564614200000000000000307863633463343165646230633230333133343862323932623736386539626163316565386339326330396566386133323737633265636534303963313264383661420000000000000030783533656463316635616437396335393939626435373864666331333566396335316562643766616661343538356236346637316431356232646365316237323842000000000000003078303030303030303030303030303030303030303030303030303030303030306530303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307833373561356266393039636230323134336533363935636136353865303634316537333961613539306630303034646261393335373263343463646239643264"); + + let proof = connection + .blocks_dal() + .get_l1_batch_chain_merkle_path(L1BatchNumber(6)) + .await + .unwrap() + .unwrap(); + let proof = hex::encode(&bincode::serialize(&proof).unwrap()); + assert_eq!(proof, "030000000900000000000000420000000000000030783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303542000000000000003078323465653435363834376535373364313635613832333634306632303834383139636331613865333433316562633635633865363064333435343266313637324200000000000000307863633463343165646230633230333133343862323932623736386539626163316565386339326330396566386133323737633265636534303963313264383661420000000000000030783533656463316635616437396335393939626435373864666331333566396335316562643766616661343538356236346637316431356232646365316237323842000000000000003078303030303030303030303030303030303030303030303030303030303030306530303030303030303030303030303030303030303030303030303030303030334200000000000000307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030316639420000000000000030783031303230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303042000000000000003078303932343932386331333737613663663234633339633264343666386562396466323365383131623236646333353237653534383339366664346531373362314200000000000000307833373561356266393039636230323134336533363935636136353865303634316537333961613539306630303034646261393335373263343463646239643264"); +} + +async fn get_all_db_txs(storage: &mut Connection<'_, Core>) -> Vec { + storage.transactions_dal().reset_mempool().await.unwrap(); + storage + .transactions_dal() + .sync_mempool(&[], &[], 0, 0, 1000) + .await + .unwrap() + .into_iter() + .map(|x| x.0) + .collect() +} + +async fn setup_db(connection_pool: &ConnectionPool) { + connection_pool + .connection() + .await + .unwrap() + .protocol_versions_dal() + .save_protocol_version_with_tx(&ProtocolVersion { + version: ProtocolSemanticVersion { + minor: (ProtocolVersionId::latest() as u16 - 1).try_into().unwrap(), + patch: 0.into(), + }, + ..Default::default() + }) + .await + .unwrap(); +} + +fn batch_roots() -> Vec { + [ + "5EEBBC173358620F7F61B69D80AFE503F76190396918EB7B27CEF4DB7C51D60A", + "B7E66115CDAAF5FFE70B53EF0AC6D0FF7D7BEB4341FEC6352A670B805AE15935", + "09BD2AD9C01C05F760BBEC6E59BF728566551B48C0DCBD01DB797D1C703122F8", + "B6E530FF878093B2D0CAF87780451A8F07922570E2D820B7A8541114E0D70FB5", + "B4F195844BA1792F3C1FB57C826B2DA60EA6EEBB90BF53F706120E49BB0486EF", + "118F6FAC96824D4E0845F7C7DF716969378F3F2038D9E9D0FEAD1FE01BA11A93", + ] + .into_iter() + .map(|s| H256::from_slice(&hex::decode(s).unwrap())) + .collect() +} + +fn chain_log_proofs() -> Vec<(L1BatchNumber, ChainAggProof)> { + vec![ + ( + L1BatchNumber(5), + ChainAggProof { + chain_id_leaf_proof: vec![ + H256::from_slice( + &hex::decode( + "0924928c1377a6cf24c39c2d46f8eb9df23e811b26dc3527e548396fd4e173b1", + ) + .unwrap(), + ), + H256::from_slice( + &hex::decode( + "375a5bf909cb02143e3695ca658e0641e739aa590f0004dba93572c44cdb9d2d", + ) + .unwrap(), + ), + ], + chain_id_leaf_proof_mask: 3, + }, + ), + ( + L1BatchNumber(9), + ChainAggProof { + chain_id_leaf_proof: vec![ + H256::from_slice( + &hex::decode( + "0924928c1377a6cf24c39c2d46f8eb9df23e811b26dc3527e548396fd4e173b1", + ) + .unwrap(), + ), + H256::from_slice( + &hex::decode( + "a378a20ca27b7ae3071d1bd7c2ada00469abc57e429dd6f48a83092db7059a18", + ) + .unwrap(), + ), + ], + chain_id_leaf_proof_mask: 3, + }, + ), + ( + L1BatchNumber(11), + ChainAggProof { + chain_id_leaf_proof: vec![ + H256::from_slice( + &hex::decode( + "0924928c1377a6cf24c39c2d46f8eb9df23e811b26dc3527e548396fd4e173b1", + ) + .unwrap(), + ), + H256::from_slice( + &hex::decode( + "375a5bf909cb02143e3695ca658e0641e739aa590f0004dba93572c44cdb9d2d", + ) + .unwrap(), + ), + ], + chain_id_leaf_proof_mask: 3, + }, + ), + ( + L1BatchNumber(13), + ChainAggProof { + chain_id_leaf_proof: vec![ + H256::from_slice( + &hex::decode( + "0924928c1377a6cf24c39c2d46f8eb9df23e811b26dc3527e548396fd4e173b1", + ) + .unwrap(), + ), + H256::from_slice( + &hex::decode( + "550c1751c8e7dbafc890992f4552366f0dd5eb6e43be555968bdac8c72edf1ba", + ) + .unwrap(), + ), + ], + chain_id_leaf_proof_mask: 3, + }, + ), + ( + L1BatchNumber(14), + ChainAggProof { + chain_id_leaf_proof: vec![ + H256::from_slice( + &hex::decode( + "0924928c1377a6cf24c39c2d46f8eb9df23e811b26dc3527e548396fd4e173b1", + ) + .unwrap(), + ), + H256::from_slice( + &hex::decode( + "375a5bf909cb02143e3695ca658e0641e739aa590f0004dba93572c44cdb9d2d", + ) + .unwrap(), + ), + ], + chain_id_leaf_proof_mask: 3, + }, + ), + ] +} + +async fn setup_batch_roots( + connection_pool: &ConnectionPool, + number_of_processed_batches: usize, +) { + let batch_roots = batch_roots(); + + let mut connection = connection_pool.connection().await.unwrap(); + + assert!(number_of_processed_batches <= batch_roots.len()); + for (i, root) in batch_roots.into_iter().enumerate() { + let batch_number = L1BatchNumber(i as u32 + 1); + let header = L1BatchHeader::new( + batch_number, + i as u64, + Default::default(), + (ProtocolVersionId::latest() as u16 - 1).try_into().unwrap(), + ); + connection + .blocks_dal() + .insert_mock_l1_batch(&header) + .await + .unwrap(); + connection + .blocks_dal() + .save_l1_batch_commitment_artifacts( + batch_number, + &L1BatchCommitmentArtifacts { + l2_l1_merkle_root: root, + ..Default::default() + }, + ) + .await + .unwrap(); + + let eth_tx_id = connection + .eth_sender_dal() + .save_eth_tx( + i as u64, + Default::default(), + AggregatedActionType::Execute, + Default::default(), + Default::default(), + Default::default(), + Default::default(), + true, + ) + .await + .unwrap() + .id; + connection + .eth_sender_dal() + .set_chain_id(eth_tx_id, SL_CHAIN_ID.0) + .await + .unwrap(); + connection + .blocks_dal() + .set_eth_tx_id( + batch_number..=batch_number, + eth_tx_id, + AggregatedActionType::Execute, + ) + .await + .unwrap(); + + if i < number_of_processed_batches { + connection + .blocks_dal() + .set_batch_chain_merkle_path( + batch_number, + BatchAndChainMerklePath { + batch_proof_len: 0, + proof: Vec::new(), + }, + ) + .await + .unwrap() + } + } +} diff --git a/core/node/node_framework/src/implementations/layers/consistency_checker.rs b/core/node/node_framework/src/implementations/layers/consistency_checker.rs index a9e99eb89ac4..a76b358b53b4 100644 --- a/core/node/node_framework/src/implementations/layers/consistency_checker.rs +++ b/core/node/node_framework/src/implementations/layers/consistency_checker.rs @@ -1,9 +1,9 @@ use zksync_consistency_checker::ConsistencyChecker; -use zksync_types::{commitment::L1BatchCommitmentMode, Address}; +use zksync_types::{commitment::L1BatchCommitmentMode, Address, L2ChainId}; use crate::{ implementations::resources::{ - eth_interface::EthInterfaceResource, + eth_interface::{EthInterfaceResource, GatewayEthInterfaceResource}, healthcheck::AppHealthCheckResource, pools::{MasterPool, PoolResource}, }, @@ -16,15 +16,17 @@ use crate::{ /// Wiring layer for the `ConsistencyChecker` (used by the external node). #[derive(Debug)] pub struct ConsistencyCheckerLayer { - diamond_proxy_addr: Address, + l1_diamond_proxy_addr: Address, max_batches_to_recheck: u32, commitment_mode: L1BatchCommitmentMode, + l2_chain_id: L2ChainId, } #[derive(Debug, FromContext)] #[context(crate = crate)] pub struct Input { pub l1_client: EthInterfaceResource, + pub gateway_client: Option, pub master_pool: PoolResource, #[context(default)] pub app_health: AppHealthCheckResource, @@ -39,14 +41,16 @@ pub struct Output { impl ConsistencyCheckerLayer { pub fn new( - diamond_proxy_addr: Address, + l1_diamond_proxy_addr: Address, max_batches_to_recheck: u32, commitment_mode: L1BatchCommitmentMode, + l2_chain_id: L2ChainId, ) -> ConsistencyCheckerLayer { Self { - diamond_proxy_addr, + l1_diamond_proxy_addr, max_batches_to_recheck, commitment_mode, + l2_chain_id, } } } @@ -63,17 +67,21 @@ impl WiringLayer for ConsistencyCheckerLayer { async fn wire(self, input: Self::Input) -> Result { // Get resources. let l1_client = input.l1_client.0; + let gateway_client = input.gateway_client.map(|c| c.0); let singleton_pool = input.master_pool.get_singleton().await?; let consistency_checker = ConsistencyChecker::new( l1_client, + gateway_client, self.max_batches_to_recheck, singleton_pool, self.commitment_mode, + self.l2_chain_id, ) + .await .map_err(WiringError::Internal)? - .with_diamond_proxy_addr(self.diamond_proxy_addr); + .with_l1_diamond_proxy_addr(self.l1_diamond_proxy_addr); input .app_health diff --git a/core/node/node_framework/src/implementations/layers/eth_watch.rs b/core/node/node_framework/src/implementations/layers/eth_watch.rs index e19828d85ccd..e871f5661d22 100644 --- a/core/node/node_framework/src/implementations/layers/eth_watch.rs +++ b/core/node/node_framework/src/implementations/layers/eth_watch.rs @@ -1,6 +1,7 @@ use zksync_config::{ContractsConfig, EthWatchConfig}; use zksync_contracts::chain_admin_contract; use zksync_eth_watch::{EthHttpQueryClient, EthWatch}; +use zksync_types::L2ChainId; use crate::{ implementations::resources::{ @@ -21,6 +22,7 @@ use crate::{ pub struct EthWatchLayer { eth_watch_config: EthWatchConfig, contracts_config: ContractsConfig, + chain_id: L2ChainId, } #[derive(Debug, FromContext)] @@ -38,10 +40,15 @@ pub struct Output { } impl EthWatchLayer { - pub fn new(eth_watch_config: EthWatchConfig, contracts_config: ContractsConfig) -> Self { + pub fn new( + eth_watch_config: EthWatchConfig, + contracts_config: ContractsConfig, + chain_id: L2ChainId, + ) -> Self { Self { eth_watch_config, contracts_config, + chain_id, } } } @@ -72,10 +79,11 @@ impl WiringLayer for EthWatchLayer { let eth_watch = EthWatch::new( &chain_admin_contract(), - Box::new(eth_client.clone()), Box::new(eth_client), + None, main_pool, self.eth_watch_config.poll_interval(), + self.chain_id, ) .await?; diff --git a/core/node/node_framework/src/implementations/layers/query_eth_client.rs b/core/node/node_framework/src/implementations/layers/query_eth_client.rs index 116823d92d8a..73d28f6a2aae 100644 --- a/core/node/node_framework/src/implementations/layers/query_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/query_eth_client.rs @@ -1,9 +1,11 @@ use anyhow::Context; -use zksync_types::{settlement::SettlementMode, url::SensitiveUrl, L2ChainId, SLChainId}; +use zksync_types::{url::SensitiveUrl, L2ChainId, SLChainId}; use zksync_web3_decl::client::Client; use crate::{ - implementations::resources::eth_interface::{EthInterfaceResource, L2InterfaceResource}, + implementations::resources::eth_interface::{ + EthInterfaceResource, GatewayEthInterfaceResource, L2InterfaceResource, + }, wiring_layer::{WiringError, WiringLayer}, IntoContext, }; @@ -13,19 +15,19 @@ use crate::{ pub struct QueryEthClientLayer { chain_id: SLChainId, web3_url: SensitiveUrl, - settlement_mode: SettlementMode, + gateway_web3_url: Option, } impl QueryEthClientLayer { pub fn new( chain_id: SLChainId, web3_url: SensitiveUrl, - settlement_mode: SettlementMode, + gateway_web3_url: Option, ) -> Self { Self { chain_id, web3_url, - settlement_mode, + gateway_web3_url, } } } @@ -35,6 +37,7 @@ impl QueryEthClientLayer { pub struct Output { query_client_l1: EthInterfaceResource, query_client_l2: Option, + query_client_gateway: Option, } #[async_trait::async_trait] @@ -47,7 +50,7 @@ impl WiringLayer for QueryEthClientLayer { } async fn wire(self, _input: Self::Input) -> Result { - // Both the L1 and L2 client have the same URL, but provide different type guarantees. + // Both `query_client_gateway` and `query_client_l2` use the same URL, but provide different type guarantees. Ok(Output { query_client_l1: EthInterfaceResource(Box::new( Client::http(self.web3_url.clone()) @@ -55,9 +58,9 @@ impl WiringLayer for QueryEthClientLayer { .for_network(self.chain_id.into()) .build(), )), - query_client_l2: if self.settlement_mode.is_gateway() { + query_client_l2: if let Some(gateway_web3_url) = self.gateway_web3_url.clone() { Some(L2InterfaceResource(Box::new( - Client::http(self.web3_url.clone()) + Client::http(gateway_web3_url) .context("Client::new()")? .for_network(L2ChainId::try_from(self.chain_id.0).unwrap().into()) .build(), @@ -65,6 +68,15 @@ impl WiringLayer for QueryEthClientLayer { } else { None }, + query_client_gateway: if let Some(gateway_web3_url) = self.gateway_web3_url { + Some(GatewayEthInterfaceResource(Box::new( + Client::http(gateway_web3_url) + .context("Client::new()")? + .build(), + ))) + } else { + None + }, }) } } diff --git a/core/node/node_framework/src/implementations/layers/tree_data_fetcher.rs b/core/node/node_framework/src/implementations/layers/tree_data_fetcher.rs index ca2e80142401..cdf0700a0e73 100644 --- a/core/node/node_framework/src/implementations/layers/tree_data_fetcher.rs +++ b/core/node/node_framework/src/implementations/layers/tree_data_fetcher.rs @@ -1,9 +1,9 @@ use zksync_node_sync::tree_data_fetcher::TreeDataFetcher; -use zksync_types::Address; +use zksync_types::{Address, L2ChainId}; use crate::{ implementations::resources::{ - eth_interface::EthInterfaceResource, + eth_interface::{EthInterfaceResource, GatewayEthInterfaceResource}, healthcheck::AppHealthCheckResource, main_node_client::MainNodeClientResource, pools::{MasterPool, PoolResource}, @@ -17,7 +17,8 @@ use crate::{ /// Wiring layer for [`TreeDataFetcher`]. #[derive(Debug)] pub struct TreeDataFetcherLayer { - diamond_proxy_addr: Address, + l1_diamond_proxy_addr: Address, + l2_chain_id: L2ChainId, } #[derive(Debug, FromContext)] @@ -25,7 +26,8 @@ pub struct TreeDataFetcherLayer { pub struct Input { pub master_pool: PoolResource, pub main_node_client: MainNodeClientResource, - pub eth_client: EthInterfaceResource, + pub l1_client: EthInterfaceResource, + pub gateway_client: Option, #[context(default)] pub app_health: AppHealthCheckResource, } @@ -38,8 +40,11 @@ pub struct Output { } impl TreeDataFetcherLayer { - pub fn new(diamond_proxy_addr: Address) -> Self { - Self { diamond_proxy_addr } + pub fn new(l1_diamond_proxy_addr: Address, l2_chain_id: L2ChainId) -> Self { + Self { + l1_diamond_proxy_addr, + l2_chain_id, + } } } @@ -55,14 +60,21 @@ impl WiringLayer for TreeDataFetcherLayer { async fn wire(self, input: Self::Input) -> Result { let pool = input.master_pool.get().await?; let MainNodeClientResource(client) = input.main_node_client; - let EthInterfaceResource(eth_client) = input.eth_client; + let EthInterfaceResource(l1_client) = input.l1_client; + let gateway_client = input.gateway_client.map(|c| c.0); tracing::warn!( "Running tree data fetcher (allows a node to operate w/o a Merkle tree or w/o waiting the tree to catch up). \ This is an experimental feature; do not use unless you know what you're doing" ); - let task = - TreeDataFetcher::new(client, pool).with_l1_data(eth_client, self.diamond_proxy_addr)?; + let task = TreeDataFetcher::new(client, pool) + .with_l1_data( + l1_client, + self.l1_diamond_proxy_addr, + gateway_client, + self.l2_chain_id, + ) + .await?; // Insert healthcheck input diff --git a/core/node/node_framework/src/implementations/resources/eth_interface.rs b/core/node/node_framework/src/implementations/resources/eth_interface.rs index 24b7df327f63..f1bc17027f90 100644 --- a/core/node/node_framework/src/implementations/resources/eth_interface.rs +++ b/core/node/node_framework/src/implementations/resources/eth_interface.rs @@ -13,6 +13,15 @@ impl Resource for EthInterfaceResource { } } +#[derive(Debug, Clone)] +pub struct GatewayEthInterfaceResource(pub Box>); + +impl Resource for GatewayEthInterfaceResource { + fn name() -> String { + "common/gateway_eth_interface".into() + } +} + /// A resource that provides L2 interface object to the service. /// It is expected to have the same URL as the `EthInterfaceResource`, but have different capabilities. /// diff --git a/core/node/node_sync/src/batch_status_updater/mod.rs b/core/node/node_sync/src/batch_status_updater/mod.rs index 3f6bb9ff33f8..de3bb88f8b93 100644 --- a/core/node/node_sync/src/batch_status_updater/mod.rs +++ b/core/node/node_sync/src/batch_status_updater/mod.rs @@ -13,7 +13,7 @@ use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_shared_metrics::EN_METRICS; use zksync_types::{ - aggregated_operations::AggregatedActionType, api, L1BatchNumber, L2BlockNumber, H256, + aggregated_operations::AggregatedActionType, api, L1BatchNumber, SLChainId, H256, }; use zksync_web3_decl::{ client::{DynClient, L2}, @@ -41,6 +41,7 @@ struct BatchStatusChange { number: L1BatchNumber, l1_tx_hash: H256, happened_at: DateTime, + sl_chain_id: Option, } #[derive(Debug, Default)] @@ -73,42 +74,21 @@ impl From for UpdaterError { #[async_trait] trait MainNodeClient: fmt::Debug + Send + Sync { - /// Returns any L2 block in the specified L1 batch. - async fn resolve_l1_batch_to_l2_block( + async fn batch_details( &self, number: L1BatchNumber, - ) -> EnrichedClientResult>; - - async fn block_details( - &self, - number: L2BlockNumber, - ) -> EnrichedClientResult>; + ) -> EnrichedClientResult>; } #[async_trait] impl MainNodeClient for Box> { - async fn resolve_l1_batch_to_l2_block( + async fn batch_details( &self, number: L1BatchNumber, - ) -> EnrichedClientResult> { - let request_latency = FETCHER_METRICS.requests[&FetchStage::GetL2BlockRange].start(); - let number = self - .get_l2_block_range(number) - .rpc_context("resolve_l1_batch_to_l2_block") - .with_arg("number", &number) - .await? - .map(|(start, _)| L2BlockNumber(start.as_u32())); - request_latency.observe(); - Ok(number) - } - - async fn block_details( - &self, - number: L2BlockNumber, - ) -> EnrichedClientResult> { - let request_latency = FETCHER_METRICS.requests[&FetchStage::GetBlockDetails].start(); + ) -> EnrichedClientResult> { + let request_latency = FETCHER_METRICS.requests[&FetchStage::GetL1BatchDetails].start(); let details = self - .get_block_details(number) + .get_l1_batch_details(number) .rpc_context("block_details") .with_arg("number", &number) .await?; @@ -155,27 +135,34 @@ impl UpdaterCursor { }) } - fn extract_tx_hash_and_timestamp( - batch_info: &api::BlockDetails, + /// Extracts tx hash, timestamp and chain id of the operation. + fn extract_op_data( + batch_info: &api::L1BatchDetails, stage: AggregatedActionType, - ) -> (Option, Option>) { + ) -> (Option, Option>, Option) { match stage { - AggregatedActionType::Commit => { - (batch_info.base.commit_tx_hash, batch_info.base.committed_at) - } - AggregatedActionType::PublishProofOnchain => { - (batch_info.base.prove_tx_hash, batch_info.base.proven_at) - } - AggregatedActionType::Execute => { - (batch_info.base.execute_tx_hash, batch_info.base.executed_at) - } + AggregatedActionType::Commit => ( + batch_info.base.commit_tx_hash, + batch_info.base.committed_at, + batch_info.base.commit_chain_id, + ), + AggregatedActionType::PublishProofOnchain => ( + batch_info.base.prove_tx_hash, + batch_info.base.proven_at, + batch_info.base.prove_chain_id, + ), + AggregatedActionType::Execute => ( + batch_info.base.execute_tx_hash, + batch_info.base.executed_at, + batch_info.base.execute_chain_id, + ), } } fn update( &mut self, status_changes: &mut StatusChanges, - batch_info: &api::BlockDetails, + batch_info: &api::L1BatchDetails, ) -> anyhow::Result<()> { for stage in [ AggregatedActionType::Commit, @@ -190,10 +177,10 @@ impl UpdaterCursor { fn update_stage( &mut self, status_changes: &mut StatusChanges, - batch_info: &api::BlockDetails, + batch_info: &api::L1BatchDetails, stage: AggregatedActionType, ) -> anyhow::Result<()> { - let (l1_tx_hash, happened_at) = Self::extract_tx_hash_and_timestamp(batch_info, stage); + let (l1_tx_hash, happened_at, sl_chain_id) = Self::extract_op_data(batch_info, stage); let (last_l1_batch, changes_to_update) = match stage { AggregatedActionType::Commit => ( &mut self.last_committed_l1_batch, @@ -212,7 +199,7 @@ impl UpdaterCursor { let Some(l1_tx_hash) = l1_tx_hash else { return Ok(()); }; - if batch_info.l1_batch_number != last_l1_batch.next() { + if batch_info.number != last_l1_batch.next() { return Ok(()); } @@ -221,12 +208,13 @@ impl UpdaterCursor { format!("Malformed API response: batch is {action_str}, but has no relevant timestamp") })?; changes_to_update.push(BatchStatusChange { - number: batch_info.l1_batch_number, + number: batch_info.number, l1_tx_hash, happened_at, + sl_chain_id, }); - tracing::info!("Batch {}: {action_str}", batch_info.l1_batch_number); - FETCHER_METRICS.l1_batch[&stage.into()].set(batch_info.l1_batch_number.0.into()); + tracing::info!("Batch {}: {action_str}", batch_info.number); + FETCHER_METRICS.l1_batch[&stage.into()].set(batch_info.number.0.into()); *last_l1_batch += 1; Ok(()) } @@ -348,22 +336,11 @@ impl BatchStatusUpdater { // update all three statuses (e.g. if the node is still syncing), but also skipping the gaps in the statuses // (e.g. if the last executed batch is 10, but the last proven is 20, we don't need to check the batches 11-19). while batch <= last_sealed_batch { - // While we may receive `None` for the `self.current_l1_batch`, it's OK: open batch is guaranteed to not - // be sent to L1. - let l2_block_number = self.client.resolve_l1_batch_to_l2_block(batch).await?; - let Some(l2_block_number) = l2_block_number else { + let Some(batch_info) = self.client.batch_details(batch).await? else { + // Batch is not ready yet return Ok(()); }; - let Some(batch_info) = self.client.block_details(l2_block_number).await? else { - // We cannot recover from an external API inconsistency. - let err = anyhow::anyhow!( - "Node API is inconsistent: L2 block {l2_block_number} was reported to be a part of {batch} L1 batch, \ - but API has no information about this L2 block", - ); - return Err(err.into()); - }; - cursor.update(status_changes, &batch_info)?; // Check whether we can skip a part of the range. @@ -407,10 +384,11 @@ impl BatchStatusUpdater { for change in &changes.commit { tracing::info!( - "Commit status change: number {}, hash {}, happened at {}", + "Commit status change: number {}, hash {}, happened at {}, on chainID {:?}", change.number, change.l1_tx_hash, - change.happened_at + change.happened_at, + change.sl_chain_id ); anyhow::ensure!( change.number <= last_sealed_batch, @@ -424,6 +402,7 @@ impl BatchStatusUpdater { AggregatedActionType::Commit, change.l1_tx_hash, change.happened_at, + change.sl_chain_id, ) .await?; cursor.last_committed_l1_batch = change.number; @@ -431,10 +410,11 @@ impl BatchStatusUpdater { for change in &changes.prove { tracing::info!( - "Prove status change: number {}, hash {}, happened at {}", + "Prove status change: number {}, hash {}, happened at {}, on chainID {:?}", change.number, change.l1_tx_hash, - change.happened_at + change.happened_at, + change.sl_chain_id ); anyhow::ensure!( change.number <= cursor.last_committed_l1_batch, @@ -448,6 +428,7 @@ impl BatchStatusUpdater { AggregatedActionType::PublishProofOnchain, change.l1_tx_hash, change.happened_at, + change.sl_chain_id, ) .await?; cursor.last_proven_l1_batch = change.number; @@ -455,10 +436,11 @@ impl BatchStatusUpdater { for change in &changes.execute { tracing::info!( - "Execute status change: number {}, hash {}, happened at {}", + "Execute status change: number {}, hash {}, happened at {}, on chainID {:?}", change.number, change.l1_tx_hash, - change.happened_at + change.happened_at, + change.sl_chain_id ); anyhow::ensure!( change.number <= cursor.last_proven_l1_batch, @@ -472,6 +454,7 @@ impl BatchStatusUpdater { AggregatedActionType::Execute, change.l1_tx_hash, change.happened_at, + change.sl_chain_id, ) .await?; cursor.last_executed_l1_batch = change.number; diff --git a/core/node/node_sync/src/batch_status_updater/tests.rs b/core/node/node_sync/src/batch_status_updater/tests.rs index 28b89f86f6a7..4ea1a5937075 100644 --- a/core/node/node_sync/src/batch_status_updater/tests.rs +++ b/core/node/node_sync/src/batch_status_updater/tests.rs @@ -8,7 +8,7 @@ use tokio::sync::{watch, Mutex}; use zksync_contracts::BaseSystemContractsHashes; use zksync_node_genesis::{insert_genesis_batch, GenesisParams}; use zksync_node_test_utils::{create_l1_batch, create_l2_block, prepare_recovery_snapshot}; -use zksync_types::{Address, ProtocolVersionId}; +use zksync_types::L2BlockNumber; use super::*; use crate::metrics::L1BatchStage; @@ -104,11 +104,11 @@ impl L1BatchStagesMap { for (number, stage) in self.iter() { let local_details = storage .blocks_web3_dal() - .get_block_details(L2BlockNumber(number.0)) + .get_l1_batch_details(L1BatchNumber(number.0)) .await .unwrap() .unwrap_or_else(|| panic!("no details for block #{number}")); - let expected_details = mock_block_details(number.0, stage); + let expected_details = mock_batch_details(number.0, stage); assert_eq!( local_details.base.commit_tx_hash, @@ -118,6 +118,10 @@ impl L1BatchStagesMap { local_details.base.committed_at, expected_details.base.committed_at ); + assert_eq!( + local_details.base.commit_chain_id, + expected_details.base.commit_chain_id, + ); assert_eq!( local_details.base.prove_tx_hash, expected_details.base.prove_tx_hash @@ -126,6 +130,10 @@ impl L1BatchStagesMap { local_details.base.proven_at, expected_details.base.proven_at ); + assert_eq!( + local_details.base.prove_chain_id, + expected_details.base.prove_chain_id, + ); assert_eq!( local_details.base.execute_tx_hash, expected_details.base.execute_tx_hash @@ -134,14 +142,17 @@ impl L1BatchStagesMap { local_details.base.executed_at, expected_details.base.executed_at ); + assert_eq!( + local_details.base.execute_chain_id, + expected_details.base.execute_chain_id, + ); } } } -fn mock_block_details(number: u32, stage: L1BatchStage) -> api::BlockDetails { - api::BlockDetails { - number: L2BlockNumber(number), - l1_batch_number: L1BatchNumber(number), +fn mock_batch_details(number: u32, stage: L1BatchStage) -> api::L1BatchDetails { + api::L1BatchDetails { + number: L1BatchNumber(number), base: api::BlockDetailsBase { timestamp: number.into(), l1_tx_count: 0, @@ -151,18 +162,19 @@ fn mock_block_details(number: u32, stage: L1BatchStage) -> api::BlockDetails { commit_tx_hash: (stage >= L1BatchStage::Committed).then(|| H256::repeat_byte(1)), committed_at: (stage >= L1BatchStage::Committed) .then(|| Utc.timestamp_opt(100, 0).unwrap()), + commit_chain_id: (stage >= L1BatchStage::Committed).then_some(SLChainId(11)), prove_tx_hash: (stage >= L1BatchStage::Proven).then(|| H256::repeat_byte(2)), proven_at: (stage >= L1BatchStage::Proven).then(|| Utc.timestamp_opt(200, 0).unwrap()), + prove_chain_id: (stage >= L1BatchStage::Proven).then_some(SLChainId(22)), execute_tx_hash: (stage >= L1BatchStage::Executed).then(|| H256::repeat_byte(3)), executed_at: (stage >= L1BatchStage::Executed) .then(|| Utc.timestamp_opt(300, 0).unwrap()), + execute_chain_id: (stage >= L1BatchStage::Executed).then_some(SLChainId(33)), l1_gas_price: 1, l2_fair_gas_price: 2, fair_pubdata_price: None, base_system_contracts_hashes: BaseSystemContractsHashes::default(), }, - operator_address: Address::zero(), - protocol_version: Some(ProtocolVersionId::default()), } } @@ -177,23 +189,15 @@ impl From for MockMainNodeClient { #[async_trait] impl MainNodeClient for MockMainNodeClient { - async fn resolve_l1_batch_to_l2_block( + async fn batch_details( &self, number: L1BatchNumber, - ) -> EnrichedClientResult> { - let map = self.0.lock().await; - Ok(map.get(number).is_some().then_some(L2BlockNumber(number.0))) - } - - async fn block_details( - &self, - number: L2BlockNumber, - ) -> EnrichedClientResult> { + ) -> EnrichedClientResult> { let map = self.0.lock().await; let Some(stage) = map.get(L1BatchNumber(number.0)) else { return Ok(None); }; - Ok(Some(mock_block_details(number.0, stage))) + Ok(Some(mock_batch_details(number.0, stage))) } } @@ -202,6 +206,7 @@ fn mock_change(number: L1BatchNumber) -> BatchStatusChange { number, l1_tx_hash: H256::zero(), happened_at: DateTime::default(), + sl_chain_id: Some(SLChainId(0)), } } diff --git a/core/node/node_sync/src/metrics.rs b/core/node/node_sync/src/metrics.rs index 805c6f913df2..02ac1b3837af 100644 --- a/core/node/node_sync/src/metrics.rs +++ b/core/node/node_sync/src/metrics.rs @@ -8,10 +8,7 @@ use zksync_types::aggregated_operations::AggregatedActionType; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EncodeLabelValue, EncodeLabelSet)] #[metrics(label = "stage", rename_all = "snake_case")] pub(super) enum FetchStage { - // uses legacy naming for L2 blocks for compatibility reasons - #[metrics(name = "get_miniblock_range")] - GetL2BlockRange, - GetBlockDetails, + GetL1BatchDetails, } #[derive( diff --git a/core/node/node_sync/src/tree_data_fetcher/mod.rs b/core/node/node_sync/src/tree_data_fetcher/mod.rs index 52037dac4edc..9f8ac18c39bd 100644 --- a/core/node/node_sync/src/tree_data_fetcher/mod.rs +++ b/core/node/node_sync/src/tree_data_fetcher/mod.rs @@ -11,7 +11,7 @@ use zksync_dal::{Connection, ConnectionPool, Core, CoreDal, DalError}; use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_types::{ block::{L1BatchTreeData, L2BlockHeader}, - Address, L1BatchNumber, + Address, L1BatchNumber, L2ChainId, }; use zksync_web3_decl::{ client::{DynClient, L1, L2}, @@ -127,10 +127,12 @@ impl TreeDataFetcher { /// Attempts to fetch root hashes from L1 (namely, `BlockCommit` events emitted by the diamond proxy) if possible. /// The main node will still be used as a fallback in case communicating with L1 fails, or for newer batches, /// which may not be committed on L1. - pub fn with_l1_data( + pub async fn with_l1_data( mut self, - eth_client: Box>, - diamond_proxy_address: Address, + l1_client: Box>, + l1_diamond_proxy_addr: Address, + gateway_client: Option>>, + l2_chain_id: L2ChainId, ) -> anyhow::Result { anyhow::ensure!( self.diamond_proxy_address.is_none(), @@ -138,11 +140,15 @@ impl TreeDataFetcher { ); let l1_provider = L1DataProvider::new( - eth_client.for_component("tree_data_fetcher"), - diamond_proxy_address, - )?; + l1_client.for_component("tree_data_fetcher"), + l1_diamond_proxy_addr, + gateway_client.map(|c| c.for_component("tree_data_fetcher")), + self.pool.clone(), + l2_chain_id, + ) + .await?; self.data_provider.set_l1(l1_provider); - self.diamond_proxy_address = Some(diamond_proxy_address); + self.diamond_proxy_address = Some(l1_diamond_proxy_addr); Ok(self) } diff --git a/core/node/node_sync/src/tree_data_fetcher/provider/mod.rs b/core/node/node_sync/src/tree_data_fetcher/provider/mod.rs index e4f68cade6a4..432808422632 100644 --- a/core/node/node_sync/src/tree_data_fetcher/provider/mod.rs +++ b/core/node/node_sync/src/tree_data_fetcher/provider/mod.rs @@ -2,8 +2,13 @@ use std::fmt; use anyhow::Context; use async_trait::async_trait; -use zksync_eth_client::EthInterface; -use zksync_types::{block::L2BlockHeader, web3, Address, L1BatchNumber, H256, U256, U64}; +use zksync_contracts::bridgehub_contract; +use zksync_dal::{ConnectionPool, Core, CoreDal}; +use zksync_eth_client::{CallFunctionArgs, EthInterface}; +use zksync_system_constants::L2_BRIDGEHUB_ADDRESS; +use zksync_types::{ + block::L2BlockHeader, web3, Address, L1BatchNumber, L2ChainId, SLChainId, H256, U256, U64, +}; use zksync_web3_decl::{ client::{DynClient, L1, L2}, error::{ClientRpcContext, EnrichedClientError, EnrichedClientResult}, @@ -13,7 +18,7 @@ use zksync_web3_decl::{ use super::{ metrics::{ProcessingStage, TreeDataProviderSource, METRICS}, - TreeDataFetcherResult, + TreeDataFetcherError, TreeDataFetcherResult, }; #[cfg(test)] @@ -89,6 +94,14 @@ struct PastL1BatchInfo { number: L1BatchNumber, l1_commit_block_number: U64, l1_commit_block_timestamp: U256, + chain_id: SLChainId, +} + +#[derive(Debug)] +struct SLChainAccess { + client: Box>, + chain_id: SLChainId, + diamond_proxy_addr: Address, } /// Provider of tree data loading it from L1 `BlockCommit` events emitted by the diamond proxy contract. @@ -103,10 +116,11 @@ struct PastL1BatchInfo { /// (provided it's not too far behind the seal timestamp of the batch). #[derive(Debug)] pub(super) struct L1DataProvider { - eth_client: Box>, - diamond_proxy_address: Address, + l1_chain_data: SLChainAccess, + gateway_chain_data: Option, block_commit_signature: H256, past_l1_batch: Option, + pool: ConnectionPool, } impl L1DataProvider { @@ -116,19 +130,52 @@ impl L1DataProvider { /// `L1_BLOCK_ACCURACY`, but not large enough to trigger request limiting on the L1 RPC provider. const L1_BLOCK_RANGE: U64 = U64([20_000]); - pub fn new( - eth_client: Box>, - diamond_proxy_address: Address, + pub async fn new( + l1_client: Box>, + l1_diamond_proxy_addr: Address, + gateway_client: Option>>, + pool: ConnectionPool, + l2_chain_id: L2ChainId, ) -> anyhow::Result { + let l1_chain_id = l1_client.fetch_chain_id().await?; + let l1_chain_data = SLChainAccess { + client: l1_client, + chain_id: l1_chain_id, + diamond_proxy_addr: l1_diamond_proxy_addr, + }; + let gateway_chain_data = if let Some(client) = gateway_client { + let contract = bridgehub_contract(); + let function_name = if contract.function("getZKChain").is_ok() { + "getZKChain" + } else { + "getHyperchain" + }; + let gateway_diamond_proxy = CallFunctionArgs::new( + function_name, + zksync_types::ethabi::Token::Uint(l2_chain_id.as_u64().into()), + ) + .for_contract(L2_BRIDGEHUB_ADDRESS, &contract) + .call(&client) + .await?; + let chain_id = client.fetch_chain_id().await?; + Some(SLChainAccess { + client, + chain_id, + diamond_proxy_addr: gateway_diamond_proxy, + }) + } else { + None + }; let block_commit_signature = zksync_contracts::hyperchain_contract() .event("BlockCommit") .context("missing `BlockCommit` event")? .signature(); Ok(Self { - eth_client, - diamond_proxy_address, + l1_chain_data, + gateway_chain_data, block_commit_signature, past_l1_batch: None, + pool, }) } @@ -186,6 +233,16 @@ impl L1DataProvider { })?; Ok((number, block.timestamp)) } + + fn chain_data_by_id(&self, searched_chain_id: SLChainId) -> Option<&SLChainAccess> { + if searched_chain_id == self.l1_chain_data.chain_id { + Some(&self.l1_chain_data) + } else if Some(searched_chain_id) == self.gateway_chain_data.as_ref().map(|d| d.chain_id) { + self.gateway_chain_data.as_ref() + } else { + None + } + } } #[async_trait] @@ -195,12 +252,36 @@ impl TreeDataProvider for L1DataProvider { number: L1BatchNumber, last_l2_block: &L2BlockHeader, ) -> TreeDataProviderResult { + let sl_chain_id = self + .pool + .connection_tagged("tree_data_fetcher") + .await + .map_err(|err| TreeDataFetcherError::Internal(err.into()))? + .eth_sender_dal() + .get_batch_commit_chain_id(number) + .await + .map_err(|err| TreeDataFetcherError::Internal(err.into()))?; + let chain_data = match sl_chain_id { + Some(chain_id) => { + let Some(chain_data) = self.chain_data_by_id(chain_id) else { + return Err(TreeDataFetcherError::Internal(anyhow::anyhow!( + "failed to find client for chain id {chain_id}" + ))); + }; + chain_data + } + None => &self.l1_chain_data, + }; + let l1_batch_seal_timestamp = last_l2_block.timestamp; let from_block = self.past_l1_batch.and_then(|info| { assert!( info.number < number, "`batch_details()` must be called with monotonically increasing numbers" ); + if info.chain_id != chain_data.chain_id { + return None; + } let threshold_timestamp = info.l1_commit_block_timestamp + Self::L1_BLOCK_RANGE.as_u64() / 2; if U256::from(l1_batch_seal_timestamp) > threshold_timestamp { tracing::debug!( @@ -219,7 +300,7 @@ impl TreeDataProvider for L1DataProvider { Some(number) => number, None => { let (approximate_block, steps) = - Self::guess_l1_commit_block_number(&self.eth_client, l1_batch_seal_timestamp) + Self::guess_l1_commit_block_number(&chain_data.client, l1_batch_seal_timestamp) .await?; tracing::debug!( number = number.0, @@ -235,7 +316,7 @@ impl TreeDataProvider for L1DataProvider { let number_topic = H256::from_low_u64_be(number.0.into()); let filter = web3::FilterBuilder::default() - .address(vec![self.diamond_proxy_address]) + .address(vec![chain_data.diamond_proxy_addr]) .from_block(web3::BlockNumber::Number(from_block)) .to_block(web3::BlockNumber::Number(from_block + Self::L1_BLOCK_RANGE)) .topics( @@ -245,7 +326,7 @@ impl TreeDataProvider for L1DataProvider { None, ) .build(); - let mut logs = self.eth_client.logs(&filter).await?; + let mut logs = chain_data.client.logs(&filter).await?; logs.retain(|log| !log.is_removed() && log.block_number.is_some()); match logs.as_slice() { @@ -266,7 +347,10 @@ impl TreeDataProvider for L1DataProvider { {diff} block(s) after the `from` block from the filter" ); - let l1_commit_block = self.eth_client.block(l1_commit_block_number.into()).await?; + let l1_commit_block = chain_data + .client + .block(l1_commit_block_number.into()) + .await?; let l1_commit_block = l1_commit_block.ok_or_else(|| { let err = "Block disappeared from L1 RPC provider"; EnrichedClientError::new(ClientError::Custom(err.into()), "batch_details") @@ -276,6 +360,7 @@ impl TreeDataProvider for L1DataProvider { number, l1_commit_block_number, l1_commit_block_timestamp: l1_commit_block.timestamp, + chain_id: chain_data.chain_id, }); Ok(Ok(root_hash)) } diff --git a/core/node/node_sync/src/tree_data_fetcher/provider/tests.rs b/core/node/node_sync/src/tree_data_fetcher/provider/tests.rs index 09fa16f16077..75bf96092335 100644 --- a/core/node/node_sync/src/tree_data_fetcher/provider/tests.rs +++ b/core/node/node_sync/src/tree_data_fetcher/provider/tests.rs @@ -3,10 +3,15 @@ use assert_matches::assert_matches; use once_cell::sync::Lazy; use test_casing::test_casing; -use zksync_dal::{ConnectionPool, Core}; +use zksync_dal::{Connection, ConnectionPool, Core}; use zksync_node_genesis::{insert_genesis_batch, GenesisParams}; use zksync_node_test_utils::create_l2_block; -use zksync_types::{api, L2BlockNumber, ProtocolVersionId}; +use zksync_types::{ + aggregated_operations::AggregatedActionType, + api, ethabi, + web3::{BlockId, CallRequest}, + L2BlockNumber, ProtocolVersionId, +}; use zksync_web3_decl::client::MockClient; use super::*; @@ -14,7 +19,11 @@ use crate::tree_data_fetcher::tests::{ get_last_l2_block, seal_l1_batch_with_timestamp, MockMainNodeClient, }; -const DIAMOND_PROXY_ADDRESS: Address = Address::repeat_byte(0x22); +const L1_DIAMOND_PROXY_ADDRESS: Address = Address::repeat_byte(0x22); +const GATEWAY_DIAMOND_PROXY_ADDRESS: Address = Address::repeat_byte(0x33); +const L1_CHAIN_ID: u64 = 9; +const GATEWAY_CHAIN_ID: u64 = 505; +const ERA_CHAIN_ID: u64 = 270; static BLOCK_COMMIT_SIGNATURE: Lazy = Lazy::new(|| { zksync_contracts::hyperchain_contract() @@ -33,10 +42,13 @@ fn mock_block_details_base(number: u32, hash: Option) -> api::BlockDetails status: api::BlockStatus::Sealed, commit_tx_hash: None, committed_at: None, + commit_chain_id: None, prove_tx_hash: None, proven_at: None, + prove_chain_id: None, execute_tx_hash: None, executed_at: None, + execute_chain_id: None, l1_gas_price: 10, l2_fair_gas_price: 100, fair_pubdata_price: None, @@ -117,53 +129,66 @@ async fn rpc_data_provider_with_block_hash_divergence() { assert_matches!(output, Err(MissingData::PossibleReorg)); } +#[derive(Debug)] struct EthereumParameters { block_number: U64, - // L1 block numbers in which L1 batches are committed starting from L1 batch #1 - l1_blocks_for_commits: Vec, + // L1 batch numbers and SL block numbers in which they are committed. + batches_and_sl_blocks_for_commits: Vec<(L1BatchNumber, U64)>, + chain_id: SLChainId, + diamond_proxy: Address, } impl EthereumParameters { - fn new(block_number: u64) -> Self { + fn new_l1(block_number: u64) -> Self { + Self::new(block_number, L1_CHAIN_ID, L1_DIAMOND_PROXY_ADDRESS) + } + + fn new(block_number: u64, chain_id: u64, diamond_proxy: Address) -> Self { Self { block_number: block_number.into(), - l1_blocks_for_commits: vec![], + batches_and_sl_blocks_for_commits: vec![], + chain_id: SLChainId(chain_id), + diamond_proxy, } } - fn push_commit(&mut self, l1_block_number: u64) { + fn push_commit(&mut self, l1_batch_number: L1BatchNumber, l1_block_number: u64) { assert!(l1_block_number <= self.block_number.as_u64()); let l1_block_number = U64::from(l1_block_number); - let last_commit = self.l1_blocks_for_commits.last().copied(); - let is_increasing = last_commit.map_or(true, |last_number| last_number <= l1_block_number); - assert!(is_increasing, "Invalid L1 block number for commit"); + let last_commit = self.batches_and_sl_blocks_for_commits.last().copied(); + let is_increasing = last_commit.map_or(true, |last| { + last.0 <= l1_batch_number && last.1 <= l1_block_number + }); + assert!( + is_increasing, + "Invalid batch number or L1 block number for commit" + ); - self.l1_blocks_for_commits.push(l1_block_number); + self.batches_and_sl_blocks_for_commits + .push((l1_batch_number, l1_block_number)); } fn client(&self) -> MockClient { - let logs = self - .l1_blocks_for_commits - .iter() - .enumerate() - .map(|(i, &l1_block_number)| { - let l1_batch_number = H256::from_low_u64_be(i as u64 + 1); - let root_hash = H256::repeat_byte(i as u8 + 1); + let logs = self.batches_and_sl_blocks_for_commits.iter().map( + |&(l1_batch_number, l1_block_number)| { + let l1_batch_number_topic = H256::from_low_u64_be(l1_batch_number.0 as u64); + let root_hash = H256::repeat_byte(l1_batch_number.0 as u8); web3::Log { - address: DIAMOND_PROXY_ADDRESS, + address: self.diamond_proxy, topics: vec![ *BLOCK_COMMIT_SIGNATURE, - l1_batch_number, + l1_batch_number_topic, root_hash, H256::zero(), // commitment hash; not used ], block_number: Some(l1_block_number), ..web3::Log::default() } - }); + }, + ); let logs: Vec<_> = logs.collect(); - mock_l1_client(self.block_number, logs) + mock_l1_client(self.block_number, logs, self.chain_id) } } @@ -201,7 +226,7 @@ fn filter_logs(logs: &[web3::Log], filter: web3::Filter) -> Vec { filtered_logs.cloned().collect() } -fn mock_l1_client(block_number: U64, logs: Vec) -> MockClient { +fn mock_l1_client(block_number: U64, logs: Vec, chain_id: SLChainId) -> MockClient { MockClient::builder(L1::default()) .method("eth_blockNumber", move || Ok(block_number)) .method( @@ -228,12 +253,49 @@ fn mock_l1_client(block_number: U64, logs: Vec) -> MockClient { .method("eth_getLogs", move |filter: web3::Filter| { Ok(filter_logs(&logs, filter)) }) + .method("eth_chainId", move || Ok(U64::from(chain_id.0))) + .method("eth_call", move |req: CallRequest, _block_id: BlockId| { + let contract = bridgehub_contract(); + let function_name = if contract.function("getZKChain").is_ok() { + "getZKChain" + } else { + "getHyperchain" + }; + let expected_input = contract + .function(function_name) + .unwrap() + .encode_input(&[ethabi::Token::Uint(ERA_CHAIN_ID.into())]) + .unwrap(); + assert_eq!(req.to, Some(L2_BRIDGEHUB_ADDRESS)); + assert_eq!(req.data, Some(expected_input.into())); + Ok(web3::Bytes(ethabi::encode(&[ethabi::Token::Address( + GATEWAY_DIAMOND_PROXY_ADDRESS, + )]))) + }) .build() } +pub(super) async fn insert_l1_batch_commit_chain_id( + storage: &mut Connection<'_, Core>, + number: L1BatchNumber, + chain_id: SLChainId, +) { + storage + .eth_sender_dal() + .insert_bogus_confirmed_eth_tx( + number, + AggregatedActionType::Commit, + H256::from_low_u64_be(number.0 as u64), + chrono::Utc::now(), + Some(chain_id), + ) + .await + .unwrap(); +} + #[tokio::test] async fn guessing_l1_commit_block_number() { - let eth_params = EthereumParameters::new(100_000); + let eth_params = EthereumParameters::new_l1(100_000); let eth_client = eth_params.client(); for timestamp in [0, 100, 1_000, 5_000, 10_000, 100_000] { @@ -251,6 +313,21 @@ async fn guessing_l1_commit_block_number() { } } +async fn create_l1_data_provider( + l1_client: Box>, + pool: ConnectionPool, +) -> L1DataProvider { + L1DataProvider::new( + l1_client, + L1_DIAMOND_PROXY_ADDRESS, + None, + pool, + L2ChainId::new(ERA_CHAIN_ID).unwrap(), + ) + .await + .unwrap() +} + async fn test_using_l1_data_provider(l1_batch_timestamps: &[u64]) { let pool = ConnectionPool::::test_pool().await; let mut storage = pool.connection().await.unwrap(); @@ -258,15 +335,14 @@ async fn test_using_l1_data_provider(l1_batch_timestamps: &[u64]) { .await .unwrap(); - let mut eth_params = EthereumParameters::new(1_000_000); + let mut eth_params = EthereumParameters::new_l1(1_000_000); for (number, &ts) in l1_batch_timestamps.iter().enumerate() { let number = L1BatchNumber(number as u32 + 1); seal_l1_batch_with_timestamp(&mut storage, number, ts).await; - eth_params.push_commit(ts + 1_000); // have a reasonable small diff between batch generation and commitment + eth_params.push_commit(number, ts + 1_000); // have a reasonable small diff between batch generation and commitment } - let mut provider = - L1DataProvider::new(Box::new(eth_params.client()), DIAMOND_PROXY_ADDRESS).unwrap(); + let mut provider = create_l1_data_provider(Box::new(eth_params.client()), pool.clone()).await; for i in 0..l1_batch_timestamps.len() { let number = L1BatchNumber(i as u32 + 1); let root_hash = provider @@ -278,7 +354,7 @@ async fn test_using_l1_data_provider(l1_batch_timestamps: &[u64]) { let past_l1_batch = provider.past_l1_batch.unwrap(); assert_eq!(past_l1_batch.number, number); - let expected_l1_block_number = eth_params.l1_blocks_for_commits[i]; + let expected_l1_block_number = eth_params.batches_and_sl_blocks_for_commits[i].1; assert_eq!( past_l1_batch.l1_commit_block_number, expected_l1_block_number @@ -297,13 +373,78 @@ async fn using_l1_data_provider(batch_spacing: u64) { test_using_l1_data_provider(&l1_batch_timestamps).await; } +#[tokio::test] +async fn using_different_settlement_layers() { + let pool = ConnectionPool::::test_pool().await; + let mut storage = pool.connection().await.unwrap(); + insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); + + let l1_eth_params = EthereumParameters::new_l1(1_000_000); + let gateway_eth_params = + EthereumParameters::new(1_000_000, GATEWAY_CHAIN_ID, GATEWAY_DIAMOND_PROXY_ADDRESS); + let mut params_array = [l1_eth_params, gateway_eth_params]; + + // (index of sl: 0 for l1, 1 for gw; sl block number) + let batch_commit_info = [ + (0, 50_000), + (0, 50_500), + (1, 30_000), + (1, 32_000), + (0, 51_000), + (1, 60_000), + ]; + let chain_ids = [SLChainId(L1_CHAIN_ID), SLChainId(GATEWAY_CHAIN_ID)]; + for (i, &(sl_idx, ts)) in batch_commit_info.iter().enumerate() { + let number = L1BatchNumber(i as u32 + 1); + seal_l1_batch_with_timestamp(&mut storage, number, ts).await; + insert_l1_batch_commit_chain_id(&mut storage, number, chain_ids[sl_idx]).await; + params_array[sl_idx].push_commit(number, ts + 1_000); // have a reasonable small diff between batch generation and commitment + } + + let mut provider = L1DataProvider::new( + Box::new(params_array[0].client()), + L1_DIAMOND_PROXY_ADDRESS, + Some(Box::new(params_array[1].client())), + pool, + L2ChainId::new(ERA_CHAIN_ID).unwrap(), + ) + .await + .unwrap(); + for i in 0..batch_commit_info.len() { + let number = L1BatchNumber(i as u32 + 1); + let root_hash = provider + .batch_details(number, &get_last_l2_block(&mut storage, number).await) + .await + .unwrap() + .expect(&format!("no root hash for batch #{number}")); + assert_eq!(root_hash, H256::repeat_byte(number.0 as u8)); + + let past_l1_batch = provider.past_l1_batch.unwrap(); + assert_eq!(past_l1_batch.number, number); + let expected_l1_block_number = batch_commit_info[i].1 + 1_000; + assert_eq!( + past_l1_batch.l1_commit_block_number, + expected_l1_block_number.into() + ); + assert_eq!( + past_l1_batch.l1_commit_block_timestamp, + expected_l1_block_number.into() + ); + let expected_chain_id = chain_ids[batch_commit_info[i].0]; + assert_eq!(past_l1_batch.chain_id, expected_chain_id); + } +} + #[tokio::test] async fn detecting_reorg_in_l1_data_provider() { let l1_batch_number = H256::from_low_u64_be(1); + let pool = ConnectionPool::::test_pool().await; // Generate two logs for the same L1 batch #1 let logs = vec![ web3::Log { - address: DIAMOND_PROXY_ADDRESS, + address: L1_DIAMOND_PROXY_ADDRESS, topics: vec![ *BLOCK_COMMIT_SIGNATURE, l1_batch_number, @@ -314,7 +455,7 @@ async fn detecting_reorg_in_l1_data_provider() { ..web3::Log::default() }, web3::Log { - address: DIAMOND_PROXY_ADDRESS, + address: L1_DIAMOND_PROXY_ADDRESS, topics: vec![ *BLOCK_COMMIT_SIGNATURE, l1_batch_number, @@ -325,9 +466,9 @@ async fn detecting_reorg_in_l1_data_provider() { ..web3::Log::default() }, ]; - let l1_client = mock_l1_client(200.into(), logs); + let l1_client = mock_l1_client(200.into(), logs, SLChainId(9)); - let mut provider = L1DataProvider::new(Box::new(l1_client), DIAMOND_PROXY_ADDRESS).unwrap(); + let mut provider = create_l1_data_provider(Box::new(l1_client), pool.clone()).await; let output = provider .batch_details(L1BatchNumber(1), &create_l2_block(1)) .await @@ -343,16 +484,15 @@ async fn combined_data_provider_errors() { .await .unwrap(); - let mut eth_params = EthereumParameters::new(1_000_000); + let mut eth_params = EthereumParameters::new_l1(1_000_000); seal_l1_batch_with_timestamp(&mut storage, L1BatchNumber(1), 50_000).await; - eth_params.push_commit(51_000); + eth_params.push_commit(L1BatchNumber(1), 51_000); seal_l1_batch_with_timestamp(&mut storage, L1BatchNumber(2), 52_000).await; let mut main_node_client = MockMainNodeClient::default(); main_node_client.insert_batch(L1BatchNumber(2), H256::repeat_byte(2)); let mut provider = CombinedDataProvider::new(main_node_client); - let l1_provider = - L1DataProvider::new(Box::new(eth_params.client()), DIAMOND_PROXY_ADDRESS).unwrap(); + let l1_provider = create_l1_data_provider(Box::new(eth_params.client()), pool.clone()).await; provider.set_l1(l1_provider); // L1 batch #1 should be obtained from L1 diff --git a/etc/env/file_based/external_node.yaml b/etc/env/file_based/external_node.yaml index e97b04fb3900..675baf739686 100644 --- a/etc/env/file_based/external_node.yaml +++ b/etc/env/file_based/external_node.yaml @@ -4,5 +4,3 @@ l1_batch_commit_data_generator_mode: Rollup main_node_url: http://localhost:3050 main_node_rate_limit_rps: 1000 - -gateway_url: http://localhost:3052 diff --git a/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs b/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs index d714a0f8e843..03a586a0652a 100644 --- a/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs +++ b/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs @@ -74,7 +74,6 @@ fn prepare_configs( .http_url, )?, main_node_rate_limit_rps: None, - gateway_url: None, bridge_addresses_refresh_interval_sec: None, }; let mut general_en = general.clone(); @@ -112,6 +111,7 @@ fn prepare_configs( }), l1: Some(L1Secrets { l1_rpc_url: SensitiveUrl::from_str(&args.l1_rpc_url).context("l1_rpc_url")?, + gateway_rpc_url: None, }), data_availability: None, }; From aa9575fccbbc941f416d597256442afa974efd0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Fran=C3=A7a?= Date: Wed, 27 Nov 2024 19:52:22 +0000 Subject: [PATCH 10/35] feat(consensus): Update consensus dependencies (#3339) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Update consensus dependencies to the latest version. This effectively deploys ChonkyBFT. --- Cargo.lock | 48 +- Cargo.toml | 20 +- prover/Cargo.lock | 1981 +++++++++++++++++++++++----------------- zkstack_cli/Cargo.lock | 823 +++++++++++------ zkstack_cli/Cargo.toml | 10 +- 5 files changed, 1718 insertions(+), 1164 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f5d23edcf3e1..f9e754902f61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1040,7 +1040,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.10.5", + "itertools 0.12.1", "lazy_static", "lazycell", "log", @@ -4920,7 +4920,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -6588,7 +6588,7 @@ checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", - "itertools 0.10.5", + "itertools 0.12.1", "log", "multimap", "once_cell", @@ -6608,7 +6608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.12.1", "proc-macro2 1.0.89", "quote 1.0.37", "syn 2.0.85", @@ -11240,9 +11240,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035269d811b3770debca372141ab64cad067dce8e58cb39a48cb7617d30c626b" +checksum = "4c24c9a056499823227503dd9e5fb3037d93bcc3ae9b06c1ac0a47334c6283af" dependencies = [ "anyhow", "once_cell", @@ -11276,9 +11276,9 @@ dependencies = [ [[package]] name = "zksync_consensus_bft" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8001633dee671134cf572175a6c4f817904ce5f8d92e9b51f49891c5184a831" +checksum = "e9e7ae72c257d6a4956ecb1b9d77eb082b0b31e9f47a7860d107509fb55c474d" dependencies = [ "anyhow", "async-trait", @@ -11298,9 +11298,9 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49e38d1b5ed28c66e785caff53ea4863375555d818aafa03290397192dd3e665" +checksum = "5da303b01f24283e93f80f361bf62c3df4a761d061c8b38b4faebeebf26362fc" dependencies = [ "anyhow", "blst", @@ -11319,9 +11319,9 @@ dependencies = [ [[package]] name = "zksync_consensus_executor" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061546668dd779ecb08302d2c84a6419e0093ad42aaa279bf20a8fa2ffda1be4" +checksum = "a33cfae30ebaaa817394718fe0858dfa7c0abfa2ed800ea283c407560aac2465" dependencies = [ "anyhow", "async-trait", @@ -11341,9 +11341,9 @@ dependencies = [ [[package]] name = "zksync_consensus_network" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9789b5be26d20511bd7930bd9916d91122ff6cb09a28898563152a52f9f5eb" +checksum = "e0129eab96f940ce24f975a27ef9408592d64da7cff51153755dedefbcf58a73" dependencies = [ "anyhow", "async-trait", @@ -11378,9 +11378,9 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e49fbd4e69b276058f3dfc06cf6ada0e8caa6ed826e81289e4d596da95a0f17a" +checksum = "50f07db2a8ec2d2cda5cb4c5ac408101e81c8fa5d95c9f3302829dafae78d11c" dependencies = [ "anyhow", "bit-vec", @@ -11400,9 +11400,9 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b2aab4ed18b13cd584f4edcc2546c8da82f89ac62e525063e12935ff28c9be" +checksum = "57a42f57cc5afcee634cbd336e9e6ea891d0171352d7c0bc7d6e17f6c8faa554" dependencies = [ "anyhow", "async-trait", @@ -11420,9 +11420,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bac8f471b182d4fa3d40cf158aac3624fe636a1ff0b4cf3fe26a0e20c68a42" +checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" dependencies = [ "anyhow", "rand 0.8.5", @@ -12483,9 +12483,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd55c64f54cb10967a435422f66ff5880ae14a232b245517c7ce38da32e0cab" +checksum = "f05755c38b134b409736008bfdfd0fdb42bfa061947be93be4c78069aa10c9b3" dependencies = [ "anyhow", "bit-vec", @@ -12504,9 +12504,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4121952bcaf711005dd554612fc6e2de9b30cb58088508df87f1d38046ce8ac8" +checksum = "64c3930a73ca667780be6dcd94e469d40a93fa52f4654c9ab732991b62238cb5" dependencies = [ "anyhow", "heck 0.5.0", diff --git a/Cargo.toml b/Cargo.toml index 88173e07af4e..60099874cf39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -246,16 +246,16 @@ zk_evm_1_5_0 = { package = "zk_evm", version = "=0.150.7" } zksync_vm2 = { git = "https://github.com/matter-labs/vm2.git", rev = "457d8a7eea9093af9440662e33e598c13ba41633" } # Consensus dependencies. -zksync_concurrency = "=0.5.0" -zksync_consensus_bft = "=0.5.0" -zksync_consensus_crypto = "=0.5.0" -zksync_consensus_executor = "=0.5.0" -zksync_consensus_network = "=0.5.0" -zksync_consensus_roles = "=0.5.0" -zksync_consensus_storage = "=0.5.0" -zksync_consensus_utils = "=0.5.0" -zksync_protobuf = "=0.5.0" -zksync_protobuf_build = "=0.5.0" +zksync_concurrency = "=0.6.0" +zksync_consensus_bft = "=0.6.0" +zksync_consensus_crypto = "=0.6.0" +zksync_consensus_executor = "=0.6.0" +zksync_consensus_network = "=0.6.0" +zksync_consensus_roles = "=0.6.0" +zksync_consensus_storage = "=0.6.0" +zksync_consensus_utils = "=0.6.0" +zksync_protobuf = "=0.6.0" +zksync_protobuf_build = "=0.6.0" # "Local" dependencies zksync_multivm = { version = "0.1.0", path = "core/lib/multivm" } diff --git a/prover/Cargo.lock b/prover/Cargo.lock index 559304d653e7..453a768c0678 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -15,18 +15,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "android-tzdata" @@ -93,9 +93,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -108,43 +108,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "arr_macro" @@ -163,15 +163,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0609c78bd572f4edc74310dfb63a01f5609d53fa8b4dd7c4d98aef3b3e8d72d1" dependencies = [ "proc-macro-hack", - "quote 1.0.36", + "quote 1.0.37", "syn 1.0.109", ] [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -190,19 +190,20 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "assert_cmd" -version = "2.0.14" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed72493ac66d5804837f480ab3766c72bdfab91a65e565fc54fa9e42db0073a8" +checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" dependencies = [ "anstyle", "bstr", "doc-comment", + "libc", "predicates", "predicates-core", "predicates-tree", @@ -223,9 +224,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -234,24 +235,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -282,27 +283,26 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-lc-rs" -version = "1.8.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae74d9bd0a7530e8afd1770739ad34b36838829d6ad61818f9230f683f5ad77" +checksum = "f47bb8cc16b669d267eeccf585aea077d0882f4777b1c1f740217885d6e6e5a3" dependencies = [ "aws-lc-sys", - "mirai-annotations", "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.20.1" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0e249228c6ad2d240c2dc94b714d711629d52bad946075d8e9b2f5391f0703" +checksum = "a2101df3813227bbaaaa0b04cd61c534c7954b22bd68d399b440be937dc63ff7" dependencies = [ "bindgen", "cc", @@ -315,18 +315,18 @@ dependencies = [ [[package]] name = "axum" -version = "0.7.5" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "itoa", "matchit", @@ -339,9 +339,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", - "tower 0.4.13", + "tower 0.5.1", "tower-layer", "tower-service", "tracing", @@ -349,20 +349,20 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -381,17 +381,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -441,13 +441,13 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d712318a27c7150326677b321a5fa91b55f6d9034ffd67f20319e147d40cee" +checksum = "8f850665a0385e070b64c38d2354e6c104c8479c59868d1e48a0c13ee2c7a1c1" dependencies = [ "autocfg", "libm", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-integer", "num-traits", ] @@ -463,9 +463,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.4" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ "bitflags 2.6.0", "cexpr", @@ -475,12 +475,12 @@ dependencies = [ "lazycell", "log", "prettyplease", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "regex", "rustc-hash", "shlex", - "syn 2.0.66", + "syn 2.0.89", "which", ] @@ -623,7 +623,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ec2f007ff8f90cc459f03e9f30ca1065440170f013c868823646e2e48d0234" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bincode", "blake2 0.10.6", "const_format", @@ -665,9 +665,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.3.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive", "cfg_aliases", @@ -675,26 +675,25 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.3.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", - "proc-macro-crate 2.0.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", - "syn_derive", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "bstr" -version = "1.9.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" dependencies = [ "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "serde", ] @@ -727,8 +726,8 @@ version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -740,15 +739,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "cc" -version = "1.1.14" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", @@ -778,9 +777,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" @@ -794,7 +793,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -813,38 +812,38 @@ dependencies = [ [[package]] name = "circuit_encodings" -version = "0.140.1" +version = "0.140.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8438d7af992b730143b679e2c6938cb9e0193897ecaf668c59189af8ac296b7" +checksum = "cf6b7cc842eadb4c250cdc6a8bc1dd97624d9f08bbe54db3e11fb23c3a72be07" dependencies = [ "derivative", "serde", "zk_evm 0.140.0", - "zkevm_circuits 0.140.2", + "zkevm_circuits 0.140.3", ] [[package]] name = "circuit_encodings" -version = "0.141.1" +version = "0.141.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a2fcc80e97682104f355dd819cb4972583828a6c0f65ec26889a78a84b0c56" +checksum = "7898ffbf3cd413576b4b674fe1545a35488c67eb16bd5a4148425e42c2a2b65b" dependencies = [ "derivative", "serde", "zk_evm 0.141.0", - "zkevm_circuits 0.141.1", + "zkevm_circuits 0.141.2", ] [[package]] name = "circuit_encodings" -version = "0.142.1" +version = "0.142.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94be7afb5ace6024d6e3c105d521b4b9b563bac14a92c2f59c4683e9169a25d8" +checksum = "8364ecafcc4b2c896023f8d3af952c52a500aa55f14fd268bb5d9ab07f837369" dependencies = [ "derivative", "serde", "zk_evm 0.141.0", - "zkevm_circuits 0.141.1", + "zkevm_circuits 0.141.2", ] [[package]] @@ -878,7 +877,7 @@ version = "0.140.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa5f22311ce609d852d7d9f4943535ea4610aeb785129ae6ff83d5201c4fb387" dependencies = [ - "circuit_encodings 0.140.1", + "circuit_encodings 0.140.3", "derivative", "rayon", "serde", @@ -892,7 +891,7 @@ version = "0.141.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c47c71d6ba83a8beb0af13af70beffd627f5497caf3d44c6f96363e788b07ea" dependencies = [ - "circuit_encodings 0.141.1", + "circuit_encodings 0.141.2", "derivative", "rayon", "serde", @@ -906,7 +905,7 @@ version = "0.142.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e264723359e6a1aad98110bdccf1ae3ad596e93e7d31da9e40f6adc07e4add54" dependencies = [ - "circuit_encodings 0.142.1", + "circuit_encodings 0.142.2", "derivative", "rayon", "serde", @@ -955,9 +954,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ "clap_builder", "clap_derive", @@ -965,9 +964,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", @@ -977,27 +976,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" dependencies = [ "cc", ] @@ -1013,9 +1012,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "colored" @@ -1088,22 +1087,22 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "unicode-xid 0.2.4", + "proc-macro2 1.0.92", + "quote 1.0.37", + "unicode-xid 0.2.6", ] [[package]] @@ -1131,17 +1130,27 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -1276,36 +1285,24 @@ dependencies = [ "subtle", ] -[[package]] -name = "cs_derive" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24cf603ca4299c6e20e644da88897f7b81d688510f4887e818b0bfe0b792081b" -dependencies = [ - "proc-macro-error", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 1.0.109", -] - [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ - "quote 1.0.36", - "syn 2.0.66", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "ctrlc" -version = "3.4.4" +version = "3.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" +checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" dependencies = [ "nix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1330,9 +1327,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -1363,8 +1360,8 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "strsim 0.10.0", "syn 1.0.109", ] @@ -1377,10 +1374,10 @@ checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -1390,7 +1387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core 0.13.4", - "quote 1.0.36", + "quote 1.0.37", "syn 1.0.109", ] @@ -1401,8 +1398,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", - "quote 1.0.36", - "syn 2.0.66", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -1461,8 +1458,8 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -1481,10 +1478,10 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", - "unicode-xid 0.2.4", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", + "unicode-xid 0.2.6", ] [[package]] @@ -1533,6 +1530,17 @@ dependencies = [ "subtle", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -1553,9 +1561,9 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1621,16 +1629,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" dependencies = [ "serde", ] @@ -1692,9 +1700,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -1714,9 +1722,9 @@ version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -1726,16 +1734,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", ] @@ -1755,9 +1763,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ "anstream", "anstyle", @@ -1888,9 +1896,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "ff" @@ -1956,9 +1964,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1975,9 +1983,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", @@ -2033,7 +2041,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "lazy_static", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-derive", "num-integer", "num-traits", @@ -2073,9 +2081,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2088,9 +2096,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2098,15 +2106,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2127,9 +2135,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-locks" @@ -2144,26 +2152,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -2177,9 +2185,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures 0.1.31", "futures-channel", @@ -2220,9 +2228,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -2288,7 +2296,7 @@ dependencies = [ "google-cloud-token", "home", "jsonwebtoken", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde", "serde_json", "thiserror", @@ -2304,7 +2312,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f945a208886a13d07636f38fb978da371d0abc3e34bad338124b9f8c135a8f" dependencies = [ - "reqwest 0.12.5", + "reqwest 0.12.9", "thiserror", "tokio", ] @@ -2329,7 +2337,7 @@ dependencies = [ "percent-encoding", "pkcs8 0.10.2", "regex", - "reqwest 0.12.5", + "reqwest 0.12.9", "reqwest-middleware", "ring", "serde", @@ -2385,7 +2393,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2394,9 +2402,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes", @@ -2404,7 +2412,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2444,6 +2452,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "hashlink" version = "0.9.1" @@ -2586,9 +2600,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -2603,15 +2617,15 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -2637,9 +2651,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.29" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -2661,16 +2675,16 @@ 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", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.7", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -2690,11 +2704,11 @@ dependencies = [ "futures-util", "headers", "http 1.1.0", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-rustls", "hyper-util", "pin-project-lite", - "rustls-native-certs", + "rustls-native-certs 0.7.3", "tokio", "tokio-rustls", "tower-service", @@ -2702,17 +2716,17 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "log", "rustls", - "rustls-native-certs", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", "tokio-rustls", @@ -2721,11 +2735,11 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "pin-project-lite", "tokio", @@ -2739,7 +2753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.29", + "hyper 0.14.31", "native-tls", "tokio", "tokio-native-tls", @@ -2753,7 +2767,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "native-tls", "tokio", @@ -2763,16 +2777,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.5.0", + "http-body 1.0.1", + "hyper 1.5.1", "pin-project-lite", "socket2", "tokio", @@ -2782,9 +2796,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2803,6 +2817,124 @@ 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 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -2811,12 +2943,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "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]] @@ -2848,13 +2991,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 1.0.85", - "quote 1.0.36", - "syn 1.0.109", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -2869,12 +3012,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -2891,18 +3034,18 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "ipnetwork" @@ -2915,9 +3058,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -2948,9 +3091,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 = "jemalloc-sys" @@ -2994,18 +3137,18 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -3102,7 +3245,7 @@ dependencies = [ "futures-timer", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "jsonrpsee-types", "pin-project", @@ -3124,8 +3267,8 @@ checksum = "2d90064e04fb9d7282b1c71044ea94d0bbc6eff5621c66f1a0bce9e9de7cf3ac" dependencies = [ "async-trait", "base64 0.22.1", - "http-body 1.0.0", - "hyper 1.5.0", + "http-body 1.0.1", + "hyper 1.5.1", "hyper-rustls", "hyper-util", "jsonrpsee-core", @@ -3148,10 +3291,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7895f186d5921065d96e16bd795e5ca89ac8356ec423fafc6e3d7cf8ec11aee4" dependencies = [ "heck 0.5.0", - "proc-macro-crate 3.1.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -3220,9 +3363,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa 0.16.9", @@ -3277,12 +3420,12 @@ dependencies = [ "bytes", "chrono", "either", - "futures 0.3.30", + "futures 0.3.31", "home", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-http-proxy", "hyper-rustls", "hyper-timeout", @@ -3292,7 +3435,7 @@ dependencies = [ "kube-core", "pem", "rustls", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.2.0", "secrecy 0.10.3", "serde", "serde_json", @@ -3330,10 +3473,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9364e04cc5e0482136c6ee8b7fb7551812da25802249f35b3def7aaa31e82ad" dependencies = [ "darling 0.20.10", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde_json", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -3348,7 +3491,7 @@ dependencies = [ "async-trait", "backoff", "educe", - "futures 0.3.30", + "futures 0.3.31", "hashbrown 0.14.5", "json-patch", "jsonptr", @@ -3381,25 +3524,25 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libsqlite3-sys" @@ -3418,6 +3561,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "local-ip-address" version = "0.5.7" @@ -3442,9 +3591,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "logos" @@ -3463,10 +3612,10 @@ checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" dependencies = [ "beef", "fnv", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "regex-syntax 0.6.29", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -3517,9 +3666,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miette" @@ -3539,9 +3688,9 @@ version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -3552,9 +3701,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -3568,30 +3717,25 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] -[[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - [[package]] name = "multimap" version = "0.10.0" @@ -3610,7 +3754,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -3634,17 +3778,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c168194d373b1e134786274020dae7fc5513d565ea2ebb9bc9ff17ffb69106d4" dependencies = [ "either", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde", "syn 1.0.109", ] [[package]] name = "nix" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3684,7 +3828,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-complex", "num-integer", "num-iter", @@ -3705,9 +3849,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -3794,7 +3938,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-integer", "num-traits", "serde", @@ -3831,11 +3975,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "num_enum_derive 0.7.2", + "num_enum_derive 0.7.3", ] [[package]] @@ -3845,21 +3989,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -3870,18 +4014,18 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.35.0" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" @@ -3891,9 +4035,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3910,9 +4054,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -3923,9 +4067,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -3969,7 +4113,7 @@ dependencies = [ "bytes", "http 1.1.0", "opentelemetry", - "reqwest 0.12.5", + "reqwest 0.12.9", ] [[package]] @@ -3985,8 +4129,8 @@ dependencies = [ "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.13.1", - "reqwest 0.12.5", + "prost 0.13.3", + "reqwest 0.12.9", "thiserror", "tokio", "tonic", @@ -4000,7 +4144,7 @@ checksum = "30ee9f20bff9c984511a02f082dc8ede839e4a9bf15cc2487c8d6fea5ad850d9" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.13.1", + "prost 0.13.3", "tonic", ] @@ -4071,35 +4215,36 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.11" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b5927e4a9ae8d6cdb6a69e4e04a0ec73381a358e21b8a576f44769f34e7c24" +checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" dependencies = [ - "proc-macro-crate 2.0.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 1.0.109", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -4119,9 +4264,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4157,9 +4302,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -4168,9 +4313,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" dependencies = [ "pest", "pest_generator", @@ -4178,22 +4323,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" dependencies = [ "once_cell", "pest", @@ -4207,34 +4352,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.6.0", ] [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -4275,9 +4420,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" @@ -4287,9 +4432,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "predicates" @@ -4320,9 +4468,9 @@ dependencies = [ [[package]] name = "pretty_assertions" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", "yansi", @@ -4330,12 +4478,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ - "proc-macro2 1.0.85", - "syn 2.0.66", + "proc-macro2 1.0.92", + "syn 2.0.89", ] [[package]] @@ -4372,20 +4520,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.20.2", -] - -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit 0.21.1", + "toml_edit 0.22.22", ] [[package]] @@ -4395,8 +4534,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", "version_check", ] @@ -4407,8 +4546,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "version_check", ] @@ -4429,18 +4568,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus-client" -version = "0.22.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ca959da22a332509f2a73ae9e5f23f9dcfc31fd3a54d71f159495bd5909baa" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", "itoa", @@ -4454,16 +4593,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "proptest" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" dependencies = [ "bit-set", "bit-vec", @@ -4491,12 +4630,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" dependencies = [ "bytes", - "prost-derive 0.13.1", + "prost-derive 0.13.3", ] [[package]] @@ -4516,7 +4655,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.66", + "syn 2.0.89", "tempfile", ] @@ -4528,22 +4667,22 @@ checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "prost-derive" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" dependencies = [ "anyhow", "itertools 0.13.0", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -4607,7 +4746,7 @@ dependencies = [ "bincode", "chrono", "circuit_definitions", - "clap 4.5.4", + "clap 4.5.21", "colored", "dialoguer", "hex", @@ -4653,8 +4792,8 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -4690,11 +4829,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "proc-macro2 1.0.85", + "proc-macro2 1.0.92", ] [[package]] @@ -4801,18 +4940,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] @@ -4825,7 +4955,7 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -4840,9 +4970,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", @@ -4884,7 +5014,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.31", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -4899,7 +5029,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration", + "system-configuration 0.5.1", "tokio", "tokio-native-tls", "tower-service", @@ -4907,14 +5037,14 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", "bytes", @@ -4922,11 +5052,11 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.7", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -4939,12 +5069,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", - "system-configuration", + "sync_wrapper 1.0.2", + "system-configuration 0.6.1", "tokio", "tokio-native-tls", "tokio-util", @@ -4954,19 +5084,19 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg 0.52.0", + "windows-registry", ] [[package]] name = "reqwest-middleware" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39346a33ddfe6be00cbc17a34ce996818b97b230b87229f10114693becca1268" +checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", "http 1.1.0", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde", "thiserror", "tower-service", @@ -4979,7 +5109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82900c877a0ba5362ac5756efbd82c5b795dc509011c1253e2389d8708f1389d" dependencies = [ "addchain", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "blake2 0.10.6", "byteorder", "derivative", @@ -5035,9 +5165,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" dependencies = [ "bitvec", "bytecheck", @@ -5053,12 +5183,12 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -5074,9 +5204,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", @@ -5094,11 +5224,11 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.35.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "borsh", "bytes", "num-traits", @@ -5128,18 +5258,18 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -5150,9 +5280,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" dependencies = [ "aws-lc-rs", "log", @@ -5166,15 +5296,27 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.2", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.0.1", ] [[package]] @@ -5188,36 +5330,35 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-platform-verifier" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3beb939bcd33c269f4bf946cc829fcd336370267c4a927ac0399c84a3151a1" +checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" dependencies = [ - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "jni", "log", "once_cell", "rustls", - "rustls-native-certs", + "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", "rustls-webpki", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "webpki-roots", "winapi", @@ -5225,15 +5366,15 @@ dependencies = [ [[package]] name = "rustls-platform-verifier-android" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84e217e7fdc8466b5b35d30f8c0a30febd29173df4a3a0c2115d306b9c4117ad" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.102.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "aws-lc-rs", "ring", @@ -5243,9 +5384,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rusty-fork" @@ -5276,11 +5417,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5301,10 +5442,10 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde_derive_internals", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -5385,23 +5526,36 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "num-bigint 0.4.6", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", "core-foundation-sys", "libc", - "num-bigint 0.4.5", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -5535,9 +5689,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.210" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] @@ -5554,13 +5708,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -5569,16 +5723,16 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -5627,8 +5781,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ "darling 0.13.4", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -5638,7 +5792,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -5796,9 +5950,9 @@ dependencies = [ [[package]] name = "simdutf8" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simple_asn1" @@ -5806,7 +5960,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "thiserror", "time", @@ -5859,7 +6013,7 @@ checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" dependencies = [ "base64 0.22.1", "bytes", - "futures 0.3.30", + "futures 0.3.31", "httparse", "log", "rand 0.8.5", @@ -5903,20 +6057,19 @@ checksum = "c85070f382340e8b23a75808e83573ddf65f9ad9143df9573ca37c1ed2ee956a" [[package]] name = "sqlformat" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" dependencies = [ - "itertools 0.12.1", "nom", "unicode_categories", ] [[package]] name = "sqlx" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcfa89bea9500db4a0d038513d7a060566bfc51d46d1c014847049a45cce85e8" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" dependencies = [ "sqlx-core", "sqlx-macros", @@ -5927,9 +6080,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06e2f2bd861719b1f3f0c7dbe1d80c30bf59e76cf019f07d9014ed7eefb8e08" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" dependencies = [ "atoi", "bigdecimal", @@ -5948,7 +6101,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.2.6", + "indexmap 2.6.0", "ipnetwork", "log", "memchr", @@ -5971,30 +6124,30 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f998a9defdbd48ed005a89362bd40dd2117502f15294f61c8d47034107dbbdc" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "sqlx-core", "sqlx-macros-core", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] name = "sqlx-macros-core" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d100558134176a2629d46cec0c8891ba0be8910f7896abfdb75ef4ab6f4e7ce" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" dependencies = [ "dotenvy", "either", "heck 0.5.0", "hex", "once_cell", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde", "serde_json", "sha2 0.10.8", @@ -6002,7 +6155,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.66", + "syn 2.0.89", "tempfile", "tokio", "url", @@ -6010,9 +6163,9 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cac0ab331b14cb3921c62156d913e4c15b74fb6ec0f3146bd4ef6e4fb3c12" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" dependencies = [ "atoi", "base64 0.22.1", @@ -6055,9 +6208,9 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9734dbce698c67ecf67c442f768a5e90a49b2a4d61a9f1d59f73874bd4cf0710" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" dependencies = [ "atoi", "base64 0.22.1", @@ -6081,7 +6234,7 @@ dependencies = [ "log", "md-5", "memchr", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "once_cell", "rand 0.8.5", "rust_decimal", @@ -6098,9 +6251,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75b419c3c1b1697833dd927bdc4c6545a620bc1bbafabd44e1efbe9afcd337e" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" dependencies = [ "atoi", "chrono", @@ -6180,8 +6333,8 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -6201,17 +6354,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "rustversion", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -6230,34 +6383,22 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.66" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", -] - [[package]] name = "sync_wrapper" version = "0.1.2" @@ -6266,9 +6407,23 @@ 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", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] [[package]] name = "system-configuration" @@ -6277,8 +6432,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", + "core-foundation 0.9.4", + "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 0.9.4", + "system-configuration-sys 0.6.0", ] [[package]] @@ -6291,6 +6457,16 @@ dependencies = [ "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 = "tap" version = "1.0.1" @@ -6299,14 +6475,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6330,7 +6507,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dffced63c2b5c7be278154d76b479f9f9920ed34e7574201407f0b14e2bbb93" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.5", "test-log-macros", "tracing-subscriber", ] @@ -6341,9 +6518,9 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -6357,22 +6534,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -6443,11 +6620,21 @@ 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.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -6460,32 +6647,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -6522,9 +6708,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -6537,9 +6723,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -6558,54 +6744,43 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.20.2" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow", + "winnow 0.6.20", ] [[package]] name = "tonic" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", "axum", "base64 0.22.1", "bytes", - "h2 0.4.5", + "h2 0.4.7", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.1", + "prost 0.13.3", "socket2", "tokio", "tokio-stream", @@ -6654,15 +6829,15 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "base64 0.22.1", "bitflags 2.6.0", "bytes", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "mime", "pin-project-lite", "tower-layer", @@ -6684,9 +6859,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", @@ -6696,20 +6871,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 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[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", @@ -6793,8 +6968,8 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ - "quote 1.0.36", - "syn 2.0.66", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -6817,9 +6992,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -6850,51 +7025,48 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-properties" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" @@ -6904,9 +7076,9 @@ checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unicode_categories" @@ -6920,7 +7092,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ad948c1cb799b1a70f836077721a92a35ac177d4daddf4c20a633786d4cf618" dependencies = [ - "quote 1.0.36", + "quote 1.0.37", "syn 1.0.109", ] @@ -6938,9 +7110,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.9.7" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" dependencies = [ "base64 0.22.1", "log", @@ -6951,9 +7123,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -6967,17 +7139,29 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[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.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "serde", ] @@ -7002,9 +7186,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vise" @@ -7026,7 +7210,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "671d3b894d5d0849f0a597f56bf071f42d4f2a1cbcf2f78ca21f870ab7c0cc2b" dependencies = [ - "hyper 0.14.29", + "hyper 0.14.31", "once_cell", "tokio", "tracing", @@ -7039,9 +7223,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a511871dc5de990a3b2a0e715facfbc5da848c0c0395597a1415029fb7c250a" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -7086,34 +7270,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -7123,38 +7308,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ - "quote 1.0.36", + "quote 1.0.37", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -7165,9 +7350,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -7185,9 +7370,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.2" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c452ad30530b54a4d8e71952716a212b08efd0f3562baa66c29a618b07da7c3" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -7206,11 +7391,11 @@ dependencies = [ [[package]] name = "whoami" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall", "wasite", ] @@ -7232,11 +7417,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7251,7 +7436,37 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "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", + "windows-strings", + "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", + "windows-targets 0.52.6", ] [[package]] @@ -7269,7 +7484,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "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]] @@ -7289,18 +7513,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "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.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "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]] @@ -7311,9 +7535,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -7323,9 +7547,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -7335,15 +7559,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -7353,9 +7577,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -7365,9 +7589,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -7377,9 +7601,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -7389,9 +7613,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -7403,25 +7627,36 @@ dependencies = [ ] [[package]] -name = "winreg" -version = "0.50.0" +name = "winnow" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", ] [[package]] name = "winreg" -version = "0.52.0" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +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 = "wyz" version = "0.5.1" @@ -7433,28 +7668,74 @@ dependencies = [ [[package]] name = "yansi" -version = "0.5.1" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", + "synstructure", +] [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.89", + "synstructure", ] [[package]] @@ -7472,9 +7753,31 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.85", - "quote 1.0.36", - "syn 2.0.66", + "proc-macro2 1.0.92", + "quote 1.0.37", + "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 1.0.92", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -7608,7 +7911,7 @@ dependencies = [ "lazy_static", "log", "nom", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "sha3 0.10.8", "smallvec", @@ -7619,14 +7922,13 @@ dependencies = [ [[package]] name = "zkevm_circuits" -version = "0.140.2" +version = "0.140.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8beed4cc1ab1f9d99a694506d18705e10059534b30742832be49637c4775e1f8" +checksum = "e3c365c801e0c6eda83fbd153df45575172beb406bfb663d386f9154b4325eda" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bincode", "boojum", - "cs_derive", "derivative", "hex", "itertools 0.10.5", @@ -7637,18 +7939,18 @@ dependencies = [ "serde_json", "smallvec", "zkevm_opcode_defs 0.132.0", + "zksync_cs_derive", ] [[package]] name = "zkevm_circuits" -version = "0.141.1" +version = "0.141.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20f1a64d256cc5f5c58d19cf976cb45973df54e4e3010ca4a3e6fafe9f06075e" +checksum = "2ccd0352e122a4e6f0046d2163b7e692e627b23fc3264faa77331a21b65833fd" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bincode", "boojum", - "cs_derive", "derivative", "hex", "itertools 0.10.5", @@ -7659,6 +7961,7 @@ dependencies = [ "serde_json", "smallvec", "zkevm_opcode_defs 0.141.0", + "zksync_cs_derive", ] [[package]] @@ -7667,7 +7970,7 @@ version = "0.150.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06fb35b00699d25175a2ad447f86a9088af8b0bc698bb57086fb04c13e52eab" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "boojum", "derivative", "hex", @@ -7717,7 +8020,7 @@ dependencies = [ "bitflags 2.6.0", "blake2 0.10.6", "ethereum-types", - "k256 0.13.3", + "k256 0.13.4", "lazy_static", "sha2 0.10.8", "sha3 0.10.8", @@ -7732,7 +8035,7 @@ dependencies = [ "bitflags 2.6.0", "blake2 0.10.6", "ethereum-types", - "k256 0.13.3", + "k256 0.13.4", "lazy_static", "p256", "serde", @@ -7777,7 +8080,7 @@ dependencies = [ "crossbeam", "derivative", "era_cudart_sys", - "futures 0.3.30", + "futures 0.3.31", "futures-locks", "num_cpus", ] @@ -7819,7 +8122,7 @@ dependencies = [ "const-decoder 0.4.0", "ethabi", "hex", - "num_enum 0.7.2", + "num_enum 0.7.3", "secrecy 0.8.0", "serde", "serde_json", @@ -7837,13 +8140,13 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ffa03efe9bdb137a4b36b97d1a74237e18c9ae42b755163d903a9d48c1a5d80" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bit-vec", "blake2s_simd", "byteorder", "cfg-if", "crossbeam", - "futures 0.3.30", + "futures 0.3.31", "hex", "lazy_static", "num_cpus", @@ -7861,7 +8164,7 @@ dependencies = [ "anyhow", "async-trait", "bincode", - "clap 4.5.4", + "clap 4.5.21", "shivini", "tokio", "tokio-util", @@ -7906,9 +8209,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035269d811b3770debca372141ab64cad067dce8e58cb39a48cb7617d30c626b" +checksum = "4c24c9a056499823227503dd9e5fb3037d93bcc3ae9b06c1ac0a47334c6283af" dependencies = [ "anyhow", "once_cell", @@ -7941,17 +8244,17 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49e38d1b5ed28c66e785caff53ea4863375555d818aafa03290397192dd3e665" +checksum = "5da303b01f24283e93f80f361bf62c3df4a761d061c8b38b4faebeebf26362fc" dependencies = [ "anyhow", "blst", "ed25519-dalek", "elliptic-curve 0.13.8", "hex", - "k256 0.13.3", - "num-bigint 0.4.5", + "k256 0.13.4", + "num-bigint 0.4.6", "num-traits", "rand 0.8.5", "sha3 0.10.8", @@ -7962,14 +8265,14 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e49fbd4e69b276058f3dfc06cf6ada0e8caa6ed826e81289e4d596da95a0f17a" +checksum = "50f07db2a8ec2d2cda5cb4c5ac408101e81c8fa5d95c9f3302829dafae78d11c" dependencies = [ "anyhow", "bit-vec", "hex", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "prost 0.12.6", "rand 0.8.5", "serde", @@ -7984,9 +8287,9 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b2aab4ed18b13cd584f4edcc2546c8da82f89ac62e525063e12935ff28c9be" +checksum = "57a42f57cc5afcee634cbd336e9e6ea891d0171352d7c0bc7d6e17f6c8faa554" dependencies = [ "anyhow", "async-trait", @@ -8004,9 +8307,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bac8f471b182d4fa3d40cf158aac3624fe636a1ff0b4cf3fe26a0e20c68a42" +checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" dependencies = [ "anyhow", "rand 0.8.5", @@ -8064,8 +8367,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5939e2df4288c263c706ff18ac718e984149223ad4289d6d957d767dcfc04c81" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -8178,11 +8481,11 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f91e58e75d65877f09f83bc3dca8f054847ae7ec4f3e64bfa610a557edd8e8e" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-integer", "num-traits", - "proc-macro2 1.0.85", - "quote 1.0.36", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde", "syn 1.0.109", ] @@ -8271,7 +8574,7 @@ dependencies = [ "http 1.1.0", "prost 0.12.6", "rand 0.8.5", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde_json", "tokio", "tracing", @@ -8302,10 +8605,10 @@ dependencies = [ "async-trait", "bincode", "circuit_sequencer_api 0.150.7", - "clap 4.5.4", + "clap 4.5.21", "ctrlc", - "futures 0.3.30", - "reqwest 0.12.5", + "futures 0.3.31", + "reqwest 0.12.9", "serde", "serde_json", "structopt", @@ -8330,9 +8633,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd55c64f54cb10967a435422f66ff5880ae14a232b245517c7ce38da32e0cab" +checksum = "f05755c38b134b409736008bfdfd0fdb42bfa061947be93be4c78069aa10c9b3" dependencies = [ "anyhow", "bit-vec", @@ -8351,19 +8654,19 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4121952bcaf711005dd554612fc6e2de9b30cb58088508df87f1d38046ce8ac8" +checksum = "64c3930a73ca667780be6dcd94e469d40a93fa52f4654c9ab732991b62238cb5" dependencies = [ "anyhow", "heck 0.5.0", "prettyplease", - "proc-macro2 1.0.85", + "proc-macro2 1.0.92", "prost-build", "prost-reflect", "protox", - "quote 1.0.36", - "syn 2.0.66", + "quote 1.0.37", + "syn 2.0.89", ] [[package]] @@ -8395,13 +8698,13 @@ dependencies = [ "chrono", "ctrlc", "debug-map-sorted", - "futures 0.3.30", + "futures 0.3.31", "humantime-serde", "k8s-openapi", "kube", "once_cell", "regex", - "reqwest 0.12.5", + "reqwest 0.12.9", "ring", "rustls", "serde", @@ -8439,12 +8742,12 @@ dependencies = [ "anyhow", "async-trait", "circuit_definitions", - "clap 4.5.4", + "clap 4.5.21", "ctrlc", - "futures 0.3.30", + "futures 0.3.31", "local-ip-address", "regex", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde", "shivini", "tokio", @@ -8472,11 +8775,11 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "clap 4.5.4", + "clap 4.5.21", "ctrlc", - "futures 0.3.30", + "futures 0.3.31", "log", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde", "tokio", "tracing", @@ -8508,7 +8811,7 @@ version = "0.1.0" dependencies = [ "anyhow", "regex", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde", "tracing", "vise", @@ -8541,7 +8844,7 @@ dependencies = [ "anyhow", "async-trait", "axum", - "clap 4.5.4", + "clap 4.5.21", "ctrlc", "serde", "tokio", @@ -8562,7 +8865,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "futures 0.3.30", + "futures 0.3.31", "strum", "tokio", "tokio-stream", @@ -8578,7 +8881,7 @@ dependencies = [ "anyhow", "bincode", "circuit_definitions", - "futures 0.3.30", + "futures 0.3.31", "hex", "md5", "once_cell", @@ -8643,7 +8946,7 @@ dependencies = [ "hex", "itertools 0.10.5", "num", - "num_enum 0.7.2", + "num_enum 0.7.3", "once_cell", "prost 0.12.6", "rlp", @@ -8667,9 +8970,9 @@ name = "zksync_utils" version = "0.1.0" dependencies = [ "anyhow", - "futures 0.3.30", + "futures 0.3.31", "once_cell", - "reqwest 0.12.5", + "reqwest 0.12.9", "serde_json", "tokio", "tracing", @@ -8682,7 +8985,7 @@ version = "0.1.0" dependencies = [ "anyhow", "circuit_definitions", - "clap 4.5.4", + "clap 4.5.21", "indicatif", "proptest", "toml_edit 0.14.4", @@ -8763,7 +9066,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "futures 0.3.30", + "futures 0.3.31", "jsonrpsee", "pin-project-lite", "rlp", @@ -8788,7 +9091,7 @@ dependencies = [ "circuit_definitions", "const-decoder 0.3.0", "ctrlc", - "futures 0.3.30", + "futures 0.3.31", "jemallocator", "once_cell", "rand 0.8.5", @@ -8823,7 +9126,7 @@ dependencies = [ "anyhow", "async-trait", "bincode", - "clap 4.5.4", + "clap 4.5.21", "ctrlc", "tokio", "tracing", diff --git a/zkstack_cli/Cargo.lock b/zkstack_cli/Cargo.lock index 2206a1052f59..900ac677fd61 100644 --- a/zkstack_cli/Cargo.lock +++ b/zkstack_cli/Cargo.lock @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "android-tzdata" @@ -85,9 +85,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -100,49 +100,49 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "append-only-vec" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb8633986ce6db557d8a568b0b874d840db9946e589a3de4cf84fb02130745f" +checksum = "7992085ec035cfe96992dd31bfd495a2ebd31969bb95f624471cb6c0b349e571" [[package]] name = "arrayvec" @@ -178,7 +178,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -189,7 +189,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -226,7 +226,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -237,9 +237,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", @@ -256,7 +256,7 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower 0.5.1", "tower-layer", "tower-service", @@ -277,7 +277,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", ] @@ -341,9 +341,9 @@ checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" [[package]] name = "bigdecimal" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d712318a27c7150326677b321a5fa91b55f6d9034ffd67f20319e147d40cee" +checksum = "8f850665a0385e070b64c38d2354e6c104c8479c59868d1e48a0c13ee2c7a1c1" dependencies = [ "autocfg", "libm", @@ -426,9 +426,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "cfg_aliases", ] @@ -463,9 +463,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" dependencies = [ "serde", ] @@ -525,9 +525,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.28" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", @@ -573,9 +573,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ "clap_builder", "clap_derive", @@ -592,9 +592,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", @@ -605,9 +605,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.33" +version = "4.5.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9646e2e245bf62f45d39a0f3f36f1171ad1ea0d6967fd114bca72cb02a8fcdfb" +checksum = "d9647a559c112175f17cf724dc72d3645680a883c58481332779192b0d8e7a01" dependencies = [ "clap", ] @@ -621,14 +621,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[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 = "cliclack" @@ -697,9 +697,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "common" @@ -785,7 +785,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -800,9 +800,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "487981fa1af147182687064d0a2c336586d337a606595ced9ffb0c685c250c73" dependencies = [ "cfg-if", "cpufeatures", @@ -861,9 +861,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[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", ] @@ -956,12 +956,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -997,7 +997,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -1048,7 +1048,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ "serde", - "uuid 1.10.0", + "uuid 1.11.0", ] [[package]] @@ -1071,17 +1071,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive_more" -version = "0.99.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.79", -] - [[package]] name = "derive_more" version = "1.0.0" @@ -1099,7 +1088,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", "unicode-xid", ] @@ -1169,6 +1158,17 @@ dependencies = [ "winapi", ] +[[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 = "dotenvy" version = "0.15.7" @@ -1286,9 +1286,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -1320,7 +1320,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -1495,7 +1495,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.79", + "syn 2.0.89", "toml", "walkdir", ] @@ -1513,7 +1513,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -1539,7 +1539,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.79", + "syn 2.0.89", "tempfile", "thiserror", "tiny-keccak", @@ -1705,15 +1705,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] [[package]] name = "fastrand" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "ff" @@ -1763,9 +1763,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", @@ -1773,9 +1773,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", @@ -1905,7 +1905,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -2044,9 +2044,9 @@ 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", @@ -2079,9 +2079,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hashers" @@ -2227,9 +2227,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "human-panic" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c5a08ed290eac04006e21e63d32e90086b6182c7cd0452d10f4264def1fec9a" +checksum = "80b84a66a325082740043a6c28bbea400c129eac0d3a27673a1de971e44bf1f7" dependencies = [ "anstream", "anstyle", @@ -2238,14 +2238,14 @@ dependencies = [ "serde", "serde_derive", "toml", - "uuid 1.10.0", + "uuid 1.11.0", ] [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -2267,14 +2267,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.6", + "h2 0.4.7", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -2294,7 +2294,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.30", + "hyper 0.14.31", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -2308,9 +2308,9 @@ checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.4.1", + "hyper 1.5.1", "hyper-util", - "rustls 0.23.14", + "rustls 0.23.19", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -2319,11 +2319,11 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.4.1", + "hyper 1.5.1", "hyper-util", "pin-project-lite", "tokio", @@ -2337,7 +2337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.30", + "hyper 0.14.31", "native-tls", "tokio", "tokio-native-tls", @@ -2351,7 +2351,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.1", "hyper-util", "native-tls", "tokio", @@ -2361,16 +2361,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", "http-body 1.0.1", - "hyper 1.4.1", + "hyper 1.5.1", "pin-project-lite", "socket2", "tokio", @@ -2401,6 +2401,124 @@ 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" @@ -2409,12 +2527,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "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]] @@ -2446,13 +2575,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.89", ] [[package]] @@ -2478,20 +2607,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" dependencies = [ "console", - "instant", "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.0", + "web-time", ] [[package]] @@ -2562,9 +2691,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 = "jobserver" @@ -2577,9 +2706,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.71" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb94a0ffd3f3ee755c20f7d8752f45cac88605a4dcf808abcff72873296ec7b" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2648,7 +2777,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]] @@ -2671,7 +2800,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -2685,15 +2814,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.159" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libredox" @@ -2722,6 +2851,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -2758,7 +2893,7 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax 0.6.29", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -2816,7 +2951,7 @@ dependencies = [ "miette-derive", "once_cell", "thiserror", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -2827,7 +2962,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3055,7 +3190,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3106,9 +3241,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3127,7 +3262,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3138,9 +3273,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -3184,7 +3319,7 @@ dependencies = [ "bytes", "http 1.1.0", "opentelemetry", - "reqwest 0.12.8", + "reqwest 0.12.9", ] [[package]] @@ -3201,7 +3336,7 @@ dependencies = [ "opentelemetry-proto", "opentelemetry_sdk", "prost 0.13.3", - "reqwest 0.12.8", + "reqwest 0.12.9", "thiserror", "tokio", "tonic", @@ -3280,28 +3415,29 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +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.6.12" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.89", ] [[package]] @@ -3452,7 +3588,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", "unicase", ] @@ -3477,29 +3613,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -3536,9 +3672,9 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -3573,12 +3709,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.22" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3606,9 +3742,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.87" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -3633,7 +3769,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3689,7 +3825,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.79", + "syn 2.0.89", "tempfile", ] @@ -3703,7 +3839,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3716,7 +3852,7 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -3876,13 +4012,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -3897,9 +4033,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", @@ -3932,7 +4068,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "hyper-rustls 0.24.2", "hyper-tls 0.5.0", "ipnet", @@ -3964,9 +4100,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.8" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", "bytes", @@ -3974,11 +4110,11 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.6", + "h2 0.4.7", "http 1.1.0", "http-body 1.0.1", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.1", "hyper-rustls 0.27.3", "hyper-tls 0.6.0", "hyper-util", @@ -3994,7 +4130,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", @@ -4079,9 +4215,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", @@ -4126,9 +4262,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -4151,9 +4287,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.14" +version = "0.23.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" dependencies = [ "once_cell", "rustls-pki-types", @@ -4182,9 +4318,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -4209,9 +4345,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" @@ -4239,33 +4375,33 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.3" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", - "derive_more 0.99.18", + "derive_more", "parity-scale-codec", "scale-info-derive", ] [[package]] name = "scale-info-derive" -version = "2.11.3" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.89", ] [[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", ] @@ -4354,9 +4490,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -4488,14 +4624,14 @@ dependencies = [ "thiserror", "time", "url", - "uuid 1.10.0", + "uuid 1.11.0", ] [[package]] name = "serde" -version = "1.0.210" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] @@ -4512,20 +4648,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -4716,9 +4852,9 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "smol_str" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66eaf762c5af19db3108300515c8aa7a50efc90ff745f4c62288052ebf9fdd25" +checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" dependencies = [ "borsh", "serde", @@ -4851,7 +4987,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -4874,7 +5010,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.79", + "syn 2.0.89", "tempfile", "tokio", "url", @@ -4985,9 +5121,9 @@ dependencies = [ [[package]] name = "sqruff-lib" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "676775189e83a98fc603d59fc6d760a66895d511502a538081dac993fde1a09a" +checksum = "dd3d7d11b58d658bf0e33d6729a92a81790ffb757440828a7b01869a40314b5f" dependencies = [ "ahash", "anstyle", @@ -5020,9 +5156,9 @@ dependencies = [ [[package]] name = "sqruff-lib-core" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ec5ba65376ae9ba3e3dda153668dcb6452a7212ee7b4c9d48e053eb4f0f3fa" +checksum = "03b19ebfd19c2bb1fdf8ca626f451645d89b74fa696f3cc1286989e58436f791" dependencies = [ "ahash", "enum_dispatch", @@ -5041,9 +5177,9 @@ dependencies = [ [[package]] name = "sqruff-lib-dialects" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00fa1cd168dad593f8f6996d805acc1fd52c6d0ad0f6f5847a9cc22a6198cfc2" +checksum = "60dc004661c65d9163edaa876e6bb2fbe7a0bcf7f00cb0e13428cd0b4ab4b27f" dependencies = [ "ahash", "itertools 0.13.0", @@ -5119,7 +5255,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -5161,9 +5297,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.79" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -5178,13 +5314,24 @@ 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", ] +[[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" @@ -5235,9 +5382,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", @@ -5275,27 +5422,27 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" dependencies = [ "smawk", "unicode-linebreak", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "thiserror" -version = "1.0.64" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -5377,6 +5524,16 @@ 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" @@ -5394,9 +5551,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", @@ -5418,7 +5575,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -5447,7 +5604,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.14", + "rustls 0.23.19", "rustls-pki-types", "tokio", ] @@ -5536,11 +5693,11 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.6", + "h2 0.4.7", "http 1.1.0", "http-body 1.0.1", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.1", "hyper-timeout", "hyper-util", "percent-encoding", @@ -5603,9 +5760,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", @@ -5615,20 +5772,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.79", + "syn 2.0.89", ] [[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", @@ -5778,12 +5935,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-bidi" @@ -5793,9 +5947,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-linebreak" @@ -5824,6 +5978,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -5869,9 +6029,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -5885,6 +6045,18 @@ 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" @@ -5903,9 +6075,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", "serde", @@ -5949,7 +6121,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "671d3b894d5d0849f0a597f56bf071f42d4f2a1cbcf2f78ca21f870ab7c0cc2b" dependencies = [ - "hyper 0.14.30", + "hyper 0.14.31", "once_cell", "tokio", "tracing", @@ -5964,7 +6136,7 @@ checksum = "6a511871dc5de990a3b2a0e715facfbc5da848c0c0395597a1415029fb7c250a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -6000,9 +6172,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.94" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef073ced962d62984fb38a36e5fdc1a2b23c9e0e1fa0689bb97afa4202ef6887" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -6011,24 +6183,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.94" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4bfab14ef75323f4eb75fa52ee0a3fb59611977fd3240da19b2cf36ff85030e" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65471f79c1022ffa5291d33520cbbb53b7687b01c2f8e83b57d102eed7ed479d" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -6038,9 +6210,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.94" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7bec9830f60924d9ceb3ef99d55c155be8afa76954edffbb5936ff4509474e7" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6048,28 +6220,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.94" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c74f6e152a76a2ad448e223b0fc0b6b5747649c3d769cc6bf45737bf97d0ed6" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.94" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42f6c679374623f295a8623adfe63d9284091245c3504bde47c17a3ce2777d9" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.71" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44188d185b5bdcae1052d08bcbcf9091a5524038d4572cc4f4f2bb9d5554ddd9" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -6338,6 +6510,18 @@ dependencies = [ "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" @@ -6368,18 +6552,18 @@ dependencies = [ [[package]] name = "xshell" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db0ab86eae739efd1b054a8d3d16041914030ac4e01cd1dca0cf252fd8b6437" +checksum = "9e7290c623014758632efe00737145b6867b66292c42167f2ec381eb566a373d" dependencies = [ "xshell-macros", ] [[package]] name = "xshell-macros" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d422e8e38ec76e2f06ee439ccc765e9c6a9638b9e7c9f2e8255e4d41e8bd852" +checksum = "32ac00cd3f8ec9c1d33fb3e7958a82df6989c42d747bd326c822b1d625283547" [[package]] name = "yansi" @@ -6393,6 +6577,30 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -6411,7 +6619,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn 2.0.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", ] [[package]] @@ -6431,7 +6660,29 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "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]] @@ -6473,7 +6724,7 @@ dependencies = [ "lazy_static", "prost 0.12.6", "rand", - "reqwest 0.12.8", + "reqwest 0.12.9", "secrecy", "serde", "serde_json", @@ -6520,9 +6771,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035269d811b3770debca372141ab64cad067dce8e58cb39a48cb7617d30c626b" +checksum = "4c24c9a056499823227503dd9e5fb3037d93bcc3ae9b06c1ac0a47334c6283af" dependencies = [ "anyhow", "once_cell", @@ -6553,9 +6804,9 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49e38d1b5ed28c66e785caff53ea4863375555d818aafa03290397192dd3e665" +checksum = "5da303b01f24283e93f80f361bf62c3df4a761d061c8b38b4faebeebf26362fc" dependencies = [ "anyhow", "blst", @@ -6574,9 +6825,9 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e49fbd4e69b276058f3dfc06cf6ada0e8caa6ed826e81289e4d596da95a0f17a" +checksum = "50f07db2a8ec2d2cda5cb4c5ac408101e81c8fa5d95c9f3302829dafae78d11c" dependencies = [ "anyhow", "bit-vec", @@ -6596,9 +6847,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bac8f471b182d4fa3d40cf158aac3624fe636a1ff0b4cf3fe26a0e20c68a42" +checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" dependencies = [ "anyhow", "rand", @@ -6646,9 +6897,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd55c64f54cb10967a435422f66ff5880ae14a232b245517c7ce38da32e0cab" +checksum = "f05755c38b134b409736008bfdfd0fdb42bfa061947be93be4c78069aa10c9b3" dependencies = [ "anyhow", "bit-vec", @@ -6667,9 +6918,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4121952bcaf711005dd554612fc6e2de9b30cb58088508df87f1d38046ce8ac8" +checksum = "64c3930a73ca667780be6dcd94e469d40a93fa52f4654c9ab732991b62238cb5" dependencies = [ "anyhow", "heck", @@ -6679,7 +6930,7 @@ dependencies = [ "prost-reflect", "protox", "quote", - "syn 2.0.79", + "syn 2.0.89", ] [[package]] @@ -6717,7 +6968,7 @@ dependencies = [ "bigdecimal", "blake2", "chrono", - "derive_more 1.0.0", + "derive_more", "hex", "itertools 0.10.5", "num", @@ -6747,7 +6998,7 @@ dependencies = [ "anyhow", "futures", "once_cell", - "reqwest 0.12.8", + "reqwest 0.12.9", "serde_json", "tokio", "tracing", diff --git a/zkstack_cli/Cargo.toml b/zkstack_cli/Cargo.toml index 1f493f9c3e41..1734673aefba 100644 --- a/zkstack_cli/Cargo.toml +++ b/zkstack_cli/Cargo.toml @@ -31,11 +31,11 @@ git_version_macro = { path = "crates/git_version_macro" } zksync_config = { path = "../core/lib/config" } zksync_protobuf_config = { path = "../core/lib/protobuf_config" } zksync_basic_types = { path = "../core/lib/basic_types" } -zksync_consensus_roles = "=0.5.0" -zksync_consensus_crypto = "=0.5.0" -zksync_consensus_utils = "=0.5.0" -zksync_protobuf = "=0.5.0" -zksync_protobuf_build = "=0.5.0" +zksync_consensus_roles = "=0.6.0" +zksync_consensus_crypto = "=0.6.0" +zksync_consensus_utils = "=0.6.0" +zksync_protobuf = "=0.6.0" +zksync_protobuf_build = "=0.6.0" # External dependencies anyhow = "1.0.82" From a0a74aaeb42f076d20c4ae8a32925eff2de11d0c Mon Sep 17 00:00:00 2001 From: perekopskiy <53865202+perekopskiy@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:53:09 +0200 Subject: [PATCH 11/35] feat: change seal criteria for gateway (#3320) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ - replaces sk l1 gas criterion with l1 l2 txs criterion - removes commit aggregation in eth sender - enables execute aggregation only for chains that settle on L1 - adds sk criterion for l2 l1 logs ## Why ❔ - make criteria work with gateway ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- core/lib/config/src/configs/eth_sender.rs | 2 - core/lib/config/src/testonly.rs | 1 - ...5f7cef0d50c4938105684971e8adc86bb6366.json | 23 --- ...8aafe4b1aa2250fc535bfcdff39172551d42b.json | 2 +- ...6c32170ea4b47051a100f71a41dd6ed9bb1a9.json | 2 +- ...dde79388b62926ff83d954b4d93dedfe2503a.json | 33 ---- ...b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json | 23 --- ...3ce80f9b2b27758651ccfc09df61a4ae8a363.json | 2 +- ...8eefd4419e8a9eb05a9528da11163f52b2c7.json} | 4 +- ...751dfd285628a75a35b152bccb3c73e9cc057.json | 2 +- ...79d66dd9fbd20941aec20e2e8c3874b15a953.json | 30 +++ ...85c5196c431363802b6b988939c99853b9c97.json | 23 --- ..._drop_predicted_gas_cost_not_null.down.sql | 2 + ...03_drop_predicted_gas_cost_not_null.up.sql | 2 + core/lib/dal/src/blocks_dal.rs | 159 ++-------------- core/lib/dal/src/blocks_web3_dal.rs | 2 +- core/lib/dal/src/eth_sender_dal.rs | 6 +- core/lib/dal/src/models/storage_eth_tx.rs | 4 +- core/lib/env_config/src/eth_sender.rs | 2 - core/lib/protobuf_config/src/eth.rs | 12 -- .../src/proto/config/eth_sender.proto | 2 +- core/lib/types/src/aggregated_operations.rs | 8 + core/lib/types/src/block.rs | 47 ----- core/lib/types/src/eth_sender.rs | 2 +- .../src/types/outputs/execution_result.rs | 1 + .../src/types/outputs/statistic.rs | 5 + .../src/execution_sandbox/vm_metrics.rs | 1 + core/node/api_server/src/tx_sender/mod.rs | 2 +- core/node/eth_sender/src/aggregator.rs | 130 +++++++------ core/node/eth_sender/src/eth_tx_aggregator.rs | 23 ++- core/node/eth_sender/src/eth_tx_manager.rs | 15 +- core/node/eth_sender/src/health.rs | 2 +- core/node/eth_sender/src/lib.rs | 1 - core/node/eth_sender/src/publish_criterion.rs | 159 ++++++++-------- core/node/eth_sender/src/tester.rs | 4 +- core/node/eth_sender/src/utils.rs | 14 -- core/node/genesis/src/lib.rs | 11 +- .../layers/eth_sender/aggregator.rs | 3 +- core/node/state_keeper/src/executor/mod.rs | 10 +- core/node/state_keeper/src/io/persistence.rs | 5 +- .../io/seal_logic/l2_block_seal_subtasks.rs | 2 +- .../state_keeper/src/io/seal_logic/mod.rs | 1 - core/node/state_keeper/src/io/tests/mod.rs | 7 +- core/node/state_keeper/src/keeper.rs | 65 ++----- core/node/state_keeper/src/lib.rs | 2 +- .../src/seal_criteria/conditional_sealer.rs | 9 +- .../src/seal_criteria/criteria/gas.rs | 180 ------------------ .../criteria/gas_for_batch_tip.rs | 4 + .../criteria/geometry_seal_criteria.rs | 5 + .../src/seal_criteria/criteria/l1_l2_txs.rs | 104 ++++++++++ .../src/seal_criteria/criteria/l2_l1_logs.rs | 120 ++++++++++++ .../src/seal_criteria/criteria/mod.rs | 10 +- .../seal_criteria/criteria/pubdata_bytes.rs | 4 + .../src/seal_criteria/criteria/slots.rs | 3 + .../criteria/tx_encoding_size.rs | 5 + .../state_keeper/src/seal_criteria/mod.rs | 21 +- core/node/state_keeper/src/tests/mod.rs | 93 +-------- core/node/state_keeper/src/types.rs | 34 +--- .../src/updates/l1_batch_updates.rs | 20 +- .../src/updates/l2_block_updates.rs | 17 +- core/node/state_keeper/src/updates/mod.rs | 26 +-- core/node/state_keeper/src/utils.rs | 88 --------- etc/env/file_based/general.yaml | 1 - 63 files changed, 584 insertions(+), 1018 deletions(-) delete mode 100644 core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json delete mode 100644 core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json delete mode 100644 core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json rename core/lib/dal/.sqlx/{query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json => query-843b299bbffbade83dd673ed4a488eefd4419e8a9eb05a9528da11163f52b2c7.json} (73%) create mode 100644 core/lib/dal/.sqlx/query-a0ad14cd53afb6c360e70c47dbd79d66dd9fbd20941aec20e2e8c3874b15a953.json delete mode 100644 core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json create mode 100644 core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.down.sql create mode 100644 core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.up.sql delete mode 100644 core/node/eth_sender/src/utils.rs delete mode 100644 core/node/state_keeper/src/seal_criteria/criteria/gas.rs create mode 100644 core/node/state_keeper/src/seal_criteria/criteria/l1_l2_txs.rs create mode 100644 core/node/state_keeper/src/seal_criteria/criteria/l2_l1_logs.rs diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs index 7b67f015238d..be2f5b532a3e 100644 --- a/core/lib/config/src/configs/eth_sender.rs +++ b/core/lib/config/src/configs/eth_sender.rs @@ -23,7 +23,6 @@ impl EthConfig { pub fn for_tests() -> Self { Self { sender: Some(SenderConfig { - aggregated_proof_sizes: vec![1], wait_confirmations: Some(10), tx_poll_period: 1, aggregate_tx_poll_period: 1, @@ -82,7 +81,6 @@ pub enum ProofLoadingMode { #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct SenderConfig { - pub aggregated_proof_sizes: Vec, /// Amount of confirmations required to consider L1 transaction committed. /// If not specified L1 transaction will be considered finalized once its block is finalized. pub wait_confirmations: Option, diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index d58867ea7418..1a3f63d9b278 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -399,7 +399,6 @@ impl Distribution for EncodeDist { impl Distribution for EncodeDist { fn sample(&self, rng: &mut R) -> configs::eth_sender::SenderConfig { configs::eth_sender::SenderConfig { - aggregated_proof_sizes: self.sample_collect(rng), wait_confirmations: self.sample(rng), tx_poll_period: self.sample(rng), aggregate_tx_poll_period: self.sample(rng), diff --git a/core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json b/core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json deleted file mode 100644 index d59f237ed3c3..000000000000 --- a/core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT COALESCE(SUM(predicted_execute_gas_cost), 0) AS \"sum!\" FROM l1_batches WHERE number BETWEEN $1 AND $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "sum!", - "type_info": "Numeric" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - null - ] - }, - "hash": "10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366" -} diff --git a/core/lib/dal/.sqlx/query-2234d7728d91cefaee792c900448aafe4b1aa2250fc535bfcdff39172551d42b.json b/core/lib/dal/.sqlx/query-2234d7728d91cefaee792c900448aafe4b1aa2250fc535bfcdff39172551d42b.json index 48fa673b2c91..df60f114f5ef 100644 --- a/core/lib/dal/.sqlx/query-2234d7728d91cefaee792c900448aafe4b1aa2250fc535bfcdff39172551d42b.json +++ b/core/lib/dal/.sqlx/query-2234d7728d91cefaee792c900448aafe4b1aa2250fc535bfcdff39172551d42b.json @@ -103,7 +103,7 @@ false, true, true, - false, + true, true, true, false, diff --git a/core/lib/dal/.sqlx/query-400457c97449097837d5e31d4476c32170ea4b47051a100f71a41dd6ed9bb1a9.json b/core/lib/dal/.sqlx/query-400457c97449097837d5e31d4476c32170ea4b47051a100f71a41dd6ed9bb1a9.json index 3e64cc5f5b2f..c6c189d45fcb 100644 --- a/core/lib/dal/.sqlx/query-400457c97449097837d5e31d4476c32170ea4b47051a100f71a41dd6ed9bb1a9.json +++ b/core/lib/dal/.sqlx/query-400457c97449097837d5e31d4476c32170ea4b47051a100f71a41dd6ed9bb1a9.json @@ -108,7 +108,7 @@ false, true, true, - false, + true, true, true, false, diff --git a/core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json b/core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json deleted file mode 100644 index 98d228726d48..000000000000 --- a/core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE l1_batches\n SET\n l1_tx_count = $2,\n l2_tx_count = $3,\n l2_to_l1_messages = $4,\n bloom = $5,\n priority_ops_onchain_data = $6,\n predicted_commit_gas_cost = $7,\n predicted_prove_gas_cost = $8,\n predicted_execute_gas_cost = $9,\n initial_bootloader_heap_content = $10,\n used_contract_hashes = $11,\n bootloader_code_hash = $12,\n default_aa_code_hash = $13,\n evm_emulator_code_hash = $14,\n protocol_version = $15,\n system_logs = $16,\n storage_refunds = $17,\n pubdata_costs = $18,\n pubdata_input = $19,\n predicted_circuits_by_type = $20,\n updated_at = NOW(),\n sealed_at = NOW(),\n is_sealed = TRUE\n WHERE\n number = $1\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Int4", - "Int4", - "ByteaArray", - "Bytea", - "ByteaArray", - "Int8", - "Int8", - "Int8", - "Jsonb", - "Jsonb", - "Bytea", - "Bytea", - "Bytea", - "Int4", - "ByteaArray", - "Int8Array", - "Int8Array", - "Bytea", - "Jsonb" - ] - }, - "nullable": [] - }, - "hash": "6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a" -} diff --git a/core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json b/core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json deleted file mode 100644 index ab2283fa60c3..000000000000 --- a/core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT COALESCE(SUM(predicted_prove_gas_cost), 0) AS \"sum!\" FROM l1_batches WHERE number BETWEEN $1 AND $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "sum!", - "type_info": "Numeric" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - null - ] - }, - "hash": "63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3" -} diff --git a/core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json b/core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json index 1a3c160cee1b..a6ac67328b14 100644 --- a/core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json +++ b/core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json @@ -101,7 +101,7 @@ false, true, true, - false, + true, true, true, false, diff --git a/core/lib/dal/.sqlx/query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json b/core/lib/dal/.sqlx/query-843b299bbffbade83dd673ed4a488eefd4419e8a9eb05a9528da11163f52b2c7.json similarity index 73% rename from core/lib/dal/.sqlx/query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json rename to core/lib/dal/.sqlx/query-843b299bbffbade83dd673ed4a488eefd4419e8a9eb05a9528da11163f52b2c7.json index c2ccaf3b3d7c..9c339a604c89 100644 --- a/core/lib/dal/.sqlx/query-5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129.json +++ b/core/lib/dal/.sqlx/query-843b299bbffbade83dd673ed4a488eefd4419e8a9eb05a9528da11163f52b2c7.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, chain_id, created_at, updated_at) VALUES ('\\x00', 0, $1, '', 0, $2, now(), now()) RETURNING id", + "query": "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, chain_id, created_at, updated_at) VALUES ('\\x00', 0, $1, '', NULL, $2, now(), now()) RETURNING id", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "5cc172812d228c5b60be8dd8b8eaf99779da93fc8939dc724a49b286c5568129" + "hash": "843b299bbffbade83dd673ed4a488eefd4419e8a9eb05a9528da11163f52b2c7" } diff --git a/core/lib/dal/.sqlx/query-868bfdc5d8ee5eab395fa690891751dfd285628a75a35b152bccb3c73e9cc057.json b/core/lib/dal/.sqlx/query-868bfdc5d8ee5eab395fa690891751dfd285628a75a35b152bccb3c73e9cc057.json index c2e662ef376e..e47911f3d776 100644 --- a/core/lib/dal/.sqlx/query-868bfdc5d8ee5eab395fa690891751dfd285628a75a35b152bccb3c73e9cc057.json +++ b/core/lib/dal/.sqlx/query-868bfdc5d8ee5eab395fa690891751dfd285628a75a35b152bccb3c73e9cc057.json @@ -102,7 +102,7 @@ false, true, true, - false, + true, true, true, false, diff --git a/core/lib/dal/.sqlx/query-a0ad14cd53afb6c360e70c47dbd79d66dd9fbd20941aec20e2e8c3874b15a953.json b/core/lib/dal/.sqlx/query-a0ad14cd53afb6c360e70c47dbd79d66dd9fbd20941aec20e2e8c3874b15a953.json new file mode 100644 index 000000000000..a64bdb403aef --- /dev/null +++ b/core/lib/dal/.sqlx/query-a0ad14cd53afb6c360e70c47dbd79d66dd9fbd20941aec20e2e8c3874b15a953.json @@ -0,0 +1,30 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE l1_batches\n SET\n l1_tx_count = $2,\n l2_tx_count = $3,\n l2_to_l1_messages = $4,\n bloom = $5,\n priority_ops_onchain_data = $6,\n initial_bootloader_heap_content = $7,\n used_contract_hashes = $8,\n bootloader_code_hash = $9,\n default_aa_code_hash = $10,\n evm_emulator_code_hash = $11,\n protocol_version = $12,\n system_logs = $13,\n storage_refunds = $14,\n pubdata_costs = $15,\n pubdata_input = $16,\n predicted_circuits_by_type = $17,\n updated_at = NOW(),\n sealed_at = NOW(),\n is_sealed = TRUE\n WHERE\n number = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int4", + "Int4", + "ByteaArray", + "Bytea", + "ByteaArray", + "Jsonb", + "Jsonb", + "Bytea", + "Bytea", + "Bytea", + "Int4", + "ByteaArray", + "Int8Array", + "Int8Array", + "Bytea", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "a0ad14cd53afb6c360e70c47dbd79d66dd9fbd20941aec20e2e8c3874b15a953" +} diff --git a/core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json b/core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json deleted file mode 100644 index 379c1f75d9b3..000000000000 --- a/core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT COALESCE(SUM(predicted_commit_gas_cost), 0) AS \"sum!\" FROM l1_batches WHERE number BETWEEN $1 AND $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "sum!", - "type_info": "Numeric" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - null - ] - }, - "hash": "b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97" -} diff --git a/core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.down.sql b/core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.down.sql new file mode 100644 index 000000000000..6d0c32ea6c24 --- /dev/null +++ b/core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE eth_txs + ALTER COLUMN predicted_gas_cost SET NOT NULL; diff --git a/core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.up.sql b/core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.up.sql new file mode 100644 index 000000000000..cbb1e3c1a3f1 --- /dev/null +++ b/core/lib/dal/migrations/20241121142103_drop_predicted_gas_cost_not_null.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE eth_txs + ALTER COLUMN predicted_gas_cost DROP NOT NULL; diff --git a/core/lib/dal/src/blocks_dal.rs b/core/lib/dal/src/blocks_dal.rs index 5d27b6067cd0..5002c5a8afbf 100644 --- a/core/lib/dal/src/blocks_dal.rs +++ b/core/lib/dal/src/blocks_dal.rs @@ -6,19 +6,18 @@ use std::{ }; use anyhow::Context as _; -use bigdecimal::{BigDecimal, FromPrimitive, ToPrimitive}; +use bigdecimal::{BigDecimal, FromPrimitive}; use sqlx::types::chrono::{DateTime, Utc}; use zksync_db_connection::{ connection::Connection, error::{DalResult, SqlxContext}, instrument::{InstrumentExt, Instrumented}, - interpolate_query, match_query_as, }; use zksync_types::{ aggregated_operations::AggregatedActionType, block::{ - BlockGasCount, L1BatchHeader, L1BatchStatistics, L1BatchTreeData, L2BlockHeader, - StorageOracleInfo, UnsealedL1BatchHeader, + L1BatchHeader, L1BatchStatistics, L1BatchTreeData, L2BlockHeader, StorageOracleInfo, + UnsealedL1BatchHeader, }, commitment::{L1BatchCommitmentArtifacts, L1BatchWithMetadata}, fee_model::BatchFeeInput, @@ -688,7 +687,6 @@ impl BlocksDal<'_, '_> { &mut self, header: &L1BatchHeader, initial_bootloader_contents: &[(usize, U256)], - predicted_block_gas: BlockGasCount, storage_refunds: &[u32], pubdata_costs: &[i32], predicted_circuits_by_type: CircuitStatistic, // predicted number of circuits for each circuit type @@ -728,20 +726,17 @@ impl BlocksDal<'_, '_> { l2_to_l1_messages = $4, bloom = $5, priority_ops_onchain_data = $6, - predicted_commit_gas_cost = $7, - predicted_prove_gas_cost = $8, - predicted_execute_gas_cost = $9, - initial_bootloader_heap_content = $10, - used_contract_hashes = $11, - bootloader_code_hash = $12, - default_aa_code_hash = $13, - evm_emulator_code_hash = $14, - protocol_version = $15, - system_logs = $16, - storage_refunds = $17, - pubdata_costs = $18, - pubdata_input = $19, - predicted_circuits_by_type = $20, + initial_bootloader_heap_content = $7, + used_contract_hashes = $8, + bootloader_code_hash = $9, + default_aa_code_hash = $10, + evm_emulator_code_hash = $11, + protocol_version = $12, + system_logs = $13, + storage_refunds = $14, + pubdata_costs = $15, + pubdata_input = $16, + predicted_circuits_by_type = $17, updated_at = NOW(), sealed_at = NOW(), is_sealed = TRUE @@ -754,9 +749,6 @@ impl BlocksDal<'_, '_> { &header.l2_to_l1_messages, header.bloom.as_bytes(), &priority_onchain_data, - i64::from(predicted_block_gas.commit), - i64::from(predicted_block_gas.prove), - i64::from(predicted_block_gas.execute), initial_bootloader_contents, used_contract_hashes, header.base_system_contracts_hashes.bootloader.as_bytes(), @@ -2371,40 +2363,6 @@ impl BlocksDal<'_, '_> { Ok(()) } - /// Returns sum of predicted gas costs on the given L1 batch range. - /// Panics if the sum doesn't fit into `u32`. - pub async fn get_l1_batches_predicted_gas( - &mut self, - number_range: ops::RangeInclusive, - op_type: AggregatedActionType, - ) -> anyhow::Result { - #[derive(Debug)] - struct SumRow { - sum: BigDecimal, - } - - let start = i64::from(number_range.start().0); - let end = i64::from(number_range.end().0); - let query = match_query_as!( - SumRow, - [ - "SELECT COALESCE(SUM(", _, r#"), 0) AS "sum!" FROM l1_batches WHERE number BETWEEN $1 AND $2"# - ], - match (op_type) { - AggregatedActionType::Commit => ("predicted_commit_gas_cost"; start, end), - AggregatedActionType::PublishProofOnchain => ("predicted_prove_gas_cost"; start, end), - AggregatedActionType::Execute => ("predicted_execute_gas_cost"; start, end), - } - ); - - query - .fetch_one(self.storage.conn()) - .await? - .sum - .to_u32() - .context("Sum of predicted gas costs should fit into u32") - } - pub async fn get_l2_block_range_of_l1_batch( &mut self, l1_batch_number: L1BatchNumber, @@ -2932,15 +2890,8 @@ impl BlocksDal<'_, '_> { header.to_unsealed_header(BatchFeeInput::pubdata_independent(100, 100, 100)), ) .await?; - self.mark_l1_batch_as_sealed( - header, - &[], - Default::default(), - &[], - &[], - Default::default(), - ) - .await + self.mark_l1_batch_as_sealed(header, &[], &[], &[], Default::default()) + .await } /// Deletes all L2 blocks and L1 batches, including the genesis ones. Should only be used in tests. @@ -3006,8 +2957,7 @@ impl BlocksDal<'_, '_> { #[cfg(test)] mod tests { - use zksync_contracts::BaseSystemContractsHashes; - use zksync_types::{tx::IncludedTxLocation, Address, ProtocolVersion, ProtocolVersionId}; + use zksync_types::{tx::IncludedTxLocation, Address, ProtocolVersion}; use super::*; use crate::{ @@ -3022,7 +2972,7 @@ mod tests { vec![], action_type, Address::default(), - 1, + Some(1), None, None, false, @@ -3222,77 +3172,4 @@ mod tests { .unwrap() .is_none()); } - - #[tokio::test] - async fn getting_predicted_gas() { - let pool = ConnectionPool::::test_pool().await; - let mut conn = pool.connection().await.unwrap(); - conn.protocol_versions_dal() - .save_protocol_version_with_tx(&ProtocolVersion::default()) - .await - .unwrap(); - let mut header = L1BatchHeader::new( - L1BatchNumber(1), - 100, - BaseSystemContractsHashes::default(), - ProtocolVersionId::default(), - ); - let mut predicted_gas = BlockGasCount { - commit: 2, - prove: 3, - execute: 10, - }; - conn.blocks_dal() - .insert_l1_batch( - header.to_unsealed_header(BatchFeeInput::pubdata_independent(100, 100, 100)), - ) - .await - .unwrap(); - conn.blocks_dal() - .mark_l1_batch_as_sealed(&header, &[], predicted_gas, &[], &[], Default::default()) - .await - .unwrap(); - - header.number = L1BatchNumber(2); - header.timestamp += 100; - predicted_gas += predicted_gas; - conn.blocks_dal() - .insert_l1_batch( - header.to_unsealed_header(BatchFeeInput::pubdata_independent(100, 100, 100)), - ) - .await - .unwrap(); - conn.blocks_dal() - .mark_l1_batch_as_sealed(&header, &[], predicted_gas, &[], &[], Default::default()) - .await - .unwrap(); - - let action_types_and_predicted_gas = [ - (AggregatedActionType::Execute, 10), - (AggregatedActionType::Commit, 2), - (AggregatedActionType::PublishProofOnchain, 3), - ]; - for (action_type, expected_gas) in action_types_and_predicted_gas { - let gas = conn - .blocks_dal() - .get_l1_batches_predicted_gas(L1BatchNumber(1)..=L1BatchNumber(1), action_type) - .await - .unwrap(); - assert_eq!(gas, expected_gas); - - let gas = conn - .blocks_dal() - .get_l1_batches_predicted_gas(L1BatchNumber(2)..=L1BatchNumber(2), action_type) - .await - .unwrap(); - assert_eq!(gas, 2 * expected_gas); - - let gas = conn - .blocks_dal() - .get_l1_batches_predicted_gas(L1BatchNumber(1)..=L1BatchNumber(2), action_type) - .await - .unwrap(); - assert_eq!(gas, 3 * expected_gas); - } - } } diff --git a/core/lib/dal/src/blocks_web3_dal.rs b/core/lib/dal/src/blocks_web3_dal.rs index c7187a83006b..229f49da6e37 100644 --- a/core/lib/dal/src/blocks_web3_dal.rs +++ b/core/lib/dal/src/blocks_web3_dal.rs @@ -1044,7 +1044,7 @@ mod tests { vec![], AggregatedActionType::Commit, Address::default(), - 0, + None, None, None, false, diff --git a/core/lib/dal/src/eth_sender_dal.rs b/core/lib/dal/src/eth_sender_dal.rs index 0e5cbc0bac1b..cc7c694a96fe 100644 --- a/core/lib/dal/src/eth_sender_dal.rs +++ b/core/lib/dal/src/eth_sender_dal.rs @@ -231,7 +231,7 @@ impl EthSenderDal<'_, '_> { raw_tx: Vec, tx_type: AggregatedActionType, contract_address: Address, - predicted_gas_cost: u32, + predicted_gas_cost: Option, from_address: Option
, blob_sidecar: Option, is_gateway: bool, @@ -262,7 +262,7 @@ impl EthSenderDal<'_, '_> { nonce as i64, tx_type.to_string(), address, - i64::from(predicted_gas_cost), + predicted_gas_cost.map(|c| i64::from(c)), from_address.as_ref().map(Address::as_bytes), blob_sidecar.map(|sidecar| bincode::serialize(&sidecar) .expect("can always bincode serialize EthTxBlobSidecar; qed")), @@ -515,7 +515,7 @@ impl EthSenderDal<'_, '_> { // Insert general tx descriptor. let eth_tx_id = sqlx::query_scalar!( "INSERT INTO eth_txs (raw_tx, nonce, tx_type, contract_address, predicted_gas_cost, chain_id, created_at, updated_at) \ - VALUES ('\\x00', 0, $1, '', 0, $2, now(), now()) \ + VALUES ('\\x00', 0, $1, '', NULL, $2, now(), now()) \ RETURNING id", tx_type.to_string(), sl_chain_id.map(|chain_id| chain_id.0 as i64) diff --git a/core/lib/dal/src/models/storage_eth_tx.rs b/core/lib/dal/src/models/storage_eth_tx.rs index a47f6acfff46..b4a124c5d455 100644 --- a/core/lib/dal/src/models/storage_eth_tx.rs +++ b/core/lib/dal/src/models/storage_eth_tx.rs @@ -17,7 +17,7 @@ pub struct StorageEthTx { pub has_failed: bool, pub confirmed_eth_tx_history_id: Option, pub gas_used: Option, - pub predicted_gas_cost: i64, + pub predicted_gas_cost: Option, pub created_at: NaiveDateTime, pub updated_at: NaiveDateTime, // TODO (SMA-1614): remove the field @@ -80,7 +80,7 @@ impl From for EthTx { raw_tx: tx.raw_tx.clone(), tx_type: AggregatedActionType::from_str(&tx.tx_type).expect("Wrong agg type"), created_at_timestamp: tx.created_at.and_utc().timestamp() as u64, - predicted_gas_cost: tx.predicted_gas_cost as u64, + predicted_gas_cost: tx.predicted_gas_cost.map(|c| c as u64), from_addr: tx.from_addr.map(|f| Address::from_slice(&f)), blob_sidecar: tx.blob_sidecar.map(|b| { bincode::deserialize(&b).expect("EthTxBlobSidecar is encoded correctly; qed") diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index d95c6dd3658f..f822109ed935 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -56,7 +56,6 @@ mod tests { ( EthConfig { sender: Some(SenderConfig { - aggregated_proof_sizes: vec![1, 5], aggregated_block_commit_deadline: 30, aggregated_block_prove_deadline: 3_000, aggregated_block_execute_deadline: 4_000, @@ -128,7 +127,6 @@ mod tests { ETH_SENDER_GAS_ADJUSTER_MAX_BLOB_BASE_FEE_SAMPLES="10" ETH_SENDER_GAS_ADJUSTER_INTERNAL_PUBDATA_PRICING_MULTIPLIER="1.0" ETH_SENDER_WAIT_FOR_PROOFS="false" - ETH_SENDER_SENDER_AGGREGATED_PROOF_SIZES="1,5" ETH_SENDER_SENDER_MAX_AGGREGATED_BLOCKS_TO_COMMIT="3" ETH_SENDER_SENDER_MAX_AGGREGATED_BLOCKS_TO_EXECUTE="4" ETH_SENDER_SENDER_AGGREGATED_BLOCK_COMMIT_DEADLINE="30" diff --git a/core/lib/protobuf_config/src/eth.rs b/core/lib/protobuf_config/src/eth.rs index d4ea1d9f2697..10e80810be57 100644 --- a/core/lib/protobuf_config/src/eth.rs +++ b/core/lib/protobuf_config/src/eth.rs @@ -69,13 +69,6 @@ impl ProtoRepr for proto::Sender { type Type = configs::eth_sender::SenderConfig; fn read(&self) -> anyhow::Result { Ok(Self::Type { - aggregated_proof_sizes: self - .aggregated_proof_sizes - .iter() - .enumerate() - .map(|(i, x)| (*x).try_into().context(i)) - .collect::>() - .context("aggregated_proof_sizes")?, wait_confirmations: self.wait_confirmations, tx_poll_period: *required(&self.tx_poll_period).context("tx_poll_period")?, aggregate_tx_poll_period: *required(&self.aggregate_tx_poll_period) @@ -122,11 +115,6 @@ impl ProtoRepr for proto::Sender { fn build(this: &Self::Type) -> Self { Self { - aggregated_proof_sizes: this - .aggregated_proof_sizes - .iter() - .map(|x| (*x).try_into().unwrap()) - .collect(), wait_confirmations: this.wait_confirmations, tx_poll_period: Some(this.tx_poll_period), aggregate_tx_poll_period: Some(this.aggregate_tx_poll_period), diff --git a/core/lib/protobuf_config/src/proto/config/eth_sender.proto b/core/lib/protobuf_config/src/proto/config/eth_sender.proto index 6438573e08df..1176afd7c442 100644 --- a/core/lib/protobuf_config/src/proto/config/eth_sender.proto +++ b/core/lib/protobuf_config/src/proto/config/eth_sender.proto @@ -28,7 +28,7 @@ enum PubdataSendingMode { } message Sender { - repeated uint64 aggregated_proof_sizes = 1; // ? + reserved 1; reserved "aggregated_proof_sizes"; optional uint64 wait_confirmations = 2; // optional optional uint64 tx_poll_period = 3; // required; s optional uint64 aggregate_tx_poll_period = 4; // required; s diff --git a/core/lib/types/src/aggregated_operations.rs b/core/lib/types/src/aggregated_operations.rs index 44b730c929a3..d68610ffeb41 100644 --- a/core/lib/types/src/aggregated_operations.rs +++ b/core/lib/types/src/aggregated_operations.rs @@ -41,3 +41,11 @@ impl FromStr for AggregatedActionType { } } } + +/// Additional gas cost of processing `Execute` operation per batch. +/// It's applicable iff SL is Ethereum. +pub const L1_BATCH_EXECUTE_BASE_COST: u32 = 30_000; + +/// Additional gas cost of processing `Execute` operation per L1->L2 tx. +/// It's applicable iff SL is Ethereum. +pub const L1_OPERATION_EXECUTE_COST: u32 = 12_500; diff --git a/core/lib/types/src/block.rs b/core/lib/types/src/block.rs index 804da61b7295..c4fd3306f2d5 100644 --- a/core/lib/types/src/block.rs +++ b/core/lib/types/src/block.rs @@ -1,5 +1,3 @@ -use std::{fmt, ops}; - use serde::{Deserialize, Serialize}; use zksync_basic_types::{commitment::PubdataParams, Address, Bloom, BloomInput, H256, U256}; use zksync_contracts::BaseSystemContractsHashes; @@ -177,51 +175,6 @@ impl L1BatchHeader { } } -#[derive(Clone, Copy, Eq, PartialEq, Default)] -pub struct BlockGasCount { - pub commit: u32, - pub prove: u32, - pub execute: u32, -} - -impl fmt::Debug for BlockGasCount { - fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - formatter, - "c:{}/p:{}/e:{}", - self.commit, self.prove, self.execute - ) - } -} - -impl BlockGasCount { - pub fn any_field_greater_than(&self, bound: u32) -> bool { - self.commit > bound || self.prove > bound || self.execute > bound - } -} - -impl ops::Add for BlockGasCount { - type Output = Self; - - fn add(self, rhs: Self) -> Self::Output { - Self { - commit: self.commit + rhs.commit, - prove: self.prove + rhs.prove, - execute: self.execute + rhs.execute, - } - } -} - -impl ops::AddAssign for BlockGasCount { - fn add_assign(&mut self, other: Self) { - *self = Self { - commit: self.commit + other.commit, - prove: self.prove + other.prove, - execute: self.execute + other.execute, - }; - } -} - /// Hasher of L2 block contents used by the VM. #[derive(Debug)] pub struct L2BlockHasher { diff --git a/core/lib/types/src/eth_sender.rs b/core/lib/types/src/eth_sender.rs index 12a5a5a8fb13..e8e12993054f 100644 --- a/core/lib/types/src/eth_sender.rs +++ b/core/lib/types/src/eth_sender.rs @@ -47,7 +47,7 @@ pub struct EthTx { pub raw_tx: Vec, pub tx_type: AggregatedActionType, pub created_at_timestamp: u64, - pub predicted_gas_cost: u64, + pub predicted_gas_cost: Option, /// If this field is `Some` then it contains address of a custom operator that has sent /// this transaction. If it is set to `None` this transaction was sent by the main operator. pub from_addr: Option
, diff --git a/core/lib/vm_interface/src/types/outputs/execution_result.rs b/core/lib/vm_interface/src/types/outputs/execution_result.rs index 9bb784fbf71c..e95721dbb461 100644 --- a/core/lib/vm_interface/src/types/outputs/execution_result.rs +++ b/core/lib/vm_interface/src/types/outputs/execution_result.rs @@ -200,6 +200,7 @@ impl VmExecutionResultAndLogs { published_bytecode_bytes, l2_l1_long_messages, l2_to_l1_logs: self.logs.total_l2_to_l1_logs_count(), + user_l2_to_l1_logs: self.logs.user_l2_to_l1_logs.len(), contracts_used: self.statistics.contracts_used, contracts_deployed, vm_events: self.logs.events.len(), diff --git a/core/lib/vm_interface/src/types/outputs/statistic.rs b/core/lib/vm_interface/src/types/outputs/statistic.rs index f8e3851c8321..fdb89c08f498 100644 --- a/core/lib/vm_interface/src/types/outputs/statistic.rs +++ b/core/lib/vm_interface/src/types/outputs/statistic.rs @@ -177,6 +177,7 @@ pub struct TransactionExecutionMetrics { pub published_bytecode_bytes: usize, pub l2_l1_long_messages: usize, pub l2_l1_logs: usize, + pub user_l2_l1_logs: usize, pub contracts_used: usize, pub contracts_deployed: u16, pub vm_events: usize, @@ -201,6 +202,7 @@ impl Default for TransactionExecutionMetrics { published_bytecode_bytes: 0, l2_l1_long_messages: 0, l2_l1_logs: 0, + user_l2_l1_logs: 0, contracts_used: 0, contracts_deployed: 0, vm_events: 0, @@ -221,6 +223,7 @@ pub struct VmExecutionMetrics { pub published_bytecode_bytes: usize, pub l2_l1_long_messages: usize, pub l2_to_l1_logs: usize, + pub user_l2_to_l1_logs: usize, pub contracts_used: usize, pub contracts_deployed: u16, pub vm_events: usize, @@ -238,6 +241,7 @@ impl VmExecutionMetrics { published_bytecode_bytes: tx_metrics.published_bytecode_bytes, l2_l1_long_messages: tx_metrics.l2_l1_long_messages, l2_to_l1_logs: tx_metrics.l2_l1_logs, + user_l2_to_l1_logs: tx_metrics.user_l2_l1_logs, contracts_deployed: tx_metrics.contracts_deployed, contracts_used: tx_metrics.contracts_used, gas_used: tx_metrics.gas_used, @@ -274,6 +278,7 @@ impl ops::Add for VmExecutionMetrics { contracts_used: self.contracts_used + other.contracts_used, l2_l1_long_messages: self.l2_l1_long_messages + other.l2_l1_long_messages, l2_to_l1_logs: self.l2_to_l1_logs + other.l2_to_l1_logs, + user_l2_to_l1_logs: self.user_l2_to_l1_logs + other.user_l2_to_l1_logs, gas_used: self.gas_used + other.gas_used, vm_events: self.vm_events + other.vm_events, storage_logs: self.storage_logs + other.storage_logs, diff --git a/core/node/api_server/src/execution_sandbox/vm_metrics.rs b/core/node/api_server/src/execution_sandbox/vm_metrics.rs index 282d9bdf1b77..2f6d21f3a875 100644 --- a/core/node/api_server/src/execution_sandbox/vm_metrics.rs +++ b/core/node/api_server/src/execution_sandbox/vm_metrics.rs @@ -164,6 +164,7 @@ pub(super) fn collect_tx_execution_metrics( published_bytecode_bytes, l2_l1_long_messages, l2_l1_logs: result.logs.total_l2_to_l1_logs_count(), + user_l2_l1_logs: result.logs.user_l2_to_l1_logs.len(), contracts_used: result.statistics.contracts_used, contracts_deployed, vm_events: result.logs.events.len(), diff --git a/core/node/api_server/src/tx_sender/mod.rs b/core/node/api_server/src/tx_sender/mod.rs index 91fb84ab8f17..76cfb83aec54 100644 --- a/core/node/api_server/src/tx_sender/mod.rs +++ b/core/node/api_server/src/tx_sender/mod.rs @@ -671,7 +671,7 @@ impl TxSender { // but the API assumes we are post boojum. In this situation we will determine a tx as being executable but the StateKeeper will // still reject them as it's not. let protocol_version = ProtocolVersionId::latest(); - let seal_data = SealData::for_transaction(transaction, tx_metrics, protocol_version); + let seal_data = SealData::for_transaction(transaction, tx_metrics); if let Some(reason) = self .0 .sealer diff --git a/core/node/eth_sender/src/aggregator.rs b/core/node/eth_sender/src/aggregator.rs index 3bdbf23242f0..8b0d8dfecea0 100644 --- a/core/node/eth_sender/src/aggregator.rs +++ b/core/node/eth_sender/src/aggregator.rs @@ -12,13 +12,14 @@ use zksync_types::{ helpers::unix_timestamp_ms, protocol_version::{L1VerifierConfig, ProtocolSemanticVersion}, pubdata_da::PubdataSendingMode, - L1BatchNumber, ProtocolVersionId, + settlement::SettlementMode, + Address, L1BatchNumber, ProtocolVersionId, }; use super::{ aggregated_operations::AggregatedOperation, publish_criterion::{ - DataSizeCriterion, GasCriterion, L1BatchPublishCriterion, NumberCriterion, + GasCriterionKind, L1BatchPublishCriterion, L1GasCriterion, NumberCriterion, TimestampDeadlineCriterion, }, }; @@ -44,65 +45,89 @@ impl Aggregator { pub fn new( config: SenderConfig, blob_store: Arc, - operate_4844_mode: bool, + custom_commit_sender_addr: Option
, commitment_mode: L1BatchCommitmentMode, + settlement_mode: SettlementMode, ) -> Self { let pubdata_da = config.pubdata_sending_mode; - Self { - commit_criteria: vec![ + let operate_4844_mode = + custom_commit_sender_addr.is_some() && !settlement_mode.is_gateway(); + + // We do not have a reliable lower bound for gas needed to execute batches on gateway so we do not aggregate. + let execute_criteria: Vec> = if settlement_mode + .is_gateway() + { + if config.max_aggregated_blocks_to_execute > 1 { + tracing::warn!( + "config.max_aggregated_blocks_to_execute is set to {} but \ + aggregator does not support aggregating execute operations when settling on gateway", + config.max_aggregated_blocks_to_execute + ); + } + + vec![Box::from(NumberCriterion { + op: AggregatedActionType::Execute, + limit: 1, + })] + } else { + vec![ Box::from(NumberCriterion { - op: AggregatedActionType::Commit, - limit: config.max_aggregated_blocks_to_commit, + op: AggregatedActionType::Execute, + limit: config.max_aggregated_blocks_to_execute, + }), + Box::from(TimestampDeadlineCriterion { + op: AggregatedActionType::Execute, + deadline_seconds: config.aggregated_block_execute_deadline, + max_allowed_lag: Some(config.timestamp_criteria_max_allowed_lag), }), - Box::from(GasCriterion::new( - AggregatedActionType::Commit, + Box::from(L1GasCriterion::new( config.max_aggregated_tx_gas, + GasCriterionKind::Execute, )), - Box::from(DataSizeCriterion { + ] + }; + + // It only makes sense to aggregate commit operation when validium chain settles to L1. + let commit_criteria: Vec> = if settlement_mode + == SettlementMode::SettlesToL1 + && commitment_mode == L1BatchCommitmentMode::Validium + { + vec![ + Box::from(NumberCriterion { op: AggregatedActionType::Commit, - data_limit: config.max_eth_tx_data_size, - pubdata_da, - commitment_mode, + limit: config.max_aggregated_blocks_to_commit, }), Box::from(TimestampDeadlineCriterion { op: AggregatedActionType::Commit, deadline_seconds: config.aggregated_block_commit_deadline, max_allowed_lag: Some(config.timestamp_criteria_max_allowed_lag), }), - ], - proof_criteria: vec![ - Box::from(NumberCriterion { - op: AggregatedActionType::PublishProofOnchain, - limit: *config.aggregated_proof_sizes.iter().max().unwrap() as u32, - }), - Box::from(GasCriterion::new( - AggregatedActionType::PublishProofOnchain, + Box::from(L1GasCriterion::new( config.max_aggregated_tx_gas, + GasCriterionKind::CommitValidium, )), - Box::from(TimestampDeadlineCriterion { - op: AggregatedActionType::PublishProofOnchain, - deadline_seconds: config.aggregated_block_prove_deadline, - // Currently, we can't use this functionality for proof criterion - // since we don't send dummy and real proofs in the same range, - // so even small ranges must be closed. - max_allowed_lag: None, - }), - ], - execute_criteria: vec![ - Box::from(NumberCriterion { - op: AggregatedActionType::Execute, - limit: config.max_aggregated_blocks_to_execute, - }), - Box::from(GasCriterion::new( - AggregatedActionType::Execute, - config.max_aggregated_tx_gas, - )), - Box::from(TimestampDeadlineCriterion { - op: AggregatedActionType::Execute, - deadline_seconds: config.aggregated_block_execute_deadline, - max_allowed_lag: Some(config.timestamp_criteria_max_allowed_lag), - }), - ], + ] + } else { + if config.max_aggregated_blocks_to_commit > 1 { + tracing::warn!( + "config.max_aggregated_blocks_to_commit is set to {} but \ + aggregator does not support aggregating commit operations anymore", + config.max_aggregated_blocks_to_commit + ); + } + vec![Box::from(NumberCriterion { + op: AggregatedActionType::Commit, + limit: 1, + })] + }; + + Self { + commit_criteria, + proof_criteria: vec![Box::from(NumberCriterion { + op: AggregatedActionType::PublishProofOnchain, + limit: 1, + })], + execute_criteria, config, blob_store, operate_4844_mode, @@ -137,12 +162,7 @@ impl Aggregator { { Some(AggregatedOperation::Execute(op)) } else if let Some(op) = self - .get_proof_operation( - storage, - *self.config.aggregated_proof_sizes.iter().max().unwrap(), - last_sealed_l1_batch_number, - l1_verifier_config, - ) + .get_proof_operation(storage, last_sealed_l1_batch_number, l1_verifier_config) .await { Some(AggregatedOperation::PublishProofOnchain(op)) @@ -250,12 +270,11 @@ impl Aggregator { async fn load_dummy_proof_operations( storage: &mut Connection<'_, Core>, - limit: usize, is_4844_mode: bool, ) -> Vec { let mut ready_for_proof_l1_batches = storage .blocks_dal() - .get_ready_for_dummy_proof_l1_batches(limit) + .get_ready_for_dummy_proof_l1_batches(1) .await .unwrap(); @@ -424,7 +443,6 @@ impl Aggregator { async fn get_proof_operation( &mut self, storage: &mut Connection<'_, Core>, - limit: usize, last_sealed_l1_batch: L1BatchNumber, l1_verifier_config: L1VerifierConfig, ) -> Option { @@ -441,7 +459,7 @@ impl Aggregator { ProofSendingMode::SkipEveryProof => { let ready_for_proof_l1_batches = - Self::load_dummy_proof_operations(storage, limit, self.operate_4844_mode).await; + Self::load_dummy_proof_operations(storage, self.operate_4844_mode).await; self.prepare_dummy_proof_operation( storage, ready_for_proof_l1_batches, @@ -464,7 +482,7 @@ impl Aggregator { } else { let ready_for_proof_batches = storage .blocks_dal() - .get_skipped_for_proof_l1_batches(limit) + .get_skipped_for_proof_l1_batches(1) .await .unwrap(); self.prepare_dummy_proof_operation( diff --git a/core/node/eth_sender/src/eth_tx_aggregator.rs b/core/node/eth_sender/src/eth_tx_aggregator.rs index 7b6280c9592f..dbef6da7b47b 100644 --- a/core/node/eth_sender/src/eth_tx_aggregator.rs +++ b/core/node/eth_sender/src/eth_tx_aggregator.rs @@ -15,7 +15,7 @@ use zksync_l1_contract_interface::{ use zksync_shared_metrics::BlockL1Stage; use zksync_types::{ aggregated_operations::AggregatedActionType, - commitment::{L1BatchWithMetadata, SerializeCommitment}, + commitment::{L1BatchCommitmentMode, L1BatchWithMetadata, SerializeCommitment}, eth_sender::{EthTx, EthTxBlobSidecar, EthTxBlobSidecarV1, SidecarBlobV1}, ethabi::{Function, Token}, l2_to_l1_log::UserL2ToL1Log, @@ -30,7 +30,7 @@ use super::aggregated_operations::AggregatedOperation; use crate::{ health::{EthTxAggregatorHealthDetails, EthTxDetails}, metrics::{PubdataKind, METRICS}, - utils::agg_l1_batch_base_cost, + publish_criterion::L1GasCriterion, zksync_functions::ZkSyncFunctions, Aggregator, EthSenderError, }; @@ -589,12 +589,19 @@ impl EthTxAggregator { let encoded_aggregated_op = self.encode_aggregated_op(aggregated_op); let l1_batch_number_range = aggregated_op.l1_batch_range(); - let predicted_gas_for_batches = transaction - .blocks_dal() - .get_l1_batches_predicted_gas(l1_batch_number_range.clone(), op_type) - .await - .unwrap(); - let eth_tx_predicted_gas = agg_l1_batch_base_cost(op_type) + predicted_gas_for_batches; + let eth_tx_predicted_gas = match (op_type, is_gateway, self.aggregator.mode()) { + (AggregatedActionType::Execute, false, _) => Some( + L1GasCriterion::total_execute_gas_amount( + &mut transaction, + l1_batch_number_range.clone(), + ) + .await, + ), + (AggregatedActionType::Commit, false, L1BatchCommitmentMode::Validium) => Some( + L1GasCriterion::total_validium_commit_gas_amount(l1_batch_number_range.clone()), + ), + _ => None, + }; let eth_tx = transaction .eth_sender_dal() diff --git a/core/node/eth_sender/src/eth_tx_manager.rs b/core/node/eth_sender/src/eth_tx_manager.rs index f411e9b3ae4b..17f71b69303a 100644 --- a/core/node/eth_sender/src/eth_tx_manager.rs +++ b/core/node/eth_sender/src/eth_tx_manager.rs @@ -500,13 +500,14 @@ impl EthTxManager { .track_eth_tx_metrics(storage, BlockL1Stage::Mined, tx) .await; - if gas_used > U256::from(tx.predicted_gas_cost) { - tracing::error!( - "Predicted gas {} lower than used gas {gas_used} for tx {:?} {}", - tx.predicted_gas_cost, - tx.tx_type, - tx.id - ); + if let Some(predicted_gas_cost) = tx.predicted_gas_cost { + if gas_used > U256::from(predicted_gas_cost) { + tracing::error!( + "Predicted gas {predicted_gas_cost} lower than used gas {gas_used} for tx {:?} {}", + tx.tx_type, + tx.id + ); + } } tracing::info!( "eth_tx {} with hash {tx_hash:?} for {} is confirmed. Gas spent: {gas_used:?}", diff --git a/core/node/eth_sender/src/health.rs b/core/node/eth_sender/src/health.rs index 1aff80dae6d2..1a07a61e2892 100644 --- a/core/node/eth_sender/src/health.rs +++ b/core/node/eth_sender/src/health.rs @@ -39,7 +39,7 @@ pub struct EthTxDetails { pub nonce: Nonce, pub tx_type: AggregatedActionType, pub created_at_timestamp: u64, - pub predicted_gas_cost: u64, + pub predicted_gas_cost: Option, pub status: Option, } diff --git a/core/node/eth_sender/src/lib.rs b/core/node/eth_sender/src/lib.rs index fc6076ec640b..feec550b011d 100644 --- a/core/node/eth_sender/src/lib.rs +++ b/core/node/eth_sender/src/lib.rs @@ -6,7 +6,6 @@ mod eth_tx_manager; mod health; mod metrics; mod publish_criterion; -mod utils; mod zksync_functions; mod abstract_l1_interface; diff --git a/core/node/eth_sender/src/publish_criterion.rs b/core/node/eth_sender/src/publish_criterion.rs index 30f0820b148a..28ca44697bb6 100644 --- a/core/node/eth_sender/src/publish_criterion.rs +++ b/core/node/eth_sender/src/publish_criterion.rs @@ -1,18 +1,17 @@ -use std::fmt; +use std::{fmt, ops}; use async_trait::async_trait; use chrono::Utc; use zksync_dal::{Connection, Core, CoreDal}; -use zksync_l1_contract_interface::{i_executor::structures::CommitBatchInfo, Tokenizable}; use zksync_types::{ - aggregated_operations::AggregatedActionType, - commitment::{L1BatchCommitmentMode, L1BatchWithMetadata}, - ethabi, - pubdata_da::PubdataSendingMode, + aggregated_operations::{ + AggregatedActionType, L1_BATCH_EXECUTE_BASE_COST, L1_OPERATION_EXECUTE_COST, + }, + commitment::L1BatchWithMetadata, L1BatchNumber, }; -use super::{metrics::METRICS, utils::agg_l1_batch_base_cost}; +use super::metrics::METRICS; #[async_trait] pub trait L1BatchPublishCriterion: fmt::Debug + Send + Sync { @@ -123,32 +122,82 @@ impl L1BatchPublishCriterion for TimestampDeadlineCriterion { } } +#[derive(Debug, Clone, Copy)] +pub enum GasCriterionKind { + CommitValidium, + Execute, +} + +impl From for AggregatedActionType { + fn from(value: GasCriterionKind) -> Self { + match value { + GasCriterionKind::CommitValidium => AggregatedActionType::Commit, + GasCriterionKind::Execute => AggregatedActionType::Execute, + } + } +} + #[derive(Debug)] -pub struct GasCriterion { - pub op: AggregatedActionType, +pub struct L1GasCriterion { pub gas_limit: u32, + pub kind: GasCriterionKind, } -impl GasCriterion { - pub fn new(op: AggregatedActionType, gas_limit: u32) -> GasCriterion { - GasCriterion { op, gas_limit } +impl L1GasCriterion { + /// Base gas cost of processing aggregated `Execute` operation. + /// It's applicable iff SL is Ethereum. + const AGGR_L1_BATCH_EXECUTE_BASE_COST: u32 = 241_000; + + /// Base gas cost of processing aggregated `Commit` operation. + /// It's applicable iff SL is Ethereum. + const AGGR_L1_BATCH_COMMIT_BASE_COST: u32 = 242_000; + + /// Additional gas cost of processing `Commit` operation per batch. + /// It's applicable iff SL is Ethereum. + pub const L1_BATCH_COMMIT_BASE_COST: u32 = 31_000; + + pub fn new(gas_limit: u32, kind: GasCriterionKind) -> L1GasCriterion { + L1GasCriterion { gas_limit, kind } + } + + pub async fn total_execute_gas_amount( + storage: &mut Connection<'_, Core>, + batch_numbers: ops::RangeInclusive, + ) -> u32 { + let mut total = Self::AGGR_L1_BATCH_EXECUTE_BASE_COST; + + for batch_number in batch_numbers.start().0..=batch_numbers.end().0 { + total += Self::get_execute_gas_amount(storage, batch_number.into()).await; + } + + total + } + + pub fn total_validium_commit_gas_amount( + batch_numbers: ops::RangeInclusive, + ) -> u32 { + Self::AGGR_L1_BATCH_COMMIT_BASE_COST + + (batch_numbers.end().0 - batch_numbers.start().0 + 1) + * Self::L1_BATCH_COMMIT_BASE_COST } - async fn get_gas_amount( - &self, + async fn get_execute_gas_amount( storage: &mut Connection<'_, Core>, batch_number: L1BatchNumber, ) -> u32 { - storage + let header = storage .blocks_dal() - .get_l1_batches_predicted_gas(batch_number..=batch_number, self.op) + .get_l1_batch_header(batch_number) .await .unwrap() + .unwrap_or_else(|| panic!("Missing L1 batch header in DB for #{batch_number}")); + + L1_BATCH_EXECUTE_BASE_COST + u32::from(header.l1_tx_count) * L1_OPERATION_EXECUTE_COST } } #[async_trait] -impl L1BatchPublishCriterion for GasCriterion { +impl L1BatchPublishCriterion for L1GasCriterion { fn name(&self) -> &'static str { "gas_limit" } @@ -159,17 +208,25 @@ impl L1BatchPublishCriterion for GasCriterion { consecutive_l1_batches: &[L1BatchWithMetadata], _last_sealed_l1_batch: L1BatchNumber, ) -> Option { - let base_cost = agg_l1_batch_base_cost(self.op); + let aggr_cost = match self.kind { + GasCriterionKind::Execute => Self::AGGR_L1_BATCH_EXECUTE_BASE_COST, + GasCriterionKind::CommitValidium => Self::AGGR_L1_BATCH_COMMIT_BASE_COST, + }; assert!( - self.gas_limit > base_cost, + self.gas_limit > aggr_cost, "Config max gas cost for operations is too low" ); // We're not sure our predictions are accurate, so it's safer to lower the gas limit by 10% - let mut gas_left = (self.gas_limit as f64 * 0.9).round() as u32 - base_cost; + let mut gas_left = (self.gas_limit as f64 * 0.9).round() as u32 - aggr_cost; let mut last_l1_batch = None; for (index, l1_batch) in consecutive_l1_batches.iter().enumerate() { - let batch_gas = self.get_gas_amount(storage, l1_batch.header.number).await; + let batch_gas = match self.kind { + GasCriterionKind::Execute => { + Self::get_execute_gas_amount(storage, l1_batch.header.number).await + } + GasCriterionKind::CommitValidium => Self::L1_BATCH_COMMIT_BASE_COST, + }; if batch_gas >= gas_left { if index == 0 { panic!( @@ -185,70 +242,16 @@ impl L1BatchPublishCriterion for GasCriterion { } if let Some(last_l1_batch) = last_l1_batch { + let op: AggregatedActionType = self.kind.into(); let first_l1_batch_number = consecutive_l1_batches.first().unwrap().header.number.0; tracing::debug!( "`gas_limit` publish criterion (gas={}) triggered for op {} with L1 batch range {:?}", self.gas_limit - gas_left, - self.op, + op, first_l1_batch_number..=last_l1_batch.0 ); - METRICS.block_aggregation_reason[&(self.op, "gas").into()].inc(); + METRICS.block_aggregation_reason[&(op, "gas").into()].inc(); } last_l1_batch } } - -#[derive(Debug)] -pub struct DataSizeCriterion { - pub op: AggregatedActionType, - pub data_limit: usize, - pub pubdata_da: PubdataSendingMode, - pub commitment_mode: L1BatchCommitmentMode, -} - -#[async_trait] -impl L1BatchPublishCriterion for DataSizeCriterion { - fn name(&self) -> &'static str { - "data_size" - } - - async fn last_l1_batch_to_publish( - &mut self, - _storage: &mut Connection<'_, Core>, - consecutive_l1_batches: &[L1BatchWithMetadata], - _last_sealed_l1_batch: L1BatchNumber, - ) -> Option { - const STORED_BLOCK_INFO_SIZE: usize = 96; // size of `StoredBlockInfo` solidity struct - let mut data_size_left = self.data_limit - STORED_BLOCK_INFO_SIZE; - - for (index, l1_batch) in consecutive_l1_batches.iter().enumerate() { - // TODO (PLA-771): Make sure that this estimation is correct. - let commit_token = - CommitBatchInfo::new(self.commitment_mode, l1_batch, self.pubdata_da).into_token(); - let l1_commit_data_size = ethabi::encode(&[commit_token]).len(); - - if data_size_left < l1_commit_data_size { - if index == 0 { - panic!( - "L1 batch #{} requires {} data, which is more than the range limit of {}", - l1_batch.header.number, l1_commit_data_size, self.data_limit - ); - } - - let first_l1_batch_number = consecutive_l1_batches.first().unwrap().header.number.0; - let output = l1_batch.header.number - 1; - tracing::debug!( - "`data_size` publish criterion (data={}) triggered for op {} with L1 batch range {:?}", - self.data_limit - data_size_left, - self.op, - first_l1_batch_number..=output.0 - ); - METRICS.block_aggregation_reason[&(self.op, "data_size").into()].inc(); - return Some(output); - } - data_size_left -= l1_commit_data_size; - } - - None - } -} diff --git a/core/node/eth_sender/src/tester.rs b/core/node/eth_sender/src/tester.rs index b62223d0d68b..3caf0cae5f87 100644 --- a/core/node/eth_sender/src/tester.rs +++ b/core/node/eth_sender/src/tester.rs @@ -146,7 +146,6 @@ impl EthSenderTester { PubdataSendingMode::Calldata }; let aggregator_config = SenderConfig { - aggregated_proof_sizes: vec![1], pubdata_sending_mode, ..eth_sender_config.clone().sender.unwrap() }; @@ -256,8 +255,9 @@ impl EthSenderTester { Aggregator::new( aggregator_config.clone(), MockObjectStore::arc(), - aggregator_operate_4844_mode, + custom_commit_sender_addr, commitment_mode, + SettlementMode::SettlesToL1, ), gateway.clone(), // ZKsync contract address diff --git a/core/node/eth_sender/src/utils.rs b/core/node/eth_sender/src/utils.rs deleted file mode 100644 index 98139c201993..000000000000 --- a/core/node/eth_sender/src/utils.rs +++ /dev/null @@ -1,14 +0,0 @@ -use zksync_types::aggregated_operations::AggregatedActionType; - -// TODO(QIT-32): Remove constants(except `L1_OPERATION_EXECUTE_COST`) and logic that use them -const AGGR_L1_BATCH_COMMIT_BASE_COST: u32 = 242_000; -const AGGR_L1_BATCH_PROVE_BASE_COST: u32 = 1_000_000; -const AGGR_L1_BATCH_EXECUTE_BASE_COST: u32 = 241_000; - -pub fn agg_l1_batch_base_cost(op: AggregatedActionType) -> u32 { - match op { - AggregatedActionType::Commit => AGGR_L1_BATCH_COMMIT_BASE_COST, - AggregatedActionType::PublishProofOnchain => AGGR_L1_BATCH_PROVE_BASE_COST, - AggregatedActionType::Execute => AGGR_L1_BATCH_EXECUTE_BASE_COST, - } -} diff --git a/core/node/genesis/src/lib.rs b/core/node/genesis/src/lib.rs index 0a0e77d97f95..38972389129e 100644 --- a/core/node/genesis/src/lib.rs +++ b/core/node/genesis/src/lib.rs @@ -16,7 +16,7 @@ use zksync_merkle_tree::{domain::ZkSyncTree, TreeInstruction}; use zksync_multivm::utils::get_max_gas_per_pubdata_byte; use zksync_system_constants::PRIORITY_EXPIRATION; use zksync_types::{ - block::{BlockGasCount, DeployedContract, L1BatchHeader, L2BlockHasher, L2BlockHeader}, + block::{DeployedContract, L1BatchHeader, L2BlockHasher, L2BlockHeader}, bytecode::BytecodeHash, commitment::{CommitmentInput, L1BatchCommitment}, fee_model::BatchFeeInput, @@ -425,14 +425,7 @@ pub async fn create_genesis_l1_batch( .await?; transaction .blocks_dal() - .mark_l1_batch_as_sealed( - &genesis_l1_batch_header, - &[], - BlockGasCount::default(), - &[], - &[], - Default::default(), - ) + .mark_l1_batch_as_sealed(&genesis_l1_batch_header, &[], &[], &[], Default::default()) .await?; transaction .blocks_dal() diff --git a/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs b/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs index 235158544c54..d2be0b383393 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender/aggregator.rs @@ -111,8 +111,9 @@ impl WiringLayer for EthTxAggregatorLayer { let aggregator = Aggregator::new( config.clone(), object_store, - eth_client_blobs_addr.is_some(), + eth_client_blobs_addr, self.l1_batch_commit_data_generator_mode, + self.settlement_mode, ); let eth_tx_aggregator = EthTxAggregator::new( diff --git a/core/node/state_keeper/src/executor/mod.rs b/core/node/state_keeper/src/executor/mod.rs index 903dae2f1cad..a6c7b92fa249 100644 --- a/core/node/state_keeper/src/executor/mod.rs +++ b/core/node/state_keeper/src/executor/mod.rs @@ -1,25 +1,23 @@ use zksync_multivm::interface::{ BatchTransactionExecutionResult, Call, CompressedBytecodeInfo, ExecutionResult, Halt, - VmExecutionResultAndLogs, + VmExecutionMetrics, VmExecutionResultAndLogs, }; use zksync_types::Transaction; pub use zksync_vm_executor::batch::MainBatchExecutorFactory; -use crate::ExecutionMetricsForCriteria; - #[cfg(test)] mod tests; /// State keeper representation of a transaction executed in the virtual machine. /// /// A separate type allows to be more typesafe when dealing with halted transactions. It also simplifies testing seal criteria -/// (i.e., without picking transactions that actually produce appropriate `ExecutionMetricsForCriteria`). +/// (i.e., without picking transactions that actually produce appropriate `VmExecutionMetrics`). #[derive(Debug, Clone)] pub enum TxExecutionResult { /// Successful execution of the tx and the block tip dry run. Success { tx_result: Box, - tx_metrics: Box, + tx_metrics: Box, compressed_bytecodes: Vec, call_tracer_result: Vec, gas_remaining: u32, @@ -38,7 +36,7 @@ impl TxExecutionResult { } => Self::BootloaderOutOfGasForTx, ExecutionResult::Halt { reason } => Self::RejectedByVm { reason }, _ => Self::Success { - tx_metrics: Box::new(ExecutionMetricsForCriteria::new(Some(tx), &res.tx_result)), + tx_metrics: Box::new(res.tx_result.get_execution_metrics(Some(tx))), gas_remaining: res.tx_result.statistics.gas_remaining, tx_result: res.tx_result.clone(), compressed_bytecodes: res.compressed_bytecodes, diff --git a/core/node/state_keeper/src/io/persistence.rs b/core/node/state_keeper/src/io/persistence.rs index d8fd99bfc95d..8db7fe4120ed 100644 --- a/core/node/state_keeper/src/io/persistence.rs +++ b/core/node/state_keeper/src/io/persistence.rs @@ -386,8 +386,8 @@ mod tests { use zksync_multivm::interface::{FinishedL1Batch, VmExecutionMetrics}; use zksync_node_genesis::{insert_genesis_batch, GenesisParams}; use zksync_types::{ - api::TransactionStatus, block::BlockGasCount, h256_to_u256, writes::StateDiffRecord, - L1BatchNumber, L2BlockNumber, StorageLogKind, H256, U256, + api::TransactionStatus, h256_to_u256, writes::StateDiffRecord, L1BatchNumber, + L2BlockNumber, StorageLogKind, H256, U256, }; use super::*; @@ -508,7 +508,6 @@ mod tests { tx, tx_result, vec![], - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], ); diff --git a/core/node/state_keeper/src/io/seal_logic/l2_block_seal_subtasks.rs b/core/node/state_keeper/src/io/seal_logic/l2_block_seal_subtasks.rs index a6356a838602..701e121285d4 100644 --- a/core/node/state_keeper/src/io/seal_logic/l2_block_seal_subtasks.rs +++ b/core/node/state_keeper/src/io/seal_logic/l2_block_seal_subtasks.rs @@ -538,10 +538,10 @@ mod tests { user_l2_to_l1_logs, system_l2_to_l1_logs: Default::default(), new_factory_deps, - l1_gas_count: Default::default(), block_execution_metrics: Default::default(), txs_encoding_size: Default::default(), payload_encoding_size: Default::default(), + l1_tx_count: 0, timestamp: 1, number: L2BlockNumber(1), prev_block_hash: Default::default(), diff --git a/core/node/state_keeper/src/io/seal_logic/mod.rs b/core/node/state_keeper/src/io/seal_logic/mod.rs index 419413e127d3..655bf182ba8f 100644 --- a/core/node/state_keeper/src/io/seal_logic/mod.rs +++ b/core/node/state_keeper/src/io/seal_logic/mod.rs @@ -145,7 +145,6 @@ impl UpdatesManager { .mark_l1_batch_as_sealed( &l1_batch, &final_bootloader_memory, - self.pending_l1_gas_count(), &finished_batch.final_execution_state.storage_refunds, &finished_batch.final_execution_state.pubdata_costs, self.pending_execution_metrics().circuit_statistic, diff --git a/core/node/state_keeper/src/io/tests/mod.rs b/core/node/state_keeper/src/io/tests/mod.rs index 5a44bf71ad39..15164328b7a0 100644 --- a/core/node/state_keeper/src/io/tests/mod.rs +++ b/core/node/state_keeper/src/io/tests/mod.rs @@ -13,7 +13,7 @@ use zksync_multivm::{ use zksync_node_test_utils::prepare_recovery_snapshot; use zksync_system_constants::KNOWN_CODES_STORAGE_ADDRESS; use zksync_types::{ - block::{BlockGasCount, L2BlockHasher}, + block::L2BlockHasher, bytecode::BytecodeHash, commitment::{L1BatchCommitmentMode, PubdataParams}, fee_model::{BatchFeeInput, PubdataIndependentBatchFeeModelInput}, @@ -279,7 +279,6 @@ async fn processing_storage_logs_when_sealing_l2_block() { l2_block.extend_from_executed_transaction( tx, execution_result, - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], vec![], @@ -297,7 +296,6 @@ async fn processing_storage_logs_when_sealing_l2_block() { l2_block.extend_from_executed_transaction( tx, execution_result, - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], vec![], @@ -371,7 +369,6 @@ async fn processing_events_when_sealing_l2_block() { l2_block.extend_from_executed_transaction( tx, execution_result, - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], vec![], @@ -476,7 +473,6 @@ async fn processing_dynamic_factory_deps_when_sealing_l2_block() { l2_block.extend_from_executed_transaction( tx, execution_result, - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], vec![], @@ -571,7 +567,6 @@ async fn l2_block_processing_after_snapshot_recovery(commitment_mode: L1BatchCom tx.into(), create_execution_result([]), vec![], - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], ); diff --git a/core/node/state_keeper/src/keeper.rs b/core/node/state_keeper/src/keeper.rs index 7fcc53ad2d26..c892fd8534ec 100644 --- a/core/node/state_keeper/src/keeper.rs +++ b/core/node/state_keeper/src/keeper.rs @@ -29,9 +29,8 @@ use crate::{ io::{IoCursor, L1BatchParams, L2BlockParams, OutputHandler, PendingBatchData, StateKeeperIO}, metrics::{AGGREGATION_METRICS, KEEPER_METRICS, L1_BATCH_METRICS}, seal_criteria::{ConditionalSealer, SealData, SealResolution, UnexecutableReason}, - types::ExecutionMetricsForCriteria, updates::UpdatesManager, - utils::{gas_count_from_writes, is_canceled}, + utils::is_canceled, }; /// Amount of time to block on waiting for some resource. The exact value is not really important, @@ -500,7 +499,7 @@ impl ZkSyncStateKeeper { let TxExecutionResult::Success { tx_result, - tx_metrics, + tx_metrics: tx_execution_metrics, compressed_bytecodes, call_tracer_result, .. @@ -517,11 +516,6 @@ impl ZkSyncStateKeeper { .into()); }; - let ExecutionMetricsForCriteria { - l1_gas: tx_l1_gas_this_tx, - execution_metrics: tx_execution_metrics, - } = *tx_metrics; - let tx_hash = tx.hash(); let is_l1 = tx.is_l1(); let exec_result_status = tx_result.result.clone(); @@ -531,20 +525,17 @@ impl ZkSyncStateKeeper { tx, *tx_result, compressed_bytecodes, - tx_l1_gas_this_tx, - tx_execution_metrics, + *tx_execution_metrics, call_tracer_result, ); tracing::debug!( "Finished re-executing tx {tx_hash} by {initiator_account} (is_l1: {is_l1}, \ #{idx_in_l1_batch} in L1 batch #{l1_batch_number}, #{idx_in_l2_block} in L2 block #{l2_block_number}); \ - status: {exec_result_status:?}. L1 gas spent: {tx_l1_gas_this_tx:?}, total in L1 batch: {pending_l1_gas:?}, \ - tx execution metrics: {tx_execution_metrics:?}, block execution metrics: {block_execution_metrics:?}", + status: {exec_result_status:?}. Tx execution metrics: {tx_execution_metrics:?}, block execution metrics: {block_execution_metrics:?}", idx_in_l1_batch = updates_manager.pending_executed_transactions_len(), l1_batch_number = updates_manager.l1_batch.number, idx_in_l2_block = updates_manager.l2_block.executed_transactions.len(), - pending_l1_gas = updates_manager.pending_l1_gas_count(), block_execution_metrics = updates_manager.pending_execution_metrics() ); } @@ -639,7 +630,7 @@ impl ZkSyncStateKeeper { SealResolution::NoSeal | SealResolution::IncludeAndSeal => { let TxExecutionResult::Success { tx_result, - tx_metrics, + tx_metrics: tx_execution_metrics, call_tracer_result, compressed_bytecodes, .. @@ -649,16 +640,11 @@ impl ZkSyncStateKeeper { "Tx inclusion seal resolution must be a result of a successful tx execution", ); }; - let ExecutionMetricsForCriteria { - l1_gas: tx_l1_gas_this_tx, - execution_metrics: tx_execution_metrics, - } = *tx_metrics; updates_manager.extend_from_executed_transaction( tx, *tx_result, compressed_bytecodes, - tx_l1_gas_this_tx, - tx_execution_metrics, + *tx_execution_metrics, call_tracer_result, ); } @@ -714,7 +700,7 @@ impl ZkSyncStateKeeper { SealResolution::NoSeal | SealResolution::IncludeAndSeal => { let TxExecutionResult::Success { tx_result, - tx_metrics, + tx_metrics: tx_execution_metrics, compressed_bytecodes, call_tracer_result, .. @@ -729,17 +715,11 @@ impl ZkSyncStateKeeper { anyhow::bail!("Failed upgrade tx {:?}", tx.hash()); } - let ExecutionMetricsForCriteria { - l1_gas: tx_l1_gas_this_tx, - execution_metrics: tx_execution_metrics, - .. - } = *tx_metrics; updates_manager.extend_from_executed_transaction( tx, *tx_result, compressed_bytecodes, - tx_l1_gas_this_tx, - tx_execution_metrics, + *tx_execution_metrics, call_tracer_result, ); Ok(()) @@ -823,20 +803,15 @@ impl ZkSyncStateKeeper { } TxExecutionResult::Success { tx_result, - tx_metrics, + tx_metrics: tx_execution_metrics, gas_remaining, .. } => { let tx_execution_status = &tx_result.result; - let ExecutionMetricsForCriteria { - l1_gas: tx_l1_gas_this_tx, - execution_metrics: tx_execution_metrics, - } = **tx_metrics; tracing::trace!( "finished tx {:?} by {:?} (is_l1: {}) (#{} in l1 batch {}) (#{} in L2 block {}) \ - status: {:?}. L1 gas spent: {:?}, total in l1 batch: {:?}, \ - tx execution metrics: {:?}, block execution metrics: {:?}", + status: {:?}. Tx execution metrics: {:?}, block execution metrics: {:?}", tx.hash(), tx.initiator_account(), tx.is_l1(), @@ -845,10 +820,8 @@ impl ZkSyncStateKeeper { updates_manager.l2_block.executed_transactions.len() + 1, updates_manager.l2_block.number, tx_execution_status, - tx_l1_gas_this_tx, - updates_manager.pending_l1_gas_count() + tx_l1_gas_this_tx, &tx_execution_metrics, - updates_manager.pending_execution_metrics() + tx_execution_metrics, + updates_manager.pending_execution_metrics() + **tx_execution_metrics, ); let encoding_len = tx.encoding_len(); @@ -858,20 +831,11 @@ impl ZkSyncStateKeeper { .storage_writes_deduplicator .apply_and_rollback(logs_to_apply_iter.clone()); - let block_writes_l1_gas = gas_count_from_writes( - &block_writes_metrics, - updates_manager.protocol_version(), - ); - let tx_writes_metrics = StorageWritesDeduplicator::apply_on_empty_state(logs_to_apply_iter); - let tx_writes_l1_gas = - gas_count_from_writes(&tx_writes_metrics, updates_manager.protocol_version()); - let tx_gas_excluding_writes = tx_l1_gas_this_tx; let tx_data = SealData { - execution_metrics: tx_execution_metrics, - gas_count: tx_gas_excluding_writes + tx_writes_l1_gas, + execution_metrics: **tx_execution_metrics, cumulative_size: encoding_len, writes_metrics: tx_writes_metrics, gas_remaining: *gas_remaining, @@ -879,19 +843,18 @@ impl ZkSyncStateKeeper { let block_data = SealData { execution_metrics: tx_data.execution_metrics + updates_manager.pending_execution_metrics(), - gas_count: tx_gas_excluding_writes - + block_writes_l1_gas - + updates_manager.pending_l1_gas_count(), cumulative_size: tx_data.cumulative_size + updates_manager.pending_txs_encoding_size(), writes_metrics: block_writes_metrics, gas_remaining: *gas_remaining, }; + let is_tx_l1 = tx.is_l1() as usize; self.sealer.should_seal_l1_batch( updates_manager.l1_batch.number.0, updates_manager.batch_timestamp() as u128 * 1_000, updates_manager.pending_executed_transactions_len() + 1, + updates_manager.pending_l1_transactions_len() + is_tx_l1, &block_data, &tx_data, updates_manager.protocol_version(), diff --git a/core/node/state_keeper/src/lib.rs b/core/node/state_keeper/src/lib.rs index 323580ab0434..001d474cb246 100644 --- a/core/node/state_keeper/src/lib.rs +++ b/core/node/state_keeper/src/lib.rs @@ -7,7 +7,7 @@ pub use self::{ mempool_actor::MempoolFetcher, seal_criteria::SequencerSealer, state_keeper_storage::AsyncRocksdbCache, - types::{ExecutionMetricsForCriteria, MempoolGuard}, + types::MempoolGuard, updates::UpdatesManager, }; diff --git a/core/node/state_keeper/src/seal_criteria/conditional_sealer.rs b/core/node/state_keeper/src/seal_criteria/conditional_sealer.rs index cd00d4f89360..4da7dd463104 100644 --- a/core/node/state_keeper/src/seal_criteria/conditional_sealer.rs +++ b/core/node/state_keeper/src/seal_criteria/conditional_sealer.rs @@ -23,11 +23,13 @@ pub trait ConditionalSealer: 'static + fmt::Debug + Send + Sync { ) -> Option<&'static str>; /// Returns the action that should be taken by the state keeper after executing a transaction. + #[allow(clippy::too_many_arguments)] fn should_seal_l1_batch( &self, l1_batch_number: u32, block_open_timestamp_ms: u128, tx_count: usize, + l1_tx_count: usize, block_data: &SealData, tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -59,6 +61,7 @@ impl ConditionalSealer for SequencerSealer { &self.config, MOCK_BLOCK_TIMESTAMP, TX_COUNT, + TX_COUNT, data, data, protocol_version, @@ -75,6 +78,7 @@ impl ConditionalSealer for SequencerSealer { l1_batch_number: u32, block_open_timestamp_ms: u128, tx_count: usize, + l1_tx_count: usize, block_data: &SealData, tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -91,6 +95,7 @@ impl ConditionalSealer for SequencerSealer { &self.config, block_open_timestamp_ms, tx_count, + l1_tx_count, block_data, tx_data, protocol_version, @@ -132,13 +137,14 @@ impl SequencerSealer { fn default_sealers(config: &StateKeeperConfig) -> Vec> { vec![ Box::new(criteria::SlotsCriterion), - Box::new(criteria::GasCriterion), Box::new(criteria::PubDataBytesCriterion { max_pubdata_per_batch: config.max_pubdata_per_batch, }), Box::new(criteria::CircuitsCriterion), Box::new(criteria::TxEncodingSizeCriterion), Box::new(criteria::GasForBatchTipCriterion), + Box::new(criteria::L1L2TxsCriterion), + Box::new(criteria::L2L1LogsCriterion), ] } } @@ -163,6 +169,7 @@ impl ConditionalSealer for NoopSealer { _l1_batch_number: u32, _block_open_timestamp_ms: u128, _tx_count: usize, + _l1_tx_count: usize, _block_data: &SealData, _tx_data: &SealData, _protocol_version: ProtocolVersionId, diff --git a/core/node/state_keeper/src/seal_criteria/criteria/gas.rs b/core/node/state_keeper/src/seal_criteria/criteria/gas.rs deleted file mode 100644 index a97ac6ede353..000000000000 --- a/core/node/state_keeper/src/seal_criteria/criteria/gas.rs +++ /dev/null @@ -1,180 +0,0 @@ -use zksync_types::ProtocolVersionId; - -use crate::{ - seal_criteria::{ - SealCriterion, SealData, SealResolution, StateKeeperConfig, UnexecutableReason, - }, - utils::new_block_gas_count, -}; - -/// This is a temporary solution. -/// Instead of checking for gas it simply checks that the contracts' -/// bytecode is large enough. -/// Among all the data which will be published on-chain the contracts' -/// bytecode is by far the largest one and with high probability -/// the slots will run out before the other pubdata becomes too big -#[derive(Debug)] -pub(crate) struct GasCriterion; - -impl SealCriterion for GasCriterion { - fn should_seal( - &self, - config: &StateKeeperConfig, - _block_open_timestamp_ms: u128, - _tx_count: usize, - block_data: &SealData, - tx_data: &SealData, - _protocol_version_id: ProtocolVersionId, - ) -> SealResolution { - let tx_bound = - (config.max_single_tx_gas as f64 * config.reject_tx_at_gas_percentage).round() as u32; - let block_bound = - (config.max_single_tx_gas as f64 * config.close_block_at_gas_percentage).round() as u32; - - if (tx_data.gas_count + new_block_gas_count()).any_field_greater_than(tx_bound) { - UnexecutableReason::TooMuchGas.into() - } else if block_data - .gas_count - .any_field_greater_than(config.max_single_tx_gas) - { - SealResolution::ExcludeAndSeal - } else if block_data.gas_count.any_field_greater_than(block_bound) { - SealResolution::IncludeAndSeal - } else { - SealResolution::NoSeal - } - } - - fn prom_criterion_name(&self) -> &'static str { - "gas" - } -} - -#[cfg(test)] -mod tests { - use zksync_types::block::BlockGasCount; - - use super::*; - - #[test] - fn test_gas_seal_criterion() { - // Create an empty config and only setup fields relevant for the test. - let config = StateKeeperConfig { - max_single_tx_gas: 6000000, - reject_tx_at_gas_percentage: 0.95, - close_block_at_gas_percentage: 0.95, - ..Default::default() - }; - - let criterion = GasCriterion; - - // Empty block should fit into gas criterion. - let empty_block_gas = new_block_gas_count(); - let empty_block_resolution = criterion.should_seal( - &config, - 0, - 0, - &SealData { - gas_count: empty_block_gas, - ..SealData::default() - }, - &SealData::default(), - ProtocolVersionId::latest(), - ); - assert_eq!(empty_block_resolution, SealResolution::NoSeal); - - let tx_gas = BlockGasCount { - commit: config.max_single_tx_gas + 1, - prove: 0, - execute: 0, - }; - // Transaction that needs more gas than a block limit should be unexecutable. - let huge_transaction_resolution = criterion.should_seal( - &config, - 0, - 1, - &SealData { - gas_count: empty_block_gas + tx_gas, - ..SealData::default() - }, - &SealData { - gas_count: tx_gas, - ..SealData::default() - }, - ProtocolVersionId::latest(), - ); - assert_eq!( - huge_transaction_resolution, - UnexecutableReason::TooMuchGas.into() - ); - - // Check criterion workflow - let reject_tx_bound = - (config.max_single_tx_gas as f64 * config.reject_tx_at_gas_percentage).round() as u32; - let tx_gas = BlockGasCount { - commit: reject_tx_bound - empty_block_gas.commit, - prove: reject_tx_bound - empty_block_gas.prove, - execute: reject_tx_bound - empty_block_gas.execute, - }; - let resolution_after_first_tx = criterion.should_seal( - &config, - 0, - 1, - &SealData { - gas_count: empty_block_gas + tx_gas, - ..SealData::default() - }, - &SealData { - gas_count: tx_gas, - ..SealData::default() - }, - ProtocolVersionId::latest(), - ); - assert_eq!(resolution_after_first_tx, SealResolution::NoSeal); - - let resolution_after_second_tx = criterion.should_seal( - &config, - 0, - 2, - &SealData { - gas_count: empty_block_gas + tx_gas + tx_gas, - ..SealData::default() - }, - &SealData { - gas_count: tx_gas, - ..SealData::default() - }, - ProtocolVersionId::latest(), - ); - assert_eq!(resolution_after_second_tx, SealResolution::ExcludeAndSeal); - - // Check criterion workflow - let tx_gas = BlockGasCount { - commit: reject_tx_bound - empty_block_gas.commit - 1, - prove: reject_tx_bound - empty_block_gas.prove - 1, - execute: reject_tx_bound - empty_block_gas.execute - 1, - }; - let close_bound = - (config.max_single_tx_gas as f64 * config.close_block_at_gas_percentage).round() as u32; - let block_gas = BlockGasCount { - commit: close_bound + 1, - prove: close_bound + 1, - execute: close_bound + 1, - }; - let resolution_after_first_tx = criterion.should_seal( - &config, - 0, - 1, - &SealData { - gas_count: block_gas, - ..SealData::default() - }, - &SealData { - gas_count: tx_gas, - ..SealData::default() - }, - ProtocolVersionId::latest(), - ); - assert_eq!(resolution_after_first_tx, SealResolution::IncludeAndSeal); - } -} diff --git a/core/node/state_keeper/src/seal_criteria/criteria/gas_for_batch_tip.rs b/core/node/state_keeper/src/seal_criteria/criteria/gas_for_batch_tip.rs index 69214406bea5..263123cdcff2 100644 --- a/core/node/state_keeper/src/seal_criteria/criteria/gas_for_batch_tip.rs +++ b/core/node/state_keeper/src/seal_criteria/criteria/gas_for_batch_tip.rs @@ -15,6 +15,7 @@ impl SealCriterion for GasForBatchTipCriterion { _config: &StateKeeperConfig, _block_open_timestamp_ms: u128, tx_count: usize, + _l1_tx_count: usize, _block_data: &SealData, tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -60,6 +61,7 @@ mod tests { &config, Default::default(), 1, + 0, &seal_data, &seal_data, protocol_version, @@ -74,6 +76,7 @@ mod tests { &config, Default::default(), 1, + 0, &seal_data, &seal_data, protocol_version, @@ -87,6 +90,7 @@ mod tests { &config, Default::default(), 2, + 0, &seal_data, &seal_data, protocol_version, diff --git a/core/node/state_keeper/src/seal_criteria/criteria/geometry_seal_criteria.rs b/core/node/state_keeper/src/seal_criteria/criteria/geometry_seal_criteria.rs index 1f3e8d104ce5..657fa1f71800 100644 --- a/core/node/state_keeper/src/seal_criteria/criteria/geometry_seal_criteria.rs +++ b/core/node/state_keeper/src/seal_criteria/criteria/geometry_seal_criteria.rs @@ -20,6 +20,7 @@ impl SealCriterion for CircuitsCriterion { config: &StateKeeperConfig, _block_open_timestamp_ms: u128, _tx_count: usize, + _l1_tx_count: usize, block_data: &SealData, tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -94,6 +95,7 @@ mod tests { &config, Default::default(), 0, + 0, &SealData { execution_metrics: block_execution_metrics, ..SealData::default() @@ -114,6 +116,7 @@ mod tests { &config, Default::default(), 0, + 0, &SealData { execution_metrics: block_execution_metrics, ..SealData::default() @@ -134,6 +137,7 @@ mod tests { &config, Default::default(), 0, + 0, &SealData { execution_metrics: block_execution_metrics, ..SealData::default() @@ -154,6 +158,7 @@ mod tests { &config, Default::default(), 0, + 0, &SealData::default(), &SealData { execution_metrics: tx_execution_metrics, diff --git a/core/node/state_keeper/src/seal_criteria/criteria/l1_l2_txs.rs b/core/node/state_keeper/src/seal_criteria/criteria/l1_l2_txs.rs new file mode 100644 index 000000000000..fa679a19bab6 --- /dev/null +++ b/core/node/state_keeper/src/seal_criteria/criteria/l1_l2_txs.rs @@ -0,0 +1,104 @@ +use zksync_types::{ + aggregated_operations::{L1_BATCH_EXECUTE_BASE_COST, L1_OPERATION_EXECUTE_COST}, + ProtocolVersionId, +}; + +use crate::seal_criteria::{SealCriterion, SealData, SealResolution, StateKeeperConfig}; + +#[derive(Debug)] +pub(crate) struct L1L2TxsCriterion; + +impl SealCriterion for L1L2TxsCriterion { + fn should_seal( + &self, + config: &StateKeeperConfig, + _block_open_timestamp_ms: u128, + _tx_count: usize, + l1_tx_count: usize, + _block_data: &SealData, + _tx_data: &SealData, + _protocol_version_id: ProtocolVersionId, + ) -> SealResolution { + // With current gas consumption it's possible to execute 600 L1->L2 txs with 7500000 L1 gas. + const L1_L2_TX_COUNT_LIMIT: usize = 600; + + let block_l1_gas_bound = + (config.max_single_tx_gas as f64 * config.close_block_at_gas_percentage).round() as u32; + let l1_gas = L1_BATCH_EXECUTE_BASE_COST + (l1_tx_count as u32) * L1_OPERATION_EXECUTE_COST; + + // We check not only gas against `block_l1_gas_bound` but also count against `L1_L2_TX_COUNT_LIMIT`. + // It's required in case `max_single_tx_gas` is set to some high value for gateway, + // then chain migrates to L1 and there is some batch with large number of L1->L2 txs that is not yet executed. + // This check guarantees that it will be possible to execute such batch with reasonable gas limit on L1. + if l1_gas >= block_l1_gas_bound || l1_tx_count >= L1_L2_TX_COUNT_LIMIT { + SealResolution::IncludeAndSeal + } else { + SealResolution::NoSeal + } + } + + fn prom_criterion_name(&self) -> &'static str { + "gas" + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_l1_l2_txs_seal_criterion() { + let max_single_tx_gas = 15_000_000; + let close_block_at_gas_percentage = 0.95; + + let gas_bound = (max_single_tx_gas as f64 * close_block_at_gas_percentage).round() as u32; + let l1_tx_count_bound = + (gas_bound - L1_BATCH_EXECUTE_BASE_COST - 1) / L1_OPERATION_EXECUTE_COST; + let l1_tx_count_bound = l1_tx_count_bound.min(599); + + // Create an empty config and only setup fields relevant for the test. + let config = StateKeeperConfig { + max_single_tx_gas, + close_block_at_gas_percentage, + ..Default::default() + }; + + let criterion = L1L2TxsCriterion; + + // Empty block should fit into gas criterion. + let empty_block_resolution = criterion.should_seal( + &config, + 0, + 0, + 0, + &SealData::default(), + &SealData::default(), + ProtocolVersionId::latest(), + ); + assert_eq!(empty_block_resolution, SealResolution::NoSeal); + + // `l1_tx_count_bound` should return `NoSeal`. + let block_resolution = criterion.should_seal( + &config, + 0, + 0, + l1_tx_count_bound as usize, + &SealData::default(), + &SealData::default(), + ProtocolVersionId::latest(), + ); + assert_eq!(block_resolution, SealResolution::NoSeal); + + // `l1_tx_count_bound + 1` should return `IncludeAndSeal`. + let block_resolution = criterion.should_seal( + &config, + 0, + 0, + l1_tx_count_bound as usize + 1, + &SealData::default(), + &SealData::default(), + ProtocolVersionId::latest(), + ); + assert_eq!(block_resolution, SealResolution::IncludeAndSeal); + } +} diff --git a/core/node/state_keeper/src/seal_criteria/criteria/l2_l1_logs.rs b/core/node/state_keeper/src/seal_criteria/criteria/l2_l1_logs.rs new file mode 100644 index 000000000000..e33b94cbda2a --- /dev/null +++ b/core/node/state_keeper/src/seal_criteria/criteria/l2_l1_logs.rs @@ -0,0 +1,120 @@ +use zksync_types::{l2_to_l1_log::l2_to_l1_logs_tree_size, ProtocolVersionId}; + +use crate::seal_criteria::{ + SealCriterion, SealData, SealResolution, StateKeeperConfig, UnexecutableReason, +}; + +#[derive(Debug)] +pub(crate) struct L2L1LogsCriterion; + +impl SealCriterion for L2L1LogsCriterion { + fn should_seal( + &self, + config: &StateKeeperConfig, + _block_open_timestamp_ms: u128, + _tx_count: usize, + _l1_tx_count: usize, + block_data: &SealData, + tx_data: &SealData, + protocol_version_id: ProtocolVersionId, + ) -> SealResolution { + let max_allowed_logs = l2_to_l1_logs_tree_size(protocol_version_id); + + let reject_bound = + (max_allowed_logs as f64 * config.reject_tx_at_geometry_percentage).round() as usize; + let include_and_seal_bound = + (max_allowed_logs as f64 * config.close_block_at_geometry_percentage).round() as usize; + + // Only user logs are included in the tree, so we consider only their number. + if tx_data.execution_metrics.user_l2_to_l1_logs >= reject_bound { + UnexecutableReason::TooMuchUserL2L1Logs.into() + } else if block_data.execution_metrics.user_l2_to_l1_logs > max_allowed_logs { + SealResolution::ExcludeAndSeal + } else if block_data.execution_metrics.user_l2_to_l1_logs >= include_and_seal_bound { + SealResolution::IncludeAndSeal + } else { + SealResolution::NoSeal + } + } + + fn prom_criterion_name(&self) -> &'static str { + "gas" + } +} + +#[cfg(test)] +mod tests { + use test_casing::test_casing; + use zksync_multivm::interface::VmExecutionMetrics; + + use super::*; + + fn query_criterion( + config: &StateKeeperConfig, + block_data_logs: usize, + tx_data_logs: usize, + protocol_version_id: ProtocolVersionId, + ) -> SealResolution { + L2L1LogsCriterion.should_seal( + config, + 0, + 0, + 0, + &SealData { + execution_metrics: VmExecutionMetrics { + user_l2_to_l1_logs: block_data_logs, + ..VmExecutionMetrics::default() + }, + ..SealData::default() + }, + &SealData { + execution_metrics: VmExecutionMetrics { + user_l2_to_l1_logs: tx_data_logs, + ..VmExecutionMetrics::default() + }, + ..SealData::default() + }, + protocol_version_id, + ) + } + + #[test_casing(2, [ProtocolVersionId::Version25, ProtocolVersionId::Version27])] + fn test_l2_l1_logs_seal_criterion(protocol_version: ProtocolVersionId) { + let max_allowed_logs = l2_to_l1_logs_tree_size(protocol_version); + let config = StateKeeperConfig { + close_block_at_geometry_percentage: 0.95, + reject_tx_at_geometry_percentage: 0.9, + ..Default::default() + }; + + let reject_bound = + (max_allowed_logs as f64 * config.reject_tx_at_geometry_percentage).round() as usize; + let include_and_seal_bound = + (max_allowed_logs as f64 * config.close_block_at_geometry_percentage).round() as usize; + + // not enough logs to seal + let resolution = query_criterion( + &config, + reject_bound - 1, + reject_bound - 1, + protocol_version, + ); + assert_eq!(resolution, SealResolution::NoSeal); + + // reject tx with huge number of logs + let resolution = query_criterion(&config, reject_bound, reject_bound, protocol_version); + assert_eq!(resolution, UnexecutableReason::TooMuchUserL2L1Logs.into()); + + // enough logs to include and seal + let resolution = query_criterion(&config, include_and_seal_bound, 1, protocol_version); + assert_eq!(resolution, SealResolution::IncludeAndSeal); + + // not enough logs to exclude and seal + let resolution = query_criterion(&config, max_allowed_logs, 1, protocol_version); + assert_eq!(resolution, SealResolution::IncludeAndSeal); + + // enough logs to exclude and seal + let resolution = query_criterion(&config, max_allowed_logs + 1, 1, protocol_version); + assert_eq!(resolution, SealResolution::ExcludeAndSeal); + } +} diff --git a/core/node/state_keeper/src/seal_criteria/criteria/mod.rs b/core/node/state_keeper/src/seal_criteria/criteria/mod.rs index 6732a8cd2717..d9522a39fad7 100644 --- a/core/node/state_keeper/src/seal_criteria/criteria/mod.rs +++ b/core/node/state_keeper/src/seal_criteria/criteria/mod.rs @@ -1,12 +1,14 @@ -mod gas; mod gas_for_batch_tip; mod geometry_seal_criteria; +mod l1_l2_txs; +mod l2_l1_logs; mod pubdata_bytes; mod slots; mod tx_encoding_size; pub(crate) use self::{ - gas::GasCriterion, gas_for_batch_tip::GasForBatchTipCriterion, - geometry_seal_criteria::CircuitsCriterion, pubdata_bytes::PubDataBytesCriterion, - slots::SlotsCriterion, tx_encoding_size::TxEncodingSizeCriterion, + gas_for_batch_tip::GasForBatchTipCriterion, geometry_seal_criteria::CircuitsCriterion, + l1_l2_txs::L1L2TxsCriterion, l2_l1_logs::L2L1LogsCriterion, + pubdata_bytes::PubDataBytesCriterion, slots::SlotsCriterion, + tx_encoding_size::TxEncodingSizeCriterion, }; diff --git a/core/node/state_keeper/src/seal_criteria/criteria/pubdata_bytes.rs b/core/node/state_keeper/src/seal_criteria/criteria/pubdata_bytes.rs index 09fcf2f0fc1b..5cddfffd6899 100644 --- a/core/node/state_keeper/src/seal_criteria/criteria/pubdata_bytes.rs +++ b/core/node/state_keeper/src/seal_criteria/criteria/pubdata_bytes.rs @@ -20,6 +20,7 @@ impl SealCriterion for PubDataBytesCriterion { config: &StateKeeperConfig, _block_open_timestamp_ms: u128, _tx_count: usize, + _l1_tx_count: usize, block_data: &SealData, tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -99,6 +100,7 @@ mod tests { &config, 0, 0, + 0, &SealData { execution_metrics: block_execution_metrics, ..SealData::default() @@ -120,6 +122,7 @@ mod tests { &config, 0, 0, + 0, &SealData { execution_metrics: block_execution_metrics, ..SealData::default() @@ -137,6 +140,7 @@ mod tests { &config, 0, 0, + 0, &SealData { execution_metrics: block_execution_metrics, ..SealData::default() diff --git a/core/node/state_keeper/src/seal_criteria/criteria/slots.rs b/core/node/state_keeper/src/seal_criteria/criteria/slots.rs index 81b3a0933801..ad07bf8f8a00 100644 --- a/core/node/state_keeper/src/seal_criteria/criteria/slots.rs +++ b/core/node/state_keeper/src/seal_criteria/criteria/slots.rs @@ -13,6 +13,7 @@ impl SealCriterion for SlotsCriterion { config: &StateKeeperConfig, _block_open_timestamp_ms: u128, tx_count: usize, + _l1_tx_count: usize, _block_data: &SealData, _tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -54,6 +55,7 @@ mod tests { &config, Default::default(), config.transaction_slots - 1, + 0, &SealData::default(), &SealData::default(), ProtocolVersionId::latest(), @@ -64,6 +66,7 @@ mod tests { &config, Default::default(), config.transaction_slots, + 0, &SealData::default(), &SealData::default(), ProtocolVersionId::latest(), diff --git a/core/node/state_keeper/src/seal_criteria/criteria/tx_encoding_size.rs b/core/node/state_keeper/src/seal_criteria/criteria/tx_encoding_size.rs index 409673d6cac8..54076dc8ccc0 100644 --- a/core/node/state_keeper/src/seal_criteria/criteria/tx_encoding_size.rs +++ b/core/node/state_keeper/src/seal_criteria/criteria/tx_encoding_size.rs @@ -14,6 +14,7 @@ impl SealCriterion for TxEncodingSizeCriterion { config: &StateKeeperConfig, _block_open_timestamp_ms: u128, _tx_count: usize, + _l1_tx_count: usize, block_data: &SealData, tx_data: &SealData, protocol_version_id: ProtocolVersionId, @@ -65,6 +66,7 @@ mod tests { &config, 0, 0, + 0, &SealData::default(), &SealData::default(), ProtocolVersionId::latest(), @@ -75,6 +77,7 @@ mod tests { &config, 0, 0, + 0, &SealData::default(), &SealData { cumulative_size: bootloader_tx_encoding_space as usize + 1, @@ -91,6 +94,7 @@ mod tests { &config, 0, 0, + 0, &SealData { cumulative_size: bootloader_tx_encoding_space as usize + 1, ..SealData::default() @@ -107,6 +111,7 @@ mod tests { &config, 0, 0, + 0, &SealData { cumulative_size: bootloader_tx_encoding_space as usize, ..SealData::default() diff --git a/core/node/state_keeper/src/seal_criteria/mod.rs b/core/node/state_keeper/src/seal_criteria/mod.rs index 4c6f56a6f5b7..2ea039da57bc 100644 --- a/core/node/state_keeper/src/seal_criteria/mod.rs +++ b/core/node/state_keeper/src/seal_criteria/mod.rs @@ -17,16 +17,10 @@ use zksync_multivm::{ interface::{DeduplicatedWritesMetrics, Halt, TransactionExecutionMetrics, VmExecutionMetrics}, vm_latest::TransactionVmExt, }; -use zksync_types::{ - block::BlockGasCount, utils::display_timestamp, ProtocolVersionId, Transaction, -}; +use zksync_types::{utils::display_timestamp, ProtocolVersionId, Transaction}; pub use self::conditional_sealer::{ConditionalSealer, NoopSealer, SequencerSealer}; -use crate::{ - metrics::AGGREGATION_METRICS, - updates::UpdatesManager, - utils::{gas_count_from_tx_and_metrics, gas_count_from_writes, millis_since}, -}; +use crate::{metrics::AGGREGATION_METRICS, updates::UpdatesManager, utils::millis_since}; mod conditional_sealer; pub(super) mod criteria; @@ -68,6 +62,7 @@ pub enum UnexecutableReason { OutOfGasForBatchTip, BootloaderOutOfGas, NotEnoughGasProvided, + TooMuchUserL2L1Logs, } impl UnexecutableReason { @@ -82,6 +77,7 @@ impl UnexecutableReason { UnexecutableReason::OutOfGasForBatchTip => "OutOfGasForBatchTip", UnexecutableReason::BootloaderOutOfGas => "BootloaderOutOfGas", UnexecutableReason::NotEnoughGasProvided => "NotEnoughGasProvided", + UnexecutableReason::TooMuchUserL2L1Logs => "TooMuchUserL2L1Logs", } } } @@ -106,6 +102,7 @@ impl fmt::Display for UnexecutableReason { UnexecutableReason::OutOfGasForBatchTip => write!(f, "Out of gas for batch tip"), UnexecutableReason::BootloaderOutOfGas => write!(f, "Bootloader out of gas"), UnexecutableReason::NotEnoughGasProvided => write!(f, "Not enough gas provided"), + UnexecutableReason::TooMuchUserL2L1Logs => write!(f, "Too much user l2 l1 logs"), } } } @@ -159,7 +156,6 @@ impl SealResolution { #[derive(Debug, Default)] pub struct SealData { pub(super) execution_metrics: VmExecutionMetrics, - pub(super) gas_count: BlockGasCount, pub(super) cumulative_size: usize, pub(super) writes_metrics: DeduplicatedWritesMetrics, pub(super) gas_remaining: u32, @@ -171,15 +167,11 @@ impl SealData { pub fn for_transaction( transaction: &Transaction, tx_metrics: &TransactionExecutionMetrics, - protocol_version: ProtocolVersionId, ) -> Self { let execution_metrics = VmExecutionMetrics::from_tx_metrics(tx_metrics); let writes_metrics = DeduplicatedWritesMetrics::from_tx_metrics(tx_metrics); - let gas_count = gas_count_from_tx_and_metrics(transaction, &execution_metrics) - + gas_count_from_writes(&writes_metrics, protocol_version); Self { execution_metrics, - gas_count, cumulative_size: transaction.bootloader_encoding_size(), writes_metrics, gas_remaining: tx_metrics.gas_remaining, @@ -188,11 +180,13 @@ impl SealData { } pub(super) trait SealCriterion: fmt::Debug + Send + Sync + 'static { + #[allow(clippy::too_many_arguments)] fn should_seal( &self, config: &StateKeeperConfig, block_open_timestamp_ms: u128, tx_count: usize, + l1_tx_count: usize, block_data: &SealData, tx_data: &SealData, protocol_version: ProtocolVersionId, @@ -287,7 +281,6 @@ mod tests { tx, create_execution_result([]), vec![], - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], ); diff --git a/core/node/state_keeper/src/tests/mod.rs b/core/node/state_keeper/src/tests/mod.rs index d47f8f45df77..b73741998a03 100644 --- a/core/node/state_keeper/src/tests/mod.rs +++ b/core/node/state_keeper/src/tests/mod.rs @@ -17,8 +17,7 @@ use zksync_multivm::{ }; use zksync_node_test_utils::create_l2_transaction; use zksync_types::{ - aggregated_operations::AggregatedActionType, - block::{BlockGasCount, L2BlockExecutionData, L2BlockHasher}, + block::{L2BlockExecutionData, L2BlockHasher}, fee_model::{BatchFeeInput, PubdataIndependentBatchFeeModelInput}, u256_to_h256, AccountTreeId, Address, L1BatchNumber, L2BlockNumber, L2ChainId, ProtocolVersionId, StorageKey, StorageLog, StorageLogKind, StorageLogWithPreviousValue, @@ -28,20 +27,16 @@ use zksync_types::{ use crate::{ io::PendingBatchData, keeper::POLL_WAIT_DURATION, - seal_criteria::{ - criteria::{GasCriterion, SlotsCriterion}, - SequencerSealer, UnexecutableReason, - }, + seal_criteria::{criteria::SlotsCriterion, SequencerSealer, UnexecutableReason}, testonly::{ successful_exec, test_batch_executor::{ - random_tx, random_upgrade_tx, rejected_exec, successful_exec_with_log, - MockReadStorageFactory, TestBatchExecutorBuilder, TestIO, TestScenario, FEE_ACCOUNT, + random_tx, random_upgrade_tx, rejected_exec, MockReadStorageFactory, + TestBatchExecutorBuilder, TestIO, TestScenario, FEE_ACCOUNT, }, BASE_SYSTEM_CONTRACTS, }, updates::UpdatesManager, - utils::{gas_count_from_tx_and_metrics, l1_batch_base_cost}, ZkSyncStateKeeper, }; @@ -188,86 +183,6 @@ async fn sealed_by_number_of_txs() { .await; } -#[tokio::test] -async fn sealed_by_gas() { - let first_tx = random_tx(1); - let execution_result = successful_exec_with_log(); - let exec_metrics = execution_result - .tx_result - .get_execution_metrics(Some(&first_tx)); - assert!(exec_metrics.size() > 0); - let l1_gas_per_tx = gas_count_from_tx_and_metrics(&first_tx, &exec_metrics); - assert!(l1_gas_per_tx.commit > 0); - - let config = StateKeeperConfig { - max_single_tx_gas: 62_000 + l1_gas_per_tx.commit * 2, - reject_tx_at_gas_percentage: 1.0, - close_block_at_gas_percentage: 0.5, - ..StateKeeperConfig::default() - }; - let sealer = SequencerSealer::with_sealers(config, vec![Box::new(GasCriterion)]); - - TestScenario::new() - .seal_l2_block_when(|updates| { - updates.l2_block.executed_transactions.len() == 1 - }) - .next_tx("First tx", first_tx, execution_result.clone()) - .l2_block_sealed_with("L2 block with a single tx", move |updates| { - assert_eq!( - updates.l2_block.l1_gas_count, - l1_gas_per_tx, - "L1 gas used by a L2 block should consist of the gas used by its txs" - ); - }) - .next_tx("Second tx", random_tx(1), execution_result) - .l2_block_sealed("L2 block 2") - .batch_sealed_with("Batch sealed with both txs", move |updates| { - assert_eq!( - updates.l1_batch.l1_gas_count, - BlockGasCount { - commit: l1_batch_base_cost(AggregatedActionType::Commit) + l1_gas_per_tx.commit * 2, - prove: l1_batch_base_cost(AggregatedActionType::PublishProofOnchain), - execute: l1_batch_base_cost(AggregatedActionType::Execute), - }, - "L1 gas used by a batch should consist of gas used by its txs + basic block gas cost" - ); - }) - .run(sealer).await; -} - -#[tokio::test] -async fn sealed_by_gas_then_by_num_tx() { - let config = StateKeeperConfig { - max_single_tx_gas: 62_000, - reject_tx_at_gas_percentage: 1.0, - close_block_at_gas_percentage: 0.5, - transaction_slots: 3, - ..StateKeeperConfig::default() - }; - let sealer = SequencerSealer::with_sealers( - config, - vec![Box::new(GasCriterion), Box::new(SlotsCriterion)], - ); - - let execution_result = successful_exec_with_log(); - - // 1st tx is sealed by gas sealer; 2nd, 3rd, & 4th are sealed by slots sealer. - TestScenario::new() - .seal_l2_block_when(|updates| updates.l2_block.executed_transactions.len() == 1) - .next_tx("First tx", random_tx(1), execution_result) - .l2_block_sealed("L2 block 1") - .batch_sealed("Batch 1") - .next_tx("Second tx", random_tx(2), successful_exec()) - .l2_block_sealed("L2 block 2") - .next_tx("Third tx", random_tx(3), successful_exec()) - .l2_block_sealed("L2 block 3") - .next_tx("Fourth tx", random_tx(4), successful_exec()) - .l2_block_sealed("L2 block 4") - .batch_sealed("Batch 2") - .run(sealer) - .await; -} - #[tokio::test] async fn batch_sealed_before_l2_block_does() { let config = StateKeeperConfig { diff --git a/core/node/state_keeper/src/types.rs b/core/node/state_keeper/src/types.rs index db18e32e0963..4861916fc227 100644 --- a/core/node/state_keeper/src/types.rs +++ b/core/node/state_keeper/src/types.rs @@ -5,15 +5,9 @@ use std::{ use zksync_dal::{Connection, Core, CoreDal}; use zksync_mempool::{L2TxFilter, MempoolInfo, MempoolStore}; -use zksync_multivm::interface::{VmExecutionMetrics, VmExecutionResultAndLogs}; -use zksync_types::{ - block::BlockGasCount, Address, Nonce, PriorityOpId, Transaction, TransactionTimeRangeConstraint, -}; +use zksync_types::{Address, Nonce, PriorityOpId, Transaction, TransactionTimeRangeConstraint}; -use super::{ - metrics::StateKeeperGauges, - utils::{gas_count_from_metrics, gas_count_from_tx_and_metrics}, -}; +use super::metrics::StateKeeperGauges; #[derive(Debug, Clone)] pub struct MempoolGuard(Arc>); @@ -101,27 +95,3 @@ impl MempoolGuard { StateKeeperGauges::register(Arc::downgrade(&self.0)); } } - -#[derive(Debug, Clone, Copy, PartialEq)] -pub struct ExecutionMetricsForCriteria { - pub l1_gas: BlockGasCount, - pub execution_metrics: VmExecutionMetrics, -} - -impl ExecutionMetricsForCriteria { - pub fn new( - tx: Option<&Transaction>, - execution_result: &VmExecutionResultAndLogs, - ) -> ExecutionMetricsForCriteria { - let execution_metrics = execution_result.get_execution_metrics(tx); - let l1_gas = match tx { - Some(tx) => gas_count_from_tx_and_metrics(tx, &execution_metrics), - None => gas_count_from_metrics(&execution_metrics), - }; - - ExecutionMetricsForCriteria { - l1_gas, - execution_metrics, - } - } -} diff --git a/core/node/state_keeper/src/updates/l1_batch_updates.rs b/core/node/state_keeper/src/updates/l1_batch_updates.rs index aa2e22cac483..f7a93b4870b9 100644 --- a/core/node/state_keeper/src/updates/l1_batch_updates.rs +++ b/core/node/state_keeper/src/updates/l1_batch_updates.rs @@ -1,10 +1,9 @@ use zksync_multivm::interface::{FinishedL1Batch, TransactionExecutionResult, VmExecutionMetrics}; use zksync_types::{ - block::BlockGasCount, priority_op_onchain_data::PriorityOpOnchainData, - ExecuteTransactionCommon, L1BatchNumber, + priority_op_onchain_data::PriorityOpOnchainData, ExecuteTransactionCommon, L1BatchNumber, }; -use crate::{updates::l2_block_updates::L2BlockUpdates, utils::new_block_gas_count}; +use crate::updates::l2_block_updates::L2BlockUpdates; #[derive(Debug)] pub struct L1BatchUpdates { @@ -12,9 +11,8 @@ pub struct L1BatchUpdates { pub executed_transactions: Vec, pub priority_ops_onchain_data: Vec, pub block_execution_metrics: VmExecutionMetrics, - // how much L1 gas will it take to submit this block? - pub l1_gas_count: BlockGasCount, pub txs_encoding_size: usize, + pub l1_tx_count: usize, pub finished: Option, } @@ -25,8 +23,8 @@ impl L1BatchUpdates { executed_transactions: Default::default(), priority_ops_onchain_data: Default::default(), block_execution_metrics: Default::default(), - l1_gas_count: new_block_gas_count(), txs_encoding_size: 0, + l1_tx_count: 0, finished: None, } } @@ -41,9 +39,9 @@ impl L1BatchUpdates { self.executed_transactions .extend(l2_block_updates.executed_transactions); - self.l1_gas_count += l2_block_updates.l1_gas_count; self.block_execution_metrics += l2_block_updates.block_execution_metrics; self.txs_encoding_size += l2_block_updates.txs_encoding_size; + self.l1_tx_count += l2_block_updates.l1_tx_count; } } @@ -53,10 +51,7 @@ mod tests { use zksync_types::{L2BlockNumber, ProtocolVersionId, H256}; use super::*; - use crate::{ - tests::{create_execution_result, create_transaction}, - utils::new_block_gas_count, - }; + use crate::tests::{create_execution_result, create_transaction}; #[test] fn apply_l2_block_with_empty_tx() { @@ -73,7 +68,6 @@ mod tests { l2_block_accumulator.extend_from_executed_transaction( tx, create_execution_result([]), - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], vec![], @@ -83,12 +77,12 @@ mod tests { l1_batch_accumulator.extend_from_sealed_l2_block(l2_block_accumulator); assert_eq!(l1_batch_accumulator.executed_transactions.len(), 1); - assert_eq!(l1_batch_accumulator.l1_gas_count, new_block_gas_count()); assert_eq!(l1_batch_accumulator.priority_ops_onchain_data.len(), 0); assert_eq!( l1_batch_accumulator.block_execution_metrics.l2_to_l1_logs, 0 ); assert_eq!(l1_batch_accumulator.txs_encoding_size, expected_tx_size); + assert_eq!(l1_batch_accumulator.l1_tx_count, 0); } } diff --git a/core/node/state_keeper/src/updates/l2_block_updates.rs b/core/node/state_keeper/src/updates/l2_block_updates.rs index d258f8eeac0b..628f9e4a2910 100644 --- a/core/node/state_keeper/src/updates/l2_block_updates.rs +++ b/core/node/state_keeper/src/updates/l2_block_updates.rs @@ -8,7 +8,7 @@ use zksync_multivm::{ vm_latest::TransactionVmExt, }; use zksync_types::{ - block::{BlockGasCount, L2BlockHasher}, + block::L2BlockHasher, bytecode::BytecodeHash, l2_to_l1_log::{SystemL2ToL1Log, UserL2ToL1Log}, L2BlockNumber, ProtocolVersionId, StorageLogWithPreviousValue, Transaction, H256, @@ -24,11 +24,10 @@ pub struct L2BlockUpdates { pub user_l2_to_l1_logs: Vec, pub system_l2_to_l1_logs: Vec, pub new_factory_deps: HashMap>, - /// How much L1 gas will it take to submit this block? - pub l1_gas_count: BlockGasCount, pub block_execution_metrics: VmExecutionMetrics, pub txs_encoding_size: usize, pub payload_encoding_size: usize, + pub l1_tx_count: usize, pub timestamp: u64, pub number: L2BlockNumber, pub prev_block_hash: H256, @@ -51,10 +50,10 @@ impl L2BlockUpdates { user_l2_to_l1_logs: vec![], system_l2_to_l1_logs: vec![], new_factory_deps: HashMap::new(), - l1_gas_count: BlockGasCount::default(), block_execution_metrics: VmExecutionMetrics::default(), txs_encoding_size: 0, payload_encoding_size: 0, + l1_tx_count: 0, timestamp, number, prev_block_hash, @@ -66,7 +65,6 @@ impl L2BlockUpdates { pub(crate) fn extend_from_fictive_transaction( &mut self, result: VmExecutionResultAndLogs, - l1_gas_count: BlockGasCount, execution_metrics: VmExecutionMetrics, ) { self.events.extend(result.logs.events); @@ -76,7 +74,6 @@ impl L2BlockUpdates { self.system_l2_to_l1_logs .extend(result.logs.system_l2_to_l1_logs); - self.l1_gas_count += l1_gas_count; self.block_execution_metrics += execution_metrics; } @@ -85,7 +82,6 @@ impl L2BlockUpdates { &mut self, tx: Transaction, tx_execution_result: VmExecutionResultAndLogs, - tx_l1_gas_this_tx: BlockGasCount, execution_metrics: VmExecutionMetrics, compressed_bytecodes: Vec, call_traces: Vec, @@ -143,7 +139,6 @@ impl L2BlockUpdates { }); self.new_factory_deps.extend(known_bytecodes); - self.l1_gas_count += tx_l1_gas_this_tx; self.block_execution_metrics += execution_metrics; self.txs_encoding_size += tx.bootloader_encoding_size(); self.payload_encoding_size += @@ -155,6 +150,9 @@ impl L2BlockUpdates { .extend(tx_execution_result.logs.system_l2_to_l1_logs); self.storage_logs .extend(tx_execution_result.logs.storage_logs); + if tx.is_l1() { + self.l1_tx_count += 1; + } self.executed_transactions.push(TransactionExecutionResult { hash: tx.hash(), @@ -212,7 +210,6 @@ mod tests { accumulator.extend_from_executed_transaction( tx, create_execution_result([]), - BlockGasCount::default(), VmExecutionMetrics::default(), vec![], vec![], @@ -223,10 +220,10 @@ mod tests { assert_eq!(accumulator.storage_logs.len(), 0); assert_eq!(accumulator.user_l2_to_l1_logs.len(), 0); assert_eq!(accumulator.system_l2_to_l1_logs.len(), 0); - assert_eq!(accumulator.l1_gas_count, Default::default()); assert_eq!(accumulator.new_factory_deps.len(), 0); assert_eq!(accumulator.block_execution_metrics.l2_to_l1_logs, 0); assert_eq!(accumulator.txs_encoding_size, bootloader_encoding_size); assert_eq!(accumulator.payload_encoding_size, payload_encoding_size); + assert_eq!(accumulator.l1_tx_count, 0); } } diff --git a/core/node/state_keeper/src/updates/mod.rs b/core/node/state_keeper/src/updates/mod.rs index 752963580e37..06ac4bcd5de0 100644 --- a/core/node/state_keeper/src/updates/mod.rs +++ b/core/node/state_keeper/src/updates/mod.rs @@ -7,8 +7,8 @@ use zksync_multivm::{ utils::{get_batch_base_fee, StorageWritesDeduplicator}, }; use zksync_types::{ - block::BlockGasCount, commitment::PubdataParams, fee_model::BatchFeeInput, Address, - L1BatchNumber, L2BlockNumber, ProtocolVersionId, Transaction, + commitment::PubdataParams, fee_model::BatchFeeInput, Address, L1BatchNumber, L2BlockNumber, + ProtocolVersionId, Transaction, }; pub(crate) use self::{l1_batch_updates::L1BatchUpdates, l2_block_updates::L2BlockUpdates}; @@ -16,7 +16,6 @@ use super::{ io::{IoCursor, L2BlockParams}, metrics::{BATCH_TIP_METRICS, UPDATES_MANAGER_METRICS}, }; -use crate::types::ExecutionMetricsForCriteria; pub mod l1_batch_updates; pub mod l2_block_updates; @@ -117,7 +116,6 @@ impl UpdatesManager { tx: Transaction, tx_execution_result: VmExecutionResultAndLogs, compressed_bytecodes: Vec, - tx_l1_gas_this_tx: BlockGasCount, execution_metrics: VmExecutionMetrics, call_traces: Vec, ) { @@ -129,7 +127,6 @@ impl UpdatesManager { self.l2_block.extend_from_executed_transaction( tx, tx_execution_result, - tx_l1_gas_this_tx, execution_metrics, compressed_bytecodes, call_traces, @@ -145,7 +142,7 @@ impl UpdatesManager { ); let result = &finished_batch.block_tip_execution_result; - let batch_tip_metrics = ExecutionMetricsForCriteria::new(None, result); + let batch_tip_execution_metrics = result.get_execution_metrics(None); let before = self.storage_writes_deduplicator.metrics(); self.storage_writes_deduplicator @@ -153,11 +150,8 @@ impl UpdatesManager { let after = self.storage_writes_deduplicator.metrics(); BATCH_TIP_METRICS.observe_writes_metrics(&before, &after, self.protocol_version()); - self.l2_block.extend_from_fictive_transaction( - result.clone(), - batch_tip_metrics.l1_gas, - batch_tip_metrics.execution_metrics, - ); + self.l2_block + .extend_from_fictive_transaction(result.clone(), batch_tip_execution_metrics); self.l1_batch.finished = Some(finished_batch); latency.observe(); @@ -190,8 +184,8 @@ impl UpdatesManager { self.l1_batch.executed_transactions.len() + self.l2_block.executed_transactions.len() } - pub(crate) fn pending_l1_gas_count(&self) -> BlockGasCount { - self.l1_batch.l1_gas_count + self.l2_block.l1_gas_count + pub(crate) fn pending_l1_transactions_len(&self) -> usize { + self.l1_batch.l1_tx_count + self.l2_block.l1_tx_count } pub(crate) fn pending_execution_metrics(&self) -> VmExecutionMetrics { @@ -225,10 +219,7 @@ pub struct L2BlockSealCommand { #[cfg(test)] mod tests { use super::*; - use crate::{ - tests::{create_execution_result, create_transaction, create_updates_manager}, - utils::new_block_gas_count, - }; + use crate::tests::{create_execution_result, create_transaction, create_updates_manager}; #[test] fn apply_l2_block() { @@ -242,7 +233,6 @@ mod tests { tx, create_execution_result([]), vec![], - new_block_gas_count(), VmExecutionMetrics::default(), vec![], ); diff --git a/core/node/state_keeper/src/utils.rs b/core/node/state_keeper/src/utils.rs index af4616fe11dc..eca73b6e3800 100644 --- a/core/node/state_keeper/src/utils.rs +++ b/core/node/state_keeper/src/utils.rs @@ -1,94 +1,6 @@ use std::time::{SystemTime, UNIX_EPOCH}; use tokio::sync::watch; -use zksync_multivm::interface::{DeduplicatedWritesMetrics, VmExecutionMetrics}; -use zksync_types::{ - aggregated_operations::AggregatedActionType, block::BlockGasCount, ExecuteTransactionCommon, - ProtocolVersionId, Transaction, -}; - -// TODO(QIT-32): Remove constants(except `L1_OPERATION_EXECUTE_COST`) and logic that use them -const L1_BATCH_COMMIT_BASE_COST: u32 = 31_000; -const L1_BATCH_PROVE_BASE_COST: u32 = 7_000; -const L1_BATCH_EXECUTE_BASE_COST: u32 = 30_000; - -const EXECUTE_COMMIT_COST: u32 = 0; -const EXECUTE_EXECUTE_COST: u32 = 0; - -const L1_OPERATION_EXECUTE_COST: u32 = 12_500; - -const GAS_PER_BYTE: u32 = 18; - -pub(super) fn l1_batch_base_cost(op: AggregatedActionType) -> u32 { - match op { - AggregatedActionType::Commit => L1_BATCH_COMMIT_BASE_COST, - AggregatedActionType::PublishProofOnchain => L1_BATCH_PROVE_BASE_COST, - AggregatedActionType::Execute => L1_BATCH_EXECUTE_BASE_COST, - } -} - -fn base_tx_cost(tx: &Transaction, op: AggregatedActionType) -> u32 { - match op { - AggregatedActionType::Commit => EXECUTE_COMMIT_COST, - AggregatedActionType::PublishProofOnchain => 0, - AggregatedActionType::Execute => match tx.common_data { - ExecuteTransactionCommon::L1(_) => L1_OPERATION_EXECUTE_COST, - ExecuteTransactionCommon::L2(_) => EXECUTE_EXECUTE_COST, - ExecuteTransactionCommon::ProtocolUpgrade(_) => EXECUTE_EXECUTE_COST, - }, - } -} - -fn additional_pubdata_commit_cost(execution_metrics: &VmExecutionMetrics) -> u32 { - (execution_metrics.size() as u32) * GAS_PER_BYTE -} - -fn additional_writes_commit_cost( - writes_metrics: &DeduplicatedWritesMetrics, - protocol_version: ProtocolVersionId, -) -> u32 { - (writes_metrics.size(protocol_version) as u32) * GAS_PER_BYTE -} - -pub(super) fn new_block_gas_count() -> BlockGasCount { - BlockGasCount { - commit: l1_batch_base_cost(AggregatedActionType::Commit), - prove: l1_batch_base_cost(AggregatedActionType::PublishProofOnchain), - execute: l1_batch_base_cost(AggregatedActionType::Execute), - } -} - -pub(super) fn gas_count_from_tx_and_metrics( - tx: &Transaction, - execution_metrics: &VmExecutionMetrics, -) -> BlockGasCount { - let commit = base_tx_cost(tx, AggregatedActionType::Commit) - + additional_pubdata_commit_cost(execution_metrics); - BlockGasCount { - commit, - prove: base_tx_cost(tx, AggregatedActionType::PublishProofOnchain), - execute: base_tx_cost(tx, AggregatedActionType::Execute), - } -} - -pub(super) fn gas_count_from_metrics(execution_metrics: &VmExecutionMetrics) -> BlockGasCount { - BlockGasCount { - commit: additional_pubdata_commit_cost(execution_metrics), - prove: 0, - execute: 0, - } -} - -pub(super) fn gas_count_from_writes( - writes_metrics: &DeduplicatedWritesMetrics, - protocol_version: ProtocolVersionId, -) -> BlockGasCount { - BlockGasCount { - commit: additional_writes_commit_cost(writes_metrics, protocol_version), - prove: 0, - execute: 0, - } -} pub(super) fn is_canceled(stop_receiver: &watch::Receiver) -> bool { *stop_receiver.borrow() diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index 23e8b3ee420c..62c264a376db 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -101,7 +101,6 @@ eth: aggregated_block_execute_deadline: 10 timestamp_criteria_max_allowed_lag: 30 max_eth_tx_data_size: 120000 - aggregated_proof_sizes: [ 1 ] max_aggregated_tx_gas: 15000000 max_acceptable_priority_fee_in_gwei: 100000000000 # typo: value is in wei (100 gwei) pubdata_sending_mode: BLOBS From 38afdd5d45a44d417c29eba00fddd461742c6603 Mon Sep 17 00:00:00 2001 From: Artem Makhortov <13339874+artmakh@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:45:35 +0700 Subject: [PATCH 12/35] fix(ci): Ability to publish zk-environment from manual trigger (#3341) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Ability to publish zk-environment from manual trigger ## Why ❔ Sometimes we need to force-update zk-environment ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- .github/workflows/zk-environment-publish.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/zk-environment-publish.yml b/.github/workflows/zk-environment-publish.yml index b9321c8f5d6c..e9dfac1c6bb2 100644 --- a/.github/workflows/zk-environment-publish.yml +++ b/.github/workflows/zk-environment-publish.yml @@ -128,8 +128,7 @@ jobs: push: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'workflow_dispatch') }} zk_environment_multiarch_manifest: - # We'll update the 'latest' tag, only on environments generated from 'main'. - if: needs.changed_files.outputs.zk_environment == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' + if: ${{ (needs.changed_files.outputs.zk_environment == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'workflow_dispatch') }} # Needed to push to Gihub Package Registry permissions: packages: write From aaca32b6ab411d5cdc1234c20af8b5c1092195d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Ignacio=20Gonz=C3=A1lez?= Date: Fri, 29 Nov 2024 06:18:17 -0300 Subject: [PATCH 13/35] fix(zkstack): Fix wrong missing private key message (#3334) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Add msg_wallet_private_key_not_set and return the correct wallet ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- zkstack_cli/crates/zkstack/src/accept_ownership.rs | 4 ++-- .../src/commands/chain/deploy_l2_contracts.rs | 8 ++++++-- .../zkstack/src/commands/chain/deploy_paymaster.rs | 8 ++++++-- .../zkstack/src/commands/chain/register_chain.rs | 8 ++++++-- .../commands/chain/set_token_multiplier_setter.rs | 4 ++-- .../src/commands/chain/setup_legacy_bridge.rs | 8 ++++++-- .../crates/zkstack/src/commands/ecosystem/common.rs | 8 ++++++-- .../crates/zkstack/src/commands/ecosystem/init.rs | 8 ++++++-- zkstack_cli/crates/zkstack/src/messages.rs | 12 +++++++++++- zkstack_cli/crates/zkstack/src/utils/forge.rs | 10 ++++++++-- 10 files changed, 59 insertions(+), 19 deletions(-) diff --git a/zkstack_cli/crates/zkstack/src/accept_ownership.rs b/zkstack_cli/crates/zkstack/src/accept_ownership.rs index 474e76e599a8..73dfd8082708 100644 --- a/zkstack_cli/crates/zkstack/src/accept_ownership.rs +++ b/zkstack_cli/crates/zkstack/src/accept_ownership.rs @@ -10,7 +10,7 @@ use xshell::Shell; use crate::{ messages::MSG_ACCEPTING_GOVERNANCE_SPINNER, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; lazy_static! { @@ -89,7 +89,7 @@ async fn accept_ownership( governor: &Wallet, mut forge: ForgeScript, ) -> anyhow::Result<()> { - forge = fill_forge_private_key(forge, Some(governor))?; + forge = fill_forge_private_key(forge, Some(governor), WalletOwner::Governor)?; check_the_balance(&forge).await?; let spinner = Spinner::new(MSG_ACCEPTING_GOVERNANCE_SPINNER); forge.run(shell)?; diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/deploy_l2_contracts.rs b/zkstack_cli/crates/zkstack/src/commands/chain/deploy_l2_contracts.rs index 31cfc7f83977..4164f9a05a2a 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/deploy_l2_contracts.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/deploy_l2_contracts.rs @@ -27,7 +27,7 @@ use crate::{ MSG_CHAIN_NOT_INITIALIZED, MSG_DEPLOYING_L2_CONTRACT_SPINNER, MSG_L1_SECRETS_MUST_BE_PRESENTED, }, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; pub enum Deploy2ContractsOption { @@ -311,7 +311,11 @@ async fn call_forge( forge = forge.with_signature(signature); } - forge = fill_forge_private_key(forge, Some(&ecosystem_config.get_wallets()?.governor))?; + forge = fill_forge_private_key( + forge, + Some(&ecosystem_config.get_wallets()?.governor), + WalletOwner::Governor, + )?; check_the_balance(&forge).await?; forge.run(shell)?; diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/deploy_paymaster.rs b/zkstack_cli/crates/zkstack/src/commands/chain/deploy_paymaster.rs index 4a93fcc089f8..4bcfd6c08099 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/deploy_paymaster.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/deploy_paymaster.rs @@ -12,7 +12,7 @@ use xshell::Shell; use crate::{ messages::{MSG_CHAIN_NOT_INITIALIZED, MSG_L1_SECRETS_MUST_BE_PRESENTED}, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; pub async fn run(args: ForgeScriptArgs, shell: &Shell) -> anyhow::Result<()> { @@ -56,7 +56,11 @@ pub async fn deploy_paymaster( if let Some(address) = sender { forge = forge.with_sender(address); } else { - forge = fill_forge_private_key(forge, Some(&chain_config.get_wallets_config()?.governor))?; + forge = fill_forge_private_key( + forge, + Some(&chain_config.get_wallets_config()?.governor), + WalletOwner::Governor, + )?; } if broadcast { diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/register_chain.rs b/zkstack_cli/crates/zkstack/src/commands/chain/register_chain.rs index 65ee05a1ea5f..42b3bbd59c71 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/register_chain.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/register_chain.rs @@ -19,7 +19,7 @@ use crate::{ MSG_CHAIN_NOT_INITIALIZED, MSG_CHAIN_REGISTERED, MSG_L1_SECRETS_MUST_BE_PRESENTED, MSG_REGISTERING_CHAIN_SPINNER, }, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; pub async fn run(args: ForgeScriptArgs, shell: &Shell) -> anyhow::Result<()> { @@ -81,7 +81,11 @@ pub async fn register_chain( if let Some(address) = sender { forge = forge.with_sender(address); } else { - forge = fill_forge_private_key(forge, Some(&config.get_wallets()?.governor))?; + forge = fill_forge_private_key( + forge, + Some(&config.get_wallets()?.governor), + WalletOwner::Governor, + )?; check_the_balance(&forge).await?; } diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/set_token_multiplier_setter.rs b/zkstack_cli/crates/zkstack/src/commands/chain/set_token_multiplier_setter.rs index 4a6cd31b2c0a..326aa393f8f2 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/set_token_multiplier_setter.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/set_token_multiplier_setter.rs @@ -17,7 +17,7 @@ use crate::{ MSG_TOKEN_MULTIPLIER_SETTER_UPDATED_TO, MSG_UPDATING_TOKEN_MULTIPLIER_SETTER_SPINNER, MSG_WALLETS_CONFIG_MUST_BE_PRESENT, MSG_WALLET_TOKEN_MULTIPLIER_SETTER_NOT_FOUND, }, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; lazy_static! { @@ -109,7 +109,7 @@ async fn update_token_multiplier_setter( governor: &Wallet, mut forge: ForgeScript, ) -> anyhow::Result<()> { - forge = fill_forge_private_key(forge, Some(governor))?; + forge = fill_forge_private_key(forge, Some(governor), WalletOwner::Governor)?; check_the_balance(&forge).await?; forge.run(shell)?; Ok(()) diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/setup_legacy_bridge.rs b/zkstack_cli/crates/zkstack/src/commands/chain/setup_legacy_bridge.rs index f61c640ffb6b..a05ef04eee3e 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/setup_legacy_bridge.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/setup_legacy_bridge.rs @@ -14,7 +14,7 @@ use xshell::Shell; use crate::{ messages::{MSG_DEPLOYING_PAYMASTER, MSG_L1_SECRETS_MUST_BE_PRESENTED}, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; pub async fn setup_legacy_bridge( @@ -59,7 +59,11 @@ pub async fn setup_legacy_bridge( ) .with_broadcast(); - forge = fill_forge_private_key(forge, Some(&ecosystem_config.get_wallets()?.governor))?; + forge = fill_forge_private_key( + forge, + Some(&ecosystem_config.get_wallets()?.governor), + WalletOwner::Governor, + )?; let spinner = Spinner::new(MSG_DEPLOYING_PAYMASTER); check_the_balance(&forge).await?; diff --git a/zkstack_cli/crates/zkstack/src/commands/ecosystem/common.rs b/zkstack_cli/crates/zkstack/src/commands/ecosystem/common.rs index 00d937bba294..074913d79fa2 100644 --- a/zkstack_cli/crates/zkstack/src/commands/ecosystem/common.rs +++ b/zkstack_cli/crates/zkstack/src/commands/ecosystem/common.rs @@ -14,7 +14,7 @@ use config::{ use types::{L1Network, ProverMode}; use xshell::Shell; -use crate::utils::forge::{check_the_balance, fill_forge_private_key}; +use crate::utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}; pub async fn deploy_l1( shell: &Shell, @@ -54,7 +54,11 @@ pub async fn deploy_l1( if let Some(address) = sender { forge = forge.with_sender(address); } else { - forge = fill_forge_private_key(forge, wallets_config.deployer.as_ref())?; + forge = fill_forge_private_key( + forge, + wallets_config.deployer.as_ref(), + WalletOwner::Deployer, + )?; } if broadcast { diff --git a/zkstack_cli/crates/zkstack/src/commands/ecosystem/init.rs b/zkstack_cli/crates/zkstack/src/commands/ecosystem/init.rs index 06b9b9161112..7b01abf03b9a 100644 --- a/zkstack_cli/crates/zkstack/src/commands/ecosystem/init.rs +++ b/zkstack_cli/crates/zkstack/src/commands/ecosystem/init.rs @@ -43,7 +43,7 @@ use crate::{ MSG_ECOSYSTEM_CONTRACTS_PATH_PROMPT, MSG_INITIALIZING_ECOSYSTEM, MSG_INTALLING_DEPS_SPINNER, }, - utils::forge::{check_the_balance, fill_forge_private_key}, + utils::forge::{check_the_balance, fill_forge_private_key, WalletOwner}, }; pub async fn run(args: EcosystemInitArgs, shell: &Shell) -> anyhow::Result<()> { @@ -150,7 +150,11 @@ async fn deploy_erc20( .with_rpc_url(l1_rpc_url) .with_broadcast(); - forge = fill_forge_private_key(forge, ecosystem_config.get_wallets()?.deployer.as_ref())?; + forge = fill_forge_private_key( + forge, + ecosystem_config.get_wallets()?.deployer.as_ref(), + WalletOwner::Deployer, + )?; let spinner = Spinner::new(MSG_DEPLOYING_ERC20_SPINNER); check_the_balance(&forge).await?; diff --git a/zkstack_cli/crates/zkstack/src/messages.rs b/zkstack_cli/crates/zkstack/src/messages.rs index bedcb233b19f..14b89be773f1 100644 --- a/zkstack_cli/crates/zkstack/src/messages.rs +++ b/zkstack_cli/crates/zkstack/src/messages.rs @@ -7,6 +7,8 @@ use ethers::{ use url::Url; use zksync_consensus_roles::attester; +use crate::utils::forge::WalletOwner; + pub(super) const MSG_SETUP_KEYS_DOWNLOAD_SELECTION_PROMPT: &str = "Do you want to download the setup keys or generate them?"; pub(super) const MSG_SETUP_KEYS_REGION_PROMPT: &str = @@ -334,7 +336,15 @@ pub(super) fn msg_explorer_chain_not_initialized(chain: &str) -> String { } /// Forge utils related messages -pub(super) const MSG_DEPLOYER_PK_NOT_SET_ERR: &str = "Deployer private key is not set"; +pub(super) fn msg_wallet_private_key_not_set(wallet_owner: WalletOwner) -> String { + format!( + "{} private key is not set", + match wallet_owner { + WalletOwner::Governor => "Governor", + WalletOwner::Deployer => "Deployer", + } + ) +} pub(super) fn msg_address_doesnt_have_enough_money_prompt( address: &H160, diff --git a/zkstack_cli/crates/zkstack/src/utils/forge.rs b/zkstack_cli/crates/zkstack/src/utils/forge.rs index 355cf7b5f930..76f045f82b9e 100644 --- a/zkstack_cli/crates/zkstack/src/utils/forge.rs +++ b/zkstack_cli/crates/zkstack/src/utils/forge.rs @@ -4,18 +4,24 @@ use ethers::types::U256; use crate::{ consts::MINIMUM_BALANCE_FOR_WALLET, - messages::{msg_address_doesnt_have_enough_money_prompt, MSG_DEPLOYER_PK_NOT_SET_ERR}, + messages::{msg_address_doesnt_have_enough_money_prompt, msg_wallet_private_key_not_set}, }; +pub enum WalletOwner { + Governor, + Deployer, +} + pub fn fill_forge_private_key( mut forge: ForgeScript, wallet: Option<&Wallet>, + wallet_owner: WalletOwner, ) -> anyhow::Result { if !forge.wallet_args_passed() { forge = forge.with_private_key( wallet .and_then(|w| w.private_key_h256()) - .context(MSG_DEPLOYER_PK_NOT_SET_ERR)?, + .context(msg_wallet_private_key_not_set(wallet_owner))?, ); } Ok(forge) From 668ca51f5d52646e64b19b973acec05daa1c6f09 Mon Sep 17 00:00:00 2001 From: Ivan Schasny <31857042+ischasny@users.noreply.github.com> Date: Fri, 29 Nov 2024 14:34:32 +0000 Subject: [PATCH 14/35] fix: added missing quote in prover query (#3347) --- prover/crates/lib/prover_dal/src/fri_witness_generator_dal.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prover/crates/lib/prover_dal/src/fri_witness_generator_dal.rs b/prover/crates/lib/prover_dal/src/fri_witness_generator_dal.rs index cd96edc21b09..ba2d9fdc6415 100644 --- a/prover/crates/lib/prover_dal/src/fri_witness_generator_dal.rs +++ b/prover/crates/lib/prover_dal/src/fri_witness_generator_dal.rs @@ -1237,7 +1237,7 @@ impl FriWitnessGeneratorDal<'_, '_> { updated_at = NOW() WHERE {job_id_column} = {job_id} - AND status != 'successful + AND status != 'successful' "#, ); From f27b4f3550cb105380d4a215f333317b66f7a096 Mon Sep 17 00:00:00 2001 From: Alexander Melnikov Date: Fri, 29 Nov 2024 10:12:50 -0700 Subject: [PATCH 15/35] fix(configs): Update diamond cut data after v25 (#3217) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Updated `diamond_cut_data` after v25 upgrade on Sepolia. ## Why ❔ Diamond cut data is incorrect and registration of new chains are failing. ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --------- Co-authored-by: Danil --- etc/env/ecosystems/sepolia.yaml | 6 +++--- etc/env/file_based/genesis.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/etc/env/ecosystems/sepolia.yaml b/etc/env/ecosystems/sepolia.yaml index 1c0d9ef135cb..772ea98c3cdf 100644 --- a/etc/env/ecosystems/sepolia.yaml +++ b/etc/env/ecosystems/sepolia.yaml @@ -5,7 +5,7 @@ ecosystem_contracts: state_transition_proxy_addr: 0x4e39E90746A9ee410A8Ce173C7B96D3AfEd444a5 transparent_proxy_admin_addr: 0x0358BACa94dcD7931B7BA7aAf8a5Ac6090E143a5 validator_timelock_addr: 0xD3876643180A79d0A56d0900C060528395f34453 - diamond_cut_data: 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000027a7f18106281fe53d371958e8bc3f833694d24a0000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000a2000000000000000000000000096b40174102c93155cdb46a5e4691eeb6c4e1b7b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d0e18b6810000000000000000000000000000000000000000000000000000000064bf8d6600000000000000000000000000000000000000000000000000000000a9f6d9410000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000001cc5d10300000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000021f603d7000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f00000000000000000000000000000000000000000000000000000000000000000000000000000000183a8459e2a4440f364bec5040d8327bbb619be300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000291de72e3400000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000098acd7a600000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000003591c1a00000000000000000000000000000000000000000000000000000000079823c9a00000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000e5355c75000000000000000000000000000000000000000000000000000000009d1b5a81000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000000ec6b0b70000000000000000000000000000000000000000000000000000000033ce93fe0000000000000000000000000000000000000000000000000000000006d49e5b00000000000000000000000000000000000000000000000000000000f5c1182c000000000000000000000000000000000000000000000000000000005518c73b00000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000fe26699e000000000000000000000000000000000000000000000000000000003960738200000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000a1954fc50000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000018e3a9410000000000000000000000000000000000000000000000000000000029b98c6700000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000facd743b000000000000000000000000000000000000000000000000000000009cd939e40000000000000000000000000000000000000000000000000000000056142d7a00000000000000000000000000000000000000000000000000000000b22dd78e0000000000000000000000000000000000000000000000000000000074f4d30d00000000000000000000000000000000000000000000000000000000000000000000000000000000550cf73f4b50aa0df0257f2d07630d48fa00f73a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000812f43dab000000000000000000000000000000000000000000000000000000006c0960f900000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000042901c700000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000c924de3500000000000000000000000000000000000000000000000000000000000000000000000000000000200caf816bcdd94123d3c18488741d4e4fa40ba60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008701f58c5000000000000000000000000000000000000000000000000000000006edd4f1200000000000000000000000000000000000000000000000000000000c3d93e7c000000000000000000000000000000000000000000000000000000006f497ac6000000000000000000000000000000000000000000000000000000007f61885c00000000000000000000000000000000000000000000000000000000c37533bb0000000000000000000000000000000000000000000000000000000097c09d34000000000000000000000000000000000000000000000000000000000f23da430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000ac3a2dc46cea843f0a9d6554f8804aed18ff0795f520cd5b37e74e19fdb369c8d676a04dce8a19457497ac6686d2bb95d94109c8f9664f4324c1400fa5c3822d667f30e873f53f1b8033180cd15fe41c1e2355c60000000000000000000000000000000000000000000000000000000000000000010008e742608b21bf7eb23c1a9d0602047e3618b464c9b59c0fba3b3d7ab66e01000563374c277a2c1e34659a2a1e87371bb6d852ce142022d497bfb50b9e3200000000000000000000000000000000000000000000000000000000044aa200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004c4b40000000000000000000000000000000000000000000000000000000000000182b8000000000000000000000000000000000000000000000000000000000ee6b280000000000000000000000000273bdccdd979510adf4fb801d92f64b243c01fe2 + diamond_cut_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000d43b0b525e2cb6005f39ced7b69d3437f0fb840f0000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000a2000000000000000000000000090c0a0a63d7ff47bfaa1e9f8fa554dabc986504a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d0e18b6810000000000000000000000000000000000000000000000000000000064bf8d6600000000000000000000000000000000000000000000000000000000a9f6d9410000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000001cc5d10300000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000021f603d7000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f0000000000000000000000000000000000000000000000000000000000000000000000000000000081754d2e48e3e553ba6dfd193fc72b3a0c6076d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000291de72e3400000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000098acd7a600000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000003591c1a00000000000000000000000000000000000000000000000000000000079823c9a00000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000e5355c75000000000000000000000000000000000000000000000000000000009d1b5a81000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000000ec6b0b70000000000000000000000000000000000000000000000000000000033ce93fe0000000000000000000000000000000000000000000000000000000006d49e5b00000000000000000000000000000000000000000000000000000000f5c1182c000000000000000000000000000000000000000000000000000000005518c73b00000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000fe26699e000000000000000000000000000000000000000000000000000000003960738200000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000a1954fc50000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000018e3a9410000000000000000000000000000000000000000000000000000000029b98c6700000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000facd743b000000000000000000000000000000000000000000000000000000009cd939e40000000000000000000000000000000000000000000000000000000056142d7a00000000000000000000000000000000000000000000000000000000b22dd78e0000000000000000000000000000000000000000000000000000000074f4d30d00000000000000000000000000000000000000000000000000000000000000000000000000000000b2d1ca55203e96b1d1e6f034805431b7ac983185000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000812f43dab000000000000000000000000000000000000000000000000000000006c0960f900000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000042901c700000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000c924de3500000000000000000000000000000000000000000000000000000000000000000000000000000000bb13642f795014e0eac2b0d52ecd5162ecb667120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008701f58c5000000000000000000000000000000000000000000000000000000006edd4f1200000000000000000000000000000000000000000000000000000000c3d93e7c000000000000000000000000000000000000000000000000000000006f497ac6000000000000000000000000000000000000000000000000000000007f61885c00000000000000000000000000000000000000000000000000000000c37533bb0000000000000000000000000000000000000000000000000000000097c09d34000000000000000000000000000000000000000000000000000000000f23da430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000009a2ebeb3676d4c593443fd0bb1bb9977c73b4118f520cd5b37e74e19fdb369c8d676a04dce8a19457497ac6686d2bb95d94109c8f9664f4324c1400fa5c3822d667f30e873f53f1b8033180cd15fe41c1e2355c60000000000000000000000000000000000000000000000000000000000000000010008c3be57ae5800e077b6c2056d9d75ad1a7b4f0ce583407961cc6fe0b6780100055dba11508480be023137563caec69debc85f826cb3a4b68246a7cabe3000000000000000000000000000000000000000000000000000000000044aa200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000001d4c000000000000000000000000000000000000000000000000000000000000182b80000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000009c30b772c02c1008efcf47cb282c5e4cdde4c2f1 bridges: erc20: l1_address: 0x2Ae09702F77a4940621572fBcDAe2382D44a2cbA @@ -14,11 +14,11 @@ bridges: weth: l1_address: 0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9 l1: - default_upgrade_addr: 0x27A7F18106281fE53d371958E8bC3f833694D24a + default_upgrade_addr: 0xA7Cc1Bf4d8404d14caB00d2b2F0b2F4198CddDfF diamond_proxy_addr: 0x9A6DE0f62Aa270A8bCB1e2610078650D539B1Ef9 governance_addr: 0x62e77441531b4B045a6B6f4891be4AdBA7eD4d88 multicall3_addr: 0xca11bde05977b3631167028862be2a173976ca11 - verifier_addr: 0xAC3a2Dc46ceA843F0A9d6554f8804AeD18ff0795 + verifier_addr: 0x9A2eBeb3676d4c593443Fd0bb1bb9977C73b4118 validator_timelock_addr: 0xD3876643180A79d0A56d0900C060528395f34453 base_token_addr: '0x0000000000000000000000000000000000000000' l2: diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml index 9617b011d2c7..cbc29b9d0312 100644 --- a/etc/env/file_based/genesis.yaml +++ b/etc/env/file_based/genesis.yaml @@ -8,8 +8,8 @@ l1_chain_id: 9 l2_chain_id: 270 fee_account: '0x0000000000000000000000000000000000000001' prover: - recursion_scheduler_level_vk_hash: 0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2 dummy_verifier: true + snark_wrapper_vk_hash: 0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2 genesis_protocol_semantic_version: 0.25.0 l1_batch_commit_data_generator_mode: Rollup # TODO: uncomment once EVM emulator is present in the `contracts` submodule From a8b88f2e4b8857a45cc181f1447959a2e7ffbdac Mon Sep 17 00:00:00 2001 From: Yury Akudovich Date: Mon, 2 Dec 2024 14:23:01 +0100 Subject: [PATCH 16/35] feat(prover): Bump CUDA to 12.4 for circuit prover (#3351) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Upgrade CUDA from 12.2 to 12.4 for circuit prover. ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. ref ZKD-2085 --- docker/circuit-prover-gpu-gar/Dockerfile | 2 +- docker/circuit-prover-gpu/Dockerfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/circuit-prover-gpu-gar/Dockerfile b/docker/circuit-prover-gpu-gar/Dockerfile index 3dfc6bdf9ada..e1bc0a7804d9 100644 --- a/docker/circuit-prover-gpu-gar/Dockerfile +++ b/docker/circuit-prover-gpu-gar/Dockerfile @@ -1,7 +1,7 @@ ARG PROVER_IMAGE FROM us-docker.pkg.dev/matterlabs-infra/matterlabs-docker/circuit-prover-gpu:2.0-$PROVER_IMAGE as prover -FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04 as app +FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04 as app # HACK copying to root is the only way to make Docker layer caching work for these files for some reason COPY *.bin / diff --git a/docker/circuit-prover-gpu/Dockerfile b/docker/circuit-prover-gpu/Dockerfile index 8e193e205897..a5396e31ca88 100644 --- a/docker/circuit-prover-gpu/Dockerfile +++ b/docker/circuit-prover-gpu/Dockerfile @@ -1,4 +1,4 @@ -FROM nvidia/cuda:12.2.0-devel-ubuntu22.04 AS builder +FROM nvidia/cuda:12.4.0-devel-ubuntu22.04 AS builder ARG DEBIAN_FRONTEND=noninteractive @@ -45,7 +45,7 @@ COPY . . RUN cd prover && cargo build --release --bin zksync_circuit_prover -FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04 +FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04 RUN apt-get update && apt-get install -y curl libpq5 ca-certificates && rm -rf /var/lib/apt/lists/* From 00badcaa0eb0557704560c66ee0e81791f9275ef Mon Sep 17 00:00:00 2001 From: Yury Akudovich Date: Tue, 3 Dec 2024 10:48:19 +0100 Subject: [PATCH 17/35] feat(prover): Add cuobjdump output after prover builds (#3354) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Add CUDA cuobjdump output on binary after build. ## Why ❔ To make sure that we build in all the needed GPU support. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. ref ZKD-2085 --- docker/circuit-prover-gpu/Dockerfile | 3 +++ docker/proof-fri-gpu-compressor/Dockerfile | 3 +++ docker/prover-gpu-fri/Dockerfile | 3 +++ 3 files changed, 9 insertions(+) diff --git a/docker/circuit-prover-gpu/Dockerfile b/docker/circuit-prover-gpu/Dockerfile index a5396e31ca88..852f42d705ec 100644 --- a/docker/circuit-prover-gpu/Dockerfile +++ b/docker/circuit-prover-gpu/Dockerfile @@ -45,6 +45,9 @@ COPY . . RUN cd prover && cargo build --release --bin zksync_circuit_prover +# Output build in CUDA architectures for debugging purposes. +RUN cuobjdump /usr/src/zksync/prover/target/release/zksync_circuit_prover + FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04 RUN apt-get update && apt-get install -y curl libpq5 ca-certificates && rm -rf /var/lib/apt/lists/* diff --git a/docker/proof-fri-gpu-compressor/Dockerfile b/docker/proof-fri-gpu-compressor/Dockerfile index e744787c8259..6157bca0ac13 100644 --- a/docker/proof-fri-gpu-compressor/Dockerfile +++ b/docker/proof-fri-gpu-compressor/Dockerfile @@ -50,6 +50,9 @@ RUN cd prover && \ RUN cd prover && BELLMAN_CUDA_DIR=$PWD/bellman-cuda cargo build --features "gpu" --release --bin zksync_proof_fri_compressor +# Output build in CUDA architectures for debugging purposes. +RUN cuobjdump /usr/src/zksync/prover/target/release/zksync_proof_fri_compressor + FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04 RUN apt-get update && apt-get install -y curl libpq5 ca-certificates && rm -rf /var/lib/apt/lists/* diff --git a/docker/prover-gpu-fri/Dockerfile b/docker/prover-gpu-fri/Dockerfile index 2a680a49c5de..db497fc5d500 100644 --- a/docker/prover-gpu-fri/Dockerfile +++ b/docker/prover-gpu-fri/Dockerfile @@ -45,6 +45,9 @@ COPY . . RUN cd prover && cargo build --release --features "gpu" --bin zksync_prover_fri +# Output build in CUDA architectures for debugging purposes. +RUN cuobjdump /usr/src/zksync/prover/target/release/zksync_prover_fri + FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04 RUN apt-get update && apt-get install -y curl libpq5 ca-certificates && rm -rf /var/lib/apt/lists/* From de4b56dc133608cbfc48441a60950536cc3d3bf0 Mon Sep 17 00:00:00 2001 From: Yury Akudovich Date: Tue, 3 Dec 2024 17:32:58 +0100 Subject: [PATCH 18/35] ci: Remove unused CUDA_ARCH 60,70 (#3357) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Remove unneeded CUDA_ARCH 60 and 70. Move needed CUDA_ARCH to default, so actual list will be in a single place after old CI cleanup. Remove CUDA_ARCH from witness-generator build, it isn't used there. ## Why ❔ To decrease build time and binary size. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. ref ZKD-2123 --- .github/workflows/build-docker-from-tag.yml | 16 +++++++--------- .github/workflows/build-prover-template.yml | 2 +- .../build-witness-generator-template.yml | 13 +++---------- .github/workflows/new-build-prover-template.yml | 7 +++++-- .../new-build-witness-generator-template.yml | 10 ++-------- .github/workflows/release-test-stage.yml | 2 -- 6 files changed, 18 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build-docker-from-tag.yml b/.github/workflows/build-docker-from-tag.yml index b3f442ff4662..e48539c90738 100644 --- a/.github/workflows/build-docker-from-tag.yml +++ b/.github/workflows/build-docker-from-tag.yml @@ -23,7 +23,7 @@ concurrency: docker-build jobs: setup: name: Setup - runs-on: [ ubuntu-latest ] + runs-on: [ubuntu-latest] outputs: image_tag_suffix: ${{ steps.set.outputs.image_tag_suffix }} prover_fri_gpu_key_id: ${{ steps.extract-prover-fri-setup-key-ids.outputs.gpu_short_commit_sha }} @@ -48,7 +48,7 @@ jobs: build-push-core-images: name: Build and push image - needs: [ setup ] + needs: [setup] uses: ./.github/workflows/new-build-core-template.yml if: contains(github.ref_name, 'core') secrets: @@ -61,7 +61,7 @@ jobs: build-push-tee-prover-images: name: Build and push images - needs: [ setup ] + needs: [setup] uses: ./.github/workflows/build-tee-prover-template.yml if: contains(github.ref_name, 'core') secrets: @@ -73,7 +73,7 @@ jobs: build-push-contract-verifier: name: Build and push image - needs: [ setup ] + needs: [setup] uses: ./.github/workflows/new-build-contract-verifier-template.yml if: contains(github.ref_name, 'contract_verifier') secrets: @@ -85,13 +85,12 @@ jobs: build-push-prover-images: name: Build and push image - needs: [ setup ] + needs: [setup] uses: ./.github/workflows/new-build-prover-template.yml if: contains(github.ref_name, 'prover') with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }} ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} - CUDA_ARCH: "60;70;75;80;89" action: "push" secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} @@ -99,13 +98,12 @@ jobs: build-push-witness-generator-image-avx512: name: Build and push image - needs: [ setup ] + needs: [setup] uses: ./.github/workflows/new-build-witness-generator-template.yml if: contains(github.ref_name, 'prover') with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }}-avx512 ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} - CUDA_ARCH: "60;70;75;80;89" WITNESS_GENERATOR_RUST_FLAGS: "-Ctarget_feature=+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl" action: "push" secrets: @@ -114,7 +112,7 @@ jobs: build-gar-prover-fri-gpu-and-circuit-prover-gpu-gar: name: Build GAR prover FRI GPU - needs: [ setup, build-push-prover-images ] + needs: [setup, build-push-prover-images] uses: ./.github/workflows/build-prover-fri-gpu-gar-and-circuit-prover-gpu-gar.yml if: contains(github.ref_name, 'prover') with: diff --git a/.github/workflows/build-prover-template.yml b/.github/workflows/build-prover-template.yml index 91de5dd51ecf..762ec496943c 100644 --- a/.github/workflows/build-prover-template.yml +++ b/.github/workflows/build-prover-template.yml @@ -30,7 +30,7 @@ on: CUDA_ARCH: description: "CUDA Arch to build" type: string - default: "89" + default: "75;80;89" required: false outputs: protocol_version: diff --git a/.github/workflows/build-witness-generator-template.yml b/.github/workflows/build-witness-generator-template.yml index d9493f97cae1..95053b89d3d8 100644 --- a/.github/workflows/build-witness-generator-template.yml +++ b/.github/workflows/build-witness-generator-template.yml @@ -27,11 +27,6 @@ on: type: boolean default: false required: false - CUDA_ARCH: - description: "CUDA Arch to build" - type: string - default: "89" - required: false WITNESS_GENERATOR_RUST_FLAGS: description: "Rust flags for witness_generator compilation" type: string @@ -49,10 +44,9 @@ jobs: IMAGE_TAG_SUFFIX: ${{ inputs.image_tag_suffix }} RUNNER_COMPOSE_FILE: "docker-compose-runner-nightly.yml" ERA_BELLMAN_CUDA_RELEASE: ${{ inputs.ERA_BELLMAN_CUDA_RELEASE }} - CUDA_ARCH: ${{ inputs.CUDA_ARCH }} WITNESS_GENERATOR_RUST_FLAGS: ${{ inputs.WITNESS_GENERATOR_RUST_FLAGS }} ZKSYNC_USE_CUDA_STUBS: true - runs-on: [ matterlabs-ci-runner-c3d ] + runs-on: [matterlabs-ci-runner-c3d] strategy: matrix: component: @@ -91,7 +85,6 @@ jobs: run: | ci_run run_retried curl -LO https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2\^24.key - - name: login to Docker registries if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) run: | @@ -162,11 +155,11 @@ jobs: DOCKER_ACTION: ${{ inputs.action }} COMPONENT: ${{ matrix.component }} run: | - PASSED_ENV_VARS="ERA_BELLMAN_CUDA_RELEASE,CUDA_ARCH,PROTOCOL_VERSION,RUST_FLAGS" \ + PASSED_ENV_VARS="ERA_BELLMAN_CUDA_RELEASE,PROTOCOL_VERSION,RUST_FLAGS" \ ci_run zk docker $DOCKER_ACTION $COMPONENT - name: Show sccache stats if: always() run: | ci_run sccache --show-stats || true - ci_run cat /tmp/sccache_log.txt || true \ No newline at end of file + ci_run cat /tmp/sccache_log.txt || true diff --git a/.github/workflows/new-build-prover-template.yml b/.github/workflows/new-build-prover-template.yml index cb254f602fc5..3a721e4425a8 100644 --- a/.github/workflows/new-build-prover-template.yml +++ b/.github/workflows/new-build-prover-template.yml @@ -30,8 +30,12 @@ on: CUDA_ARCH: description: "CUDA Arch to build" type: string - default: "89" + default: "75;80;89" required: false + # Details: https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/ + # L4: 89 + # T4: 75 + # A100: 80 outputs: protocol_version: description: "Protocol version of the binary" @@ -210,7 +214,6 @@ jobs: --tag asia-docker.pkg.dev/matterlabs-infra/matterlabs-docker/${{ matrix.component }}:2.0-${{ inputs.image_tag_suffix }} \ us-docker.pkg.dev/matterlabs-infra/matterlabs-docker/${{ matrix.component }}:2.0-${{ inputs.image_tag_suffix }} - - name: Login and push to Europe GAR run: | gcloud auth print-access-token --lifetime=7200 --impersonate-service-account=gha-ci-runners@matterlabs-infra.iam.gserviceaccount.com | docker login -u oauth2accesstoken --password-stdin https://europe-docker.pkg.dev diff --git a/.github/workflows/new-build-witness-generator-template.yml b/.github/workflows/new-build-witness-generator-template.yml index bbd6aee23ed1..a96d217da832 100644 --- a/.github/workflows/new-build-witness-generator-template.yml +++ b/.github/workflows/new-build-witness-generator-template.yml @@ -21,11 +21,6 @@ on: type: string default: non-push required: false - CUDA_ARCH: - description: "CUDA Arch to build" - type: string - default: "89" - required: false WITNESS_GENERATOR_RUST_FLAGS: description: "Rust flags for witness_generator compilation" type: string @@ -39,7 +34,7 @@ on: jobs: get-protocol-version: name: Get protocol version - runs-on: [ matterlabs-ci-runner-high-performance ] + runs-on: [matterlabs-ci-runner-high-performance] outputs: protocol_version: ${{ steps.protocolversion.outputs.protocol_version }} steps: @@ -85,7 +80,7 @@ jobs: needs: get-protocol-version env: PROTOCOL_VERSION: ${{ needs.get-protocol-version.outputs.protocol_version }} - runs-on: [ matterlabs-ci-runner-c3d ] + runs-on: [matterlabs-ci-runner-c3d] strategy: matrix: components: @@ -126,7 +121,6 @@ jobs: context: . push: ${{ inputs.action == 'push' }} build-args: | - CUDA_ARCH=${{ inputs.CUDA_ARCH }} SCCACHE_GCS_BUCKET=matterlabs-infra-sccache-storage SCCACHE_GCS_SERVICE_ACCOUNT=gha-ci-runners@matterlabs-infra.iam.gserviceaccount.com SCCACHE_GCS_RW_MODE=READ_WRITE diff --git a/.github/workflows/release-test-stage.yml b/.github/workflows/release-test-stage.yml index eb75ab179b8e..2e6c7882aa98 100644 --- a/.github/workflows/release-test-stage.yml +++ b/.github/workflows/release-test-stage.yml @@ -102,7 +102,6 @@ jobs: with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }} ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} - CUDA_ARCH: "60;70;75;80;89" action: "push" secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} @@ -116,7 +115,6 @@ jobs: with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }}-avx512 ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} - CUDA_ARCH: "60;70;75;80;89" WITNESS_GENERATOR_RUST_FLAGS: "-Ctarget_feature=+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl " action: "push" secrets: From a7dc0ed5007f6b2f789f4c61cb3d137843151860 Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 3 Dec 2024 17:37:41 +0100 Subject: [PATCH 19/35] fix(tee): fix race condition in batch locking (#3342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ After [scaling][1] [`zksync-tee-prover`][2] to two instances/replicas on Azure for `azure-stage2`, `azure-testnet2`, and `azure-mainnet2`, we started experiencing [duplicated proving for some batches][3]. ![logs](https://github.com/user-attachments/assets/39170805-d363-47bf-b275-468694593669) While this is not an erroneous situation, it is wasteful from a resource perspective. This was due to a race condition in batch locking. This PR fixes the issue by adding atomic batch locking. [1]: https://github.com/matter-labs/gitops-kubernetes/pull/7033/files [2]: https://github.com/matter-labs/zksync-era/blob/aaca32b6ab411d5cdc1234c20af8b5c1092195d7/core/bin/zksync_tee_prover/src/main.rs [3]: https://grafana.matterlabs.dev/goto/M1I_Bq7HR?orgId=1 ## Why ❔ To fix the bug that only activates after running `zksync-tee-prover` on multiple instances. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- ...82b0fa233913582fe9091cc1e8954dfd0eb1b.json | 30 ++++++ ...9f73e353da3bc6af7ecb81102c4194df631aa.json | 26 +++++ ...8203a62629904bc4956249e690a8ad7a48983.json | 32 ------ core/lib/dal/src/tee_proof_generation_dal.rs | 102 +++++++++++------- 4 files changed, 120 insertions(+), 70 deletions(-) create mode 100644 core/lib/dal/.sqlx/query-4777de5d3f313f1eb8c3b6a4c1782b0fa233913582fe9091cc1e8954dfd0eb1b.json create mode 100644 core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json delete mode 100644 core/lib/dal/.sqlx/query-e46c99b23db91800b27c717100f8203a62629904bc4956249e690a8ad7a48983.json diff --git a/core/lib/dal/.sqlx/query-4777de5d3f313f1eb8c3b6a4c1782b0fa233913582fe9091cc1e8954dfd0eb1b.json b/core/lib/dal/.sqlx/query-4777de5d3f313f1eb8c3b6a4c1782b0fa233913582fe9091cc1e8954dfd0eb1b.json new file mode 100644 index 000000000000..37adf92582e7 --- /dev/null +++ b/core/lib/dal/.sqlx/query-4777de5d3f313f1eb8c3b6a4c1782b0fa233913582fe9091cc1e8954dfd0eb1b.json @@ -0,0 +1,30 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n tee_proof_generation_details (\n l1_batch_number, tee_type, status, created_at, updated_at, prover_taken_at\n )\n VALUES\n (\n $1,\n $2,\n $3,\n NOW(),\n NOW(),\n NOW()\n )\n ON CONFLICT (l1_batch_number, tee_type) DO\n UPDATE\n SET\n status = $3,\n updated_at = NOW(),\n prover_taken_at = NOW()\n RETURNING\n l1_batch_number,\n created_at\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "created_at", + "type_info": "Timestamp" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text", + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "4777de5d3f313f1eb8c3b6a4c1782b0fa233913582fe9091cc1e8954dfd0eb1b" +} diff --git a/core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json b/core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json new file mode 100644 index 000000000000..6266f93e6545 --- /dev/null +++ b/core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n p.l1_batch_number\n FROM\n proof_generation_details p\n LEFT JOIN\n tee_proof_generation_details tee\n ON\n p.l1_batch_number = tee.l1_batch_number\n AND tee.tee_type = $1\n WHERE\n (\n p.l1_batch_number >= $5\n AND p.vm_run_data_blob_url IS NOT NULL\n AND p.proof_gen_data_blob_url IS NOT NULL\n )\n AND (\n tee.l1_batch_number IS NULL\n OR (\n (tee.status = $2 OR tee.status = $3)\n AND tee.prover_taken_at < NOW() - $4::INTERVAL\n )\n )\n LIMIT 1\n FOR UPDATE OF p\n SKIP LOCKED\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Text", + "Interval", + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa" +} diff --git a/core/lib/dal/.sqlx/query-e46c99b23db91800b27c717100f8203a62629904bc4956249e690a8ad7a48983.json b/core/lib/dal/.sqlx/query-e46c99b23db91800b27c717100f8203a62629904bc4956249e690a8ad7a48983.json deleted file mode 100644 index 7ca2c9e7e9fa..000000000000 --- a/core/lib/dal/.sqlx/query-e46c99b23db91800b27c717100f8203a62629904bc4956249e690a8ad7a48983.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n WITH upsert AS (\n SELECT\n p.l1_batch_number\n FROM\n proof_generation_details p\n LEFT JOIN\n tee_proof_generation_details tee\n ON\n p.l1_batch_number = tee.l1_batch_number\n AND tee.tee_type = $1\n WHERE\n (\n p.l1_batch_number >= $5\n AND p.vm_run_data_blob_url IS NOT NULL\n AND p.proof_gen_data_blob_url IS NOT NULL\n )\n AND (\n tee.l1_batch_number IS NULL\n OR (\n (tee.status = $2 OR tee.status = $3)\n AND tee.prover_taken_at < NOW() - $4::INTERVAL\n )\n )\n FETCH FIRST ROW ONLY\n )\n \n INSERT INTO\n tee_proof_generation_details (\n l1_batch_number, tee_type, status, created_at, updated_at, prover_taken_at\n )\n SELECT\n l1_batch_number,\n $1,\n $2,\n NOW(),\n NOW(),\n NOW()\n FROM\n upsert\n ON CONFLICT (l1_batch_number, tee_type) DO\n UPDATE\n SET\n status = $2,\n updated_at = NOW(),\n prover_taken_at = NOW()\n RETURNING\n l1_batch_number,\n created_at\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "created_at", - "type_info": "Timestamp" - } - ], - "parameters": { - "Left": [ - "Text", - "Text", - "Text", - "Interval", - "Int8" - ] - }, - "nullable": [ - false, - false - ] - }, - "hash": "e46c99b23db91800b27c717100f8203a62629904bc4956249e690a8ad7a48983" -} diff --git a/core/lib/dal/src/tee_proof_generation_dal.rs b/core/lib/dal/src/tee_proof_generation_dal.rs index e6b2df974b26..61a9e23ffea5 100644 --- a/core/lib/dal/src/tee_proof_generation_dal.rs +++ b/core/lib/dal/src/tee_proof_generation_dal.rs @@ -64,72 +64,98 @@ impl TeeProofGenerationDal<'_, '_> { ) -> DalResult> { let processing_timeout = pg_interval_from_duration(processing_timeout); let min_batch_number = i64::from(min_batch_number.0); + let mut transaction = self.storage.start_transaction().await?; + + // Lock rows in the proof_generation_details table to prevent race conditions. The + // tee_proof_generation_details table does not have corresponding entries yet if this is the + // first time the query is invoked for a batch. Locking rows in proof_generation_details + // ensures that two different TEE prover instances will not try to prove the same batch. + let batch_number = sqlx::query!( + r#" + SELECT + p.l1_batch_number + FROM + proof_generation_details p + LEFT JOIN + tee_proof_generation_details tee + ON + p.l1_batch_number = tee.l1_batch_number + AND tee.tee_type = $1 + WHERE + ( + p.l1_batch_number >= $5 + AND p.vm_run_data_blob_url IS NOT NULL + AND p.proof_gen_data_blob_url IS NOT NULL + ) + AND ( + tee.l1_batch_number IS NULL + OR ( + (tee.status = $2 OR tee.status = $3) + AND tee.prover_taken_at < NOW() - $4::INTERVAL + ) + ) + LIMIT 1 + FOR UPDATE OF p + SKIP LOCKED + "#, + tee_type.to_string(), + TeeProofGenerationJobStatus::PickedByProver.to_string(), + TeeProofGenerationJobStatus::Failed.to_string(), + processing_timeout, + min_batch_number + ) + .instrument("lock_batch_for_proving#get_batch_no") + .with_arg("tee_type", &tee_type) + .with_arg("processing_timeout", &processing_timeout) + .with_arg("min_batch_number", &min_batch_number) + .fetch_optional(&mut transaction) + .await?; + + let batch_number = match batch_number { + Some(batch) => batch.l1_batch_number, + None => { + return Ok(None); + } + }; + let locked_batch = sqlx::query_as!( StorageLockedBatch, r#" - WITH upsert AS ( - SELECT - p.l1_batch_number - FROM - proof_generation_details p - LEFT JOIN - tee_proof_generation_details tee - ON - p.l1_batch_number = tee.l1_batch_number - AND tee.tee_type = $1 - WHERE - ( - p.l1_batch_number >= $5 - AND p.vm_run_data_blob_url IS NOT NULL - AND p.proof_gen_data_blob_url IS NOT NULL - ) - AND ( - tee.l1_batch_number IS NULL - OR ( - (tee.status = $2 OR tee.status = $3) - AND tee.prover_taken_at < NOW() - $4::INTERVAL - ) - ) - FETCH FIRST ROW ONLY - ) - INSERT INTO tee_proof_generation_details ( l1_batch_number, tee_type, status, created_at, updated_at, prover_taken_at ) - SELECT - l1_batch_number, + VALUES + ( $1, $2, + $3, NOW(), NOW(), NOW() - FROM - upsert + ) ON CONFLICT (l1_batch_number, tee_type) DO UPDATE SET - status = $2, + status = $3, updated_at = NOW(), prover_taken_at = NOW() RETURNING l1_batch_number, created_at "#, + batch_number, tee_type.to_string(), TeeProofGenerationJobStatus::PickedByProver.to_string(), - TeeProofGenerationJobStatus::Failed.to_string(), - processing_timeout, - min_batch_number ) - .instrument("lock_batch_for_proving") + .instrument("lock_batch_for_proving#insert") + .with_arg("batch_number", &batch_number) .with_arg("tee_type", &tee_type) - .with_arg("processing_timeout", &processing_timeout) - .with_arg("l1_batch_number", &min_batch_number) - .fetch_optional(self.storage) + .fetch_optional(&mut transaction) .await? .map(Into::into); + transaction.commit().await?; Ok(locked_batch) } From dc2c476c19b16201f8b409caeedbc690e9d7e53e Mon Sep 17 00:00:00 2001 From: Alex Ostrovski Date: Wed, 4 Dec 2024 14:48:10 +0200 Subject: [PATCH 20/35] test: Benchmark ERC20 token transfers (#3281) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Benchmarks ERC20 token transfers. ## Why ❔ It would be useful to compare their performance to base token transfers. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- .../contracts/transfer/ERC20.sol | 11 +++++++ core/lib/test_contracts/src/contracts.rs | 7 ++++ core/tests/vm-benchmark/benches/batch.rs | 12 +++++-- core/tests/vm-benchmark/src/lib.rs | 6 ++-- core/tests/vm-benchmark/src/transaction.rs | 32 +++++++++++++++++++ core/tests/vm-benchmark/src/vm.rs | 16 +++++++++- 6 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 core/lib/test_contracts/contracts/transfer/ERC20.sol diff --git a/core/lib/test_contracts/contracts/transfer/ERC20.sol b/core/lib/test_contracts/contracts/transfer/ERC20.sol new file mode 100644 index 000000000000..aad741e66a56 --- /dev/null +++ b/core/lib/test_contracts/contracts/transfer/ERC20.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: UNLICENSED + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract TestERC20 is ERC20("Test", "TEST") { + constructor(uint256 _toMint) { + _mint(msg.sender, _toMint); + } +} diff --git a/core/lib/test_contracts/src/contracts.rs b/core/lib/test_contracts/src/contracts.rs index 09a0535824df..36d758c46de2 100644 --- a/core/lib/test_contracts/src/contracts.rs +++ b/core/lib/test_contracts/src/contracts.rs @@ -171,6 +171,13 @@ impl TestContract { &CONTRACT } + /// Returns a test ERC20 token implementation. + pub fn test_erc20() -> &'static Self { + static CONTRACT: Lazy = + Lazy::new(|| TestContract::new(raw::transfer::TestERC20)); + &CONTRACT + } + /// Returns a mock version of `ContractDeployer`. pub fn mock_deployer() -> &'static Self { static CONTRACT: Lazy = diff --git a/core/tests/vm-benchmark/benches/batch.rs b/core/tests/vm-benchmark/benches/batch.rs index 608f6be6d089..f4151c39a6f8 100644 --- a/core/tests/vm-benchmark/benches/batch.rs +++ b/core/tests/vm-benchmark/benches/batch.rs @@ -18,9 +18,9 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughpu use rand::{rngs::StdRng, Rng, SeedableRng}; use vm_benchmark::{ criterion::{is_test_mode, BenchmarkGroup, BenchmarkId, CriterionExt, MeteredTime}, - get_deploy_tx_with_gas_limit, get_heavy_load_test_tx, get_load_test_deploy_tx, - get_load_test_tx, get_realistic_load_test_tx, get_transfer_tx, BenchmarkingVm, - BenchmarkingVmFactory, Bytecode, Fast, Legacy, LoadTestParams, + get_deploy_tx_with_gas_limit, get_erc20_deploy_tx, get_erc20_transfer_tx, + get_heavy_load_test_tx, get_load_test_deploy_tx, get_load_test_tx, get_realistic_load_test_tx, + get_transfer_tx, BenchmarkingVm, BenchmarkingVmFactory, Bytecode, Fast, Legacy, LoadTestParams, }; use zksync_types::Transaction; @@ -146,6 +146,12 @@ fn bench_fill_bootloader( run_vm::(&mut group, "load_test_heavy", &txs); drop(txs); + // ERC-20 token transfers + let txs = (1..=max_txs).map(get_erc20_transfer_tx); + let txs: Vec<_> = iter::once(get_erc20_deploy_tx()).chain(txs).collect(); + run_vm::(&mut group, "erc20_transfer", &txs); + drop(txs); + // Base token transfers let txs: Vec<_> = (0..max_txs).map(get_transfer_tx).collect(); run_vm::(&mut group, "transfer", &txs); diff --git a/core/tests/vm-benchmark/src/lib.rs b/core/tests/vm-benchmark/src/lib.rs index dbe2fdb808db..8f43f61b28b6 100644 --- a/core/tests/vm-benchmark/src/lib.rs +++ b/core/tests/vm-benchmark/src/lib.rs @@ -2,9 +2,9 @@ use zksync_types::Transaction; pub use crate::{ transaction::{ - get_deploy_tx, get_deploy_tx_with_gas_limit, get_heavy_load_test_tx, - get_load_test_deploy_tx, get_load_test_tx, get_realistic_load_test_tx, get_transfer_tx, - LoadTestParams, + get_deploy_tx, get_deploy_tx_with_gas_limit, get_erc20_deploy_tx, get_erc20_transfer_tx, + get_heavy_load_test_tx, get_load_test_deploy_tx, get_load_test_tx, + get_realistic_load_test_tx, get_transfer_tx, LoadTestParams, }, vm::{BenchmarkingVm, BenchmarkingVmFactory, CountInstructions, Fast, Legacy, VmLabel}, }; diff --git a/core/tests/vm-benchmark/src/transaction.rs b/core/tests/vm-benchmark/src/transaction.rs index 5c1824e6ffa2..e50f40a06ef1 100644 --- a/core/tests/vm-benchmark/src/transaction.rs +++ b/core/tests/vm-benchmark/src/transaction.rs @@ -56,6 +56,38 @@ pub fn get_transfer_tx(nonce: u32) -> Transaction { signed.into() } +pub fn get_erc20_transfer_tx(nonce: u32) -> Transaction { + let transfer_fn = TestContract::test_erc20().function("transfer"); + let calldata = transfer_fn + .encode_input(&[ + Token::Address(Address::from_low_u64_be(nonce.into())), // send tokens to unique addresses + Token::Uint(1.into()), + ]) + .unwrap(); + + let mut signed = L2Tx::new_signed( + Some(*LOAD_TEST_CONTRACT_ADDRESS), + calldata, + Nonce(nonce), + tx_fee(1_000_000), + 0.into(), // value + L2ChainId::from(270), + &PRIVATE_KEY, + vec![], // factory deps + Default::default(), // paymaster params + ) + .expect("should create a signed execute transaction"); + + signed.set_input(H256::random().as_bytes().to_vec(), H256::random()); + signed.into() +} + +pub fn get_erc20_deploy_tx() -> Transaction { + let calldata = [Token::Uint(U256::one() << 128)]; // initial token amount minted to the deployer + let execute = TestContract::test_erc20().deploy_payload(&calldata); + Account::new(PRIVATE_KEY.clone()).get_l2_tx_for_execute(execute, Some(tx_fee(500_000_000))) +} + pub fn get_load_test_deploy_tx() -> Transaction { let calldata = [Token::Uint(LOAD_TEST_MAX_READS.into())]; let execute = TestContract::load_test().deploy_payload(&calldata); diff --git a/core/tests/vm-benchmark/src/vm.rs b/core/tests/vm-benchmark/src/vm.rs index 4bd7d7eb1aa6..e69e7ca1e909 100644 --- a/core/tests/vm-benchmark/src/vm.rs +++ b/core/tests/vm-benchmark/src/vm.rs @@ -240,7 +240,9 @@ mod tests { use super::*; use crate::{ get_deploy_tx, get_heavy_load_test_tx, get_load_test_deploy_tx, get_load_test_tx, - get_realistic_load_test_tx, get_transfer_tx, LoadTestParams, BYTECODES, + get_realistic_load_test_tx, get_transfer_tx, + transaction::{get_erc20_deploy_tx, get_erc20_transfer_tx}, + LoadTestParams, BYTECODES, }; #[test] @@ -259,6 +261,18 @@ mod tests { assert_matches!(res.result, ExecutionResult::Success { .. }); } + #[test] + fn can_erc20_transfer() { + let mut vm = BenchmarkingVm::new(); + let res = vm.run_transaction(&get_erc20_deploy_tx()); + assert_matches!(res.result, ExecutionResult::Success { .. }); + + for nonce in 1..=5 { + let res = vm.run_transaction(&get_erc20_transfer_tx(nonce)); + assert_matches!(res.result, ExecutionResult::Success { .. }); + } + } + #[test] fn can_load_test() { let mut vm = BenchmarkingVm::new(); From b12da8d1fddc7870bf17d5e08312d20773815269 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 4 Dec 2024 16:24:50 +0100 Subject: [PATCH 21/35] fix(tee): correct previous fix for race condition in batch locking (#3358) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Commit a7dc0ed5007f6b2f789f4c61cb3d137843151860 (PR #3342) was supposed to fix a race condition in batch locking by introducing SQL row-locking, but it [didn't work][2] as expected. ![Screenshot From 2024-12-04 11-32-32](https://github.com/user-attachments/assets/959ffc3c-593f-409a-87ab-68ec197040a0) Now we are switching back to coarser-grained table-level locking as [originally suggested][1] by Harald. The original fix was hard to test unless deployed to `stage` due to the undeterministic nature of the problem, so we needed to merge it to the `main` branch to properly test it. [1]: https://github.com/matter-labs/zksync-era/pull/3342#issuecomment-2514573386 [2]: https://grafana.matterlabs.dev/goto/AhEd5FVNg?orgId=1 ## Why ❔ To fix the bug that only activates after running `zksync-tee-prover` on multiple instances. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- ...6822a6e92698fcfcf5d0a9252d84b75459b2664.json} | 4 ++-- core/lib/dal/src/tee_proof_generation_dal.rs | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) rename core/lib/dal/.sqlx/{query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json => query-b6961d273f833f8babaf16f256822a6e92698fcfcf5d0a9252d84b75459b2664.json} (87%) diff --git a/core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json b/core/lib/dal/.sqlx/query-b6961d273f833f8babaf16f256822a6e92698fcfcf5d0a9252d84b75459b2664.json similarity index 87% rename from core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json rename to core/lib/dal/.sqlx/query-b6961d273f833f8babaf16f256822a6e92698fcfcf5d0a9252d84b75459b2664.json index 6266f93e6545..b206d337201b 100644 --- a/core/lib/dal/.sqlx/query-8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa.json +++ b/core/lib/dal/.sqlx/query-b6961d273f833f8babaf16f256822a6e92698fcfcf5d0a9252d84b75459b2664.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n p.l1_batch_number\n FROM\n proof_generation_details p\n LEFT JOIN\n tee_proof_generation_details tee\n ON\n p.l1_batch_number = tee.l1_batch_number\n AND tee.tee_type = $1\n WHERE\n (\n p.l1_batch_number >= $5\n AND p.vm_run_data_blob_url IS NOT NULL\n AND p.proof_gen_data_blob_url IS NOT NULL\n )\n AND (\n tee.l1_batch_number IS NULL\n OR (\n (tee.status = $2 OR tee.status = $3)\n AND tee.prover_taken_at < NOW() - $4::INTERVAL\n )\n )\n LIMIT 1\n FOR UPDATE OF p\n SKIP LOCKED\n ", + "query": "\n SELECT\n p.l1_batch_number\n FROM\n proof_generation_details p\n LEFT JOIN\n tee_proof_generation_details tee\n ON\n p.l1_batch_number = tee.l1_batch_number\n AND tee.tee_type = $1\n WHERE\n (\n p.l1_batch_number >= $5\n AND p.vm_run_data_blob_url IS NOT NULL\n AND p.proof_gen_data_blob_url IS NOT NULL\n )\n AND (\n tee.l1_batch_number IS NULL\n OR (\n (tee.status = $2 OR tee.status = $3)\n AND tee.prover_taken_at < NOW() - $4::INTERVAL\n )\n )\n LIMIT 1\n ", "describe": { "columns": [ { @@ -22,5 +22,5 @@ false ] }, - "hash": "8ead57cdda5909348f31f8c4d989f73e353da3bc6af7ecb81102c4194df631aa" + "hash": "b6961d273f833f8babaf16f256822a6e92698fcfcf5d0a9252d84b75459b2664" } diff --git a/core/lib/dal/src/tee_proof_generation_dal.rs b/core/lib/dal/src/tee_proof_generation_dal.rs index 61a9e23ffea5..12761a3d6d34 100644 --- a/core/lib/dal/src/tee_proof_generation_dal.rs +++ b/core/lib/dal/src/tee_proof_generation_dal.rs @@ -66,10 +66,16 @@ impl TeeProofGenerationDal<'_, '_> { let min_batch_number = i64::from(min_batch_number.0); let mut transaction = self.storage.start_transaction().await?; - // Lock rows in the proof_generation_details table to prevent race conditions. The - // tee_proof_generation_details table does not have corresponding entries yet if this is the - // first time the query is invoked for a batch. Locking rows in proof_generation_details - // ensures that two different TEE prover instances will not try to prove the same batch. + // Lock the entire tee_proof_generation_details table in EXCLUSIVE mode to prevent race + // conditions. Locking the table ensures that two different TEE prover instances will not + // try to prove the same batch. + sqlx::query("LOCK TABLE tee_proof_generation_details IN EXCLUSIVE MODE") + .instrument("lock_batch_for_proving#lock_table") + .execute(&mut transaction) + .await?; + + // The tee_proof_generation_details table does not have corresponding entries yet if this is + // the first time the query is invoked for a batch. let batch_number = sqlx::query!( r#" SELECT @@ -95,8 +101,6 @@ impl TeeProofGenerationDal<'_, '_> { ) ) LIMIT 1 - FOR UPDATE OF p - SKIP LOCKED "#, tee_type.to_string(), TeeProofGenerationJobStatus::PickedByProver.to_string(), From cf458a048540f401ecf946c710b694bb332a6692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Fran=C3=A7a?= Date: Thu, 5 Dec 2024 02:27:13 +0000 Subject: [PATCH 22/35] docs(consensus): update decentralization guide (#3343) Update decentralization guide with more complete instructions. --- core/bin/snapshots_creator/README.md | 9 +- core/lib/merkle_tree/README.md | 6 +- core/tests/recovery-test/src/index.ts | 5 +- core/tests/ts-integration/src/l1-provider.ts | 5 +- .../ts-integration/src/retry-provider.ts | 5 +- core/tests/ts-integration/src/utils.ts | 6 +- .../ts-integration/tests/api/web3.test.ts | 5 +- .../tests/ts-integration/tests/system.test.ts | 8 +- core/tests/upgrade-test/tests/utils.ts | 28 +-- docs/src/guides/advanced/13_zk_intuition.md | 16 +- .../guides/advanced/16_decentralization.md | 166 +++++++++++++----- package.json | 4 +- prover/crates/bin/prover_cli/README.md | 4 +- yarn.lock | 36 +--- 14 files changed, 196 insertions(+), 107 deletions(-) diff --git a/core/bin/snapshots_creator/README.md b/core/bin/snapshots_creator/README.md index 26ebbb6d652a..31d9cc09210f 100644 --- a/core/bin/snapshots_creator/README.md +++ b/core/bin/snapshots_creator/README.md @@ -43,9 +43,8 @@ repository root. The storage location can be configured using the object store c filesystem, or Google Cloud Storage (GCS). Beware that for end-to-end testing of snapshot recovery, changes applied to the main node configuration must be reflected in the external node configuration. -Creating a snapshot is a part of the [snapshot recovery integration test]. You can run the test using -`yarn recovery-test snapshot-recovery-test`. It requires the main node to be launched with a command like -`zk server --components api,tree,eth,state_keeper,commitment_generator`. +Creating a snapshot is a part of the [snapshot recovery integration test]. You can run the test using `yarn recovery-test snapshot-recovery-test`. +It requires the main node to be launched with a command like `zk server --components api,tree,eth,state_keeper,commitment_generator`. ## Snapshots format @@ -59,8 +58,8 @@ Each snapshot consists of three types of data (see [`snapshots.rs`] for exact de enumeration index; both are used to restore the contents of the `initial_writes` table. Chunking storage logs is motivated by their parallel generation; each chunk corresponds to a distinct non-overlapping range of hashed storage keys. (This should be considered an implementation detail for the purposes of snapshot recovery; recovery must not - rely on any particular key distribution among chunks.) Stored as gzipped Protobuf messages in an [object store]; each - chunk is a separate object. + rely on any particular key distribution among chunks.) Stored as gzipped Protobuf messages in an [object store]; each chunk + is a separate object. - **Factory dependencies:** All bytecodes deployed on L2 at the time the snapshot is made. Stored as a single gzipped Protobuf message in an object store. diff --git a/core/lib/merkle_tree/README.md b/core/lib/merkle_tree/README.md index b3c8a31c9980..ed31ac4cbf80 100644 --- a/core/lib/merkle_tree/README.md +++ b/core/lib/merkle_tree/README.md @@ -1,8 +1,8 @@ # Merkle Tree -Binary Merkle tree implementation based on amortized radix-16 Merkle tree (AR16MT) described in the [Jellyfish Merkle -tree] white paper. Unlike Jellyfish Merkle tree, our construction uses vanilla binary tree hashing algorithm to make it -easier for the circuit creation. The depth of the tree is 256, and Blake2 is used as the hashing function. +Binary Merkle tree implementation based on amortized radix-16 Merkle tree (AR16MT) described in the [Jellyfish +Merkle tree] white paper. Unlike Jellyfish Merkle tree, our construction uses vanilla binary tree hashing algorithm to +make it easier for the circuit creation. The depth of the tree is 256, and Blake2 is used as the hashing function. ## Snapshot tests diff --git a/core/tests/recovery-test/src/index.ts b/core/tests/recovery-test/src/index.ts index 8567be6d6d30..d4eaa476b838 100644 --- a/core/tests/recovery-test/src/index.ts +++ b/core/tests/recovery-test/src/index.ts @@ -193,7 +193,10 @@ export class NodeProcess { return new NodeProcess(childProcess, logs); } - private constructor(private childProcess: ChildProcess, readonly logs: FileHandle) {} + private constructor( + private childProcess: ChildProcess, + readonly logs: FileHandle + ) {} exitCode() { return this.childProcess.exitCode; diff --git a/core/tests/ts-integration/src/l1-provider.ts b/core/tests/ts-integration/src/l1-provider.ts index 39b0397cd069..de41349951c4 100644 --- a/core/tests/ts-integration/src/l1-provider.ts +++ b/core/tests/ts-integration/src/l1-provider.ts @@ -28,7 +28,10 @@ class L1TransactionResponse extends ethers.TransactionResponse implements Augmen private isWaitingReported: boolean = false; private isReceiptReported: boolean = false; - constructor(base: ethers.TransactionResponse, public readonly reporter: Reporter) { + constructor( + base: ethers.TransactionResponse, + public readonly reporter: Reporter + ) { super(base, base.provider); } diff --git a/core/tests/ts-integration/src/retry-provider.ts b/core/tests/ts-integration/src/retry-provider.ts index 51d88357c6c3..4c89e0407b9e 100644 --- a/core/tests/ts-integration/src/retry-provider.ts +++ b/core/tests/ts-integration/src/retry-provider.ts @@ -81,7 +81,10 @@ class L2TransactionResponse extends zksync.types.TransactionResponse implements private isWaitingReported: boolean = false; private isReceiptReported: boolean = false; - constructor(base: zksync.types.TransactionResponse, public readonly reporter: Reporter) { + constructor( + base: zksync.types.TransactionResponse, + public readonly reporter: Reporter + ) { super(base, base.provider); } diff --git a/core/tests/ts-integration/src/utils.ts b/core/tests/ts-integration/src/utils.ts index f8378c8dff01..7088c9d4ee51 100644 --- a/core/tests/ts-integration/src/utils.ts +++ b/core/tests/ts-integration/src/utils.ts @@ -57,7 +57,11 @@ export enum NodeType { } export class Node { - constructor(public proc: ChildProcessWithoutNullStreams, public l2NodeUrl: string, private readonly type: TYPE) {} + constructor( + public proc: ChildProcessWithoutNullStreams, + public l2NodeUrl: string, + private readonly type: TYPE + ) {} public async terminate() { try { diff --git a/core/tests/ts-integration/tests/api/web3.test.ts b/core/tests/ts-integration/tests/api/web3.test.ts index ceed9654df91..16e712bb9255 100644 --- a/core/tests/ts-integration/tests/api/web3.test.ts +++ b/core/tests/ts-integration/tests/api/web3.test.ts @@ -1232,7 +1232,10 @@ export class MockMetamask { readonly isMetaMask: boolean = true; readonly chainId: string; - constructor(readonly wallet: zksync.Wallet, readonly networkVersion: bigint) { + constructor( + readonly wallet: zksync.Wallet, + readonly networkVersion: bigint + ) { this.chainId = ethers.toBeHex(networkVersion); } diff --git a/core/tests/ts-integration/tests/system.test.ts b/core/tests/ts-integration/tests/system.test.ts index 7ce2f69acd6a..38b21c5839ae 100644 --- a/core/tests/ts-integration/tests/system.test.ts +++ b/core/tests/ts-integration/tests/system.test.ts @@ -371,9 +371,11 @@ describe('System behavior checks', () => { function bootloaderUtilsContract() { const BOOTLOADER_UTILS_ADDRESS = '0x000000000000000000000000000000000000800c'; const BOOTLOADER_UTILS = new ethers.Interface( - require(`${ - testMaster.environment().pathToHome - }/contracts/system-contracts/zkout/BootloaderUtilities.sol/BootloaderUtilities.json`).abi + require( + `${ + testMaster.environment().pathToHome + }/contracts/system-contracts/zkout/BootloaderUtilities.sol/BootloaderUtilities.json` + ).abi ); return new ethers.Contract(BOOTLOADER_UTILS_ADDRESS, BOOTLOADER_UTILS, alice); diff --git a/core/tests/upgrade-test/tests/utils.ts b/core/tests/upgrade-test/tests/utils.ts index 2972f8411f5f..c8aae9d4ab0b 100644 --- a/core/tests/upgrade-test/tests/utils.ts +++ b/core/tests/upgrade-test/tests/utils.ts @@ -93,11 +93,13 @@ export function initContracts(pathToHome: string, zkStack: boolean): Contracts { complexUpgraderAbi: new ethers.Interface( require(`${CONTRACTS_FOLDER}/system-contracts/zkout/ComplexUpgrader.sol/ComplexUpgrader.json`).abi ), - counterBytecode: - require(`${pathToHome}/core/tests/ts-integration/artifacts-zk/contracts/counter/counter.sol/Counter.json`) - .deployedBytecode, + counterBytecode: require( + `${pathToHome}/core/tests/ts-integration/artifacts-zk/contracts/counter/counter.sol/Counter.json` + ).deployedBytecode, stateTransitonManager: new ethers.Interface( - require(`${CONTRACTS_FOLDER}/l1-contracts/out/StateTransitionManager.sol/StateTransitionManager.json`).abi + require( + `${CONTRACTS_FOLDER}/l1-contracts/out/StateTransitionManager.sol/StateTransitionManager.json` + ).abi ) }; } else { @@ -116,16 +118,22 @@ export function initContracts(pathToHome: string, zkStack: boolean): Contracts { require(`${L1_CONTRACTS_FOLDER}/governance/ChainAdmin.sol/ChainAdmin.json`).abi ), l2ForceDeployUpgraderAbi: new ethers.Interface( - require(`${pathToHome}/contracts/l2-contracts/artifacts-zk/contracts/ForceDeployUpgrader.sol/ForceDeployUpgrader.json`).abi + require( + `${pathToHome}/contracts/l2-contracts/artifacts-zk/contracts/ForceDeployUpgrader.sol/ForceDeployUpgrader.json` + ).abi ), complexUpgraderAbi: new ethers.Interface( - require(`${pathToHome}/contracts/system-contracts/artifacts-zk/contracts-preprocessed/ComplexUpgrader.sol/ComplexUpgrader.json`).abi + require( + `${pathToHome}/contracts/system-contracts/artifacts-zk/contracts-preprocessed/ComplexUpgrader.sol/ComplexUpgrader.json` + ).abi ), - counterBytecode: - require(`${pathToHome}/core/tests/ts-integration/artifacts-zk/contracts/counter/counter.sol/Counter.json`) - .deployedBytecode, + counterBytecode: require( + `${pathToHome}/core/tests/ts-integration/artifacts-zk/contracts/counter/counter.sol/Counter.json` + ).deployedBytecode, stateTransitonManager: new ethers.Interface( - require(`${L1_CONTRACTS_FOLDER}/state-transition/StateTransitionManager.sol/StateTransitionManager.json`).abi + require( + `${L1_CONTRACTS_FOLDER}/state-transition/StateTransitionManager.sol/StateTransitionManager.json` + ).abi ) }; } diff --git a/docs/src/guides/advanced/13_zk_intuition.md b/docs/src/guides/advanced/13_zk_intuition.md index 6e0224a3237f..cee4dcfd1797 100644 --- a/docs/src/guides/advanced/13_zk_intuition.md +++ b/docs/src/guides/advanced/13_zk_intuition.md @@ -85,8 +85,8 @@ located in a module [zksync core witness]. However, for the new proof system, th new location called [separate witness binary]. Inside this new location, after the necessary data is fetched from storage, the witness generator calls another piece of -code from [zkevm_test_harness witness] named `run_with_fixed_params`. This code is responsible for creating the -witnesses themselves (which can get really HUGE). +code from [zkevm_test_harness witness] named `run_with_fixed_params`. This code is responsible for creating the witnesses +themselves (which can get really HUGE). ## Generating the Proof @@ -96,9 +96,9 @@ The main goal of this step is to take an operation (for example, a calculation c into smaller pieces. Then, we represent this information as a special mathematical expression called a polynomial. To construct these polynomials, we use something called a `ConstraintSystem`. The specific type that we use is called -zkSNARK, and our custom version of it is named bellman. You can find our code for this in the [bellman repo]. -Additionally, we have an optimized version that's designed to run faster on certain types of hardware (using CUDA -technology), which you can find in the [bellman cuda repo]. +zkSNARK, and our custom version of it is named bellman. You can find our code for this in the [bellman repo]. Additionally, +we have an optimized version that's designed to run faster on certain types of hardware (using CUDA technology), which you +can find in the [bellman cuda repo]. An [example ecrecover circuit] might give you a clearer picture of what this looks like in practice. @@ -107,9 +107,9 @@ heavy calculations, we use GPUs to speed things up. ### Where is the Code -The main code that utilizes the GPUs to create proofs is located in a repository named [heavy_ops_service repo]. This -code combines elements from the [bellman cuda repo] that we mentioned earlier, along with a huge amount of data -generated by the witness, to produce the final proofs. +The main code that utilizes the GPUs to create proofs is located in a repository named [heavy_ops_service repo]. This code +combines elements from the [bellman cuda repo] that we mentioned earlier, along with a huge amount of data generated by the +witness, to produce the final proofs. ## What Does "Verify Proof on L1" Mean diff --git a/docs/src/guides/advanced/16_decentralization.md b/docs/src/guides/advanced/16_decentralization.md index a5f889a813d0..7e1ff9b71cb5 100644 --- a/docs/src/guides/advanced/16_decentralization.md +++ b/docs/src/guides/advanced/16_decentralization.md @@ -8,13 +8,62 @@ and enabled as follows: Run the following to generate consensus secrets: ``` -docker run --entrypoint /usr/bin/zksync_external_node "matterlabs/external-node:2.0-v25.0.0" generate-secrets > consensus_secrets.yaml -chmod 600 consensus_secrets.yaml +docker run --entrypoint /usr/bin/zksync_external_node "matterlabs/external-node:2.0-v25.0.0" generate-secrets +``` + +That will output something like this (but with different keys obviously): + +``` +#validator:public:bls12_381:84fe19a96b6443ca7ce...98dec0870f6d8aa95c8164102f0d62e4c47e3566c4e5c32354d +validator_key: validator:secret:bls12_381:1de85683e6decbfcf6c12aa42a5c8bfa98d7ae796dee068ae73dc784a58f5213 +# attester:public:secp256k1:02e262af8c97536b9e479c6d60f213920e759faf4086d8352e98bc25d06b4142e3 +attester_key: attester:secret:secp256k1:1111eb31c2389613f3ceb4288eadda35780e98df4cabb2b7663882262f72e422 +# node:public:ed25519:acb7e350cf53e3b4c2042e2c8044734384cee51f58a0fa052fd7e0c9c3f4b20d +node_key: node:secret:ed25519:0effb1d7c335d23606f656ca1ba87566144d5af2984bd7486379d4f83a204ba2 +``` + +You then have two different paths depending if your main node is using file-based or env-based configuration. + +## Configuring consensus + +### File-based configuration + +If you are using the recommended file-based configuration then you'll need to add the following information to your +`general.yaml` config file (see [Ecosystem Configuration](../launch.md#ecosystem-configuration)): + +```yaml +consensus: + server_addr: '0.0.0.0:3054' + public_addr: + # Address under which the node is accessible to the other nodes. + # It can be a public domain, like `example.com:3054`, in case the main node is accessible from the internet, + # or it can be a kubernetes cluster domain, like `server-v2-core..svc.cluster.local:3054` in + # case the main node should be only accessible within the cluster. + debug_page_addr: '0.0.0.0:5000' + max_payload_size: 3200000 + gossip_dynamic_inbound_limit: 10 + genesis_spec: + chain_id: ??? # chain id + protocol_version: 1 # consensus protocol version + validators: + - key: validator:public:??? # public key of the main node (copy this PUBLIC key from the secrets you generated) + weight: 1 + leader: validator:public:??? # same as above - main node will be the only validator and the only leader. ``` -## Preparing the consensus config +And the secrets you generated to your `secrets.yaml` config file: -Create `consensus_config.yaml` file with the following content (remember to replace the placeholders): +```yaml +consensus: + validator_key: validator:secret:??? + attester_key: attester:secret:??? + node_key: node:secret:??? +``` + +### Env-based configuration + +If you are using the env-based configuration you'll need to create a `consensus_config.yaml` file with the following +content: ```yaml server_addr: '0.0.0.0:3054' @@ -27,52 +76,80 @@ debug_page_addr: '0.0.0.0:5000' max_payload_size: 3200000 gossip_dynamic_inbound_limit: 10 genesis_spec: - chain_id: # chain id + chain_id: ??? # chain id protocol_version: 1 # consensus protocol version validators: - - key: validator:public:??? # public key of the main node (copy this PUBLIC key from consensus_secrets.yaml) + - key: validator:public:??? # public key of the main node (copy this PUBLIC key from the secrets you generated) weight: 1 leader: validator:public:??? # same as above - main node will be the only validator and the only leader. ``` -## Providing the configuration to the `zksync_server` +And a `consensus_secrets.yaml` file with the with the secrets you generated previously: -To enable consensus component for the main node you need to append -`--components=,consensus` to the `zksync_server` command line arguments. -In addition to that, you need to provide the configuration (from the files `consensus_config.yaml` and -`consensus_secrets.yaml` that we have just prepared) to the `zksync_server` binary. There are 2 ways (hopefully not for -long) to achieve that: +```yaml +validator_key: validator:secret:??? +attester_key: attester:secret:??? +node_key: node:secret:??? +``` + +Don't forget to set secure permissions to it: -- In file-based configuration system, the consensus config is embedded in the - [general config](https://github.com/matter-labs/zksync-era/blob/1edcabe0c6a02d5b6700c29c0d9f6220ec6fb03c/core/lib/config/src/configs/general.rs#L58), - and the consensus secrets are embedded in the - [secrets config](https://github.com/matter-labs/zksync-era/blob/main/core/bin/zksync_server/src/main.rs). Paste the - content of the generated `consensus_secrets.yaml` file to the `secrets` config, and prepared config to the `general` - config. +``` +chmod 600 consensus_secrets.yaml +``` -- In env-var-based configuration system, the consensus config and consensus secrets files are passed as standalone - files. The paths to these files need to be passed as env vars `CONSENSUS_CONFIG_PATH` and `CONSENSUS_SECRETS_PATH`. +Then you'll need to pass the paths to these files as env vars `CONSENSUS_CONFIG_PATH` and `CONSENSUS_SECRETS_PATH`. + +## Running the `zksync_server` + +Finally, to enable the consensus component for the main node you just need to append +`--components=,consensus` to the `zksync_server` command line arguments. ## Gitops repo config -If you are using the matterlabs gitops repo to configure the main node, it is even more complicated because the -`consensus_config.yaml` file is rendered from a helm chart. See the -[example](https://github.com/matter-labs/gitops-kubernetes/blob/main/apps/environments/mainnet2/server-v2/server-v2-core.yaml), -to see where you have to paste the content of the `consensus_config.yaml` file. +If you are using the matterlabs gitops repo to configure the main node, you'll need to add this information to your +kubernetes config for the core server, `server-v2-core.yaml` file (see +[example](https://github.com/matter-labs/gitops-kubernetes/blob/177dcd575c6ab446e70b9a9ced8024766095b516/apps/environments/era-stage-proofs/server-v2/server-v2-core.yaml#L23-L35)): + +```yaml +spec: + values: + args: + - --components=state_keeper,consensus + service: + main: + ports: + consensus: + enabled: true + port: 3054 +``` + +Then again you have two paths depending if the deployment is using file-based or env-based configuration. Although by +default you should be using file-based configuration. -You need to embed the `consensus_secrets.yaml` file into a kubernetes config: +### File-based configuration + +Just like before you'll add the consensus config information to the `general.yaml` config file (see +[example](https://github.com/matter-labs/gitops-kubernetes/blob/177dcd575c6ab446e70b9a9ced8024766095b516/apps/environments/era-stage-proofs/server-v2-config/general.yaml#L353-L368)). + +And the secrets you generated to your whatever secrets managing system you are using (see an example +[here](https://github.com/matter-labs/gitops-kubernetes/blob/177dcd575c6ab446e70b9a9ced8024766095b516/apps/clusters/era-stage-proofs/stage2/secrets/server-v2-secrets.yaml) +using SOPS). ```yaml -apiVersion: v1 -kind: Secret -metadata: - name: consensus-secrets -type: Opaque -stringData: - .consensus_secrets.yaml: +consensus: + validator_key: validator:secret:??? + attester_key: attester:secret:??? + node_key: node:secret:??? ``` -You need to add the following sections to your kubernetes config for the core server: +### Env-based configuration + +It is even more complicated because the `consensus_config.yaml` file is rendered from a helm chart. See the +[example](https://github.com/matter-labs/gitops-kubernetes/blob/177dcd575c6ab446e70b9a9ced8024766095b516/apps/environments/mainnet2/server-v2/server-v2-core.yaml#L37-L92), +to see where you have to paste the content of the `consensus_config.yaml` file. + +You also need to add the following sections to your `server-v2-core.yaml` file: ```yaml spec: @@ -83,14 +160,6 @@ spec: enabled: true type: secret mountPath: '/etc/consensus_secrets/' - args: - - --components=state_keeper,consensus - service: - main: - ports: - consensus: - enabled: true - port: 3054 configMap: consensus: enabled: true @@ -102,3 +171,18 @@ spec: - name: CONSENSUS_SECRETS_PATH value: /etc/consensus_secrets/.consensus_secrets.yaml ``` + +You need to embed the `consensus_secrets.yaml` file into a kubernetes config (see how to do it +[here](https://github.com/matter-labs/gitops-kubernetes/blob/177dcd575c6ab446e70b9a9ced8024766095b516/apps/environments/mainnet2/zksync-v2-secret/kustomization.yaml#L3-L4) +and +[here](https://github.com/matter-labs/gitops-kubernetes/blob/177dcd575c6ab446e70b9a9ced8024766095b516/apps/environments/mainnet2/zksync-v2-secret/consensus_secrets.yaml)): + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: consensus-secrets +type: Opaque +stringData: + .consensus_secrets.yaml: +``` diff --git a/package.json b/package.json index 9e3428e614cc..b293bedd8f69 100644 --- a/package.json +++ b/package.json @@ -39,12 +39,12 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^4.10.0", "babel-eslint": "^10.1.0", - "eslint-config-alloy": "^3.8.2", "eslint": "^7.16.0", + "eslint-config-alloy": "^3.8.2", "markdownlint-cli": "^0.24.0", "npm-run-all": "^4.1.5", + "prettier": "^3.3.3", "prettier-plugin-solidity": "=1.0.0-dev.22", - "prettier": "^2.3.2", "solhint": "^3.3.2", "sql-formatter": "^13.1.0" } diff --git a/prover/crates/bin/prover_cli/README.md b/prover/crates/bin/prover_cli/README.md index e0dd1697bf6d..af629dedc972 100644 --- a/prover/crates/bin/prover_cli/README.md +++ b/prover/crates/bin/prover_cli/README.md @@ -257,12 +257,12 @@ TODO | | | `-rt, --recursion-tip` | 🏗️ | | | | `-s, --scheduler` | 🏗️ | | | | `-c, --compressor` | 🏗️ | -| | | `-f, --failed` | 🏗 | +| | | `-f, --failed` | 🏗 | | `delete` | | `-n ` | ✅️️ | | | | `-a, --all` | ️️✅️️️️️️ | | `requeue` | | `—b, --batch ` | ✅️ | | | | `-a, --all` | ✅️️ | -| `config` | | `--db-url ` | 🏗 | +| `config` | | `--db-url ` | 🏗 | | `debug-proof` | | `--file ` | ✅️ | | `file-info` | | `--file-path ` | ✅️ | | `stats` | | `--period ` | ✅️ | diff --git a/yarn.lock b/yarn.lock index 15fb8bb7d967..5df8cb570e0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9131,6 +9131,11 @@ prettier@^3.0.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prettier@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -10191,7 +10196,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10208,15 +10213,6 @@ string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -10283,7 +10279,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -10304,13 +10300,6 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -11161,16 +11150,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From d0078df02529cae841a8d9469a4caae26ecd9697 Mon Sep 17 00:00:00 2001 From: Alex Ostrovski Date: Thu, 5 Dec 2024 09:49:30 +0200 Subject: [PATCH 23/35] =?UTF-8?q?refactor(api):=20Add=20more=20components?= =?UTF-8?q?=20to=20healthcheck=20=E2=80=93=20follow-ups=20(#3337)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Various minor follow-ups after https://github.com/matter-labs/zksync-era/pull/3193: - Rework app-level health details. - Fix `execution_time` unit of measurement for the database health check details. - Rework the database health check: do not hold a DB connection all the time; make it reactive. ## Why ❔ Makes the dependency graph lighter; simplifies maintenance. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- Cargo.lock | 15 +-- Cargo.toml | 1 - core/bin/external_node/Cargo.toml | 1 - .../external_node/src/metrics/framework.rs | 3 - core/lib/bin_metadata/Cargo.toml | 18 --- core/lib/dal/src/system_dal.rs | 8 +- core/lib/health_check/Cargo.toml | 1 - core/lib/health_check/src/binary.rs | 21 ---- core/lib/health_check/src/lib.rs | 19 ++- core/lib/health_check/src/tests.rs | 1 + core/node/node_framework/Cargo.toml | 1 - .../layers/healtcheck_server.rs | 15 ++- .../src/implementations/layers/postgres.rs | 117 +++++++++--------- core/node/shared_metrics/Cargo.toml | 4 +- .../shared_metrics}/build.rs | 0 core/node/shared_metrics/src/lib.rs | 9 +- .../shared_metrics/src/metadata.rs} | 30 +++-- 17 files changed, 111 insertions(+), 153 deletions(-) delete mode 100644 core/lib/bin_metadata/Cargo.toml delete mode 100644 core/lib/health_check/src/binary.rs rename core/{lib/bin_metadata => node/shared_metrics}/build.rs (100%) rename core/{lib/bin_metadata/src/lib.rs => node/shared_metrics/src/metadata.rs} (72%) diff --git a/Cargo.lock b/Cargo.lock index f9e754902f61..bb4399d1ae78 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11157,16 +11157,6 @@ dependencies = [ "zksync_pairing", ] -[[package]] -name = "zksync_bin_metadata" -version = "0.1.0" -dependencies = [ - "rustc_version 0.4.1", - "serde", - "tracing", - "vise", -] - [[package]] name = "zksync_block_reverter" version = "0.1.0" @@ -11848,7 +11838,6 @@ dependencies = [ "zksync_object_store", "zksync_protobuf_config", "zksync_reorg_detector", - "zksync_shared_metrics", "zksync_snapshots_applier", "zksync_state", "zksync_state_keeper", @@ -11938,7 +11927,6 @@ dependencies = [ "tokio", "tracing", "vise", - "zksync_bin_metadata", ] [[package]] @@ -12275,7 +12263,6 @@ dependencies = [ "tracing", "trybuild", "zksync_base_token_adjuster", - "zksync_bin_metadata", "zksync_block_reverter", "zksync_circuit_breaker", "zksync_commitment_generator", @@ -12622,10 +12609,10 @@ dependencies = [ name = "zksync_shared_metrics" version = "0.1.0" dependencies = [ + "rustc_version 0.4.1", "serde", "tracing", "vise", - "zksync_bin_metadata", "zksync_dal", "zksync_types", ] diff --git a/Cargo.toml b/Cargo.toml index 60099874cf39..80a1e4104265 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,7 +79,6 @@ members = [ # Test infrastructure "core/tests/loadnext", "core/tests/vm-benchmark", - "core/lib/bin_metadata", ] resolver = "2" diff --git a/core/bin/external_node/Cargo.toml b/core/bin/external_node/Cargo.toml index a69fdf263794..91bdcefa2ec0 100644 --- a/core/bin/external_node/Cargo.toml +++ b/core/bin/external_node/Cargo.toml @@ -29,7 +29,6 @@ zksync_health_check.workspace = true zksync_web3_decl.workspace = true zksync_types.workspace = true zksync_block_reverter.workspace = true -zksync_shared_metrics.workspace = true zksync_node_genesis.workspace = true zksync_node_fee_model.workspace = true zksync_node_db_pruner.workspace = true diff --git a/core/bin/external_node/src/metrics/framework.rs b/core/bin/external_node/src/metrics/framework.rs index 228af8aa0417..81c9e57d9b9a 100644 --- a/core/bin/external_node/src/metrics/framework.rs +++ b/core/bin/external_node/src/metrics/framework.rs @@ -5,7 +5,6 @@ use zksync_node_framework::{ implementations::resources::pools::{MasterPool, PoolResource}, FromContext, IntoContext, StopReceiver, Task, TaskId, WiringError, WiringLayer, }; -use zksync_shared_metrics::{GIT_METRICS, RUST_METRICS}; use zksync_types::{L1ChainId, L2ChainId, SLChainId}; use super::EN_METRICS; @@ -39,8 +38,6 @@ impl WiringLayer for ExternalNodeMetricsLayer { } async fn wire(self, input: Self::Input) -> Result { - RUST_METRICS.initialize(); - GIT_METRICS.initialize(); EN_METRICS.observe_config( self.l1_chain_id, self.sl_chain_id, diff --git a/core/lib/bin_metadata/Cargo.toml b/core/lib/bin_metadata/Cargo.toml deleted file mode 100644 index e529ecfb49a7..000000000000 --- a/core/lib/bin_metadata/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "zksync_bin_metadata" -version.workspace = true -edition.workspace = true -authors.workspace = true -homepage.workspace = true -repository.workspace = true -license.workspace = true -keywords.workspace = true -categories.workspace = true - -[dependencies] -serde.workspace = true -vise.workspace = true -tracing.workspace = true - -[build-dependencies] -rustc_version.workspace = true diff --git a/core/lib/dal/src/system_dal.rs b/core/lib/dal/src/system_dal.rs index 6f2e64b1c1c5..f4de4faf8eb3 100644 --- a/core/lib/dal/src/system_dal.rs +++ b/core/lib/dal/src/system_dal.rs @@ -1,6 +1,6 @@ use std::{collections::HashMap, time::Duration}; -use chrono::DateTime; +use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use zksync_db_connection::{connection::Connection, error::DalResult, instrument::InstrumentExt}; @@ -14,11 +14,11 @@ pub(crate) struct TableSize { pub total_size: u64, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct DatabaseMigration { pub version: i64, pub description: String, - pub installed_on: DateTime, + pub installed_on: DateTime, pub success: bool, pub checksum: String, pub execution_time: Duration, @@ -118,7 +118,7 @@ impl SystemDal<'_, '_> { installed_on: row.installed_on, success: row.success, checksum: hex::encode(row.checksum), - execution_time: Duration::from_millis(u64::try_from(row.execution_time).unwrap_or(0)), + execution_time: Duration::from_nanos(u64::try_from(row.execution_time).unwrap_or(0)), }) } } diff --git a/core/lib/health_check/Cargo.toml b/core/lib/health_check/Cargo.toml index 0e823c848ce5..6f1d863d8cec 100644 --- a/core/lib/health_check/Cargo.toml +++ b/core/lib/health_check/Cargo.toml @@ -20,7 +20,6 @@ serde_json.workspace = true thiserror.workspace = true tokio = { workspace = true, features = ["sync", "time"] } tracing.workspace = true -zksync_bin_metadata.workspace = true [dev-dependencies] assert_matches.workspace = true diff --git a/core/lib/health_check/src/binary.rs b/core/lib/health_check/src/binary.rs deleted file mode 100644 index b14ed2ed9392..000000000000 --- a/core/lib/health_check/src/binary.rs +++ /dev/null @@ -1,21 +0,0 @@ -use async_trait::async_trait; -use zksync_bin_metadata::BinMetadata; - -use crate::{CheckHealth, Health, HealthStatus}; - -impl From<&BinMetadata> for Health { - fn from(details: &BinMetadata) -> Self { - Self::from(HealthStatus::Ready).with_details(details) - } -} - -#[async_trait] -impl CheckHealth for BinMetadata { - fn name(&self) -> &'static str { - "metadata" - } - - async fn check_health(&self) -> Health { - self.into() - } -} diff --git a/core/lib/health_check/src/lib.rs b/core/lib/health_check/src/lib.rs index 7dcdb47aa2f9..76b1c4d8b0ff 100644 --- a/core/lib/health_check/src/lib.rs +++ b/core/lib/health_check/src/lib.rs @@ -11,12 +11,9 @@ pub use async_trait::async_trait; use futures::future; use serde::Serialize; use tokio::sync::watch; -use zksync_bin_metadata::BIN_METADATA; -use self::metrics::{CheckResult, METRICS}; -use crate::metrics::AppHealthCheckConfig; +use crate::metrics::{AppHealthCheckConfig, CheckResult, METRICS}; -mod binary; mod metrics; #[cfg(test)] @@ -114,6 +111,8 @@ pub struct AppHealthCheck { #[derive(Debug, Clone)] struct AppHealthCheckInner { + /// Application-level health details. + app_details: Option, components: Vec>, slow_time_limit: Duration, hard_time_limit: Duration, @@ -136,6 +135,7 @@ impl AppHealthCheck { let inner = AppHealthCheckInner { components: Vec::default(), + app_details: None, slow_time_limit, hard_time_limit, }; @@ -181,6 +181,13 @@ impl AppHealthCheck { } } + /// Sets app-level health details. They can include build info etc. + pub fn set_details(&self, details: impl Serialize) { + let details = serde_json::to_value(details).expect("failed serializing app details"); + let mut inner = self.inner.lock().expect("`AppHealthCheck` is poisoned"); + inner.app_details = Some(details); + } + /// Inserts health check for a component. /// /// # Errors @@ -220,6 +227,7 @@ impl AppHealthCheck { // Clone `inner` so that we don't hold a lock for them across a wait point. let AppHealthCheckInner { components, + app_details, slow_time_limit, hard_time_limit, } = self @@ -238,7 +246,8 @@ impl AppHealthCheck { .map(|health| health.status) .max_by_key(|status| status.priority_for_aggregation()) .unwrap_or(HealthStatus::Ready); - let inner = Health::with_details(aggregated_status.into(), BIN_METADATA); + let mut inner = Health::from(aggregated_status); + inner.details = app_details.clone(); let health = AppHealth { inner, components }; if !health.inner.status.is_healthy() { diff --git a/core/lib/health_check/src/tests.rs b/core/lib/health_check/src/tests.rs index 14c610e9fd83..76863db05415 100644 --- a/core/lib/health_check/src/tests.rs +++ b/core/lib/health_check/src/tests.rs @@ -82,6 +82,7 @@ async fn aggregating_health_checks() { let (first_check, first_updater) = ReactiveHealthCheck::new("first"); let (second_check, second_updater) = ReactiveHealthCheck::new("second"); let inner = AppHealthCheckInner { + app_details: None, components: vec![Arc::new(first_check), Arc::new(second_check)], slow_time_limit: AppHealthCheck::DEFAULT_SLOW_TIME_LIMIT, hard_time_limit: AppHealthCheck::DEFAULT_HARD_TIME_LIMIT, diff --git a/core/node/node_framework/Cargo.toml b/core/node/node_framework/Cargo.toml index 6334495885f3..eec9b8ef4b7a 100644 --- a/core/node/node_framework/Cargo.toml +++ b/core/node/node_framework/Cargo.toml @@ -41,7 +41,6 @@ zksync_vm_executor.workspace = true zksync_state_keeper.workspace = true zksync_consistency_checker.workspace = true zksync_metadata_calculator.workspace = true -zksync_bin_metadata.workspace = true zksync_node_sync.workspace = true zksync_node_api_server.workspace = true zksync_node_consensus.workspace = true diff --git a/core/node/node_framework/src/implementations/layers/healtcheck_server.rs b/core/node/node_framework/src/implementations/layers/healtcheck_server.rs index 83a74c63cb45..3a4e3ca11569 100644 --- a/core/node/node_framework/src/implementations/layers/healtcheck_server.rs +++ b/core/node/node_framework/src/implementations/layers/healtcheck_server.rs @@ -3,6 +3,8 @@ use std::sync::Arc; use zksync_config::configs::api::HealthCheckConfig; use zksync_health_check::AppHealthCheck; use zksync_node_api_server::healthcheck::HealthCheckHandle; +use zksync_shared_metrics::metadata::{GitMetadata, RustMetadata, GIT_METRICS, RUST_METRICS}; +use zksync_web3_decl::jsonrpsee::core::Serialize; use crate::{ implementations::resources::healthcheck::AppHealthCheckResource, @@ -12,6 +14,13 @@ use crate::{ FromContext, IntoContext, }; +/// Full metadata of the compiled binary. +#[derive(Debug, Serialize)] +pub struct BinMetadata { + pub rust: &'static RustMetadata, + pub git: &'static GitMetadata, +} + /// Wiring layer for health check server /// /// Expects other layers to insert different components' health checks @@ -73,8 +82,12 @@ impl Task for HealthCheckTask { } async fn run(mut self: Box, mut stop_receiver: StopReceiver) -> anyhow::Result<()> { + self.app_health_check.set_details(BinMetadata { + rust: RUST_METRICS.initialize(), + git: GIT_METRICS.initialize(), + }); let handle = - HealthCheckHandle::spawn_server(self.config.bind_addr(), self.app_health_check.clone()); + HealthCheckHandle::spawn_server(self.config.bind_addr(), self.app_health_check); stop_receiver.0.changed().await?; handle.stop().await; diff --git a/core/node/node_framework/src/implementations/layers/postgres.rs b/core/node/node_framework/src/implementations/layers/postgres.rs index 8a81b8709895..bf602f1de631 100644 --- a/core/node/node_framework/src/implementations/layers/postgres.rs +++ b/core/node/node_framework/src/implementations/layers/postgres.rs @@ -1,11 +1,15 @@ -use std::time::Duration; +use std::{ + sync::Arc, + time::{Duration, Instant}, +}; -use serde::{Deserialize, Serialize}; -use tokio::sync::watch; +use async_trait::async_trait; +use serde::Serialize; +use tokio::sync::RwLock; use zksync_dal::{ metrics::PostgresMetrics, system_dal::DatabaseMigration, ConnectionPool, Core, CoreDal, }; -use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; +use zksync_health_check::{CheckHealth, Health, HealthStatus}; use crate::{ implementations::resources::{ @@ -38,8 +42,6 @@ pub struct Input { pub struct Output { #[context(task)] pub metrics_task: PostgresMetricsScrapingTask, - #[context(task)] - pub health_task: DatabaseHealthTask, } #[async_trait::async_trait] @@ -58,16 +60,15 @@ impl WiringLayer for PostgresLayer { }; let app_health = input.app_health.0; - let health_task = DatabaseHealthTask::new(pool); - app_health - .insert_component(health_task.health_check()) + .insert_custom_component(Arc::new(DatabaseHealthCheck { + polling_interval: TASK_EXECUTION_INTERVAL, + pool, + cached: RwLock::default(), + })) .map_err(WiringError::internal)?; - Ok(Output { - metrics_task, - health_task, - }) + Ok(Output { metrics_task }) } } @@ -99,7 +100,7 @@ impl Task for PostgresMetricsScrapingTask { } } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize)] pub struct DatabaseInfo { last_migration: DatabaseMigration, } @@ -111,62 +112,60 @@ impl From for Health { } #[derive(Debug)] -pub struct DatabaseHealthTask { +struct DatabaseHealthCheck { polling_interval: Duration, - connection_pool: ConnectionPool, - updater: HealthUpdater, + pool: ConnectionPool, + cached: RwLock>, } -impl DatabaseHealthTask { - fn new(connection_pool: ConnectionPool) -> Self { - Self { - polling_interval: TASK_EXECUTION_INTERVAL, - connection_pool, - updater: ReactiveHealthCheck::new("database").1, - } +impl DatabaseHealthCheck { + async fn update(&self) -> anyhow::Result { + let mut conn = self.pool.connection_tagged("postgres_healthcheck").await?; + let last_migration = conn.system_dal().get_last_migration().await?; + Ok(DatabaseInfo { last_migration }) } - async fn run(self, mut stop_receiver: watch::Receiver) -> anyhow::Result<()> - where - Self: Sized, - { - let timeout = self.polling_interval; - let mut conn = self - .connection_pool - .connection_tagged("postgres_healthcheck") - .await?; - - tracing::info!("Starting database healthcheck with frequency: {timeout:?}",); - - while !*stop_receiver.borrow_and_update() { - let last_migration = conn.system_dal().get_last_migration().await?; - self.updater.update(DatabaseInfo { last_migration }.into()); - - // Error here corresponds to a timeout w/o `stop_receiver` changed; we're OK with this. - tokio::time::timeout(timeout, stop_receiver.changed()) - .await - .ok(); + fn validate_cache(&self, cache: Option<&(DatabaseInfo, Instant)>) -> Option { + let now = Instant::now(); + if let Some((cached, cached_at)) = cache { + let elapsed = now + .checked_duration_since(*cached_at) + .unwrap_or(Duration::ZERO); + (elapsed <= self.polling_interval).then(|| cached.clone()) + } else { + None } - tracing::info!("Stop signal received; database healthcheck is shut down"); - Ok(()) - } - - pub fn health_check(&self) -> ReactiveHealthCheck { - self.updater.subscribe() } } -#[async_trait::async_trait] -impl Task for DatabaseHealthTask { - fn kind(&self) -> TaskKind { - TaskKind::UnconstrainedTask +#[async_trait] +impl CheckHealth for DatabaseHealthCheck { + fn name(&self) -> &'static str { + "database" } - fn id(&self) -> TaskId { - "database_health".into() - } + // If the DB malfunctions, this method would time out, which would lead to the health check marked as failed. + async fn check_health(&self) -> Health { + let cached = self.cached.read().await.clone(); + if let Some(cache) = self.validate_cache(cached.as_ref()) { + return cache.into(); + } - async fn run(self: Box, stop_receiver: StopReceiver) -> anyhow::Result<()> { - (*self).run(stop_receiver.0).await + let mut cached_lock = self.cached.write().await; + // The cached value may have been updated by another task. + if let Some(cache) = self.validate_cache(cached_lock.as_ref()) { + return cache.into(); + } + + match self.update().await { + Ok(info) => { + *cached_lock = Some((info.clone(), Instant::now())); + info.into() + } + Err(err) => { + tracing::warn!("Error updating database health: {err:#}"); + cached.map_or_else(|| HealthStatus::Affected.into(), |(info, _)| info.into()) + } + } } } diff --git a/core/node/shared_metrics/Cargo.toml b/core/node/shared_metrics/Cargo.toml index 23c669b4f963..618888ffddc0 100644 --- a/core/node/shared_metrics/Cargo.toml +++ b/core/node/shared_metrics/Cargo.toml @@ -16,4 +16,6 @@ vise.workspace = true tracing.workspace = true zksync_types.workspace = true zksync_dal.workspace = true -zksync_bin_metadata.workspace = true + +[build-dependencies] +rustc_version.workspace = true diff --git a/core/lib/bin_metadata/build.rs b/core/node/shared_metrics/build.rs similarity index 100% rename from core/lib/bin_metadata/build.rs rename to core/node/shared_metrics/build.rs diff --git a/core/node/shared_metrics/src/lib.rs b/core/node/shared_metrics/src/lib.rs index e37764c5a6d7..001293a72bc2 100644 --- a/core/node/shared_metrics/src/lib.rs +++ b/core/node/shared_metrics/src/lib.rs @@ -5,10 +5,11 @@ use std::{fmt, time::Duration}; use vise::{ Buckets, Counter, EncodeLabelSet, EncodeLabelValue, Family, Gauge, Histogram, Metrics, Unit, }; -use zksync_bin_metadata::{GitMetrics, RustMetrics}; use zksync_dal::transactions_dal::L2TxSubmissionResult; use zksync_types::aggregated_operations::AggregatedActionType; +pub mod metadata; + #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EncodeLabelValue, EncodeLabelSet)] #[metrics(label = "stage", rename_all = "snake_case")] pub enum SnapshotRecoveryStage { @@ -195,9 +196,3 @@ pub struct ExternalNodeMetrics { #[vise::register] pub static EN_METRICS: vise::Global = vise::Global::new(); - -#[vise::register] -pub static RUST_METRICS: vise::Global = vise::Global::new(); - -#[vise::register] -pub static GIT_METRICS: vise::Global = vise::Global::new(); diff --git a/core/lib/bin_metadata/src/lib.rs b/core/node/shared_metrics/src/metadata.rs similarity index 72% rename from core/lib/bin_metadata/src/lib.rs rename to core/node/shared_metrics/src/metadata.rs index d8a5221e4775..bc7e52ae1e97 100644 --- a/core/lib/bin_metadata/src/lib.rs +++ b/core/node/shared_metrics/src/metadata.rs @@ -3,24 +3,12 @@ use vise::{EncodeLabelSet, Info, Metrics}; use self::values::{GIT_METADATA, RUST_METADATA}; -pub mod values { +mod values { use super::{GitMetadata, RustMetadata}; include!(concat!(env!("OUT_DIR"), "/metadata_values.rs")); } -pub const BIN_METADATA: BinMetadata = BinMetadata { - rust: RUST_METADATA, - git: GIT_METADATA, -}; - -/// Metadata of the compiled binary. -#[derive(Debug, Serialize)] -pub struct BinMetadata { - pub rust: RustMetadata, - pub git: GitMetadata, -} - /// Rust metadata of the compiled binary. #[derive(Debug, EncodeLabelSet, Serialize)] pub struct RustMetadata { @@ -47,22 +35,32 @@ pub struct RustMetrics { } impl RustMetrics { - pub fn initialize(&self) { + pub fn initialize(&self) -> &RustMetadata { tracing::info!("Rust metadata for this binary: {RUST_METADATA:?}"); self.info.set(RUST_METADATA).ok(); + // `unwrap` is safe due to setting the value above + self.info.get().unwrap() } } #[derive(Debug, Metrics)] -#[metrics(prefix = "git_info")] +#[metrics(prefix = "git")] pub struct GitMetrics { /// General information about the compiled binary. info: Info, } impl GitMetrics { - pub fn initialize(&self) { + pub fn initialize(&self) -> &GitMetadata { tracing::info!("Git metadata for this binary: {GIT_METADATA:?}"); self.info.set(GIT_METADATA).ok(); + // `unwrap` is safe due to setting the value above + self.info.get().unwrap() } } + +#[vise::register] +pub static RUST_METRICS: vise::Global = vise::Global::new(); + +#[vise::register] +pub static GIT_METRICS: vise::Global = vise::Global::new(); From 7ace594fb3140212bd94ffd6bffcac99805cf4b1 Mon Sep 17 00:00:00 2001 From: Daniyar Itegulov Date: Fri, 6 Dec 2024 01:30:55 +1100 Subject: [PATCH 24/35] fix(api): batch fee input scaling for `debug_traceCall` (#3344) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Changes the `debug_traceCall` handler to use gas price factor instead of plain gas factor. Additionally removes entrypoints into `get_batch_fee_input_scaled` with default scaling factor (1.0) ## Why ❔ Previously, `debug_traceCall` was using incorrect gas scaling factor ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- core/lib/config/src/configs/api.rs | 2 +- core/node/api_server/src/tx_sender/mod.rs | 2 +- .../api_server/src/tx_sender/tests/send_tx.rs | 23 ++++++++----------- .../api_server/src/web3/namespaces/debug.rs | 7 +----- 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/core/lib/config/src/configs/api.rs b/core/lib/config/src/configs/api.rs index ce0d96129584..1321f25e7604 100644 --- a/core/lib/config/src/configs/api.rs +++ b/core/lib/config/src/configs/api.rs @@ -243,7 +243,7 @@ impl Web3JsonRpcConfig { pubsub_polling_interval: Some(200), max_nonce_ahead: 50, gas_price_scale_factor: 1.2, - estimate_gas_scale_factor: 1.2, + estimate_gas_scale_factor: 1.5, estimate_gas_acceptable_overestimation: 1000, estimate_gas_optimize_search: false, max_tx_size: 1000000, diff --git a/core/node/api_server/src/tx_sender/mod.rs b/core/node/api_server/src/tx_sender/mod.rs index 76cfb83aec54..4c98fc7c455c 100644 --- a/core/node/api_server/src/tx_sender/mod.rs +++ b/core/node/api_server/src/tx_sender/mod.rs @@ -588,7 +588,7 @@ impl TxSender { } // For now, both L1 gas price and pubdata price are scaled with the same coefficient - async fn scaled_batch_fee_input(&self) -> anyhow::Result { + pub(crate) async fn scaled_batch_fee_input(&self) -> anyhow::Result { self.0 .batch_fee_input_provider .get_batch_fee_input_scaled( diff --git a/core/node/api_server/src/tx_sender/tests/send_tx.rs b/core/node/api_server/src/tx_sender/tests/send_tx.rs index c861f04a832e..c0b02e45ad89 100644 --- a/core/node/api_server/src/tx_sender/tests/send_tx.rs +++ b/core/node/api_server/src/tx_sender/tests/send_tx.rs @@ -6,7 +6,7 @@ use assert_matches::assert_matches; use chrono::NaiveDateTime; use test_casing::test_casing; use zksync_multivm::interface::{tracer::ValidationTraces, ExecutionResult}; -use zksync_node_fee_model::MockBatchFeeParamsProvider; +use zksync_node_fee_model::{BatchFeeModelInputProvider, MockBatchFeeParamsProvider}; use zksync_node_test_utils::create_l2_transaction; use zksync_types::K256PrivateKey; @@ -22,10 +22,9 @@ async fn submitting_tx_requires_one_connection() { .unwrap(); let l2_chain_id = L2ChainId::default(); - let fee_input = MockBatchFeeParamsProvider::default() - .get_batch_fee_input_scaled(1.0, 1.0) - .await - .unwrap(); + let fee_params_provider: &dyn BatchFeeModelInputProvider = + &MockBatchFeeParamsProvider::default(); + let fee_input = fee_params_provider.get_batch_fee_input().await.unwrap(); let (base_fee, gas_per_pubdata) = derive_base_fee_and_gas_per_pubdata(fee_input, ProtocolVersionId::latest().into()); let tx = create_l2_transaction(base_fee, gas_per_pubdata); @@ -130,10 +129,9 @@ async fn fee_validation_errors() { let l2_chain_id = L2ChainId::default(); let tx_executor = SandboxExecutor::mock(MockOneshotExecutor::default()).await; let (tx_sender, _) = create_test_tx_sender(pool.clone(), l2_chain_id, tx_executor).await; - let fee_input = MockBatchFeeParamsProvider::default() - .get_batch_fee_input_scaled(1.0, 1.0) - .await - .unwrap(); + let fee_params_provider: &dyn BatchFeeModelInputProvider = + &MockBatchFeeParamsProvider::default(); + let fee_input = fee_params_provider.get_batch_fee_input().await.unwrap(); let (base_fee, gas_per_pubdata) = derive_base_fee_and_gas_per_pubdata(fee_input, ProtocolVersionId::latest().into()); let tx = create_l2_transaction(base_fee, gas_per_pubdata); @@ -322,10 +320,9 @@ async fn submit_tx_with_validation_traces(actual_range: Range, expected_ran .unwrap(); let l2_chain_id = L2ChainId::default(); - let fee_input = MockBatchFeeParamsProvider::default() - .get_batch_fee_input_scaled(1.0, 1.0) - .await - .unwrap(); + let fee_params_provider: &dyn BatchFeeModelInputProvider = + &MockBatchFeeParamsProvider::default(); + let fee_input = fee_params_provider.get_batch_fee_input().await.unwrap(); let (base_fee, gas_per_pubdata) = derive_base_fee_and_gas_per_pubdata(fee_input, ProtocolVersionId::latest().into()); let tx = create_l2_transaction(base_fee, gas_per_pubdata); diff --git a/core/node/api_server/src/web3/namespaces/debug.rs b/core/node/api_server/src/web3/namespaces/debug.rs index 4fd32c1b5223..d96c1e659541 100644 --- a/core/node/api_server/src/web3/namespaces/debug.rs +++ b/core/node/api_server/src/web3/namespaces/debug.rs @@ -244,12 +244,7 @@ impl DebugNamespace { // It is important to drop a DB connection before calling the provider, since it acquires a connection internally // on the main node. drop(connection); - let scale_factor = self.state.api_config.estimate_gas_scale_factor; - let fee_input_provider = &self.state.tx_sender.0.batch_fee_input_provider; - // For now, the same scaling is used for both the L1 gas price and the pubdata price - fee_input_provider - .get_batch_fee_input_scaled(scale_factor, scale_factor) - .await? + self.state.tx_sender.scaled_batch_fee_input().await? } else { let fee_input = block_args.historical_fee_input(&mut connection).await?; drop(connection); From f6422cd59dab2c105bb7c125c172f2621fe39464 Mon Sep 17 00:00:00 2001 From: perekopskiy <53865202+perekopskiy@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:05:55 +0200 Subject: [PATCH 25/35] feat(state-keeper): mempool io opens batch if there is protocol upgrade tx (#3360) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Mempool io opens batch if there is protocol upgrade tx ## Why ❔ Currently if mempool is empty but there is protocol upgrade tx, then batch is not opened ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- Cargo.lock | 10 ++--- core/node/state_keeper/src/io/mempool.rs | 18 +++++++- core/node/state_keeper/src/io/tests/mod.rs | 48 ++++++++++++++++++++++ 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb4399d1ae78..6e8b76c964c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,7 +126,7 @@ dependencies = [ "derive_more 1.0.0", "foldhash", "getrandom", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "hex-literal", "indexmap 2.6.0", "itoa", @@ -3841,9 +3841,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -4352,7 +4352,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "serde", ] @@ -5180,7 +5180,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.0", + "hashbrown 0.15.2", ] [[package]] diff --git a/core/node/state_keeper/src/io/mempool.rs b/core/node/state_keeper/src/io/mempool.rs index 991ecee699c3..cf354891236b 100644 --- a/core/node/state_keeper/src/io/mempool.rs +++ b/core/node/state_keeper/src/io/mempool.rs @@ -206,6 +206,21 @@ impl StateKeeperIO for MempoolIO { .protocol_version_id_by_timestamp(timestamp) .await .context("Failed loading protocol version")?; + let previous_protocol_version = storage + .blocks_dal() + .pending_protocol_version() + .await + .context("Failed loading previous protocol version")?; + let batch_with_upgrade_tx = if previous_protocol_version != protocol_version { + storage + .protocol_versions_dal() + .get_protocol_upgrade_tx(protocol_version) + .await + .context("Failed loading protocol upgrade tx")? + .is_some() + } else { + false + }; drop(storage); // We create a new filter each time, since parameters may change and a previously @@ -217,7 +232,8 @@ impl StateKeeperIO for MempoolIO { .await .context("failed creating L2 transaction filter")?; - if !self.mempool.has_next(&self.filter) { + // We do not populate mempool with upgrade tx so it should be checked separately. + if !batch_with_upgrade_tx && !self.mempool.has_next(&self.filter) { tokio::time::sleep(self.delay_interval).await; continue; } diff --git a/core/node/state_keeper/src/io/tests/mod.rs b/core/node/state_keeper/src/io/tests/mod.rs index 15164328b7a0..536efe82804a 100644 --- a/core/node/state_keeper/src/io/tests/mod.rs +++ b/core/node/state_keeper/src/io/tests/mod.rs @@ -18,6 +18,8 @@ use zksync_types::{ commitment::{L1BatchCommitmentMode, PubdataParams}, fee_model::{BatchFeeInput, PubdataIndependentBatchFeeModelInput}, l2::L2Tx, + protocol_upgrade::ProtocolUpgradeTx, + protocol_version::ProtocolSemanticVersion, AccountTreeId, Address, L1BatchNumber, L2BlockNumber, L2ChainId, ProtocolVersion, ProtocolVersionId, StorageKey, TransactionTimeRangeConstraint, H256, U256, }; @@ -848,6 +850,52 @@ async fn test_mempool_with_timestamp_assertion() { ); } +#[tokio::test] +async fn test_batch_params_with_protocol_upgrade_tx() { + let connection_pool = ConnectionPool::::constrained_test_pool(2).await; + let tester = Tester::new(L1BatchCommitmentMode::Rollup); + // Genesis is needed for proper mempool initialization. + tester.genesis(&connection_pool).await; + + let (mut mempool, _) = tester.create_test_mempool_io(connection_pool.clone()).await; + let (cursor, _) = mempool.initialize().await.unwrap(); + + // Check that new batch params are not returned when there is no tx to process. + let new_batch_params = mempool + .wait_for_new_batch_params(&cursor, Duration::from_millis(100)) + .await + .unwrap(); + assert!(new_batch_params.is_none()); + + // Insert protocol version with upgrade tx. + let protocol_upgrade_tx = ProtocolUpgradeTx { + execute: Default::default(), + common_data: Default::default(), + received_timestamp_ms: 0, + }; + let version = ProtocolVersion { + version: ProtocolSemanticVersion { + minor: ProtocolVersionId::next(), + patch: 0.into(), + }, + tx: Some(protocol_upgrade_tx), + ..Default::default() + }; + connection_pool + .connection() + .await + .unwrap() + .protocol_versions_dal() + .save_protocol_version_with_tx(&version) + .await + .unwrap(); + let new_batch_params = mempool + .wait_for_new_batch_params(&cursor, Duration::from_millis(100)) + .await + .unwrap(); + assert!(new_batch_params.is_some()); +} + async fn insert_l2_transaction(storage: &mut Connection<'_, Core>, tx: &L2Tx) { storage .transactions_dal() From 003316e90be7bf5c96fa2bb101d0d0ff557b9618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Fran=C3=A7a?= Date: Wed, 11 Dec 2024 12:32:14 +0000 Subject: [PATCH 26/35] fix: Fixed cargo deny (#3372) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Fixes cargo deny CI fail. --- Cargo.lock | 1471 +++++++++++++++++++++++++++++++--------------------- deny.toml | 4 +- 2 files changed, 875 insertions(+), 600 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e8b76c964c0..060240457d85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,15 +97,15 @@ 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 = "alloy-json-abi" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded610181f3dad5810f6ff12d1a99994cf9b42d2fcb7709029352398a5da5ae6" +checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -115,9 +115,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd58d377699e6cfeab52c4a9d28bdc4ef37e2bd235ff2db525071fe37a2e9af5" +checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" dependencies = [ "alloy-rlp", "bytes", @@ -128,7 +128,7 @@ dependencies = [ "getrandom", "hashbrown 0.15.2", "hex-literal", - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "k256 0.13.4", "keccak-asm", @@ -136,7 +136,7 @@ dependencies = [ "proptest", "rand 0.8.5", "ruint", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "serde", "sha3 0.10.8", "tiny-keccak 2.0.2", @@ -144,9 +144,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f" +checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" dependencies = [ "arrayvec 0.7.6", "bytes", @@ -154,9 +154,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c71028bfbfec210e24106a542aad3def7caf1a70e2c05710e92a98481980d3" +checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" dependencies = [ "serde", "winnow 0.6.20", @@ -194,9 +194,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.17" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -209,9 +209,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" @@ -243,15 +243,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] @@ -340,7 +340,7 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint 0.4.6", "num-traits", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -494,9 +494,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb8f1d480b0ea3783ab015936d2a55c87e219676f0c0b7dec61494043f21857" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" dependencies = [ "futures-core", "memchr", @@ -547,9 +547,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock", "cfg-if", @@ -620,9 +620,9 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -688,9 +688,9 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -705,9 +705,9 @@ version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -748,9 +748,9 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -761,21 +761,20 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-lc-rs" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd82dba44d209fddb11c190e0a94b78651f95299598e472215667417a03ff1d" +checksum = "f47bb8cc16b669d267eeccf585aea077d0882f4777b1c1f740217885d6e6e5a3" dependencies = [ "aws-lc-sys", - "mirai-annotations", "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.22.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7a4168111d7eb622a31b214057b8509c0a7e1794f44c546d742330dc793972" +checksum = "a2101df3813227bbaaaa0b04cd61c534c7954b22bd68d399b440be937dc63ff7" dependencies = [ "bindgen 0.69.5", "cc", @@ -816,18 +815,18 @@ dependencies = [ [[package]] name = "axum" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core 0.4.5", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "itoa", "matchit", @@ -841,7 +840,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", "tower 0.5.1", "tower-layer", @@ -875,13 +874,13 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -990,9 +989,9 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f850665a0385e070b64c38d2354e6c104c8479c59868d1e48a0c13ee2c7a1c1" +checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" dependencies = [ "autocfg", "libm", @@ -1023,12 +1022,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1045,12 +1044,12 @@ dependencies = [ "lazycell", "log", "prettyplease", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.85", + "syn 2.0.90", "which", ] @@ -1237,7 +1236,7 @@ name = "block_reverter" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "serde_json", "tokio", "zksync_block_reverter", @@ -1273,7 +1272,7 @@ dependencies = [ "cid", "dashmap 6.1.0", "multihash", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1321,9 +1320,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive", "cfg_aliases", @@ -1331,16 +1330,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", - "syn_derive", + "syn 2.0.90", ] [[package]] @@ -1393,7 +1391,7 @@ version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -1412,9 +1410,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[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", ] @@ -1447,9 +1445,9 @@ dependencies = [ [[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", ] @@ -1475,9 +1473,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.31" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d" dependencies = [ "jobserver", "libc", @@ -1570,7 +1568,7 @@ dependencies = [ "serde", "serde_repr", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -1627,9 +1625,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1846,9 +1844,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -1856,13 +1854,13 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.2", + "clap_lex 0.7.4", "strsim 0.11.1", "terminal_size", ] @@ -1874,9 +1872,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1890,15 +1888,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.51" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" dependencies = [ "cc", ] @@ -1966,9 +1964,9 @@ dependencies = [ [[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", @@ -1985,20 +1983,20 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "unicode-xid 0.2.6", ] @@ -2040,6 +2038,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -2057,9 +2065,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", ] @@ -2233,12 +2241,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2282,9 +2290,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2338,7 +2346,7 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.10.0", "syn 1.0.109", @@ -2352,7 +2360,7 @@ checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.10.0", "syn 1.0.109", @@ -2366,10 +2374,10 @@ checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2402,7 +2410,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2505,20 +2513,20 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] [[package]] name = "derive_arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2528,10 +2536,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "rustc_version 0.4.1", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2549,9 +2557,9 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "unicode-xid 0.2.6", ] @@ -2630,9 +2638,9 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2833,9 +2841,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2876,12 +2884,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[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]] @@ -2917,7 +2925,7 @@ dependencies = [ "serde", "serde_json", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "uint", ] @@ -2977,9 +2985,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", @@ -2997,9 +3005,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fastrlp" @@ -3076,9 +3084,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", @@ -3173,7 +3181,7 @@ dependencies = [ "svm-rs", "svm-rs-builds", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "walkdir", @@ -3207,7 +3215,7 @@ dependencies = [ "serde", "serde_json", "serde_repr", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "walkdir", @@ -3243,7 +3251,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", "walkdir", "yansi", @@ -3266,7 +3274,7 @@ dependencies = [ "serde_json", "svm-rs", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "walkdir", ] @@ -3443,9 +3451,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ "fastrand", "futures-core", @@ -3460,9 +3468,9 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3522,7 +3530,7 @@ name = "genesis_generator" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "futures 0.3.31", "serde", "serde_json", @@ -3600,7 +3608,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -3658,7 +3666,7 @@ dependencies = [ "reqwest 0.12.9", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -3672,7 +3680,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f945a208886a13d07636f38fb978da371d0abc3e34bad338124b9f8c135a8f" dependencies = [ "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -3702,7 +3710,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -3769,7 +3777,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -3778,17 +3786,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", "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", @@ -3995,9 +4003,9 @@ dependencies = [ [[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", "fnv", @@ -4022,7 +4030,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -4033,7 +4041,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] @@ -4110,15 +4118,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", "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", "httpdate", @@ -4152,15 +4160,15 @@ 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", "log", - "rustls 0.23.18", - "rustls-native-certs 0.8.0", + "rustls 0.23.19", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tower-service", "webpki-roots", ] @@ -4179,11 +4187,11 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "pin-project-lite", "tokio", @@ -4211,7 +4219,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "native-tls", "tokio", @@ -4228,9 +4236,9 @@ dependencies = [ "bytes", "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", "socket2", "tokio", @@ -4261,6 +4269,124 @@ 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 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -4269,12 +4395,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "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]] @@ -4320,13 +4457,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 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 1.0.109", + "syn 2.0.90", ] [[package]] @@ -4347,9 +4484,9 @@ 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.2", @@ -4373,9 +4510,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.41.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f72d3e19488cf7d8ea52d2fc0f8754fc933398b337cd3cbdb28aaeb35159ef" +checksum = "7e9ffc4d4892617c50a928c52b2961cb5174b6fc6ebf252b2fac9d21955c48b8" dependencies = [ "console", "lazy_static", @@ -4462,9 +4599,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 = "jni" @@ -4476,7 +4613,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -4497,10 +4634,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -4547,7 +4685,7 @@ dependencies = [ "rustls-native-certs 0.7.3", "rustls-pki-types", "soketto 0.7.1", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-rustls 0.25.0", "tokio-util", @@ -4565,16 +4703,16 @@ dependencies = [ "futures-channel", "futures-util", "gloo-net", - "http 1.1.0", + "http 1.2.0", "jsonrpsee-core 0.23.2", "pin-project", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-pki-types", "rustls-platform-verifier", - "soketto 0.8.0", - "thiserror", + "soketto 0.8.1", + "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-util", "tracing", "url", @@ -4598,7 +4736,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -4616,7 +4754,7 @@ dependencies = [ "bytes", "futures-timer", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "jsonrpsee-types 0.23.2", @@ -4626,7 +4764,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -4646,7 +4784,7 @@ dependencies = [ "jsonrpsee-types 0.21.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.4.13", "tracing", @@ -4662,16 +4800,16 @@ dependencies = [ "async-trait", "base64 0.22.1", "http-body 1.0.1", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-rustls 0.27.3", "hyper-util", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-platform-verifier", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.4.13", "tracing", @@ -4686,9 +4824,9 @@ checksum = "7895f186d5921065d96e16bd795e5ca89ac8356ec423fafc6e3d7cf8ec11aee4" dependencies = [ "heck 0.5.0", "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -4699,10 +4837,10 @@ checksum = "654afab2e92e5d88ebd8a39d6074483f3f2bfdf91c5ac57fe285e7127cdd4f51" dependencies = [ "anyhow", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", @@ -4710,8 +4848,8 @@ dependencies = [ "route-recognizer", "serde", "serde_json", - "soketto 0.8.0", - "thiserror", + "soketto 0.8.1", + "thiserror 1.0.69", "tokio", "tokio-stream", "tokio-util", @@ -4729,7 +4867,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4739,10 +4877,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" dependencies = [ "beef", - "http 1.1.0", + "http 1.2.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4762,7 +4900,7 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" dependencies = [ - "http 1.1.0", + "http 1.2.0", "jsonrpsee-client-transport 0.23.2", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", @@ -4866,7 +5004,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]] @@ -4898,7 +5036,7 @@ checksum = "ee58dbc414bd23885d7da915e0457618b36d1fc950a6169ef2cb29829d1b1a1d" dependencies = [ "bytes", "lazy_static", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4909,15 +5047,15 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.161" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -4931,16 +5069,16 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[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 = [ "bs58", "hkdf", "multihash", "quick-protobuf", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -5052,6 +5190,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "loadnext" version = "0.1.0" @@ -5069,7 +5213,7 @@ dependencies = [ "serde", "serde_json", "static_assertions", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -5120,11 +5264,11 @@ dependencies = [ [[package]] name = "logos" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6b6e02facda28ca5fb8dbe4b152496ba3b1bd5a4b40bb2b1b2d8ad74e0f39b" +checksum = "7251356ef8cb7aec833ddf598c6cb24d17b689d20b993f9d11a3d764e34e6458" dependencies = [ - "logos-derive 0.14.2", + "logos-derive 0.14.4", ] [[package]] @@ -5135,25 +5279,25 @@ checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" dependencies = [ "beef", "fnv", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex-syntax 0.6.29", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "logos-codegen" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32eb6b5f26efacd015b000bfc562186472cd9b34bdba3f6b264e2a052676d10" +checksum = "59f80069600c0d66734f5ff52cc42f2dabd6b29d205f333d61fd7832e9e9963f" dependencies = [ "beef", "fnv", "lazy_static", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex-syntax 0.8.5", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5167,11 +5311,11 @@ dependencies = [ [[package]] name = "logos-derive" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5d0c5463c911ef55624739fc353238b4e310f0144be1f875dc42fec6bfd5ec" +checksum = "24fb722b06a9dc12adb0963ed585f19fc61dc5413e6a9be9422ef92c091e731d" dependencies = [ - "logos-codegen 0.14.2", + "logos-codegen 0.14.4", ] [[package]] @@ -5244,7 +5388,7 @@ name = "merkle_tree_consistency_checker" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "tracing", "zksync_config", "zksync_env_config", @@ -5274,19 +5418,19 @@ checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" dependencies = [ "miette-derive 5.10.0", "once_cell", - "thiserror", + "thiserror 1.0.69", "unicode-width", ] [[package]] name = "miette" -version = "7.2.0" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1" +checksum = "317f146e2eb7021892722af37cf1b971f0a70c8406f487e24952667616192c64" dependencies = [ "cfg-if", - "miette-derive 7.2.0", - "thiserror", + "miette-derive 7.4.0", + "thiserror 1.0.69", "unicode-width", ] @@ -5296,20 +5440,20 @@ version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "miette-derive" -version = "7.2.0" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" +checksum = "23c9b935fbe1d6cbd1dac857b54a688145e2d93f48db36010514d0f612d0ad67" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5360,22 +5504,15 @@ 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", ] -[[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - [[package]] name = "multer" version = "3.1.0" @@ -5385,7 +5522,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http 1.1.0", + "http 1.2.0", "httparse", "memchr", "mime", @@ -5425,9 +5562,9 @@ dependencies = [ [[package]] name = "multihash" -version = "0.19.2" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc41f430805af9d1cf4adae4ed2149c759b877b01d909a1f40256188d09345d2" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ "core2", "unsigned-varint", @@ -5451,7 +5588,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -5616,7 +5753,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -5708,9 +5845,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5720,9 +5857,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5750,12 +5887,12 @@ dependencies = [ "futures 0.3.31", "futures-core", "futures-util", - "http 1.1.0", + "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-timeout 0.5.1", + "hyper-timeout 0.5.2", "hyper-util", "jsonwebtoken", "once_cell", @@ -5769,7 +5906,7 @@ dependencies = [ "snafu", "tokio", "tower 0.5.1", - "tower-http 0.6.1", + "tower-http 0.6.2", "tracing", "url", ] @@ -5813,9 +5950,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5847,7 +5984,7 @@ dependencies = [ "js-sys", "once_cell", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5870,7 +6007,7 @@ checksum = "ad31e9de44ee3538fb9d64fe3376c1362f406162434609e79aea2a41a0af78ab" dependencies = [ "async-trait", "bytes", - "http 1.1.0", + "http 1.2.0", "opentelemetry", "reqwest 0.12.9", ] @@ -5883,14 +6020,14 @@ checksum = "6b925a602ffb916fb7421276b86756027b37ee708f9dce2dbdcc51739f07e727" dependencies = [ "async-trait", "futures-core", - "http 1.1.0", + "http 1.2.0", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.13.3", + "prost 0.13.4", "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.69", "tokio", "tonic 0.12.3", ] @@ -5903,7 +6040,7 @@ checksum = "30ee9f20bff9c984511a02f082dc8ede839e4a9bf15cc2487c8d6fea5ad850d9" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.13.3", + "prost 0.13.4", "tonic 0.12.3", ] @@ -5929,7 +6066,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] @@ -5951,9 +6088,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "e5ca711d8b83edbb00b44d504503cd247c9c0bd8b0fa2694f2a1a3d8165379ce" dependencies = [ "log", "serde", @@ -6005,7 +6142,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -6130,20 +6267,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.6", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ "pest", "pest_generator", @@ -6151,22 +6288,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "pest_meta" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ "once_cell", "pest", @@ -6180,7 +6317,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -6211,9 +6348,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6255,9 +6392,9 @@ version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6350,9 +6487,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", @@ -6423,8 +6560,8 @@ version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ - "proc-macro2 1.0.89", - "syn 2.0.85", + "proc-macro2 1.0.92", + "syn 2.0.90", ] [[package]] @@ -6476,7 +6613,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", "version_check", @@ -6488,7 +6625,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "version_check", ] @@ -6510,9 +6647,9 @@ dependencies = [ [[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", ] @@ -6535,9 +6672,9 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6572,12 +6709,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", - "prost-derive 0.13.3", + "prost-derive 0.13.4", ] [[package]] @@ -6597,7 +6734,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.85", + "syn 2.0.90", "tempfile", ] @@ -6609,22 +6746,22 @@ checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools 0.13.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6649,8 +6786,8 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f5eec97d5d34bdd17ad2db2219aabf46b054c6c41bd5529767c9ce55be5898f" dependencies = [ - "logos 0.14.2", - "miette 7.2.0", + "logos 0.14.4", + "miette 7.4.0", "once_cell", "prost 0.12.6", "prost-types", @@ -6677,7 +6814,7 @@ dependencies = [ "prost-reflect 0.12.0", "prost-types", "protox-parse 0.5.0", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6687,12 +6824,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac532509cee918d40f38c3e12f8ef9230f215f017d54de7dd975015538a42ce7" dependencies = [ "bytes", - "miette 7.2.0", + "miette 7.4.0", "prost 0.12.6", "prost-reflect 0.13.1", "prost-types", "protox-parse 0.6.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6704,7 +6841,7 @@ dependencies = [ "logos 0.13.0", "miette 5.10.0", "prost-types", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6713,10 +6850,10 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6c33f43516fe397e2f930779d720ca12cd057f7da4cd6326a0ef78d69dee96" dependencies = [ - "logos 0.14.2", - "miette 7.2.0", + "logos 0.14.4", + "miette 7.4.0", "prost-types", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6734,7 +6871,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -6789,45 +6926,49 @@ dependencies = [ [[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", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", - "rustls 0.23.18", + "rustc-hash 2.1.0", + "rustls 0.23.19", "socket2", - "thiserror", + "thiserror 2.0.6", "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", + "getrandom", "rand 0.8.5", "ring", - "rustc-hash 2.0.0", - "rustls 0.23.18", + "rustc-hash 2.1.0", + "rustls 0.23.19", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.6", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +checksum = "52cd4b1eff68bf27940dd39811292c49e007f4d0b4c357358dc9b0197be6b527" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", @@ -6850,7 +6991,7 @@ version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", ] [[package]] @@ -6991,7 +7132,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7002,7 +7143,7 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -7017,9 +7158,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", @@ -7100,11 +7241,11 @@ dependencies = [ "futures-channel", "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 0.6.0", "hyper-util", @@ -7118,18 +7259,18 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.18", - "rustls-native-certs 0.8.0", + "rustls 0.23.19", + "rustls-native-certs 0.8.1", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "system-configuration 0.6.1", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-socks", "tokio-util", "tower-service", @@ -7150,10 +7291,10 @@ checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", - "http 1.1.0", + "http 1.2.0", "reqwest 0.12.9", "serde", - "thiserror", + "thiserror 1.0.69", "tower-service", ] @@ -7251,7 +7392,7 @@ version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -7284,9 +7425,9 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[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", @@ -7362,9 +7503,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[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" dependencies = [ "rand 0.8.5", ] @@ -7395,15 +7536,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.38" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7434,9 +7575,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 = [ "aws-lc-rs", "log", @@ -7457,7 +7598,7 @@ dependencies = [ "openssl-probe", "rustls-pemfile 1.0.4", "schannel", - "security-framework", + "security-framework 2.11.1", ] [[package]] @@ -7470,20 +7611,19 @@ dependencies = [ "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 2.11.1", ] [[package]] name = "rustls-native-certs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.0.1", ] [[package]] @@ -7509,6 +7649,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-platform-verifier" @@ -7516,16 +7659,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" dependencies = [ - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "jni", "log", "once_cell", - "rustls 0.23.18", + "rustls 0.23.19", "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", "rustls-webpki 0.102.8", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "webpki-roots", "winapi", @@ -7637,7 +7780,7 @@ checksum = "d3475108a1b62c7efd1b5c65974f30109a598b2f45f23c9ae030acb9686966db" dependencies = [ "darling 0.14.4", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -7665,16 +7808,16 @@ checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" dependencies = [ "darling 0.14.4", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] [[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 = [ "bitvec", "cfg-if", @@ -7686,14 +7829,14 @@ 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 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -7702,11 +7845,11 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00860983481ac590ac87972062909bef0d6a658013b592ccc0f2feb272feab11" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "scale-info", - "syn 2.0.85", - "thiserror", + "syn 2.0.90", + "thiserror 1.0.69", ] [[package]] @@ -7731,9 +7874,9 @@ dependencies = [ [[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", ] @@ -7851,18 +7994,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "num-bigint 0.4.6", "security-framework-sys", ] +[[package]] +name = "security-framework" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -7873,7 +8029,7 @@ name = "selector_generator" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "ethabi", "glob", "hex", @@ -7902,9 +8058,9 @@ dependencies = [ [[package]] name = "semver-parser" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" dependencies = [ "pest", ] @@ -8017,7 +8173,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "url", "uuid", @@ -8031,9 +8187,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[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", ] @@ -8059,20 +8215,20 @@ 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 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[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", @@ -8106,9 +8262,9 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -8151,7 +8307,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ "darling 0.13.4", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -8162,7 +8318,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "ryu", "serde", @@ -8340,7 +8496,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -8523,9 +8679,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -8567,9 +8723,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", @@ -8592,14 +8748,14 @@ dependencies = [ [[package]] name = "soketto" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" dependencies = [ "base64 0.22.1", "bytes", "futures 0.3.31", - "http 1.1.0", + "http 1.2.0", "httparse", "log", "rand 0.8.5", @@ -8616,7 +8772,7 @@ dependencies = [ "lalrpop", "lalrpop-util", "phf", - "thiserror", + "thiserror 1.0.69", "unicode-xid 0.2.6", ] @@ -8715,7 +8871,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.6.0", + "indexmap 2.7.0", "ipnetwork", "log", "memchr", @@ -8729,7 +8885,7 @@ dependencies = [ "sha2 0.10.8", "smallvec", "sqlformat", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -8742,11 +8898,11 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "sqlx-core", "sqlx-macros-core", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -8760,7 +8916,7 @@ dependencies = [ "heck 0.5.0", "hex", "once_cell", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "serde", "serde_json", @@ -8769,7 +8925,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.85", + "syn 2.0.90", "tempfile", "tokio", "url", @@ -8815,7 +8971,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -8858,7 +9014,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -8960,7 +9116,7 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -8981,10 +9137,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "rustversion", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9038,7 +9194,7 @@ dependencies = [ "subxt-lightclient", "subxt-macro", "subxt-metadata", - "thiserror", + "thiserror 1.0.69", "tokio-util", "tracing", "url", @@ -9055,13 +9211,13 @@ dependencies = [ "hex", "jsonrpsee 0.21.0", "parity-scale-codec", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.85", - "thiserror", + "syn 2.0.90", + "thiserror 1.0.69", "tokio", ] @@ -9076,7 +9232,7 @@ dependencies = [ "serde", "serde_json", "smoldot-light", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -9094,7 +9250,7 @@ dependencies = [ "quote 1.0.37", "scale-typegen", "subxt-codegen", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9107,7 +9263,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core-hashing", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -9127,7 +9283,7 @@ dependencies = [ "sha2 0.10.8", "sp-core-hashing", "subxt", - "thiserror", + "thiserror 1.0.69", "zeroize", ] @@ -9146,7 +9302,7 @@ dependencies = [ "serde_json", "sha2 0.10.8", "tempfile", - "thiserror", + "thiserror 1.0.69", "url", "zip", ] @@ -9181,34 +9337,22 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.85" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2 1.0.89", - "quote 1.0.37", - "syn 2.0.85", -] - [[package]] name = "sync_wrapper" version = "0.1.2" @@ -9217,13 +9361,24 @@ 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", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -9231,7 +9386,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys 0.5.0", ] @@ -9242,7 +9397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -9300,9 +9455,9 @@ checksum = "42a4d50cdb458045afc8131fd91b64904da29548bcb63c7236e0844936c13078" [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", @@ -9333,9 +9488,9 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" +checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" dependencies = [ "rustix", "windows-sys 0.59.0", @@ -9356,9 +9511,9 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9b53c7124dd88026d5d98a1eb1fd062a578b7d783017c9298825526c7fb6427" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9378,9 +9533,9 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9400,22 +9555,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec2a1820ebd077e2b90c4df007bebf344cd394098a13c563957d0afc83ea47" +dependencies = [ + "thiserror-impl 2.0.6", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] name = "thiserror-impl" -version = "1.0.65" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" +checksum = "d65750cab40f4ff1929fb1ba509e9914eb756131cef4210da8d5d700d26f6312" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9459,9 +9634,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", @@ -9480,9 +9655,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[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", @@ -9506,6 +9681,16 @@ 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 = "tinytemplate" version = "1.2.1" @@ -9533,22 +9718,22 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tls-listener" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a296135fdab7b3a1f708c338c50bab570bcd77d44080cde9341df45c0c6d73" +checksum = "0f1d8809f604e448c7bc53a5a0e4c2a0a20ba44cb1fb407314c8eeccb92127f9" dependencies = [ "futures-util", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", ] [[package]] name = "tokio" -version = "1.41.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -9578,9 +9763,9 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9616,12 +9801,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.18", - "rustls-pki-types", + "rustls 0.23.19", "tokio", ] @@ -9633,15 +9817,15 @@ checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -9651,9 +9835,9 @@ 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", "futures-core", @@ -9690,7 +9874,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -9701,7 +9885,7 @@ 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", @@ -9747,19 +9931,19 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "base64 0.22.1", "bytes", - "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-timeout 0.5.1", + "hyper 1.5.1", + "hyper-timeout 0.5.2", "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.3", + "prost 0.13.4", "socket2", "tokio", "tokio-stream", @@ -9816,7 +10000,7 @@ dependencies = [ "bitflags 2.6.0", "bytes", "futures-core", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -9828,14 +10012,14 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "bitflags 2.6.0", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "iri-string", "pin-project-lite", @@ -9859,9 +10043,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", @@ -9871,20 +10055,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 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "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", @@ -9921,9 +10105,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", @@ -9931,9 +10115,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", @@ -10048,9 +10232,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" @@ -10137,9 +10321,9 @@ 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", "log", @@ -10150,9 +10334,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -10166,6 +10350,18 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[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" @@ -10257,9 +10453,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a511871dc5de990a3b2a0e715facfbc5da848c0c0395597a1415029fb7c250a" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -10329,9 +10525,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -10340,36 +10536,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote 1.0.37", "wasm-bindgen-macro-support", @@ -10377,22 +10573,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" @@ -10449,9 +10645,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -10469,9 +10665,9 @@ dependencies = [ [[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", ] @@ -10744,6 +10940,18 @@ dependencies = [ "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 = "wyz" version = "0.5.1" @@ -10772,9 +10980,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b06cc62d4cec617d3c259537be0fcaa8a5bcf72ddf2983823d9528605f36ed3" dependencies = [ "anes", - "clap 4.5.20", + "clap 4.5.23", "num_cpus", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -10789,6 +10997,30 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -10805,9 +11037,30 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", + "synstructure", ] [[package]] @@ -10825,25 +11078,47 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + +[[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 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "zip" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" +checksum = "99d52293fc86ea7cf13971b3bb81eb21683636e7ae24c729cdaf1b7c4157a352" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.6.0", + "indexmap 2.7.0", "memchr", - "thiserror", + "thiserror 2.0.6", "zopfli", ] @@ -11129,7 +11404,7 @@ dependencies = [ "serde_with", "sha2 0.10.8", "strum", - "thiserror", + "thiserror 1.0.69", "tiny-keccak 2.0.2", "url", ] @@ -11187,7 +11462,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11239,7 +11514,7 @@ dependencies = [ "pin-project", "rand 0.8.5", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -11274,7 +11549,7 @@ dependencies = [ "async-trait", "once_cell", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zksync_concurrency", @@ -11302,7 +11577,7 @@ dependencies = [ "num-traits", "rand 0.8.5", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", "zeroize", ] @@ -11342,7 +11617,7 @@ dependencies = [ "bytesize", "http-body-util", "human-repr", - "hyper 1.5.0", + "hyper 1.5.1", "hyper-util", "im", "once_cell", @@ -11351,10 +11626,10 @@ dependencies = [ "rand 0.8.5", "semver 1.0.23", "snow", - "thiserror", + "thiserror 1.0.69", "tls-listener", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tracing", "vise", "zksync_concurrency", @@ -11379,7 +11654,7 @@ dependencies = [ "prost 0.12.6", "rand 0.8.5", "serde", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_concurrency", "zksync_consensus_crypto", @@ -11398,7 +11673,7 @@ dependencies = [ "async-trait", "prost 0.12.6", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zksync_concurrency", @@ -11416,7 +11691,7 @@ checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" dependencies = [ "anyhow", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "zksync_concurrency", ] @@ -11430,7 +11705,7 @@ dependencies = [ "once_cell", "serde", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "zksync_config", @@ -11450,7 +11725,7 @@ name = "zksync_contract_verification_server" version = "0.1.0" dependencies = [ "anyhow", - "axum 0.7.7", + "axum 0.7.9", "http-body-util", "serde_json", "test-casing", @@ -11469,7 +11744,7 @@ name = "zksync_contract_verifier" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "tokio", "tracing", "zksync_config", @@ -11494,13 +11769,13 @@ dependencies = [ "octocrab", "regex", "reqwest 0.12.9", - "rustls 0.23.18", + "rustls 0.23.19", "semver 1.0.23", "serde", "serde_json", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11553,7 +11828,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "zksync_basic_types", ] @@ -11564,7 +11839,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5939e2df4288c263c706ff18ac718e984149223ad4289d6d957d767dcfc04c81" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -11595,7 +11870,7 @@ dependencies = [ "flate2", "futures 0.3.31", "hex", - "http 1.1.0", + "http 1.2.0", "jsonrpsee 0.23.2", "parity-scale-codec", "pbjson-types", @@ -11654,7 +11929,7 @@ dependencies = [ "serde_json", "sqlx", "strum", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11685,7 +11960,7 @@ dependencies = [ "serde_json", "sqlx", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11715,7 +11990,7 @@ dependencies = [ "pretty_assertions", "rlp", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11738,7 +12013,7 @@ dependencies = [ "serde", "test-casing", "test-log", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11762,7 +12037,7 @@ version = "0.1.0" dependencies = [ "async-trait", "rlp", - "thiserror", + "thiserror 1.0.69", "zksync_basic_types", "zksync_crypto_primitives", ] @@ -11778,7 +12053,7 @@ dependencies = [ "hex", "itertools 0.10.5", "test-log", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11800,7 +12075,7 @@ dependencies = [ "anyhow", "assert_matches", "async-trait", - "clap 4.5.20", + "clap 4.5.23", "envy", "futures 0.3.31", "rustc_version 0.4.1", @@ -11874,9 +12149,9 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "bincode", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -11908,7 +12183,7 @@ dependencies = [ "num-bigint 0.4.6", "num-integer", "num-traits", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "serde", "syn 1.0.109", @@ -11923,7 +12198,7 @@ dependencies = [ "futures 0.3.31", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12006,7 +12281,7 @@ version = "0.1.0" dependencies = [ "anyhow", "assert_matches", - "clap 4.5.20", + "clap 4.5.23", "insta", "leb128", "once_cell", @@ -12017,7 +12292,7 @@ dependencies = [ "serde_with", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "thread_local", "tracing", "tracing-subscriber", @@ -12036,7 +12311,7 @@ dependencies = [ "anyhow", "assert_matches", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "futures 0.3.31", "itertools 0.10.5", "once_cell", @@ -12045,7 +12320,7 @@ dependencies = [ "serde_json", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12091,7 +12366,7 @@ dependencies = [ "pretty_assertions", "rand 0.8.5", "test-casing", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zk_evm 0.131.0-rc.2", @@ -12116,12 +12391,12 @@ dependencies = [ "anyhow", "assert_matches", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "chrono", "futures 0.3.31", "governor", "hex", - "http 1.1.0", + "http 1.2.0", "itertools 0.10.5", "lru", "once_cell", @@ -12131,7 +12406,7 @@ dependencies = [ "serde_json", "strum", "test-casing", - "thiserror", + "thiserror 1.0.69", "thread_local", "tokio", "tower 0.4.13", @@ -12174,7 +12449,7 @@ dependencies = [ "semver 1.0.23", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12258,7 +12533,7 @@ dependencies = [ "pin-project-lite", "semver 1.0.23", "serde", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "trybuild", @@ -12312,9 +12587,9 @@ dependencies = [ name = "zksync_node_framework_derive" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -12323,7 +12598,7 @@ version = "0.1.0" dependencies = [ "anyhow", "itertools 0.10.5", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12373,7 +12648,7 @@ dependencies = [ "serde", "serde_json", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12417,7 +12692,7 @@ dependencies = [ "flate2", "google-cloud-auth", "google-cloud-storage", - "http 1.1.0", + "http 1.2.0", "prost 0.12.6", "rand 0.8.5", "reqwest 0.12.9", @@ -12449,9 +12724,9 @@ name = "zksync_proof_data_handler" version = "0.1.0" dependencies = [ "anyhow", - "axum 0.7.7", + "axum 0.7.9", "chrono", - "hyper 1.5.0", + "hyper 1.5.1", "serde_json", "tokio", "tower 0.4.13", @@ -12498,12 +12773,12 @@ dependencies = [ "anyhow", "heck 0.5.0", "prettyplease", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "prost-build", "prost-reflect 0.12.0", "protox 0.5.1", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -12563,7 +12838,7 @@ dependencies = [ "async-trait", "serde_json", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "zksync_dal", @@ -12580,7 +12855,7 @@ name = "zksync_server" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "futures 0.3.31", "serde_json", "tikv-jemallocator", @@ -12627,7 +12902,7 @@ dependencies = [ "futures 0.3.31", "serde", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12696,7 +12971,7 @@ dependencies = [ "serde", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12752,7 +13027,7 @@ dependencies = [ "reqwest 0.12.9", "secp256k1", "serde", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "url", @@ -12823,7 +13098,7 @@ dependencies = [ "serde_json", "serde_with", "strum", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "zksync_basic_types", @@ -12864,7 +13139,7 @@ dependencies = [ "sentry", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -12924,7 +13199,7 @@ dependencies = [ "pretty_assertions", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_contracts", "zksync_system_constants", @@ -12977,11 +13252,11 @@ dependencies = [ "pin-project-lite", "rand 0.8.5", "rlp", - "rustls 0.23.18", + "rustls 0.23.19", "serde", "serde_json", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", diff --git a/deny.toml b/deny.toml index d72f3823761f..954017750ab2 100644 --- a/deny.toml +++ b/deny.toml @@ -9,7 +9,7 @@ feature-depth = 1 [advisories] ignore = [ "RUSTSEC-2024-0375", # atty dependency being unmaintained, dependency of clap and criterion, we would need to update to newer major of dependencies - "RUSTSEC-2020-0168", # mach dependency being unmaintained, dependency in consensus, we should consider moving to mach2 fork + "RUSTSEC-2020-0168", # mach dependency being unmaintained, dependency in api server, we should consider moving to mach2 fork "RUSTSEC-2024-0370", # `cs_derive` needs to be updated to not rely on `proc-macro-error` # all below caused by StructOpt which we still use and we should move to clap v4 instead "RUSTSEC-2021-0145", @@ -24,7 +24,6 @@ allow = [ "ISC", "Unlicense", "MPL-2.0", - "Unicode-DFS-2016", "CC0-1.0", "BSD-2-Clause", "BSD-3-Clause", @@ -33,6 +32,7 @@ allow = [ "Apache-2.0 WITH LLVM-exception", "0BSD", "BSL-1.0", + "Unicode-3.0" ] confidence-threshold = 0.8 From 51958f62e6fea35e54a0db87b7915a0ce93514c3 Mon Sep 17 00:00:00 2001 From: kelemeno <34402761+kelemeno@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:21:47 +0000 Subject: [PATCH 27/35] docs: interop docs update (#3366) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- docs/src/specs/img/verifyinteropmsg.png | Bin 164358 -> 121433 bytes docs/src/specs/interop/interopmessages.md | 37 ++++++++++------------ docs/src/specs/interop/overview.md | 10 +++--- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/docs/src/specs/img/verifyinteropmsg.png b/docs/src/specs/img/verifyinteropmsg.png index c59e5607f7da44a61131f23d2a6eae26237419a0..031fe811207bc503e5b747dbae0577bae14584ce 100644 GIT binary patch literal 121433 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

-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 literal 164358 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

FMasc%e+n#T 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�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 diff --git a/docs/src/specs/interop/interopmessages.md b/docs/src/specs/interop/interopmessages.md index cabfd0e56750..f32724e0013d 100644 --- a/docs/src/specs/interop/interopmessages.md +++ b/docs/src/specs/interop/interopmessages.md @@ -56,8 +56,9 @@ This `interopHash` serves as a globally unique identifier that can be used on an #### How do I get the proof You’ll notice that **verifyInteropMessage** has a second argument — a proof that you need to provide. This proof is a -Merkle tree proof (more details below). You can obtain it by querying the Settlement Layer (Gateway) or generating it -off-chain by examining the Gateway state on L1. +Merkle tree proof (more details below). You can obtain it by querying the +[chain](https://docs.zksync.io/build/api-reference/zks-rpc#zks_getl2tol1msgproof) , or generate it off-chain - by +looking at the chain's state on L1 #### How does the interop message differ from other layers (InteropTransactions, InteropCalls) @@ -129,49 +130,43 @@ from them at the end of the batch, and sends this tree to the SettlementLayer (G ![sendtol1.png](../img/sendtol1.png) -The Gateway will verify the hashes of the messages to ensure it has received the correct preimages. Once the proof for -the batch is submitted (or more accurately, during the "execute" step), it will add the root of the Merkle tree to its -`globalRoot`. +The settlement layer receives the messages and once the proof for the batch is submitted (or more accurately, during the +"execute" step), it will add the root of the Merkle tree to its `messageRoot` (sometimes called `globalRoot`). ![globalroot.png](../img/globalroot.png) -The `globalRoot` is the root of the Merkle tree that includes all messages from all chains. Each chain regularly reads -the globalRoot value from the Gateway to stay synchronized. +The `messageRoot` is the root of the Merkle tree that includes all messages from all chains. Each chain regularly reads +the messageRoot value from the Gateway to stay synchronized. ![gateway.png](../img/gateway.png) If a user wants to call `verifyInteropMessage` on a chain, they first need to query the Gateway for the Merkle path from -the batch they are interested in up to the `globalRoot`. Once they have this path, they can provide it as an argument +the batch they are interested in up to the `messageRoot`. Once they have this path, they can provide it as an argument when calling a method on the destination chain (such as the `openSignup` method in our example). ![proofmerklepath.png](../img/proofmerklepath.png) -#### What if the Gateway doesn’t respond +#### What if Chain doesn’t provide the proof -If the Gateway doesn’t respond, users can manually re-create the Merkle proof using data available on L1. Every +If the chain doesn’t respond, users can manually re-create the Merkle proof using data available on L1. Every interopMessage is also sent to L1. -#### Global roots change frequently +#### Message roots change frequently -Yes, global roots update continuously as new chains prove their blocks. However, chains retain historical global roots +Yes, message roots update continuously as new chains prove their blocks. However, chains retain historical message roots for a reasonable period (around 24 hours) to ensure that recently generated Merkle paths remain valid. -#### Is this secure? Could a chain operator, like Chain D, use a different global root +#### Is this secure? Could a chain operator, like Chain D, use a different message root -Yes, it’s secure. If a malicious operator on Chain D attempted to use a different global root, they wouldn’t be able to +Yes, it’s secure. If a malicious operator on Chain D attempted to use a different message root, they wouldn’t be able to submit the proof for their new batch to the Gateway. This is because the proof’s public inputs must include the valid -global root. - -#### What if the Gateway is malicious - -If the Gateway behaves maliciously, it wouldn’t be able to submit its batches to L1, as the proof would fail -verification. A separate section will cover interop transaction security in more detail. +message root. ### Other Features #### Dependency Set -- In ElasticChain, this is implicitly handled by the Gateway. Any chain that is part of the global root can exchange +- In ElasticChain, this is implicitly handled by the Gateway. Any chain that is part of the message root can exchange messages with any other chain, effectively forming an undirected graph. #### Timestamps and Expiration diff --git a/docs/src/specs/interop/overview.md b/docs/src/specs/interop/overview.md index 8ca28723e03a..4b6b7417083d 100644 --- a/docs/src/specs/interop/overview.md +++ b/docs/src/specs/interop/overview.md @@ -112,14 +112,14 @@ The step-by-step process and exact details will be covered in the next section. ## Technical Details -### How is Interop Different from a Bridge +### How does native bridging differ from a third party bridging Bridges generally fall into two categories: Native and Third-Party. #### 1. Native Bridges -Native bridges enable asset transfers “up and down” (from L2 to L1 and vice versa). In contrast, interop allows direct -transfers between different L2s. +Native bridges enable asset transfers “up and down” (from L2 to L1 and vice versa), but interop (which is also a form of +native bridging) allows you to move them between different L2s. Instead of doing a "round trip" (L2 → L1 → another L2), interop lets you move assets directly between two L2s, saving both time and cost. @@ -129,8 +129,8 @@ both time and cost. Third-party bridges enable transfers between two L2s, but they rely on their own liquidity. While you, as the user, receive assets on the destination chain instantly, these assets come from the bridge’s liquidity pool. -Bridge operators then rebalance using native bridging, which requires maintaining token reserves on both sides. This -adds costs for the bridge operators, often resulting in higher fees for users. +Bridge operators then rebalance using native bridging, which requires maintaining token reserves on both sides. Without +interop this adds costs for the bridge operators, often resulting in higher fees for users. The good news is that third-party bridges can use interop to improve their token transfers by utilizing the **InteropMessage** layer. From 5d77727cd3ba5f4d84643fee1873f03656310b4d Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Wed, 11 Dec 2024 10:14:56 -0600 Subject: [PATCH 28/35] fix(tracer): adds vm error to flatCallTracer error field if exists (#3374) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ - Updates `flatCallTracer` error to include vm error if it exists ## Why ❔ - MM has requested that if an error exists we should populate within `flatCallTracer` as this is what others do, prior to this PR it was only revert_reason introduced here: https://github.com/matter-labs/zksync-era/pull/3306. However, if we have a vm error the error field is not populated as seen in this tx: `0x6c85bf34666dcdaa885f2bc6e95186029d2b25f2a3bbdff21c36878e2d4a19ed` which failed due to a vm panic. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- .../node/api_server/src/web3/namespaces/debug.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/core/node/api_server/src/web3/namespaces/debug.rs b/core/node/api_server/src/web3/namespaces/debug.rs index d96c1e659541..8e72f5b45991 100644 --- a/core/node/api_server/src/web3/namespaces/debug.rs +++ b/core/node/api_server/src/web3/namespaces/debug.rs @@ -96,16 +96,22 @@ impl DebugNamespace { CallType::NearCall => unreachable!("We have to filter our near calls before"), }; - let (result, error) = if let Some(error) = call.revert_reason { - (None, Some(error)) - } else { - ( + let (result, error) = match (call.revert_reason, call.error) { + (Some(revert_reason), _) => { + // If revert_reason exists, it takes priority over VM error + (None, Some(revert_reason)) + } + (None, Some(vm_error)) => { + // If no revert_reason but VM error exists + (None, Some(vm_error)) + } + (None, None) => ( Some(CallResult { output: web3::Bytes::from(call.output), gas_used: U256::from(call.gas_used), }), None, - ) + ), }; calls.push(DebugCallFlat { From 503956d0962ceffe07c07a22262909fa44ca90e9 Mon Sep 17 00:00:00 2001 From: zksync-era-bot <147085853+zksync-era-bot@users.noreply.github.com> Date: Wed, 11 Dec 2024 21:51:50 +0400 Subject: [PATCH 29/35] chore(main): release core 25.3.0 (#3313) :robot: I have created a release *beep* *boop* --- ## [25.3.0](https://github.com/matter-labs/zksync-era/compare/core-v25.2.0...core-v25.3.0) (2024-12-11) ### Features * change seal criteria for gateway ([#3320](https://github.com/matter-labs/zksync-era/issues/3320)) ([a0a74aa](https://github.com/matter-labs/zksync-era/commit/a0a74aaeb42f076d20c4ae8a32925eff2de11d0c)) * **contract-verifier:** Download compilers from GH automatically ([#3291](https://github.com/matter-labs/zksync-era/issues/3291)) ([a10c4ba](https://github.com/matter-labs/zksync-era/commit/a10c4baa312f26ebac2a10115fb7bd314d18b9c1)) * integrate gateway changes for some components ([#3274](https://github.com/matter-labs/zksync-era/issues/3274)) ([cbc91e3](https://github.com/matter-labs/zksync-era/commit/cbc91e35f84d04f2e4c8e81028596db009e478d1)) * **proof-data-handler:** exclude batches without object file in GCS ([#2980](https://github.com/matter-labs/zksync-era/issues/2980)) ([3e309e0](https://github.com/matter-labs/zksync-era/commit/3e309e06b24649c74bfe120e8ca45247cb2b5628)) * **pruning:** Record L1 batch root hash in pruning logs ([#3266](https://github.com/matter-labs/zksync-era/issues/3266)) ([7b6e590](https://github.com/matter-labs/zksync-era/commit/7b6e59083cf0cafeaef5dd4b2dd39257ff91316d)) * **state-keeper:** mempool io opens batch if there is protocol upgrade tx ([#3360](https://github.com/matter-labs/zksync-era/issues/3360)) ([f6422cd](https://github.com/matter-labs/zksync-era/commit/f6422cd59dab2c105bb7c125c172f2621fe39464)) * **tee:** add error handling for unstable_getTeeProofs API endpoint ([#3321](https://github.com/matter-labs/zksync-era/issues/3321)) ([26f630c](https://github.com/matter-labs/zksync-era/commit/26f630cb75958c711d67d13bc77ddbb1117156c3)) * **zksync_cli:** Health checkpoint improvements ([#3193](https://github.com/matter-labs/zksync-era/issues/3193)) ([440fe8d](https://github.com/matter-labs/zksync-era/commit/440fe8d8afdf0fc2768692a1b40b0910873e2faf)) ### Bug Fixes * **api:** batch fee input scaling for `debug_traceCall` ([#3344](https://github.com/matter-labs/zksync-era/issues/3344)) ([7ace594](https://github.com/matter-labs/zksync-era/commit/7ace594fb3140212bd94ffd6bffcac99805cf4b1)) * **tee:** correct previous fix for race condition in batch locking ([#3358](https://github.com/matter-labs/zksync-era/issues/3358)) ([b12da8d](https://github.com/matter-labs/zksync-era/commit/b12da8d1fddc7870bf17d5e08312d20773815269)) * **tee:** fix race condition in batch locking ([#3342](https://github.com/matter-labs/zksync-era/issues/3342)) ([a7dc0ed](https://github.com/matter-labs/zksync-era/commit/a7dc0ed5007f6b2f789f4c61cb3d137843151860)) * **tracer:** adds vm error to flatCallTracer error field if exists ([#3374](https://github.com/matter-labs/zksync-era/issues/3374)) ([5d77727](https://github.com/matter-labs/zksync-era/commit/5d77727cd3ba5f4d84643fee1873f03656310b4d)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: zksync-era-bot --- .github/release-please/manifest.json | 2 +- Cargo.lock | 2 +- core/CHANGELOG.md | 22 ++++++++++++++++++++++ core/bin/external_node/Cargo.toml | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/release-please/manifest.json b/.github/release-please/manifest.json index c3898055f848..ddf856a98e26 100644 --- a/.github/release-please/manifest.json +++ b/.github/release-please/manifest.json @@ -1,5 +1,5 @@ { - "core": "25.2.0", + "core": "25.3.0", "prover": "17.1.1", "zkstack_cli": "0.1.2" } diff --git a/Cargo.lock b/Cargo.lock index 060240457d85..07218f2310cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12070,7 +12070,7 @@ dependencies = [ [[package]] name = "zksync_external_node" -version = "25.2.0" +version = "25.3.0" dependencies = [ "anyhow", "assert_matches", diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 0ca0a3be025a..acdd2fefb1ab 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [25.3.0](https://github.com/matter-labs/zksync-era/compare/core-v25.2.0...core-v25.3.0) (2024-12-11) + + +### Features + +* change seal criteria for gateway ([#3320](https://github.com/matter-labs/zksync-era/issues/3320)) ([a0a74aa](https://github.com/matter-labs/zksync-era/commit/a0a74aaeb42f076d20c4ae8a32925eff2de11d0c)) +* **contract-verifier:** Download compilers from GH automatically ([#3291](https://github.com/matter-labs/zksync-era/issues/3291)) ([a10c4ba](https://github.com/matter-labs/zksync-era/commit/a10c4baa312f26ebac2a10115fb7bd314d18b9c1)) +* integrate gateway changes for some components ([#3274](https://github.com/matter-labs/zksync-era/issues/3274)) ([cbc91e3](https://github.com/matter-labs/zksync-era/commit/cbc91e35f84d04f2e4c8e81028596db009e478d1)) +* **proof-data-handler:** exclude batches without object file in GCS ([#2980](https://github.com/matter-labs/zksync-era/issues/2980)) ([3e309e0](https://github.com/matter-labs/zksync-era/commit/3e309e06b24649c74bfe120e8ca45247cb2b5628)) +* **pruning:** Record L1 batch root hash in pruning logs ([#3266](https://github.com/matter-labs/zksync-era/issues/3266)) ([7b6e590](https://github.com/matter-labs/zksync-era/commit/7b6e59083cf0cafeaef5dd4b2dd39257ff91316d)) +* **state-keeper:** mempool io opens batch if there is protocol upgrade tx ([#3360](https://github.com/matter-labs/zksync-era/issues/3360)) ([f6422cd](https://github.com/matter-labs/zksync-era/commit/f6422cd59dab2c105bb7c125c172f2621fe39464)) +* **tee:** add error handling for unstable_getTeeProofs API endpoint ([#3321](https://github.com/matter-labs/zksync-era/issues/3321)) ([26f630c](https://github.com/matter-labs/zksync-era/commit/26f630cb75958c711d67d13bc77ddbb1117156c3)) +* **zksync_cli:** Health checkpoint improvements ([#3193](https://github.com/matter-labs/zksync-era/issues/3193)) ([440fe8d](https://github.com/matter-labs/zksync-era/commit/440fe8d8afdf0fc2768692a1b40b0910873e2faf)) + + +### Bug Fixes + +* **api:** batch fee input scaling for `debug_traceCall` ([#3344](https://github.com/matter-labs/zksync-era/issues/3344)) ([7ace594](https://github.com/matter-labs/zksync-era/commit/7ace594fb3140212bd94ffd6bffcac99805cf4b1)) +* **tee:** correct previous fix for race condition in batch locking ([#3358](https://github.com/matter-labs/zksync-era/issues/3358)) ([b12da8d](https://github.com/matter-labs/zksync-era/commit/b12da8d1fddc7870bf17d5e08312d20773815269)) +* **tee:** fix race condition in batch locking ([#3342](https://github.com/matter-labs/zksync-era/issues/3342)) ([a7dc0ed](https://github.com/matter-labs/zksync-era/commit/a7dc0ed5007f6b2f789f4c61cb3d137843151860)) +* **tracer:** adds vm error to flatCallTracer error field if exists ([#3374](https://github.com/matter-labs/zksync-era/issues/3374)) ([5d77727](https://github.com/matter-labs/zksync-era/commit/5d77727cd3ba5f4d84643fee1873f03656310b4d)) + ## [25.2.0](https://github.com/matter-labs/zksync-era/compare/core-v25.1.0...core-v25.2.0) (2024-11-19) diff --git a/core/bin/external_node/Cargo.toml b/core/bin/external_node/Cargo.toml index 91bdcefa2ec0..f56af827bc45 100644 --- a/core/bin/external_node/Cargo.toml +++ b/core/bin/external_node/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "zksync_external_node" description = "Non-validator ZKsync node" -version = "25.2.0" # x-release-please-version +version = "25.3.0" # x-release-please-version edition.workspace = true authors.workspace = true homepage.workspace = true From 9a10dcf764e25c4e60b7ae5ddfa728c9cf576248 Mon Sep 17 00:00:00 2001 From: Igor Aleksanov Date: Thu, 12 Dec 2024 12:24:02 +0400 Subject: [PATCH 30/35] fix(contract-verifier): Fix version extraction in gh resolver (#3378) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ GH resolver wasn't adding `v` for zksolc/zkvyper, while our API expects it. --- core/lib/contract_verifier/src/resolver/github/gh_api.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/lib/contract_verifier/src/resolver/github/gh_api.rs b/core/lib/contract_verifier/src/resolver/github/gh_api.rs index 8c9ac6723249..e19bae72b477 100644 --- a/core/lib/contract_verifier/src/resolver/github/gh_api.rs +++ b/core/lib/contract_verifier/src/resolver/github/gh_api.rs @@ -86,6 +86,7 @@ impl CompilerGitHubRelease { match self { Self::Solc | Self::Vyper => { // Solidity and Vyper releases are tagged with version numbers in form of `vX.Y.Z`. + // Our API does not require the `v` prefix for solc/vyper, so we strip it. tag_name .strip_prefix('v') .filter(|v| semver::Version::parse(v).is_ok()) @@ -94,6 +95,7 @@ impl CompilerGitHubRelease { Self::ZkVmSolc => { // ZkVmSolc releases are tagged with version numbers in form of `X.Y.Z-A.B.C`, where // `X.Y.Z` is the version of the Solidity compiler, and `A.B.C` is the version of the ZkSync fork. + // `v` prefix is not required. if let Some((main, fork)) = tag_name.split_once('-') { if semver::Version::parse(main).is_ok() && semver::Version::parse(fork).is_ok() { @@ -105,8 +107,9 @@ impl CompilerGitHubRelease { } Self::ZkSolc | Self::ZkVyper => { // zksolc and zkvyper releases are tagged with version numbers in form of `X.Y.Z` (without 'v'). + // Our API expects versions to be prefixed with `v` for zksolc/zkvyper, so we add it. if semver::Version::parse(tag_name).is_ok() { - Some(tag_name.to_string()) + Some(format!("v{tag_name}")) } else { None } From 982144573033b859414b5016f0d51e29a11a6f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Fran=C3=A7a?= Date: Thu, 12 Dec 2024 17:18:56 +0000 Subject: [PATCH 31/35] docs(consensus): Update docs with seed peer list from main node (#3381) --- docs/src/guides/advanced/16_decentralization.md | 12 ++++++++++-- docs/src/guides/external-node/10_decentralization.md | 11 ----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/docs/src/guides/advanced/16_decentralization.md b/docs/src/guides/advanced/16_decentralization.md index 7e1ff9b71cb5..ce7d0e219efb 100644 --- a/docs/src/guides/advanced/16_decentralization.md +++ b/docs/src/guides/advanced/16_decentralization.md @@ -35,6 +35,7 @@ If you are using the recommended file-based configuration then you'll need to ad consensus: server_addr: '0.0.0.0:3054' public_addr: + '???' # Address under which the node is accessible to the other nodes. # It can be a public domain, like `example.com:3054`, in case the main node is accessible from the internet, # or it can be a kubernetes cluster domain, like `server-v2-core..svc.cluster.local:3054` in @@ -46,9 +47,12 @@ consensus: chain_id: ??? # chain id protocol_version: 1 # consensus protocol version validators: - - key: validator:public:??? # public key of the main node (copy this PUBLIC key from the secrets you generated) + - key: validator:public:??? # validator public key of the main node (copy this PUBLIC key from the secrets you generated) weight: 1 leader: validator:public:??? # same as above - main node will be the only validator and the only leader. + seed_peers: + - key: 'node:public:ed25519:...' # node public key of the main node (copy this PUBLIC key from the secrets you generated) + addr: '???' # same as public_addr above ``` And the secrets you generated to your `secrets.yaml` config file: @@ -68,6 +72,7 @@ content: ```yaml server_addr: '0.0.0.0:3054' public_addr: + '???' # Address under which the node is accessible to the other nodes. # It can be a public domain, like `example.com:3054`, in case the main node is accessible from the internet, # or it can be a kubernetes cluster domain, like `server-v2-core..svc.cluster.local:3054` in @@ -79,9 +84,12 @@ genesis_spec: chain_id: ??? # chain id protocol_version: 1 # consensus protocol version validators: - - key: validator:public:??? # public key of the main node (copy this PUBLIC key from the secrets you generated) + - key: validator:public:??? # validator public key of the main node (copy this PUBLIC key from the secrets you generated) weight: 1 leader: validator:public:??? # same as above - main node will be the only validator and the only leader. + seed_peers: + - key: 'node:public:ed25519:...' # node public key of the main node (copy this PUBLIC key from the secrets you generated) + addr: '???' # same as public_addr above ``` And a `consensus_secrets.yaml` file with the with the secrets you generated previously: diff --git a/docs/src/guides/external-node/10_decentralization.md b/docs/src/guides/external-node/10_decentralization.md index f2b1782c2d72..951538e6ab86 100644 --- a/docs/src/guides/external-node/10_decentralization.md +++ b/docs/src/guides/external-node/10_decentralization.md @@ -9,14 +9,6 @@ On the gossipnet, the data integrity will be protected by the BFT (byzantine fau ## Enabling gossipnet on your node -> [!NOTE] -> -> Because the data transmitted over the gossipnet is signed by the main node (and eventually by the consensus quorum), -> the signatures need to be backfilled to the node's local storage the first time you switch from centralized (ZKsync -> API based) synchronization to the decentralized (gossipnet based) synchronization (this is a one-time thing). With the -> current implementation it may take a couple of hours and gets faster the more nodes you add to the -> `gossip_static_outbound` list (see below). We are working to remove this inconvenience. - > [!NOTE] > > The minimal supported server version for this is @@ -65,9 +57,6 @@ for more details): your node from getting DoS`ed by too large network messages. Use the value from the template. - `gossip_dynamic_inbound_limit` - maximal number of unauthenticated concurrent inbound connections that can be established to your node. This is a DDoS protection measure. -- `gossip_static_outbound` - list of trusted peers that your node should always try to connect to. The template contains - the nodes maintained by Matterlabs, but you can add more if you know any. Note that the list contains both the network - address AND the public key of the node - this prevents spoofing attacks. ### Setting environment variables From ee117a81e7708eece5639921e32b6683fbcb2280 Mon Sep 17 00:00:00 2001 From: Daniel Lumi <149794418+zk-Lumi@users.noreply.github.com> Date: Thu, 12 Dec 2024 19:11:45 +0100 Subject: [PATCH 32/35] fix: zkstack readme update broken links and wording (#3375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Hi @Deniallugo @popzxc 👋 Was playing with zkstack cli today. This PR is just fixing a couple of broken links and updating a bit of wording in `zkstack_cli/README.md`. PS: sidenote, "EVM emulator" is not explained in this readme, and "Enable EVM emulator?" in interactive mode will be confusing to people (they likely wont realize that it is emulating EVM equivalence but not required for most chains + will be more expensive) ## Why ❔ Possibly a bit OCD, ie "Zk" being wrongly cased in one instance stayed in my mind and bothered me hahahah 😉 ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- zkstack_cli/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/zkstack_cli/README.md b/zkstack_cli/README.md index e81165088218..86d42bcbc906 100644 --- a/zkstack_cli/README.md +++ b/zkstack_cli/README.md @@ -1,11 +1,11 @@ # ZK Stack CLI -Toolkit for creating and managing ZK Stack chains. `ZK Stack CLI` facilitates the creation and management of ZK Stacks. -Commands are interactive but can also accept arguments via the command line. +Toolkit for creating and managing ZK Stack chains. `ZK Stack CLI` facilitates the creation and management of ZK Stack +ecosystems. Commands are interactive but can also accept arguments via the command line. ### Dependencies -Follow [these instructions](https://github.com/matter-labs/zksync-era/blob/main/docs/guides/setup-dev.md) to set up +Follow [these instructions](https://github.com/matter-labs/zksync-era/blob/main/docs/src/guides/setup-dev.md) to set up dependencies on your machine. Ignore the Environment section for now. ### Installation @@ -48,7 +48,7 @@ Foundry is used for deploying smart contracts. Pass flags for Foundry integratio ### Ecosystem ZK Stack allows you to create a new ecosystem or connect to an existing one. An ecosystem includes components like the -BridgeHub, shared bridges, and state transition managers. +BridgeHub, shared bridges, and state transition managers. Multiple ZK chains can be registered to an ecosystem. [Learn more](https://docs.zksync.io/zk-stack/components/shared-bridges). #### Global Config @@ -140,7 +140,7 @@ zkstack containers --observability #### Create -The first ZK chain is generated upon ecosystem creation. Create additional chains and switch between them: +The first ZK chain is generated upon ecosystem creation. You can also create additional chains and switch between them: ```bash zkstack chain create @@ -148,7 +148,7 @@ zkstack chain create #### Init -Deploy contracts and initialize Zk Chain: +Deploy contracts and initialize ZK chain: ```bash zkstack chain init @@ -184,7 +184,7 @@ Ensure you have installed: - [cmake](https://apt.kitware.com/) - [nvcc (CUDA toolkit)](https://developer.nvidia.com/cuda-downloads) -Refer to the [prover docs](https://github.com/matter-labs/zksync-era/blob/main/prover/docs/02_setup.md) for more +Refer to the [prover docs](https://github.com/matter-labs/zksync-era/blob/main/prover/docs/src/02_setup.md) for more information. #### Running the Prover @@ -313,7 +313,7 @@ needed. ## Dev -The subcommand `zkstack dev` offers tools for developing ZKsync. +The subcommand `zkstack dev` offers tools for developing. ### Database From 3cffdb2d5e144f2e3d8617fa22aacf6cce5998a2 Mon Sep 17 00:00:00 2001 From: Jacob Lindahl Date: Fri, 13 Dec 2024 03:14:21 +0900 Subject: [PATCH 33/35] feat: add support for custom genesis state (#3259) This PR introduces the `custom_genesis_export` tool, designed to export zkSync PostgreSQL database state in a format suitable for initializing a custom genesis state for a new chain. - Exports `initial_writes`, `storage_logs`, and `factory_deps` (excluding system context entries) into a binary file. - Updates the `genesis.yaml` file with: - `genesis_root_hash`, `rollup_last_leaf_index`, and `genesis_commitment` matching the exported data. - Adds `custom_genesis_state_path` pointing to the export file, which is recognised by the server during genesis. - Adds support for initialising from a custom genesis state to the server. --------- Co-authored-by: Ivan Schasny Co-authored-by: Ivan Schasny <31857042+ischasny@users.noreply.github.com> --- Cargo.lock | 19 ++ Cargo.toml | 1 + core/bin/custom_genesis_export/.gitignore | 1 + core/bin/custom_genesis_export/Cargo.toml | 30 +++ core/bin/custom_genesis_export/README.md | 60 ++++++ core/bin/custom_genesis_export/src/main.rs | 141 ++++++++++++ core/lib/config/src/configs/genesis.rs | 2 + core/lib/config/src/testonly.rs | 1 + ...aa3061382dfe4142c7fc46df1dfebec34ec92.json | 32 +++ ...11c5e74988422abd052a33ff1ec5db41f7d52.json | 26 +++ core/lib/dal/src/custom_genesis_export_dal.rs | 124 +++++++++++ core/lib/dal/src/lib.rs | 15 +- core/lib/env_config/src/genesis.rs | 15 ++ core/lib/protobuf_config/src/genesis.rs | 2 + .../src/proto/config/genesis.proto | 1 + .../node/api_server/src/web3/namespaces/en.rs | 2 + core/node/genesis/Cargo.toml | 1 + core/node/genesis/src/lib.rs | 203 +++++++++++++----- core/node/genesis/src/utils.rs | 37 ++-- .../src/external_node/genesis.rs | 4 + .../src/main_node/genesis.rs | 19 +- core/node/node_sync/src/genesis.rs | 5 +- 22 files changed, 664 insertions(+), 77 deletions(-) create mode 100644 core/bin/custom_genesis_export/.gitignore create mode 100644 core/bin/custom_genesis_export/Cargo.toml create mode 100644 core/bin/custom_genesis_export/README.md create mode 100644 core/bin/custom_genesis_export/src/main.rs create mode 100644 core/lib/dal/.sqlx/query-42f15afb71632bdfab7befb651eaa3061382dfe4142c7fc46df1dfebec34ec92.json create mode 100644 core/lib/dal/.sqlx/query-bd37db29c86a84ed09ed0633e8511c5e74988422abd052a33ff1ec5db41f7d52.json create mode 100644 core/lib/dal/src/custom_genesis_export_dal.rs diff --git a/Cargo.lock b/Cargo.lock index 07218f2310cb..442802faea3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2308,6 +2308,24 @@ dependencies = [ "zeroize", ] +[[package]] +name = "custom_genesis_export" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "clap 4.5.23", + "futures 0.3.31", + "sqlx", + "tokio", + "zksync_contracts", + "zksync_core_leftovers", + "zksync_dal", + "zksync_node_genesis", + "zksync_protobuf_config", + "zksync_types", +] + [[package]] name = "darling" version = "0.13.4" @@ -12597,6 +12615,7 @@ name = "zksync_node_genesis" version = "0.1.0" dependencies = [ "anyhow", + "bincode", "itertools 0.10.5", "thiserror 1.0.69", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 80a1e4104265..074d27d6574d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ members = [ # Binaries "core/bin/block_reverter", "core/bin/contract-verifier", + "core/bin/custom_genesis_export", "core/bin/external_node", "core/bin/merkle_tree_consistency_checker", "core/bin/snapshots_creator", diff --git a/core/bin/custom_genesis_export/.gitignore b/core/bin/custom_genesis_export/.gitignore new file mode 100644 index 000000000000..a8a0dcec4472 --- /dev/null +++ b/core/bin/custom_genesis_export/.gitignore @@ -0,0 +1 @@ +*.bin diff --git a/core/bin/custom_genesis_export/Cargo.toml b/core/bin/custom_genesis_export/Cargo.toml new file mode 100644 index 000000000000..566f0a979297 --- /dev/null +++ b/core/bin/custom_genesis_export/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "custom_genesis_export" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true +keywords.workspace = true +categories.workspace = true + +[dependencies] +clap = { workspace = true, features = ["derive"] } +futures.workspace = true +sqlx = { workspace = true, features = [ + "runtime-tokio", + "tls-native-tls", + "macros", + "postgres", +] } +tokio = { workspace = true, features = ["full"] } + +zksync_types.workspace = true +zksync_node_genesis.workspace = true +zksync_contracts.workspace = true +zksync_core_leftovers.workspace = true +zksync_protobuf_config.workspace = true +zksync_dal.workspace = true +anyhow.workspace = true +bincode.workspace = true diff --git a/core/bin/custom_genesis_export/README.md b/core/bin/custom_genesis_export/README.md new file mode 100644 index 000000000000..e95bcc814f2a --- /dev/null +++ b/core/bin/custom_genesis_export/README.md @@ -0,0 +1,60 @@ +# Custom Genesis Export + +The `custom_genesis_export` tool allows exporting a state from a zkSync PostgreSQL database in a format that can be +included as a custom genesis state for a new chain. + +This is particularly useful in data migration scenarios where a large existing state needs to be applied to a newly +created chain. + +A typical workflow could be: + +- Run a chain locally, not connected to the real L1, and add all required data to it. +- Export the data using the `custom_genesis_export` tool. +- Create a new chain connected to the real ecosystem using the exported data. + +## How it works + +The tool exports all entries from `storage_logs`, and `factory_deps`, except those related to the system context. The +data is then written to a binary file using the Rust standard library following a simple serialisation format. + +`custom_genesis_export` can be built using the following command: + +```shell +cargo build --release -p custom_genesis_export +``` + +And then executed using the following command, where: + +- `database-url` is the URL of the PostgreSQL database. +- `genesis-config-path` is the path to the `genesis.yaml` configuration file, used to set up a new chain (located in the + `file_based` directory). +- `output-path` is the path to the generated binary output file. + +```shell +custom_genesis_export --database-url=postgres://postgres:notsecurepassword@localhost:5432/zksync_server_localhost_validium --genesis-config-path=/Users/ischasny/Dev/zksync-era/etc/env/file_based/genesis.yaml --output-path=export.bin +``` + +> Please make sure that the database is not written into before running data export. + +After the export is completed, the tool will make the following updates to the `genesis.yaml` file in-place: + +- Update `genesis_root_hash`, `rollup_last_leaf_index`, and `genesis_commitment` to match the contents of the export + file. +- Add a `custom_genesis_state_path` property pointing to the data export. + +The modified genesis file can be used to bootstrap an ecosystem or initialize new chains. The data export will be +automatically recognized by the server during the execution of `zkstack ecosystem init ...` and +`zkstack chain create ...` commands. + +### Running considerations + +- All chains within the same ecosystem must be bootstrapped from the same genesis state. This is enforced at the + protocol level. If two chains require different states, this can only be achieved by bringing the chain into the + ecosystem through governance voting. + - If a chain is added to the ecosystem via a vote, ensure no assets are minted on the old bridge, as this would create + discrepancies with the new one. One should set gas prices to zero when generating a state to account for that. +- To calculate genesis parameters, the tool must load all VM logs into RAM. This is due to implementation specifics. For + larger states, ensure the VM has sufficient RAM capacity. +- After the import, block numbers for all VM logs will be reset to zero - if the imported data has been indexed based on + block number, such indexes will break. +- External Nodes will have to be bootstrapped from data snapshot (i.e. genesis can't be generated locally). diff --git a/core/bin/custom_genesis_export/src/main.rs b/core/bin/custom_genesis_export/src/main.rs new file mode 100644 index 000000000000..9db715aad99f --- /dev/null +++ b/core/bin/custom_genesis_export/src/main.rs @@ -0,0 +1,141 @@ +extern crate core; + +use std::{fs, fs::File, io::BufWriter, path::PathBuf, str::FromStr}; + +use clap::Parser; +use zksync_contracts::BaseSystemContractsHashes; +use zksync_core_leftovers::temp_config_store::read_yaml_repr; +use zksync_dal::{custom_genesis_export_dal::GenesisState, ConnectionPool, Core, CoreDal}; +use zksync_node_genesis::{make_genesis_batch_params, utils::get_deduped_log_queries}; +use zksync_protobuf_config::encode_yaml_repr; +use zksync_types::{url::SensitiveUrl, StorageLog}; + +#[derive(Debug, Parser)] +#[command(name = "Custom genesis export tool", author = "Matter Labs")] +struct Args { + /// PostgreSQL connection string for the database to export. + #[arg(short, long)] + database_url: Option, + + /// Output file path. + #[arg(short, long, default_value = "genesis_export.bin")] + output_path: PathBuf, + + /// Path to the genesis.yaml + #[arg(short, long)] + genesis_config_path: PathBuf, +} + +/// The `custom_genesis_export` tool allows exporting storage logs and factory dependencies +/// from the ZKSync PostgreSQL database in a way that they can be used as a custom genesis state for a new chain. +/// +/// Inputs: +/// * `database_url` - URL to the PostgreSQL database. +/// * `output` - Path to the output file. +/// * `genesis_config_path` - Path to the `genesis.yaml` configuration file, which will be used to set up a new chain (located in the `file_based` directory). +/// +/// Given the inputs above, `custom_genesis_export` will perform the following: +/// * Read storage logs, and factory dependencies; filter out those related to the system context, +/// and save the remaining data to the output file. +/// * Calculate the new `genesis_root_hash`, `rollup_last_leaf_index`, and `genesis_commitment`, then update these +/// in-place in the provided `genesis.yaml`. Additionally, the tool will add a `custom_genesis_state_path` property +/// pointing to the genesis export. +/// +/// Note: To calculate the new genesis parameters, the current implementation requires loading all storage logs +/// into RAM. This is necessary due to the specific sorting and filtering that need to be applied. +/// For larger states, keep this in mind and ensure you have a machine with sufficient RAM. +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let args = Args::parse(); + + let mut out = BufWriter::new(File::create(&args.output_path)?); + + println!( + "Export file: {}", + args.output_path.canonicalize()?.display(), + ); + + println!("Connecting to source database..."); + + let db_url = args.database_url.or_else(|| std::env::var("DATABASE_URL").ok()).expect("Specify the database connection string in either a CLI argument or in the DATABASE_URL environment variable."); + // we need only 1 DB connection at most for data export + let connection_pool_builder = + ConnectionPool::::builder(SensitiveUrl::from_str(db_url.as_str())?, 1); + let connection_pool = connection_pool_builder.build().await?; + + let mut storage = connection_pool.connection().await?; + let mut transaction = storage.start_transaction().await?; + + println!("Connected to source database."); + + let storage_logs = transaction + .custom_genesis_export_dal() + .get_storage_logs() + .await?; + let factory_deps = transaction + .custom_genesis_export_dal() + .get_factory_deps() + .await?; + + transaction.commit().await?; + + println!( + "Loaded {} storage logs {} factory deps from source database.", + storage_logs.len(), + factory_deps.len() + ); + + let storage_logs_for_genesis: Vec = + storage_logs.iter().map(StorageLog::from).collect(); + + bincode::serialize_into( + &mut out, + &GenesisState { + storage_logs, + factory_deps, + }, + )?; + + println!( + "Saved genesis state into the file {}.", + args.output_path.display() + ); + println!("Calculating new genesis parameters"); + + let mut genesis_config = read_yaml_repr::( + &args.genesis_config_path, + )?; + + let base_system_contract_hashes = BaseSystemContractsHashes { + bootloader: genesis_config + .bootloader_hash + .ok_or(anyhow::anyhow!("No bootloader_hash specified"))?, + default_aa: genesis_config + .default_aa_hash + .ok_or(anyhow::anyhow!("No default_aa_hash specified"))?, + evm_emulator: genesis_config.evm_emulator_hash, + }; + + let (genesis_batch_params, _) = make_genesis_batch_params( + get_deduped_log_queries(&storage_logs_for_genesis), + base_system_contract_hashes, + genesis_config + .protocol_version + .ok_or(anyhow::anyhow!("No bootloader_hash specified"))? + .minor, + ); + + genesis_config.genesis_root_hash = Some(genesis_batch_params.root_hash); + genesis_config.rollup_last_leaf_index = Some(genesis_batch_params.rollup_last_leaf_index); + genesis_config.genesis_commitment = Some(genesis_batch_params.commitment); + genesis_config.custom_genesis_state_path = + args.output_path.canonicalize()?.to_str().map(String::from); + + let bytes = + encode_yaml_repr::(&genesis_config)?; + fs::write(&args.genesis_config_path, &bytes)?; + + println!("Done."); + + Ok(()) +} diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 9e1ffbd87cb5..5d5e39309bb8 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -32,6 +32,7 @@ pub struct GenesisConfig { pub fee_account: Address, pub dummy_verifier: bool, pub l1_batch_commit_data_generator_mode: L1BatchCommitmentMode, + pub custom_genesis_state_path: Option, } impl GenesisConfig { @@ -60,6 +61,7 @@ impl GenesisConfig { l2_chain_id: L2ChainId::default(), dummy_verifier: false, l1_batch_commit_data_generator_mode: L1BatchCommitmentMode::Rollup, + custom_genesis_state_path: None, } } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 1a3f63d9b278..b026aabc6111 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -746,6 +746,7 @@ impl Distribution for EncodeDist { 0 => L1BatchCommitmentMode::Rollup, _ => L1BatchCommitmentMode::Validium, }, + custom_genesis_state_path: None, } } } diff --git a/core/lib/dal/.sqlx/query-42f15afb71632bdfab7befb651eaa3061382dfe4142c7fc46df1dfebec34ec92.json b/core/lib/dal/.sqlx/query-42f15afb71632bdfab7befb651eaa3061382dfe4142c7fc46df1dfebec34ec92.json new file mode 100644 index 000000000000..aeff27a88300 --- /dev/null +++ b/core/lib/dal/.sqlx/query-42f15afb71632bdfab7befb651eaa3061382dfe4142c7fc46df1dfebec34ec92.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH latest_storage_logs AS (\n SELECT DISTINCT ON (hashed_key)\n hashed_key,\n address,\n key,\n value\n FROM storage_logs\n ORDER BY hashed_key, miniblock_number DESC, operation_number DESC\n )\n \n SELECT\n lsl.address,\n lsl.key,\n lsl.value\n FROM\n initial_writes iw\n JOIN\n latest_storage_logs lsl ON iw.hashed_key = lsl.hashed_key\n WHERE\n lsl.value\n <> '\\x0000000000000000000000000000000000000000000000000000000000000000'::bytea\n AND (\n lsl.address <> '\\x000000000000000000000000000000000000800b'::bytea OR\n lsl.key IN (\n '\\x0000000000000000000000000000000000000000000000000000000000000000'::bytea,\n '\\x0000000000000000000000000000000000000000000000000000000000000003'::bytea,\n '\\x0000000000000000000000000000000000000000000000000000000000000004'::bytea,\n '\\x0000000000000000000000000000000000000000000000000000000000000005'::bytea\n )\n );\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "address", + "type_info": "Bytea" + }, + { + "ordinal": 1, + "name": "key", + "type_info": "Bytea" + }, + { + "ordinal": 2, + "name": "value", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + true, + true, + false + ] + }, + "hash": "42f15afb71632bdfab7befb651eaa3061382dfe4142c7fc46df1dfebec34ec92" +} diff --git a/core/lib/dal/.sqlx/query-bd37db29c86a84ed09ed0633e8511c5e74988422abd052a33ff1ec5db41f7d52.json b/core/lib/dal/.sqlx/query-bd37db29c86a84ed09ed0633e8511c5e74988422abd052a33ff1ec5db41f7d52.json new file mode 100644 index 000000000000..f33238c1f0c8 --- /dev/null +++ b/core/lib/dal/.sqlx/query-bd37db29c86a84ed09ed0633e8511c5e74988422abd052a33ff1ec5db41f7d52.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n bytecode_hash AS \"bytecode_hash!\",\n bytecode AS \"bytecode!\"\n FROM factory_deps\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "bytecode_hash!", + "type_info": "Bytea" + }, + { + "ordinal": 1, + "name": "bytecode!", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false + ] + }, + "hash": "bd37db29c86a84ed09ed0633e8511c5e74988422abd052a33ff1ec5db41f7d52" +} diff --git a/core/lib/dal/src/custom_genesis_export_dal.rs b/core/lib/dal/src/custom_genesis_export_dal.rs new file mode 100644 index 000000000000..da74061fb5a5 --- /dev/null +++ b/core/lib/dal/src/custom_genesis_export_dal.rs @@ -0,0 +1,124 @@ +use serde::{Deserialize, Serialize}; +use zksync_db_connection::{connection::Connection, error::DalResult, instrument::InstrumentExt}; +use zksync_types::{AccountTreeId, StorageKey, StorageLog, H160, H256}; + +use crate::Core; + +#[derive(Debug)] +pub struct CustomGenesisExportDal<'a, 'c> { + pub(crate) storage: &'a mut Connection<'c, Core>, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct GenesisState { + pub storage_logs: Vec, + pub factory_deps: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct StorageLogRow { + pub address: [u8; 20], + pub key: [u8; 32], + pub value: [u8; 32], +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FactoryDepRow { + pub bytecode_hash: [u8; 32], + pub bytecode: Vec, +} + +impl CustomGenesisExportDal<'_, '_> { + pub async fn get_storage_logs(&mut self) -> DalResult> { + // This method returns storage logs that are used for genesis export. + // + // The where clause with addresses filters out SystemContext related records + // 0x0 -- chainId, + // 0x3 -- blockGasLimit, + // 0x4 -- coinbase, + // 0x5 -- difficulty + let rows = sqlx::query!( + r#" + WITH latest_storage_logs AS ( + SELECT DISTINCT ON (hashed_key) + hashed_key, + address, + key, + value + FROM storage_logs + ORDER BY hashed_key, miniblock_number DESC, operation_number DESC + ) + + SELECT + lsl.address, + lsl.key, + lsl.value + FROM + initial_writes iw + JOIN + latest_storage_logs lsl ON iw.hashed_key = lsl.hashed_key + WHERE + lsl.value + <> '\x0000000000000000000000000000000000000000000000000000000000000000'::bytea + AND ( + lsl.address <> '\x000000000000000000000000000000000000800b'::bytea OR + lsl.key IN ( + '\x0000000000000000000000000000000000000000000000000000000000000000'::bytea, + '\x0000000000000000000000000000000000000000000000000000000000000003'::bytea, + '\x0000000000000000000000000000000000000000000000000000000000000004'::bytea, + '\x0000000000000000000000000000000000000000000000000000000000000005'::bytea + ) + ); + "#, + ) + .instrument("get_storage_logs") + .fetch_all(self.storage) + .await?; + + let storage_logs: Vec = rows + .into_iter() + .map(|row| StorageLogRow { + address: row.address.unwrap().try_into().unwrap(), + key: row.key.unwrap().try_into().unwrap(), + value: row.value.try_into().unwrap(), + }) + .collect(); + + Ok(storage_logs) + } + + pub async fn get_factory_deps(&mut self) -> DalResult> { + // 1. Fetch the rows from the database + let rows = sqlx::query!( + r#" + SELECT + bytecode_hash AS "bytecode_hash!", + bytecode AS "bytecode!" + FROM factory_deps + "# + ) + .instrument("get_factory_deps") + .fetch_all(self.storage) + .await?; + + // 2. Map the rows to FactoryDepRow structs + let factory_deps: Vec = rows + .into_iter() + .map(|row| FactoryDepRow { + bytecode_hash: row.bytecode_hash.try_into().unwrap(), + bytecode: row.bytecode, + }) + .collect(); + + Ok(factory_deps) + } +} + +impl From<&StorageLogRow> for StorageLog { + fn from(value: &StorageLogRow) -> Self { + StorageLog::new_write_log( + StorageKey::new(AccountTreeId::new(H160(value.address)), H256(value.key)), + H256(value.value), + ) + } +} diff --git a/core/lib/dal/src/lib.rs b/core/lib/dal/src/lib.rs index 20b428adec44..212ce4b50036 100644 --- a/core/lib/dal/src/lib.rs +++ b/core/lib/dal/src/lib.rs @@ -14,10 +14,10 @@ pub use zksync_db_connection::{ use crate::{ base_token_dal::BaseTokenDal, blocks_dal::BlocksDal, blocks_web3_dal::BlocksWeb3Dal, consensus_dal::ConsensusDal, contract_verification_dal::ContractVerificationDal, - data_availability_dal::DataAvailabilityDal, eth_sender_dal::EthSenderDal, - eth_watcher_dal::EthWatcherDal, events_dal::EventsDal, events_web3_dal::EventsWeb3Dal, - factory_deps_dal::FactoryDepsDal, proof_generation_dal::ProofGenerationDal, - protocol_versions_dal::ProtocolVersionsDal, + custom_genesis_export_dal::CustomGenesisExportDal, data_availability_dal::DataAvailabilityDal, + eth_sender_dal::EthSenderDal, eth_watcher_dal::EthWatcherDal, events_dal::EventsDal, + events_web3_dal::EventsWeb3Dal, factory_deps_dal::FactoryDepsDal, + proof_generation_dal::ProofGenerationDal, protocol_versions_dal::ProtocolVersionsDal, protocol_versions_web3_dal::ProtocolVersionsWeb3Dal, pruning_dal::PruningDal, snapshot_recovery_dal::SnapshotRecoveryDal, snapshots_creator_dal::SnapshotsCreatorDal, snapshots_dal::SnapshotsDal, storage_logs_dal::StorageLogsDal, @@ -33,6 +33,7 @@ pub mod blocks_web3_dal; pub mod consensus; pub mod consensus_dal; pub mod contract_verification_dal; +pub mod custom_genesis_export_dal; mod data_availability_dal; pub mod eth_sender_dal; pub mod eth_watcher_dal; @@ -132,6 +133,8 @@ where fn base_token_dal(&mut self) -> BaseTokenDal<'_, 'a>; fn eth_watcher_dal(&mut self) -> EthWatcherDal<'_, 'a>; + + fn custom_genesis_export_dal(&mut self) -> CustomGenesisExportDal<'_, 'a>; } #[derive(Clone, Debug)] @@ -258,4 +261,8 @@ impl<'a> CoreDal<'a> for Connection<'a, Core> { fn eth_watcher_dal(&mut self) -> EthWatcherDal<'_, 'a> { EthWatcherDal { storage: self } } + + fn custom_genesis_export_dal(&mut self) -> CustomGenesisExportDal<'_, 'a> { + CustomGenesisExportDal { storage: self } + } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 55c79eceb502..db0228d91c13 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -37,6 +37,19 @@ impl FromEnv for ContractsForGenesis { } } +// For initializing genesis file from env it's required to have an additional struct, +// because these data is not present in any other structs +#[derive(Deserialize, Serialize, Debug, Clone)] +struct CustomGenesisState { + pub path: Option, +} + +impl FromEnv for CustomGenesisState { + fn from_env() -> anyhow::Result { + envy_load("custom_genesis_state", "CUSTOM_GENESIS_STATE_") + } +} + impl FromEnv for GenesisConfig { fn from_env() -> anyhow::Result { // Getting genesis from environmental variables is a temporary measure, that will be @@ -44,6 +57,7 @@ impl FromEnv for GenesisConfig { // #PLA-811 let network_config = &NetworkConfig::from_env()?; let contracts_config = &ContractsForGenesis::from_env()?; + let custom_genesis_state_config = CustomGenesisState::from_env()?; let state_keeper = StateKeeperConfig::from_env()?; // This is needed for backward compatibility, so if the new variable `genesis_protocol_semantic_version` @@ -79,6 +93,7 @@ impl FromEnv for GenesisConfig { .context("Fee account required for genesis")?, dummy_verifier: false, l1_batch_commit_data_generator_mode: state_keeper.l1_batch_commit_data_generator_mode, + custom_genesis_state_path: custom_genesis_state_config.path, }) } } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index 7ecc768100fb..469140f7b0c2 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -99,6 +99,7 @@ impl ProtoRepr for proto::Genesis { .and_then(|x| Ok(proto::L1BatchCommitDataGeneratorMode::try_from(*x)?)) .context("l1_batch_commit_data_generator_mode")? .parse(), + custom_genesis_state_path: self.custom_genesis_state_path.clone(), }) } @@ -126,6 +127,7 @@ impl ProtoRepr for proto::Genesis { ) .into(), ), + custom_genesis_state_path: this.custom_genesis_state_path.clone(), } } } diff --git a/core/lib/protobuf_config/src/proto/config/genesis.proto b/core/lib/protobuf_config/src/proto/config/genesis.proto index e3a9a45366f9..2e9ebc82f25e 100644 --- a/core/lib/protobuf_config/src/proto/config/genesis.proto +++ b/core/lib/protobuf_config/src/proto/config/genesis.proto @@ -29,5 +29,6 @@ message Genesis { optional L1BatchCommitDataGeneratorMode l1_batch_commit_data_generator_mode = 29; // optional, default to rollup optional string genesis_protocol_semantic_version = 12; // optional; optional string evm_emulator_hash = 13; // optional; h256 + optional string custom_genesis_state_path = 14; // optional; reserved 11; reserved "shared_bridge"; } diff --git a/core/node/api_server/src/web3/namespaces/en.rs b/core/node/api_server/src/web3/namespaces/en.rs index 56a7e2df458c..f990144a4acd 100644 --- a/core/node/api_server/src/web3/namespaces/en.rs +++ b/core/node/api_server/src/web3/namespaces/en.rs @@ -222,6 +222,8 @@ impl EnNamespace { .state .api_config .l1_batch_commit_data_generator_mode, + // external node should initialise itself from a snapshot + custom_genesis_state_path: None, }; Ok(config) } diff --git a/core/node/genesis/Cargo.toml b/core/node/genesis/Cargo.toml index d625d7186bdf..4607db282728 100644 --- a/core/node/genesis/Cargo.toml +++ b/core/node/genesis/Cargo.toml @@ -26,3 +26,4 @@ anyhow.workspace = true itertools.workspace = true thiserror.workspace = true tracing.workspace = true +bincode.workspace = true diff --git a/core/node/genesis/src/lib.rs b/core/node/genesis/src/lib.rs index 38972389129e..d49c25bff03c 100644 --- a/core/node/genesis/src/lib.rs +++ b/core/node/genesis/src/lib.rs @@ -2,7 +2,7 @@ //! It initializes the Merkle tree with the basic setup (such as fields of special service accounts), //! setups the required databases, and outputs the data required to initialize a smart contract. -use std::fmt::Formatter; +use std::{collections::HashMap, fmt::Formatter}; use anyhow::Context as _; use zksync_config::GenesisConfig; @@ -10,7 +10,7 @@ use zksync_contracts::{ hyperchain_contract, verifier_contract, BaseSystemContracts, BaseSystemContractsHashes, SET_CHAIN_ID_EVENT, }; -use zksync_dal::{Connection, Core, CoreDal, DalError}; +use zksync_dal::{custom_genesis_export_dal::GenesisState, Connection, Core, CoreDal, DalError}; use zksync_eth_client::{CallFunctionArgs, EthInterface}; use zksync_merkle_tree::{domain::ZkSyncTree, TreeInstruction}; use zksync_multivm::utils::get_max_gas_per_pubdata_byte; @@ -25,19 +25,19 @@ use zksync_types::{ system_contracts::get_system_smart_contracts, u256_to_h256, web3::{BlockNumber, FilterBuilder}, + zk_evm_types::LogQuery, AccountTreeId, Address, Bloom, L1BatchNumber, L1ChainId, L2BlockNumber, L2ChainId, - ProtocolVersion, ProtocolVersionId, StorageKey, H256, U256, + ProtocolVersion, ProtocolVersionId, StorageKey, StorageLog, H256, U256, }; use crate::utils::{ add_eth_token, get_deduped_log_queries, get_storage_logs, - insert_base_system_contracts_to_factory_deps, insert_system_contracts, - save_genesis_l1_batch_metadata, + insert_base_system_contracts_to_factory_deps, insert_deduplicated_writes_and_protective_reads, + insert_factory_deps, insert_storage_logs, save_genesis_l1_batch_metadata, }; - #[cfg(test)] mod tests; -mod utils; +pub mod utils; #[derive(Debug, Clone)] pub struct BaseContractsHashError { @@ -185,53 +185,103 @@ pub fn mock_genesis_config() -> GenesisConfig { fee_account: Default::default(), dummy_verifier: false, l1_batch_commit_data_generator_mode: Default::default(), + custom_genesis_state_path: None, } } -// Insert genesis batch into the database -pub async fn insert_genesis_batch( +pub fn make_genesis_batch_params( + deduped_log_queries: Vec, + base_system_contract_hashes: BaseSystemContractsHashes, + protocol_version: ProtocolVersionId, +) -> (GenesisBatchParams, L1BatchCommitment) { + let storage_logs = deduped_log_queries + .into_iter() + .filter(|log_query| log_query.rw_flag) // only writes + .enumerate() + .map(|(index, log)| { + TreeInstruction::write( + StorageKey::new(AccountTreeId::new(log.address), u256_to_h256(log.key)) + .hashed_key_u256(), + (index + 1) as u64, + u256_to_h256(log.written_value), + ) + }) + .collect::>(); + + let metadata = ZkSyncTree::process_genesis_batch(&storage_logs); + let root_hash = metadata.root_hash; + let rollup_last_leaf_index = metadata.leaf_count + 1; + + let commitment_input = CommitmentInput::for_genesis_batch( + root_hash, + rollup_last_leaf_index, + base_system_contract_hashes, + protocol_version, + ); + let block_commitment = L1BatchCommitment::new(commitment_input); + let commitment = block_commitment.hash().commitment; + + ( + GenesisBatchParams { + root_hash, + commitment, + rollup_last_leaf_index, + }, + block_commitment, + ) +} + +pub async fn insert_genesis_batch_with_custom_state( storage: &mut Connection<'_, Core>, genesis_params: &GenesisParams, + custom_genesis_state: Option, ) -> Result { let mut transaction = storage.start_transaction().await?; let verifier_config = L1VerifierConfig { snark_wrapper_vk_hash: genesis_params.config.snark_wrapper_vk_hash, }; - create_genesis_l1_batch( + // if a custom genesis state was provided, read storage logs and factory dependencies from there + let (storage_logs, factory_deps): (Vec, HashMap>) = + match custom_genesis_state { + Some(r) => ( + r.storage_logs + .into_iter() + .map(|x| StorageLog::from(&x)) + .collect(), + r.factory_deps + .into_iter() + .map(|f| (H256(f.bytecode_hash), f.bytecode)) + .collect(), + ), + None => ( + get_storage_logs(&genesis_params.system_contracts), + genesis_params + .system_contracts + .iter() + .map(|c| { + ( + BytecodeHash::for_bytecode(&c.bytecode).value(), + c.bytecode.clone(), + ) + }) + .collect(), + ), + }; + + // This action disregards how leaf indeces used to be ordered before, and it reorders them by + // sorting by , which is required for calculating genesis parameters. + let deduped_log_queries = create_genesis_l1_batch_from_storage_logs_and_factory_deps( &mut transaction, genesis_params.protocol_version(), genesis_params.base_system_contracts(), - genesis_params.system_contracts(), + &storage_logs, + factory_deps, verifier_config, ) .await?; tracing::info!("chain_schema_genesis is complete"); - let deduped_log_queries = - get_deduped_log_queries(&get_storage_logs(genesis_params.system_contracts())); - - let (deduplicated_writes, _): (Vec<_>, Vec<_>) = deduped_log_queries - .into_iter() - .partition(|log_query| log_query.rw_flag); - - let storage_logs: Vec = deduplicated_writes - .iter() - .enumerate() - .map(|(index, log)| { - TreeInstruction::write( - StorageKey::new(AccountTreeId::new(log.address), u256_to_h256(log.key)) - .hashed_key_u256(), - (index + 1) as u64, - u256_to_h256(log.written_value), - ) - }) - .collect(); - - let metadata = ZkSyncTree::process_genesis_batch(&storage_logs); - let genesis_root_hash = metadata.root_hash; - let rollup_last_leaf_index = metadata.leaf_count + 1; - let base_system_contract_hashes = BaseSystemContractsHashes { bootloader: genesis_params .config @@ -243,27 +293,31 @@ pub async fn insert_genesis_batch( .ok_or(GenesisError::MalformedConfig("default_aa_hash"))?, evm_emulator: genesis_params.config.evm_emulator_hash, }; - let commitment_input = CommitmentInput::for_genesis_batch( - genesis_root_hash, - rollup_last_leaf_index, + + let (genesis_batch_params, block_commitment) = make_genesis_batch_params( + deduped_log_queries, base_system_contract_hashes, genesis_params.minor_protocol_version(), ); - let block_commitment = L1BatchCommitment::new(commitment_input); save_genesis_l1_batch_metadata( &mut transaction, block_commitment.clone(), - genesis_root_hash, - rollup_last_leaf_index, + genesis_batch_params.root_hash, + genesis_batch_params.rollup_last_leaf_index, ) .await?; transaction.commit().await?; - Ok(GenesisBatchParams { - root_hash: genesis_root_hash, - commitment: block_commitment.hash().commitment, - rollup_last_leaf_index, - }) + + Ok(genesis_batch_params) +} + +// Insert genesis batch into the database +pub async fn insert_genesis_batch( + storage: &mut Connection<'_, Core>, + genesis_params: &GenesisParams, +) -> Result { + insert_genesis_batch_with_custom_state(storage, genesis_params, None).await } pub async fn is_genesis_needed(storage: &mut Connection<'_, Core>) -> Result { @@ -316,6 +370,7 @@ pub async fn validate_genesis_params( pub async fn ensure_genesis_state( storage: &mut Connection<'_, Core>, genesis_params: &GenesisParams, + custom_genesis_state: Option, ) -> Result { let mut transaction = storage.start_transaction().await?; @@ -333,7 +388,12 @@ pub async fn ensure_genesis_state( root_hash, commitment, rollup_last_leaf_index, - } = insert_genesis_batch(&mut transaction, genesis_params).await?; + } = insert_genesis_batch_with_custom_state( + &mut transaction, + genesis_params, + custom_genesis_state, + ) + .await?; let expected_root_hash = genesis_params .config @@ -371,14 +431,14 @@ pub async fn ensure_genesis_state( Ok(root_hash) } -#[allow(clippy::too_many_arguments)] -pub async fn create_genesis_l1_batch( +pub(crate) async fn create_genesis_l1_batch_from_storage_logs_and_factory_deps( storage: &mut Connection<'_, Core>, protocol_version: ProtocolSemanticVersion, base_system_contracts: &BaseSystemContracts, - system_contracts: &[DeployedContract], + storage_logs: &[StorageLog], + factory_deps: HashMap>, l1_verifier_config: L1VerifierConfig, -) -> Result<(), GenesisError> { +) -> Result, GenesisError> { let version = ProtocolVersion { version: protocol_version, timestamp: 0, @@ -436,6 +496,33 @@ pub async fn create_genesis_l1_batch( .mark_l2_blocks_as_executed_in_l1_batch(L1BatchNumber(0)) .await?; + insert_base_system_contracts_to_factory_deps(&mut transaction, base_system_contracts).await?; + + let mut genesis_transaction = transaction.start_transaction().await?; + + insert_storage_logs(&mut genesis_transaction, storage_logs).await?; + let dedup_log_queries = get_deduped_log_queries(storage_logs); + insert_deduplicated_writes_and_protective_reads( + &mut genesis_transaction, + dedup_log_queries.as_slice(), + ) + .await?; + insert_factory_deps(&mut genesis_transaction, factory_deps).await?; + genesis_transaction.commit().await?; + add_eth_token(&mut transaction).await?; + + transaction.commit().await?; + Ok(dedup_log_queries) +} + +#[allow(clippy::too_many_arguments)] +pub async fn create_genesis_l1_batch( + storage: &mut Connection<'_, Core>, + protocol_version: ProtocolSemanticVersion, + base_system_contracts: &BaseSystemContracts, + system_contracts: &[DeployedContract], + l1_verifier_config: L1VerifierConfig, +) -> Result<(), GenesisError> { let storage_logs = get_storage_logs(system_contracts); let factory_deps = system_contracts @@ -448,11 +535,15 @@ pub async fn create_genesis_l1_batch( }) .collect(); - insert_base_system_contracts_to_factory_deps(&mut transaction, base_system_contracts).await?; - insert_system_contracts(&mut transaction, factory_deps, &storage_logs).await?; - add_eth_token(&mut transaction).await?; - - transaction.commit().await?; + create_genesis_l1_batch_from_storage_logs_and_factory_deps( + storage, + protocol_version, + base_system_contracts, + &storage_logs, + factory_deps, + l1_verifier_config, + ) + .await?; Ok(()) } diff --git a/core/node/genesis/src/utils.rs b/core/node/genesis/src/utils.rs index a51f49a166a2..a9b0831b31bc 100644 --- a/core/node/genesis/src/utils.rs +++ b/core/node/genesis/src/utils.rs @@ -74,7 +74,7 @@ pub(super) fn get_storage_logs(system_contracts: &[DeployedContract]) -> Vec Vec { +pub fn get_deduped_log_queries(storage_logs: &[StorageLog]) -> Vec { // we don't produce proof for the genesis block, // but we still need to populate the table // to have the correct initial state of the merkle tree @@ -172,29 +172,32 @@ pub(super) async fn save_genesis_l1_batch_metadata( Ok(()) } -pub(super) async fn insert_system_contracts( - storage: &mut Connection<'_, Core>, - factory_deps: HashMap>, +pub(super) async fn insert_storage_logs( + transaction: &mut Connection<'_, Core>, storage_logs: &[StorageLog], ) -> Result<(), GenesisError> { - let (deduplicated_writes, protective_reads): (Vec<_>, Vec<_>) = - get_deduped_log_queries(storage_logs) - .into_iter() - .partition(|log_query| log_query.rw_flag); - - let mut transaction = storage.start_transaction().await?; transaction .storage_logs_dal() .insert_storage_logs(L2BlockNumber(0), storage_logs) .await?; + Ok(()) +} + +pub(super) async fn insert_deduplicated_writes_and_protective_reads( + transaction: &mut Connection<'_, Core>, + deduped_log_queries: &[LogQuery], +) -> Result<(), GenesisError> { + let (deduplicated_writes, protective_reads): (Vec<_>, Vec<_>) = deduped_log_queries + .iter() + .partition(|log_query| log_query.rw_flag); transaction .storage_logs_dedup_dal() .insert_protective_reads( L1BatchNumber(0), &protective_reads - .into_iter() - .map(StorageLog::from) + .iter() + .map(|log_query: &LogQuery| StorageLog::from(*log_query)) // Pass the log_query to from() .collect::>(), ) .await?; @@ -205,16 +208,22 @@ pub(super) async fn insert_system_contracts( StorageKey::new(AccountTreeId::new(log.address), u256_to_h256(log.key)).hashed_key() }) .collect(); + transaction .storage_logs_dedup_dal() .insert_initial_writes(L1BatchNumber(0), &written_storage_keys) .await?; + Ok(()) +} + +pub(super) async fn insert_factory_deps( + transaction: &mut Connection<'_, Core>, + factory_deps: HashMap>, +) -> Result<(), GenesisError> { transaction .factory_deps_dal() .insert_factory_deps(L2BlockNumber(0), &factory_deps) .await?; - - transaction.commit().await?; Ok(()) } diff --git a/core/node/node_storage_init/src/external_node/genesis.rs b/core/node/node_storage_init/src/external_node/genesis.rs index b7a7efa9cf53..d5c487535bf4 100644 --- a/core/node/node_storage_init/src/external_node/genesis.rs +++ b/core/node/node_storage_init/src/external_node/genesis.rs @@ -22,10 +22,14 @@ impl InitializeStorage for ExternalNodeGenesis { _stop_receiver: watch::Receiver, ) -> anyhow::Result<()> { let mut storage = self.pool.connection_tagged("en").await?; + + // Custom genesis state for external nodes is not supported. If the main node has a custom genesis, + // its external nodes should be started from a snapshot instead. zksync_node_sync::genesis::perform_genesis_if_needed( &mut storage, self.l2_chain_id, &self.client.clone().for_component("genesis"), + None, ) .await .context("performing genesis failed") diff --git a/core/node/node_storage_init/src/main_node/genesis.rs b/core/node/node_storage_init/src/main_node/genesis.rs index e98473840370..a5d6c0e628ac 100644 --- a/core/node/node_storage_init/src/main_node/genesis.rs +++ b/core/node/node_storage_init/src/main_node/genesis.rs @@ -1,8 +1,11 @@ +use std::fs::File; + use anyhow::Context as _; use tokio::sync::watch; use zksync_config::{ContractsConfig, GenesisConfig}; use zksync_dal::{ConnectionPool, Core, CoreDal as _}; use zksync_node_genesis::GenesisParams; +use zksync_object_store::bincode; use zksync_web3_decl::client::{DynClient, L1}; use crate::traits::InitializeStorage; @@ -36,7 +39,21 @@ impl InitializeStorage for MainNodeGenesis { self.contracts.diamond_proxy_addr, ) .await?; - zksync_node_genesis::ensure_genesis_state(&mut storage, ¶ms).await?; + + let custom_genesis_state_reader = match &self.genesis.custom_genesis_state_path { + Some(path) => match File::open(path) { + Ok(file) => Some(bincode::deserialize_from(file)?), + Err(e) => return Err(e.into()), // Propagate other errors + }, + None => None, + }; + + zksync_node_genesis::ensure_genesis_state( + &mut storage, + ¶ms, + custom_genesis_state_reader, + ) + .await?; if let Some(ecosystem_contracts) = &self.contracts.ecosystem_contracts { zksync_node_genesis::save_set_chain_id_tx( diff --git a/core/node/node_sync/src/genesis.rs b/core/node/node_sync/src/genesis.rs index 7401bdd9c9d4..8d60599ff7ca 100644 --- a/core/node/node_sync/src/genesis.rs +++ b/core/node/node_sync/src/genesis.rs @@ -1,6 +1,6 @@ use anyhow::Context as _; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SystemContractCode}; -use zksync_dal::{Connection, Core, CoreDal}; +use zksync_dal::{custom_genesis_export_dal::GenesisState, Connection, Core, CoreDal}; use zksync_node_genesis::{ensure_genesis_state, GenesisParams}; use zksync_types::{ block::DeployedContract, system_contracts::get_system_smart_contracts, AccountTreeId, L2ChainId, @@ -16,13 +16,14 @@ pub async fn perform_genesis_if_needed( storage: &mut Connection<'_, Core>, zksync_chain_id: L2ChainId, client: &dyn MainNodeClient, + custom_genesis_state: Option, ) -> anyhow::Result<()> { let mut transaction = storage.start_transaction().await?; // We want to check whether the genesis is needed before we create genesis params to not // make the node startup slower. if transaction.blocks_dal().is_genesis_needed().await? { let genesis_params = create_genesis_params(client, zksync_chain_id).await?; - ensure_genesis_state(&mut transaction, &genesis_params) + ensure_genesis_state(&mut transaction, &genesis_params, custom_genesis_state) .await .context("ensure_genesis_state")?; } From fc02a8f1c9f0bffb438fb27769d6dced3ce14cd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Fran=C3=A7a?= Date: Wed, 18 Dec 2024 12:06:54 +0000 Subject: [PATCH 34/35] feat(consensus): Added view_timeout to consensus config (#3383) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ The duration of a view timeout was previously hard-coded in era-consensus (at 2 seconds). This caused excessive view changes in networks with low traffic. era-consensus v0.7 now has view timeout duration as a config parameter and downgraded view change logging from `error` to `warn`. This PR includes those changes in zksync-era. --- Cargo.lock | 41 +- Cargo.toml | 20 +- core/lib/config/src/configs/consensus.rs | 7 + core/lib/config/src/testonly.rs | 1 + core/lib/protobuf_config/Cargo.toml | 1 + core/lib/protobuf_config/src/consensus.rs | 7 + .../src/proto/core/consensus.proto | 3 + core/node/consensus/src/config.rs | 8 +- core/node/consensus/src/testonly.rs | 1 + prover/Cargo.lock | 705 +++++++++--------- zkstack_cli/Cargo.toml | 11 +- 11 files changed, 426 insertions(+), 379 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 442802faea3a..71ca2e960995 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11523,9 +11523,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c24c9a056499823227503dd9e5fb3037d93bcc3ae9b06c1ac0a47334c6283af" +checksum = "e8312ab73d3caa55775bd531795b507fa8f76bd9dabfaeb0954fe43e8fc1323b" dependencies = [ "anyhow", "once_cell", @@ -11559,9 +11559,9 @@ dependencies = [ [[package]] name = "zksync_consensus_bft" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e7ae72c257d6a4956ecb1b9d77eb082b0b31e9f47a7860d107509fb55c474d" +checksum = "fb6b0944322f30f88cd7fb22f7875435b394a135fc1b479719a18c42d9fb724d" dependencies = [ "anyhow", "async-trait", @@ -11581,9 +11581,9 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da303b01f24283e93f80f361bf62c3df4a761d061c8b38b4faebeebf26362fc" +checksum = "86b539960de98df3c3bd27d2d9b97de862027686bbb3bdfc5aaad5b74bb929a1" dependencies = [ "anyhow", "blst", @@ -11602,9 +11602,9 @@ dependencies = [ [[package]] name = "zksync_consensus_executor" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33cfae30ebaaa817394718fe0858dfa7c0abfa2ed800ea283c407560aac2465" +checksum = "2a75d86368579d5aa59b1baebbdc1aebca7c9234f3e3cba734db7e9bbc4880b0" dependencies = [ "anyhow", "async-trait", @@ -11624,9 +11624,9 @@ dependencies = [ [[package]] name = "zksync_consensus_network" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0129eab96f940ce24f975a27ef9408592d64da7cff51153755dedefbcf58a73" +checksum = "30f73993b7d677dfd4e4f2598dd20906e6a5f3a2168c6cab3a599c056dc5e39a" dependencies = [ "anyhow", "async-trait", @@ -11661,9 +11661,9 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f07db2a8ec2d2cda5cb4c5ac408101e81c8fa5d95c9f3302829dafae78d11c" +checksum = "c49949546895a10431b9daec6ec4208ef0917ace006446d304b51f5b234ba462" dependencies = [ "anyhow", "bit-vec", @@ -11683,9 +11683,9 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a42f57cc5afcee634cbd336e9e6ea891d0171352d7c0bc7d6e17f6c8faa554" +checksum = "feb0d6a54e7d8d2adeee4ba38662161e9309180ad497299092e5641db9fb1c1e" dependencies = [ "anyhow", "async-trait", @@ -11703,9 +11703,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" +checksum = "723e2a4b056cc5af192a83163c89a6951ee75c098cc5c4a4cdc435f4232d88bd" dependencies = [ "anyhow", "rand 0.8.5", @@ -12764,9 +12764,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05755c38b134b409736008bfdfd0fdb42bfa061947be93be4c78069aa10c9b3" +checksum = "e8986ad796f8e00d8999fee72effba1a21bce40f5f877d681ac9cd89a94834d8" dependencies = [ "anyhow", "bit-vec", @@ -12785,9 +12785,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c3930a73ca667780be6dcd94e469d40a93fa52f4654c9ab732991b62238cb5" +checksum = "8d870b31995e3acb8e47afeb68ebeeffcf6121e70020e65b3d5d31692115d236" dependencies = [ "anyhow", "heck 0.5.0", @@ -12813,6 +12813,7 @@ dependencies = [ "serde_yaml", "tracing", "zksync_basic_types", + "zksync_concurrency", "zksync_config", "zksync_protobuf", "zksync_protobuf_build", diff --git a/Cargo.toml b/Cargo.toml index 074d27d6574d..99f6abdf85e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -246,16 +246,16 @@ zk_evm_1_5_0 = { package = "zk_evm", version = "=0.150.7" } zksync_vm2 = { git = "https://github.com/matter-labs/vm2.git", rev = "457d8a7eea9093af9440662e33e598c13ba41633" } # Consensus dependencies. -zksync_concurrency = "=0.6.0" -zksync_consensus_bft = "=0.6.0" -zksync_consensus_crypto = "=0.6.0" -zksync_consensus_executor = "=0.6.0" -zksync_consensus_network = "=0.6.0" -zksync_consensus_roles = "=0.6.0" -zksync_consensus_storage = "=0.6.0" -zksync_consensus_utils = "=0.6.0" -zksync_protobuf = "=0.6.0" -zksync_protobuf_build = "=0.6.0" +zksync_concurrency = "=0.7.0" +zksync_consensus_bft = "=0.7.0" +zksync_consensus_crypto = "=0.7.0" +zksync_consensus_executor = "=0.7.0" +zksync_consensus_network = "=0.7.0" +zksync_consensus_roles = "=0.7.0" +zksync_consensus_storage = "=0.7.0" +zksync_consensus_utils = "=0.7.0" +zksync_protobuf = "=0.7.0" +zksync_protobuf_build = "=0.7.0" # "Local" dependencies zksync_multivm = { version = "0.1.0", path = "core/lib/multivm" } diff --git a/core/lib/config/src/configs/consensus.rs b/core/lib/config/src/configs/consensus.rs index 7f5a0f56aa17..17359f188a70 100644 --- a/core/lib/config/src/configs/consensus.rs +++ b/core/lib/config/src/configs/consensus.rs @@ -126,6 +126,9 @@ pub struct ConsensusConfig { /// Maximal allowed size of the payload in bytes. pub max_payload_size: usize, + /// View timeout duration in milliseconds. + pub view_timeout: Option, + /// Maximal allowed size of the sync-batch payloads in bytes. /// /// The batch consists of block payloads and a Merkle proof of inclusion on L1 (~1kB), @@ -155,6 +158,10 @@ pub struct ConsensusConfig { } impl ConsensusConfig { + pub fn view_timeout(&self) -> time::Duration { + self.view_timeout.unwrap_or(time::Duration::seconds(2)) + } + pub fn rpc(&self) -> RpcConfig { self.rpc.clone().unwrap_or_default() } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index b026aabc6111..749dba1f9548 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -809,6 +809,7 @@ impl Distribution for EncodeDist { server_addr: self.sample(rng), public_addr: Host(self.sample(rng)), max_payload_size: self.sample(rng), + view_timeout: self.sample(rng), max_batch_size: self.sample(rng), gossip_dynamic_inbound_limit: self.sample(rng), gossip_static_inbound: self diff --git a/core/lib/protobuf_config/Cargo.toml b/core/lib/protobuf_config/Cargo.toml index 92d9bd53978c..2d910430863b 100644 --- a/core/lib/protobuf_config/Cargo.toml +++ b/core/lib/protobuf_config/Cargo.toml @@ -16,6 +16,7 @@ links = "zksync_protobuf_config_proto" serde_json.workspace = true serde_yaml.workspace = true zksync_basic_types.workspace = true +zksync_concurrency.workspace = true zksync_config.workspace = true zksync_protobuf.workspace = true zksync_types.workspace = true diff --git a/core/lib/protobuf_config/src/consensus.rs b/core/lib/protobuf_config/src/consensus.rs index 2219b6a82ea8..567224acd4a6 100644 --- a/core/lib/protobuf_config/src/consensus.rs +++ b/core/lib/protobuf_config/src/consensus.rs @@ -1,5 +1,6 @@ use anyhow::Context as _; use zksync_basic_types::L2ChainId; +use zksync_concurrency::time; use zksync_config::configs::consensus::{ AttesterPublicKey, ConsensusConfig, GenesisSpec, Host, NodePublicKey, ProtocolVersion, RpcConfig, ValidatorPublicKey, WeightedAttester, WeightedValidator, @@ -154,6 +155,11 @@ impl ProtoRepr for proto::Config { .context("server_addr")?, public_addr: Host(required(&self.public_addr).context("public_addr")?.clone()), max_payload_size, + view_timeout: self + .view_timeout + .as_ref() + .map(|x| time::Duration::read(x).context("view_timeout")) + .transpose()?, max_batch_size, gossip_dynamic_inbound_limit: required(&self.gossip_dynamic_inbound_limit) .and_then(|x| Ok((*x).try_into()?)) @@ -187,6 +193,7 @@ impl ProtoRepr for proto::Config { server_addr: Some(this.server_addr.to_string()), public_addr: Some(this.public_addr.0.clone()), max_payload_size: Some(this.max_payload_size.try_into().unwrap()), + view_timeout: this.view_timeout.as_ref().map(ProtoFmt::build), max_batch_size: Some(this.max_batch_size.try_into().unwrap()), gossip_dynamic_inbound_limit: Some( this.gossip_dynamic_inbound_limit.try_into().unwrap(), diff --git a/core/lib/protobuf_config/src/proto/core/consensus.proto b/core/lib/protobuf_config/src/proto/core/consensus.proto index 9b0d69e7270c..0b915603cc67 100644 --- a/core/lib/protobuf_config/src/proto/core/consensus.proto +++ b/core/lib/protobuf_config/src/proto/core/consensus.proto @@ -87,6 +87,9 @@ message Config { // Maximal allowed size of the sync batches. optional uint64 max_batch_size = 10; // required; bytes + // View timeout for the consensus protocol. + optional std.Duration view_timeout = 13; // optional + // Inbound connections that should be unconditionally accepted on the gossip network. repeated string gossip_static_inbound = 5; // required; NodePublicKey diff --git a/core/node/consensus/src/config.rs b/core/node/consensus/src/config.rs index 4ad7a551ab42..2cb6045151bd 100644 --- a/core/node/consensus/src/config.rs +++ b/core/node/consensus/src/config.rs @@ -3,7 +3,7 @@ use std::collections::{BTreeMap, HashMap}; use anyhow::Context as _; use secrecy::{ExposeSecret as _, Secret}; -use zksync_concurrency::{limiter, net, time}; +use zksync_concurrency::net; use zksync_config::{ configs, configs::consensus::{ConsensusConfig, ConsensusSecrets, Host, NodePublicKey}, @@ -152,11 +152,6 @@ pub(super) fn executor( let mut rpc = executor::RpcConfig::default(); rpc.get_block_rate = cfg.rpc().get_block_rate(); - // Disable batch syncing, because it is not implemented. - rpc.get_batch_rate = limiter::Rate { - burst: 0, - refresh: time::Duration::ZERO, - }; let debug_page = cfg.debug_page_addr.map(|addr| network::debug_page::Config { addr, @@ -169,6 +164,7 @@ pub(super) fn executor( server_addr: cfg.server_addr, public_addr: net::Host(cfg.public_addr.0.clone()), max_payload_size: cfg.max_payload_size, + view_timeout: cfg.view_timeout(), node_key: node_key(secrets) .context("node_key")? .context("missing node_key")?, diff --git a/core/node/consensus/src/testonly.rs b/core/node/consensus/src/testonly.rs index 479ca1f244cc..1a4da71f85a0 100644 --- a/core/node/consensus/src/testonly.rs +++ b/core/node/consensus/src/testonly.rs @@ -149,6 +149,7 @@ fn make_config( public_addr: config::Host(cfg.public_addr.0.clone()), max_payload_size: usize::MAX, max_batch_size: usize::MAX, + view_timeout: None, gossip_dynamic_inbound_limit: cfg.gossip.dynamic_inbound_limit, gossip_static_inbound: cfg .gossip diff --git a/prover/Cargo.lock b/prover/Cargo.lock index 453a768c0678..185f68367c6b 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -142,9 +142,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 = "arr_macro" @@ -241,7 +241,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -252,7 +252,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -323,10 +323,10 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "itoa", "matchit", @@ -341,7 +341,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper 1.0.2", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -356,7 +356,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "mime", @@ -441,9 +441,9 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f850665a0385e070b64c38d2354e6c104c8479c59868d1e48a0c13ee2c7a1c1" +checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" dependencies = [ "autocfg", "libm", @@ -480,17 +480,17 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.89", + "syn 2.0.90", "which", ] [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] [[package]] @@ -502,6 +502,12 @@ dependencies = [ "serde", ] +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" version = "1.3.2" @@ -683,14 +689,14 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] name = "bstr" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" +checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" dependencies = [ "memchr", "regex-automata 0.4.9", @@ -739,15 +745,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[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" [[package]] name = "cc" -version = "1.2.1" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" dependencies = [ "jobserver", "libc", @@ -783,9 +789,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -948,15 +954,15 @@ dependencies = [ "bitflags 1.3.2", "strsim 0.8.0", "textwrap", - "unicode-width", + "unicode-width 0.1.14", "vec_map", ] [[package]] name = "clap" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -964,9 +970,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -983,14 +989,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" @@ -1018,12 +1024,12 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "colored" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -1053,15 +1059,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width", - "windows-sys 0.52.0", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -1087,18 +1093,18 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", @@ -1194,18 +1200,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1222,18 +1228,18 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -1292,7 +1298,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1329,7 +1335,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1377,7 +1383,7 @@ dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1399,7 +1405,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1480,7 +1486,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", "unicode-xid 0.2.6", ] @@ -1493,7 +1499,7 @@ dependencies = [ "console", "shell-words", "tempfile", - "thiserror", + "thiserror 1.0.69", "zeroize", ] @@ -1538,7 +1544,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1631,7 +1637,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1694,9 +1700,9 @@ dependencies = [ [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" @@ -1724,7 +1730,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1736,7 +1742,7 @@ dependencies = [ "once_cell", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -1810,12 +1816,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]] @@ -1842,7 +1848,7 @@ dependencies = [ "serde", "serde_json", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "uint", ] @@ -1886,9 +1892,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", "pin-project-lite", @@ -1896,9 +1902,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "ff" @@ -2029,7 +2035,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "971289216ea5c91872e5e0bb6989214b537bbce375d09fabea5c3ccfe031b204" dependencies = [ "arr_macro", - "bit-vec", + "bit-vec 0.6.3", "blake2 0.9.2", "blake2-rfc_bellman_edition", "blake2s_simd", @@ -2158,7 +2164,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -2253,7 +2259,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -2299,7 +2305,7 @@ dependencies = [ "reqwest 0.12.9", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -2313,7 +2319,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f945a208886a13d07636f38fb978da371d0abc3e34bad338124b9f8c135a8f" dependencies = [ "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -2343,7 +2349,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -2393,7 +2399,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -2411,8 +2417,8 @@ dependencies = [ "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", @@ -2476,7 +2482,7 @@ dependencies = [ "base64 0.21.7", "bytes", "headers-core", - "http 1.1.0", + "http 1.2.0", "httpdate", "mime", "sha1", @@ -2488,7 +2494,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -2547,11 +2553,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2578,9 +2584,9 @@ dependencies = [ [[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", "fnv", @@ -2605,7 +2611,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -2616,7 +2622,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] @@ -2651,9 +2657,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.31" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -2675,15 +2681,15 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", "futures-util", "h2 0.4.7", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "httparse", "httpdate", @@ -2703,8 +2709,8 @@ dependencies = [ "bytes", "futures-util", "headers", - "http 1.1.0", - "hyper 1.5.1", + "http 1.2.0", + "hyper 1.5.2", "hyper-rustls", "hyper-util", "pin-project-lite", @@ -2721,8 +2727,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.5.1", + "http 1.2.0", + "hyper 1.5.2", "hyper-util", "log", "rustls", @@ -2739,7 +2745,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "tokio", @@ -2753,7 +2759,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.31", + "hyper 0.14.32", "native-tls", "tokio", "tokio-native-tls", @@ -2767,7 +2773,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "native-tls", "tokio", @@ -2784,9 +2790,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.1", + "hyper 1.5.2", "pin-project-lite", "socket2", "tokio", @@ -2932,7 +2938,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -2997,7 +3003,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3012,9 +3018,9 @@ 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.2", @@ -3125,7 +3131,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -3146,10 +3152,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3162,7 +3169,7 @@ dependencies = [ "jsonptr", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3177,7 +3184,7 @@ dependencies = [ "pest_derive", "regex", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3217,14 +3224,14 @@ dependencies = [ "futures-channel", "futures-util", "gloo-net", - "http 1.1.0", + "http 1.2.0", "jsonrpsee-core", "pin-project", "rustls", "rustls-pki-types", "rustls-platform-verifier", "soketto", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-rustls", "tokio-util", @@ -3244,7 +3251,7 @@ dependencies = [ "bytes", "futures-timer", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "jsonrpsee-types", @@ -3252,7 +3259,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -3268,7 +3275,7 @@ dependencies = [ "async-trait", "base64 0.22.1", "http-body 1.0.1", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-rustls", "hyper-util", "jsonrpsee-core", @@ -3277,7 +3284,7 @@ dependencies = [ "rustls-platform-verifier", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.4.13", "tracing", @@ -3294,7 +3301,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3304,10 +3311,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" dependencies = [ "beef", - "http 1.1.0", + "http 1.2.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3327,7 +3334,7 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" dependencies = [ - "http 1.1.0", + "http 1.2.0", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", @@ -3422,10 +3429,10 @@ dependencies = [ "either", "futures 0.3.31", "home", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-http-proxy", "hyper-rustls", "hyper-timeout", @@ -3440,10 +3447,10 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tower-http", "tracing", ] @@ -3456,14 +3463,14 @@ checksum = "f42346d30bb34d1d7adc5c549b691bce7aa3a1e60254e68fab7e2d7b26fe3d77" dependencies = [ "chrono", "form_urlencoded", - "http 1.1.0", + "http 1.2.0", "json-patch", "k8s-openapi", "schemars", "serde", "serde-value", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3476,7 +3483,7 @@ dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", "serde_json", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3501,7 +3508,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "tracing", @@ -3524,15 +3531,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.166" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -3575,7 +3582,7 @@ checksum = "612ed4ea9ce5acfb5d26339302528a5e1e59dfed95e9e11af3c083236ff1d15d" dependencies = [ "libc", "neli", - "thiserror", + "thiserror 1.0.69", "windows-sys 0.48.0", ] @@ -3615,7 +3622,7 @@ dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", "regex-syntax 0.6.29", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3678,8 +3685,8 @@ checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" dependencies = [ "miette-derive", "once_cell", - "thiserror", - "unicode-width", + "thiserror 1.0.69", + "unicode-width 0.1.14", ] [[package]] @@ -3690,7 +3697,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -3717,20 +3724,19 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] [[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", "windows-sys 0.52.0", @@ -3991,7 +3997,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -4003,7 +4009,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -4056,7 +4062,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -4088,7 +4094,7 @@ dependencies = [ "js-sys", "once_cell", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4111,7 +4117,7 @@ checksum = "ad31e9de44ee3538fb9d64fe3376c1362f406162434609e79aea2a41a0af78ab" dependencies = [ "async-trait", "bytes", - "http 1.1.0", + "http 1.2.0", "opentelemetry", "reqwest 0.12.9", ] @@ -4124,14 +4130,14 @@ checksum = "6b925a602ffb916fb7421276b86756027b37ee708f9dce2dbdcc51739f07e727" dependencies = [ "async-trait", "futures-core", - "http 1.1.0", + "http 1.2.0", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.13.3", + "prost 0.13.4", "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.69", "tokio", "tonic", ] @@ -4144,7 +4150,7 @@ checksum = "30ee9f20bff9c984511a02f082dc8ede839e4a9bf15cc2487c8d6fea5ad850d9" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.13.3", + "prost 0.13.4", "tonic", ] @@ -4170,7 +4176,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] @@ -4186,9 +4192,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "e5ca711d8b83edbb00b44d504503cd247c9c0bd8b0fa2694f2a1a3d8165379ce" dependencies = [ "log", "serde", @@ -4215,29 +4221,28 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.7.0" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive", - "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.7.0" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 1.0.109", ] [[package]] @@ -4302,20 +4307,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.7", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ "pest", "pest_generator", @@ -4323,22 +4328,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ "pest", "pest_meta", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] name = "pest_meta" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ "once_cell", "pest", @@ -4352,7 +4357,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -4372,7 +4377,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -4483,7 +4488,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2 1.0.92", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -4595,17 +4600,17 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", - "bit-vec", + "bit-vec 0.8.0", "bitflags 2.6.0", "lazy_static", "num-traits", @@ -4630,12 +4635,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", - "prost-derive 0.13.3", + "prost-derive 0.13.4", ] [[package]] @@ -4655,7 +4660,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.89", + "syn 2.0.90", "tempfile", ] @@ -4669,20 +4674,20 @@ dependencies = [ "itertools 0.12.1", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools 0.13.0", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -4722,7 +4727,7 @@ dependencies = [ "prost-reflect", "prost-types", "protox-parse", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4734,7 +4739,7 @@ dependencies = [ "logos", "miette", "prost-types", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4746,7 +4751,7 @@ dependencies = [ "bincode", "chrono", "circuit_definitions", - "clap 4.5.21", + "clap 4.5.23", "colored", "dialoguer", "hex", @@ -4940,9 +4945,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags 2.6.0", ] @@ -5014,7 +5019,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -5053,10 +5058,10 @@ dependencies = [ "futures-core", "futures-util", "h2 0.4.7", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -5095,10 +5100,10 @@ checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", - "http 1.1.0", + "http 1.2.0", "reqwest 0.12.9", "serde", - "thiserror", + "thiserror 1.0.69", "tower-service", ] @@ -5267,22 +5272,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.19" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "aws-lc-rs", "log", @@ -5339,9 +5344,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" [[package]] name = "rustls-platform-verifier" @@ -5445,7 +5450,7 @@ dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", "serde_derive_internals", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -5563,9 +5568,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "send_wrapper" @@ -5675,7 +5680,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "url", "uuid", @@ -5689,9 +5694,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] @@ -5708,13 +5713,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -5725,7 +5730,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -5792,7 +5797,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "ryu", "serde", @@ -5962,7 +5967,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -5997,9 +6002,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", @@ -6007,9 +6012,9 @@ dependencies = [ [[package]] name = "soketto" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" dependencies = [ "base64 0.22.1", "bytes", @@ -6101,7 +6106,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.6.0", + "indexmap 2.7.0", "ipnetwork", "log", "memchr", @@ -6115,7 +6120,7 @@ dependencies = [ "sha2 0.10.8", "smallvec", "sqlformat", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -6132,7 +6137,7 @@ dependencies = [ "quote 1.0.37", "sqlx-core", "sqlx-macros-core", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -6155,7 +6160,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.89", + "syn 2.0.90", "tempfile", "tokio", "url", @@ -6201,7 +6206,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -6244,7 +6249,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -6357,7 +6362,7 @@ dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", "rustversion", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -6390,9 +6395,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.89" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", @@ -6422,7 +6427,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -6520,7 +6525,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -6529,7 +6534,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -6538,7 +6543,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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" +dependencies = [ + "thiserror-impl 2.0.7", ] [[package]] @@ -6549,7 +6563,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -6573,9 +6598,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", @@ -6594,9 +6619,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[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", @@ -6647,9 +6672,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[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", @@ -6671,7 +6696,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -6686,20 +6711,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -6708,9 +6732,9 @@ 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", "futures-core", @@ -6744,7 +6768,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -6755,7 +6779,7 @@ 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", "toml_datetime", "winnow 0.6.20", ] @@ -6772,15 +6796,15 @@ dependencies = [ "base64 0.22.1", "bytes", "h2 0.4.7", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.3", + "prost 0.13.4", "socket2", "tokio", "tokio-stream", @@ -6812,14 +6836,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.2", "tokio", "tokio-util", "tower-layer", @@ -6836,7 +6860,7 @@ dependencies = [ "base64 0.22.1", "bitflags 2.6.0", "bytes", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "mime", "pin-project-lite", @@ -6877,7 +6901,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -6921,9 +6945,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", @@ -6931,9 +6955,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", @@ -6969,7 +6993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -7031,9 +7055,9 @@ checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-bidi" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" @@ -7068,6 +7092,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.1.0" @@ -7110,9 +7140,9 @@ 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", "log", @@ -7210,7 +7240,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "671d3b894d5d0849f0a597f56bf071f42d4f2a1cbcf2f78ca21f870ab7c0cc2b" dependencies = [ - "hyper 0.14.31", + "hyper 0.14.32", "once_cell", "tokio", "tracing", @@ -7225,7 +7255,7 @@ checksum = "6a511871dc5de990a3b2a0e715facfbc5da848c0c0395597a1415029fb7c250a" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -7270,9 +7300,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -7281,36 +7311,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote 1.0.37", "wasm-bindgen-macro-support", @@ -7318,22 +7348,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" @@ -7350,9 +7380,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -7692,7 +7722,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", "synstructure", ] @@ -7714,7 +7744,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -7734,7 +7764,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", "synstructure", ] @@ -7755,7 +7785,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -7777,7 +7807,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -7916,7 +7946,7 @@ dependencies = [ "sha3 0.10.8", "smallvec", "structopt", - "thiserror", + "thiserror 1.0.69", "zkevm_opcode_defs 0.150.7", ] @@ -8091,7 +8121,7 @@ version = "0.151.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5714848e6f8361820346483246dd68b4e7fb05ec41dd6610a8b53fb5c3ca7f3a" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", "cfg-if", "crossbeam", "franklin-crypto", @@ -8129,7 +8159,7 @@ dependencies = [ "serde_with", "sha2 0.10.8", "strum", - "thiserror", + "thiserror 1.0.69", "tiny-keccak 2.0.2", "url", ] @@ -8141,7 +8171,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ffa03efe9bdb137a4b36b97d1a74237e18c9ae42b755163d903a9d48c1a5d80" dependencies = [ "arrayvec 0.7.6", - "bit-vec", + "bit-vec 0.6.3", "blake2s_simd", "byteorder", "cfg-if", @@ -8164,7 +8194,7 @@ dependencies = [ "anyhow", "async-trait", "bincode", - "clap 4.5.21", + "clap 4.5.23", "shivini", "tokio", "tokio-util", @@ -8209,16 +8239,16 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c24c9a056499823227503dd9e5fb3037d93bcc3ae9b06c1ac0a47334c6283af" +checksum = "e8312ab73d3caa55775bd531795b507fa8f76bd9dabfaeb0954fe43e8fc1323b" dependencies = [ "anyhow", "once_cell", "pin-project", "rand 0.8.5", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -8244,9 +8274,9 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da303b01f24283e93f80f361bf62c3df4a761d061c8b38b4faebeebf26362fc" +checksum = "86b539960de98df3c3bd27d2d9b97de862027686bbb3bdfc5aaad5b74bb929a1" dependencies = [ "anyhow", "blst", @@ -8258,25 +8288,25 @@ dependencies = [ "num-traits", "rand 0.8.5", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", "zeroize", ] [[package]] name = "zksync_consensus_roles" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f07db2a8ec2d2cda5cb4c5ac408101e81c8fa5d95c9f3302829dafae78d11c" +checksum = "c49949546895a10431b9daec6ec4208ef0917ace006446d304b51f5b234ba462" dependencies = [ "anyhow", - "bit-vec", + "bit-vec 0.6.3", "hex", "num-bigint 0.4.6", "prost 0.12.6", "rand 0.8.5", "serde", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_concurrency", "zksync_consensus_crypto", @@ -8287,15 +8317,15 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a42f57cc5afcee634cbd336e9e6ea891d0171352d7c0bc7d6e17f6c8faa554" +checksum = "feb0d6a54e7d8d2adeee4ba38662161e9309180ad497299092e5641db9fb1c1e" dependencies = [ "anyhow", "async-trait", "prost 0.12.6", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zksync_concurrency", @@ -8307,13 +8337,13 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" +checksum = "723e2a4b056cc5af192a83163c89a6951ee75c098cc5c4a4cdc435f4232d88bd" dependencies = [ "anyhow", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "zksync_concurrency", ] @@ -8356,7 +8386,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "zksync_basic_types", ] @@ -8388,7 +8418,7 @@ dependencies = [ "serde_json", "sqlx", "strum", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -8416,7 +8446,7 @@ dependencies = [ "serde", "serde_json", "sqlx", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -8441,7 +8471,7 @@ dependencies = [ "async-trait", "jsonrpsee", "rlp", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zksync_config", @@ -8457,7 +8487,7 @@ version = "0.1.0" dependencies = [ "async-trait", "rlp", - "thiserror", + "thiserror 1.0.69", "zksync_basic_types", "zksync_crypto_primitives", ] @@ -8545,7 +8575,7 @@ dependencies = [ "hex", "itertools 0.10.5", "once_cell", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zk_evm 0.131.0-rc.2", @@ -8571,7 +8601,7 @@ dependencies = [ "flate2", "google-cloud-auth", "google-cloud-storage", - "http 1.1.0", + "http 1.2.0", "prost 0.12.6", "rand 0.8.5", "reqwest 0.12.9", @@ -8605,7 +8635,7 @@ dependencies = [ "async-trait", "bincode", "circuit_sequencer_api 0.150.7", - "clap 4.5.21", + "clap 4.5.23", "ctrlc", "futures 0.3.31", "reqwest 0.12.9", @@ -8633,12 +8663,12 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05755c38b134b409736008bfdfd0fdb42bfa061947be93be4c78069aa10c9b3" +checksum = "e8986ad796f8e00d8999fee72effba1a21bce40f5f877d681ac9cd89a94834d8" dependencies = [ "anyhow", - "bit-vec", + "bit-vec 0.6.3", "once_cell", "prost 0.12.6", "prost-reflect", @@ -8654,9 +8684,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c3930a73ca667780be6dcd94e469d40a93fa52f4654c9ab732991b62238cb5" +checksum = "8d870b31995e3acb8e47afeb68ebeeffcf6121e70020e65b3d5d31692115d236" dependencies = [ "anyhow", "heck 0.5.0", @@ -8666,7 +8696,7 @@ dependencies = [ "prost-reflect", "protox", "quote 1.0.37", - "syn 2.0.89", + "syn 2.0.90", ] [[package]] @@ -8682,6 +8712,7 @@ dependencies = [ "serde_yaml", "tracing", "zksync_basic_types", + "zksync_concurrency", "zksync_config", "zksync_protobuf", "zksync_protobuf_build", @@ -8742,7 +8773,7 @@ dependencies = [ "anyhow", "async-trait", "circuit_definitions", - "clap 4.5.21", + "clap 4.5.23", "ctrlc", "futures 0.3.31", "local-ip-address", @@ -8775,7 +8806,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "clap 4.5.21", + "clap 4.5.23", "ctrlc", "futures 0.3.31", "log", @@ -8844,7 +8875,7 @@ dependencies = [ "anyhow", "async-trait", "axum", - "clap 4.5.21", + "clap 4.5.23", "ctrlc", "serde", "tokio", @@ -8954,7 +8985,7 @@ dependencies = [ "serde_json", "serde_with", "strum", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_basic_types", "zksync_contracts", @@ -8985,7 +9016,7 @@ version = "0.1.0" dependencies = [ "anyhow", "circuit_definitions", - "clap 4.5.21", + "clap 4.5.23", "indicatif", "proptest", "toml_edit 0.14.4", @@ -9013,7 +9044,7 @@ dependencies = [ "sentry", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -9053,7 +9084,7 @@ dependencies = [ "hex", "pretty_assertions", "serde", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_contracts", "zksync_system_constants", @@ -9073,7 +9104,7 @@ dependencies = [ "rustls", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -9126,7 +9157,7 @@ dependencies = [ "anyhow", "async-trait", "bincode", - "clap 4.5.21", + "clap 4.5.23", "ctrlc", "tokio", "tracing", diff --git a/zkstack_cli/Cargo.toml b/zkstack_cli/Cargo.toml index 1734673aefba..29a0e5bc43c6 100644 --- a/zkstack_cli/Cargo.toml +++ b/zkstack_cli/Cargo.toml @@ -19,7 +19,6 @@ repository = "https://github.com/matter-labs/zksync-era/tree/main/zkstack_cli/" description = "ZK Stack CLI is a set of tools for working with zk stack." keywords = ["zk", "cryptography", "blockchain", "ZKStack", "ZKsync"] - [workspace.dependencies] # Local dependencies common = { path = "crates/common" } @@ -31,11 +30,11 @@ git_version_macro = { path = "crates/git_version_macro" } zksync_config = { path = "../core/lib/config" } zksync_protobuf_config = { path = "../core/lib/protobuf_config" } zksync_basic_types = { path = "../core/lib/basic_types" } -zksync_consensus_roles = "=0.6.0" -zksync_consensus_crypto = "=0.6.0" -zksync_consensus_utils = "=0.6.0" -zksync_protobuf = "=0.6.0" -zksync_protobuf_build = "=0.6.0" +zksync_consensus_roles = "=0.7.0" +zksync_consensus_crypto = "=0.7.0" +zksync_consensus_utils = "=0.7.0" +zksync_protobuf = "=0.7.0" +zksync_protobuf_build = "=0.7.0" # External dependencies anyhow = "1.0.82" From 18e4307324f26902ef67ba587d324bf35aa09735 Mon Sep 17 00:00:00 2001 From: Marcin M <128217157+mm-zk@users.noreply.github.com> Date: Wed, 18 Dec 2024 13:11:24 +0100 Subject: [PATCH 35/35] fix: Fix wrong in ERC20 deployment file name (#3395) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ * erc configuration was overwriting the initial configuration (it was using wrong file constant) --- .../config/src/forge_interface/deploy_ecosystem/input.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zkstack_cli/crates/config/src/forge_interface/deploy_ecosystem/input.rs b/zkstack_cli/crates/config/src/forge_interface/deploy_ecosystem/input.rs index d5611f805b17..17b2bac38a3f 100644 --- a/zkstack_cli/crates/config/src/forge_interface/deploy_ecosystem/input.rs +++ b/zkstack_cli/crates/config/src/forge_interface/deploy_ecosystem/input.rs @@ -11,7 +11,7 @@ use zksync_basic_types::L2ChainId; use crate::{ consts::INITIAL_DEPLOYMENT_FILE, traits::{FileConfigWithDefaultName, ZkStackConfig}, - ContractsConfig, GenesisConfig, WalletsConfig, + ContractsConfig, GenesisConfig, WalletsConfig, ERC20_DEPLOYMENT_FILE, }; #[derive(Debug, Deserialize, Serialize, Clone)] @@ -69,7 +69,7 @@ pub struct Erc20DeploymentConfig { } impl FileConfigWithDefaultName for Erc20DeploymentConfig { - const FILE_NAME: &'static str = INITIAL_DEPLOYMENT_FILE; + const FILE_NAME: &'static str = ERC20_DEPLOYMENT_FILE; } impl ZkStackConfig for Erc20DeploymentConfig {}

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 literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/gateway.png b/docs/src/specs/img/gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..4d18d38ba33808cc8a9189458cd10689e3c9709c GIT binary patch literal 84829 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 literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/globalroot.png b/docs/src/specs/img/globalroot.png new file mode 100644 index 0000000000000000000000000000000000000000..3152cbec4e8156dcfe6a32a87dcd4dbfd28be608 GIT binary patch literal 103225 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 z zvqhp`Ci2kU2h9l9$;`x82f80kU)OwHs7k+F2!7+FSus$b9?p;hbDi7F?S6g?((QWH z9^+a9}1I@h4vFOm0jmnN0O;`Mq5>pNa}3_RH$L+qcTR>@?LB z(PUt7WZH)uqq%Wx!BH@yM+W{ToJ!015S(0pC@-ioM#@U(x;{BtdAIUVO#Yg&mFUTD zCWd)BmXV^(+NB$7bsB+ILpRx4Wf==7G1r8=uQwuXNeRA@d{hx1W+&5RE>s(K%mJRB z`>wflE6k+XAqiDpwo3-y1XN_D9V>JsFBNK0eqdkj+v}&M{4}d58N_Z~345Bvo*vU3 zyciLTR^fm>SKO4gIW-+#WgK9DKg=@;2VuCkWFpa#@>_iNI$o`Jm`(-@qH^5GQMc?0 zFldPmGxj;WMl={(C1_+>DNA4g_R^-EkC^T(<4&Eo><+Uowtu zSt!Do^|zJXh`xjI{p5d_(C|XGzYh0e@$EsfYLnLFjr$5sqceuvD?8iaoGB|BQ8k05 z+R9hNH&i`-_edI3o7JJU`PT)R8#wnbZEU<9I}4)Ba!}r^@KFsoyY59K;un3DDLwV> zGEy?pbl9{*pslN1ABh#b!MI;lf`A&A_u9?DZMe;hz3}OCCBPME@(rJ0> z(h0CvN=8FzBuTV;@O9T$A1R?oUj;yM>7`~8NG&MUz`Q?`jb@f!eHNf%ms$Y=I2m156VAk?`7QHL)IKKHj{|T>8AF4gQ%1 zYYZ~!d#ymA^-TNfZp`<`=ds8$zcCMJ@vT5$YSn}H0RBklcu)_t5e1V2oiqNpJ!DWT zHXSJHu6B@>iuRlY4*R3caUB-fa%~T(*Gn%g9uO&%`4-&Q?Cmi>*Bh9ll+TFeUbSnF zEmsbBi_S)Dy=j6_3ro*F4?(lUq_G8T_qO+@O;mGub0L976Yi0xdIiHJQfG4Uf%2+@kQ%K8-gE3fv8J?lN&a~*Y?_G-mncBa$vf4!b--ud%P zu8II?!`~x47S&T$m8`_;S~Er&~T` zr8gS4zR)NI_-eD<9FJy|&WNjrpmR^I$-&VFozuBjWh*GA^u; zudB85S64*ki)5AiJB)5aVX9r>__1eCQI=SR5BYD7(U)uG19aG(LfITA<L#*F+FxU7^e^3%O?$vorQ!a2L7eM^?s$Ex@T!dz>vbmoa1+NDB ze)@Qypz+b^4KWhAvlpz$*=glku%7t!{+Yotb!!jiq}7zP(85HArobB5b+!>xwXq%D z(~6=a60V!CYS^3(*H_954UdaXe#gX063~V^2e~S`rC_Y$)q{jnPRgpGN9jPkS{wl9 zS!9-O**yk87D|9gO0PiWS+t)uDgRewF@Z-Z95quW6ip4Fv0kz0AUdZtf=CKe&THhk z{TAYfFa<6;nJXFS2)sD+MV7zNH)EiBmT)3u4#}Gqo=!1Je<=BVojFJ4K=uPbHe|j^Qg=?V_@_Bs?_yDjS+-%cr$A1C3Jn@>GoWrZ z`4du4Rw=KVi#Hx=Nw<4LLIO#EkchG;(6mX4YHd1r83}HAKGl_6ZA$h@?#yX`O}*33 z=dnYgwDm%e>0Wm-zEYp%a1}RjPhfhvYi+uKlLj%+;5o1y_SxI)jeHG z8FrF;N4LMJDjjnLlMLm<2=p(qJKuUv^Hd!+W4T!sAvm)v6UKutCMxkHIaQP_+C&8$ zgH&matAX;_1E>Thbh^HB?W_w>KL6&}Vxwcsg*XGo7$} zYuSA=u(Ri>{n&xO{I^&Up$bBz*EiK+hMM$3Ix3vsvr;SX^~&)WO>n$80%Rk2rnqvP z;kSN^?!)pYL(#X$p9erdM!b~w(SmtS7*_0$9{@-x`iQW)G}FnzMMv%{d-`PZ2r(tj zaB)OqfHx&fDVLNTdtgfq8MMfdHg94LV4i=kMB+UU1QX9x((j5)82%DjJ1(QaTJHK= zJ@>s&UTv}YdGcd|^enfX!M#M8NE(OTi=E}_@;=@v9Yt{CsB9_CAK?;jAv z+)7Tr*U)Nh@Ml%n{IHfNK)J;BSuDF*YjpMUQE2C$0!G#;=H!T&Ou>dx*Ss|+hTy#z zRlGMR=J~x&7nx1O{?7>iwUgr!TJy=kTR(+)odw-*oZHjOS4*;HnWgVAq5!MJfLHt6 zo396-B5;7&*M7bRC603_iRv(_bAw%v#dS?l{H~By8H=q0l17~;J18Cm!lhZfW%8!U z|3}7NUWZ>8;o%wAnxVic6nyKg_4~=_Lk~i z(mW|xPO-UUKwuMsgaJB2oJvqq<)jBo-{f{Z_}vaaAR)aiS#$E6{6~Nn}lw2#&cRdvB6|N zTLzjl&;82nVSl%8c9&d=_3@vQmd{#uHV!vwrN7=c6u^w~NdsRgx18#dsJcWT^DxK; zsw-+WM^*7|QO3f7TOaobr_EcSVqe1E|2aVUQJM3Pg1d*)v$gfD2e7`Gg|(AXpJdZy z3FXGa9HKuALiTO8#2Q9sBB= zIi~B1MN<0ZT5jL3z?Cn&koJ|WUpYACX1-$9-A+2H(o%y#A?q=IUv?M;B*Y(GbcQ_4 za#=%R`?b&3;kJf}QvfKIhM6;2!YQYc6+p&EJ-y+<6(cWMbY;uzC-`95g(P;&M|kB) zNeJ3=3+Pu5GPq zcRRn%8X5e!G4mQHIczj_eb?;5Cf?hMMRoQx={7+nDUaX~xc^h~5Bn331oheV#jW(r zo~2c-Z6Cs6C*W>rjAnl`UAiJ7XRuxcZPlM~E>_%$b zsV7@iVJaD$(4ECp!6W0dxs1prps;4kE>twFU1YLmQ0&U1#%=~ zFC!(=SkTAu?c`z=h^&+`urx$IkVqIh_EnpBv7~Pv`Pj2&EF+LP1seZh8MFI281Gnw z44dg(9im5v5GOu_ImTBcipTfesb`xH$!Rd_WM0;D(aFW^E+2d9+ejNQB3xwS@SQN% zUxVo>;ks2ex3y%h7G&nX!Xch|$oT@APu&FrmtCDWthZ3ZA>Z-2ucFlHYt1is}j3TVPr2g<>@44l`R%C?WToWS&~*(0!m0mw0CL@Y~)}{X-h?x}NLL9CnQnRqJn8gnXMp#N$@a z!|hmF05}j|=1X1UR*LO5h)K9spP?O*wfs zt+f170Mu49Qiu~iS29QwNnpZ*$`fOeo~Af9?!*0z9Oka6*T?JC<^aT`+`Y`LWmwm~ z0p+>-EBZ5aSsO|95mP!C6{&2VL6wx5HC(U9hxPlLrK8TXn zdB@Q-*g&6}mw`G~_eN*E3pBl;)dcHQzUJAPqp#6RX98}$*C8Q^%@s6}n8?|rRE$bY zZrKqbHVKk4-peFmtb0YrJp48afLUP14d3V|J64x6vI2OgB{o_G4k($JgHV^Z0a9<* z`Q!*88PPa^0VO|K+ygRY3ermMMoj~@XSHfOeNA|vsPqM}oJtxzHEOi!%w+DZm4D$j zg0K`18h%1@YWzomIu67BQ`wsE6%fc)v8_%Iope9h@-Na$QUbJwC{Bp;HP6bmsRqMx zXv;7U!2KgB=zC}3mVvwIn^xysZWRK-AY4y_bDHyuVxRg6CcKcm1bQwiCZg<^c32zPKf>V=D9lRB+2vnr- z)*e*Nv$PvE#|PgMa?1%R@OL}CG#7{1=$d1 zCasJTD&3K?T@1jh(rPMoL?ksQ2x58)5&q`O4@>GS@1HCDl8#9yZCeErho5I_#Y5bQ zsl-1LaWf*@+d?uBA@IT5+z^cOsyb?1)|=aKiz&O?4#4Bx!5I3~_9jV;Bsc)Mg7omY zz}2eEU`Y|e8;Hh#$DG1mB^bAn#z7CE5J01Lq&gsAJTDzo7mZ-Q309`cQSZj-v_`+? zf=_`4X&Vpb!tTBydbwSzcqB3mR_c~E;3tEY?<96aS|@eWQdeF}X>{T8hUcAcBx7ClTybGT~k}?9(Ap>yHPN1s)Iu*m8rCvK_f9+m!dW&2Gk9pB27F! z=aa9%3X4^SsPD6T?;_3@{|1|zLYf|#54+mSKj=~l*?UZGmzCUk5;Crs<_i99e=Yrk zs&v~A{5@XA%Yhv!fg2!QkWMah2J+B)WixYI!v1S?eE08IOANh!~N|% zX_GnW%km3IA3(hKa}Av{ybe0TJg!tr9hph&7DjKk?&G^S$1lh38+!7vETu8@$46Wc z{Q5s)aWjg1RXtfhod}V3XDxMnmBCQZO9YVT3&r&tF_t4afG6Y*InC4c+NG4ZuB2Ks zKQvyMpR#UIw26J3BQK*VTbwR{aXt$68KgvikvApCI@a+>X(6Do9PoPE->EpqyoXZk{u)pits)UON^Pc3wCTL-L0omq@%D(6y3Sy>j?hkM>=VP7oA?we z_rYY3ikH4f?+1E5<7H|xZ#(X#atBTU4GN`i)(T{g4MjjVJqrONz6_cO@3C%n+%Py^ zzrQ_P;jlfo>mVNsm_-nl6XEKbVSXk7aU(f>iCisE!wnCH^O)N*e=8GE+Y<#2=D-|sQ`9@VT$mP4q+f+tg{!0duJ;rAg zHnr-!rHHqCNwao{3hjz)Q!6eQ8An>j%_;{fu)HdV1}RhfrR^^;deNhxOR;kpWtN^b z>!3rO%nkew*Rp4SoN1QeCVVM@#Q6-d~Rl_0K!~^43r2D|s`tIL~#=-ehsHfvc6qpW^R+@1QiBuOpcBrM|UDBxxTx z*`wvmn6o=U&jr6%SKiUyz6eGpkQfO4(M#@8)`k}Vk?QoL>f$~h-d;sglNks+y6J1h z(d<)xRVV$`6=!26;mis#fh4D@k~#a#BzSkPpW{wNT(wvS%>6}c5Xbxj!djvwW$k!} z1~^-xL`?i6;p>ruJP4OI#%l-DV_ zIO|eWQC#qq+*Fcw^)s={lWvo0XbyjNW8&cCuPrvPoHFdv7yr;4sN2cA;g+Thgubr+ z#WbvrzHRF;V5Wi4zkk(S_UveiO%&ObjlhY8Xf0wQJ&7m9oen7j?rg}9JYYH1w3}qm z(CZxup<~#g`y%RGzE+%DzjXz>9z88Q`_*?imf;XOM!~-rf~Dryx(SD)LARVYngC=HGx0V8kuhJvwJ zDS6zA7nK$if)(+V)yUA!e z=}Fd!^L23ePI5Iz%2q0-dc*>Smj7xnXAo2%E#p^qD7J=07Akv8+B$vbjFS|C6(H*# zX3XB+vCqeRAoG9Dc_LM)M$elQWYPIhf#Wh+_avjP&Pb=s2g{hh{tS44ErM~O=uoS8 z&J5@?Ms+5z9dM*j{bJ7Hm7!}v#xc&3osvMW4%x(+L)8j`@`x|zt*9Lir}?uZ7Rzss z(^^d2)$EqG&0b}S_rGFTnYn%YSqqM<&GdZo{%Q)8zB&wWrbb?tC+TVVSVv{DAqKd~ z@-6#*OeEe@_`Oy>hQjZ{Y0`?^96q?zih^2_hyKR@dh0(aMkm9HXt4QO2c&RJJ_R3^r*_^Is+3Ws)U1R|*PaMvn6TX3PO&E>-A-p@qB7N9(KM#c^)Yi#0Rfxe zzqYglF!CLmTEQU%J9;tIoYS|0VKBFPcush|sP8EH?^E^XGwcBv8HdiNb3!o6`{_ay zZjhQ=hQ_Fis2CiVwf&Rje`CJ^8R~Z0iaatb<5i$#GBuEX=K&QjjXHn7zc+Qx=#T(E z`QP~a*MI<{^9^951^LXfLz>G)L2)^RyFBKGU_-^*_IiuB)a;sV1(Uj}rN>1^#l;AI z6_cLw-hVs1F_=pUc1cZwyZojAc?w4xYw-Uy2Y<~MJ?>qSy(>_;)AZ*7r>PQ^vo2wLgC} z2E$>Ol*4}m_k@3C?mvFH`xs4T^&%mGiTgj3Or;F;(J~2F{oBI*8yC;Vin>C^2){Ri zE9CtzBx?bES|O%h|CIlKnHvt@Ub-}N!pEE!^8bb8FOW3!)p*wVf3pt$!3VP-5^`Lx zh$x@Ze`R8)QvPORY2VMOjM*si- literal 0 HcmV?d00001 diff --git a/docs/src/specs/img/interopcall.png b/docs/src/specs/img/interopcall.png new file mode 100644 index 0000000000000000000000000000000000000000..b683122f1363ef86083164056d20dee3ae95f3e7 GIT binary patch literal 135446 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